diff --git a/.travis.yml b/.travis.yml index 3cbcdd243..c1f01697e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,14 +3,13 @@ services: before_script: - echo "USE mysql;\nUPDATE user SET password=PASSWORD('dev') WHERE user='root';\nFLUSH PRIVILEGES;\n" | mysql -u root install: - - rm $TRAVIS_BUILD_DIR/tools/phpunit - - composer require --dev phpunit/phpunit ^5.7 - - $TRAVIS_BUILD_DIR/vendor/bin/phpunit --version - - cp $TRAVIS_BUILD_DIR/vendor/bin/phpunit $TRAVIS_BUILD_DIR/tools + #- rm $TRAVIS_BUILD_DIR/tools/phpunit + #- composer require --dev phpunit/phpunit ~6.5.5 + #- $TRAVIS_BUILD_DIR/vendor/bin/phpunit --version + #- cp $TRAVIS_BUILD_DIR/vendor/bin/phpunit $TRAVIS_BUILD_DIR/tools script: ant build-ci language: php php: - - '5.6' - '7.0' - '7.1' after_failure: "cat /tmp/icehrm.test.log" diff --git a/admin/settings/index.php b/admin/settings/index.php index 7dd667ea6..ce16c9ead 100644 --- a/admin/settings/index.php +++ b/admin/settings/index.php @@ -37,9 +37,11 @@ $moduleBuilder->addModuleOrGroup(new \Classes\ModuleBuilder\ModuleTab( 'SystemSetting','Setting','System','SettingAdapter','{"name":["System:"]}','name',false,$options1 )); -$moduleBuilder->addModuleOrGroup(new \Classes\ModuleBuilder\ModuleTab( - 'EmailSetting','Setting','Email','SettingAdapter','{"name":["Email:"]}','name',false,$options1 -)); +if (!defined('CLOUD_INSTALLATION')) { + $moduleBuilder->addModuleOrGroup(new \Classes\ModuleBuilder\ModuleTab( + 'EmailSetting', 'Setting', 'Email', 'SettingAdapter', '{"name":["Email:"]}', 'name', false, $options1 + )); +} $moduleBuilder->addModuleOrGroup(new \Classes\ModuleBuilder\ModuleTab( 'LeaveSetting','Setting','Leave / PTO','SettingAdapter','{"name":["Leave:"]}','name',false,$options1 )); diff --git a/api/Base.js b/api/Base.js index 758a32fff..5c42c4710 100644 --- a/api/Base.js +++ b/api/Base.js @@ -2461,9 +2461,10 @@ IceHRMBase.method('clearFileElement', function (elementName) { IceHRMBase.method('fixJSON', function (json) { if(this.noJSONRequests == "1"){ - json = json.replace(/"/g,'|'); + json = window.btoa(json); } return json; + }); diff --git a/build.xml b/build.xml index 8bd7b4194..873a8db0b 100644 --- a/build.xml +++ b/build.xml @@ -1,5 +1,5 @@ - + diff --git a/config.base.php b/config.base.php index 573b472da..d8e734953 100644 --- a/config.base.php +++ b/config.base.php @@ -13,10 +13,10 @@ } //Version -define('VERSION', '20.3.0.OS'); -define('CACHE_VALUE', '20.3.0.OS'); -define('VERSION_NUMBER', '2030'); -define('VERSION_DATE', '26/11/2017'); +define('VERSION', '21.0.0.PRO'); +define('CACHE_VALUE', '21.0.0.OS'); +define('VERSION_NUMBER', '2100'); +define('VERSION_DATE', '02/02/2018'); if(!defined('CONTACT_EMAIL')){define('CONTACT_EMAIL','icehrm@gamonoid.com');} if(!defined('KEY_PREFIX')){define('KEY_PREFIX','IceHrm');} diff --git a/header.php b/header.php index 1d2fc7a4a..3e49c3a3c 100644 --- a/header.php +++ b/header.php @@ -20,7 +20,9 @@ Original work Copyright (c) 2012 [Gamonoid Media Pvt. Ltd] Developer: Thilina Hasantha (thilina.hasantha[at]gmail.com / facebook.com/thilinah) */ - +if (!defined('MODULE_NAME')) { + define('MODULE_NAME', $moduleName); +} include 'includes.inc.php'; if(empty($user)){ $actual_link = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]"; diff --git a/lib/Mail/null.php b/lib/Mail/null.php deleted file mode 100644 index f8d58272e..000000000 --- a/lib/Mail/null.php +++ /dev/null @@ -1,84 +0,0 @@ - - * @copyright 2010 Phil Kernick - * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version CVS: $Id: null.php 294747 2010-02-08 08:18:33Z clockwerx $ - * @link http://pear.php.net/package/Mail/ - */ - -/** - * Null implementation of the PEAR Mail:: interface. - * @access public - * @package Mail - * @version $Revision: 294747 $ - */ -class Mail_null extends Mail { - - /** - * Implements Mail_null::send() function. Silently discards all - * mail. - * - * @param mixed $recipients Either a comma-seperated list of recipients - * (RFC822 compliant), or an array of recipients, - * each RFC822 valid. This may contain recipients not - * specified in the headers, for Bcc:, resending - * messages, etc. - * - * @param array $headers The array of headers to send with the mail, in an - * associative array, where the array key is the - * header name (ie, 'Subject'), and the array value - * is the header value (ie, 'test'). The header - * produced from those values would be 'Subject: - * test'. - * - * @param string $body The full text of the message body, including any - * Mime parts, etc. - * - * @return mixed Returns true on success, or a PEAR_Error - * containing a descriptive error message on - * failure. - * @access public - */ - function send($recipients, $headers, $body) - { - return true; - } - -} diff --git a/lib/Mail/sendmail.php b/lib/Mail/sendmail.php deleted file mode 100644 index b056575e9..000000000 --- a/lib/Mail/sendmail.php +++ /dev/null @@ -1,171 +0,0 @@ - | -// +----------------------------------------------------------------------+ - -/** - * Sendmail implementation of the PEAR Mail:: interface. - * @access public - * @package Mail - * @version $Revision: 294744 $ - */ -class Mail_sendmail extends Mail { - - /** - * The location of the sendmail or sendmail wrapper binary on the - * filesystem. - * @var string - */ - var $sendmail_path = '/usr/sbin/sendmail'; - - /** - * Any extra command-line parameters to pass to the sendmail or - * sendmail wrapper binary. - * @var string - */ - var $sendmail_args = '-i'; - - /** - * Constructor. - * - * Instantiates a new Mail_sendmail:: object based on the parameters - * passed in. It looks for the following parameters: - * sendmail_path The location of the sendmail binary on the - * filesystem. Defaults to '/usr/sbin/sendmail'. - * - * sendmail_args Any extra parameters to pass to the sendmail - * or sendmail wrapper binary. - * - * If a parameter is present in the $params array, it replaces the - * default. - * - * @param array $params Hash containing any parameters different from the - * defaults. - * @access public - */ - function Mail_sendmail($params) - { - if (isset($params['sendmail_path'])) { - $this->sendmail_path = $params['sendmail_path']; - } - if (isset($params['sendmail_args'])) { - $this->sendmail_args = $params['sendmail_args']; - } - - /* - * Because we need to pass message headers to the sendmail program on - * the commandline, we can't guarantee the use of the standard "\r\n" - * separator. Instead, we use the system's native line separator. - */ - if (defined('PHP_EOL')) { - $this->sep = PHP_EOL; - } else { - $this->sep = (strpos(PHP_OS, 'WIN') === false) ? "\n" : "\r\n"; - } - } - - /** - * Implements Mail::send() function using the sendmail - * command-line binary. - * - * @param mixed $recipients Either a comma-seperated list of recipients - * (RFC822 compliant), or an array of recipients, - * each RFC822 valid. This may contain recipients not - * specified in the headers, for Bcc:, resending - * messages, etc. - * - * @param array $headers The array of headers to send with the mail, in an - * associative array, where the array key is the - * header name (ie, 'Subject'), and the array value - * is the header value (ie, 'test'). The header - * produced from those values would be 'Subject: - * test'. - * - * @param string $body The full text of the message body, including any - * Mime parts, etc. - * - * @return mixed Returns true on success, or a PEAR_Error - * containing a descriptive error message on - * failure. - * @access public - */ - function send($recipients, $headers, $body) - { - if (!is_array($headers)) { - return PEAR::raiseError('$headers must be an array'); - } - - $result = $this->_sanitizeHeaders($headers); - if (is_a($result, 'PEAR_Error')) { - return $result; - } - - $recipients = $this->parseRecipients($recipients); - if (is_a($recipients, 'PEAR_Error')) { - return $recipients; - } - $recipients = implode(' ', array_map('escapeshellarg', $recipients)); - - $headerElements = $this->prepareHeaders($headers); - if (is_a($headerElements, 'PEAR_Error')) { - return $headerElements; - } - list($from, $text_headers) = $headerElements; - - /* Since few MTAs are going to allow this header to be forged - * unless it's in the MAIL FROM: exchange, we'll use - * Return-Path instead of From: if it's set. */ - if (!empty($headers['Return-Path'])) { - $from = $headers['Return-Path']; - } - - if (!isset($from)) { - return PEAR::raiseError('No from address given.'); - } elseif (strpos($from, ' ') !== false || - strpos($from, ';') !== false || - strpos($from, '&') !== false || - strpos($from, '`') !== false) { - return PEAR::raiseError('From address specified with dangerous characters.'); - } - - $from = escapeshellarg($from); // Security bug #16200 - - $mail = @popen($this->sendmail_path . (!empty($this->sendmail_args) ? ' ' . $this->sendmail_args : '') . " -f$from -- $recipients", 'w'); - if (!$mail) { - return PEAR::raiseError('Failed to open sendmail [' . $this->sendmail_path . '] for execution.'); - } - - // Write the headers following by two newlines: one to end the headers - // section and a second to separate the headers block from the body. - fputs($mail, $text_headers . $this->sep . $this->sep); - - fputs($mail, $body); - $result = pclose($mail); - if (version_compare(phpversion(), '4.2.3') == -1) { - // With older php versions, we need to shift the pclose - // result to get the exit code. - $result = $result >> 8 & 0xFF; - } - - if ($result != 0) { - return PEAR::raiseError('sendmail returned error code ' . $result, - $result); - } - - return true; - } - -} diff --git a/lib/composer/composer.json b/lib/composer/composer.json index c52a16d41..8785efb3f 100644 --- a/lib/composer/composer.json +++ b/lib/composer/composer.json @@ -5,11 +5,13 @@ "gettext/gettext": "4.0.0", "consolidation/robo": "~1", "filp/whoops": "~2.1", - "swiftmailer/swiftmailer": "^6.0" + "swiftmailer/swiftmailer": "^6.0", + "pear/net_smtp": "^1.7", + "pear/mail": "^1.4" }, "require-dev": { - "phpunit/phpunit": "5.5.*" - }, + "phpunit/phpunit": "~6" + }, "autoload": { "psr-4": { "": "../../src" diff --git a/lib/composer/composer.lock b/lib/composer/composer.lock index 0e2f7e0a5..0c73456b3 100644 --- a/lib/composer/composer.lock +++ b/lib/composer/composer.lock @@ -4,35 +4,34 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "hash": "1944dee39b7f749b311e58061b00f233", - "content-hash": "7a06e9dbeabacf6aec7777ff8b9d4891", + "hash": "3a99d8f1889b03e3d3d346d1c53e284a", + "content-hash": "0d37f31f02f0af3f426b668e57096b14", "packages": [ { "name": "consolidation/annotated-command", - "version": "2.1.3", + "version": "2.8.2", "source": { "type": "git", "url": "https://github.com/consolidation/annotated-command.git", - "reference": "6dcc442cbdc2c5145bb19e042d6b5f3979003b9f" + "reference": "e97c38717eae23a2bafcf3f09438290eee6ebeb4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/consolidation/annotated-command/zipball/6dcc442cbdc2c5145bb19e042d6b5f3979003b9f", - "reference": "6dcc442cbdc2c5145bb19e042d6b5f3979003b9f", + "url": "https://api.github.com/repos/consolidation/annotated-command/zipball/e97c38717eae23a2bafcf3f09438290eee6ebeb4", + "reference": "e97c38717eae23a2bafcf3f09438290eee6ebeb4", "shasum": "" }, "require": { - "consolidation/output-formatters": "^3.1.3", + "consolidation/output-formatters": "^3.1.12", "php": ">=5.4.0", - "phpdocumentor/reflection-docblock": "^2.0|^3.0.2", - "psr/log": "~1", - "symfony/console": "^2.8|~3", - "symfony/event-dispatcher": "^2.5|~3", - "symfony/finder": "^2.5|~3" + "psr/log": "^1", + "symfony/console": "^2.8|^3|^4", + "symfony/event-dispatcher": "^2.5|^3|^4", + "symfony/finder": "^2.5|^3|^4" }, "require-dev": { - "phpunit/phpunit": "4.*", - "satooshi/php-coveralls": "^1.0", + "phpunit/phpunit": "^4.8", + "satooshi/php-coveralls": "^1.0.2 | dev-master", "squizlabs/php_codesniffer": "^2.7" }, "type": "library", @@ -57,29 +56,84 @@ } ], "description": "Initialize Symfony Console commands from annotated command class methods.", - "time": "2016-11-19 01:02:43" + "time": "2017-11-29 16:23:23" + }, + { + "name": "consolidation/config", + "version": "1.0.9", + "source": { + "type": "git", + "url": "https://github.com/consolidation/config.git", + "reference": "34ca8d7c1ee60a7b591b10617114cf1210a2e92c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/consolidation/config/zipball/34ca8d7c1ee60a7b591b10617114cf1210a2e92c", + "reference": "34ca8d7c1ee60a7b591b10617114cf1210a2e92c", + "shasum": "" + }, + "require": { + "dflydev/dot-access-data": "^1.1.0", + "grasmash/expander": "^1", + "php": ">=5.4.0" + }, + "require-dev": { + "greg-1-anderson/composer-test-scenarios": "^1", + "phpunit/phpunit": "^4", + "satooshi/php-coveralls": "^1.0", + "squizlabs/php_codesniffer": "2.*", + "symfony/console": "^2.5|^3|^4", + "symfony/yaml": "^2.8.11|^3|^4" + }, + "suggest": { + "symfony/yaml": "Required to use Consolidation\\Config\\Loader\\YamlConfigLoader" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Consolidation\\Config\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Greg Anderson", + "email": "greg.1.anderson@greenknowe.org" + } + ], + "description": "Provide configuration services for a commandline tool.", + "time": "2017-12-22 17:28:19" }, { "name": "consolidation/log", - "version": "1.0.3", + "version": "1.0.5", "source": { "type": "git", "url": "https://github.com/consolidation/log.git", - "reference": "74ba81b4edc585616747cc5c5309ce56fec41254" + "reference": "dbc7c535f319a4a2d5a5077738f8eb7c10df8821" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/consolidation/log/zipball/74ba81b4edc585616747cc5c5309ce56fec41254", - "reference": "74ba81b4edc585616747cc5c5309ce56fec41254", + "url": "https://api.github.com/repos/consolidation/log/zipball/dbc7c535f319a4a2d5a5077738f8eb7c10df8821", + "reference": "dbc7c535f319a4a2d5a5077738f8eb7c10df8821", "shasum": "" }, "require": { "php": ">=5.5.0", "psr/log": "~1.0", - "symfony/console": "~2.5|~3.0" + "symfony/console": "^2.8|^3|^4" }, "require-dev": { "phpunit/phpunit": "4.*", + "satooshi/php-coveralls": "dev-master", "squizlabs/php_codesniffer": "2.*" }, "type": "library", @@ -104,37 +158,37 @@ } ], "description": "Improved Psr-3 / Psr\\Log logger based on Symfony Console components.", - "time": "2016-03-23 23:46:42" + "time": "2017-11-29 01:44:16" }, { "name": "consolidation/output-formatters", - "version": "3.1.3", + "version": "3.1.13", "source": { "type": "git", "url": "https://github.com/consolidation/output-formatters.git", - "reference": "1e6c6ab49904a31c310940ec4efccf5f36e386e4" + "reference": "3188461e965b32148c8fb85261833b2b72d34b8c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/consolidation/output-formatters/zipball/1e6c6ab49904a31c310940ec4efccf5f36e386e4", - "reference": "1e6c6ab49904a31c310940ec4efccf5f36e386e4", + "url": "https://api.github.com/repos/consolidation/output-formatters/zipball/3188461e965b32148c8fb85261833b2b72d34b8c", + "reference": "3188461e965b32148c8fb85261833b2b72d34b8c", "shasum": "" }, "require": { "php": ">=5.4.0", - "symfony/console": "~2.5|~3.0", - "symfony/finder": "~2.5|~3.0", - "victorjonsson/markdowndocs": "^1.3" + "symfony/console": "^2.8|^3|^4", + "symfony/finder": "^2.5|^3|^4" }, "require-dev": { - "phpunit/phpunit": "4.*", - "satooshi/php-coveralls": "^1.0", - "squizlabs/php_codesniffer": "2.*" + "phpunit/phpunit": "^4.8", + "satooshi/php-coveralls": "^1.0.2 | dev-master", + "squizlabs/php_codesniffer": "^2.7", + "victorjonsson/markdowndocs": "^1.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.x-dev" + "dev-master": "3.x-dev" } }, "autoload": { @@ -153,52 +207,54 @@ } ], "description": "Format text by applying transformations provided by plug-in formatters.", - "time": "2016-11-18 23:04:31" + "time": "2017-11-29 15:25:38" }, { "name": "consolidation/robo", - "version": "1.0.4", + "version": "1.2.1", "source": { "type": "git", "url": "https://github.com/consolidation/Robo.git", - "reference": "bfe2246358298d7839114612f84bcfdca3c14066" + "reference": "b6296f1cf1088f1a11b0b819f9e42ef6f00b79a9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/consolidation/Robo/zipball/bfe2246358298d7839114612f84bcfdca3c14066", - "reference": "bfe2246358298d7839114612f84bcfdca3c14066", + "url": "https://api.github.com/repos/consolidation/Robo/zipball/b6296f1cf1088f1a11b0b819f9e42ef6f00b79a9", + "reference": "b6296f1cf1088f1a11b0b819f9e42ef6f00b79a9", "shasum": "" }, "require": { - "consolidation/annotated-command": "^2.0.1", + "consolidation/annotated-command": "^2.8.2", + "consolidation/config": "^1.0.1", "consolidation/log": "~1", - "consolidation/output-formatters": "^2.1.2|~3", + "consolidation/output-formatters": "^3.1.13", + "grasmash/yaml-expander": "^1.3", "league/container": "^2.2", "php": ">=5.5.0", - "symfony/console": "~2.8|~3.0", - "symfony/event-dispatcher": "~2.5|~3.0", - "symfony/filesystem": "~2.5|~3.0", - "symfony/finder": "~2.5|~3.0", - "symfony/process": "~2.5|~3.0" + "symfony/console": "^2.8|^3|^4", + "symfony/event-dispatcher": "^2.5|^3|^4", + "symfony/filesystem": "^2.5|^3|^4", + "symfony/finder": "^2.5|^3|^4", + "symfony/process": "^2.5|^3|^4" }, "replace": { "codegyre/robo": "< 1.0" }, "require-dev": { - "codeception/aspect-mock": "~1", - "codeception/base": "^2.2.6", + "codeception/aspect-mock": "^1|^2.1.1", + "codeception/base": "^2.3.7", "codeception/verify": "^0.3.2", - "henrikbjorn/lurker": "~1", - "natxet/cssmin": "~3", + "greg-1-anderson/composer-test-scenarios": "^1", + "natxet/cssmin": "3.0.4", "patchwork/jsqueeze": "~2", "pear/archive_tar": "^1.4.2", "phpunit/php-code-coverage": "~2|~4", - "satooshi/php-coveralls": "~1", - "squizlabs/php_codesniffer": "~2" + "satooshi/php-coveralls": "^2", + "squizlabs/php_codesniffer": "^2.8" }, "suggest": { "henrikbjorn/lurker": "For monitoring filesystem changes in taskWatch", - "natxet/CssMin": "For minifying JS files in taskMinify", + "natxet/CssMin": "For minifying CSS files in taskMinify", "patchwork/jsqueeze": "For minifying JS files in taskMinify", "pear/archive_tar": "Allows tar archives to be created and extracted in taskPack and taskExtract, respectively." }, @@ -208,13 +264,11 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.x-dev" + "dev-master": "1.x-dev", + "dev-state": "1.x-dev" } }, "autoload": { - "classmap": [ - "scripts/composer/ScriptHandler.php" - ], "psr-4": { "Robo\\": "src" } @@ -230,22 +284,25 @@ } ], "description": "Modern task runner", - "time": "2016-11-15 19:24:36" + "time": "2017-12-29 06:48:35" }, { "name": "container-interop/container-interop", - "version": "1.1.0", + "version": "1.2.0", "source": { "type": "git", "url": "https://github.com/container-interop/container-interop.git", - "reference": "fc08354828f8fd3245f77a66b9e23a6bca48297e" + "reference": "79cbf1341c22ec75643d841642dd5d6acd83bdb8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/container-interop/container-interop/zipball/fc08354828f8fd3245f77a66b9e23a6bca48297e", - "reference": "fc08354828f8fd3245f77a66b9e23a6bca48297e", + "url": "https://api.github.com/repos/container-interop/container-interop/zipball/79cbf1341c22ec75643d841642dd5d6acd83bdb8", + "reference": "79cbf1341c22ec75643d841642dd5d6acd83bdb8", "shasum": "" }, + "require": { + "psr/container": "^1.0" + }, "type": "library", "autoload": { "psr-4": { @@ -257,7 +314,67 @@ "MIT" ], "description": "Promoting the interoperability of container objects (DIC, SL, etc.)", - "time": "2014-12-30 15:22:37" + "homepage": "https://github.com/container-interop/container-interop", + "time": "2017-02-14 19:40:03" + }, + { + "name": "dflydev/dot-access-data", + "version": "v1.1.0", + "source": { + "type": "git", + "url": "https://github.com/dflydev/dflydev-dot-access-data.git", + "reference": "3fbd874921ab2c041e899d044585a2ab9795df8a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/3fbd874921ab2c041e899d044585a2ab9795df8a", + "reference": "3fbd874921ab2c041e899d044585a2ab9795df8a", + "shasum": "" + }, + "require": { + "php": ">=5.3.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "psr-0": { + "Dflydev\\DotAccessData": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Dragonfly Development Inc.", + "email": "info@dflydev.com", + "homepage": "http://dflydev.com" + }, + { + "name": "Beau Simensen", + "email": "beau@dflydev.com", + "homepage": "http://beausimensen.com" + }, + { + "name": "Carlos Frutos", + "email": "carlos@kiwing.it", + "homepage": "https://github.com/cfrutos" + } + ], + "description": "Given a deep data structure, access data by dot notation.", + "homepage": "https://github.com/dflydev/dflydev-dot-access-data", + "keywords": [ + "access", + "data", + "dot", + "notation" + ], + "time": "2017-01-20 21:14:22" }, { "name": "doctrine/lexer", @@ -372,16 +489,16 @@ }, { "name": "filp/whoops", - "version": "2.1.10", + "version": "2.1.14", "source": { "type": "git", "url": "https://github.com/filp/whoops.git", - "reference": "ffbbd2c06c64b08fb47974eed5dbce4ca2bb0eec" + "reference": "c6081b8838686aa04f1e83ba7e91f78b7b2a23e6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filp/whoops/zipball/ffbbd2c06c64b08fb47974eed5dbce4ca2bb0eec", - "reference": "ffbbd2c06c64b08fb47974eed5dbce4ca2bb0eec", + "url": "https://api.github.com/repos/filp/whoops/zipball/c6081b8838686aa04f1e83ba7e91f78b7b2a23e6", + "reference": "c6081b8838686aa04f1e83ba7e91f78b7b2a23e6", "shasum": "" }, "require": { @@ -390,7 +507,7 @@ }, "require-dev": { "mockery/mockery": "0.9.*", - "phpunit/phpunit": "^4.8 || ^5.0", + "phpunit/phpunit": "^4.8.35 || ^5.7", "symfony/var-dumper": "^2.6 || ^3.0" }, "suggest": { @@ -426,10 +543,10 @@ "exception", "handling", "library", - "whoops", - "zf2" + "throwable", + "whoops" ], - "time": "2017-08-03 18:23:40" + "time": "2017-11-23 18:22:44" }, { "name": "gettext/gettext", @@ -493,21 +610,28 @@ }, { "name": "gettext/languages", - "version": "2.1.2", + "version": "2.3.0", "source": { "type": "git", "url": "https://github.com/mlocati/cldr-to-gettext-plural-rules.git", - "reference": "c43ade7e3fb68bcf2379036513dce8d20553d9c8" + "reference": "49c39e51569963cc917a924b489e7025bfb9d8c7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/mlocati/cldr-to-gettext-plural-rules/zipball/c43ade7e3fb68bcf2379036513dce8d20553d9c8", - "reference": "c43ade7e3fb68bcf2379036513dce8d20553d9c8", + "url": "https://api.github.com/repos/mlocati/cldr-to-gettext-plural-rules/zipball/49c39e51569963cc917a924b489e7025bfb9d8c7", + "reference": "49c39e51569963cc917a924b489e7025bfb9d8c7", "shasum": "" }, "require": { "php": ">=5.3" }, + "require-dev": { + "phpunit/phpunit": "^4" + }, + "bin": [ + "bin/export-plural-rules", + "bin/export-plural-rules.php" + ], "type": "library", "autoload": { "psr-4": { @@ -543,28 +667,124 @@ "translations", "unicode" ], - "time": "2015-03-27 11:32:41" + "time": "2017-03-23 17:02:28" + }, + { + "name": "grasmash/expander", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/grasmash/expander.git", + "reference": "95d6037344a4be1dd5f8e0b0b2571a28c397578f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/grasmash/expander/zipball/95d6037344a4be1dd5f8e0b0b2571a28c397578f", + "reference": "95d6037344a4be1dd5f8e0b0b2571a28c397578f", + "shasum": "" + }, + "require": { + "dflydev/dot-access-data": "^1.1.0", + "php": ">=5.4" + }, + "require-dev": { + "greg-1-anderson/composer-test-scenarios": "^1", + "phpunit/phpunit": "^4|^5.5.4", + "satooshi/php-coveralls": "^1.0.2|dev-master", + "squizlabs/php_codesniffer": "^2.7" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Grasmash\\Expander\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Matthew Grasmick" + } + ], + "description": "Expands internal property references in PHP arrays file.", + "time": "2017-12-21 22:14:55" + }, + { + "name": "grasmash/yaml-expander", + "version": "1.4.0", + "source": { + "type": "git", + "url": "https://github.com/grasmash/yaml-expander.git", + "reference": "3f0f6001ae707a24f4d9733958d77d92bf9693b1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/grasmash/yaml-expander/zipball/3f0f6001ae707a24f4d9733958d77d92bf9693b1", + "reference": "3f0f6001ae707a24f4d9733958d77d92bf9693b1", + "shasum": "" + }, + "require": { + "dflydev/dot-access-data": "^1.1.0", + "php": ">=5.4", + "symfony/yaml": "^2.8.11|^3|^4" + }, + "require-dev": { + "greg-1-anderson/composer-test-scenarios": "^1", + "phpunit/phpunit": "^4.8|^5.5.4", + "satooshi/php-coveralls": "^1.0.2|dev-master", + "squizlabs/php_codesniffer": "^2.7" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Grasmash\\YamlExpander\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Matthew Grasmick" + } + ], + "description": "Expands internal property references in a yaml file.", + "time": "2017-12-16 16:06:03" }, { "name": "league/container", - "version": "2.2.0", + "version": "2.4.1", "source": { "type": "git", "url": "https://github.com/thephpleague/container.git", - "reference": "c0e7d947b690891f700dc4967ead7bdb3d6708c1" + "reference": "43f35abd03a12977a60ffd7095efd6a7808488c0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/container/zipball/c0e7d947b690891f700dc4967ead7bdb3d6708c1", - "reference": "c0e7d947b690891f700dc4967ead7bdb3d6708c1", + "url": "https://api.github.com/repos/thephpleague/container/zipball/43f35abd03a12977a60ffd7095efd6a7808488c0", + "reference": "43f35abd03a12977a60ffd7095efd6a7808488c0", "shasum": "" }, "require": { - "container-interop/container-interop": "^1.1", - "php": ">=5.4.0" + "container-interop/container-interop": "^1.2", + "php": "^5.4.0 || ^7.0" }, "provide": { - "container-interop/container-interop-implementation": "^1.1" + "container-interop/container-interop-implementation": "^1.2", + "psr/container-implementation": "^1.0" }, "replace": { "orno/di": "~2.0" @@ -575,7 +795,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.x-dev", + "dev-2.x": "2.x-dev", "dev-1.x": "1.x-dev" } }, @@ -607,7 +827,7 @@ "provider", "service" ], - "time": "2016-03-17 11:07:59" + "time": "2017-05-10 09:20:27" }, { "name": "monolog/monolog", @@ -683,170 +903,391 @@ "time": "2015-03-09 09:58:04" }, { - "name": "phpdocumentor/reflection-common", - "version": "1.0", + "name": "pear/console_getopt", + "version": "v1.4.1", "source": { "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionCommon.git", - "reference": "144c307535e82c8fdcaacbcfc1d6d8eeb896687c" + "url": "https://github.com/pear/Console_Getopt.git", + "reference": "82f05cd1aa3edf34e19aa7c8ca312ce13a6a577f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/144c307535e82c8fdcaacbcfc1d6d8eeb896687c", - "reference": "144c307535e82c8fdcaacbcfc1d6d8eeb896687c", + "url": "https://api.github.com/repos/pear/Console_Getopt/zipball/82f05cd1aa3edf34e19aa7c8ca312ce13a6a577f", + "reference": "82f05cd1aa3edf34e19aa7c8ca312ce13a6a577f", "shasum": "" }, - "require": { - "php": ">=5.5" - }, - "require-dev": { - "phpunit/phpunit": "^4.6" - }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": [ - "src" - ] + "psr-0": { + "Console": "./" } }, "notification-url": "https://packagist.org/downloads/", + "include-path": [ + "./" + ], "license": [ - "MIT" + "BSD-2-Clause" ], "authors": [ { - "name": "Jaap van Otterdijk", - "email": "opensource@ijaap.nl" + "name": "Greg Beaver", + "email": "cellog@php.net", + "role": "Helper" + }, + { + "name": "Andrei Zmievski", + "email": "andrei@php.net", + "role": "Lead" + }, + { + "name": "Stig Bakken", + "email": "stig@php.net", + "role": "Developer" } ], - "description": "Common reflection classes used by phpdocumentor to reflect the code structure", - "homepage": "http://www.phpdoc.org", - "keywords": [ - "FQSEN", - "phpDocumentor", - "phpdoc", - "reflection", - "static analysis" - ], - "time": "2015-12-27 11:43:31" + "description": "More info available on: http://pear.php.net/package/Console_Getopt", + "time": "2015-07-20 20:28:12" }, { - "name": "phpdocumentor/reflection-docblock", - "version": "3.1.1", + "name": "pear/mail", + "version": "v1.4.1", "source": { "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "8331b5efe816ae05461b7ca1e721c01b46bafb3e" + "url": "https://github.com/pear/Mail.git", + "reference": "9609ed5e42ac5b221dfd9af85de005c59d418ee7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/8331b5efe816ae05461b7ca1e721c01b46bafb3e", - "reference": "8331b5efe816ae05461b7ca1e721c01b46bafb3e", + "url": "https://api.github.com/repos/pear/Mail/zipball/9609ed5e42ac5b221dfd9af85de005c59d418ee7", + "reference": "9609ed5e42ac5b221dfd9af85de005c59d418ee7", "shasum": "" }, "require": { - "php": ">=5.5", - "phpdocumentor/reflection-common": "^1.0@dev", - "phpdocumentor/type-resolver": "^0.2.0", - "webmozart/assert": "^1.0" + "pear/pear-core-minimal": "~1.9", + "php": ">=5.2.1" }, "require-dev": { - "mockery/mockery": "^0.9.4", - "phpunit/phpunit": "^4.4" + "pear/pear": "*" + }, + "suggest": { + "pear/net_smtp": "Install optionally via your project's composer.json" }, "type": "library", "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": [ - "src/" - ] + "psr-0": { + "Mail": "./" } }, "notification-url": "https://packagist.org/downloads/", + "include-path": [ + "./" + ], "license": [ - "MIT" + "BSD-2-Clause" ], "authors": [ { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" + "name": "Chuck Hagenbuch", + "email": "chuck@horde.org", + "role": "Lead" + }, + { + "name": "Richard Heyes", + "email": "richard@phpguru.org", + "role": "Developer" + }, + { + "name": "Aleksander Machniak", + "email": "alec@alec.pl", + "role": "Developer" } ], - "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", - "time": "2016-09-30 07:12:33" + "description": "Class that provides multiple interfaces for sending emails.", + "homepage": "http://pear.php.net/package/Mail", + "time": "2017-04-11 17:27:29" }, { - "name": "phpdocumentor/type-resolver", - "version": "0.2", + "name": "pear/net_smtp", + "version": "1.7.3", "source": { "type": "git", - "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "b39c7a5b194f9ed7bd0dd345c751007a41862443" + "url": "https://github.com/pear/Net_SMTP.git", + "reference": "e066e5ee011ae056c03db1a95d210fc09649b477" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/b39c7a5b194f9ed7bd0dd345c751007a41862443", - "reference": "b39c7a5b194f9ed7bd0dd345c751007a41862443", + "url": "https://api.github.com/repos/pear/Net_SMTP/zipball/e066e5ee011ae056c03db1a95d210fc09649b477", + "reference": "e066e5ee011ae056c03db1a95d210fc09649b477", "shasum": "" }, "require": { - "php": ">=5.5", - "phpdocumentor/reflection-common": "^1.0" + "pear/net_socket": "*", + "pear/pear-core-minimal": "*", + "php": ">=5.4.0" }, "require-dev": { - "mockery/mockery": "^0.9.4", - "phpunit/phpunit": "^5.2||^4.8.24" + "phpunit/phpunit": "*" }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } + "suggest": { + "pear/auth_sasl": "Install optionally via your project's composer.json" }, + "type": "library", "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": [ - "src/" - ] + "psr-0": { + "Net": "./" } }, "notification-url": "https://packagist.org/downloads/", + "include-path": [ + "./" + ], "license": [ - "MIT" + "PHP-3.01" ], "authors": [ { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" + "name": "Jon Parise", + "email": "jon@php.net", + "homepage": "http://www.indelible.org", + "role": "Lead" + }, + { + "name": "Chuck Hagenbuch", + "email": "chuck@horde.org", + "role": "Lead" } ], - "time": "2016-06-10 07:14:17" + "description": "An implementation of the SMTP protocol", + "homepage": "http://pear.github.io/Net_SMTP/", + "keywords": [ + "email", + "mail", + "smtp" + ], + "time": "2017-01-14 18:19:55" }, { - "name": "psr/log", - "version": "1.0.2", + "name": "pear/net_socket", + "version": "v1.2.1", "source": { "type": "git", - "url": "https://github.com/php-fig/log.git", - "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d" + "url": "https://github.com/pear/Net_Socket.git", + "reference": "f31d75ac352d49908f8987bbb1496c02a409812a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", - "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", + "url": "https://api.github.com/repos/pear/Net_Socket/zipball/f31d75ac352d49908f8987bbb1496c02a409812a", + "reference": "f31d75ac352d49908f8987bbb1496c02a409812a", "shasum": "" }, "require": { - "php": ">=5.3.0" + "pear/pear_exception": "@stable", + "php": ">=5.4.0" + }, + "require-dev": { + "phpunit/phpunit": "^4" }, "type": "library", - "extra": { + "autoload": { + "psr-0": { + "Net": "./" + } + }, + "notification-url": "https://packagist.org/downloads/", + "include-path": [ + "./" + ], + "license": [ + "BSD-2-Clause" + ], + "authors": [ + { + "name": "Chuck Hagenbuch", + "email": "chuck@horde.org", + "role": "Lead" + }, + { + "name": "Aleksander Machniak", + "email": "alec@php.net", + "role": "Lead" + }, + { + "name": "Stig Bakken", + "email": "stig@php.net", + "role": "Lead" + } + ], + "description": "More info available on: http://pear.php.net/package/Net_Socket", + "time": "2017-04-06 15:16:38" + }, + { + "name": "pear/pear-core-minimal", + "version": "v1.10.3", + "source": { + "type": "git", + "url": "https://github.com/pear/pear-core-minimal.git", + "reference": "070f0b600b2caca2501e2c9b7e553016e4b0d115" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/pear/pear-core-minimal/zipball/070f0b600b2caca2501e2c9b7e553016e4b0d115", + "reference": "070f0b600b2caca2501e2c9b7e553016e4b0d115", + "shasum": "" + }, + "require": { + "pear/console_getopt": "~1.4", + "pear/pear_exception": "~1.0" + }, + "replace": { + "rsky/pear-core-min": "self.version" + }, + "type": "library", + "autoload": { + "psr-0": { + "": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "include-path": [ + "src/" + ], + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Christian Weiske", + "email": "cweiske@php.net", + "role": "Lead" + } + ], + "description": "Minimal set of PEAR core files to be used as composer dependency", + "time": "2017-02-28 16:46:11" + }, + { + "name": "pear/pear_exception", + "version": "v1.0.0", + "source": { + "type": "git", + "url": "https://github.com/pear/PEAR_Exception.git", + "reference": "8c18719fdae000b690e3912be401c76e406dd13b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/pear/PEAR_Exception/zipball/8c18719fdae000b690e3912be401c76e406dd13b", + "reference": "8c18719fdae000b690e3912be401c76e406dd13b", + "shasum": "" + }, + "require": { + "php": ">=4.4.0" + }, + "require-dev": { + "phpunit/phpunit": "*" + }, + "type": "class", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-0": { + "PEAR": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "include-path": [ + "." + ], + "license": [ + "BSD-2-Clause" + ], + "authors": [ + { + "name": "Helgi Thormar", + "email": "dufuz@php.net" + }, + { + "name": "Greg Beaver", + "email": "cellog@php.net" + } + ], + "description": "The PEAR Exception base class.", + "homepage": "https://github.com/pear/PEAR_Exception", + "keywords": [ + "exception" + ], + "time": "2015-02-10 20:07:52" + }, + { + "name": "psr/container", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/container.git", + "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f", + "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Container\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", + "keywords": [ + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" + ], + "time": "2017-02-14 16:28:37" + }, + { + "name": "psr/log", + "version": "1.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", + "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { "branch-alias": { "dev-master": "1.0.x-dev" } @@ -932,37 +1373,45 @@ }, { "name": "symfony/console", - "version": "v3.1.6", + "version": "v3.4.3", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "c99da1119ae61e15de0e4829196b9fba6f73d065" + "reference": "8394c8ef121949e8f858f13bc1e34f05169e4e7d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/c99da1119ae61e15de0e4829196b9fba6f73d065", - "reference": "c99da1119ae61e15de0e4829196b9fba6f73d065", + "url": "https://api.github.com/repos/symfony/console/zipball/8394c8ef121949e8f858f13bc1e34f05169e4e7d", + "reference": "8394c8ef121949e8f858f13bc1e34f05169e4e7d", "shasum": "" }, "require": { - "php": ">=5.5.9", - "symfony/debug": "~2.8|~3.0", + "php": "^5.5.9|>=7.0.8", + "symfony/debug": "~2.8|~3.0|~4.0", "symfony/polyfill-mbstring": "~1.0" }, + "conflict": { + "symfony/dependency-injection": "<3.4", + "symfony/process": "<3.3" + }, "require-dev": { "psr/log": "~1.0", - "symfony/event-dispatcher": "~2.8|~3.0", - "symfony/process": "~2.8|~3.0" + "symfony/config": "~3.3|~4.0", + "symfony/dependency-injection": "~3.4|~4.0", + "symfony/event-dispatcher": "~2.8|~3.0|~4.0", + "symfony/lock": "~3.4|~4.0", + "symfony/process": "~3.3|~4.0" }, "suggest": { "psr/log": "For using the console logger", "symfony/event-dispatcher": "", + "symfony/lock": "", "symfony/process": "" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "3.4-dev" } }, "autoload": { @@ -989,37 +1438,36 @@ ], "description": "Symfony Console Component", "homepage": "https://symfony.com", - "time": "2016-10-06 01:44:51" + "time": "2018-01-03 07:37:34" }, { "name": "symfony/debug", - "version": "v3.1.6", + "version": "v3.4.3", "source": { "type": "git", "url": "https://github.com/symfony/debug.git", - "reference": "e2b3f74a67fc928adc3c1b9027f73e1bc01190a8" + "reference": "603b95dda8b00020e4e6e60dc906e7b715b1c245" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/debug/zipball/e2b3f74a67fc928adc3c1b9027f73e1bc01190a8", - "reference": "e2b3f74a67fc928adc3c1b9027f73e1bc01190a8", + "url": "https://api.github.com/repos/symfony/debug/zipball/603b95dda8b00020e4e6e60dc906e7b715b1c245", + "reference": "603b95dda8b00020e4e6e60dc906e7b715b1c245", "shasum": "" }, "require": { - "php": ">=5.5.9", + "php": "^5.5.9|>=7.0.8", "psr/log": "~1.0" }, "conflict": { "symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2" }, "require-dev": { - "symfony/class-loader": "~2.8|~3.0", - "symfony/http-kernel": "~2.8|~3.0" + "symfony/http-kernel": "~2.8|~3.0|~4.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "3.4-dev" } }, "autoload": { @@ -1046,31 +1494,34 @@ ], "description": "Symfony Debug Component", "homepage": "https://symfony.com", - "time": "2016-09-06 11:02:40" + "time": "2018-01-03 17:14:19" }, { "name": "symfony/event-dispatcher", - "version": "v3.1.6", + "version": "v3.4.3", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "28b0832b2553ffb80cabef6a7a812ff1e670c0bc" + "reference": "26b87b6bca8f8f797331a30b76fdae5342dc26ca" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/28b0832b2553ffb80cabef6a7a812ff1e670c0bc", - "reference": "28b0832b2553ffb80cabef6a7a812ff1e670c0bc", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/26b87b6bca8f8f797331a30b76fdae5342dc26ca", + "reference": "26b87b6bca8f8f797331a30b76fdae5342dc26ca", "shasum": "" }, "require": { - "php": ">=5.5.9" + "php": "^5.5.9|>=7.0.8" + }, + "conflict": { + "symfony/dependency-injection": "<3.3" }, "require-dev": { "psr/log": "~1.0", - "symfony/config": "~2.8|~3.0", - "symfony/dependency-injection": "~2.8|~3.0", - "symfony/expression-language": "~2.8|~3.0", - "symfony/stopwatch": "~2.8|~3.0" + "symfony/config": "~2.8|~3.0|~4.0", + "symfony/dependency-injection": "~3.3|~4.0", + "symfony/expression-language": "~2.8|~3.0|~4.0", + "symfony/stopwatch": "~2.8|~3.0|~4.0" }, "suggest": { "symfony/dependency-injection": "", @@ -1079,7 +1530,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "3.4-dev" } }, "autoload": { @@ -1106,29 +1557,29 @@ ], "description": "Symfony EventDispatcher Component", "homepage": "https://symfony.com", - "time": "2016-10-13 06:28:43" + "time": "2018-01-03 07:37:34" }, { "name": "symfony/filesystem", - "version": "v3.1.6", + "version": "v3.4.3", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "0565b61bf098cb4dc09f4f103f033138ae4f42c6" + "reference": "e078773ad6354af38169faf31c21df0f18ace03d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/0565b61bf098cb4dc09f4f103f033138ae4f42c6", - "reference": "0565b61bf098cb4dc09f4f103f033138ae4f42c6", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/e078773ad6354af38169faf31c21df0f18ace03d", + "reference": "e078773ad6354af38169faf31c21df0f18ace03d", "shasum": "" }, "require": { - "php": ">=5.5.9" + "php": "^5.5.9|>=7.0.8" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "3.4-dev" } }, "autoload": { @@ -1155,29 +1606,29 @@ ], "description": "Symfony Filesystem Component", "homepage": "https://symfony.com", - "time": "2016-10-18 04:30:12" + "time": "2018-01-03 07:37:34" }, { "name": "symfony/finder", - "version": "v3.1.6", + "version": "v3.4.3", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "205b5ffbb518a98ba2ae60a52656c4a31ab00c6f" + "reference": "613e26310776f49a1773b6737c6bd554b8bc8c6f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/205b5ffbb518a98ba2ae60a52656c4a31ab00c6f", - "reference": "205b5ffbb518a98ba2ae60a52656c4a31ab00c6f", + "url": "https://api.github.com/repos/symfony/finder/zipball/613e26310776f49a1773b6737c6bd554b8bc8c6f", + "reference": "613e26310776f49a1773b6737c6bd554b8bc8c6f", "shasum": "" }, "require": { - "php": ">=5.5.9" + "php": "^5.5.9|>=7.0.8" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "3.4-dev" } }, "autoload": { @@ -1204,20 +1655,20 @@ ], "description": "Symfony Finder Component", "homepage": "https://symfony.com", - "time": "2016-09-28 00:11:12" + "time": "2018-01-03 07:37:34" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.3.0", + "version": "v1.6.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "e79d363049d1c2128f133a2667e4f4190904f7f4" + "reference": "2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/e79d363049d1c2128f133a2667e4f4190904f7f4", - "reference": "e79d363049d1c2128f133a2667e4f4190904f7f4", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296", + "reference": "2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296", "shasum": "" }, "require": { @@ -1229,7 +1680,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.3-dev" + "dev-master": "1.6-dev" } }, "autoload": { @@ -1263,29 +1714,29 @@ "portable", "shim" ], - "time": "2016-11-14 01:06:16" + "time": "2017-10-11 12:05:26" }, { "name": "symfony/process", - "version": "v3.1.6", + "version": "v3.4.3", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "66de154ae86b1a07001da9fbffd620206e4faf94" + "reference": "ff69f110c6b33fd33cd2089ba97d6112f44ef0ba" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/66de154ae86b1a07001da9fbffd620206e4faf94", - "reference": "66de154ae86b1a07001da9fbffd620206e4faf94", + "url": "https://api.github.com/repos/symfony/process/zipball/ff69f110c6b33fd33cd2089ba97d6112f44ef0ba", + "reference": "ff69f110c6b33fd33cd2089ba97d6112f44ef0ba", "shasum": "" }, "require": { - "php": ">=5.5.9" + "php": "^5.5.9|>=7.0.8" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "3.4-dev" } }, "autoload": { @@ -1312,7 +1763,65 @@ ], "description": "Symfony Process Component", "homepage": "https://symfony.com", - "time": "2016-09-29 14:13:09" + "time": "2018-01-03 07:37:34" + }, + { + "name": "symfony/yaml", + "version": "v3.4.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/yaml.git", + "reference": "25c192f25721a74084272671f658797d9e0e0146" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/yaml/zipball/25c192f25721a74084272671f658797d9e0e0146", + "reference": "25c192f25721a74084272671f658797d9e0e0146", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8" + }, + "conflict": { + "symfony/console": "<3.4" + }, + "require-dev": { + "symfony/console": "~3.4|~4.0" + }, + "suggest": { + "symfony/console": "For validating YAML files using the lint command" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Yaml\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Yaml Component", + "homepage": "https://symfony.com", + "time": "2018-01-03 07:37:34" }, { "name": "twig/twig", @@ -1363,92 +1872,252 @@ "role": "Project Founder" }, { - "name": "Twig Team", - "homepage": "http://twig.sensiolabs.org/contributors", - "role": "Contributors" + "name": "Twig Team", + "homepage": "http://twig.sensiolabs.org/contributors", + "role": "Contributors" + } + ], + "description": "Twig, the flexible, fast, and secure template language for PHP", + "homepage": "http://twig.sensiolabs.org", + "keywords": [ + "templating" + ], + "time": "2016-01-11 14:02:19" + } + ], + "packages-dev": [ + { + "name": "doctrine/instantiator", + "version": "1.0.5", + "source": { + "type": "git", + "url": "https://github.com/doctrine/instantiator.git", + "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d", + "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d", + "shasum": "" + }, + "require": { + "php": ">=5.3,<8.0-DEV" + }, + "require-dev": { + "athletic/athletic": "~0.1.8", + "ext-pdo": "*", + "ext-phar": "*", + "phpunit/phpunit": "~4.0", + "squizlabs/php_codesniffer": "~2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "homepage": "http://ocramius.github.com/" + } + ], + "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", + "homepage": "https://github.com/doctrine/instantiator", + "keywords": [ + "constructor", + "instantiate" + ], + "time": "2015-06-14 21:17:01" + }, + { + "name": "myclabs/deep-copy", + "version": "1.7.0", + "source": { + "type": "git", + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e", + "reference": "3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0" + }, + "require-dev": { + "doctrine/collections": "^1.0", + "doctrine/common": "^2.6", + "phpunit/phpunit": "^4.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + }, + "files": [ + "src/DeepCopy/deep_copy.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Create deep copies (clones) of your objects", + "keywords": [ + "clone", + "copy", + "duplicate", + "object", + "object graph" + ], + "time": "2017-10-19 19:58:43" + }, + { + "name": "phar-io/manifest", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/phar-io/manifest.git", + "reference": "2df402786ab5368a0169091f61a7c1e0eb6852d0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/2df402786ab5368a0169091f61a7c1e0eb6852d0", + "reference": "2df402786ab5368a0169091f61a7c1e0eb6852d0", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-phar": "*", + "phar-io/version": "^1.0.1", + "php": "^5.6 || ^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" } ], - "description": "Twig, the flexible, fast, and secure template language for PHP", - "homepage": "http://twig.sensiolabs.org", - "keywords": [ - "templating" - ], - "time": "2016-01-11 14:02:19" + "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", + "time": "2017-03-05 18:14:27" }, { - "name": "victorjonsson/markdowndocs", - "version": "1.3.7", + "name": "phar-io/version", + "version": "1.0.1", "source": { "type": "git", - "url": "https://github.com/victorjonsson/PHP-Markdown-Documentation-Generator.git", - "reference": "a8244617cdce4804cd94ea508c82e8d7e29a273a" + "url": "https://github.com/phar-io/version.git", + "reference": "a70c0ced4be299a63d32fa96d9281d03e94041df" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/victorjonsson/PHP-Markdown-Documentation-Generator/zipball/a8244617cdce4804cd94ea508c82e8d7e29a273a", - "reference": "a8244617cdce4804cd94ea508c82e8d7e29a273a", + "url": "https://api.github.com/repos/phar-io/version/zipball/a70c0ced4be299a63d32fa96d9281d03e94041df", + "reference": "a70c0ced4be299a63d32fa96d9281d03e94041df", "shasum": "" }, "require": { - "php": ">=5.5.0", - "symfony/console": ">=2.6" - }, - "require-dev": { - "phpunit/phpunit": "3.7.23" + "php": "^5.6 || ^7.0" }, - "bin": [ - "bin/phpdoc-md" - ], "type": "library", "autoload": { - "psr-0": { - "PHPDocsMD": "src/" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Victor Jonsson", - "email": "kontakt@victorjonsson.se" + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" } ], - "description": "Command line tool for generating markdown-formatted class documentation", - "homepage": "https://github.com/victorjonsson/PHP-Markdown-Documentation-Generator", - "time": "2016-10-11 21:10:19" + "description": "Library for handling version information and constraints", + "time": "2017-03-05 17:38:23" }, { - "name": "webmozart/assert", - "version": "1.1.0", + "name": "phpdocumentor/reflection-common", + "version": "1.0.1", "source": { "type": "git", - "url": "https://github.com/webmozart/assert.git", - "reference": "bb2d123231c095735130cc8f6d31385a44c7b308" + "url": "https://github.com/phpDocumentor/ReflectionCommon.git", + "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozart/assert/zipball/bb2d123231c095735130cc8f6d31385a44c7b308", - "reference": "bb2d123231c095735130cc8f6d31385a44c7b308", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", + "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", "shasum": "" }, "require": { - "php": "^5.3.3|^7.0" + "php": ">=5.5" }, "require-dev": { - "phpunit/phpunit": "^4.6", - "sebastian/version": "^1.0.1" + "phpunit/phpunit": "^4.6" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.2-dev" + "dev-master": "1.0.x-dev" } }, "autoload": { "psr-4": { - "Webmozart\\Assert\\": "src/" + "phpDocumentor\\Reflection\\": [ + "src" + ] } }, "notification-url": "https://packagist.org/downloads/", @@ -1457,53 +2126,57 @@ ], "authors": [ { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" + "name": "Jaap van Otterdijk", + "email": "opensource@ijaap.nl" } ], - "description": "Assertions to validate method input/output with nice error messages.", + "description": "Common reflection classes used by phpdocumentor to reflect the code structure", + "homepage": "http://www.phpdoc.org", "keywords": [ - "assert", - "check", - "validate" + "FQSEN", + "phpDocumentor", + "phpdoc", + "reflection", + "static analysis" ], - "time": "2016-08-09 15:02:57" - } - ], - "packages-dev": [ + "time": "2017-09-11 18:02:19" + }, { - "name": "doctrine/instantiator", - "version": "1.0.5", + "name": "phpdocumentor/reflection-docblock", + "version": "4.2.0", "source": { "type": "git", - "url": "https://github.com/doctrine/instantiator.git", - "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d" + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "66465776cfc249844bde6d117abff1d22e06c2da" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d", - "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/66465776cfc249844bde6d117abff1d22e06c2da", + "reference": "66465776cfc249844bde6d117abff1d22e06c2da", "shasum": "" }, "require": { - "php": ">=5.3,<8.0-DEV" + "php": "^7.0", + "phpdocumentor/reflection-common": "^1.0.0", + "phpdocumentor/type-resolver": "^0.4.0", + "webmozart/assert": "^1.0" }, "require-dev": { - "athletic/athletic": "~0.1.8", - "ext-pdo": "*", - "ext-phar": "*", - "phpunit/phpunit": "~4.0", - "squizlabs/php_codesniffer": "~2.0" + "doctrine/instantiator": "~1.0.5", + "mockery/mockery": "^1.0", + "phpunit/phpunit": "^6.4" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "4.x-dev" } }, "autoload": { "psr-4": { - "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" + "phpDocumentor\\Reflection\\": [ + "src/" + ] } }, "notification-url": "https://packagist.org/downloads/", @@ -1512,89 +2185,89 @@ ], "authors": [ { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com", - "homepage": "http://ocramius.github.com/" + "name": "Mike van Riel", + "email": "me@mikevanriel.com" } ], - "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", - "homepage": "https://github.com/doctrine/instantiator", - "keywords": [ - "constructor", - "instantiate" - ], - "time": "2015-06-14 21:17:01" + "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", + "time": "2017-11-27 17:38:31" }, { - "name": "myclabs/deep-copy", - "version": "1.5.5", + "name": "phpdocumentor/type-resolver", + "version": "0.4.0", "source": { "type": "git", - "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "399c1f9781e222f6eb6cc238796f5200d1b7f108" + "url": "https://github.com/phpDocumentor/TypeResolver.git", + "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/399c1f9781e222f6eb6cc238796f5200d1b7f108", - "reference": "399c1f9781e222f6eb6cc238796f5200d1b7f108", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/9c977708995954784726e25d0cd1dddf4e65b0f7", + "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7", "shasum": "" }, "require": { - "php": ">=5.4.0" + "php": "^5.5 || ^7.0", + "phpdocumentor/reflection-common": "^1.0" }, "require-dev": { - "doctrine/collections": "1.*", - "phpunit/phpunit": "~4.1" + "mockery/mockery": "^0.9.4", + "phpunit/phpunit": "^5.2||^4.8.24" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, "autoload": { "psr-4": { - "DeepCopy\\": "src/DeepCopy/" + "phpDocumentor\\Reflection\\": [ + "src/" + ] } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], - "description": "Create deep copies (clones) of your objects", - "homepage": "https://github.com/myclabs/DeepCopy", - "keywords": [ - "clone", - "copy", - "duplicate", - "object", - "object graph" + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + } ], - "time": "2016-10-31 17:19:45" + "time": "2017-07-14 14:27:02" }, { "name": "phpspec/prophecy", - "version": "v1.6.1", + "version": "1.7.3", "source": { "type": "git", "url": "https://github.com/phpspec/prophecy.git", - "reference": "58a8137754bc24b25740d4281399a4a3596058e0" + "reference": "e4ed002c67da8eceb0eb8ddb8b3847bb53c5c2bf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/58a8137754bc24b25740d4281399a4a3596058e0", - "reference": "58a8137754bc24b25740d4281399a4a3596058e0", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/e4ed002c67da8eceb0eb8ddb8b3847bb53c5c2bf", + "reference": "e4ed002c67da8eceb0eb8ddb8b3847bb53c5c2bf", "shasum": "" }, "require": { "doctrine/instantiator": "^1.0.2", "php": "^5.3|^7.0", - "phpdocumentor/reflection-docblock": "^2.0|^3.0.2", - "sebastian/comparator": "^1.1", - "sebastian/recursion-context": "^1.0" + "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0", + "sebastian/comparator": "^1.1|^2.0", + "sebastian/recursion-context": "^1.0|^2.0|^3.0" }, "require-dev": { - "phpspec/phpspec": "^2.0" + "phpspec/phpspec": "^2.5|^3.2", + "phpunit/phpunit": "^4.8.35 || ^5.7" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.6.x-dev" + "dev-master": "1.7.x-dev" } }, "autoload": { @@ -1627,44 +2300,44 @@ "spy", "stub" ], - "time": "2016-06-07 08:13:47" + "time": "2017-11-24 13:59:53" }, { "name": "phpunit/php-code-coverage", - "version": "4.0.2", + "version": "5.3.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "6cba06ff75a1a63a71033e1a01b89056f3af1e8d" + "reference": "661f34d0bd3f1a7225ef491a70a020ad23a057a1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/6cba06ff75a1a63a71033e1a01b89056f3af1e8d", - "reference": "6cba06ff75a1a63a71033e1a01b89056f3af1e8d", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/661f34d0bd3f1a7225ef491a70a020ad23a057a1", + "reference": "661f34d0bd3f1a7225ef491a70a020ad23a057a1", "shasum": "" }, "require": { - "php": "^5.6 || ^7.0", - "phpunit/php-file-iterator": "~1.3", - "phpunit/php-text-template": "~1.2", - "phpunit/php-token-stream": "^1.4.2", - "sebastian/code-unit-reverse-lookup": "~1.0", - "sebastian/environment": "^1.3.2 || ^2.0", - "sebastian/version": "~1.0|~2.0" + "ext-dom": "*", + "ext-xmlwriter": "*", + "php": "^7.0", + "phpunit/php-file-iterator": "^1.4.2", + "phpunit/php-text-template": "^1.2.1", + "phpunit/php-token-stream": "^2.0.1", + "sebastian/code-unit-reverse-lookup": "^1.0.1", + "sebastian/environment": "^3.0", + "sebastian/version": "^2.0.1", + "theseer/tokenizer": "^1.1" }, "require-dev": { - "ext-xdebug": ">=2.1.4", - "phpunit/phpunit": "^5.4" + "phpunit/phpunit": "^6.0" }, "suggest": { - "ext-dom": "*", - "ext-xdebug": ">=2.4.0", - "ext-xmlwriter": "*" + "ext-xdebug": "^2.5.5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0.x-dev" + "dev-master": "5.3.x-dev" } }, "autoload": { @@ -1679,7 +2352,7 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", + "email": "sebastian@phpunit.de", "role": "lead" } ], @@ -1690,20 +2363,20 @@ "testing", "xunit" ], - "time": "2016-11-01 05:06:24" + "time": "2017-12-06 09:29:45" }, { "name": "phpunit/php-file-iterator", - "version": "1.4.1", + "version": "1.4.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "6150bf2c35d3fc379e50c7602b75caceaa39dbf0" + "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/6150bf2c35d3fc379e50c7602b75caceaa39dbf0", - "reference": "6150bf2c35d3fc379e50c7602b75caceaa39dbf0", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/730b01bc3e867237eaac355e06a36b85dd93a8b4", + "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4", "shasum": "" }, "require": { @@ -1737,7 +2410,7 @@ "filesystem", "iterator" ], - "time": "2015-06-21 13:08:43" + "time": "2017-11-27 13:52:08" }, { "name": "phpunit/php-text-template", @@ -1782,25 +2455,30 @@ }, { "name": "phpunit/php-timer", - "version": "1.0.8", + "version": "1.0.9", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "38e9124049cf1a164f1e4537caf19c99bf1eb260" + "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/38e9124049cf1a164f1e4537caf19c99bf1eb260", - "reference": "38e9124049cf1a164f1e4537caf19c99bf1eb260", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", + "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": "^5.3.3 || ^7.0" }, "require-dev": { - "phpunit/phpunit": "~4|~5" + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, "autoload": { "classmap": [ "src/" @@ -1822,33 +2500,33 @@ "keywords": [ "timer" ], - "time": "2016-05-12 18:03:57" + "time": "2017-02-26 11:10:40" }, { "name": "phpunit/php-token-stream", - "version": "1.4.9", + "version": "2.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-token-stream.git", - "reference": "3b402f65a4cc90abf6e1104e388b896ce209631b" + "reference": "791198a2c6254db10131eecfe8c06670700904db" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/3b402f65a4cc90abf6e1104e388b896ce209631b", - "reference": "3b402f65a4cc90abf6e1104e388b896ce209631b", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/791198a2c6254db10131eecfe8c06670700904db", + "reference": "791198a2c6254db10131eecfe8c06670700904db", "shasum": "" }, "require": { "ext-tokenizer": "*", - "php": ">=5.3.3" + "php": "^7.0" }, "require-dev": { - "phpunit/phpunit": "~4.2" + "phpunit/phpunit": "^6.2.4" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.4-dev" + "dev-master": "2.0-dev" } }, "autoload": { @@ -1871,20 +2549,20 @@ "keywords": [ "tokenizer" ], - "time": "2016-11-15 14:06:22" + "time": "2017-11-27 05:48:46" }, { "name": "phpunit/phpunit", - "version": "5.5.7", + "version": "6.5.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "3f67cee782c9abfaee5e32fd2f57cdd54bc257ba" + "reference": "83d27937a310f2984fd575686138597147bdc7df" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/3f67cee782c9abfaee5e32fd2f57cdd54bc257ba", - "reference": "3f67cee782c9abfaee5e32fd2f57cdd54bc257ba", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/83d27937a310f2984fd575686138597147bdc7df", + "reference": "83d27937a310f2984fd575686138597147bdc7df", "shasum": "" }, "require": { @@ -1893,34 +2571,35 @@ "ext-libxml": "*", "ext-mbstring": "*", "ext-xml": "*", - "myclabs/deep-copy": "~1.3", - "php": "^5.6 || ^7.0", - "phpspec/prophecy": "^1.3.1", - "phpunit/php-code-coverage": "^4.0.1", - "phpunit/php-file-iterator": "~1.4", - "phpunit/php-text-template": "~1.2", - "phpunit/php-timer": "^1.0.6", - "phpunit/phpunit-mock-objects": "^3.2", - "sebastian/comparator": "~1.1", - "sebastian/diff": "~1.2", - "sebastian/environment": "^1.3 || ^2.0", - "sebastian/exporter": "~1.2", - "sebastian/global-state": "~1.0", - "sebastian/object-enumerator": "~1.0", - "sebastian/resource-operations": "~1.0", - "sebastian/version": "~1.0|~2.0", - "symfony/yaml": "~2.1|~3.0" + "myclabs/deep-copy": "^1.6.1", + "phar-io/manifest": "^1.0.1", + "phar-io/version": "^1.0", + "php": "^7.0", + "phpspec/prophecy": "^1.7", + "phpunit/php-code-coverage": "^5.3", + "phpunit/php-file-iterator": "^1.4.3", + "phpunit/php-text-template": "^1.2.1", + "phpunit/php-timer": "^1.0.9", + "phpunit/phpunit-mock-objects": "^5.0.5", + "sebastian/comparator": "^2.1", + "sebastian/diff": "^2.0", + "sebastian/environment": "^3.1", + "sebastian/exporter": "^3.1", + "sebastian/global-state": "^2.0", + "sebastian/object-enumerator": "^3.0.3", + "sebastian/resource-operations": "^1.0", + "sebastian/version": "^2.0.1" }, "conflict": { - "phpdocumentor/reflection-docblock": "3.0.2" + "phpdocumentor/reflection-docblock": "3.0.2", + "phpunit/dbunit": "<3.0" }, "require-dev": { "ext-pdo": "*" }, "suggest": { - "ext-tidy": "*", "ext-xdebug": "*", - "phpunit/php-invoker": "~1.1" + "phpunit/php-invoker": "^1.1" }, "bin": [ "phpunit" @@ -1928,7 +2607,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "5.5.x-dev" + "dev-master": "6.5.x-dev" } }, "autoload": { @@ -1954,33 +2633,33 @@ "testing", "xunit" ], - "time": "2016-10-03 13:04:15" + "time": "2017-12-17 06:31:19" }, { "name": "phpunit/phpunit-mock-objects", - "version": "3.4.1", + "version": "5.0.6", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", - "reference": "45026c8383187ad1dcb14fbfec77dced265b9cfc" + "reference": "33fd41a76e746b8fa96d00b49a23dadfa8334cdf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/45026c8383187ad1dcb14fbfec77dced265b9cfc", - "reference": "45026c8383187ad1dcb14fbfec77dced265b9cfc", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/33fd41a76e746b8fa96d00b49a23dadfa8334cdf", + "reference": "33fd41a76e746b8fa96d00b49a23dadfa8334cdf", "shasum": "" }, "require": { - "doctrine/instantiator": "^1.0.2", - "php": "^5.6 || ^7.0", - "phpunit/php-text-template": "^1.2", - "sebastian/exporter": "^1.2 || ^2.0" + "doctrine/instantiator": "^1.0.5", + "php": "^7.0", + "phpunit/php-text-template": "^1.2.1", + "sebastian/exporter": "^3.1" }, "conflict": { - "phpunit/phpunit": "<5.4.0" + "phpunit/phpunit": "<6.0" }, "require-dev": { - "phpunit/phpunit": "^5.4" + "phpunit/phpunit": "^6.5" }, "suggest": { "ext-soap": "*" @@ -1988,7 +2667,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.2.x-dev" + "dev-master": "5.0.x-dev" } }, "autoload": { @@ -2003,7 +2682,7 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", + "email": "sebastian@phpunit.de", "role": "lead" } ], @@ -2013,27 +2692,27 @@ "mock", "xunit" ], - "time": "2016-11-19 09:07:46" + "time": "2018-01-06 05:45:45" }, { "name": "sebastian/code-unit-reverse-lookup", - "version": "1.0.0", + "version": "1.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", - "reference": "c36f5e7cfce482fde5bf8d10d41a53591e0198fe" + "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/c36f5e7cfce482fde5bf8d10d41a53591e0198fe", - "reference": "c36f5e7cfce482fde5bf8d10d41a53591e0198fe", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", + "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", "shasum": "" }, "require": { - "php": ">=5.6" + "php": "^5.6 || ^7.0" }, "require-dev": { - "phpunit/phpunit": "~5" + "phpunit/phpunit": "^5.7 || ^6.0" }, "type": "library", "extra": { @@ -2058,34 +2737,34 @@ ], "description": "Looks up which function or method a line of code belongs to", "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", - "time": "2016-02-13 06:45:14" + "time": "2017-03-04 06:30:41" }, { "name": "sebastian/comparator", - "version": "1.2.2", + "version": "2.1.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "6a1ed12e8b2409076ab22e3897126211ff8b1f7f" + "reference": "b11c729f95109b56a0fe9650c6a63a0fcd8c439f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/6a1ed12e8b2409076ab22e3897126211ff8b1f7f", - "reference": "6a1ed12e8b2409076ab22e3897126211ff8b1f7f", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/b11c729f95109b56a0fe9650c6a63a0fcd8c439f", + "reference": "b11c729f95109b56a0fe9650c6a63a0fcd8c439f", "shasum": "" }, "require": { - "php": ">=5.3.3", - "sebastian/diff": "~1.2", - "sebastian/exporter": "~1.2 || ~2.0" + "php": "^7.0", + "sebastian/diff": "^2.0", + "sebastian/exporter": "^3.1" }, "require-dev": { - "phpunit/phpunit": "~4.4" + "phpunit/phpunit": "^6.4" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.2.x-dev" + "dev-master": "2.1.x-dev" } }, "autoload": { @@ -2116,38 +2795,38 @@ } ], "description": "Provides the functionality to compare PHP values for equality", - "homepage": "http://www.github.com/sebastianbergmann/comparator", + "homepage": "https://github.com/sebastianbergmann/comparator", "keywords": [ "comparator", "compare", "equality" ], - "time": "2016-11-19 09:18:40" + "time": "2017-12-22 14:50:35" }, { "name": "sebastian/diff", - "version": "1.4.1", + "version": "2.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "13edfd8706462032c2f52b4b862974dd46b71c9e" + "reference": "347c1d8b49c5c3ee30c7040ea6fc446790e6bddd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/13edfd8706462032c2f52b4b862974dd46b71c9e", - "reference": "13edfd8706462032c2f52b4b862974dd46b71c9e", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/347c1d8b49c5c3ee30c7040ea6fc446790e6bddd", + "reference": "347c1d8b49c5c3ee30c7040ea6fc446790e6bddd", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": "^7.0" }, "require-dev": { - "phpunit/phpunit": "~4.8" + "phpunit/phpunit": "^6.2" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.4-dev" + "dev-master": "2.0-dev" } }, "autoload": { @@ -2174,32 +2853,32 @@ "keywords": [ "diff" ], - "time": "2015-12-08 07:14:41" + "time": "2017-08-03 08:09:46" }, { "name": "sebastian/environment", - "version": "1.3.8", + "version": "3.1.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "be2c607e43ce4c89ecd60e75c6a85c126e754aea" + "reference": "cd0871b3975fb7fc44d11314fd1ee20925fce4f5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/be2c607e43ce4c89ecd60e75c6a85c126e754aea", - "reference": "be2c607e43ce4c89ecd60e75c6a85c126e754aea", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/cd0871b3975fb7fc44d11314fd1ee20925fce4f5", + "reference": "cd0871b3975fb7fc44d11314fd1ee20925fce4f5", "shasum": "" }, "require": { - "php": "^5.3.3 || ^7.0" + "php": "^7.0" }, "require-dev": { - "phpunit/phpunit": "^4.8 || ^5.0" + "phpunit/phpunit": "^6.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.3.x-dev" + "dev-master": "3.1.x-dev" } }, "autoload": { @@ -2224,34 +2903,34 @@ "environment", "hhvm" ], - "time": "2016-08-18 05:49:44" + "time": "2017-07-01 08:51:00" }, { "name": "sebastian/exporter", - "version": "1.2.2", + "version": "3.1.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4" + "reference": "234199f4528de6d12aaa58b612e98f7d36adb937" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/42c4c2eec485ee3e159ec9884f95b431287edde4", - "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/234199f4528de6d12aaa58b612e98f7d36adb937", + "reference": "234199f4528de6d12aaa58b612e98f7d36adb937", "shasum": "" }, "require": { - "php": ">=5.3.3", - "sebastian/recursion-context": "~1.0" + "php": "^7.0", + "sebastian/recursion-context": "^3.0" }, "require-dev": { "ext-mbstring": "*", - "phpunit/phpunit": "~4.4" + "phpunit/phpunit": "^6.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.3.x-dev" + "dev-master": "3.1.x-dev" } }, "autoload": { @@ -2291,27 +2970,27 @@ "export", "exporter" ], - "time": "2016-06-17 09:04:28" + "time": "2017-04-03 13:19:02" }, { "name": "sebastian/global-state", - "version": "1.1.1", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4" + "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bc37d50fea7d017d3d340f230811c9f1d7280af4", - "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4", + "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": "^7.0" }, "require-dev": { - "phpunit/phpunit": "~4.2" + "phpunit/phpunit": "^6.0" }, "suggest": { "ext-uopz": "*" @@ -2319,7 +2998,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-master": "2.0-dev" } }, "autoload": { @@ -2342,33 +3021,34 @@ "keywords": [ "global state" ], - "time": "2015-10-12 03:26:01" + "time": "2017-04-27 15:39:26" }, { "name": "sebastian/object-enumerator", - "version": "1.0.0", + "version": "3.0.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "d4ca2fb70344987502567bc50081c03e6192fb26" + "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/d4ca2fb70344987502567bc50081c03e6192fb26", - "reference": "d4ca2fb70344987502567bc50081c03e6192fb26", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/7cfd9e65d11ffb5af41198476395774d4c8a84c5", + "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5", "shasum": "" }, "require": { - "php": ">=5.6", - "sebastian/recursion-context": "~1.0" + "php": "^7.0", + "sebastian/object-reflector": "^1.1.1", + "sebastian/recursion-context": "^3.0" }, "require-dev": { - "phpunit/phpunit": "~5" + "phpunit/phpunit": "^6.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "3.0.x-dev" } }, "autoload": { @@ -2388,32 +3068,77 @@ ], "description": "Traverses array structures and object graphs to enumerate all referenced objects", "homepage": "https://github.com/sebastianbergmann/object-enumerator/", - "time": "2016-01-28 13:25:10" + "time": "2017-08-03 12:35:26" + }, + { + "name": "sebastian/object-reflector", + "version": "1.1.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-reflector.git", + "reference": "773f97c67f28de00d397be301821b06708fca0be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/773f97c67f28de00d397be301821b06708fca0be", + "reference": "773f97c67f28de00d397be301821b06708fca0be", + "shasum": "" + }, + "require": { + "php": "^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Allows reflection of object attributes, including inherited and non-public ones", + "homepage": "https://github.com/sebastianbergmann/object-reflector/", + "time": "2017-03-29 09:07:27" }, { "name": "sebastian/recursion-context", - "version": "1.0.4", + "version": "3.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "938df7a6478e72795e5f8266cff24d06e3136f2e" + "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/938df7a6478e72795e5f8266cff24d06e3136f2e", - "reference": "938df7a6478e72795e5f8266cff24d06e3136f2e", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8", + "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": "^7.0" }, "require-dev": { - "phpunit/phpunit": "~4.4" + "phpunit/phpunit": "^6.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "3.0.x-dev" } }, "autoload": { @@ -2441,7 +3166,7 @@ ], "description": "Provides functionality to recursively process PHP variables", "homepage": "http://www.github.com/sebastianbergmann/recursion-context", - "time": "2016-11-15 06:55:36" + "time": "2017-03-03 06:23:57" }, { "name": "sebastian/resource-operations", @@ -2487,16 +3212,16 @@ }, { "name": "sebastian/version", - "version": "2.0.0", + "version": "2.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/version.git", - "reference": "c829badbd8fdf16a0bad8aa7fa7971c029f1b9c5" + "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c829badbd8fdf16a0bad8aa7fa7971c029f1b9c5", - "reference": "c829badbd8fdf16a0bad8aa7fa7971c029f1b9c5", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019", + "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019", "shasum": "" }, "require": { @@ -2526,38 +3251,79 @@ ], "description": "Library that helps with managing the version number of Git-hosted PHP projects", "homepage": "https://github.com/sebastianbergmann/version", - "time": "2016-02-04 12:56:52" + "time": "2016-10-03 07:35:21" }, { - "name": "symfony/yaml", - "version": "v3.1.6", + "name": "theseer/tokenizer", + "version": "1.1.0", "source": { "type": "git", - "url": "https://github.com/symfony/yaml.git", - "reference": "7ff51b06c6c3d5cc6686df69004a42c69df09e27" + "url": "https://github.com/theseer/tokenizer.git", + "reference": "cb2f008f3f05af2893a87208fe6a6c4985483f8b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/cb2f008f3f05af2893a87208fe6a6c4985483f8b", + "reference": "cb2f008f3f05af2893a87208fe6a6c4985483f8b", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": "^7.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + } + ], + "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", + "time": "2017-04-07 12:08:54" + }, + { + "name": "webmozart/assert", + "version": "1.2.0", + "source": { + "type": "git", + "url": "https://github.com/webmozart/assert.git", + "reference": "2db61e59ff05fe5126d152bd0655c9ea113e550f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/7ff51b06c6c3d5cc6686df69004a42c69df09e27", - "reference": "7ff51b06c6c3d5cc6686df69004a42c69df09e27", + "url": "https://api.github.com/repos/webmozart/assert/zipball/2db61e59ff05fe5126d152bd0655c9ea113e550f", + "reference": "2db61e59ff05fe5126d152bd0655c9ea113e550f", "shasum": "" }, "require": { - "php": ">=5.5.9" + "php": "^5.3.3 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.6", + "sebastian/version": "^1.0.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "1.3-dev" } }, "autoload": { "psr-4": { - "Symfony\\Component\\Yaml\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] + "Webmozart\\Assert\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -2565,17 +3331,17 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" } ], - "description": "Symfony Yaml Component", - "homepage": "https://symfony.com", - "time": "2016-10-24 18:41:13" + "description": "Assertions to validate method input/output with nice error messages.", + "keywords": [ + "assert", + "check", + "validate" + ], + "time": "2016-11-23 20:04:58" } ], "aliases": [], diff --git a/lib/composer/composer.phar b/lib/composer/composer.phar index 63cb0dfb9..086bc6812 100644 Binary files a/lib/composer/composer.phar and b/lib/composer/composer.phar differ diff --git a/lib/composer/vendor/autoload.php b/lib/composer/vendor/autoload.php index 382455cf7..bc3afe3d4 100644 --- a/lib/composer/vendor/autoload.php +++ b/lib/composer/vendor/autoload.php @@ -4,4 +4,4 @@ require_once __DIR__ . '/composer' . '/autoload_real.php'; -return ComposerAutoloaderInita01cedac3fb3abb6b395843685a2b9da::getLoader(); +return ComposerAutoloaderInit6d4a28cd96a5bc5d5b97781c062572d9::getLoader(); diff --git a/lib/composer/vendor/bin/export-plural-rules b/lib/composer/vendor/bin/export-plural-rules new file mode 120000 index 000000000..d727a0516 --- /dev/null +++ b/lib/composer/vendor/bin/export-plural-rules @@ -0,0 +1 @@ +../gettext/languages/bin/export-plural-rules \ No newline at end of file diff --git a/lib/composer/vendor/bin/export-plural-rules.php b/lib/composer/vendor/bin/export-plural-rules.php new file mode 120000 index 000000000..0e5652e9b --- /dev/null +++ b/lib/composer/vendor/bin/export-plural-rules.php @@ -0,0 +1 @@ +../gettext/languages/bin/export-plural-rules.php \ No newline at end of file diff --git a/lib/composer/vendor/bin/phpdoc-md b/lib/composer/vendor/bin/phpdoc-md deleted file mode 100755 index 280a8c086..000000000 --- a/lib/composer/vendor/bin/phpdoc-md +++ /dev/null @@ -1,17 +0,0 @@ -#!/usr/bin/env php -run(); -exit($code); - diff --git a/lib/composer/vendor/bin/phpunit b/lib/composer/vendor/bin/phpunit deleted file mode 100755 index 704e54c2d..000000000 --- a/lib/composer/vendor/bin/phpunit +++ /dev/null @@ -1,47 +0,0 @@ -#!/usr/bin/env php - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -if (version_compare('5.6.0', PHP_VERSION, '>')) { - fwrite( - STDERR, - 'This version of PHPUnit requires PHP 5.6; using the latest version of PHP is highly recommended.' . PHP_EOL - ); - - die(1); -} - -if (!ini_get('date.timezone')) { - ini_set('date.timezone', 'UTC'); -} - -foreach (array(__DIR__ . '/../../autoload.php', __DIR__ . '/../vendor/autoload.php', __DIR__ . '/vendor/autoload.php') as $file) { - if (file_exists($file)) { - define('PHPUNIT_COMPOSER_INSTALL', $file); - - break; - } -} - -unset($file); - -if (!defined('PHPUNIT_COMPOSER_INSTALL')) { - fwrite(STDERR, - 'You need to set up the project dependencies using the following commands:' . PHP_EOL . - 'wget http://getcomposer.org/composer.phar' . PHP_EOL . - 'php composer.phar install' . PHP_EOL - ); - - die(1); -} - -require PHPUNIT_COMPOSER_INSTALL; - -PHPUnit_TextUI_Command::main(); diff --git a/lib/composer/vendor/bin/phpunit b/lib/composer/vendor/bin/phpunit new file mode 120000 index 000000000..2c4893031 --- /dev/null +++ b/lib/composer/vendor/bin/phpunit @@ -0,0 +1 @@ +../phpunit/phpunit/phpunit \ No newline at end of file diff --git a/lib/composer/vendor/bin/robo b/lib/composer/vendor/bin/robo deleted file mode 100755 index ce4d9dfab..000000000 --- a/lib/composer/vendor/bin/robo +++ /dev/null @@ -1,21 +0,0 @@ -#!/usr/bin/env php -execute($_SERVER['argv']); -exit($statusCode); diff --git a/lib/composer/vendor/bin/robo b/lib/composer/vendor/bin/robo new file mode 120000 index 000000000..701d42dd9 --- /dev/null +++ b/lib/composer/vendor/bin/robo @@ -0,0 +1 @@ +../consolidation/robo/robo \ No newline at end of file diff --git a/lib/composer/vendor/composer/autoload_classmap.php b/lib/composer/vendor/composer/autoload_classmap.php index 6bb4897d4..520a91d8f 100644 --- a/lib/composer/vendor/composer/autoload_classmap.php +++ b/lib/composer/vendor/composer/autoload_classmap.php @@ -9,179 +9,178 @@ 'File_Iterator' => $vendorDir . '/phpunit/php-file-iterator/src/Iterator.php', 'File_Iterator_Facade' => $vendorDir . '/phpunit/php-file-iterator/src/Facade.php', 'File_Iterator_Factory' => $vendorDir . '/phpunit/php-file-iterator/src/Factory.php', - 'PHPUnit\\Framework\\TestCase' => $vendorDir . '/phpunit/phpunit/src/ForwardCompatibility/TestCase.php', - 'PHPUnit_Exception' => $vendorDir . '/phpunit/phpunit/src/Exception.php', - 'PHPUnit_Extensions_GroupTestSuite' => $vendorDir . '/phpunit/phpunit/src/Extensions/GroupTestSuite.php', - 'PHPUnit_Extensions_PhptTestCase' => $vendorDir . '/phpunit/phpunit/src/Extensions/PhptTestCase.php', - 'PHPUnit_Extensions_PhptTestSuite' => $vendorDir . '/phpunit/phpunit/src/Extensions/PhptTestSuite.php', - 'PHPUnit_Extensions_RepeatedTest' => $vendorDir . '/phpunit/phpunit/src/Extensions/RepeatedTest.php', - 'PHPUnit_Extensions_TestDecorator' => $vendorDir . '/phpunit/phpunit/src/Extensions/TestDecorator.php', - 'PHPUnit_Extensions_TicketListener' => $vendorDir . '/phpunit/phpunit/src/Extensions/TicketListener.php', - 'PHPUnit_Framework_Assert' => $vendorDir . '/phpunit/phpunit/src/Framework/Assert.php', - 'PHPUnit_Framework_AssertionFailedError' => $vendorDir . '/phpunit/phpunit/src/Framework/AssertionFailedError.php', - 'PHPUnit_Framework_BaseTestListener' => $vendorDir . '/phpunit/phpunit/src/Framework/BaseTestListener.php', - 'PHPUnit_Framework_CodeCoverageException' => $vendorDir . '/phpunit/phpunit/src/Framework/CodeCoverageException.php', - 'PHPUnit_Framework_Constraint' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint.php', - 'PHPUnit_Framework_Constraint_And' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/And.php', - 'PHPUnit_Framework_Constraint_ArrayHasKey' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/ArrayHasKey.php', - 'PHPUnit_Framework_Constraint_ArraySubset' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/ArraySubset.php', - 'PHPUnit_Framework_Constraint_Attribute' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Attribute.php', - 'PHPUnit_Framework_Constraint_Callback' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Callback.php', - 'PHPUnit_Framework_Constraint_ClassHasAttribute' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/ClassHasAttribute.php', - 'PHPUnit_Framework_Constraint_ClassHasStaticAttribute' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/ClassHasStaticAttribute.php', - 'PHPUnit_Framework_Constraint_Composite' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Composite.php', - 'PHPUnit_Framework_Constraint_Count' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Count.php', - 'PHPUnit_Framework_Constraint_Exception' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Exception.php', - 'PHPUnit_Framework_Constraint_ExceptionCode' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/ExceptionCode.php', - 'PHPUnit_Framework_Constraint_ExceptionMessage' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/ExceptionMessage.php', - 'PHPUnit_Framework_Constraint_ExceptionMessageRegExp' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/ExceptionMessageRegExp.php', - 'PHPUnit_Framework_Constraint_FileExists' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/FileExists.php', - 'PHPUnit_Framework_Constraint_GreaterThan' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/GreaterThan.php', - 'PHPUnit_Framework_Constraint_IsAnything' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsAnything.php', - 'PHPUnit_Framework_Constraint_IsEmpty' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsEmpty.php', - 'PHPUnit_Framework_Constraint_IsEqual' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsEqual.php', - 'PHPUnit_Framework_Constraint_IsFalse' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsFalse.php', - 'PHPUnit_Framework_Constraint_IsFinite' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsFinite.php', - 'PHPUnit_Framework_Constraint_IsIdentical' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsIdentical.php', - 'PHPUnit_Framework_Constraint_IsInfinite' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsInfinite.php', - 'PHPUnit_Framework_Constraint_IsInstanceOf' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsInstanceOf.php', - 'PHPUnit_Framework_Constraint_IsJson' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsJson.php', - 'PHPUnit_Framework_Constraint_IsNan' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsNan.php', - 'PHPUnit_Framework_Constraint_IsNull' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsNull.php', - 'PHPUnit_Framework_Constraint_IsTrue' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsTrue.php', - 'PHPUnit_Framework_Constraint_IsType' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsType.php', - 'PHPUnit_Framework_Constraint_JsonMatches' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/JsonMatches.php', - 'PHPUnit_Framework_Constraint_JsonMatches_ErrorMessageProvider' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/JsonMatches/ErrorMessageProvider.php', - 'PHPUnit_Framework_Constraint_LessThan' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/LessThan.php', - 'PHPUnit_Framework_Constraint_Not' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Not.php', - 'PHPUnit_Framework_Constraint_ObjectHasAttribute' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/ObjectHasAttribute.php', - 'PHPUnit_Framework_Constraint_Or' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Or.php', - 'PHPUnit_Framework_Constraint_PCREMatch' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/PCREMatch.php', - 'PHPUnit_Framework_Constraint_SameSize' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/SameSize.php', - 'PHPUnit_Framework_Constraint_StringContains' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/StringContains.php', - 'PHPUnit_Framework_Constraint_StringEndsWith' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/StringEndsWith.php', - 'PHPUnit_Framework_Constraint_StringMatches' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/StringMatches.php', - 'PHPUnit_Framework_Constraint_StringStartsWith' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/StringStartsWith.php', - 'PHPUnit_Framework_Constraint_TraversableContains' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/TraversableContains.php', - 'PHPUnit_Framework_Constraint_TraversableContainsOnly' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/TraversableContainsOnly.php', - 'PHPUnit_Framework_Constraint_Xor' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Xor.php', - 'PHPUnit_Framework_CoveredCodeNotExecutedException' => $vendorDir . '/phpunit/phpunit/src/Framework/PHPUnit_Framework_CoveredCodeNotExecutedException.php', - 'PHPUnit_Framework_Error' => $vendorDir . '/phpunit/phpunit/src/Framework/Error.php', - 'PHPUnit_Framework_Error_Deprecated' => $vendorDir . '/phpunit/phpunit/src/Framework/Error/Deprecated.php', - 'PHPUnit_Framework_Error_Notice' => $vendorDir . '/phpunit/phpunit/src/Framework/Error/Notice.php', - 'PHPUnit_Framework_Error_Warning' => $vendorDir . '/phpunit/phpunit/src/Framework/Error/Warning.php', - 'PHPUnit_Framework_Exception' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception.php', - 'PHPUnit_Framework_ExceptionWrapper' => $vendorDir . '/phpunit/phpunit/src/Framework/ExceptionWrapper.php', - 'PHPUnit_Framework_ExpectationFailedException' => $vendorDir . '/phpunit/phpunit/src/Framework/ExpectationFailedException.php', - 'PHPUnit_Framework_IncompleteTest' => $vendorDir . '/phpunit/phpunit/src/Framework/IncompleteTest.php', - 'PHPUnit_Framework_IncompleteTestCase' => $vendorDir . '/phpunit/phpunit/src/Framework/IncompleteTestCase.php', - 'PHPUnit_Framework_IncompleteTestError' => $vendorDir . '/phpunit/phpunit/src/Framework/IncompleteTestError.php', - 'PHPUnit_Framework_InvalidCoversTargetException' => $vendorDir . '/phpunit/phpunit/src/Framework/InvalidCoversTargetException.php', - 'PHPUnit_Framework_MissingCoversAnnotationException' => $vendorDir . '/phpunit/phpunit/src/Framework/PHPUnit_Framework_MissingCoversAnnotationException.php', - 'PHPUnit_Framework_MockObject_BadMethodCallException' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Exception/BadMethodCallException.php', - 'PHPUnit_Framework_MockObject_Builder_Identity' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Builder/Identity.php', - 'PHPUnit_Framework_MockObject_Builder_InvocationMocker' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Builder/InvocationMocker.php', - 'PHPUnit_Framework_MockObject_Builder_Match' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Builder/Match.php', - 'PHPUnit_Framework_MockObject_Builder_MethodNameMatch' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Builder/MethodNameMatch.php', - 'PHPUnit_Framework_MockObject_Builder_Namespace' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Builder/Namespace.php', - 'PHPUnit_Framework_MockObject_Builder_ParametersMatch' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Builder/ParametersMatch.php', - 'PHPUnit_Framework_MockObject_Builder_Stub' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Builder/Stub.php', - 'PHPUnit_Framework_MockObject_Exception' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Exception/Exception.php', - 'PHPUnit_Framework_MockObject_Generator' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Generator.php', - 'PHPUnit_Framework_MockObject_Invocation' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Invocation.php', - 'PHPUnit_Framework_MockObject_InvocationMocker' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/InvocationMocker.php', - 'PHPUnit_Framework_MockObject_Invocation_Object' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Invocation/Object.php', - 'PHPUnit_Framework_MockObject_Invocation_Static' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Invocation/Static.php', - 'PHPUnit_Framework_MockObject_Invokable' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Invokable.php', - 'PHPUnit_Framework_MockObject_Matcher' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher.php', - 'PHPUnit_Framework_MockObject_Matcher_AnyInvokedCount' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/AnyInvokedCount.php', - 'PHPUnit_Framework_MockObject_Matcher_AnyParameters' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/AnyParameters.php', - 'PHPUnit_Framework_MockObject_Matcher_ConsecutiveParameters' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/ConsecutiveParameters.php', - 'PHPUnit_Framework_MockObject_Matcher_Invocation' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/Invocation.php', - 'PHPUnit_Framework_MockObject_Matcher_InvokedAtIndex' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/InvokedAtIndex.php', - 'PHPUnit_Framework_MockObject_Matcher_InvokedAtLeastCount' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/InvokedAtLeastCount.php', - 'PHPUnit_Framework_MockObject_Matcher_InvokedAtLeastOnce' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/InvokedAtLeastOnce.php', - 'PHPUnit_Framework_MockObject_Matcher_InvokedAtMostCount' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/InvokedAtMostCount.php', - 'PHPUnit_Framework_MockObject_Matcher_InvokedCount' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/InvokedCount.php', - 'PHPUnit_Framework_MockObject_Matcher_InvokedRecorder' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/InvokedRecorder.php', - 'PHPUnit_Framework_MockObject_Matcher_MethodName' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/MethodName.php', - 'PHPUnit_Framework_MockObject_Matcher_Parameters' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/Parameters.php', - 'PHPUnit_Framework_MockObject_Matcher_StatelessInvocation' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/StatelessInvocation.php', - 'PHPUnit_Framework_MockObject_MockBuilder' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/MockBuilder.php', - 'PHPUnit_Framework_MockObject_MockObject' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/MockObject.php', - 'PHPUnit_Framework_MockObject_RuntimeException' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Exception/RuntimeException.php', - 'PHPUnit_Framework_MockObject_Stub' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Stub.php', - 'PHPUnit_Framework_MockObject_Stub_ConsecutiveCalls' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Stub/ConsecutiveCalls.php', - 'PHPUnit_Framework_MockObject_Stub_Exception' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Stub/Exception.php', - 'PHPUnit_Framework_MockObject_Stub_MatcherCollection' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Stub/MatcherCollection.php', - 'PHPUnit_Framework_MockObject_Stub_Return' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Stub/Return.php', - 'PHPUnit_Framework_MockObject_Stub_ReturnArgument' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Stub/ReturnArgument.php', - 'PHPUnit_Framework_MockObject_Stub_ReturnCallback' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Stub/ReturnCallback.php', - 'PHPUnit_Framework_MockObject_Stub_ReturnReference' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Stub/ReturnReference.php', - 'PHPUnit_Framework_MockObject_Stub_ReturnSelf' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Stub/ReturnSelf.php', - 'PHPUnit_Framework_MockObject_Stub_ReturnValueMap' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Stub/ReturnValueMap.php', - 'PHPUnit_Framework_MockObject_Verifiable' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Verifiable.php', - 'PHPUnit_Framework_OutputError' => $vendorDir . '/phpunit/phpunit/src/Framework/OutputError.php', - 'PHPUnit_Framework_RiskyTest' => $vendorDir . '/phpunit/phpunit/src/Framework/RiskyTest.php', - 'PHPUnit_Framework_RiskyTestError' => $vendorDir . '/phpunit/phpunit/src/Framework/RiskyTestError.php', - 'PHPUnit_Framework_SelfDescribing' => $vendorDir . '/phpunit/phpunit/src/Framework/SelfDescribing.php', - 'PHPUnit_Framework_SkippedTest' => $vendorDir . '/phpunit/phpunit/src/Framework/SkippedTest.php', - 'PHPUnit_Framework_SkippedTestCase' => $vendorDir . '/phpunit/phpunit/src/Framework/SkippedTestCase.php', - 'PHPUnit_Framework_SkippedTestError' => $vendorDir . '/phpunit/phpunit/src/Framework/SkippedTestError.php', - 'PHPUnit_Framework_SkippedTestSuiteError' => $vendorDir . '/phpunit/phpunit/src/Framework/SkippedTestSuiteError.php', - 'PHPUnit_Framework_SyntheticError' => $vendorDir . '/phpunit/phpunit/src/Framework/SyntheticError.php', - 'PHPUnit_Framework_Test' => $vendorDir . '/phpunit/phpunit/src/Framework/Test.php', - 'PHPUnit_Framework_TestCase' => $vendorDir . '/phpunit/phpunit/src/Framework/TestCase.php', - 'PHPUnit_Framework_TestFailure' => $vendorDir . '/phpunit/phpunit/src/Framework/TestFailure.php', - 'PHPUnit_Framework_TestListener' => $vendorDir . '/phpunit/phpunit/src/Framework/TestListener.php', - 'PHPUnit_Framework_TestResult' => $vendorDir . '/phpunit/phpunit/src/Framework/TestResult.php', - 'PHPUnit_Framework_TestSuite' => $vendorDir . '/phpunit/phpunit/src/Framework/TestSuite.php', - 'PHPUnit_Framework_TestSuite_DataProvider' => $vendorDir . '/phpunit/phpunit/src/Framework/TestSuite/DataProvider.php', - 'PHPUnit_Framework_UnintentionallyCoveredCodeError' => $vendorDir . '/phpunit/phpunit/src/Framework/UnintentionallyCoveredCodeError.php', - 'PHPUnit_Framework_Warning' => $vendorDir . '/phpunit/phpunit/src/Framework/Warning.php', - 'PHPUnit_Framework_WarningTestCase' => $vendorDir . '/phpunit/phpunit/src/Framework/WarningTestCase.php', - 'PHPUnit_Runner_BaseTestRunner' => $vendorDir . '/phpunit/phpunit/src/Runner/BaseTestRunner.php', - 'PHPUnit_Runner_Exception' => $vendorDir . '/phpunit/phpunit/src/Runner/Exception.php', - 'PHPUnit_Runner_Filter_Factory' => $vendorDir . '/phpunit/phpunit/src/Runner/Filter/Factory.php', - 'PHPUnit_Runner_Filter_GroupFilterIterator' => $vendorDir . '/phpunit/phpunit/src/Runner/Filter/Group.php', - 'PHPUnit_Runner_Filter_Group_Exclude' => $vendorDir . '/phpunit/phpunit/src/Runner/Filter/Group/Exclude.php', - 'PHPUnit_Runner_Filter_Group_Include' => $vendorDir . '/phpunit/phpunit/src/Runner/Filter/Group/Include.php', - 'PHPUnit_Runner_Filter_Test' => $vendorDir . '/phpunit/phpunit/src/Runner/Filter/Test.php', - 'PHPUnit_Runner_StandardTestSuiteLoader' => $vendorDir . '/phpunit/phpunit/src/Runner/StandardTestSuiteLoader.php', - 'PHPUnit_Runner_TestSuiteLoader' => $vendorDir . '/phpunit/phpunit/src/Runner/TestSuiteLoader.php', - 'PHPUnit_Runner_Version' => $vendorDir . '/phpunit/phpunit/src/Runner/Version.php', - 'PHPUnit_TextUI_Command' => $vendorDir . '/phpunit/phpunit/src/TextUI/Command.php', - 'PHPUnit_TextUI_ResultPrinter' => $vendorDir . '/phpunit/phpunit/src/TextUI/ResultPrinter.php', - 'PHPUnit_TextUI_TestRunner' => $vendorDir . '/phpunit/phpunit/src/TextUI/TestRunner.php', - 'PHPUnit_Util_Blacklist' => $vendorDir . '/phpunit/phpunit/src/Util/Blacklist.php', - 'PHPUnit_Util_Configuration' => $vendorDir . '/phpunit/phpunit/src/Util/Configuration.php', - 'PHPUnit_Util_ConfigurationGenerator' => $vendorDir . '/phpunit/phpunit/src/Util/ConfigurationGenerator.php', - 'PHPUnit_Util_ErrorHandler' => $vendorDir . '/phpunit/phpunit/src/Util/ErrorHandler.php', - 'PHPUnit_Util_Fileloader' => $vendorDir . '/phpunit/phpunit/src/Util/Fileloader.php', - 'PHPUnit_Util_Filesystem' => $vendorDir . '/phpunit/phpunit/src/Util/Filesystem.php', - 'PHPUnit_Util_Filter' => $vendorDir . '/phpunit/phpunit/src/Util/Filter.php', - 'PHPUnit_Util_Getopt' => $vendorDir . '/phpunit/phpunit/src/Util/Getopt.php', - 'PHPUnit_Util_GlobalState' => $vendorDir . '/phpunit/phpunit/src/Util/GlobalState.php', - 'PHPUnit_Util_InvalidArgumentHelper' => $vendorDir . '/phpunit/phpunit/src/Util/InvalidArgumentHelper.php', - 'PHPUnit_Util_Log_JSON' => $vendorDir . '/phpunit/phpunit/src/Util/Log/JSON.php', - 'PHPUnit_Util_Log_JUnit' => $vendorDir . '/phpunit/phpunit/src/Util/Log/JUnit.php', - 'PHPUnit_Util_Log_TAP' => $vendorDir . '/phpunit/phpunit/src/Util/Log/TAP.php', - 'PHPUnit_Util_Log_TeamCity' => $vendorDir . '/phpunit/phpunit/src/Util/Log/TeamCity.php', - 'PHPUnit_Util_PHP' => $vendorDir . '/phpunit/phpunit/src/Util/PHP.php', - 'PHPUnit_Util_PHP_Default' => $vendorDir . '/phpunit/phpunit/src/Util/PHP/Default.php', - 'PHPUnit_Util_PHP_Windows' => $vendorDir . '/phpunit/phpunit/src/Util/PHP/Windows.php', - 'PHPUnit_Util_Printer' => $vendorDir . '/phpunit/phpunit/src/Util/Printer.php', - 'PHPUnit_Util_Regex' => $vendorDir . '/phpunit/phpunit/src/Util/Regex.php', - 'PHPUnit_Util_String' => $vendorDir . '/phpunit/phpunit/src/Util/String.php', - 'PHPUnit_Util_Test' => $vendorDir . '/phpunit/phpunit/src/Util/Test.php', - 'PHPUnit_Util_TestDox_NamePrettifier' => $vendorDir . '/phpunit/phpunit/src/Util/TestDox/NamePrettifier.php', - 'PHPUnit_Util_TestDox_ResultPrinter' => $vendorDir . '/phpunit/phpunit/src/Util/TestDox/ResultPrinter.php', - 'PHPUnit_Util_TestDox_ResultPrinter_HTML' => $vendorDir . '/phpunit/phpunit/src/Util/TestDox/ResultPrinter/HTML.php', - 'PHPUnit_Util_TestDox_ResultPrinter_Text' => $vendorDir . '/phpunit/phpunit/src/Util/TestDox/ResultPrinter/Text.php', - 'PHPUnit_Util_TestDox_ResultPrinter_XML' => $vendorDir . '/phpunit/phpunit/src/Util/TestDox/ResultPrinter/XML.php', - 'PHPUnit_Util_TestSuiteIterator' => $vendorDir . '/phpunit/phpunit/src/Util/TestSuiteIterator.php', - 'PHPUnit_Util_Type' => $vendorDir . '/phpunit/phpunit/src/Util/Type.php', - 'PHPUnit_Util_XML' => $vendorDir . '/phpunit/phpunit/src/Util/XML.php', + 'PHPUnit\\Exception' => $vendorDir . '/phpunit/phpunit/src/Exception.php', + 'PHPUnit\\Framework\\Assert' => $vendorDir . '/phpunit/phpunit/src/Framework/Assert.php', + 'PHPUnit\\Framework\\AssertionFailedError' => $vendorDir . '/phpunit/phpunit/src/Framework/AssertionFailedError.php', + 'PHPUnit\\Framework\\BaseTestListener' => $vendorDir . '/phpunit/phpunit/src/Framework/BaseTestListener.php', + 'PHPUnit\\Framework\\CodeCoverageException' => $vendorDir . '/phpunit/phpunit/src/Framework/CodeCoverageException.php', + 'PHPUnit\\Framework\\Constraint\\ArrayHasKey' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/ArrayHasKey.php', + 'PHPUnit\\Framework\\Constraint\\ArraySubset' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/ArraySubset.php', + 'PHPUnit\\Framework\\Constraint\\Attribute' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Attribute.php', + 'PHPUnit\\Framework\\Constraint\\Callback' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Callback.php', + 'PHPUnit\\Framework\\Constraint\\ClassHasAttribute' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/ClassHasAttribute.php', + 'PHPUnit\\Framework\\Constraint\\ClassHasStaticAttribute' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/ClassHasStaticAttribute.php', + 'PHPUnit\\Framework\\Constraint\\Composite' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Composite.php', + 'PHPUnit\\Framework\\Constraint\\Constraint' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Constraint.php', + 'PHPUnit\\Framework\\Constraint\\Count' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Count.php', + 'PHPUnit\\Framework\\Constraint\\DirectoryExists' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/DirectoryExists.php', + 'PHPUnit\\Framework\\Constraint\\Exception' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Exception.php', + 'PHPUnit\\Framework\\Constraint\\ExceptionCode' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/ExceptionCode.php', + 'PHPUnit\\Framework\\Constraint\\ExceptionMessage' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/ExceptionMessage.php', + 'PHPUnit\\Framework\\Constraint\\ExceptionMessageRegularExpression' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/ExceptionMessageRegularExpression.php', + 'PHPUnit\\Framework\\Constraint\\FileExists' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/FileExists.php', + 'PHPUnit\\Framework\\Constraint\\GreaterThan' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/GreaterThan.php', + 'PHPUnit\\Framework\\Constraint\\IsAnything' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsAnything.php', + 'PHPUnit\\Framework\\Constraint\\IsEmpty' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsEmpty.php', + 'PHPUnit\\Framework\\Constraint\\IsEqual' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsEqual.php', + 'PHPUnit\\Framework\\Constraint\\IsFalse' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsFalse.php', + 'PHPUnit\\Framework\\Constraint\\IsFinite' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsFinite.php', + 'PHPUnit\\Framework\\Constraint\\IsIdentical' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsIdentical.php', + 'PHPUnit\\Framework\\Constraint\\IsInfinite' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsInfinite.php', + 'PHPUnit\\Framework\\Constraint\\IsInstanceOf' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsInstanceOf.php', + 'PHPUnit\\Framework\\Constraint\\IsJson' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsJson.php', + 'PHPUnit\\Framework\\Constraint\\IsNan' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsNan.php', + 'PHPUnit\\Framework\\Constraint\\IsNull' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsNull.php', + 'PHPUnit\\Framework\\Constraint\\IsReadable' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsReadable.php', + 'PHPUnit\\Framework\\Constraint\\IsTrue' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsTrue.php', + 'PHPUnit\\Framework\\Constraint\\IsType' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsType.php', + 'PHPUnit\\Framework\\Constraint\\IsWritable' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsWritable.php', + 'PHPUnit\\Framework\\Constraint\\JsonMatches' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/JsonMatches.php', + 'PHPUnit\\Framework\\Constraint\\JsonMatchesErrorMessageProvider' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/JsonMatchesErrorMessageProvider.php', + 'PHPUnit\\Framework\\Constraint\\LessThan' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/LessThan.php', + 'PHPUnit\\Framework\\Constraint\\LogicalAnd' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/LogicalAnd.php', + 'PHPUnit\\Framework\\Constraint\\LogicalNot' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/LogicalNot.php', + 'PHPUnit\\Framework\\Constraint\\LogicalOr' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/LogicalOr.php', + 'PHPUnit\\Framework\\Constraint\\LogicalXor' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/LogicalXor.php', + 'PHPUnit\\Framework\\Constraint\\ObjectHasAttribute' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/ObjectHasAttribute.php', + 'PHPUnit\\Framework\\Constraint\\RegularExpression' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/RegularExpression.php', + 'PHPUnit\\Framework\\Constraint\\SameSize' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/SameSize.php', + 'PHPUnit\\Framework\\Constraint\\StringContains' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/StringContains.php', + 'PHPUnit\\Framework\\Constraint\\StringEndsWith' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/StringEndsWith.php', + 'PHPUnit\\Framework\\Constraint\\StringMatchesFormatDescription' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/StringMatchesFormatDescription.php', + 'PHPUnit\\Framework\\Constraint\\StringStartsWith' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/StringStartsWith.php', + 'PHPUnit\\Framework\\Constraint\\TraversableContains' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/TraversableContains.php', + 'PHPUnit\\Framework\\Constraint\\TraversableContainsOnly' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/TraversableContainsOnly.php', + 'PHPUnit\\Framework\\CoveredCodeNotExecutedException' => $vendorDir . '/phpunit/phpunit/src/Framework/CoveredCodeNotExecutedException.php', + 'PHPUnit\\Framework\\DataProviderTestSuite' => $vendorDir . '/phpunit/phpunit/src/Framework/DataProviderTestSuite.php', + 'PHPUnit\\Framework\\Error\\Deprecated' => $vendorDir . '/phpunit/phpunit/src/Framework/Error/Deprecated.php', + 'PHPUnit\\Framework\\Error\\Error' => $vendorDir . '/phpunit/phpunit/src/Framework/Error/Error.php', + 'PHPUnit\\Framework\\Error\\Notice' => $vendorDir . '/phpunit/phpunit/src/Framework/Error/Notice.php', + 'PHPUnit\\Framework\\Error\\Warning' => $vendorDir . '/phpunit/phpunit/src/Framework/Error/Warning.php', + 'PHPUnit\\Framework\\Exception' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception.php', + 'PHPUnit\\Framework\\ExceptionWrapper' => $vendorDir . '/phpunit/phpunit/src/Framework/ExceptionWrapper.php', + 'PHPUnit\\Framework\\ExpectationFailedException' => $vendorDir . '/phpunit/phpunit/src/Framework/ExpectationFailedException.php', + 'PHPUnit\\Framework\\IncompleteTest' => $vendorDir . '/phpunit/phpunit/src/Framework/IncompleteTest.php', + 'PHPUnit\\Framework\\IncompleteTestCase' => $vendorDir . '/phpunit/phpunit/src/Framework/IncompleteTestCase.php', + 'PHPUnit\\Framework\\IncompleteTestError' => $vendorDir . '/phpunit/phpunit/src/Framework/IncompleteTestError.php', + 'PHPUnit\\Framework\\InvalidCoversTargetException' => $vendorDir . '/phpunit/phpunit/src/Framework/InvalidCoversTargetException.php', + 'PHPUnit\\Framework\\MissingCoversAnnotationException' => $vendorDir . '/phpunit/phpunit/src/Framework/MissingCoversAnnotationException.php', + 'PHPUnit\\Framework\\MockObject\\BadMethodCallException' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Exception/BadMethodCallException.php', + 'PHPUnit\\Framework\\MockObject\\Builder\\Identity' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Builder/Identity.php', + 'PHPUnit\\Framework\\MockObject\\Builder\\InvocationMocker' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Builder/InvocationMocker.php', + 'PHPUnit\\Framework\\MockObject\\Builder\\Match' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Builder/Match.php', + 'PHPUnit\\Framework\\MockObject\\Builder\\MethodNameMatch' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Builder/MethodNameMatch.php', + 'PHPUnit\\Framework\\MockObject\\Builder\\NamespaceMatch' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Builder/NamespaceMatch.php', + 'PHPUnit\\Framework\\MockObject\\Builder\\ParametersMatch' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Builder/ParametersMatch.php', + 'PHPUnit\\Framework\\MockObject\\Builder\\Stub' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Builder/Stub.php', + 'PHPUnit\\Framework\\MockObject\\Exception' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Exception/Exception.php', + 'PHPUnit\\Framework\\MockObject\\Generator' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Generator.php', + 'PHPUnit\\Framework\\MockObject\\Invocation' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Invocation/Invocation.php', + 'PHPUnit\\Framework\\MockObject\\InvocationMocker' => $vendorDir . '/phpunit/phpunit-mock-objects/src/InvocationMocker.php', + 'PHPUnit\\Framework\\MockObject\\Invocation\\ObjectInvocation' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Invocation/ObjectInvocation.php', + 'PHPUnit\\Framework\\MockObject\\Invocation\\StaticInvocation' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Invocation/StaticInvocation.php', + 'PHPUnit\\Framework\\MockObject\\Invokable' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Invokable.php', + 'PHPUnit\\Framework\\MockObject\\Matcher' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Matcher.php', + 'PHPUnit\\Framework\\MockObject\\Matcher\\AnyInvokedCount' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Matcher/AnyInvokedCount.php', + 'PHPUnit\\Framework\\MockObject\\Matcher\\AnyParameters' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Matcher/AnyParameters.php', + 'PHPUnit\\Framework\\MockObject\\Matcher\\ConsecutiveParameters' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Matcher/ConsecutiveParameters.php', + 'PHPUnit\\Framework\\MockObject\\Matcher\\Invocation' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Matcher/Invocation.php', + 'PHPUnit\\Framework\\MockObject\\Matcher\\InvokedAtIndex' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Matcher/InvokedAtIndex.php', + 'PHPUnit\\Framework\\MockObject\\Matcher\\InvokedAtLeastCount' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Matcher/InvokedAtLeastCount.php', + 'PHPUnit\\Framework\\MockObject\\Matcher\\InvokedAtLeastOnce' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Matcher/InvokedAtLeastOnce.php', + 'PHPUnit\\Framework\\MockObject\\Matcher\\InvokedAtMostCount' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Matcher/InvokedAtMostCount.php', + 'PHPUnit\\Framework\\MockObject\\Matcher\\InvokedCount' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Matcher/InvokedCount.php', + 'PHPUnit\\Framework\\MockObject\\Matcher\\InvokedRecorder' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Matcher/InvokedRecorder.php', + 'PHPUnit\\Framework\\MockObject\\Matcher\\MethodName' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Matcher/MethodName.php', + 'PHPUnit\\Framework\\MockObject\\Matcher\\Parameters' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Matcher/Parameters.php', + 'PHPUnit\\Framework\\MockObject\\Matcher\\StatelessInvocation' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Matcher/StatelessInvocation.php', + 'PHPUnit\\Framework\\MockObject\\MockBuilder' => $vendorDir . '/phpunit/phpunit-mock-objects/src/MockBuilder.php', + 'PHPUnit\\Framework\\MockObject\\MockObject' => $vendorDir . '/phpunit/phpunit-mock-objects/src/ForwardCompatibility/MockObject.php', + 'PHPUnit\\Framework\\MockObject\\RuntimeException' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Exception/RuntimeException.php', + 'PHPUnit\\Framework\\MockObject\\Stub' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Stub.php', + 'PHPUnit\\Framework\\MockObject\\Stub\\ConsecutiveCalls' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Stub/ConsecutiveCalls.php', + 'PHPUnit\\Framework\\MockObject\\Stub\\Exception' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Stub/Exception.php', + 'PHPUnit\\Framework\\MockObject\\Stub\\MatcherCollection' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Stub/MatcherCollection.php', + 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnArgument' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Stub/ReturnArgument.php', + 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnCallback' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Stub/ReturnCallback.php', + 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnReference' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Stub/ReturnReference.php', + 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnSelf' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Stub/ReturnSelf.php', + 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnStub' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Stub/ReturnStub.php', + 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnValueMap' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Stub/ReturnValueMap.php', + 'PHPUnit\\Framework\\MockObject\\Verifiable' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Verifiable.php', + 'PHPUnit\\Framework\\OutputError' => $vendorDir . '/phpunit/phpunit/src/Framework/OutputError.php', + 'PHPUnit\\Framework\\RiskyTest' => $vendorDir . '/phpunit/phpunit/src/Framework/RiskyTest.php', + 'PHPUnit\\Framework\\RiskyTestError' => $vendorDir . '/phpunit/phpunit/src/Framework/RiskyTestError.php', + 'PHPUnit\\Framework\\SelfDescribing' => $vendorDir . '/phpunit/phpunit/src/Framework/SelfDescribing.php', + 'PHPUnit\\Framework\\SkippedTest' => $vendorDir . '/phpunit/phpunit/src/Framework/SkippedTest.php', + 'PHPUnit\\Framework\\SkippedTestCase' => $vendorDir . '/phpunit/phpunit/src/Framework/SkippedTestCase.php', + 'PHPUnit\\Framework\\SkippedTestError' => $vendorDir . '/phpunit/phpunit/src/Framework/SkippedTestError.php', + 'PHPUnit\\Framework\\SkippedTestSuiteError' => $vendorDir . '/phpunit/phpunit/src/Framework/SkippedTestSuiteError.php', + 'PHPUnit\\Framework\\SyntheticError' => $vendorDir . '/phpunit/phpunit/src/Framework/SyntheticError.php', + 'PHPUnit\\Framework\\Test' => $vendorDir . '/phpunit/phpunit/src/Framework/Test.php', + 'PHPUnit\\Framework\\TestCase' => $vendorDir . '/phpunit/phpunit/src/Framework/TestCase.php', + 'PHPUnit\\Framework\\TestFailure' => $vendorDir . '/phpunit/phpunit/src/Framework/TestFailure.php', + 'PHPUnit\\Framework\\TestListener' => $vendorDir . '/phpunit/phpunit/src/Framework/TestListener.php', + 'PHPUnit\\Framework\\TestListenerDefaultImplementation' => $vendorDir . '/phpunit/phpunit/src/Framework/TestListenerDefaultImplementation.php', + 'PHPUnit\\Framework\\TestResult' => $vendorDir . '/phpunit/phpunit/src/Framework/TestResult.php', + 'PHPUnit\\Framework\\TestSuite' => $vendorDir . '/phpunit/phpunit/src/Framework/TestSuite.php', + 'PHPUnit\\Framework\\TestSuiteIterator' => $vendorDir . '/phpunit/phpunit/src/Framework/TestSuiteIterator.php', + 'PHPUnit\\Framework\\UnintentionallyCoveredCodeError' => $vendorDir . '/phpunit/phpunit/src/Framework/UnintentionallyCoveredCodeError.php', + 'PHPUnit\\Framework\\Warning' => $vendorDir . '/phpunit/phpunit/src/Framework/Warning.php', + 'PHPUnit\\Framework\\WarningTestCase' => $vendorDir . '/phpunit/phpunit/src/Framework/WarningTestCase.php', + 'PHPUnit\\Runner\\BaseTestRunner' => $vendorDir . '/phpunit/phpunit/src/Runner/BaseTestRunner.php', + 'PHPUnit\\Runner\\Exception' => $vendorDir . '/phpunit/phpunit/src/Runner/Exception.php', + 'PHPUnit\\Runner\\Filter\\ExcludeGroupFilterIterator' => $vendorDir . '/phpunit/phpunit/src/Runner/Filter/ExcludeGroupFilterIterator.php', + 'PHPUnit\\Runner\\Filter\\Factory' => $vendorDir . '/phpunit/phpunit/src/Runner/Filter/Factory.php', + 'PHPUnit\\Runner\\Filter\\GroupFilterIterator' => $vendorDir . '/phpunit/phpunit/src/Runner/Filter/GroupFilterIterator.php', + 'PHPUnit\\Runner\\Filter\\IncludeGroupFilterIterator' => $vendorDir . '/phpunit/phpunit/src/Runner/Filter/IncludeGroupFilterIterator.php', + 'PHPUnit\\Runner\\Filter\\NameFilterIterator' => $vendorDir . '/phpunit/phpunit/src/Runner/Filter/NameFilterIterator.php', + 'PHPUnit\\Runner\\PhptTestCase' => $vendorDir . '/phpunit/phpunit/src/Runner/PhptTestCase.php', + 'PHPUnit\\Runner\\StandardTestSuiteLoader' => $vendorDir . '/phpunit/phpunit/src/Runner/StandardTestSuiteLoader.php', + 'PHPUnit\\Runner\\TestSuiteLoader' => $vendorDir . '/phpunit/phpunit/src/Runner/TestSuiteLoader.php', + 'PHPUnit\\Runner\\Version' => $vendorDir . '/phpunit/phpunit/src/Runner/Version.php', + 'PHPUnit\\TextUI\\Command' => $vendorDir . '/phpunit/phpunit/src/TextUI/Command.php', + 'PHPUnit\\TextUI\\ResultPrinter' => $vendorDir . '/phpunit/phpunit/src/TextUI/ResultPrinter.php', + 'PHPUnit\\TextUI\\TestRunner' => $vendorDir . '/phpunit/phpunit/src/TextUI/TestRunner.php', + 'PHPUnit\\Util\\Blacklist' => $vendorDir . '/phpunit/phpunit/src/Util/Blacklist.php', + 'PHPUnit\\Util\\Configuration' => $vendorDir . '/phpunit/phpunit/src/Util/Configuration.php', + 'PHPUnit\\Util\\ConfigurationGenerator' => $vendorDir . '/phpunit/phpunit/src/Util/ConfigurationGenerator.php', + 'PHPUnit\\Util\\ErrorHandler' => $vendorDir . '/phpunit/phpunit/src/Util/ErrorHandler.php', + 'PHPUnit\\Util\\Fileloader' => $vendorDir . '/phpunit/phpunit/src/Util/Fileloader.php', + 'PHPUnit\\Util\\Filesystem' => $vendorDir . '/phpunit/phpunit/src/Util/Filesystem.php', + 'PHPUnit\\Util\\Filter' => $vendorDir . '/phpunit/phpunit/src/Util/Filter.php', + 'PHPUnit\\Util\\Getopt' => $vendorDir . '/phpunit/phpunit/src/Util/Getopt.php', + 'PHPUnit\\Util\\GlobalState' => $vendorDir . '/phpunit/phpunit/src/Util/GlobalState.php', + 'PHPUnit\\Util\\InvalidArgumentHelper' => $vendorDir . '/phpunit/phpunit/src/Util/InvalidArgumentHelper.php', + 'PHPUnit\\Util\\Json' => $vendorDir . '/phpunit/phpunit/src/Util/Json.php', + 'PHPUnit\\Util\\Log\\JUnit' => $vendorDir . '/phpunit/phpunit/src/Util/Log/JUnit.php', + 'PHPUnit\\Util\\Log\\TeamCity' => $vendorDir . '/phpunit/phpunit/src/Util/Log/TeamCity.php', + 'PHPUnit\\Util\\PHP\\AbstractPhpProcess' => $vendorDir . '/phpunit/phpunit/src/Util/PHP/AbstractPhpProcess.php', + 'PHPUnit\\Util\\PHP\\DefaultPhpProcess' => $vendorDir . '/phpunit/phpunit/src/Util/PHP/DefaultPhpProcess.php', + 'PHPUnit\\Util\\PHP\\WindowsPhpProcess' => $vendorDir . '/phpunit/phpunit/src/Util/PHP/WindowsPhpProcess.php', + 'PHPUnit\\Util\\Printer' => $vendorDir . '/phpunit/phpunit/src/Util/Printer.php', + 'PHPUnit\\Util\\RegularExpression' => $vendorDir . '/phpunit/phpunit/src/Util/RegularExpression.php', + 'PHPUnit\\Util\\Test' => $vendorDir . '/phpunit/phpunit/src/Util/Test.php', + 'PHPUnit\\Util\\TestDox\\HtmlResultPrinter' => $vendorDir . '/phpunit/phpunit/src/Util/TestDox/HtmlResultPrinter.php', + 'PHPUnit\\Util\\TestDox\\NamePrettifier' => $vendorDir . '/phpunit/phpunit/src/Util/TestDox/NamePrettifier.php', + 'PHPUnit\\Util\\TestDox\\ResultPrinter' => $vendorDir . '/phpunit/phpunit/src/Util/TestDox/ResultPrinter.php', + 'PHPUnit\\Util\\TestDox\\TextResultPrinter' => $vendorDir . '/phpunit/phpunit/src/Util/TestDox/TextResultPrinter.php', + 'PHPUnit\\Util\\TestDox\\XmlResultPrinter' => $vendorDir . '/phpunit/phpunit/src/Util/TestDox/XmlResultPrinter.php', + 'PHPUnit\\Util\\TextTestListRenderer' => $vendorDir . '/phpunit/phpunit/src/Util/TextTestListRenderer.php', + 'PHPUnit\\Util\\Type' => $vendorDir . '/phpunit/phpunit/src/Util/Type.php', + 'PHPUnit\\Util\\Xml' => $vendorDir . '/phpunit/phpunit/src/Util/XML.php', + 'PHPUnit\\Util\\XmlTestListRenderer' => $vendorDir . '/phpunit/phpunit/src/Util/XmlTestListRenderer.php', + 'PHPUnit_Framework_MockObject_MockObject' => $vendorDir . '/phpunit/phpunit-mock-objects/src/MockObject.php', 'PHP_Timer' => $vendorDir . '/phpunit/php-timer/src/Timer.php', 'PHP_Token' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', 'PHP_TokenWithScope' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', @@ -311,6 +310,7 @@ 'PHP_Token_NEW' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', 'PHP_Token_NS_C' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', 'PHP_Token_NS_SEPARATOR' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_NULLSAFE_OBJECT_OPERATOR' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', 'PHP_Token_NUM_STRING' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', 'PHP_Token_OBJECT_CAST' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', 'PHP_Token_OBJECT_OPERATOR' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', @@ -381,7 +381,72 @@ 'PHP_Token_XOR_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', 'PHP_Token_YIELD' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', 'PHP_Token_YIELD_FROM' => $vendorDir . '/phpunit/php-token-stream/src/Token.php', - 'Robo\\composer\\ScriptHandler' => $vendorDir . '/consolidation/robo/scripts/composer/ScriptHandler.php', + 'PharIo\\Manifest\\Application' => $vendorDir . '/phar-io/manifest/src/values/Application.php', + 'PharIo\\Manifest\\ApplicationName' => $vendorDir . '/phar-io/manifest/src/values/ApplicationName.php', + 'PharIo\\Manifest\\Author' => $vendorDir . '/phar-io/manifest/src/values/Author.php', + 'PharIo\\Manifest\\AuthorCollection' => $vendorDir . '/phar-io/manifest/src/values/AuthorCollection.php', + 'PharIo\\Manifest\\AuthorCollectionIterator' => $vendorDir . '/phar-io/manifest/src/values/AuthorCollectionIterator.php', + 'PharIo\\Manifest\\AuthorElement' => $vendorDir . '/phar-io/manifest/src/xml/AuthorElement.php', + 'PharIo\\Manifest\\AuthorElementCollection' => $vendorDir . '/phar-io/manifest/src/xml/AuthorElementCollection.php', + 'PharIo\\Manifest\\BundledComponent' => $vendorDir . '/phar-io/manifest/src/values/BundledComponent.php', + 'PharIo\\Manifest\\BundledComponentCollection' => $vendorDir . '/phar-io/manifest/src/values/BundledComponentCollection.php', + 'PharIo\\Manifest\\BundledComponentCollectionIterator' => $vendorDir . '/phar-io/manifest/src/values/BundledComponentCollectionIterator.php', + 'PharIo\\Manifest\\BundlesElement' => $vendorDir . '/phar-io/manifest/src/xml/BundlesElement.php', + 'PharIo\\Manifest\\ComponentElement' => $vendorDir . '/phar-io/manifest/src/xml/ComponentElement.php', + 'PharIo\\Manifest\\ComponentElementCollection' => $vendorDir . '/phar-io/manifest/src/xml/ComponentElementCollection.php', + 'PharIo\\Manifest\\ContainsElement' => $vendorDir . '/phar-io/manifest/src/xml/ContainsElement.php', + 'PharIo\\Manifest\\CopyrightElement' => $vendorDir . '/phar-io/manifest/src/xml/CopyrightElement.php', + 'PharIo\\Manifest\\CopyrightInformation' => $vendorDir . '/phar-io/manifest/src/values/CopyrightInformation.php', + 'PharIo\\Manifest\\ElementCollection' => $vendorDir . '/phar-io/manifest/src/xml/ElementCollection.php', + 'PharIo\\Manifest\\Email' => $vendorDir . '/phar-io/manifest/src/values/Email.php', + 'PharIo\\Manifest\\Exception' => $vendorDir . '/phar-io/manifest/src/exceptions/Exception.php', + 'PharIo\\Manifest\\ExtElement' => $vendorDir . '/phar-io/manifest/src/xml/ExtElement.php', + 'PharIo\\Manifest\\ExtElementCollection' => $vendorDir . '/phar-io/manifest/src/xml/ExtElementCollection.php', + 'PharIo\\Manifest\\Extension' => $vendorDir . '/phar-io/manifest/src/values/Extension.php', + 'PharIo\\Manifest\\ExtensionElement' => $vendorDir . '/phar-io/manifest/src/xml/ExtensionElement.php', + 'PharIo\\Manifest\\InvalidApplicationNameException' => $vendorDir . '/phar-io/manifest/src/exceptions/InvalidApplicationNameException.php', + 'PharIo\\Manifest\\InvalidEmailException' => $vendorDir . '/phar-io/manifest/src/exceptions/InvalidEmailException.php', + 'PharIo\\Manifest\\InvalidUrlException' => $vendorDir . '/phar-io/manifest/src/exceptions/InvalidUrlException.php', + 'PharIo\\Manifest\\Library' => $vendorDir . '/phar-io/manifest/src/values/Library.php', + 'PharIo\\Manifest\\License' => $vendorDir . '/phar-io/manifest/src/values/License.php', + 'PharIo\\Manifest\\LicenseElement' => $vendorDir . '/phar-io/manifest/src/xml/LicenseElement.php', + 'PharIo\\Manifest\\Manifest' => $vendorDir . '/phar-io/manifest/src/values/Manifest.php', + 'PharIo\\Manifest\\ManifestDocument' => $vendorDir . '/phar-io/manifest/src/xml/ManifestDocument.php', + 'PharIo\\Manifest\\ManifestDocumentException' => $vendorDir . '/phar-io/manifest/src/exceptions/ManifestDocumentException.php', + 'PharIo\\Manifest\\ManifestDocumentLoadingException' => $vendorDir . '/phar-io/manifest/src/xml/ManifestDocumentLoadingException.php', + 'PharIo\\Manifest\\ManifestDocumentMapper' => $vendorDir . '/phar-io/manifest/src/ManifestDocumentMapper.php', + 'PharIo\\Manifest\\ManifestDocumentMapperException' => $vendorDir . '/phar-io/manifest/src/exceptions/ManifestDocumentMapperException.php', + 'PharIo\\Manifest\\ManifestElement' => $vendorDir . '/phar-io/manifest/src/xml/ManifestElement.php', + 'PharIo\\Manifest\\ManifestElementException' => $vendorDir . '/phar-io/manifest/src/exceptions/ManifestElementException.php', + 'PharIo\\Manifest\\ManifestLoader' => $vendorDir . '/phar-io/manifest/src/ManifestLoader.php', + 'PharIo\\Manifest\\ManifestLoaderException' => $vendorDir . '/phar-io/manifest/src/exceptions/ManifestLoaderException.php', + 'PharIo\\Manifest\\ManifestSerializer' => $vendorDir . '/phar-io/manifest/src/ManifestSerializer.php', + 'PharIo\\Manifest\\PhpElement' => $vendorDir . '/phar-io/manifest/src/xml/PhpElement.php', + 'PharIo\\Manifest\\PhpExtensionRequirement' => $vendorDir . '/phar-io/manifest/src/values/PhpExtensionRequirement.php', + 'PharIo\\Manifest\\PhpVersionRequirement' => $vendorDir . '/phar-io/manifest/src/values/PhpVersionRequirement.php', + 'PharIo\\Manifest\\Requirement' => $vendorDir . '/phar-io/manifest/src/values/Requirement.php', + 'PharIo\\Manifest\\RequirementCollection' => $vendorDir . '/phar-io/manifest/src/values/RequirementCollection.php', + 'PharIo\\Manifest\\RequirementCollectionIterator' => $vendorDir . '/phar-io/manifest/src/values/RequirementCollectionIterator.php', + 'PharIo\\Manifest\\RequiresElement' => $vendorDir . '/phar-io/manifest/src/xml/RequiresElement.php', + 'PharIo\\Manifest\\Type' => $vendorDir . '/phar-io/manifest/src/values/Type.php', + 'PharIo\\Manifest\\Url' => $vendorDir . '/phar-io/manifest/src/values/Url.php', + 'PharIo\\Version\\AbstractVersionConstraint' => $vendorDir . '/phar-io/version/src/AbstractVersionConstraint.php', + 'PharIo\\Version\\AndVersionConstraintGroup' => $vendorDir . '/phar-io/version/src/AndVersionConstraintGroup.php', + 'PharIo\\Version\\AnyVersionConstraint' => $vendorDir . '/phar-io/version/src/AnyVersionConstraint.php', + 'PharIo\\Version\\ExactVersionConstraint' => $vendorDir . '/phar-io/version/src/ExactVersionConstraint.php', + 'PharIo\\Version\\Exception' => $vendorDir . '/phar-io/version/src/Exception.php', + 'PharIo\\Version\\GreaterThanOrEqualToVersionConstraint' => $vendorDir . '/phar-io/version/src/GreaterThanOrEqualToVersionConstraint.php', + 'PharIo\\Version\\InvalidVersionException' => $vendorDir . '/phar-io/version/src/InvalidVersionException.php', + 'PharIo\\Version\\OrVersionConstraintGroup' => $vendorDir . '/phar-io/version/src/OrVersionConstraintGroup.php', + 'PharIo\\Version\\PreReleaseSuffix' => $vendorDir . '/phar-io/version/src/PreReleaseSuffix.php', + 'PharIo\\Version\\SpecificMajorAndMinorVersionConstraint' => $vendorDir . '/phar-io/version/src/SpecificMajorAndMinorVersionConstraint.php', + 'PharIo\\Version\\SpecificMajorVersionConstraint' => $vendorDir . '/phar-io/version/src/SpecificMajorVersionConstraint.php', + 'PharIo\\Version\\UnsupportedVersionConstraintException' => $vendorDir . '/phar-io/version/src/UnsupportedVersionConstraintException.php', + 'PharIo\\Version\\Version' => $vendorDir . '/phar-io/version/src/Version.php', + 'PharIo\\Version\\VersionConstraint' => $vendorDir . '/phar-io/version/src/VersionConstraint.php', + 'PharIo\\Version\\VersionConstraintParser' => $vendorDir . '/phar-io/version/src/VersionConstraintParser.php', + 'PharIo\\Version\\VersionConstraintValue' => $vendorDir . '/phar-io/version/src/VersionConstraintValue.php', + 'PharIo\\Version\\VersionNumber' => $vendorDir . '/phar-io/version/src/VersionNumber.php', 'SebastianBergmann\\CodeCoverage\\CodeCoverage' => $vendorDir . '/phpunit/php-code-coverage/src/CodeCoverage.php', 'SebastianBergmann\\CodeCoverage\\CoveredCodeNotExecutedException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/CoveredCodeNotExecutedException.php', 'SebastianBergmann\\CodeCoverage\\Driver\\Driver' => $vendorDir . '/phpunit/php-code-coverage/src/Driver/Driver.php', @@ -406,6 +471,7 @@ 'SebastianBergmann\\CodeCoverage\\Report\\Html\\Renderer' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Html/Renderer.php', 'SebastianBergmann\\CodeCoverage\\Report\\PHP' => $vendorDir . '/phpunit/php-code-coverage/src/Report/PHP.php', 'SebastianBergmann\\CodeCoverage\\Report\\Text' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Text.php', + 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\BuildInformation' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/BuildInformation.php', 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Coverage' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Coverage.php', 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Directory' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Directory.php', 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Facade' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Facade.php', @@ -414,12 +480,14 @@ 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Node' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Node.php', 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Project' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Project.php', 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Report' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Report.php', + 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Source' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Source.php', 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Tests' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Tests.php', 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Totals' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Totals.php', 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Unit' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Unit.php', 'SebastianBergmann\\CodeCoverage\\RuntimeException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/RuntimeException.php', 'SebastianBergmann\\CodeCoverage\\UnintentionallyCoveredCodeException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/UnintentionallyCoveredCodeException.php', 'SebastianBergmann\\CodeCoverage\\Util' => $vendorDir . '/phpunit/php-code-coverage/src/Util.php', + 'SebastianBergmann\\CodeCoverage\\Version' => $vendorDir . '/phpunit/php-code-coverage/src/Version.php', 'SebastianBergmann\\CodeUnitReverseLookup\\Wizard' => $vendorDir . '/sebastian/code-unit-reverse-lookup/src/Wizard.php', 'SebastianBergmann\\Comparator\\ArrayComparator' => $vendorDir . '/sebastian/comparator/src/ArrayComparator.php', 'SebastianBergmann\\Comparator\\Comparator' => $vendorDir . '/sebastian/comparator/src/Comparator.php', @@ -439,27 +507,45 @@ 'SebastianBergmann\\Diff\\Chunk' => $vendorDir . '/sebastian/diff/src/Chunk.php', 'SebastianBergmann\\Diff\\Diff' => $vendorDir . '/sebastian/diff/src/Diff.php', 'SebastianBergmann\\Diff\\Differ' => $vendorDir . '/sebastian/diff/src/Differ.php', - 'SebastianBergmann\\Diff\\LCS\\LongestCommonSubsequence' => $vendorDir . '/sebastian/diff/src/LCS/LongestCommonSubsequence.php', - 'SebastianBergmann\\Diff\\LCS\\MemoryEfficientImplementation' => $vendorDir . '/sebastian/diff/src/LCS/MemoryEfficientLongestCommonSubsequenceImplementation.php', - 'SebastianBergmann\\Diff\\LCS\\TimeEfficientImplementation' => $vendorDir . '/sebastian/diff/src/LCS/TimeEfficientLongestCommonSubsequenceImplementation.php', + 'SebastianBergmann\\Diff\\Exception' => $vendorDir . '/sebastian/diff/src/Exception/Exception.php', + 'SebastianBergmann\\Diff\\InvalidArgumentException' => $vendorDir . '/sebastian/diff/src/Exception/InvalidArgumentException.php', 'SebastianBergmann\\Diff\\Line' => $vendorDir . '/sebastian/diff/src/Line.php', + 'SebastianBergmann\\Diff\\LongestCommonSubsequenceCalculator' => $vendorDir . '/sebastian/diff/src/LongestCommonSubsequenceCalculator.php', + 'SebastianBergmann\\Diff\\MemoryEfficientLongestCommonSubsequenceCalculator' => $vendorDir . '/sebastian/diff/src/MemoryEfficientLongestCommonSubsequenceCalculator.php', + 'SebastianBergmann\\Diff\\Output\\AbstractChunkOutputBuilder' => $vendorDir . '/sebastian/diff/src/Output/AbstractChunkOutputBuilder.php', + 'SebastianBergmann\\Diff\\Output\\DiffOnlyOutputBuilder' => $vendorDir . '/sebastian/diff/src/Output/DiffOnlyOutputBuilder.php', + 'SebastianBergmann\\Diff\\Output\\DiffOutputBuilderInterface' => $vendorDir . '/sebastian/diff/src/Output/DiffOutputBuilderInterface.php', + 'SebastianBergmann\\Diff\\Output\\UnifiedDiffOutputBuilder' => $vendorDir . '/sebastian/diff/src/Output/UnifiedDiffOutputBuilder.php', 'SebastianBergmann\\Diff\\Parser' => $vendorDir . '/sebastian/diff/src/Parser.php', + 'SebastianBergmann\\Diff\\TimeEfficientLongestCommonSubsequenceCalculator' => $vendorDir . '/sebastian/diff/src/TimeEfficientLongestCommonSubsequenceCalculator.php', 'SebastianBergmann\\Environment\\Console' => $vendorDir . '/sebastian/environment/src/Console.php', + 'SebastianBergmann\\Environment\\OperatingSystem' => $vendorDir . '/sebastian/environment/src/OperatingSystem.php', 'SebastianBergmann\\Environment\\Runtime' => $vendorDir . '/sebastian/environment/src/Runtime.php', 'SebastianBergmann\\Exporter\\Exporter' => $vendorDir . '/sebastian/exporter/src/Exporter.php', 'SebastianBergmann\\GlobalState\\Blacklist' => $vendorDir . '/sebastian/global-state/src/Blacklist.php', 'SebastianBergmann\\GlobalState\\CodeExporter' => $vendorDir . '/sebastian/global-state/src/CodeExporter.php', - 'SebastianBergmann\\GlobalState\\Exception' => $vendorDir . '/sebastian/global-state/src/Exception.php', + 'SebastianBergmann\\GlobalState\\Exception' => $vendorDir . '/sebastian/global-state/src/exceptions/Exception.php', 'SebastianBergmann\\GlobalState\\Restorer' => $vendorDir . '/sebastian/global-state/src/Restorer.php', - 'SebastianBergmann\\GlobalState\\RuntimeException' => $vendorDir . '/sebastian/global-state/src/RuntimeException.php', + 'SebastianBergmann\\GlobalState\\RuntimeException' => $vendorDir . '/sebastian/global-state/src/exceptions/RuntimeException.php', 'SebastianBergmann\\GlobalState\\Snapshot' => $vendorDir . '/sebastian/global-state/src/Snapshot.php', 'SebastianBergmann\\ObjectEnumerator\\Enumerator' => $vendorDir . '/sebastian/object-enumerator/src/Enumerator.php', 'SebastianBergmann\\ObjectEnumerator\\Exception' => $vendorDir . '/sebastian/object-enumerator/src/Exception.php', 'SebastianBergmann\\ObjectEnumerator\\InvalidArgumentException' => $vendorDir . '/sebastian/object-enumerator/src/InvalidArgumentException.php', + 'SebastianBergmann\\ObjectReflector\\Exception' => $vendorDir . '/sebastian/object-reflector/src/Exception.php', + 'SebastianBergmann\\ObjectReflector\\InvalidArgumentException' => $vendorDir . '/sebastian/object-reflector/src/InvalidArgumentException.php', + 'SebastianBergmann\\ObjectReflector\\ObjectReflector' => $vendorDir . '/sebastian/object-reflector/src/ObjectReflector.php', 'SebastianBergmann\\RecursionContext\\Context' => $vendorDir . '/sebastian/recursion-context/src/Context.php', 'SebastianBergmann\\RecursionContext\\Exception' => $vendorDir . '/sebastian/recursion-context/src/Exception.php', 'SebastianBergmann\\RecursionContext\\InvalidArgumentException' => $vendorDir . '/sebastian/recursion-context/src/InvalidArgumentException.php', 'SebastianBergmann\\ResourceOperations\\ResourceOperations' => $vendorDir . '/sebastian/resource-operations/src/ResourceOperations.php', 'SebastianBergmann\\Version' => $vendorDir . '/sebastian/version/src/Version.php', 'Text_Template' => $vendorDir . '/phpunit/php-text-template/src/Template.php', + 'TheSeer\\Tokenizer\\Exception' => $vendorDir . '/theseer/tokenizer/src/Exception.php', + 'TheSeer\\Tokenizer\\NamespaceUri' => $vendorDir . '/theseer/tokenizer/src/NamespaceUri.php', + 'TheSeer\\Tokenizer\\NamespaceUriException' => $vendorDir . '/theseer/tokenizer/src/NamespaceUriException.php', + 'TheSeer\\Tokenizer\\Token' => $vendorDir . '/theseer/tokenizer/src/Token.php', + 'TheSeer\\Tokenizer\\TokenCollection' => $vendorDir . '/theseer/tokenizer/src/TokenCollection.php', + 'TheSeer\\Tokenizer\\TokenCollectionException' => $vendorDir . '/theseer/tokenizer/src/TokenCollectionException.php', + 'TheSeer\\Tokenizer\\Tokenizer' => $vendorDir . '/theseer/tokenizer/src/Tokenizer.php', + 'TheSeer\\Tokenizer\\XMLSerializer' => $vendorDir . '/theseer/tokenizer/src/XMLSerializer.php', ); diff --git a/lib/composer/vendor/composer/autoload_files.php b/lib/composer/vendor/composer/autoload_files.php index 548876d64..7ddd692a1 100644 --- a/lib/composer/vendor/composer/autoload_files.php +++ b/lib/composer/vendor/composer/autoload_files.php @@ -7,5 +7,6 @@ return array( '0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => $vendorDir . '/symfony/polyfill-mbstring/bootstrap.php', + '6124b4c8570aa390c21fafd04a26c69f' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/deep_copy.php', '2c102faa651ef8ea5874edb585946bce' => $vendorDir . '/swiftmailer/swiftmailer/lib/swift_required.php', ); diff --git a/lib/composer/vendor/composer/autoload_namespaces.php b/lib/composer/vendor/composer/autoload_namespaces.php index b85f909d3..afaf53920 100644 --- a/lib/composer/vendor/composer/autoload_namespaces.php +++ b/lib/composer/vendor/composer/autoload_namespaces.php @@ -8,6 +8,11 @@ return array( 'Twig_' => array($vendorDir . '/twig/twig/lib'), 'Prophecy\\' => array($vendorDir . '/phpspec/prophecy/src'), - 'PHPDocsMD' => array($vendorDir . '/victorjonsson/markdowndocs/src'), + 'PEAR' => array($vendorDir . '/pear/pear_exception'), + 'Net' => array($vendorDir . '/pear/net_smtp', $vendorDir . '/pear/net_socket'), + 'Mail' => array($vendorDir . '/pear/mail'), 'Doctrine\\Common\\Lexer\\' => array($vendorDir . '/doctrine/lexer/lib'), + 'Dflydev\\DotAccessData' => array($vendorDir . '/dflydev/dot-access-data/src'), + 'Console' => array($vendorDir . '/pear/console_getopt'), + '' => array($vendorDir . '/pear/pear-core-minimal/src'), ); diff --git a/lib/composer/vendor/composer/autoload_psr4.php b/lib/composer/vendor/composer/autoload_psr4.php index bc642f373..97f8fc9c0 100644 --- a/lib/composer/vendor/composer/autoload_psr4.php +++ b/lib/composer/vendor/composer/autoload_psr4.php @@ -6,7 +6,7 @@ $baseDir = dirname($vendorDir); return array( - 'phpDocumentor\\Reflection\\' => array($vendorDir . '/phpdocumentor/reflection-common/src', $vendorDir . '/phpdocumentor/type-resolver/src', $vendorDir . '/phpdocumentor/reflection-docblock/src'), + 'phpDocumentor\\Reflection\\' => array($vendorDir . '/phpdocumentor/reflection-common/src', $vendorDir . '/phpdocumentor/reflection-docblock/src', $vendorDir . '/phpdocumentor/type-resolver/src'), 'Whoops\\' => array($vendorDir . '/filp/whoops/src/Whoops'), 'Webmozart\\Assert\\' => array($vendorDir . '/webmozart/assert/src'), 'Symfony\\Polyfill\\Mbstring\\' => array($vendorDir . '/symfony/polyfill-mbstring'), @@ -19,9 +19,12 @@ 'Symfony\\Component\\Console\\' => array($vendorDir . '/symfony/console'), 'Robo\\' => array($vendorDir . '/consolidation/robo/src'), 'Psr\\Log\\' => array($vendorDir . '/psr/log/Psr/Log'), + 'Psr\\Container\\' => array($vendorDir . '/psr/container/src'), 'Monolog\\' => array($vendorDir . '/monolog/monolog/src/Monolog'), 'League\\Container\\' => array($vendorDir . '/league/container/src'), 'Interop\\Container\\' => array($vendorDir . '/container-interop/container-interop/src/Interop/Container'), + 'Grasmash\\YamlExpander\\' => array($vendorDir . '/grasmash/yaml-expander/src'), + 'Grasmash\\Expander\\' => array($vendorDir . '/grasmash/expander/src'), 'Gettext\\Languages\\' => array($vendorDir . '/gettext/languages/src'), 'Gettext\\' => array($vendorDir . '/gettext/gettext/src'), 'Egulias\\EmailValidator\\' => array($vendorDir . '/egulias/email-validator/EmailValidator'), @@ -29,6 +32,7 @@ 'DeepCopy\\' => array($vendorDir . '/myclabs/deep-copy/src/DeepCopy'), 'Consolidation\\OutputFormatters\\' => array($vendorDir . '/consolidation/output-formatters/src'), 'Consolidation\\Log\\' => array($vendorDir . '/consolidation/log/src'), + 'Consolidation\\Config\\' => array($vendorDir . '/consolidation/config/src'), 'Consolidation\\AnnotatedCommand\\' => array($vendorDir . '/consolidation/annotated-command/src'), '' => array($baseDir . '/../../src'), ); diff --git a/lib/composer/vendor/composer/autoload_real.php b/lib/composer/vendor/composer/autoload_real.php index 37c9bb7b8..9b640787a 100644 --- a/lib/composer/vendor/composer/autoload_real.php +++ b/lib/composer/vendor/composer/autoload_real.php @@ -2,7 +2,7 @@ // autoload_real.php @generated by Composer -class ComposerAutoloaderInita01cedac3fb3abb6b395843685a2b9da +class ComposerAutoloaderInit6d4a28cd96a5bc5d5b97781c062572d9 { private static $loader; @@ -19,15 +19,19 @@ public static function getLoader() return self::$loader; } - spl_autoload_register(array('ComposerAutoloaderInita01cedac3fb3abb6b395843685a2b9da', 'loadClassLoader'), true, true); + spl_autoload_register(array('ComposerAutoloaderInit6d4a28cd96a5bc5d5b97781c062572d9', 'loadClassLoader'), true, true); self::$loader = $loader = new \Composer\Autoload\ClassLoader(); - spl_autoload_unregister(array('ComposerAutoloaderInita01cedac3fb3abb6b395843685a2b9da', 'loadClassLoader')); + spl_autoload_unregister(array('ComposerAutoloaderInit6d4a28cd96a5bc5d5b97781c062572d9', 'loadClassLoader')); + + $includePaths = require __DIR__ . '/include_paths.php'; + array_push($includePaths, get_include_path()); + set_include_path(join(PATH_SEPARATOR, $includePaths)); $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION'); if ($useStaticLoader) { require_once __DIR__ . '/autoload_static.php'; - call_user_func(\Composer\Autoload\ComposerStaticInita01cedac3fb3abb6b395843685a2b9da::getInitializer($loader)); + call_user_func(\Composer\Autoload\ComposerStaticInit6d4a28cd96a5bc5d5b97781c062572d9::getInitializer($loader)); } else { $map = require __DIR__ . '/autoload_namespaces.php'; foreach ($map as $namespace => $path) { @@ -48,19 +52,19 @@ public static function getLoader() $loader->register(true); if ($useStaticLoader) { - $includeFiles = Composer\Autoload\ComposerStaticInita01cedac3fb3abb6b395843685a2b9da::$files; + $includeFiles = Composer\Autoload\ComposerStaticInit6d4a28cd96a5bc5d5b97781c062572d9::$files; } else { $includeFiles = require __DIR__ . '/autoload_files.php'; } foreach ($includeFiles as $fileIdentifier => $file) { - composerRequirea01cedac3fb3abb6b395843685a2b9da($fileIdentifier, $file); + composerRequire6d4a28cd96a5bc5d5b97781c062572d9($fileIdentifier, $file); } return $loader; } } -function composerRequirea01cedac3fb3abb6b395843685a2b9da($fileIdentifier, $file) +function composerRequire6d4a28cd96a5bc5d5b97781c062572d9($fileIdentifier, $file) { if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) { require $file; diff --git a/lib/composer/vendor/composer/autoload_static.php b/lib/composer/vendor/composer/autoload_static.php index 2cee87c69..787f17505 100644 --- a/lib/composer/vendor/composer/autoload_static.php +++ b/lib/composer/vendor/composer/autoload_static.php @@ -4,10 +4,11 @@ namespace Composer\Autoload; -class ComposerStaticInita01cedac3fb3abb6b395843685a2b9da +class ComposerStaticInit6d4a28cd96a5bc5d5b97781c062572d9 { public static $files = array ( '0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => __DIR__ . '/..' . '/symfony/polyfill-mbstring/bootstrap.php', + '6124b4c8570aa390c21fafd04a26c69f' => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/deep_copy.php', '2c102faa651ef8ea5874edb585946bce' => __DIR__ . '/..' . '/swiftmailer/swiftmailer/lib/swift_required.php', ); @@ -39,6 +40,7 @@ class ComposerStaticInita01cedac3fb3abb6b395843685a2b9da 'P' => array ( 'Psr\\Log\\' => 8, + 'Psr\\Container\\' => 14, ), 'M' => array ( @@ -54,6 +56,8 @@ class ComposerStaticInita01cedac3fb3abb6b395843685a2b9da ), 'G' => array ( + 'Grasmash\\YamlExpander\\' => 22, + 'Grasmash\\Expander\\' => 18, 'Gettext\\Languages\\' => 18, 'Gettext\\' => 8, ), @@ -70,6 +74,7 @@ class ComposerStaticInita01cedac3fb3abb6b395843685a2b9da array ( 'Consolidation\\OutputFormatters\\' => 31, 'Consolidation\\Log\\' => 18, + 'Consolidation\\Config\\' => 21, 'Consolidation\\AnnotatedCommand\\' => 31, ), ); @@ -78,8 +83,8 @@ class ComposerStaticInita01cedac3fb3abb6b395843685a2b9da 'phpDocumentor\\Reflection\\' => array ( 0 => __DIR__ . '/..' . '/phpdocumentor/reflection-common/src', - 1 => __DIR__ . '/..' . '/phpdocumentor/type-resolver/src', - 2 => __DIR__ . '/..' . '/phpdocumentor/reflection-docblock/src', + 1 => __DIR__ . '/..' . '/phpdocumentor/reflection-docblock/src', + 2 => __DIR__ . '/..' . '/phpdocumentor/type-resolver/src', ), 'Whoops\\' => array ( @@ -129,6 +134,10 @@ class ComposerStaticInita01cedac3fb3abb6b395843685a2b9da array ( 0 => __DIR__ . '/..' . '/psr/log/Psr/Log', ), + 'Psr\\Container\\' => + array ( + 0 => __DIR__ . '/..' . '/psr/container/src', + ), 'Monolog\\' => array ( 0 => __DIR__ . '/..' . '/monolog/monolog/src/Monolog', @@ -141,6 +150,14 @@ class ComposerStaticInita01cedac3fb3abb6b395843685a2b9da array ( 0 => __DIR__ . '/..' . '/container-interop/container-interop/src/Interop/Container', ), + 'Grasmash\\YamlExpander\\' => + array ( + 0 => __DIR__ . '/..' . '/grasmash/yaml-expander/src', + ), + 'Grasmash\\Expander\\' => + array ( + 0 => __DIR__ . '/..' . '/grasmash/expander/src', + ), 'Gettext\\Languages\\' => array ( 0 => __DIR__ . '/..' . '/gettext/languages/src', @@ -169,6 +186,10 @@ class ComposerStaticInita01cedac3fb3abb6b395843685a2b9da array ( 0 => __DIR__ . '/..' . '/consolidation/log/src', ), + 'Consolidation\\Config\\' => + array ( + 0 => __DIR__ . '/..' . '/consolidation/config/src', + ), 'Consolidation\\AnnotatedCommand\\' => array ( 0 => __DIR__ . '/..' . '/consolidation/annotated-command/src', @@ -193,9 +214,24 @@ class ComposerStaticInita01cedac3fb3abb6b395843685a2b9da array ( 0 => __DIR__ . '/..' . '/phpspec/prophecy/src', ), - 'PHPDocsMD' => + 'PEAR' => + array ( + 0 => __DIR__ . '/..' . '/pear/pear_exception', + ), + ), + 'N' => + array ( + 'Net' => + array ( + 0 => __DIR__ . '/..' . '/pear/net_smtp', + 1 => __DIR__ . '/..' . '/pear/net_socket', + ), + ), + 'M' => + array ( + 'Mail' => array ( - 0 => __DIR__ . '/..' . '/victorjonsson/markdowndocs/src', + 0 => __DIR__ . '/..' . '/pear/mail', ), ), 'D' => @@ -204,186 +240,200 @@ class ComposerStaticInita01cedac3fb3abb6b395843685a2b9da array ( 0 => __DIR__ . '/..' . '/doctrine/lexer/lib', ), + 'Dflydev\\DotAccessData' => + array ( + 0 => __DIR__ . '/..' . '/dflydev/dot-access-data/src', + ), ), + 'C' => + array ( + 'Console' => + array ( + 0 => __DIR__ . '/..' . '/pear/console_getopt', + ), + ), + ); + + public static $fallbackDirsPsr0 = array ( + 0 => __DIR__ . '/..' . '/pear/pear-core-minimal/src', ); public static $classMap = array ( 'File_Iterator' => __DIR__ . '/..' . '/phpunit/php-file-iterator/src/Iterator.php', 'File_Iterator_Facade' => __DIR__ . '/..' . '/phpunit/php-file-iterator/src/Facade.php', 'File_Iterator_Factory' => __DIR__ . '/..' . '/phpunit/php-file-iterator/src/Factory.php', - 'PHPUnit\\Framework\\TestCase' => __DIR__ . '/..' . '/phpunit/phpunit/src/ForwardCompatibility/TestCase.php', - 'PHPUnit_Exception' => __DIR__ . '/..' . '/phpunit/phpunit/src/Exception.php', - 'PHPUnit_Extensions_GroupTestSuite' => __DIR__ . '/..' . '/phpunit/phpunit/src/Extensions/GroupTestSuite.php', - 'PHPUnit_Extensions_PhptTestCase' => __DIR__ . '/..' . '/phpunit/phpunit/src/Extensions/PhptTestCase.php', - 'PHPUnit_Extensions_PhptTestSuite' => __DIR__ . '/..' . '/phpunit/phpunit/src/Extensions/PhptTestSuite.php', - 'PHPUnit_Extensions_RepeatedTest' => __DIR__ . '/..' . '/phpunit/phpunit/src/Extensions/RepeatedTest.php', - 'PHPUnit_Extensions_TestDecorator' => __DIR__ . '/..' . '/phpunit/phpunit/src/Extensions/TestDecorator.php', - 'PHPUnit_Extensions_TicketListener' => __DIR__ . '/..' . '/phpunit/phpunit/src/Extensions/TicketListener.php', - 'PHPUnit_Framework_Assert' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Assert.php', - 'PHPUnit_Framework_AssertionFailedError' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/AssertionFailedError.php', - 'PHPUnit_Framework_BaseTestListener' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/BaseTestListener.php', - 'PHPUnit_Framework_CodeCoverageException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/CodeCoverageException.php', - 'PHPUnit_Framework_Constraint' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint.php', - 'PHPUnit_Framework_Constraint_And' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/And.php', - 'PHPUnit_Framework_Constraint_ArrayHasKey' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/ArrayHasKey.php', - 'PHPUnit_Framework_Constraint_ArraySubset' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/ArraySubset.php', - 'PHPUnit_Framework_Constraint_Attribute' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Attribute.php', - 'PHPUnit_Framework_Constraint_Callback' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Callback.php', - 'PHPUnit_Framework_Constraint_ClassHasAttribute' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/ClassHasAttribute.php', - 'PHPUnit_Framework_Constraint_ClassHasStaticAttribute' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/ClassHasStaticAttribute.php', - 'PHPUnit_Framework_Constraint_Composite' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Composite.php', - 'PHPUnit_Framework_Constraint_Count' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Count.php', - 'PHPUnit_Framework_Constraint_Exception' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Exception.php', - 'PHPUnit_Framework_Constraint_ExceptionCode' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/ExceptionCode.php', - 'PHPUnit_Framework_Constraint_ExceptionMessage' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/ExceptionMessage.php', - 'PHPUnit_Framework_Constraint_ExceptionMessageRegExp' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/ExceptionMessageRegExp.php', - 'PHPUnit_Framework_Constraint_FileExists' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/FileExists.php', - 'PHPUnit_Framework_Constraint_GreaterThan' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/GreaterThan.php', - 'PHPUnit_Framework_Constraint_IsAnything' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/IsAnything.php', - 'PHPUnit_Framework_Constraint_IsEmpty' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/IsEmpty.php', - 'PHPUnit_Framework_Constraint_IsEqual' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/IsEqual.php', - 'PHPUnit_Framework_Constraint_IsFalse' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/IsFalse.php', - 'PHPUnit_Framework_Constraint_IsFinite' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/IsFinite.php', - 'PHPUnit_Framework_Constraint_IsIdentical' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/IsIdentical.php', - 'PHPUnit_Framework_Constraint_IsInfinite' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/IsInfinite.php', - 'PHPUnit_Framework_Constraint_IsInstanceOf' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/IsInstanceOf.php', - 'PHPUnit_Framework_Constraint_IsJson' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/IsJson.php', - 'PHPUnit_Framework_Constraint_IsNan' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/IsNan.php', - 'PHPUnit_Framework_Constraint_IsNull' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/IsNull.php', - 'PHPUnit_Framework_Constraint_IsTrue' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/IsTrue.php', - 'PHPUnit_Framework_Constraint_IsType' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/IsType.php', - 'PHPUnit_Framework_Constraint_JsonMatches' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/JsonMatches.php', - 'PHPUnit_Framework_Constraint_JsonMatches_ErrorMessageProvider' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/JsonMatches/ErrorMessageProvider.php', - 'PHPUnit_Framework_Constraint_LessThan' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/LessThan.php', - 'PHPUnit_Framework_Constraint_Not' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Not.php', - 'PHPUnit_Framework_Constraint_ObjectHasAttribute' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/ObjectHasAttribute.php', - 'PHPUnit_Framework_Constraint_Or' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Or.php', - 'PHPUnit_Framework_Constraint_PCREMatch' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/PCREMatch.php', - 'PHPUnit_Framework_Constraint_SameSize' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/SameSize.php', - 'PHPUnit_Framework_Constraint_StringContains' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/StringContains.php', - 'PHPUnit_Framework_Constraint_StringEndsWith' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/StringEndsWith.php', - 'PHPUnit_Framework_Constraint_StringMatches' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/StringMatches.php', - 'PHPUnit_Framework_Constraint_StringStartsWith' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/StringStartsWith.php', - 'PHPUnit_Framework_Constraint_TraversableContains' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/TraversableContains.php', - 'PHPUnit_Framework_Constraint_TraversableContainsOnly' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/TraversableContainsOnly.php', - 'PHPUnit_Framework_Constraint_Xor' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Xor.php', - 'PHPUnit_Framework_CoveredCodeNotExecutedException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/PHPUnit_Framework_CoveredCodeNotExecutedException.php', - 'PHPUnit_Framework_Error' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Error.php', - 'PHPUnit_Framework_Error_Deprecated' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Error/Deprecated.php', - 'PHPUnit_Framework_Error_Notice' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Error/Notice.php', - 'PHPUnit_Framework_Error_Warning' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Error/Warning.php', - 'PHPUnit_Framework_Exception' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception.php', - 'PHPUnit_Framework_ExceptionWrapper' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/ExceptionWrapper.php', - 'PHPUnit_Framework_ExpectationFailedException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/ExpectationFailedException.php', - 'PHPUnit_Framework_IncompleteTest' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/IncompleteTest.php', - 'PHPUnit_Framework_IncompleteTestCase' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/IncompleteTestCase.php', - 'PHPUnit_Framework_IncompleteTestError' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/IncompleteTestError.php', - 'PHPUnit_Framework_InvalidCoversTargetException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/InvalidCoversTargetException.php', - 'PHPUnit_Framework_MissingCoversAnnotationException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/PHPUnit_Framework_MissingCoversAnnotationException.php', - 'PHPUnit_Framework_MockObject_BadMethodCallException' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Exception/BadMethodCallException.php', - 'PHPUnit_Framework_MockObject_Builder_Identity' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Builder/Identity.php', - 'PHPUnit_Framework_MockObject_Builder_InvocationMocker' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Builder/InvocationMocker.php', - 'PHPUnit_Framework_MockObject_Builder_Match' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Builder/Match.php', - 'PHPUnit_Framework_MockObject_Builder_MethodNameMatch' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Builder/MethodNameMatch.php', - 'PHPUnit_Framework_MockObject_Builder_Namespace' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Builder/Namespace.php', - 'PHPUnit_Framework_MockObject_Builder_ParametersMatch' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Builder/ParametersMatch.php', - 'PHPUnit_Framework_MockObject_Builder_Stub' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Builder/Stub.php', - 'PHPUnit_Framework_MockObject_Exception' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Exception/Exception.php', - 'PHPUnit_Framework_MockObject_Generator' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Generator.php', - 'PHPUnit_Framework_MockObject_Invocation' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Invocation.php', - 'PHPUnit_Framework_MockObject_InvocationMocker' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/InvocationMocker.php', - 'PHPUnit_Framework_MockObject_Invocation_Object' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Invocation/Object.php', - 'PHPUnit_Framework_MockObject_Invocation_Static' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Invocation/Static.php', - 'PHPUnit_Framework_MockObject_Invokable' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Invokable.php', - 'PHPUnit_Framework_MockObject_Matcher' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher.php', - 'PHPUnit_Framework_MockObject_Matcher_AnyInvokedCount' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/AnyInvokedCount.php', - 'PHPUnit_Framework_MockObject_Matcher_AnyParameters' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/AnyParameters.php', - 'PHPUnit_Framework_MockObject_Matcher_ConsecutiveParameters' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/ConsecutiveParameters.php', - 'PHPUnit_Framework_MockObject_Matcher_Invocation' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/Invocation.php', - 'PHPUnit_Framework_MockObject_Matcher_InvokedAtIndex' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/InvokedAtIndex.php', - 'PHPUnit_Framework_MockObject_Matcher_InvokedAtLeastCount' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/InvokedAtLeastCount.php', - 'PHPUnit_Framework_MockObject_Matcher_InvokedAtLeastOnce' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/InvokedAtLeastOnce.php', - 'PHPUnit_Framework_MockObject_Matcher_InvokedAtMostCount' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/InvokedAtMostCount.php', - 'PHPUnit_Framework_MockObject_Matcher_InvokedCount' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/InvokedCount.php', - 'PHPUnit_Framework_MockObject_Matcher_InvokedRecorder' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/InvokedRecorder.php', - 'PHPUnit_Framework_MockObject_Matcher_MethodName' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/MethodName.php', - 'PHPUnit_Framework_MockObject_Matcher_Parameters' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/Parameters.php', - 'PHPUnit_Framework_MockObject_Matcher_StatelessInvocation' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Matcher/StatelessInvocation.php', - 'PHPUnit_Framework_MockObject_MockBuilder' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/MockBuilder.php', - 'PHPUnit_Framework_MockObject_MockObject' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/MockObject.php', - 'PHPUnit_Framework_MockObject_RuntimeException' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Exception/RuntimeException.php', - 'PHPUnit_Framework_MockObject_Stub' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Stub.php', - 'PHPUnit_Framework_MockObject_Stub_ConsecutiveCalls' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Stub/ConsecutiveCalls.php', - 'PHPUnit_Framework_MockObject_Stub_Exception' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Stub/Exception.php', - 'PHPUnit_Framework_MockObject_Stub_MatcherCollection' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Stub/MatcherCollection.php', - 'PHPUnit_Framework_MockObject_Stub_Return' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Stub/Return.php', - 'PHPUnit_Framework_MockObject_Stub_ReturnArgument' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Stub/ReturnArgument.php', - 'PHPUnit_Framework_MockObject_Stub_ReturnCallback' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Stub/ReturnCallback.php', - 'PHPUnit_Framework_MockObject_Stub_ReturnReference' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Stub/ReturnReference.php', - 'PHPUnit_Framework_MockObject_Stub_ReturnSelf' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Stub/ReturnSelf.php', - 'PHPUnit_Framework_MockObject_Stub_ReturnValueMap' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Stub/ReturnValueMap.php', - 'PHPUnit_Framework_MockObject_Verifiable' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Framework/MockObject/Verifiable.php', - 'PHPUnit_Framework_OutputError' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/OutputError.php', - 'PHPUnit_Framework_RiskyTest' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/RiskyTest.php', - 'PHPUnit_Framework_RiskyTestError' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/RiskyTestError.php', - 'PHPUnit_Framework_SelfDescribing' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/SelfDescribing.php', - 'PHPUnit_Framework_SkippedTest' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/SkippedTest.php', - 'PHPUnit_Framework_SkippedTestCase' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/SkippedTestCase.php', - 'PHPUnit_Framework_SkippedTestError' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/SkippedTestError.php', - 'PHPUnit_Framework_SkippedTestSuiteError' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/SkippedTestSuiteError.php', - 'PHPUnit_Framework_SyntheticError' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/SyntheticError.php', - 'PHPUnit_Framework_Test' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Test.php', - 'PHPUnit_Framework_TestCase' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/TestCase.php', - 'PHPUnit_Framework_TestFailure' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/TestFailure.php', - 'PHPUnit_Framework_TestListener' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/TestListener.php', - 'PHPUnit_Framework_TestResult' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/TestResult.php', - 'PHPUnit_Framework_TestSuite' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/TestSuite.php', - 'PHPUnit_Framework_TestSuite_DataProvider' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/TestSuite/DataProvider.php', - 'PHPUnit_Framework_UnintentionallyCoveredCodeError' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/UnintentionallyCoveredCodeError.php', - 'PHPUnit_Framework_Warning' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Warning.php', - 'PHPUnit_Framework_WarningTestCase' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/WarningTestCase.php', - 'PHPUnit_Runner_BaseTestRunner' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/BaseTestRunner.php', - 'PHPUnit_Runner_Exception' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Exception.php', - 'PHPUnit_Runner_Filter_Factory' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Filter/Factory.php', - 'PHPUnit_Runner_Filter_GroupFilterIterator' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Filter/Group.php', - 'PHPUnit_Runner_Filter_Group_Exclude' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Filter/Group/Exclude.php', - 'PHPUnit_Runner_Filter_Group_Include' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Filter/Group/Include.php', - 'PHPUnit_Runner_Filter_Test' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Filter/Test.php', - 'PHPUnit_Runner_StandardTestSuiteLoader' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/StandardTestSuiteLoader.php', - 'PHPUnit_Runner_TestSuiteLoader' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/TestSuiteLoader.php', - 'PHPUnit_Runner_Version' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Version.php', - 'PHPUnit_TextUI_Command' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Command.php', - 'PHPUnit_TextUI_ResultPrinter' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/ResultPrinter.php', - 'PHPUnit_TextUI_TestRunner' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/TestRunner.php', - 'PHPUnit_Util_Blacklist' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Blacklist.php', - 'PHPUnit_Util_Configuration' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Configuration.php', - 'PHPUnit_Util_ConfigurationGenerator' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/ConfigurationGenerator.php', - 'PHPUnit_Util_ErrorHandler' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/ErrorHandler.php', - 'PHPUnit_Util_Fileloader' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Fileloader.php', - 'PHPUnit_Util_Filesystem' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Filesystem.php', - 'PHPUnit_Util_Filter' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Filter.php', - 'PHPUnit_Util_Getopt' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Getopt.php', - 'PHPUnit_Util_GlobalState' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/GlobalState.php', - 'PHPUnit_Util_InvalidArgumentHelper' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/InvalidArgumentHelper.php', - 'PHPUnit_Util_Log_JSON' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Log/JSON.php', - 'PHPUnit_Util_Log_JUnit' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Log/JUnit.php', - 'PHPUnit_Util_Log_TAP' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Log/TAP.php', - 'PHPUnit_Util_Log_TeamCity' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Log/TeamCity.php', - 'PHPUnit_Util_PHP' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/PHP.php', - 'PHPUnit_Util_PHP_Default' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/PHP/Default.php', - 'PHPUnit_Util_PHP_Windows' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/PHP/Windows.php', - 'PHPUnit_Util_Printer' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Printer.php', - 'PHPUnit_Util_Regex' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Regex.php', - 'PHPUnit_Util_String' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/String.php', - 'PHPUnit_Util_Test' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Test.php', - 'PHPUnit_Util_TestDox_NamePrettifier' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/TestDox/NamePrettifier.php', - 'PHPUnit_Util_TestDox_ResultPrinter' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/TestDox/ResultPrinter.php', - 'PHPUnit_Util_TestDox_ResultPrinter_HTML' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/TestDox/ResultPrinter/HTML.php', - 'PHPUnit_Util_TestDox_ResultPrinter_Text' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/TestDox/ResultPrinter/Text.php', - 'PHPUnit_Util_TestDox_ResultPrinter_XML' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/TestDox/ResultPrinter/XML.php', - 'PHPUnit_Util_TestSuiteIterator' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/TestSuiteIterator.php', - 'PHPUnit_Util_Type' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Type.php', - 'PHPUnit_Util_XML' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/XML.php', + 'PHPUnit\\Exception' => __DIR__ . '/..' . '/phpunit/phpunit/src/Exception.php', + 'PHPUnit\\Framework\\Assert' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Assert.php', + 'PHPUnit\\Framework\\AssertionFailedError' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/AssertionFailedError.php', + 'PHPUnit\\Framework\\BaseTestListener' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/BaseTestListener.php', + 'PHPUnit\\Framework\\CodeCoverageException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/CodeCoverageException.php', + 'PHPUnit\\Framework\\Constraint\\ArrayHasKey' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/ArrayHasKey.php', + 'PHPUnit\\Framework\\Constraint\\ArraySubset' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/ArraySubset.php', + 'PHPUnit\\Framework\\Constraint\\Attribute' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Attribute.php', + 'PHPUnit\\Framework\\Constraint\\Callback' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Callback.php', + 'PHPUnit\\Framework\\Constraint\\ClassHasAttribute' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/ClassHasAttribute.php', + 'PHPUnit\\Framework\\Constraint\\ClassHasStaticAttribute' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/ClassHasStaticAttribute.php', + 'PHPUnit\\Framework\\Constraint\\Composite' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Composite.php', + 'PHPUnit\\Framework\\Constraint\\Constraint' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Constraint.php', + 'PHPUnit\\Framework\\Constraint\\Count' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Count.php', + 'PHPUnit\\Framework\\Constraint\\DirectoryExists' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/DirectoryExists.php', + 'PHPUnit\\Framework\\Constraint\\Exception' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Exception.php', + 'PHPUnit\\Framework\\Constraint\\ExceptionCode' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/ExceptionCode.php', + 'PHPUnit\\Framework\\Constraint\\ExceptionMessage' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/ExceptionMessage.php', + 'PHPUnit\\Framework\\Constraint\\ExceptionMessageRegularExpression' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/ExceptionMessageRegularExpression.php', + 'PHPUnit\\Framework\\Constraint\\FileExists' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/FileExists.php', + 'PHPUnit\\Framework\\Constraint\\GreaterThan' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/GreaterThan.php', + 'PHPUnit\\Framework\\Constraint\\IsAnything' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/IsAnything.php', + 'PHPUnit\\Framework\\Constraint\\IsEmpty' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/IsEmpty.php', + 'PHPUnit\\Framework\\Constraint\\IsEqual' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/IsEqual.php', + 'PHPUnit\\Framework\\Constraint\\IsFalse' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/IsFalse.php', + 'PHPUnit\\Framework\\Constraint\\IsFinite' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/IsFinite.php', + 'PHPUnit\\Framework\\Constraint\\IsIdentical' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/IsIdentical.php', + 'PHPUnit\\Framework\\Constraint\\IsInfinite' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/IsInfinite.php', + 'PHPUnit\\Framework\\Constraint\\IsInstanceOf' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/IsInstanceOf.php', + 'PHPUnit\\Framework\\Constraint\\IsJson' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/IsJson.php', + 'PHPUnit\\Framework\\Constraint\\IsNan' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/IsNan.php', + 'PHPUnit\\Framework\\Constraint\\IsNull' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/IsNull.php', + 'PHPUnit\\Framework\\Constraint\\IsReadable' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/IsReadable.php', + 'PHPUnit\\Framework\\Constraint\\IsTrue' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/IsTrue.php', + 'PHPUnit\\Framework\\Constraint\\IsType' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/IsType.php', + 'PHPUnit\\Framework\\Constraint\\IsWritable' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/IsWritable.php', + 'PHPUnit\\Framework\\Constraint\\JsonMatches' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/JsonMatches.php', + 'PHPUnit\\Framework\\Constraint\\JsonMatchesErrorMessageProvider' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/JsonMatchesErrorMessageProvider.php', + 'PHPUnit\\Framework\\Constraint\\LessThan' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/LessThan.php', + 'PHPUnit\\Framework\\Constraint\\LogicalAnd' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/LogicalAnd.php', + 'PHPUnit\\Framework\\Constraint\\LogicalNot' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/LogicalNot.php', + 'PHPUnit\\Framework\\Constraint\\LogicalOr' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/LogicalOr.php', + 'PHPUnit\\Framework\\Constraint\\LogicalXor' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/LogicalXor.php', + 'PHPUnit\\Framework\\Constraint\\ObjectHasAttribute' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/ObjectHasAttribute.php', + 'PHPUnit\\Framework\\Constraint\\RegularExpression' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/RegularExpression.php', + 'PHPUnit\\Framework\\Constraint\\SameSize' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/SameSize.php', + 'PHPUnit\\Framework\\Constraint\\StringContains' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/StringContains.php', + 'PHPUnit\\Framework\\Constraint\\StringEndsWith' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/StringEndsWith.php', + 'PHPUnit\\Framework\\Constraint\\StringMatchesFormatDescription' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/StringMatchesFormatDescription.php', + 'PHPUnit\\Framework\\Constraint\\StringStartsWith' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/StringStartsWith.php', + 'PHPUnit\\Framework\\Constraint\\TraversableContains' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/TraversableContains.php', + 'PHPUnit\\Framework\\Constraint\\TraversableContainsOnly' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/TraversableContainsOnly.php', + 'PHPUnit\\Framework\\CoveredCodeNotExecutedException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/CoveredCodeNotExecutedException.php', + 'PHPUnit\\Framework\\DataProviderTestSuite' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/DataProviderTestSuite.php', + 'PHPUnit\\Framework\\Error\\Deprecated' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Error/Deprecated.php', + 'PHPUnit\\Framework\\Error\\Error' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Error/Error.php', + 'PHPUnit\\Framework\\Error\\Notice' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Error/Notice.php', + 'PHPUnit\\Framework\\Error\\Warning' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Error/Warning.php', + 'PHPUnit\\Framework\\Exception' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception.php', + 'PHPUnit\\Framework\\ExceptionWrapper' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/ExceptionWrapper.php', + 'PHPUnit\\Framework\\ExpectationFailedException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/ExpectationFailedException.php', + 'PHPUnit\\Framework\\IncompleteTest' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/IncompleteTest.php', + 'PHPUnit\\Framework\\IncompleteTestCase' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/IncompleteTestCase.php', + 'PHPUnit\\Framework\\IncompleteTestError' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/IncompleteTestError.php', + 'PHPUnit\\Framework\\InvalidCoversTargetException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/InvalidCoversTargetException.php', + 'PHPUnit\\Framework\\MissingCoversAnnotationException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MissingCoversAnnotationException.php', + 'PHPUnit\\Framework\\MockObject\\BadMethodCallException' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Exception/BadMethodCallException.php', + 'PHPUnit\\Framework\\MockObject\\Builder\\Identity' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Builder/Identity.php', + 'PHPUnit\\Framework\\MockObject\\Builder\\InvocationMocker' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Builder/InvocationMocker.php', + 'PHPUnit\\Framework\\MockObject\\Builder\\Match' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Builder/Match.php', + 'PHPUnit\\Framework\\MockObject\\Builder\\MethodNameMatch' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Builder/MethodNameMatch.php', + 'PHPUnit\\Framework\\MockObject\\Builder\\NamespaceMatch' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Builder/NamespaceMatch.php', + 'PHPUnit\\Framework\\MockObject\\Builder\\ParametersMatch' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Builder/ParametersMatch.php', + 'PHPUnit\\Framework\\MockObject\\Builder\\Stub' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Builder/Stub.php', + 'PHPUnit\\Framework\\MockObject\\Exception' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Exception/Exception.php', + 'PHPUnit\\Framework\\MockObject\\Generator' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Generator.php', + 'PHPUnit\\Framework\\MockObject\\Invocation' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Invocation/Invocation.php', + 'PHPUnit\\Framework\\MockObject\\InvocationMocker' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/InvocationMocker.php', + 'PHPUnit\\Framework\\MockObject\\Invocation\\ObjectInvocation' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Invocation/ObjectInvocation.php', + 'PHPUnit\\Framework\\MockObject\\Invocation\\StaticInvocation' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Invocation/StaticInvocation.php', + 'PHPUnit\\Framework\\MockObject\\Invokable' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Invokable.php', + 'PHPUnit\\Framework\\MockObject\\Matcher' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Matcher.php', + 'PHPUnit\\Framework\\MockObject\\Matcher\\AnyInvokedCount' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Matcher/AnyInvokedCount.php', + 'PHPUnit\\Framework\\MockObject\\Matcher\\AnyParameters' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Matcher/AnyParameters.php', + 'PHPUnit\\Framework\\MockObject\\Matcher\\ConsecutiveParameters' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Matcher/ConsecutiveParameters.php', + 'PHPUnit\\Framework\\MockObject\\Matcher\\Invocation' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Matcher/Invocation.php', + 'PHPUnit\\Framework\\MockObject\\Matcher\\InvokedAtIndex' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Matcher/InvokedAtIndex.php', + 'PHPUnit\\Framework\\MockObject\\Matcher\\InvokedAtLeastCount' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Matcher/InvokedAtLeastCount.php', + 'PHPUnit\\Framework\\MockObject\\Matcher\\InvokedAtLeastOnce' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Matcher/InvokedAtLeastOnce.php', + 'PHPUnit\\Framework\\MockObject\\Matcher\\InvokedAtMostCount' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Matcher/InvokedAtMostCount.php', + 'PHPUnit\\Framework\\MockObject\\Matcher\\InvokedCount' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Matcher/InvokedCount.php', + 'PHPUnit\\Framework\\MockObject\\Matcher\\InvokedRecorder' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Matcher/InvokedRecorder.php', + 'PHPUnit\\Framework\\MockObject\\Matcher\\MethodName' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Matcher/MethodName.php', + 'PHPUnit\\Framework\\MockObject\\Matcher\\Parameters' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Matcher/Parameters.php', + 'PHPUnit\\Framework\\MockObject\\Matcher\\StatelessInvocation' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Matcher/StatelessInvocation.php', + 'PHPUnit\\Framework\\MockObject\\MockBuilder' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/MockBuilder.php', + 'PHPUnit\\Framework\\MockObject\\MockObject' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/ForwardCompatibility/MockObject.php', + 'PHPUnit\\Framework\\MockObject\\RuntimeException' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Exception/RuntimeException.php', + 'PHPUnit\\Framework\\MockObject\\Stub' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Stub.php', + 'PHPUnit\\Framework\\MockObject\\Stub\\ConsecutiveCalls' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Stub/ConsecutiveCalls.php', + 'PHPUnit\\Framework\\MockObject\\Stub\\Exception' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Stub/Exception.php', + 'PHPUnit\\Framework\\MockObject\\Stub\\MatcherCollection' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Stub/MatcherCollection.php', + 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnArgument' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Stub/ReturnArgument.php', + 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnCallback' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Stub/ReturnCallback.php', + 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnReference' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Stub/ReturnReference.php', + 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnSelf' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Stub/ReturnSelf.php', + 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnStub' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Stub/ReturnStub.php', + 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnValueMap' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Stub/ReturnValueMap.php', + 'PHPUnit\\Framework\\MockObject\\Verifiable' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/Verifiable.php', + 'PHPUnit\\Framework\\OutputError' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/OutputError.php', + 'PHPUnit\\Framework\\RiskyTest' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/RiskyTest.php', + 'PHPUnit\\Framework\\RiskyTestError' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/RiskyTestError.php', + 'PHPUnit\\Framework\\SelfDescribing' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/SelfDescribing.php', + 'PHPUnit\\Framework\\SkippedTest' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/SkippedTest.php', + 'PHPUnit\\Framework\\SkippedTestCase' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/SkippedTestCase.php', + 'PHPUnit\\Framework\\SkippedTestError' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/SkippedTestError.php', + 'PHPUnit\\Framework\\SkippedTestSuiteError' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/SkippedTestSuiteError.php', + 'PHPUnit\\Framework\\SyntheticError' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/SyntheticError.php', + 'PHPUnit\\Framework\\Test' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Test.php', + 'PHPUnit\\Framework\\TestCase' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/TestCase.php', + 'PHPUnit\\Framework\\TestFailure' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/TestFailure.php', + 'PHPUnit\\Framework\\TestListener' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/TestListener.php', + 'PHPUnit\\Framework\\TestListenerDefaultImplementation' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/TestListenerDefaultImplementation.php', + 'PHPUnit\\Framework\\TestResult' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/TestResult.php', + 'PHPUnit\\Framework\\TestSuite' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/TestSuite.php', + 'PHPUnit\\Framework\\TestSuiteIterator' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/TestSuiteIterator.php', + 'PHPUnit\\Framework\\UnintentionallyCoveredCodeError' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/UnintentionallyCoveredCodeError.php', + 'PHPUnit\\Framework\\Warning' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Warning.php', + 'PHPUnit\\Framework\\WarningTestCase' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/WarningTestCase.php', + 'PHPUnit\\Runner\\BaseTestRunner' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/BaseTestRunner.php', + 'PHPUnit\\Runner\\Exception' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Exception.php', + 'PHPUnit\\Runner\\Filter\\ExcludeGroupFilterIterator' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Filter/ExcludeGroupFilterIterator.php', + 'PHPUnit\\Runner\\Filter\\Factory' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Filter/Factory.php', + 'PHPUnit\\Runner\\Filter\\GroupFilterIterator' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Filter/GroupFilterIterator.php', + 'PHPUnit\\Runner\\Filter\\IncludeGroupFilterIterator' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Filter/IncludeGroupFilterIterator.php', + 'PHPUnit\\Runner\\Filter\\NameFilterIterator' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Filter/NameFilterIterator.php', + 'PHPUnit\\Runner\\PhptTestCase' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/PhptTestCase.php', + 'PHPUnit\\Runner\\StandardTestSuiteLoader' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/StandardTestSuiteLoader.php', + 'PHPUnit\\Runner\\TestSuiteLoader' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/TestSuiteLoader.php', + 'PHPUnit\\Runner\\Version' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Version.php', + 'PHPUnit\\TextUI\\Command' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Command.php', + 'PHPUnit\\TextUI\\ResultPrinter' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/ResultPrinter.php', + 'PHPUnit\\TextUI\\TestRunner' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/TestRunner.php', + 'PHPUnit\\Util\\Blacklist' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Blacklist.php', + 'PHPUnit\\Util\\Configuration' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Configuration.php', + 'PHPUnit\\Util\\ConfigurationGenerator' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/ConfigurationGenerator.php', + 'PHPUnit\\Util\\ErrorHandler' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/ErrorHandler.php', + 'PHPUnit\\Util\\Fileloader' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Fileloader.php', + 'PHPUnit\\Util\\Filesystem' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Filesystem.php', + 'PHPUnit\\Util\\Filter' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Filter.php', + 'PHPUnit\\Util\\Getopt' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Getopt.php', + 'PHPUnit\\Util\\GlobalState' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/GlobalState.php', + 'PHPUnit\\Util\\InvalidArgumentHelper' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/InvalidArgumentHelper.php', + 'PHPUnit\\Util\\Json' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Json.php', + 'PHPUnit\\Util\\Log\\JUnit' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Log/JUnit.php', + 'PHPUnit\\Util\\Log\\TeamCity' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Log/TeamCity.php', + 'PHPUnit\\Util\\PHP\\AbstractPhpProcess' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/PHP/AbstractPhpProcess.php', + 'PHPUnit\\Util\\PHP\\DefaultPhpProcess' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/PHP/DefaultPhpProcess.php', + 'PHPUnit\\Util\\PHP\\WindowsPhpProcess' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/PHP/WindowsPhpProcess.php', + 'PHPUnit\\Util\\Printer' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Printer.php', + 'PHPUnit\\Util\\RegularExpression' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/RegularExpression.php', + 'PHPUnit\\Util\\Test' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Test.php', + 'PHPUnit\\Util\\TestDox\\HtmlResultPrinter' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/TestDox/HtmlResultPrinter.php', + 'PHPUnit\\Util\\TestDox\\NamePrettifier' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/TestDox/NamePrettifier.php', + 'PHPUnit\\Util\\TestDox\\ResultPrinter' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/TestDox/ResultPrinter.php', + 'PHPUnit\\Util\\TestDox\\TextResultPrinter' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/TestDox/TextResultPrinter.php', + 'PHPUnit\\Util\\TestDox\\XmlResultPrinter' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/TestDox/XmlResultPrinter.php', + 'PHPUnit\\Util\\TextTestListRenderer' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/TextTestListRenderer.php', + 'PHPUnit\\Util\\Type' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Type.php', + 'PHPUnit\\Util\\Xml' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/XML.php', + 'PHPUnit\\Util\\XmlTestListRenderer' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/XmlTestListRenderer.php', + 'PHPUnit_Framework_MockObject_MockObject' => __DIR__ . '/..' . '/phpunit/phpunit-mock-objects/src/MockObject.php', 'PHP_Timer' => __DIR__ . '/..' . '/phpunit/php-timer/src/Timer.php', 'PHP_Token' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', 'PHP_TokenWithScope' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', @@ -513,6 +563,7 @@ class ComposerStaticInita01cedac3fb3abb6b395843685a2b9da 'PHP_Token_NEW' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', 'PHP_Token_NS_C' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', 'PHP_Token_NS_SEPARATOR' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', + 'PHP_Token_NULLSAFE_OBJECT_OPERATOR' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', 'PHP_Token_NUM_STRING' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', 'PHP_Token_OBJECT_CAST' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', 'PHP_Token_OBJECT_OPERATOR' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', @@ -583,7 +634,72 @@ class ComposerStaticInita01cedac3fb3abb6b395843685a2b9da 'PHP_Token_XOR_EQUAL' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', 'PHP_Token_YIELD' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', 'PHP_Token_YIELD_FROM' => __DIR__ . '/..' . '/phpunit/php-token-stream/src/Token.php', - 'Robo\\composer\\ScriptHandler' => __DIR__ . '/..' . '/consolidation/robo/scripts/composer/ScriptHandler.php', + 'PharIo\\Manifest\\Application' => __DIR__ . '/..' . '/phar-io/manifest/src/values/Application.php', + 'PharIo\\Manifest\\ApplicationName' => __DIR__ . '/..' . '/phar-io/manifest/src/values/ApplicationName.php', + 'PharIo\\Manifest\\Author' => __DIR__ . '/..' . '/phar-io/manifest/src/values/Author.php', + 'PharIo\\Manifest\\AuthorCollection' => __DIR__ . '/..' . '/phar-io/manifest/src/values/AuthorCollection.php', + 'PharIo\\Manifest\\AuthorCollectionIterator' => __DIR__ . '/..' . '/phar-io/manifest/src/values/AuthorCollectionIterator.php', + 'PharIo\\Manifest\\AuthorElement' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/AuthorElement.php', + 'PharIo\\Manifest\\AuthorElementCollection' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/AuthorElementCollection.php', + 'PharIo\\Manifest\\BundledComponent' => __DIR__ . '/..' . '/phar-io/manifest/src/values/BundledComponent.php', + 'PharIo\\Manifest\\BundledComponentCollection' => __DIR__ . '/..' . '/phar-io/manifest/src/values/BundledComponentCollection.php', + 'PharIo\\Manifest\\BundledComponentCollectionIterator' => __DIR__ . '/..' . '/phar-io/manifest/src/values/BundledComponentCollectionIterator.php', + 'PharIo\\Manifest\\BundlesElement' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/BundlesElement.php', + 'PharIo\\Manifest\\ComponentElement' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/ComponentElement.php', + 'PharIo\\Manifest\\ComponentElementCollection' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/ComponentElementCollection.php', + 'PharIo\\Manifest\\ContainsElement' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/ContainsElement.php', + 'PharIo\\Manifest\\CopyrightElement' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/CopyrightElement.php', + 'PharIo\\Manifest\\CopyrightInformation' => __DIR__ . '/..' . '/phar-io/manifest/src/values/CopyrightInformation.php', + 'PharIo\\Manifest\\ElementCollection' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/ElementCollection.php', + 'PharIo\\Manifest\\Email' => __DIR__ . '/..' . '/phar-io/manifest/src/values/Email.php', + 'PharIo\\Manifest\\Exception' => __DIR__ . '/..' . '/phar-io/manifest/src/exceptions/Exception.php', + 'PharIo\\Manifest\\ExtElement' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/ExtElement.php', + 'PharIo\\Manifest\\ExtElementCollection' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/ExtElementCollection.php', + 'PharIo\\Manifest\\Extension' => __DIR__ . '/..' . '/phar-io/manifest/src/values/Extension.php', + 'PharIo\\Manifest\\ExtensionElement' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/ExtensionElement.php', + 'PharIo\\Manifest\\InvalidApplicationNameException' => __DIR__ . '/..' . '/phar-io/manifest/src/exceptions/InvalidApplicationNameException.php', + 'PharIo\\Manifest\\InvalidEmailException' => __DIR__ . '/..' . '/phar-io/manifest/src/exceptions/InvalidEmailException.php', + 'PharIo\\Manifest\\InvalidUrlException' => __DIR__ . '/..' . '/phar-io/manifest/src/exceptions/InvalidUrlException.php', + 'PharIo\\Manifest\\Library' => __DIR__ . '/..' . '/phar-io/manifest/src/values/Library.php', + 'PharIo\\Manifest\\License' => __DIR__ . '/..' . '/phar-io/manifest/src/values/License.php', + 'PharIo\\Manifest\\LicenseElement' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/LicenseElement.php', + 'PharIo\\Manifest\\Manifest' => __DIR__ . '/..' . '/phar-io/manifest/src/values/Manifest.php', + 'PharIo\\Manifest\\ManifestDocument' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/ManifestDocument.php', + 'PharIo\\Manifest\\ManifestDocumentException' => __DIR__ . '/..' . '/phar-io/manifest/src/exceptions/ManifestDocumentException.php', + 'PharIo\\Manifest\\ManifestDocumentLoadingException' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/ManifestDocumentLoadingException.php', + 'PharIo\\Manifest\\ManifestDocumentMapper' => __DIR__ . '/..' . '/phar-io/manifest/src/ManifestDocumentMapper.php', + 'PharIo\\Manifest\\ManifestDocumentMapperException' => __DIR__ . '/..' . '/phar-io/manifest/src/exceptions/ManifestDocumentMapperException.php', + 'PharIo\\Manifest\\ManifestElement' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/ManifestElement.php', + 'PharIo\\Manifest\\ManifestElementException' => __DIR__ . '/..' . '/phar-io/manifest/src/exceptions/ManifestElementException.php', + 'PharIo\\Manifest\\ManifestLoader' => __DIR__ . '/..' . '/phar-io/manifest/src/ManifestLoader.php', + 'PharIo\\Manifest\\ManifestLoaderException' => __DIR__ . '/..' . '/phar-io/manifest/src/exceptions/ManifestLoaderException.php', + 'PharIo\\Manifest\\ManifestSerializer' => __DIR__ . '/..' . '/phar-io/manifest/src/ManifestSerializer.php', + 'PharIo\\Manifest\\PhpElement' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/PhpElement.php', + 'PharIo\\Manifest\\PhpExtensionRequirement' => __DIR__ . '/..' . '/phar-io/manifest/src/values/PhpExtensionRequirement.php', + 'PharIo\\Manifest\\PhpVersionRequirement' => __DIR__ . '/..' . '/phar-io/manifest/src/values/PhpVersionRequirement.php', + 'PharIo\\Manifest\\Requirement' => __DIR__ . '/..' . '/phar-io/manifest/src/values/Requirement.php', + 'PharIo\\Manifest\\RequirementCollection' => __DIR__ . '/..' . '/phar-io/manifest/src/values/RequirementCollection.php', + 'PharIo\\Manifest\\RequirementCollectionIterator' => __DIR__ . '/..' . '/phar-io/manifest/src/values/RequirementCollectionIterator.php', + 'PharIo\\Manifest\\RequiresElement' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/RequiresElement.php', + 'PharIo\\Manifest\\Type' => __DIR__ . '/..' . '/phar-io/manifest/src/values/Type.php', + 'PharIo\\Manifest\\Url' => __DIR__ . '/..' . '/phar-io/manifest/src/values/Url.php', + 'PharIo\\Version\\AbstractVersionConstraint' => __DIR__ . '/..' . '/phar-io/version/src/AbstractVersionConstraint.php', + 'PharIo\\Version\\AndVersionConstraintGroup' => __DIR__ . '/..' . '/phar-io/version/src/AndVersionConstraintGroup.php', + 'PharIo\\Version\\AnyVersionConstraint' => __DIR__ . '/..' . '/phar-io/version/src/AnyVersionConstraint.php', + 'PharIo\\Version\\ExactVersionConstraint' => __DIR__ . '/..' . '/phar-io/version/src/ExactVersionConstraint.php', + 'PharIo\\Version\\Exception' => __DIR__ . '/..' . '/phar-io/version/src/Exception.php', + 'PharIo\\Version\\GreaterThanOrEqualToVersionConstraint' => __DIR__ . '/..' . '/phar-io/version/src/GreaterThanOrEqualToVersionConstraint.php', + 'PharIo\\Version\\InvalidVersionException' => __DIR__ . '/..' . '/phar-io/version/src/InvalidVersionException.php', + 'PharIo\\Version\\OrVersionConstraintGroup' => __DIR__ . '/..' . '/phar-io/version/src/OrVersionConstraintGroup.php', + 'PharIo\\Version\\PreReleaseSuffix' => __DIR__ . '/..' . '/phar-io/version/src/PreReleaseSuffix.php', + 'PharIo\\Version\\SpecificMajorAndMinorVersionConstraint' => __DIR__ . '/..' . '/phar-io/version/src/SpecificMajorAndMinorVersionConstraint.php', + 'PharIo\\Version\\SpecificMajorVersionConstraint' => __DIR__ . '/..' . '/phar-io/version/src/SpecificMajorVersionConstraint.php', + 'PharIo\\Version\\UnsupportedVersionConstraintException' => __DIR__ . '/..' . '/phar-io/version/src/UnsupportedVersionConstraintException.php', + 'PharIo\\Version\\Version' => __DIR__ . '/..' . '/phar-io/version/src/Version.php', + 'PharIo\\Version\\VersionConstraint' => __DIR__ . '/..' . '/phar-io/version/src/VersionConstraint.php', + 'PharIo\\Version\\VersionConstraintParser' => __DIR__ . '/..' . '/phar-io/version/src/VersionConstraintParser.php', + 'PharIo\\Version\\VersionConstraintValue' => __DIR__ . '/..' . '/phar-io/version/src/VersionConstraintValue.php', + 'PharIo\\Version\\VersionNumber' => __DIR__ . '/..' . '/phar-io/version/src/VersionNumber.php', 'SebastianBergmann\\CodeCoverage\\CodeCoverage' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/CodeCoverage.php', 'SebastianBergmann\\CodeCoverage\\CoveredCodeNotExecutedException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/CoveredCodeNotExecutedException.php', 'SebastianBergmann\\CodeCoverage\\Driver\\Driver' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Driver/Driver.php', @@ -608,6 +724,7 @@ class ComposerStaticInita01cedac3fb3abb6b395843685a2b9da 'SebastianBergmann\\CodeCoverage\\Report\\Html\\Renderer' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Html/Renderer.php', 'SebastianBergmann\\CodeCoverage\\Report\\PHP' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/PHP.php', 'SebastianBergmann\\CodeCoverage\\Report\\Text' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Text.php', + 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\BuildInformation' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Xml/BuildInformation.php', 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Coverage' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Xml/Coverage.php', 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Directory' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Xml/Directory.php', 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Facade' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Xml/Facade.php', @@ -616,12 +733,14 @@ class ComposerStaticInita01cedac3fb3abb6b395843685a2b9da 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Node' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Xml/Node.php', 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Project' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Xml/Project.php', 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Report' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Xml/Report.php', + 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Source' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Xml/Source.php', 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Tests' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Xml/Tests.php', 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Totals' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Xml/Totals.php', 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Unit' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Xml/Unit.php', 'SebastianBergmann\\CodeCoverage\\RuntimeException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/RuntimeException.php', 'SebastianBergmann\\CodeCoverage\\UnintentionallyCoveredCodeException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/UnintentionallyCoveredCodeException.php', 'SebastianBergmann\\CodeCoverage\\Util' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Util.php', + 'SebastianBergmann\\CodeCoverage\\Version' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Version.php', 'SebastianBergmann\\CodeUnitReverseLookup\\Wizard' => __DIR__ . '/..' . '/sebastian/code-unit-reverse-lookup/src/Wizard.php', 'SebastianBergmann\\Comparator\\ArrayComparator' => __DIR__ . '/..' . '/sebastian/comparator/src/ArrayComparator.php', 'SebastianBergmann\\Comparator\\Comparator' => __DIR__ . '/..' . '/sebastian/comparator/src/Comparator.php', @@ -641,39 +760,58 @@ class ComposerStaticInita01cedac3fb3abb6b395843685a2b9da 'SebastianBergmann\\Diff\\Chunk' => __DIR__ . '/..' . '/sebastian/diff/src/Chunk.php', 'SebastianBergmann\\Diff\\Diff' => __DIR__ . '/..' . '/sebastian/diff/src/Diff.php', 'SebastianBergmann\\Diff\\Differ' => __DIR__ . '/..' . '/sebastian/diff/src/Differ.php', - 'SebastianBergmann\\Diff\\LCS\\LongestCommonSubsequence' => __DIR__ . '/..' . '/sebastian/diff/src/LCS/LongestCommonSubsequence.php', - 'SebastianBergmann\\Diff\\LCS\\MemoryEfficientImplementation' => __DIR__ . '/..' . '/sebastian/diff/src/LCS/MemoryEfficientLongestCommonSubsequenceImplementation.php', - 'SebastianBergmann\\Diff\\LCS\\TimeEfficientImplementation' => __DIR__ . '/..' . '/sebastian/diff/src/LCS/TimeEfficientLongestCommonSubsequenceImplementation.php', + 'SebastianBergmann\\Diff\\Exception' => __DIR__ . '/..' . '/sebastian/diff/src/Exception/Exception.php', + 'SebastianBergmann\\Diff\\InvalidArgumentException' => __DIR__ . '/..' . '/sebastian/diff/src/Exception/InvalidArgumentException.php', 'SebastianBergmann\\Diff\\Line' => __DIR__ . '/..' . '/sebastian/diff/src/Line.php', + 'SebastianBergmann\\Diff\\LongestCommonSubsequenceCalculator' => __DIR__ . '/..' . '/sebastian/diff/src/LongestCommonSubsequenceCalculator.php', + 'SebastianBergmann\\Diff\\MemoryEfficientLongestCommonSubsequenceCalculator' => __DIR__ . '/..' . '/sebastian/diff/src/MemoryEfficientLongestCommonSubsequenceCalculator.php', + 'SebastianBergmann\\Diff\\Output\\AbstractChunkOutputBuilder' => __DIR__ . '/..' . '/sebastian/diff/src/Output/AbstractChunkOutputBuilder.php', + 'SebastianBergmann\\Diff\\Output\\DiffOnlyOutputBuilder' => __DIR__ . '/..' . '/sebastian/diff/src/Output/DiffOnlyOutputBuilder.php', + 'SebastianBergmann\\Diff\\Output\\DiffOutputBuilderInterface' => __DIR__ . '/..' . '/sebastian/diff/src/Output/DiffOutputBuilderInterface.php', + 'SebastianBergmann\\Diff\\Output\\UnifiedDiffOutputBuilder' => __DIR__ . '/..' . '/sebastian/diff/src/Output/UnifiedDiffOutputBuilder.php', 'SebastianBergmann\\Diff\\Parser' => __DIR__ . '/..' . '/sebastian/diff/src/Parser.php', + 'SebastianBergmann\\Diff\\TimeEfficientLongestCommonSubsequenceCalculator' => __DIR__ . '/..' . '/sebastian/diff/src/TimeEfficientLongestCommonSubsequenceCalculator.php', 'SebastianBergmann\\Environment\\Console' => __DIR__ . '/..' . '/sebastian/environment/src/Console.php', + 'SebastianBergmann\\Environment\\OperatingSystem' => __DIR__ . '/..' . '/sebastian/environment/src/OperatingSystem.php', 'SebastianBergmann\\Environment\\Runtime' => __DIR__ . '/..' . '/sebastian/environment/src/Runtime.php', 'SebastianBergmann\\Exporter\\Exporter' => __DIR__ . '/..' . '/sebastian/exporter/src/Exporter.php', 'SebastianBergmann\\GlobalState\\Blacklist' => __DIR__ . '/..' . '/sebastian/global-state/src/Blacklist.php', 'SebastianBergmann\\GlobalState\\CodeExporter' => __DIR__ . '/..' . '/sebastian/global-state/src/CodeExporter.php', - 'SebastianBergmann\\GlobalState\\Exception' => __DIR__ . '/..' . '/sebastian/global-state/src/Exception.php', + 'SebastianBergmann\\GlobalState\\Exception' => __DIR__ . '/..' . '/sebastian/global-state/src/exceptions/Exception.php', 'SebastianBergmann\\GlobalState\\Restorer' => __DIR__ . '/..' . '/sebastian/global-state/src/Restorer.php', - 'SebastianBergmann\\GlobalState\\RuntimeException' => __DIR__ . '/..' . '/sebastian/global-state/src/RuntimeException.php', + 'SebastianBergmann\\GlobalState\\RuntimeException' => __DIR__ . '/..' . '/sebastian/global-state/src/exceptions/RuntimeException.php', 'SebastianBergmann\\GlobalState\\Snapshot' => __DIR__ . '/..' . '/sebastian/global-state/src/Snapshot.php', 'SebastianBergmann\\ObjectEnumerator\\Enumerator' => __DIR__ . '/..' . '/sebastian/object-enumerator/src/Enumerator.php', 'SebastianBergmann\\ObjectEnumerator\\Exception' => __DIR__ . '/..' . '/sebastian/object-enumerator/src/Exception.php', 'SebastianBergmann\\ObjectEnumerator\\InvalidArgumentException' => __DIR__ . '/..' . '/sebastian/object-enumerator/src/InvalidArgumentException.php', + 'SebastianBergmann\\ObjectReflector\\Exception' => __DIR__ . '/..' . '/sebastian/object-reflector/src/Exception.php', + 'SebastianBergmann\\ObjectReflector\\InvalidArgumentException' => __DIR__ . '/..' . '/sebastian/object-reflector/src/InvalidArgumentException.php', + 'SebastianBergmann\\ObjectReflector\\ObjectReflector' => __DIR__ . '/..' . '/sebastian/object-reflector/src/ObjectReflector.php', 'SebastianBergmann\\RecursionContext\\Context' => __DIR__ . '/..' . '/sebastian/recursion-context/src/Context.php', 'SebastianBergmann\\RecursionContext\\Exception' => __DIR__ . '/..' . '/sebastian/recursion-context/src/Exception.php', 'SebastianBergmann\\RecursionContext\\InvalidArgumentException' => __DIR__ . '/..' . '/sebastian/recursion-context/src/InvalidArgumentException.php', 'SebastianBergmann\\ResourceOperations\\ResourceOperations' => __DIR__ . '/..' . '/sebastian/resource-operations/src/ResourceOperations.php', 'SebastianBergmann\\Version' => __DIR__ . '/..' . '/sebastian/version/src/Version.php', 'Text_Template' => __DIR__ . '/..' . '/phpunit/php-text-template/src/Template.php', + 'TheSeer\\Tokenizer\\Exception' => __DIR__ . '/..' . '/theseer/tokenizer/src/Exception.php', + 'TheSeer\\Tokenizer\\NamespaceUri' => __DIR__ . '/..' . '/theseer/tokenizer/src/NamespaceUri.php', + 'TheSeer\\Tokenizer\\NamespaceUriException' => __DIR__ . '/..' . '/theseer/tokenizer/src/NamespaceUriException.php', + 'TheSeer\\Tokenizer\\Token' => __DIR__ . '/..' . '/theseer/tokenizer/src/Token.php', + 'TheSeer\\Tokenizer\\TokenCollection' => __DIR__ . '/..' . '/theseer/tokenizer/src/TokenCollection.php', + 'TheSeer\\Tokenizer\\TokenCollectionException' => __DIR__ . '/..' . '/theseer/tokenizer/src/TokenCollectionException.php', + 'TheSeer\\Tokenizer\\Tokenizer' => __DIR__ . '/..' . '/theseer/tokenizer/src/Tokenizer.php', + 'TheSeer\\Tokenizer\\XMLSerializer' => __DIR__ . '/..' . '/theseer/tokenizer/src/XMLSerializer.php', ); public static function getInitializer(ClassLoader $loader) { return \Closure::bind(function () use ($loader) { - $loader->prefixLengthsPsr4 = ComposerStaticInita01cedac3fb3abb6b395843685a2b9da::$prefixLengthsPsr4; - $loader->prefixDirsPsr4 = ComposerStaticInita01cedac3fb3abb6b395843685a2b9da::$prefixDirsPsr4; - $loader->fallbackDirsPsr4 = ComposerStaticInita01cedac3fb3abb6b395843685a2b9da::$fallbackDirsPsr4; - $loader->prefixesPsr0 = ComposerStaticInita01cedac3fb3abb6b395843685a2b9da::$prefixesPsr0; - $loader->classMap = ComposerStaticInita01cedac3fb3abb6b395843685a2b9da::$classMap; + $loader->prefixLengthsPsr4 = ComposerStaticInit6d4a28cd96a5bc5d5b97781c062572d9::$prefixLengthsPsr4; + $loader->prefixDirsPsr4 = ComposerStaticInit6d4a28cd96a5bc5d5b97781c062572d9::$prefixDirsPsr4; + $loader->fallbackDirsPsr4 = ComposerStaticInit6d4a28cd96a5bc5d5b97781c062572d9::$fallbackDirsPsr4; + $loader->prefixesPsr0 = ComposerStaticInit6d4a28cd96a5bc5d5b97781c062572d9::$prefixesPsr0; + $loader->fallbackDirsPsr0 = ComposerStaticInit6d4a28cd96a5bc5d5b97781c062572d9::$fallbackDirsPsr0; + $loader->classMap = ComposerStaticInit6d4a28cd96a5bc5d5b97781c062572d9::$classMap; }, null, ClassLoader::class); } diff --git a/lib/composer/vendor/composer/include_paths.php b/lib/composer/vendor/composer/include_paths.php new file mode 100644 index 000000000..7b7813d43 --- /dev/null +++ b/lib/composer/vendor/composer/include_paths.php @@ -0,0 +1,15 @@ +=5.4.0", + "psr/log": "^1", + "symfony/console": "^2.8|^3|^4", + "symfony/event-dispatcher": "^2.5|^3|^4", + "symfony/finder": "^2.5|^3|^4" + }, + "require-dev": { + "phpunit/phpunit": "^4.8", + "satooshi/php-coveralls": "^1.0.2 | dev-master", + "squizlabs/php_codesniffer": "^2.7" + }, + "time": "2017-11-29 16:23:23", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Consolidation\\AnnotatedCommand\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Greg Anderson", + "email": "greg.1.anderson@greenknowe.org" + } + ], + "description": "Initialize Symfony Console commands from annotated command class methods." + }, + { + "name": "consolidation/config", + "version": "1.0.9", + "version_normalized": "1.0.9.0", + "source": { + "type": "git", + "url": "https://github.com/consolidation/config.git", + "reference": "34ca8d7c1ee60a7b591b10617114cf1210a2e92c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/consolidation/config/zipball/34ca8d7c1ee60a7b591b10617114cf1210a2e92c", + "reference": "34ca8d7c1ee60a7b591b10617114cf1210a2e92c", + "shasum": "" + }, + "require": { + "dflydev/dot-access-data": "^1.1.0", + "grasmash/expander": "^1", + "php": ">=5.4.0" + }, + "require-dev": { + "greg-1-anderson/composer-test-scenarios": "^1", + "phpunit/phpunit": "^4", + "satooshi/php-coveralls": "^1.0", + "squizlabs/php_codesniffer": "2.*", + "symfony/console": "^2.5|^3|^4", + "symfony/yaml": "^2.8.11|^3|^4" + }, + "suggest": { + "symfony/yaml": "Required to use Consolidation\\Config\\Loader\\YamlConfigLoader" + }, + "time": "2017-12-22 17:28:19", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Consolidation\\Config\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Greg Anderson", + "email": "greg.1.anderson@greenknowe.org" + } + ], + "description": "Provide configuration services for a commandline tool." + }, + { + "name": "consolidation/log", + "version": "1.0.5", + "version_normalized": "1.0.5.0", + "source": { + "type": "git", + "url": "https://github.com/consolidation/log.git", + "reference": "dbc7c535f319a4a2d5a5077738f8eb7c10df8821" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/consolidation/log/zipball/dbc7c535f319a4a2d5a5077738f8eb7c10df8821", + "reference": "dbc7c535f319a4a2d5a5077738f8eb7c10df8821", + "shasum": "" + }, + "require": { + "php": ">=5.5.0", + "psr/log": "~1.0", + "symfony/console": "^2.8|^3|^4" + }, + "require-dev": { + "phpunit/phpunit": "4.*", + "satooshi/php-coveralls": "dev-master", + "squizlabs/php_codesniffer": "2.*" + }, + "time": "2017-11-29 01:44:16", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Consolidation\\Log\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Greg Anderson", + "email": "greg.1.anderson@greenknowe.org" + } + ], + "description": "Improved Psr-3 / Psr\\Log logger based on Symfony Console components." + }, + { + "name": "consolidation/output-formatters", + "version": "3.1.13", + "version_normalized": "3.1.13.0", + "source": { + "type": "git", + "url": "https://github.com/consolidation/output-formatters.git", + "reference": "3188461e965b32148c8fb85261833b2b72d34b8c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/consolidation/output-formatters/zipball/3188461e965b32148c8fb85261833b2b72d34b8c", + "reference": "3188461e965b32148c8fb85261833b2b72d34b8c", + "shasum": "" + }, + "require": { + "php": ">=5.4.0", + "symfony/console": "^2.8|^3|^4", + "symfony/finder": "^2.5|^3|^4" + }, + "require-dev": { + "phpunit/phpunit": "^4.8", + "satooshi/php-coveralls": "^1.0.2 | dev-master", + "squizlabs/php_codesniffer": "^2.7", + "victorjonsson/markdowndocs": "^1.3" + }, + "time": "2017-11-29 15:25:38", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Consolidation\\OutputFormatters\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Greg Anderson", + "email": "greg.1.anderson@greenknowe.org" + } + ], + "description": "Format text by applying transformations provided by plug-in formatters." + }, + { + "name": "consolidation/robo", + "version": "1.2.1", + "version_normalized": "1.2.1.0", + "source": { + "type": "git", + "url": "https://github.com/consolidation/Robo.git", + "reference": "b6296f1cf1088f1a11b0b819f9e42ef6f00b79a9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/consolidation/Robo/zipball/b6296f1cf1088f1a11b0b819f9e42ef6f00b79a9", + "reference": "b6296f1cf1088f1a11b0b819f9e42ef6f00b79a9", + "shasum": "" + }, + "require": { + "consolidation/annotated-command": "^2.8.2", + "consolidation/config": "^1.0.1", + "consolidation/log": "~1", + "consolidation/output-formatters": "^3.1.13", + "grasmash/yaml-expander": "^1.3", + "league/container": "^2.2", + "php": ">=5.5.0", + "symfony/console": "^2.8|^3|^4", + "symfony/event-dispatcher": "^2.5|^3|^4", + "symfony/filesystem": "^2.5|^3|^4", + "symfony/finder": "^2.5|^3|^4", + "symfony/process": "^2.5|^3|^4" + }, + "replace": { + "codegyre/robo": "< 1.0" + }, + "require-dev": { + "codeception/aspect-mock": "^1|^2.1.1", + "codeception/base": "^2.3.7", + "codeception/verify": "^0.3.2", + "greg-1-anderson/composer-test-scenarios": "^1", + "natxet/cssmin": "3.0.4", + "patchwork/jsqueeze": "~2", + "pear/archive_tar": "^1.4.2", + "phpunit/php-code-coverage": "~2|~4", + "satooshi/php-coveralls": "^2", + "squizlabs/php_codesniffer": "^2.8" + }, + "suggest": { + "henrikbjorn/lurker": "For monitoring filesystem changes in taskWatch", + "natxet/CssMin": "For minifying CSS files in taskMinify", + "patchwork/jsqueeze": "For minifying JS files in taskMinify", + "pear/archive_tar": "Allows tar archives to be created and extracted in taskPack and taskExtract, respectively." + }, + "time": "2017-12-29 06:48:35", + "bin": [ + "robo" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev", + "dev-state": "1.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Robo\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Davert", + "email": "davert.php@resend.cc" + } + ], + "description": "Modern task runner" + }, + { + "name": "container-interop/container-interop", + "version": "1.2.0", + "version_normalized": "1.2.0.0", + "source": { + "type": "git", + "url": "https://github.com/container-interop/container-interop.git", + "reference": "79cbf1341c22ec75643d841642dd5d6acd83bdb8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/container-interop/container-interop/zipball/79cbf1341c22ec75643d841642dd5d6acd83bdb8", + "reference": "79cbf1341c22ec75643d841642dd5d6acd83bdb8", + "shasum": "" + }, + "require": { + "psr/container": "^1.0" + }, + "time": "2017-02-14 19:40:03", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "Interop\\Container\\": "src/Interop/Container/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Promoting the interoperability of container objects (DIC, SL, etc.)", + "homepage": "https://github.com/container-interop/container-interop" + }, + { + "name": "dflydev/dot-access-data", + "version": "v1.1.0", + "version_normalized": "1.1.0.0", + "source": { + "type": "git", + "url": "https://github.com/dflydev/dflydev-dot-access-data.git", + "reference": "3fbd874921ab2c041e899d044585a2ab9795df8a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/3fbd874921ab2c041e899d044585a2ab9795df8a", + "reference": "3fbd874921ab2c041e899d044585a2ab9795df8a", + "shasum": "" + }, + "require": { + "php": ">=5.3.2" + }, + "time": "2017-01-20 21:14:22", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-0": { + "Dflydev\\DotAccessData": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Dragonfly Development Inc.", + "email": "info@dflydev.com", + "homepage": "http://dflydev.com" + }, + { + "name": "Beau Simensen", + "email": "beau@dflydev.com", + "homepage": "http://beausimensen.com" + }, + { + "name": "Carlos Frutos", + "email": "carlos@kiwing.it", + "homepage": "https://github.com/cfrutos" + } + ], + "description": "Given a deep data structure, access data by dot notation.", + "homepage": "https://github.com/dflydev/dflydev-dot-access-data", + "keywords": [ + "access", + "data", + "dot", + "notation" + ] + }, + { + "name": "doctrine/instantiator", + "version": "1.0.5", + "version_normalized": "1.0.5.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/instantiator.git", + "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d", + "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d", + "shasum": "" + }, + "require": { + "php": ">=5.3,<8.0-DEV" + }, + "require-dev": { + "athletic/athletic": "~0.1.8", + "ext-pdo": "*", + "ext-phar": "*", + "phpunit/phpunit": "~4.0", + "squizlabs/php_codesniffer": "~2.0" + }, + "time": "2015-06-14 21:17:01", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "homepage": "http://ocramius.github.com/" + } + ], + "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", + "homepage": "https://github.com/doctrine/instantiator", + "keywords": [ + "constructor", + "instantiate" + ] + }, + { + "name": "doctrine/lexer", + "version": "v1.0.1", + "version_normalized": "1.0.1.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/lexer.git", + "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/83893c552fd2045dd78aef794c31e694c37c0b8c", + "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c", + "shasum": "" + }, + "require": { + "php": ">=5.3.2" + }, + "time": "2014-09-09 13:34:57", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-0": { + "Doctrine\\Common\\Lexer\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Base library for a lexer that can be used in Top-Down, Recursive Descent Parsers.", + "homepage": "http://www.doctrine-project.org", + "keywords": [ + "lexer", + "parser" + ] + }, + { + "name": "egulias/email-validator", + "version": "2.1.3", + "version_normalized": "2.1.3.0", + "source": { + "type": "git", + "url": "https://github.com/egulias/EmailValidator.git", + "reference": "1bec00a10039b823cc94eef4eddd47dcd3b2ca04" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/1bec00a10039b823cc94eef4eddd47dcd3b2ca04", + "reference": "1bec00a10039b823cc94eef4eddd47dcd3b2ca04", + "shasum": "" + }, + "require": { + "doctrine/lexer": "^1.0.1", + "php": ">= 5.5" + }, + "require-dev": { + "dominicsayers/isemail": "dev-master", + "phpunit/phpunit": "^4.8.35", + "satooshi/php-coveralls": "^1.0.1" + }, + "suggest": { + "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation" + }, + "time": "2017-11-15 23:40:40", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Egulias\\EmailValidator\\": "EmailValidator" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Eduardo Gulias Davis" + } + ], + "description": "A library for validating emails against several RFCs", + "homepage": "https://github.com/egulias/EmailValidator", + "keywords": [ + "email", + "emailvalidation", + "emailvalidator", + "validation", + "validator" + ] + }, + { + "name": "filp/whoops", + "version": "2.1.14", + "version_normalized": "2.1.14.0", + "source": { + "type": "git", + "url": "https://github.com/filp/whoops.git", + "reference": "c6081b8838686aa04f1e83ba7e91f78b7b2a23e6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/filp/whoops/zipball/c6081b8838686aa04f1e83ba7e91f78b7b2a23e6", + "reference": "c6081b8838686aa04f1e83ba7e91f78b7b2a23e6", + "shasum": "" + }, + "require": { + "php": "^5.5.9 || ^7.0", + "psr/log": "^1.0.1" + }, + "require-dev": { + "mockery/mockery": "0.9.*", + "phpunit/phpunit": "^4.8.35 || ^5.7", + "symfony/var-dumper": "^2.6 || ^3.0" + }, + "suggest": { + "symfony/var-dumper": "Pretty print complex values better with var-dumper available", + "whoops/soap": "Formats errors as SOAP responses" + }, + "time": "2017-11-23 18:22:44", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Whoops\\": "src/Whoops/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Filipe Dobreira", + "homepage": "https://github.com/filp", + "role": "Developer" + } + ], + "description": "php error handling for cool kids", + "homepage": "https://filp.github.io/whoops/", + "keywords": [ + "error", + "exception", + "handling", + "library", + "throwable", + "whoops" + ] + }, + { + "name": "gettext/gettext", + "version": "v4.0.0", + "version_normalized": "4.0.0.0", + "source": { + "type": "git", + "url": "https://github.com/oscarotero/Gettext.git", + "reference": "7efdd4a01afd7fab85a90fb64fb88eeaef06f3b1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/oscarotero/Gettext/zipball/7efdd4a01afd7fab85a90fb64fb88eeaef06f3b1", + "reference": "7efdd4a01afd7fab85a90fb64fb88eeaef06f3b1", + "shasum": "" + }, + "require": { + "gettext/languages": "2.*", + "php": ">=5.4.0" + }, + "require-dev": { + "illuminate/view": "*", + "symfony/yaml": "~2", + "twig/extensions": "*", + "twig/twig": "*" + }, + "suggest": { + "illuminate/view": "Is necessary if you want to use the Blade extractor", + "symfony/yaml": "Is necessary if you want to use the Yaml extractor/generator", + "twig/extensions": "Is necessary if you want to use the Twig extractor", + "twig/twig": "Is necessary if you want to use the Twig extractor" + }, + "time": "2016-06-15 18:14:14", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "Gettext\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Oscar Otero", + "email": "oom@oscarotero.com", + "homepage": "http://oscarotero.com", + "role": "Developer" + } + ], + "description": "PHP gettext manager", + "homepage": "https://github.com/oscarotero/Gettext", + "keywords": [ + "JS", + "gettext", + "i18n", + "mo", + "po", + "translation" + ] + }, + { + "name": "gettext/languages", + "version": "2.3.0", + "version_normalized": "2.3.0.0", "source": { "type": "git", - "url": "https://github.com/Seldaek/monolog.git", - "reference": "c31a2c4e8db5da8b46c74cf275d7f109c0f249ac" + "url": "https://github.com/mlocati/cldr-to-gettext-plural-rules.git", + "reference": "49c39e51569963cc917a924b489e7025bfb9d8c7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/c31a2c4e8db5da8b46c74cf275d7f109c0f249ac", - "reference": "c31a2c4e8db5da8b46c74cf275d7f109c0f249ac", + "url": "https://api.github.com/repos/mlocati/cldr-to-gettext-plural-rules/zipball/49c39e51569963cc917a924b489e7025bfb9d8c7", + "reference": "49c39e51569963cc917a924b489e7025bfb9d8c7", "shasum": "" }, "require": { - "php": ">=5.3.0", - "psr/log": "~1.0" - }, - "provide": { - "psr/log-implementation": "1.0.0" + "php": ">=5.3" }, "require-dev": { - "aws/aws-sdk-php": "~2.4, >2.4.8", - "doctrine/couchdb": "~1.0@dev", - "graylog2/gelf-php": "~1.0", - "phpunit/phpunit": "~4.0", - "raven/raven": "~0.5", - "ruflin/elastica": "0.90.*", - "swiftmailer/swiftmailer": "~5.3", - "videlalvaro/php-amqplib": "~2.4" + "phpunit/phpunit": "^4" }, - "suggest": { - "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", - "doctrine/couchdb": "Allow sending log messages to a CouchDB server", - "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", - "ext-mongo": "Allow sending log messages to a MongoDB server", - "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", - "raven/raven": "Allow sending log messages to a Sentry server", - "rollbar/rollbar": "Allow sending log messages to Rollbar", - "ruflin/elastica": "Allow sending log messages to an Elastic Search server", - "videlalvaro/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib" + "time": "2017-03-23 17:02:28", + "bin": [ + "bin/export-plural-rules", + "bin/export-plural-rules.php" + ], + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "Gettext\\Languages\\": "src/" + } }, - "time": "2015-03-09 09:58:04", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michele Locati", + "email": "mlocati@gmail.com", + "role": "Developer" + } + ], + "description": "gettext languages with plural rules", + "homepage": "https://github.com/mlocati/cldr-to-gettext-plural-rules", + "keywords": [ + "cldr", + "i18n", + "internationalization", + "l10n", + "language", + "languages", + "localization", + "php", + "plural", + "plural rules", + "plurals", + "translate", + "translations", + "unicode" + ] + }, + { + "name": "grasmash/expander", + "version": "1.0.0", + "version_normalized": "1.0.0.0", + "source": { + "type": "git", + "url": "https://github.com/grasmash/expander.git", + "reference": "95d6037344a4be1dd5f8e0b0b2571a28c397578f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/grasmash/expander/zipball/95d6037344a4be1dd5f8e0b0b2571a28c397578f", + "reference": "95d6037344a4be1dd5f8e0b0b2571a28c397578f", + "shasum": "" + }, + "require": { + "dflydev/dot-access-data": "^1.1.0", + "php": ">=5.4" + }, + "require-dev": { + "greg-1-anderson/composer-test-scenarios": "^1", + "phpunit/phpunit": "^4|^5.5.4", + "satooshi/php-coveralls": "^1.0.2|dev-master", + "squizlabs/php_codesniffer": "^2.7" + }, + "time": "2017-12-21 22:14:55", "type": "library", "extra": { "branch-alias": { - "dev-master": "1.13.x-dev" + "dev-master": "1.x-dev" } }, "installation-source": "dist", "autoload": { "psr-4": { - "Monolog\\": "src/Monolog" + "Grasmash\\Expander\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -61,106 +785,102 @@ ], "authors": [ { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" + "name": "Matthew Grasmick" } ], - "description": "Sends your logs to files, sockets, inboxes, databases and various web services", - "homepage": "http://github.com/Seldaek/monolog", - "keywords": [ - "log", - "logging", - "psr-3" - ] + "description": "Expands internal property references in PHP arrays file." }, { - "name": "twig/twig", - "version": "v1.23.3", - "version_normalized": "1.23.3.0", + "name": "grasmash/yaml-expander", + "version": "1.4.0", + "version_normalized": "1.4.0.0", "source": { "type": "git", - "url": "https://github.com/twigphp/Twig.git", - "reference": "ae53fc2c312fdee63773b75cb570304f85388b08" + "url": "https://github.com/grasmash/yaml-expander.git", + "reference": "3f0f6001ae707a24f4d9733958d77d92bf9693b1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/Twig/zipball/ae53fc2c312fdee63773b75cb570304f85388b08", - "reference": "ae53fc2c312fdee63773b75cb570304f85388b08", + "url": "https://api.github.com/repos/grasmash/yaml-expander/zipball/3f0f6001ae707a24f4d9733958d77d92bf9693b1", + "reference": "3f0f6001ae707a24f4d9733958d77d92bf9693b1", "shasum": "" }, "require": { - "php": ">=5.2.7" + "dflydev/dot-access-data": "^1.1.0", + "php": ">=5.4", + "symfony/yaml": "^2.8.11|^3|^4" }, "require-dev": { - "symfony/debug": "~2.7", - "symfony/phpunit-bridge": "~2.7" + "greg-1-anderson/composer-test-scenarios": "^1", + "phpunit/phpunit": "^4.8|^5.5.4", + "satooshi/php-coveralls": "^1.0.2|dev-master", + "squizlabs/php_codesniffer": "^2.7" }, - "time": "2016-01-11 14:02:19", + "time": "2017-12-16 16:06:03", "type": "library", "extra": { "branch-alias": { - "dev-master": "1.23-dev" + "dev-master": "1.x-dev" } }, "installation-source": "dist", "autoload": { - "psr-0": { - "Twig_": "lib/" + "psr-4": { + "Grasmash\\YamlExpander\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com", - "homepage": "http://fabien.potencier.org", - "role": "Lead Developer" - }, - { - "name": "Armin Ronacher", - "email": "armin.ronacher@active-4.com", - "role": "Project Founder" - }, - { - "name": "Twig Team", - "homepage": "http://twig.sensiolabs.org/contributors", - "role": "Contributors" + "name": "Matthew Grasmick" } ], - "description": "Twig, the flexible, fast, and secure template language for PHP", - "homepage": "http://twig.sensiolabs.org", - "keywords": [ - "templating" - ] + "description": "Expands internal property references in a yaml file." }, { - "name": "gettext/languages", - "version": "2.1.2", - "version_normalized": "2.1.2.0", + "name": "league/container", + "version": "2.4.1", + "version_normalized": "2.4.1.0", "source": { "type": "git", - "url": "https://github.com/mlocati/cldr-to-gettext-plural-rules.git", - "reference": "c43ade7e3fb68bcf2379036513dce8d20553d9c8" + "url": "https://github.com/thephpleague/container.git", + "reference": "43f35abd03a12977a60ffd7095efd6a7808488c0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/mlocati/cldr-to-gettext-plural-rules/zipball/c43ade7e3fb68bcf2379036513dce8d20553d9c8", - "reference": "c43ade7e3fb68bcf2379036513dce8d20553d9c8", + "url": "https://api.github.com/repos/thephpleague/container/zipball/43f35abd03a12977a60ffd7095efd6a7808488c0", + "reference": "43f35abd03a12977a60ffd7095efd6a7808488c0", "shasum": "" }, "require": { - "php": ">=5.3" + "container-interop/container-interop": "^1.2", + "php": "^5.4.0 || ^7.0" + }, + "provide": { + "container-interop/container-interop-implementation": "^1.2", + "psr/container-implementation": "^1.0" + }, + "replace": { + "orno/di": "~2.0" }, - "time": "2015-03-27 11:32:41", + "require-dev": { + "phpunit/phpunit": "4.*" + }, + "time": "2017-05-10 09:20:27", "type": "library", + "extra": { + "branch-alias": { + "dev-2.x": "2.x-dev", + "dev-1.x": "1.x-dev" + } + }, "installation-source": "dist", "autoload": { "psr-4": { - "Gettext\\Languages\\": "src/" + "League\\Container\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -169,67 +889,78 @@ ], "authors": [ { - "name": "Michele Locati", - "email": "mlocati@gmail.com", + "name": "Phil Bennett", + "email": "philipobenito@gmail.com", + "homepage": "http://www.philipobenito.com", "role": "Developer" } ], - "description": "gettext languages with plural rules", - "homepage": "https://github.com/mlocati/cldr-to-gettext-plural-rules", + "description": "A fast and intuitive dependency injection container.", + "homepage": "https://github.com/thephpleague/container", "keywords": [ - "cldr", - "i18n", - "internationalization", - "l10n", - "language", - "languages", - "localization", - "php", - "plural", - "plural rules", - "plurals", - "translate", - "translations", - "unicode" + "container", + "dependency", + "di", + "injection", + "league", + "provider", + "service" ] }, { - "name": "gettext/gettext", - "version": "v4.0.0", - "version_normalized": "4.0.0.0", + "name": "monolog/monolog", + "version": "1.13.1", + "version_normalized": "1.13.1.0", "source": { "type": "git", - "url": "https://github.com/oscarotero/Gettext.git", - "reference": "7efdd4a01afd7fab85a90fb64fb88eeaef06f3b1" + "url": "https://github.com/Seldaek/monolog.git", + "reference": "c31a2c4e8db5da8b46c74cf275d7f109c0f249ac" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/oscarotero/Gettext/zipball/7efdd4a01afd7fab85a90fb64fb88eeaef06f3b1", - "reference": "7efdd4a01afd7fab85a90fb64fb88eeaef06f3b1", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/c31a2c4e8db5da8b46c74cf275d7f109c0f249ac", + "reference": "c31a2c4e8db5da8b46c74cf275d7f109c0f249ac", "shasum": "" }, "require": { - "gettext/languages": "2.*", - "php": ">=5.4.0" + "php": ">=5.3.0", + "psr/log": "~1.0" + }, + "provide": { + "psr/log-implementation": "1.0.0" }, "require-dev": { - "illuminate/view": "*", - "symfony/yaml": "~2", - "twig/extensions": "*", - "twig/twig": "*" + "aws/aws-sdk-php": "~2.4, >2.4.8", + "doctrine/couchdb": "~1.0@dev", + "graylog2/gelf-php": "~1.0", + "phpunit/phpunit": "~4.0", + "raven/raven": "~0.5", + "ruflin/elastica": "0.90.*", + "swiftmailer/swiftmailer": "~5.3", + "videlalvaro/php-amqplib": "~2.4" }, "suggest": { - "illuminate/view": "Is necessary if you want to use the Blade extractor", - "symfony/yaml": "Is necessary if you want to use the Yaml extractor/generator", - "twig/extensions": "Is necessary if you want to use the Twig extractor", - "twig/twig": "Is necessary if you want to use the Twig extractor" + "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", + "doctrine/couchdb": "Allow sending log messages to a CouchDB server", + "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", + "ext-mongo": "Allow sending log messages to a MongoDB server", + "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", + "raven/raven": "Allow sending log messages to a Sentry server", + "rollbar/rollbar": "Allow sending log messages to Rollbar", + "ruflin/elastica": "Allow sending log messages to an Elastic Search server", + "videlalvaro/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib" + }, + "time": "2015-03-09 09:58:04", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.13.x-dev" + } }, - "time": "2016-06-15 18:14:14", - "type": "library", "installation-source": "dist", "autoload": { "psr-4": { - "Gettext\\": "src" + "Monolog\\": "src/Monolog" } }, "notification-url": "https://packagist.org/downloads/", @@ -238,452 +969,477 @@ ], "authors": [ { - "name": "Oscar Otero", - "email": "oom@oscarotero.com", - "homepage": "http://oscarotero.com", - "role": "Developer" + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" } ], - "description": "PHP gettext manager", - "homepage": "https://github.com/oscarotero/Gettext", + "description": "Sends your logs to files, sockets, inboxes, databases and various web services", + "homepage": "http://github.com/Seldaek/monolog", "keywords": [ - "JS", - "gettext", - "i18n", - "mo", - "po", - "translation" + "log", + "logging", + "psr-3" ] }, { - "name": "symfony/event-dispatcher", - "version": "v3.1.6", - "version_normalized": "3.1.6.0", + "name": "myclabs/deep-copy", + "version": "1.7.0", + "version_normalized": "1.7.0.0", "source": { "type": "git", - "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "28b0832b2553ffb80cabef6a7a812ff1e670c0bc" + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/28b0832b2553ffb80cabef6a7a812ff1e670c0bc", - "reference": "28b0832b2553ffb80cabef6a7a812ff1e670c0bc", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e", + "reference": "3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e", "shasum": "" }, "require": { - "php": ">=5.5.9" + "php": "^5.6 || ^7.0" }, "require-dev": { - "psr/log": "~1.0", - "symfony/config": "~2.8|~3.0", - "symfony/dependency-injection": "~2.8|~3.0", - "symfony/expression-language": "~2.8|~3.0", - "symfony/stopwatch": "~2.8|~3.0" - }, - "suggest": { - "symfony/dependency-injection": "", - "symfony/http-kernel": "" + "doctrine/collections": "^1.0", + "doctrine/common": "^2.6", + "phpunit/phpunit": "^4.1" }, - "time": "2016-10-13 06:28:43", + "time": "2017-10-19 19:58:43", "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.1-dev" - } - }, "installation-source": "dist", "autoload": { "psr-4": { - "Symfony\\Component\\EventDispatcher\\": "" + "DeepCopy\\": "src/DeepCopy/" }, - "exclude-from-classmap": [ - "/Tests/" + "files": [ + "src/DeepCopy/deep_copy.php" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], + "description": "Create deep copies (clones) of your objects", + "keywords": [ + "clone", + "copy", + "duplicate", + "object", + "object graph" + ] + }, + { + "name": "pear/console_getopt", + "version": "v1.4.1", + "version_normalized": "1.4.1.0", + "source": { + "type": "git", + "url": "https://github.com/pear/Console_Getopt.git", + "reference": "82f05cd1aa3edf34e19aa7c8ca312ce13a6a577f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/pear/Console_Getopt/zipball/82f05cd1aa3edf34e19aa7c8ca312ce13a6a577f", + "reference": "82f05cd1aa3edf34e19aa7c8ca312ce13a6a577f", + "shasum": "" + }, + "time": "2015-07-20 20:28:12", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-0": { + "Console": "./" + } + }, + "notification-url": "https://packagist.org/downloads/", + "include-path": [ + "./" + ], + "license": [ + "BSD-2-Clause" + ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Greg Beaver", + "email": "cellog@php.net", + "role": "Helper" }, { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Andrei Zmievski", + "email": "andrei@php.net", + "role": "Lead" + }, + { + "name": "Stig Bakken", + "email": "stig@php.net", + "role": "Developer" } ], - "description": "Symfony EventDispatcher Component", - "homepage": "https://symfony.com" + "description": "More info available on: http://pear.php.net/package/Console_Getopt" }, { - "name": "symfony/filesystem", - "version": "v3.1.6", - "version_normalized": "3.1.6.0", + "name": "pear/net_smtp", + "version": "1.7.3", + "version_normalized": "1.7.3.0", "source": { "type": "git", - "url": "https://github.com/symfony/filesystem.git", - "reference": "0565b61bf098cb4dc09f4f103f033138ae4f42c6" + "url": "https://github.com/pear/Net_SMTP.git", + "reference": "e066e5ee011ae056c03db1a95d210fc09649b477" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/0565b61bf098cb4dc09f4f103f033138ae4f42c6", - "reference": "0565b61bf098cb4dc09f4f103f033138ae4f42c6", + "url": "https://api.github.com/repos/pear/Net_SMTP/zipball/e066e5ee011ae056c03db1a95d210fc09649b477", + "reference": "e066e5ee011ae056c03db1a95d210fc09649b477", "shasum": "" }, "require": { - "php": ">=5.5.9" + "pear/net_socket": "*", + "pear/pear-core-minimal": "*", + "php": ">=5.4.0" }, - "time": "2016-10-18 04:30:12", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.1-dev" - } + "require-dev": { + "phpunit/phpunit": "*" }, + "suggest": { + "pear/auth_sasl": "Install optionally via your project's composer.json" + }, + "time": "2017-01-14 18:19:55", + "type": "library", "installation-source": "dist", "autoload": { - "psr-4": { - "Symfony\\Component\\Filesystem\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] + "psr-0": { + "Net": "./" + } }, "notification-url": "https://packagist.org/downloads/", + "include-path": [ + "./" + ], "license": [ - "MIT" + "PHP-3.01" ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Jon Parise", + "email": "jon@php.net", + "homepage": "http://www.indelible.org", + "role": "Lead" }, { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Chuck Hagenbuch", + "email": "chuck@horde.org", + "role": "Lead" } ], - "description": "Symfony Filesystem Component", - "homepage": "https://symfony.com" + "description": "An implementation of the SMTP protocol", + "homepage": "http://pear.github.io/Net_SMTP/", + "keywords": [ + "email", + "mail", + "smtp" + ] }, { - "name": "symfony/process", - "version": "v3.1.6", - "version_normalized": "3.1.6.0", + "name": "pear/net_socket", + "version": "v1.2.1", + "version_normalized": "1.2.1.0", "source": { "type": "git", - "url": "https://github.com/symfony/process.git", - "reference": "66de154ae86b1a07001da9fbffd620206e4faf94" + "url": "https://github.com/pear/Net_Socket.git", + "reference": "f31d75ac352d49908f8987bbb1496c02a409812a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/66de154ae86b1a07001da9fbffd620206e4faf94", - "reference": "66de154ae86b1a07001da9fbffd620206e4faf94", + "url": "https://api.github.com/repos/pear/Net_Socket/zipball/f31d75ac352d49908f8987bbb1496c02a409812a", + "reference": "f31d75ac352d49908f8987bbb1496c02a409812a", "shasum": "" }, "require": { - "php": ">=5.5.9" + "pear/pear_exception": "@stable", + "php": ">=5.4.0" }, - "time": "2016-09-29 14:13:09", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.1-dev" - } + "require-dev": { + "phpunit/phpunit": "^4" }, + "time": "2017-04-06 15:16:38", + "type": "library", "installation-source": "dist", "autoload": { - "psr-4": { - "Symfony\\Component\\Process\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] + "psr-0": { + "Net": "./" + } }, "notification-url": "https://packagist.org/downloads/", + "include-path": [ + "./" + ], "license": [ - "MIT" + "BSD-2-Clause" ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Chuck Hagenbuch", + "email": "chuck@horde.org", + "role": "Lead" }, { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Aleksander Machniak", + "email": "alec@php.net", + "role": "Lead" + }, + { + "name": "Stig Bakken", + "email": "stig@php.net", + "role": "Lead" } ], - "description": "Symfony Process Component", - "homepage": "https://symfony.com" + "description": "More info available on: http://pear.php.net/package/Net_Socket" }, { - "name": "psr/log", - "version": "1.0.2", - "version_normalized": "1.0.2.0", + "name": "pear/pear-core-minimal", + "version": "v1.10.3", + "version_normalized": "1.10.3.0", "source": { "type": "git", - "url": "https://github.com/php-fig/log.git", - "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d" + "url": "https://github.com/pear/pear-core-minimal.git", + "reference": "070f0b600b2caca2501e2c9b7e553016e4b0d115" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", - "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", + "url": "https://api.github.com/repos/pear/pear-core-minimal/zipball/070f0b600b2caca2501e2c9b7e553016e4b0d115", + "reference": "070f0b600b2caca2501e2c9b7e553016e4b0d115", "shasum": "" }, "require": { - "php": ">=5.3.0" + "pear/console_getopt": "~1.4", + "pear/pear_exception": "~1.0" }, - "time": "2016-10-10 12:19:37", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } + "replace": { + "rsky/pear-core-min": "self.version" }, + "time": "2017-02-28 16:46:11", + "type": "library", "installation-source": "dist", "autoload": { - "psr-4": { - "Psr\\Log\\": "Psr/Log/" + "psr-0": { + "": "src/" } }, "notification-url": "https://packagist.org/downloads/", + "include-path": [ + "src/" + ], "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "name": "Christian Weiske", + "email": "cweiske@php.net", + "role": "Lead" } ], - "description": "Common interface for logging libraries", - "homepage": "https://github.com/php-fig/log", - "keywords": [ - "log", - "psr", - "psr-3" - ] + "description": "Minimal set of PEAR core files to be used as composer dependency" }, { - "name": "symfony/debug", - "version": "v3.1.6", - "version_normalized": "3.1.6.0", + "name": "pear/pear_exception", + "version": "v1.0.0", + "version_normalized": "1.0.0.0", "source": { "type": "git", - "url": "https://github.com/symfony/debug.git", - "reference": "e2b3f74a67fc928adc3c1b9027f73e1bc01190a8" + "url": "https://github.com/pear/PEAR_Exception.git", + "reference": "8c18719fdae000b690e3912be401c76e406dd13b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/debug/zipball/e2b3f74a67fc928adc3c1b9027f73e1bc01190a8", - "reference": "e2b3f74a67fc928adc3c1b9027f73e1bc01190a8", + "url": "https://api.github.com/repos/pear/PEAR_Exception/zipball/8c18719fdae000b690e3912be401c76e406dd13b", + "reference": "8c18719fdae000b690e3912be401c76e406dd13b", "shasum": "" }, "require": { - "php": ">=5.5.9", - "psr/log": "~1.0" - }, - "conflict": { - "symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2" + "php": ">=4.4.0" }, "require-dev": { - "symfony/class-loader": "~2.8|~3.0", - "symfony/http-kernel": "~2.8|~3.0" + "phpunit/phpunit": "*" }, - "time": "2016-09-06 11:02:40", - "type": "library", + "time": "2015-02-10 20:07:52", + "type": "class", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "1.0.x-dev" } }, "installation-source": "dist", "autoload": { - "psr-4": { - "Symfony\\Component\\Debug\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] + "psr-0": { + "PEAR": "" + } }, "notification-url": "https://packagist.org/downloads/", + "include-path": [ + "." + ], "license": [ - "MIT" + "BSD-2-Clause" ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Helgi Thormar", + "email": "dufuz@php.net" }, { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Greg Beaver", + "email": "cellog@php.net" } ], - "description": "Symfony Debug Component", - "homepage": "https://symfony.com" + "description": "The PEAR Exception base class.", + "homepage": "https://github.com/pear/PEAR_Exception", + "keywords": [ + "exception" + ] }, { - "name": "symfony/polyfill-mbstring", - "version": "v1.3.0", - "version_normalized": "1.3.0.0", + "name": "phar-io/manifest", + "version": "1.0.1", + "version_normalized": "1.0.1.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "e79d363049d1c2128f133a2667e4f4190904f7f4" + "url": "https://github.com/phar-io/manifest.git", + "reference": "2df402786ab5368a0169091f61a7c1e0eb6852d0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/e79d363049d1c2128f133a2667e4f4190904f7f4", - "reference": "e79d363049d1c2128f133a2667e4f4190904f7f4", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/2df402786ab5368a0169091f61a7c1e0eb6852d0", + "reference": "2df402786ab5368a0169091f61a7c1e0eb6852d0", "shasum": "" }, "require": { - "php": ">=5.3.3" - }, - "suggest": { - "ext-mbstring": "For best performance" + "ext-dom": "*", + "ext-phar": "*", + "phar-io/version": "^1.0.1", + "php": "^5.6 || ^7.0" }, - "time": "2016-11-14 01:06:16", + "time": "2017-03-05 18:14:27", "type": "library", "extra": { "branch-alias": { - "dev-master": "1.3-dev" + "dev-master": "1.0.x-dev" } }, "installation-source": "dist", "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Mbstring\\": "" - }, - "files": [ - "bootstrap.php" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" }, { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" } ], - "description": "Symfony polyfill for the Mbstring extension", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "mbstring", - "polyfill", - "portable", - "shim" - ] + "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)" }, { - "name": "symfony/console", - "version": "v3.1.6", - "version_normalized": "3.1.6.0", + "name": "phar-io/version", + "version": "1.0.1", + "version_normalized": "1.0.1.0", "source": { "type": "git", - "url": "https://github.com/symfony/console.git", - "reference": "c99da1119ae61e15de0e4829196b9fba6f73d065" + "url": "https://github.com/phar-io/version.git", + "reference": "a70c0ced4be299a63d32fa96d9281d03e94041df" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/c99da1119ae61e15de0e4829196b9fba6f73d065", - "reference": "c99da1119ae61e15de0e4829196b9fba6f73d065", + "url": "https://api.github.com/repos/phar-io/version/zipball/a70c0ced4be299a63d32fa96d9281d03e94041df", + "reference": "a70c0ced4be299a63d32fa96d9281d03e94041df", "shasum": "" }, - "require": { - "php": ">=5.5.9", - "symfony/debug": "~2.8|~3.0", - "symfony/polyfill-mbstring": "~1.0" - }, - "require-dev": { - "psr/log": "~1.0", - "symfony/event-dispatcher": "~2.8|~3.0", - "symfony/process": "~2.8|~3.0" - }, - "suggest": { - "psr/log": "For using the console logger", - "symfony/event-dispatcher": "", - "symfony/process": "" - }, - "time": "2016-10-06 01:44:51", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.1-dev" - } - }, + "require": { + "php": "^5.6 || ^7.0" + }, + "time": "2017-03-05 17:38:23", + "type": "library", "installation-source": "dist", "autoload": { - "psr-4": { - "Symfony\\Component\\Console\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" }, { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" } ], - "description": "Symfony Console Component", - "homepage": "https://symfony.com" + "description": "Library for handling version information and constraints" }, { - "name": "symfony/finder", - "version": "v3.1.6", - "version_normalized": "3.1.6.0", + "name": "phpdocumentor/reflection-common", + "version": "1.0.1", + "version_normalized": "1.0.1.0", "source": { "type": "git", - "url": "https://github.com/symfony/finder.git", - "reference": "205b5ffbb518a98ba2ae60a52656c4a31ab00c6f" + "url": "https://github.com/phpDocumentor/ReflectionCommon.git", + "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/205b5ffbb518a98ba2ae60a52656c4a31ab00c6f", - "reference": "205b5ffbb518a98ba2ae60a52656c4a31ab00c6f", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", + "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", "shasum": "" }, "require": { - "php": ">=5.5.9" + "php": ">=5.5" + }, + "require-dev": { + "phpunit/phpunit": "^4.6" }, - "time": "2016-09-28 00:11:12", + "time": "2017-09-11 18:02:19", "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "1.0.x-dev" } }, "installation-source": "dist", "autoload": { "psr-4": { - "Symfony\\Component\\Finder\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] + "phpDocumentor\\Reflection\\": [ + "src" + ] + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -691,86 +1447,109 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Jaap van Otterdijk", + "email": "opensource@ijaap.nl" } ], - "description": "Symfony Finder Component", - "homepage": "https://symfony.com" + "description": "Common reflection classes used by phpdocumentor to reflect the code structure", + "homepage": "http://www.phpdoc.org", + "keywords": [ + "FQSEN", + "phpDocumentor", + "phpdoc", + "reflection", + "static analysis" + ] }, { - "name": "container-interop/container-interop", - "version": "1.1.0", - "version_normalized": "1.1.0.0", + "name": "phpdocumentor/reflection-docblock", + "version": "4.2.0", + "version_normalized": "4.2.0.0", "source": { "type": "git", - "url": "https://github.com/container-interop/container-interop.git", - "reference": "fc08354828f8fd3245f77a66b9e23a6bca48297e" + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "66465776cfc249844bde6d117abff1d22e06c2da" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/container-interop/container-interop/zipball/fc08354828f8fd3245f77a66b9e23a6bca48297e", - "reference": "fc08354828f8fd3245f77a66b9e23a6bca48297e", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/66465776cfc249844bde6d117abff1d22e06c2da", + "reference": "66465776cfc249844bde6d117abff1d22e06c2da", "shasum": "" }, - "time": "2014-12-30 15:22:37", + "require": { + "php": "^7.0", + "phpdocumentor/reflection-common": "^1.0.0", + "phpdocumentor/type-resolver": "^0.4.0", + "webmozart/assert": "^1.0" + }, + "require-dev": { + "doctrine/instantiator": "~1.0.5", + "mockery/mockery": "^1.0", + "phpunit/phpunit": "^6.4" + }, + "time": "2017-11-27 17:38:31", "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.x-dev" + } + }, "installation-source": "dist", "autoload": { "psr-4": { - "Interop\\Container\\": "src/Interop/Container/" + "phpDocumentor\\Reflection\\": [ + "src/" + ] } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], - "description": "Promoting the interoperability of container objects (DIC, SL, etc.)" + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + } + ], + "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock." }, { - "name": "league/container", - "version": "2.2.0", - "version_normalized": "2.2.0.0", + "name": "phpdocumentor/type-resolver", + "version": "0.4.0", + "version_normalized": "0.4.0.0", "source": { "type": "git", - "url": "https://github.com/thephpleague/container.git", - "reference": "c0e7d947b690891f700dc4967ead7bdb3d6708c1" + "url": "https://github.com/phpDocumentor/TypeResolver.git", + "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/container/zipball/c0e7d947b690891f700dc4967ead7bdb3d6708c1", - "reference": "c0e7d947b690891f700dc4967ead7bdb3d6708c1", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/9c977708995954784726e25d0cd1dddf4e65b0f7", + "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7", "shasum": "" }, "require": { - "container-interop/container-interop": "^1.1", - "php": ">=5.4.0" - }, - "provide": { - "container-interop/container-interop-implementation": "^1.1" - }, - "replace": { - "orno/di": "~2.0" + "php": "^5.5 || ^7.0", + "phpdocumentor/reflection-common": "^1.0" }, "require-dev": { - "phpunit/phpunit": "4.*" + "mockery/mockery": "^0.9.4", + "phpunit/phpunit": "^5.2||^4.8.24" }, - "time": "2016-03-17 11:07:59", + "time": "2017-07-14 14:27:02", "type": "library", "extra": { "branch-alias": { - "dev-master": "2.x-dev", - "dev-1.x": "1.x-dev" + "dev-master": "1.0.x-dev" } }, "installation-source": "dist", "autoload": { "psr-4": { - "League\\Container\\": "src" + "phpDocumentor\\Reflection\\": [ + "src/" + ] } }, "notification-url": "https://packagist.org/downloads/", @@ -779,55 +1558,48 @@ ], "authors": [ { - "name": "Phil Bennett", - "email": "philipobenito@gmail.com", - "homepage": "http://www.philipobenito.com", - "role": "Developer" + "name": "Mike van Riel", + "email": "me@mikevanriel.com" } - ], - "description": "A fast and intuitive dependency injection container.", - "homepage": "https://github.com/thephpleague/container", - "keywords": [ - "container", - "dependency", - "di", - "injection", - "league", - "provider", - "service" ] }, { - "name": "victorjonsson/markdowndocs", - "version": "1.3.7", - "version_normalized": "1.3.7.0", + "name": "phpspec/prophecy", + "version": "1.7.3", + "version_normalized": "1.7.3.0", "source": { "type": "git", - "url": "https://github.com/victorjonsson/PHP-Markdown-Documentation-Generator.git", - "reference": "a8244617cdce4804cd94ea508c82e8d7e29a273a" + "url": "https://github.com/phpspec/prophecy.git", + "reference": "e4ed002c67da8eceb0eb8ddb8b3847bb53c5c2bf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/victorjonsson/PHP-Markdown-Documentation-Generator/zipball/a8244617cdce4804cd94ea508c82e8d7e29a273a", - "reference": "a8244617cdce4804cd94ea508c82e8d7e29a273a", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/e4ed002c67da8eceb0eb8ddb8b3847bb53c5c2bf", + "reference": "e4ed002c67da8eceb0eb8ddb8b3847bb53c5c2bf", "shasum": "" }, "require": { - "php": ">=5.5.0", - "symfony/console": ">=2.6" + "doctrine/instantiator": "^1.0.2", + "php": "^5.3|^7.0", + "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0", + "sebastian/comparator": "^1.1|^2.0", + "sebastian/recursion-context": "^1.0|^2.0|^3.0" }, "require-dev": { - "phpunit/phpunit": "3.7.23" + "phpspec/phpspec": "^2.5|^3.2", + "phpunit/phpunit": "^4.8.35 || ^5.7" }, - "time": "2016-10-11 21:10:19", - "bin": [ - "bin/phpdoc-md" - ], + "time": "2017-11-24 13:59:53", "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.7.x-dev" + } + }, "installation-source": "dist", "autoload": { "psr-0": { - "PHPDocsMD": "src/" + "Prophecy\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -836,471 +1608,502 @@ ], "authors": [ { - "name": "Victor Jonsson", - "email": "kontakt@victorjonsson.se" + "name": "Konstantin Kudryashov", + "email": "ever.zet@gmail.com", + "homepage": "http://everzet.com" + }, + { + "name": "Marcello Duarte", + "email": "marcello.duarte@gmail.com" } ], - "description": "Command line tool for generating markdown-formatted class documentation", - "homepage": "https://github.com/victorjonsson/PHP-Markdown-Documentation-Generator" + "description": "Highly opinionated mocking framework for PHP 5.3+", + "homepage": "https://github.com/phpspec/prophecy", + "keywords": [ + "Double", + "Dummy", + "fake", + "mock", + "spy", + "stub" + ] }, { - "name": "consolidation/log", - "version": "1.0.3", - "version_normalized": "1.0.3.0", + "name": "phpunit/php-code-coverage", + "version": "5.3.0", + "version_normalized": "5.3.0.0", "source": { "type": "git", - "url": "https://github.com/consolidation/log.git", - "reference": "74ba81b4edc585616747cc5c5309ce56fec41254" + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "661f34d0bd3f1a7225ef491a70a020ad23a057a1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/consolidation/log/zipball/74ba81b4edc585616747cc5c5309ce56fec41254", - "reference": "74ba81b4edc585616747cc5c5309ce56fec41254", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/661f34d0bd3f1a7225ef491a70a020ad23a057a1", + "reference": "661f34d0bd3f1a7225ef491a70a020ad23a057a1", "shasum": "" }, "require": { - "php": ">=5.5.0", - "psr/log": "~1.0", - "symfony/console": "~2.5|~3.0" + "ext-dom": "*", + "ext-xmlwriter": "*", + "php": "^7.0", + "phpunit/php-file-iterator": "^1.4.2", + "phpunit/php-text-template": "^1.2.1", + "phpunit/php-token-stream": "^2.0.1", + "sebastian/code-unit-reverse-lookup": "^1.0.1", + "sebastian/environment": "^3.0", + "sebastian/version": "^2.0.1", + "theseer/tokenizer": "^1.1" }, "require-dev": { - "phpunit/phpunit": "4.*", - "squizlabs/php_codesniffer": "2.*" + "phpunit/phpunit": "^6.0" }, - "time": "2016-03-23 23:46:42", + "suggest": { + "ext-xdebug": "^2.5.5" + }, + "time": "2017-12-06 09:29:45", "type": "library", "extra": { "branch-alias": { - "dev-master": "1.x-dev" + "dev-master": "5.3.x-dev" } }, "installation-source": "dist", "autoload": { - "psr-4": { - "Consolidation\\Log\\": "src" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Greg Anderson", - "email": "greg.1.anderson@greenknowe.org" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Improved Psr-3 / Psr\\Log logger based on Symfony Console components." + "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", + "homepage": "https://github.com/sebastianbergmann/php-code-coverage", + "keywords": [ + "coverage", + "testing", + "xunit" + ] }, { - "name": "webmozart/assert", - "version": "1.1.0", - "version_normalized": "1.1.0.0", + "name": "phpunit/php-file-iterator", + "version": "1.4.5", + "version_normalized": "1.4.5.0", "source": { "type": "git", - "url": "https://github.com/webmozart/assert.git", - "reference": "bb2d123231c095735130cc8f6d31385a44c7b308" + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozart/assert/zipball/bb2d123231c095735130cc8f6d31385a44c7b308", - "reference": "bb2d123231c095735130cc8f6d31385a44c7b308", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/730b01bc3e867237eaac355e06a36b85dd93a8b4", + "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4", "shasum": "" }, "require": { - "php": "^5.3.3|^7.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.6", - "sebastian/version": "^1.0.1" + "php": ">=5.3.3" }, - "time": "2016-08-09 15:02:57", + "time": "2017-11-27 13:52:08", "type": "library", "extra": { "branch-alias": { - "dev-master": "1.2-dev" + "dev-master": "1.4.x-dev" } }, "installation-source": "dist", "autoload": { - "psr-4": { - "Webmozart\\Assert\\": "src/" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" } ], - "description": "Assertions to validate method input/output with nice error messages.", + "description": "FilterIterator implementation that filters files based on a list of suffixes.", + "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", "keywords": [ - "assert", - "check", - "validate" + "filesystem", + "iterator" ] }, { - "name": "phpdocumentor/reflection-common", - "version": "1.0", - "version_normalized": "1.0.0.0", + "name": "phpunit/php-text-template", + "version": "1.2.1", + "version_normalized": "1.2.1.0", "source": { "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionCommon.git", - "reference": "144c307535e82c8fdcaacbcfc1d6d8eeb896687c" + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/144c307535e82c8fdcaacbcfc1d6d8eeb896687c", - "reference": "144c307535e82c8fdcaacbcfc1d6d8eeb896687c", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", "shasum": "" }, "require": { - "php": ">=5.5" - }, - "require-dev": { - "phpunit/phpunit": "^4.6" + "php": ">=5.3.3" }, - "time": "2015-12-27 11:43:31", + "time": "2015-06-21 13:50:34", "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, "installation-source": "dist", "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": [ - "src" - ] - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Jaap van Otterdijk", - "email": "opensource@ijaap.nl" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Common reflection classes used by phpdocumentor to reflect the code structure", - "homepage": "http://www.phpdoc.org", + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", "keywords": [ - "FQSEN", - "phpDocumentor", - "phpdoc", - "reflection", - "static analysis" + "template" ] }, { - "name": "phpdocumentor/type-resolver", - "version": "0.2", - "version_normalized": "0.2.0.0", + "name": "phpunit/php-timer", + "version": "1.0.9", + "version_normalized": "1.0.9.0", "source": { "type": "git", - "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "b39c7a5b194f9ed7bd0dd345c751007a41862443" + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/b39c7a5b194f9ed7bd0dd345c751007a41862443", - "reference": "b39c7a5b194f9ed7bd0dd345c751007a41862443", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", + "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", "shasum": "" }, "require": { - "php": ">=5.5", - "phpdocumentor/reflection-common": "^1.0" + "php": "^5.3.3 || ^7.0" }, "require-dev": { - "mockery/mockery": "^0.9.4", - "phpunit/phpunit": "^5.2||^4.8.24" + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" }, - "time": "2016-06-10 07:14:17", + "time": "2017-02-26 11:10:40", "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "1.0-dev" } }, "installation-source": "dist", "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": [ - "src/" - ] - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" } + ], + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", + "keywords": [ + "timer" ] }, { - "name": "phpdocumentor/reflection-docblock", - "version": "3.1.1", - "version_normalized": "3.1.1.0", + "name": "phpunit/php-token-stream", + "version": "2.0.2", + "version_normalized": "2.0.2.0", "source": { "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "8331b5efe816ae05461b7ca1e721c01b46bafb3e" + "url": "https://github.com/sebastianbergmann/php-token-stream.git", + "reference": "791198a2c6254db10131eecfe8c06670700904db" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/8331b5efe816ae05461b7ca1e721c01b46bafb3e", - "reference": "8331b5efe816ae05461b7ca1e721c01b46bafb3e", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/791198a2c6254db10131eecfe8c06670700904db", + "reference": "791198a2c6254db10131eecfe8c06670700904db", "shasum": "" }, "require": { - "php": ">=5.5", - "phpdocumentor/reflection-common": "^1.0@dev", - "phpdocumentor/type-resolver": "^0.2.0", - "webmozart/assert": "^1.0" + "ext-tokenizer": "*", + "php": "^7.0" }, "require-dev": { - "mockery/mockery": "^0.9.4", - "phpunit/phpunit": "^4.4" + "phpunit/phpunit": "^6.2.4" }, - "time": "2016-09-30 07:12:33", + "time": "2017-11-27 05:48:46", "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, "installation-source": "dist", "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": [ - "src/" - ] - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" } ], - "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock." + "description": "Wrapper around PHP's tokenizer extension.", + "homepage": "https://github.com/sebastianbergmann/php-token-stream/", + "keywords": [ + "tokenizer" + ] }, { - "name": "consolidation/robo", - "version": "1.0.4", - "version_normalized": "1.0.4.0", + "name": "phpunit/phpunit", + "version": "6.5.5", + "version_normalized": "6.5.5.0", "source": { "type": "git", - "url": "https://github.com/consolidation/Robo.git", - "reference": "bfe2246358298d7839114612f84bcfdca3c14066" + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "83d27937a310f2984fd575686138597147bdc7df" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/consolidation/Robo/zipball/bfe2246358298d7839114612f84bcfdca3c14066", - "reference": "bfe2246358298d7839114612f84bcfdca3c14066", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/83d27937a310f2984fd575686138597147bdc7df", + "reference": "83d27937a310f2984fd575686138597147bdc7df", "shasum": "" }, "require": { - "consolidation/annotated-command": "^2.0.1", - "consolidation/log": "~1", - "consolidation/output-formatters": "^2.1.2|~3", - "league/container": "^2.2", - "php": ">=5.5.0", - "symfony/console": "~2.8|~3.0", - "symfony/event-dispatcher": "~2.5|~3.0", - "symfony/filesystem": "~2.5|~3.0", - "symfony/finder": "~2.5|~3.0", - "symfony/process": "~2.5|~3.0" + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-xml": "*", + "myclabs/deep-copy": "^1.6.1", + "phar-io/manifest": "^1.0.1", + "phar-io/version": "^1.0", + "php": "^7.0", + "phpspec/prophecy": "^1.7", + "phpunit/php-code-coverage": "^5.3", + "phpunit/php-file-iterator": "^1.4.3", + "phpunit/php-text-template": "^1.2.1", + "phpunit/php-timer": "^1.0.9", + "phpunit/phpunit-mock-objects": "^5.0.5", + "sebastian/comparator": "^2.1", + "sebastian/diff": "^2.0", + "sebastian/environment": "^3.1", + "sebastian/exporter": "^3.1", + "sebastian/global-state": "^2.0", + "sebastian/object-enumerator": "^3.0.3", + "sebastian/resource-operations": "^1.0", + "sebastian/version": "^2.0.1" }, - "replace": { - "codegyre/robo": "< 1.0" + "conflict": { + "phpdocumentor/reflection-docblock": "3.0.2", + "phpunit/dbunit": "<3.0" }, "require-dev": { - "codeception/aspect-mock": "~1", - "codeception/base": "^2.2.6", - "codeception/verify": "^0.3.2", - "henrikbjorn/lurker": "~1", - "natxet/cssmin": "~3", - "patchwork/jsqueeze": "~2", - "pear/archive_tar": "^1.4.2", - "phpunit/php-code-coverage": "~2|~4", - "satooshi/php-coveralls": "~1", - "squizlabs/php_codesniffer": "~2" + "ext-pdo": "*" }, "suggest": { - "henrikbjorn/lurker": "For monitoring filesystem changes in taskWatch", - "natxet/CssMin": "For minifying JS files in taskMinify", - "patchwork/jsqueeze": "For minifying JS files in taskMinify", - "pear/archive_tar": "Allows tar archives to be created and extracted in taskPack and taskExtract, respectively." + "ext-xdebug": "*", + "phpunit/php-invoker": "^1.1" }, - "time": "2016-11-15 19:24:36", + "time": "2017-12-17 06:31:19", "bin": [ - "robo" + "phpunit" ], "type": "library", "extra": { "branch-alias": { - "dev-master": "1.x-dev" + "dev-master": "6.5.x-dev" } }, "installation-source": "dist", "autoload": { "classmap": [ - "scripts/composer/ScriptHandler.php" - ], - "psr-4": { - "Robo\\": "src" - } + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Davert", - "email": "davert.php@resend.cc" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Modern task runner" + "description": "The PHP Unit Testing framework.", + "homepage": "https://phpunit.de/", + "keywords": [ + "phpunit", + "testing", + "xunit" + ] }, { - "name": "symfony/yaml", - "version": "v3.1.6", - "version_normalized": "3.1.6.0", + "name": "phpunit/phpunit-mock-objects", + "version": "5.0.6", + "version_normalized": "5.0.6.0", "source": { "type": "git", - "url": "https://github.com/symfony/yaml.git", - "reference": "7ff51b06c6c3d5cc6686df69004a42c69df09e27" + "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", + "reference": "33fd41a76e746b8fa96d00b49a23dadfa8334cdf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/7ff51b06c6c3d5cc6686df69004a42c69df09e27", - "reference": "7ff51b06c6c3d5cc6686df69004a42c69df09e27", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/33fd41a76e746b8fa96d00b49a23dadfa8334cdf", + "reference": "33fd41a76e746b8fa96d00b49a23dadfa8334cdf", "shasum": "" }, "require": { - "php": ">=5.5.9" + "doctrine/instantiator": "^1.0.5", + "php": "^7.0", + "phpunit/php-text-template": "^1.2.1", + "sebastian/exporter": "^3.1" + }, + "conflict": { + "phpunit/phpunit": "<6.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.5" }, - "time": "2016-10-24 18:41:13", + "suggest": { + "ext-soap": "*" + }, + "time": "2018-01-06 05:45:45", "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "5.0.x-dev" } }, "installation-source": "dist", "autoload": { - "psr-4": { - "Symfony\\Component\\Yaml\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Symfony Yaml Component", - "homepage": "https://symfony.com" + "description": "Mock Object library for PHPUnit", + "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/", + "keywords": [ + "mock", + "xunit" + ] }, { - "name": "sebastian/global-state", - "version": "1.1.1", - "version_normalized": "1.1.1.0", + "name": "psr/container", + "version": "1.0.0", + "version_normalized": "1.0.0.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4" + "url": "https://github.com/php-fig/container.git", + "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bc37d50fea7d017d3d340f230811c9f1d7280af4", - "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4", + "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f", + "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f", "shasum": "" }, "require": { - "php": ">=5.3.3" - }, - "require-dev": { - "phpunit/phpunit": "~4.2" - }, - "suggest": { - "ext-uopz": "*" + "php": ">=5.3.0" }, - "time": "2015-10-12 03:26:01", + "time": "2017-02-14 16:28:37", "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-master": "1.0.x-dev" } }, "installation-source": "dist", "autoload": { - "classmap": [ - "src/" - ] + "psr-4": { + "Psr\\Container\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" } ], - "description": "Snapshotting of global state", - "homepage": "http://www.github.com/sebastianbergmann/global-state", + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", "keywords": [ - "global state" + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" ] }, { - "name": "sebastian/recursion-context", - "version": "1.0.4", - "version_normalized": "1.0.4.0", + "name": "psr/log", + "version": "1.0.2", + "version_normalized": "1.0.2.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "938df7a6478e72795e5f8266cff24d06e3136f2e" + "url": "https://github.com/php-fig/log.git", + "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/938df7a6478e72795e5f8266cff24d06e3136f2e", - "reference": "938df7a6478e72795e5f8266cff24d06e3136f2e", + "url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", + "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", "shasum": "" }, "require": { - "php": ">=5.3.3" - }, - "require-dev": { - "phpunit/phpunit": "~4.4" + "php": ">=5.3.0" }, - "time": "2016-11-15 06:55:36", + "time": "2016-10-10 12:19:37", "type": "library", "extra": { "branch-alias": { @@ -1309,59 +2112,54 @@ }, "installation-source": "dist", "autoload": { - "classmap": [ - "src/" - ] + "psr-4": { + "Psr\\Log\\": "Psr/Log/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Adam Harvey", - "email": "aharvey@php.net" + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" } ], - "description": "Provides functionality to recursively process PHP variables", - "homepage": "http://www.github.com/sebastianbergmann/recursion-context" + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ] }, { - "name": "sebastian/exporter", - "version": "1.2.2", - "version_normalized": "1.2.2.0", + "name": "sebastian/code-unit-reverse-lookup", + "version": "1.0.1", + "version_normalized": "1.0.1.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4" + "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", + "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/42c4c2eec485ee3e159ec9884f95b431287edde4", - "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", + "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", "shasum": "" }, "require": { - "php": ">=5.3.3", - "sebastian/recursion-context": "~1.0" + "php": "^5.6 || ^7.0" }, "require-dev": { - "ext-mbstring": "*", - "phpunit/phpunit": "~4.4" + "phpunit/phpunit": "^5.7 || ^6.0" }, - "time": "2016-06-17 09:04:28", + "time": "2017-03-04 06:30:41", "type": "library", "extra": { "branch-alias": { - "dev-master": "1.3.x-dev" + "dev-master": "1.0.x-dev" } }, "installation-source": "dist", @@ -1375,60 +2173,42 @@ "BSD-3-Clause" ], "authors": [ - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@2bepublished.at" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Adam Harvey", - "email": "aharvey@php.net" + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" } ], - "description": "Provides the functionality to export PHP variables for visualization", - "homepage": "http://www.github.com/sebastianbergmann/exporter", - "keywords": [ - "export", - "exporter" - ] + "description": "Looks up which function or method a line of code belongs to", + "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/" }, { - "name": "sebastian/environment", - "version": "1.3.8", - "version_normalized": "1.3.8.0", + "name": "sebastian/comparator", + "version": "2.1.1", + "version_normalized": "2.1.1.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "be2c607e43ce4c89ecd60e75c6a85c126e754aea" + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "b11c729f95109b56a0fe9650c6a63a0fcd8c439f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/be2c607e43ce4c89ecd60e75c6a85c126e754aea", - "reference": "be2c607e43ce4c89ecd60e75c6a85c126e754aea", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/b11c729f95109b56a0fe9650c6a63a0fcd8c439f", + "reference": "b11c729f95109b56a0fe9650c6a63a0fcd8c439f", "shasum": "" }, "require": { - "php": "^5.3.3 || ^7.0" + "php": "^7.0", + "sebastian/diff": "^2.0", + "sebastian/exporter": "^3.1" }, "require-dev": { - "phpunit/phpunit": "^4.8 || ^5.0" + "phpunit/phpunit": "^6.4" }, - "time": "2016-08-18 05:49:44", + "time": "2017-12-22 14:50:35", "type": "library", "extra": { "branch-alias": { - "dev-master": "1.3.x-dev" + "dev-master": "2.1.x-dev" } }, "installation-source": "dist", @@ -1442,45 +2222,57 @@ "BSD-3-Clause" ], "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + }, { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de" } ], - "description": "Provides functionality to handle HHVM/PHP environments", - "homepage": "http://www.github.com/sebastianbergmann/environment", + "description": "Provides the functionality to compare PHP values for equality", + "homepage": "https://github.com/sebastianbergmann/comparator", "keywords": [ - "Xdebug", - "environment", - "hhvm" + "comparator", + "compare", + "equality" ] }, { "name": "sebastian/diff", - "version": "1.4.1", - "version_normalized": "1.4.1.0", + "version": "2.0.1", + "version_normalized": "2.0.1.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "13edfd8706462032c2f52b4b862974dd46b71c9e" + "reference": "347c1d8b49c5c3ee30c7040ea6fc446790e6bddd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/13edfd8706462032c2f52b4b862974dd46b71c9e", - "reference": "13edfd8706462032c2f52b4b862974dd46b71c9e", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/347c1d8b49c5c3ee30c7040ea6fc446790e6bddd", + "reference": "347c1d8b49c5c3ee30c7040ea6fc446790e6bddd", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": "^7.0" }, "require-dev": { - "phpunit/phpunit": "~4.8" + "phpunit/phpunit": "^6.2" }, - "time": "2015-12-08 07:14:41", + "time": "2017-08-03 08:09:46", "type": "library", "extra": { "branch-alias": { - "dev-master": "1.4-dev" + "dev-master": "2.0-dev" } }, "installation-source": "dist", @@ -1510,148 +2302,155 @@ ] }, { - "name": "doctrine/instantiator", - "version": "1.0.5", - "version_normalized": "1.0.5.0", + "name": "sebastian/environment", + "version": "3.1.0", + "version_normalized": "3.1.0.0", "source": { "type": "git", - "url": "https://github.com/doctrine/instantiator.git", - "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d" + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "cd0871b3975fb7fc44d11314fd1ee20925fce4f5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d", - "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/cd0871b3975fb7fc44d11314fd1ee20925fce4f5", + "reference": "cd0871b3975fb7fc44d11314fd1ee20925fce4f5", "shasum": "" }, "require": { - "php": ">=5.3,<8.0-DEV" + "php": "^7.0" }, "require-dev": { - "athletic/athletic": "~0.1.8", - "ext-pdo": "*", - "ext-phar": "*", - "phpunit/phpunit": "~4.0", - "squizlabs/php_codesniffer": "~2.0" + "phpunit/phpunit": "^6.1" }, - "time": "2015-06-14 21:17:01", + "time": "2017-07-01 08:51:00", "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "3.1.x-dev" } }, "installation-source": "dist", "autoload": { - "psr-4": { - "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com", - "homepage": "http://ocramius.github.com/" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" } ], - "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", - "homepage": "https://github.com/doctrine/instantiator", + "description": "Provides functionality to handle HHVM/PHP environments", + "homepage": "http://www.github.com/sebastianbergmann/environment", "keywords": [ - "constructor", - "instantiate" + "Xdebug", + "environment", + "hhvm" ] }, { - "name": "phpspec/prophecy", - "version": "v1.6.1", - "version_normalized": "1.6.1.0", + "name": "sebastian/exporter", + "version": "3.1.0", + "version_normalized": "3.1.0.0", "source": { "type": "git", - "url": "https://github.com/phpspec/prophecy.git", - "reference": "58a8137754bc24b25740d4281399a4a3596058e0" + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "234199f4528de6d12aaa58b612e98f7d36adb937" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/58a8137754bc24b25740d4281399a4a3596058e0", - "reference": "58a8137754bc24b25740d4281399a4a3596058e0", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/234199f4528de6d12aaa58b612e98f7d36adb937", + "reference": "234199f4528de6d12aaa58b612e98f7d36adb937", "shasum": "" }, "require": { - "doctrine/instantiator": "^1.0.2", - "php": "^5.3|^7.0", - "phpdocumentor/reflection-docblock": "^2.0|^3.0.2", - "sebastian/comparator": "^1.1", - "sebastian/recursion-context": "^1.0" + "php": "^7.0", + "sebastian/recursion-context": "^3.0" }, "require-dev": { - "phpspec/phpspec": "^2.0" + "ext-mbstring": "*", + "phpunit/phpunit": "^6.0" }, - "time": "2016-06-07 08:13:47", + "time": "2017-04-03 13:19:02", "type": "library", "extra": { "branch-alias": { - "dev-master": "1.6.x-dev" + "dev-master": "3.1.x-dev" } }, "installation-source": "dist", "autoload": { - "psr-0": { - "Prophecy\\": "src/" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Konstantin Kudryashov", - "email": "ever.zet@gmail.com", - "homepage": "http://everzet.com" + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" }, { - "name": "Marcello Duarte", - "email": "marcello.duarte@gmail.com" + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" } ], - "description": "Highly opinionated mocking framework for PHP 5.3+", - "homepage": "https://github.com/phpspec/prophecy", + "description": "Provides the functionality to export PHP variables for visualization", + "homepage": "http://www.github.com/sebastianbergmann/exporter", "keywords": [ - "Double", - "Dummy", - "fake", - "mock", - "spy", - "stub" + "export", + "exporter" ] }, { - "name": "sebastian/version", + "name": "sebastian/global-state", "version": "2.0.0", "version_normalized": "2.0.0.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/version.git", - "reference": "c829badbd8fdf16a0bad8aa7fa7971c029f1b9c5" + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c829badbd8fdf16a0bad8aa7fa7971c029f1b9c5", - "reference": "c829badbd8fdf16a0bad8aa7fa7971c029f1b9c5", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4", + "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4", "shasum": "" }, "require": { - "php": ">=5.6" + "php": "^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.0" + }, + "suggest": { + "ext-uopz": "*" }, - "time": "2016-02-04 12:56:52", + "time": "2017-04-27 15:39:26", "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0.x-dev" + "dev-master": "2.0-dev" } }, "installation-source": "dist", @@ -1667,36 +2466,43 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "email": "sebastian@phpunit.de" } ], - "description": "Library that helps with managing the version number of Git-hosted PHP projects", - "homepage": "https://github.com/sebastianbergmann/version" + "description": "Snapshotting of global state", + "homepage": "http://www.github.com/sebastianbergmann/global-state", + "keywords": [ + "global state" + ] }, { - "name": "sebastian/resource-operations", - "version": "1.0.0", - "version_normalized": "1.0.0.0", + "name": "sebastian/object-enumerator", + "version": "3.0.3", + "version_normalized": "3.0.3.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/resource-operations.git", - "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52" + "url": "https://github.com/sebastianbergmann/object-enumerator.git", + "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/ce990bb21759f94aeafd30209e8cfcdfa8bc3f52", - "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/7cfd9e65d11ffb5af41198476395774d4c8a84c5", + "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5", "shasum": "" }, "require": { - "php": ">=5.6.0" + "php": "^7.0", + "sebastian/object-reflector": "^1.1.1", + "sebastian/recursion-context": "^3.0" }, - "time": "2015-07-28 20:34:47", + "require-dev": { + "phpunit/phpunit": "^6.0" + }, + "time": "2017-08-03 12:35:26", "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "3.0.x-dev" } }, "installation-source": "dist", @@ -1715,36 +2521,35 @@ "email": "sebastian@phpunit.de" } ], - "description": "Provides a list of PHP built-in functions that operate on resources", - "homepage": "https://www.github.com/sebastianbergmann/resource-operations" + "description": "Traverses array structures and object graphs to enumerate all referenced objects", + "homepage": "https://github.com/sebastianbergmann/object-enumerator/" }, { - "name": "sebastian/object-enumerator", - "version": "1.0.0", - "version_normalized": "1.0.0.0", + "name": "sebastian/object-reflector", + "version": "1.1.1", + "version_normalized": "1.1.1.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "d4ca2fb70344987502567bc50081c03e6192fb26" + "url": "https://github.com/sebastianbergmann/object-reflector.git", + "reference": "773f97c67f28de00d397be301821b06708fca0be" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/d4ca2fb70344987502567bc50081c03e6192fb26", - "reference": "d4ca2fb70344987502567bc50081c03e6192fb26", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/773f97c67f28de00d397be301821b06708fca0be", + "reference": "773f97c67f28de00d397be301821b06708fca0be", "shasum": "" }, "require": { - "php": ">=5.6", - "sebastian/recursion-context": "~1.0" + "php": "^7.0" }, "require-dev": { - "phpunit/phpunit": "~5" + "phpunit/phpunit": "^6.0" }, - "time": "2016-01-28 13:25:10", + "time": "2017-03-29 09:07:27", "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "1.1-dev" } }, "installation-source": "dist", @@ -1763,37 +2568,35 @@ "email": "sebastian@phpunit.de" } ], - "description": "Traverses array structures and object graphs to enumerate all referenced objects", - "homepage": "https://github.com/sebastianbergmann/object-enumerator/" + "description": "Allows reflection of object attributes, including inherited and non-public ones", + "homepage": "https://github.com/sebastianbergmann/object-reflector/" }, { - "name": "sebastian/comparator", - "version": "1.2.2", - "version_normalized": "1.2.2.0", + "name": "sebastian/recursion-context", + "version": "3.0.0", + "version_normalized": "3.0.0.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "6a1ed12e8b2409076ab22e3897126211ff8b1f7f" + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/6a1ed12e8b2409076ab22e3897126211ff8b1f7f", - "reference": "6a1ed12e8b2409076ab22e3897126211ff8b1f7f", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8", + "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8", "shasum": "" }, "require": { - "php": ">=5.3.3", - "sebastian/diff": "~1.2", - "sebastian/exporter": "~1.2 || ~2.0" + "php": "^7.0" }, "require-dev": { - "phpunit/phpunit": "~4.4" + "phpunit/phpunit": "^6.0" }, - "time": "2016-11-19 09:18:40", + "time": "2017-03-03 06:23:57", "type": "library", "extra": { "branch-alias": { - "dev-master": "1.2.x-dev" + "dev-master": "3.0.x-dev" } }, "installation-source": "dist", @@ -1811,49 +2614,37 @@ "name": "Jeff Welch", "email": "whatthejeff@gmail.com" }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@2bepublished.at" - }, { "name": "Sebastian Bergmann", "email": "sebastian@phpunit.de" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" } ], - "description": "Provides the functionality to compare PHP values for equality", - "homepage": "http://www.github.com/sebastianbergmann/comparator", - "keywords": [ - "comparator", - "compare", - "equality" - ] + "description": "Provides functionality to recursively process PHP variables", + "homepage": "http://www.github.com/sebastianbergmann/recursion-context" }, { - "name": "sebastian/code-unit-reverse-lookup", + "name": "sebastian/resource-operations", "version": "1.0.0", "version_normalized": "1.0.0.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", - "reference": "c36f5e7cfce482fde5bf8d10d41a53591e0198fe" + "url": "https://github.com/sebastianbergmann/resource-operations.git", + "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/c36f5e7cfce482fde5bf8d10d41a53591e0198fe", - "reference": "c36f5e7cfce482fde5bf8d10d41a53591e0198fe", + "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/ce990bb21759f94aeafd30209e8cfcdfa8bc3f52", + "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52", "shasum": "" }, "require": { - "php": ">=5.6" - }, - "require-dev": { - "phpunit/phpunit": "~5" + "php": ">=5.6.0" }, - "time": "2016-02-13 06:45:14", + "time": "2015-07-28 20:34:47", "type": "library", "extra": { "branch-alias": { @@ -1876,91 +2667,89 @@ "email": "sebastian@phpunit.de" } ], - "description": "Looks up which function or method a line of code belongs to", - "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/" + "description": "Provides a list of PHP built-in functions that operate on resources", + "homepage": "https://www.github.com/sebastianbergmann/resource-operations" }, { - "name": "myclabs/deep-copy", - "version": "1.5.5", - "version_normalized": "1.5.5.0", + "name": "sebastian/version", + "version": "2.0.1", + "version_normalized": "2.0.1.0", "source": { "type": "git", - "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "399c1f9781e222f6eb6cc238796f5200d1b7f108" + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/399c1f9781e222f6eb6cc238796f5200d1b7f108", - "reference": "399c1f9781e222f6eb6cc238796f5200d1b7f108", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019", + "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019", "shasum": "" }, "require": { - "php": ">=5.4.0" - }, - "require-dev": { - "doctrine/collections": "1.*", - "phpunit/phpunit": "~4.1" + "php": ">=5.6" }, - "time": "2016-10-31 17:19:45", + "time": "2016-10-03 07:35:21", "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, "installation-source": "dist", "autoload": { - "psr-4": { - "DeepCopy\\": "src/DeepCopy/" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], - "description": "Create deep copies (clones) of your objects", - "homepage": "https://github.com/myclabs/DeepCopy", - "keywords": [ - "clone", - "copy", - "duplicate", - "object", - "object graph" - ] + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version" }, { - "name": "consolidation/output-formatters", - "version": "3.1.3", - "version_normalized": "3.1.3.0", + "name": "swiftmailer/swiftmailer", + "version": "v6.0.2", + "version_normalized": "6.0.2.0", "source": { "type": "git", - "url": "https://github.com/consolidation/output-formatters.git", - "reference": "1e6c6ab49904a31c310940ec4efccf5f36e386e4" + "url": "https://github.com/swiftmailer/swiftmailer.git", + "reference": "412333372fb6c8ffb65496a2bbd7321af75733fc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/consolidation/output-formatters/zipball/1e6c6ab49904a31c310940ec4efccf5f36e386e4", - "reference": "1e6c6ab49904a31c310940ec4efccf5f36e386e4", + "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/412333372fb6c8ffb65496a2bbd7321af75733fc", + "reference": "412333372fb6c8ffb65496a2bbd7321af75733fc", "shasum": "" }, "require": { - "php": ">=5.4.0", - "symfony/console": "~2.5|~3.0", - "symfony/finder": "~2.5|~3.0", - "victorjonsson/markdowndocs": "^1.3" + "egulias/email-validator": "~2.0", + "php": ">=7.0.0" }, "require-dev": { - "phpunit/phpunit": "4.*", - "satooshi/php-coveralls": "^1.0", - "squizlabs/php_codesniffer": "2.*" + "mockery/mockery": "~0.9.1", + "symfony/phpunit-bridge": "~3.3@dev" }, - "time": "2016-11-18 23:04:31", + "time": "2017-09-30 22:39:41", "type": "library", "extra": { "branch-alias": { - "dev-master": "2.x-dev" + "dev-master": "6.0-dev" } }, "installation-source": "dist", "autoload": { - "psr-4": { - "Consolidation\\OutputFormatters\\": "src" - } + "files": [ + "lib/swift_required.php" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -1968,53 +2757,74 @@ ], "authors": [ { - "name": "Greg Anderson", - "email": "greg.1.anderson@greenknowe.org" + "name": "Chris Corbyn" + }, + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" } ], - "description": "Format text by applying transformations provided by plug-in formatters." + "description": "Swiftmailer, free feature-rich PHP mailer", + "homepage": "http://swiftmailer.symfony.com", + "keywords": [ + "email", + "mail", + "mailer" + ] }, { - "name": "consolidation/annotated-command", - "version": "2.1.3", - "version_normalized": "2.1.3.0", + "name": "symfony/console", + "version": "v3.4.3", + "version_normalized": "3.4.3.0", "source": { "type": "git", - "url": "https://github.com/consolidation/annotated-command.git", - "reference": "6dcc442cbdc2c5145bb19e042d6b5f3979003b9f" + "url": "https://github.com/symfony/console.git", + "reference": "8394c8ef121949e8f858f13bc1e34f05169e4e7d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/consolidation/annotated-command/zipball/6dcc442cbdc2c5145bb19e042d6b5f3979003b9f", - "reference": "6dcc442cbdc2c5145bb19e042d6b5f3979003b9f", + "url": "https://api.github.com/repos/symfony/console/zipball/8394c8ef121949e8f858f13bc1e34f05169e4e7d", + "reference": "8394c8ef121949e8f858f13bc1e34f05169e4e7d", "shasum": "" }, "require": { - "consolidation/output-formatters": "^3.1.3", - "php": ">=5.4.0", - "phpdocumentor/reflection-docblock": "^2.0|^3.0.2", - "psr/log": "~1", - "symfony/console": "^2.8|~3", - "symfony/event-dispatcher": "^2.5|~3", - "symfony/finder": "^2.5|~3" + "php": "^5.5.9|>=7.0.8", + "symfony/debug": "~2.8|~3.0|~4.0", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "symfony/dependency-injection": "<3.4", + "symfony/process": "<3.3" }, "require-dev": { - "phpunit/phpunit": "4.*", - "satooshi/php-coveralls": "^1.0", - "squizlabs/php_codesniffer": "^2.7" + "psr/log": "~1.0", + "symfony/config": "~3.3|~4.0", + "symfony/dependency-injection": "~3.4|~4.0", + "symfony/event-dispatcher": "~2.8|~3.0|~4.0", + "symfony/lock": "~3.4|~4.0", + "symfony/process": "~3.3|~4.0" + }, + "suggest": { + "psr/log": "For using the console logger", + "symfony/event-dispatcher": "", + "symfony/lock": "", + "symfony/process": "" }, - "time": "2016-11-19 01:02:43", + "time": "2018-01-03 07:37:34", "type": "library", "extra": { "branch-alias": { - "dev-master": "2.x-dev" + "dev-master": "3.4-dev" } }, "installation-source": "dist", "autoload": { "psr-4": { - "Consolidation\\AnnotatedCommand\\": "src" - } + "Symfony\\Component\\Console\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -2022,569 +2832,552 @@ ], "authors": [ { - "name": "Greg Anderson", - "email": "greg.1.anderson@greenknowe.org" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Initialize Symfony Console commands from annotated command class methods." + "description": "Symfony Console Component", + "homepage": "https://symfony.com" }, { - "name": "phpunit/php-text-template", - "version": "1.2.1", - "version_normalized": "1.2.1.0", + "name": "symfony/debug", + "version": "v3.4.3", + "version_normalized": "3.4.3.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" + "url": "https://github.com/symfony/debug.git", + "reference": "603b95dda8b00020e4e6e60dc906e7b715b1c245" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", - "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "url": "https://api.github.com/repos/symfony/debug/zipball/603b95dda8b00020e4e6e60dc906e7b715b1c245", + "reference": "603b95dda8b00020e4e6e60dc906e7b715b1c245", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": "^5.5.9|>=7.0.8", + "psr/log": "~1.0" }, - "time": "2015-06-21 13:50:34", + "conflict": { + "symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2" + }, + "require-dev": { + "symfony/http-kernel": "~2.8|~3.0|~4.0" + }, + "time": "2018-01-03 17:14:19", "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, "installation-source": "dist", "autoload": { - "classmap": [ - "src/" + "psr-4": { + "Symfony\\Component\\Debug\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Simple template engine.", - "homepage": "https://github.com/sebastianbergmann/php-text-template/", - "keywords": [ - "template" - ] + "description": "Symfony Debug Component", + "homepage": "https://symfony.com" }, { - "name": "phpunit/phpunit-mock-objects", - "version": "3.4.1", - "version_normalized": "3.4.1.0", + "name": "symfony/event-dispatcher", + "version": "v3.4.3", + "version_normalized": "3.4.3.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", - "reference": "45026c8383187ad1dcb14fbfec77dced265b9cfc" + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "26b87b6bca8f8f797331a30b76fdae5342dc26ca" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/45026c8383187ad1dcb14fbfec77dced265b9cfc", - "reference": "45026c8383187ad1dcb14fbfec77dced265b9cfc", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/26b87b6bca8f8f797331a30b76fdae5342dc26ca", + "reference": "26b87b6bca8f8f797331a30b76fdae5342dc26ca", "shasum": "" }, "require": { - "doctrine/instantiator": "^1.0.2", - "php": "^5.6 || ^7.0", - "phpunit/php-text-template": "^1.2", - "sebastian/exporter": "^1.2 || ^2.0" + "php": "^5.5.9|>=7.0.8" }, "conflict": { - "phpunit/phpunit": "<5.4.0" + "symfony/dependency-injection": "<3.3" }, "require-dev": { - "phpunit/phpunit": "^5.4" + "psr/log": "~1.0", + "symfony/config": "~2.8|~3.0|~4.0", + "symfony/dependency-injection": "~3.3|~4.0", + "symfony/expression-language": "~2.8|~3.0|~4.0", + "symfony/stopwatch": "~2.8|~3.0|~4.0" }, "suggest": { - "ext-soap": "*" + "symfony/dependency-injection": "", + "symfony/http-kernel": "" }, - "time": "2016-11-19 09:07:46", + "time": "2018-01-03 07:37:34", "type": "library", "extra": { "branch-alias": { - "dev-master": "3.2.x-dev" + "dev-master": "3.4-dev" } }, "installation-source": "dist", "autoload": { - "classmap": [ - "src/" + "psr-4": { + "Symfony\\Component\\EventDispatcher\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", - "role": "lead" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Mock Object library for PHPUnit", - "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/", - "keywords": [ - "mock", - "xunit" - ] + "description": "Symfony EventDispatcher Component", + "homepage": "https://symfony.com" }, { - "name": "phpunit/php-timer", - "version": "1.0.8", - "version_normalized": "1.0.8.0", + "name": "symfony/filesystem", + "version": "v3.4.3", + "version_normalized": "3.4.3.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "38e9124049cf1a164f1e4537caf19c99bf1eb260" + "url": "https://github.com/symfony/filesystem.git", + "reference": "e078773ad6354af38169faf31c21df0f18ace03d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/38e9124049cf1a164f1e4537caf19c99bf1eb260", - "reference": "38e9124049cf1a164f1e4537caf19c99bf1eb260", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/e078773ad6354af38169faf31c21df0f18ace03d", + "reference": "e078773ad6354af38169faf31c21df0f18ace03d", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": "^5.5.9|>=7.0.8" }, - "require-dev": { - "phpunit/phpunit": "~4|~5" - }, - "time": "2016-05-12 18:03:57", + "time": "2018-01-03 07:37:34", "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, "installation-source": "dist", "autoload": { - "classmap": [ - "src/" + "psr-4": { + "Symfony\\Component\\Filesystem\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", - "role": "lead" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Utility class for timing", - "homepage": "https://github.com/sebastianbergmann/php-timer/", - "keywords": [ - "timer" - ] + "description": "Symfony Filesystem Component", + "homepage": "https://symfony.com" }, { - "name": "phpunit/php-file-iterator", - "version": "1.4.1", - "version_normalized": "1.4.1.0", + "name": "symfony/finder", + "version": "v3.4.3", + "version_normalized": "3.4.3.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "6150bf2c35d3fc379e50c7602b75caceaa39dbf0" + "url": "https://github.com/symfony/finder.git", + "reference": "613e26310776f49a1773b6737c6bd554b8bc8c6f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/6150bf2c35d3fc379e50c7602b75caceaa39dbf0", - "reference": "6150bf2c35d3fc379e50c7602b75caceaa39dbf0", + "url": "https://api.github.com/repos/symfony/finder/zipball/613e26310776f49a1773b6737c6bd554b8bc8c6f", + "reference": "613e26310776f49a1773b6737c6bd554b8bc8c6f", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": "^5.5.9|>=7.0.8" }, - "time": "2015-06-21 13:08:43", + "time": "2018-01-03 07:37:34", "type": "library", "extra": { "branch-alias": { - "dev-master": "1.4.x-dev" + "dev-master": "3.4-dev" } }, "installation-source": "dist", "autoload": { - "classmap": [ - "src/" + "psr-4": { + "Symfony\\Component\\Finder\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", - "role": "lead" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "FilterIterator implementation that filters files based on a list of suffixes.", - "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", - "keywords": [ - "filesystem", - "iterator" - ] + "description": "Symfony Finder Component", + "homepage": "https://symfony.com" }, { - "name": "phpunit/php-token-stream", - "version": "1.4.9", - "version_normalized": "1.4.9.0", + "name": "symfony/polyfill-mbstring", + "version": "v1.6.0", + "version_normalized": "1.6.0.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-token-stream.git", - "reference": "3b402f65a4cc90abf6e1104e388b896ce209631b" + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/3b402f65a4cc90abf6e1104e388b896ce209631b", - "reference": "3b402f65a4cc90abf6e1104e388b896ce209631b", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296", + "reference": "2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296", "shasum": "" }, "require": { - "ext-tokenizer": "*", "php": ">=5.3.3" }, - "require-dev": { - "phpunit/phpunit": "~4.2" + "suggest": { + "ext-mbstring": "For best performance" }, - "time": "2016-11-15 14:06:22", + "time": "2017-10-11 12:05:26", "type": "library", "extra": { "branch-alias": { - "dev-master": "1.4-dev" + "dev-master": "1.6-dev" } }, "installation-source": "dist", "autoload": { - "classmap": [ - "src/" + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + }, + "files": [ + "bootstrap.php" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } - ], - "description": "Wrapper around PHP's tokenizer extension.", - "homepage": "https://github.com/sebastianbergmann/php-token-stream/", + ], + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", "keywords": [ - "tokenizer" + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" ] }, { - "name": "phpunit/php-code-coverage", - "version": "4.0.2", - "version_normalized": "4.0.2.0", + "name": "symfony/process", + "version": "v3.4.3", + "version_normalized": "3.4.3.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "6cba06ff75a1a63a71033e1a01b89056f3af1e8d" + "url": "https://github.com/symfony/process.git", + "reference": "ff69f110c6b33fd33cd2089ba97d6112f44ef0ba" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/6cba06ff75a1a63a71033e1a01b89056f3af1e8d", - "reference": "6cba06ff75a1a63a71033e1a01b89056f3af1e8d", + "url": "https://api.github.com/repos/symfony/process/zipball/ff69f110c6b33fd33cd2089ba97d6112f44ef0ba", + "reference": "ff69f110c6b33fd33cd2089ba97d6112f44ef0ba", "shasum": "" }, "require": { - "php": "^5.6 || ^7.0", - "phpunit/php-file-iterator": "~1.3", - "phpunit/php-text-template": "~1.2", - "phpunit/php-token-stream": "^1.4.2", - "sebastian/code-unit-reverse-lookup": "~1.0", - "sebastian/environment": "^1.3.2 || ^2.0", - "sebastian/version": "~1.0|~2.0" - }, - "require-dev": { - "ext-xdebug": ">=2.1.4", - "phpunit/phpunit": "^5.4" - }, - "suggest": { - "ext-dom": "*", - "ext-xdebug": ">=2.4.0", - "ext-xmlwriter": "*" + "php": "^5.5.9|>=7.0.8" }, - "time": "2016-11-01 05:06:24", + "time": "2018-01-03 07:37:34", "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0.x-dev" + "dev-master": "3.4-dev" } }, "installation-source": "dist", "autoload": { - "classmap": [ - "src/" + "psr-4": { + "Symfony\\Component\\Process\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", - "role": "lead" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", - "homepage": "https://github.com/sebastianbergmann/php-code-coverage", - "keywords": [ - "coverage", - "testing", - "xunit" - ] + "description": "Symfony Process Component", + "homepage": "https://symfony.com" }, { - "name": "phpunit/phpunit", - "version": "5.5.7", - "version_normalized": "5.5.7.0", + "name": "symfony/yaml", + "version": "v3.4.3", + "version_normalized": "3.4.3.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "3f67cee782c9abfaee5e32fd2f57cdd54bc257ba" + "url": "https://github.com/symfony/yaml.git", + "reference": "25c192f25721a74084272671f658797d9e0e0146" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/3f67cee782c9abfaee5e32fd2f57cdd54bc257ba", - "reference": "3f67cee782c9abfaee5e32fd2f57cdd54bc257ba", + "url": "https://api.github.com/repos/symfony/yaml/zipball/25c192f25721a74084272671f658797d9e0e0146", + "reference": "25c192f25721a74084272671f658797d9e0e0146", "shasum": "" }, "require": { - "ext-dom": "*", - "ext-json": "*", - "ext-libxml": "*", - "ext-mbstring": "*", - "ext-xml": "*", - "myclabs/deep-copy": "~1.3", - "php": "^5.6 || ^7.0", - "phpspec/prophecy": "^1.3.1", - "phpunit/php-code-coverage": "^4.0.1", - "phpunit/php-file-iterator": "~1.4", - "phpunit/php-text-template": "~1.2", - "phpunit/php-timer": "^1.0.6", - "phpunit/phpunit-mock-objects": "^3.2", - "sebastian/comparator": "~1.1", - "sebastian/diff": "~1.2", - "sebastian/environment": "^1.3 || ^2.0", - "sebastian/exporter": "~1.2", - "sebastian/global-state": "~1.0", - "sebastian/object-enumerator": "~1.0", - "sebastian/resource-operations": "~1.0", - "sebastian/version": "~1.0|~2.0", - "symfony/yaml": "~2.1|~3.0" + "php": "^5.5.9|>=7.0.8" }, "conflict": { - "phpdocumentor/reflection-docblock": "3.0.2" + "symfony/console": "<3.4" }, "require-dev": { - "ext-pdo": "*" + "symfony/console": "~3.4|~4.0" }, "suggest": { - "ext-tidy": "*", - "ext-xdebug": "*", - "phpunit/php-invoker": "~1.1" + "symfony/console": "For validating YAML files using the lint command" }, - "time": "2016-10-03 13:04:15", - "bin": [ - "phpunit" - ], + "time": "2018-01-03 07:37:34", "type": "library", "extra": { "branch-alias": { - "dev-master": "5.5.x-dev" + "dev-master": "3.4-dev" } }, "installation-source": "dist", "autoload": { - "classmap": [ - "src/" + "psr-4": { + "Symfony\\Component\\Yaml\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "The PHP Unit Testing framework.", - "homepage": "https://phpunit.de/", - "keywords": [ - "phpunit", - "testing", - "xunit" - ] + "description": "Symfony Yaml Component", + "homepage": "https://symfony.com" }, { - "name": "filp/whoops", - "version": "2.1.10", - "version_normalized": "2.1.10.0", + "name": "theseer/tokenizer", + "version": "1.1.0", + "version_normalized": "1.1.0.0", "source": { "type": "git", - "url": "https://github.com/filp/whoops.git", - "reference": "ffbbd2c06c64b08fb47974eed5dbce4ca2bb0eec" + "url": "https://github.com/theseer/tokenizer.git", + "reference": "cb2f008f3f05af2893a87208fe6a6c4985483f8b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filp/whoops/zipball/ffbbd2c06c64b08fb47974eed5dbce4ca2bb0eec", - "reference": "ffbbd2c06c64b08fb47974eed5dbce4ca2bb0eec", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/cb2f008f3f05af2893a87208fe6a6c4985483f8b", + "reference": "cb2f008f3f05af2893a87208fe6a6c4985483f8b", "shasum": "" }, "require": { - "php": "^5.5.9 || ^7.0", - "psr/log": "^1.0.1" - }, - "require-dev": { - "mockery/mockery": "0.9.*", - "phpunit/phpunit": "^4.8 || ^5.0", - "symfony/var-dumper": "^2.6 || ^3.0" - }, - "suggest": { - "symfony/var-dumper": "Pretty print complex values better with var-dumper available", - "whoops/soap": "Formats errors as SOAP responses" + "ext-dom": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": "^7.0" }, - "time": "2017-08-03 18:23:40", + "time": "2017-04-07 12:08:54", "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, "installation-source": "dist", "autoload": { - "psr-4": { - "Whoops\\": "src/Whoops/" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Filipe Dobreira", - "homepage": "https://github.com/filp", + "name": "Arne Blankerts", + "email": "arne@blankerts.de", "role": "Developer" } ], - "description": "php error handling for cool kids", - "homepage": "https://filp.github.io/whoops/", - "keywords": [ - "error", - "exception", - "handling", - "library", - "whoops", - "zf2" - ] + "description": "A small library for converting tokenized PHP source code into XML and potentially other formats" }, { - "name": "doctrine/lexer", - "version": "v1.0.1", - "version_normalized": "1.0.1.0", + "name": "twig/twig", + "version": "v1.23.3", + "version_normalized": "1.23.3.0", "source": { "type": "git", - "url": "https://github.com/doctrine/lexer.git", - "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c" + "url": "https://github.com/twigphp/Twig.git", + "reference": "ae53fc2c312fdee63773b75cb570304f85388b08" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/lexer/zipball/83893c552fd2045dd78aef794c31e694c37c0b8c", - "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/ae53fc2c312fdee63773b75cb570304f85388b08", + "reference": "ae53fc2c312fdee63773b75cb570304f85388b08", "shasum": "" }, "require": { - "php": ">=5.3.2" + "php": ">=5.2.7" }, - "time": "2014-09-09 13:34:57", + "require-dev": { + "symfony/debug": "~2.7", + "symfony/phpunit-bridge": "~2.7" + }, + "time": "2016-01-11 14:02:19", "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "1.23-dev" } }, "installation-source": "dist", "autoload": { "psr-0": { - "Doctrine\\Common\\Lexer\\": "lib/" + "Twig_": "lib/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Roman Borschel", - "email": "roman@code-factory.org" + "name": "Fabien Potencier", + "email": "fabien@symfony.com", + "homepage": "http://fabien.potencier.org", + "role": "Lead Developer" }, { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" + "name": "Armin Ronacher", + "email": "armin.ronacher@active-4.com", + "role": "Project Founder" }, { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" + "name": "Twig Team", + "homepage": "http://twig.sensiolabs.org/contributors", + "role": "Contributors" } ], - "description": "Base library for a lexer that can be used in Top-Down, Recursive Descent Parsers.", - "homepage": "http://www.doctrine-project.org", + "description": "Twig, the flexible, fast, and secure template language for PHP", + "homepage": "http://twig.sensiolabs.org", "keywords": [ - "lexer", - "parser" + "templating" ] }, { - "name": "egulias/email-validator", - "version": "2.1.3", - "version_normalized": "2.1.3.0", + "name": "webmozart/assert", + "version": "1.2.0", + "version_normalized": "1.2.0.0", "source": { "type": "git", - "url": "https://github.com/egulias/EmailValidator.git", - "reference": "1bec00a10039b823cc94eef4eddd47dcd3b2ca04" + "url": "https://github.com/webmozart/assert.git", + "reference": "2db61e59ff05fe5126d152bd0655c9ea113e550f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/1bec00a10039b823cc94eef4eddd47dcd3b2ca04", - "reference": "1bec00a10039b823cc94eef4eddd47dcd3b2ca04", + "url": "https://api.github.com/repos/webmozart/assert/zipball/2db61e59ff05fe5126d152bd0655c9ea113e550f", + "reference": "2db61e59ff05fe5126d152bd0655c9ea113e550f", "shasum": "" }, "require": { - "doctrine/lexer": "^1.0.1", - "php": ">= 5.5" + "php": "^5.3.3 || ^7.0" }, "require-dev": { - "dominicsayers/isemail": "dev-master", - "phpunit/phpunit": "^4.8.35", - "satooshi/php-coveralls": "^1.0.1" - }, - "suggest": { - "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation" + "phpunit/phpunit": "^4.6", + "sebastian/version": "^1.0.1" }, - "time": "2017-11-15 23:40:40", + "time": "2016-11-23 20:04:58", "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0.x-dev" + "dev-master": "1.3-dev" } }, "installation-source": "dist", "autoload": { "psr-4": { - "Egulias\\EmailValidator\\": "EmailValidator" + "Webmozart\\Assert\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -2593,74 +3386,75 @@ ], "authors": [ { - "name": "Eduardo Gulias Davis" + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" } ], - "description": "A library for validating emails against several RFCs", - "homepage": "https://github.com/egulias/EmailValidator", + "description": "Assertions to validate method input/output with nice error messages.", "keywords": [ - "email", - "emailvalidation", - "emailvalidator", - "validation", - "validator" + "assert", + "check", + "validate" ] }, { - "name": "swiftmailer/swiftmailer", - "version": "v6.0.2", - "version_normalized": "6.0.2.0", + "name": "pear/mail", + "version": "v1.4.1", + "version_normalized": "1.4.1.0", "source": { "type": "git", - "url": "https://github.com/swiftmailer/swiftmailer.git", - "reference": "412333372fb6c8ffb65496a2bbd7321af75733fc" + "url": "https://github.com/pear/Mail.git", + "reference": "9609ed5e42ac5b221dfd9af85de005c59d418ee7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/412333372fb6c8ffb65496a2bbd7321af75733fc", - "reference": "412333372fb6c8ffb65496a2bbd7321af75733fc", + "url": "https://api.github.com/repos/pear/Mail/zipball/9609ed5e42ac5b221dfd9af85de005c59d418ee7", + "reference": "9609ed5e42ac5b221dfd9af85de005c59d418ee7", "shasum": "" }, "require": { - "egulias/email-validator": "~2.0", - "php": ">=7.0.0" + "pear/pear-core-minimal": "~1.9", + "php": ">=5.2.1" }, "require-dev": { - "mockery/mockery": "~0.9.1", - "symfony/phpunit-bridge": "~3.3@dev" + "pear/pear": "*" }, - "time": "2017-09-30 22:39:41", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "6.0-dev" - } + "suggest": { + "pear/net_smtp": "Install optionally via your project's composer.json" }, + "time": "2017-04-11 17:27:29", + "type": "library", "installation-source": "dist", "autoload": { - "files": [ - "lib/swift_required.php" - ] + "psr-0": { + "Mail": "./" + } }, "notification-url": "https://packagist.org/downloads/", + "include-path": [ + "./" + ], "license": [ - "MIT" + "BSD-2-Clause" ], "authors": [ { - "name": "Chris Corbyn" + "name": "Chuck Hagenbuch", + "email": "chuck@horde.org", + "role": "Lead" }, { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Richard Heyes", + "email": "richard@phpguru.org", + "role": "Developer" + }, + { + "name": "Aleksander Machniak", + "email": "alec@alec.pl", + "role": "Developer" } ], - "description": "Swiftmailer, free feature-rich PHP mailer", - "homepage": "http://swiftmailer.symfony.com", - "keywords": [ - "email", - "mail", - "mailer" - ] + "description": "Class that provides multiple interfaces for sending emails.", + "homepage": "http://pear.php.net/package/Mail" } ] diff --git a/lib/composer/vendor/consolidation/annotated-command/.travis.yml b/lib/composer/vendor/consolidation/annotated-command/.travis.yml index 0966ef0d5..69a43a4f5 100644 --- a/lib/composer/vendor/consolidation/annotated-command/.travis.yml +++ b/lib/composer/vendor/consolidation/annotated-command/.travis.yml @@ -4,16 +4,23 @@ branches: # Only test the master branch and SemVer tags. only: - master - - /^[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+.*$/ + - '/^[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+.*$/' matrix: include: - - php: 7.0 - env: dependencies=highest - - php: 5.6 - - php: 5.5 - - php: 5.4 - env: dependencies=lowest + - + php: 7.1 + env: 'HIGHEST_LOWEST="update" STABILITY="RC"' + - + php: 7.0.11 + env: DO_POST_BUILD_ACTIONS=1 + - + php: 5.6 + - + php: 5.5 + - + php: 5.4 + env: 'HIGHEST_LOWEST="update --prefer-lowest"' sudo: false @@ -22,13 +29,71 @@ cache: - $HOME/.composer/cache before_script: - - if [ -z "$dependencies" ]; then composer install --prefer-dist; fi; - - if [ "$dependencies" = "lowest" ]; then composer update --prefer-dist --prefer-lowest -n; fi; - - if [ "$dependencies" = "highest" ]; then composer update --prefer-dist -n; fi; + # If running a highest/lowest dependencies test, get rid of composer.lock + - | + if [ -n "$HIGHEST_LOWEST" ] ; then + rm composer.lock + composer config --unset platform.php + composer config minimum-stability ${STABILITY-stable} + fi + - 'composer -n ${HIGHEST_LOWEST-install} --prefer-dist' + - composer why symfony/console + # Print out all of the installed packages in alphabetical order, with versions + - composer licenses script: - vendor/bin/phpunit - - vendor/bin/phpcs --standard=PSR2 -n src + - 'vendor/bin/phpcs --standard=PSR2 -n src' after_success: - - travis_retry php vendor/bin/coveralls -v + - 'travis_retry php vendor/bin/coveralls -v' + - | + # Only do post-build actions in one environment, and only if there is a GITHUB token. + if [ -z "$DO_POST_BUILD_ACTIONS" ] ; then + return + fi + if [ -z "$GITHUB_TOKEN" ]; then + echo "No GITHUB_TOKEN defined; exiting." + return + fi + ### + # Run composer lock update on cron jobs. + # See: https://github.com/danielbachhuber/composer-lock-updater + ### + if [ "$TRAVIS_EVENT_TYPE" != "cron" ] ; then + echo "Not a cron job; exiting." + return + fi + ### + # Only run on one job of a master branch build + ### + if [ "master" != "$TRAVIS_BRANCH" ] ; then + echo "composer.lock update only runs on the master branch." + return + fi + ### + # Install composer-lock-updater + ### + export PATH="$HOME/.composer/vendor/bin:$PATH" + composer global require danielbachhuber/composer-lock-updater + ### + # Optional: install Sensio Labs security checker to include security advisories in PR comments + ### + mkdir -p $HOME/bin + wget -O $HOME/bin/security-checker.phar http://get.sensiolabs.org/security-checker.phar + chmod +x $HOME/bin/security-checker.phar + export PATH="$HOME/bin:$PATH" + ### + # Install hub for creating GitHub pull requests + ### + wget -O hub.tgz https://github.com/github/hub/releases/download/v2.2.9/hub-linux-amd64-2.2.9.tgz + tar -zxvf hub.tgz + export PATH=$PATH:$PWD/hub-linux-amd64-2.2.9/bin/ + ### + # Run composer-lock-updater + ### + clu + + + + diff --git a/lib/composer/vendor/consolidation/annotated-command/CHANGELOG.md b/lib/composer/vendor/consolidation/annotated-command/CHANGELOG.md index 7a03b9672..34875a3c4 100644 --- a/lib/composer/vendor/consolidation/annotated-command/CHANGELOG.md +++ b/lib/composer/vendor/consolidation/annotated-command/CHANGELOG.md @@ -1,8 +1,105 @@ # Change Log +### 2.8.2 - 29 Nov 2017 -### 2.0.1 ~ 2.0.3 - 14 November 2016 +- Allow Symfony 4 components. +### 2.8.1 - 16 Oct 2017 + +- Add hook methods to allow Symfony command events to be added directly to the hook manager, givig better control of hook order. (#131) + +### 2.8.0 - 13 Oct 2017 + +- Remove phpdocumentor/reflection-docblock in favor of using a bespoke parser (#130) + +### 2.7.0 - 18 Sept 2017 + +- Add support for options with a default value of 'true' (#119) +- BUGFIX: Improve handling of options with optional values, which previously was not working correctly. (#118) + +### 2.6.1 - 18 Sep 2017 + +- Reverts to contents of the 2.4.13 release. + +### 2.5.0 & 2.5.1 - 17 Sep 2017 + +- BACKED OUT. These releases accidentally introduced breaking changes. + +### 2.4.13 - 28 Aug 2017 + +- Add a followLinks() method (#108) + +### 2.4.12 - 24 Aug 2017 + +- BUGFIX: Allow annotated commands to directly use InputInterface and OutputInterface (#106) + +### 2.4.11 - 27 July 2017 + +- Back out #102: do not change behavior of word wrap based on STDOUT redirection. + +### 2.4.10 - 21 July 2017 + +- Add a method CommandProcessor::setPassExceptions() to allow applicationsto prevent the command processor from catching exceptions thrown by command methods and hooks. (#103) + +### 2.4.9 - 20 Jul 2017 + +- Automatically disable wordwrap when the terminal is not connected to STDOUT (#102) + +### 2.4.8 - 3 Apr 2017 + +- Allow multiple annotations with the same key. These are returned as a csv, or, alternately, can be accessed as an array via the new accessor. +- Unprotect two methods for benefit of Drush help. (#99) +- BUGFIX: Remove symfony/console pin (#100) + +### 2.4.7 & 2.4.6 - 17 Mar 2017 + +- Avoid wrapping help text (#93) +- Pin symfony/console to version < 3.2.5 (#94) +- Add getExampleUsages() to AnnotatedCommand. (#92) + +### 2.4.5 - 28 Feb 2017 + +- Ensure that placeholder entries are written into the commandfile cache. (#86) + +### 2.4.4 - 27 Feb 2017 + +- BUGFIX: Avoid rewriting the command cache unless something has changed. +- BUGFIX: Ensure that the default value of options are correctly cached. + +### 2.4.2 - 24 Feb 2017 + +- Add SimpleCacheInterface as a documentation interface (not enforced). + +### 2.4.1 - 20 Feb 2017 + +- Support array options: multiple options on the commandline may be passed in to options array as an array of values. +- Add php 7.1 to the test matrix. + +### 2.4.0 - 3 Feb 2017 + +- Automatically rebuild cached commandfile data when commandfile changes. +- Provide path to command file in AnnotationData objects. +- Bugfix: Add dynamic options when user runs '--help my:command' (previously, only 'help my:command' worked). +- Bugfix: Include description of last parameter in help (was omitted if no options present) +- Add Windows testing with Appveyor + + +### 2.3.0 - 19 Jan 2017 + +- Add a command info cache to improve performance of applications with many commands +- Bugfix: Allow trailing backslashes in namespaces in CommandFileDiscovery +- Bugfix: Rename @topic to @topics + + +### 2.2.0 - 23 November 2016 + +- Support custom events +- Add xml and json output for replacement help command. Text / html format for replacement help command not available yet. + + +### 2.1.0 - 14 November 2016 + +- Add support for output formatter wordwrapping - Fix version requirement for output-formatters in composer.json - Use output-formatters ~3 - Move php_codesniffer back to require-dev (moved to require by mistake) diff --git a/lib/composer/vendor/consolidation/annotated-command/README.md b/lib/composer/vendor/consolidation/annotated-command/README.md index 9e6d77288..566979192 100644 --- a/lib/composer/vendor/consolidation/annotated-command/README.md +++ b/lib/composer/vendor/consolidation/annotated-command/README.md @@ -2,7 +2,11 @@ Initialize Symfony Console commands from annotated command class methods. -[![Travis CI](https://travis-ci.org/consolidation/annotated-command.svg?branch=master)](https://travis-ci.org/consolidation/annotated-command) [![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/consolidation/annotated-command/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/consolidation/annotated-command/?branch=master) [![Coverage Status](https://coveralls.io/repos/github/consolidation/annotated-command/badge.svg?branch=master)](https://coveralls.io/github/consolidation/annotated-command?branch=master) [![License](https://poser.pugx.org/consolidation/annotated-command/license)](https://packagist.org/packages/consolidation/annotated-command) +[![Travis CI](https://travis-ci.org/consolidation/annotated-command.svg?branch=master)](https://travis-ci.org/consolidation/annotated-command) +[![Windows CI](https://ci.appveyor.com/api/projects/status/c2c4lcf43ux4c30p?svg=true)](https://ci.appveyor.com/project/greg-1-anderson/annotated-command) +[![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/consolidation/annotated-command/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/consolidation/annotated-command/?branch=master) +[![Coverage Status](https://coveralls.io/repos/github/consolidation/annotated-command/badge.svg?branch=master)](https://coveralls.io/github/consolidation/annotated-command?branch=master) +[![License](https://poser.pugx.org/consolidation/annotated-command/license)](https://packagist.org/packages/consolidation/annotated-command) ## Component Status @@ -47,6 +51,7 @@ class MyCommandClass * @command my:cat * @param integer $one The first parameter. * @param integer $two The other parameter. + * @option arr An option that takes multiple values. * @option flip Whether or not the second parameter should come first in the result. * @aliases c * @usage bet alpha --flip @@ -61,30 +66,92 @@ class MyCommandClass } } ``` +## Option Default Values + +The `$options` array must be an associative array whose key is the name of the option, and whose value is one of: + +- The boolean value `false`, which indicates that the option takes no value. +- A **string** containing the default value for options that may be provided a value, but are not required to. +- The special value InputOption::VALUE_REQUIRED, which indicates that the user must provide a value for the option whenever it is used. +- The special value InputOption::VALUE_OPTIONAL, which produces the following behavior: + - If the option is given a value (e.g. `--foo=bar`), then the value will be a string. + - If the option exists on the commandline, but has no value (e.g. `--foo`), then the value will be `true`. + - If the option does not exist on the commandline at all, then the value will be `null`. + - If the user explicitly sets `--foo=0`, then the value will be converted to `false`. + - LIMITATION: If any Input object other than ArgvInput (or a subclass thereof) is used, then the value will be `null` for both the no-value case (`--foo`) and the no-option case. When using a StringInput, use `--foo=1` instead of `--foo` to avoid this problem. +- The special value `true` produces the following behavior: + - If the option is given a value (e.g. `--foo=bar`), then the value will be a string. + - If the option exists on the commandline, but has no value (e.g. `--foo`), then the value will be `true`. + - If the option does not exist on the commandline at all, then the value will also be `true`. + - If the user explicitly sets `--foo=0`, then the value will be converted to `false`. + - If the user adds `--no-foo` on the commandline, then the value of `foo` will be `false`. +- An empty array, which indicates that the option may appear multiple times on the command line. + +No other values should be used for the default value. For example, `$options = ['a' => 1]` is **incorrect**; instead, use `$options = ['a' => '1']`. + +Default values for options may also be provided via the `@default` annotation. See hook alter, below. + ## Hooks Commandfiles may provide hooks in addition to commands. A commandfile method that contains a @hook annotation is registered as a hook instead of a command. The format of the hook annotation is: ``` -@hook type commandname|annotation +@hook type target ``` -The commandname may be the command's primary name (e.g. `my:command`), it's method name (e.g. myCommand) or any of its aliases. - -If an annotation is given instead, then this hook function will run for all commands with the specified annotation. - -There are ten types of hooks supported: - -- Command Event (Symfony) -- Option -- Initialize (Symfony) -- Interact (Symfony) -- Validate -- Command -- Process -- Alter -- Status -- Extract - -Most of these also have "pre" and "post" varieties, to give more flexibility vis-a-vis hook ordering (and for consistency). Note that many validate, process and alter hooks may run, but the first status or extract hook that successfully returns a result will halt processing of further hooks of the same type. +The hook **type** determines when during the command lifecycle this hook will be called. The available hook types are described in detail below. + +The hook **target** specifies which command or commands the hook will be attached to. There are several different ways to specify the hook target. + +- The command's primary name (e.g. `my:command`) or the command's method name (e.g. myCommand) will attach the hook to only that command. +- An annotation (e.g. `@foo`) will attach the hook to any command that is annotated with the given label. +- If the target is omitted, then the hook will be attached to every command defined in the same class as the hook implementation. + +There are ten types of hooks in the command processing request flow: + +- [Command Event](#command-event-hook) (Symfony) + - @pre-command-event + - @command-event + - @post-command-event +- [Option](#option-event-hook) + - @pre-option + - @option + - @post-option +- [Initialize](#initialize-hook) (Symfony) + - @pre-init + - @init + - @post-init +- [Interact](#interact-hook) (Symfony) + - @pre-interact + - @interact + - @post-interact +- [Validate](#validate-hook) + - @pre-validate + - @validate + - @post-validate +- [Command](#command-hook) + - @pre-command + - @command + - @command-init +- [Process](#process-hook) + - @pre-process + - @process + - @post-process +- [Alter](#alter-hook) + - @pre-alter + - @alter + - @post-alter +- [Status](#status-hook) + - @status +- [Extract](#extract-hook) + - @extract + +In addition to these, there are two more hooks available: + +- [On-event](#on-event-hook) + - @on-event +- [Replace Command](#replace-command-hook) + - @replace-command + +The "pre" and "post" varieties of these hooks, where avalable, give more flexibility vis-a-vis hook ordering (and for consistency). Within one type of hook, the running order is undefined and not guaranteed. Note that many validate, process and alter hooks may run, but the first status or extract hook that successfully returns a result will halt processing of further hooks of the same type. Each hook has an interface that defines its calling conventions; however, any callable may be used when registering a hook, which is convenient if versions of PHP prior to 7.0 (with no anonymous classes) need to be supported. @@ -94,15 +161,70 @@ The command-event hook is called via the Symfony Console command event notificat ### Option Event Hook -The option event hook ([OptionHookInterface](src/Hooks/OptionHookInterface.php)) is called for a specific command, whenever it is executed, or its help command is called. Any additional options for the command may be added here by instantiating and returnng an InputOption array. +The option event hook ([OptionHookInterface](src/Hooks/OptionHookInterface.php)) is called for a specific command, whenever it is executed, or its help command is called. Any additional options for the command may be added here by calling the `addOption` method of the provided `$command` object. Note that the option hook is only necessary for calculating dynamic options. Static options may be added via the @option annotation on any hook that uses them. See the [Alter Hook](https://github.com/consolidation/annotated-command#alter-hook) documentation below for an example. +``` +use Consolidation\AnnotatedCommand\AnnotationData; +use Symfony\Component\Console\Command\Command; + +/** + * @hook option some:command + */ +public function additionalOption(Command $command, AnnotationData $annotationData) +{ + $command->addOption( + 'dynamic', + '', + InputOption::VALUE_NONE, + 'Option added by @hook option some:command' + ); +} +``` ### Initialize Hook The initialize hook ([InitializeHookInterface](src/Hooks/InitializeHookInterface.php)) runs prior to the interact hook. It may supply command arguments and options from a configuration file or other sources. It should never do any user interaction. +The [consolidation/config](https://github.com/consolidation/config) project (which is used in [Robo PHP](https://github.com/consolidation/robo)) uses `@hook init` to automatically inject values from `config.yml` configuration files for options that were not provided on the command line. +``` +use Consolidation\AnnotatedCommand\AnnotationData; +use Symfony\Component\Console\Input\InputInterface; + +/** + * @hook init some:command + */ +public function initSomeCommand(InputInterface $input, AnnotationData $annotationData) +{ + $value = $input->getOption('some-option'); + if (!$value) { + $input->setOption('some-option', $this->generateRandomOptionValue()); + } +} +``` + ### Interact Hook -The interact hook ([InteractorInterface](src/Hooks/InteractorInterface.php)) runs prior to argument and option validation. Required arguments and options not supplied on the command line may be provided during this phase by prompting the user. Note that the interact hook is not called if the --no-interaction flag is supplied, whereas the command-event hook and the inject-configuration hook are. +The interact hook ([InteractorInterface](src/Hooks/InteractorInterface.php)) runs prior to argument and option validation. Required arguments and options not supplied on the command line may be provided during this phase by prompting the user. Note that the interact hook is not called if the --no-interaction flag is supplied, whereas the command-event hook and the init hook are. +``` +use Consolidation\AnnotatedCommand\AnnotationData; +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Output\OutputInterface; +use Symfony\Component\Console\Style\SymfonyStyle; + +/** + * @hook interact some:command + */ +public function interact(InputInterface $input, OutputInterface $output, AnnotationData $annotationData) +{ + $io = new SymfonyStyle($input, $output); + + // If the user did not specify a password, then prompt for one. + $password = $input->getOption('password'); + if (empty($password)) { + $password = $io->askHidden("Enter a password:", function ($value) { return $value; }); + $input->setOption('password', $password); + } +} +``` ### Validate Hook @@ -114,24 +236,112 @@ The purpose of the validate hook ([ValidatorInterface](src/Hooks/ValidatorInterf - Return false. Message is empty, and status is 1. Deprecated. The validate hook may change the arguments and options of the command by modifying the Input object in the provided CommandData parameter. Any number of validation hooks may run, but if any fails, then execution of the command stops. +``` +use Consolidation\AnnotatedCommand\CommandData; + +/** + * @hook validate some:command + */ +public function validatePassword(CommandData $commandData) +{ + $input = $commandData->input(); + $password = $input->getOption('password'); + + if (strpbrk($password, '!;$`') === false) { + throw new \Exception("Your password MUST contain at least one of the characters ! ; ` or $, for no rational reason whatsoever."); + } +} +``` ### Command Hook The command hook is provided for semantic purposes. The pre-command and command hooks are equivalent to the post-validate hook, and should confirm to the interface ([ValidatorInterface](src/Hooks/ValidatorInterface.php)). All of the post-validate hooks will be called before the first pre-command hook is called. Similarly, the post-command hook is equivalent to the pre-process hook, and should implement the interface ([ProcessResultInterface](src/Hooks/ProcessResultInterface.php)). The command callback itself (the method annotated @command) is called after the last command hook, and prior to the first post-command hook. +``` +use Consolidation\AnnotatedCommand\CommandData; + +/** + * @hook pre-command some:command + */ +public function preCommand(CommandData $commandData) +{ + // Do something before some:command +} + +/** + * @hook post-command some:command + */ +public function postCommand($result, CommandData $commandData) +{ + // Do something after some:command +} +``` ### Process Hook -The process hook ([ProcessResultInterface](src/Hooks/ProcessResultInterface.php)) is specifically designed to convert a series of processing instructions into a final result. An example of this is implemented in Robo; if a Robo command returns a TaskInterface, then a Robo process hook will execute the task and return the result. This allows a pre-process hook to alter the task, e.g. by adding more operations to a task collection. +The process hook ([ProcessResultInterface](src/Hooks/ProcessResultInterface.php)) is specifically designed to convert a series of processing instructions into a final result. An example of this is implemented in Robo in the [CollectionProcessHook](https://github.com/consolidation/Robo/blob/master/src/Collection/CollectionProcessHook.php) class; if a Robo command returns a TaskInterface, then a Robo process hook will execute the task and return the result. This allows a pre-process hook to alter the task, e.g. by adding more operations to a task collection. The process hook should not be used for other purposes. +``` +use Consolidation\AnnotatedCommand\CommandData; + +/** + * @hook process some:command + */ +public function process($result, CommandData $commandData) +{ + if ($result instanceof MyInterimType) { + $result = $this->convertInterimResult($result); + } +} +``` ### Alter Hook An alter hook ([AlterResultInterface](src/Hooks/AlterResultInterface.php)) changes the result object. Alter hooks should only operate on result objects of a type they explicitly recognize. They may return an object of the same type, or they may convert the object to some other type. If something goes wrong, and the alter hooks wishes to force the command to fail, then it may either return a CommandError object, or throw an exception. +``` +use Consolidation\AnnotatedCommand\CommandData; + +/** + * Demonstrate an alter hook with an option + * + * @hook alter some:command + * @option $alteration Alter the result of the command in some way. + * @usage some:command --alteration + */ +public function alterSomeCommand($result, CommandData $commandData) +{ + if ($commandData->input()->getOption('alteration')) { + $result[] = $this->getOneMoreRow(); + } + + return $result; +} +``` + +If an option needs to be provided with a default value, that may be done via the `@default` annotation. + +``` +use Consolidation\AnnotatedCommand\CommandData; + +/** + * Demonstrate an alter hook with an option that has a default value + * + * @hook alter some:command + * @option $name Give the result a name. + * @default $name George + * @usage some:command --name=George + */ +public function nameSomeCommand($result, CommandData $commandData) +{ + $result['name'] = $commandData->input()->getOption('name') + + return $result; +} +``` ### Status Hook @@ -145,6 +355,59 @@ The extract hook ([ExtractOutputInterface](src/Hooks/ExtractOutputInterface.php) If no extract hook returns any data, then the result object itself is printed if it is a string; otherwise, no output is emitted (other than any produced by the command itself). +### On-Event hook + +Commands can define their own custom events; to do so, they need only implement the CustomEventAwareInterface, and use the CustomEventAwareTrait. Event handlers for each custom event can then be defined using the on-event hook. + +A handler using an on-event hook looks something like the following: +``` +/** + * @hook on-event custom-event + */ +public function handlerForCustomEvent(/* arbitrary parameters, as defined by custom-event */) +{ + // do the needful, return what custom-event expects +} +``` +Then, to utilize this in a command: +``` +class MyCommands implements CustomEventAwareInterface +{ + use CustomEventAwareTrait; + + /** + * @command my-command + */ + public myCommand($options = []) + { + $handlers = $this->getCustomEventHandlers('custom-event'); + // iterate and call $handlers + } +} +``` +It is up to the command that defines the custom event to declare what the expected parameters for the callback function should be, and what the return value is and how it should be used. + +### Replace Command Hook + +The replace-command ([ReplaceCommandHookInterface](src/Hooks/ReplaceCommandHookInterface.php)) hook permits you to replace a command's method with another method of your own. + +For instance, if you'd like to replace the `foo:bar` command, you could utilize the following code: + +```php + composer.lock' + +init: + #https://github.com/composer/composer/blob/master/appveyor.yml + #- SET ANSICON=121x90 (121x90) + +# Inspired by https://github.com/Codeception/base/blob/master/appveyor.yml and https://github.com/phpmd/phpmd/blob/master/appveyor.yml +install: + - cinst -y curl + - SET PATH=C:\Program Files\curl;%PATH% + #which is only needed by the test suite. + - cinst -y which + - SET PATH=C:\Program Files\which;%PATH% + - git clone -q https://github.com/acquia/DevDesktopCommon.git #For tar, cksum, ... + - SET PATH=%APPVEYOR_BUILD_FOLDER%/DevDesktopCommon/bintools-win/msys/bin;%PATH% + - SET PATH=C:\Program Files\MySql\MySQL Server 5.7\bin\;%PATH% + #Install PHP per https://blog.wyrihaximus.net/2016/11/running-php-unit-tests-on-windows-using-appveyor-and-chocolatey/ + - ps: appveyor-retry cinst --ignore-checksums -y php --version ((choco search php --exact --all-versions -r | select-string -pattern $Env:php_ver_target | Select-Object -first 1) -replace '[php|]','') + - cd c:\tools\php70 + - copy php.ini-production php.ini + + - echo extension_dir=ext >> php.ini + - echo extension=php_openssl.dll >> php.ini + - echo date.timezone="UTC" >> php.ini + - echo variables_order="EGPCS" >> php.ini #May be unneeded. + - echo mbstring.http_input=pass >> php.ini + - echo mbstring.http_output=pass >> php.ini + - echo sendmail_path=nul >> php.ini + - echo extension=php_mbstring.dll >> php.ini + - echo extension=php_curl.dll >> php.ini + - echo extension=php_pdo_mysql.dll >> php.ini + - echo extension=php_pdo_pgsql.dll >> php.ini + - echo extension=php_pdo_sqlite.dll >> php.ini + - echo extension=php_pgsql.dll >> php.ini + - echo extension=php_gd2.dll >> php.ini + - SET PATH=C:\tools\php70;%PATH% + #Install Composer + - cd %APPVEYOR_BUILD_FOLDER% + #- appveyor DownloadFile https://getcomposer.org/composer.phar + - php -r "readfile('http://getcomposer.org/installer');" | php + #Install dependencies via Composer + - php composer.phar -q install --prefer-dist -n + - SET PATH=%APPVEYOR_BUILD_FOLDER%;%APPVEYOR_BUILD_FOLDER%/vendor/bin;%PATH% + #Create a sandbox for testing. Don't think we need this. + - mkdir c:\test_temp + +test_script: + - phpunit + - php composer.phar cs + +# environment variables +environment: + global: + SHELL_INTERACTIVE: true + php_ver_target: 7.0 + diff --git a/lib/composer/vendor/consolidation/annotated-command/composer.json b/lib/composer/vendor/consolidation/annotated-command/composer.json index 9132e750c..df450dd5f 100644 --- a/lib/composer/vendor/consolidation/annotated-command/composer.json +++ b/lib/composer/vendor/consolidation/annotated-command/composer.json @@ -20,18 +20,25 @@ }, "require": { "php": ">=5.4.0", - "consolidation/output-formatters": "^3.1.3", - "psr/log": "~1", - "symfony/console": "^2.8|~3", - "symfony/event-dispatcher": "^2.5|~3", - "symfony/finder": "^2.5|~3", - "phpdocumentor/reflection-docblock": "^2.0|^3.0.2" + "consolidation/output-formatters": "^3.1.12", + "psr/log": "^1", + "symfony/console": "^2.8|^3|^4", + "symfony/event-dispatcher": "^2.5|^3|^4", + "symfony/finder": "^2.5|^3|^4" }, "require-dev": { - "phpunit/phpunit": "4.*", - "satooshi/php-coveralls": "^1.0", + "phpunit/phpunit": "^4.8", + "satooshi/php-coveralls": "^1.0.2 | dev-master", "squizlabs/php_codesniffer": "^2.7" }, + "config": { + "optimize-autoloader": true, + "preferred-install": "dist", + "sort-packages": true, + "platform": { + "php": "5.6" + } + }, "scripts": { "cs": "phpcs --standard=PSR2 -n src", "cbf": "phpcbf --standard=PSR2 -n src", diff --git a/lib/composer/vendor/consolidation/annotated-command/composer.lock b/lib/composer/vendor/consolidation/annotated-command/composer.lock index fc3a9760b..6a7cec4cc 100644 --- a/lib/composer/vendor/consolidation/annotated-command/composer.lock +++ b/lib/composer/vendor/consolidation/annotated-command/composer.lock @@ -4,38 +4,37 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "hash": "3022aec17694795060ac3d71280fbc23", - "content-hash": "3053742fe70568ac2d3264b50fad5a41", + "content-hash": "0a26ebe5250ce150e1e8cbafec298926", "packages": [ { "name": "consolidation/output-formatters", - "version": "3.1.3", + "version": "3.1.13", "source": { "type": "git", "url": "https://github.com/consolidation/output-formatters.git", - "reference": "1e6c6ab49904a31c310940ec4efccf5f36e386e4" + "reference": "3188461e965b32148c8fb85261833b2b72d34b8c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/consolidation/output-formatters/zipball/1e6c6ab49904a31c310940ec4efccf5f36e386e4", - "reference": "1e6c6ab49904a31c310940ec4efccf5f36e386e4", + "url": "https://api.github.com/repos/consolidation/output-formatters/zipball/3188461e965b32148c8fb85261833b2b72d34b8c", + "reference": "3188461e965b32148c8fb85261833b2b72d34b8c", "shasum": "" }, "require": { "php": ">=5.4.0", - "symfony/console": "~2.5|~3.0", - "symfony/finder": "~2.5|~3.0", - "victorjonsson/markdowndocs": "^1.3" + "symfony/console": "^2.8|^3|^4", + "symfony/finder": "^2.5|^3|^4" }, "require-dev": { - "phpunit/phpunit": "4.*", - "satooshi/php-coveralls": "^1.0", - "squizlabs/php_codesniffer": "2.*" + "phpunit/phpunit": "^4.8", + "satooshi/php-coveralls": "^1.0.2 | dev-master", + "squizlabs/php_codesniffer": "^2.7", + "victorjonsson/markdowndocs": "^1.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.x-dev" + "dev-master": "3.x-dev" } }, "autoload": { @@ -54,153 +53,7 @@ } ], "description": "Format text by applying transformations provided by plug-in formatters.", - "time": "2016-11-18 23:04:31" - }, - { - "name": "phpdocumentor/reflection-common", - "version": "1.0", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionCommon.git", - "reference": "144c307535e82c8fdcaacbcfc1d6d8eeb896687c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/144c307535e82c8fdcaacbcfc1d6d8eeb896687c", - "reference": "144c307535e82c8fdcaacbcfc1d6d8eeb896687c", - "shasum": "" - }, - "require": { - "php": ">=5.5" - }, - "require-dev": { - "phpunit/phpunit": "^4.6" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": [ - "src" - ] - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jaap van Otterdijk", - "email": "opensource@ijaap.nl" - } - ], - "description": "Common reflection classes used by phpdocumentor to reflect the code structure", - "homepage": "http://www.phpdoc.org", - "keywords": [ - "FQSEN", - "phpDocumentor", - "phpdoc", - "reflection", - "static analysis" - ], - "time": "2015-12-27 11:43:31" - }, - { - "name": "phpdocumentor/reflection-docblock", - "version": "3.1.1", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "8331b5efe816ae05461b7ca1e721c01b46bafb3e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/8331b5efe816ae05461b7ca1e721c01b46bafb3e", - "reference": "8331b5efe816ae05461b7ca1e721c01b46bafb3e", - "shasum": "" - }, - "require": { - "php": ">=5.5", - "phpdocumentor/reflection-common": "^1.0@dev", - "phpdocumentor/type-resolver": "^0.2.0", - "webmozart/assert": "^1.0" - }, - "require-dev": { - "mockery/mockery": "^0.9.4", - "phpunit/phpunit": "^4.4" - }, - "type": "library", - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": [ - "src/" - ] - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" - } - ], - "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", - "time": "2016-09-30 07:12:33" - }, - { - "name": "phpdocumentor/type-resolver", - "version": "0.2", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "b39c7a5b194f9ed7bd0dd345c751007a41862443" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/b39c7a5b194f9ed7bd0dd345c751007a41862443", - "reference": "b39c7a5b194f9ed7bd0dd345c751007a41862443", - "shasum": "" - }, - "require": { - "php": ">=5.5", - "phpdocumentor/reflection-common": "^1.0" - }, - "require-dev": { - "mockery/mockery": "^0.9.4", - "phpunit/phpunit": "^5.2||^4.8.24" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": [ - "src/" - ] - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" - } - ], - "time": "2016-06-10 07:14:17" + "time": "2017-11-29T15:25:38+00:00" }, { "name": "psr/log", @@ -247,41 +100,48 @@ "psr", "psr-3" ], - "time": "2016-10-10 12:19:37" + "time": "2016-10-10T12:19:37+00:00" }, { "name": "symfony/console", - "version": "v3.1.6", + "version": "v3.3.13", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "c99da1119ae61e15de0e4829196b9fba6f73d065" + "reference": "63cd7960a0a522c3537f6326706d7f3b8de65805" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/c99da1119ae61e15de0e4829196b9fba6f73d065", - "reference": "c99da1119ae61e15de0e4829196b9fba6f73d065", + "url": "https://api.github.com/repos/symfony/console/zipball/63cd7960a0a522c3537f6326706d7f3b8de65805", + "reference": "63cd7960a0a522c3537f6326706d7f3b8de65805", "shasum": "" }, "require": { - "php": ">=5.5.9", + "php": "^5.5.9|>=7.0.8", "symfony/debug": "~2.8|~3.0", "symfony/polyfill-mbstring": "~1.0" }, + "conflict": { + "symfony/dependency-injection": "<3.3" + }, "require-dev": { "psr/log": "~1.0", + "symfony/config": "~3.3", + "symfony/dependency-injection": "~3.3", "symfony/event-dispatcher": "~2.8|~3.0", + "symfony/filesystem": "~2.8|~3.0", "symfony/process": "~2.8|~3.0" }, "suggest": { "psr/log": "For using the console logger", "symfony/event-dispatcher": "", + "symfony/filesystem": "", "symfony/process": "" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "3.3-dev" } }, "autoload": { @@ -308,37 +168,36 @@ ], "description": "Symfony Console Component", "homepage": "https://symfony.com", - "time": "2016-10-06 01:44:51" + "time": "2017-11-16T15:24:32+00:00" }, { "name": "symfony/debug", - "version": "v3.1.6", + "version": "v3.3.13", "source": { "type": "git", "url": "https://github.com/symfony/debug.git", - "reference": "e2b3f74a67fc928adc3c1b9027f73e1bc01190a8" + "reference": "74557880e2846b5c84029faa96b834da37e29810" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/debug/zipball/e2b3f74a67fc928adc3c1b9027f73e1bc01190a8", - "reference": "e2b3f74a67fc928adc3c1b9027f73e1bc01190a8", + "url": "https://api.github.com/repos/symfony/debug/zipball/74557880e2846b5c84029faa96b834da37e29810", + "reference": "74557880e2846b5c84029faa96b834da37e29810", "shasum": "" }, "require": { - "php": ">=5.5.9", + "php": "^5.5.9|>=7.0.8", "psr/log": "~1.0" }, "conflict": { "symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2" }, "require-dev": { - "symfony/class-loader": "~2.8|~3.0", "symfony/http-kernel": "~2.8|~3.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "3.3-dev" } }, "autoload": { @@ -365,29 +224,32 @@ ], "description": "Symfony Debug Component", "homepage": "https://symfony.com", - "time": "2016-09-06 11:02:40" + "time": "2017-11-10T16:38:39+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v3.1.6", + "version": "v3.3.13", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "28b0832b2553ffb80cabef6a7a812ff1e670c0bc" + "reference": "271d8c27c3ec5ecee6e2ac06016232e249d638d9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/28b0832b2553ffb80cabef6a7a812ff1e670c0bc", - "reference": "28b0832b2553ffb80cabef6a7a812ff1e670c0bc", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/271d8c27c3ec5ecee6e2ac06016232e249d638d9", + "reference": "271d8c27c3ec5ecee6e2ac06016232e249d638d9", "shasum": "" }, "require": { - "php": ">=5.5.9" + "php": "^5.5.9|>=7.0.8" + }, + "conflict": { + "symfony/dependency-injection": "<3.3" }, "require-dev": { "psr/log": "~1.0", "symfony/config": "~2.8|~3.0", - "symfony/dependency-injection": "~2.8|~3.0", + "symfony/dependency-injection": "~3.3", "symfony/expression-language": "~2.8|~3.0", "symfony/stopwatch": "~2.8|~3.0" }, @@ -398,7 +260,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "3.3-dev" } }, "autoload": { @@ -425,29 +287,29 @@ ], "description": "Symfony EventDispatcher Component", "homepage": "https://symfony.com", - "time": "2016-10-13 06:28:43" + "time": "2017-11-05T15:47:03+00:00" }, { "name": "symfony/finder", - "version": "v3.1.6", + "version": "v3.3.13", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "205b5ffbb518a98ba2ae60a52656c4a31ab00c6f" + "reference": "138af5ec075d4b1d1bd19de08c38a34bb2d7d880" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/205b5ffbb518a98ba2ae60a52656c4a31ab00c6f", - "reference": "205b5ffbb518a98ba2ae60a52656c4a31ab00c6f", + "url": "https://api.github.com/repos/symfony/finder/zipball/138af5ec075d4b1d1bd19de08c38a34bb2d7d880", + "reference": "138af5ec075d4b1d1bd19de08c38a34bb2d7d880", "shasum": "" }, "require": { - "php": ">=5.5.9" + "php": "^5.5.9|>=7.0.8" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "3.3-dev" } }, "autoload": { @@ -474,20 +336,20 @@ ], "description": "Symfony Finder Component", "homepage": "https://symfony.com", - "time": "2016-09-28 00:11:12" + "time": "2017-11-05T15:47:03+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.3.0", + "version": "v1.6.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "e79d363049d1c2128f133a2667e4f4190904f7f4" + "reference": "2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/e79d363049d1c2128f133a2667e4f4190904f7f4", - "reference": "e79d363049d1c2128f133a2667e4f4190904f7f4", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296", + "reference": "2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296", "shasum": "" }, "require": { @@ -499,7 +361,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.3-dev" + "dev-master": "1.6-dev" } }, "autoload": { @@ -533,36 +395,43 @@ "portable", "shim" ], - "time": "2016-11-14 01:06:16" - }, + "time": "2017-10-11T12:05:26+00:00" + } + ], + "packages-dev": [ { - "name": "victorjonsson/markdowndocs", - "version": "1.3.7", + "name": "doctrine/instantiator", + "version": "1.0.5", "source": { "type": "git", - "url": "https://github.com/victorjonsson/PHP-Markdown-Documentation-Generator.git", - "reference": "a8244617cdce4804cd94ea508c82e8d7e29a273a" + "url": "https://github.com/doctrine/instantiator.git", + "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/victorjonsson/PHP-Markdown-Documentation-Generator/zipball/a8244617cdce4804cd94ea508c82e8d7e29a273a", - "reference": "a8244617cdce4804cd94ea508c82e8d7e29a273a", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d", + "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d", "shasum": "" }, "require": { - "php": ">=5.5.0", - "symfony/console": ">=2.6" + "php": ">=5.3,<8.0-DEV" }, "require-dev": { - "phpunit/phpunit": "3.7.23" + "athletic/athletic": "~0.1.8", + "ext-pdo": "*", + "ext-phar": "*", + "phpunit/phpunit": "~4.0", + "squizlabs/php_codesniffer": "~2.0" }, - "bin": [ - "bin/phpdoc-md" - ], "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, "autoload": { - "psr-0": { - "PHPDocsMD": "src/" + "psr-4": { + "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" } }, "notification-url": "https://packagist.org/downloads/", @@ -571,44 +440,58 @@ ], "authors": [ { - "name": "Victor Jonsson", - "email": "kontakt@victorjonsson.se" + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "homepage": "http://ocramius.github.com/" } ], - "description": "Command line tool for generating markdown-formatted class documentation", - "homepage": "https://github.com/victorjonsson/PHP-Markdown-Documentation-Generator", - "time": "2016-10-11 21:10:19" + "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", + "homepage": "https://github.com/doctrine/instantiator", + "keywords": [ + "constructor", + "instantiate" + ], + "time": "2015-06-14T21:17:01+00:00" }, { - "name": "webmozart/assert", - "version": "1.1.0", + "name": "guzzlehttp/guzzle", + "version": "6.3.0", "source": { "type": "git", - "url": "https://github.com/webmozart/assert.git", - "reference": "bb2d123231c095735130cc8f6d31385a44c7b308" + "url": "https://github.com/guzzle/guzzle.git", + "reference": "f4db5a78a5ea468d4831de7f0bf9d9415e348699" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozart/assert/zipball/bb2d123231c095735130cc8f6d31385a44c7b308", - "reference": "bb2d123231c095735130cc8f6d31385a44c7b308", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/f4db5a78a5ea468d4831de7f0bf9d9415e348699", + "reference": "f4db5a78a5ea468d4831de7f0bf9d9415e348699", "shasum": "" }, "require": { - "php": "^5.3.3|^7.0" + "guzzlehttp/promises": "^1.0", + "guzzlehttp/psr7": "^1.4", + "php": ">=5.5" }, "require-dev": { - "phpunit/phpunit": "^4.6", - "sebastian/version": "^1.0.1" + "ext-curl": "*", + "phpunit/phpunit": "^4.0 || ^5.0", + "psr/log": "^1.0" + }, + "suggest": { + "psr/log": "Required for using the Log middleware" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.2-dev" + "dev-master": "6.2-dev" } }, "autoload": { + "files": [ + "src/functions_include.php" + ], "psr-4": { - "Webmozart\\Assert\\": "src/" + "GuzzleHttp\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -617,54 +500,57 @@ ], "authors": [ { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" } ], - "description": "Assertions to validate method input/output with nice error messages.", + "description": "Guzzle is a PHP HTTP client library", + "homepage": "http://guzzlephp.org/", "keywords": [ - "assert", - "check", - "validate" + "client", + "curl", + "framework", + "http", + "http client", + "rest", + "web service" ], - "time": "2016-08-09 15:02:57" - } - ], - "packages-dev": [ + "time": "2017-06-22T18:50:49+00:00" + }, { - "name": "doctrine/instantiator", - "version": "1.0.5", + "name": "guzzlehttp/promises", + "version": "v1.3.1", "source": { "type": "git", - "url": "https://github.com/doctrine/instantiator.git", - "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d" + "url": "https://github.com/guzzle/promises.git", + "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d", - "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d", + "url": "https://api.github.com/repos/guzzle/promises/zipball/a59da6cf61d80060647ff4d3eb2c03a2bc694646", + "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646", "shasum": "" }, "require": { - "php": ">=5.3,<8.0-DEV" + "php": ">=5.5.0" }, "require-dev": { - "athletic/athletic": "~0.1.8", - "ext-pdo": "*", - "ext-phar": "*", - "phpunit/phpunit": "~4.0", - "squizlabs/php_codesniffer": "~2.0" + "phpunit/phpunit": "^4.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "1.4-dev" } }, "autoload": { "psr-4": { - "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" - } + "GuzzleHttp\\Promise\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -672,82 +558,54 @@ ], "authors": [ { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com", - "homepage": "http://ocramius.github.com/" + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" } ], - "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", - "homepage": "https://github.com/doctrine/instantiator", + "description": "Guzzle promises library", "keywords": [ - "constructor", - "instantiate" + "promise" ], - "time": "2015-06-14 21:17:01" + "time": "2016-12-20T10:07:11+00:00" }, { - "name": "guzzle/guzzle", - "version": "v3.8.1", + "name": "guzzlehttp/psr7", + "version": "1.4.2", "source": { "type": "git", - "url": "https://github.com/guzzle/guzzle.git", - "reference": "4de0618a01b34aa1c8c33a3f13f396dcd3882eba" + "url": "https://github.com/guzzle/psr7.git", + "reference": "f5b8a8512e2b58b0071a7280e39f14f72e05d87c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/4de0618a01b34aa1c8c33a3f13f396dcd3882eba", - "reference": "4de0618a01b34aa1c8c33a3f13f396dcd3882eba", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/f5b8a8512e2b58b0071a7280e39f14f72e05d87c", + "reference": "f5b8a8512e2b58b0071a7280e39f14f72e05d87c", "shasum": "" }, "require": { - "ext-curl": "*", - "php": ">=5.3.3", - "symfony/event-dispatcher": ">=2.1" - }, - "replace": { - "guzzle/batch": "self.version", - "guzzle/cache": "self.version", - "guzzle/common": "self.version", - "guzzle/http": "self.version", - "guzzle/inflection": "self.version", - "guzzle/iterator": "self.version", - "guzzle/log": "self.version", - "guzzle/parser": "self.version", - "guzzle/plugin": "self.version", - "guzzle/plugin-async": "self.version", - "guzzle/plugin-backoff": "self.version", - "guzzle/plugin-cache": "self.version", - "guzzle/plugin-cookie": "self.version", - "guzzle/plugin-curlauth": "self.version", - "guzzle/plugin-error-response": "self.version", - "guzzle/plugin-history": "self.version", - "guzzle/plugin-log": "self.version", - "guzzle/plugin-md5": "self.version", - "guzzle/plugin-mock": "self.version", - "guzzle/plugin-oauth": "self.version", - "guzzle/service": "self.version", - "guzzle/stream": "self.version" + "php": ">=5.4.0", + "psr/http-message": "~1.0" + }, + "provide": { + "psr/http-message-implementation": "1.0" }, "require-dev": { - "doctrine/cache": "*", - "monolog/monolog": "1.*", - "phpunit/phpunit": "3.7.*", - "psr/log": "1.0.*", - "symfony/class-loader": "*", - "zendframework/zend-cache": "<2.3", - "zendframework/zend-log": "<2.3" + "phpunit/phpunit": "~4.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.8-dev" + "dev-master": "1.4-dev" } }, "autoload": { - "psr-0": { - "Guzzle": "src/", - "Guzzle\\Tests": "tests/" - } + "psr-4": { + "GuzzleHttp\\Psr7\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -760,52 +618,197 @@ "homepage": "https://github.com/mtdowling" }, { - "name": "Guzzle Community", - "homepage": "https://github.com/guzzle/guzzle/contributors" + "name": "Tobias Schultze", + "homepage": "https://github.com/Tobion" } ], - "description": "Guzzle is a PHP HTTP client library and framework for building RESTful web service clients", - "homepage": "http://guzzlephp.org/", + "description": "PSR-7 message implementation that also provides common utility methods", "keywords": [ - "client", - "curl", - "framework", "http", - "http client", - "rest", - "web service" + "message", + "request", + "response", + "stream", + "uri", + "url" + ], + "time": "2017-03-20T17:10:46+00:00" + }, + { + "name": "phpdocumentor/reflection-common", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionCommon.git", + "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", + "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", + "shasum": "" + }, + "require": { + "php": ">=5.5" + }, + "require-dev": { + "phpunit/phpunit": "^4.6" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": [ + "src" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jaap van Otterdijk", + "email": "opensource@ijaap.nl" + } + ], + "description": "Common reflection classes used by phpdocumentor to reflect the code structure", + "homepage": "http://www.phpdoc.org", + "keywords": [ + "FQSEN", + "phpDocumentor", + "phpdoc", + "reflection", + "static analysis" + ], + "time": "2017-09-11T18:02:19+00:00" + }, + { + "name": "phpdocumentor/reflection-docblock", + "version": "3.3.2", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "bf329f6c1aadea3299f08ee804682b7c45b326a2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/bf329f6c1aadea3299f08ee804682b7c45b326a2", + "reference": "bf329f6c1aadea3299f08ee804682b7c45b326a2", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0", + "phpdocumentor/reflection-common": "^1.0.0", + "phpdocumentor/type-resolver": "^0.4.0", + "webmozart/assert": "^1.0" + }, + "require-dev": { + "mockery/mockery": "^0.9.4", + "phpunit/phpunit": "^4.4" + }, + "type": "library", + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" ], - "abandoned": "guzzlehttp/guzzle", - "time": "2014-01-28 22:29:15" + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + } + ], + "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", + "time": "2017-11-10T14:09:06+00:00" + }, + { + "name": "phpdocumentor/type-resolver", + "version": "0.4.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/TypeResolver.git", + "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/9c977708995954784726e25d0cd1dddf4e65b0f7", + "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7", + "shasum": "" + }, + "require": { + "php": "^5.5 || ^7.0", + "phpdocumentor/reflection-common": "^1.0" + }, + "require-dev": { + "mockery/mockery": "^0.9.4", + "phpunit/phpunit": "^5.2||^4.8.24" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + } + ], + "time": "2017-07-14T14:27:02+00:00" }, { "name": "phpspec/prophecy", - "version": "v1.6.1", + "version": "1.7.3", "source": { "type": "git", "url": "https://github.com/phpspec/prophecy.git", - "reference": "58a8137754bc24b25740d4281399a4a3596058e0" + "reference": "e4ed002c67da8eceb0eb8ddb8b3847bb53c5c2bf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/58a8137754bc24b25740d4281399a4a3596058e0", - "reference": "58a8137754bc24b25740d4281399a4a3596058e0", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/e4ed002c67da8eceb0eb8ddb8b3847bb53c5c2bf", + "reference": "e4ed002c67da8eceb0eb8ddb8b3847bb53c5c2bf", "shasum": "" }, "require": { "doctrine/instantiator": "^1.0.2", "php": "^5.3|^7.0", - "phpdocumentor/reflection-docblock": "^2.0|^3.0.2", - "sebastian/comparator": "^1.1", - "sebastian/recursion-context": "^1.0" + "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0", + "sebastian/comparator": "^1.1|^2.0", + "sebastian/recursion-context": "^1.0|^2.0|^3.0" }, "require-dev": { - "phpspec/phpspec": "^2.0" + "phpspec/phpspec": "^2.5|^3.2", + "phpunit/phpunit": "^4.8.35 || ^5.7" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.6.x-dev" + "dev-master": "1.7.x-dev" } }, "autoload": { @@ -838,7 +841,7 @@ "spy", "stub" ], - "time": "2016-06-07 08:13:47" + "time": "2017-11-24T13:59:53+00:00" }, { "name": "phpunit/php-code-coverage", @@ -900,20 +903,20 @@ "testing", "xunit" ], - "time": "2015-10-06 15:47:00" + "time": "2015-10-06T15:47:00+00:00" }, { "name": "phpunit/php-file-iterator", - "version": "1.4.1", + "version": "1.4.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "6150bf2c35d3fc379e50c7602b75caceaa39dbf0" + "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/6150bf2c35d3fc379e50c7602b75caceaa39dbf0", - "reference": "6150bf2c35d3fc379e50c7602b75caceaa39dbf0", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/730b01bc3e867237eaac355e06a36b85dd93a8b4", + "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4", "shasum": "" }, "require": { @@ -947,7 +950,7 @@ "filesystem", "iterator" ], - "time": "2015-06-21 13:08:43" + "time": "2017-11-27T13:52:08+00:00" }, { "name": "phpunit/php-text-template", @@ -988,29 +991,34 @@ "keywords": [ "template" ], - "time": "2015-06-21 13:50:34" + "time": "2015-06-21T13:50:34+00:00" }, { "name": "phpunit/php-timer", - "version": "1.0.8", + "version": "1.0.9", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "38e9124049cf1a164f1e4537caf19c99bf1eb260" + "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/38e9124049cf1a164f1e4537caf19c99bf1eb260", - "reference": "38e9124049cf1a164f1e4537caf19c99bf1eb260", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", + "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": "^5.3.3 || ^7.0" }, "require-dev": { - "phpunit/phpunit": "~4|~5" + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, "autoload": { "classmap": [ "src/" @@ -1032,20 +1040,20 @@ "keywords": [ "timer" ], - "time": "2016-05-12 18:03:57" + "time": "2017-02-26T11:10:40+00:00" }, { "name": "phpunit/php-token-stream", - "version": "1.4.9", + "version": "1.4.11", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-token-stream.git", - "reference": "3b402f65a4cc90abf6e1104e388b896ce209631b" + "reference": "e03f8f67534427a787e21a385a67ec3ca6978ea7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/3b402f65a4cc90abf6e1104e388b896ce209631b", - "reference": "3b402f65a4cc90abf6e1104e388b896ce209631b", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/e03f8f67534427a787e21a385a67ec3ca6978ea7", + "reference": "e03f8f67534427a787e21a385a67ec3ca6978ea7", "shasum": "" }, "require": { @@ -1081,20 +1089,20 @@ "keywords": [ "tokenizer" ], - "time": "2016-11-15 14:06:22" + "time": "2017-02-27T10:12:30+00:00" }, { "name": "phpunit/phpunit", - "version": "4.8.28", + "version": "4.8.36", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "558a3a0d28b4cb7e4a593a4fbd2220e787076225" + "reference": "46023de9a91eec7dfb06cc56cb4e260017298517" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/558a3a0d28b4cb7e4a593a4fbd2220e787076225", - "reference": "558a3a0d28b4cb7e4a593a4fbd2220e787076225", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/46023de9a91eec7dfb06cc56cb4e260017298517", + "reference": "46023de9a91eec7dfb06cc56cb4e260017298517", "shasum": "" }, "require": { @@ -1110,7 +1118,7 @@ "phpunit/php-text-template": "~1.2", "phpunit/php-timer": "^1.0.6", "phpunit/phpunit-mock-objects": "~2.3", - "sebastian/comparator": "~1.1", + "sebastian/comparator": "~1.2.2", "sebastian/diff": "~1.2", "sebastian/environment": "~1.3", "sebastian/exporter": "~1.2", @@ -1153,7 +1161,7 @@ "testing", "xunit" ], - "time": "2016-11-14 06:25:28" + "time": "2017-06-21T08:07:12+00:00" }, { "name": "phpunit/phpunit-mock-objects", @@ -1209,32 +1217,85 @@ "mock", "xunit" ], - "time": "2015-10-02 06:51:40" + "time": "2015-10-02T06:51:40+00:00" + }, + { + "name": "psr/http-message", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-message.git", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP messages", + "homepage": "https://github.com/php-fig/http-message", + "keywords": [ + "http", + "http-message", + "psr", + "psr-7", + "request", + "response" + ], + "time": "2016-08-06T14:39:51+00:00" }, { "name": "satooshi/php-coveralls", - "version": "v1.0.1", + "version": "dev-master", "source": { "type": "git", - "url": "https://github.com/satooshi/php-coveralls.git", - "reference": "da51d304fe8622bf9a6da39a8446e7afd432115c" + "url": "https://github.com/php-coveralls/php-coveralls.git", + "reference": "c9d3fe2327c8539f1105dc19954673ba993e4ad9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/satooshi/php-coveralls/zipball/da51d304fe8622bf9a6da39a8446e7afd432115c", - "reference": "da51d304fe8622bf9a6da39a8446e7afd432115c", + "url": "https://api.github.com/repos/php-coveralls/php-coveralls/zipball/c9d3fe2327c8539f1105dc19954673ba993e4ad9", + "reference": "c9d3fe2327c8539f1105dc19954673ba993e4ad9", "shasum": "" }, "require": { "ext-json": "*", "ext-simplexml": "*", - "guzzle/guzzle": "^2.8|^3.0", - "php": ">=5.3.3", + "guzzlehttp/guzzle": "^6.0", + "php": "^5.5 || ^7.0", "psr/log": "^1.0", - "symfony/config": "^2.1|^3.0", - "symfony/console": "^2.1|^3.0", - "symfony/stopwatch": "^2.0|^3.0", - "symfony/yaml": "^2.0|^3.0" + "symfony/config": "^2.1 || ^3.0 || ^4.0", + "symfony/console": "^2.1 || ^3.0 || ^4.0", + "symfony/stopwatch": "^2.0 || ^3.0 || ^4.0", + "symfony/yaml": "^2.0 || ^3.0 || ^4.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.4.3 || ^6.0" }, "suggest": { "symfony/http-kernel": "Allows Symfony integration" @@ -1243,9 +1304,14 @@ "bin/coveralls" ], "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, "autoload": { "psr-4": { - "Satooshi\\": "src/Satooshi/" + "PhpCoveralls\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -1256,37 +1322,54 @@ { "name": "Kitamura Satoshi", "email": "with.no.parachute@gmail.com", - "homepage": "https://www.facebook.com/satooshi.jp" + "homepage": "https://www.facebook.com/satooshi.jp", + "role": "Original creator" + }, + { + "name": "Takashi Matsuo", + "email": "tmatsuo@google.com" + }, + { + "name": "Google Inc" + }, + { + "name": "Dariusz Ruminski", + "email": "dariusz.ruminski@gmail.com", + "homepage": "https://github.com/keradus" + }, + { + "name": "Contributors", + "homepage": "https://github.com/php-coveralls/php-coveralls/graphs/contributors" } ], "description": "PHP client library for Coveralls API", - "homepage": "https://github.com/satooshi/php-coveralls", + "homepage": "https://github.com/php-coveralls/php-coveralls", "keywords": [ "ci", "coverage", "github", "test" ], - "time": "2016-01-20 17:35:46" + "time": "2017-10-14T23:16:28+00:00" }, { "name": "sebastian/comparator", - "version": "1.2.1", + "version": "1.2.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "ce2bda23a56456f19e35d98241446b581f648c14" + "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/ce2bda23a56456f19e35d98241446b581f648c14", - "reference": "ce2bda23a56456f19e35d98241446b581f648c14", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2b7424b55f5047b47ac6e5ccb20b2aea4011d9be", + "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be", "shasum": "" }, "require": { "php": ">=5.3.3", "sebastian/diff": "~1.2", - "sebastian/exporter": "~1.2" + "sebastian/exporter": "~1.2 || ~2.0" }, "require-dev": { "phpunit/phpunit": "~4.4" @@ -1331,27 +1414,27 @@ "compare", "equality" ], - "time": "2016-11-17 14:39:37" + "time": "2017-01-29T09:50:25+00:00" }, { "name": "sebastian/diff", - "version": "1.4.1", + "version": "1.4.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "13edfd8706462032c2f52b4b862974dd46b71c9e" + "reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/13edfd8706462032c2f52b4b862974dd46b71c9e", - "reference": "13edfd8706462032c2f52b4b862974dd46b71c9e", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/7f066a26a962dbe58ddea9f72a4e82874a3975a4", + "reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": "^5.3.3 || ^7.0" }, "require-dev": { - "phpunit/phpunit": "~4.8" + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" }, "type": "library", "extra": { @@ -1383,7 +1466,7 @@ "keywords": [ "diff" ], - "time": "2015-12-08 07:14:41" + "time": "2017-05-22T07:24:03+00:00" }, { "name": "sebastian/environment", @@ -1433,7 +1516,7 @@ "environment", "hhvm" ], - "time": "2016-08-18 05:49:44" + "time": "2016-08-18T05:49:44+00:00" }, { "name": "sebastian/exporter", @@ -1500,7 +1583,7 @@ "export", "exporter" ], - "time": "2016-06-17 09:04:28" + "time": "2016-06-17T09:04:28+00:00" }, { "name": "sebastian/global-state", @@ -1551,20 +1634,20 @@ "keywords": [ "global state" ], - "time": "2015-10-12 03:26:01" + "time": "2015-10-12T03:26:01+00:00" }, { "name": "sebastian/recursion-context", - "version": "1.0.4", + "version": "1.0.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "938df7a6478e72795e5f8266cff24d06e3136f2e" + "reference": "b19cc3298482a335a95f3016d2f8a6950f0fbcd7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/938df7a6478e72795e5f8266cff24d06e3136f2e", - "reference": "938df7a6478e72795e5f8266cff24d06e3136f2e", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/b19cc3298482a335a95f3016d2f8a6950f0fbcd7", + "reference": "b19cc3298482a335a95f3016d2f8a6950f0fbcd7", "shasum": "" }, "require": { @@ -1604,7 +1687,7 @@ ], "description": "Provides functionality to recursively process PHP variables", "homepage": "http://www.github.com/sebastianbergmann/recursion-context", - "time": "2016-11-15 06:55:36" + "time": "2016-10-03T07:41:43+00:00" }, { "name": "sebastian/version", @@ -1639,20 +1722,20 @@ ], "description": "Library that helps with managing the version number of Git-hosted PHP projects", "homepage": "https://github.com/sebastianbergmann/version", - "time": "2015-06-21 13:59:46" + "time": "2015-06-21T13:59:46+00:00" }, { "name": "squizlabs/php_codesniffer", - "version": "2.7.0", + "version": "2.9.1", "source": { "type": "git", "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", - "reference": "571e27b6348e5b3a637b2abc82ac0d01e6d7bbed" + "reference": "dcbed1074f8244661eecddfc2a675430d8d33f62" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/571e27b6348e5b3a637b2abc82ac0d01e6d7bbed", - "reference": "571e27b6348e5b3a637b2abc82ac0d01e6d7bbed", + "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/dcbed1074f8244661eecddfc2a675430d8d33f62", + "reference": "dcbed1074f8244661eecddfc2a675430d8d33f62", "shasum": "" }, "require": { @@ -1717,33 +1800,42 @@ "phpcs", "standards" ], - "time": "2016-09-01 23:53:02" + "time": "2017-05-22T02:43:20+00:00" }, { "name": "symfony/config", - "version": "v3.1.6", + "version": "v3.3.13", "source": { "type": "git", "url": "https://github.com/symfony/config.git", - "reference": "949e7e846743a7f9e46dc50eb639d5fde1f53341" + "reference": "8d2649077dc54dfbaf521d31f217383d82303c5f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/949e7e846743a7f9e46dc50eb639d5fde1f53341", - "reference": "949e7e846743a7f9e46dc50eb639d5fde1f53341", + "url": "https://api.github.com/repos/symfony/config/zipball/8d2649077dc54dfbaf521d31f217383d82303c5f", + "reference": "8d2649077dc54dfbaf521d31f217383d82303c5f", "shasum": "" }, "require": { - "php": ">=5.5.9", + "php": "^5.5.9|>=7.0.8", "symfony/filesystem": "~2.8|~3.0" }, + "conflict": { + "symfony/dependency-injection": "<3.3", + "symfony/finder": "<3.3" + }, + "require-dev": { + "symfony/dependency-injection": "~3.3", + "symfony/finder": "~3.3", + "symfony/yaml": "~3.0" + }, "suggest": { "symfony/yaml": "To use the yaml reference dumper" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "3.3-dev" } }, "autoload": { @@ -1770,29 +1862,29 @@ ], "description": "Symfony Config Component", "homepage": "https://symfony.com", - "time": "2016-09-25 08:27:07" + "time": "2017-11-07T14:16:22+00:00" }, { "name": "symfony/filesystem", - "version": "v3.1.6", + "version": "v3.3.13", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "0565b61bf098cb4dc09f4f103f033138ae4f42c6" + "reference": "77db266766b54db3ee982fe51868328b887ce15c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/0565b61bf098cb4dc09f4f103f033138ae4f42c6", - "reference": "0565b61bf098cb4dc09f4f103f033138ae4f42c6", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/77db266766b54db3ee982fe51868328b887ce15c", + "reference": "77db266766b54db3ee982fe51868328b887ce15c", "shasum": "" }, "require": { - "php": ">=5.5.9" + "php": "^5.5.9|>=7.0.8" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "3.3-dev" } }, "autoload": { @@ -1819,29 +1911,29 @@ ], "description": "Symfony Filesystem Component", "homepage": "https://symfony.com", - "time": "2016-10-18 04:30:12" + "time": "2017-11-07T14:12:55+00:00" }, { "name": "symfony/stopwatch", - "version": "v3.1.6", + "version": "v3.3.13", "source": { "type": "git", "url": "https://github.com/symfony/stopwatch.git", - "reference": "bb42806b12c5f89db4ebf64af6741afe6d8457e1" + "reference": "1e93c3139ef6c799831fe03efd0fb1c7aecb3365" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/bb42806b12c5f89db4ebf64af6741afe6d8457e1", - "reference": "bb42806b12c5f89db4ebf64af6741afe6d8457e1", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/1e93c3139ef6c799831fe03efd0fb1c7aecb3365", + "reference": "1e93c3139ef6c799831fe03efd0fb1c7aecb3365", "shasum": "" }, "require": { - "php": ">=5.5.9" + "php": "^5.5.9|>=7.0.8" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "3.3-dev" } }, "autoload": { @@ -1868,29 +1960,35 @@ ], "description": "Symfony Stopwatch Component", "homepage": "https://symfony.com", - "time": "2016-06-29 05:41:56" + "time": "2017-11-10T19:02:53+00:00" }, { "name": "symfony/yaml", - "version": "v3.1.6", + "version": "v3.3.13", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "7ff51b06c6c3d5cc6686df69004a42c69df09e27" + "reference": "0938408c4faa518d95230deabb5f595bf0de31b9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/7ff51b06c6c3d5cc6686df69004a42c69df09e27", - "reference": "7ff51b06c6c3d5cc6686df69004a42c69df09e27", + "url": "https://api.github.com/repos/symfony/yaml/zipball/0938408c4faa518d95230deabb5f595bf0de31b9", + "reference": "0938408c4faa518d95230deabb5f595bf0de31b9", "shasum": "" }, "require": { - "php": ">=5.5.9" + "php": "^5.5.9|>=7.0.8" + }, + "require-dev": { + "symfony/console": "~2.8|~3.0" + }, + "suggest": { + "symfony/console": "For validating YAML files using the lint command" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "3.3-dev" } }, "autoload": { @@ -1917,16 +2015,71 @@ ], "description": "Symfony Yaml Component", "homepage": "https://symfony.com", - "time": "2016-10-24 18:41:13" + "time": "2017-11-10T18:26:04+00:00" + }, + { + "name": "webmozart/assert", + "version": "1.2.0", + "source": { + "type": "git", + "url": "https://github.com/webmozart/assert.git", + "reference": "2db61e59ff05fe5126d152bd0655c9ea113e550f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozart/assert/zipball/2db61e59ff05fe5126d152bd0655c9ea113e550f", + "reference": "2db61e59ff05fe5126d152bd0655c9ea113e550f", + "shasum": "" + }, + "require": { + "php": "^5.3.3 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.6", + "sebastian/version": "^1.0.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3-dev" + } + }, + "autoload": { + "psr-4": { + "Webmozart\\Assert\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Assertions to validate method input/output with nice error messages.", + "keywords": [ + "assert", + "check", + "validate" + ], + "time": "2016-11-23T20:04:58+00:00" } ], "aliases": [], "minimum-stability": "stable", - "stability-flags": [], + "stability-flags": { + "satooshi/php-coveralls": 20 + }, "prefer-stable": false, "prefer-lowest": false, "platform": { "php": ">=5.4.0" }, - "platform-dev": [] + "platform-dev": [], + "platform-overrides": { + "php": "5.6" + } } diff --git a/lib/composer/vendor/consolidation/annotated-command/infection.json.dist b/lib/composer/vendor/consolidation/annotated-command/infection.json.dist new file mode 100644 index 000000000..b883a216b --- /dev/null +++ b/lib/composer/vendor/consolidation/annotated-command/infection.json.dist @@ -0,0 +1,11 @@ +{ + "timeout": 10, + "source": { + "directories": [ + "src" + ] + }, + "logs": { + "text": "infection-log.txt" + } +} \ No newline at end of file diff --git a/lib/composer/vendor/consolidation/annotated-command/src/AnnotatedCommand.php b/lib/composer/vendor/consolidation/annotated-command/src/AnnotatedCommand.php index 8db1e73e0..41be53a96 100644 --- a/lib/composer/vendor/consolidation/annotated-command/src/AnnotatedCommand.php +++ b/lib/composer/vendor/consolidation/annotated-command/src/AnnotatedCommand.php @@ -3,8 +3,7 @@ use Consolidation\AnnotatedCommand\Hooks\HookManager; use Consolidation\AnnotatedCommand\Parser\CommandInfo; -use Consolidation\OutputFormatters\FormatterManager; -use Consolidation\OutputFormatters\Options\FormatterOptions; +use Consolidation\AnnotatedCommand\Help\HelpDocumentAlter; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputInterface; @@ -26,11 +25,13 @@ * * @package Consolidation\AnnotatedCommand */ -class AnnotatedCommand extends Command +class AnnotatedCommand extends Command implements HelpDocumentAlter { protected $commandCallback; protected $commandProcessor; protected $annotationData; + protected $examples = []; + protected $topics = []; protected $usesInputInterface; protected $usesOutputInterface; protected $returnType; @@ -46,7 +47,7 @@ public function __construct($name = null) // AnnotatedCommand. Alternately, we break out a new subclass. // The command factory instantiates the subclass. if (get_class($this) != 'Consolidation\AnnotatedCommand\AnnotatedCommand') { - $commandInfo = new CommandInfo($this, 'execute'); + $commandInfo = CommandInfo::create($this, 'execute'); if (!isset($name)) { $name = $commandInfo->getName(); } @@ -106,21 +107,114 @@ public function setAnnotationData($annotationData) return $this; } + public function getTopics() + { + return $this->topics; + } + + public function setTopics($topics) + { + $this->topics = $topics; + return $this; + } + public function setCommandInfo($commandInfo) { $this->setDescription($commandInfo->getDescription()); $this->setHelp($commandInfo->getHelp()); $this->setAliases($commandInfo->getAliases()); $this->setAnnotationData($commandInfo->getAnnotations()); + $this->setTopics($commandInfo->getTopics()); foreach ($commandInfo->getExampleUsages() as $usage => $description) { - // Symfony Console does not support attaching a description to a usage - $this->addUsage($usage); + $this->addUsageOrExample($usage, $description); } $this->setCommandArguments($commandInfo); $this->setReturnType($commandInfo->getReturnType()); + // Hidden commands available since Symfony 3.2 + // http://symfony.com/doc/current/console/hide_commands.html + if (method_exists($this, 'setHidden')) { + $this->setHidden($commandInfo->getHidden()); + } return $this; } + public function getExampleUsages() + { + return $this->examples; + } + + protected function addUsageOrExample($usage, $description) + { + $this->addUsage($usage); + if (!empty($description)) { + $this->examples[$usage] = $description; + } + } + + public function helpAlter(\DomDocument $originalDom) + { + $dom = new \DOMDocument('1.0', 'UTF-8'); + $dom->appendChild($commandXML = $dom->createElement('command')); + $commandXML->setAttribute('id', $this->getName()); + $commandXML->setAttribute('name', $this->getName()); + + // Get the original element and its top-level elements. + $originalCommandXML = $this->getSingleElementByTagName($dom, $originalDom, 'command'); + $originalUsagesXML = $this->getSingleElementByTagName($dom, $originalCommandXML, 'usages'); + $originalDescriptionXML = $this->getSingleElementByTagName($dom, $originalCommandXML, 'description'); + $originalHelpXML = $this->getSingleElementByTagName($dom, $originalCommandXML, 'help'); + $originalArgumentsXML = $this->getSingleElementByTagName($dom, $originalCommandXML, 'arguments'); + $originalOptionsXML = $this->getSingleElementByTagName($dom, $originalCommandXML, 'options'); + + // Keep only the first of the elements + $newUsagesXML = $dom->createElement('usages'); + $firstUsageXML = $this->getSingleElementByTagName($dom, $originalUsagesXML, 'usage'); + $newUsagesXML->appendChild($firstUsageXML); + + // Create our own elements + $newExamplesXML = $dom->createElement('examples'); + foreach ($this->examples as $usage => $description) { + $newExamplesXML->appendChild($exampleXML = $dom->createElement('example')); + $exampleXML->appendChild($usageXML = $dom->createElement('usage', $usage)); + $exampleXML->appendChild($descriptionXML = $dom->createElement('description', $description)); + } + + // Create our own elements + $newAliasesXML = $dom->createElement('aliases'); + foreach ($this->getAliases() as $alias) { + $newAliasesXML->appendChild($dom->createElement('alias', $alias)); + } + + // Create our own elements + $newTopicsXML = $dom->createElement('topics'); + foreach ($this->getTopics() as $topic) { + $newTopicsXML->appendChild($topicXML = $dom->createElement('topic', $topic)); + } + + // Place the different elements into the element in the desired order + $commandXML->appendChild($newUsagesXML); + $commandXML->appendChild($newExamplesXML); + $commandXML->appendChild($originalDescriptionXML); + $commandXML->appendChild($originalArgumentsXML); + $commandXML->appendChild($originalOptionsXML); + $commandXML->appendChild($originalHelpXML); + $commandXML->appendChild($newAliasesXML); + $commandXML->appendChild($newTopicsXML); + + return $dom; + } + + protected function getSingleElementByTagName($dom, $parent, $tagName) + { + // There should always be exactly one '' element. + $elements = $parent->getElementsByTagName($tagName); + $result = $elements->item(0); + + $result = $dom->importNode($result, true); + + return $result; + } + protected function setCommandArguments($commandInfo) { $this->setUsesInputInterface($commandInfo); @@ -134,8 +228,11 @@ protected function setCommandArguments($commandInfo) */ protected function checkUsesInputInterface($params) { + /** @var \ReflectionParameter $firstParam */ $firstParam = reset($params); - return $firstParam instanceof InputInterface; + return $firstParam && $firstParam->getClass() && $firstParam->getClass()->implementsInterface( + '\\Symfony\\Component\\Console\\Input\\InputInterface' + ); } /** @@ -160,7 +257,11 @@ protected function setUsesOutputInterface($commandInfo) $index = $this->checkUsesInputInterface($params) ? 1 : 0; $this->usesOutputInterface = (count($params) > $index) && - ($params[$index] instanceof OutputInterface); + $params[$index]->getClass() && + $params[$index]->getClass()->implementsInterface( + '\\Symfony\\Component\\Console\\Output\\OutputInterface' + ) + ; return $this; } @@ -264,7 +365,7 @@ public function optionsHookForHookAnnotations($commandInfoList) $this->addOptions($inputOptions); foreach ($commandInfo->getExampleUsages() as $usage => $description) { if (!in_array($usage, $this->getUsages())) { - $this->addUsage($usage); + $this->addUsageOrExample($usage, $description); } } } @@ -337,10 +438,15 @@ protected function createCommandData(InputInterface $input, OutputInterface $out ); $commandData->setUseIOInterfaces( - $this->usesOutputInterface, - $this->usesInputInterface + $this->usesInputInterface, + $this->usesOutputInterface ); + // Allow the commandData to cache the list of options with + // special default values ('null' and 'true'), as these will + // need special handling. @see CommandData::options(). + $commandData->cacheSpecialDefaults($this->getDefinition()); + return $commandData; } } diff --git a/lib/composer/vendor/consolidation/annotated-command/src/AnnotatedCommandFactory.php b/lib/composer/vendor/consolidation/annotated-command/src/AnnotatedCommandFactory.php index 5765167f0..abdd97276 100644 --- a/lib/composer/vendor/consolidation/annotated-command/src/AnnotatedCommandFactory.php +++ b/lib/composer/vendor/consolidation/annotated-command/src/AnnotatedCommandFactory.php @@ -1,9 +1,14 @@ dataStore = new NullCache(); $this->commandProcessor = new CommandProcessor(new HookManager()); $this->addAutomaticOptionProvider($this); } @@ -92,6 +100,17 @@ public function hookManager() public function addListener(CommandCreationListenerInterface $listener) { $this->listeners[] = $listener; + return $this; + } + + /** + * Add a listener that's just a simple 'callable'. + * @param callable $listener + */ + public function addListernerCallback(callable $listener) + { + $this->addListener(new CommandCreationListener($listener)); + return $this; } /** @@ -131,7 +150,95 @@ public function createCommandsFromClass($commandFileInstance, $includeAllPublicM return $this->createCommandsFromClassInfo($commandInfoList, $commandFileInstance, $includeAllPublicMethods); } - public function getCommandInfoListFromClass($classNameOrInstance) + public function getCommandInfoListFromClass($commandFileInstance) + { + $cachedCommandInfoList = $this->getCommandInfoListFromCache($commandFileInstance); + $commandInfoList = $this->createCommandInfoListFromClass($commandFileInstance, $cachedCommandInfoList); + if (!empty($commandInfoList)) { + $cachedCommandInfoList = array_merge($commandInfoList, $cachedCommandInfoList); + $this->storeCommandInfoListInCache($commandFileInstance, $cachedCommandInfoList); + } + return $cachedCommandInfoList; + } + + protected function storeCommandInfoListInCache($commandFileInstance, $commandInfoList) + { + if (!$this->hasDataStore()) { + return; + } + $cache_data = []; + $serializer = new CommandInfoSerializer(); + foreach ($commandInfoList as $i => $commandInfo) { + $cache_data[$i] = $serializer->serialize($commandInfo); + } + $className = get_class($commandFileInstance); + $this->getDataStore()->set($className, $cache_data); + } + + /** + * Get the command info list from the cache + * + * @param mixed $commandFileInstance + * @return array + */ + protected function getCommandInfoListFromCache($commandFileInstance) + { + $commandInfoList = []; + $className = get_class($commandFileInstance); + if (!$this->getDataStore()->has($className)) { + return []; + } + $deserializer = new CommandInfoDeserializer(); + + $cache_data = $this->getDataStore()->get($className); + foreach ($cache_data as $i => $data) { + if (CommandInfoDeserializer::isValidSerializedData((array)$data)) { + $commandInfoList[$i] = $deserializer->deserialize((array)$data); + } + } + return $commandInfoList; + } + + /** + * Check to see if this factory has a cache datastore. + * @return boolean + */ + public function hasDataStore() + { + return !($this->dataStore instanceof NullCache); + } + + /** + * Set a cache datastore for this factory. Any object with 'set' and + * 'get' methods is acceptable. The key is the classname being cached, + * and the value is a nested associative array of strings. + * + * TODO: Typehint this to SimpleCacheInterface + * + * This is not done currently to allow clients to use a generic cache + * store that does not itself depend on the annotated-command library. + * + * @param Mixed $dataStore + * @return type + */ + public function setDataStore($dataStore) + { + if (!($dataStore instanceof SimpleCacheInterface)) { + $dataStore = new CacheWrapper($dataStore); + } + $this->dataStore = $dataStore; + return $this; + } + + /** + * Get the data store attached to this factory. + */ + public function getDataStore() + { + return $this->dataStore; + } + + protected function createCommandInfoListFromClass($classNameOrInstance, $cachedCommandInfoList) { $commandInfoList = []; @@ -139,13 +246,20 @@ public function getCommandInfoListFromClass($classNameOrInstance) // can never be commands. $commandMethodNames = array_filter( get_class_methods($classNameOrInstance) ?: [], - function ($m) { - return !preg_match('#^_#', $m); + function ($m) use ($classNameOrInstance) { + $reflectionMethod = new \ReflectionMethod($classNameOrInstance, $m); + return !$reflectionMethod->isStatic() && !preg_match('#^_#', $m); } ); foreach ($commandMethodNames as $commandMethodName) { - $commandInfoList[] = new CommandInfo($classNameOrInstance, $commandMethodName); + if (!array_key_exists($commandMethodName, $cachedCommandInfoList)) { + $commandInfo = CommandInfo::create($classNameOrInstance, $commandMethodName); + if (!static::isCommandOrHookMethod($commandInfo, $this->getIncludeAllPublicMethods())) { + $commandInfo->invalidate(); + } + $commandInfoList[$commandMethodName] = $commandInfo; + } } return $commandInfoList; @@ -153,7 +267,7 @@ function ($m) { public function createCommandInfo($classNameOrInstance, $commandMethodName) { - return new CommandInfo($classNameOrInstance, $commandMethodName); + return CommandInfo::create($classNameOrInstance, $commandMethodName); } public function createCommandsFromClassInfo($commandInfoList, $commandFileInstance, $includeAllPublicMethods = null) @@ -173,28 +287,45 @@ function ($commandInfo) use ($includeAllPublicMethods) { public function createSelectedCommandsFromClassInfo($commandInfoList, $commandFileInstance, callable $commandSelector) { - $commandList = []; + $commandInfoList = $this->filterCommandInfoList($commandInfoList, $commandSelector); + return array_map( + function ($commandInfo) use ($commandFileInstance) { + return $this->createCommand($commandInfo, $commandFileInstance); + }, + $commandInfoList + ); + } - foreach ($commandInfoList as $commandInfo) { - if ($commandSelector($commandInfo)) { - $command = $this->createCommand($commandInfo, $commandFileInstance); - $commandList[] = $command; - } - } + protected function filterCommandInfoList($commandInfoList, callable $commandSelector) + { + return array_filter($commandInfoList, $commandSelector); + } + + public static function isCommandOrHookMethod($commandInfo, $includeAllPublicMethods) + { + return static::isHookMethod($commandInfo) || static::isCommandMethod($commandInfo, $includeAllPublicMethods); + } - return $commandList; + public static function isHookMethod($commandInfo) + { + return $commandInfo->hasAnnotation('hook'); } public static function isCommandMethod($commandInfo, $includeAllPublicMethods) { // Ignore everything labeled @hook - if ($commandInfo->hasAnnotation('hook')) { + if (static::isHookMethod($commandInfo)) { return false; } // Include everything labeled @command if ($commandInfo->hasAnnotation('command')) { return true; } + // Skip anything that has a missing or invalid name. + $commandName = $commandInfo->getName(); + if (empty($commandName) || preg_match('#[^a-zA-Z0-9:_-]#', $commandName)) { + return false; + } // Skip anything named like an accessor ('get' or 'set') if (preg_match('#^(get[A-Z]|set[A-Z])#', $commandInfo->getMethodName())) { return false; @@ -207,7 +338,7 @@ public static function isCommandMethod($commandInfo, $includeAllPublicMethods) public function registerCommandHooksFromClassInfo($commandInfoList, $commandFileInstance) { foreach ($commandInfoList as $commandInfo) { - if ($commandInfo->hasAnnotation('hook')) { + if (static::isHookMethod($commandInfo)) { $this->registerCommandHook($commandInfo, $commandFileInstance); } } @@ -236,7 +367,7 @@ public function registerCommandHooksFromClassInfo($commandInfoList, $commandFile public function registerCommandHook(CommandInfo $commandInfo, $commandFileInstance) { // Ignore if the command info has no @hook - if (!$commandInfo->hasAnnotation('hook')) { + if (!static::isHookMethod($commandInfo)) { return; } $hookData = $commandInfo->getAnnotation('hook'); diff --git a/lib/composer/vendor/consolidation/annotated-command/src/AnnotationData.php b/lib/composer/vendor/consolidation/annotated-command/src/AnnotationData.php index c5728ecd2..0bcc8b29b 100644 --- a/lib/composer/vendor/consolidation/annotated-command/src/AnnotationData.php +++ b/lib/composer/vendor/consolidation/annotated-command/src/AnnotationData.php @@ -1,11 +1,18 @@ has($key) ? CsvUtils::toString($this[$key]) : $default; + } + + public function getList($key, $default = []) { - return $this->has($key) ? $this[$key] : $default; + return $this->has($key) ? CsvUtils::toList($this[$key]) : $default; } public function has($key) diff --git a/lib/composer/vendor/consolidation/annotated-command/src/Cache/CacheWrapper.php b/lib/composer/vendor/consolidation/annotated-command/src/Cache/CacheWrapper.php new file mode 100644 index 000000000..ed5a5eeed --- /dev/null +++ b/lib/composer/vendor/consolidation/annotated-command/src/Cache/CacheWrapper.php @@ -0,0 +1,49 @@ +dataStore = $dataStore; + } + + /** + * Test for an entry from the cache + * @param string $key + * @return boolean + */ + public function has($key) + { + if (method_exists($this->dataStore, 'has')) { + return $this->dataStore->has($key); + } + $test = $this->dataStore->get($key); + return !empty($test); + } + + /** + * Get an entry from the cache + * @param string $key + * @return array + */ + public function get($key) + { + return (array) $this->dataStore->get($key); + } + + /** + * Store an entry in the cache + * @param string $key + * @param array $data + */ + public function set($key, $data) + { + $this->dataStore->set($key, $data); + } +} diff --git a/lib/composer/vendor/consolidation/annotated-command/src/Cache/NullCache.php b/lib/composer/vendor/consolidation/annotated-command/src/Cache/NullCache.php new file mode 100644 index 000000000..22906b299 --- /dev/null +++ b/lib/composer/vendor/consolidation/annotated-command/src/Cache/NullCache.php @@ -0,0 +1,37 @@ +listener = $listener; + } + + public function notifyCommandFileAdded($command) + { + call_user_func($this->listener, $command); + } +} diff --git a/lib/composer/vendor/consolidation/annotated-command/src/CommandData.php b/lib/composer/vendor/consolidation/annotated-command/src/CommandData.php index d1e61efc6..b5f824304 100644 --- a/lib/composer/vendor/consolidation/annotated-command/src/CommandData.php +++ b/lib/composer/vendor/consolidation/annotated-command/src/CommandData.php @@ -1,6 +1,7 @@ input->getOptions(); + // We cannot tell the difference between '--foo' (an option without + // a value) and the absence of '--foo' when the option has an optional + // value, and the current vallue of the option is 'null' using only + // the public methods of InputInterface. We'll try to figure out + // which is which by other means here. + $options = $this->getAdjustedOptions(); + + // Make two conversions here: + // --foo=0 wil convert $value from '0' to 'false' for binary options. + // --foo with $value of 'true' will be forced to 'false' if --no-foo exists. + foreach ($options as $option => $value) { + if ($this->shouldConvertOptionToFalse($options, $option, $value)) { + $options[$option] = false; + } + } + + return $options; + } + + /** + * Use 'hasParameterOption()' to attempt to disambiguate option states. + */ + protected function getAdjustedOptions() + { + $options = $this->input->getOptions(); + + // If Input isn't an ArgvInput, then return the options as-is. + if (!$this->input instanceof ArgvInput) { + return $options; + } + + // If we have an ArgvInput, then we can determine if options + // are missing from the command line. If the option value is + // missing from $input, then we will keep the value `null`. + // If it is present, but has no explicit value, then change it its + // value to `true`. + foreach ($options as $option => $value) { + if (($value === null) && ($this->input->hasParameterOption("--$option"))) { + $options[$option] = true; + } + } + + return $options; + } + + protected function shouldConvertOptionToFalse($options, $option, $value) + { + // If the value is 'true' (e.g. the option is '--foo'), then convert + // it to false if there is also an option '--no-foo'. n.b. if the + // commandline has '--foo=bar' then $value will not be 'true', and + // --no-foo will be ignored. + if ($value === true) { + // Check if the --no-* option exists. Note that none of the other + // alteration apply in the $value == true case, so we can exit early here. + $negation_key = 'no-' . $option; + return array_key_exists($negation_key, $options) && $options[$negation_key]; + } + + // If the option is '--foo=0', convert the '0' to 'false' when appropriate. + if ($value !== '0') { + return false; + } + + // The '--foo=0' convertion is only applicable when the default value + // is not in the special defaults list. i.e. you get a literal '0' + // when your default is a string. + return in_array($option, $this->specialDefaults); + } + + public function cacheSpecialDefaults($definition) + { + foreach ($definition->getOptions() as $option => $inputOption) { + $defaultValue = $inputOption->getDefault(); + if (($defaultValue === null) || ($defaultValue === true)) { + $this->specialDefaults[] = $option; + } + } } public function getArgsWithoutAppName() @@ -93,14 +172,14 @@ public function getArgsWithoutAppName() // to the beginning. array_shift($args); - if ($this->usesInputInterface) { - array_unshift($args, $this->input()); - } - if ($this->usesOutputInterface) { array_unshift($args, $this->output()); } + if ($this->usesInputInterface) { + array_unshift($args, $this->input()); + } + return $args; } diff --git a/lib/composer/vendor/consolidation/annotated-command/src/CommandFileDiscovery.php b/lib/composer/vendor/consolidation/annotated-command/src/CommandFileDiscovery.php index 7c47528d5..06489fb08 100644 --- a/lib/composer/vendor/consolidation/annotated-command/src/CommandFileDiscovery.php +++ b/lib/composer/vendor/consolidation/annotated-command/src/CommandFileDiscovery.php @@ -40,6 +40,8 @@ class CommandFileDiscovery protected $includeFilesAtBase = true; /** @var integer */ protected $searchDepth = 2; + /** @var bool */ + protected $followLinks = false; public function __construct() { @@ -101,6 +103,16 @@ public function setSearchDepth($searchDepth) return $this; } + /** + * Specify that the discovery object should follow symlinks. By + * default, symlinks are not followed. + */ + public function followLinks($followLinks = true) + { + $this->followLinks = $followLinks; + return $this; + } + /** * Set the list of search locations to examine in each directory where * command files may be found. This replaces whatever was there before. @@ -325,6 +337,10 @@ protected function createFinder($directory, $depth) $finder->exclude($item); } + if ($this->followLinks) { + $finder->followLinks(); + } + return $finder; } @@ -357,13 +373,14 @@ function ($item) { */ protected function joinPaths(array $pathParts) { - return $this->joinParts( + $path = $this->joinParts( '/', $pathParts, function ($item) { return !empty($item); } ); + return str_replace(DIRECTORY_SEPARATOR, '/', $path); } /** @@ -375,6 +392,12 @@ function ($item) { */ protected function joinParts($delimiter, $parts, $filterFunction) { + $parts = array_map( + function ($item) use ($delimiter) { + return rtrim($item, $delimiter); + }, + $parts + ); return implode( $delimiter, array_filter($parts, $filterFunction) diff --git a/lib/composer/vendor/consolidation/annotated-command/src/CommandProcessor.php b/lib/composer/vendor/consolidation/annotated-command/src/CommandProcessor.php index a68ab1dbe..ab4ce45d1 100644 --- a/lib/composer/vendor/consolidation/annotated-command/src/CommandProcessor.php +++ b/lib/composer/vendor/consolidation/annotated-command/src/CommandProcessor.php @@ -1,7 +1,9 @@ passExceptions = $passExceptions; + return $this; + } + + public function commandErrorForException(\Exception $e) + { + if ($this->passExceptions) { + throw $e; + } + return new CommandError($e->getMessage(), $e->getCode()); + } + /** * Return the formatter manager * @return FormatterManager @@ -73,7 +113,8 @@ public function initializeHook( $names, AnnotationData $annotationData ) { - return $this->hookManager()->initializeHook($input, $names, $annotationData); + $initializeDispatcher = new InitializeHookDispatcher($this->hookManager(), $names); + return $initializeDispatcher->initialize($input, $annotationData); } public function optionsHook( @@ -81,7 +122,8 @@ public function optionsHook( $names, AnnotationData $annotationData ) { - $this->hookManager()->optionsHook($command, $names, $annotationData); + $optionsDispatcher = new OptionsHookDispatcher($this->hookManager(), $names); + $optionsDispatcher->getOptions($command, $annotationData); } public function interact( @@ -90,7 +132,8 @@ public function interact( $names, AnnotationData $annotationData ) { - return $this->hookManager()->interact($input, $output, $names, $annotationData); + $interactDispatcher = new InteractHookDispatcher($this->hookManager(), $names); + return $interactDispatcher->interact($input, $output, $annotationData); } public function process( @@ -108,7 +151,7 @@ public function process( ); return $this->handleResults($output, $names, $result, $commandData); } catch (\Exception $e) { - $result = new CommandError($e->getMessage(), $e->getCode()); + $result = $this->commandErrorForException($e); return $this->handleResults($output, $names, $result, $commandData); } } @@ -120,11 +163,20 @@ public function validateRunAndAlter( ) { // Validators return any object to signal a validation error; // if the return an array, it replaces the arguments. - $validated = $this->hookManager()->validateArguments($names, $commandData); + $validateDispatcher = new ValidateHookDispatcher($this->hookManager(), $names); + $validated = $validateDispatcher->validate($commandData); if (is_object($validated)) { return $validated; } + $replaceDispatcher = new ReplaceCommandHookDispatcher($this->hookManager(), $names); + if ($this->logger) { + $replaceDispatcher->setLogger($this->logger); + } + if ($replaceDispatcher->hasReplaceCommandHook()) { + $commandCallback = $replaceDispatcher->getReplacementCommand($commandData); + } + // Run the command, alter the results, and then handle output and status $result = $this->runCommandCallback($commandCallback, $commandData); return $this->processResults($names, $result, $commandData); @@ -132,7 +184,8 @@ public function validateRunAndAlter( public function processResults($names, $result, CommandData $commandData) { - return $this->hookManager()->alterResult($names, $result, $commandData); + $processDispatcher = new ProcessResultHookDispatcher($this->hookManager(), $names); + return $processDispatcher->process($result, $commandData); } /** @@ -140,7 +193,8 @@ public function processResults($names, $result, CommandData $commandData) */ public function handleResults(OutputInterface $output, $names, $result, CommandData $commandData) { - $status = $this->hookManager()->determineStatusCode($names, $result); + $statusCodeDispatcher = new StatusDeterminerHookDispatcher($this->hookManager(), $names); + $status = $statusCodeDispatcher->determineStatusCode($result); // If the result is an integer and no separate status code was provided, then use the result as the status and do no output. if (is_integer($result) && !isset($status)) { return $result; @@ -148,7 +202,8 @@ public function handleResults(OutputInterface $output, $names, $result, CommandD $status = $this->interpretStatusCode($status); // Get the structured output, the output stream and the formatter - $structuredOutput = $this->hookManager()->extractOutput($names, $result); + $extractDispatcher = new ExtracterHookDispatcher($this->hookManager(), $names); + $structuredOutput = $extractDispatcher->extractOutput($result); $output = $this->chooseOutputStream($output, $status); if ($status != 0) { return $this->writeErrorMessage($output, $status, $structuredOutput, $result); @@ -179,7 +234,7 @@ protected function runCommandCallback($commandCallback, CommandData $commandData $args = $commandData->getArgsAndOptions(); $result = call_user_func_array($commandCallback, $args); } catch (\Exception $e) { - $result = new CommandError($e->getMessage(), $e->getCode()); + $result = $this->commandErrorForException($e); } return $result; } diff --git a/lib/composer/vendor/consolidation/annotated-command/src/Events/CustomEventAwareInterface.php b/lib/composer/vendor/consolidation/annotated-command/src/Events/CustomEventAwareInterface.php new file mode 100644 index 000000000..806b55dfc --- /dev/null +++ b/lib/composer/vendor/consolidation/annotated-command/src/Events/CustomEventAwareInterface.php @@ -0,0 +1,20 @@ +hookManager = $hookManager; + } + + /** + * {@inheritdoc} + */ + public function getCustomEventHandlers($eventName) + { + if (!$this->hookManager) { + return []; + } + return $this->hookManager->getHook($eventName, HookManager::ON_EVENT); + } +} diff --git a/lib/composer/vendor/consolidation/annotated-command/src/Help/HelpCommand.php b/lib/composer/vendor/consolidation/annotated-command/src/Help/HelpCommand.php new file mode 100644 index 000000000..d540d2a95 --- /dev/null +++ b/lib/composer/vendor/consolidation/annotated-command/src/Help/HelpCommand.php @@ -0,0 +1,48 @@ +application = $application; + } + + public function getApplication() + { + return $this->application; + } + + /** + * Run the help command + * + * @command my-help + * @return \Consolidation\AnnotatedCommand\Help\HelpDocument + */ + public function help($commandName = 'help') + { + $command = $this->getApplication()->find($commandName); + + $helpDocument = $this->getHelpDocument($command); + return $helpDocument; + } + + /** + * Create a help document. + */ + protected function getHelpDocument($command) + { + return new HelpDocument($command); + } +} diff --git a/lib/composer/vendor/consolidation/annotated-command/src/Help/HelpDocument.php b/lib/composer/vendor/consolidation/annotated-command/src/Help/HelpDocument.php new file mode 100644 index 000000000..67609d65e --- /dev/null +++ b/lib/composer/vendor/consolidation/annotated-command/src/Help/HelpDocument.php @@ -0,0 +1,65 @@ +generateBaseHelpDom($command); + $dom = $this->alterHelpDocument($command, $dom); + + $this->command = $command; + $this->dom = $dom; + } + + /** + * Convert data into a \DomDocument. + * + * @return \DomDocument + */ + public function getDomData() + { + return $this->dom; + } + + /** + * Create the base help DOM prior to alteration by the Command object. + * @param Command $command + * @return \DomDocument + */ + protected function generateBaseHelpDom(Command $command) + { + // Use Symfony to generate xml text. If other formats are + // requested, convert from xml to the desired form. + $descriptor = new XmlDescriptor(); + return $descriptor->getCommandDocument($command); + } + + /** + * Alter the DOM document per the command object + * @param Command $command + * @param \DomDocument $dom + * @return \DomDocument + */ + protected function alterHelpDocument(Command $command, \DomDocument $dom) + { + if ($command instanceof HelpDocumentAlter) { + $dom = $command->helpAlter($dom); + } + return $dom; + } +} diff --git a/lib/composer/vendor/consolidation/annotated-command/src/Help/HelpDocumentAlter.php b/lib/composer/vendor/consolidation/annotated-command/src/Help/HelpDocumentAlter.php new file mode 100644 index 000000000..0d7f49c72 --- /dev/null +++ b/lib/composer/vendor/consolidation/annotated-command/src/Help/HelpDocumentAlter.php @@ -0,0 +1,7 @@ +getHooks($hooks); + foreach ($commandEventHooks as $commandEvent) { + if ($commandEvent instanceof EventDispatcherInterface) { + $commandEvent->dispatch(ConsoleEvents::COMMAND, $event); + } + if (is_callable($commandEvent)) { + $commandEvent($event); + } + } + } +} diff --git a/lib/composer/vendor/consolidation/annotated-command/src/Hooks/Dispatchers/ExtracterHookDispatcher.php b/lib/composer/vendor/consolidation/annotated-command/src/Hooks/Dispatchers/ExtracterHookDispatcher.php new file mode 100644 index 000000000..26bb1d2ed --- /dev/null +++ b/lib/composer/vendor/consolidation/annotated-command/src/Hooks/Dispatchers/ExtracterHookDispatcher.php @@ -0,0 +1,47 @@ +getOutputData(); + } + + $hooks = [ + HookManager::EXTRACT_OUTPUT, + ]; + $extractors = $this->getHooks($hooks); + foreach ($extractors as $extractor) { + $structuredOutput = $this->callExtractor($extractor, $result); + if (isset($structuredOutput)) { + return $structuredOutput; + } + } + + return $result; + } + + protected function callExtractor($extractor, $result) + { + if ($extractor instanceof ExtractOutputInterface) { + return $extractor->extractOutput($result); + } + if (is_callable($extractor)) { + return $extractor($result); + } + } +} diff --git a/lib/composer/vendor/consolidation/annotated-command/src/Hooks/Dispatchers/HookDispatcher.php b/lib/composer/vendor/consolidation/annotated-command/src/Hooks/Dispatchers/HookDispatcher.php new file mode 100644 index 000000000..aa850eabe --- /dev/null +++ b/lib/composer/vendor/consolidation/annotated-command/src/Hooks/Dispatchers/HookDispatcher.php @@ -0,0 +1,27 @@ +hookManager = $hookManager; + $this->names = $names; + } + + public function getHooks($hooks, $annotationData = null) + { + return $this->hookManager->getHooks($this->names, $hooks, $annotationData); + } +} diff --git a/lib/composer/vendor/consolidation/annotated-command/src/Hooks/Dispatchers/InitializeHookDispatcher.php b/lib/composer/vendor/consolidation/annotated-command/src/Hooks/Dispatchers/InitializeHookDispatcher.php new file mode 100644 index 000000000..dd12d500d --- /dev/null +++ b/lib/composer/vendor/consolidation/annotated-command/src/Hooks/Dispatchers/InitializeHookDispatcher.php @@ -0,0 +1,40 @@ +getHooks($hooks, $annotationData); + foreach ($providers as $provider) { + $this->callInitializeHook($provider, $input, $annotationData); + } + } + + protected function callInitializeHook($provider, $input, AnnotationData $annotationData) + { + if ($provider instanceof InitializeHookInterface) { + return $provider->initialize($input, $annotationData); + } + if (is_callable($provider)) { + return $provider($input, $annotationData); + } + } +} diff --git a/lib/composer/vendor/consolidation/annotated-command/src/Hooks/Dispatchers/InteractHookDispatcher.php b/lib/composer/vendor/consolidation/annotated-command/src/Hooks/Dispatchers/InteractHookDispatcher.php new file mode 100644 index 000000000..6de718dde --- /dev/null +++ b/lib/composer/vendor/consolidation/annotated-command/src/Hooks/Dispatchers/InteractHookDispatcher.php @@ -0,0 +1,41 @@ +getHooks($hooks, $annotationData); + foreach ($interactors as $interactor) { + $this->callInteractor($interactor, $input, $output, $annotationData); + } + } + + protected function callInteractor($interactor, $input, $output, AnnotationData $annotationData) + { + if ($interactor instanceof InteractorInterface) { + return $interactor->interact($input, $output, $annotationData); + } + if (is_callable($interactor)) { + return $interactor($input, $output, $annotationData); + } + } +} diff --git a/lib/composer/vendor/consolidation/annotated-command/src/Hooks/Dispatchers/OptionsHookDispatcher.php b/lib/composer/vendor/consolidation/annotated-command/src/Hooks/Dispatchers/OptionsHookDispatcher.php new file mode 100644 index 000000000..59752266a --- /dev/null +++ b/lib/composer/vendor/consolidation/annotated-command/src/Hooks/Dispatchers/OptionsHookDispatcher.php @@ -0,0 +1,44 @@ +getHooks($hooks, $annotationData); + foreach ($optionHooks as $optionHook) { + $this->callOptionHook($optionHook, $command, $annotationData); + } + $commandInfoList = $this->hookManager->getHookOptionsForCommand($command); + if ($command instanceof AnnotatedCommand) { + $command->optionsHookForHookAnnotations($commandInfoList); + } + } + + protected function callOptionHook($optionHook, $command, AnnotationData $annotationData) + { + if ($optionHook instanceof OptionHookInterface) { + return $optionHook->getOptions($command, $annotationData); + } + if (is_callable($optionHook)) { + return $optionHook($command, $annotationData); + } + } +} diff --git a/lib/composer/vendor/consolidation/annotated-command/src/Hooks/Dispatchers/ProcessResultHookDispatcher.php b/lib/composer/vendor/consolidation/annotated-command/src/Hooks/Dispatchers/ProcessResultHookDispatcher.php new file mode 100644 index 000000000..dca2b2301 --- /dev/null +++ b/lib/composer/vendor/consolidation/annotated-command/src/Hooks/Dispatchers/ProcessResultHookDispatcher.php @@ -0,0 +1,53 @@ +getHooks($hooks, $commandData->annotationData()); + foreach ($processors as $processor) { + $result = $this->callProcessor($processor, $result, $commandData); + } + + return $result; + } + + protected function callProcessor($processor, $result, CommandData $commandData) + { + $processed = null; + if ($processor instanceof ProcessResultInterface) { + $processed = $processor->process($result, $commandData); + } + if (is_callable($processor)) { + $processed = $processor($result, $commandData); + } + if (isset($processed)) { + return $processed; + } + return $result; + } +} diff --git a/lib/composer/vendor/consolidation/annotated-command/src/Hooks/Dispatchers/ReplaceCommandHookDispatcher.php b/lib/composer/vendor/consolidation/annotated-command/src/Hooks/Dispatchers/ReplaceCommandHookDispatcher.php new file mode 100644 index 000000000..1687a96a0 --- /dev/null +++ b/lib/composer/vendor/consolidation/annotated-command/src/Hooks/Dispatchers/ReplaceCommandHookDispatcher.php @@ -0,0 +1,66 @@ +getReplaceCommandHooks()); + } + + /** + * @return \callable[] + */ + public function getReplaceCommandHooks() + { + $hooks = [ + HookManager::REPLACE_COMMAND_HOOK, + ]; + $replaceCommandHooks = $this->getHooks($hooks); + + return $replaceCommandHooks; + } + + /** + * @param \Consolidation\AnnotatedCommand\CommandData $commandData + * + * @return callable + */ + public function getReplacementCommand(CommandData $commandData) + { + $replaceCommandHooks = $this->getReplaceCommandHooks(); + + // We only take the first hook implementation of "replace-command" as the replacement. Commands shouldn't have + // more than one replacement. + $replacementCommand = reset($replaceCommandHooks); + + if ($this->logger && count($replaceCommandHooks) > 1) { + $command_name = $commandData->annotationData()->get('command', 'unknown'); + $message = "Multiple implementations of the \"replace - command\" hook exist for the \"$command_name\" command.\n"; + foreach ($replaceCommandHooks as $replaceCommandHook) { + $class = get_class($replaceCommandHook[0]); + $method = $replaceCommandHook[1]; + $hook_name = "$class->$method"; + $message .= " - $hook_name\n"; + } + $this->logger->warning($message); + } + + return $replacementCommand; + } +} diff --git a/lib/composer/vendor/consolidation/annotated-command/src/Hooks/Dispatchers/StatusDeterminerHookDispatcher.php b/lib/composer/vendor/consolidation/annotated-command/src/Hooks/Dispatchers/StatusDeterminerHookDispatcher.php new file mode 100644 index 000000000..911dcb1de --- /dev/null +++ b/lib/composer/vendor/consolidation/annotated-command/src/Hooks/Dispatchers/StatusDeterminerHookDispatcher.php @@ -0,0 +1,51 @@ +getExitCode(); + } + + $hooks = [ + HookManager::STATUS_DETERMINER, + ]; + // If the result does not implement ExitCodeInterface, + // then we'll see if there is a determiner that can + // extract a status code from the result. + $determiners = $this->getHooks($hooks); + foreach ($determiners as $determiner) { + $status = $this->callDeterminer($determiner, $result); + if (isset($status)) { + return $status; + } + } + } + + protected function callDeterminer($determiner, $result) + { + if ($determiner instanceof StatusDeterminerInterface) { + return $determiner->determineStatusCode($result); + } + if (is_callable($determiner)) { + return $determiner($result); + } + } +} diff --git a/lib/composer/vendor/consolidation/annotated-command/src/Hooks/Dispatchers/ValidateHookDispatcher.php b/lib/composer/vendor/consolidation/annotated-command/src/Hooks/Dispatchers/ValidateHookDispatcher.php new file mode 100644 index 000000000..fb4f489f2 --- /dev/null +++ b/lib/composer/vendor/consolidation/annotated-command/src/Hooks/Dispatchers/ValidateHookDispatcher.php @@ -0,0 +1,46 @@ +getHooks($hooks, $commandData->annotationData()); + foreach ($validators as $validator) { + $validated = $this->callValidator($validator, $commandData); + if ($validated === false) { + return new CommandError(); + } + if (is_object($validated)) { + return $validated; + } + } + } + + protected function callValidator($validator, CommandData $commandData) + { + if ($validator instanceof ValidatorInterface) { + return $validator->validate($commandData); + } + if (is_callable($validator)) { + return $validator($commandData); + } + } +} diff --git a/lib/composer/vendor/consolidation/annotated-command/src/Hooks/HookManager.php b/lib/composer/vendor/consolidation/annotated-command/src/Hooks/HookManager.php index 4be68db1d..ade39aaed 100644 --- a/lib/composer/vendor/consolidation/annotated-command/src/Hooks/HookManager.php +++ b/lib/composer/vendor/consolidation/annotated-command/src/Hooks/HookManager.php @@ -8,12 +8,15 @@ use Symfony\Component\Console\ConsoleEvents; use Symfony\Component\Console\Event\ConsoleCommandEvent; use Symfony\Component\EventDispatcher\EventSubscriberInterface; +use Symfony\Component\EventDispatcher\EventDispatcherInterface; +use Symfony\Component\EventDispatcher\EventDispatcher; use Consolidation\AnnotatedCommand\ExitCodeInterface; use Consolidation\AnnotatedCommand\OutputDataInterface; use Consolidation\AnnotatedCommand\AnnotationData; use Consolidation\AnnotatedCommand\CommandData; use Consolidation\AnnotatedCommand\CommandError; +use Consolidation\AnnotatedCommand\Hooks\Dispatchers\CommandEventHookDispatcher; /** * Manage named callback hooks @@ -24,6 +27,7 @@ class HookManager implements EventSubscriberInterface /** var CommandInfo[] */ protected $hookOptions = []; + const REPLACE_COMMAND_HOOK = 'replace-command'; const PRE_COMMAND_EVENT = 'pre-command-event'; const COMMAND_EVENT = 'command-event'; const POST_COMMAND_EVENT = 'post-command-event'; @@ -50,6 +54,7 @@ class HookManager implements EventSubscriberInterface const POST_ALTER_RESULT = 'post-alter'; const STATUS_DETERMINER = 'status'; const EXTRACT_OUTPUT = 'extract'; + const ON_EVENT = 'on-event'; public function __construct() { @@ -117,6 +122,44 @@ protected static function getClassNameFromCallback($callback) return $reflectionClass->getName(); } + /** + * Add a replace command hook + * + * @param type ReplaceCommandHookInterface $provider + * @param type string $command_name The name of the command to replace + */ + public function addReplaceCommandHook(ReplaceCommandHookInterface $replaceCommandHook, $name) + { + $this->hooks[$name][self::REPLACE_COMMAND_HOOK][] = $replaceCommandHook; + return $this; + } + + public function addPreCommandEventDispatcher(EventDispatcherInterface $eventDispatcher, $name = '*') + { + $this->hooks[$name][self::PRE_COMMAND_EVENT][] = $eventDispatcher; + return $this; + } + + public function addCommandEventDispatcher(EventDispatcherInterface $eventDispatcher, $name = '*') + { + $this->hooks[$name][self::COMMAND_EVENT][] = $eventDispatcher; + return $this; + } + + public function addPostCommandEventDispatcher(EventDispatcherInterface $eventDispatcher, $name = '*') + { + $this->hooks[$name][self::POST_COMMAND_EVENT][] = $eventDispatcher; + return $this; + } + + public function addCommandEvent(EventSubscriberInterface $eventSubscriber) + { + // Wrap the event subscriber in a dispatcher and add it + $dispatcher = new EventDispatcher(); + $dispatcher->addSubscriber($eventSubscriber); + return $this->addCommandEventDispatcher($dispatcher); + } + /** * Add an configuration provider hook * @@ -281,30 +324,6 @@ public function addOutputExtractor(ExtractOutputInterface $outputExtractor, $nam return $this; } - public function initializeHook( - InputInterface $input, - $names, - AnnotationData $annotationData - ) { - $providers = $this->getInitializeHooks($names, $annotationData); - foreach ($providers as $provider) { - $this->callInjectConfigurationHook($provider, $input, $annotationData); - } - } - - public function optionsHook( - \Consolidation\AnnotatedCommand\AnnotatedCommand $command, - $names, - AnnotationData $annotationData - ) { - $optionHooks = $this->getOptionHooks($names, $annotationData); - foreach ($optionHooks as $optionHook) { - $this->callOptionHook($optionHook, $command, $annotationData); - } - $commandInfoList = $this->getHookOptionsForCommand($command); - $command->optionsHookForHookAnnotations($commandInfoList); - } - public function getHookOptionsForCommand($command) { $names = $this->addWildcardHooksToNames($command->getNames(), $command->getAnnotationData()); @@ -325,210 +344,6 @@ public function getHookOptions($names) return $result; } - public function interact( - InputInterface $input, - OutputInterface $output, - $names, - AnnotationData $annotationData - ) { - $interactors = $this->getInteractors($names, $annotationData); - foreach ($interactors as $interactor) { - $this->callInteractor($interactor, $input, $output, $annotationData); - } - } - - public function validateArguments($names, CommandData $commandData) - { - $validators = $this->getValidators($names, $commandData->annotationData()); - foreach ($validators as $validator) { - $validated = $this->callValidator($validator, $commandData); - if ($validated === false) { - return new CommandError(); - } - if (is_object($validated)) { - return $validated; - } - } - } - - /** - * Process result and decide what to do with it. - * Allow client to add transformation / interpretation - * callbacks. - */ - public function alterResult($names, $result, CommandData $commandData) - { - $processors = $this->getProcessResultHooks($names, $commandData->annotationData()); - foreach ($processors as $processor) { - $result = $this->callProcessor($processor, $result, $commandData); - } - $alterers = $this->getAlterResultHooks($names, $commandData->annotationData()); - foreach ($alterers as $alterer) { - $result = $this->callProcessor($alterer, $result, $commandData); - } - - return $result; - } - - /** - * Call all status determiners, and see if any of them - * know how to convert to a status code. - */ - public function determineStatusCode($names, $result) - { - // If the result (post-processing) is an object that - // implements ExitCodeInterface, then we will ask it - // to give us the status code. - if ($result instanceof ExitCodeInterface) { - return $result->getExitCode(); - } - - // If the result does not implement ExitCodeInterface, - // then we'll see if there is a determiner that can - // extract a status code from the result. - $determiners = $this->getStatusDeterminers($names); - foreach ($determiners as $determiner) { - $status = $this->callDeterminer($determiner, $result); - if (isset($status)) { - return $status; - } - } - } - - /** - * Convert the result object to printable output in - * structured form. - */ - public function extractOutput($names, $result) - { - if ($result instanceof OutputDataInterface) { - return $result->getOutputData(); - } - - $extractors = $this->getOutputExtractors($names); - foreach ($extractors as $extractor) { - $structuredOutput = $this->callExtractor($extractor, $result); - if (isset($structuredOutput)) { - return $structuredOutput; - } - } - - return $result; - } - - protected function getCommandEventHooks($names) - { - return $this->getHooks( - $names, - [ - self::PRE_COMMAND_EVENT, - self::COMMAND_EVENT, - self::POST_COMMAND_EVENT - ] - ); - } - - protected function getInitializeHooks($names, AnnotationData $annotationData) - { - return $this->getHooks( - $names, - [ - self::PRE_INITIALIZE, - self::INITIALIZE, - self::POST_INITIALIZE - ], - $annotationData - ); - } - - protected function getOptionHooks($names, AnnotationData $annotationData) - { - return $this->getHooks( - $names, - [ - self::PRE_OPTION_HOOK, - self::OPTION_HOOK, - self::POST_OPTION_HOOK - ], - $annotationData - ); - } - - protected function getInteractors($names, AnnotationData $annotationData) - { - return $this->getHooks( - $names, - [ - self::PRE_INTERACT, - self::INTERACT, - self::POST_INTERACT - ], - $annotationData - ); - } - - protected function getValidators($names, AnnotationData $annotationData) - { - return $this->getHooks( - $names, - [ - self::PRE_ARGUMENT_VALIDATOR, - self::ARGUMENT_VALIDATOR, - self::POST_ARGUMENT_VALIDATOR, - self::PRE_COMMAND_HOOK, - self::COMMAND_HOOK, - ], - $annotationData - ); - } - - protected function getProcessResultHooks($names, AnnotationData $annotationData) - { - return $this->getHooks( - $names, - [ - self::PRE_PROCESS_RESULT, - self::PROCESS_RESULT, - self::POST_PROCESS_RESULT - ], - $annotationData - ); - } - - protected function getAlterResultHooks($names, AnnotationData $annotationData) - { - return $this->getHooks( - $names, - [ - self::PRE_ALTER_RESULT, - self::ALTER_RESULT, - self::POST_ALTER_RESULT, - self::POST_COMMAND_HOOK, - ], - $annotationData - ); - } - - protected function getStatusDeterminers($names) - { - return $this->getHooks( - $names, - [ - self::STATUS_DETERMINER, - ] - ); - } - - protected function getOutputExtractors($names) - { - return $this->getHooks( - $names, - [ - self::EXTRACT_OUTPUT, - ] - ); - } - /** * Get a set of hooks with the provided name(s). Include the * pre- and post- hooks, and also include the global hooks ('*') @@ -583,7 +398,7 @@ public function get($names, $hooks) * * @return callable[] */ - protected function getHook($name, $hook) + public function getHook($name, $hook) { if (isset($this->hooks[$name][$hook])) { return $this->hooks[$name][$hook]; @@ -591,103 +406,22 @@ protected function getHook($name, $hook) return []; } - protected function callInjectConfigurationHook($provider, $input, AnnotationData $annotationData) - { - if ($provider instanceof InitializeHookInterface) { - return $provider->applyConfiguration($input, $annotationData); - } - if (is_callable($provider)) { - return $provider($input, $annotationData); - } - } - - protected function callOptionHook($optionHook, $command, AnnotationData $annotationData) - { - if ($optionHook instanceof OptionHookInterface) { - return $optionHook->getOptions($command, $annotationData); - } - if (is_callable($optionHook)) { - return $optionHook($command, $annotationData); - } - } - - protected function callInteractor($interactor, $input, $output, AnnotationData $annotationData) - { - if ($interactor instanceof InteractorInterface) { - return $interactor->interact($input, $output, $annotationData); - } - if (is_callable($interactor)) { - return $interactor($input, $output, $annotationData); - } - } - - protected function callValidator($validator, CommandData $commandData) - { - if ($validator instanceof ValidatorInterface) { - return $validator->validate($commandData); - } - if (is_callable($validator)) { - return $validator($commandData); - } - } - - protected function callProcessor($processor, $result, CommandData $commandData) - { - $processed = null; - if ($processor instanceof ProcessResultInterface) { - $processed = $processor->process($result, $commandData); - } - if (is_callable($processor)) { - $processed = $processor($result, $commandData); - } - if (isset($processed)) { - return $processed; - } - return $result; - } - - protected function callDeterminer($determiner, $result) - { - if ($determiner instanceof StatusDeterminerInterface) { - return $determiner->determineStatusCode($result); - } - if (is_callable($determiner)) { - return $determiner($result); - } - } - - protected function callExtractor($extractor, $result) - { - if ($extractor instanceof ExtractOutputInterface) { - return $extractor->extractOutput($result); - } - if (is_callable($extractor)) { - return $extractor($result); - } - } - /** + * Call the command event hooks. + * + * TODO: This should be moved to CommandEventHookDispatcher, which + * should become the class that implements EventSubscriberInterface. + * This change would break all clients, though, so postpone until next + * major release. + * * @param ConsoleCommandEvent $event */ public function callCommandEventHooks(ConsoleCommandEvent $event) { /* @var Command $command */ $command = $event->getCommand(); - $names = [$command->getName()]; - $commandEventHooks = $this->getCommandEventHooks($names); - foreach ($commandEventHooks as $commandEvent) { - if (is_callable($commandEvent)) { - $commandEvent($event); - } - } - } - - public function findAndAddHookOptions($command) - { - if (!$command instanceof \Consolidation\AnnotatedCommand\AnnotatedCommand) { - return; - } - $command->optionsHook(); + $dispatcher = new CommandEventHookDispatcher($this, [$command->getName()]); + $dispatcher->callCommandEventHooks($event); } /** diff --git a/lib/composer/vendor/consolidation/annotated-command/src/Hooks/InitializeHookInterface.php b/lib/composer/vendor/consolidation/annotated-command/src/Hooks/InitializeHookInterface.php index 8e70ef119..5d261478d 100644 --- a/lib/composer/vendor/consolidation/annotated-command/src/Hooks/InitializeHookInterface.php +++ b/lib/composer/vendor/consolidation/annotated-command/src/Hooks/InitializeHookInterface.php @@ -11,5 +11,5 @@ */ interface InitializeHookInterface { - public function initialize(InputInterface $input, Annotation $annotationData); + public function initialize(InputInterface $input, AnnotationData $annotationData); } diff --git a/lib/composer/vendor/consolidation/annotated-command/src/Options/AlterOptionsCommandEvent.php b/lib/composer/vendor/consolidation/annotated-command/src/Options/AlterOptionsCommandEvent.php index fce2c2ec1..b16a8eda3 100644 --- a/lib/composer/vendor/consolidation/annotated-command/src/Options/AlterOptionsCommandEvent.php +++ b/lib/composer/vendor/consolidation/annotated-command/src/Options/AlterOptionsCommandEvent.php @@ -58,7 +58,14 @@ public function alterCommandOptions(ConsoleCommandEvent $event) $input->bind($command->getDefinition()); } + // Symfony Console helpfully swaps 'command_name' and 'command' + // depending on whether the user entered `help foo` or `--help foo`. + // One of these is always `help`, and the other is the command we + // are actually interested in. $nameOfCommandToDescribe = $event->getInput()->getArgument('command_name'); + if ($nameOfCommandToDescribe == 'help') { + $nameOfCommandToDescribe = $event->getInput()->getArgument('command'); + } $commandToDescribe = $this->application->find($nameOfCommandToDescribe); $this->findAndAddHookOptions($commandToDescribe); } else { diff --git a/lib/composer/vendor/consolidation/annotated-command/src/Options/PrepareTerminalWidthOption.php b/lib/composer/vendor/consolidation/annotated-command/src/Options/PrepareTerminalWidthOption.php index ef5527d16..6c70b7c24 100644 --- a/lib/composer/vendor/consolidation/annotated-command/src/Options/PrepareTerminalWidthOption.php +++ b/lib/composer/vendor/consolidation/annotated-command/src/Options/PrepareTerminalWidthOption.php @@ -10,6 +10,8 @@ class PrepareTerminalWidthOption implements PrepareFormatter /** var Application */ protected $application; + protected $terminal; + /** var int */ protected $defaultWidth; @@ -19,6 +21,9 @@ class PrepareTerminalWidthOption implements PrepareFormatter /** var int */ protected $minWidth = 0; + /* var boolean */ + protected $shouldWrap = true; + public function __construct($defaultWidth = 0) { $this->defaultWidth = $defaultWidth; @@ -29,6 +34,24 @@ public function setApplication(Application $application) $this->application = $application; } + public function setTerminal($terminal) + { + $this->terminal = $terminal; + } + + public function getTerminal() + { + if (!$this->terminal && class_exists('\Symfony\Component\Console\Terminal')) { + $this->terminal = new \Symfony\Component\Console\Terminal(); + } + return $this->terminal; + } + + public function enableWrap($shouldWrap) + { + $this->shouldWrap = $shouldWrap; + } + public function prepare(CommandData $commandData, FormatterOptions $options) { $width = $this->getTerminalWidth(); @@ -45,10 +68,24 @@ public function prepare(CommandData $commandData, FormatterOptions $options) protected function getTerminalWidth() { - if (!$this->application) { + // Don't wrap if wrapping has been disabled. + if (!$this->shouldWrap) { return 0; } + $terminal = $this->getTerminal(); + if ($terminal) { + return $terminal->getWidth(); + } + + return $this->getTerminalWidthViaApplication(); + } + + protected function getTerminalWidthViaApplication() + { + if (!$this->application) { + return 0; + } $dimensions = $this->application->getTerminalDimensions(); if ($dimensions[0] == null) { return 0; diff --git a/lib/composer/vendor/consolidation/annotated-command/src/Parser/CommandInfo.php b/lib/composer/vendor/consolidation/annotated-command/src/Parser/CommandInfo.php index c7668f756..8cb728f3a 100644 --- a/lib/composer/vendor/consolidation/annotated-command/src/Parser/CommandInfo.php +++ b/lib/composer/vendor/consolidation/annotated-command/src/Parser/CommandInfo.php @@ -17,6 +17,11 @@ */ class CommandInfo { + /** + * Serialization schema version. Incremented every time the serialization schema changes. + */ + const SERIALIZATION_SCHEMA_VERSION = 3; + /** * @var \ReflectionMethod */ @@ -26,7 +31,7 @@ class CommandInfo * @var boolean * @var string */ - protected $docBlockIsParsed; + protected $docBlockIsParsed = false; /** * @var string @@ -69,42 +74,73 @@ class CommandInfo protected $aliases = []; /** - * @var string + * @var InputOption[] */ - protected $methodName; + protected $inputOptions; /** * @var string */ - protected $returnType; + protected $methodName; /** * @var string */ - protected $optionParamName; + protected $returnType; /** * Create a new CommandInfo class for a particular method of a class. * * @param string|mixed $classNameOrInstance The name of a class, or an - * instance of it. + * instance of it, or an array of cached data. * @param string $methodName The name of the method to get info about. + * @param array $cache Cached data + * @deprecated Use CommandInfo::create() or CommandInfo::deserialize() + * instead. In the future, this constructor will be protected. */ - public function __construct($classNameOrInstance, $methodName) + public function __construct($classNameOrInstance, $methodName, $cache = []) { $this->reflection = new \ReflectionMethod($classNameOrInstance, $methodName); $this->methodName = $methodName; + $this->arguments = new DefaultsWithDescriptions(); + $this->options = new DefaultsWithDescriptions(); + + // If the cache came from a newer version, ignore it and + // regenerate the cached information. + if (!empty($cache) && CommandInfoDeserializer::isValidSerializedData($cache) && !$this->cachedFileIsModified($cache)) { + $deserializer = new CommandInfoDeserializer(); + $deserializer->constructFromCache($this, $cache); + $this->docBlockIsParsed = true; + } else { + $this->constructFromClassAndMethod($classNameOrInstance, $methodName); + } + } + + public static function create($classNameOrInstance, $methodName) + { + return new self($classNameOrInstance, $methodName); + } + + public static function deserialize($cache) + { + $cache = (array)$cache; + return new self($cache['class'], $cache['method_name'], $cache); + } + + public function cachedFileIsModified($cache) + { + $path = $this->reflection->getFileName(); + return filemtime($path) != $cache['mtime']; + } + + protected function constructFromClassAndMethod($classNameOrInstance, $methodName) + { $this->otherAnnotations = new AnnotationData(); // Set up a default name for the command from the method name. // This can be overridden via @command or @name annotations. - $this->name = $this->convertName($this->reflection->name); + $this->name = $this->convertName($methodName); $this->options = new DefaultsWithDescriptions($this->determineOptionsFromParameters(), false); $this->arguments = $this->determineAgumentClassifications(); - // Remember the name of the last parameter, if it holds the options. - // We will use this information to ignore @param annotations for the options. - if (!empty($this->options)) { - $this->optionParamName = $this->lastParameterName(); - } } /** @@ -139,6 +175,28 @@ public function setName($name) return $this; } + /** + * Return whether or not this method represents a valid command + * or hook. + */ + public function valid() + { + return !empty($this->name); + } + + /** + * If higher-level code decides that this CommandInfo is not interesting + * or useful (if it is not a command method or a hook method), then + * we will mark it as invalid to prevent it from being created as a command. + * We still cache a placeholder record for invalid methods, so that we + * do not need to re-parse the method again later simply to determine that + * it is invalid. + */ + public function invalidate() + { + $this->name = ''; + } + public function getReturnType() { $this->parseDocBlock(); @@ -164,6 +222,15 @@ public function getRawAnnotations() return $this->otherAnnotations; } + /** + * Replace the annotation data. + */ + public function replaceRawAnnotations($annotationData) + { + $this->otherAnnotations = new AnnotationData((array) $annotationData); + return $this; + } + /** * Get any annotations included in the docblock comment, * also including default values such as @command. We add @@ -176,27 +243,49 @@ public function getRawAnnotations() */ public function getAnnotations() { + // Also provide the path to the commandfile that these annotations + // were pulled from and the classname of that file. + $path = $this->reflection->getFileName(); + $className = $this->reflection->getDeclaringClass()->getName(); return new AnnotationData( $this->getRawAnnotations()->getArrayCopy() + [ 'command' => $this->getName(), + '_path' => $path, + '_classname' => $className, ] ); } /** - * Return a specific named annotation for this command. + * Return a specific named annotation for this command as a list. * - * @param string $annotation The name of the annotation. - * @return string + * @param string $name The name of the annotation. + * @return array|null */ - public function getAnnotation($annotation) + public function getAnnotationList($name) { // hasAnnotation parses the docblock - if (!$this->hasAnnotation($annotation)) { + if (!$this->hasAnnotation($name)) { return null; } - return $this->otherAnnotations[$annotation]; + return $this->otherAnnotations->getList($name); + ; + } + + /** + * Return a specific named annotation for this command as a string. + * + * @param string $name The name of the annotation. + * @return string|null + */ + public function getAnnotation($name) + { + // hasAnnotation parses the docblock + if (!$this->hasAnnotation($name)) { + return null; + } + return $this->otherAnnotations->get($name); } /** @@ -217,6 +306,11 @@ public function hasAnnotation($annotation) */ public function addAnnotation($name, $content) { + // Convert to an array and merge if there are multiple + // instances of the same annotation defined. + if (isset($this->otherAnnotations[$name])) { + $content = array_merge((array) $this->otherAnnotations[$name], (array)$content); + } $this->otherAnnotations[$name] = $content; } @@ -246,7 +340,7 @@ public function getDescription() */ public function setDescription($description) { - $this->description = $description; + $this->description = str_replace("\n", ' ', $description); return $this; } @@ -293,6 +387,27 @@ public function setAliases($aliases) return $this; } + /** + * Get hidden status for the command. + * @return bool + */ + public function getHidden() + { + $this->parseDocBlock(); + return $this->hasAnnotation('hidden'); + } + + /** + * Set hidden status. List command omits hidden commands. + * + * @param bool $hidden + */ + public function setHidden($hidden) + { + $this->hidden = $hidden; + return $this; + } + /** * Return the examples for this command. This is @usage instead of * @example because the later is defined by the phpdoc standard to @@ -319,6 +434,29 @@ public function setExampleUsage($usage, $description) return $this; } + /** + * Overwrite all example usages + */ + public function replaceExampleUsages($usages) + { + $this->exampleUsage = $usages; + return $this; + } + + /** + * Return the topics for this command. + * + * @return string[] + */ + public function getTopics() + { + if (!$this->hasAnnotation('topics')) { + return []; + } + $topics = $this->getAnnotation('topics'); + return explode(',', trim($topics)); + } + /** * Return the list of refleaction parameters. * @@ -349,14 +487,6 @@ public function options() return $this->options; } - /** - * Return the name of the last parameter if it holds the options. - */ - public function optionParamName() - { - return $this->optionParamName; - } - /** * Get the inputOptions for the options associated with this CommandInfo * object, e.g. via @option annotations, or from @@ -366,8 +496,31 @@ public function optionParamName() * @return InputOption[] */ public function inputOptions() + { + if (!isset($this->inputOptions)) { + $this->inputOptions = $this->createInputOptions(); + } + return $this->inputOptions; + } + + protected function addImplicitNoOptions() + { + $opts = $this->options()->getValues(); + foreach ($opts as $name => $defaultValue) { + if ($defaultValue === true) { + $key = 'no-' . $name; + if (!array_key_exists($key, $opts)) { + $description = "Negate --$name option."; + $this->options()->add($key, $description, false); + } + } + } + } + + protected function createInputOptions() { $explicitOptions = []; + $this->addImplicitNoOptions(); $opts = $this->options()->getValues(); foreach ($opts as $name => $defaultValue) { @@ -379,10 +532,28 @@ public function inputOptions() list($fullName, $shortcut) = explode('|', $name, 2); } - if (is_bool($defaultValue)) { + // Treat the following two cases identically: + // - 'foo' => InputOption::VALUE_OPTIONAL + // - 'foo' => null + // The first form is preferred, but we will convert the value + // to 'null' for storage as the option default value. + if ($defaultValue === InputOption::VALUE_OPTIONAL) { + $defaultValue = null; + } + + if ($defaultValue === false) { $explicitOptions[$fullName] = new InputOption($fullName, $shortcut, InputOption::VALUE_NONE, $description); } elseif ($defaultValue === InputOption::VALUE_REQUIRED) { $explicitOptions[$fullName] = new InputOption($fullName, $shortcut, InputOption::VALUE_REQUIRED, $description); + } elseif (is_array($defaultValue)) { + $optionality = count($defaultValue) ? InputOption::VALUE_OPTIONAL : InputOption::VALUE_REQUIRED; + $explicitOptions[$fullName] = new InputOption( + $fullName, + $shortcut, + InputOption::VALUE_IS_ARRAY | $optionality, + $description, + count($defaultValue) ? $defaultValue : null + ); } else { $explicitOptions[$fullName] = new InputOption($fullName, $shortcut, InputOption::VALUE_OPTIONAL, $description, $defaultValue); } @@ -460,7 +631,7 @@ protected function determineAgumentClassifications() $result = new DefaultsWithDescriptions(); $params = $this->reflection->getParameters(); $optionsFromParameters = $this->determineOptionsFromParameters(); - if (!empty($optionsFromParameters)) { + if ($this->lastParameterIsOptionsArray()) { array_pop($params); } foreach ($params as $param) { @@ -514,14 +685,26 @@ protected function determineOptionsFromParameters() return $param->getDefaultValue(); } - protected function lastParameterName() + /** + * Determine if the last argument contains $options. + * + * Two forms indicate options: + * - $options = [] + * - $options = ['flag' => 'default-value'] + * + * Any other form, including `array $foo`, is not options. + */ + protected function lastParameterIsOptionsArray() { $params = $this->reflection->getParameters(); + if (empty($params)) { + return []; + } $param = end($params); - if (!$param) { - return ''; + if (!$param->isDefaultValueAvailable()) { + return []; } - return $param->name; + return is_array($param->getDefaultValue()); } /** @@ -529,7 +712,7 @@ protected function lastParameterName() * is not associative if its keys are numeric, and numbered sequentially * from zero. All other arrays are considered to be associative. * - * @param arrau $arr The array + * @param array $arr The array * @return boolean */ protected function isAssoc($arr) diff --git a/lib/composer/vendor/consolidation/annotated-command/src/Parser/CommandInfoDeserializer.php b/lib/composer/vendor/consolidation/annotated-command/src/Parser/CommandInfoDeserializer.php new file mode 100644 index 000000000..ed193cb54 --- /dev/null +++ b/lib/composer/vendor/consolidation/annotated-command/src/Parser/CommandInfoDeserializer.php @@ -0,0 +1,87 @@ + 0) && + ($cache['schema'] <= CommandInfo::SERIALIZATION_SCHEMA_VERSION) && + self::cachedMethodExists($cache); + } + + public function constructFromCache(CommandInfo $commandInfo, $info_array) + { + $info_array += $this->defaultSerializationData(); + + $commandInfo + ->setName($info_array['name']) + ->replaceRawAnnotations($info_array['annotations']) + ->setAliases($info_array['aliases']) + ->setHelp($info_array['help']) + ->setDescription($info_array['description']) + ->replaceExampleUsages($info_array['example_usages']) + ->setReturnType($info_array['return_type']) + ; + + $this->constructDefaultsWithDescriptions($commandInfo->arguments(), (array)$info_array['arguments']); + $this->constructDefaultsWithDescriptions($commandInfo->options(), (array)$info_array['options']); + } + + protected function constructDefaultsWithDescriptions(DefaultsWithDescriptions $defaults, $data) + { + foreach ($data as $key => $info) { + $info = (array)$info; + $defaults->add($key, $info['description']); + if (array_key_exists('default', $info)) { + $defaults->setDefaultValue($key, $info['default']); + } + } + } + + + /** + * Default data. Everything should be provided during serialization; + * this is just as a fallback for unusual circumstances. + * @return array + */ + protected function defaultSerializationData() + { + return [ + 'name' => '', + 'description' => '', + 'help' => '', + 'aliases' => [], + 'annotations' => [], + 'example_usages' => [], + 'return_type' => [], + 'parameters' => [], + 'arguments' => [], + 'options' => [], + 'mtime' => 0, + ]; + } +} diff --git a/lib/composer/vendor/consolidation/annotated-command/src/Parser/CommandInfoSerializer.php b/lib/composer/vendor/consolidation/annotated-command/src/Parser/CommandInfoSerializer.php new file mode 100644 index 000000000..cab6993d3 --- /dev/null +++ b/lib/composer/vendor/consolidation/annotated-command/src/Parser/CommandInfoSerializer.php @@ -0,0 +1,59 @@ +getAnnotations(); + $path = $allAnnotations['_path']; + $className = $allAnnotations['_classname']; + + // Include the minimum information for command info (including placeholder records) + $info = [ + 'schema' => CommandInfo::SERIALIZATION_SCHEMA_VERSION, + 'class' => $className, + 'method_name' => $commandInfo->getMethodName(), + 'mtime' => filemtime($path), + ]; + + // If this is a valid method / hook, then add more information. + if ($commandInfo->valid()) { + $info += [ + 'name' => $commandInfo->getName(), + 'description' => $commandInfo->getDescription(), + 'help' => $commandInfo->getHelp(), + 'aliases' => $commandInfo->getAliases(), + 'annotations' => $commandInfo->getRawAnnotations()->getArrayCopy(), + 'example_usages' => $commandInfo->getExampleUsages(), + 'return_type' => $commandInfo->getReturnType(), + ]; + $info['arguments'] = $this->serializeDefaultsWithDescriptions($commandInfo->arguments()); + $info['options'] = $this->serializeDefaultsWithDescriptions($commandInfo->options()); + } + + return $info; + } + + protected function serializeDefaultsWithDescriptions(DefaultsWithDescriptions $defaults) + { + $result = []; + foreach ($defaults->getValues() as $key => $val) { + $result[$key] = [ + 'description' => $defaults->getDescription($key), + ]; + if ($defaults->hasDefault($key)) { + $result[$key]['default'] = $val; + } + } + return $result; + } +} diff --git a/lib/composer/vendor/consolidation/annotated-command/src/Parser/DefaultsWithDescriptions.php b/lib/composer/vendor/consolidation/annotated-command/src/Parser/DefaultsWithDescriptions.php index 8f9e8173d..d37fc51b1 100644 --- a/lib/composer/vendor/consolidation/annotated-command/src/Parser/DefaultsWithDescriptions.php +++ b/lib/composer/vendor/consolidation/annotated-command/src/Parser/DefaultsWithDescriptions.php @@ -32,7 +32,9 @@ class DefaultsWithDescriptions public function __construct($values = [], $defaultDefault = null) { $this->values = $values; - $this->hasDefault = []; + $this->hasDefault = array_filter($this->values, function ($value) { + return isset($value); + }); $this->descriptions = []; $this->defaultDefault = $defaultDefault; } diff --git a/lib/composer/vendor/consolidation/annotated-command/src/Parser/Internal/AbstractCommandDocBlockParser.php b/lib/composer/vendor/consolidation/annotated-command/src/Parser/Internal/AbstractCommandDocBlockParser.php deleted file mode 100644 index 0534a9947..000000000 --- a/lib/composer/vendor/consolidation/annotated-command/src/Parser/Internal/AbstractCommandDocBlockParser.php +++ /dev/null @@ -1,252 +0,0 @@ - 'processCommandTag', - 'name' => 'processCommandTag', - 'arg' => 'processArgumentTag', - 'param' => 'processParamTag', - 'return' => 'processReturnTag', - 'option' => 'processOptionTag', - 'default' => 'processDefaultTag', - 'aliases' => 'processAliases', - 'usage' => 'processUsageTag', - 'description' => 'processAlternateDescriptionTag', - 'desc' => 'processAlternateDescriptionTag', - ]; - - public function __construct(CommandInfo $commandInfo, \ReflectionMethod $reflection) - { - $this->commandInfo = $commandInfo; - $this->reflection = $reflection; - } - - protected function processAllTags($phpdoc) - { - // Iterate over all of the tags, and process them as necessary. - foreach ($phpdoc->getTags() as $tag) { - $processFn = [$this, 'processGenericTag']; - if (array_key_exists($tag->getName(), $this->tagProcessors)) { - $processFn = [$this, $this->tagProcessors[$tag->getName()]]; - } - $processFn($tag); - } - } - - abstract protected function getTagContents($tag); - - /** - * Parse the docBlock comment for this command, and set the - * fields of this class with the data thereby obtained. - */ - abstract public function parse(); - - /** - * Save any tag that we do not explicitly recognize in the - * 'otherAnnotations' map. - */ - protected function processGenericTag($tag) - { - $this->commandInfo->addAnnotation($tag->getName(), $this->getTagContents($tag)); - } - - /** - * Set the name of the command from a @command or @name annotation. - */ - protected function processCommandTag($tag) - { - $commandName = $this->getTagContents($tag); - $this->commandInfo->setName($commandName); - // We also store the name in the 'other annotations' so that is is - // possible to determine if the method had a @command annotation. - $this->commandInfo->addAnnotation($tag->getName(), $commandName); - } - - /** - * The @description and @desc annotations may be used in - * place of the synopsis (which we call 'description'). - * This is discouraged. - * - * @deprecated - */ - protected function processAlternateDescriptionTag($tag) - { - $this->commandInfo->setDescription($this->getTagContents($tag)); - } - - /** - * Store the data from a @arg annotation in our argument descriptions. - */ - protected function processArgumentTag($tag) - { - if (!$this->pregMatchNameAndDescription((string)$tag->getDescription(), $match)) { - return; - } - $this->addOptionOrArgumentTag($tag, $this->commandInfo->arguments(), $match); - } - - /** - * Store the data from an @option annotation in our option descriptions. - */ - protected function processOptionTag($tag) - { - if (!$this->pregMatchOptionNameAndDescription((string)$tag->getDescription(), $match)) { - return; - } - $this->addOptionOrArgumentTag($tag, $this->commandInfo->options(), $match); - } - - protected function addOptionOrArgumentTag($tag, DefaultsWithDescriptions $set, $nameAndDescription) - { - $variableName = $this->commandInfo->findMatchingOption($nameAndDescription['name']); - $desc = $nameAndDescription['description']; - $description = static::removeLineBreaks($desc); - $set->add($variableName, $description); - } - - /** - * Store the data from a @default annotation in our argument or option store, - * as appropriate. - */ - protected function processDefaultTag($tag) - { - if (!$this->pregMatchNameAndDescription((string)$tag->getDescription(), $match)) { - return; - } - $variableName = $match['name']; - $defaultValue = $this->interpretDefaultValue($match['description']); - if ($this->commandInfo->arguments()->exists($variableName)) { - $this->commandInfo->arguments()->setDefaultValue($variableName, $defaultValue); - return; - } - $variableName = $this->commandInfo->findMatchingOption($variableName); - if ($this->commandInfo->options()->exists($variableName)) { - $this->commandInfo->options()->setDefaultValue($variableName, $defaultValue); - } - } - - /** - * Store the data from a @usage annotation in our example usage list. - */ - protected function processUsageTag($tag) - { - $lines = explode("\n", $this->getTagContents($tag)); - $usage = array_shift($lines); - $description = static::removeLineBreaks(implode("\n", $lines)); - - $this->commandInfo->setExampleUsage($usage, $description); - } - - /** - * Process the comma-separated list of aliases - */ - protected function processAliases($tag) - { - $this->commandInfo->setAliases((string)$tag->getDescription()); - } - - /** - * Store the data from a @param annotation in our argument descriptions. - */ - protected function processParamTag($tag) - { - $variableName = $tag->getVariableName(); - $variableName = str_replace('$', '', $variableName); - $description = static::removeLineBreaks((string)$tag->getDescription()); - if ($variableName == $this->commandInfo->optionParamName()) { - return; - } - $this->commandInfo->arguments()->add($variableName, $description); - } - - /** - * Store the data from a @return annotation in our argument descriptions. - */ - abstract protected function processReturnTag($tag); - - protected function interpretDefaultValue($defaultValue) - { - $defaults = [ - 'null' => null, - 'true' => true, - 'false' => false, - "''" => '', - '[]' => [], - ]; - foreach ($defaults as $defaultName => $defaultTypedValue) { - if ($defaultValue == $defaultName) { - return $defaultTypedValue; - } - } - return $defaultValue; - } - - /** - * Given a docblock description in the form "$variable description", - * return the variable name and description via the 'match' parameter. - */ - protected function pregMatchNameAndDescription($source, &$match) - { - $nameRegEx = '\\$(?P[^ \t]+)[ \t]+'; - $descriptionRegEx = '(?P.*)'; - $optionRegEx = "/{$nameRegEx}{$descriptionRegEx}/s"; - - return preg_match($optionRegEx, $source, $match); - } - - /** - * Given a docblock description in the form "$variable description", - * return the variable name and description via the 'match' parameter. - */ - protected function pregMatchOptionNameAndDescription($source, &$match) - { - // Strip type and $ from the text before the @option name, if present. - $source = preg_replace('/^[a-zA-Z]* ?\\$/', '', $source); - $nameRegEx = '(?P[^ \t]+)[ \t]+'; - $descriptionRegEx = '(?P.*)'; - $optionRegEx = "/{$nameRegEx}{$descriptionRegEx}/s"; - - return preg_match($optionRegEx, $source, $match); - } - - /** - * Given a list that might be 'a b c' or 'a, b, c' or 'a,b,c', - * convert the data into the last of these forms. - */ - protected static function convertListToCommaSeparated($text) - { - return preg_replace('#[ \t\n\r,]+#', ',', $text); - } - - /** - * Take a multiline description and convert it into a single - * long unbroken line. - */ - protected static function removeLineBreaks($text) - { - return trim(preg_replace('#[ \t\n\r]+#', ' ', $text)); - } -} diff --git a/lib/composer/vendor/consolidation/annotated-command/src/Parser/Internal/BespokeDocBlockParser.php b/lib/composer/vendor/consolidation/annotated-command/src/Parser/Internal/BespokeDocBlockParser.php new file mode 100644 index 000000000..b53545c62 --- /dev/null +++ b/lib/composer/vendor/consolidation/annotated-command/src/Parser/Internal/BespokeDocBlockParser.php @@ -0,0 +1,322 @@ + 'processCommandTag', + 'name' => 'processCommandTag', + 'arg' => 'processArgumentTag', + 'param' => 'processArgumentTag', + 'return' => 'processReturnTag', + 'option' => 'processOptionTag', + 'default' => 'processDefaultTag', + 'aliases' => 'processAliases', + 'usage' => 'processUsageTag', + 'description' => 'processAlternateDescriptionTag', + 'desc' => 'processAlternateDescriptionTag', + ]; + + public function __construct(CommandInfo $commandInfo, \ReflectionMethod $reflection, $fqcnCache = null) + { + $this->commandInfo = $commandInfo; + $this->reflection = $reflection; + $this->fqcnCache = $fqcnCache ?: new FullyQualifiedClassCache(); + } + + /** + * Parse the docBlock comment for this command, and set the + * fields of this class with the data thereby obtained. + */ + public function parse() + { + $doc = $this->reflection->getDocComment(); + $this->parseDocBlock($doc); + } + + /** + * Save any tag that we do not explicitly recognize in the + * 'otherAnnotations' map. + */ + protected function processGenericTag($tag) + { + $this->commandInfo->addAnnotation($tag->getTag(), $tag->getContent()); + } + + /** + * Set the name of the command from a @command or @name annotation. + */ + protected function processCommandTag($tag) + { + if (!$tag->hasWordAndDescription($matches)) { + throw new \Exception('Could not determine command name from tag ' . (string)$tag); + } + $commandName = $matches['word']; + $this->commandInfo->setName($commandName); + // We also store the name in the 'other annotations' so that is is + // possible to determine if the method had a @command annotation. + $this->commandInfo->addAnnotation($tag->getTag(), $commandName); + } + + /** + * The @description and @desc annotations may be used in + * place of the synopsis (which we call 'description'). + * This is discouraged. + * + * @deprecated + */ + protected function processAlternateDescriptionTag($tag) + { + $this->commandInfo->setDescription($tag->getContent()); + } + + /** + * Store the data from a @arg annotation in our argument descriptions. + */ + protected function processArgumentTag($tag) + { + if (!$tag->hasVariable($matches)) { + throw new \Exception('Could not determine argument name from tag ' . (string)$tag); + } + if ($matches['variable'] == $this->optionParamName()) { + return; + } + $this->addOptionOrArgumentTag($tag, $this->commandInfo->arguments(), $matches['variable'], $matches['description']); + } + + /** + * Store the data from an @option annotation in our option descriptions. + */ + protected function processOptionTag($tag) + { + if (!$tag->hasVariable($matches)) { + throw new \Exception('Could not determine option name from tag ' . (string)$tag); + } + $this->addOptionOrArgumentTag($tag, $this->commandInfo->options(), $matches['variable'], $matches['description']); + } + + protected function addOptionOrArgumentTag($tag, DefaultsWithDescriptions $set, $name, $description) + { + $variableName = $this->commandInfo->findMatchingOption($name); + $description = static::removeLineBreaks($description); + $set->add($variableName, $description); + } + + /** + * Store the data from a @default annotation in our argument or option store, + * as appropriate. + */ + protected function processDefaultTag($tag) + { + if (!$tag->hasVariable($matches)) { + throw new \Exception('Could not determine parameter name for default value from tag ' . (string)$tag); + } + $variableName = $matches['variable']; + $defaultValue = $this->interpretDefaultValue($matches['description']); + if ($this->commandInfo->arguments()->exists($variableName)) { + $this->commandInfo->arguments()->setDefaultValue($variableName, $defaultValue); + return; + } + $variableName = $this->commandInfo->findMatchingOption($variableName); + if ($this->commandInfo->options()->exists($variableName)) { + $this->commandInfo->options()->setDefaultValue($variableName, $defaultValue); + } + } + + /** + * Store the data from a @usage annotation in our example usage list. + */ + protected function processUsageTag($tag) + { + $lines = explode("\n", $tag->getContent()); + $usage = trim(array_shift($lines)); + $description = static::removeLineBreaks(implode("\n", array_map(function ($line) { + return trim($line); + }, $lines))); + + $this->commandInfo->setExampleUsage($usage, $description); + } + + /** + * Process the comma-separated list of aliases + */ + protected function processAliases($tag) + { + $this->commandInfo->setAliases((string)$tag->getContent()); + } + + /** + * Store the data from a @return annotation in our argument descriptions. + */ + protected function processReturnTag($tag) + { + // The return type might be a variable -- '$this'. It will + // usually be a type, like RowsOfFields, or \Namespace\RowsOfFields. + if (!$tag->hasVariableAndDescription($matches)) { + throw new \Exception('Could not determine return type from tag ' . (string)$tag); + } + // Look at namespace and `use` statments to make returnType a fqdn + $returnType = $matches['variable']; + $returnType = $this->findFullyQualifiedClass($returnType); + $this->commandInfo->setReturnType($returnType); + } + + protected function findFullyQualifiedClass($className) + { + if (strpos($className, '\\') !== false) { + return $className; + } + + return $this->fqcnCache->qualify($this->reflection->getFileName(), $className); + } + + private function parseDocBlock($doc) + { + // Remove the leading /** and the trailing */ + $doc = preg_replace('#^\s*/\*+\s*#', '', $doc); + $doc = preg_replace('#\s*\*+/\s*#', '', $doc); + + // Nothing left? Exit. + if (empty($doc)) { + return; + } + + $tagFactory = new TagFactory(); + $lines = []; + + foreach (explode("\n", $doc) as $row) { + // Remove trailing whitespace and leading space + '*'s + $row = rtrim($row); + $row = preg_replace('#^[ \t]*\**#', '', $row); + + if (!$tagFactory->parseLine($row)) { + $lines[] = $row; + } + } + + $this->processDescriptionAndHelp($lines); + $this->processAllTags($tagFactory->getTags()); + } + + protected function processDescriptionAndHelp($lines) + { + // Trim all of the lines individually. + $lines = + array_map( + function ($line) { + return trim($line); + }, + $lines + ); + + // Everything up to the first blank line goes in the description. + $description = array_shift($lines); + while ($this->nextLineIsNotEmpty($lines)) { + $description .= ' ' . array_shift($lines); + } + + // Everything else goes in the help. + $help = trim(implode("\n", $lines)); + + $this->commandInfo->setDescription($description); + $this->commandInfo->setHelp($help); + } + + protected function nextLineIsNotEmpty($lines) + { + if (empty($lines)) { + return false; + } + + $nextLine = trim($lines[0]); + return !empty($nextLine); + } + + protected function processAllTags($tags) + { + // Iterate over all of the tags, and process them as necessary. + foreach ($tags as $tag) { + $processFn = [$this, 'processGenericTag']; + if (array_key_exists($tag->getTag(), $this->tagProcessors)) { + $processFn = [$this, $this->tagProcessors[$tag->getTag()]]; + } + $processFn($tag); + } + } + + protected function lastParameterName() + { + $params = $this->commandInfo->getParameters(); + $param = end($params); + if (!$param) { + return ''; + } + return $param->name; + } + + /** + * Return the name of the last parameter if it holds the options. + */ + public function optionParamName() + { + // Remember the name of the last parameter, if it holds the options. + // We will use this information to ignore @param annotations for the options. + if (!isset($this->optionParamName)) { + $this->optionParamName = ''; + $options = $this->commandInfo->options(); + if (!$options->isEmpty()) { + $this->optionParamName = $this->lastParameterName(); + } + } + + return $this->optionParamName; + } + + protected function interpretDefaultValue($defaultValue) + { + $defaults = [ + 'null' => null, + 'true' => true, + 'false' => false, + "''" => '', + '[]' => [], + ]; + foreach ($defaults as $defaultName => $defaultTypedValue) { + if ($defaultValue == $defaultName) { + return $defaultTypedValue; + } + } + return $defaultValue; + } + + /** + * Given a list that might be 'a b c' or 'a, b, c' or 'a,b,c', + * convert the data into the last of these forms. + */ + protected static function convertListToCommaSeparated($text) + { + return preg_replace('#[ \t\n\r,]+#', ',', $text); + } + + /** + * Take a multiline description and convert it into a single + * long unbroken line. + */ + protected static function removeLineBreaks($text) + { + return trim(preg_replace('#[ \t\n\r]+#', ' ', $text)); + } +} diff --git a/lib/composer/vendor/consolidation/annotated-command/src/Parser/Internal/CommandDocBlockParser2.php b/lib/composer/vendor/consolidation/annotated-command/src/Parser/Internal/CommandDocBlockParser2.php deleted file mode 100644 index 22ecad2ba..000000000 --- a/lib/composer/vendor/consolidation/annotated-command/src/Parser/Internal/CommandDocBlockParser2.php +++ /dev/null @@ -1,70 +0,0 @@ -reflection->getDocComment(); - $phpdoc = new DocBlock($docblockComment); - - // First set the description (synopsis) and help. - $this->commandInfo->setDescription((string)$phpdoc->getShortDescription()); - $this->commandInfo->setHelp((string)$phpdoc->getLongDescription()); - - $this->processAllTags($phpdoc); - } - - protected function getTagContents($tag) - { - return $tag->getContent(); - } - - /** - * Store the data from a @arg annotation in our argument descriptions. - */ - protected function processArgumentTag($tag) - { - if (!$this->pregMatchNameAndDescription((string)$tag->getDescription(), $match)) { - return; - } - $this->addOptionOrArgumentTag($tag, $this->commandInfo->arguments(), $match); - } - - /** - * Store the data from a @param annotation in our argument descriptions. - */ - protected function processParamTag($tag) - { - if (!$tag instanceof ParamTag) { - return; - } - return parent::processParamTag($tag); - } - - /** - * Store the data from a @return annotation in our argument descriptions. - */ - protected function processReturnTag($tag) - { - if (!$tag instanceof ReturnTag) { - return; - } - $this->commandInfo->setReturnType($tag->getType()); - } -} diff --git a/lib/composer/vendor/consolidation/annotated-command/src/Parser/Internal/CommandDocBlockParser3.php b/lib/composer/vendor/consolidation/annotated-command/src/Parser/Internal/CommandDocBlockParser3.php deleted file mode 100644 index ed0eb5804..000000000 --- a/lib/composer/vendor/consolidation/annotated-command/src/Parser/Internal/CommandDocBlockParser3.php +++ /dev/null @@ -1,74 +0,0 @@ -reflection->getDocComment(); - if (empty($docComment)) { - return; - } - $phpdoc = $this->createDocBlock(); - - // First set the description (synopsis) and help. - $this->commandInfo->setDescription((string)$phpdoc->getSummary()); - $this->commandInfo->setHelp((string)$phpdoc->getDescription()); - - $this->processAllTags($phpdoc); - } - - public function createDocBlock() - { - $docBlockFactory = \phpDocumentor\Reflection\DocBlockFactory::createInstance(); - $contextFactory = new \phpDocumentor\Reflection\Types\ContextFactory(); - - return $docBlockFactory->create( - $this->reflection, - $contextFactory->createFromReflector($this->reflection) - ); - } - - protected function getTagContents($tag) - { - return (string)$tag; - } - - /** - * Store the data from a @param annotation in our argument descriptions. - */ - protected function processParamTag($tag) - { - if (!$tag instanceof Param) { - return; - } - return parent::processParamTag($tag); - } - - /** - * Store the data from a @return annotation in our argument descriptions. - */ - protected function processReturnTag($tag) - { - if (!$tag instanceof Return_) { - return; - } - // If there is a spurrious trailing space on the return type, remove it. - $this->commandInfo->setReturnType(trim($this->getTagContents($tag))); - } -} diff --git a/lib/composer/vendor/consolidation/annotated-command/src/Parser/Internal/CommandDocBlockParserFactory.php b/lib/composer/vendor/consolidation/annotated-command/src/Parser/Internal/CommandDocBlockParserFactory.php index fe1bdecd9..3421b7493 100644 --- a/lib/composer/vendor/consolidation/annotated-command/src/Parser/Internal/CommandDocBlockParserFactory.php +++ b/lib/composer/vendor/consolidation/annotated-command/src/Parser/Internal/CommandDocBlockParserFactory.php @@ -15,14 +15,6 @@ public static function parse(CommandInfo $commandInfo, \ReflectionMethod $reflec private static function create(CommandInfo $commandInfo, \ReflectionMethod $reflection) { - if (static::hasReflectionDocBlock3()) { - return new CommandDocBlockParser3($commandInfo, $reflection); - } - return new CommandDocBlockParser2($commandInfo, $reflection); - } - - private static function hasReflectionDocBlock3() - { - return class_exists('phpDocumentor\Reflection\DocBlockFactory') && class_exists('phpDocumentor\Reflection\Types\ContextFactory'); + return new BespokeDocBlockParser($commandInfo, $reflection); } } diff --git a/lib/composer/vendor/consolidation/annotated-command/src/Parser/Internal/CsvUtils.php b/lib/composer/vendor/consolidation/annotated-command/src/Parser/Internal/CsvUtils.php new file mode 100644 index 000000000..88ed3891f --- /dev/null +++ b/lib/composer/vendor/consolidation/annotated-command/src/Parser/Internal/CsvUtils.php @@ -0,0 +1,49 @@ +[^\s$]+)[\s]*'; + const VARIABLE_REGEX = '\\$(?P[^\s$]+)[\s]*'; + const VARIABLE_OR_WORD_REGEX = '\\$?(?P[^\s$]+)[\s]*'; + const TYPE_REGEX = '(?P[^\s$]+)[\s]*'; + const WORD_REGEX = '(?P[^\s$]+)[\s]*'; + const DESCRIPTION_REGEX = '(?P.*)'; + const IS_TAG_REGEX = '/^[*\s]*@/'; + + /** + * Check if the provided string begins with a tag + * @param string $subject + * @return bool + */ + public static function isTag($subject) + { + return preg_match(self::IS_TAG_REGEX, $subject); + } + + /** + * Use a regular expression to separate the tag from the content. + * + * @param string $subject + * @param string[] &$matches Sets $matches['tag'] and $matches['description'] + * @return bool + */ + public static function splitTagAndContent($subject, &$matches) + { + $regex = '/' . self::TAG_REGEX . self::DESCRIPTION_REGEX . '/s'; + return preg_match($regex, $subject, $matches); + } + + /** + * DockblockTag constructor + */ + public function __construct($tag, $content = null) + { + $this->tag = $tag; + $this->content = $content; + } + + /** + * Add more content onto a tag during parsing. + */ + public function appendContent($line) + { + $this->content .= "\n$line"; + } + + /** + * Return the tag - e.g. "@foo description" returns 'foo' + * + * @return string + */ + public function getTag() + { + return $this->tag; + } + + /** + * Return the content portion of the tag - e.g. "@foo bar baz boz" returns + * "bar baz boz" + * + * @return string + */ + public function getContent() + { + return $this->content; + } + + /** + * Convert tag back into a string. + */ + public function __toString() + { + return '@' . $this->getTag() . ' ' . $this->getContent(); + } + + /** + * Determine if tag is one of: + * - "@tag variable description" + * - "@tag $variable description" + * - "@tag type $variable description" + * + * @param string $subject + * @param string[] &$matches Sets $matches['variable'] and + * $matches['description']; might set $matches['type']. + * @return bool + */ + public function hasVariable(&$matches) + { + return + $this->hasTypeVariableAndDescription($matches) || + $this->hasVariableAndDescription($matches); + } + + /** + * Determine if tag is "@tag $variable description" + * @param string $subject + * @param string[] &$matches Sets $matches['variable'] and + * $matches['description'] + * @return bool + */ + public function hasVariableAndDescription(&$matches) + { + $regex = '/^\s*' . self::VARIABLE_OR_WORD_REGEX . self::DESCRIPTION_REGEX . '/s'; + return preg_match($regex, $this->getContent(), $matches); + } + + /** + * Determine if tag is "@tag type $variable description" + * + * @param string $subject + * @param string[] &$matches Sets $matches['variable'], + * $matches['description'] and $matches['type']. + * @return bool + */ + public function hasTypeVariableAndDescription(&$matches) + { + $regex = '/^\s*' . self::TYPE_REGEX . self::VARIABLE_REGEX . self::DESCRIPTION_REGEX . '/s'; + return preg_match($regex, $this->getContent(), $matches); + } + + /** + * Determine if tag is "@tag word description" + * @param string $subject + * @param string[] &$matches Sets $matches['word'] and + * $matches['description'] + * @return bool + */ + public function hasWordAndDescription(&$matches) + { + $regex = '/^\s*' . self::WORD_REGEX . self::DESCRIPTION_REGEX . '/s'; + return preg_match($regex, $this->getContent(), $matches); + } +} diff --git a/lib/composer/vendor/consolidation/annotated-command/src/Parser/Internal/FullyQualifiedClassCache.php b/lib/composer/vendor/consolidation/annotated-command/src/Parser/Internal/FullyQualifiedClassCache.php new file mode 100644 index 000000000..4daab65af --- /dev/null +++ b/lib/composer/vendor/consolidation/annotated-command/src/Parser/Internal/FullyQualifiedClassCache.php @@ -0,0 +1,106 @@ +primeCache($filename, $className); + return $this->cached($filename, $className); + } + + protected function cached($filename, $className) + { + return isset($this->classCache[$filename][$className]) ? $this->classCache[$filename][$className] : $className; + } + + protected function primeCache($filename, $className) + { + // If the cache has already been primed, do no further work + if (isset($this->namespaceCache[$filename])) { + return false; + } + + $handle = fopen($filename, "r"); + if (!$handle) { + return false; + } + + $namespaceName = $this->primeNamespaceCache($filename, $handle); + $this->primeUseCache($filename, $handle); + + // If there is no 'use' statement for the className, then + // generate an effective classname from the namespace + if (!isset($this->classCache[$filename][$className])) { + $this->classCache[$filename][$className] = $namespaceName . '\\' . $className; + } + + fclose($handle); + } + + protected function primeNamespaceCache($filename, $handle) + { + $namespaceName = $this->readNamespace($handle); + if (!$namespaceName) { + return false; + } + $this->namespaceCache[$filename] = $namespaceName; + return $namespaceName; + } + + protected function primeUseCache($filename, $handle) + { + $usedClasses = $this->readUseStatements($handle); + if (empty($usedClasses)) { + return false; + } + $this->classCache[$filename] = $usedClasses; + } + + protected function readNamespace($handle) + { + $namespaceRegex = '#^\s*namespace\s+#'; + $line = $this->readNextRelevantLine($handle); + if (!$line || !preg_match($namespaceRegex, $line)) { + return false; + } + + $namespaceName = preg_replace($namespaceRegex, '', $line); + $namespaceName = rtrim($namespaceName, ';'); + return $namespaceName; + } + + protected function readUseStatements($handle) + { + $useRegex = '#^\s*use\s+#'; + $result = []; + while (true) { + $line = $this->readNextRelevantLine($handle); + if (!$line || !preg_match($useRegex, $line)) { + return $result; + } + $usedClass = preg_replace($useRegex, '', $line); + $usedClass = rtrim($usedClass, ';'); + $unqualifiedClass = preg_replace('#.*\\\\#', '', $usedClass); + // If this is an aliased class, 'use \Foo\Bar as Baz', then adjust + if (strpos($usedClass, ' as ')) { + $unqualifiedClass = preg_replace('#.*\sas\s+#', '', $usedClass); + $usedClass = preg_replace('#\s+as\s+#', '', $usedClass); + } + $result[$unqualifiedClass] = $usedClass; + } + } + + protected function readNextRelevantLine($handle) + { + while (($line = fgets($handle)) !== false) { + if (preg_match('#^\s*\w#', $line)) { + return trim($line); + } + } + return false; + } +} diff --git a/lib/composer/vendor/consolidation/annotated-command/src/Parser/Internal/TagFactory.php b/lib/composer/vendor/consolidation/annotated-command/src/Parser/Internal/TagFactory.php new file mode 100644 index 000000000..4c48679d5 --- /dev/null +++ b/lib/composer/vendor/consolidation/annotated-command/src/Parser/Internal/TagFactory.php @@ -0,0 +1,67 @@ +current = null; + $this->tags = []; + } + + public function parseLine($line) + { + if (DocblockTag::isTag($line)) { + return $this->createTag($line); + } + if (empty($line)) { + return $this->storeCurrentTag(); + } + return $this->accumulateContent($line); + } + + public function getTags() + { + $this->storeCurrentTag(); + return $this->tags; + } + + protected function createTag($line) + { + DocblockTag::splitTagAndContent($line, $matches); + $this->storeCurrentTag(); + $this->current = new DocblockTag($matches['tag'], $matches['description']); + return true; + } + + protected function storeCurrentTag() + { + if (!$this->current) { + return false; + } + $this->tags[] = $this->current; + $this->current = false; + return true; + } + + protected function accumulateContent($line) + { + if (!$this->current) { + return false; + } + $this->current->appendContent($line); + return true; + } +} diff --git a/lib/composer/vendor/consolidation/annotated-command/tests/FullyQualifiedClassCacheTests.php b/lib/composer/vendor/consolidation/annotated-command/tests/FullyQualifiedClassCacheTests.php new file mode 100644 index 000000000..dc913e701 --- /dev/null +++ b/lib/composer/vendor/consolidation/annotated-command/tests/FullyQualifiedClassCacheTests.php @@ -0,0 +1,59 @@ +getFileName(); + + $fqcnCache = new FullyQualifiedClassCache(); + + $handle = fopen($filename, "r"); + $this->assertTrue($handle !== false); + + $namespaceName = $this->callProtected($fqcnCache, 'readNamespace', [$handle]); + + $this->assertEquals('Consolidation\TestUtils\alpha', $namespaceName); + + $usedClasses = $this->callProtected($fqcnCache, 'readUseStatements', [$handle]); + + $this->assertTrue(isset($usedClasses['RowsOfFields'])); + $this->assertEquals('Consolidation\OutputFormatters\StructuredData\RowsOfFields', $usedClasses['RowsOfFields']); + + fclose($handle); + + $fqcn = $fqcnCache->qualify($filename, 'RowsOfFields'); + $this->assertEquals('Consolidation\OutputFormatters\StructuredData\RowsOfFields', $fqcn); + + $fqcn = $fqcnCache->qualify($filename, 'ClassWithoutUse'); + $this->assertEquals('Consolidation\TestUtils\alpha\ClassWithoutUse', $fqcn); + + $fqcn = $fqcnCache->qualify($filename, 'ExampleAliasedClass'); + $this->assertEquals('Consolidation\TestUtils\ExampleCommandFile', $fqcn); + } + + function callProtected($object, $method, $args = []) + { + $r = new \ReflectionMethod($object, $method); + $r->setAccessible(true); + return $r->invokeArgs($object, $args); + } +} diff --git a/lib/composer/vendor/consolidation/annotated-command/tests/src/ExampleAnnotatedCommand.php b/lib/composer/vendor/consolidation/annotated-command/tests/src/ExampleAnnotatedCommand.php index e114f8bea..6b4c6c5fc 100644 --- a/lib/composer/vendor/consolidation/annotated-command/tests/src/ExampleAnnotatedCommand.php +++ b/lib/composer/vendor/consolidation/annotated-command/tests/src/ExampleAnnotatedCommand.php @@ -19,12 +19,12 @@ class ExampleAnnotatedCommand extends AnnotatedCommand /** * Do the main function of the my:cat command. */ - public function myCat($one, $two = '', $flip = false) + public function myCat($one, $two = '', $multiple = [], $flip = false) { if ($flip) { - return "{$two}{$one}"; + return "{$two}{$one}" . implode('', array_reverse($multiple)); } - return "{$one}{$two}"; + return "{$one}{$two}" . implode('', $multiple); } /** @@ -37,6 +37,8 @@ public function myCat($one, $two = '', $flip = false) * @arg string $one The first parameter. * @arg string $two The other parameter. * @default $two '' + * @option array $multiple An array of values + * @default $multiple [] * @option boolean $flip Whether or not the second parameter should come first in the result. * @aliases c * @usage bet alpha --flip @@ -46,9 +48,10 @@ protected function execute(InputInterface $input, OutputInterface $output) { $one = $input->getArgument('one'); $two = $input->getArgument('two'); + $multiple = $input->getOption('multiple'); $flip = $input->getOption('flip'); - $result = $this->myCat($one, $two, $flip); + $result = $this->myCat($one, $two, $multiple, $flip); // We could also just use $output->writeln($result) here, // but calling processResults enables the use of output diff --git a/lib/composer/vendor/consolidation/annotated-command/tests/src/ExampleCommandFile.php b/lib/composer/vendor/consolidation/annotated-command/tests/src/ExampleCommandFile.php index 3c6d8a0d4..1a9afef5b 100644 --- a/lib/composer/vendor/consolidation/annotated-command/tests/src/ExampleCommandFile.php +++ b/lib/composer/vendor/consolidation/annotated-command/tests/src/ExampleCommandFile.php @@ -7,6 +7,7 @@ use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Event\ConsoleCommandEvent; use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Output\OutputInterface; /** @@ -32,6 +33,65 @@ public function setOutput($output) $this->output = $output; } + /** + * Import config from a config directory. + * + * @command config:import + * @param $label A config directory label (i.e. a key in \$config_directories array in settings.php). + * @interact-config-label + * @option preview Format for displaying proposed changes. Recognized values: list, diff. + * @option source An arbitrary directory that holds the configuration files. An alternative to label argument + * @option partial Allows for partial config imports from the source directory. Only updates and new configs will be processed with this flag (missing configs will not be deleted). + * @aliases cim,config-import + */ + public function import($label = null, $options = ['preview' => 'list', 'source' => InputOption::VALUE_REQUIRED, 'partial' => false]) + { + } + + /** + * Calculate the fibonacci sequence between two numbers. + * + * Graphic output will look like + * +----+---+-------------+ + * | | | | + * | |-+-| | + * |----+-+-+ | + * | | | + * | | | + * | | | + * +--------+-------------+ + * + * @param int $start Number to start from + * @param int $steps Number of steps to perform + * @param array $opts + * @option $graphic Display the sequence graphically using cube + * representation + */ + public function fibonacci($start, $steps, $opts = ['graphic' => false]) + { + } + + /** + * Code sniffer. + * + * Run the PHP Codesniffer on a file or directory. + * + * @param string $file + * A file or directory to analyze. + * @option $autofix Whether to run the automatic fixer or not. + * @option $strict Show warnings as well as errors. + * Default is to show only errors. + */ + public function sniff( + $file = 'src', + array $options = [ + 'autofix' => false, + 'strict' => false, + ] + ) { + return var_export($options, true); + } + /** * This is the my:cat command * @@ -46,7 +106,7 @@ public function setOutput($output) * Concatenate "alpha" and "bet". * @arbitrary This annotation is here merely as a marker used in testing. */ - public function myCat($one, $two = '', $options = ['flip' => false]) + public function myCat($one, $two = '', array $options = ['flip' => false]) { if ($options['flip']) { return "{$two}{$one}"; @@ -57,15 +117,23 @@ public function myCat($one, $two = '', $options = ['flip' => false]) /** * @command my:repeat */ - public function myRepeat($one, $two = '', $options = ['repeat' => 1]) + public function myRepeat($one, $two = '', array $options = ['repeat' => 1]) { return str_repeat("{$one}{$two}", $options['repeat']); } /** + * This is the my:join command + * + * This command will join its parameters together. It can also reverse and repeat its arguments. + * * @command my:join + * @usage a b + * Join a and b to produce "a,b" + * @usage + * Example with no parameters or options */ - public function myJoin(array $args, $options = ['flip' => false, 'repeat' => 1]) + public function myJoin(array $args, array $options = ['flip' => false, 'repeat' => 1]) { if ($options['flip']) { $args = array_reverse($args); @@ -90,6 +158,16 @@ public function commandWithNoOptions($one, $two = 'default') return "{$one}{$two}"; } + /** + * This command work with app's input and output + * + * @command command:with-io-parameters + */ + public function commandWithIOParameters(InputInterface $input, OutputInterface $output) + { + return $input->getFirstArgument(); + } + /** * This command has no arguments--only options * @@ -97,7 +175,7 @@ public function commandWithNoOptions($one, $two = 'default') * * @option silent Supress output. */ - public function commandWithNoArguments($opts = ['silent|s' => false]) + public function commandWithNoArguments(array $opts = ['silent|s' => false]) { if (!$opts['silent']) { return "Hello, world"; @@ -112,7 +190,7 @@ public function commandWithNoArguments($opts = ['silent|s' => false]) * @param $opts The options * @option silent|s Supress output. */ - public function shortcutOnAnnotation($opts = ['silent' => false]) + public function shortcutOnAnnotation(array $opts = ['silent' => false]) { if (!$opts['silent']) { return "Hello, world"; @@ -133,8 +211,10 @@ public function shortcutOnAnnotation($opts = ['silent' => false]) * @usage 2 2 --negate * Add two plus two and then negate. * @custom + * @dup one + * @dup two */ - public function testArithmatic($one, $two, $options = ['negate' => false]) + public function testArithmatic($one, $two = 2, array $options = ['negate' => false, 'unused' => 'bob']) { $result = $one + $two; if ($options['negate']) { @@ -246,6 +326,22 @@ public function alterMeToo() return "fantabulous"; } + /** + * @command test:replace-command + */ + public function testReplaceCommand($value) + { + $this->output->writeln($value); + } + + /** + * @hook replace-command test:replace-command + */ + public function hookTestReplaceCommandHook($value) + { + $this->output->writeln("bar"); + } + /** * @hook pre-command test:post-command */ @@ -348,4 +444,78 @@ public function defaults($one = null, $two = null) } return "nothing provided"; } + + /** + * @return string + */ + public function defaultOptionOne(array $options = ['foo' => '1']) + { + return "Foo is " . $options['foo']; + } + + /** + * @return string + */ + public function defaultOptionTwo(array $options = ['foo' => '2']) + { + return "Foo is " . $options['foo']; + } + + /** + * @return string + */ + public function defaultOptionNone(array $options = ['foo' => InputOption::VALUE_REQUIRED]) + { + return "Foo is " . $options['foo']; + } + + /** + * @return string + */ + public function defaultOptionalValue(array $options = ['foo' => InputOption::VALUE_OPTIONAL]) + { + return "Foo is " . var_export($options['foo'], true); + } + + /** + * @return string + */ + public function defaultOptionDefaultsToTrue(array $options = ['foo' => true]) + { + return "Foo is " . var_export($options['foo'], true); + } + + /** + * This is the test:required-array-option command + * + * This command will print all the valused of passed option + * + * @param array $opts + * @return string + */ + public function testRequiredArrayOption(array $opts = ['arr|a' => []]) + { + return implode(' ', $opts['arr']); + } + + /** + * This is the test:array-option command + * + * This command will print all the valused of passed option + * + * @param array $opts + * @return string + */ + public function testArrayOption(array $opts = ['arr|a' => ['1', '2', '3']]) + { + return implode(' ', $opts['arr']); + } + + /** + * @command global-options-only + */ + public function globalOptionsOnly($arg, array $options = []) + { + return "Arg is $arg, options[help] is " . var_export($options['help'], true) . "\n"; + } } diff --git a/lib/composer/vendor/consolidation/annotated-command/tests/src/InMemoryCacheStore.php b/lib/composer/vendor/consolidation/annotated-command/tests/src/InMemoryCacheStore.php new file mode 100644 index 000000000..134d87a09 --- /dev/null +++ b/lib/composer/vendor/consolidation/annotated-command/tests/src/InMemoryCacheStore.php @@ -0,0 +1,50 @@ +cache = []; + } + + /** + * Test for an entry from the cache + * @param string $key + * @return boolean + */ + public function has($key) + { + return array_key_exists($key, $this->cache); + } + + /** + * Get an entry from the cache + * @param string $key + * @return array + */ + public function get($key) + { + if (!$this->has($key)) { + return []; + } + return $this->cache[$key]; + } + + /** + * Store an entry in the cache + * @param string $key + * @param array $data + */ + public function set($key, $data) + { + $this->cache[$key] = $data; + } +} diff --git a/lib/composer/vendor/consolidation/annotated-command/tests/src/TestTerminal.php b/lib/composer/vendor/consolidation/annotated-command/tests/src/TestTerminal.php new file mode 100644 index 000000000..cfcbf9751 --- /dev/null +++ b/lib/composer/vendor/consolidation/annotated-command/tests/src/TestTerminal.php @@ -0,0 +1,22 @@ +width = $width; + } + + public function getWidth() + { + return $this->width; + } + + public function setWidth($width) + { + $this->width = $width; + } +} diff --git a/lib/composer/vendor/consolidation/annotated-command/tests/src/alpha/AlphaCommandFile.php b/lib/composer/vendor/consolidation/annotated-command/tests/src/alpha/AlphaCommandFile.php index a58817ba5..651b8533d 100644 --- a/lib/composer/vendor/consolidation/annotated-command/tests/src/alpha/AlphaCommandFile.php +++ b/lib/composer/vendor/consolidation/annotated-command/tests/src/alpha/AlphaCommandFile.php @@ -7,6 +7,11 @@ use Consolidation\AnnotatedCommand\AnnotationData; use Symfony\Component\Console\Input\InputOption; use Consolidation\AnnotatedCommand\CommandData; +use Consolidation\AnnotatedCommand\Events\CustomEventAwareInterface; +use Consolidation\AnnotatedCommand\Events\CustomEventAwareTrait; +use Symfony\Component\Console\Command\Command; + +use Consolidation\TestUtils\ExampleCommandFile as ExampleAliasedClass; /** * Test file used in the testCommandDiscovery() test. @@ -15,8 +20,10 @@ * 'src' directory, and 'alpha' is one of the search directories available * for searching. */ -class AlphaCommandFile +class AlphaCommandFile implements CustomEventAwareInterface { + use CustomEventAwareTrait; + /** * @command always:fail */ @@ -25,6 +32,11 @@ public function alwaysFail() return new CommandError('This command always fails.', 13); } + public static function ignoredStaticMethod() + { + return 'This method is static; it should not generate a command.'; + } + /** * @command simulated:status */ @@ -72,17 +84,52 @@ public function exampleMessage() * Test command with formatters * * @command example:table + * @param $unused An unused argument * @field-labels * first: I * second: II * third: III - * @usage example:table --format=yaml - * @usage example:table --format=csv + * @usage example:table --format=yml + * Show the example table in yml format. * @usage example:table --fields=first,third - * @usage example:table --fields=III,II - * @return \Consolidation\OutputFormatters\StructuredData\RowsOfFields + * Show only the first and third fields in the table. + * @usage example:table --fields=II,III + * Note that either the field ID or the visible field label may be used. + * @aliases extab + * @topics docs-tables + * @return \Consolidation\OutputFormatters\StructuredData\RowsOfFields Fully-qualified class name */ - public function exampleTable($options = ['format' => 'table', 'fields' => '']) + public function exampleTable($unused = '', $options = ['format' => 'table', 'fields' => '']) + { + $outputData = [ + [ 'first' => 'One', 'second' => 'Two', 'third' => 'Three' ], + [ 'first' => 'Eins', 'second' => 'Zwei', 'third' => 'Drei' ], + [ 'first' => 'Ichi', 'second' => 'Ni', 'third' => 'San' ], + [ 'first' => 'Uno', 'second' => 'Dos', 'third' => 'Tres' ], + ]; + return new RowsOfFields($outputData); + } + + /** + * Test command with formatters using a short classname in @return + * + * @command example:table2 + * @param $unused An unused argument + * @field-labels + * first: I + * second: II + * third: III + * @usage example:table --format=yml + * Show the example table in yml format. + * @usage example:table --fields=first,third + * Show only the first and third fields in the table. + * @usage example:table --fields=II,III + * Note that either the field ID or the visible field label may be used. + * @aliases extab + * @topics docs-tables + * @return RowsOfFields Short class names are converted to fqcns + */ + public function exampleTableTwo($unused = '', $options = ['format' => 'table', 'fields' => '']) { $outputData = [ [ 'first' => 'One', 'second' => 'Two', 'third' => 'Three' ], @@ -117,7 +164,7 @@ public function exampleWrap() /** * @hook option example:table */ - public function additionalOptionForExampleTable($command, $annotationData) + public function additionalOptionForExampleTable(Command $command, AnnotationData $annotationData) { $command->addOption( 'dynamic', @@ -240,4 +287,39 @@ public function getLost() { return 'very lost'; } + + /** + * This command uses a custom event 'my-event' to collect data. Note that + * the event handlers will not be found unless the hook manager is + * injected into this command handler object via `setHookManager()` + * (defined in CustomEventAwareTrait). + * + * @command use:event + */ + public function useEvent() + { + $myEventHandlers = $this->getCustomEventHandlers('my-event'); + $result = []; + foreach ($myEventHandlers as $handler) { + $result[] = $handler(); + } + sort($result); + return implode(',', $result); + } + + /** + * @hook on-event my-event + */ + public function hookOne() + { + return 'one'; + } + + /** + * @hook on-event my-event + */ + public function hookTwo() + { + return 'two'; + } } diff --git a/lib/composer/vendor/consolidation/annotated-command/tests/testAnnotatedCommand.php b/lib/composer/vendor/consolidation/annotated-command/tests/testAnnotatedCommand.php index 098be1384..887300ed7 100644 --- a/lib/composer/vendor/consolidation/annotated-command/tests/testAnnotatedCommand.php +++ b/lib/composer/vendor/consolidation/annotated-command/tests/testAnnotatedCommand.php @@ -20,10 +20,10 @@ function testMyCatCommand() $this->assertEquals("This command will concatenate two parameters. If the --flip flag\nis provided, then the result is the concatenation of two and one.", $command->getHelp()); $this->assertEquals('c', implode(',', $command->getAliases())); // Symfony Console composes the synopsis; perhaps we should not test it. Remove if this gives false failures. - $this->assertEquals('my:cat [--flip] [--] []', $command->getSynopsis()); + $this->assertEquals('my:cat [--multiple MULTIPLE] [--flip] [--] []', $command->getSynopsis()); $this->assertEquals('my:cat bet alpha --flip', implode(',', $command->getUsages())); - $input = new StringInput('my:cat bet alpha --flip'); + $input = new StringInput('my:cat b alpha --multiple=t --multiple=e --flip'); $this->assertRunCommandViaApplicationEquals($command, $input, 'alphabet'); } diff --git a/lib/composer/vendor/consolidation/annotated-command/tests/testAnnotatedCommandFactory.php b/lib/composer/vendor/consolidation/annotated-command/tests/testAnnotatedCommandFactory.php index 1a0755d7d..551721e81 100644 --- a/lib/composer/vendor/consolidation/annotated-command/tests/testAnnotatedCommandFactory.php +++ b/lib/composer/vendor/consolidation/annotated-command/tests/testAnnotatedCommandFactory.php @@ -10,6 +10,7 @@ use Symfony\Component\Console\Application; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Input\ArgvInput; use Symfony\Component\Console\Input\StringInput; use Symfony\Component\Console\Output\BufferedOutput; use Symfony\Component\Console\Output\OutputInterface; @@ -19,6 +20,207 @@ class AnnotatedCommandFactoryTests extends \PHPUnit_Framework_TestCase protected $commandFileInstance; protected $commandFactory; + function testFibonacci() + { + $this->commandFileInstance = new \Consolidation\TestUtils\ExampleCommandFile; + $this->commandFactory = new AnnotatedCommandFactory(); + $commandInfo = $this->commandFactory->createCommandInfo($this->commandFileInstance, 'fibonacci'); + + $command = $this->commandFactory->createCommand($commandInfo, $this->commandFileInstance); + $this->assertEquals('fibonacci', $command->getName()); + $this->assertEquals('fibonacci [--graphic] [--] ', $command->getSynopsis()); + $this->assertEquals('Calculate the fibonacci sequence between two numbers.', $command->getDescription()); + $this->assertEquals("Graphic output will look like ++----+---+-------------+ +| | | | +| |-+-| | +|----+-+-+ | +| | | +| | | +| | | ++--------+-------------+", $command->getHelp()); + + $this->assertInstanceOf('\Symfony\Component\Console\Command\Command', $command); + + $input = new StringInput('help fibonacci'); + $this->assertRunCommandViaApplicationContains($command, $input, ['Display the sequence graphically using cube representation']); + } + + function testSniff() + { + $this->commandFileInstance = new \Consolidation\TestUtils\ExampleCommandFile; + $this->commandFactory = new AnnotatedCommandFactory(); + $commandInfo = $this->commandFactory->createCommandInfo($this->commandFileInstance, 'sniff'); + + $command = $this->commandFactory->createCommand($commandInfo, $this->commandFileInstance); + $this->assertEquals('sniff', $command->getName()); + $this->assertEquals('sniff [--autofix] [--strict] [--] []', $command->getSynopsis()); + + $this->assertInstanceOf('\Symfony\Component\Console\Command\Command', $command); + + $input = new StringInput('help sniff'); + $this->assertRunCommandViaApplicationContains($command, $input, ['A file or directory to analyze.']); + + $input = new StringInput('sniff --autofix --strict -- foo'); + $this->assertRunCommandViaApplicationContains($command, $input, ["'autofix' => true", + "'strict' => true"]); + } + + function testOptionDefaultValue() + { + $this->commandFileInstance = new \Consolidation\TestUtils\ExampleCommandFile; + $this->commandFactory = new AnnotatedCommandFactory(); + $commandInfo = $this->commandFactory->createCommandInfo($this->commandFileInstance, 'defaultOptionOne'); + + $command = $this->commandFactory->createCommand($commandInfo, $this->commandFileInstance); + $this->assertEquals('default:option-one', $command->getName()); + $this->assertEquals('default:option-one [--foo [FOO]]', $command->getSynopsis()); + + $this->assertInstanceOf('\Symfony\Component\Console\Command\Command', $command); + + $input = new StringInput('default:option-one'); + $this->assertRunCommandViaApplicationEquals($command, $input, 'Foo is 1'); + + $commandInfo = $this->commandFactory->createCommandInfo($this->commandFileInstance, 'defaultOptionTwo'); + + $command = $this->commandFactory->createCommand($commandInfo, $this->commandFileInstance); + + $command = $this->commandFactory->createCommand($commandInfo, $this->commandFileInstance); + $this->assertEquals('default:option-two', $command->getName()); + $this->assertEquals('default:option-two [--foo [FOO]]', $command->getSynopsis()); + + $input = new StringInput('default:option-two'); + $this->assertRunCommandViaApplicationEquals($command, $input, 'Foo is 2'); + + $commandInfo = $this->commandFactory->createCommandInfo($this->commandFileInstance, 'defaultOptionNone'); + + $command = $this->commandFactory->createCommand($commandInfo, $this->commandFileInstance); + + $command = $this->commandFactory->createCommand($commandInfo, $this->commandFileInstance); + $this->assertEquals('default:option-none', $command->getName()); + $this->assertEquals('default:option-none [--foo FOO]', $command->getSynopsis()); + + // Skip failing test until Symfony is fixed. + $this->markTestSkipped('Symfony Console 3.2.5 and 3.2.6 do not handle default options with required values correctly.'); + + $input = new StringInput('default:option-none --foo'); + $this->assertRunCommandViaApplicationContains($command, $input, ['The "--foo" option requires a value.'], 1); + } + + function testGlobalOptionsOnly() + { + $this->commandFileInstance = new \Consolidation\TestUtils\ExampleCommandFile; + $this->commandFactory = new AnnotatedCommandFactory(); + $commandInfo = $this->commandFactory->createCommandInfo($this->commandFileInstance, 'globalOptionsOnly'); + + $command = $this->commandFactory->createCommand($commandInfo, $this->commandFileInstance); + + $input = new StringInput('global-options-only test'); + $this->assertRunCommandViaApplicationEquals($command, $input, "Arg is test, options[help] is false"); + } + + function testOptionWithOptionalValue() + { + $this->commandFileInstance = new \Consolidation\TestUtils\ExampleCommandFile; + $this->commandFactory = new AnnotatedCommandFactory(); + + $commandInfo = $this->commandFactory->createCommandInfo($this->commandFileInstance, 'defaultOptionalValue'); + + $command = $this->commandFactory->createCommand($commandInfo, $this->commandFileInstance); + + // Test to see if we can differentiate between a missing option, and + // an option that has no value at all. + $input = new StringInput('default:optional-value --foo=bar'); + $this->assertRunCommandViaApplicationEquals($command, $input, "Foo is 'bar'"); + + $input = new StringInput('default:optional-value --foo'); + $this->assertRunCommandViaApplicationEquals($command, $input, 'Foo is true'); + + $input = new StringInput('default:optional-value'); + $this->assertRunCommandViaApplicationEquals($command, $input, 'Foo is NULL'); + } + + function testOptionThatDefaultsToTrue() + { + $this->commandFileInstance = new \Consolidation\TestUtils\ExampleCommandFile; + $this->commandFactory = new AnnotatedCommandFactory(); + + $commandInfo = $this->commandFactory->createCommandInfo($this->commandFileInstance, 'defaultOptionDefaultsToTrue'); + + $command = $this->commandFactory->createCommand($commandInfo, $this->commandFileInstance); + + // Test to see if we can differentiate between a missing option, and + // an option that has no value at all. + $input = new StringInput('default:option-defaults-to-true --foo=bar'); + $this->assertRunCommandViaApplicationEquals($command, $input, "Foo is 'bar'"); + + $input = new StringInput('default:option-defaults-to-true --foo'); + $this->assertRunCommandViaApplicationEquals($command, $input, 'Foo is true'); + + $input = new StringInput('default:option-defaults-to-true'); + $this->assertRunCommandViaApplicationEquals($command, $input, 'Foo is true'); + + $input = new StringInput('help default:option-defaults-to-true'); + $this->assertRunCommandViaApplicationContains( + $command, + $input, + [ + '--no-foo', + 'Negate --foo option', + ] + ); + $input = new StringInput('default:option-defaults-to-true --no-foo'); + $this->assertRunCommandViaApplicationEquals($command, $input, 'Foo is false'); + } + /** + * Test CommandInfo command caching. + * + * Sequence: + * - Create all of the command info objects from one class, caching them. + * - Change the method name of one of the items in the cache to a non-existent method + * - Restore all of the cached commandinfo objects + * - Ensure that the non-existent method cached commandinfo was not created + * - Ensure that the now-missing cached commandinfo was still created + * + * This tests both save/restore, plus adding a new command method to + * a class, and removing a command method from a class. + */ + function testAnnotatedCommandCache() + { + $testCacheStore = new \Consolidation\TestUtils\InMemoryCacheStore(); + + $this->commandFileInstance = new \Consolidation\TestUtils\ExampleCommandFile; + $this->commandFactory = new AnnotatedCommandFactory(); + $this->commandFactory->setDataStore($testCacheStore); + + // Make commandInfo objects for every command in the test commandfile. + // These will also be stored in our cache. + $commandInfoList = $this->commandFactory->getCommandInfoListFromClass($this->commandFileInstance); + + $cachedClassName = get_class($this->commandFileInstance); + + $this->assertTrue($testCacheStore->has($cachedClassName)); + + $cachedData = $testCacheStore->get($cachedClassName); + $this->assertFalse(empty($cachedData)); + $this->assertTrue(array_key_exists('testArithmatic', $cachedData)); + + $alterCommandInfoCache = $cachedData['testArithmatic']; + unset($cachedData['testArithmatic']); + $alterCommandInfoCache['method_name'] = 'nonExistentMethod'; + $cachedData[$alterCommandInfoCache['method_name']] = $alterCommandInfoCache; + + $testCacheStore->set($cachedClassName, $cachedData); + + $restoredCommandInfoList = $this->commandFactory->getCommandInfoListFromClass($this->commandFileInstance); + + $rebuiltCachedData = $testCacheStore->get($cachedClassName); + + $this->assertFalse(empty($rebuiltCachedData)); + $this->assertTrue(array_key_exists('testArithmatic', $rebuiltCachedData)); + $this->assertFalse(array_key_exists('nonExistentMethod', $rebuiltCachedData)); + } + /** * Test CommandInfo command annotation parsing. */ @@ -35,7 +237,7 @@ function testAnnotatedCommandCreation() $this->assertEquals('This is the test:arithmatic command', $command->getDescription()); $this->assertEquals("This command will add one and two. If the --negate flag\nis provided, then the result is negated.", $command->getHelp()); $this->assertEquals('arithmatic', implode(',', $command->getAliases())); - $this->assertEquals('test:arithmatic [--negate] [--] ', $command->getSynopsis()); + $this->assertEquals('test:arithmatic [--negate] [--unused [UNUSED]] [--] []', $command->getSynopsis()); $this->assertEquals('test:arithmatic 2 2 --negate', implode(',', $command->getUsages())); $input = new StringInput('arithmatic 2 3 --negate'); @@ -86,6 +288,29 @@ function testMyCatCommand() $this->assertRunCommandViaApplicationEquals($command, $input, 'alphabet'); } + function testJoinCommandHelp() + { + $this->commandFileInstance = new \Consolidation\TestUtils\ExampleCommandFile; + $this->commandFactory = new AnnotatedCommandFactory(); + $commandInfo = $this->commandFactory->createCommandInfo($this->commandFileInstance, 'myJoin'); + + $command = $this->commandFactory->createCommand($commandInfo, $this->commandFileInstance); + + $this->assertInstanceOf('\Symfony\Component\Console\Command\Command', $command); + $this->assertEquals('my:join', $command->getName()); + $this->assertEquals('This is the my:join command', $command->getDescription()); + $this->assertEquals("This command will join its parameters together. It can also reverse and repeat its arguments.", $command->getHelp()); + $this->assertEquals('my:join [--flip] [--repeat [REPEAT]] [--] []...', $command->getSynopsis()); + + // TODO: Extra whitespace character if there are no options et. al. in the + // usage. This is uncommon, and the defect is invisible. Maybe find it someday. + $actualUsages = implode(',', $command->getUsages()); + $this->assertEquals('my:join a b,my:join ', $actualUsages); + + $input = new StringInput('my:join bet alpha --flip --repeat=2'); + $this->assertRunCommandViaApplicationEquals($command, $input, 'alphabetalphabet'); + } + function testDefaultsCommand() { $this->commandFileInstance = new \Consolidation\TestUtils\ExampleCommandFile; @@ -126,6 +351,34 @@ function testCommandWithNoOptions() $input = new StringInput('command:with-no-options something'); $this->assertRunCommandViaApplicationEquals($command, $input, 'somethingdefault'); + + $input = new StringInput('help command:with-no-options something'); + $this->assertRunCommandViaApplicationContains( + $command, + $input, + [ + 'The first parameter.', + 'The other parameter.', + ] + ); + } + + function testCommandWithIOParameters() + { + $this->commandFileInstance = new \Consolidation\TestUtils\ExampleCommandFile; + $this->commandFactory = new AnnotatedCommandFactory(); + $commandInfo = $this->commandFactory->createCommandInfo($this->commandFileInstance, 'commandWithIOParameters'); + + $command = $this->commandFactory->createCommand($commandInfo, $this->commandFileInstance); + + $this->assertInstanceOf('\Symfony\Component\Console\Command\Command', $command); + $this->assertEquals('command:with-io-parameters', $command->getName()); + $this->assertEquals("This command work with app's input and output", $command->getDescription()); + $this->assertEquals('', $command->getHelp()); + $this->assertEquals('command:with-io-parameters', $command->getSynopsis()); + + $input = new StringInput('command:with-io-parameters'); + $this->assertRunCommandViaApplicationEquals($command, $input, 'command:with-io-parameters'); } function testCommandWithNoArguments() @@ -237,6 +490,41 @@ function testPassThroughWithInputManipulation() $this->assertRunCommandViaApplicationEquals($command, $input, 'betxyzbetxyz'); } + function testRequiredArrayOption() + { + $this->commandFileInstance = new \Consolidation\TestUtils\ExampleCommandFile; + $this->commandFactory = new AnnotatedCommandFactory(); + $commandInfo = $this->commandFactory->createCommandInfo($this->commandFileInstance, 'testRequiredArrayOption'); + + $command = $this->commandFactory->createCommand($commandInfo, $this->commandFileInstance); + $this->assertEquals('test:required-array-option [-a|--arr ARR]', $command->getSynopsis()); + + $input = new StringInput('test:required-array-option --arr=1 --arr=2 --arr=3'); + $this->assertRunCommandViaApplicationEquals($command, $input, '1 2 3'); + + $input = new StringInput('test:required-array-option -a 1 -a 2 -a 3'); + $this->assertRunCommandViaApplicationEquals($command, $input, '1 2 3'); + } + + function testArrayOption() + { + $this->commandFileInstance = new \Consolidation\TestUtils\ExampleCommandFile; + $this->commandFactory = new AnnotatedCommandFactory(); + $commandInfo = $this->commandFactory->createCommandInfo($this->commandFileInstance, 'testArrayOption'); + + $command = $this->commandFactory->createCommand($commandInfo, $this->commandFileInstance); + $this->assertEquals('test:array-option [-a|--arr [ARR]]', $command->getSynopsis()); + + $input = new StringInput('test:array-option'); + $this->assertRunCommandViaApplicationEquals($command, $input, '1 2 3'); + + $input = new StringInput('test:array-option --arr=a --arr=b --arr=c'); + $this->assertRunCommandViaApplicationEquals($command, $input, 'a b c'); + + $input = new StringInput('test:array-option -a a'); + $this->assertRunCommandViaApplicationEquals($command, $input, 'a'); + } + function testHookedCommand() { $this->commandFileInstance = new \Consolidation\TestUtils\ExampleCommandFile(); @@ -264,6 +552,33 @@ function testHookedCommand() $input = new StringInput('test:hook bar'); $this->assertRunCommandViaApplicationEquals($command, $input, '<[bar]>'); + + $input = new StringInput('list --raw'); + $this->assertRunCommandViaApplicationContains($command, $input, ['This command wraps its parameter in []; its alter hook then wraps the result in .']); + } + + function testReplaceCommandHook(){ + $this->commandFileInstance = new \Consolidation\TestUtils\ExampleCommandFile(); + $this->commandFactory = new AnnotatedCommandFactory(); + + $hookInfo = $this->commandFactory->createCommandInfo($this->commandFileInstance, 'hookTestReplaceCommandHook'); + + $this->assertTrue($hookInfo->hasAnnotation('hook')); + $this->assertEquals('replace-command test:replace-command', $hookInfo->getAnnotation('hook')); + + $this->commandFactory->registerCommandHook($hookInfo, $this->commandFileInstance); + + $hookCallback = $this->commandFactory->hookManager()->get('test:replace-command', [HookManager::REPLACE_COMMAND_HOOK]); + $this->assertTrue($hookCallback != null); + $this->assertEquals(1, count($hookCallback)); + $this->assertEquals(2, count($hookCallback[0])); + $this->assertTrue(is_callable($hookCallback[0])); + $this->assertEquals('hookTestReplaceCommandHook', $hookCallback[0][1]); + + $input = new StringInput('test:replace-command foo'); + $commandInfo = $this->commandFactory->createCommandInfo($this->commandFileInstance, 'testReplaceCommand'); + $command = $this->commandFactory->createCommand($commandInfo, $this->commandFileInstance); + $this->assertRunCommandViaApplicationEquals($command, $input, "bar", 0); } function testPostCommandCalledAfterCommand() @@ -338,6 +653,22 @@ function testHookAllCommands() $this->assertRunCommandViaApplicationEquals($command, $input, '*** bar ***'); } + function testDoubleDashWithVersion() + { + $this->commandFileInstance = new \Consolidation\TestUtils\ExampleHookAllCommandFile(); + $this->commandFactory = new AnnotatedCommandFactory(); + $commandInfo = $this->commandFactory->createCommandInfo($this->commandFileInstance, 'doCat'); + $command = $this->commandFactory->createCommand($commandInfo, $this->commandFileInstance); + + $input = new ArgvInput(['placeholder', 'do:cat', 'one', '--', '--version']); + list($statusCode, $commandOutput) = $this->runCommandViaApplication($command, $input); + + if ($commandOutput == 'TestApplication version 0.0.0') { + $this->markTestSkipped('Symfony/Console 2.x does not respect -- with --version'); + } + $this->assertEquals('one--version', $commandOutput); + } + function testAnnotatedHookedCommand() { $this->commandFileInstance = new \Consolidation\TestUtils\ExampleCommandFile(); @@ -404,7 +735,7 @@ function testHookHasCommandAnnotation() $annotationData = $commandInfo->getRawAnnotations(); $this->assertEquals('addmycommandname', implode(',', $annotationData->keys())); $annotationData = $commandInfo->getAnnotations(); - $this->assertEquals('addmycommandname,command', implode(',', $annotationData->keys())); + $this->assertEquals('addmycommandname,command,_path,_classname', implode(',', $annotationData->keys())); $command = $this->commandFactory->createCommand($commandInfo, $this->commandFileInstance); @@ -415,7 +746,6 @@ function testHookHasCommandAnnotation() $this->assertRunCommandViaApplicationEquals($command, $input, 'fantabulous from alter:me-too'); } - function testHookedCommandWithHookAddedLater() { $this->commandFileInstance = new \Consolidation\TestUtils\ExampleCommandFile(); @@ -612,7 +942,25 @@ function callProtected($object, $method, $args = []) return $r->invokeArgs($object, $args); } + function assertRunCommandViaApplicationContains($command, $input, $containsList, $expectedStatusCode = 0) + { + list($statusCode, $commandOutput) = $this->runCommandViaApplication($command, $input); + + foreach ($containsList as $contains) { + $this->assertContains($contains, $commandOutput); + } + $this->assertEquals($expectedStatusCode, $statusCode); + } + function assertRunCommandViaApplicationEquals($command, $input, $expectedOutput, $expectedStatusCode = 0) + { + list($statusCode, $commandOutput) = $this->runCommandViaApplication($command, $input); + + $this->assertEquals($expectedOutput, $commandOutput); + $this->assertEquals($expectedStatusCode, $statusCode); + } + + function runCommandViaApplication($command, $input) { $output = new BufferedOutput(); if ($this->commandFileInstance && method_exists($this->commandFileInstance, 'setOutput')) { @@ -624,16 +972,15 @@ function assertRunCommandViaApplicationEquals($command, $input, $expectedOutput, $eventDispatcher = new \Symfony\Component\EventDispatcher\EventDispatcher(); $eventDispatcher->addSubscriber($this->commandFactory->commandProcessor()->hookManager()); - $eventDispatcher->addSubscriber($alterOptionsEventManager); + $this->commandFactory->commandProcessor()->hookManager()->addCommandEvent($alterOptionsEventManager); $application->setDispatcher($eventDispatcher); $application->setAutoExit(false); $application->add($command); $statusCode = $application->run($input, $output); - $commandOutput = trim($output->fetch()); + $commandOutput = trim(str_replace("\r", '', $output->fetch())); - $this->assertEquals($expectedOutput, $commandOutput); - $this->assertEquals($expectedStatusCode, $statusCode); + return [$statusCode, $commandOutput]; } } diff --git a/lib/composer/vendor/consolidation/annotated-command/tests/testCommandInfo.php b/lib/composer/vendor/consolidation/annotated-command/tests/testCommandInfo.php index 29fb2ebfc..685474143 100644 --- a/lib/composer/vendor/consolidation/annotated-command/tests/testCommandInfo.php +++ b/lib/composer/vendor/consolidation/annotated-command/tests/testCommandInfo.php @@ -2,6 +2,8 @@ namespace Consolidation\AnnotatedCommand; use Consolidation\AnnotatedCommand\Parser\CommandInfo; +use Consolidation\AnnotatedCommand\Parser\CommandInfoSerializer; +use Consolidation\AnnotatedCommand\Parser\CommandInfoDeserializer; class CommandInfoTests extends \PHPUnit_Framework_TestCase { @@ -22,8 +24,31 @@ function flattenArray($actualValue) */ function testParsing() { - $commandInfo = new CommandInfo('\Consolidation\TestUtils\ExampleCommandFile', 'testArithmatic'); + $commandInfo = CommandInfo::create('\Consolidation\TestUtils\ExampleCommandFile', 'testArithmatic'); + $this->assertCommandInfoIsAsExpected($commandInfo); + $serializer = new CommandInfoSerializer(); + $serialized = $serializer->serialize($commandInfo); + + $deserializer = new CommandInfoDeserializer(); + + $deserializedCommandInfo = $deserializer->deserialize($serialized); + $this->assertCommandInfoIsAsExpected($deserializedCommandInfo); + } + + function testWithConfigImport() + { + $commandInfo = CommandInfo::create('\Consolidation\TestUtils\ExampleCommandFile', 'import'); + $this->assertEquals('config:import', $commandInfo->getName()); + + $this->assertEquals( + 'A config directory label (i.e. a key in \$config_directories array in settings.php).', + $commandInfo->arguments()->getDescription('label') + ); + } + + function assertCommandInfoIsAsExpected($commandInfo) + { $this->assertEquals('test:arithmatic', $commandInfo->getName()); $this->assertEquals( 'This is the test:arithmatic command', @@ -46,15 +71,31 @@ function testParsing() 'The other number to add.', $commandInfo->arguments()->getDescription('two') ); + $this->assertEquals( + '2', + $commandInfo->arguments()->get('two') + ); $this->assertEquals( 'Whether or not the result should be negated.', $commandInfo->options()->getDescription('negate') ); + $this->assertEquals( + 'bob', + $commandInfo->options()->get('unused') + ); + $this->assertEquals( + 'one,two', + $commandInfo->getAnnotation('dup') + ); + $this->assertEquals( + ['one','two'], + $commandInfo->getAnnotationList('dup') + ); } function testReturnValue() { - $commandInfo = new CommandInfo('\Consolidation\TestUtils\alpha\AlphaCommandFile', 'exampleTable'); + $commandInfo = CommandInfo::create('\Consolidation\TestUtils\alpha\AlphaCommandFile', 'exampleTable'); $this->assertEquals('example:table', $commandInfo->getName()); $this->assertEquals('\Consolidation\OutputFormatters\StructuredData\RowsOfFields', $commandInfo->getReturnType()); } diff --git a/lib/composer/vendor/consolidation/annotated-command/tests/testFullStack.php b/lib/composer/vendor/consolidation/annotated-command/tests/testFullStack.php index 8f3e10ad5..5fb372197 100644 --- a/lib/composer/vendor/consolidation/annotated-command/tests/testFullStack.php +++ b/lib/composer/vendor/consolidation/annotated-command/tests/testFullStack.php @@ -13,6 +13,7 @@ use Consolidation\AnnotatedCommand\Options\AlterOptionsCommandEvent; use Consolidation\AnnotatedCommand\Parser\CommandInfo; use Consolidation\OutputFormatters\FormatterManager; +use Consolidation\TestUtils\TestTerminal; use Symfony\Component\Console\Application; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputInterface; @@ -21,6 +22,8 @@ use Symfony\Component\Console\Output\OutputInterface; use Consolidation\TestUtils\ApplicationWithTerminalWidth; use Consolidation\AnnotatedCommand\Options\PrepareTerminalWidthOption; +use Consolidation\AnnotatedCommand\Events\CustomEventAwareInterface; +use Consolidation\AnnotatedCommand\Events\CustomEventAwareTrait; /** * Do a test of all of the classes in this project, top-to-bottom. @@ -36,7 +39,7 @@ function setup() { $alterOptionsEventManager = new AlterOptionsCommandEvent($this->application); $eventDispatcher = new \Symfony\Component\EventDispatcher\EventDispatcher(); $eventDispatcher->addSubscriber($this->commandFactory->commandProcessor()->hookManager()); - $eventDispatcher->addSubscriber($alterOptionsEventManager); + $this->commandFactory->commandProcessor()->hookManager()->addCommandEvent($alterOptionsEventManager); $this->application->setDispatcher($eventDispatcher); $this->application->setAutoExit(false); } @@ -46,7 +49,7 @@ function testValidFormats() $formatter = new FormatterManager(); $formatter->addDefaultFormatters(); $formatter->addDefaultSimplifiers(); - $commandInfo = new CommandInfo('\Consolidation\TestUtils\alpha\AlphaCommandFile', 'exampleTable'); + $commandInfo = CommandInfo::create('\Consolidation\TestUtils\alpha\AlphaCommandFile', 'exampleTable'); $this->assertEquals('example:table', $commandInfo->getName()); $this->assertEquals('\Consolidation\OutputFormatters\StructuredData\RowsOfFields', $commandInfo->getReturnType()); } @@ -59,7 +62,13 @@ function testAutomaticOptions() $formatter->addDefaultSimplifiers(); $this->commandFactory->commandProcessor()->setFormatterManager($formatter); - $commandInfo = $this->commandFactory->createCommandInfo($commandFileInstance, 'exampleTable'); + $this->assertAutomaticOptionsForCommand($commandFileInstance, 'exampleTable', 'example:table'); + $this->assertAutomaticOptionsForCommand($commandFileInstance, 'exampleTableTwo', 'example:table2'); + } + + function assertAutomaticOptionsForCommand($commandFileInstance, $functionName, $commandName) + { + $commandInfo = $this->commandFactory->createCommandInfo($commandFileInstance, $functionName); $command = $this->commandFactory->createCommand($commandInfo, $commandFileInstance); $this->application->add($command); @@ -69,7 +78,7 @@ function testAutomaticOptions() '--format[=FORMAT] Format the result data. Available formats: csv,json,list,php,print-r,sections,string,table,tsv,var_export,xml,yaml [default: "table"]', '--fields[=FIELDS] Available fields: I (first), II (second), III (third) [default: ""]', ]; - $this->assertRunCommandViaApplicationContains('help example:table', $containsList); + $this->assertRunCommandViaApplicationContains('help ' . $commandName, $containsList); } function testCommandsAndHooks() @@ -92,18 +101,24 @@ function testCommandsAndHooks() $formatter->addDefaultSimplifiers(); $hookManager = new HookManager(); $terminalWidthOption = new PrepareTerminalWidthOption(); + $terminalWidthOption->enableWrap(true); $terminalWidthOption->setApplication($this->application); + $testTerminal = new TestTerminal(0); + $terminalWidthOption->setTerminal($testTerminal); $commandProcessor = new CommandProcessor($hookManager); $commandProcessor->setFormatterManager($formatter); $commandProcessor->addPrepareFormatter($terminalWidthOption); // Create a new factory, and load all of the files - // discovered above. The command factory class is - // tested in isolation in testAnnotatedCommandFactory.php, - // but this is the only place where + // discovered above. $factory = new AnnotatedCommandFactory(); $factory->setCommandProcessor($commandProcessor); - // $factory->addListener(...); + // Add a listener to configure our command handler object + $factory->addListernerCallback(function($command) use($hookManager) { + if ($command instanceof CustomEventAwareInterface) { + $command->setHookManager($hookManager); + } + } ); $factory->setIncludeAllPublicMethods(false); $this->addDiscoveredCommands($factory, $commandFiles); @@ -112,6 +127,12 @@ function testCommandsAndHooks() $this->assertTrue($this->application->has('example:table')); $this->assertFalse($this->application->has('without:annotations')); + // Run the use:event command that defines a custom event, my-event. + $this->assertRunCommandViaApplicationEquals('use:event', 'one,two'); + // Watch as we dynamically add a custom event to the hook manager to change the command results: + $hookManager->add(function () { return 'three'; }, HookManager::ON_EVENT, 'my-event'); + $this->assertRunCommandViaApplicationEquals('use:event', 'one,three,two'); + // Fetch a reference to the 'example:table' command and test its valid format types $exampleTableCommand = $this->application->find('example:table'); $returnType = $exampleTableCommand->getReturnType(); @@ -238,20 +259,21 @@ function testCommandsAndHooks() $this->assertRunCommandViaApplicationEquals('example:wrap', $expectedUnwrappedOutput); $expectedWrappedOutput = <<application->setWidthAndHeight(42, 24); + $testTerminal->setWidth(42); $this->assertRunCommandViaApplicationEquals('example:wrap', $expectedWrappedOutput); } @@ -333,7 +355,7 @@ function testCommandsAndHooksWithBetaFolder() $allRegisteredHooks = $hookManager->getAllHooks(); $registeredHookNames = array_keys($allRegisteredHooks); sort($registeredHookNames); - $this->assertEquals('*,example:table', implode(',', $registeredHookNames)); + $this->assertEquals('*,example:table,my-event', implode(',', $registeredHookNames)); $allHooksForExampleTable = $allRegisteredHooks['example:table']; $allHookPhasesForExampleTable = array_keys($allHooksForExampleTable); sort($allHookPhasesForExampleTable); @@ -443,7 +465,7 @@ function assertRunCommandViaApplicationContains($cmd, $containsList, $doesNotCon function simplifyWhitespace($data) { - return trim(preg_replace('#[ \t]+$#m', '', $data)); + return trim(preg_replace('#\s+$#m', '', $data)); } function callProtected($object, $method, $args = []) diff --git a/lib/composer/vendor/consolidation/annotated-command/tests/testHelp.php b/lib/composer/vendor/consolidation/annotated-command/tests/testHelp.php new file mode 100644 index 000000000..e589861b6 --- /dev/null +++ b/lib/composer/vendor/consolidation/annotated-command/tests/testHelp.php @@ -0,0 +1,313 @@ +application = new ApplicationWithTerminalWidth('TestApplication', '0.0.0'); + $this->commandFactory = new AnnotatedCommandFactory(); + // $factory->addListener(...); + $alterOptionsEventManager = new AlterOptionsCommandEvent($this->application); + $eventDispatcher = new \Symfony\Component\EventDispatcher\EventDispatcher(); + $eventDispatcher->addSubscriber($this->commandFactory->commandProcessor()->hookManager()); + $this->commandFactory->commandProcessor()->hookManager()->addCommandEvent($alterOptionsEventManager); + $this->application->setDispatcher($eventDispatcher); + $this->application->setAutoExit(false); + + $discovery = new CommandFileDiscovery(); + $discovery + ->setSearchPattern('*CommandFile.php') + ->setIncludeFilesAtBase(false) + ->setSearchLocations(['alpha']); + + chdir(__DIR__); + $commandFiles = $discovery->discover('.', '\Consolidation\TestUtils'); + + $formatter = new FormatterManager(); + $formatter->addDefaultFormatters(); + $formatter->addDefaultSimplifiers(); + $terminalWidthOption = new PrepareTerminalWidthOption(); + $terminalWidthOption->setApplication($this->application); + $this->commandFactory->commandProcessor()->setFormatterManager($formatter); + $this->commandFactory->commandProcessor()->addPrepareFormatter($terminalWidthOption); + + $this->commandFactory->setIncludeAllPublicMethods(false); + $this->addDiscoveredCommands($this->commandFactory, $commandFiles); + + $helpCommandfile = new HelpCommand($this->application); + $commandList = $this->commandFactory->createCommandsFromClass($helpCommandfile); + foreach ($commandList as $command) { + $this->application->add($command); + } + } + + public function addDiscoveredCommands($factory, $commandFiles) { + foreach ($commandFiles as $path => $commandClass) { + $this->assertFileExists($path); + if (!class_exists($commandClass)) { + include $path; + } + $commandInstance = new $commandClass(); + $commandList = $factory->createCommandsFromClass($commandInstance); + foreach ($commandList as $command) { + $this->application->add($command); + } + } + } + + function assertRunCommandViaApplicationEquals($cmd, $expectedOutput, $expectedStatusCode = 0) + { + $input = new StringInput($cmd); + $output = new BufferedOutput(); + + $statusCode = $this->application->run($input, $output); + $commandOutput = trim($output->fetch()); + + $expectedOutput = $this->simplifyWhitespace($expectedOutput); + $commandOutput = $this->simplifyWhitespace($commandOutput); + + $this->assertEquals($expectedOutput, $commandOutput); + $this->assertEquals($expectedStatusCode, $statusCode); + } + + function simplifyWhitespace($data) + { + return trim(preg_replace('#\s+$#m', '', $data)); + } + + function testHelp() + { + $expectedXML = << + + + example:table [--format [FORMAT]] [--fields [FIELDS]] [--field FIELD] [--] [<unused>] + + + + example:table --format=yml + Show the example table in yml format. + + + example:table --fields=first,third + Show only the first and third fields in the table. + + + example:table --fields=II,III + Note that either the field ID or the visible field label may be used. + + + Test command with formatters + + + An unused argument + + + + + + + + + + + + + + + + Test command with formatters + + extab + + + docs-tables + + +EOT; + + $this->assertRunCommandViaApplicationEquals('my-help --format=xml example:table', $expectedXML); + + $expectedJSON = <<]" + ], + "examples": [ + { + "usage": "example:table --format=yml", + "description": "Show the example table in yml format." + }, + { + "usage": "example:table --fields=first,third", + "description": "Show only the first and third fields in the table." + }, + { + "usage": "example:table --fields=II,III", + "description": "Note that either the field ID or the visible field label may be used." + } + ], + "description": "Test command with formatters", + "arguments": { + "unused": { + "name": "unused", + "is_required": "0", + "is_array": "0", + "description": "An unused argument" + } + }, + "options": { + "format": { + "name": "--format", + "shortcut": "", + "accept_value": "1", + "is_value_required": "0", + "is_multiple": "0", + "description": "Format the result data. Available formats: csv,json,list,php,print-r,sections,string,table,tsv,var_export,xml,yaml", + "defaults": [ + "table" + ] + }, + "fields": { + "name": "--fields", + "shortcut": "", + "accept_value": "1", + "is_value_required": "0", + "is_multiple": "0", + "description": "Available fields: I (first), II (second), III (third)" + }, + "field": { + "name": "--field", + "shortcut": "", + "accept_value": "1", + "is_value_required": "1", + "is_multiple": "0", + "description": "Select just one field, and force format to 'string'." + }, + "help": { + "name": "--help", + "shortcut": "-h", + "accept_value": "0", + "is_value_required": "0", + "is_multiple": "0", + "description": "Display this help message" + }, + "quiet": { + "name": "--quiet", + "shortcut": "-q", + "accept_value": "0", + "is_value_required": "0", + "is_multiple": "0", + "description": "Do not output any message" + }, + "verbose": { + "name": "--verbose", + "shortcut": "-v", + "shortcuts": "-v|-vv|-vvv", + "accept_value": "0", + "is_value_required": "0", + "is_multiple": "0", + "description": "Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug" + }, + "version": { + "name": "--version", + "shortcut": "-V", + "accept_value": "0", + "is_value_required": "0", + "is_multiple": "0", + "description": "Display this application version" + }, + "ansi": { + "name": "--ansi", + "shortcut": "", + "accept_value": "0", + "is_value_required": "0", + "is_multiple": "0", + "description": "Force ANSI output" + }, + "no-ansi": { + "name": "--no-ansi", + "shortcut": "", + "accept_value": "0", + "is_value_required": "0", + "is_multiple": "0", + "description": "Disable ANSI output" + }, + "no-interaction": { + "name": "--no-interaction", + "shortcut": "-n", + "accept_value": "0", + "is_value_required": "0", + "is_multiple": "0", + "description": "Do not ask any interactive question" + } + }, + "help": "Test command with formatters", + "aliases": [ + "extab" + ], + "topics": [ + "docs-tables" + ] +} +EOT; + $this->assertRunCommandViaApplicationEquals('my-help --format=json example:table', $expectedJSON); + } +} diff --git a/lib/composer/vendor/consolidation/config/.editorconfig b/lib/composer/vendor/consolidation/config/.editorconfig new file mode 100644 index 000000000..095771e67 --- /dev/null +++ b/lib/composer/vendor/consolidation/config/.editorconfig @@ -0,0 +1,15 @@ +# This file is for unifying the coding style for different editors and IDEs +# editorconfig.org + +root = true + +[*] +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[**.php] +indent_style = space +indent_size = 4 + diff --git a/lib/composer/vendor/consolidation/config/.gitignore b/lib/composer/vendor/consolidation/config/.gitignore new file mode 100644 index 000000000..c5082499f --- /dev/null +++ b/lib/composer/vendor/consolidation/config/.gitignore @@ -0,0 +1,3 @@ +.DS_Store +vendor +build diff --git a/lib/composer/vendor/consolidation/config/.travis.yml b/lib/composer/vendor/consolidation/config/.travis.yml new file mode 100644 index 000000000..ebcc34e58 --- /dev/null +++ b/lib/composer/vendor/consolidation/config/.travis.yml @@ -0,0 +1,38 @@ +language: php + +branches: + # Only test the master branch and SemVer tags. + only: + - master + - /^[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+.*$/ + +matrix: + fast_finish: true + include: + - php: 7.2 + env: 'SCENARIO=symfony4 HIGHEST_LOWEST="update"' + - php: 7.1 + env: 'SCENARIO=symfony4' + - php: 7.0.11 + env: 'HIGHEST_LOWEST="update"' + - php: 7.0.11 + - php: 5.6 + - php: 5.5 + - php: 5.4 + env: 'SCENARIO=symfony2 HIGHEST_LOWEST="update --prefer-lowest' + +sudo: false + +cache: + directories: + - vendor + - $HOME/.composer/cache + +install: + - 'composer scenario "${SCENARIO}" "${HIGHEST_LOWEST-install}"' + +script: + - composer test + +after_success: + - travis_retry php vendor/bin/coveralls -v diff --git a/lib/composer/vendor/consolidation/config/CHANGELOG.md b/lib/composer/vendor/consolidation/config/CHANGELOG.md new file mode 100644 index 000000000..8029a39f8 --- /dev/null +++ b/lib/composer/vendor/consolidation/config/CHANGELOG.md @@ -0,0 +1,30 @@ +# Changelog + +### 1.0.6 10/17/2017 + +* Add a 'Config::combine()' method for importing without overwriting. +* Factor out ArrayUtil as a reusable utility class. + +### 1.0.4 10/16/2017 + +* BUGFIX: Go back to injecting boolean options only if their value is 'true'. + +### 1.0.3 10/04/2017 + +* Add an EnvConfig utility class. +* BUGFIX: Fix bug in envKey calculation: it was missing its prefix. +* BUGFIX: Export must always return something. +* BUGFIX: Pass reference array through to Expander class. + +### 1.0.2 09/16/2017 + +* BUGFIX: Allow global boolean options to have either `true` or `false` initial values. + +### 1.0.1 07/28/2017 + +* Inject default values into InputOption objects when 'help' command executed. + +### 1.0.0 06/28/2017 + +* Initial release + diff --git a/lib/composer/vendor/consolidation/config/CONTRIBUTING.md b/lib/composer/vendor/consolidation/config/CONTRIBUTING.md new file mode 100644 index 000000000..006062d50 --- /dev/null +++ b/lib/composer/vendor/consolidation/config/CONTRIBUTING.md @@ -0,0 +1,31 @@ +# Contributing to Consolidation + +Thank you for your interest in contributing to the Consolidation effort! Consolidation aims to provide reusable, loosely-coupled components useful for building command-line tools. Consolidation is built on top of Symfony Console, but aims to separate the tool from the implementation details of Symfony. + +Here are some of the guidelines you should follow to make the most of your efforts: + +## Code Style Guidelines + +Consolidation adheres to the [PSR-2 Coding Style Guide](http://www.php-fig.org/psr/psr-2/) for PHP code. + +## Pull Request Guidelines + +Every pull request is run through: + + - phpcs -n --standard=PSR2 src + - phpunit + - [Scrutinizer](https://scrutinizer-ci.com/g/consolidation/config/) + +It is easy to run the unit tests and code sniffer locally; just run: + + - composer cs + +To run the code beautifier, which will fix many of the problems reported by phpcs: + + - composer cbf + +These two commands (`composer cs` and `composer cbf`) are defined in the `scripts` section of [composer.json](composer.json). + +After submitting a pull request, please examine the Scrutinizer report. It is not required to fix all Scrutinizer issues; you may ignore recommendations that you disagree with. The spacing patches produced by Scrutinizer do not conform to PSR2 standards, and therefore should never be applied. DocBlock patches may be applied at your discression. Things that Scrutinizer identifies as a bug nearly always need to be addressed. + +Pull requests must pass phpcs and phpunit in order to be merged; ideally, new functionality will also include new unit tests. diff --git a/lib/composer/vendor/consolidation/config/LICENSE b/lib/composer/vendor/consolidation/config/LICENSE new file mode 100644 index 000000000..cecf81d77 --- /dev/null +++ b/lib/composer/vendor/consolidation/config/LICENSE @@ -0,0 +1,8 @@ +Copyright (c) 2017 Consolidation Developers + + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/lib/composer/vendor/consolidation/config/README.md b/lib/composer/vendor/consolidation/config/README.md new file mode 100644 index 000000000..7fdf11fc9 --- /dev/null +++ b/lib/composer/vendor/consolidation/config/README.md @@ -0,0 +1,210 @@ +# Consolidation\Config + +Manage configuration for a commandline tool. + +[![Travis CI](https://travis-ci.org/consolidation/config.svg?branch=master)](https://travis-ci.org/consolidation/config) +[![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/consolidation/config/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/consolidation/config/?branch=master) +[![Coverage Status](https://coveralls.io/repos/github/consolidation/config/badge.svg?branch=master)](https://coveralls.io/github/consolidation/config?branch=master) +[![License](https://poser.pugx.org/consolidation/config/license)](https://packagist.org/packages/consolidation/config) + +This component is designed to provide the components needed to manage configuration options from different sources, including: + +- Commandline options +- Configuration files +- Alias files (special configuration files that identify a specific target site) +- Default values (provided by command) + +Symfony Console is used to provide the framework for the commandline tool, and the Symfony Configuration component is used to load and merge configuration files. This project provides the glue that binds the components together in an easy-to-use package. + +If your goal is to be able to quickly write configurable commandline tools, you might want to consider using [Robo as a Framework](https://robo.li/framework), as the work for setting up this component is already done in that project. Consolidation/Config may be used with any Symfony Console application, though. + +## Component Status + +In use in Robo (1.x), Terminus (1.x) and Drush (9.x). + +## Motivation + +Provide a simple Config class that can be injected where needed to provide configuration values in non-command classes, and make configuration settings a no-op for command classes by automatically initializing the Input object from configuration as needed. + +## Configuration File Usage + +Configuration files are simple hierarchical yaml files. + +### Providing Command Options + +Command options are defined by creating an entry for each command name under the `command:` section of the configuration file. The options for the command should be defined within an `options:` section. For example, to set a configuration value `red` for the option `--color` in the `example` command: +``` +command: + example: + options: + color: red +``` +If a command name contains a `:`, then each section of the command name defines another level of heirarchy in the command option configuration. For example, to set a configuration value `George` for the option `--name` of the command `my:foo`: +``` +command: + my: + foo: + options: + name: George +``` +Furthermore, every level of the command name heirarchy may contain options. For example, to define a configuration value for the option `--dir` for any command that begins with `my:`: +``` +command: + my: + options: + dir: '/base/path' + foo: + options: + name: George + bar: + options: + priority: high +``` + +### Providing Global Options + +If your Symfony Console application defines global options, like so (from a method in an extension of the Application class): +``` +$this->getDefinition() + ->addOption( + new InputOption('--simulate', null, InputOption::VALUE_NONE, 'Run in simulated mode (show what would have happened).') + ); +``` +Default values for global options can then be declared in the global options section: +``` +options: + simulate: false +``` +If this is done, then global option values set on the command line will be used to alter the value of the configuration item at runtime. For example, `$config->get('options.simulate')` will return `false` when the `--simulate` global option is not used, and will return `true` when it is. + +See the section "Set Up Command Option Configuration Injection", below, for instructions on how to enable this setup. + +### Configuration Value Substitution + +It is possible to define values in a configuration file that will be substituted in wherever used. For example: +``` +common: + path: '/shared/path' +command: + my: + options: + dir: '${common.path}' + foo: + options: + name: George +``` + +[grasmash/yaml-expander](https://github.com/grasmash/expander) is used to provide this capability. + +## API Usage + +The easiest way to utilize the capabilities of this project is to use [Robo as a framework](https://robo.li/framework) to create your commandline tools. Using Robo is optional, though, as this project will work with any Symfony Console application. + +### Load Configuration Files with Provided Loader + +Consolidation/config includes a built-in yaml loader / processor. To use it directly, use a YamlConfigLoader to load each of your configuration files, and a ConfigProcessor to merge them together. Then, export the result from the configuration processor, and import it into a Config object. +``` +use Consolidation\Config\Config; +use Consolidation\Config\YamlConfigLoader; +use Consolidation\Config\ConfigProcessor; + +$config = new Config(); +$loader = new YamlConfigLoader(); +$processor = new ConfigProcessor(); +$processor->extend($loader->load('defaults.yml')); +$processor->extend($loader->load('myconf.yml')); +$config->import($processor->export()); +``` + +### Set Up Command Option Configuration Injection + +The command option configuration feature described above in the section `Providing Command Options` is provided via a configuration injection class. All that you need to do to use this feature as attach this object to your Symfony Console application's event dispatcher: +``` +$application = new Symfony\Component\Console\Application($name, $version); +$configInjector = new \Consolidation\Config\Inject\ConfigForCommand($config); +$configInjector->setApplication($application); + +$eventDispatcher = new \Symfony\Component\EventDispatcher\EventDispatcher(); +$eventDispatcher->addSubscriber($configInjector); +$application->setDispatcher($eventDispatcher); +``` + + +### Get Configuration Values +If you have a configuration file that looks like this: +``` +a: + b: + c: foo +``` +Then you can fetch the value of the configuration option `c` via: +``` +$value = $config->get('a.b.c'); +``` +[dflydev/dot-access-data](https://github.com/dflydev/dot-access-data) is leveraged to provide this capability. + +### Configuration Overlays + +Optionally, you may use the ConfigOverlay class to combine multiple configuration objects implamenting ConfigInterface into a single, prioritized configuration object. It is not necessary to use a configuration overlay; if your only goal is to merge configuration from multiple files, you may follow the example above to extend a processor with multiple configuration files, and then import the result into a single configuration object. This will cause newer configuration items to overwrite any existing values stored under the same key. + +A configuration overlay can achieve the same end result without overwriting any config values. The advantage of doing this is that different configuration overlays could be used to create separate "views" on different collections of configuration. A configuration overlay is also useful if you wish to temporarily override some configuration values, and then put things back the way they were by removing the overlay. +``` +use Consolidation\Config\Config; +use Consolidation\Config\YamlConfigLoader; +use Consolidation\Config\ConfigProcessor; +use Consolidation\Config\Util\ConfigOverlay; + +$config1 = new Config(); +$config2 = new Config(); +$loader = new YamlConfigLoader(); +$processor = new ConfigProcessor(); +$processor->extend($loader->load('c1.yml')); +$config1->import($processor->export()); +$processor = new ConfigProcessor(); +$processor->extend($loader->load('c2.yml')); +$config2->import($processor->export()); + +$configOverlay = (new ConfigOverlay()) + ->addContext('one', $config1) + ->addContext('two', $config2); + +$value = $configOverlay->get('key'); + +$configOverlay->removeContext('two'); + +$value = $configOverlay->get('key'); +``` +The first call to `$configOverlay->get('key')`, above, will return the value from `key` in `$config2`, if it exists, or from `$config1` otherwise. The second call to the same function, after `$config2` is removed, will only consider configuration values stored in `$config1`. + +## External Examples + +### Load Configuration Files with Symfony/Config + +The [Symfony Config](http://symfony.com/doc/current/components/config.html) component provides the capability to locate configuration file, load them from either YAML or XML sources, and validate that they match a certain defined schema. Classes to find configuration files are also available. + +If these features are needed, the results from `Symfony\Component\Config\Definition\Processor::processConfiguration()` may be provided directly to the `Consolidation\Config\Config::import()` method. + +### Use Configuration to Call Setter Methods + +[Robo](https://robo.li) provides a facility for configuration files to [define default values for task setter methods](http://robo.li/getting-started/#configuration-for-task-settings). This is done via the `ConfigForSetters::apply()` method. +``` +$taskClass = static::configClassIdentifier($taskClass); +$configurationApplier = new \Consolidation\Config\Inject\ConfigForSetters($this->getConfig(), $taskClass, 'task.'); +$configurationApplier->apply($task, 'settings'); +``` +The `configClassIdentifier` method converts `\`-separated class and namespace names into `.`-separated identifiers; it is provided by ConfigAwareTrait: +``` +protected static function configClassIdentifier($classname) +{ + $configIdentifier = strtr($classname, '\\', '.'); + $configIdentifier = preg_replace('#^(.*\.Task\.|\.)#', '', $configIdentifier); + + return $configIdentifier; +} +``` +A similar pattern may be used in other applications that may wish to inject values into objects using their setter methods. + +## Comparison to Existing Solutions + +Drush has an existing procedural mechanism for loading configuration values from multiple files, and overlaying the results in priority order. Command-specific options from configuration files and site aliases may also be applied. + diff --git a/lib/composer/vendor/consolidation/config/composer.json b/lib/composer/vendor/consolidation/config/composer.json new file mode 100644 index 000000000..15ea3bcc9 --- /dev/null +++ b/lib/composer/vendor/consolidation/config/composer.json @@ -0,0 +1,68 @@ +{ + "name": "consolidation/config", + "description": "Provide configuration services for a commandline tool.", + "license": "MIT", + "authors": [ + { + "name": "Greg Anderson", + "email": "greg.1.anderson@greenknowe.org" + } + ], + "autoload":{ + "psr-4":{ + "Consolidation\\Config\\": "src" + } + }, + "autoload-dev": { + "psr-4": { + "Consolidation\\TestUtils\\": "tests/src" + } + }, + "require": { + "php": ">=5.4.0", + "dflydev/dot-access-data": "^1.1.0", + "grasmash/expander": "^1" + }, + "require-dev": { + "phpunit/phpunit": "^4", + "greg-1-anderson/composer-test-scenarios": "^1", + "symfony/console": "^2.5|^3|^4", + "symfony/yaml": "^2.8.11|^3|^4", + "satooshi/php-coveralls": "^1.0", + "squizlabs/php_codesniffer": "2.*" + }, + "suggest": { + "symfony/yaml": "Required to use Consolidation\\Config\\Loader\\YamlConfigLoader" + }, + "config": { + "optimize-autoloader": true, + "sort-packages": true, + "platform": { + "php": "5.6" + } + }, + "scripts": { + "cs": "phpcs --standard=PSR2 -n src", + "cbf": "phpcbf --standard=PSR2 -n src", + "unit": "SHELL_INTERACTIVE=true phpunit --colors=always", + "lint": [ + "find src -name '*.php' -print0 | xargs -0 -n1 php -l", + "find tests/src -name '*.php' -print0 | xargs -0 -n1 php -l" + ], + "test": [ + "@lint", + "@unit", + "@cs" + ], + "scenario": "scenarios/install", + "post-update-cmd": [ + "create-scenario symfony4 'symfony/console:^4.0'", + "create-scenario symfony2 'symfony/console:^2.8' --platform-php '5.4' --no-lockfile" + ] + }, + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + } +} diff --git a/lib/composer/vendor/consolidation/config/composer.lock b/lib/composer/vendor/consolidation/config/composer.lock new file mode 100644 index 000000000..92ec74998 --- /dev/null +++ b/lib/composer/vendor/consolidation/config/composer.lock @@ -0,0 +1,1967 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", + "This file is @generated automatically" + ], + "content-hash": "55aa0b628b3a57916df6d5a3fcb97d15", + "packages": [ + { + "name": "dflydev/dot-access-data", + "version": "v1.1.0", + "source": { + "type": "git", + "url": "https://github.com/dflydev/dflydev-dot-access-data.git", + "reference": "3fbd874921ab2c041e899d044585a2ab9795df8a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/3fbd874921ab2c041e899d044585a2ab9795df8a", + "reference": "3fbd874921ab2c041e899d044585a2ab9795df8a", + "shasum": "" + }, + "require": { + "php": ">=5.3.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "psr-0": { + "Dflydev\\DotAccessData": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Dragonfly Development Inc.", + "email": "info@dflydev.com", + "homepage": "http://dflydev.com" + }, + { + "name": "Beau Simensen", + "email": "beau@dflydev.com", + "homepage": "http://beausimensen.com" + }, + { + "name": "Carlos Frutos", + "email": "carlos@kiwing.it", + "homepage": "https://github.com/cfrutos" + } + ], + "description": "Given a deep data structure, access data by dot notation.", + "homepage": "https://github.com/dflydev/dflydev-dot-access-data", + "keywords": [ + "access", + "data", + "dot", + "notation" + ], + "time": "2017-01-20T21:14:22+00:00" + }, + { + "name": "grasmash/expander", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/grasmash/expander.git", + "reference": "95d6037344a4be1dd5f8e0b0b2571a28c397578f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/grasmash/expander/zipball/95d6037344a4be1dd5f8e0b0b2571a28c397578f", + "reference": "95d6037344a4be1dd5f8e0b0b2571a28c397578f", + "shasum": "" + }, + "require": { + "dflydev/dot-access-data": "^1.1.0", + "php": ">=5.4" + }, + "require-dev": { + "greg-1-anderson/composer-test-scenarios": "^1", + "phpunit/phpunit": "^4|^5.5.4", + "satooshi/php-coveralls": "^1.0.2|dev-master", + "squizlabs/php_codesniffer": "^2.7" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Grasmash\\Expander\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Matthew Grasmick" + } + ], + "description": "Expands internal property references in PHP arrays file.", + "time": "2017-12-21T22:14:55+00:00" + } + ], + "packages-dev": [ + { + "name": "doctrine/instantiator", + "version": "1.0.5", + "source": { + "type": "git", + "url": "https://github.com/doctrine/instantiator.git", + "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d", + "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d", + "shasum": "" + }, + "require": { + "php": ">=5.3,<8.0-DEV" + }, + "require-dev": { + "athletic/athletic": "~0.1.8", + "ext-pdo": "*", + "ext-phar": "*", + "phpunit/phpunit": "~4.0", + "squizlabs/php_codesniffer": "~2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "homepage": "http://ocramius.github.com/" + } + ], + "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", + "homepage": "https://github.com/doctrine/instantiator", + "keywords": [ + "constructor", + "instantiate" + ], + "time": "2015-06-14T21:17:01+00:00" + }, + { + "name": "greg-1-anderson/composer-test-scenarios", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/greg-1-anderson/composer-test-scenarios.git", + "reference": "dc81660f44a8b126d7fa947156c98e34f45af3e9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/greg-1-anderson/composer-test-scenarios/zipball/dc81660f44a8b126d7fa947156c98e34f45af3e9", + "reference": "dc81660f44a8b126d7fa947156c98e34f45af3e9", + "shasum": "" + }, + "bin": [ + "scripts/create-scenario", + "scripts/install-scenario" + ], + "type": "library", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Greg Anderson", + "email": "greg.1.anderson@greenknowe.org" + } + ], + "description": "Useful scripts for testing multiple sets of Composer dependencies.", + "time": "2017-12-13T18:41:24+00:00" + }, + { + "name": "guzzle/guzzle", + "version": "v3.9.3", + "source": { + "type": "git", + "url": "https://github.com/guzzle/guzzle3.git", + "reference": "0645b70d953bc1c067bbc8d5bc53194706b628d9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/guzzle3/zipball/0645b70d953bc1c067bbc8d5bc53194706b628d9", + "reference": "0645b70d953bc1c067bbc8d5bc53194706b628d9", + "shasum": "" + }, + "require": { + "ext-curl": "*", + "php": ">=5.3.3", + "symfony/event-dispatcher": "~2.1" + }, + "replace": { + "guzzle/batch": "self.version", + "guzzle/cache": "self.version", + "guzzle/common": "self.version", + "guzzle/http": "self.version", + "guzzle/inflection": "self.version", + "guzzle/iterator": "self.version", + "guzzle/log": "self.version", + "guzzle/parser": "self.version", + "guzzle/plugin": "self.version", + "guzzle/plugin-async": "self.version", + "guzzle/plugin-backoff": "self.version", + "guzzle/plugin-cache": "self.version", + "guzzle/plugin-cookie": "self.version", + "guzzle/plugin-curlauth": "self.version", + "guzzle/plugin-error-response": "self.version", + "guzzle/plugin-history": "self.version", + "guzzle/plugin-log": "self.version", + "guzzle/plugin-md5": "self.version", + "guzzle/plugin-mock": "self.version", + "guzzle/plugin-oauth": "self.version", + "guzzle/service": "self.version", + "guzzle/stream": "self.version" + }, + "require-dev": { + "doctrine/cache": "~1.3", + "monolog/monolog": "~1.0", + "phpunit/phpunit": "3.7.*", + "psr/log": "~1.0", + "symfony/class-loader": "~2.1", + "zendframework/zend-cache": "2.*,<2.3", + "zendframework/zend-log": "2.*,<2.3" + }, + "suggest": { + "guzzlehttp/guzzle": "Guzzle 5 has moved to a new package name. The package you have installed, Guzzle 3, is deprecated." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.9-dev" + } + }, + "autoload": { + "psr-0": { + "Guzzle": "src/", + "Guzzle\\Tests": "tests/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Guzzle Community", + "homepage": "https://github.com/guzzle/guzzle/contributors" + } + ], + "description": "PHP HTTP client. This library is deprecated in favor of https://packagist.org/packages/guzzlehttp/guzzle", + "homepage": "http://guzzlephp.org/", + "keywords": [ + "client", + "curl", + "framework", + "http", + "http client", + "rest", + "web service" + ], + "abandoned": "guzzlehttp/guzzle", + "time": "2015-03-18T18:23:50+00:00" + }, + { + "name": "phpdocumentor/reflection-common", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionCommon.git", + "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", + "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", + "shasum": "" + }, + "require": { + "php": ">=5.5" + }, + "require-dev": { + "phpunit/phpunit": "^4.6" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": [ + "src" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jaap van Otterdijk", + "email": "opensource@ijaap.nl" + } + ], + "description": "Common reflection classes used by phpdocumentor to reflect the code structure", + "homepage": "http://www.phpdoc.org", + "keywords": [ + "FQSEN", + "phpDocumentor", + "phpdoc", + "reflection", + "static analysis" + ], + "time": "2017-09-11T18:02:19+00:00" + }, + { + "name": "phpdocumentor/reflection-docblock", + "version": "3.3.2", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "bf329f6c1aadea3299f08ee804682b7c45b326a2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/bf329f6c1aadea3299f08ee804682b7c45b326a2", + "reference": "bf329f6c1aadea3299f08ee804682b7c45b326a2", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0", + "phpdocumentor/reflection-common": "^1.0.0", + "phpdocumentor/type-resolver": "^0.4.0", + "webmozart/assert": "^1.0" + }, + "require-dev": { + "mockery/mockery": "^0.9.4", + "phpunit/phpunit": "^4.4" + }, + "type": "library", + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + } + ], + "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", + "time": "2017-11-10T14:09:06+00:00" + }, + { + "name": "phpdocumentor/type-resolver", + "version": "0.4.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/TypeResolver.git", + "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/9c977708995954784726e25d0cd1dddf4e65b0f7", + "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7", + "shasum": "" + }, + "require": { + "php": "^5.5 || ^7.0", + "phpdocumentor/reflection-common": "^1.0" + }, + "require-dev": { + "mockery/mockery": "^0.9.4", + "phpunit/phpunit": "^5.2||^4.8.24" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + } + ], + "time": "2017-07-14T14:27:02+00:00" + }, + { + "name": "phpspec/prophecy", + "version": "1.7.3", + "source": { + "type": "git", + "url": "https://github.com/phpspec/prophecy.git", + "reference": "e4ed002c67da8eceb0eb8ddb8b3847bb53c5c2bf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/e4ed002c67da8eceb0eb8ddb8b3847bb53c5c2bf", + "reference": "e4ed002c67da8eceb0eb8ddb8b3847bb53c5c2bf", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.0.2", + "php": "^5.3|^7.0", + "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0", + "sebastian/comparator": "^1.1|^2.0", + "sebastian/recursion-context": "^1.0|^2.0|^3.0" + }, + "require-dev": { + "phpspec/phpspec": "^2.5|^3.2", + "phpunit/phpunit": "^4.8.35 || ^5.7" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.7.x-dev" + } + }, + "autoload": { + "psr-0": { + "Prophecy\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Konstantin Kudryashov", + "email": "ever.zet@gmail.com", + "homepage": "http://everzet.com" + }, + { + "name": "Marcello Duarte", + "email": "marcello.duarte@gmail.com" + } + ], + "description": "Highly opinionated mocking framework for PHP 5.3+", + "homepage": "https://github.com/phpspec/prophecy", + "keywords": [ + "Double", + "Dummy", + "fake", + "mock", + "spy", + "stub" + ], + "time": "2017-11-24T13:59:53+00:00" + }, + { + "name": "phpunit/php-code-coverage", + "version": "2.2.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/eabf68b476ac7d0f73793aada060f1c1a9bf8979", + "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "phpunit/php-file-iterator": "~1.3", + "phpunit/php-text-template": "~1.2", + "phpunit/php-token-stream": "~1.3", + "sebastian/environment": "^1.3.2", + "sebastian/version": "~1.0" + }, + "require-dev": { + "ext-xdebug": ">=2.1.4", + "phpunit/phpunit": "~4" + }, + "suggest": { + "ext-dom": "*", + "ext-xdebug": ">=2.2.1", + "ext-xmlwriter": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.2.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", + "homepage": "https://github.com/sebastianbergmann/php-code-coverage", + "keywords": [ + "coverage", + "testing", + "xunit" + ], + "time": "2015-10-06T15:47:00+00:00" + }, + { + "name": "phpunit/php-file-iterator", + "version": "1.4.5", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/730b01bc3e867237eaac355e06a36b85dd93a8b4", + "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "FilterIterator implementation that filters files based on a list of suffixes.", + "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", + "keywords": [ + "filesystem", + "iterator" + ], + "time": "2017-11-27T13:52:08+00:00" + }, + { + "name": "phpunit/php-text-template", + "version": "1.2.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "keywords": [ + "template" + ], + "time": "2015-06-21T13:50:34+00:00" + }, + { + "name": "phpunit/php-timer", + "version": "1.0.9", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", + "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", + "shasum": "" + }, + "require": { + "php": "^5.3.3 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", + "keywords": [ + "timer" + ], + "time": "2017-02-26T11:10:40+00:00" + }, + { + "name": "phpunit/php-token-stream", + "version": "1.4.12", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-token-stream.git", + "reference": "1ce90ba27c42e4e44e6d8458241466380b51fa16" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/1ce90ba27c42e4e44e6d8458241466380b51fa16", + "reference": "1ce90ba27c42e4e44e6d8458241466380b51fa16", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Wrapper around PHP's tokenizer extension.", + "homepage": "https://github.com/sebastianbergmann/php-token-stream/", + "keywords": [ + "tokenizer" + ], + "time": "2017-12-04T08:55:13+00:00" + }, + { + "name": "phpunit/phpunit", + "version": "4.8.36", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "46023de9a91eec7dfb06cc56cb4e260017298517" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/46023de9a91eec7dfb06cc56cb4e260017298517", + "reference": "46023de9a91eec7dfb06cc56cb4e260017298517", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-json": "*", + "ext-pcre": "*", + "ext-reflection": "*", + "ext-spl": "*", + "php": ">=5.3.3", + "phpspec/prophecy": "^1.3.1", + "phpunit/php-code-coverage": "~2.1", + "phpunit/php-file-iterator": "~1.4", + "phpunit/php-text-template": "~1.2", + "phpunit/php-timer": "^1.0.6", + "phpunit/phpunit-mock-objects": "~2.3", + "sebastian/comparator": "~1.2.2", + "sebastian/diff": "~1.2", + "sebastian/environment": "~1.3", + "sebastian/exporter": "~1.2", + "sebastian/global-state": "~1.0", + "sebastian/version": "~1.0", + "symfony/yaml": "~2.1|~3.0" + }, + "suggest": { + "phpunit/php-invoker": "~1.1" + }, + "bin": [ + "phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.8.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "The PHP Unit Testing framework.", + "homepage": "https://phpunit.de/", + "keywords": [ + "phpunit", + "testing", + "xunit" + ], + "time": "2017-06-21T08:07:12+00:00" + }, + { + "name": "phpunit/phpunit-mock-objects", + "version": "2.3.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", + "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/ac8e7a3db35738d56ee9a76e78a4e03d97628983", + "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.0.2", + "php": ">=5.3.3", + "phpunit/php-text-template": "~1.2", + "sebastian/exporter": "~1.2" + }, + "require-dev": { + "phpunit/phpunit": "~4.4" + }, + "suggest": { + "ext-soap": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.3.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "Mock Object library for PHPUnit", + "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/", + "keywords": [ + "mock", + "xunit" + ], + "time": "2015-10-02T06:51:40+00:00" + }, + { + "name": "psr/log", + "version": "1.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", + "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "Psr/Log/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "time": "2016-10-10T12:19:37+00:00" + }, + { + "name": "satooshi/php-coveralls", + "version": "v1.1.0", + "source": { + "type": "git", + "url": "https://github.com/php-coveralls/php-coveralls.git", + "reference": "37f8f83fe22224eb9d9c6d593cdeb33eedd2a9ad" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-coveralls/php-coveralls/zipball/37f8f83fe22224eb9d9c6d593cdeb33eedd2a9ad", + "reference": "37f8f83fe22224eb9d9c6d593cdeb33eedd2a9ad", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-simplexml": "*", + "guzzle/guzzle": "^2.8 || ^3.0", + "php": "^5.3.3 || ^7.0", + "psr/log": "^1.0", + "symfony/config": "^2.1 || ^3.0 || ^4.0", + "symfony/console": "^2.1 || ^3.0 || ^4.0", + "symfony/stopwatch": "^2.0 || ^3.0 || ^4.0", + "symfony/yaml": "^2.0 || ^3.0 || ^4.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.4.3 || ^6.0" + }, + "suggest": { + "symfony/http-kernel": "Allows Symfony integration" + }, + "bin": [ + "bin/coveralls" + ], + "type": "library", + "autoload": { + "psr-4": { + "Satooshi\\": "src/Satooshi/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Kitamura Satoshi", + "email": "with.no.parachute@gmail.com", + "homepage": "https://www.facebook.com/satooshi.jp" + } + ], + "description": "PHP client library for Coveralls API", + "homepage": "https://github.com/php-coveralls/php-coveralls", + "keywords": [ + "ci", + "coverage", + "github", + "test" + ], + "time": "2017-12-06T23:17:56+00:00" + }, + { + "name": "sebastian/comparator", + "version": "1.2.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2b7424b55f5047b47ac6e5ccb20b2aea4011d9be", + "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "sebastian/diff": "~1.2", + "sebastian/exporter": "~1.2 || ~2.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides the functionality to compare PHP values for equality", + "homepage": "http://www.github.com/sebastianbergmann/comparator", + "keywords": [ + "comparator", + "compare", + "equality" + ], + "time": "2017-01-29T09:50:25+00:00" + }, + { + "name": "sebastian/diff", + "version": "1.4.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/7f066a26a962dbe58ddea9f72a4e82874a3975a4", + "reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4", + "shasum": "" + }, + "require": { + "php": "^5.3.3 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Diff implementation", + "homepage": "https://github.com/sebastianbergmann/diff", + "keywords": [ + "diff" + ], + "time": "2017-05-22T07:24:03+00:00" + }, + { + "name": "sebastian/environment", + "version": "1.3.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "be2c607e43ce4c89ecd60e75c6a85c126e754aea" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/be2c607e43ce4c89ecd60e75c6a85c126e754aea", + "reference": "be2c607e43ce4c89ecd60e75c6a85c126e754aea", + "shasum": "" + }, + "require": { + "php": "^5.3.3 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8 || ^5.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides functionality to handle HHVM/PHP environments", + "homepage": "http://www.github.com/sebastianbergmann/environment", + "keywords": [ + "Xdebug", + "environment", + "hhvm" + ], + "time": "2016-08-18T05:49:44+00:00" + }, + { + "name": "sebastian/exporter", + "version": "1.2.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/42c4c2eec485ee3e159ec9884f95b431287edde4", + "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "sebastian/recursion-context": "~1.0" + }, + "require-dev": { + "ext-mbstring": "*", + "phpunit/phpunit": "~4.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides the functionality to export PHP variables for visualization", + "homepage": "http://www.github.com/sebastianbergmann/exporter", + "keywords": [ + "export", + "exporter" + ], + "time": "2016-06-17T09:04:28+00:00" + }, + { + "name": "sebastian/global-state", + "version": "1.1.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bc37d50fea7d017d3d340f230811c9f1d7280af4", + "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.2" + }, + "suggest": { + "ext-uopz": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Snapshotting of global state", + "homepage": "http://www.github.com/sebastianbergmann/global-state", + "keywords": [ + "global state" + ], + "time": "2015-10-12T03:26:01+00:00" + }, + { + "name": "sebastian/recursion-context", + "version": "1.0.5", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "b19cc3298482a335a95f3016d2f8a6950f0fbcd7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/b19cc3298482a335a95f3016d2f8a6950f0fbcd7", + "reference": "b19cc3298482a335a95f3016d2f8a6950f0fbcd7", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides functionality to recursively process PHP variables", + "homepage": "http://www.github.com/sebastianbergmann/recursion-context", + "time": "2016-10-03T07:41:43+00:00" + }, + { + "name": "sebastian/version", + "version": "1.0.6", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/58b3a85e7999757d6ad81c787a1fbf5ff6c628c6", + "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6", + "shasum": "" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", + "time": "2015-06-21T13:59:46+00:00" + }, + { + "name": "squizlabs/php_codesniffer", + "version": "2.9.1", + "source": { + "type": "git", + "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", + "reference": "dcbed1074f8244661eecddfc2a675430d8d33f62" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/dcbed1074f8244661eecddfc2a675430d8d33f62", + "reference": "dcbed1074f8244661eecddfc2a675430d8d33f62", + "shasum": "" + }, + "require": { + "ext-simplexml": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": ">=5.1.2" + }, + "require-dev": { + "phpunit/phpunit": "~4.0" + }, + "bin": [ + "scripts/phpcs", + "scripts/phpcbf" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "autoload": { + "classmap": [ + "CodeSniffer.php", + "CodeSniffer/CLI.php", + "CodeSniffer/Exception.php", + "CodeSniffer/File.php", + "CodeSniffer/Fixer.php", + "CodeSniffer/Report.php", + "CodeSniffer/Reporting.php", + "CodeSniffer/Sniff.php", + "CodeSniffer/Tokens.php", + "CodeSniffer/Reports/", + "CodeSniffer/Tokenizers/", + "CodeSniffer/DocGenerators/", + "CodeSniffer/Standards/AbstractPatternSniff.php", + "CodeSniffer/Standards/AbstractScopeSniff.php", + "CodeSniffer/Standards/AbstractVariableSniff.php", + "CodeSniffer/Standards/IncorrectPatternException.php", + "CodeSniffer/Standards/Generic/Sniffs/", + "CodeSniffer/Standards/MySource/Sniffs/", + "CodeSniffer/Standards/PEAR/Sniffs/", + "CodeSniffer/Standards/PSR1/Sniffs/", + "CodeSniffer/Standards/PSR2/Sniffs/", + "CodeSniffer/Standards/Squiz/Sniffs/", + "CodeSniffer/Standards/Zend/Sniffs/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Greg Sherwood", + "role": "lead" + } + ], + "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", + "homepage": "http://www.squizlabs.com/php-codesniffer", + "keywords": [ + "phpcs", + "standards" + ], + "time": "2017-05-22T02:43:20+00:00" + }, + { + "name": "symfony/config", + "version": "v3.4.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/config.git", + "reference": "e57211b88aa889fefac1cb36866db04100b0f21c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/config/zipball/e57211b88aa889fefac1cb36866db04100b0f21c", + "reference": "e57211b88aa889fefac1cb36866db04100b0f21c", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8", + "symfony/filesystem": "~2.8|~3.0|~4.0" + }, + "conflict": { + "symfony/dependency-injection": "<3.3", + "symfony/finder": "<3.3" + }, + "require-dev": { + "symfony/dependency-injection": "~3.3|~4.0", + "symfony/finder": "~3.3|~4.0", + "symfony/yaml": "~3.0|~4.0" + }, + "suggest": { + "symfony/yaml": "To use the yaml reference dumper" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Config\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Config Component", + "homepage": "https://symfony.com", + "time": "2017-12-14T19:40:10+00:00" + }, + { + "name": "symfony/console", + "version": "v3.4.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "9f21adfb92a9315b73ae2ed43138988ee4913d4e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/9f21adfb92a9315b73ae2ed43138988ee4913d4e", + "reference": "9f21adfb92a9315b73ae2ed43138988ee4913d4e", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8", + "symfony/debug": "~2.8|~3.0|~4.0", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "symfony/dependency-injection": "<3.4", + "symfony/process": "<3.3" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/config": "~3.3|~4.0", + "symfony/dependency-injection": "~3.4|~4.0", + "symfony/event-dispatcher": "~2.8|~3.0|~4.0", + "symfony/lock": "~3.4|~4.0", + "symfony/process": "~3.3|~4.0" + }, + "suggest": { + "psr/log": "For using the console logger", + "symfony/event-dispatcher": "", + "symfony/lock": "", + "symfony/process": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Console\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Console Component", + "homepage": "https://symfony.com", + "time": "2017-12-14T19:40:10+00:00" + }, + { + "name": "symfony/debug", + "version": "v3.4.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/debug.git", + "reference": "543deab3ffff94402440b326fc94153bae2dfa7a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/debug/zipball/543deab3ffff94402440b326fc94153bae2dfa7a", + "reference": "543deab3ffff94402440b326fc94153bae2dfa7a", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8", + "psr/log": "~1.0" + }, + "conflict": { + "symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2" + }, + "require-dev": { + "symfony/http-kernel": "~2.8|~3.0|~4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Debug\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Debug Component", + "homepage": "https://symfony.com", + "time": "2017-12-12T08:27:14+00:00" + }, + { + "name": "symfony/event-dispatcher", + "version": "v2.8.32", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "b59aacf238fadda50d612c9de73b74751872a903" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/b59aacf238fadda50d612c9de73b74751872a903", + "reference": "b59aacf238fadda50d612c9de73b74751872a903", + "shasum": "" + }, + "require": { + "php": ">=5.3.9" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/config": "^2.0.5|~3.0.0", + "symfony/dependency-injection": "~2.6|~3.0.0", + "symfony/expression-language": "~2.6|~3.0.0", + "symfony/stopwatch": "~2.3|~3.0.0" + }, + "suggest": { + "symfony/dependency-injection": "", + "symfony/http-kernel": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.8-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\EventDispatcher\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony EventDispatcher Component", + "homepage": "https://symfony.com", + "time": "2017-11-05T15:25:56+00:00" + }, + { + "name": "symfony/filesystem", + "version": "v3.4.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/filesystem.git", + "reference": "25b135bea251829e3db6a77d773643408b575ed4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/25b135bea251829e3db6a77d773643408b575ed4", + "reference": "25b135bea251829e3db6a77d773643408b575ed4", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Filesystem\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Filesystem Component", + "homepage": "https://symfony.com", + "time": "2017-12-14T19:40:10+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.6.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296", + "reference": "2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.6-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "time": "2017-10-11T12:05:26+00:00" + }, + { + "name": "symfony/stopwatch", + "version": "v3.4.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/stopwatch.git", + "reference": "52510fe1aefdc1c5d2076ac6030421d387e689d1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/52510fe1aefdc1c5d2076ac6030421d387e689d1", + "reference": "52510fe1aefdc1c5d2076ac6030421d387e689d1", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Stopwatch\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Stopwatch Component", + "homepage": "https://symfony.com", + "time": "2017-11-07T14:28:09+00:00" + }, + { + "name": "symfony/yaml", + "version": "v3.4.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/yaml.git", + "reference": "afe0cd38486505c9703707707d91450cfc1bd536" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/yaml/zipball/afe0cd38486505c9703707707d91450cfc1bd536", + "reference": "afe0cd38486505c9703707707d91450cfc1bd536", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8" + }, + "conflict": { + "symfony/console": "<3.4" + }, + "require-dev": { + "symfony/console": "~3.4|~4.0" + }, + "suggest": { + "symfony/console": "For validating YAML files using the lint command" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Yaml\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Yaml Component", + "homepage": "https://symfony.com", + "time": "2017-12-11T20:38:23+00:00" + }, + { + "name": "webmozart/assert", + "version": "1.2.0", + "source": { + "type": "git", + "url": "https://github.com/webmozart/assert.git", + "reference": "2db61e59ff05fe5126d152bd0655c9ea113e550f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozart/assert/zipball/2db61e59ff05fe5126d152bd0655c9ea113e550f", + "reference": "2db61e59ff05fe5126d152bd0655c9ea113e550f", + "shasum": "" + }, + "require": { + "php": "^5.3.3 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.6", + "sebastian/version": "^1.0.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3-dev" + } + }, + "autoload": { + "psr-4": { + "Webmozart\\Assert\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Assertions to validate method input/output with nice error messages.", + "keywords": [ + "assert", + "check", + "validate" + ], + "time": "2016-11-23T20:04:58+00:00" + } + ], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": [], + "prefer-stable": false, + "prefer-lowest": false, + "platform": { + "php": ">=5.4.0" + }, + "platform-dev": [], + "platform-overrides": { + "php": "5.6" + } +} diff --git a/lib/composer/vendor/consolidation/config/phpunit.xml.dist b/lib/composer/vendor/consolidation/config/phpunit.xml.dist new file mode 100644 index 000000000..90be6e2e6 --- /dev/null +++ b/lib/composer/vendor/consolidation/config/phpunit.xml.dist @@ -0,0 +1,19 @@ + + + + tests + + + + + + + + + src + + + diff --git a/lib/composer/vendor/consolidation/config/scenarios/install b/lib/composer/vendor/consolidation/config/scenarios/install new file mode 100755 index 000000000..e921ec0cb --- /dev/null +++ b/lib/composer/vendor/consolidation/config/scenarios/install @@ -0,0 +1,28 @@ +#!/bin/bash + +SCENARIO=$1 +ACTION=${2-install} + +dir=scenarios/${SCENARIO} +if [ -z "$SCENARIO" ] ; then + SCENARIO=default + dir=. +fi + + +if [ ! -d "$dir" ] ; then + echo "Requested scenario '${SCENARIO}' does not exist." + exit 1 +fi + +echo +echo "::" +echo ":: Switch to ${SCENARIO} scenario" +echo "::" +echo + +set -ex + +composer -n validate --working-dir=$dir --no-check-all --ansi +composer -n --working-dir=$dir ${ACTION} --prefer-dist --no-scripts +composer -n --working-dir=$dir info diff --git a/lib/composer/vendor/consolidation/config/scenarios/symfony2/.gitignore b/lib/composer/vendor/consolidation/config/scenarios/symfony2/.gitignore new file mode 100644 index 000000000..7579f7431 --- /dev/null +++ b/lib/composer/vendor/consolidation/config/scenarios/symfony2/.gitignore @@ -0,0 +1,2 @@ +vendor +composer.lock diff --git a/lib/composer/vendor/consolidation/config/scenarios/symfony2/composer.json b/lib/composer/vendor/consolidation/config/scenarios/symfony2/composer.json new file mode 100644 index 000000000..b0a3a320d --- /dev/null +++ b/lib/composer/vendor/consolidation/config/scenarios/symfony2/composer.json @@ -0,0 +1,70 @@ +{ + "name": "consolidation/config", + "description": "Provide configuration services for a commandline tool.", + "license": "MIT", + "authors": [ + { + "name": "Greg Anderson", + "email": "greg.1.anderson@greenknowe.org" + } + ], + "autoload":{ + "psr-4":{ + "Consolidation\\Config\\": "src" + } + }, + "autoload-dev": { + "psr-4": { + "Consolidation\\TestUtils\\": "tests/src" + } + }, + "require": { + "php": ">=5.4.0", + "dflydev/dot-access-data": "^1.1.0", + "grasmash/expander": "^1" + }, + "require-dev": { + "greg-1-anderson/composer-test-scenarios": "^1", + "phpunit/phpunit": "^4", + "satooshi/php-coveralls": "^1.0", + "squizlabs/php_codesniffer": "2.*", + "symfony/console": "^2.8", + "symfony/yaml": "^2.8.11|^3|^4" + }, + "suggest": { + "symfony/yaml": "Required to use Consolidation\\Config\\Loader\\YamlConfigLoader" + }, + "config": { + "optimize-autoloader": true, + "sort-packages": true, + "platform": { + "php": "5.4" + }, + "vendor-dir": "../../vendor" + }, + "scripts": { + "cs": "phpcs --standard=PSR2 -n src", + "cbf": "phpcbf --standard=PSR2 -n src", + "unit": "SHELL_INTERACTIVE=true phpunit --colors=always", + "lint": [ + "find src -name '*.php' -print0 | xargs -0 -n1 php -l", + "find tests/src -name '*.php' -print0 | xargs -0 -n1 php -l" + ], + "test": [ + "@lint", + "@unit", + "@cs" + ], + "scenario": "scenarios/install", + "post-update-cmd": [ + "create-scenario symfony4 'symfony/console:^4.0'", + "create-scenario symfony2 'symfony/console:^2.8' --platform-php '5.4' --no-lockfile" + ] + }, + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "minimum-stability": "stable" +} diff --git a/lib/composer/vendor/consolidation/config/scenarios/symfony2/src b/lib/composer/vendor/consolidation/config/scenarios/symfony2/src new file mode 120000 index 000000000..929cb3dc9 --- /dev/null +++ b/lib/composer/vendor/consolidation/config/scenarios/symfony2/src @@ -0,0 +1 @@ +../../src \ No newline at end of file diff --git a/lib/composer/vendor/consolidation/config/scenarios/symfony2/tests b/lib/composer/vendor/consolidation/config/scenarios/symfony2/tests new file mode 120000 index 000000000..c2ebfe530 --- /dev/null +++ b/lib/composer/vendor/consolidation/config/scenarios/symfony2/tests @@ -0,0 +1 @@ +../../tests \ No newline at end of file diff --git a/lib/composer/vendor/consolidation/config/scenarios/symfony4/.gitignore b/lib/composer/vendor/consolidation/config/scenarios/symfony4/.gitignore new file mode 100644 index 000000000..22d0d82f8 --- /dev/null +++ b/lib/composer/vendor/consolidation/config/scenarios/symfony4/.gitignore @@ -0,0 +1 @@ +vendor diff --git a/lib/composer/vendor/consolidation/config/scenarios/symfony4/composer.json b/lib/composer/vendor/consolidation/config/scenarios/symfony4/composer.json new file mode 100644 index 000000000..3352fc4f2 --- /dev/null +++ b/lib/composer/vendor/consolidation/config/scenarios/symfony4/composer.json @@ -0,0 +1,70 @@ +{ + "name": "consolidation/config", + "description": "Provide configuration services for a commandline tool.", + "license": "MIT", + "authors": [ + { + "name": "Greg Anderson", + "email": "greg.1.anderson@greenknowe.org" + } + ], + "autoload":{ + "psr-4":{ + "Consolidation\\Config\\": "src" + } + }, + "autoload-dev": { + "psr-4": { + "Consolidation\\TestUtils\\": "tests/src" + } + }, + "require": { + "php": ">=5.4.0", + "dflydev/dot-access-data": "^1.1.0", + "grasmash/expander": "^1" + }, + "require-dev": { + "greg-1-anderson/composer-test-scenarios": "^1", + "phpunit/phpunit": "^4", + "satooshi/php-coveralls": "^1.0", + "squizlabs/php_codesniffer": "2.*", + "symfony/console": "^4.0", + "symfony/yaml": "^2.8.11|^3|^4" + }, + "suggest": { + "symfony/yaml": "Required to use Consolidation\\Config\\Loader\\YamlConfigLoader" + }, + "config": { + "optimize-autoloader": true, + "sort-packages": true, + "platform": { + + }, + "vendor-dir": "../../vendor" + }, + "scripts": { + "cs": "phpcs --standard=PSR2 -n src", + "cbf": "phpcbf --standard=PSR2 -n src", + "unit": "SHELL_INTERACTIVE=true phpunit --colors=always", + "lint": [ + "find src -name '*.php' -print0 | xargs -0 -n1 php -l", + "find tests/src -name '*.php' -print0 | xargs -0 -n1 php -l" + ], + "test": [ + "@lint", + "@unit", + "@cs" + ], + "scenario": "scenarios/install", + "post-update-cmd": [ + "create-scenario symfony4 'symfony/console:^4.0'", + "create-scenario symfony2 'symfony/console:^2.8' --platform-php '5.4' --no-lockfile" + ] + }, + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "minimum-stability": "stable" +} diff --git a/lib/composer/vendor/consolidation/config/scenarios/symfony4/composer.lock b/lib/composer/vendor/consolidation/config/scenarios/symfony4/composer.lock new file mode 100644 index 000000000..e292c910a --- /dev/null +++ b/lib/composer/vendor/consolidation/config/scenarios/symfony4/composer.lock @@ -0,0 +1,1911 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", + "This file is @generated automatically" + ], + "content-hash": "3b30556eb2e89df05233c8f1c3df833f", + "packages": [ + { + "name": "dflydev/dot-access-data", + "version": "v1.1.0", + "source": { + "type": "git", + "url": "https://github.com/dflydev/dflydev-dot-access-data.git", + "reference": "3fbd874921ab2c041e899d044585a2ab9795df8a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/3fbd874921ab2c041e899d044585a2ab9795df8a", + "reference": "3fbd874921ab2c041e899d044585a2ab9795df8a", + "shasum": "" + }, + "require": { + "php": ">=5.3.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "psr-0": { + "Dflydev\\DotAccessData": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Dragonfly Development Inc.", + "email": "info@dflydev.com", + "homepage": "http://dflydev.com" + }, + { + "name": "Beau Simensen", + "email": "beau@dflydev.com", + "homepage": "http://beausimensen.com" + }, + { + "name": "Carlos Frutos", + "email": "carlos@kiwing.it", + "homepage": "https://github.com/cfrutos" + } + ], + "description": "Given a deep data structure, access data by dot notation.", + "homepage": "https://github.com/dflydev/dflydev-dot-access-data", + "keywords": [ + "access", + "data", + "dot", + "notation" + ], + "time": "2017-01-20T21:14:22+00:00" + }, + { + "name": "grasmash/expander", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/grasmash/expander.git", + "reference": "95d6037344a4be1dd5f8e0b0b2571a28c397578f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/grasmash/expander/zipball/95d6037344a4be1dd5f8e0b0b2571a28c397578f", + "reference": "95d6037344a4be1dd5f8e0b0b2571a28c397578f", + "shasum": "" + }, + "require": { + "dflydev/dot-access-data": "^1.1.0", + "php": ">=5.4" + }, + "require-dev": { + "greg-1-anderson/composer-test-scenarios": "^1", + "phpunit/phpunit": "^4|^5.5.4", + "satooshi/php-coveralls": "^1.0.2|dev-master", + "squizlabs/php_codesniffer": "^2.7" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Grasmash\\Expander\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Matthew Grasmick" + } + ], + "description": "Expands internal property references in PHP arrays file.", + "time": "2017-12-21T22:14:55+00:00" + } + ], + "packages-dev": [ + { + "name": "doctrine/instantiator", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/instantiator.git", + "reference": "185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda", + "reference": "185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda", + "shasum": "" + }, + "require": { + "php": "^7.1" + }, + "require-dev": { + "athletic/athletic": "~0.1.8", + "ext-pdo": "*", + "ext-phar": "*", + "phpunit/phpunit": "^6.2.3", + "squizlabs/php_codesniffer": "^3.0.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "homepage": "http://ocramius.github.com/" + } + ], + "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", + "homepage": "https://github.com/doctrine/instantiator", + "keywords": [ + "constructor", + "instantiate" + ], + "time": "2017-07-22T11:58:36+00:00" + }, + { + "name": "greg-1-anderson/composer-test-scenarios", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/greg-1-anderson/composer-test-scenarios.git", + "reference": "dc81660f44a8b126d7fa947156c98e34f45af3e9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/greg-1-anderson/composer-test-scenarios/zipball/dc81660f44a8b126d7fa947156c98e34f45af3e9", + "reference": "dc81660f44a8b126d7fa947156c98e34f45af3e9", + "shasum": "" + }, + "bin": [ + "scripts/create-scenario", + "scripts/install-scenario" + ], + "type": "library", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Greg Anderson", + "email": "greg.1.anderson@greenknowe.org" + } + ], + "description": "Useful scripts for testing multiple sets of Composer dependencies.", + "time": "2017-12-13T18:41:24+00:00" + }, + { + "name": "guzzle/guzzle", + "version": "v3.9.3", + "source": { + "type": "git", + "url": "https://github.com/guzzle/guzzle3.git", + "reference": "0645b70d953bc1c067bbc8d5bc53194706b628d9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/guzzle3/zipball/0645b70d953bc1c067bbc8d5bc53194706b628d9", + "reference": "0645b70d953bc1c067bbc8d5bc53194706b628d9", + "shasum": "" + }, + "require": { + "ext-curl": "*", + "php": ">=5.3.3", + "symfony/event-dispatcher": "~2.1" + }, + "replace": { + "guzzle/batch": "self.version", + "guzzle/cache": "self.version", + "guzzle/common": "self.version", + "guzzle/http": "self.version", + "guzzle/inflection": "self.version", + "guzzle/iterator": "self.version", + "guzzle/log": "self.version", + "guzzle/parser": "self.version", + "guzzle/plugin": "self.version", + "guzzle/plugin-async": "self.version", + "guzzle/plugin-backoff": "self.version", + "guzzle/plugin-cache": "self.version", + "guzzle/plugin-cookie": "self.version", + "guzzle/plugin-curlauth": "self.version", + "guzzle/plugin-error-response": "self.version", + "guzzle/plugin-history": "self.version", + "guzzle/plugin-log": "self.version", + "guzzle/plugin-md5": "self.version", + "guzzle/plugin-mock": "self.version", + "guzzle/plugin-oauth": "self.version", + "guzzle/service": "self.version", + "guzzle/stream": "self.version" + }, + "require-dev": { + "doctrine/cache": "~1.3", + "monolog/monolog": "~1.0", + "phpunit/phpunit": "3.7.*", + "psr/log": "~1.0", + "symfony/class-loader": "~2.1", + "zendframework/zend-cache": "2.*,<2.3", + "zendframework/zend-log": "2.*,<2.3" + }, + "suggest": { + "guzzlehttp/guzzle": "Guzzle 5 has moved to a new package name. The package you have installed, Guzzle 3, is deprecated." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.9-dev" + } + }, + "autoload": { + "psr-0": { + "Guzzle": "src/", + "Guzzle\\Tests": "tests/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Guzzle Community", + "homepage": "https://github.com/guzzle/guzzle/contributors" + } + ], + "description": "PHP HTTP client. This library is deprecated in favor of https://packagist.org/packages/guzzlehttp/guzzle", + "homepage": "http://guzzlephp.org/", + "keywords": [ + "client", + "curl", + "framework", + "http", + "http client", + "rest", + "web service" + ], + "abandoned": "guzzlehttp/guzzle", + "time": "2015-03-18T18:23:50+00:00" + }, + { + "name": "phpdocumentor/reflection-common", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionCommon.git", + "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", + "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", + "shasum": "" + }, + "require": { + "php": ">=5.5" + }, + "require-dev": { + "phpunit/phpunit": "^4.6" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": [ + "src" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jaap van Otterdijk", + "email": "opensource@ijaap.nl" + } + ], + "description": "Common reflection classes used by phpdocumentor to reflect the code structure", + "homepage": "http://www.phpdoc.org", + "keywords": [ + "FQSEN", + "phpDocumentor", + "phpdoc", + "reflection", + "static analysis" + ], + "time": "2017-09-11T18:02:19+00:00" + }, + { + "name": "phpdocumentor/reflection-docblock", + "version": "4.2.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "66465776cfc249844bde6d117abff1d22e06c2da" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/66465776cfc249844bde6d117abff1d22e06c2da", + "reference": "66465776cfc249844bde6d117abff1d22e06c2da", + "shasum": "" + }, + "require": { + "php": "^7.0", + "phpdocumentor/reflection-common": "^1.0.0", + "phpdocumentor/type-resolver": "^0.4.0", + "webmozart/assert": "^1.0" + }, + "require-dev": { + "doctrine/instantiator": "~1.0.5", + "mockery/mockery": "^1.0", + "phpunit/phpunit": "^6.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + } + ], + "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", + "time": "2017-11-27T17:38:31+00:00" + }, + { + "name": "phpdocumentor/type-resolver", + "version": "0.4.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/TypeResolver.git", + "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/9c977708995954784726e25d0cd1dddf4e65b0f7", + "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7", + "shasum": "" + }, + "require": { + "php": "^5.5 || ^7.0", + "phpdocumentor/reflection-common": "^1.0" + }, + "require-dev": { + "mockery/mockery": "^0.9.4", + "phpunit/phpunit": "^5.2||^4.8.24" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + } + ], + "time": "2017-07-14T14:27:02+00:00" + }, + { + "name": "phpspec/prophecy", + "version": "1.7.3", + "source": { + "type": "git", + "url": "https://github.com/phpspec/prophecy.git", + "reference": "e4ed002c67da8eceb0eb8ddb8b3847bb53c5c2bf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/e4ed002c67da8eceb0eb8ddb8b3847bb53c5c2bf", + "reference": "e4ed002c67da8eceb0eb8ddb8b3847bb53c5c2bf", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.0.2", + "php": "^5.3|^7.0", + "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0", + "sebastian/comparator": "^1.1|^2.0", + "sebastian/recursion-context": "^1.0|^2.0|^3.0" + }, + "require-dev": { + "phpspec/phpspec": "^2.5|^3.2", + "phpunit/phpunit": "^4.8.35 || ^5.7" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.7.x-dev" + } + }, + "autoload": { + "psr-0": { + "Prophecy\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Konstantin Kudryashov", + "email": "ever.zet@gmail.com", + "homepage": "http://everzet.com" + }, + { + "name": "Marcello Duarte", + "email": "marcello.duarte@gmail.com" + } + ], + "description": "Highly opinionated mocking framework for PHP 5.3+", + "homepage": "https://github.com/phpspec/prophecy", + "keywords": [ + "Double", + "Dummy", + "fake", + "mock", + "spy", + "stub" + ], + "time": "2017-11-24T13:59:53+00:00" + }, + { + "name": "phpunit/php-code-coverage", + "version": "2.2.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/eabf68b476ac7d0f73793aada060f1c1a9bf8979", + "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "phpunit/php-file-iterator": "~1.3", + "phpunit/php-text-template": "~1.2", + "phpunit/php-token-stream": "~1.3", + "sebastian/environment": "^1.3.2", + "sebastian/version": "~1.0" + }, + "require-dev": { + "ext-xdebug": ">=2.1.4", + "phpunit/phpunit": "~4" + }, + "suggest": { + "ext-dom": "*", + "ext-xdebug": ">=2.2.1", + "ext-xmlwriter": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.2.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", + "homepage": "https://github.com/sebastianbergmann/php-code-coverage", + "keywords": [ + "coverage", + "testing", + "xunit" + ], + "time": "2015-10-06T15:47:00+00:00" + }, + { + "name": "phpunit/php-file-iterator", + "version": "1.4.5", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/730b01bc3e867237eaac355e06a36b85dd93a8b4", + "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "FilterIterator implementation that filters files based on a list of suffixes.", + "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", + "keywords": [ + "filesystem", + "iterator" + ], + "time": "2017-11-27T13:52:08+00:00" + }, + { + "name": "phpunit/php-text-template", + "version": "1.2.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "keywords": [ + "template" + ], + "time": "2015-06-21T13:50:34+00:00" + }, + { + "name": "phpunit/php-timer", + "version": "1.0.9", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", + "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", + "shasum": "" + }, + "require": { + "php": "^5.3.3 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", + "keywords": [ + "timer" + ], + "time": "2017-02-26T11:10:40+00:00" + }, + { + "name": "phpunit/php-token-stream", + "version": "1.4.12", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-token-stream.git", + "reference": "1ce90ba27c42e4e44e6d8458241466380b51fa16" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/1ce90ba27c42e4e44e6d8458241466380b51fa16", + "reference": "1ce90ba27c42e4e44e6d8458241466380b51fa16", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Wrapper around PHP's tokenizer extension.", + "homepage": "https://github.com/sebastianbergmann/php-token-stream/", + "keywords": [ + "tokenizer" + ], + "time": "2017-12-04T08:55:13+00:00" + }, + { + "name": "phpunit/phpunit", + "version": "4.8.36", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "46023de9a91eec7dfb06cc56cb4e260017298517" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/46023de9a91eec7dfb06cc56cb4e260017298517", + "reference": "46023de9a91eec7dfb06cc56cb4e260017298517", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-json": "*", + "ext-pcre": "*", + "ext-reflection": "*", + "ext-spl": "*", + "php": ">=5.3.3", + "phpspec/prophecy": "^1.3.1", + "phpunit/php-code-coverage": "~2.1", + "phpunit/php-file-iterator": "~1.4", + "phpunit/php-text-template": "~1.2", + "phpunit/php-timer": "^1.0.6", + "phpunit/phpunit-mock-objects": "~2.3", + "sebastian/comparator": "~1.2.2", + "sebastian/diff": "~1.2", + "sebastian/environment": "~1.3", + "sebastian/exporter": "~1.2", + "sebastian/global-state": "~1.0", + "sebastian/version": "~1.0", + "symfony/yaml": "~2.1|~3.0" + }, + "suggest": { + "phpunit/php-invoker": "~1.1" + }, + "bin": [ + "phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.8.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "The PHP Unit Testing framework.", + "homepage": "https://phpunit.de/", + "keywords": [ + "phpunit", + "testing", + "xunit" + ], + "time": "2017-06-21T08:07:12+00:00" + }, + { + "name": "phpunit/phpunit-mock-objects", + "version": "2.3.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", + "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/ac8e7a3db35738d56ee9a76e78a4e03d97628983", + "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.0.2", + "php": ">=5.3.3", + "phpunit/php-text-template": "~1.2", + "sebastian/exporter": "~1.2" + }, + "require-dev": { + "phpunit/phpunit": "~4.4" + }, + "suggest": { + "ext-soap": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.3.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "Mock Object library for PHPUnit", + "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/", + "keywords": [ + "mock", + "xunit" + ], + "time": "2015-10-02T06:51:40+00:00" + }, + { + "name": "psr/log", + "version": "1.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", + "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "Psr/Log/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "time": "2016-10-10T12:19:37+00:00" + }, + { + "name": "satooshi/php-coveralls", + "version": "v1.1.0", + "source": { + "type": "git", + "url": "https://github.com/php-coveralls/php-coveralls.git", + "reference": "37f8f83fe22224eb9d9c6d593cdeb33eedd2a9ad" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-coveralls/php-coveralls/zipball/37f8f83fe22224eb9d9c6d593cdeb33eedd2a9ad", + "reference": "37f8f83fe22224eb9d9c6d593cdeb33eedd2a9ad", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-simplexml": "*", + "guzzle/guzzle": "^2.8 || ^3.0", + "php": "^5.3.3 || ^7.0", + "psr/log": "^1.0", + "symfony/config": "^2.1 || ^3.0 || ^4.0", + "symfony/console": "^2.1 || ^3.0 || ^4.0", + "symfony/stopwatch": "^2.0 || ^3.0 || ^4.0", + "symfony/yaml": "^2.0 || ^3.0 || ^4.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.4.3 || ^6.0" + }, + "suggest": { + "symfony/http-kernel": "Allows Symfony integration" + }, + "bin": [ + "bin/coveralls" + ], + "type": "library", + "autoload": { + "psr-4": { + "Satooshi\\": "src/Satooshi/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Kitamura Satoshi", + "email": "with.no.parachute@gmail.com", + "homepage": "https://www.facebook.com/satooshi.jp" + } + ], + "description": "PHP client library for Coveralls API", + "homepage": "https://github.com/php-coveralls/php-coveralls", + "keywords": [ + "ci", + "coverage", + "github", + "test" + ], + "time": "2017-12-06T23:17:56+00:00" + }, + { + "name": "sebastian/comparator", + "version": "1.2.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2b7424b55f5047b47ac6e5ccb20b2aea4011d9be", + "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "sebastian/diff": "~1.2", + "sebastian/exporter": "~1.2 || ~2.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides the functionality to compare PHP values for equality", + "homepage": "http://www.github.com/sebastianbergmann/comparator", + "keywords": [ + "comparator", + "compare", + "equality" + ], + "time": "2017-01-29T09:50:25+00:00" + }, + { + "name": "sebastian/diff", + "version": "1.4.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/7f066a26a962dbe58ddea9f72a4e82874a3975a4", + "reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4", + "shasum": "" + }, + "require": { + "php": "^5.3.3 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Diff implementation", + "homepage": "https://github.com/sebastianbergmann/diff", + "keywords": [ + "diff" + ], + "time": "2017-05-22T07:24:03+00:00" + }, + { + "name": "sebastian/environment", + "version": "1.3.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "be2c607e43ce4c89ecd60e75c6a85c126e754aea" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/be2c607e43ce4c89ecd60e75c6a85c126e754aea", + "reference": "be2c607e43ce4c89ecd60e75c6a85c126e754aea", + "shasum": "" + }, + "require": { + "php": "^5.3.3 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8 || ^5.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides functionality to handle HHVM/PHP environments", + "homepage": "http://www.github.com/sebastianbergmann/environment", + "keywords": [ + "Xdebug", + "environment", + "hhvm" + ], + "time": "2016-08-18T05:49:44+00:00" + }, + { + "name": "sebastian/exporter", + "version": "1.2.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/42c4c2eec485ee3e159ec9884f95b431287edde4", + "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "sebastian/recursion-context": "~1.0" + }, + "require-dev": { + "ext-mbstring": "*", + "phpunit/phpunit": "~4.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides the functionality to export PHP variables for visualization", + "homepage": "http://www.github.com/sebastianbergmann/exporter", + "keywords": [ + "export", + "exporter" + ], + "time": "2016-06-17T09:04:28+00:00" + }, + { + "name": "sebastian/global-state", + "version": "1.1.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bc37d50fea7d017d3d340f230811c9f1d7280af4", + "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.2" + }, + "suggest": { + "ext-uopz": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Snapshotting of global state", + "homepage": "http://www.github.com/sebastianbergmann/global-state", + "keywords": [ + "global state" + ], + "time": "2015-10-12T03:26:01+00:00" + }, + { + "name": "sebastian/recursion-context", + "version": "1.0.5", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "b19cc3298482a335a95f3016d2f8a6950f0fbcd7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/b19cc3298482a335a95f3016d2f8a6950f0fbcd7", + "reference": "b19cc3298482a335a95f3016d2f8a6950f0fbcd7", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides functionality to recursively process PHP variables", + "homepage": "http://www.github.com/sebastianbergmann/recursion-context", + "time": "2016-10-03T07:41:43+00:00" + }, + { + "name": "sebastian/version", + "version": "1.0.6", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/58b3a85e7999757d6ad81c787a1fbf5ff6c628c6", + "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6", + "shasum": "" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", + "time": "2015-06-21T13:59:46+00:00" + }, + { + "name": "squizlabs/php_codesniffer", + "version": "2.9.1", + "source": { + "type": "git", + "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", + "reference": "dcbed1074f8244661eecddfc2a675430d8d33f62" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/dcbed1074f8244661eecddfc2a675430d8d33f62", + "reference": "dcbed1074f8244661eecddfc2a675430d8d33f62", + "shasum": "" + }, + "require": { + "ext-simplexml": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": ">=5.1.2" + }, + "require-dev": { + "phpunit/phpunit": "~4.0" + }, + "bin": [ + "scripts/phpcs", + "scripts/phpcbf" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "autoload": { + "classmap": [ + "CodeSniffer.php", + "CodeSniffer/CLI.php", + "CodeSniffer/Exception.php", + "CodeSniffer/File.php", + "CodeSniffer/Fixer.php", + "CodeSniffer/Report.php", + "CodeSniffer/Reporting.php", + "CodeSniffer/Sniff.php", + "CodeSniffer/Tokens.php", + "CodeSniffer/Reports/", + "CodeSniffer/Tokenizers/", + "CodeSniffer/DocGenerators/", + "CodeSniffer/Standards/AbstractPatternSniff.php", + "CodeSniffer/Standards/AbstractScopeSniff.php", + "CodeSniffer/Standards/AbstractVariableSniff.php", + "CodeSniffer/Standards/IncorrectPatternException.php", + "CodeSniffer/Standards/Generic/Sniffs/", + "CodeSniffer/Standards/MySource/Sniffs/", + "CodeSniffer/Standards/PEAR/Sniffs/", + "CodeSniffer/Standards/PSR1/Sniffs/", + "CodeSniffer/Standards/PSR2/Sniffs/", + "CodeSniffer/Standards/Squiz/Sniffs/", + "CodeSniffer/Standards/Zend/Sniffs/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Greg Sherwood", + "role": "lead" + } + ], + "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", + "homepage": "http://www.squizlabs.com/php-codesniffer", + "keywords": [ + "phpcs", + "standards" + ], + "time": "2017-05-22T02:43:20+00:00" + }, + { + "name": "symfony/config", + "version": "v4.0.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/config.git", + "reference": "0356e6d5298e9e72212c0bad65c2f1b49e42d622" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/config/zipball/0356e6d5298e9e72212c0bad65c2f1b49e42d622", + "reference": "0356e6d5298e9e72212c0bad65c2f1b49e42d622", + "shasum": "" + }, + "require": { + "php": "^7.1.3", + "symfony/filesystem": "~3.4|~4.0" + }, + "conflict": { + "symfony/finder": "<3.4" + }, + "require-dev": { + "symfony/finder": "~3.4|~4.0", + "symfony/yaml": "~3.4|~4.0" + }, + "suggest": { + "symfony/yaml": "To use the yaml reference dumper" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Config\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Config Component", + "homepage": "https://symfony.com", + "time": "2017-12-14T19:48:22+00:00" + }, + { + "name": "symfony/console", + "version": "v4.0.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "de8cf039eacdec59d83f7def67e3b8ff5ed46714" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/de8cf039eacdec59d83f7def67e3b8ff5ed46714", + "reference": "de8cf039eacdec59d83f7def67e3b8ff5ed46714", + "shasum": "" + }, + "require": { + "php": "^7.1.3", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "symfony/dependency-injection": "<3.4", + "symfony/process": "<3.3" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/config": "~3.4|~4.0", + "symfony/dependency-injection": "~3.4|~4.0", + "symfony/event-dispatcher": "~3.4|~4.0", + "symfony/lock": "~3.4|~4.0", + "symfony/process": "~3.4|~4.0" + }, + "suggest": { + "psr/log": "For using the console logger", + "symfony/event-dispatcher": "", + "symfony/lock": "", + "symfony/process": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Console\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Console Component", + "homepage": "https://symfony.com", + "time": "2017-12-14T19:48:22+00:00" + }, + { + "name": "symfony/event-dispatcher", + "version": "v2.8.32", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "b59aacf238fadda50d612c9de73b74751872a903" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/b59aacf238fadda50d612c9de73b74751872a903", + "reference": "b59aacf238fadda50d612c9de73b74751872a903", + "shasum": "" + }, + "require": { + "php": ">=5.3.9" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/config": "^2.0.5|~3.0.0", + "symfony/dependency-injection": "~2.6|~3.0.0", + "symfony/expression-language": "~2.6|~3.0.0", + "symfony/stopwatch": "~2.3|~3.0.0" + }, + "suggest": { + "symfony/dependency-injection": "", + "symfony/http-kernel": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.8-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\EventDispatcher\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony EventDispatcher Component", + "homepage": "https://symfony.com", + "time": "2017-11-05T15:25:56+00:00" + }, + { + "name": "symfony/filesystem", + "version": "v4.0.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/filesystem.git", + "reference": "8c2868641d0c4885eee9c12a89c2b695eb1985cd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/8c2868641d0c4885eee9c12a89c2b695eb1985cd", + "reference": "8c2868641d0c4885eee9c12a89c2b695eb1985cd", + "shasum": "" + }, + "require": { + "php": "^7.1.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Filesystem\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Filesystem Component", + "homepage": "https://symfony.com", + "time": "2017-12-14T19:48:22+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.6.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296", + "reference": "2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.6-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "time": "2017-10-11T12:05:26+00:00" + }, + { + "name": "symfony/stopwatch", + "version": "v4.0.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/stopwatch.git", + "reference": "ac0e49150555c703fef6b696d8eaba1db7a3ca03" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/ac0e49150555c703fef6b696d8eaba1db7a3ca03", + "reference": "ac0e49150555c703fef6b696d8eaba1db7a3ca03", + "shasum": "" + }, + "require": { + "php": "^7.1.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Stopwatch\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Stopwatch Component", + "homepage": "https://symfony.com", + "time": "2017-11-09T12:45:29+00:00" + }, + { + "name": "symfony/yaml", + "version": "v3.4.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/yaml.git", + "reference": "afe0cd38486505c9703707707d91450cfc1bd536" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/yaml/zipball/afe0cd38486505c9703707707d91450cfc1bd536", + "reference": "afe0cd38486505c9703707707d91450cfc1bd536", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8" + }, + "conflict": { + "symfony/console": "<3.4" + }, + "require-dev": { + "symfony/console": "~3.4|~4.0" + }, + "suggest": { + "symfony/console": "For validating YAML files using the lint command" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Yaml\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Yaml Component", + "homepage": "https://symfony.com", + "time": "2017-12-11T20:38:23+00:00" + }, + { + "name": "webmozart/assert", + "version": "1.2.0", + "source": { + "type": "git", + "url": "https://github.com/webmozart/assert.git", + "reference": "2db61e59ff05fe5126d152bd0655c9ea113e550f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozart/assert/zipball/2db61e59ff05fe5126d152bd0655c9ea113e550f", + "reference": "2db61e59ff05fe5126d152bd0655c9ea113e550f", + "shasum": "" + }, + "require": { + "php": "^5.3.3 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.6", + "sebastian/version": "^1.0.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3-dev" + } + }, + "autoload": { + "psr-4": { + "Webmozart\\Assert\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Assertions to validate method input/output with nice error messages.", + "keywords": [ + "assert", + "check", + "validate" + ], + "time": "2016-11-23T20:04:58+00:00" + } + ], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": [], + "prefer-stable": false, + "prefer-lowest": false, + "platform": { + "php": ">=5.4.0" + }, + "platform-dev": [] +} diff --git a/lib/composer/vendor/consolidation/config/scenarios/symfony4/src b/lib/composer/vendor/consolidation/config/scenarios/symfony4/src new file mode 120000 index 000000000..929cb3dc9 --- /dev/null +++ b/lib/composer/vendor/consolidation/config/scenarios/symfony4/src @@ -0,0 +1 @@ +../../src \ No newline at end of file diff --git a/lib/composer/vendor/consolidation/config/scenarios/symfony4/tests b/lib/composer/vendor/consolidation/config/scenarios/symfony4/tests new file mode 120000 index 000000000..c2ebfe530 --- /dev/null +++ b/lib/composer/vendor/consolidation/config/scenarios/symfony4/tests @@ -0,0 +1 @@ +../../tests \ No newline at end of file diff --git a/lib/composer/vendor/consolidation/config/src/Config.php b/lib/composer/vendor/consolidation/config/src/Config.php new file mode 100644 index 000000000..25f714f25 --- /dev/null +++ b/lib/composer/vendor/consolidation/config/src/Config.php @@ -0,0 +1,157 @@ +config = new Data($data); + $this->setDefaults(new Data()); + } + + /** + * {@inheritdoc} + */ + public function has($key) + { + return ($this->config->has($key)); + } + + /** + * {@inheritdoc} + */ + public function get($key, $defaultFallback = null) + { + if ($this->has($key)) { + return $this->config->get($key); + } + return $this->getDefault($key, $defaultFallback); + } + + /** + * {@inheritdoc} + */ + public function set($key, $value) + { + $this->config->set($key, $value); + return $this; + } + + /** + * {@inheritdoc} + */ + public function import($data) + { + return $this->replace($data); + } + + /** + * {@inheritdoc} + */ + public function replace($data) + { + $this->config = new Data($data); + return $this; + } + + /** + * {@inheritdoc} + */ + public function combine($data) + { + if (!empty($data)) { + $this->config->import($data, true); + } + return $this; + } + + /** + * {@inheritdoc} + */ + public function export() + { + return $this->config->export(); + } + + /** + * {@inheritdoc} + */ + public function hasDefault($key) + { + return $this->getDefaults()->has($key); + } + + /** + * {@inheritdoc} + */ + public function getDefault($key, $defaultFallback = null) + { + return $this->hasDefault($key) ? $this->getDefaults()->get($key) : $defaultFallback; + } + + /** + * {@inheritdoc} + */ + public function setDefault($key, $value) + { + $this->getDefaults()->set($key, $value); + return $this; + } + + /** + * Return the class $defaults property and ensure it's a Data object + * TODO: remove Data object validation in 2.0 + * + * @return Data + */ + protected function getDefaults() + { + // Ensure $this->defaults is a Data object (not an array) + if (!$this->defaults instanceof Data) { + $this->setDefaults($this->defaults); + } + return $this->defaults; + } + + /** + * Sets the $defaults class parameter + * TODO: remove support for array in 2.0 as this would currently break backward compatibility + * + * @param Data|array $defaults + * + * @throws \Exception + */ + protected function setDefaults($defaults) + { + if (is_array($defaults)) { + $this->defaults = new Data($defaults); + } elseif ($defaults instanceof Data) { + $this->defaults = $defaults; + } else { + throw new \Exception("Unknown type provided for \$defaults"); + } + } +} diff --git a/lib/composer/vendor/consolidation/config/src/ConfigInterface.php b/lib/composer/vendor/consolidation/config/src/ConfigInterface.php new file mode 100644 index 000000000..5124ea1fc --- /dev/null +++ b/lib/composer/vendor/consolidation/config/src/ConfigInterface.php @@ -0,0 +1,105 @@ + default-value + */ + public function getGlobalOptionDefaultValues(); +} diff --git a/lib/composer/vendor/consolidation/config/src/Inject/ConfigForCommand.php b/lib/composer/vendor/consolidation/config/src/Inject/ConfigForCommand.php new file mode 100644 index 000000000..ce2646e1b --- /dev/null +++ b/lib/composer/vendor/consolidation/config/src/Inject/ConfigForCommand.php @@ -0,0 +1,127 @@ +config = $config; + } + + public function setApplication(Application $application) + { + $this->application = $application; + } + + /** + * {@inheritdoc} + */ + public static function getSubscribedEvents() + { + return [ConsoleEvents::COMMAND => 'injectConfiguration']; + } + + /** + * Before a Console command runs, inject configuration settings + * for this command into the default value of the options of + * this command. + * + * @param \Symfony\Component\Console\Event\ConsoleCommandEvent $event + */ + public function injectConfiguration(ConsoleCommandEvent $event) + { + $command = $event->getCommand(); + $this->injectConfigurationForGlobalOptions($event->getInput()); + $this->injectConfigurationForCommand($command, $event->getInput()); + + $targetOfHelpCommand = $this->getHelpCommandTarget($command, $event->getInput()); + if ($targetOfHelpCommand) { + $this->injectConfigurationForCommand($targetOfHelpCommand, $event->getInput()); + } + } + + protected function injectConfigurationForGlobalOptions($input) + { + if (!$this->application) { + return; + } + + $configGroup = new ConfigFallback($this->config, 'options'); + + $definition = $this->application->getDefinition(); + $options = $definition->getOptions(); + + return $this->injectConfigGroupIntoOptions($configGroup, $options, $input); + } + + protected function injectConfigurationForCommand($command, $input) + { + $commandName = $command->getName(); + $commandName = str_replace(':', '.', $commandName); + $configGroup = new ConfigFallback($this->config, $commandName, 'command.', '.options.'); + + $definition = $command->getDefinition(); + $options = $definition->getOptions(); + + return $this->injectConfigGroupIntoOptions($configGroup, $options, $input); + } + + protected function injectConfigGroupIntoOptions($configGroup, $options, $input) + { + foreach ($options as $option => $inputOption) { + $key = str_replace('.', '-', $option); + $value = $configGroup->get($key); + if ($value !== null) { + if (is_bool($value) && ($value == true)) { + $input->setOption($key, $value); + } elseif ($inputOption->acceptValue()) { + $inputOption->setDefault($value); + } + } + } + } + + protected function getHelpCommandTarget($command, $input) + { + if (($command->getName() != 'help') || (!isset($this->application))) { + return false; + } + + $this->fixInputForSymfony2($command, $input); + + // Symfony Console helpfully swaps 'command_name' and 'command' + // depending on whether the user entered `help foo` or `--help foo`. + // One of these is always `help`, and the other is the command we + // are actually interested in. + $nameOfCommandToDescribe = $input->getArgument('command_name'); + if ($nameOfCommandToDescribe == 'help') { + $nameOfCommandToDescribe = $input->getArgument('command'); + } + return $this->application->find($nameOfCommandToDescribe); + } + + protected function fixInputForSymfony2($command, $input) + { + // Symfony 3.x prepares $input for us; Symfony 2.x, on the other + // hand, passes it in prior to binding with the command definition, + // so we have to go to a little extra work. It may be inadvisable + // to do these steps for commands other than 'help'. + if (!$input->hasArgument('command_name')) { + $command->ignoreValidationErrors(); + $command->mergeApplicationDefinition(); + $input->bind($command->getDefinition()); + } + } +} diff --git a/lib/composer/vendor/consolidation/config/src/Inject/ConfigForSetters.php b/lib/composer/vendor/consolidation/config/src/Inject/ConfigForSetters.php new file mode 100644 index 000000000..5ec870429 --- /dev/null +++ b/lib/composer/vendor/consolidation/config/src/Inject/ConfigForSetters.php @@ -0,0 +1,47 @@ +config = new ConfigMerge($config, $group, $prefix, $postfix); + } + + public function apply($object, $configurationKey) + { + $settings = $this->config->get($configurationKey); + foreach ($settings as $setterMethod => $args) { + $fn = [$object, $setterMethod]; + if (is_callable($fn)) { + $result = call_user_func_array($fn, (array)$args); + + // We require that $fn must only be used with setter methods. + // Setter methods are required to always return $this so that + // they may be chained. We will therefore throw an exception + // for any setter that returns something else. + if ($result != $object) { + $methodDescription = get_class($object) . "::$setterMethod"; + $propertyDescription = $this->config->describe($configurationKey); + throw new \Exception("$methodDescription did not return '\$this' when processing $propertyDescription."); + } + } + } + } +} diff --git a/lib/composer/vendor/consolidation/config/src/Loader/ConfigLoader.php b/lib/composer/vendor/consolidation/config/src/Loader/ConfigLoader.php new file mode 100644 index 000000000..ecc6f64f2 --- /dev/null +++ b/lib/composer/vendor/consolidation/config/src/Loader/ConfigLoader.php @@ -0,0 +1,35 @@ +source; + } + + protected function setSourceName($source) + { + $this->source = $source; + return $this; + } + + public function export() + { + return $this->config; + } + + public function keys() + { + return array_keys($this->config); + } + + abstract public function load($path); +} diff --git a/lib/composer/vendor/consolidation/config/src/Loader/ConfigLoaderInterface.php b/lib/composer/vendor/consolidation/config/src/Loader/ConfigLoaderInterface.php new file mode 100644 index 000000000..9b155c1b9 --- /dev/null +++ b/lib/composer/vendor/consolidation/config/src/Loader/ConfigLoaderInterface.php @@ -0,0 +1,29 @@ +expander = $expander ?: new Expander(); + } + + /** + * Extend the configuration to be processed with the + * configuration provided by the specified loader. + * + * @param ConfigLoaderInterface $loader + */ + public function extend(ConfigLoaderInterface $loader) + { + return $this->addFromSource($loader->export(), $loader->getSourceName()); + } + + /** + * Extend the configuration to be processed with + * the provided nested array. + * + * @param array $data + */ + public function add($data) + { + $this->unprocessedConfig[] = $data; + return $this; + } + + /** + * Extend the configuration to be processed with + * the provided nested array. Also record the name + * of the data source, if applicable. + * + * @param array $data + * @param string $source + */ + protected function addFromSource($data, $source = '') + { + if (empty($source)) { + return $this->add($data); + } + $this->unprocessedConfig[$source] = $data; + return $this; + } + + /** + * Process all of the configuration that has been collected, + * and return a nested array. + * + * @return array + */ + public function export($referenceArray = []) + { + if (!empty($this->unprocessedConfig)) { + $this->processedConfig = $this->process( + $this->processedConfig, + $this->fetchUnprocessed(), + $referenceArray + ); + } + return $this->processedConfig; + } + + /** + * To aid in debugging: return the source of each configuration item. + * n.b. Must call this function *before* export and save the result + * if persistence is desired. + */ + public function sources() + { + $sources = []; + foreach ($this->unprocessedConfig as $sourceName => $config) { + if (!empty($sourceName)) { + $configSources = ArrayUtil::fillRecursive($config, $sourceName); + $sources = ArrayUtil::mergeRecursiveDistinct($sources, $configSources); + } + } + return $sources; + } + + /** + * Get the configuration to be processed, and clear out the + * 'unprocessed' list. + * + * @return array + */ + protected function fetchUnprocessed() + { + $toBeProcessed = $this->unprocessedConfig; + $this->unprocessedConfig = []; + return $toBeProcessed; + } + + /** + * Use a map-reduce to evaluate the items to be processed, + * and merge them into the processed array. + * + * @param array $processed + * @param array $toBeProcessed + * @return array + */ + protected function process(array $processed, array $toBeProcessed, $referenceArray = []) + { + $toBeReduced = array_map([$this, 'preprocess'], $toBeProcessed); + $reduced = array_reduce($toBeReduced, [$this, 'reduceOne'], $processed); + return $this->evaluate($reduced, $referenceArray); + } + + /** + * Process a single configuration file from the 'to be processed' + * list. By default this is a no-op. Override this method to + * provide any desired configuration preprocessing, e.g. dot-notation + * expansion of the configuration keys, etc. + * + * @param array $config + * @return array + */ + protected function preprocess(array $config) + { + return $config; + } + + /** + * Evaluate one item in the 'to be evaluated' list, and then + * merge it into the processed configuration (the 'carry'). + * + * @param array $processed + * @param array $config + * @return array + */ + protected function reduceOne(array $processed, array $config) + { + return ArrayUtil::mergeRecursiveDistinct($processed, $config); + } + + /** + * Evaluate one configuration item. + * + * @param array $processed + * @param array $config + * @return array + */ + protected function evaluate(array $config, $referenceArray = []) + { + return $this->expander->expandArrayProperties( + $config, + $referenceArray + ); + } +} diff --git a/lib/composer/vendor/consolidation/config/src/Loader/YamlConfigLoader.php b/lib/composer/vendor/consolidation/config/src/Loader/YamlConfigLoader.php new file mode 100644 index 000000000..457056627 --- /dev/null +++ b/lib/composer/vendor/consolidation/config/src/Loader/YamlConfigLoader.php @@ -0,0 +1,26 @@ +setSourceName($path); + + // We silently skip any nonexistent config files, so that + // clients may simply `load` all of their candidates. + if (!file_exists($path)) { + $this->config = []; + return $this; + } + $this->config = (array) Yaml::parse(file_get_contents($path)); + return $this; + } +} diff --git a/lib/composer/vendor/consolidation/config/src/Util/ArrayUtil.php b/lib/composer/vendor/consolidation/config/src/Util/ArrayUtil.php new file mode 100644 index 000000000..a23f854e8 --- /dev/null +++ b/lib/composer/vendor/consolidation/config/src/Util/ArrayUtil.php @@ -0,0 +1,75 @@ + &$value) { + $merged[$key] = self::mergeRecursiveValue($merged, $key, $value); + } + return $merged; + } + + /** + * Process the value in an mergeRecursiveDistinct - make a recursive + * call if needed. + */ + protected static function mergeRecursiveValue(&$merged, $key, $value) + { + if (is_array($value) && isset($merged[$key]) && is_array($merged[$key])) { + return self::mergeRecursiveDistinct($merged[$key], $value); + } + return $value; + } + + /** + * Fills all of the leaf-node values of a nested array with the + * provided replacement value. + */ + public static function fillRecursive(array $data, $fill) + { + $result = []; + foreach ($data as $key => $value) { + $result[$key] = $fill; + if (self::isAssociative($value)) { + $result[$key] = self::fillRecursive($value, $fill); + } + } + return $result; + } + + /** + * Return true if the provided parameter is an array, and at least + * one key is non-numeric. + */ + public static function isAssociative($testArray) + { + if (!is_array($testArray)) { + return false; + } + foreach (array_keys($testArray) as $key) { + if (!is_numeric($key)) { + return true; + } + } + return false; + } +} diff --git a/lib/composer/vendor/consolidation/config/src/Util/ConfigFallback.php b/lib/composer/vendor/consolidation/config/src/Util/ConfigFallback.php new file mode 100644 index 000000000..9f9972f60 --- /dev/null +++ b/lib/composer/vendor/consolidation/config/src/Util/ConfigFallback.php @@ -0,0 +1,51 @@ +getWithFallback($key, $this->group, $this->prefix, $this->postfix); + } + + /** + * Fetch an option value from a given key, or, if that specific key does + * not contain a value, then consult various fallback options until a + * value is found. + * + */ + protected function getWithFallback($key, $group, $prefix = '', $postfix = '.') + { + $configKey = "{$prefix}{$group}${postfix}{$key}"; + if ($this->config->has($configKey)) { + return $this->config->get($configKey); + } + if ($this->config->hasDefault($configKey)) { + return $this->config->getDefault($configKey); + } + $moreGeneralGroupname = $this->moreGeneralGroupName($group); + if ($moreGeneralGroupname) { + return $this->getWithFallback($key, $moreGeneralGroupname, $prefix, $postfix); + } + return null; + } +} diff --git a/lib/composer/vendor/consolidation/config/src/Util/ConfigGroup.php b/lib/composer/vendor/consolidation/config/src/Util/ConfigGroup.php new file mode 100644 index 000000000..24b29dd8e --- /dev/null +++ b/lib/composer/vendor/consolidation/config/src/Util/ConfigGroup.php @@ -0,0 +1,61 @@ +config = $config; + $this->group = $group; + $this->prefix = $prefix; + $this->postfix = $postfix; + } + + /** + * Return a description of the configuration group (with prefix and postfix). + */ + public function describe($property) + { + return $this->prefix . $this->group . $this->postfix . $property; + } + + /** + * Get the requested configuration key from the most specific configuration + * group that contains it. + */ + abstract public function get($key); + + /** + * Given a group name, such as "foo.bar.baz", return the next configuration + * group in the fallback hierarchy, e.g. "foo.bar". + */ + protected function moreGeneralGroupName($group) + { + $result = preg_replace('#\.[^.]*$#', '', $group); + if ($result != $group) { + return $result; + } + return false; + } +} diff --git a/lib/composer/vendor/consolidation/config/src/Util/ConfigMerge.php b/lib/composer/vendor/consolidation/config/src/Util/ConfigMerge.php new file mode 100644 index 000000000..65fccf72a --- /dev/null +++ b/lib/composer/vendor/consolidation/config/src/Util/ConfigMerge.php @@ -0,0 +1,34 @@ +getWithMerge($key, $this->group, $this->prefix, $this->postfix); + } + + /** + * Merge available configuration from each configuration group. + */ + public function getWithMerge($key, $group, $prefix = '', $postfix = '.') + { + $configKey = "{$prefix}{$group}${postfix}{$key}"; + $result = $this->config->get($configKey, []); + if (!is_array($result)) { + throw new \UnexpectedValueException($configKey . ' must be a list of settings to apply.'); + } + $moreGeneralGroupname = $this->moreGeneralGroupName($group); + if ($moreGeneralGroupname) { + $result += $this->getWithMerge($key, $moreGeneralGroupname, $prefix, $postfix); + } + return $result; + } +} diff --git a/lib/composer/vendor/consolidation/config/src/Util/ConfigOverlay.php b/lib/composer/vendor/consolidation/config/src/Util/ConfigOverlay.php new file mode 100644 index 000000000..d1f126977 --- /dev/null +++ b/lib/composer/vendor/consolidation/config/src/Util/ConfigOverlay.php @@ -0,0 +1,203 @@ +contexts[self::DEFAULT_CONTEXT] = new Config(); + $this->contexts[self::PROCESS_CONTEXT] = new Config(); + } + + /** + * Add a named configuration object to the configuration overlay. + * Configuration objects added LAST have HIGHEST priority, with the + * exception of the fact that the process context always has the + * highest priority. + * + * If a context has already been added, its priority will not change. + */ + public function addContext($name, ConfigInterface $config) + { + $process = $this->contexts[self::PROCESS_CONTEXT]; + unset($this->contexts[self::PROCESS_CONTEXT]); + $this->contexts[$name] = $config; + $this->contexts[self::PROCESS_CONTEXT] = $process; + + return $this; + } + + /** + * Add a placeholder context that will be prioritized higher than + * existing contexts. This is done to ensure that contexts added + * later will maintain a higher priority if the placeholder context + * is later relaced with a different configuration set via addContext(). + * + * @param string $name + * @return $this + */ + public function addPlaceholder($name) + { + return $this->addContext($name, new Config()); + } + + /** + * Increase the priority of the named context such that it is higher + * in priority than any existing context except for the 'process' + * context. + * + * @param string $name + * @return $this + */ + public function increasePriority($name) + { + $config = $this->getContext($name); + unset($this->contexts[$name]); + return $this->addContext($name, $config); + } + + public function hasContext($name) + { + return isset($this->contexts[$name]); + } + + public function getContext($name) + { + if ($this->hasContext($name)) { + return $this->contexts[$name]; + } + return new Config(); + } + + public function removeContext($name) + { + unset($this->contexts[$name]); + } + + /** + * Determine if a non-default config value exists. + */ + public function findContext($key) + { + foreach (array_reverse($this->contexts) as $name => $config) { + if ($config->has($key)) { + return $config; + } + } + return false; + } + + /** + * @inheritdoc + */ + public function has($key) + { + return $this->findContext($key) != false; + } + + /** + * @inheritdoc + */ + public function get($key, $default = null) + { + $context = $this->findContext($key); + if ($context) { + return $context->get($key, $default); + } + return $default; + } + + /** + * @inheritdoc + */ + public function set($key, $value) + { + $this->contexts[self::PROCESS_CONTEXT]->set($key, $value); + return $this; + } + + /** + * @inheritdoc + */ + public function import($data) + { + $this->unsupported(__FUNCTION__); + } + + /** + * @inheritdoc + */ + public function replace($data) + { + $this->unsupported(__FUNCTION__); + } + + /** + * @inheritdoc + */ + public function combine($data) + { + $this->unsupported(__FUNCTION__); + } + + /** + * @inheritdoc + */ + protected function unsupported($fn) + { + throw new \Exception("The method '$fn' is not supported for the ConfigOverlay class."); + } + + /** + * @inheritdoc + */ + public function export() + { + $export = []; + foreach ($this->contexts as $name => $config) { + $export = array_merge_recursive($export, $config->export()); + } + return $export; + } + + /** + * @inheritdoc + */ + public function hasDefault($key) + { + return $this->contexts[self::DEFAULT_CONTEXT]->has($key); + } + + /** + * @inheritdoc + */ + public function getDefault($key, $default = null) + { + return $this->contexts[self::DEFAULT_CONTEXT]->get($key, $default); + } + + /** + * @inheritdoc + */ + public function setDefault($key, $value) + { + $this->contexts[self::DEFAULT_CONTEXT]->set($key, $value); + return $this; + } +} diff --git a/lib/composer/vendor/consolidation/config/src/Util/EnvConfig.php b/lib/composer/vendor/consolidation/config/src/Util/EnvConfig.php new file mode 100644 index 000000000..05f8d2a82 --- /dev/null +++ b/lib/composer/vendor/consolidation/config/src/Util/EnvConfig.php @@ -0,0 +1,96 @@ +prefix = strtoupper(rtrim($prefix, '_')) . '_'; + } + + /** + * @inheritdoc + */ + public function has($key) + { + return $this->get($key) !== null; + } + + /** + * @inheritdoc + */ + public function get($key, $defaultFallback = null) + { + $envKey = $this->prefix . strtoupper(strtr($key, '.-', '__')); + $envKey = str_replace($this->prefix . $this->prefix, $this->prefix, $envKey); + return getenv($envKey) ?: $defaultFallback; + } + + /** + * @inheritdoc + */ + public function set($key, $value) + { + throw new \Exception('Cannot call "set" on environmental configuration.'); + } + + /** + * @inheritdoc + */ + public function import($data) + { + // no-op + } + + /** + * @inheritdoc + */ + public function export() + { + return []; + } + + /** + * @inheritdoc + */ + public function hasDefault($key) + { + return false; + } + + /** + * @inheritdoc + */ + public function getDefault($key, $defaultFallback = null) + { + return $defaultFallback; + } + + /** + * @inheritdoc + */ + public function setDefault($key, $value) + { + throw new \Exception('Cannot call "setDefault" on environmental configuration.'); + } +} diff --git a/lib/composer/vendor/consolidation/config/tests/ConfigForCommandTest.php b/lib/composer/vendor/consolidation/config/tests/ConfigForCommandTest.php new file mode 100644 index 000000000..41da3076b --- /dev/null +++ b/lib/composer/vendor/consolidation/config/tests/ConfigForCommandTest.php @@ -0,0 +1,130 @@ + [ + 'global' => 'from-config', + ], + // Define some configuration settings for the options for + // the commands my:foo and my:bar. + 'command' => [ + 'my' => [ + // commands.my.options.* apply to all my:* commands. + 'options' => [ + 'dir' => '/etc/common', + 'priority' => 'normal', + ], + 'foo' => [ + // commands.my.foo.options.* apply only to the my:foo command. + 'options' => [ + 'name' => 'baz', + ], + ], + ], + ], + ]; + + $this->config = new Config($data); + } + + public function testInjection() + { + $command = new MyFooCommand(); + $input = new StringInput('my:foo'); + + list($status, $output) = $this->runCommandViaApplication($command, $input); + + $expectedOutput = <<< EOT +Enter my:foo +dir: /etc/common +name: baz +other: fish +EOT; + + $this->assertEquals(0, $status); + $this->assertEquals($expectedOutput, $output); + } + + public function testInjectionWithOverride() + { + $command = new MyFooCommand(); + $input = new StringInput('my:foo --name=Fred'); + + list($status, $output) = $this->runCommandViaApplication($command, $input); + + $expectedOutput = <<< EOT +Enter my:foo +dir: /etc/common +name: Fred +other: fish +EOT; + + $this->assertEquals(0, $status); + $this->assertEquals($expectedOutput, $output); + } + + public function testHelpDefaultInjection() + { + $command = new MyFooCommand(); + $input = new StringInput('help my:foo'); + + list($status, $output) = $this->runCommandViaApplication($command, $input); + + $expectedOutput = <<< EOT +What is the name of the thing we are naming [default: "baz"] +EOT; + + $this->assertEquals(0, $status); + $this->assertContains($expectedOutput, $output); + + $expectedOutput = <<< EOT +A certain global option. [default: "from-config"] +EOT; + + $this->assertContains($expectedOutput, $output); + } + + protected function runCommandViaApplication($command, $input) + { + $application = new Application('TestApplication', '0.0.0'); + $application->getDefinition() + ->addOption( + new InputOption('--global', null, InputOption::VALUE_REQUIRED, 'A certain global option.', 'hardcoded') + ); + + $output = new BufferedOutput(); + + $configInjector = new ConfigForCommand($this->config); + $configInjector->setApplication($application); + + $eventDispatcher = new \Symfony\Component\EventDispatcher\EventDispatcher(); + $eventDispatcher->addSubscriber($configInjector); + $application->setDispatcher($eventDispatcher); + + $application->setAutoExit(false); + $application->add($command); + + $statusCode = $application->run($input, $output); + $commandOutput = trim($output->fetch()); + + return [$statusCode, $commandOutput]; + } +} diff --git a/lib/composer/vendor/consolidation/config/tests/ConfigForSettersTest.php b/lib/composer/vendor/consolidation/config/tests/ConfigForSettersTest.php new file mode 100644 index 000000000..422b0a00b --- /dev/null +++ b/lib/composer/vendor/consolidation/config/tests/ConfigForSettersTest.php @@ -0,0 +1,87 @@ + [ + 'Operations' => [ + // task.Operations.settings apply to all tasks in + // any *.Tass.Operations namespace. + 'settings' => [ + 'dir' => '/base/dir', + ], + 'Frobulate' => [ + // task.Operations.Frobulate.settings applies only + // the Frobulate task. + 'settings' => [ + 'dir' => '/override/dir', + ], + ], + ], + ], + ]; + $config = new Config($data); + + $applicator = new ConfigForSetters($config, 'Operations.Frobulate', 'task.'); + + $testTarget = new ApplyConfigTestTarget(); + + $applicator->apply($testTarget, 'settings'); + + $this->assertEquals('/override/dir', $testTarget->getDir()); + $this->assertEquals(null, $testTarget->getBad()); + } + + public function testApplyBadConfig() + { + $data = [ + // Define some configuration settings for the configuration + // of some task \My\Tasks\Operations\Frobulate. + 'task' => [ + 'Operations' => [ + // task.Operations.settings apply to all tasks in + // any *.Tass.Operations namespace. + 'settings' => [ + 'dir' => '/base/dir', + ], + 'Frobulate' => [ + // task.Operations.Frobulate.settings applies only + // the Frobulate task. + 'settings' => [ + 'bad' => 'fire truck', + ], + ], + ], + ], + ]; + $config = new Config($data); + + $applicator = new ConfigForSetters($config, 'Operations.Frobulate', 'task.'); + + $testTarget = new ApplyConfigTestTarget(); + + $exceptionMessage = ''; + try + { + $applicator->apply($testTarget, 'settings'); + } + catch (\Exception $e) + { + $exceptionMessage = $e->getMessage(); + } + // We would prefer it if bad methods were never called; unfortunately, + // declaring the return type of a method cannot be done in a reliable + // way (via reflection) until php 7, so we allow these methods to be + // called for now. + $this->assertEquals('fire truck', $testTarget->getBad()); + $this->assertEquals('Consolidation\\TestUtils\\ApplyConfigTestTarget::bad did not return \'$this\' when processing task.Operations.Frobulate.settings.', $exceptionMessage); + } +} diff --git a/lib/composer/vendor/consolidation/config/tests/ConfigGroupTest.php b/lib/composer/vendor/consolidation/config/tests/ConfigGroupTest.php new file mode 100644 index 000000000..21e470e57 --- /dev/null +++ b/lib/composer/vendor/consolidation/config/tests/ConfigGroupTest.php @@ -0,0 +1,91 @@ + [ + 'my' => [ + // commands.my.options.* apply to all my:* commands. + 'options' => [ + 'path' => '/etc/common', + 'priority' => 'normal', + ], + 'foo' => [ + // commands.my.foo.options.* apply only to the my:foo command. + 'options' => [ + 'name' => 'baz', + ], + ], + 'bar' => [ + // Similarly, commands.my.bar.options is for the my:bar command. + 'options' => [ + 'priority' => 'high', + ], + ], + ], + ], + // Define some configuration settings for the configuration + // of some task \My\Tasks\Operations\Frobulate. + 'task' => [ + 'Operations' => [ + // task.Operations.settings apply to all tasks in + // any *.Tass.Operations namespace. + 'settings' => [ + 'dir' => '/base/dir', + ], + 'Frobulate' => [ + // task.Operations.Frobulate.settings applies only + // the Frobulate task. + 'settings' => [ + 'object' => 'fire truck', + ], + ], + ], + ], + ]; + + $this->config = new Config($data); + } + + public function testDotNotation() + { + // Test the test + $this->assertEquals('baz', $this->config->get('command.my.foo.options.name')); + } + + public function testFallback() + { + $fooFallback = new ConfigFallback($this->config, 'my.foo', 'command.', '.options.'); + $barFallback = new ConfigFallback($this->config, 'my.bar', 'command.', '.options.'); + + $this->assertEquals(null, $barFallback->get('name')); + $this->assertEquals('baz', $fooFallback->get('name')); + $this->assertEquals('high', $barFallback->get('priority')); + + $this->assertEquals('normal', $fooFallback->get('priority')); + $this->assertEquals('/etc/common', $barFallback->get('path')); + $this->assertEquals('/etc/common', $fooFallback->get('path')); + } + + public function testMerge() + { + $frobulateMerge = new ConfigMerge($this->config, 'Operations.Frobulate', 'task.'); + + $settings = $frobulateMerge->get('settings'); + $this->assertEquals('fire truck', $settings['object']); + $this->assertEquals('/base/dir', $settings['dir']); + $keys = array_keys($settings); + sort($keys); + $this->assertEquals('dir,object', implode(',', $keys)); + } +} + diff --git a/lib/composer/vendor/consolidation/config/tests/ConfigLoaderTest.php b/lib/composer/vendor/consolidation/config/tests/ConfigLoaderTest.php new file mode 100644 index 000000000..6dedb1f36 --- /dev/null +++ b/lib/composer/vendor/consolidation/config/tests/ConfigLoaderTest.php @@ -0,0 +1,29 @@ +assertTrue(file_exists($path)); + + $loader->load($path); + + $configFile = basename($loader->getSourceName()); + $this->assertEquals('config-1.yml', $configFile); + + // Make sure that the data we loaded contained the expected keys + $keys = $loader->keys(); + sort($keys); + $keysString = implode(',', $keys); + $this->assertEquals('c,m', $keysString); + + $configData = $loader->export(); + $this->assertEquals('foo', $configData['c']); + $this->assertEquals('1', $configData['m'][0]); + } +} diff --git a/lib/composer/vendor/consolidation/config/tests/ConfigOverlayTest.php b/lib/composer/vendor/consolidation/config/tests/ConfigOverlayTest.php new file mode 100644 index 000000000..f7faf7484 --- /dev/null +++ b/lib/composer/vendor/consolidation/config/tests/ConfigOverlayTest.php @@ -0,0 +1,168 @@ +import([ + 'hidden-by-a' => 'alias hidden-by-a', + 'hidden-by-process' => 'alias hidden-by-process', + 'options' =>[ + 'a-a' => 'alias-a', + ], + 'command' => [ + 'foo' => [ + 'bar' => [ + 'command' => [ + 'options' => [ + 'a-b' => 'alias-b', + ], + ], + ], + ], + ], + ]); + + $configFileContext = new Config(); + $configFileContext->import([ + 'hidden-by-cf' => 'config-file hidden-by-cf', + 'hidden-by-a' => 'config-file hidden-by-a', + 'hidden-by-process' => 'config-file hidden-by-process', + 'options' =>[ + 'cf-a' => 'config-file-a', + ], + 'command' => [ + 'foo' => [ + 'bar' => [ + 'command' => [ + 'options' => [ + 'cf-b' => 'config-file-b', + ], + ], + ], + ], + ], + ]); + + $this->overlay = new ConfigOverlay(); + $this->overlay->set('hidden-by-process', 'process-h'); + $this->overlay->addContext('cf', $configFileContext); + $this->overlay->addContext('a', $aliasContext); + $this->overlay->setDefault('df-a', 'default'); + $this->overlay->setDefault('hidden-by-a', 'default hidden-by-a'); + $this->overlay->setDefault('hidden-by-cf', 'default hidden-by-cf'); + $this->overlay->setDefault('hidden-by-process', 'default hidden-by-process'); + } + + public function testGetPriority() + { + $this->assertEquals('process-h', $this->overlay->get('hidden-by-process')); + $this->assertEquals('config-file hidden-by-cf', $this->overlay->get('hidden-by-cf')); + $this->assertEquals('alias hidden-by-a', $this->overlay->get('hidden-by-a')); + } + + public function testDefault() + { + $this->assertEquals('alias-a', $this->overlay->get('options.a-a')); + $this->assertEquals('alias-a', $this->overlay->get('options.a-a', 'ignored')); + $this->assertEquals('default', $this->overlay->getDefault('df-a', 'ignored')); + $this->assertEquals('nsv', $this->overlay->getDefault('a-a', 'nsv')); + + $this->overlay->setDefault('df-a', 'new value'); + $this->assertEquals('new value', $this->overlay->getDefault('df-a', 'ignored')); + } + + public function testExport() + { + $data = $this->overlay->export(); + + $this->assertEquals('config-file-a', $data['options']['cf-a']); + $this->assertEquals('alias-a', $data['options']['a-a']); + } + + /** + * @expectedException Exception + */ + public function testImport() + { + $data = $this->overlay->import(['a' => 'value']); + } + + public function testMaintainPriority() + { + // Get and re-add the 'cf' context. Its priority should not change. + $configFileContext = $this->overlay->getContext('cf'); + $this->overlay->addContext('cf', $configFileContext); + + // These asserts are the same as in testGetPriority + $this->assertEquals('process-h', $this->overlay->get('hidden-by-process')); + $this->assertEquals('config-file hidden-by-cf', $this->overlay->get('hidden-by-cf')); + $this->assertEquals('alias hidden-by-a', $this->overlay->get('hidden-by-a')); + } + + public function testChangePriority() + { + // Increase the priority of the 'cf' context. Now, it should have a higher + // priority than the 'alias' context, but should still have a lower + // priority than the 'process' context. + $this->overlay->increasePriority('cf'); + + // These asserts are the same as in testGetPriority + $this->assertEquals('process-h', $this->overlay->get('hidden-by-process')); + $this->assertEquals('config-file hidden-by-cf', $this->overlay->get('hidden-by-cf')); + + // This one has changed: the config-file value is now found instead + // of the alias value. + $this->assertEquals('config-file hidden-by-a', $this->overlay->get('hidden-by-a')); + } + + public function testPlaceholder() + { + $this->overlay->addPlaceholder('lower'); + + $higherContext = new Config(); + $higherContext->import(['priority-test' => 'higher']); + + $lowerContext = new Config(); + $lowerContext->import(['priority-test' => 'lower']); + + // Usually 'lower' would have the highest priority, since it is + // added last. However, our earlier call to 'addPlaceholder' reserves + // a spot for it, so the 'higher' context will end up with a higher + // priority. + $this->overlay->addContext('higher', $higherContext); + $this->overlay->addContext('lower', $lowerContext); + $this->assertEquals('higher', $this->overlay->get('priority-test', 'neither')); + + // Test to see that we can change the value of the 'higher' context, + // and the change will be reflected in the overlay. + $higherContext->set('priority-test', 'changed'); + $this->assertEquals('changed', $this->overlay->get('priority-test', 'neither')); + + // Test to see that the 'process' context still has the highest priority. + $this->overlay->set('priority-test', 'process'); + $higherContext->set('priority-test', 'ignored'); + $this->assertEquals('process', $this->overlay->get('priority-test', 'neither')); + } + + public function testDoesNotHave() + { + $context = $this->overlay->getContext('no-such-context'); + $data = $context->export(); + $this->assertEquals('[]', json_encode($data)); + + $this->assertTrue(!$this->overlay->has('no-such-key')); + $this->assertTrue(!$this->overlay->hasDefault('no-such-default')); + + $this->assertEquals('no-such-value', $this->overlay->get('no-such-key', 'no-such-value')); + + } +} diff --git a/lib/composer/vendor/consolidation/config/tests/ConfigProcessorTest.php b/lib/composer/vendor/consolidation/config/tests/ConfigProcessorTest.php new file mode 100644 index 000000000..ac645a286 --- /dev/null +++ b/lib/composer/vendor/consolidation/config/tests/ConfigProcessorTest.php @@ -0,0 +1,152 @@ + 'foo', + 'm' => [1], + ]; + $config2 = [ + 'b' => '${c}bar', + 'm' => [2], + ]; + $config3 = [ + 'a' => '${b}baz', + 'm' => [3], + ]; + + $processor = new ConfigProcessor(); + $processor->add($config1); + $processor->add($config2); + $processor->add($config3); + + $data = $processor->export(); + $this->assertEquals('foo', $data['c']); + $this->assertEquals('foobar', $data['b']); + $this->assertEquals('foobarbaz', $data['a']); + } + + public function processorForConfigMergeTest($provideSourceNames) + { + $config1 = [ + 'm' => [ + 'x' => 'x-1', + 'y' => [ + 'r' => 'r-1', + 's' => 's-1', + 't' => 't-1', + ], + 'z' => 'z-1', + ], + ]; + $config2 = [ + 'm' => [ + 'w' => 'w-2', + 'y' => [ + 'q' => 'q-2', + 's' => 's-2', + ], + 'z' => 'z-2', + ], + ]; + $config3 = [ + 'm' => [ + 'v' => 'v-3', + 'y' => [ + 't' => 't-3', + 'u' => 'u-3', + ], + 'z' => 'z-3', + ], + ]; + + $processor = new ConfigProcessor(); + $testLoader = new TestLoader(); + + $testLoader->set($config1); + $testLoader->setSourceName($provideSourceNames ? 'c-1' : ''); + $processor->extend($testLoader); + + $testLoader->set($config2); + $testLoader->setSourceName($provideSourceNames ? 'c-2' : ''); + $processor->extend($testLoader); + + $testLoader->set($config3); + $testLoader->setSourceName($provideSourceNames ? 'c-3' : ''); + $processor->extend($testLoader); + + return $processor; + } + + public function testConfigProcessorMergeAssociative() + { + $processor = $this->processorForConfigMergeTest(false); + $data = $processor->export(); + $this->assertEquals('{"m":{"x":"x-1","y":{"r":"r-1","s":"s-2","t":"t-3","q":"q-2","u":"u-3"},"z":"z-3","w":"w-2","v":"v-3"}}', json_encode($data)); + } + + public function testConfigProcessorMergeAssociativeWithSourceNames() + { + $processor = $this->processorForConfigMergeTest(true); + $sources = $processor->sources(); + $data = $processor->export(); + $this->assertEquals('{"m":{"x":"x-1","y":{"r":"r-1","s":"s-2","t":"t-3","q":"q-2","u":"u-3"},"z":"z-3","w":"w-2","v":"v-3"}}', json_encode($data)); + $this->assertEquals('c-1', $sources['m']['x']); + $this->assertEquals('c-1', $sources['m']['y']['r']); + $this->assertEquals('c-2', $sources['m']['w']); + $this->assertEquals('c-2', $sources['m']['y']['s']); + $this->assertEquals('c-3', $sources['m']['z']); + $this->assertEquals('c-3', $sources['m']['y']['u']); + } + + public function testConfiProcessorSources() + { + $processor = new ConfigProcessor(); + $loader = new YamlConfigLoader(); + $processor->extend($loader->load(__DIR__ . '/data/config-1.yml')); + $processor->extend($loader->load(__DIR__ . '/data/config-2.yml')); + $processor->extend($loader->load(__DIR__ . '/data/config-3.yml')); + + $sources = $processor->sources(); + + $data = $processor->export(); + $this->assertEquals('foo', $data['c']); + $this->assertEquals('foobar', $data['b']); + $this->assertEquals('foobarbaz', $data['a']); + + $this->assertEquals('3', $data['m'][0]); + + $this->assertEquals( __DIR__ . '/data/config-3.yml', $sources['a']); + $this->assertEquals( __DIR__ . '/data/config-2.yml', $sources['b']); + $this->assertEquals( __DIR__ . '/data/config-1.yml', $sources['c']); + $this->assertEquals( __DIR__ . '/data/config-3.yml', $sources['m']); + } + + public function testConfiProcessorSourcesLoadInReverseOrder() + { + $processor = new ConfigProcessor(); + $loader = new YamlConfigLoader(); + $processor->extend($loader->load(__DIR__ . '/data/config-3.yml')); + $processor->extend($loader->load(__DIR__ . '/data/config-2.yml')); + $processor->extend($loader->load(__DIR__ . '/data/config-1.yml')); + + $sources = $processor->sources(); + + $data = $processor->export(); + $this->assertEquals('foo', $data['c']); + $this->assertEquals('foobar', $data['b']); + $this->assertEquals('foobarbaz', $data['a']); + + $this->assertEquals('1', $data['m'][0]); + + $this->assertEquals( __DIR__ . '/data/config-3.yml', $sources['a']); + $this->assertEquals( __DIR__ . '/data/config-2.yml', $sources['b']); + $this->assertEquals( __DIR__ . '/data/config-1.yml', $sources['c']); + $this->assertEquals( __DIR__ . '/data/config-1.yml', $sources['m']); + } +} diff --git a/lib/composer/vendor/consolidation/config/tests/ConfigTest.php b/lib/composer/vendor/consolidation/config/tests/ConfigTest.php new file mode 100644 index 000000000..f2ace0ce4 --- /dev/null +++ b/lib/composer/vendor/consolidation/config/tests/ConfigTest.php @@ -0,0 +1,140 @@ +set('foo', 'bar'); + $data = $config->export(); + $this->assertEquals('{"foo":"bar"}', json_encode($data)); + } + + public function testCombine() + { + // Pointless tests just to ensure everything is covered. + $config = new Config(); + $config->set('foo', 'bar'); + $config->set('baz', 'boz'); + $config2 = new Config(); + $config2->set('foo', 'fu'); + $config2->set('new', 'blue'); + $config->combine($config2->export()); + $this->assertEquals('fu', $config->get('foo')); + $this->assertEquals('boz', $config->get('baz')); + $this->assertEquals('blue', $config->get('new')); + } + + public function testDefault() + { + $data = [ + 'a' => 'foo', + 'b' => 'bar', + 'c' => 'boz', + ]; + + $foo = ["foo" => "bar"]; + + $config = new Config($data); + + $config->setDefault('c', 'other'); + $config->setDefault('d', 'other'); + $config->setDefault('f', $foo); + + $this->assertEquals('foo', $config->get('a')); + $this->assertEquals('boz', $config->get('c')); + $this->assertEquals('other', $config->get('d')); + $this->assertEquals('other', $config->getDefault('c')); + $this->assertEquals('', $config->get('e')); + $this->assertEquals('bar', $config->get('f.foo')); + $this->assertEquals('{"foo":"bar"}', json_encode($config->get('f'))); + } + + public function testDefaultsArray() + { + $data = ['a' => 'foo', 'b' => 'bar', 'c' => 'boz',]; + $defaults = ['d' => 'foo', 'e' => 'bar', 'f' => 'boz',]; + + // Create reflection class to test private methods + $configClass = new \ReflectionClass("Consolidation\Config\Config"); + + // $defaults + $defaultsProperty = $configClass->getProperty("defaults"); + $defaultsProperty->setAccessible(true); + + // $getDefaults + $getDefaultsMethod = $configClass->getMethod("getDefaults"); + $getDefaultsMethod->setAccessible(true); + + // Test the config class + $config = new Config($data); + + // Set $config::defaults to an array to test getter and setter + $defaultsProperty->setValue($config, $defaults); + $this->assertTrue(is_array($defaultsProperty->getValue($config))); + $this->assertInstanceOf('Dflydev\DotAccessData\Data', + $getDefaultsMethod->invoke($config)); + + // Set $config::defaults to a string to test exception + $defaultsProperty->setValue($config, "foo.bar"); + $this->setExpectedException("Exception"); + $getDefaultsMethod->invoke($config); + } + + public function testConfigurationWithCrossFileReferences() + { + $config = new Config(); + $processor = new ConfigProcessor(); + $loader = new YamlConfigLoader(); + $processor->extend($loader->load(__DIR__ . '/data/config-1.yml')); + $processor->extend($loader->load(__DIR__ . '/data/config-2.yml')); + $processor->extend($loader->load(__DIR__ . '/data/config-3.yml')); + + // Does not fail if configuration file cannot be found + $processor->extend($loader->load(__DIR__ . '/data/no-such-file.yml')); + + // We must capture the sources before exporting, as export + // dumps this information. + $sources = $processor->sources(); + + $config->import($processor->export()); + + $this->assertEquals(implode(',', $config->get('m')), '3'); + $this->assertEquals($config->get('a'), 'foobarbaz'); + + $this->assertEquals($sources['a'], __DIR__ . '/data/config-3.yml'); + $this->assertEquals($sources['b'], __DIR__ . '/data/config-2.yml'); + $this->assertEquals($sources['c'], __DIR__ . '/data/config-1.yml'); + } + + public function testConfigurationWithReverseOrderCrossFileReferences() + { + $config = new Config(); + $processor = new ConfigProcessor(); + $loader = new YamlConfigLoader(); + $processor->extend($loader->load(__DIR__ . '/data/config-3.yml')); + $processor->extend($loader->load(__DIR__ . '/data/config-2.yml')); + $processor->extend($loader->load(__DIR__ . '/data/config-1.yml')); + + $sources = $processor->sources(); + $config->import($processor->export()); + + $this->assertEquals(implode(',', $config->get('m')), '1'); + + if (strpos($config->get('a'), '$') !== false) { + throw new \PHPUnit_Framework_SkippedTestError( + 'Evaluation of cross-file references in reverse order not supported.' + ); + } + $this->assertEquals($config->get('a'), 'foobarbaz'); + + $this->assertEquals($sources['a'], __DIR__ . '/data/config-3.yml'); + $this->assertEquals($sources['b'], __DIR__ . '/data/config-2.yml'); + $this->assertEquals($sources['c'], __DIR__ . '/data/config-1.yml'); + } +} diff --git a/lib/composer/vendor/consolidation/config/tests/data/config-1.yml b/lib/composer/vendor/consolidation/config/tests/data/config-1.yml new file mode 100644 index 000000000..e8f55a9d9 --- /dev/null +++ b/lib/composer/vendor/consolidation/config/tests/data/config-1.yml @@ -0,0 +1,3 @@ +c: foo +m: + - 1 diff --git a/lib/composer/vendor/consolidation/config/tests/data/config-2.yml b/lib/composer/vendor/consolidation/config/tests/data/config-2.yml new file mode 100644 index 000000000..baa7e63fc --- /dev/null +++ b/lib/composer/vendor/consolidation/config/tests/data/config-2.yml @@ -0,0 +1,3 @@ +b: ${c}bar +m: + - 2 diff --git a/lib/composer/vendor/consolidation/config/tests/data/config-3.yml b/lib/composer/vendor/consolidation/config/tests/data/config-3.yml new file mode 100644 index 000000000..d58956427 --- /dev/null +++ b/lib/composer/vendor/consolidation/config/tests/data/config-3.yml @@ -0,0 +1,3 @@ +a: ${b}baz +m: + - 3 diff --git a/lib/composer/vendor/consolidation/config/tests/scripts/install-scenario b/lib/composer/vendor/consolidation/config/tests/scripts/install-scenario new file mode 100755 index 000000000..d77d57d0b --- /dev/null +++ b/lib/composer/vendor/consolidation/config/tests/scripts/install-scenario @@ -0,0 +1,23 @@ +#!/bin/bash + +SCENARIO=$1 +ACTION=${2-install} + +dir=dependencies/${SCENARIO} +if [ -z "$SCENARIO" ] ; then + SCENARIO=default + dir=. +fi + + +if [ ! -d "$dir" ] ; then + echo "Requested scenario '${SCENARIO}' does not exist." + exit 1 +fi + +echo "Switch to ${SCENARIO} scenario" + +set -ex + +composer -n --working-dir=$dir ${ACTION} --prefer-dist --no-scripts +composer -n --working-dir=$dir info diff --git a/lib/composer/vendor/consolidation/config/tests/scripts/prep-dependencies b/lib/composer/vendor/consolidation/config/tests/scripts/prep-dependencies new file mode 100755 index 000000000..d18984404 --- /dev/null +++ b/lib/composer/vendor/consolidation/config/tests/scripts/prep-dependencies @@ -0,0 +1,66 @@ +#!/bin/bash + +# +# This script is called automatically on every `composer update`. +# See "post-update-cmd" in the "scripts" section of composer.json. +# +# This script will create a derived composer.json / composer.lock +# pair for every test scenario. Test scenarios are defined in the +# "scenarios" file, which should be customized to suit the needs +# of the project. +# + +SELF_DIRNAME="`dirname -- "$0"`" +source ${SELF_DIRNAME}/scenarios + +echo +echo "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::" +echo "::" +echo ":: Update dependencies for the following scenarios:" +echo "::" +echo ":: ${SCENARIOS}" +echo "::" +echo "::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::" +echo + +set -ex + +for SCENARIO in ${SCENARIOS} ; do + + dir=dependencies/${SCENARIO} + + # Define indirect variable names + stability_variable="stability_${SCENARIO}" + requirement_variable="requirement_${SCENARIO}" + platform_php_variable="platform_php_${SCENARIO}" + + echo "### Create $dir/composer.json for ${SCENARIO} scenario" + mkdir -p $dir + cp composer.json $dir + + # Then set our own platform php version if applicable (otherwise unset it) + composer -n --working-dir=$dir config platform.php "${!platform_php_variable---unset}" + + # Temporarily set our vendor directory to 'vendor' + composer -n --working-dir=$dir config vendor-dir vendor + + # Set an appropriate minimum stability for this version of Symfony + composer -n --working-dir=$dir config minimum-stability "${!stability_variable-stable}" + + # Add a constraint to limit the Symfony version + composer -n --working-dir=$dir require --dev --no-update "${!requirement_variable}" + + # Create the composer.lock file. Ignore the vendor directory created. + composer -n --working-dir=$dir update --no-scripts + + # Set the vendor directory to its final desired location. + composer -n --working-dir=$dir config vendor-dir '../../vendor' + + # The 'autoload' section specifies directory paths that are relative + # to the composer.json file. We will drop in some symlinks so that + # these paths will resolve as if the composer.json were in the root. + for target in $AUTOLOAD_DIRECTORIES ; do + ln -s -f ../../$target $dir + done + +done diff --git a/lib/composer/vendor/consolidation/config/tests/scripts/scenarios b/lib/composer/vendor/consolidation/config/tests/scripts/scenarios new file mode 100755 index 000000000..6a8f81b2d --- /dev/null +++ b/lib/composer/vendor/consolidation/config/tests/scripts/scenarios @@ -0,0 +1,12 @@ +#!/bin/bash + +SCENARIOS="symfony2 symfony3 symfony4" + +AUTOLOAD_DIRECTORIES='src tests' + +platform_php_symfony2='5.4' +platform_php_symfony3='5.6' + +requirement_symfony2='symfony/console:^2.8' +requirement_symfony3='symfony/console:^3' +requirement_symfony4='symfony/console:^4' diff --git a/lib/composer/vendor/consolidation/config/tests/src/ApplyConfigTestTarget.php b/lib/composer/vendor/consolidation/config/tests/src/ApplyConfigTestTarget.php new file mode 100644 index 000000000..6dace2bed --- /dev/null +++ b/lib/composer/vendor/consolidation/config/tests/src/ApplyConfigTestTarget.php @@ -0,0 +1,43 @@ +dir = $dir; + return $this; + } + + /** + * A getter for the 'dir' property that we will use to + * determine if the setter was called. + */ + public function getDir() + { + return $this->dir; + } + + /** + * A bad setter that does not return $this. + */ + public function bad($value) + { + $this->value = $value; + } + + /** + * A getter for the bad setter. + */ + public function getBad() + { + return $this->value; + } +} diff --git a/lib/composer/vendor/consolidation/config/tests/src/MyFooCommand.php b/lib/composer/vendor/consolidation/config/tests/src/MyFooCommand.php new file mode 100644 index 000000000..0487a024a --- /dev/null +++ b/lib/composer/vendor/consolidation/config/tests/src/MyFooCommand.php @@ -0,0 +1,47 @@ +setName('my:foo') + ->setDescription('My foo command.') + ->setHelp('This command tests command option injection by echoing its options') + ->addOption( + 'other', + null, + InputOption::VALUE_REQUIRED, + 'Some other option', + 'fish' + ) + ->addOption( + 'name', + null, + InputOption::VALUE_REQUIRED, + 'What is the name of the thing we are naming', + 'George' + ) + ->addOption( + 'dir', + null, + InputOption::VALUE_REQUIRED, + 'What is the base directory to use for this command', + '/default/path' + ); + } + + protected function execute(InputInterface $input, OutputInterface $output) + { + $output->writeln('Enter my:foo'); + $output->writeln('dir: ' . $input->getOption('dir')); + $output->writeln('name: ' . $input->getOption('name')); + $output->writeln('other: ' . $input->getOption('other')); + } +} diff --git a/lib/composer/vendor/consolidation/config/tests/src/TestLoader.php b/lib/composer/vendor/consolidation/config/tests/src/TestLoader.php new file mode 100644 index 000000000..241e51208 --- /dev/null +++ b/lib/composer/vendor/consolidation/config/tests/src/TestLoader.php @@ -0,0 +1,36 @@ +data = $data; + } + + public function setSourceName($name) + { + $this->sourceName = $name; + } + + public function export() + { + return $this->data; + } + + public function keys() + { + return array_keys($this->data); + } + + public function getSourceName() + { + return $this->sourceName; + } +} diff --git a/lib/composer/vendor/consolidation/log/.editorconfig b/lib/composer/vendor/consolidation/log/.editorconfig new file mode 100644 index 000000000..095771e67 --- /dev/null +++ b/lib/composer/vendor/consolidation/log/.editorconfig @@ -0,0 +1,15 @@ +# This file is for unifying the coding style for different editors and IDEs +# editorconfig.org + +root = true + +[*] +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[**.php] +indent_style = space +indent_size = 4 + diff --git a/lib/composer/vendor/consolidation/log/.gitignore b/lib/composer/vendor/consolidation/log/.gitignore index c1cea0a50..c5082499f 100644 --- a/lib/composer/vendor/consolidation/log/.gitignore +++ b/lib/composer/vendor/consolidation/log/.gitignore @@ -1,3 +1,3 @@ .DS_Store vendor -composer.lock +build diff --git a/lib/composer/vendor/consolidation/log/.travis.yml b/lib/composer/vendor/consolidation/log/.travis.yml new file mode 100644 index 000000000..9a2e350df --- /dev/null +++ b/lib/composer/vendor/consolidation/log/.travis.yml @@ -0,0 +1,47 @@ +language: php + +branches: + # Only test the master branch and SemVer tags. + only: + - master + - /^[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+.*$/ + +matrix: + include: + - + php: 7.1 + env: 'HIGHEST_LOWEST="update" STABILITY="RC"' + - + php: 7.0.11 + - + php: 5.6 + - + php: 5.5 + env: 'HIGHEST_LOWEST="update --prefer-lowest"' + +sudo: false + +cache: + directories: + - vendor + - $HOME/.composer/cache + +before_script: + # If running a highest/lowest dependencies test, get rid of composer.lock + - | + if [ -n "$HIGHEST_LOWEST" ] ; then + rm composer.lock + composer config --unset platform.php + composer config minimum-stability ${STABILITY-stable} + fi + - 'composer -n ${HIGHEST_LOWEST-install} --prefer-dist' + - composer why symfony/console + # Print out all of the installed packages in alphabetical order, with versions + - composer licenses + +script: + - vendor/bin/phpcs --standard=PSR2 -n src + - vendor/bin/phpunit + +after_success: + - travis_retry php vendor/bin/coveralls -v diff --git a/lib/composer/vendor/consolidation/log/CONTRIBUTING.md b/lib/composer/vendor/consolidation/log/CONTRIBUTING.md new file mode 100644 index 000000000..1bbf57361 --- /dev/null +++ b/lib/composer/vendor/consolidation/log/CONTRIBUTING.md @@ -0,0 +1,25 @@ +# Contributing to Consolidation + +Thank you for your interest in contributing to the Consolidation effort! Consolidation aims to provide reusable, loosely-coupled components useful for building command-line tools. Consolidation is built on top of Symfony Console, but aims to separate the tool from the implementation details of Symfony. + +Here are some of the guidelines you should follow to make the most of your efforts: + +## Code Style Guidelines + +Consolidation adheres to the [PSR-2 Coding Style Guide](http://www.php-fig.org/psr/psr-2/) for PHP code. + +## Pull Request Guidelines + +Every pull request is run through: + + - phpcs -n --standard=PSR2 src + - phpunit + - [Scrutinizer](https://scrutinizer-ci.com/g/consolidation-org/log/) + +It is easy to run the unit tests and code sniffer locally; simply ensure that `./vendor/bin` is in your `$PATH`, cd to the root of the project directory, and run `phpcs` and `phpunit` as shown above. To automatically fix coding standard errors, run: + + - phpcbf --standard=PSR2 src + +After submitting a pull request, please examine the Scrutinizer report. It is not required to fix all Scrutinizer issues; you may ignore recommendations that you disagree with. The spacing patches produced by Scrutinizer do not conform to PSR2 standards, and therefore should never be applied. DocBlock patches may be applied at your discression. Things that Scrutinizer identifies as a bug nearly always needs to be addressed. + +Pull requests must pass phpcs and phpunit in order to be merged; ideally, new functionality will also include new unit tests. diff --git a/lib/composer/vendor/consolidation/log/README.md b/lib/composer/vendor/consolidation/log/README.md index a11a8e8e0..996b657a0 100644 --- a/lib/composer/vendor/consolidation/log/README.md +++ b/lib/composer/vendor/consolidation/log/README.md @@ -1,16 +1,16 @@ # Consolidation\Log -Improved Psr-3 / Psr\Log logger based on Symfony Console components. +Improved [PSR-3](http://www.php-fig.org/psr/psr-3/) [Psr\Log](https://github.com/php-fig/log) logger based on Symfony Console components. -[![Circle CI](https://circleci.com/gh/consolidation-org/log.svg?style=svg)](https://circleci.com/gh/consolidation-org/log) [![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/consolidation-org/log/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/consolidation-org/log/?branch=master) [![Latest Stable Version](https://poser.pugx.org/consolidation/log/v/stable)](https://packagist.org/packages/consolidation/log) [![Total Downloads](https://poser.pugx.org/consolidation/log/downloads)](https://packagist.org/packages/consolidation/log) [![Latest Unstable Version](https://poser.pugx.org/consolidation/log/v/unstable)](https://packagist.org/packages/consolidation/log) [![License](https://poser.pugx.org/consolidation/log/license)](https://packagist.org/packages/consolidation/log) +[![Travis CI](https://travis-ci.org/consolidation-org/log.svg?branch=master)](https://travis-ci.org/consolidation-org/log) [![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/consolidation-org/log/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/consolidation-org/log/?branch=master) [![Coverage Status](https://coveralls.io/repos/github/consolidation-org/log/badge.svg?branch=master)](https://coveralls.io/github/consolidation-org/log?branch=master) [![License](https://poser.pugx.org/consolidation/log/license)](https://packagist.org/packages/consolidation/log) ## Component Status -In use in https://github.com/Codegyre/Robo +In use in [Robo](https://github.com/Codegyre/Robo). ## Motivation -Consolication\Log provides a Psr-3 compatible logger that provides styled log output to the standard error (stderr) stream. By default, styling is provided by the SymfonyStyle class from the Symfony Console component; however, alternative stylers may be provided if desired. +Consolidation\Log provides a Psr-3 compatible logger that provides styled log output to the standard error (stderr) stream. By default, styling is provided by the SymfonyStyle class from the Symfony Console component; however, alternative stylers may be provided if desired. ## Usage ``` @@ -18,7 +18,9 @@ $logger = new \Consolidation\Log\Logger($output); $logger->setLogOutputStyler(new LogOutputStyler()); // optional $logger->warning('The file {name} does not exist.', ['name' => $filename]); ``` -n.b. Substitution of replacements, such as `{name}` in the example above, is not required by Psr-3' however, this is often done (e.g. in the Symfony Console logger). +String interpolation -- that is, the substitution of replacements, such as `{name}` in the example above, is not required by Psr-3, and is not implemented by default in the Psr\Log project. However, it is recommended by PRS-3, and is often done, e.g. in the Symfony Console logger. + +Consolidation\Log supports string interpolation. ## Comparison to Existing Solutions diff --git a/lib/composer/vendor/consolidation/log/circle.yml b/lib/composer/vendor/consolidation/log/circle.yml deleted file mode 100644 index 2be28fa5d..000000000 --- a/lib/composer/vendor/consolidation/log/circle.yml +++ /dev/null @@ -1,12 +0,0 @@ -machine: - php: - version: 5.5.11 - hosts: - localhost: 127.0.0.1 - -test: - override: - - vendor/bin/phpcs --standard=PSR2 -n src - # See: https://circleci.com/docs/test-metadata#phpunit - - mkdir -p $CIRCLE_TEST_REPORTS/phpunit - - vendor/bin/phpunit --log-junit $CIRCLE_TEST_REPORTS/phpunit/junit.xml diff --git a/lib/composer/vendor/consolidation/log/composer.json b/lib/composer/vendor/consolidation/log/composer.json index b6ba0018e..fb4aa3677 100644 --- a/lib/composer/vendor/consolidation/log/composer.json +++ b/lib/composer/vendor/consolidation/log/composer.json @@ -21,15 +21,22 @@ "require": { "php": ">=5.5.0", "psr/log": "~1.0", - "symfony/console": "~2.5|~3.0" + "symfony/console": "^2.8|^3|^4" }, "require-dev": { "phpunit/phpunit": "4.*", + "satooshi/php-coveralls": "dev-master", "squizlabs/php_codesniffer": "2.*" }, + "minimum-stability": "stable", "extra": { "branch-alias": { "dev-master": "1.x-dev" } + }, + "config": { + "platform": { + "php": "5.6" + } } } diff --git a/lib/composer/vendor/consolidation/log/composer.lock b/lib/composer/vendor/consolidation/log/composer.lock new file mode 100644 index 000000000..e70cd5eff --- /dev/null +++ b/lib/composer/vendor/consolidation/log/composer.lock @@ -0,0 +1,1924 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", + "This file is @generated automatically" + ], + "content-hash": "848954b205ebe83dda1672291b55d07c", + "packages": [ + { + "name": "psr/log", + "version": "1.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", + "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "Psr/Log/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "time": "2016-10-10T12:19:37+00:00" + }, + { + "name": "symfony/console", + "version": "v3.3.13", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "63cd7960a0a522c3537f6326706d7f3b8de65805" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/63cd7960a0a522c3537f6326706d7f3b8de65805", + "reference": "63cd7960a0a522c3537f6326706d7f3b8de65805", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8", + "symfony/debug": "~2.8|~3.0", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "symfony/dependency-injection": "<3.3" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/config": "~3.3", + "symfony/dependency-injection": "~3.3", + "symfony/event-dispatcher": "~2.8|~3.0", + "symfony/filesystem": "~2.8|~3.0", + "symfony/process": "~2.8|~3.0" + }, + "suggest": { + "psr/log": "For using the console logger", + "symfony/event-dispatcher": "", + "symfony/filesystem": "", + "symfony/process": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.3-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Console\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Console Component", + "homepage": "https://symfony.com", + "time": "2017-11-16T15:24:32+00:00" + }, + { + "name": "symfony/debug", + "version": "v3.3.13", + "source": { + "type": "git", + "url": "https://github.com/symfony/debug.git", + "reference": "74557880e2846b5c84029faa96b834da37e29810" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/debug/zipball/74557880e2846b5c84029faa96b834da37e29810", + "reference": "74557880e2846b5c84029faa96b834da37e29810", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8", + "psr/log": "~1.0" + }, + "conflict": { + "symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2" + }, + "require-dev": { + "symfony/http-kernel": "~2.8|~3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.3-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Debug\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Debug Component", + "homepage": "https://symfony.com", + "time": "2017-11-10T16:38:39+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.6.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296", + "reference": "2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.6-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "time": "2017-10-11T12:05:26+00:00" + } + ], + "packages-dev": [ + { + "name": "doctrine/instantiator", + "version": "1.0.5", + "source": { + "type": "git", + "url": "https://github.com/doctrine/instantiator.git", + "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d", + "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d", + "shasum": "" + }, + "require": { + "php": ">=5.3,<8.0-DEV" + }, + "require-dev": { + "athletic/athletic": "~0.1.8", + "ext-pdo": "*", + "ext-phar": "*", + "phpunit/phpunit": "~4.0", + "squizlabs/php_codesniffer": "~2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "homepage": "http://ocramius.github.com/" + } + ], + "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", + "homepage": "https://github.com/doctrine/instantiator", + "keywords": [ + "constructor", + "instantiate" + ], + "time": "2015-06-14T21:17:01+00:00" + }, + { + "name": "guzzlehttp/guzzle", + "version": "6.3.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/guzzle.git", + "reference": "f4db5a78a5ea468d4831de7f0bf9d9415e348699" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/f4db5a78a5ea468d4831de7f0bf9d9415e348699", + "reference": "f4db5a78a5ea468d4831de7f0bf9d9415e348699", + "shasum": "" + }, + "require": { + "guzzlehttp/promises": "^1.0", + "guzzlehttp/psr7": "^1.4", + "php": ">=5.5" + }, + "require-dev": { + "ext-curl": "*", + "phpunit/phpunit": "^4.0 || ^5.0", + "psr/log": "^1.0" + }, + "suggest": { + "psr/log": "Required for using the Log middleware" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "6.2-dev" + } + }, + "autoload": { + "files": [ + "src/functions_include.php" + ], + "psr-4": { + "GuzzleHttp\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "description": "Guzzle is a PHP HTTP client library", + "homepage": "http://guzzlephp.org/", + "keywords": [ + "client", + "curl", + "framework", + "http", + "http client", + "rest", + "web service" + ], + "time": "2017-06-22T18:50:49+00:00" + }, + { + "name": "guzzlehttp/promises", + "version": "v1.3.1", + "source": { + "type": "git", + "url": "https://github.com/guzzle/promises.git", + "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/promises/zipball/a59da6cf61d80060647ff4d3eb2c03a2bc694646", + "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646", + "shasum": "" + }, + "require": { + "php": ">=5.5.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Promise\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "description": "Guzzle promises library", + "keywords": [ + "promise" + ], + "time": "2016-12-20T10:07:11+00:00" + }, + { + "name": "guzzlehttp/psr7", + "version": "1.4.2", + "source": { + "type": "git", + "url": "https://github.com/guzzle/psr7.git", + "reference": "f5b8a8512e2b58b0071a7280e39f14f72e05d87c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/f5b8a8512e2b58b0071a7280e39f14f72e05d87c", + "reference": "f5b8a8512e2b58b0071a7280e39f14f72e05d87c", + "shasum": "" + }, + "require": { + "php": ">=5.4.0", + "psr/http-message": "~1.0" + }, + "provide": { + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Psr7\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Tobias Schultze", + "homepage": "https://github.com/Tobion" + } + ], + "description": "PSR-7 message implementation that also provides common utility methods", + "keywords": [ + "http", + "message", + "request", + "response", + "stream", + "uri", + "url" + ], + "time": "2017-03-20T17:10:46+00:00" + }, + { + "name": "phpdocumentor/reflection-common", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionCommon.git", + "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", + "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", + "shasum": "" + }, + "require": { + "php": ">=5.5" + }, + "require-dev": { + "phpunit/phpunit": "^4.6" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": [ + "src" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jaap van Otterdijk", + "email": "opensource@ijaap.nl" + } + ], + "description": "Common reflection classes used by phpdocumentor to reflect the code structure", + "homepage": "http://www.phpdoc.org", + "keywords": [ + "FQSEN", + "phpDocumentor", + "phpdoc", + "reflection", + "static analysis" + ], + "time": "2017-09-11T18:02:19+00:00" + }, + { + "name": "phpdocumentor/reflection-docblock", + "version": "3.3.2", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "bf329f6c1aadea3299f08ee804682b7c45b326a2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/bf329f6c1aadea3299f08ee804682b7c45b326a2", + "reference": "bf329f6c1aadea3299f08ee804682b7c45b326a2", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0", + "phpdocumentor/reflection-common": "^1.0.0", + "phpdocumentor/type-resolver": "^0.4.0", + "webmozart/assert": "^1.0" + }, + "require-dev": { + "mockery/mockery": "^0.9.4", + "phpunit/phpunit": "^4.4" + }, + "type": "library", + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + } + ], + "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", + "time": "2017-11-10T14:09:06+00:00" + }, + { + "name": "phpdocumentor/type-resolver", + "version": "0.4.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/TypeResolver.git", + "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/9c977708995954784726e25d0cd1dddf4e65b0f7", + "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7", + "shasum": "" + }, + "require": { + "php": "^5.5 || ^7.0", + "phpdocumentor/reflection-common": "^1.0" + }, + "require-dev": { + "mockery/mockery": "^0.9.4", + "phpunit/phpunit": "^5.2||^4.8.24" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + } + ], + "time": "2017-07-14T14:27:02+00:00" + }, + { + "name": "phpspec/prophecy", + "version": "1.7.3", + "source": { + "type": "git", + "url": "https://github.com/phpspec/prophecy.git", + "reference": "e4ed002c67da8eceb0eb8ddb8b3847bb53c5c2bf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/e4ed002c67da8eceb0eb8ddb8b3847bb53c5c2bf", + "reference": "e4ed002c67da8eceb0eb8ddb8b3847bb53c5c2bf", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.0.2", + "php": "^5.3|^7.0", + "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0", + "sebastian/comparator": "^1.1|^2.0", + "sebastian/recursion-context": "^1.0|^2.0|^3.0" + }, + "require-dev": { + "phpspec/phpspec": "^2.5|^3.2", + "phpunit/phpunit": "^4.8.35 || ^5.7" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.7.x-dev" + } + }, + "autoload": { + "psr-0": { + "Prophecy\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Konstantin Kudryashov", + "email": "ever.zet@gmail.com", + "homepage": "http://everzet.com" + }, + { + "name": "Marcello Duarte", + "email": "marcello.duarte@gmail.com" + } + ], + "description": "Highly opinionated mocking framework for PHP 5.3+", + "homepage": "https://github.com/phpspec/prophecy", + "keywords": [ + "Double", + "Dummy", + "fake", + "mock", + "spy", + "stub" + ], + "time": "2017-11-24T13:59:53+00:00" + }, + { + "name": "phpunit/php-code-coverage", + "version": "2.2.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/eabf68b476ac7d0f73793aada060f1c1a9bf8979", + "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "phpunit/php-file-iterator": "~1.3", + "phpunit/php-text-template": "~1.2", + "phpunit/php-token-stream": "~1.3", + "sebastian/environment": "^1.3.2", + "sebastian/version": "~1.0" + }, + "require-dev": { + "ext-xdebug": ">=2.1.4", + "phpunit/phpunit": "~4" + }, + "suggest": { + "ext-dom": "*", + "ext-xdebug": ">=2.2.1", + "ext-xmlwriter": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.2.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", + "homepage": "https://github.com/sebastianbergmann/php-code-coverage", + "keywords": [ + "coverage", + "testing", + "xunit" + ], + "time": "2015-10-06T15:47:00+00:00" + }, + { + "name": "phpunit/php-file-iterator", + "version": "1.4.5", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/730b01bc3e867237eaac355e06a36b85dd93a8b4", + "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "FilterIterator implementation that filters files based on a list of suffixes.", + "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", + "keywords": [ + "filesystem", + "iterator" + ], + "time": "2017-11-27T13:52:08+00:00" + }, + { + "name": "phpunit/php-text-template", + "version": "1.2.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "keywords": [ + "template" + ], + "time": "2015-06-21T13:50:34+00:00" + }, + { + "name": "phpunit/php-timer", + "version": "1.0.9", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", + "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", + "shasum": "" + }, + "require": { + "php": "^5.3.3 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", + "keywords": [ + "timer" + ], + "time": "2017-02-26T11:10:40+00:00" + }, + { + "name": "phpunit/php-token-stream", + "version": "1.4.11", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-token-stream.git", + "reference": "e03f8f67534427a787e21a385a67ec3ca6978ea7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/e03f8f67534427a787e21a385a67ec3ca6978ea7", + "reference": "e03f8f67534427a787e21a385a67ec3ca6978ea7", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Wrapper around PHP's tokenizer extension.", + "homepage": "https://github.com/sebastianbergmann/php-token-stream/", + "keywords": [ + "tokenizer" + ], + "time": "2017-02-27T10:12:30+00:00" + }, + { + "name": "phpunit/phpunit", + "version": "4.8.36", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "46023de9a91eec7dfb06cc56cb4e260017298517" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/46023de9a91eec7dfb06cc56cb4e260017298517", + "reference": "46023de9a91eec7dfb06cc56cb4e260017298517", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-json": "*", + "ext-pcre": "*", + "ext-reflection": "*", + "ext-spl": "*", + "php": ">=5.3.3", + "phpspec/prophecy": "^1.3.1", + "phpunit/php-code-coverage": "~2.1", + "phpunit/php-file-iterator": "~1.4", + "phpunit/php-text-template": "~1.2", + "phpunit/php-timer": "^1.0.6", + "phpunit/phpunit-mock-objects": "~2.3", + "sebastian/comparator": "~1.2.2", + "sebastian/diff": "~1.2", + "sebastian/environment": "~1.3", + "sebastian/exporter": "~1.2", + "sebastian/global-state": "~1.0", + "sebastian/version": "~1.0", + "symfony/yaml": "~2.1|~3.0" + }, + "suggest": { + "phpunit/php-invoker": "~1.1" + }, + "bin": [ + "phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.8.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "The PHP Unit Testing framework.", + "homepage": "https://phpunit.de/", + "keywords": [ + "phpunit", + "testing", + "xunit" + ], + "time": "2017-06-21T08:07:12+00:00" + }, + { + "name": "phpunit/phpunit-mock-objects", + "version": "2.3.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", + "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/ac8e7a3db35738d56ee9a76e78a4e03d97628983", + "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.0.2", + "php": ">=5.3.3", + "phpunit/php-text-template": "~1.2", + "sebastian/exporter": "~1.2" + }, + "require-dev": { + "phpunit/phpunit": "~4.4" + }, + "suggest": { + "ext-soap": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.3.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "Mock Object library for PHPUnit", + "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/", + "keywords": [ + "mock", + "xunit" + ], + "time": "2015-10-02T06:51:40+00:00" + }, + { + "name": "psr/http-message", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-message.git", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP messages", + "homepage": "https://github.com/php-fig/http-message", + "keywords": [ + "http", + "http-message", + "psr", + "psr-7", + "request", + "response" + ], + "time": "2016-08-06T14:39:51+00:00" + }, + { + "name": "satooshi/php-coveralls", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/php-coveralls/php-coveralls.git", + "reference": "c9d3fe2327c8539f1105dc19954673ba993e4ad9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-coveralls/php-coveralls/zipball/c9d3fe2327c8539f1105dc19954673ba993e4ad9", + "reference": "c9d3fe2327c8539f1105dc19954673ba993e4ad9", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-simplexml": "*", + "guzzlehttp/guzzle": "^6.0", + "php": "^5.5 || ^7.0", + "psr/log": "^1.0", + "symfony/config": "^2.1 || ^3.0 || ^4.0", + "symfony/console": "^2.1 || ^3.0 || ^4.0", + "symfony/stopwatch": "^2.0 || ^3.0 || ^4.0", + "symfony/yaml": "^2.0 || ^3.0 || ^4.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.4.3 || ^6.0" + }, + "suggest": { + "symfony/http-kernel": "Allows Symfony integration" + }, + "bin": [ + "bin/coveralls" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "psr-4": { + "PhpCoveralls\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Kitamura Satoshi", + "email": "with.no.parachute@gmail.com", + "homepage": "https://www.facebook.com/satooshi.jp", + "role": "Original creator" + }, + { + "name": "Takashi Matsuo", + "email": "tmatsuo@google.com" + }, + { + "name": "Google Inc" + }, + { + "name": "Dariusz Ruminski", + "email": "dariusz.ruminski@gmail.com", + "homepage": "https://github.com/keradus" + }, + { + "name": "Contributors", + "homepage": "https://github.com/php-coveralls/php-coveralls/graphs/contributors" + } + ], + "description": "PHP client library for Coveralls API", + "homepage": "https://github.com/php-coveralls/php-coveralls", + "keywords": [ + "ci", + "coverage", + "github", + "test" + ], + "time": "2017-10-14T23:16:28+00:00" + }, + { + "name": "sebastian/comparator", + "version": "1.2.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2b7424b55f5047b47ac6e5ccb20b2aea4011d9be", + "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "sebastian/diff": "~1.2", + "sebastian/exporter": "~1.2 || ~2.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides the functionality to compare PHP values for equality", + "homepage": "http://www.github.com/sebastianbergmann/comparator", + "keywords": [ + "comparator", + "compare", + "equality" + ], + "time": "2017-01-29T09:50:25+00:00" + }, + { + "name": "sebastian/diff", + "version": "1.4.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/7f066a26a962dbe58ddea9f72a4e82874a3975a4", + "reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4", + "shasum": "" + }, + "require": { + "php": "^5.3.3 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Diff implementation", + "homepage": "https://github.com/sebastianbergmann/diff", + "keywords": [ + "diff" + ], + "time": "2017-05-22T07:24:03+00:00" + }, + { + "name": "sebastian/environment", + "version": "1.3.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "be2c607e43ce4c89ecd60e75c6a85c126e754aea" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/be2c607e43ce4c89ecd60e75c6a85c126e754aea", + "reference": "be2c607e43ce4c89ecd60e75c6a85c126e754aea", + "shasum": "" + }, + "require": { + "php": "^5.3.3 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8 || ^5.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides functionality to handle HHVM/PHP environments", + "homepage": "http://www.github.com/sebastianbergmann/environment", + "keywords": [ + "Xdebug", + "environment", + "hhvm" + ], + "time": "2016-08-18T05:49:44+00:00" + }, + { + "name": "sebastian/exporter", + "version": "1.2.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/42c4c2eec485ee3e159ec9884f95b431287edde4", + "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "sebastian/recursion-context": "~1.0" + }, + "require-dev": { + "ext-mbstring": "*", + "phpunit/phpunit": "~4.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides the functionality to export PHP variables for visualization", + "homepage": "http://www.github.com/sebastianbergmann/exporter", + "keywords": [ + "export", + "exporter" + ], + "time": "2016-06-17T09:04:28+00:00" + }, + { + "name": "sebastian/global-state", + "version": "1.1.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bc37d50fea7d017d3d340f230811c9f1d7280af4", + "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.2" + }, + "suggest": { + "ext-uopz": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Snapshotting of global state", + "homepage": "http://www.github.com/sebastianbergmann/global-state", + "keywords": [ + "global state" + ], + "time": "2015-10-12T03:26:01+00:00" + }, + { + "name": "sebastian/recursion-context", + "version": "1.0.5", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "b19cc3298482a335a95f3016d2f8a6950f0fbcd7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/b19cc3298482a335a95f3016d2f8a6950f0fbcd7", + "reference": "b19cc3298482a335a95f3016d2f8a6950f0fbcd7", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides functionality to recursively process PHP variables", + "homepage": "http://www.github.com/sebastianbergmann/recursion-context", + "time": "2016-10-03T07:41:43+00:00" + }, + { + "name": "sebastian/version", + "version": "1.0.6", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/58b3a85e7999757d6ad81c787a1fbf5ff6c628c6", + "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6", + "shasum": "" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", + "time": "2015-06-21T13:59:46+00:00" + }, + { + "name": "squizlabs/php_codesniffer", + "version": "2.9.1", + "source": { + "type": "git", + "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", + "reference": "dcbed1074f8244661eecddfc2a675430d8d33f62" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/dcbed1074f8244661eecddfc2a675430d8d33f62", + "reference": "dcbed1074f8244661eecddfc2a675430d8d33f62", + "shasum": "" + }, + "require": { + "ext-simplexml": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": ">=5.1.2" + }, + "require-dev": { + "phpunit/phpunit": "~4.0" + }, + "bin": [ + "scripts/phpcs", + "scripts/phpcbf" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "autoload": { + "classmap": [ + "CodeSniffer.php", + "CodeSniffer/CLI.php", + "CodeSniffer/Exception.php", + "CodeSniffer/File.php", + "CodeSniffer/Fixer.php", + "CodeSniffer/Report.php", + "CodeSniffer/Reporting.php", + "CodeSniffer/Sniff.php", + "CodeSniffer/Tokens.php", + "CodeSniffer/Reports/", + "CodeSniffer/Tokenizers/", + "CodeSniffer/DocGenerators/", + "CodeSniffer/Standards/AbstractPatternSniff.php", + "CodeSniffer/Standards/AbstractScopeSniff.php", + "CodeSniffer/Standards/AbstractVariableSniff.php", + "CodeSniffer/Standards/IncorrectPatternException.php", + "CodeSniffer/Standards/Generic/Sniffs/", + "CodeSniffer/Standards/MySource/Sniffs/", + "CodeSniffer/Standards/PEAR/Sniffs/", + "CodeSniffer/Standards/PSR1/Sniffs/", + "CodeSniffer/Standards/PSR2/Sniffs/", + "CodeSniffer/Standards/Squiz/Sniffs/", + "CodeSniffer/Standards/Zend/Sniffs/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Greg Sherwood", + "role": "lead" + } + ], + "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", + "homepage": "http://www.squizlabs.com/php-codesniffer", + "keywords": [ + "phpcs", + "standards" + ], + "time": "2017-05-22T02:43:20+00:00" + }, + { + "name": "symfony/config", + "version": "v3.3.13", + "source": { + "type": "git", + "url": "https://github.com/symfony/config.git", + "reference": "8d2649077dc54dfbaf521d31f217383d82303c5f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/config/zipball/8d2649077dc54dfbaf521d31f217383d82303c5f", + "reference": "8d2649077dc54dfbaf521d31f217383d82303c5f", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8", + "symfony/filesystem": "~2.8|~3.0" + }, + "conflict": { + "symfony/dependency-injection": "<3.3", + "symfony/finder": "<3.3" + }, + "require-dev": { + "symfony/dependency-injection": "~3.3", + "symfony/finder": "~3.3", + "symfony/yaml": "~3.0" + }, + "suggest": { + "symfony/yaml": "To use the yaml reference dumper" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.3-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Config\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Config Component", + "homepage": "https://symfony.com", + "time": "2017-11-07T14:16:22+00:00" + }, + { + "name": "symfony/filesystem", + "version": "v3.3.13", + "source": { + "type": "git", + "url": "https://github.com/symfony/filesystem.git", + "reference": "77db266766b54db3ee982fe51868328b887ce15c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/77db266766b54db3ee982fe51868328b887ce15c", + "reference": "77db266766b54db3ee982fe51868328b887ce15c", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.3-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Filesystem\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Filesystem Component", + "homepage": "https://symfony.com", + "time": "2017-11-07T14:12:55+00:00" + }, + { + "name": "symfony/stopwatch", + "version": "v3.3.13", + "source": { + "type": "git", + "url": "https://github.com/symfony/stopwatch.git", + "reference": "1e93c3139ef6c799831fe03efd0fb1c7aecb3365" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/1e93c3139ef6c799831fe03efd0fb1c7aecb3365", + "reference": "1e93c3139ef6c799831fe03efd0fb1c7aecb3365", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.3-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Stopwatch\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Stopwatch Component", + "homepage": "https://symfony.com", + "time": "2017-11-10T19:02:53+00:00" + }, + { + "name": "symfony/yaml", + "version": "v3.3.13", + "source": { + "type": "git", + "url": "https://github.com/symfony/yaml.git", + "reference": "0938408c4faa518d95230deabb5f595bf0de31b9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/yaml/zipball/0938408c4faa518d95230deabb5f595bf0de31b9", + "reference": "0938408c4faa518d95230deabb5f595bf0de31b9", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8" + }, + "require-dev": { + "symfony/console": "~2.8|~3.0" + }, + "suggest": { + "symfony/console": "For validating YAML files using the lint command" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.3-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Yaml\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Yaml Component", + "homepage": "https://symfony.com", + "time": "2017-11-10T18:26:04+00:00" + }, + { + "name": "webmozart/assert", + "version": "1.2.0", + "source": { + "type": "git", + "url": "https://github.com/webmozart/assert.git", + "reference": "2db61e59ff05fe5126d152bd0655c9ea113e550f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozart/assert/zipball/2db61e59ff05fe5126d152bd0655c9ea113e550f", + "reference": "2db61e59ff05fe5126d152bd0655c9ea113e550f", + "shasum": "" + }, + "require": { + "php": "^5.3.3 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.6", + "sebastian/version": "^1.0.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3-dev" + } + }, + "autoload": { + "psr-4": { + "Webmozart\\Assert\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Assertions to validate method input/output with nice error messages.", + "keywords": [ + "assert", + "check", + "validate" + ], + "time": "2016-11-23T20:04:58+00:00" + } + ], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": { + "satooshi/php-coveralls": 20 + }, + "prefer-stable": false, + "prefer-lowest": false, + "platform": { + "php": ">=5.5.0" + }, + "platform-dev": [], + "platform-overrides": { + "php": "5.6" + } +} diff --git a/lib/composer/vendor/consolidation/log/phpunit.xml.dist b/lib/composer/vendor/consolidation/log/phpunit.xml.dist index 4c5e0b934..73f3e76a6 100644 --- a/lib/composer/vendor/consolidation/log/phpunit.xml.dist +++ b/lib/composer/vendor/consolidation/log/phpunit.xml.dist @@ -4,4 +4,12 @@ tests + + + + + + src + + diff --git a/lib/composer/vendor/consolidation/output-formatters/.gitignore b/lib/composer/vendor/consolidation/output-formatters/.gitignore index ae5ae7282..f122e5b90 100644 --- a/lib/composer/vendor/consolidation/output-formatters/.gitignore +++ b/lib/composer/vendor/consolidation/output-formatters/.gitignore @@ -3,5 +3,4 @@ phpunit.xml build vendor -composer.lock main.php diff --git a/lib/composer/vendor/consolidation/output-formatters/.travis.yml b/lib/composer/vendor/consolidation/output-formatters/.travis.yml index 2c11c39c3..38dfb562c 100644 --- a/lib/composer/vendor/consolidation/output-formatters/.travis.yml +++ b/lib/composer/vendor/consolidation/output-formatters/.travis.yml @@ -6,11 +6,20 @@ branches: - master - /^[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+.*$/ -php: - - 7.0 - - 5.6 - - 5.5 - - 5.4 +matrix: + include: + - + php: 7.1 + env: 'HIGHEST_LOWEST="update" STABILITY="RC"' + - + php: 7.0.11 + - + php: 5.6 + - + php: 5.5 + - + php: 5.4 + env: 'HIGHEST_LOWEST="update --prefer-lowest"' sudo: false @@ -20,7 +29,17 @@ cache: - $HOME/.composer/cache before_script: - - composer install + # If running a highest/lowest dependencies test, get rid of composer.lock + - | + if [ -n "$HIGHEST_LOWEST" ] ; then + rm composer.lock + composer config --unset platform.php + composer config minimum-stability ${STABILITY-stable} + fi + - 'composer -n ${HIGHEST_LOWEST-install} --prefer-dist' + - composer why symfony/console + # Print out all of the installed packages in alphabetical order, with versions + - composer licenses script: - vendor/bin/phpunit diff --git a/lib/composer/vendor/consolidation/output-formatters/CHANGELOG.md b/lib/composer/vendor/consolidation/output-formatters/CHANGELOG.md index 776c5b62b..dd80b3f8e 100644 --- a/lib/composer/vendor/consolidation/output-formatters/CHANGELOG.md +++ b/lib/composer/vendor/consolidation/output-formatters/CHANGELOG.md @@ -1,5 +1,52 @@ # Change Log +### 3.1.13 - 29 November 2017 + +- Allow XML output for RowsOfFields (#60). +- Allow Symfony 4 components and add make tests run on three versions of Symfony. + +### 3.1.12 - 12 October 2017 + +- Bugfix: Use InputOption::VALUE_REQUIRED instead of InputOption::VALUE_OPTIONAL + for injected options such as --format and --fields. +- Bugfix: Ignore empty properties in the property parser. + +### 3.1.11 - 17 August 2017 + +- Add ListDataFromKeys marker data type. + +### 3.1.10 - 6 June 2017 + +- Typo in CalculateWidths::distributeLongColumns causes failure for some column width distributions + +### 3.1.9 - 8 May 2017 + +- Improve wrapping algorithm + +### 3.1.7 - 20 Jan 2017 + +- Add Windows testing + +### 3.1.6 - 8 Jan 2017 + +- Move victorjonsson/markdowndocs to require-dev + +### 3.1.5 - 23 November 2016 + +- When converting from XML to an array, use the 'id' or 'name' element as the array key value. + +### 3.1.4 - 20 November 2016 + +- Add a 'list delimiter' formatter option, so that we can create a Drush-style table for property lists. + +### 3.1.1 ~ 3.1.3 - 18 November 2016 + +- Fine-tune wordwrapping. + +### 3.1.0 - 17 November 2016 + +- Add wordwrapping to table formatter. + ### 3.0.0 - 14 November 2016 - **Breaking** The RenderCellInterface is now provided a reference to the entire row data. Existing clients need only add the new parameter to their method defnition to update. @@ -9,10 +56,6 @@ ### 2.1.0 - 7 November 2016 - Add RenderCellCollections to structured lists, so that commands may add renderers to structured data without defining a new structured data subclass. - - -### 2.0.1 - 4 October 2016 - - Throw an exception if the client requests a field that does not exist. - Remove unwanted extra layer of nesting when formatting an PropertyList with an array formatter (json, yaml, etc.). diff --git a/lib/composer/vendor/consolidation/output-formatters/README.md b/lib/composer/vendor/consolidation/output-formatters/README.md index 7b9b912f5..d95616a93 100644 --- a/lib/composer/vendor/consolidation/output-formatters/README.md +++ b/lib/composer/vendor/consolidation/output-formatters/README.md @@ -2,7 +2,11 @@ Apply transformations to structured data to write output in different formats. -[![Travis CI](https://travis-ci.org/consolidation/output-formatters.svg?branch=master)](https://travis-ci.org/consolidation/output-formatters) [![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/consolidation/output-formatters/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/consolidation/output-formatters/?branch=master) [![Coverage Status](https://coveralls.io/repos/github/consolidation/output-formatters/badge.svg?branch=master)](https://coveralls.io/github/consolidation/output-formatters?branch=master) [![License](https://poser.pugx.org/consolidation/output-formatters/license)](https://packagist.org/packages/consolidation/output-formatters) +[![Travis CI](https://travis-ci.org/consolidation/output-formatters.svg?branch=master)](https://travis-ci.org/consolidation/output-formatters) +[![Windows CI](https://ci.appveyor.com/api/projects/status/umyfuujca6d2g2k6?svg=true)](https://ci.appveyor.com/project/greg-1-anderson/output-formatters) +[![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/consolidation/output-formatters/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/consolidation/output-formatters/?branch=master) +[![Coverage Status](https://coveralls.io/repos/github/consolidation/output-formatters/badge.svg?branch=master)](https://coveralls.io/github/consolidation/output-formatters?branch=master) +[![License](https://poser.pugx.org/consolidation/output-formatters/license)](https://packagist.org/packages/consolidation/output-formatters) ## Component Status @@ -50,6 +54,7 @@ Most formatters will operate on any array or ArrayObject data. Some formatters r - `RowsOfFields`: Each row contains an associative array of field:value pairs. It is also assumed that the fields of each row are the same for every row. This format is ideal for displaying in a table, with labels in the top row. - `PropertyList`: Each row contains a field:value pair. Each field is unique. This format is ideal for displaying in a table, with labels in the first column and values in the second common. +- `ListDataFromKeys`: The result may be structured or unstructured data. When formatted with the --format=list formatter, the result will come from the array keys instead of the array values. - `DOMDocument`: The standard PHP DOM document class may be used by functions that need to be able to presicely specify the exact attributes and children when the XML output format is used. Commands that return table structured data with fields can be filtered and/or re-ordered by using the --fields option. These structured data types can also be formatted into a more generic type such as yaml or json, even after being filtered. This capabilities are not available if the data is returned in a bare php array. diff --git a/lib/composer/vendor/consolidation/output-formatters/appveyor.yml b/lib/composer/vendor/consolidation/output-formatters/appveyor.yml new file mode 100644 index 000000000..3e08fa1c0 --- /dev/null +++ b/lib/composer/vendor/consolidation/output-formatters/appveyor.yml @@ -0,0 +1,68 @@ +build: false +shallow_clone: true +platform: 'x86' +clone_folder: C:\projects\output-formatters +branches: + only: + - master + +## Cache composer bits +cache: + - '%LOCALAPPDATA%\Composer\files -> composer.lock' + +init: + #https://github.com/composer/composer/blob/master/appveyor.yml + #- SET ANSICON=121x90 (121x90) + +# Inspired by https://github.com/Codeception/base/blob/master/appveyor.yml and https://github.com/phpmd/phpmd/blob/master/appveyor.yml +install: + - cinst -y curl + - SET PATH=C:\Program Files\curl;%PATH% + #which is only needed by the test suite. + - cinst -y which + - SET PATH=C:\Program Files\which;%PATH% + - git clone -q https://github.com/acquia/DevDesktopCommon.git #For tar, cksum, ... + - SET PATH=%APPVEYOR_BUILD_FOLDER%/DevDesktopCommon/bintools-win/msys/bin;%PATH% + - SET PATH=C:\Program Files\MySql\MySQL Server 5.7\bin\;%PATH% + #Install PHP per https://blog.wyrihaximus.net/2016/11/running-php-unit-tests-on-windows-using-appveyor-and-chocolatey/ + - ps: appveyor-retry cinst --ignore-checksums -y php --version ((choco search php --exact --all-versions -r | select-string -pattern $Env:php_ver_target | Select-Object -first 1) -replace '[php|]','') + - cd c:\tools\php70 + - copy php.ini-production php.ini + + - echo extension_dir=ext >> php.ini + - echo extension=php_openssl.dll >> php.ini + - echo date.timezone="UTC" >> php.ini + - echo variables_order="EGPCS" >> php.ini #May be unneeded. + - echo mbstring.http_input=pass >> php.ini + - echo mbstring.http_output=pass >> php.ini + - echo sendmail_path=nul >> php.ini + - echo extension=php_mbstring.dll >> php.ini + - echo extension=php_curl.dll >> php.ini + - echo extension=php_pdo_mysql.dll >> php.ini + - echo extension=php_pdo_pgsql.dll >> php.ini + - echo extension=php_pdo_sqlite.dll >> php.ini + - echo extension=php_pgsql.dll >> php.ini + - echo extension=php_gd2.dll >> php.ini + - SET PATH=C:\tools\php70;%PATH% + #Install Composer + - cd %APPVEYOR_BUILD_FOLDER% + #- appveyor DownloadFile https://getcomposer.org/composer.phar + - php -r "readfile('http://getcomposer.org/installer');" | php + #Install dependencies via Composer. + #Newer versions of the dependencies have whitespace differences that break tests. + #Maybe we should fix and do highest/lowest here someday. + - copy composer.windows.lock composer.lock + - php composer.phar -q install --prefer-dist -n + - SET PATH=%APPVEYOR_BUILD_FOLDER%;%APPVEYOR_BUILD_FOLDER%/vendor/bin;%PATH% + #Create a sandbox for testing. Don't think we need this. + - mkdir c:\test_temp + +test_script: + - php composer.phar test + - php composer.phar cs + +# environment variables +environment: + global: + php_ver_target: 7.0 + diff --git a/lib/composer/vendor/consolidation/output-formatters/composer.json b/lib/composer/vendor/consolidation/output-formatters/composer.json index 4a1a92a2d..adaba21d8 100644 --- a/lib/composer/vendor/consolidation/output-formatters/composer.json +++ b/lib/composer/vendor/consolidation/output-formatters/composer.json @@ -20,14 +20,14 @@ }, "require": { "php": ">=5.4.0", - "symfony/console": "~2.5|~3.0", - "symfony/finder": "~2.5|~3.0", - "victorjonsson/markdowndocs": "^1.3" + "symfony/console": "^2.8|^3|^4", + "symfony/finder": "^2.5|^3|^4" }, "require-dev": { - "phpunit/phpunit": "4.*", - "satooshi/php-coveralls": "^1.0", - "squizlabs/php_codesniffer": "2.*" + "phpunit/phpunit": "^4.8", + "satooshi/php-coveralls": "^1.0.2 | dev-master", + "squizlabs/php_codesniffer": "^2.7", + "victorjonsson/markdowndocs": "^1.3" }, "scripts": { "api": "phpdoc-md generate src > docs/api.md", @@ -37,7 +37,12 @@ }, "extra": { "branch-alias": { - "dev-master": "2.x-dev" + "dev-master": "3.x-dev" + } + }, + "config": { + "platform": { + "php": "5.6" } } } diff --git a/lib/composer/vendor/consolidation/output-formatters/composer.lock b/lib/composer/vendor/consolidation/output-formatters/composer.lock new file mode 100644 index 000000000..c63b14205 --- /dev/null +++ b/lib/composer/vendor/consolidation/output-formatters/composer.lock @@ -0,0 +1,2017 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", + "This file is @generated automatically" + ], + "content-hash": "146e545ed52a26233e2be70eddd6be2a", + "packages": [ + { + "name": "psr/log", + "version": "1.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", + "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "Psr/Log/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "time": "2016-10-10T12:19:37+00:00" + }, + { + "name": "symfony/console", + "version": "v3.3.13", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "63cd7960a0a522c3537f6326706d7f3b8de65805" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/63cd7960a0a522c3537f6326706d7f3b8de65805", + "reference": "63cd7960a0a522c3537f6326706d7f3b8de65805", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8", + "symfony/debug": "~2.8|~3.0", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "symfony/dependency-injection": "<3.3" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/config": "~3.3", + "symfony/dependency-injection": "~3.3", + "symfony/event-dispatcher": "~2.8|~3.0", + "symfony/filesystem": "~2.8|~3.0", + "symfony/process": "~2.8|~3.0" + }, + "suggest": { + "psr/log": "For using the console logger", + "symfony/event-dispatcher": "", + "symfony/filesystem": "", + "symfony/process": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.3-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Console\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Console Component", + "homepage": "https://symfony.com", + "time": "2017-11-16T15:24:32+00:00" + }, + { + "name": "symfony/debug", + "version": "v3.3.13", + "source": { + "type": "git", + "url": "https://github.com/symfony/debug.git", + "reference": "74557880e2846b5c84029faa96b834da37e29810" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/debug/zipball/74557880e2846b5c84029faa96b834da37e29810", + "reference": "74557880e2846b5c84029faa96b834da37e29810", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8", + "psr/log": "~1.0" + }, + "conflict": { + "symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2" + }, + "require-dev": { + "symfony/http-kernel": "~2.8|~3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.3-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Debug\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Debug Component", + "homepage": "https://symfony.com", + "time": "2017-11-10T16:38:39+00:00" + }, + { + "name": "symfony/finder", + "version": "v3.3.13", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "138af5ec075d4b1d1bd19de08c38a34bb2d7d880" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/138af5ec075d4b1d1bd19de08c38a34bb2d7d880", + "reference": "138af5ec075d4b1d1bd19de08c38a34bb2d7d880", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.3-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Finder\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Finder Component", + "homepage": "https://symfony.com", + "time": "2017-11-05T15:47:03+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.6.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296", + "reference": "2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.6-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "time": "2017-10-11T12:05:26+00:00" + } + ], + "packages-dev": [ + { + "name": "doctrine/instantiator", + "version": "1.0.5", + "source": { + "type": "git", + "url": "https://github.com/doctrine/instantiator.git", + "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d", + "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d", + "shasum": "" + }, + "require": { + "php": ">=5.3,<8.0-DEV" + }, + "require-dev": { + "athletic/athletic": "~0.1.8", + "ext-pdo": "*", + "ext-phar": "*", + "phpunit/phpunit": "~4.0", + "squizlabs/php_codesniffer": "~2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "homepage": "http://ocramius.github.com/" + } + ], + "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", + "homepage": "https://github.com/doctrine/instantiator", + "keywords": [ + "constructor", + "instantiate" + ], + "time": "2015-06-14T21:17:01+00:00" + }, + { + "name": "guzzlehttp/guzzle", + "version": "6.3.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/guzzle.git", + "reference": "f4db5a78a5ea468d4831de7f0bf9d9415e348699" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/f4db5a78a5ea468d4831de7f0bf9d9415e348699", + "reference": "f4db5a78a5ea468d4831de7f0bf9d9415e348699", + "shasum": "" + }, + "require": { + "guzzlehttp/promises": "^1.0", + "guzzlehttp/psr7": "^1.4", + "php": ">=5.5" + }, + "require-dev": { + "ext-curl": "*", + "phpunit/phpunit": "^4.0 || ^5.0", + "psr/log": "^1.0" + }, + "suggest": { + "psr/log": "Required for using the Log middleware" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "6.2-dev" + } + }, + "autoload": { + "files": [ + "src/functions_include.php" + ], + "psr-4": { + "GuzzleHttp\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "description": "Guzzle is a PHP HTTP client library", + "homepage": "http://guzzlephp.org/", + "keywords": [ + "client", + "curl", + "framework", + "http", + "http client", + "rest", + "web service" + ], + "time": "2017-06-22T18:50:49+00:00" + }, + { + "name": "guzzlehttp/promises", + "version": "v1.3.1", + "source": { + "type": "git", + "url": "https://github.com/guzzle/promises.git", + "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/promises/zipball/a59da6cf61d80060647ff4d3eb2c03a2bc694646", + "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646", + "shasum": "" + }, + "require": { + "php": ">=5.5.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Promise\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "description": "Guzzle promises library", + "keywords": [ + "promise" + ], + "time": "2016-12-20T10:07:11+00:00" + }, + { + "name": "guzzlehttp/psr7", + "version": "1.4.2", + "source": { + "type": "git", + "url": "https://github.com/guzzle/psr7.git", + "reference": "f5b8a8512e2b58b0071a7280e39f14f72e05d87c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/f5b8a8512e2b58b0071a7280e39f14f72e05d87c", + "reference": "f5b8a8512e2b58b0071a7280e39f14f72e05d87c", + "shasum": "" + }, + "require": { + "php": ">=5.4.0", + "psr/http-message": "~1.0" + }, + "provide": { + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Psr7\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Tobias Schultze", + "homepage": "https://github.com/Tobion" + } + ], + "description": "PSR-7 message implementation that also provides common utility methods", + "keywords": [ + "http", + "message", + "request", + "response", + "stream", + "uri", + "url" + ], + "time": "2017-03-20T17:10:46+00:00" + }, + { + "name": "phpdocumentor/reflection-common", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionCommon.git", + "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", + "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", + "shasum": "" + }, + "require": { + "php": ">=5.5" + }, + "require-dev": { + "phpunit/phpunit": "^4.6" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": [ + "src" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jaap van Otterdijk", + "email": "opensource@ijaap.nl" + } + ], + "description": "Common reflection classes used by phpdocumentor to reflect the code structure", + "homepage": "http://www.phpdoc.org", + "keywords": [ + "FQSEN", + "phpDocumentor", + "phpdoc", + "reflection", + "static analysis" + ], + "time": "2017-09-11T18:02:19+00:00" + }, + { + "name": "phpdocumentor/reflection-docblock", + "version": "3.3.2", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "bf329f6c1aadea3299f08ee804682b7c45b326a2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/bf329f6c1aadea3299f08ee804682b7c45b326a2", + "reference": "bf329f6c1aadea3299f08ee804682b7c45b326a2", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0", + "phpdocumentor/reflection-common": "^1.0.0", + "phpdocumentor/type-resolver": "^0.4.0", + "webmozart/assert": "^1.0" + }, + "require-dev": { + "mockery/mockery": "^0.9.4", + "phpunit/phpunit": "^4.4" + }, + "type": "library", + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + } + ], + "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", + "time": "2017-11-10T14:09:06+00:00" + }, + { + "name": "phpdocumentor/type-resolver", + "version": "0.4.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/TypeResolver.git", + "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/9c977708995954784726e25d0cd1dddf4e65b0f7", + "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7", + "shasum": "" + }, + "require": { + "php": "^5.5 || ^7.0", + "phpdocumentor/reflection-common": "^1.0" + }, + "require-dev": { + "mockery/mockery": "^0.9.4", + "phpunit/phpunit": "^5.2||^4.8.24" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + } + ], + "time": "2017-07-14T14:27:02+00:00" + }, + { + "name": "phpspec/prophecy", + "version": "1.7.3", + "source": { + "type": "git", + "url": "https://github.com/phpspec/prophecy.git", + "reference": "e4ed002c67da8eceb0eb8ddb8b3847bb53c5c2bf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/e4ed002c67da8eceb0eb8ddb8b3847bb53c5c2bf", + "reference": "e4ed002c67da8eceb0eb8ddb8b3847bb53c5c2bf", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.0.2", + "php": "^5.3|^7.0", + "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0", + "sebastian/comparator": "^1.1|^2.0", + "sebastian/recursion-context": "^1.0|^2.0|^3.0" + }, + "require-dev": { + "phpspec/phpspec": "^2.5|^3.2", + "phpunit/phpunit": "^4.8.35 || ^5.7" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.7.x-dev" + } + }, + "autoload": { + "psr-0": { + "Prophecy\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Konstantin Kudryashov", + "email": "ever.zet@gmail.com", + "homepage": "http://everzet.com" + }, + { + "name": "Marcello Duarte", + "email": "marcello.duarte@gmail.com" + } + ], + "description": "Highly opinionated mocking framework for PHP 5.3+", + "homepage": "https://github.com/phpspec/prophecy", + "keywords": [ + "Double", + "Dummy", + "fake", + "mock", + "spy", + "stub" + ], + "time": "2017-11-24T13:59:53+00:00" + }, + { + "name": "phpunit/php-code-coverage", + "version": "2.2.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/eabf68b476ac7d0f73793aada060f1c1a9bf8979", + "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "phpunit/php-file-iterator": "~1.3", + "phpunit/php-text-template": "~1.2", + "phpunit/php-token-stream": "~1.3", + "sebastian/environment": "^1.3.2", + "sebastian/version": "~1.0" + }, + "require-dev": { + "ext-xdebug": ">=2.1.4", + "phpunit/phpunit": "~4" + }, + "suggest": { + "ext-dom": "*", + "ext-xdebug": ">=2.2.1", + "ext-xmlwriter": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.2.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", + "homepage": "https://github.com/sebastianbergmann/php-code-coverage", + "keywords": [ + "coverage", + "testing", + "xunit" + ], + "time": "2015-10-06T15:47:00+00:00" + }, + { + "name": "phpunit/php-file-iterator", + "version": "1.4.5", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/730b01bc3e867237eaac355e06a36b85dd93a8b4", + "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "FilterIterator implementation that filters files based on a list of suffixes.", + "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", + "keywords": [ + "filesystem", + "iterator" + ], + "time": "2017-11-27T13:52:08+00:00" + }, + { + "name": "phpunit/php-text-template", + "version": "1.2.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "keywords": [ + "template" + ], + "time": "2015-06-21T13:50:34+00:00" + }, + { + "name": "phpunit/php-timer", + "version": "1.0.9", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", + "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", + "shasum": "" + }, + "require": { + "php": "^5.3.3 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", + "keywords": [ + "timer" + ], + "time": "2017-02-26T11:10:40+00:00" + }, + { + "name": "phpunit/php-token-stream", + "version": "1.4.11", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-token-stream.git", + "reference": "e03f8f67534427a787e21a385a67ec3ca6978ea7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/e03f8f67534427a787e21a385a67ec3ca6978ea7", + "reference": "e03f8f67534427a787e21a385a67ec3ca6978ea7", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Wrapper around PHP's tokenizer extension.", + "homepage": "https://github.com/sebastianbergmann/php-token-stream/", + "keywords": [ + "tokenizer" + ], + "time": "2017-02-27T10:12:30+00:00" + }, + { + "name": "phpunit/phpunit", + "version": "4.8.36", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "46023de9a91eec7dfb06cc56cb4e260017298517" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/46023de9a91eec7dfb06cc56cb4e260017298517", + "reference": "46023de9a91eec7dfb06cc56cb4e260017298517", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-json": "*", + "ext-pcre": "*", + "ext-reflection": "*", + "ext-spl": "*", + "php": ">=5.3.3", + "phpspec/prophecy": "^1.3.1", + "phpunit/php-code-coverage": "~2.1", + "phpunit/php-file-iterator": "~1.4", + "phpunit/php-text-template": "~1.2", + "phpunit/php-timer": "^1.0.6", + "phpunit/phpunit-mock-objects": "~2.3", + "sebastian/comparator": "~1.2.2", + "sebastian/diff": "~1.2", + "sebastian/environment": "~1.3", + "sebastian/exporter": "~1.2", + "sebastian/global-state": "~1.0", + "sebastian/version": "~1.0", + "symfony/yaml": "~2.1|~3.0" + }, + "suggest": { + "phpunit/php-invoker": "~1.1" + }, + "bin": [ + "phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.8.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "The PHP Unit Testing framework.", + "homepage": "https://phpunit.de/", + "keywords": [ + "phpunit", + "testing", + "xunit" + ], + "time": "2017-06-21T08:07:12+00:00" + }, + { + "name": "phpunit/phpunit-mock-objects", + "version": "2.3.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", + "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/ac8e7a3db35738d56ee9a76e78a4e03d97628983", + "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.0.2", + "php": ">=5.3.3", + "phpunit/php-text-template": "~1.2", + "sebastian/exporter": "~1.2" + }, + "require-dev": { + "phpunit/phpunit": "~4.4" + }, + "suggest": { + "ext-soap": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.3.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "Mock Object library for PHPUnit", + "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/", + "keywords": [ + "mock", + "xunit" + ], + "time": "2015-10-02T06:51:40+00:00" + }, + { + "name": "psr/http-message", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-message.git", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP messages", + "homepage": "https://github.com/php-fig/http-message", + "keywords": [ + "http", + "http-message", + "psr", + "psr-7", + "request", + "response" + ], + "time": "2016-08-06T14:39:51+00:00" + }, + { + "name": "satooshi/php-coveralls", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/php-coveralls/php-coveralls.git", + "reference": "c9d3fe2327c8539f1105dc19954673ba993e4ad9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-coveralls/php-coveralls/zipball/c9d3fe2327c8539f1105dc19954673ba993e4ad9", + "reference": "c9d3fe2327c8539f1105dc19954673ba993e4ad9", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-simplexml": "*", + "guzzlehttp/guzzle": "^6.0", + "php": "^5.5 || ^7.0", + "psr/log": "^1.0", + "symfony/config": "^2.1 || ^3.0 || ^4.0", + "symfony/console": "^2.1 || ^3.0 || ^4.0", + "symfony/stopwatch": "^2.0 || ^3.0 || ^4.0", + "symfony/yaml": "^2.0 || ^3.0 || ^4.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.4.3 || ^6.0" + }, + "suggest": { + "symfony/http-kernel": "Allows Symfony integration" + }, + "bin": [ + "bin/coveralls" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "psr-4": { + "PhpCoveralls\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Kitamura Satoshi", + "email": "with.no.parachute@gmail.com", + "homepage": "https://www.facebook.com/satooshi.jp", + "role": "Original creator" + }, + { + "name": "Takashi Matsuo", + "email": "tmatsuo@google.com" + }, + { + "name": "Google Inc" + }, + { + "name": "Dariusz Ruminski", + "email": "dariusz.ruminski@gmail.com", + "homepage": "https://github.com/keradus" + }, + { + "name": "Contributors", + "homepage": "https://github.com/php-coveralls/php-coveralls/graphs/contributors" + } + ], + "description": "PHP client library for Coveralls API", + "homepage": "https://github.com/php-coveralls/php-coveralls", + "keywords": [ + "ci", + "coverage", + "github", + "test" + ], + "time": "2017-10-14T23:16:28+00:00" + }, + { + "name": "sebastian/comparator", + "version": "1.2.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2b7424b55f5047b47ac6e5ccb20b2aea4011d9be", + "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "sebastian/diff": "~1.2", + "sebastian/exporter": "~1.2 || ~2.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides the functionality to compare PHP values for equality", + "homepage": "http://www.github.com/sebastianbergmann/comparator", + "keywords": [ + "comparator", + "compare", + "equality" + ], + "time": "2017-01-29T09:50:25+00:00" + }, + { + "name": "sebastian/diff", + "version": "1.4.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/7f066a26a962dbe58ddea9f72a4e82874a3975a4", + "reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4", + "shasum": "" + }, + "require": { + "php": "^5.3.3 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Diff implementation", + "homepage": "https://github.com/sebastianbergmann/diff", + "keywords": [ + "diff" + ], + "time": "2017-05-22T07:24:03+00:00" + }, + { + "name": "sebastian/environment", + "version": "1.3.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "be2c607e43ce4c89ecd60e75c6a85c126e754aea" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/be2c607e43ce4c89ecd60e75c6a85c126e754aea", + "reference": "be2c607e43ce4c89ecd60e75c6a85c126e754aea", + "shasum": "" + }, + "require": { + "php": "^5.3.3 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8 || ^5.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides functionality to handle HHVM/PHP environments", + "homepage": "http://www.github.com/sebastianbergmann/environment", + "keywords": [ + "Xdebug", + "environment", + "hhvm" + ], + "time": "2016-08-18T05:49:44+00:00" + }, + { + "name": "sebastian/exporter", + "version": "1.2.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/42c4c2eec485ee3e159ec9884f95b431287edde4", + "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "sebastian/recursion-context": "~1.0" + }, + "require-dev": { + "ext-mbstring": "*", + "phpunit/phpunit": "~4.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides the functionality to export PHP variables for visualization", + "homepage": "http://www.github.com/sebastianbergmann/exporter", + "keywords": [ + "export", + "exporter" + ], + "time": "2016-06-17T09:04:28+00:00" + }, + { + "name": "sebastian/global-state", + "version": "1.1.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bc37d50fea7d017d3d340f230811c9f1d7280af4", + "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.2" + }, + "suggest": { + "ext-uopz": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Snapshotting of global state", + "homepage": "http://www.github.com/sebastianbergmann/global-state", + "keywords": [ + "global state" + ], + "time": "2015-10-12T03:26:01+00:00" + }, + { + "name": "sebastian/recursion-context", + "version": "1.0.5", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "b19cc3298482a335a95f3016d2f8a6950f0fbcd7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/b19cc3298482a335a95f3016d2f8a6950f0fbcd7", + "reference": "b19cc3298482a335a95f3016d2f8a6950f0fbcd7", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides functionality to recursively process PHP variables", + "homepage": "http://www.github.com/sebastianbergmann/recursion-context", + "time": "2016-10-03T07:41:43+00:00" + }, + { + "name": "sebastian/version", + "version": "1.0.6", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/58b3a85e7999757d6ad81c787a1fbf5ff6c628c6", + "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6", + "shasum": "" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", + "time": "2015-06-21T13:59:46+00:00" + }, + { + "name": "squizlabs/php_codesniffer", + "version": "2.9.1", + "source": { + "type": "git", + "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", + "reference": "dcbed1074f8244661eecddfc2a675430d8d33f62" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/dcbed1074f8244661eecddfc2a675430d8d33f62", + "reference": "dcbed1074f8244661eecddfc2a675430d8d33f62", + "shasum": "" + }, + "require": { + "ext-simplexml": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": ">=5.1.2" + }, + "require-dev": { + "phpunit/phpunit": "~4.0" + }, + "bin": [ + "scripts/phpcs", + "scripts/phpcbf" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "autoload": { + "classmap": [ + "CodeSniffer.php", + "CodeSniffer/CLI.php", + "CodeSniffer/Exception.php", + "CodeSniffer/File.php", + "CodeSniffer/Fixer.php", + "CodeSniffer/Report.php", + "CodeSniffer/Reporting.php", + "CodeSniffer/Sniff.php", + "CodeSniffer/Tokens.php", + "CodeSniffer/Reports/", + "CodeSniffer/Tokenizers/", + "CodeSniffer/DocGenerators/", + "CodeSniffer/Standards/AbstractPatternSniff.php", + "CodeSniffer/Standards/AbstractScopeSniff.php", + "CodeSniffer/Standards/AbstractVariableSniff.php", + "CodeSniffer/Standards/IncorrectPatternException.php", + "CodeSniffer/Standards/Generic/Sniffs/", + "CodeSniffer/Standards/MySource/Sniffs/", + "CodeSniffer/Standards/PEAR/Sniffs/", + "CodeSniffer/Standards/PSR1/Sniffs/", + "CodeSniffer/Standards/PSR2/Sniffs/", + "CodeSniffer/Standards/Squiz/Sniffs/", + "CodeSniffer/Standards/Zend/Sniffs/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Greg Sherwood", + "role": "lead" + } + ], + "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", + "homepage": "http://www.squizlabs.com/php-codesniffer", + "keywords": [ + "phpcs", + "standards" + ], + "time": "2017-05-22T02:43:20+00:00" + }, + { + "name": "symfony/config", + "version": "v3.3.13", + "source": { + "type": "git", + "url": "https://github.com/symfony/config.git", + "reference": "8d2649077dc54dfbaf521d31f217383d82303c5f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/config/zipball/8d2649077dc54dfbaf521d31f217383d82303c5f", + "reference": "8d2649077dc54dfbaf521d31f217383d82303c5f", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8", + "symfony/filesystem": "~2.8|~3.0" + }, + "conflict": { + "symfony/dependency-injection": "<3.3", + "symfony/finder": "<3.3" + }, + "require-dev": { + "symfony/dependency-injection": "~3.3", + "symfony/finder": "~3.3", + "symfony/yaml": "~3.0" + }, + "suggest": { + "symfony/yaml": "To use the yaml reference dumper" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.3-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Config\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Config Component", + "homepage": "https://symfony.com", + "time": "2017-11-07T14:16:22+00:00" + }, + { + "name": "symfony/filesystem", + "version": "v3.3.13", + "source": { + "type": "git", + "url": "https://github.com/symfony/filesystem.git", + "reference": "77db266766b54db3ee982fe51868328b887ce15c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/77db266766b54db3ee982fe51868328b887ce15c", + "reference": "77db266766b54db3ee982fe51868328b887ce15c", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.3-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Filesystem\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Filesystem Component", + "homepage": "https://symfony.com", + "time": "2017-11-07T14:12:55+00:00" + }, + { + "name": "symfony/stopwatch", + "version": "v3.3.13", + "source": { + "type": "git", + "url": "https://github.com/symfony/stopwatch.git", + "reference": "1e93c3139ef6c799831fe03efd0fb1c7aecb3365" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/1e93c3139ef6c799831fe03efd0fb1c7aecb3365", + "reference": "1e93c3139ef6c799831fe03efd0fb1c7aecb3365", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.3-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Stopwatch\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Stopwatch Component", + "homepage": "https://symfony.com", + "time": "2017-11-10T19:02:53+00:00" + }, + { + "name": "symfony/yaml", + "version": "v3.3.13", + "source": { + "type": "git", + "url": "https://github.com/symfony/yaml.git", + "reference": "0938408c4faa518d95230deabb5f595bf0de31b9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/yaml/zipball/0938408c4faa518d95230deabb5f595bf0de31b9", + "reference": "0938408c4faa518d95230deabb5f595bf0de31b9", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8" + }, + "require-dev": { + "symfony/console": "~2.8|~3.0" + }, + "suggest": { + "symfony/console": "For validating YAML files using the lint command" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.3-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Yaml\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Yaml Component", + "homepage": "https://symfony.com", + "time": "2017-11-10T18:26:04+00:00" + }, + { + "name": "victorjonsson/markdowndocs", + "version": "1.3.8", + "source": { + "type": "git", + "url": "https://github.com/victorjonsson/PHP-Markdown-Documentation-Generator.git", + "reference": "c5eb16ff5bd15ee60223883ddacba0ab8797268d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/victorjonsson/PHP-Markdown-Documentation-Generator/zipball/c5eb16ff5bd15ee60223883ddacba0ab8797268d", + "reference": "c5eb16ff5bd15ee60223883ddacba0ab8797268d", + "shasum": "" + }, + "require": { + "php": ">=5.5.0", + "symfony/console": ">=2.6" + }, + "require-dev": { + "phpunit/phpunit": "3.7.23" + }, + "bin": [ + "bin/phpdoc-md" + ], + "type": "library", + "autoload": { + "psr-0": { + "PHPDocsMD": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Victor Jonsson", + "email": "kontakt@victorjonsson.se" + } + ], + "description": "Command line tool for generating markdown-formatted class documentation", + "homepage": "https://github.com/victorjonsson/PHP-Markdown-Documentation-Generator", + "time": "2017-04-20T09:52:47+00:00" + }, + { + "name": "webmozart/assert", + "version": "1.2.0", + "source": { + "type": "git", + "url": "https://github.com/webmozart/assert.git", + "reference": "2db61e59ff05fe5126d152bd0655c9ea113e550f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozart/assert/zipball/2db61e59ff05fe5126d152bd0655c9ea113e550f", + "reference": "2db61e59ff05fe5126d152bd0655c9ea113e550f", + "shasum": "" + }, + "require": { + "php": "^5.3.3 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.6", + "sebastian/version": "^1.0.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3-dev" + } + }, + "autoload": { + "psr-4": { + "Webmozart\\Assert\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Assertions to validate method input/output with nice error messages.", + "keywords": [ + "assert", + "check", + "validate" + ], + "time": "2016-11-23T20:04:58+00:00" + } + ], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": { + "satooshi/php-coveralls": 20 + }, + "prefer-stable": false, + "prefer-lowest": false, + "platform": { + "php": ">=5.4.0" + }, + "platform-dev": [], + "platform-overrides": { + "php": "5.6" + } +} diff --git a/lib/composer/vendor/consolidation/output-formatters/composer.windows.lock b/lib/composer/vendor/consolidation/output-formatters/composer.windows.lock new file mode 100644 index 000000000..1e785e311 --- /dev/null +++ b/lib/composer/vendor/consolidation/output-formatters/composer.windows.lock @@ -0,0 +1,1897 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", + "This file is @generated automatically" + ], + "content-hash": "53383765106ab1ba9cdfba5be3aecd2c", + "packages": [ + { + "name": "psr/log", + "version": "1.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", + "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "Psr/Log/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "time": "2016-10-10T12:19:37+00:00" + }, + { + "name": "symfony/console", + "version": "v3.2.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "7a8405a9fc175f87fed8a3c40856b0d866d61936" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/7a8405a9fc175f87fed8a3c40856b0d866d61936", + "reference": "7a8405a9fc175f87fed8a3c40856b0d866d61936", + "shasum": "" + }, + "require": { + "php": ">=5.5.9", + "symfony/debug": "~2.8|~3.0", + "symfony/polyfill-mbstring": "~1.0" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/event-dispatcher": "~2.8|~3.0", + "symfony/filesystem": "~2.8|~3.0", + "symfony/process": "~2.8|~3.0" + }, + "suggest": { + "psr/log": "For using the console logger", + "symfony/event-dispatcher": "", + "symfony/filesystem": "", + "symfony/process": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.2-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Console\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Console Component", + "homepage": "https://symfony.com", + "time": "2017-02-06T12:04:21+00:00" + }, + { + "name": "symfony/debug", + "version": "v3.2.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/debug.git", + "reference": "b4d9818f127c60ce21ed62c395da7df868dc8477" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/debug/zipball/b4d9818f127c60ce21ed62c395da7df868dc8477", + "reference": "b4d9818f127c60ce21ed62c395da7df868dc8477", + "shasum": "" + }, + "require": { + "php": ">=5.5.9", + "psr/log": "~1.0" + }, + "conflict": { + "symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2" + }, + "require-dev": { + "symfony/class-loader": "~2.8|~3.0", + "symfony/http-kernel": "~2.8|~3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.2-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Debug\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Debug Component", + "homepage": "https://symfony.com", + "time": "2017-01-28T02:37:08+00:00" + }, + { + "name": "symfony/finder", + "version": "v3.2.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "8c71141cae8e2957946b403cc71a67213c0380d6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/8c71141cae8e2957946b403cc71a67213c0380d6", + "reference": "8c71141cae8e2957946b403cc71a67213c0380d6", + "shasum": "" + }, + "require": { + "php": ">=5.5.9" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.2-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Finder\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Finder Component", + "homepage": "https://symfony.com", + "time": "2017-01-02T20:32:22+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.3.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "e79d363049d1c2128f133a2667e4f4190904f7f4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/e79d363049d1c2128f133a2667e4f4190904f7f4", + "reference": "e79d363049d1c2128f133a2667e4f4190904f7f4", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "time": "2016-11-14T01:06:16+00:00" + } + ], + "packages-dev": [ + { + "name": "doctrine/instantiator", + "version": "1.0.5", + "source": { + "type": "git", + "url": "https://github.com/doctrine/instantiator.git", + "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d", + "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d", + "shasum": "" + }, + "require": { + "php": ">=5.3,<8.0-DEV" + }, + "require-dev": { + "athletic/athletic": "~0.1.8", + "ext-pdo": "*", + "ext-phar": "*", + "phpunit/phpunit": "~4.0", + "squizlabs/php_codesniffer": "~2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "homepage": "http://ocramius.github.com/" + } + ], + "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", + "homepage": "https://github.com/doctrine/instantiator", + "keywords": [ + "constructor", + "instantiate" + ], + "time": "2015-06-14T21:17:01+00:00" + }, + { + "name": "guzzle/guzzle", + "version": "v3.9.3", + "source": { + "type": "git", + "url": "https://github.com/guzzle/guzzle3.git", + "reference": "0645b70d953bc1c067bbc8d5bc53194706b628d9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/guzzle3/zipball/0645b70d953bc1c067bbc8d5bc53194706b628d9", + "reference": "0645b70d953bc1c067bbc8d5bc53194706b628d9", + "shasum": "" + }, + "require": { + "ext-curl": "*", + "php": ">=5.3.3", + "symfony/event-dispatcher": "~2.1" + }, + "replace": { + "guzzle/batch": "self.version", + "guzzle/cache": "self.version", + "guzzle/common": "self.version", + "guzzle/http": "self.version", + "guzzle/inflection": "self.version", + "guzzle/iterator": "self.version", + "guzzle/log": "self.version", + "guzzle/parser": "self.version", + "guzzle/plugin": "self.version", + "guzzle/plugin-async": "self.version", + "guzzle/plugin-backoff": "self.version", + "guzzle/plugin-cache": "self.version", + "guzzle/plugin-cookie": "self.version", + "guzzle/plugin-curlauth": "self.version", + "guzzle/plugin-error-response": "self.version", + "guzzle/plugin-history": "self.version", + "guzzle/plugin-log": "self.version", + "guzzle/plugin-md5": "self.version", + "guzzle/plugin-mock": "self.version", + "guzzle/plugin-oauth": "self.version", + "guzzle/service": "self.version", + "guzzle/stream": "self.version" + }, + "require-dev": { + "doctrine/cache": "~1.3", + "monolog/monolog": "~1.0", + "phpunit/phpunit": "3.7.*", + "psr/log": "~1.0", + "symfony/class-loader": "~2.1", + "zendframework/zend-cache": "2.*,<2.3", + "zendframework/zend-log": "2.*,<2.3" + }, + "suggest": { + "guzzlehttp/guzzle": "Guzzle 5 has moved to a new package name. The package you have installed, Guzzle 3, is deprecated." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.9-dev" + } + }, + "autoload": { + "psr-0": { + "Guzzle": "src/", + "Guzzle\\Tests": "tests/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Guzzle Community", + "homepage": "https://github.com/guzzle/guzzle/contributors" + } + ], + "description": "PHP HTTP client. This library is deprecated in favor of https://packagist.org/packages/guzzlehttp/guzzle", + "homepage": "http://guzzlephp.org/", + "keywords": [ + "client", + "curl", + "framework", + "http", + "http client", + "rest", + "web service" + ], + "abandoned": "guzzlehttp/guzzle", + "time": "2015-03-18T18:23:50+00:00" + }, + { + "name": "phpdocumentor/reflection-common", + "version": "1.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionCommon.git", + "reference": "144c307535e82c8fdcaacbcfc1d6d8eeb896687c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/144c307535e82c8fdcaacbcfc1d6d8eeb896687c", + "reference": "144c307535e82c8fdcaacbcfc1d6d8eeb896687c", + "shasum": "" + }, + "require": { + "php": ">=5.5" + }, + "require-dev": { + "phpunit/phpunit": "^4.6" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": [ + "src" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jaap van Otterdijk", + "email": "opensource@ijaap.nl" + } + ], + "description": "Common reflection classes used by phpdocumentor to reflect the code structure", + "homepage": "http://www.phpdoc.org", + "keywords": [ + "FQSEN", + "phpDocumentor", + "phpdoc", + "reflection", + "static analysis" + ], + "time": "2015-12-27T11:43:31+00:00" + }, + { + "name": "phpdocumentor/reflection-docblock", + "version": "3.1.1", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "8331b5efe816ae05461b7ca1e721c01b46bafb3e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/8331b5efe816ae05461b7ca1e721c01b46bafb3e", + "reference": "8331b5efe816ae05461b7ca1e721c01b46bafb3e", + "shasum": "" + }, + "require": { + "php": ">=5.5", + "phpdocumentor/reflection-common": "^1.0@dev", + "phpdocumentor/type-resolver": "^0.2.0", + "webmozart/assert": "^1.0" + }, + "require-dev": { + "mockery/mockery": "^0.9.4", + "phpunit/phpunit": "^4.4" + }, + "type": "library", + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + } + ], + "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", + "time": "2016-09-30T07:12:33+00:00" + }, + { + "name": "phpdocumentor/type-resolver", + "version": "0.2.1", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/TypeResolver.git", + "reference": "e224fb2ea2fba6d3ad6fdaef91cd09a172155ccb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/e224fb2ea2fba6d3ad6fdaef91cd09a172155ccb", + "reference": "e224fb2ea2fba6d3ad6fdaef91cd09a172155ccb", + "shasum": "" + }, + "require": { + "php": ">=5.5", + "phpdocumentor/reflection-common": "^1.0" + }, + "require-dev": { + "mockery/mockery": "^0.9.4", + "phpunit/phpunit": "^5.2||^4.8.24" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + } + ], + "time": "2016-11-25T06:54:22+00:00" + }, + { + "name": "phpspec/prophecy", + "version": "v1.6.2", + "source": { + "type": "git", + "url": "https://github.com/phpspec/prophecy.git", + "reference": "6c52c2722f8460122f96f86346600e1077ce22cb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/6c52c2722f8460122f96f86346600e1077ce22cb", + "reference": "6c52c2722f8460122f96f86346600e1077ce22cb", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.0.2", + "php": "^5.3|^7.0", + "phpdocumentor/reflection-docblock": "^2.0|^3.0.2", + "sebastian/comparator": "^1.1", + "sebastian/recursion-context": "^1.0|^2.0" + }, + "require-dev": { + "phpspec/phpspec": "^2.0", + "phpunit/phpunit": "^4.8 || ^5.6.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.6.x-dev" + } + }, + "autoload": { + "psr-0": { + "Prophecy\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Konstantin Kudryashov", + "email": "ever.zet@gmail.com", + "homepage": "http://everzet.com" + }, + { + "name": "Marcello Duarte", + "email": "marcello.duarte@gmail.com" + } + ], + "description": "Highly opinionated mocking framework for PHP 5.3+", + "homepage": "https://github.com/phpspec/prophecy", + "keywords": [ + "Double", + "Dummy", + "fake", + "mock", + "spy", + "stub" + ], + "time": "2016-11-21T14:58:47+00:00" + }, + { + "name": "phpunit/php-code-coverage", + "version": "2.2.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/eabf68b476ac7d0f73793aada060f1c1a9bf8979", + "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "phpunit/php-file-iterator": "~1.3", + "phpunit/php-text-template": "~1.2", + "phpunit/php-token-stream": "~1.3", + "sebastian/environment": "^1.3.2", + "sebastian/version": "~1.0" + }, + "require-dev": { + "ext-xdebug": ">=2.1.4", + "phpunit/phpunit": "~4" + }, + "suggest": { + "ext-dom": "*", + "ext-xdebug": ">=2.2.1", + "ext-xmlwriter": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.2.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", + "homepage": "https://github.com/sebastianbergmann/php-code-coverage", + "keywords": [ + "coverage", + "testing", + "xunit" + ], + "time": "2015-10-06T15:47:00+00:00" + }, + { + "name": "phpunit/php-file-iterator", + "version": "1.4.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "3cc8f69b3028d0f96a9078e6295d86e9bf019be5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/3cc8f69b3028d0f96a9078e6295d86e9bf019be5", + "reference": "3cc8f69b3028d0f96a9078e6295d86e9bf019be5", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "FilterIterator implementation that filters files based on a list of suffixes.", + "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", + "keywords": [ + "filesystem", + "iterator" + ], + "time": "2016-10-03T07:40:28+00:00" + }, + { + "name": "phpunit/php-text-template", + "version": "1.2.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "keywords": [ + "template" + ], + "time": "2015-06-21T13:50:34+00:00" + }, + { + "name": "phpunit/php-timer", + "version": "1.0.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "38e9124049cf1a164f1e4537caf19c99bf1eb260" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/38e9124049cf1a164f1e4537caf19c99bf1eb260", + "reference": "38e9124049cf1a164f1e4537caf19c99bf1eb260", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4|~5" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", + "keywords": [ + "timer" + ], + "time": "2016-05-12T18:03:57+00:00" + }, + { + "name": "phpunit/php-token-stream", + "version": "1.4.9", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-token-stream.git", + "reference": "3b402f65a4cc90abf6e1104e388b896ce209631b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/3b402f65a4cc90abf6e1104e388b896ce209631b", + "reference": "3b402f65a4cc90abf6e1104e388b896ce209631b", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Wrapper around PHP's tokenizer extension.", + "homepage": "https://github.com/sebastianbergmann/php-token-stream/", + "keywords": [ + "tokenizer" + ], + "time": "2016-11-15T14:06:22+00:00" + }, + { + "name": "phpunit/phpunit", + "version": "4.8.35", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "791b1a67c25af50e230f841ee7a9c6eba507dc87" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/791b1a67c25af50e230f841ee7a9c6eba507dc87", + "reference": "791b1a67c25af50e230f841ee7a9c6eba507dc87", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-json": "*", + "ext-pcre": "*", + "ext-reflection": "*", + "ext-spl": "*", + "php": ">=5.3.3", + "phpspec/prophecy": "^1.3.1", + "phpunit/php-code-coverage": "~2.1", + "phpunit/php-file-iterator": "~1.4", + "phpunit/php-text-template": "~1.2", + "phpunit/php-timer": "^1.0.6", + "phpunit/phpunit-mock-objects": "~2.3", + "sebastian/comparator": "~1.2.2", + "sebastian/diff": "~1.2", + "sebastian/environment": "~1.3", + "sebastian/exporter": "~1.2", + "sebastian/global-state": "~1.0", + "sebastian/version": "~1.0", + "symfony/yaml": "~2.1|~3.0" + }, + "suggest": { + "phpunit/php-invoker": "~1.1" + }, + "bin": [ + "phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.8.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "The PHP Unit Testing framework.", + "homepage": "https://phpunit.de/", + "keywords": [ + "phpunit", + "testing", + "xunit" + ], + "time": "2017-02-06T05:18:07+00:00" + }, + { + "name": "phpunit/phpunit-mock-objects", + "version": "2.3.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", + "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/ac8e7a3db35738d56ee9a76e78a4e03d97628983", + "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.0.2", + "php": ">=5.3.3", + "phpunit/php-text-template": "~1.2", + "sebastian/exporter": "~1.2" + }, + "require-dev": { + "phpunit/phpunit": "~4.4" + }, + "suggest": { + "ext-soap": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.3.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "Mock Object library for PHPUnit", + "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/", + "keywords": [ + "mock", + "xunit" + ], + "time": "2015-10-02T06:51:40+00:00" + }, + { + "name": "satooshi/php-coveralls", + "version": "v1.0.1", + "source": { + "type": "git", + "url": "https://github.com/satooshi/php-coveralls.git", + "reference": "da51d304fe8622bf9a6da39a8446e7afd432115c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/satooshi/php-coveralls/zipball/da51d304fe8622bf9a6da39a8446e7afd432115c", + "reference": "da51d304fe8622bf9a6da39a8446e7afd432115c", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-simplexml": "*", + "guzzle/guzzle": "^2.8|^3.0", + "php": ">=5.3.3", + "psr/log": "^1.0", + "symfony/config": "^2.1|^3.0", + "symfony/console": "^2.1|^3.0", + "symfony/stopwatch": "^2.0|^3.0", + "symfony/yaml": "^2.0|^3.0" + }, + "suggest": { + "symfony/http-kernel": "Allows Symfony integration" + }, + "bin": [ + "bin/coveralls" + ], + "type": "library", + "autoload": { + "psr-4": { + "Satooshi\\": "src/Satooshi/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Kitamura Satoshi", + "email": "with.no.parachute@gmail.com", + "homepage": "https://www.facebook.com/satooshi.jp" + } + ], + "description": "PHP client library for Coveralls API", + "homepage": "https://github.com/satooshi/php-coveralls", + "keywords": [ + "ci", + "coverage", + "github", + "test" + ], + "time": "2016-01-20T17:35:46+00:00" + }, + { + "name": "sebastian/comparator", + "version": "1.2.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2b7424b55f5047b47ac6e5ccb20b2aea4011d9be", + "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "sebastian/diff": "~1.2", + "sebastian/exporter": "~1.2 || ~2.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides the functionality to compare PHP values for equality", + "homepage": "http://www.github.com/sebastianbergmann/comparator", + "keywords": [ + "comparator", + "compare", + "equality" + ], + "time": "2017-01-29T09:50:25+00:00" + }, + { + "name": "sebastian/diff", + "version": "1.4.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "13edfd8706462032c2f52b4b862974dd46b71c9e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/13edfd8706462032c2f52b4b862974dd46b71c9e", + "reference": "13edfd8706462032c2f52b4b862974dd46b71c9e", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Diff implementation", + "homepage": "https://github.com/sebastianbergmann/diff", + "keywords": [ + "diff" + ], + "time": "2015-12-08T07:14:41+00:00" + }, + { + "name": "sebastian/environment", + "version": "1.3.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "be2c607e43ce4c89ecd60e75c6a85c126e754aea" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/be2c607e43ce4c89ecd60e75c6a85c126e754aea", + "reference": "be2c607e43ce4c89ecd60e75c6a85c126e754aea", + "shasum": "" + }, + "require": { + "php": "^5.3.3 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8 || ^5.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides functionality to handle HHVM/PHP environments", + "homepage": "http://www.github.com/sebastianbergmann/environment", + "keywords": [ + "Xdebug", + "environment", + "hhvm" + ], + "time": "2016-08-18T05:49:44+00:00" + }, + { + "name": "sebastian/exporter", + "version": "1.2.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/42c4c2eec485ee3e159ec9884f95b431287edde4", + "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "sebastian/recursion-context": "~1.0" + }, + "require-dev": { + "ext-mbstring": "*", + "phpunit/phpunit": "~4.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides the functionality to export PHP variables for visualization", + "homepage": "http://www.github.com/sebastianbergmann/exporter", + "keywords": [ + "export", + "exporter" + ], + "time": "2016-06-17T09:04:28+00:00" + }, + { + "name": "sebastian/global-state", + "version": "1.1.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bc37d50fea7d017d3d340f230811c9f1d7280af4", + "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.2" + }, + "suggest": { + "ext-uopz": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Snapshotting of global state", + "homepage": "http://www.github.com/sebastianbergmann/global-state", + "keywords": [ + "global state" + ], + "time": "2015-10-12T03:26:01+00:00" + }, + { + "name": "sebastian/recursion-context", + "version": "1.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "913401df809e99e4f47b27cdd781f4a258d58791" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/913401df809e99e4f47b27cdd781f4a258d58791", + "reference": "913401df809e99e4f47b27cdd781f4a258d58791", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides functionality to recursively process PHP variables", + "homepage": "http://www.github.com/sebastianbergmann/recursion-context", + "time": "2015-11-11T19:50:13+00:00" + }, + { + "name": "sebastian/version", + "version": "1.0.6", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/58b3a85e7999757d6ad81c787a1fbf5ff6c628c6", + "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6", + "shasum": "" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", + "time": "2015-06-21T13:59:46+00:00" + }, + { + "name": "squizlabs/php_codesniffer", + "version": "2.8.0", + "source": { + "type": "git", + "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", + "reference": "86dd55a522238211f9f3631e3361703578941d9a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/86dd55a522238211f9f3631e3361703578941d9a", + "reference": "86dd55a522238211f9f3631e3361703578941d9a", + "shasum": "" + }, + "require": { + "ext-simplexml": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": ">=5.1.2" + }, + "require-dev": { + "phpunit/phpunit": "~4.0" + }, + "bin": [ + "scripts/phpcs", + "scripts/phpcbf" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "autoload": { + "classmap": [ + "CodeSniffer.php", + "CodeSniffer/CLI.php", + "CodeSniffer/Exception.php", + "CodeSniffer/File.php", + "CodeSniffer/Fixer.php", + "CodeSniffer/Report.php", + "CodeSniffer/Reporting.php", + "CodeSniffer/Sniff.php", + "CodeSniffer/Tokens.php", + "CodeSniffer/Reports/", + "CodeSniffer/Tokenizers/", + "CodeSniffer/DocGenerators/", + "CodeSniffer/Standards/AbstractPatternSniff.php", + "CodeSniffer/Standards/AbstractScopeSniff.php", + "CodeSniffer/Standards/AbstractVariableSniff.php", + "CodeSniffer/Standards/IncorrectPatternException.php", + "CodeSniffer/Standards/Generic/Sniffs/", + "CodeSniffer/Standards/MySource/Sniffs/", + "CodeSniffer/Standards/PEAR/Sniffs/", + "CodeSniffer/Standards/PSR1/Sniffs/", + "CodeSniffer/Standards/PSR2/Sniffs/", + "CodeSniffer/Standards/Squiz/Sniffs/", + "CodeSniffer/Standards/Zend/Sniffs/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Greg Sherwood", + "role": "lead" + } + ], + "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", + "homepage": "http://www.squizlabs.com/php-codesniffer", + "keywords": [ + "phpcs", + "standards" + ], + "time": "2017-02-02T03:30:00+00:00" + }, + { + "name": "symfony/config", + "version": "v3.2.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/config.git", + "reference": "2ffa7b84d647b8be1788d46b44e438cb3d62056c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/config/zipball/2ffa7b84d647b8be1788d46b44e438cb3d62056c", + "reference": "2ffa7b84d647b8be1788d46b44e438cb3d62056c", + "shasum": "" + }, + "require": { + "php": ">=5.5.9", + "symfony/filesystem": "~2.8|~3.0" + }, + "require-dev": { + "symfony/yaml": "~3.0" + }, + "suggest": { + "symfony/yaml": "To use the yaml reference dumper" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.2-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Config\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Config Component", + "homepage": "https://symfony.com", + "time": "2017-02-06T12:04:21+00:00" + }, + { + "name": "symfony/event-dispatcher", + "version": "v2.8.17", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "74877977f90fb9c3e46378d5764217c55f32df34" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/74877977f90fb9c3e46378d5764217c55f32df34", + "reference": "74877977f90fb9c3e46378d5764217c55f32df34", + "shasum": "" + }, + "require": { + "php": ">=5.3.9" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/config": "~2.0,>=2.0.5|~3.0.0", + "symfony/dependency-injection": "~2.6|~3.0.0", + "symfony/expression-language": "~2.6|~3.0.0", + "symfony/stopwatch": "~2.3|~3.0.0" + }, + "suggest": { + "symfony/dependency-injection": "", + "symfony/http-kernel": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.8-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\EventDispatcher\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony EventDispatcher Component", + "homepage": "https://symfony.com", + "time": "2017-01-02T20:30:24+00:00" + }, + { + "name": "symfony/filesystem", + "version": "v3.2.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/filesystem.git", + "reference": "a0c6ef2dc78d33b58d91d3a49f49797a184d06f4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/a0c6ef2dc78d33b58d91d3a49f49797a184d06f4", + "reference": "a0c6ef2dc78d33b58d91d3a49f49797a184d06f4", + "shasum": "" + }, + "require": { + "php": ">=5.5.9" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.2-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Filesystem\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Filesystem Component", + "homepage": "https://symfony.com", + "time": "2017-01-08T20:47:33+00:00" + }, + { + "name": "symfony/stopwatch", + "version": "v3.2.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/stopwatch.git", + "reference": "9aa0b51889c01bca474853ef76e9394b02264464" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/9aa0b51889c01bca474853ef76e9394b02264464", + "reference": "9aa0b51889c01bca474853ef76e9394b02264464", + "shasum": "" + }, + "require": { + "php": ">=5.5.9" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.2-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Stopwatch\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Stopwatch Component", + "homepage": "https://symfony.com", + "time": "2017-01-02T20:32:22+00:00" + }, + { + "name": "symfony/yaml", + "version": "v3.2.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/yaml.git", + "reference": "e1718c6bf57e1efbb8793ada951584b2ab27775b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/yaml/zipball/e1718c6bf57e1efbb8793ada951584b2ab27775b", + "reference": "e1718c6bf57e1efbb8793ada951584b2ab27775b", + "shasum": "" + }, + "require": { + "php": ">=5.5.9" + }, + "require-dev": { + "symfony/console": "~2.8|~3.0" + }, + "suggest": { + "symfony/console": "For validating YAML files using the lint command" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.2-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Yaml\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Yaml Component", + "homepage": "https://symfony.com", + "time": "2017-01-21T17:06:35+00:00" + }, + { + "name": "victorjonsson/markdowndocs", + "version": "1.3.7", + "source": { + "type": "git", + "url": "https://github.com/victorjonsson/PHP-Markdown-Documentation-Generator.git", + "reference": "a8244617cdce4804cd94ea508c82e8d7e29a273a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/victorjonsson/PHP-Markdown-Documentation-Generator/zipball/a8244617cdce4804cd94ea508c82e8d7e29a273a", + "reference": "a8244617cdce4804cd94ea508c82e8d7e29a273a", + "shasum": "" + }, + "require": { + "php": ">=5.5.0", + "symfony/console": ">=2.6" + }, + "require-dev": { + "phpunit/phpunit": "3.7.23" + }, + "bin": [ + "bin/phpdoc-md" + ], + "type": "library", + "autoload": { + "psr-0": { + "PHPDocsMD": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Victor Jonsson", + "email": "kontakt@victorjonsson.se" + } + ], + "description": "Command line tool for generating markdown-formatted class documentation", + "homepage": "https://github.com/victorjonsson/PHP-Markdown-Documentation-Generator", + "time": "2016-10-11T21:10:19+00:00" + }, + { + "name": "webmozart/assert", + "version": "1.2.0", + "source": { + "type": "git", + "url": "https://github.com/webmozart/assert.git", + "reference": "2db61e59ff05fe5126d152bd0655c9ea113e550f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozart/assert/zipball/2db61e59ff05fe5126d152bd0655c9ea113e550f", + "reference": "2db61e59ff05fe5126d152bd0655c9ea113e550f", + "shasum": "" + }, + "require": { + "php": "^5.3.3 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.6", + "sebastian/version": "^1.0.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3-dev" + } + }, + "autoload": { + "psr-4": { + "Webmozart\\Assert\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Assertions to validate method input/output with nice error messages.", + "keywords": [ + "assert", + "check", + "validate" + ], + "time": "2016-11-23T20:04:58+00:00" + } + ], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": [], + "prefer-stable": false, + "prefer-lowest": false, + "platform": { + "php": ">=5.4.0" + }, + "platform-dev": [] +} diff --git a/lib/composer/vendor/consolidation/output-formatters/docs/api.md b/lib/composer/vendor/consolidation/output-formatters/docs/api.md index 279f5c164..b6da447e4 100644 --- a/lib/composer/vendor/consolidation/output-formatters/docs/api.md +++ b/lib/composer/vendor/consolidation/output-formatters/docs/api.md @@ -1,53 +1,58 @@ ## Table of contents - [\Consolidation\OutputFormatters\FormatterManager](#class-consolidationoutputformattersformattermanager) +- [\Consolidation\OutputFormatters\Exception\UnknownFormatException](#class-consolidationoutputformattersexceptionunknownformatexception) - [\Consolidation\OutputFormatters\Exception\AbstractDataFormatException (abstract)](#class-consolidationoutputformattersexceptionabstractdataformatexception-abstract) - [\Consolidation\OutputFormatters\Exception\IncompatibleDataException](#class-consolidationoutputformattersexceptionincompatibledataexception) - [\Consolidation\OutputFormatters\Exception\InvalidFormatException](#class-consolidationoutputformattersexceptioninvalidformatexception) - [\Consolidation\OutputFormatters\Exception\UnknownFieldException](#class-consolidationoutputformattersexceptionunknownfieldexception) -- [\Consolidation\OutputFormatters\Exception\UnknownFormatException](#class-consolidationoutputformattersexceptionunknownformatexception) -- [\Consolidation\OutputFormatters\Formatters\CsvFormatter](#class-consolidationoutputformattersformatterscsvformatter) -- [\Consolidation\OutputFormatters\Formatters\FormatterInterface (interface)](#interface-consolidationoutputformattersformattersformatterinterface) -- [\Consolidation\OutputFormatters\Formatters\JsonFormatter](#class-consolidationoutputformattersformattersjsonformatter) - [\Consolidation\OutputFormatters\Formatters\ListFormatter](#class-consolidationoutputformattersformatterslistformatter) -- [\Consolidation\OutputFormatters\Formatters\PrintRFormatter](#class-consolidationoutputformattersformattersprintrformatter) -- [\Consolidation\OutputFormatters\Formatters\RenderDataInterface (interface)](#interface-consolidationoutputformattersformattersrenderdatainterface) - [\Consolidation\OutputFormatters\Formatters\SectionsFormatter](#class-consolidationoutputformattersformatterssectionsformatter) +- [\Consolidation\OutputFormatters\Formatters\JsonFormatter](#class-consolidationoutputformattersformattersjsonformatter) +- [\Consolidation\OutputFormatters\Formatters\FormatterInterface (interface)](#interface-consolidationoutputformattersformattersformatterinterface) +- [\Consolidation\OutputFormatters\Formatters\CsvFormatter](#class-consolidationoutputformattersformatterscsvformatter) - [\Consolidation\OutputFormatters\Formatters\SerializeFormatter](#class-consolidationoutputformattersformattersserializeformatter) - [\Consolidation\OutputFormatters\Formatters\StringFormatter](#class-consolidationoutputformattersformattersstringformatter) -- [\Consolidation\OutputFormatters\Formatters\TableFormatter](#class-consolidationoutputformattersformatterstableformatter) -- [\Consolidation\OutputFormatters\Formatters\TsvFormatter](#class-consolidationoutputformattersformatterstsvformatter) - [\Consolidation\OutputFormatters\Formatters\VarExportFormatter](#class-consolidationoutputformattersformattersvarexportformatter) -- [\Consolidation\OutputFormatters\Formatters\XmlFormatter](#class-consolidationoutputformattersformattersxmlformatter) - [\Consolidation\OutputFormatters\Formatters\YamlFormatter](#class-consolidationoutputformattersformattersyamlformatter) -- [\Consolidation\OutputFormatters\Options\FormatterOptions](#class-consolidationoutputformattersoptionsformatteroptions) +- [\Consolidation\OutputFormatters\Formatters\TableFormatter](#class-consolidationoutputformattersformatterstableformatter) +- [\Consolidation\OutputFormatters\Formatters\XmlFormatter](#class-consolidationoutputformattersformattersxmlformatter) +- [\Consolidation\OutputFormatters\Formatters\PrintRFormatter](#class-consolidationoutputformattersformattersprintrformatter) +- [\Consolidation\OutputFormatters\Formatters\RenderDataInterface (interface)](#interface-consolidationoutputformattersformattersrenderdatainterface) +- [\Consolidation\OutputFormatters\Formatters\TsvFormatter](#class-consolidationoutputformattersformatterstsvformatter) - [\Consolidation\OutputFormatters\Options\OverrideOptionsInterface (interface)](#interface-consolidationoutputformattersoptionsoverrideoptionsinterface) -- [\Consolidation\OutputFormatters\StructuredData\AbstractStructuredList (abstract)](#class-consolidationoutputformattersstructureddataabstractstructuredlist-abstract) -- [\Consolidation\OutputFormatters\StructuredData\AssociativeList](#class-consolidationoutputformattersstructureddataassociativelist) -- [\Consolidation\OutputFormatters\StructuredData\CallableRenderer](#class-consolidationoutputformattersstructureddatacallablerenderer) +- [\Consolidation\OutputFormatters\Options\FormatterOptions](#class-consolidationoutputformattersoptionsformatteroptions) - [\Consolidation\OutputFormatters\StructuredData\ListDataInterface (interface)](#interface-consolidationoutputformattersstructureddatalistdatainterface) +- [\Consolidation\OutputFormatters\StructuredData\TableDataInterface (interface)](#interface-consolidationoutputformattersstructureddatatabledatainterface) +- [\Consolidation\OutputFormatters\StructuredData\HelpDocument](#class-consolidationoutputformattersstructureddatahelpdocument) - [\Consolidation\OutputFormatters\StructuredData\OriginalDataInterface (interface)](#interface-consolidationoutputformattersstructureddataoriginaldatainterface) +- [\Consolidation\OutputFormatters\StructuredData\RowsOfFields](#class-consolidationoutputformattersstructureddatarowsoffields) +- [\Consolidation\OutputFormatters\StructuredData\RestructureInterface (interface)](#interface-consolidationoutputformattersstructureddatarestructureinterface) +- [\Consolidation\OutputFormatters\StructuredData\AbstractStructuredList (abstract)](#class-consolidationoutputformattersstructureddataabstractstructuredlist-abstract) +- [\Consolidation\OutputFormatters\StructuredData\ListDataFromKeys](#class-consolidationoutputformattersstructureddatalistdatafromkeys) - [\Consolidation\OutputFormatters\StructuredData\PropertyList](#class-consolidationoutputformattersstructureddatapropertylist) -- [\Consolidation\OutputFormatters\StructuredData\RenderCellCollectionInterface (interface)](#interface-consolidationoutputformattersstructureddatarendercellcollectioninterface) - [\Consolidation\OutputFormatters\StructuredData\RenderCellInterface (interface)](#interface-consolidationoutputformattersstructureddatarendercellinterface) -- [\Consolidation\OutputFormatters\StructuredData\RestructureInterface (interface)](#interface-consolidationoutputformattersstructureddatarestructureinterface) -- [\Consolidation\OutputFormatters\StructuredData\RowsOfFields](#class-consolidationoutputformattersstructureddatarowsoffields) -- [\Consolidation\OutputFormatters\StructuredData\TableDataInterface (interface)](#interface-consolidationoutputformattersstructureddatatabledatainterface) +- [\Consolidation\OutputFormatters\StructuredData\CallableRenderer](#class-consolidationoutputformattersstructureddatacallablerenderer) +- [\Consolidation\OutputFormatters\StructuredData\RenderCellCollectionInterface (interface)](#interface-consolidationoutputformattersstructureddatarendercellcollectioninterface) +- [\Consolidation\OutputFormatters\StructuredData\AssociativeList](#class-consolidationoutputformattersstructureddataassociativelist) +- [\Consolidation\OutputFormatters\StructuredData\Xml\XmlSchemaInterface (interface)](#interface-consolidationoutputformattersstructureddataxmlxmlschemainterface) - [\Consolidation\OutputFormatters\StructuredData\Xml\DomDataInterface (interface)](#interface-consolidationoutputformattersstructureddataxmldomdatainterface) - [\Consolidation\OutputFormatters\StructuredData\Xml\XmlSchema](#class-consolidationoutputformattersstructureddataxmlxmlschema) -- [\Consolidation\OutputFormatters\StructuredData\Xml\XmlSchemaInterface (interface)](#interface-consolidationoutputformattersstructureddataxmlxmlschemainterface) -- [\Consolidation\OutputFormatters\Transformations\DomToArraySimplifier](#class-consolidationoutputformatterstransformationsdomtoarraysimplifier) -- [\Consolidation\OutputFormatters\Transformations\OverrideRestructureInterface (interface)](#interface-consolidationoutputformatterstransformationsoverriderestructureinterface) -- [\Consolidation\OutputFormatters\Transformations\PropertyListTableTransformation](#class-consolidationoutputformatterstransformationspropertylisttabletransformation) - [\Consolidation\OutputFormatters\Transformations\PropertyParser](#class-consolidationoutputformatterstransformationspropertyparser) -- [\Consolidation\OutputFormatters\Transformations\ReorderFields](#class-consolidationoutputformatterstransformationsreorderfields) -- [\Consolidation\OutputFormatters\Transformations\SimplifyToArrayInterface (interface)](#interface-consolidationoutputformatterstransformationssimplifytoarrayinterface) +- [\Consolidation\OutputFormatters\Transformations\PropertyListTableTransformation](#class-consolidationoutputformatterstransformationspropertylisttabletransformation) - [\Consolidation\OutputFormatters\Transformations\TableTransformation](#class-consolidationoutputformatterstransformationstabletransformation) +- [\Consolidation\OutputFormatters\Transformations\ReorderFields](#class-consolidationoutputformatterstransformationsreorderfields) +- [\Consolidation\OutputFormatters\Transformations\DomToArraySimplifier](#class-consolidationoutputformatterstransformationsdomtoarraysimplifier) - [\Consolidation\OutputFormatters\Transformations\WordWrapper](#class-consolidationoutputformatterstransformationswordwrapper) +- [\Consolidation\OutputFormatters\Transformations\OverrideRestructureInterface (interface)](#interface-consolidationoutputformatterstransformationsoverriderestructureinterface) +- [\Consolidation\OutputFormatters\Transformations\SimplifyToArrayInterface (interface)](#interface-consolidationoutputformatterstransformationssimplifytoarrayinterface) +- [\Consolidation\OutputFormatters\Transformations\Wrap\CalculateWidths](#class-consolidationoutputformatterstransformationswrapcalculatewidths) +- [\Consolidation\OutputFormatters\Transformations\Wrap\ColumnWidths](#class-consolidationoutputformatterstransformationswrapcolumnwidths) - [\Consolidation\OutputFormatters\Validate\ValidationInterface (interface)](#interface-consolidationoutputformattersvalidatevalidationinterface) - [\Consolidation\OutputFormatters\Validate\ValidDataTypesInterface (interface)](#interface-consolidationoutputformattersvalidatevaliddatatypesinterface) -
+
+ ### Class: \Consolidation\OutputFormatters\FormatterManager > Manage a collection of formatters; return one on request. @@ -76,7 +81,22 @@ | protected | simplifyToArray(mixed $structuredOutput, [\Consolidation\OutputFormatters\Options\FormatterOptions](#class-consolidationoutputformattersoptionsformatteroptions) $options) : void | | protected | validateAndRestructure([\Consolidation\OutputFormatters\Formatters\FormatterInterface](#interface-consolidationoutputformattersformattersformatterinterface) $formatter, mixed $structuredOutput, [\Consolidation\OutputFormatters\Options\FormatterOptions](#class-consolidationoutputformattersoptionsformatteroptions) $options) : void | -
+
+ +### Class: \Consolidation\OutputFormatters\Exception\UnknownFormatException + +> Indicates that the requested format does not exist. + +| Visibility | Function | +|:-----------|:---------| +| public | __construct(mixed $format) : void | + +*This class extends \Exception* + +*This class implements \Throwable* + +
+ ### Class: \Consolidation\OutputFormatters\Exception\AbstractDataFormatException (abstract) > Contains some helper functions used by exceptions in this project. @@ -91,7 +111,8 @@ *This class implements \Throwable* -
+
+ ### Class: \Consolidation\OutputFormatters\Exception\IncompatibleDataException > Represents an incompatibility between the output data and selected formatter. @@ -104,7 +125,8 @@ *This class implements \Throwable* -
+
+ ### Class: \Consolidation\OutputFormatters\Exception\InvalidFormatException > Represents an incompatibility between the output data and selected formatter. @@ -117,7 +139,8 @@ *This class implements \Throwable* -
+
+ ### Class: \Consolidation\OutputFormatters\Exception\UnknownFieldException > Indicates that the requested format does not exist. @@ -130,46 +153,40 @@ *This class implements \Throwable* -
-### Class: \Consolidation\OutputFormatters\Exception\UnknownFormatException +
-> Indicates that the requested format does not exist. +### Class: \Consolidation\OutputFormatters\Formatters\ListFormatter + +> Display the data in a simple list. This formatter prints a plain, unadorned list of data, with each data item appearing on a separate line. If you wish your list to contain headers, then use the table formatter, and wrap your data in an PropertyList. | Visibility | Function | |:-----------|:---------| -| public | __construct(mixed $format) : void | +| public | overrideRestructure(mixed $structuredOutput, [\Consolidation\OutputFormatters\Options\FormatterOptions](#class-consolidationoutputformattersoptionsformatteroptions) $options) : mixed
Select data to use directly from the structured output, before the restructure operation has been executed. | +| public | renderData(mixed $originalData, mixed $restructuredData, [\Consolidation\OutputFormatters\Options\FormatterOptions](#class-consolidationoutputformattersoptionsformatteroptions) $options) : mixed
Convert the contents of the output data just before it is to be printed, prior to output but after restructuring and validation. | +| public | write(\Symfony\Component\Console\Output\OutputInterface $output, mixed $data, [\Consolidation\OutputFormatters\Options\FormatterOptions](#class-consolidationoutputformattersoptionsformatteroptions) $options) : string
Given structured data, apply appropriate formatting, and return a printable string. | +| protected | renderEachCell(mixed $originalData, mixed $restructuredData, [\Consolidation\OutputFormatters\Options\FormatterOptions](#class-consolidationoutputformattersoptionsformatteroptions) $options) : void | -*This class extends \Exception* +*This class implements [\Consolidation\OutputFormatters\Formatters\FormatterInterface](#interface-consolidationoutputformattersformattersformatterinterface), [\Consolidation\OutputFormatters\Transformations\OverrideRestructureInterface](#interface-consolidationoutputformatterstransformationsoverriderestructureinterface), [\Consolidation\OutputFormatters\Formatters\RenderDataInterface](#interface-consolidationoutputformattersformattersrenderdatainterface)* -*This class implements \Throwable* +
-
-### Class: \Consolidation\OutputFormatters\Formatters\CsvFormatter +### Class: \Consolidation\OutputFormatters\Formatters\SectionsFormatter -> Comma-separated value formatters Display the provided structured data in a comma-separated list. If there are multiple records provided, then they will be printed one per line. The primary data types accepted are RowsOfFields and PropertyList. The later behaves exactly like the former, save for the fact that it contains but a single row. This formmatter can also accept a PHP array; this is also interpreted as a single-row of data with no header. +> Display sections of data. This formatter takes data in the RowsOfFields data type. Each row represents one section; the data in each section is rendered in two columns, with the key in the first column and the value in the second column. | Visibility | Function | |:-----------|:---------| | public | isValidDataType([\ReflectionClass](http://php.net/manual/en/class.reflectionclass.php) $dataType) : bool
Return the list of data types acceptable to this formatter | | public | renderData(mixed $originalData, mixed $restructuredData, [\Consolidation\OutputFormatters\Options\FormatterOptions](#class-consolidationoutputformattersoptionsformatteroptions) $options) : mixed
Convert the contents of the output data just before it is to be printed, prior to output but after restructuring and validation. | | public | validDataTypes() : void | -| public | validate(mixed $structuredData) : void | +| public | validate(mixed $structuredData) : mixed
Throw an IncompatibleDataException if the provided data cannot be processed by this formatter. Return the source data if it is valid. The data may be encapsulated or converted if necessary. | | public | write(\Symfony\Component\Console\Output\OutputInterface $output, mixed $data, [\Consolidation\OutputFormatters\Options\FormatterOptions](#class-consolidationoutputformattersoptionsformatteroptions) $options) : string
Given structured data, apply appropriate formatting, and return a printable string. | -| protected | csvEscape(mixed $data, string $delimiter=`','`) : void | -| protected | getDefaultFormatterOptions() : array
Return default values for formatter options | | protected | renderEachCell(mixed $originalData, mixed $restructuredData, [\Consolidation\OutputFormatters\Options\FormatterOptions](#class-consolidationoutputformattersoptionsformatteroptions) $options) : void | -| protected | writeOneLine(\Symfony\Component\Console\Output\OutputInterface $output, mixed $data, mixed $options) : void | *This class implements [\Consolidation\OutputFormatters\Formatters\FormatterInterface](#interface-consolidationoutputformattersformattersformatterinterface), [\Consolidation\OutputFormatters\Validate\ValidDataTypesInterface](#interface-consolidationoutputformattersvalidatevaliddatatypesinterface), [\Consolidation\OutputFormatters\Validate\ValidationInterface](#interface-consolidationoutputformattersvalidatevalidationinterface), [\Consolidation\OutputFormatters\Formatters\RenderDataInterface](#interface-consolidationoutputformattersformattersrenderdatainterface)* -
-### Interface: \Consolidation\OutputFormatters\Formatters\FormatterInterface - -| Visibility | Function | -|:-----------|:---------| -| public | write(\Symfony\Component\Console\Output\OutputInterface $output, mixed $data, [\Consolidation\OutputFormatters\Options\FormatterOptions](#class-consolidationoutputformattersoptionsformatteroptions) $options) : string
Given structured data, apply appropriate formatting, and return a printable string. | +
-
### Class: \Consolidation\OutputFormatters\Formatters\JsonFormatter > Json formatter Convert an array or ArrayObject into Json. @@ -180,55 +197,36 @@ *This class implements [\Consolidation\OutputFormatters\Formatters\FormatterInterface](#interface-consolidationoutputformattersformattersformatterinterface)* -
-### Class: \Consolidation\OutputFormatters\Formatters\ListFormatter +
-> Display the data in a simple list. This formatter prints a plain, unadorned list of data, with each data item appearing on a separate line. If you wish your list to contain headers, then use the table formatter, and wrap your data in an PropertyList. - -| Visibility | Function | -|:-----------|:---------| -| public | overrideRestructure(mixed $structuredOutput, [\Consolidation\OutputFormatters\Options\FormatterOptions](#class-consolidationoutputformattersoptionsformatteroptions) $options) : mixed
Select data to use directly from the structured output, before the restructure operation has been executed. | -| public | renderData(mixed $originalData, mixed $restructuredData, [\Consolidation\OutputFormatters\Options\FormatterOptions](#class-consolidationoutputformattersoptionsformatteroptions) $options) : mixed
Convert the contents of the output data just before it is to be printed, prior to output but after restructuring and validation. | -| public | write(\Symfony\Component\Console\Output\OutputInterface $output, mixed $data, [\Consolidation\OutputFormatters\Options\FormatterOptions](#class-consolidationoutputformattersoptionsformatteroptions) $options) : string
Given structured data, apply appropriate formatting, and return a printable string. | -| protected | renderEachCell(mixed $originalData, mixed $restructuredData, [\Consolidation\OutputFormatters\Options\FormatterOptions](#class-consolidationoutputformattersoptionsformatteroptions) $options) : void | - -*This class implements [\Consolidation\OutputFormatters\Formatters\FormatterInterface](#interface-consolidationoutputformattersformattersformatterinterface), [\Consolidation\OutputFormatters\Transformations\OverrideRestructureInterface](#interface-consolidationoutputformatterstransformationsoverriderestructureinterface), [\Consolidation\OutputFormatters\Formatters\RenderDataInterface](#interface-consolidationoutputformattersformattersrenderdatainterface)* - -
-### Class: \Consolidation\OutputFormatters\Formatters\PrintRFormatter - -> Print_r formatter Run provided date thruogh print_r. +### Interface: \Consolidation\OutputFormatters\Formatters\FormatterInterface | Visibility | Function | |:-----------|:---------| | public | write(\Symfony\Component\Console\Output\OutputInterface $output, mixed $data, [\Consolidation\OutputFormatters\Options\FormatterOptions](#class-consolidationoutputformattersoptionsformatteroptions) $options) : string
Given structured data, apply appropriate formatting, and return a printable string. | -*This class implements [\Consolidation\OutputFormatters\Formatters\FormatterInterface](#interface-consolidationoutputformattersformattersformatterinterface)* +
-
-### Interface: \Consolidation\OutputFormatters\Formatters\RenderDataInterface - -| Visibility | Function | -|:-----------|:---------| -| public | renderData(mixed $originalData, mixed $restructuredData, [\Consolidation\OutputFormatters\Options\FormatterOptions](#class-consolidationoutputformattersoptionsformatteroptions) $options) : mixed
Convert the contents of the output data just before it is to be printed, prior to output but after restructuring and validation. | - -
-### Class: \Consolidation\OutputFormatters\Formatters\SectionsFormatter +### Class: \Consolidation\OutputFormatters\Formatters\CsvFormatter -> Display sections of data. This formatter takes data in the RowsOfFields data type. Each row represents one section; the data in each section is rendered in two columns, with the key in the first column and the value in the second column. +> Comma-separated value formatters Display the provided structured data in a comma-separated list. If there are multiple records provided, then they will be printed one per line. The primary data types accepted are RowsOfFields and PropertyList. The later behaves exactly like the former, save for the fact that it contains but a single row. This formmatter can also accept a PHP array; this is also interpreted as a single-row of data with no header. | Visibility | Function | |:-----------|:---------| | public | isValidDataType([\ReflectionClass](http://php.net/manual/en/class.reflectionclass.php) $dataType) : bool
Return the list of data types acceptable to this formatter | | public | renderData(mixed $originalData, mixed $restructuredData, [\Consolidation\OutputFormatters\Options\FormatterOptions](#class-consolidationoutputformattersoptionsformatteroptions) $options) : mixed
Convert the contents of the output data just before it is to be printed, prior to output but after restructuring and validation. | | public | validDataTypes() : void | -| public | validate(mixed $structuredData) : mixed
Throw an IncompatibleDataException if the provided data cannot be processed by this formatter. Return the source data if it is valid. The data may be encapsulated or converted if necessary. | +| public | validate(mixed $structuredData) : void | | public | write(\Symfony\Component\Console\Output\OutputInterface $output, mixed $data, [\Consolidation\OutputFormatters\Options\FormatterOptions](#class-consolidationoutputformattersoptionsformatteroptions) $options) : string
Given structured data, apply appropriate formatting, and return a printable string. | +| protected | csvEscape(mixed $data, string $delimiter=`','`) : void | +| protected | getDefaultFormatterOptions() : array
Return default values for formatter options | | protected | renderEachCell(mixed $originalData, mixed $restructuredData, [\Consolidation\OutputFormatters\Options\FormatterOptions](#class-consolidationoutputformattersoptionsformatteroptions) $options) : void | +| protected | writeOneLine(\Symfony\Component\Console\Output\OutputInterface $output, mixed $data, mixed $options) : void | *This class implements [\Consolidation\OutputFormatters\Formatters\FormatterInterface](#interface-consolidationoutputformattersformattersformatterinterface), [\Consolidation\OutputFormatters\Validate\ValidDataTypesInterface](#interface-consolidationoutputformattersvalidatevaliddatatypesinterface), [\Consolidation\OutputFormatters\Validate\ValidationInterface](#interface-consolidationoutputformattersvalidatevalidationinterface), [\Consolidation\OutputFormatters\Formatters\RenderDataInterface](#interface-consolidationoutputformattersformattersrenderdatainterface)* -
+
+ ### Class: \Consolidation\OutputFormatters\Formatters\SerializeFormatter > Serialize formatter Run provided date thruogh serialize. @@ -239,7 +237,8 @@ *This class implements [\Consolidation\OutputFormatters\Formatters\FormatterInterface](#interface-consolidationoutputformattersformattersformatterinterface)* -
+
+ ### Class: \Consolidation\OutputFormatters\Formatters\StringFormatter > String formatter This formatter is used as the default action when no particular formatter is requested. It will print the provided data only if it is a string; if any other type is given, then nothing is printed. @@ -254,7 +253,32 @@ *This class implements [\Consolidation\OutputFormatters\Formatters\FormatterInterface](#interface-consolidationoutputformattersformattersformatterinterface), [\Consolidation\OutputFormatters\Validate\ValidationInterface](#interface-consolidationoutputformattersvalidatevalidationinterface), [\Consolidation\OutputFormatters\Options\OverrideOptionsInterface](#interface-consolidationoutputformattersoptionsoverrideoptionsinterface)* -
+
+ +### Class: \Consolidation\OutputFormatters\Formatters\VarExportFormatter + +> Var_export formatter Run provided date thruogh var_export. + +| Visibility | Function | +|:-----------|:---------| +| public | write(\Symfony\Component\Console\Output\OutputInterface $output, mixed $data, [\Consolidation\OutputFormatters\Options\FormatterOptions](#class-consolidationoutputformattersoptionsformatteroptions) $options) : string
Given structured data, apply appropriate formatting, and return a printable string. | + +*This class implements [\Consolidation\OutputFormatters\Formatters\FormatterInterface](#interface-consolidationoutputformattersformattersformatterinterface)* + +
+ +### Class: \Consolidation\OutputFormatters\Formatters\YamlFormatter + +> Yaml formatter Convert an array or ArrayObject into Yaml. + +| Visibility | Function | +|:-----------|:---------| +| public | write(\Symfony\Component\Console\Output\OutputInterface $output, mixed $data, [\Consolidation\OutputFormatters\Options\FormatterOptions](#class-consolidationoutputformattersoptionsformatteroptions) $options) : string
Given structured data, apply appropriate formatting, and return a printable string. | + +*This class implements [\Consolidation\OutputFormatters\Formatters\FormatterInterface](#interface-consolidationoutputformattersformattersformatterinterface)* + +
+ ### Class: \Consolidation\OutputFormatters\Formatters\TableFormatter > Display a table of data with the Symfony Table class. This formatter takes data of either the RowsOfFields or PropertyList data type. Tables can be rendered with the rows running either vertically (the normal orientation) or horizontally. By default, associative lists will be displayed as two columns, with the key in the first column and the value in the second column. @@ -273,27 +297,27 @@ *This class implements [\Consolidation\OutputFormatters\Formatters\FormatterInterface](#interface-consolidationoutputformattersformattersformatterinterface), [\Consolidation\OutputFormatters\Validate\ValidDataTypesInterface](#interface-consolidationoutputformattersvalidatevaliddatatypesinterface), [\Consolidation\OutputFormatters\Validate\ValidationInterface](#interface-consolidationoutputformattersvalidatevalidationinterface), [\Consolidation\OutputFormatters\Formatters\RenderDataInterface](#interface-consolidationoutputformattersformattersrenderdatainterface)* -
-### Class: \Consolidation\OutputFormatters\Formatters\TsvFormatter +
-> Tab-separated value formatters Display the provided structured data in a tab-separated list. Output escaping is much lighter, since there is no allowance for altering the delimiter. +### Class: \Consolidation\OutputFormatters\Formatters\XmlFormatter + +> Display a table of data with the Symfony Table class. This formatter takes data of either the RowsOfFields or PropertyList data type. Tables can be rendered with the rows running either vertically (the normal orientation) or horizontally. By default, associative lists will be displayed as two columns, with the key in the first column and the value in the second column. | Visibility | Function | |:-----------|:---------| -| public | renderData(mixed $originalData, mixed $restructuredData, [\Consolidation\OutputFormatters\Options\FormatterOptions](#class-consolidationoutputformattersoptionsformatteroptions) $options) : mixed
Convert the contents of the output data just before it is to be printed, prior to output but after restructuring and validation. | +| public | __construct() : void | +| public | isValidDataType([\ReflectionClass](http://php.net/manual/en/class.reflectionclass.php) $dataType) : bool
Return the list of data types acceptable to this formatter | +| public | validDataTypes() : void | +| public | validate(mixed $structuredData) : mixed
Throw an IncompatibleDataException if the provided data cannot be processed by this formatter. Return the source data if it is valid. The data may be encapsulated or converted if necessary. | | public | write(\Symfony\Component\Console\Output\OutputInterface $output, mixed $data, [\Consolidation\OutputFormatters\Options\FormatterOptions](#class-consolidationoutputformattersoptionsformatteroptions) $options) : string
Given structured data, apply appropriate formatting, and return a printable string. | -| protected | getDefaultFormatterOptions() : mixed | -| protected | tsvEscape(mixed $data) : void | -| protected | writeOneLine(\Symfony\Component\Console\Output\OutputInterface $output, mixed $data, mixed $options) : void | -*This class extends [\Consolidation\OutputFormatters\Formatters\CsvFormatter](#class-consolidationoutputformattersformatterscsvformatter)* +*This class implements [\Consolidation\OutputFormatters\Formatters\FormatterInterface](#interface-consolidationoutputformattersformattersformatterinterface), [\Consolidation\OutputFormatters\Validate\ValidDataTypesInterface](#interface-consolidationoutputformattersvalidatevaliddatatypesinterface), [\Consolidation\OutputFormatters\Validate\ValidationInterface](#interface-consolidationoutputformattersvalidatevalidationinterface)* -*This class implements [\Consolidation\OutputFormatters\Formatters\RenderDataInterface](#interface-consolidationoutputformattersformattersrenderdatainterface), [\Consolidation\OutputFormatters\Validate\ValidationInterface](#interface-consolidationoutputformattersvalidatevalidationinterface), [\Consolidation\OutputFormatters\Validate\ValidDataTypesInterface](#interface-consolidationoutputformattersvalidatevaliddatatypesinterface), [\Consolidation\OutputFormatters\Formatters\FormatterInterface](#interface-consolidationoutputformattersformattersformatterinterface)* +
-
-### Class: \Consolidation\OutputFormatters\Formatters\VarExportFormatter +### Class: \Consolidation\OutputFormatters\Formatters\PrintRFormatter -> Var_export formatter Run provided date thruogh var_export. +> Print_r formatter Run provided date thruogh print_r. | Visibility | Function | |:-----------|:---------| @@ -301,33 +325,42 @@ *This class implements [\Consolidation\OutputFormatters\Formatters\FormatterInterface](#interface-consolidationoutputformattersformattersformatterinterface)* -
-### Class: \Consolidation\OutputFormatters\Formatters\XmlFormatter +
-> Display a table of data with the Symfony Table class. This formatter takes data of either the RowsOfFields or PropertyList data type. Tables can be rendered with the rows running either vertically (the normal orientation) or horizontally. By default, associative lists will be displayed as two columns, with the key in the first column and the value in the second column. +### Interface: \Consolidation\OutputFormatters\Formatters\RenderDataInterface | Visibility | Function | |:-----------|:---------| -| public | __construct() : void | -| public | isValidDataType([\ReflectionClass](http://php.net/manual/en/class.reflectionclass.php) $dataType) : bool
Return the list of data types acceptable to this formatter | -| public | validDataTypes() : void | -| public | validate(mixed $structuredData) : mixed
Throw an IncompatibleDataException if the provided data cannot be processed by this formatter. Return the source data if it is valid. The data may be encapsulated or converted if necessary. | -| public | write(\Symfony\Component\Console\Output\OutputInterface $output, mixed $data, [\Consolidation\OutputFormatters\Options\FormatterOptions](#class-consolidationoutputformattersoptionsformatteroptions) $options) : string
Given structured data, apply appropriate formatting, and return a printable string. | +| public | renderData(mixed $originalData, mixed $restructuredData, [\Consolidation\OutputFormatters\Options\FormatterOptions](#class-consolidationoutputformattersoptionsformatteroptions) $options) : mixed
Convert the contents of the output data just before it is to be printed, prior to output but after restructuring and validation. | -*This class implements [\Consolidation\OutputFormatters\Formatters\FormatterInterface](#interface-consolidationoutputformattersformattersformatterinterface), [\Consolidation\OutputFormatters\Validate\ValidDataTypesInterface](#interface-consolidationoutputformattersvalidatevaliddatatypesinterface), [\Consolidation\OutputFormatters\Validate\ValidationInterface](#interface-consolidationoutputformattersvalidatevalidationinterface)* +
-
-### Class: \Consolidation\OutputFormatters\Formatters\YamlFormatter +### Class: \Consolidation\OutputFormatters\Formatters\TsvFormatter -> Yaml formatter Convert an array or ArrayObject into Yaml. +> Tab-separated value formatters Display the provided structured data in a tab-separated list. Output escaping is much lighter, since there is no allowance for altering the delimiter. | Visibility | Function | |:-----------|:---------| +| public | renderData(mixed $originalData, mixed $restructuredData, [\Consolidation\OutputFormatters\Options\FormatterOptions](#class-consolidationoutputformattersoptionsformatteroptions) $options) : mixed
Convert the contents of the output data just before it is to be printed, prior to output but after restructuring and validation. | | public | write(\Symfony\Component\Console\Output\OutputInterface $output, mixed $data, [\Consolidation\OutputFormatters\Options\FormatterOptions](#class-consolidationoutputformattersoptionsformatteroptions) $options) : string
Given structured data, apply appropriate formatting, and return a printable string. | +| protected | getDefaultFormatterOptions() : mixed | +| protected | tsvEscape(mixed $data) : void | +| protected | writeOneLine(\Symfony\Component\Console\Output\OutputInterface $output, mixed $data, mixed $options) : void | -*This class implements [\Consolidation\OutputFormatters\Formatters\FormatterInterface](#interface-consolidationoutputformattersformattersformatterinterface)* +*This class extends [\Consolidation\OutputFormatters\Formatters\CsvFormatter](#class-consolidationoutputformattersformatterscsvformatter)* + +*This class implements [\Consolidation\OutputFormatters\Formatters\RenderDataInterface](#interface-consolidationoutputformattersformattersrenderdatainterface), [\Consolidation\OutputFormatters\Validate\ValidationInterface](#interface-consolidationoutputformattersvalidatevalidationinterface), [\Consolidation\OutputFormatters\Validate\ValidDataTypesInterface](#interface-consolidationoutputformattersvalidatevaliddatatypesinterface), [\Consolidation\OutputFormatters\Formatters\FormatterInterface](#interface-consolidationoutputformattersformattersformatterinterface)* + +
+ +### Interface: \Consolidation\OutputFormatters\Options\OverrideOptionsInterface + +| Visibility | Function | +|:-----------|:---------| +| public | overrideOptions(mixed $structuredOutput, [\Consolidation\OutputFormatters\Options\FormatterOptions](#class-consolidationoutputformattersoptionsformatteroptions) $options) : [\Consolidation\OutputFormatters\Options\FormatterOptions](#class-consolidationoutputformattersoptionsformatteroptions)
Allow the formatter to mess with the configuration options before any transformations et. al. get underway. | + +
-
### Class: \Consolidation\OutputFormatters\Options\FormatterOptions > FormetterOptions holds information that affects the way a formatter renders its output. There are three places where a formatter might get options from: 1. Configuration associated with the command that produced the output. This is passed in to FormatterManager::write() along with the data to format. It might originally come from annotations on the command, or it might come from another source. Examples include the field labels for a table, or the default list of fields to display. 2. Options specified by the user, e.g. by commandline options. 3. Default values associated with the formatter itself. This class caches configuration from sources (1) and (2), and expects to be provided the defaults, (3), whenever a value is requested. @@ -347,9 +380,11 @@ | public | setConfigurationDefault(string $key, mixed $value) : \Consolidation\OutputFormatters\Options\FormetterOptions
Change one configuration value for this formatter option, but only if it does not already have a value set. | | public | setDefaultFields(mixed $fields) : void | | public | setDefaultStringField(mixed $defaultStringField) : void | +| public | setDelimiter(mixed $delimiter) : void | | public | setFieldLabels(mixed $fieldLabels) : void | | public | setIncludeFieldLables(mixed $includFieldLables) : void | | public | setInput(\Symfony\Component\Console\Input\InputInterface $input) : \Consolidation\OutputFormatters\Options\type
Provide a Symfony Console InputInterface containing the user-specified options for this request. | +| public | setListDelimiter(mixed $listDelimiter) : void | | public | setListOrientation(mixed $listOrientation) : void | | public | setOption(string $key, mixed $value) : [\Consolidation\OutputFormatters\Options\FormatterOptions](#class-consolidationoutputformattersoptionsformatteroptions)
Change one option value specified by the user for this request. | | public | setOptions(array $options) : [\Consolidation\OutputFormatters\Options\FormatterOptions](#class-consolidationoutputformattersoptionsformatteroptions)
Set all of the options that were specified by the user for this request. | @@ -363,14 +398,67 @@ | protected | parse(string $key, mixed $value) : mixed
Given the raw value for a specific key, do any type conversion (e.g. from a textual list to an array) needed for the data. | | protected | setConfigurationValue(string $key, mixed $value) : \Consolidation\OutputFormatters\Options\FormetterOptions
Change one configuration value for this formatter option. | -
-### Interface: \Consolidation\OutputFormatters\Options\OverrideOptionsInterface +
+ +### Interface: \Consolidation\OutputFormatters\StructuredData\ListDataInterface | Visibility | Function | |:-----------|:---------| -| public | overrideOptions(mixed $structuredOutput, [\Consolidation\OutputFormatters\Options\FormatterOptions](#class-consolidationoutputformattersoptionsformatteroptions) $options) : [\Consolidation\OutputFormatters\Options\FormatterOptions](#class-consolidationoutputformattersoptionsformatteroptions)
Allow the formatter to mess with the configuration options before any transformations et. al. get underway. | +| public | getListData([\Consolidation\OutputFormatters\Options\FormatterOptions](#class-consolidationoutputformattersoptionsformatteroptions) $options) : array
Convert data to a format suitable for use in a list. By default, the array values will be used. Implement ListDataInterface to use some other criteria (e.g. array keys). | + +
+ +### Interface: \Consolidation\OutputFormatters\StructuredData\TableDataInterface + +| Visibility | Function | +|:-----------|:---------| +| public | getOriginalData() : mixed
Return the original data for this table. Used by any formatter that is -not- a table. | +| public | getTableData(bool/boolean $includeRowKey=false) : array
Convert structured data into a form suitable for use by the table formatter. key from each row. | + +
+ +### Class: \Consolidation\OutputFormatters\StructuredData\HelpDocument + +| Visibility | Function | +|:-----------|:---------| +| public | getDomData() : [\DomDocument](http://php.net/manual/en/class.domdocument.php)
Convert data into a \DomDocument. | + +*This class implements [\Consolidation\OutputFormatters\StructuredData\Xml\DomDataInterface](#interface-consolidationoutputformattersstructureddataxmldomdatainterface)* + +
+ +### Interface: \Consolidation\OutputFormatters\StructuredData\OriginalDataInterface + +| Visibility | Function | +|:-----------|:---------| +| public | getOriginalData() : mixed
Return the original data for this table. Used by any formatter that expects an array. | + +
+ +### Class: \Consolidation\OutputFormatters\StructuredData\RowsOfFields + +> Holds an array where each element of the array is one row, and each row contains an associative array where the keys are the field names, and the values are the field data. It is presumed that every row contains the same keys. + +| Visibility | Function | +|:-----------|:---------| +| public | getListData([\Consolidation\OutputFormatters\Options\FormatterOptions](#class-consolidationoutputformattersoptionsformatteroptions) $options) : mixed | +| public | restructure([\Consolidation\OutputFormatters\Options\FormatterOptions](#class-consolidationoutputformattersoptionsformatteroptions) $options) : \Consolidation\OutputFormatters\StructuredData\Consolidation\OutputFormatters\Transformations\TableTransformation
Restructure this data for output by converting it into a table transformation object. | +| protected | defaultOptions() : void | + +*This class extends [\Consolidation\OutputFormatters\StructuredData\AbstractStructuredList](#class-consolidationoutputformattersstructureddataabstractstructuredlist-abstract)* + +*This class implements [\Consolidation\OutputFormatters\StructuredData\RenderCellInterface](#interface-consolidationoutputformattersstructureddatarendercellinterface), [\Consolidation\OutputFormatters\StructuredData\RenderCellCollectionInterface](#interface-consolidationoutputformattersstructureddatarendercellcollectioninterface), [\Consolidation\OutputFormatters\StructuredData\RestructureInterface](#interface-consolidationoutputformattersstructureddatarestructureinterface), \Countable, \Serializable, \ArrayAccess, \Traversable, \IteratorAggregate, [\Consolidation\OutputFormatters\StructuredData\ListDataInterface](#interface-consolidationoutputformattersstructureddatalistdatainterface)* + +
+ +### Interface: \Consolidation\OutputFormatters\StructuredData\RestructureInterface + +| Visibility | Function | +|:-----------|:---------| +| public | restructure([\Consolidation\OutputFormatters\Options\FormatterOptions](#class-consolidationoutputformattersoptionsformatteroptions) $options) : void
Allow structured data to be restructured -- i.e. to select fields to show, reorder fields, etc. | + +
-
### Class: \Consolidation\OutputFormatters\StructuredData\AbstractStructuredList (abstract) > Holds an array where each element of the array is one row, and each row contains an associative array where the keys are the field names, and the values are the field data. It is presumed that every row contains the same keys. @@ -380,7 +468,6 @@ | public | __construct(mixed $data) : void | | public | addRenderer([\Consolidation\OutputFormatters\StructuredData\RenderCellInterface](#interface-consolidationoutputformattersstructureddatarendercellinterface) $renderer, string $priority=`'normal'`) : \Consolidation\OutputFormatters\StructuredData\$this
Add a renderer | | public | addRendererFunction(\callable $rendererFn, string $priority=`'normal'`) : \Consolidation\OutputFormatters\StructuredData\$this
Add a callable as a renderer | -| public | abstract getListData([\Consolidation\OutputFormatters\Options\FormatterOptions](#class-consolidationoutputformattersoptionsformatteroptions) $options) : mixed | | public | renderCell(mixed $key, mixed $cellData, [\Consolidation\OutputFormatters\Options\FormatterOptions](#class-consolidationoutputformattersoptionsformatteroptions) $options, mixed $rowData) : void | | public | abstract restructure([\Consolidation\OutputFormatters\Options\FormatterOptions](#class-consolidationoutputformattersoptionsformatteroptions) $options) : void | | protected | createTableTransformation(mixed $data, mixed $options) : mixed | @@ -389,47 +476,27 @@ | protected | getReorderedFieldLabels(mixed $data, mixed $options, mixed $defaults) : mixed | | protected | instantiateTableTransformation(mixed $data, mixed $fieldLabels, mixed $rowLabels) : void | -*This class extends \ArrayObject* - -*This class implements \Countable, \Serializable, \ArrayAccess, \Traversable, \IteratorAggregate, [\Consolidation\OutputFormatters\StructuredData\RestructureInterface](#interface-consolidationoutputformattersstructureddatarestructureinterface), [\Consolidation\OutputFormatters\StructuredData\ListDataInterface](#interface-consolidationoutputformattersstructureddatalistdatainterface), [\Consolidation\OutputFormatters\StructuredData\RenderCellCollectionInterface](#interface-consolidationoutputformattersstructureddatarendercellcollectioninterface), [\Consolidation\OutputFormatters\StructuredData\RenderCellInterface](#interface-consolidationoutputformattersstructureddatarendercellinterface)* - -
-### Class: \Consolidation\OutputFormatters\StructuredData\AssociativeList - -> Old name for PropertyList class. +*This class extends [\Consolidation\OutputFormatters\StructuredData\ListDataFromKeys](#class-consolidationoutputformattersstructureddatalistdatafromkeys)* -| Visibility | Function | -|:-----------|:---------| +*This class implements [\Consolidation\OutputFormatters\StructuredData\ListDataInterface](#interface-consolidationoutputformattersstructureddatalistdatainterface), \IteratorAggregate, \Traversable, \ArrayAccess, \Serializable, \Countable, [\Consolidation\OutputFormatters\StructuredData\RestructureInterface](#interface-consolidationoutputformattersstructureddatarestructureinterface), [\Consolidation\OutputFormatters\StructuredData\RenderCellCollectionInterface](#interface-consolidationoutputformattersstructureddatarendercellcollectioninterface), [\Consolidation\OutputFormatters\StructuredData\RenderCellInterface](#interface-consolidationoutputformattersstructureddatarendercellinterface)* -*This class extends [\Consolidation\OutputFormatters\StructuredData\PropertyList](#class-consolidationoutputformattersstructureddatapropertylist)* +
-*This class implements \Countable, \Serializable, \ArrayAccess, \Traversable, \IteratorAggregate, [\Consolidation\OutputFormatters\StructuredData\RestructureInterface](#interface-consolidationoutputformattersstructureddatarestructureinterface), [\Consolidation\OutputFormatters\StructuredData\ListDataInterface](#interface-consolidationoutputformattersstructureddatalistdatainterface), [\Consolidation\OutputFormatters\StructuredData\RenderCellCollectionInterface](#interface-consolidationoutputformattersstructureddatarendercellcollectioninterface), [\Consolidation\OutputFormatters\StructuredData\RenderCellInterface](#interface-consolidationoutputformattersstructureddatarendercellinterface)* +### Class: \Consolidation\OutputFormatters\StructuredData\ListDataFromKeys -
-### Class: \Consolidation\OutputFormatters\StructuredData\CallableRenderer +> Represents aribtrary array data (structured or unstructured) where the data to display in --list format comes from the array keys. | Visibility | Function | |:-----------|:---------| -| public | __construct(\callable $renderFunction) : void | -| public | renderCell(mixed $key, mixed $cellData, [\Consolidation\OutputFormatters\Options\FormatterOptions](#class-consolidationoutputformattersoptionsformatteroptions) $options, mixed $rowData) : void | +| public | __construct(mixed $data) : void | +| public | getListData([\Consolidation\OutputFormatters\Options\FormatterOptions](#class-consolidationoutputformattersoptionsformatteroptions) $options) : mixed | -*This class implements [\Consolidation\OutputFormatters\StructuredData\RenderCellInterface](#interface-consolidationoutputformattersstructureddatarendercellinterface)* +*This class extends \ArrayObject* -
-### Interface: \Consolidation\OutputFormatters\StructuredData\ListDataInterface +*This class implements \Countable, \Serializable, \ArrayAccess, \Traversable, \IteratorAggregate, [\Consolidation\OutputFormatters\StructuredData\ListDataInterface](#interface-consolidationoutputformattersstructureddatalistdatainterface)* -| Visibility | Function | -|:-----------|:---------| -| public | getListData([\Consolidation\OutputFormatters\Options\FormatterOptions](#class-consolidationoutputformattersoptionsformatteroptions) $options) : array
Convert data to a format suitable for use in a list. By default, the array values will be used. Implement ListDataInterface to use some other criteria (e.g. array keys). | - -
-### Interface: \Consolidation\OutputFormatters\StructuredData\OriginalDataInterface +
-| Visibility | Function | -|:-----------|:---------| -| public | getOriginalData() : mixed
Return the original data for this table. Used by any formatter that expects an array. | - -
### Class: \Consolidation\OutputFormatters\StructuredData\PropertyList > Holds an array where each element of the array is one key : value pair. The keys must be unique, as is typically the case for associative arrays. @@ -443,62 +510,70 @@ *This class extends [\Consolidation\OutputFormatters\StructuredData\AbstractStructuredList](#class-consolidationoutputformattersstructureddataabstractstructuredlist-abstract)* -*This class implements [\Consolidation\OutputFormatters\StructuredData\RenderCellInterface](#interface-consolidationoutputformattersstructureddatarendercellinterface), [\Consolidation\OutputFormatters\StructuredData\RenderCellCollectionInterface](#interface-consolidationoutputformattersstructureddatarendercellcollectioninterface), [\Consolidation\OutputFormatters\StructuredData\ListDataInterface](#interface-consolidationoutputformattersstructureddatalistdatainterface), [\Consolidation\OutputFormatters\StructuredData\RestructureInterface](#interface-consolidationoutputformattersstructureddatarestructureinterface), \IteratorAggregate, \Traversable, \ArrayAccess, \Serializable, \Countable* +*This class implements [\Consolidation\OutputFormatters\StructuredData\RenderCellInterface](#interface-consolidationoutputformattersstructureddatarendercellinterface), [\Consolidation\OutputFormatters\StructuredData\RenderCellCollectionInterface](#interface-consolidationoutputformattersstructureddatarendercellcollectioninterface), [\Consolidation\OutputFormatters\StructuredData\RestructureInterface](#interface-consolidationoutputformattersstructureddatarestructureinterface), \Countable, \Serializable, \ArrayAccess, \Traversable, \IteratorAggregate, [\Consolidation\OutputFormatters\StructuredData\ListDataInterface](#interface-consolidationoutputformattersstructureddatalistdatainterface)* -
-### Interface: \Consolidation\OutputFormatters\StructuredData\RenderCellCollectionInterface +
+ +### Interface: \Consolidation\OutputFormatters\StructuredData\RenderCellInterface | Visibility | Function | |:-----------|:---------| -| public | addRenderer([\Consolidation\OutputFormatters\StructuredData\RenderCellInterface](#interface-consolidationoutputformattersstructureddatarendercellinterface) $renderer) : \Consolidation\OutputFormatters\StructuredData\$this
Add a renderer | +| public | renderCell(string $key, mixed $cellData, [\Consolidation\OutputFormatters\Options\FormatterOptions](#class-consolidationoutputformattersoptionsformatteroptions) $options, array $rowData) : mixed
Convert the contents of one table cell into a string, so that it may be placed in the table. Renderer should return the $cellData passed to it if it does not wish to process it. | -*This class implements [\Consolidation\OutputFormatters\StructuredData\RenderCellInterface](#interface-consolidationoutputformattersstructureddatarendercellinterface)* +
-
-### Interface: \Consolidation\OutputFormatters\StructuredData\RenderCellInterface +### Class: \Consolidation\OutputFormatters\StructuredData\CallableRenderer | Visibility | Function | |:-----------|:---------| -| public | renderCell(string $key, mixed $cellData, [\Consolidation\OutputFormatters\Options\FormatterOptions](#class-consolidationoutputformattersoptionsformatteroptions) $options, array $rowData) : mixed
Convert the contents of one table cell into a string, so that it may be placed in the table. Renderer should return the $cellData passed to it if it does not wish to process it. | +| public | __construct(\callable $renderFunction) : void | +| public | renderCell(mixed $key, mixed $cellData, [\Consolidation\OutputFormatters\Options\FormatterOptions](#class-consolidationoutputformattersoptionsformatteroptions) $options, mixed $rowData) : void | -
-### Interface: \Consolidation\OutputFormatters\StructuredData\RestructureInterface +*This class implements [\Consolidation\OutputFormatters\StructuredData\RenderCellInterface](#interface-consolidationoutputformattersstructureddatarendercellinterface)* + +
+ +### Interface: \Consolidation\OutputFormatters\StructuredData\RenderCellCollectionInterface | Visibility | Function | |:-----------|:---------| -| public | restructure([\Consolidation\OutputFormatters\Options\FormatterOptions](#class-consolidationoutputformattersoptionsformatteroptions) $options) : void
Allow structured data to be restructured -- i.e. to select fields to show, reorder fields, etc. | +| public | addRenderer([\Consolidation\OutputFormatters\StructuredData\RenderCellInterface](#interface-consolidationoutputformattersstructureddatarendercellinterface) $renderer) : \Consolidation\OutputFormatters\StructuredData\$this
Add a renderer | -
-### Class: \Consolidation\OutputFormatters\StructuredData\RowsOfFields +*This class implements [\Consolidation\OutputFormatters\StructuredData\RenderCellInterface](#interface-consolidationoutputformattersstructureddatarendercellinterface)* -> Holds an array where each element of the array is one row, and each row contains an associative array where the keys are the field names, and the values are the field data. It is presumed that every row contains the same keys. +
+ +### Class: \Consolidation\OutputFormatters\StructuredData\AssociativeList + +> Old name for PropertyList class. | Visibility | Function | |:-----------|:---------| -| public | getListData([\Consolidation\OutputFormatters\Options\FormatterOptions](#class-consolidationoutputformattersoptionsformatteroptions) $options) : mixed | -| public | restructure([\Consolidation\OutputFormatters\Options\FormatterOptions](#class-consolidationoutputformattersoptionsformatteroptions) $options) : \Consolidation\OutputFormatters\StructuredData\Consolidation\OutputFormatters\Transformations\TableTransformation
Restructure this data for output by converting it into a table transformation object. | -| protected | defaultOptions() : void | -*This class extends [\Consolidation\OutputFormatters\StructuredData\AbstractStructuredList](#class-consolidationoutputformattersstructureddataabstractstructuredlist-abstract)* +*This class extends [\Consolidation\OutputFormatters\StructuredData\PropertyList](#class-consolidationoutputformattersstructureddatapropertylist)* -*This class implements [\Consolidation\OutputFormatters\StructuredData\RenderCellInterface](#interface-consolidationoutputformattersstructureddatarendercellinterface), [\Consolidation\OutputFormatters\StructuredData\RenderCellCollectionInterface](#interface-consolidationoutputformattersstructureddatarendercellcollectioninterface), [\Consolidation\OutputFormatters\StructuredData\ListDataInterface](#interface-consolidationoutputformattersstructureddatalistdatainterface), [\Consolidation\OutputFormatters\StructuredData\RestructureInterface](#interface-consolidationoutputformattersstructureddatarestructureinterface), \IteratorAggregate, \Traversable, \ArrayAccess, \Serializable, \Countable* +*This class implements [\Consolidation\OutputFormatters\StructuredData\ListDataInterface](#interface-consolidationoutputformattersstructureddatalistdatainterface), \IteratorAggregate, \Traversable, \ArrayAccess, \Serializable, \Countable, [\Consolidation\OutputFormatters\StructuredData\RestructureInterface](#interface-consolidationoutputformattersstructureddatarestructureinterface), [\Consolidation\OutputFormatters\StructuredData\RenderCellCollectionInterface](#interface-consolidationoutputformattersstructureddatarendercellcollectioninterface), [\Consolidation\OutputFormatters\StructuredData\RenderCellInterface](#interface-consolidationoutputformattersstructureddatarendercellinterface)* -
-### Interface: \Consolidation\OutputFormatters\StructuredData\TableDataInterface +
+ +### Interface: \Consolidation\OutputFormatters\StructuredData\Xml\XmlSchemaInterface + +> When using arrays, we could represent XML data in a number of different ways. For example, given the following XML data strucutre: blah a b c This could be: [ 'id' => 1, 'name' => 'doc', 'foobars' => [ [ 'id' => '123', 'name' => 'blah', 'widgets' => [ [ 'foo' => 'a', 'bar' => 'b', 'baz' => 'c', ] ], ], ] ] The challenge is more in going from an array back to the more structured xml format. Note that any given key => string mapping could represent either an attribute, or a simple XML element containing only a string value. In general, we do *not* want to add extra layers of nesting in the data structure to disambiguate between these kinds of data, as we want the source data to render cleanly into other formats, e.g. yaml, json, et. al., and we do not want to force every data provider to have to consider the optimal xml schema for their data. Our strategy, therefore, is to expect clients that wish to provide a very specific xml representation to return a DOMDocument, and, for other data structures where xml is a secondary concern, then we will use some default heuristics to convert from arrays to xml. | Visibility | Function | |:-----------|:---------| -| public | getOriginalData() : mixed
Return the original data for this table. Used by any formatter that is -not- a table. | -| public | getTableData(bool/boolean $includeRowKey=false) : array
Convert structured data into a form suitable for use by the table formatter. key from each row. | +| public | arrayToXml(mixed $structuredData) : [\DOMDocument](http://php.net/manual/en/class.domdocument.php)
Convert data to a format suitable for use in a list. By default, the array values will be used. Implement ListDataInterface to use some other criteria (e.g. array keys). | + +
-
### Interface: \Consolidation\OutputFormatters\StructuredData\Xml\DomDataInterface | Visibility | Function | |:-----------|:---------| | public | getDomData() : [\DomDocument](http://php.net/manual/en/class.domdocument.php)
Convert data into a \DomDocument. | -
+
+ ### Class: \Consolidation\OutputFormatters\StructuredData\Xml\XmlSchema | Visibility | Function | @@ -508,6 +583,7 @@ | protected | addXmlChildren([\DOMDocument](http://php.net/manual/en/class.domdocument.php) $dom, mixed $xmlParent, mixed $elementName, mixed $structuredData) : void | | protected | addXmlData([\DOMDocument](http://php.net/manual/en/class.domdocument.php) $dom, mixed $xmlParent, mixed $elementName, mixed $structuredData) : void | | protected | addXmlDataOrAttribute([\DOMDocument](http://php.net/manual/en/class.domdocument.php) $dom, mixed $xmlParent, mixed $elementName, mixed $key, mixed $value) : void | +| protected | determineElementName(mixed $key, mixed $childElementName, mixed $value) : void | | protected | getDefaultElementName(mixed $parentElementName) : mixed | | protected | getTopLevelElementName(mixed $structuredData) : mixed | | protected | inElementList(mixed $parentElementName, mixed $elementName) : void | @@ -517,44 +593,18 @@ *This class implements [\Consolidation\OutputFormatters\StructuredData\Xml\XmlSchemaInterface](#interface-consolidationoutputformattersstructureddataxmlxmlschemainterface)* -
-### Interface: \Consolidation\OutputFormatters\StructuredData\Xml\XmlSchemaInterface - -> When using arrays, we could represent XML data in a number of different ways. For example, given the following XML data strucutre: blah a b c This could be: [ 'id' => 1, 'name' => 'doc', 'foobars' => [ [ 'id' => '123', 'name' => 'blah', 'widgets' => [ [ 'foo' => 'a', 'bar' => 'b', 'baz' => 'c', ] ], ], ] ] The challenge is more in going from an array back to the more structured xml format. Note that any given key => string mapping could represent either an attribute, or a simple XML element containing only a string value. In general, we do *not* want to add extra layers of nesting in the data structure to disambiguate between these kinds of data, as we want the source data to render cleanly into other formats, e.g. yaml, json, et. al., and we do not want to force every data provider to have to consider the optimal xml schema for their data. Our strategy, therefore, is to expect clients that wish to provide a very specific xml representation to return a DOMDocument, and, for other data structures where xml is a secondary concern, then we will use some default heuristics to convert from arrays to xml. - -| Visibility | Function | -|:-----------|:---------| -| public | arrayToXml(mixed $structuredData) : [\DOMDocument](http://php.net/manual/en/class.domdocument.php)
Convert data to a format suitable for use in a list. By default, the array values will be used. Implement ListDataInterface to use some other criteria (e.g. array keys). | +
-
-### Class: \Consolidation\OutputFormatters\Transformations\DomToArraySimplifier +### Class: \Consolidation\OutputFormatters\Transformations\PropertyParser -> Simplify a DOMDocument to an array. +> Transform a string of properties into a PHP associative array. Input: one: red two: white three: blue Output: [ 'one' => 'red', 'two' => 'white', 'three' => 'blue', ] | Visibility | Function | |:-----------|:---------| -| public | __construct() : void | -| public | canSimplify([\ReflectionClass](http://php.net/manual/en/class.reflectionclass.php) $dataType) : bool | -| public | simplifyToArray(mixed $structuredData, [\Consolidation\OutputFormatters\Options\FormatterOptions](#class-consolidationoutputformattersoptionsformatteroptions) $options) : void | -| protected | elementToArray([\DOMNode](http://php.net/manual/en/class.domnode.php) $element) : array
Recursively convert the provided DOM element into a php array. | -| protected | getNodeAttributes([\DOMNode](http://php.net/manual/en/class.domnode.php) $element) : array
Get all of the attributes of the provided element. | -| protected | getNodeChildren([\DOMNode](http://php.net/manual/en/class.domnode.php) $element) : array
Get all of the children of the provided element, with simplification. | -| protected | getNodeChildrenData([\DOMNode](http://php.net/manual/en/class.domnode.php) $element) : array
Get the data from the children of the provided node in preliminary form. | -| protected | getUniformChildren(string $parentKey, [\DOMNode](http://php.net/manual/en/class.domnode.php) $element) : array
Convert the children of the provided DOM element into an array. Here, 'uniform' means that all of the element names of the children are identical, and further, the element name of the parent is the plural form of the child names. When the children are uniform in this way, then the parent element name will be used as the key to store the children in, and the child list will be returned as a simple list with their (duplicate) element names omitted. | -| protected | getUniqueChildren(string $parentKey, [\DOMNode](http://php.net/manual/en/class.domnode.php) $element) : array
Convert the children of the provided DOM element into an array. Here, 'unique' means that all of the element names of the children are different. Since the element names will become the key of the associative array that is returned, so duplicates are not supported. If there are any duplicates, then an exception will be thrown. | -| protected | hasUniformChildren([\DOMNode](http://php.net/manual/en/class.domnode.php) $element) : boolean
Determine whether the children of the provided element are uniform. | -| protected | valueCanBeSimplified([\DOMNode](http://php.net/manual/en/class.domnode.php) $value) : boolean
Determine whether the provided value has additional unnecessary nesting. {"color": "red"} is converted to "red". No other simplification is done. | - -*This class implements [\Consolidation\OutputFormatters\Transformations\SimplifyToArrayInterface](#interface-consolidationoutputformatterstransformationssimplifytoarrayinterface)* +| public static | parse(mixed $data) : void | -
-### Interface: \Consolidation\OutputFormatters\Transformations\OverrideRestructureInterface +
-| Visibility | Function | -|:-----------|:---------| -| public | overrideRestructure(mixed $structuredOutput, [\Consolidation\OutputFormatters\Options\FormatterOptions](#class-consolidationoutputformattersoptionsformatteroptions) $options) : mixed
Select data to use directly from the structured output, before the restructure operation has been executed. | - -
### Class: \Consolidation\OutputFormatters\Transformations\PropertyListTableTransformation | Visibility | Function | @@ -565,16 +615,33 @@ *This class implements [\Consolidation\OutputFormatters\StructuredData\OriginalDataInterface](#interface-consolidationoutputformattersstructureddataoriginaldatainterface), [\Consolidation\OutputFormatters\StructuredData\TableDataInterface](#interface-consolidationoutputformattersstructureddatatabledatainterface), \IteratorAggregate, \Traversable, \ArrayAccess, \Serializable, \Countable* -
-### Class: \Consolidation\OutputFormatters\Transformations\PropertyParser +
-> Transform a string of properties into a PHP associative array. Input: one: red two: white three: blue Output: [ 'one' => 'red', 'two' => 'white', 'three' => 'blue', ] +### Class: \Consolidation\OutputFormatters\Transformations\TableTransformation | Visibility | Function | |:-----------|:---------| -| public static | parse(mixed $data) : void | +| public | __construct(mixed $data, mixed $fieldLabels, array $rowLabels=array()) : void | +| public | getHeader(mixed $key) : mixed | +| public | getHeaders() : mixed | +| public | getLayout() : mixed | +| public | getOriginalData() : mixed | +| public | getRowLabel(mixed $rowid) : mixed | +| public | getRowLabels() : mixed | +| public | getTableData(bool $includeRowKey=false) : mixed | +| public | isList() : bool | +| public | setLayout(mixed $layout) : void | +| protected | convertTableToList() : void | +| protected | getRowDataWithKey(mixed $data) : mixed | +| protected static | transformRow(mixed $row, mixed $fieldLabels) : void | +| protected static | transformRows(mixed $data, mixed $fieldLabels) : void | + +*This class extends \ArrayObject* + +*This class implements \Countable, \Serializable, \ArrayAccess, \Traversable, \IteratorAggregate, [\Consolidation\OutputFormatters\StructuredData\TableDataInterface](#interface-consolidationoutputformattersstructureddatatabledatainterface), [\Consolidation\OutputFormatters\StructuredData\OriginalDataInterface](#interface-consolidationoutputformattersstructureddataoriginaldatainterface)* + +
-
### Class: \Consolidation\OutputFormatters\Transformations\ReorderFields > Reorder the field labels based on the user-selected fields to display. @@ -588,54 +655,109 @@ | protected | matchFieldInLabelMap(mixed $field, mixed $fieldLabels) : void | | protected | reorderFieldLabels(mixed $fields, mixed $fieldLabels, mixed $data) : void | -
-### Interface: \Consolidation\OutputFormatters\Transformations\SimplifyToArrayInterface +
-| Visibility | Function | -|:-----------|:---------| -| public | canSimplify([\ReflectionClass](http://php.net/manual/en/class.reflectionclass.php) $structuredOutput) : bool
Indicate whether or not the given data type can be simplified to an array | -| public | simplifyToArray(mixed $structuredOutput, [\Consolidation\OutputFormatters\Options\FormatterOptions](#class-consolidationoutputformattersoptionsformatteroptions) $options) : array
Convert structured data into a generic array, usable by generic array-based formatters. Objects that implement this interface may be attached to the FormatterManager, and will be used on any data structure that needs to be simplified into an array. An array simplifier should take no action other than to return its input data if it cannot simplify the provided data into an array. | +### Class: \Consolidation\OutputFormatters\Transformations\DomToArraySimplifier -
-### Class: \Consolidation\OutputFormatters\Transformations\TableTransformation +> Simplify a DOMDocument to an array. | Visibility | Function | |:-----------|:---------| -| public | __construct(mixed $data, mixed $fieldLabels, array $rowLabels=array()) : void | -| public | getHeader(mixed $key) : mixed | -| public | getHeaders() : mixed | -| public | getLayout() : mixed | -| public | getOriginalData() : mixed | -| public | getRowLabel(mixed $rowid) : mixed | -| public | getRowLabels() : mixed | -| public | getTableData(bool $includeRowKey=false) : mixed | -| public | isList() : bool | -| public | setLayout(mixed $layout) : void | -| protected | convertTableToList() : void | -| protected | getRowDataWithKey(mixed $data) : mixed | -| protected static | transformRow(mixed $row, mixed $fieldLabels) : void | -| protected static | transformRows(mixed $data, mixed $fieldLabels) : void | +| public | __construct() : void | +| public | canSimplify([\ReflectionClass](http://php.net/manual/en/class.reflectionclass.php) $dataType) : bool | +| public | simplifyToArray(mixed $structuredData, [\Consolidation\OutputFormatters\Options\FormatterOptions](#class-consolidationoutputformattersoptionsformatteroptions) $options) : void | +| protected | elementToArray([\DOMNode](http://php.net/manual/en/class.domnode.php) $element) : array
Recursively convert the provided DOM element into a php array. | +| protected | getIdOfValue(mixed $value) : string
If the object has an 'id' or 'name' element, then use that as the array key when storing this value in its parent. | +| protected | getNodeAttributes([\DOMNode](http://php.net/manual/en/class.domnode.php) $element) : array
Get all of the attributes of the provided element. | +| protected | getNodeChildren([\DOMNode](http://php.net/manual/en/class.domnode.php) $element) : array
Get all of the children of the provided element, with simplification. | +| protected | getNodeChildrenData([\DOMNode](http://php.net/manual/en/class.domnode.php) $element) : array
Get the data from the children of the provided node in preliminary form. | +| protected | getUniformChildren(string $parentKey, [\DOMNode](http://php.net/manual/en/class.domnode.php) $element) : array
Convert the children of the provided DOM element into an array. Here, 'uniform' means that all of the element names of the children are identical, and further, the element name of the parent is the plural form of the child names. When the children are uniform in this way, then the parent element name will be used as the key to store the children in, and the child list will be returned as a simple list with their (duplicate) element names omitted. | +| protected | getUniqueChildren(string $parentKey, [\DOMNode](http://php.net/manual/en/class.domnode.php) $element) : array
Convert the children of the provided DOM element into an array. Here, 'unique' means that all of the element names of the children are different. Since the element names will become the key of the associative array that is returned, so duplicates are not supported. If there are any duplicates, then an exception will be thrown. | +| protected | hasUniformChildren([\DOMNode](http://php.net/manual/en/class.domnode.php) $element) : boolean
Determine whether the children of the provided element are uniform. | +| protected | valueCanBeSimplified([\DOMNode](http://php.net/manual/en/class.domnode.php) $value) : boolean
Determine whether the provided value has additional unnecessary nesting. {"color": "red"} is converted to "red". No other simplification is done. | -*This class extends \ArrayObject* +*This class implements [\Consolidation\OutputFormatters\Transformations\SimplifyToArrayInterface](#interface-consolidationoutputformatterstransformationssimplifytoarrayinterface)* -*This class implements \Countable, \Serializable, \ArrayAccess, \Traversable, \IteratorAggregate, [\Consolidation\OutputFormatters\StructuredData\TableDataInterface](#interface-consolidationoutputformattersstructureddatatabledatainterface), [\Consolidation\OutputFormatters\StructuredData\OriginalDataInterface](#interface-consolidationoutputformattersstructureddataoriginaldatainterface)* +
-
### Class: \Consolidation\OutputFormatters\Transformations\WordWrapper | Visibility | Function | |:-----------|:---------| | public | __construct(mixed $width) : void | +| public | minimumWidth(mixed $colkey, mixed $width) : void
Set the minimum width of just one column | | public | setMinimumWidths(array $minimumWidths) : void
If columns have minimum widths, then set them here. | | public | setPaddingFromStyle(\Symfony\Component\Console\Helper\TableStyle $style) : void
Calculate our padding widths from the specified table style. | | public | wrap(array $rows, array $widths=array()) : array
Wrap the cells in each part of the provided data table | -| protected | columnAutowidth(array $rows, array $widths) : void
Determine the best fit for column widths. Ported from Drush. (in characters) - these will be left as is. | -| protected static | longestWordLength(string $str) : int
Return the length of the longest word in the string. | -| protected | selectColumnToReduce(mixed $col_dist, mixed $auto_widths, mixed $max_word_lens) : void | -| protected | shouldSelectThisColumn(mixed $count, mixed $counts, mixed $width) : bool | +| protected | calculateWidths(mixed $rows, array $widths=array()) : void
Determine what widths we'll use for wrapping. | | protected | wrapCell(mixed $cell, string $cellWidth) : mixed
Wrap one cell. Guard against modifying non-strings and then call through to wordwrap(). | -
+
+ +### Interface: \Consolidation\OutputFormatters\Transformations\OverrideRestructureInterface + +| Visibility | Function | +|:-----------|:---------| +| public | overrideRestructure(mixed $structuredOutput, [\Consolidation\OutputFormatters\Options\FormatterOptions](#class-consolidationoutputformattersoptionsformatteroptions) $options) : mixed
Select data to use directly from the structured output, before the restructure operation has been executed. | + +
+ +### Interface: \Consolidation\OutputFormatters\Transformations\SimplifyToArrayInterface + +| Visibility | Function | +|:-----------|:---------| +| public | canSimplify([\ReflectionClass](http://php.net/manual/en/class.reflectionclass.php) $structuredOutput) : bool
Indicate whether or not the given data type can be simplified to an array | +| public | simplifyToArray(mixed $structuredOutput, [\Consolidation\OutputFormatters\Options\FormatterOptions](#class-consolidationoutputformattersoptionsformatteroptions) $options) : array
Convert structured data into a generic array, usable by generic array-based formatters. Objects that implement this interface may be attached to the FormatterManager, and will be used on any data structure that needs to be simplified into an array. An array simplifier should take no action other than to return its input data if it cannot simplify the provided data into an array. | + +
+ +### Class: \Consolidation\OutputFormatters\Transformations\Wrap\CalculateWidths + +> Calculate column widths for table cells. Influenced by Drush and webmozart/console. + +| Visibility | Function | +|:-----------|:---------| +| public | __construct() : void | +| public | calculate(mixed $availableWidth, [\Consolidation\OutputFormatters\Transformations\Wrap\ColumnWidths](#class-consolidationoutputformatterstransformationswrapcolumnwidths) $dataWidths, [\Consolidation\OutputFormatters\Transformations\Wrap\ColumnWidths](#class-consolidationoutputformatterstransformationswrapcolumnwidths) $minimumWidths) : void
Given the total amount of available space, and the width of the columns to place, calculate the optimum column widths to use. | +| public | calculateLongestCell(mixed $rows) : void
Calculate the longest cell data from any row of each of the cells. | +| public | calculateLongestWord(mixed $rows) : void
Calculate the longest word and longest line in the provided data. | +| public | distributeLongColumns(mixed $availableWidth, [\Consolidation\OutputFormatters\Transformations\Wrap\ColumnWidths](#class-consolidationoutputformatterstransformationswrapcolumnwidths) $dataWidths, [\Consolidation\OutputFormatters\Transformations\Wrap\ColumnWidths](#class-consolidationoutputformatterstransformationswrapcolumnwidths) $minimumWidths) : void
Distribute the remainig space among the columns that were not included in the list of "short" columns. | +| public | getShortColumns(mixed $availableWidth, [\Consolidation\OutputFormatters\Transformations\Wrap\ColumnWidths](#class-consolidationoutputformatterstransformationswrapcolumnwidths) $dataWidths, [\Consolidation\OutputFormatters\Transformations\Wrap\ColumnWidths](#class-consolidationoutputformatterstransformationswrapcolumnwidths) $minimumWidths) : mixed
Return all of the columns whose longest line length is less than or equal to the average width. | +| protected | calculateColumnWidths(mixed $rows, \callable $fn) : void | +| protected static | longestWordLength(string $str) : int
Return the length of the longest word in the string. | + +
+ +### Class: \Consolidation\OutputFormatters\Transformations\Wrap\ColumnWidths + +> Calculate the width of data in table cells in preparation for word wrapping. + +| Visibility | Function | +|:-----------|:---------| +| public | __construct(array $widths=array()) : void | +| public | adjustMinimumWidths(mixed $availableWidth, mixed $dataCellWidths) : void
If the widths specified by this object do not fit within the provided avaiable width, then reduce them all proportionally. | +| public | averageWidth(mixed $availableWidth) : void
Calculate how much space is available on average for all columns. | +| public | combine([\Consolidation\OutputFormatters\Transformations\Wrap\ColumnWidths](#class-consolidationoutputformatterstransformationswrapcolumnwidths) $combineWith) : void
Combine this set of widths with another set, and return a new set that contains the entries from both. | +| public | count() : void
Return the number of columns. | +| public | distribute(mixed $availableWidth) : void
Return proportional weights | +| public | enforceMinimums(mixed $minimumWidths) : void
Ensure that every item in $widths that has a corresponding entry in $minimumWidths is as least as large as the minimum value held there. | +| public | findShortColumns(mixed $thresholdWidth) : mixed
Find all of the columns that are shorter than the specified threshold. | +| public | findUndersizedColumns(mixed $minimumWidths) : mixed
Find all of the columns that are shorter than the corresponding minimum widths. | +| public | isEmpty() : bool
Return true if there is no data in this object | +| public | keys() : void
Return the available keys (column identifiers) from the calculated data set. | +| public | lastColumn() : void | +| public | paddingSpace(mixed $paddingInEachCell, mixed $extraPaddingAtEndOfLine, mixed $extraPaddingAtBeginningOfLine) : void | +| public | removeColumns(mixed $columnKeys) : void
Remove all of the specified columns from this data structure. | +| public | selectColumns(mixed $columnKeys) : void
Select all columns that exist in the provided list of keys. | +| public | setWidth(mixed $key, mixed $width) : void
Set the length of the specified column. | +| public static | sumWidth(mixed $widths) : void
Return the sum of the lengths of the provided widths. | +| public | totalWidth() : void
Return the sum of the lengths of the provided widths. | +| public | width(mixed $key) : void
Return the length of the specified column. | +| public | widths() : void
Return all of the lengths | +| protected | findColumnsUnderThreshold(array $thresholdWidths) : mixed | + +
+ ### Interface: \Consolidation\OutputFormatters\Validate\ValidationInterface > Formatters may implement ValidationInterface in order to indicate whether a particular data structure is supported. Any formatter that does not implement ValidationInterface is assumed to only operate on arrays, or data types that implement SimplifyToArrayInterface. @@ -645,7 +767,8 @@ | public | isValidDataType([\ReflectionClass](http://php.net/manual/en/class.reflectionclass.php) $dataType) : bool
Return true if the specified format is valid for use with this formatter. | | public | validate(mixed $structuredData) : mixed
Throw an IncompatibleDataException if the provided data cannot be processed by this formatter. Return the source data if it is valid. The data may be encapsulated or converted if necessary. | -
+
+ ### Interface: \Consolidation\OutputFormatters\Validate\ValidDataTypesInterface > Formatters may implement ValidDataTypesInterface in order to indicate exactly which formats they support. The validDataTypes method can be called to retrieve a list of data types useful in providing hints in exception messages about which data types can be used with the formatter. Note that it is OPTIONAL for formatters to implement this interface. If a formatter implements only ValidationInterface, then clients that request the formatter via FormatterManager::write() will still get a list (via an InvalidFormatException) of all of the formats that are usable with the provided data type. Implementing ValidDataTypesInterface is benefitial to clients who instantiate a formatter directly (via `new`). Formatters that implement ValidDataTypesInterface may wish to use ValidDataTypesTrait. diff --git a/lib/composer/vendor/consolidation/output-formatters/src/FormatterManager.php b/lib/composer/vendor/consolidation/output-formatters/src/FormatterManager.php index 7d89d3f8b..0f858ced7 100644 --- a/lib/composer/vendor/consolidation/output-formatters/src/FormatterManager.php +++ b/lib/composer/vendor/consolidation/output-formatters/src/FormatterManager.php @@ -112,14 +112,14 @@ public function automaticOptions(FormatterOptions $options, $dataType) if (count($validFormats) > 1) { // Make an input option for --format $description = 'Format the result data. Available formats: ' . implode(',', $validFormats); - $automaticOptions[FormatterOptions::FORMAT] = new InputOption(FormatterOptions::FORMAT, '', InputOption::VALUE_OPTIONAL, $description, $defaultFormat); + $automaticOptions[FormatterOptions::FORMAT] = new InputOption(FormatterOptions::FORMAT, '', InputOption::VALUE_REQUIRED, $description, $defaultFormat); } if ($availableFields) { $defaultFields = $options->get(FormatterOptions::DEFAULT_FIELDS, [], ''); $description = 'Available fields: ' . implode(', ', $this->availableFieldsList($availableFields)); - $automaticOptions[FormatterOptions::FIELDS] = new InputOption(FormatterOptions::FIELDS, '', InputOption::VALUE_OPTIONAL, $description, $defaultFields); - $automaticOptions[FormatterOptions::FIELD] = new InputOption(FormatterOptions::FIELD, '', InputOption::VALUE_OPTIONAL, "Select just one field, and force format to 'string'.", ''); + $automaticOptions[FormatterOptions::FIELDS] = new InputOption(FormatterOptions::FIELDS, '', InputOption::VALUE_REQUIRED, $description, $defaultFields); + $automaticOptions[FormatterOptions::FIELD] = new InputOption(FormatterOptions::FIELD, '', InputOption::VALUE_REQUIRED, "Select just one field, and force format to 'string'.", ''); } return $automaticOptions; diff --git a/lib/composer/vendor/consolidation/output-formatters/src/Formatters/TableFormatter.php b/lib/composer/vendor/consolidation/output-formatters/src/Formatters/TableFormatter.php index f7787c284..a467576b5 100644 --- a/lib/composer/vendor/consolidation/output-formatters/src/Formatters/TableFormatter.php +++ b/lib/composer/vendor/consolidation/output-formatters/src/Formatters/TableFormatter.php @@ -80,11 +80,26 @@ public function write(OutputInterface $output, $tableTransformer, FormatterOptio $table->setStyle($options->get(FormatterOptions::TABLE_STYLE, $defaults)); $isList = $tableTransformer->isList(); $includeHeaders = $options->get(FormatterOptions::INCLUDE_FIELD_LABELS, $defaults); + $listDelimiter = $options->get(FormatterOptions::LIST_DELIMITER, $defaults); + + $headers = $tableTransformer->getHeaders(); + $data = $tableTransformer->getTableData($includeHeaders && $isList); + + if ($listDelimiter) { + if (!empty($headers)) { + array_splice($headers, 1, 0, ':'); + } + $data = array_map(function ($item) { + array_splice($item, 1, 0, ':'); + return $item; + }, $data); + } + if ($includeHeaders && !$isList) { - $headers = $tableTransformer->getHeaders(); $table->setHeaders($headers); } - $data = $tableTransformer->getTableData($includeHeaders && $isList); + + // todo: $output->getFormatter(); $data = $this->wrap($headers, $data, $table->getStyle(), $options); $table->setRows($data); $table->render(); diff --git a/lib/composer/vendor/consolidation/output-formatters/src/Formatters/XmlFormatter.php b/lib/composer/vendor/consolidation/output-formatters/src/Formatters/XmlFormatter.php index 05533f221..85b4e37e9 100644 --- a/lib/composer/vendor/consolidation/output-formatters/src/Formatters/XmlFormatter.php +++ b/lib/composer/vendor/consolidation/output-formatters/src/Formatters/XmlFormatter.php @@ -51,6 +51,9 @@ public function validate($structuredData) if ($structuredData instanceof DomDataInterface) { return $structuredData->getDomData(); } + if ($structuredData instanceof \ArrayObject) { + return $structuredData->getArrayCopy(); + } if (!is_array($structuredData)) { throw new IncompatibleDataException( $this, diff --git a/lib/composer/vendor/consolidation/output-formatters/src/Options/FormatterOptions.php b/lib/composer/vendor/consolidation/output-formatters/src/Options/FormatterOptions.php index 1f71cb023..292a119a2 100644 --- a/lib/composer/vendor/consolidation/output-formatters/src/Options/FormatterOptions.php +++ b/lib/composer/vendor/consolidation/output-formatters/src/Options/FormatterOptions.php @@ -46,6 +46,7 @@ class FormatterOptions const DEFAULT_FIELDS = 'default-fields'; const DEFAULT_STRING_FIELD = 'default-string-field'; const DELIMITER = 'delimiter'; + const LIST_DELIMITER = 'list-delimiter'; const TERMINAL_WIDTH = 'width'; /** @@ -83,6 +84,18 @@ public function setTableStyle($style) return $this->setConfigurationValue(self::TABLE_STYLE, $style); } + public function setDelimiter($delimiter) + { + return $this->setConfigurationValue(self::DELIMITER, $delimiter); + } + + public function setListDelimiter($listDelimiter) + { + return $this->setConfigurationValue(self::LIST_DELIMITER, $listDelimiter); + } + + + public function setIncludeFieldLables($includFieldLables) { return $this->setConfigurationValue(self::INCLUDE_FIELD_LABELS, $includFieldLables); diff --git a/lib/composer/vendor/consolidation/output-formatters/src/StructuredData/AbstractStructuredList.php b/lib/composer/vendor/consolidation/output-formatters/src/StructuredData/AbstractStructuredList.php index fb1bc5375..ee09a5a4a 100644 --- a/lib/composer/vendor/consolidation/output-formatters/src/StructuredData/AbstractStructuredList.php +++ b/lib/composer/vendor/consolidation/output-formatters/src/StructuredData/AbstractStructuredList.php @@ -14,10 +14,9 @@ * * It is presumed that every row contains the same keys. */ -abstract class AbstractStructuredList extends \ArrayObject implements RestructureInterface, ListDataInterface, RenderCellCollectionInterface +abstract class AbstractStructuredList extends ListDataFromKeys implements RestructureInterface, RenderCellCollectionInterface { use RenderCellCollectionTrait; - protected $data; public function __construct($data) { @@ -26,8 +25,6 @@ public function __construct($data) abstract public function restructure(FormatterOptions $options); - abstract public function getListData(FormatterOptions $options); - protected function createTableTransformation($data, $options) { $defaults = $this->defaultOptions(); diff --git a/lib/composer/vendor/consolidation/output-formatters/src/StructuredData/HelpDocument.php b/lib/composer/vendor/consolidation/output-formatters/src/StructuredData/HelpDocument.php new file mode 100644 index 000000000..88c59f9a0 --- /dev/null +++ b/lib/composer/vendor/consolidation/output-formatters/src/StructuredData/HelpDocument.php @@ -0,0 +1,16 @@ +getArrayCopy()); + } +} diff --git a/lib/composer/vendor/consolidation/output-formatters/src/StructuredData/Xml/XmlSchema.php b/lib/composer/vendor/consolidation/output-formatters/src/StructuredData/Xml/XmlSchema.php index 04aecf902..9e4a15b10 100644 --- a/lib/composer/vendor/consolidation/output-formatters/src/StructuredData/Xml/XmlSchema.php +++ b/lib/composer/vendor/consolidation/output-formatters/src/StructuredData/Xml/XmlSchema.php @@ -44,7 +44,7 @@ protected function addXmlChildren(\DOMDocument $dom, $xmlParent, $elementName, $ protected function addXmlDataOrAttribute(\DOMDocument $dom, $xmlParent, $elementName, $key, $value) { $childElementName = $this->getDefaultElementName($elementName); - $elementName = is_numeric($key) ? $childElementName : $key; + $elementName = $this->determineElementName($key, $childElementName, $value); if (($elementName != $childElementName) && $this->isAttribute($elementName, $key, $value)) { $xmlParent->setAttribute($key, $value); return; @@ -52,6 +52,26 @@ protected function addXmlDataOrAttribute(\DOMDocument $dom, $xmlParent, $element $this->addXmlData($dom, $xmlParent, $elementName, $value); } + protected function determineElementName($key, $childElementName, $value) + { + if (is_numeric($key)) { + return $childElementName; + } + if (is_object($value)) { + $value = (array)$value; + } + if (!is_array($value)) { + return $key; + } + if (array_key_exists('id', $value) && ($value['id'] == $key)) { + return $childElementName; + } + if (array_key_exists('name', $value) && ($value['name'] == $key)) { + return $childElementName; + } + return $key; + } + protected function getTopLevelElementName($structuredData) { return 'document'; diff --git a/lib/composer/vendor/consolidation/output-formatters/src/Transformations/DomToArraySimplifier.php b/lib/composer/vendor/consolidation/output-formatters/src/Transformations/DomToArraySimplifier.php index a9e28cfb9..e7a6c8794 100644 --- a/lib/composer/vendor/consolidation/output-formatters/src/Transformations/DomToArraySimplifier.php +++ b/lib/composer/vendor/consolidation/output-formatters/src/Transformations/DomToArraySimplifier.php @@ -85,12 +85,13 @@ protected function getNodeChildren($element) return []; } $uniformChildrenName = $this->hasUniformChildren($element); - if ("{$uniformChildrenName}s" == $element->nodeName) { + // Check for plurals. + if (in_array($element->nodeName, ["{$uniformChildrenName}s", "{$uniformChildrenName}es"])) { $result = $this->getUniformChildren($element->nodeName, $element); } else { $result = $this->getUniqueChildren($element->nodeName, $element); } - return $result; + return array_filter($result); } /** @@ -153,7 +154,12 @@ protected function getUniformChildren($parentKey, $element) if ($this->valueCanBeSimplified($value)) { $value = array_shift($value); } - $simplifiedChildren[$parentKey][] = $value; + $id = $this->getIdOfValue($value); + if ($id) { + $simplifiedChildren[$parentKey][$id] = $value; + } else { + $simplifiedChildren[$parentKey][] = $value; + } } return $simplifiedChildren; } @@ -178,6 +184,25 @@ protected function valueCanBeSimplified($value) return is_string($data); } + /** + * If the object has an 'id' or 'name' element, then use that + * as the array key when storing this value in its parent. + * @param mixed $value + * @return string + */ + protected function getIdOfValue($value) + { + if (!is_array($value)) { + return false; + } + if (array_key_exists('id', $value)) { + return trim($value['id'], '-'); + } + if (array_key_exists('name', $value)) { + return trim($value['name'], '-'); + } + } + /** * Convert the children of the provided DOM element into an array. * Here, 'unique' means that all of the element names of the children are diff --git a/lib/composer/vendor/consolidation/output-formatters/src/Transformations/PropertyParser.php b/lib/composer/vendor/consolidation/output-formatters/src/Transformations/PropertyParser.php index 18b982ea4..ec1616afb 100644 --- a/lib/composer/vendor/consolidation/output-formatters/src/Transformations/PropertyParser.php +++ b/lib/composer/vendor/consolidation/output-formatters/src/Transformations/PropertyParser.php @@ -29,7 +29,9 @@ public static function parse($data) $lines = explode("\n", $data); foreach ($lines as $line) { list($key, $value) = explode(':', trim($line), 2) + ['', '']; - $result[$key] = trim($value); + if (!empty($key) && !empty($value)) { + $result[$key] = trim($value); + } } return $result; } diff --git a/lib/composer/vendor/consolidation/output-formatters/src/Transformations/ReorderFields.php b/lib/composer/vendor/consolidation/output-formatters/src/Transformations/ReorderFields.php index 9e764dc3c..ca1ee7c31 100644 --- a/lib/composer/vendor/consolidation/output-formatters/src/Transformations/ReorderFields.php +++ b/lib/composer/vendor/consolidation/output-formatters/src/Transformations/ReorderFields.php @@ -42,6 +42,9 @@ protected function reorderFieldLabels($fields, $fieldLabels, $data) { $result = []; $firstRow = reset($data); + if (!$firstRow) { + $firstRow = $fieldLabels; + } foreach ($fields as $field) { if (array_key_exists($field, $firstRow)) { if (array_key_exists($field, $fieldLabels)) { diff --git a/lib/composer/vendor/consolidation/output-formatters/src/Transformations/WordWrapper.php b/lib/composer/vendor/consolidation/output-formatters/src/Transformations/WordWrapper.php index 18519d077..36f9b88d0 100644 --- a/lib/composer/vendor/consolidation/output-formatters/src/Transformations/WordWrapper.php +++ b/lib/composer/vendor/consolidation/output-formatters/src/Transformations/WordWrapper.php @@ -1,12 +1,14 @@ width = $width; + $this->minimumWidths = new ColumnWidths(); } /** @@ -40,7 +43,15 @@ public function setPaddingFromStyle(TableStyle $style) */ public function setMinimumWidths($minimumWidths) { - $this->minimumWidths = $minimumWidths; + $this->minimumWidths = new ColumnWidths($minimumWidths); + } + + /** + * Set the minimum width of just one column + */ + public function minimumWidth($colkey, $width) + { + $this->minimumWidths->setWidth($colkey, $width); } /** @@ -50,19 +61,18 @@ public function setMinimumWidths($minimumWidths) */ public function wrap($rows, $widths = []) { - // If the width was not set, then disable wordwrap. - if (!$this->width) { + $auto_widths = $this->calculateWidths($rows, $widths); + + // If no widths were provided, then disable wrapping + if ($auto_widths->isEmpty()) { return $rows; } - // Calculate the column widths to use based on the content. - $auto_widths = $this->columnAutowidth($rows, $widths); - // Do wordwrap on all cells. $newrows = array(); foreach ($rows as $rowkey => $row) { foreach ($row as $colkey => $cell) { - $newrows[$rowkey][$colkey] = $this->wrapCell($cell, $auto_widths[$colkey]); + $newrows[$rowkey][$colkey] = $this->wrapCell($cell, $auto_widths->width($colkey)); } } @@ -70,158 +80,43 @@ public function wrap($rows, $widths = []) } /** - * Wrap one cell. Guard against modifying non-strings and - * then call through to wordwrap(). - * - * @param mixed $cell - * @param string $cellWidth - * @return mixed - */ - protected function wrapCell($cell, $cellWidth) - { - if (!is_string($cell)) { - return $cell; - } - return wordwrap($cell, $cellWidth, "\n", true); - } - - /** - * Determine the best fit for column widths. Ported from Drush. - * - * @param array $rows The rows to use for calculations. - * @param array $widths Manually specified widths of each column - * (in characters) - these will be left as is. + * Determine what widths we'll use for wrapping. */ - protected function columnAutowidth($rows, $widths) + protected function calculateWidths($rows, $widths = []) { - $auto_widths = $widths; - - // First we determine the distribution of row lengths in each column. - // This is an array of descending character length keys (i.e. starting at - // the rightmost character column), with the value indicating the number - // of rows where that character column is present. - $col_dist = []; - // We will also calculate the longest word in each column - $max_word_lens = []; - foreach ($rows as $rowkey => $row) { - foreach ($row as $col_id => $cell) { - $longest_word_len = static::longestWordLength($cell); - if ((!isset($max_word_lens[$col_id]) || ($max_word_lens[$col_id] < $longest_word_len))) { - $max_word_lens[$col_id] = $longest_word_len; - } - if (empty($widths[$col_id])) { - $length = strlen($cell); - if ($length == 0) { - $col_dist[$col_id][0] = 0; - } - while ($length > 0) { - if (!isset($col_dist[$col_id][$length])) { - $col_dist[$col_id][$length] = 0; - } - $col_dist[$col_id][$length]++; - $length--; - } - } - } + // Widths must be provided in some form or another, or we won't wrap. + if (empty($widths) && !$this->width) { + return new ColumnWidths(); } - foreach ($col_dist as $col_id => $count) { - // Sort the distribution in decending key order. - krsort($col_dist[$col_id]); - // Initially we set all columns to their "ideal" longest width - // - i.e. the width of their longest column. - $auto_widths[$col_id] = max(array_keys($col_dist[$col_id])); - } - - // We determine what width we have available to use, and what width the - // above "ideal" columns take up. - $available_width = $this->width - ($this->extraPaddingAtBeginningOfLine + $this->extraPaddingAtEndOfLine + (count($auto_widths) * $this->paddingInEachCell)); - $auto_width_current = array_sum($auto_widths); - - // If we cannot fit into the minimum width anyway, then just return - // the max word length of each column as the 'ideal' - $minimumIdealLength = array_sum($this->minimumWidths); - if ($minimumIdealLength && ($available_width < $minimumIdealLength)) { - return $max_word_lens; - } + // Technically, `$widths`, if provided here, should be used + // as the exact widths to wrap to. For now we'll just treat + // these as minimum widths + $minimumWidths = $this->minimumWidths->combine(new ColumnWidths($widths)); - // If we need to reduce a column so that we can fit the space we use this - // loop to figure out which column will cause the "least wrapping", - // (relative to the other columns) and reduce the width of that column. - while ($auto_width_current > $available_width) { - list($column, $width) = $this->selectColumnToReduce($col_dist, $auto_widths, $max_word_lens); + $calculator = new CalculateWidths(); + $dataCellWidths = $calculator->calculateLongestCell($rows); - if (!$column || $width <= 1) { - // If we have reached a width of 1 then give up, so wordwrap can still progress. - break; - } - // Reduce the width of the selected column. - $auto_widths[$column]--; - // Reduce our overall table width counter. - $auto_width_current--; - // Remove the corresponding data from the disctribution, so next time - // around we use the data for the row to the left. - unset($col_dist[$column][$width]); - } - return $auto_widths; - } + $availableWidth = $this->width - $dataCellWidths->paddingSpace($this->paddingInEachCell, $this->extraPaddingAtEndOfLine, $this->extraPaddingAtBeginningOfLine); - protected function selectColumnToReduce($col_dist, $auto_widths, $max_word_lens) - { - $column = false; - $count = 0; - $width = 0; - foreach ($col_dist as $col_id => $counts) { - // Of the columns whose length is still > than the the lenght - // of their maximum word length - if ($auto_widths[$col_id] > $max_word_lens[$col_id]) { - if ($this->shouldSelectThisColumn($count, $counts, $width)) { - $column = $col_id; - $count = current($counts); - $width = key($counts); - } - } - } - if ($column !== false) { - return [$column, $width]; - } - foreach ($col_dist as $col_id => $counts) { - if (empty($this->minimumWidths) || ($auto_widths[$col_id] > $this->minimumWidths[$col_id])) { - if ($this->shouldSelectThisColumn($count, $counts, $width)) { - $column = $col_id; - $count = current($counts); - $width = key($counts); - } - } - } - return [$column, $width]; - } + $this->minimumWidths->adjustMinimumWidths($availableWidth, $dataCellWidths); - protected function shouldSelectThisColumn($count, $counts, $width) - { - return - // If we are just starting out, select the first column. - ($count == 0) || - // OR: if this column would cause less wrapping than the currently - // selected column, then select it. - (current($counts) < $count) || - // OR: if this column would cause the same amount of wrapping, but is - // longer, then we choose to wrap the longer column (proportionally - // less wrapping, and helps avoid triple line wraps). - (current($counts) == $count && key($counts) > $width); + return $calculator->calculate($availableWidth, $dataCellWidths, $minimumWidths); } /** - * Return the length of the longest word in the string. - * @param string $str - * @return int + * Wrap one cell. Guard against modifying non-strings and + * then call through to wordwrap(). + * + * @param mixed $cell + * @param string $cellWidth + * @return mixed */ - protected static function longestWordLength($str) + protected function wrapCell($cell, $cellWidth) { - $words = preg_split('/[ -]/', $str); - $lengths = array_map(function ($s) { - return strlen($s); - }, $words); - return max($lengths); + if (!is_string($cell)) { + return $cell; + } + return wordwrap($cell, $cellWidth, "\n", true); } } diff --git a/lib/composer/vendor/consolidation/output-formatters/src/Transformations/Wrap/CalculateWidths.php b/lib/composer/vendor/consolidation/output-formatters/src/Transformations/Wrap/CalculateWidths.php new file mode 100644 index 000000000..04af09208 --- /dev/null +++ b/lib/composer/vendor/consolidation/output-formatters/src/Transformations/Wrap/CalculateWidths.php @@ -0,0 +1,141 @@ +totalWidth() <= $availableWidth) { + return $dataWidths->enforceMinimums($minimumWidths); + } + + // Get the short columns first. If there are none, then distribute all + // of the available width among the remaining columns. + $shortColWidths = $this->getShortColumns($availableWidth, $dataWidths, $minimumWidths); + if ($shortColWidths->isEmpty()) { + return $this->distributeLongColumns($availableWidth, $dataWidths, $minimumWidths); + } + + // If some short columns were removed, then account for the length + // of the removed columns and make a recursive call (since the average + // width may be higher now, if the removed columns were shorter in + // length than the previous average). + $availableWidth -= $shortColWidths->totalWidth(); + $remainingWidths = $dataWidths->removeColumns($shortColWidths->keys()); + $remainingColWidths = $this->calculate($availableWidth, $remainingWidths, $minimumWidths); + + return $shortColWidths->combine($remainingColWidths); + } + + /** + * Calculate the longest cell data from any row of each of the cells. + */ + public function calculateLongestCell($rows) + { + return $this->calculateColumnWidths( + $rows, + function ($cell) { + return strlen($cell); + } + ); + } + + /** + * Calculate the longest word and longest line in the provided data. + */ + public function calculateLongestWord($rows) + { + return $this->calculateColumnWidths( + $rows, + function ($cell) { + return static::longestWordLength($cell); + } + ); + } + + protected function calculateColumnWidths($rows, callable $fn) + { + $widths = []; + + // Examine each row and find the longest line length and longest + // word in each column. + foreach ($rows as $rowkey => $row) { + foreach ($row as $colkey => $cell) { + $value = $fn($cell); + if ((!isset($widths[$colkey]) || ($widths[$colkey] < $value))) { + $widths[$colkey] = $value; + } + } + } + + return new ColumnWidths($widths); + } + + /** + * Return all of the columns whose longest line length is less than or + * equal to the average width. + */ + public function getShortColumns($availableWidth, ColumnWidths $dataWidths, ColumnWidths $minimumWidths) + { + $averageWidth = $dataWidths->averageWidth($availableWidth); + $shortColWidths = $dataWidths->findShortColumns($averageWidth); + return $shortColWidths->enforceMinimums($minimumWidths); + } + + /** + * Distribute the remainig space among the columns that were not + * included in the list of "short" columns. + */ + public function distributeLongColumns($availableWidth, ColumnWidths $dataWidths, ColumnWidths $minimumWidths) + { + // First distribute the remainder without regard to the minimum widths. + $result = $dataWidths->distribute($availableWidth); + + // Find columns that are shorter than their minimum width. + $undersized = $result->findUndersizedColumns($minimumWidths); + + // Nothing too small? Great, we're done! + if ($undersized->isEmpty()) { + return $result; + } + + // Take out the columns that are too small and redistribute the rest. + $availableWidth -= $undersized->totalWidth(); + $remaining = $dataWidths->removeColumns($undersized->keys()); + $distributeRemaining = $this->distributeLongColumns($availableWidth, $remaining, $minimumWidths); + + return $undersized->combine($distributeRemaining); + } + + /** + * Return the length of the longest word in the string. + * @param string $str + * @return int + */ + protected static function longestWordLength($str) + { + $words = preg_split('#[ /-]#', $str); + $lengths = array_map(function ($s) { + return strlen($s); + }, $words); + return max($lengths); + } +} diff --git a/lib/composer/vendor/consolidation/output-formatters/src/Transformations/Wrap/ColumnWidths.php b/lib/composer/vendor/consolidation/output-formatters/src/Transformations/Wrap/ColumnWidths.php new file mode 100644 index 000000000..6995b6afb --- /dev/null +++ b/lib/composer/vendor/consolidation/output-formatters/src/Transformations/Wrap/ColumnWidths.php @@ -0,0 +1,264 @@ +widths = $widths; + } + + public function paddingSpace( + $paddingInEachCell, + $extraPaddingAtEndOfLine = 0, + $extraPaddingAtBeginningOfLine = 0 + ) { + return ($extraPaddingAtBeginningOfLine + $extraPaddingAtEndOfLine + (count($this->widths) * $paddingInEachCell)); + } + + /** + * Find all of the columns that are shorter than the specified threshold. + */ + public function findShortColumns($thresholdWidth) + { + $thresholdWidths = array_fill_keys(array_keys($this->widths), $thresholdWidth); + + return $this->findColumnsUnderThreshold($thresholdWidths); + } + + /** + * Find all of the columns that are shorter than the corresponding minimum widths. + */ + public function findUndersizedColumns($minimumWidths) + { + return $this->findColumnsUnderThreshold($minimumWidths->widths()); + } + + protected function findColumnsUnderThreshold(array $thresholdWidths) + { + $shortColWidths = []; + foreach ($this->widths as $key => $maxLength) { + if (isset($thresholdWidths[$key]) && ($maxLength <= $thresholdWidths[$key])) { + $shortColWidths[$key] = $maxLength; + } + } + + return new ColumnWidths($shortColWidths); + } + + /** + * If the widths specified by this object do not fit within the + * provided avaiable width, then reduce them all proportionally. + */ + public function adjustMinimumWidths($availableWidth, $dataCellWidths) + { + $result = $this->selectColumns($dataCellWidths->keys()); + if ($result->isEmpty()) { + return $result; + } + $numberOfColumns = $dataCellWidths->count(); + + // How many unspecified columns are there? + $unspecifiedColumns = $numberOfColumns - $result->count(); + $averageWidth = $this->averageWidth($availableWidth); + + // Reserve some space for the columns that have no minimum. + // Make sure they collectively get at least half of the average + // width for each column. Or should it be a quarter? + $reservedSpacePerColumn = ($averageWidth / 2); + $reservedSpace = $reservedSpacePerColumn * $unspecifiedColumns; + + // Calculate how much of the available space is remaining for use by + // the minimum column widths after the reserved space is accounted for. + $remainingAvailable = $availableWidth - $reservedSpace; + + // Don't do anything if our widths fit inside the available widths. + if ($result->totalWidth() <= $remainingAvailable) { + return $result; + } + + // Shrink the minimum widths if the table is too compressed. + return $result->distribute($remainingAvailable); + } + + /** + * Return proportional weights + */ + public function distribute($availableWidth) + { + $result = []; + $totalWidth = $this->totalWidth(); + $lastColumn = $this->lastColumn(); + $widths = $this->widths(); + + // Take off the last column, and calculate proportional weights + // for the first N-1 columns. + array_pop($widths); + foreach ($widths as $key => $width) { + $result[$key] = round(($width / $totalWidth) * $availableWidth); + } + + // Give the last column the rest of the available width + $usedWidth = $this->sumWidth($result); + $result[$lastColumn] = $availableWidth - $usedWidth; + + return new ColumnWidths($result); + } + + public function lastColumn() + { + $keys = $this->keys(); + return array_pop($keys); + } + + /** + * Return the number of columns. + */ + public function count() + { + return count($this->widths); + } + + /** + * Calculate how much space is available on average for all columns. + */ + public function averageWidth($availableWidth) + { + if ($this->isEmpty()) { + debug_print_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS); + } + return $availableWidth / $this->count(); + } + + /** + * Return the available keys (column identifiers) from the calculated + * data set. + */ + public function keys() + { + return array_keys($this->widths); + } + + /** + * Set the length of the specified column. + */ + public function setWidth($key, $width) + { + $this->widths[$key] = $width; + } + + /** + * Return the length of the specified column. + */ + public function width($key) + { + return isset($this->widths[$key]) ? $this->widths[$key] : 0; + } + + /** + * Return all of the lengths + */ + public function widths() + { + return $this->widths; + } + + /** + * Return true if there is no data in this object + */ + public function isEmpty() + { + return empty($this->widths); + } + + /** + * Return the sum of the lengths of the provided widths. + */ + public function totalWidth() + { + return static::sumWidth($this->widths()); + } + + /** + * Return the sum of the lengths of the provided widths. + */ + public static function sumWidth($widths) + { + return array_reduce( + $widths, + function ($carry, $item) { + return $carry + $item; + } + ); + } + + /** + * Ensure that every item in $widths that has a corresponding entry + * in $minimumWidths is as least as large as the minimum value held there. + */ + public function enforceMinimums($minimumWidths) + { + $result = []; + if ($minimumWidths instanceof ColumnWidths) { + $minimumWidths = $minimumWidths->widths(); + } + $minimumWidths += $this->widths; + + foreach ($this->widths as $key => $value) { + $result[$key] = max($value, $minimumWidths[$key]); + } + + return new ColumnWidths($result); + } + + /** + * Remove all of the specified columns from this data structure. + */ + public function removeColumns($columnKeys) + { + $widths = $this->widths(); + + foreach ($columnKeys as $key) { + unset($widths[$key]); + } + + return new ColumnWidths($widths); + } + + /** + * Select all columns that exist in the provided list of keys. + */ + public function selectColumns($columnKeys) + { + $widths = []; + + foreach ($columnKeys as $key) { + if (isset($this->widths[$key])) { + $widths[$key] = $this->width($key); + } + } + + return new ColumnWidths($widths); + } + + /** + * Combine this set of widths with another set, and return + * a new set that contains the entries from both. + */ + public function combine(ColumnWidths $combineWith) + { + // Danger: array_merge renumbers numeric keys; that must not happen here. + $combined = $combineWith->widths(); + foreach ($this->widths() as $key => $value) { + $combined[$key] = $value; + } + return new ColumnWidths($combined); + } +} diff --git a/lib/composer/vendor/consolidation/output-formatters/test.php b/lib/composer/vendor/consolidation/output-formatters/test.php new file mode 100644 index 000000000..0e14ada8d --- /dev/null +++ b/lib/composer/vendor/consolidation/output-formatters/test.php @@ -0,0 +1,20 @@ + ['Name', ':', 'Rex', ], + 'species' => ['Species', ':', 'dog', ], + 'food' => ['Food', ':', 'kibble', ], + 'legs' => ['Legs', ':', '4', ], + 'description' => ['Description', ':', 'Rex is a very good dog, Brett. He likes kibble, and has four legs.', ], +]; + +$result = $wrapper->wrap($data); + +var_export($result); + diff --git a/lib/composer/vendor/consolidation/output-formatters/tests/testAPIDocs.php b/lib/composer/vendor/consolidation/output-formatters/tests/testAPIDocs.php index c324259be..ecb5eb043 100644 --- a/lib/composer/vendor/consolidation/output-formatters/tests/testAPIDocs.php +++ b/lib/composer/vendor/consolidation/output-formatters/tests/testAPIDocs.php @@ -18,7 +18,7 @@ function testAPIDocs() } $testDocs = tempnam(sys_get_temp_dir(), 'TestAPIDocs.md'); - $currentDocs = getcwd() . '/docs/Api.md'; + $currentDocs = getcwd() . '/docs/api.md'; passthru("vendor/bin/phpdoc-md generate src > $testDocs"); $testDocsContent = file_get_contents($testDocs); @@ -27,6 +27,6 @@ function testAPIDocs() $testDocsContent = str_replace (array("\r\n", "\r"), "\n", $testDocsContent); $currentDocsContent = str_replace (array("\r\n", "\r"), "\n", $currentDocsContent); - $this->assertEquals($testDocsContent, $currentDocsContent, "API docuementation out of date. Run 'composer Api' to update."); + $this->assertEquals($testDocsContent, $currentDocsContent, "API docuementation out of date. Run 'composer api' to update."); } } diff --git a/lib/composer/vendor/consolidation/output-formatters/tests/testFormatters.php b/lib/composer/vendor/consolidation/output-formatters/tests/testFormatters.php index d9e8710f4..554633c97 100644 --- a/lib/composer/vendor/consolidation/output-formatters/tests/testFormatters.php +++ b/lib/composer/vendor/consolidation/output-formatters/tests/testFormatters.php @@ -7,6 +7,7 @@ use Consolidation\OutputFormatters\StructuredData\AssociativeList; use Consolidation\OutputFormatters\StructuredData\RowsOfFields; use Consolidation\OutputFormatters\StructuredData\PropertyList; +use Consolidation\OutputFormatters\StructuredData\ListDataFromKeys; use Symfony\Component\Console\Output\BufferedOutput; use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Console\Input\InputInterface; @@ -47,8 +48,31 @@ function testSimpleYaml() two: b three: c EOT; + $this->assertFormattedOutputMatches($expected, 'yaml', $data); + + $expected = <<assertFormattedOutputMatches($expected, 'list', $data); + + $data = new ListDataFromKeys($data); + $expected = <<assertFormattedOutputMatches($expected, 'yaml', $data); + + $expected = <<assertFormattedOutputMatches($expected, 'list', $data); } function testNestedYaml() @@ -527,7 +551,6 @@ function testTableWithMissingCell() function testTableWithWordWrapping() { $options = new FormatterOptions(); - $options->setWidth(42); $data = [ [ @@ -538,19 +561,191 @@ function testTableWithWordWrapping() $data = new RowsOfFields($data); $expected = <<setWidth(42); + $this->assertFormattedOutputMatches($expected, 'table', $data, $options); + + $expected = <<setWidth(78); + $this->assertFormattedOutputMatches($expected, 'table', $data, $options); + } + + function testWrappingLotsOfColumns() + { + $options = new FormatterOptions(); + + $data = [ + [ + 'id' => '4d87b545-b4c3-4ece-9908-20c5c5e67e81', + 'name' => '123456781234567812345678123456781234567812345678', + 'service_level' => 'business', + 'framework' => 'wordpress-network', + 'owner' => '8558a08d-8059-45f6-9c4b-908299a025ee', + 'created' => '2017-05-24 19:28:45', + 'memberships' => 'b3a42ba5-755d-42ca-9109-21bde32809d0: Team,9bfaaf50-ece3-4460-acb8-dc1b8dd536e8: pantheon-engineering-canary-sites', + 'frozen' => 'false', + ], + [ + 'id' => '3d87b545-b4c3-4ece-9908-20c5c5e67e80', + 'name' => 'build-tools-136', + 'service_level' => 'free', + 'framework' => 'drupal8', + 'owner' => '7558a08d-8059-45f6-9c4b-908299a025ef', + 'created' => '2017-05-24 19:28:45', + 'memberships' => '5ae1fa30-8cc4-4894-8ca9-d50628dcba17: ci-for-drupal-8-composer', + 'frozen' => 'false', + ] + ]; + $data = new RowsOfFields($data); + + $expected = <<setWidth(125); + $this->assertFormattedOutputMatches($expected, 'table', $data, $options); + } + + function testTableWithWordWrapping2() + { + $options = new FormatterOptions(); + + $data = [ + [ + 'id' => 42, + 'vid' => 321, + 'description' => 'Life, the Universe and Everything.', + ], + [ + 'id' => 13, + 'vid' => 789, + 'description' => 'Why is six afraid of seven?', + ], + ]; + $data = new RowsOfFields($data); + $expected = <<setWidth(42); + $this->assertFormattedOutputMatches($expected, 'table', $data, $options); + } + + function testTableWithWordWrapping3() + { + $options = new FormatterOptions(); + $data = [ + 'name' => 'Rex', + 'species' => 'dog', + 'food' => 'kibble', + 'legs' => '4', + 'description' => 'Rex is a very good dog, Brett. He likes kibble, and has four legs.', + ]; + $data = new PropertyList($data); + + $expected = <<setWidth(42); + $this->assertFormattedOutputMatches($expected, 'table', $data, $options); + } + + function testTableWithWordWrapping4() + { + $options = new FormatterOptions(); + + $data = [ + 'name' => ['label' => 'Name', 'sep' => ':', 'value' => 'Rex', ], + 'species' => ['label' => 'Species', 'sep' => ':', 'value' => 'dog', ], + 'food' => ['label' => 'Food', 'sep' => ':', 'value' => 'kibble', ], + 'legs' => ['label' => 'Legs', 'sep' => ':', 'value' => '4', ], + 'description' => ['label' => 'Description', 'sep' => ':', 'value' => 'Rex is a very good dog, Brett. He likes kibble, and has four legs.', ], + ]; + $data = new RowsOfFields($data); + $expected = <<setWidth(78); + $this->assertFormattedOutputMatches($expected, 'table', $data, $options); + } + + function testTableWithWordWrapping5() + { + $options = new FormatterOptions(); + $data = [ + 'name' => ['Name', ':', 'Rex', ], + 'species' => ['Species', ':', 'dog', ], + 'food' => ['Food', ':', 'kibble', ], + 'legs' => ['Legs', ':', '4', ], + 'description' => ['Description', ':', 'Rex is a very good dog, Brett. He likes kibble, and has four legs.', ], + ]; + $data = new RowsOfFields($data); + $expected = <<setWidth(78); + $options->setIncludeFieldLables(false); + $options->setTableStyle('compact'); $this->assertFormattedOutputMatches($expected, 'table', $data, $options); } @@ -842,6 +1037,17 @@ function testSimpleTableWithFieldLabels() ----- EOT; $this->assertFormattedOutputMatches($expectedSingleField, 'table', $data, $configurationData, ['field' => 'San']); + + $expectedEmptyColumn = <<assertFormattedOutputMatches($expectedEmptyColumn, 'table', new RowsOfFields([]), $configurationData, ['field' => 'San']); + + $this->assertFormattedOutputMatches('', '', new RowsOfFields([]), $configurationData, ['field' => 'San']); + $this->assertFormattedOutputMatches('[]', 'json', new RowsOfFields([]), $configurationData, ['field' => 'San']); } /** @@ -941,6 +1147,20 @@ function testSimpleList() ->setFieldLabels(['one' => 'I', 'two' => 'II', 'three' => 'III']); $this->assertFormattedOutputMatches($expected, 'table', $data, $formatterOptionsWithFieldLables); + $expectedDrushStyleTable = <<setTableStyle('compact') + ->setListDelimiter(':'); + $this->assertFormattedOutputMatches($expectedDrushStyleTable, 'table', $data, $formatterOptionsWithFieldLables); + + // Adding an extra field that does not exist in the data set should not change the output $formatterOptionsWithExtraFieldLables = new FormatterOptions(); $formatterOptionsWithExtraFieldLables @@ -1261,8 +1481,8 @@ function domDocumentTestValues() { "name": "widget-collection", "description": "A couple of widgets.", - "widgets": [ - { + "widgets": { + "usual": { "name": "usual", "colors": [ "red", @@ -1275,7 +1495,7 @@ function domDocumentTestValues() "triangle" ] }, - { + "unusual": { "name": "unusual", "colors": [ "muave", @@ -1288,7 +1508,7 @@ function domDocumentTestValues() "trapazoid" ] } - ] + } } EOT; diff --git a/lib/composer/vendor/consolidation/robo/.github/issue_template.md b/lib/composer/vendor/consolidation/robo/.github/issue_template.md deleted file mode 100644 index 97335f49d..000000000 --- a/lib/composer/vendor/consolidation/robo/.github/issue_template.md +++ /dev/null @@ -1,11 +0,0 @@ -### Steps to reproduce -What did you do? - -### Expected behavior -Tell us what should happen - -### Actual behavior -Tell us what happens instead - -### System Configuration -Which O.S. and PHP version are you using? diff --git a/lib/composer/vendor/consolidation/robo/.github/pull_request_template.md b/lib/composer/vendor/consolidation/robo/.github/pull_request_template.md deleted file mode 100644 index d39b15225..000000000 --- a/lib/composer/vendor/consolidation/robo/.github/pull_request_template.md +++ /dev/null @@ -1,13 +0,0 @@ -### Overview -This pull request: - -- [ ] Fixes a bug -- [ ] Adds a feature -- [ ] Breaks backwards compatibility -- [ ] Needs tests - -### Summary -Short overview of what changed. - -### Description -Any additional information. diff --git a/lib/composer/vendor/consolidation/robo/.gitignore b/lib/composer/vendor/consolidation/robo/.gitignore deleted file mode 100644 index bc900d2f1..000000000 --- a/lib/composer/vendor/consolidation/robo/.gitignore +++ /dev/null @@ -1,9 +0,0 @@ -vendor/ -.idea/ -build -site/ -robotheme/ -tests/_log/* -tests/_helpers/_generated/* -composer.phar -robo.phar diff --git a/lib/composer/vendor/consolidation/robo/.scrutinizer.yml b/lib/composer/vendor/consolidation/robo/.scrutinizer.yml deleted file mode 100644 index f84f59b46..000000000 --- a/lib/composer/vendor/consolidation/robo/.scrutinizer.yml +++ /dev/null @@ -1,3 +0,0 @@ -filter: - excluded_paths: - - "RoboFile.php" diff --git a/lib/composer/vendor/consolidation/robo/.travis.yml b/lib/composer/vendor/consolidation/robo/.travis.yml deleted file mode 100644 index b7361a491..000000000 --- a/lib/composer/vendor/consolidation/robo/.travis.yml +++ /dev/null @@ -1,47 +0,0 @@ -language: php - -branches: - # Only test the master branch and SemVer tags. - only: - - master - - /^[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+.*$/ - -matrix: - include: - - php: 7.0 - env: dependencies=highest - - php: 5.6 - - php: 5.5 - - php: 5.5 - env: dependencies=lowest - -sudo: false - -cache: - directories: - - $HOME/.composer/cache - -before_script: - - if [ -z "$dependencies" ]; then composer install --prefer-dist; fi; - - if [ "$dependencies" = "lowest" ]; then composer update --prefer-dist --prefer-lowest -n; fi; - - if [ "$dependencies" = "highest" ]; then composer update --prefer-dist -n; fi; - -script: "./robo test --coverage" - -after_success: - - travis_retry php vendor/bin/coveralls -v - -# Prior to a deploy, build a fresh robo.phar -before_deploy: - - ./robo phar:build - -# Deploy instructions set up via `travis setup releases` per -# https://docs.travis-ci.com/user/deployment/releases -deploy: - provider: releases - api_key: - secure: EdmB1nW5gj5nggYfmHv20enSgvRIAl1PIWV5GKmkxAJwuummh3UqdI7z0ecTGdw2IBgJx9lizNvqhcWjXbpNhE9VaaT1sHFCKv4Zust6sLb9bneK3oLRdJk2wemfrrZQpdH900zA0o7b3CHVth8UhkrCB4FXVDjUW13K061EXG8= - file: robo.phar - skip_cleanup: true - on: - tags: true diff --git a/lib/composer/vendor/consolidation/robo/CHANGELOG.md b/lib/composer/vendor/consolidation/robo/CHANGELOG.md index d00b18c93..fc22c371a 100644 --- a/lib/composer/vendor/consolidation/robo/CHANGELOG.md +++ b/lib/composer/vendor/consolidation/robo/CHANGELOG.md @@ -1,10 +1,79 @@ # Changelog -#### 1.0.4 +### 1.2.1 12/28/2017 + +* Fixes to tests / build only. + +### 1.2.0 12/12/2017 + +* Support Symfony 4 Components (#651) +* Test multiple composer dependency permutations with https://github.com/greg-1-anderson/composer-test-scenarios + +### 1.1.5 10/25/2017 + +* Load option default values from $input for all options defined in the Application's input definition (#642) +* BUGFIX: Store global options in 'options' namespace rather than at the top level of config. + +### 1.1.4 10/16/2017 + +* Update order of command event hooks so that the option settings are injected prior to configuration being injected, so that dynamic options are available for config injection. (#636) +* Add shallow clone method to GithubStack task. by Stefan Lange (#633) +* Make Changelog task more flexible. by Matthew Grasmick(#631) +* Adding accessToken() to GitHub task. by Matthew Grasmick (#630) + +### 1.1.3 09/23/2017 + +* Add self:update command to update Robo phar distributions to the latest available version on GitHub. by Alexander Menk +* Fix Robo\Task\Docker\Base to implement CommandInterface. by Alexei Gorobet (#625) +* Add overwrite argument to Robo\Task\Filesystem\loadShortcuts.php::_rename by Alexei Gorobets (#624) +* Add failGroup() method for Codeception run command. by Max Gorovenko (#622) +* Set up composer-lock-updater on cron. (#618) +* Fix robo.yml loader by exporting processor instead of loader. By thomscode (#612) + +### 1.1.2 07/28/2017 + +* Inject option default values in help (#607) +* Add noRebuild() method for Codeception run command. By Max Gorovenko (#603) + +### 1.1.1 07/07/2017 + +* Add an option to wait an interval of time between parallel processes. By Gemma Pou #601 +* Do not print dire messages about Robo bootstrap problems when a valid command (e.g. help, list, init, --version) runs. #502 + +### 1.1.0 06/29/2017 + +* Configuration for multiple commands or multiple tasks may now be shared by attaching the configuration values to the task namespace or the command group. #597 +* *Breaking* Task configuration taken from property `task.PARTIAL_NAMESPACE.CLASSNAME.settings` instead of `task.CLASSNAME.settings`. Breaks backwards compatibility only with experimental configuration features introduced in version 1.0.6. Config is now stable, as of this release; there will be no more breaking config changes until Robo 2.0. #596 + +### 1.0.8 06/02/2017 + +* Fix regression in 1.0.7: Allow tasks to return results of types other than \Robo\Result. #585 +* Allow Copydir exclude method to specify subfolders by Alex Skrypnyk #590 +* Add composer init task, and general rounding out of composer tasks. #586 +* Enhance SemVer task so that it can be used with files or strings. #589 + +#### 1.0.7 05/30/2017 + +* Add a state system for collections to allow tasks to pass state to later tasks. +* Ensure that task results are returned when in stopOnFail() mode. +* Make rawArg() and detectInteractive chainable. By Matthew Grasmick #553 #558 +* [CopyDir] Use Symfony Filesystem. By malikkotob #555 +* [Composer] Implement CommandInterface. By Ivan Borzenkov #561 + +#### 1.0.6 03/31/2017 + +* Add configuration features to inject values into commandline option and task setter methods. Experimental; incompatible changes may be introduced prior to the stable release of configuration in version 1.1.0. + +#### 1.0.5 11/23/2016 + +* Incorporate word-wrapping from output-formatters 3.1.5 +* Incorporate custom event handlers from annotated-command 2.2.0 + +#### 1.0.4 11/15/2016 * Updated to latest changes in `master` branch. Phar and tag issues. -#### 1.0.0 +#### 1.0.0 10/10/2016 * [Collection] Add tasks to a collection, and implement them as a group with rollback * Tasks may be added to a collection via `$collection->add($task);` @@ -45,7 +114,7 @@ * Rename 'FileSystem' to 'Filesystem' wherever it occurs. * Current directory is changed with `chdir` only if specified via the `--load-from` option (RC2) -#### 0.6.0 +#### 0.6.0 10/30/2015 * Added `--load-from` option to make Robo start RoboFiles from other directories. Use it like `robo --load-from /path/to/where/RobFile/located`. * Robo will not ask to create RoboFile if it does not exist, `init` command should be used. @@ -54,7 +123,7 @@ * [FlattenDir] task added by @gabor-udvari * Robo Runner can easily extended for custom runner by passing RoboClass and RoboFile parameters to constructor. By @rdeutz See #232 -#### 0.5.4 +#### 0.5.4 08/31/2015 * [WriteToFile] Fixed by @gabor-udvari: always writing to file regardless whether any changes were made or not. This can bring the taskrunner into an inifinite loop if a replaced file is being watched. * [Scss] task added, requires `leafo/scssphp` library to compile by @gabor-udvari @@ -63,7 +132,7 @@ * [Less] fixed passing closure as compiler by @pr0nbaer * [Sass] task added by *2015-08-31* -#### 0.5.3 +#### 0.5.3 07/15/2015 * [Rsync] Ability to use remote shell with identity file by @Mihailoff * [Less] Task added by @burzum @@ -75,7 +144,7 @@ * [Minify] Making it possible to pass options to the JS minification @burzum *2015-03-05* * [CopyDir] Create destination recursively @boedah *2015-02-28* -#### 0.5.2 +#### 0.5.2 02/24/2015 * [Phar] do not compress phar if more than 1000 files included (causes internal PHP error) *2015-02-24* * _copyDir and _mirrorDir shortcuts fixed by @boedah *2015-02-24* @@ -85,14 +154,14 @@ * [PhpServer] fixed passing arguments to server *2015-02-24* -#### 0.5.1 +#### 0.5.1 01/27/2015 * [Exec] fixed execution of background jobs, processes persist till the end of PHP script *2015-01-27* * [Ssh] Fixed SSH task by @Butochnikov *2015-01-27* * [CopyDir] fixed shortcut usage by @boedah *2015-01-27* * Added default value options for Configuration trait by @TamasBarta *2015-01-27* -#### 0.5.0 +#### 0.5.0 01/22/2015 Refactored core @@ -112,7 +181,7 @@ Refactored core * [Docker] Tasks added * [Gulp] Task added by @schorsch3000 -#### 0.4.7 +#### 0.4.7 12/26/2014 * [Minify] Task added by @Rarst. Requires additional dependencies installed *2014-12-26* * [Help command is populated from annotation](https://github.com/consolidation-org/Robo/pull/71) by @jonsa *2014-12-26* @@ -129,7 +198,7 @@ Refactored core * [Rsync] Shell escape rsync exclude pattern by @boedah. Fixes #77 (BC break) *2014-12-26* * [Npm] Task added by @AAlakkad *2014-12-26* -#### 0.4.6 +#### 0.4.6 10/17/2014 * [Exec] Output from buffer is not spoiled by special chars *2014-10-17* * [PHPUnit] detect PHPUnit on Windows or when is globally installed with Composer *2014-10-17* @@ -139,7 +208,7 @@ Refactored core * [ExecTask] now uses Executable trait with printed, dir, arg, option methods added *2014-08-12* -#### 0.4.5 +#### 0.4.5 08/05/2014 * [Watch] bugfix: Watch only tracks last file if given array of files #46 *2014-08-05* * All executable tasks can configure working directory with `dir` option diff --git a/lib/composer/vendor/consolidation/robo/README.md b/lib/composer/vendor/consolidation/robo/README.md index 8c807591b..bda0b728e 100644 --- a/lib/composer/vendor/consolidation/robo/README.md +++ b/lib/composer/vendor/consolidation/robo/README.md @@ -10,6 +10,7 @@ [![License](https://poser.pugx.org/consolidation/robo/license.png)](https://www.versioneye.com/user/projects/57c4a6fe968d64004d97620a?child=57c4a6fe968d64004d97620a#tab-licenses) [![Build Status](https://travis-ci.org/consolidation/Robo.svg?branch=master)](https://travis-ci.org/consolidation/Robo) +[![Windows CI](https://ci.appveyor.com/api/projects/status/0823hnh06pw8ir4d?svg=true)](https://ci.appveyor.com/project/greg-1-anderson/robo) [![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/consolidation/Robo/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/consolidation/Robo/?branch=master) [![Dependency Status](https://www.versioneye.com/user/projects/57c4a6fe968d64004d97620a/badge.svg?style=flat-square)](https://www.versioneye.com/user/projects/57c4a6fe968d64004d97620a) @@ -88,7 +89,7 @@ class RoboFile extends \Robo\Tasks ``` If you execute `robo` you will see this task added to list of available task with name: `test:acceptance`. -To execute it you shoud run `robo test:acceptance`. You may change path to selenium server by passing new path as a argument: +To execute it you should run `robo test:acceptance`. You may change path to selenium server by passing new path as a argument: ``` robo test:acceptance "C:\Downloads\selenium.jar" diff --git a/lib/composer/vendor/consolidation/robo/RoboFile.php b/lib/composer/vendor/consolidation/robo/RoboFile.php index b9a2810d0..53dbc8306 100644 --- a/lib/composer/vendor/consolidation/robo/RoboFile.php +++ b/lib/composer/vendor/consolidation/robo/RoboFile.php @@ -1,7 +1,5 @@ taskExec("./vendor/bin/phpcs --standard=PSR2 {$strict} {$file}")->run(); + $result = $this->taskExec("./vendor/bin/phpcs --standard=PSR2 --exclude=Squiz.Classes.ValidClassName {$strict} {$file}")->run(); if (!$result->wasSuccessful()) { if (!$options['autofix']) { $options['autofix'] = $this->confirm('Would you like to run phpcbf to fix the reported errors?'); } if ($options['autofix']) { - $result = $this->taskExec("./vendor/bin/phpcbf --standard=PSR2 {$file}")->run(); + $result = $this->taskExec("./vendor/bin/phpcbf --standard=PSR2 --exclude=Squiz.Classes.ValidClassName {$file}")->run(); } } return $result; @@ -75,30 +73,45 @@ public function generateTask($className, $wrapperClassName = "") */ public function release($opts = ['beta' => false]) { - $this->yell("Releasing Robo"); - $stable = true; - if ($opts['beta']) { - $stable = false; - $this->say('non-stable release'); + $version = \Robo\Robo::VERSION; + $stable = !$opts['beta']; + if ($stable) { + $version = preg_replace('/-.*/', '', $version); } + else { + $version = $this->incrementVersion($version, 'beta'); + } + $this->writeVersion($version); + $this->yell("Releasing Robo $version"); $this->docs(); $this->taskGitStack() ->add('-A') - ->commit("auto-update") + ->commit("Robo release $version") ->pull() ->push() ->run(); - if ($stable) $this->pharPublish(); + if ($stable) { + $this->pharPublish(); + } $this->publish(); $this->taskGitStack() - ->tag(\Robo\Robo::VERSION) + ->tag($version) ->push('origin master --tags') ->run(); - if ($stable) $this->versionBump(); + if ($stable) { + $version = $this->incrementVersion($version) . '-dev'; + $this->writeVersion($version); + + $this->taskGitStack() + ->add('-A') + ->commit("Prepare for $version") + ->push() + ->run(); + } } /** @@ -110,8 +123,9 @@ public function release($opts = ['beta' => false]) */ public function changed($addition) { + $version = preg_replace('/-.*/', '', \Robo\Robo::VERSION); return $this->taskChangelog() - ->version(\Robo\Robo::VERSION) + ->version($version) ->change($addition) ->run(); } @@ -121,20 +135,71 @@ public function changed($addition) * * @param string $version The new verison for Robo. * Defaults to the next minor (bugfix) version after the current relelase. + * @option stage The version stage: dev, alpha, beta or rc. Use empty for stable. */ - public function versionBump($version = '') + public function versionBump($version = '', $options = ['stage' => '']) { + // If the user did not specify a version, then update the current version. if (empty($version)) { - $versionParts = explode('.', \Robo\Robo::VERSION); - $versionParts[count($versionParts)-1]++; - $version = implode('.', $versionParts); + $version = $this->incrementVersion(\Robo\Robo::VERSION, $options['stage']); } + return $this->writeVersion($version); + } + + /** + * Write the specified version string back into the Robo.php file. + * @param string $version + */ + protected function writeVersion($version) + { + // Write the result to a file. return $this->taskReplaceInFile(__DIR__.'/src/Robo.php') - ->from("VERSION = '".\Robo\Robo::VERSION."'") + ->regex("#VERSION = '[^']*'#") ->to("VERSION = '".$version."'") ->run(); } + /** + * Advance to the next SemVer version. + * + * The behavior depends on the parameter $stage. + * - If $stage is empty, then the patch or minor version of $version is incremented + * - If $stage matches the current stage in the current version, then add one + * to the stage (e.g. alpha3 -> alpha4) + * - If $stage does not match the current stage in the current version, then + * reset to '1' (e.g. alpha4 -> beta1) + * + * @param string $version A SemVer version + * @param string $stage dev, alpha, beta, rc or an empty string for stable. + * @return string + */ + protected function incrementVersion($version, $stage = '') + { + $stable = empty($stage); + $versionStageNumber = '0'; + preg_match('/-([a-zA-Z]*)([0-9]*)/', $version, $match); + $match += ['', '', '']; + $versionStage = $match[1]; + $versionStageNumber = $match[2]; + if ($versionStage != $stage) { + $versionStageNumber = 0; + } + $version = preg_replace('/-.*/', '', $version); + $versionParts = explode('.', $version); + if ($stable) { + $versionParts[count($versionParts)-1]++; + } + $version = implode('.', $versionParts); + if (!$stable) { + $version .= '-' . $stage; + if ($stage != 'dev') { + $versionStageNumber++; + $version .= $versionStageNumber; + } + } + return $version; + } + /** * Generate the Robo documentation files. */ @@ -194,6 +259,25 @@ function (\ReflectionMethod $m) { 'setBuilder', 'getBuilder', 'collectionBuilder', + 'setVerbosityThreshold', + 'verbosityThreshold', + 'setOutputAdapter', + 'outputAdapter', + 'hasOutputAdapter', + 'verbosityMeetsThreshold', + 'writeMessage', + 'detectInteractive', + 'background', + 'timeout', + 'idleTimeout', + 'env', + 'envVars', + 'setInput', + 'interactive', + 'silent', + 'printed', + 'printOutput', + 'printMetadata', ]; return !in_array($m->name, $undocumentedMethods) && $m->isPublic(); // methods are not documented } @@ -289,7 +373,8 @@ public function pharBuild() ->args($devProjectsToRemove) ->taskComposerInstall() ->dir($roboBuildDir) - ->printed(false) + ->noScripts() + ->printed(true) ->run(); // Exit if the preparation step failed diff --git a/lib/composer/vendor/consolidation/robo/composer.json b/lib/composer/vendor/consolidation/robo/composer.json index adc54130c..fcb93ae81 100644 --- a/lib/composer/vendor/consolidation/robo/composer.json +++ b/lib/composer/vendor/consolidation/robo/composer.json @@ -9,9 +9,6 @@ } ], "autoload":{ - "classmap": [ - "scripts/composer/ScriptHandler.php" - ], "psr-4":{ "Robo\\":"src" } @@ -26,43 +23,67 @@ "php": ">=5.5.0", "league/container": "^2.2", "consolidation/log": "~1", - "consolidation/annotated-command": "^2.0.1", - "consolidation/output-formatters": "^2.1.2|~3", - "symfony/finder": "~2.5|~3.0", - "symfony/console": "~2.8|~3.0", - "symfony/process": "~2.5|~3.0", - "symfony/filesystem": "~2.5|~3.0", - "symfony/event-dispatcher": "~2.5|~3.0" + "consolidation/config": "^1.0.1", + "consolidation/annotated-command": "^2.8.2", + "consolidation/output-formatters": "^3.1.13", + "grasmash/yaml-expander": "^1.3", + "symfony/finder": "^2.5|^3|^4", + "symfony/console": "^2.8|^3|^4", + "symfony/process": "^2.5|^3|^4", + "symfony/filesystem": "^2.5|^3|^4", + "symfony/event-dispatcher": "^2.5|^3|^4" }, "require-dev": { "patchwork/jsqueeze": "~2", - "henrikbjorn/lurker": "~1", - "natxet/CssMin": "~3", + "natxet/CssMin": "3.0.4", "pear/archive_tar": "^1.4.2", - "codeception/base": "^2.2.6", + "codeception/base": "^2.3.7", "codeception/verify": "^0.3.2", - "codeception/aspect-mock": "~1", - "satooshi/php-coveralls": "~1", - "squizlabs/php_codesniffer": "~2", - "phpunit/php-code-coverage": "~2|~4" + "codeception/aspect-mock": "^1|^2.1.1", + "greg-1-anderson/composer-test-scenarios": "^1", + "satooshi/php-coveralls": "^2", + "phpunit/php-code-coverage": "~2|~4", + "squizlabs/php_codesniffer": "^2.8" }, "scripts": { + "cs": "./robo sniff", + "unit": "./robo test", + "lint": [ + "find src -name '*.php' -print0 | xargs -0 -n1 php -l", + "find tests/src -name '*.php' -print0 | xargs -0 -n1 php -l" + ], + "test": [ + "@lint", + "@unit", + "@cs" + ], + "scenario": "scenarios/install", "pre-install-cmd": [ - "Robo\\composer\\ScriptHandler::checkDependencies" + "Robo\\composer\\ScriptHandler::checkDependencies" ], - "cs": "/robo sniff", - "test": "./robo test" + "post-update-cmd": [ + "create-scenario symfony4 'symfony/console:^4.0' --platform-php '7.1.3'", + "create-scenario symfony2 'symfony/console:^2.8' --platform-php '5.5.9' --no-lockfile" + ] + }, + "config": { + "optimize-autoloader": true, + "sort-packages": true, + "platform": { + "php": "5.6.3" + } }, "extra": { "branch-alias": { - "dev-master": "1.x-dev" + "dev-master": "1.x-dev", + "dev-state": "1.x-dev" } }, "suggest": { "pear/archive_tar": "Allows tar archives to be created and extracted in taskPack and taskExtract, respectively.", "henrikbjorn/lurker": "For monitoring filesystem changes in taskWatch", "patchwork/jsqueeze": "For minifying JS files in taskMinify", - "natxet/CssMin": "For minifying JS files in taskMinify" + "natxet/CssMin": "For minifying CSS files in taskMinify" }, "replace": { "codegyre/robo": "< 1.0" diff --git a/lib/composer/vendor/consolidation/robo/composer.lock b/lib/composer/vendor/consolidation/robo/composer.lock index d3f4b7e98..35ea591a3 100644 --- a/lib/composer/vendor/consolidation/robo/composer.lock +++ b/lib/composer/vendor/consolidation/robo/composer.lock @@ -4,35 +4,33 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "hash": "01e04acee2b5eae505aa21f88465a6a4", - "content-hash": "ebfcda102135166d31ae314f4dfec7da", + "content-hash": "c755802dc01c48c0f80de1866ba616c5", "packages": [ { "name": "consolidation/annotated-command", - "version": "2.0.3", + "version": "2.8.2", "source": { "type": "git", "url": "https://github.com/consolidation/annotated-command.git", - "reference": "0bcb15e86b8bfbb1972fc6bc31b7d9c3fa40285d" + "reference": "e97c38717eae23a2bafcf3f09438290eee6ebeb4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/consolidation/annotated-command/zipball/0bcb15e86b8bfbb1972fc6bc31b7d9c3fa40285d", - "reference": "0bcb15e86b8bfbb1972fc6bc31b7d9c3fa40285d", + "url": "https://api.github.com/repos/consolidation/annotated-command/zipball/e97c38717eae23a2bafcf3f09438290eee6ebeb4", + "reference": "e97c38717eae23a2bafcf3f09438290eee6ebeb4", "shasum": "" }, "require": { - "consolidation/output-formatters": "~2|~3", + "consolidation/output-formatters": "^3.1.12", "php": ">=5.4.0", - "phpdocumentor/reflection-docblock": "^2.0|^3.0.2", - "psr/log": "~1", - "symfony/console": "^2.8|~3", - "symfony/event-dispatcher": "^2.5|~3", - "symfony/finder": "^2.5|~3" + "psr/log": "^1", + "symfony/console": "^2.8|^3|^4", + "symfony/event-dispatcher": "^2.5|^3|^4", + "symfony/finder": "^2.5|^3|^4" }, "require-dev": { - "phpunit/phpunit": "4.*", - "satooshi/php-coveralls": "^1.0", + "phpunit/phpunit": "^4.8", + "satooshi/php-coveralls": "^1.0.2 | dev-master", "squizlabs/php_codesniffer": "^2.7" }, "type": "library", @@ -57,29 +55,84 @@ } ], "description": "Initialize Symfony Console commands from annotated command class methods.", - "time": "2016-11-14 23:51:12" + "time": "2017-11-29T16:23:23+00:00" + }, + { + "name": "consolidation/config", + "version": "1.0.9", + "source": { + "type": "git", + "url": "https://github.com/consolidation/config.git", + "reference": "34ca8d7c1ee60a7b591b10617114cf1210a2e92c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/consolidation/config/zipball/34ca8d7c1ee60a7b591b10617114cf1210a2e92c", + "reference": "34ca8d7c1ee60a7b591b10617114cf1210a2e92c", + "shasum": "" + }, + "require": { + "dflydev/dot-access-data": "^1.1.0", + "grasmash/expander": "^1", + "php": ">=5.4.0" + }, + "require-dev": { + "greg-1-anderson/composer-test-scenarios": "^1", + "phpunit/phpunit": "^4", + "satooshi/php-coveralls": "^1.0", + "squizlabs/php_codesniffer": "2.*", + "symfony/console": "^2.5|^3|^4", + "symfony/yaml": "^2.8.11|^3|^4" + }, + "suggest": { + "symfony/yaml": "Required to use Consolidation\\Config\\Loader\\YamlConfigLoader" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Consolidation\\Config\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Greg Anderson", + "email": "greg.1.anderson@greenknowe.org" + } + ], + "description": "Provide configuration services for a commandline tool.", + "time": "2017-12-22T17:28:19+00:00" }, { "name": "consolidation/log", - "version": "1.0.3", + "version": "1.0.5", "source": { "type": "git", "url": "https://github.com/consolidation/log.git", - "reference": "74ba81b4edc585616747cc5c5309ce56fec41254" + "reference": "dbc7c535f319a4a2d5a5077738f8eb7c10df8821" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/consolidation/log/zipball/74ba81b4edc585616747cc5c5309ce56fec41254", - "reference": "74ba81b4edc585616747cc5c5309ce56fec41254", + "url": "https://api.github.com/repos/consolidation/log/zipball/dbc7c535f319a4a2d5a5077738f8eb7c10df8821", + "reference": "dbc7c535f319a4a2d5a5077738f8eb7c10df8821", "shasum": "" }, "require": { "php": ">=5.5.0", "psr/log": "~1.0", - "symfony/console": "~2.5|~3.0" + "symfony/console": "^2.8|^3|^4" }, "require-dev": { "phpunit/phpunit": "4.*", + "satooshi/php-coveralls": "dev-master", "squizlabs/php_codesniffer": "2.*" }, "type": "library", @@ -104,37 +157,37 @@ } ], "description": "Improved Psr-3 / Psr\\Log logger based on Symfony Console components.", - "time": "2016-03-23 23:46:42" + "time": "2017-11-29T01:44:16+00:00" }, { "name": "consolidation/output-formatters", - "version": "3.0.1", + "version": "3.1.13", "source": { "type": "git", "url": "https://github.com/consolidation/output-formatters.git", - "reference": "31aac0f6ffd76833a70a12ba7fb3e428f78b55ef" + "reference": "3188461e965b32148c8fb85261833b2b72d34b8c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/consolidation/output-formatters/zipball/31aac0f6ffd76833a70a12ba7fb3e428f78b55ef", - "reference": "31aac0f6ffd76833a70a12ba7fb3e428f78b55ef", + "url": "https://api.github.com/repos/consolidation/output-formatters/zipball/3188461e965b32148c8fb85261833b2b72d34b8c", + "reference": "3188461e965b32148c8fb85261833b2b72d34b8c", "shasum": "" }, "require": { "php": ">=5.4.0", - "symfony/console": "~2.5|~3.0", - "symfony/finder": "~2.5|~3.0", - "victorjonsson/markdowndocs": "^1.3" + "symfony/console": "^2.8|^3|^4", + "symfony/finder": "^2.5|^3|^4" }, "require-dev": { - "phpunit/phpunit": "4.*", - "satooshi/php-coveralls": "^1.0", - "squizlabs/php_codesniffer": "2.*" + "phpunit/phpunit": "^4.8", + "satooshi/php-coveralls": "^1.0.2 | dev-master", + "squizlabs/php_codesniffer": "^2.7", + "victorjonsson/markdowndocs": "^1.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.x-dev" + "dev-master": "3.x-dev" } }, "autoload": { @@ -153,22 +206,25 @@ } ], "description": "Format text by applying transformations provided by plug-in formatters.", - "time": "2016-11-14 18:44:33" + "time": "2017-11-29T15:25:38+00:00" }, { "name": "container-interop/container-interop", - "version": "1.1.0", + "version": "1.2.0", "source": { "type": "git", "url": "https://github.com/container-interop/container-interop.git", - "reference": "fc08354828f8fd3245f77a66b9e23a6bca48297e" + "reference": "79cbf1341c22ec75643d841642dd5d6acd83bdb8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/container-interop/container-interop/zipball/fc08354828f8fd3245f77a66b9e23a6bca48297e", - "reference": "fc08354828f8fd3245f77a66b9e23a6bca48297e", + "url": "https://api.github.com/repos/container-interop/container-interop/zipball/79cbf1341c22ec75643d841642dd5d6acd83bdb8", + "reference": "79cbf1341c22ec75643d841642dd5d6acd83bdb8", "shasum": "" }, + "require": { + "psr/container": "^1.0" + }, "type": "library", "autoload": { "psr-4": { @@ -180,45 +236,101 @@ "MIT" ], "description": "Promoting the interoperability of container objects (DIC, SL, etc.)", - "time": "2014-12-30 15:22:37" + "homepage": "https://github.com/container-interop/container-interop", + "time": "2017-02-14T19:40:03+00:00" }, { - "name": "league/container", - "version": "2.2.0", + "name": "dflydev/dot-access-data", + "version": "v1.1.0", "source": { "type": "git", - "url": "https://github.com/thephpleague/container.git", - "reference": "c0e7d947b690891f700dc4967ead7bdb3d6708c1" + "url": "https://github.com/dflydev/dflydev-dot-access-data.git", + "reference": "3fbd874921ab2c041e899d044585a2ab9795df8a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/container/zipball/c0e7d947b690891f700dc4967ead7bdb3d6708c1", - "reference": "c0e7d947b690891f700dc4967ead7bdb3d6708c1", + "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/3fbd874921ab2c041e899d044585a2ab9795df8a", + "reference": "3fbd874921ab2c041e899d044585a2ab9795df8a", "shasum": "" }, "require": { - "container-interop/container-interop": "^1.1", - "php": ">=5.4.0" + "php": ">=5.3.2" }, - "provide": { - "container-interop/container-interop-implementation": "^1.1" + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } }, - "replace": { - "orno/di": "~2.0" + "autoload": { + "psr-0": { + "Dflydev\\DotAccessData": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Dragonfly Development Inc.", + "email": "info@dflydev.com", + "homepage": "http://dflydev.com" + }, + { + "name": "Beau Simensen", + "email": "beau@dflydev.com", + "homepage": "http://beausimensen.com" + }, + { + "name": "Carlos Frutos", + "email": "carlos@kiwing.it", + "homepage": "https://github.com/cfrutos" + } + ], + "description": "Given a deep data structure, access data by dot notation.", + "homepage": "https://github.com/dflydev/dflydev-dot-access-data", + "keywords": [ + "access", + "data", + "dot", + "notation" + ], + "time": "2017-01-20T21:14:22+00:00" + }, + { + "name": "grasmash/expander", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/grasmash/expander.git", + "reference": "95d6037344a4be1dd5f8e0b0b2571a28c397578f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/grasmash/expander/zipball/95d6037344a4be1dd5f8e0b0b2571a28c397578f", + "reference": "95d6037344a4be1dd5f8e0b0b2571a28c397578f", + "shasum": "" + }, + "require": { + "dflydev/dot-access-data": "^1.1.0", + "php": ">=5.4" }, "require-dev": { - "phpunit/phpunit": "4.*" + "greg-1-anderson/composer-test-scenarios": "^1", + "phpunit/phpunit": "^4|^5.5.4", + "satooshi/php-coveralls": "^1.0.2|dev-master", + "squizlabs/php_codesniffer": "^2.7" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.x-dev", - "dev-1.x": "1.x-dev" + "dev-master": "1.x-dev" } }, "autoload": { "psr-4": { - "League\\Container\\": "src" + "Grasmash\\Expander\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -227,56 +339,46 @@ ], "authors": [ { - "name": "Phil Bennett", - "email": "philipobenito@gmail.com", - "homepage": "http://www.philipobenito.com", - "role": "Developer" + "name": "Matthew Grasmick" } ], - "description": "A fast and intuitive dependency injection container.", - "homepage": "https://github.com/thephpleague/container", - "keywords": [ - "container", - "dependency", - "di", - "injection", - "league", - "provider", - "service" - ], - "time": "2016-03-17 11:07:59" + "description": "Expands internal property references in PHP arrays file.", + "time": "2017-12-21T22:14:55+00:00" }, { - "name": "phpdocumentor/reflection-common", - "version": "1.0", + "name": "grasmash/yaml-expander", + "version": "1.4.0", "source": { "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionCommon.git", - "reference": "144c307535e82c8fdcaacbcfc1d6d8eeb896687c" + "url": "https://github.com/grasmash/yaml-expander.git", + "reference": "3f0f6001ae707a24f4d9733958d77d92bf9693b1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/144c307535e82c8fdcaacbcfc1d6d8eeb896687c", - "reference": "144c307535e82c8fdcaacbcfc1d6d8eeb896687c", + "url": "https://api.github.com/repos/grasmash/yaml-expander/zipball/3f0f6001ae707a24f4d9733958d77d92bf9693b1", + "reference": "3f0f6001ae707a24f4d9733958d77d92bf9693b1", "shasum": "" }, "require": { - "php": ">=5.5" + "dflydev/dot-access-data": "^1.1.0", + "php": ">=5.4", + "symfony/yaml": "^2.8.11|^3|^4" }, "require-dev": { - "phpunit/phpunit": "^4.6" + "greg-1-anderson/composer-test-scenarios": "^1", + "phpunit/phpunit": "^4.8|^5.5.4", + "satooshi/php-coveralls": "^1.0.2|dev-master", + "squizlabs/php_codesniffer": "^2.7" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "1.x-dev" } }, "autoload": { "psr-4": { - "phpDocumentor\\Reflection\\": [ - "src" - ] + "Grasmash\\YamlExpander\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -285,51 +387,50 @@ ], "authors": [ { - "name": "Jaap van Otterdijk", - "email": "opensource@ijaap.nl" + "name": "Matthew Grasmick" } ], - "description": "Common reflection classes used by phpdocumentor to reflect the code structure", - "homepage": "http://www.phpdoc.org", - "keywords": [ - "FQSEN", - "phpDocumentor", - "phpdoc", - "reflection", - "static analysis" - ], - "time": "2015-12-27 11:43:31" + "description": "Expands internal property references in a yaml file.", + "time": "2017-12-16T16:06:03+00:00" }, { - "name": "phpdocumentor/reflection-docblock", - "version": "3.1.1", + "name": "league/container", + "version": "2.4.1", "source": { "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "8331b5efe816ae05461b7ca1e721c01b46bafb3e" + "url": "https://github.com/thephpleague/container.git", + "reference": "43f35abd03a12977a60ffd7095efd6a7808488c0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/8331b5efe816ae05461b7ca1e721c01b46bafb3e", - "reference": "8331b5efe816ae05461b7ca1e721c01b46bafb3e", + "url": "https://api.github.com/repos/thephpleague/container/zipball/43f35abd03a12977a60ffd7095efd6a7808488c0", + "reference": "43f35abd03a12977a60ffd7095efd6a7808488c0", "shasum": "" }, "require": { - "php": ">=5.5", - "phpdocumentor/reflection-common": "^1.0@dev", - "phpdocumentor/type-resolver": "^0.2.0", - "webmozart/assert": "^1.0" + "container-interop/container-interop": "^1.2", + "php": "^5.4.0 || ^7.0" + }, + "provide": { + "container-interop/container-interop-implementation": "^1.2", + "psr/container-implementation": "^1.0" + }, + "replace": { + "orno/di": "~2.0" }, "require-dev": { - "mockery/mockery": "^0.9.4", - "phpunit/phpunit": "^4.4" + "phpunit/phpunit": "4.*" }, "type": "library", + "extra": { + "branch-alias": { + "dev-2.x": "2.x-dev", + "dev-1.x": "1.x-dev" + } + }, "autoload": { "psr-4": { - "phpDocumentor\\Reflection\\": [ - "src/" - ] + "League\\Container\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -338,34 +439,41 @@ ], "authors": [ { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" + "name": "Phil Bennett", + "email": "philipobenito@gmail.com", + "homepage": "http://www.philipobenito.com", + "role": "Developer" } ], - "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", - "time": "2016-09-30 07:12:33" + "description": "A fast and intuitive dependency injection container.", + "homepage": "https://github.com/thephpleague/container", + "keywords": [ + "container", + "dependency", + "di", + "injection", + "league", + "provider", + "service" + ], + "time": "2017-05-10T09:20:27+00:00" }, { - "name": "phpdocumentor/type-resolver", - "version": "0.2", + "name": "psr/container", + "version": "1.0.0", "source": { "type": "git", - "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "b39c7a5b194f9ed7bd0dd345c751007a41862443" + "url": "https://github.com/php-fig/container.git", + "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/b39c7a5b194f9ed7bd0dd345c751007a41862443", - "reference": "b39c7a5b194f9ed7bd0dd345c751007a41862443", + "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f", + "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f", "shasum": "" }, "require": { - "php": ">=5.5", - "phpdocumentor/reflection-common": "^1.0" - }, - "require-dev": { - "mockery/mockery": "^0.9.4", - "phpunit/phpunit": "^5.2||^4.8.24" + "php": ">=5.3.0" }, "type": "library", "extra": { @@ -375,9 +483,7 @@ }, "autoload": { "psr-4": { - "phpDocumentor\\Reflection\\": [ - "src/" - ] + "Psr\\Container\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -386,11 +492,20 @@ ], "authors": [ { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" } ], - "time": "2016-06-10 07:14:17" + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", + "keywords": [ + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" + ], + "time": "2017-02-14T16:28:37+00:00" }, { "name": "psr/log", @@ -437,41 +552,49 @@ "psr", "psr-3" ], - "time": "2016-10-10 12:19:37" + "time": "2016-10-10T12:19:37+00:00" }, { "name": "symfony/console", - "version": "v3.1.6", + "version": "v3.4.2", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "c99da1119ae61e15de0e4829196b9fba6f73d065" + "reference": "9f21adfb92a9315b73ae2ed43138988ee4913d4e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/c99da1119ae61e15de0e4829196b9fba6f73d065", - "reference": "c99da1119ae61e15de0e4829196b9fba6f73d065", + "url": "https://api.github.com/repos/symfony/console/zipball/9f21adfb92a9315b73ae2ed43138988ee4913d4e", + "reference": "9f21adfb92a9315b73ae2ed43138988ee4913d4e", "shasum": "" }, "require": { - "php": ">=5.5.9", - "symfony/debug": "~2.8|~3.0", + "php": "^5.5.9|>=7.0.8", + "symfony/debug": "~2.8|~3.0|~4.0", "symfony/polyfill-mbstring": "~1.0" }, + "conflict": { + "symfony/dependency-injection": "<3.4", + "symfony/process": "<3.3" + }, "require-dev": { "psr/log": "~1.0", - "symfony/event-dispatcher": "~2.8|~3.0", - "symfony/process": "~2.8|~3.0" + "symfony/config": "~3.3|~4.0", + "symfony/dependency-injection": "~3.4|~4.0", + "symfony/event-dispatcher": "~2.8|~3.0|~4.0", + "symfony/lock": "~3.4|~4.0", + "symfony/process": "~3.3|~4.0" }, "suggest": { "psr/log": "For using the console logger", "symfony/event-dispatcher": "", + "symfony/lock": "", "symfony/process": "" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "3.4-dev" } }, "autoload": { @@ -498,37 +621,36 @@ ], "description": "Symfony Console Component", "homepage": "https://symfony.com", - "time": "2016-10-06 01:44:51" + "time": "2017-12-14T19:40:10+00:00" }, { "name": "symfony/debug", - "version": "v3.1.6", + "version": "v3.4.2", "source": { "type": "git", "url": "https://github.com/symfony/debug.git", - "reference": "e2b3f74a67fc928adc3c1b9027f73e1bc01190a8" + "reference": "543deab3ffff94402440b326fc94153bae2dfa7a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/debug/zipball/e2b3f74a67fc928adc3c1b9027f73e1bc01190a8", - "reference": "e2b3f74a67fc928adc3c1b9027f73e1bc01190a8", + "url": "https://api.github.com/repos/symfony/debug/zipball/543deab3ffff94402440b326fc94153bae2dfa7a", + "reference": "543deab3ffff94402440b326fc94153bae2dfa7a", "shasum": "" }, "require": { - "php": ">=5.5.9", + "php": "^5.5.9|>=7.0.8", "psr/log": "~1.0" }, "conflict": { "symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2" }, "require-dev": { - "symfony/class-loader": "~2.8|~3.0", - "symfony/http-kernel": "~2.8|~3.0" + "symfony/http-kernel": "~2.8|~3.0|~4.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "3.4-dev" } }, "autoload": { @@ -555,31 +677,34 @@ ], "description": "Symfony Debug Component", "homepage": "https://symfony.com", - "time": "2016-09-06 11:02:40" + "time": "2017-12-12T08:27:14+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v3.1.6", + "version": "v3.4.2", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "28b0832b2553ffb80cabef6a7a812ff1e670c0bc" + "reference": "b869cbf8a15ca6261689de2c28a7d7f2d0706835" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/28b0832b2553ffb80cabef6a7a812ff1e670c0bc", - "reference": "28b0832b2553ffb80cabef6a7a812ff1e670c0bc", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/b869cbf8a15ca6261689de2c28a7d7f2d0706835", + "reference": "b869cbf8a15ca6261689de2c28a7d7f2d0706835", "shasum": "" }, "require": { - "php": ">=5.5.9" + "php": "^5.5.9|>=7.0.8" + }, + "conflict": { + "symfony/dependency-injection": "<3.3" }, "require-dev": { "psr/log": "~1.0", - "symfony/config": "~2.8|~3.0", - "symfony/dependency-injection": "~2.8|~3.0", - "symfony/expression-language": "~2.8|~3.0", - "symfony/stopwatch": "~2.8|~3.0" + "symfony/config": "~2.8|~3.0|~4.0", + "symfony/dependency-injection": "~3.3|~4.0", + "symfony/expression-language": "~2.8|~3.0|~4.0", + "symfony/stopwatch": "~2.8|~3.0|~4.0" }, "suggest": { "symfony/dependency-injection": "", @@ -588,7 +713,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "3.4-dev" } }, "autoload": { @@ -615,29 +740,29 @@ ], "description": "Symfony EventDispatcher Component", "homepage": "https://symfony.com", - "time": "2016-10-13 06:28:43" + "time": "2017-12-14T19:40:10+00:00" }, { "name": "symfony/filesystem", - "version": "v3.1.6", + "version": "v3.4.2", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "0565b61bf098cb4dc09f4f103f033138ae4f42c6" + "reference": "25b135bea251829e3db6a77d773643408b575ed4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/0565b61bf098cb4dc09f4f103f033138ae4f42c6", - "reference": "0565b61bf098cb4dc09f4f103f033138ae4f42c6", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/25b135bea251829e3db6a77d773643408b575ed4", + "reference": "25b135bea251829e3db6a77d773643408b575ed4", "shasum": "" }, "require": { - "php": ">=5.5.9" + "php": "^5.5.9|>=7.0.8" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "3.4-dev" } }, "autoload": { @@ -664,29 +789,29 @@ ], "description": "Symfony Filesystem Component", "homepage": "https://symfony.com", - "time": "2016-10-18 04:30:12" + "time": "2017-12-14T19:40:10+00:00" }, { "name": "symfony/finder", - "version": "v3.1.6", + "version": "v3.4.2", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "205b5ffbb518a98ba2ae60a52656c4a31ab00c6f" + "reference": "dac8d7db537bac7ad8143eb11360a8c2231f251a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/205b5ffbb518a98ba2ae60a52656c4a31ab00c6f", - "reference": "205b5ffbb518a98ba2ae60a52656c4a31ab00c6f", + "url": "https://api.github.com/repos/symfony/finder/zipball/dac8d7db537bac7ad8143eb11360a8c2231f251a", + "reference": "dac8d7db537bac7ad8143eb11360a8c2231f251a", "shasum": "" }, "require": { - "php": ">=5.5.9" + "php": "^5.5.9|>=7.0.8" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "3.4-dev" } }, "autoload": { @@ -713,20 +838,20 @@ ], "description": "Symfony Finder Component", "homepage": "https://symfony.com", - "time": "2016-09-28 00:11:12" + "time": "2017-11-05T16:10:10+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.3.0", + "version": "v1.6.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "e79d363049d1c2128f133a2667e4f4190904f7f4" + "reference": "2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/e79d363049d1c2128f133a2667e4f4190904f7f4", - "reference": "e79d363049d1c2128f133a2667e4f4190904f7f4", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296", + "reference": "2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296", "shasum": "" }, "require": { @@ -738,7 +863,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.3-dev" + "dev-master": "1.6-dev" } }, "autoload": { @@ -772,29 +897,29 @@ "portable", "shim" ], - "time": "2016-11-14 01:06:16" + "time": "2017-10-11T12:05:26+00:00" }, { "name": "symfony/process", - "version": "v3.1.6", + "version": "v3.4.2", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "66de154ae86b1a07001da9fbffd620206e4faf94" + "reference": "bb3ef65d493a6d57297cad6c560ee04e2a8f5098" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/66de154ae86b1a07001da9fbffd620206e4faf94", - "reference": "66de154ae86b1a07001da9fbffd620206e4faf94", + "url": "https://api.github.com/repos/symfony/process/zipball/bb3ef65d493a6d57297cad6c560ee04e2a8f5098", + "reference": "bb3ef65d493a6d57297cad6c560ee04e2a8f5098", "shasum": "" }, "require": { - "php": ">=5.5.9" + "php": "^5.5.9|>=7.0.8" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "3.4-dev" } }, "autoload": { @@ -821,83 +946,47 @@ ], "description": "Symfony Process Component", "homepage": "https://symfony.com", - "time": "2016-09-29 14:13:09" + "time": "2017-12-14T19:40:10+00:00" }, { - "name": "victorjonsson/markdowndocs", - "version": "1.3.7", + "name": "symfony/yaml", + "version": "v3.4.2", "source": { "type": "git", - "url": "https://github.com/victorjonsson/PHP-Markdown-Documentation-Generator.git", - "reference": "a8244617cdce4804cd94ea508c82e8d7e29a273a" + "url": "https://github.com/symfony/yaml.git", + "reference": "afe0cd38486505c9703707707d91450cfc1bd536" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/victorjonsson/PHP-Markdown-Documentation-Generator/zipball/a8244617cdce4804cd94ea508c82e8d7e29a273a", - "reference": "a8244617cdce4804cd94ea508c82e8d7e29a273a", + "url": "https://api.github.com/repos/symfony/yaml/zipball/afe0cd38486505c9703707707d91450cfc1bd536", + "reference": "afe0cd38486505c9703707707d91450cfc1bd536", "shasum": "" }, "require": { - "php": ">=5.5.0", - "symfony/console": ">=2.6" - }, - "require-dev": { - "phpunit/phpunit": "3.7.23" - }, - "bin": [ - "bin/phpdoc-md" - ], - "type": "library", - "autoload": { - "psr-0": { - "PHPDocsMD": "src/" - } + "php": "^5.5.9|>=7.0.8" }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Victor Jonsson", - "email": "kontakt@victorjonsson.se" - } - ], - "description": "Command line tool for generating markdown-formatted class documentation", - "homepage": "https://github.com/victorjonsson/PHP-Markdown-Documentation-Generator", - "time": "2016-10-11 21:10:19" - }, - { - "name": "webmozart/assert", - "version": "1.1.0", - "source": { - "type": "git", - "url": "https://github.com/webmozart/assert.git", - "reference": "bb2d123231c095735130cc8f6d31385a44c7b308" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/webmozart/assert/zipball/bb2d123231c095735130cc8f6d31385a44c7b308", - "reference": "bb2d123231c095735130cc8f6d31385a44c7b308", - "shasum": "" - }, - "require": { - "php": "^5.3.3|^7.0" + "conflict": { + "symfony/console": "<3.4" }, "require-dev": { - "phpunit/phpunit": "^4.6", - "sebastian/version": "^1.0.1" + "symfony/console": "~3.4|~4.0" + }, + "suggest": { + "symfony/console": "For validating YAML files using the lint command" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.2-dev" + "dev-master": "3.4-dev" } }, "autoload": { "psr-4": { - "Webmozart\\Assert\\": "src/" - } + "Symfony\\Component\\Yaml\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -905,67 +994,20 @@ ], "authors": [ { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Assertions to validate method input/output with nice error messages.", - "keywords": [ - "assert", - "check", - "validate" - ], - "time": "2016-08-09 15:02:57" + "description": "Symfony Yaml Component", + "homepage": "https://symfony.com", + "time": "2017-12-11T20:38:23+00:00" } ], "packages-dev": [ - { - "name": "andrewsville/php-token-reflection", - "version": "1.4.0", - "source": { - "type": "git", - "url": "https://github.com/Andrewsville/PHP-Token-Reflection.git", - "reference": "e6d0ac2baf66cdf154be34c3d2a2aa1bd4b426ee" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Andrewsville/PHP-Token-Reflection/zipball/e6d0ac2baf66cdf154be34c3d2a2aa1bd4b426ee", - "reference": "e6d0ac2baf66cdf154be34c3d2a2aa1bd4b426ee", - "shasum": "" - }, - "require": { - "ext-tokenizer": "*", - "php": ">=5.3.0" - }, - "type": "library", - "autoload": { - "psr-0": { - "TokenReflection": "./" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3" - ], - "authors": [ - { - "name": "Ondřej Nešpor", - "homepage": "https://github.com/andrewsville" - }, - { - "name": "Jaroslav Hanslík", - "homepage": "https://github.com/kukulich" - } - ], - "description": "Library emulating the PHP internal reflection using just the tokenized source code.", - "homepage": "http://andrewsville.github.com/PHP-Token-Reflection/", - "keywords": [ - "library", - "reflection", - "tokenizer" - ], - "time": "2014-08-06 16:37:08" - }, { "name": "behat/gherkin", "version": "v4.4.5", @@ -1023,25 +1065,25 @@ "gherkin", "parser" ], - "time": "2016-10-30 11:50:56" + "time": "2016-10-30T11:50:56+00:00" }, { "name": "codeception/aspect-mock", - "version": "1.0.0", + "version": "2.1.1", "source": { "type": "git", "url": "https://github.com/Codeception/AspectMock.git", - "reference": "666d0a80239eeda1e2a31219d83fce4f17529b7f" + "reference": "bf3c000599c0dc75ecb52e19dee2b8ed294cf7ba" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Codeception/AspectMock/zipball/666d0a80239eeda1e2a31219d83fce4f17529b7f", - "reference": "666d0a80239eeda1e2a31219d83fce4f17529b7f", + "url": "https://api.github.com/repos/Codeception/AspectMock/zipball/bf3c000599c0dc75ecb52e19dee2b8ed294cf7ba", + "reference": "bf3c000599c0dc75ecb52e19dee2b8ed294cf7ba", "shasum": "" }, "require": { - "goaop/framework": "~1.0", - "php": ">=5.4.0", + "goaop/framework": "^2.0.0", + "php": ">=5.6.0", "symfony/finder": "~2.4|~3.0" }, "require-dev": { @@ -1062,24 +1104,24 @@ "authors": [ { "name": "Michael Bodnarchuk", - "email": "davert.php@mailican.com" + "email": "davert@codeception.com" } ], "description": "Experimental Mocking Framework powered by Aspects", - "time": "2016-03-14 20:52:23" + "time": "2017-10-24T10:20:17+00:00" }, { "name": "codeception/base", - "version": "2.2.6", + "version": "2.3.7", "source": { "type": "git", "url": "https://github.com/Codeception/base.git", - "reference": "f70c77fe9941c41f567fe62b1e96e1ed33235ac7" + "reference": "c3fcea61525e62361ecc45aea1837f225ba73b4f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Codeception/base/zipball/f70c77fe9941c41f567fe62b1e96e1ed33235ac7", - "reference": "f70c77fe9941c41f567fe62b1e96e1ed33235ac7", + "url": "https://api.github.com/repos/Codeception/base/zipball/c3fcea61525e62361ecc45aea1837f225ba73b4f", + "reference": "c3fcea61525e62361ecc45aea1837f225ba73b4f", "shasum": "" }, "require": { @@ -1088,17 +1130,18 @@ "ext-mbstring": "*", "guzzlehttp/psr7": "~1.0", "php": ">=5.4.0 <8.0", - "phpunit/php-code-coverage": ">=2.1.3 <5.0", - "phpunit/phpunit": ">4.8.20 <6.0", - "sebastian/comparator": "~1.1", - "sebastian/diff": "^1.4", - "symfony/browser-kit": ">=2.7 <4.0", - "symfony/console": ">=2.7 <4.0", - "symfony/css-selector": ">=2.7 <4.0", - "symfony/dom-crawler": ">=2.7 <4.0", - "symfony/event-dispatcher": ">=2.7 <4.0", - "symfony/finder": ">=2.7 <4.0", - "symfony/yaml": ">=2.7 <4.0" + "phpunit/php-code-coverage": ">=2.2.4 <6.0", + "phpunit/phpunit": ">=4.8.28 <5.0.0 || >=5.6.3 <7.0", + "phpunit/phpunit-mock-objects": ">2.3 <5.0", + "sebastian/comparator": ">1.1 <3.0", + "sebastian/diff": ">=1.4 <3.0", + "symfony/browser-kit": ">=2.7 <5.0", + "symfony/console": ">=2.7 <5.0", + "symfony/css-selector": ">=2.7 <5.0", + "symfony/dom-crawler": ">=2.7 <5.0", + "symfony/event-dispatcher": ">=2.7 <5.0", + "symfony/finder": ">=2.7 <5.0", + "symfony/yaml": ">=2.7 <5.0" }, "require-dev": { "codeception/specify": "~0.3", @@ -1106,20 +1149,24 @@ "flow/jsonpath": "~0.2", "league/factory-muffin": "^3.0", "league/factory-muffin-faker": "^1.0", - "mongodb/mongodb": "^1.0", "monolog/monolog": "~1.8", "pda/pheanstalk": "~3.0", "php-amqplib/php-amqplib": "~2.4", "predis/predis": "^1.0", - "squizlabs/php_codesniffer": "~2.0" + "squizlabs/php_codesniffer": "~2.0", + "symfony/process": ">=2.7 <5.0", + "vlucas/phpdotenv": "^2.4.0" }, "suggest": { + "aws/aws-sdk-php": "For using AWS Auth in REST module and Queue module", + "codeception/phpbuiltinserver": "Start and stop PHP built-in web server for your tests", "codeception/specify": "BDD-style code blocks", "codeception/verify": "BDD-style assertions", "flow/jsonpath": "For using JSONPath in REST module", "league/factory-muffin": "For DataFactory module", "league/factory-muffin-faker": "For Faker support in DataFactory module", "phpseclib/phpseclib": "for SFTP option in FTP Module", + "stecman/symfony-console-completion": "For BASH autocompletion", "symfony/phpunit-bridge": "For phpunit-bridge support" }, "bin": [ @@ -1155,20 +1202,20 @@ "functional testing", "unit testing" ], - "time": "2016-10-27 00:07:01" + "time": "2017-12-12T04:54:15+00:00" }, { "name": "codeception/verify", - "version": "0.3.2", + "version": "0.3.3", "source": { "type": "git", "url": "https://github.com/Codeception/Verify.git", - "reference": "b06d706261d1fee0cc312bacc5c1b7c506e5213a" + "reference": "5d649dda453cd814dadc4bb053060cd2c6bb4b4c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Codeception/Verify/zipball/b06d706261d1fee0cc312bacc5c1b7c506e5213a", - "reference": "b06d706261d1fee0cc312bacc5c1b7c506e5213a", + "url": "https://api.github.com/repos/Codeception/Verify/zipball/5d649dda453cd814dadc4bb053060cd2c6bb4b4c", + "reference": "5d649dda453cd814dadc4bb053060cd2c6bb4b4c", "shasum": "" }, "require-dev": { @@ -1191,20 +1238,20 @@ } ], "description": "BDD assertion library for PHPUnit", - "time": "2016-08-29 22:49:25" + "time": "2017-01-09T10:58:51+00:00" }, { "name": "doctrine/annotations", - "version": "v1.3.0", + "version": "v1.4.0", "source": { "type": "git", "url": "https://github.com/doctrine/annotations.git", - "reference": "30e07cf03edc3cd3ef579d0dd4dd8c58250799a5" + "reference": "54cacc9b81758b14e3ce750f205a393d52339e97" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/annotations/zipball/30e07cf03edc3cd3ef579d0dd4dd8c58250799a5", - "reference": "30e07cf03edc3cd3ef579d0dd4dd8c58250799a5", + "url": "https://api.github.com/repos/doctrine/annotations/zipball/54cacc9b81758b14e3ce750f205a393d52339e97", + "reference": "54cacc9b81758b14e3ce750f205a393d52339e97", "shasum": "" }, "require": { @@ -1213,7 +1260,7 @@ }, "require-dev": { "doctrine/cache": "1.*", - "phpunit/phpunit": "^5.6.1" + "phpunit/phpunit": "^5.7" }, "type": "library", "extra": { @@ -1259,7 +1306,7 @@ "docblock", "parser" ], - "time": "2016-10-24 11:45:47" + "time": "2017-02-24T16:22:25+00:00" }, { "name": "doctrine/instantiator", @@ -1313,7 +1360,7 @@ "constructor", "instantiate" ], - "time": "2015-06-14 21:17:01" + "time": "2015-06-14T21:17:01+00:00" }, { "name": "doctrine/lexer", @@ -1367,41 +1414,44 @@ "lexer", "parser" ], - "time": "2014-09-09 13:34:57" + "time": "2014-09-09T13:34:57+00:00" }, { "name": "goaop/framework", - "version": "1.1.1", + "version": "2.1.2", "source": { "type": "git", "url": "https://github.com/goaop/framework.git", - "reference": "05b51a6ddc58ace85a31f9d2dc885a6550898fd5" + "reference": "6e2a0fe13c1943db02a67588cfd27692bddaffa5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/goaop/framework/zipball/05b51a6ddc58ace85a31f9d2dc885a6550898fd5", - "reference": "05b51a6ddc58ace85a31f9d2dc885a6550898fd5", + "url": "https://api.github.com/repos/goaop/framework/zipball/6e2a0fe13c1943db02a67588cfd27692bddaffa5", + "reference": "6e2a0fe13c1943db02a67588cfd27692bddaffa5", "shasum": "" }, "require": { - "andrewsville/php-token-reflection": "~1.4", "doctrine/annotations": "~1.0", + "goaop/parser-reflection": "~1.2", "jakubledl/dissect": "~1.0", - "php": ">=5.5.0" + "php": ">=5.6.0" }, "require-dev": { - "symfony/console": "~2.1|~3.0" + "adlawson/vfs": "^0.12", + "doctrine/orm": "^2.5", + "phpunit/phpunit": "^4.8", + "symfony/console": "^2.7|^3.0" }, "suggest": { "symfony/console": "Enables the usage of the command-line tool." }, "bin": [ - "bin/warmup" + "bin/aspect" ], "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-master": "2.0-dev" } }, "autoload": { @@ -1427,70 +1477,130 @@ "library", "php" ], - "time": "2016-05-23 11:19:17" + "time": "2017-07-12T11:46:25+00:00" }, { - "name": "guzzle/guzzle", - "version": "v3.8.1", + "name": "goaop/parser-reflection", + "version": "1.4.0", "source": { "type": "git", - "url": "https://github.com/guzzle/guzzle.git", - "reference": "4de0618a01b34aa1c8c33a3f13f396dcd3882eba" + "url": "https://github.com/goaop/parser-reflection.git", + "reference": "adfc38fee63014880932ebcc4810871b8e33edc9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/4de0618a01b34aa1c8c33a3f13f396dcd3882eba", - "reference": "4de0618a01b34aa1c8c33a3f13f396dcd3882eba", + "url": "https://api.github.com/repos/goaop/parser-reflection/zipball/adfc38fee63014880932ebcc4810871b8e33edc9", + "reference": "adfc38fee63014880932ebcc4810871b8e33edc9", "shasum": "" }, "require": { - "ext-curl": "*", - "php": ">=5.3.3", - "symfony/event-dispatcher": ">=2.1" + "nikic/php-parser": "^1.2|^2.0|^3.0", + "php": ">=5.6.0" }, - "replace": { - "guzzle/batch": "self.version", - "guzzle/cache": "self.version", - "guzzle/common": "self.version", - "guzzle/http": "self.version", - "guzzle/inflection": "self.version", - "guzzle/iterator": "self.version", - "guzzle/log": "self.version", - "guzzle/parser": "self.version", - "guzzle/plugin": "self.version", - "guzzle/plugin-async": "self.version", - "guzzle/plugin-backoff": "self.version", - "guzzle/plugin-cache": "self.version", - "guzzle/plugin-cookie": "self.version", - "guzzle/plugin-curlauth": "self.version", - "guzzle/plugin-error-response": "self.version", - "guzzle/plugin-history": "self.version", - "guzzle/plugin-log": "self.version", - "guzzle/plugin-md5": "self.version", - "guzzle/plugin-mock": "self.version", - "guzzle/plugin-oauth": "self.version", - "guzzle/service": "self.version", - "guzzle/stream": "self.version" + "require-dev": { + "phpunit/phpunit": "~4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Go\\ParserReflection\\": "src" + }, + "files": [ + "src/bootstrap.php" + ], + "exclude-from-classmap": [ + "/tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Alexander Lisachenko", + "email": "lisachenko.it@gmail.com" + } + ], + "description": "Provides reflection information, based on raw source", + "time": "2017-09-03T14:59:13+00:00" + }, + { + "name": "greg-1-anderson/composer-test-scenarios", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/greg-1-anderson/composer-test-scenarios.git", + "reference": "dc81660f44a8b126d7fa947156c98e34f45af3e9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/greg-1-anderson/composer-test-scenarios/zipball/dc81660f44a8b126d7fa947156c98e34f45af3e9", + "reference": "dc81660f44a8b126d7fa947156c98e34f45af3e9", + "shasum": "" + }, + "bin": [ + "scripts/create-scenario", + "scripts/install-scenario" + ], + "type": "library", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Greg Anderson", + "email": "greg.1.anderson@greenknowe.org" + } + ], + "description": "Useful scripts for testing multiple sets of Composer dependencies.", + "time": "2017-12-13T18:41:24+00:00" + }, + { + "name": "guzzlehttp/guzzle", + "version": "6.3.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/guzzle.git", + "reference": "f4db5a78a5ea468d4831de7f0bf9d9415e348699" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/f4db5a78a5ea468d4831de7f0bf9d9415e348699", + "reference": "f4db5a78a5ea468d4831de7f0bf9d9415e348699", + "shasum": "" + }, + "require": { + "guzzlehttp/promises": "^1.0", + "guzzlehttp/psr7": "^1.4", + "php": ">=5.5" }, "require-dev": { - "doctrine/cache": "*", - "monolog/monolog": "1.*", - "phpunit/phpunit": "3.7.*", - "psr/log": "1.0.*", - "symfony/class-loader": "*", - "zendframework/zend-cache": "<2.3", - "zendframework/zend-log": "<2.3" + "ext-curl": "*", + "phpunit/phpunit": "^4.0 || ^5.0", + "psr/log": "^1.0" + }, + "suggest": { + "psr/log": "Required for using the Log middleware" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.8-dev" + "dev-master": "6.2-dev" } }, "autoload": { - "psr-0": { - "Guzzle": "src/", - "Guzzle\\Tests": "tests/" + "files": [ + "src/functions_include.php" + ], + "psr-4": { + "GuzzleHttp\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -1502,13 +1612,9 @@ "name": "Michael Dowling", "email": "mtdowling@gmail.com", "homepage": "https://github.com/mtdowling" - }, - { - "name": "Guzzle Community", - "homepage": "https://github.com/guzzle/guzzle/contributors" } ], - "description": "Guzzle is a PHP HTTP client library and framework for building RESTful web service clients", + "description": "Guzzle is a PHP HTTP client library", "homepage": "http://guzzlephp.org/", "keywords": [ "client", @@ -1519,32 +1625,27 @@ "rest", "web service" ], - "abandoned": "guzzlehttp/guzzle", - "time": "2014-01-28 22:29:15" + "time": "2017-06-22T18:50:49+00:00" }, { - "name": "guzzlehttp/psr7", - "version": "1.3.1", + "name": "guzzlehttp/promises", + "version": "v1.3.1", "source": { "type": "git", - "url": "https://github.com/guzzle/psr7.git", - "reference": "5c6447c9df362e8f8093bda8f5d8873fe5c7f65b" + "url": "https://github.com/guzzle/promises.git", + "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/5c6447c9df362e8f8093bda8f5d8873fe5c7f65b", - "reference": "5c6447c9df362e8f8093bda8f5d8873fe5c7f65b", + "url": "https://api.github.com/repos/guzzle/promises/zipball/a59da6cf61d80060647ff4d3eb2c03a2bc694646", + "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646", "shasum": "" }, "require": { - "php": ">=5.4.0", - "psr/http-message": "~1.0" - }, - "provide": { - "psr/http-message-implementation": "1.0" + "php": ">=5.5.0" }, "require-dev": { - "phpunit/phpunit": "~4.0" + "phpunit/phpunit": "^4.0" }, "type": "library", "extra": { @@ -1554,7 +1655,7 @@ }, "autoload": { "psr-4": { - "GuzzleHttp\\Psr7\\": "src/" + "GuzzleHttp\\Promise\\": "src/" }, "files": [ "src/functions_include.php" @@ -1571,47 +1672,49 @@ "homepage": "https://github.com/mtdowling" } ], - "description": "PSR-7 message implementation", + "description": "Guzzle promises library", "keywords": [ - "http", - "message", - "stream", - "uri" + "promise" ], - "time": "2016-06-24 23:00:38" + "time": "2016-12-20T10:07:11+00:00" }, { - "name": "henrikbjorn/lurker", - "version": "1.2.0", + "name": "guzzlehttp/psr7", + "version": "1.4.2", "source": { "type": "git", - "url": "https://github.com/flint/Lurker.git", - "reference": "712d3ef19bef161daa2ba0e0237c6b875587a089" + "url": "https://github.com/guzzle/psr7.git", + "reference": "f5b8a8512e2b58b0071a7280e39f14f72e05d87c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/flint/Lurker/zipball/712d3ef19bef161daa2ba0e0237c6b875587a089", - "reference": "712d3ef19bef161daa2ba0e0237c6b875587a089", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/f5b8a8512e2b58b0071a7280e39f14f72e05d87c", + "reference": "f5b8a8512e2b58b0071a7280e39f14f72e05d87c", "shasum": "" }, "require": { - "php": ">=5.3.3", - "symfony/config": "^2.2|^3.0", - "symfony/event-dispatcher": "^2.2|^3.0" + "php": ">=5.4.0", + "psr/http-message": "~1.0" }, - "suggest": { - "ext-inotify": ">=0.1.6" + "provide": { + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "1.4-dev" } }, "autoload": { - "psr-0": { - "Lurker": "src" - } + "psr-4": { + "GuzzleHttp\\Psr7\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -1619,25 +1722,26 @@ ], "authors": [ { - "name": "Yaroslav Kiliba", - "email": "om.dattaya@gmail.com" - }, - { - "name": "Konstantin Kudryashov", - "email": "ever.zet@gmail.com" + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" }, { - "name": "Henrik Bjrnskov", - "email": "henrik@bjrnskov.dk" + "name": "Tobias Schultze", + "homepage": "https://github.com/Tobion" } ], - "description": "Resource Watcher.", + "description": "PSR-7 message implementation that also provides common utility methods", "keywords": [ - "filesystem", - "resource", - "watching" + "http", + "message", + "request", + "response", + "stream", + "uri", + "url" ], - "time": "2016-03-16 15:22:20" + "time": "2017-03-20T17:10:46+00:00" }, { "name": "jakubledl/dissect", @@ -1692,67 +1796,124 @@ "parser", "parsing" ], - "time": "2013-01-29 21:29:14" + "time": "2013-01-29T21:29:14+00:00" }, { "name": "myclabs/deep-copy", - "version": "1.5.5", + "version": "1.7.0", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "399c1f9781e222f6eb6cc238796f5200d1b7f108" + "reference": "3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/399c1f9781e222f6eb6cc238796f5200d1b7f108", - "reference": "399c1f9781e222f6eb6cc238796f5200d1b7f108", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e", + "reference": "3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e", "shasum": "" }, "require": { - "php": ">=5.4.0" + "php": "^5.6 || ^7.0" }, "require-dev": { - "doctrine/collections": "1.*", - "phpunit/phpunit": "~4.1" + "doctrine/collections": "^1.0", + "doctrine/common": "^2.6", + "phpunit/phpunit": "^4.1" }, "type": "library", "autoload": { "psr-4": { "DeepCopy\\": "src/DeepCopy/" - } + }, + "files": [ + "src/DeepCopy/deep_copy.php" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "description": "Create deep copies (clones) of your objects", - "homepage": "https://github.com/myclabs/DeepCopy", "keywords": [ - "clone", - "copy", - "duplicate", - "object", - "object graph" + "clone", + "copy", + "duplicate", + "object", + "object graph" + ], + "time": "2017-10-19T19:58:43+00:00" + }, + { + "name": "natxet/CssMin", + "version": "v3.0.4", + "source": { + "type": "git", + "url": "https://github.com/natxet/CssMin.git", + "reference": "92de3fe3ccb4f8298d31952490ef7d5395855c39" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/natxet/CssMin/zipball/92de3fe3ccb4f8298d31952490ef7d5395855c39", + "reference": "92de3fe3ccb4f8298d31952490ef7d5395855c39", + "shasum": "" + }, + "require": { + "php": ">=5.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Joe Scylla", + "email": "joe.scylla@gmail.com", + "homepage": "https://profiles.google.com/joe.scylla" + } + ], + "description": "Minifying CSS", + "homepage": "http://code.google.com/p/cssmin/", + "keywords": [ + "css", + "minify" ], - "time": "2016-10-31 17:19:45" + "time": "2015-09-25T11:13:11+00:00" }, { - "name": "natxet/CssMin", - "version": "v3.0.4", + "name": "nikic/php-parser", + "version": "v3.1.3", "source": { "type": "git", - "url": "https://github.com/natxet/CssMin.git", - "reference": "92de3fe3ccb4f8298d31952490ef7d5395855c39" + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "579f4ce846734a1cf55d6a531d00ca07a43e3cda" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/natxet/CssMin/zipball/92de3fe3ccb4f8298d31952490ef7d5395855c39", - "reference": "92de3fe3ccb4f8298d31952490ef7d5395855c39", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/579f4ce846734a1cf55d6a531d00ca07a43e3cda", + "reference": "579f4ce846734a1cf55d6a531d00ca07a43e3cda", "shasum": "" }, "require": { - "php": ">=5.0" + "ext-tokenizer": "*", + "php": ">=5.5" }, + "require-dev": { + "phpunit/phpunit": "~4.0|~5.0" + }, + "bin": [ + "bin/php-parse" + ], "type": "library", "extra": { "branch-alias": { @@ -1760,28 +1921,25 @@ } }, "autoload": { - "classmap": [ - "src/" - ] + "psr-4": { + "PhpParser\\": "lib/PhpParser" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Joe Scylla", - "email": "joe.scylla@gmail.com", - "homepage": "https://profiles.google.com/joe.scylla" + "name": "Nikita Popov" } ], - "description": "Minifying CSS", - "homepage": "http://code.google.com/p/cssmin/", + "description": "A PHP parser written in PHP", "keywords": [ - "css", - "minify" + "parser", + "php" ], - "time": "2015-09-25 11:13:11" + "time": "2017-12-26T14:43:21+00:00" }, { "name": "patchwork/jsqueeze", @@ -1828,20 +1986,20 @@ "javascript", "minification" ], - "time": "2016-04-19 09:28:22" + "time": "2016-04-19T09:28:22+00:00" }, { "name": "pear/archive_tar", - "version": "1.4.2", + "version": "1.4.3", "source": { "type": "git", "url": "https://github.com/pear/Archive_Tar.git", - "reference": "bdd47347df76dbaa89227c5e1afd6f6809985b4c" + "reference": "43455c960da70e655c6bdf8ea2bc8cc1a6034afb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/pear/Archive_Tar/zipball/bdd47347df76dbaa89227c5e1afd6f6809985b4c", - "reference": "bdd47347df76dbaa89227c5e1afd6f6809985b4c", + "url": "https://api.github.com/repos/pear/Archive_Tar/zipball/43455c960da70e655c6bdf8ea2bc8cc1a6034afb", + "reference": "43455c960da70e655c6bdf8ea2bc8cc1a6034afb", "shasum": "" }, "require": { @@ -1894,7 +2052,7 @@ "archive", "tar" ], - "time": "2016-02-25 10:30:39" + "time": "2017-06-11T17:28:11+00:00" }, { "name": "pear/console_getopt", @@ -1941,24 +2099,24 @@ } ], "description": "More info available on: http://pear.php.net/package/Console_Getopt", - "time": "2015-07-20 20:28:12" + "time": "2015-07-20T20:28:12+00:00" }, { "name": "pear/pear-core-minimal", - "version": "v1.10.1", + "version": "v1.10.3", "source": { "type": "git", "url": "https://github.com/pear/pear-core-minimal.git", - "reference": "cae0f1ce0cb5bddb611b0a652d322905a65a5896" + "reference": "070f0b600b2caca2501e2c9b7e553016e4b0d115" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/pear/pear-core-minimal/zipball/cae0f1ce0cb5bddb611b0a652d322905a65a5896", - "reference": "cae0f1ce0cb5bddb611b0a652d322905a65a5896", + "url": "https://api.github.com/repos/pear/pear-core-minimal/zipball/070f0b600b2caca2501e2c9b7e553016e4b0d115", + "reference": "070f0b600b2caca2501e2c9b7e553016e4b0d115", "shasum": "" }, "require": { - "pear/console_getopt": "~1.3", + "pear/console_getopt": "~1.4", "pear/pear_exception": "~1.0" }, "replace": { @@ -1985,7 +2143,7 @@ } ], "description": "Minimal set of PEAR core files to be used as composer dependency", - "time": "2015-10-17 11:41:19" + "time": "2017-02-28T16:46:11+00:00" }, { "name": "pear/pear_exception", @@ -2040,36 +2198,183 @@ "keywords": [ "exception" ], - "time": "2015-02-10 20:07:52" + "time": "2015-02-10T20:07:52+00:00" + }, + { + "name": "phpdocumentor/reflection-common", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionCommon.git", + "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", + "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", + "shasum": "" + }, + "require": { + "php": ">=5.5" + }, + "require-dev": { + "phpunit/phpunit": "^4.6" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": [ + "src" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jaap van Otterdijk", + "email": "opensource@ijaap.nl" + } + ], + "description": "Common reflection classes used by phpdocumentor to reflect the code structure", + "homepage": "http://www.phpdoc.org", + "keywords": [ + "FQSEN", + "phpDocumentor", + "phpdoc", + "reflection", + "static analysis" + ], + "time": "2017-09-11T18:02:19+00:00" + }, + { + "name": "phpdocumentor/reflection-docblock", + "version": "3.3.2", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "bf329f6c1aadea3299f08ee804682b7c45b326a2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/bf329f6c1aadea3299f08ee804682b7c45b326a2", + "reference": "bf329f6c1aadea3299f08ee804682b7c45b326a2", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0", + "phpdocumentor/reflection-common": "^1.0.0", + "phpdocumentor/type-resolver": "^0.4.0", + "webmozart/assert": "^1.0" + }, + "require-dev": { + "mockery/mockery": "^0.9.4", + "phpunit/phpunit": "^4.4" + }, + "type": "library", + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + } + ], + "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", + "time": "2017-11-10T14:09:06+00:00" + }, + { + "name": "phpdocumentor/type-resolver", + "version": "0.4.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/TypeResolver.git", + "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/9c977708995954784726e25d0cd1dddf4e65b0f7", + "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7", + "shasum": "" + }, + "require": { + "php": "^5.5 || ^7.0", + "phpdocumentor/reflection-common": "^1.0" + }, + "require-dev": { + "mockery/mockery": "^0.9.4", + "phpunit/phpunit": "^5.2||^4.8.24" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + } + ], + "time": "2017-07-14T14:27:02+00:00" }, { "name": "phpspec/prophecy", - "version": "v1.6.1", + "version": "1.7.3", "source": { "type": "git", "url": "https://github.com/phpspec/prophecy.git", - "reference": "58a8137754bc24b25740d4281399a4a3596058e0" + "reference": "e4ed002c67da8eceb0eb8ddb8b3847bb53c5c2bf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/58a8137754bc24b25740d4281399a4a3596058e0", - "reference": "58a8137754bc24b25740d4281399a4a3596058e0", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/e4ed002c67da8eceb0eb8ddb8b3847bb53c5c2bf", + "reference": "e4ed002c67da8eceb0eb8ddb8b3847bb53c5c2bf", "shasum": "" }, "require": { "doctrine/instantiator": "^1.0.2", "php": "^5.3|^7.0", - "phpdocumentor/reflection-docblock": "^2.0|^3.0.2", - "sebastian/comparator": "^1.1", - "sebastian/recursion-context": "^1.0" + "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0", + "sebastian/comparator": "^1.1|^2.0", + "sebastian/recursion-context": "^1.0|^2.0|^3.0" }, "require-dev": { - "phpspec/phpspec": "^2.0" + "phpspec/phpspec": "^2.5|^3.2", + "phpunit/phpunit": "^4.8.35 || ^5.7" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.6.x-dev" + "dev-master": "1.7.x-dev" } }, "autoload": { @@ -2102,39 +2407,39 @@ "spy", "stub" ], - "time": "2016-06-07 08:13:47" + "time": "2017-11-24T13:59:53+00:00" }, { "name": "phpunit/php-code-coverage", - "version": "4.0.2", + "version": "4.0.8", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "6cba06ff75a1a63a71033e1a01b89056f3af1e8d" + "reference": "ef7b2f56815df854e66ceaee8ebe9393ae36a40d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/6cba06ff75a1a63a71033e1a01b89056f3af1e8d", - "reference": "6cba06ff75a1a63a71033e1a01b89056f3af1e8d", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/ef7b2f56815df854e66ceaee8ebe9393ae36a40d", + "reference": "ef7b2f56815df854e66ceaee8ebe9393ae36a40d", "shasum": "" }, "require": { + "ext-dom": "*", + "ext-xmlwriter": "*", "php": "^5.6 || ^7.0", - "phpunit/php-file-iterator": "~1.3", - "phpunit/php-text-template": "~1.2", - "phpunit/php-token-stream": "^1.4.2", - "sebastian/code-unit-reverse-lookup": "~1.0", + "phpunit/php-file-iterator": "^1.3", + "phpunit/php-text-template": "^1.2", + "phpunit/php-token-stream": "^1.4.2 || ^2.0", + "sebastian/code-unit-reverse-lookup": "^1.0", "sebastian/environment": "^1.3.2 || ^2.0", - "sebastian/version": "~1.0|~2.0" + "sebastian/version": "^1.0 || ^2.0" }, "require-dev": { - "ext-xdebug": ">=2.1.4", - "phpunit/phpunit": "^5.4" + "ext-xdebug": "^2.1.4", + "phpunit/phpunit": "^5.7" }, "suggest": { - "ext-dom": "*", - "ext-xdebug": ">=2.4.0", - "ext-xmlwriter": "*" + "ext-xdebug": "^2.5.1" }, "type": "library", "extra": { @@ -2165,20 +2470,20 @@ "testing", "xunit" ], - "time": "2016-11-01 05:06:24" + "time": "2017-04-02T07:44:40+00:00" }, { "name": "phpunit/php-file-iterator", - "version": "1.4.1", + "version": "1.4.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "6150bf2c35d3fc379e50c7602b75caceaa39dbf0" + "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/6150bf2c35d3fc379e50c7602b75caceaa39dbf0", - "reference": "6150bf2c35d3fc379e50c7602b75caceaa39dbf0", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/730b01bc3e867237eaac355e06a36b85dd93a8b4", + "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4", "shasum": "" }, "require": { @@ -2212,7 +2517,7 @@ "filesystem", "iterator" ], - "time": "2015-06-21 13:08:43" + "time": "2017-11-27T13:52:08+00:00" }, { "name": "phpunit/php-text-template", @@ -2253,29 +2558,34 @@ "keywords": [ "template" ], - "time": "2015-06-21 13:50:34" + "time": "2015-06-21T13:50:34+00:00" }, { "name": "phpunit/php-timer", - "version": "1.0.8", + "version": "1.0.9", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "38e9124049cf1a164f1e4537caf19c99bf1eb260" + "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/38e9124049cf1a164f1e4537caf19c99bf1eb260", - "reference": "38e9124049cf1a164f1e4537caf19c99bf1eb260", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", + "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": "^5.3.3 || ^7.0" }, "require-dev": { - "phpunit/phpunit": "~4|~5" + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, "autoload": { "classmap": [ "src/" @@ -2297,20 +2607,20 @@ "keywords": [ "timer" ], - "time": "2016-05-12 18:03:57" + "time": "2017-02-26T11:10:40+00:00" }, { "name": "phpunit/php-token-stream", - "version": "1.4.8", + "version": "1.4.12", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-token-stream.git", - "reference": "3144ae21711fb6cac0b1ab4cbe63b75ce3d4e8da" + "reference": "1ce90ba27c42e4e44e6d8458241466380b51fa16" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/3144ae21711fb6cac0b1ab4cbe63b75ce3d4e8da", - "reference": "3144ae21711fb6cac0b1ab4cbe63b75ce3d4e8da", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/1ce90ba27c42e4e44e6d8458241466380b51fa16", + "reference": "1ce90ba27c42e4e44e6d8458241466380b51fa16", "shasum": "" }, "require": { @@ -2346,20 +2656,20 @@ "keywords": [ "tokenizer" ], - "time": "2015-09-15 10:49:45" + "time": "2017-12-04T08:55:13+00:00" }, { "name": "phpunit/phpunit", - "version": "5.6.3", + "version": "5.7.26", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "a9de0dbafeb6b1391b391fbb034734cb0af9f67c" + "reference": "7fbc25c13309de0c4c9bb48b7361f1eca34c7fbd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/a9de0dbafeb6b1391b391fbb034734cb0af9f67c", - "reference": "a9de0dbafeb6b1391b391fbb034734cb0af9f67c", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/7fbc25c13309de0c4c9bb48b7361f1eca34c7fbd", + "reference": "7fbc25c13309de0c4c9bb48b7361f1eca34c7fbd", "shasum": "" }, "require": { @@ -2370,21 +2680,21 @@ "ext-xml": "*", "myclabs/deep-copy": "~1.3", "php": "^5.6 || ^7.0", - "phpspec/prophecy": "^1.3.1", - "phpunit/php-code-coverage": "^4.0.1", + "phpspec/prophecy": "^1.6.2", + "phpunit/php-code-coverage": "^4.0.4", "phpunit/php-file-iterator": "~1.4", "phpunit/php-text-template": "~1.2", "phpunit/php-timer": "^1.0.6", "phpunit/phpunit-mock-objects": "^3.2", - "sebastian/comparator": "~1.1", - "sebastian/diff": "~1.2", - "sebastian/environment": "^1.3 || ^2.0", - "sebastian/exporter": "~1.2", - "sebastian/global-state": "~1.0", - "sebastian/object-enumerator": "~1.0", + "sebastian/comparator": "^1.2.4", + "sebastian/diff": "^1.4.3", + "sebastian/environment": "^1.3.4 || ^2.0", + "sebastian/exporter": "~2.0", + "sebastian/global-state": "^1.1", + "sebastian/object-enumerator": "~2.0", "sebastian/resource-operations": "~1.0", - "sebastian/version": "~1.0|~2.0", - "symfony/yaml": "~2.1|~3.0" + "sebastian/version": "~1.0.3|~2.0", + "symfony/yaml": "~2.1|~3.0|~4.0" }, "conflict": { "phpdocumentor/reflection-docblock": "3.0.2" @@ -2402,7 +2712,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "5.6.x-dev" + "dev-master": "5.7.x-dev" } }, "autoload": { @@ -2428,27 +2738,27 @@ "testing", "xunit" ], - "time": "2016-11-14 06:39:40" + "time": "2017-12-17T06:14:38+00:00" }, { "name": "phpunit/phpunit-mock-objects", - "version": "3.4.0", + "version": "3.4.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", - "reference": "238d7a2723bce689c79eeac9c7d5e1d623bb9dc2" + "reference": "a23b761686d50a560cc56233b9ecf49597cc9118" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/238d7a2723bce689c79eeac9c7d5e1d623bb9dc2", - "reference": "238d7a2723bce689c79eeac9c7d5e1d623bb9dc2", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/a23b761686d50a560cc56233b9ecf49597cc9118", + "reference": "a23b761686d50a560cc56233b9ecf49597cc9118", "shasum": "" }, "require": { "doctrine/instantiator": "^1.0.2", "php": "^5.6 || ^7.0", "phpunit/php-text-template": "^1.2", - "sebastian/exporter": "^1.2" + "sebastian/exporter": "^1.2 || ^2.0" }, "conflict": { "phpunit/phpunit": "<5.4.0" @@ -2487,7 +2797,7 @@ "mock", "xunit" ], - "time": "2016-10-09 07:01:45" + "time": "2017-06-30T09:13:00+00:00" }, { "name": "psr/http-message", @@ -2537,43 +2847,51 @@ "request", "response" ], - "time": "2016-08-06 14:39:51" + "time": "2016-08-06T14:39:51+00:00" }, { "name": "satooshi/php-coveralls", - "version": "v1.0.1", + "version": "v2.0.0", "source": { "type": "git", - "url": "https://github.com/satooshi/php-coveralls.git", - "reference": "da51d304fe8622bf9a6da39a8446e7afd432115c" + "url": "https://github.com/php-coveralls/php-coveralls.git", + "reference": "3eaf7eb689cdf6b86801a3843940d974dc657068" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/satooshi/php-coveralls/zipball/da51d304fe8622bf9a6da39a8446e7afd432115c", - "reference": "da51d304fe8622bf9a6da39a8446e7afd432115c", + "url": "https://api.github.com/repos/php-coveralls/php-coveralls/zipball/3eaf7eb689cdf6b86801a3843940d974dc657068", + "reference": "3eaf7eb689cdf6b86801a3843940d974dc657068", "shasum": "" }, "require": { "ext-json": "*", "ext-simplexml": "*", - "guzzle/guzzle": "^2.8|^3.0", - "php": ">=5.3.3", + "guzzlehttp/guzzle": "^6.0", + "php": "^5.5 || ^7.0", "psr/log": "^1.0", - "symfony/config": "^2.1|^3.0", - "symfony/console": "^2.1|^3.0", - "symfony/stopwatch": "^2.0|^3.0", - "symfony/yaml": "^2.0|^3.0" + "symfony/config": "^2.1 || ^3.0 || ^4.0", + "symfony/console": "^2.1 || ^3.0 || ^4.0", + "symfony/stopwatch": "^2.0 || ^3.0 || ^4.0", + "symfony/yaml": "^2.0 || ^3.0 || ^4.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.4.3 || ^6.0" }, "suggest": { "symfony/http-kernel": "Allows Symfony integration" }, "bin": [ - "bin/coveralls" + "bin/php-coveralls" ], "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, "autoload": { "psr-4": { - "Satooshi\\": "src/Satooshi/" + "PhpCoveralls\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -2584,38 +2902,55 @@ { "name": "Kitamura Satoshi", "email": "with.no.parachute@gmail.com", - "homepage": "https://www.facebook.com/satooshi.jp" + "homepage": "https://www.facebook.com/satooshi.jp", + "role": "Original creator" + }, + { + "name": "Takashi Matsuo", + "email": "tmatsuo@google.com" + }, + { + "name": "Google Inc" + }, + { + "name": "Dariusz Ruminski", + "email": "dariusz.ruminski@gmail.com", + "homepage": "https://github.com/keradus" + }, + { + "name": "Contributors", + "homepage": "https://github.com/php-coveralls/php-coveralls/graphs/contributors" } ], "description": "PHP client library for Coveralls API", - "homepage": "https://github.com/satooshi/php-coveralls", + "homepage": "https://github.com/php-coveralls/php-coveralls", "keywords": [ "ci", "coverage", "github", "test" ], - "time": "2016-01-20 17:35:46" + "time": "2017-12-08T14:28:16+00:00" }, { "name": "sebastian/code-unit-reverse-lookup", - "version": "1.0.0", + "version": "1.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", - "reference": "c36f5e7cfce482fde5bf8d10d41a53591e0198fe" + "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/c36f5e7cfce482fde5bf8d10d41a53591e0198fe", - "reference": "c36f5e7cfce482fde5bf8d10d41a53591e0198fe", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", + "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", "shasum": "" }, "require": { - "php": ">=5.6" + "php": "^5.6 || ^7.0" }, "require-dev": { - "phpunit/phpunit": "~5" + "phpunit/phpunit": "^5.7 || ^6.0" }, "type": "library", "extra": { @@ -2640,26 +2975,26 @@ ], "description": "Looks up which function or method a line of code belongs to", "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", - "time": "2016-02-13 06:45:14" + "time": "2017-03-04T06:30:41+00:00" }, { "name": "sebastian/comparator", - "version": "1.2.0", + "version": "1.2.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "937efb279bd37a375bcadf584dec0726f84dbf22" + "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/937efb279bd37a375bcadf584dec0726f84dbf22", - "reference": "937efb279bd37a375bcadf584dec0726f84dbf22", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2b7424b55f5047b47ac6e5ccb20b2aea4011d9be", + "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be", "shasum": "" }, "require": { "php": ">=5.3.3", "sebastian/diff": "~1.2", - "sebastian/exporter": "~1.2" + "sebastian/exporter": "~1.2 || ~2.0" }, "require-dev": { "phpunit/phpunit": "~4.4" @@ -2704,27 +3039,27 @@ "compare", "equality" ], - "time": "2015-07-26 15:48:44" + "time": "2017-01-29T09:50:25+00:00" }, { "name": "sebastian/diff", - "version": "1.4.1", + "version": "1.4.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "13edfd8706462032c2f52b4b862974dd46b71c9e" + "reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/13edfd8706462032c2f52b4b862974dd46b71c9e", - "reference": "13edfd8706462032c2f52b4b862974dd46b71c9e", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/7f066a26a962dbe58ddea9f72a4e82874a3975a4", + "reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": "^5.3.3 || ^7.0" }, "require-dev": { - "phpunit/phpunit": "~4.8" + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" }, "type": "library", "extra": { @@ -2756,32 +3091,32 @@ "keywords": [ "diff" ], - "time": "2015-12-08 07:14:41" + "time": "2017-05-22T07:24:03+00:00" }, { "name": "sebastian/environment", - "version": "1.3.8", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "be2c607e43ce4c89ecd60e75c6a85c126e754aea" + "reference": "5795ffe5dc5b02460c3e34222fee8cbe245d8fac" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/be2c607e43ce4c89ecd60e75c6a85c126e754aea", - "reference": "be2c607e43ce4c89ecd60e75c6a85c126e754aea", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/5795ffe5dc5b02460c3e34222fee8cbe245d8fac", + "reference": "5795ffe5dc5b02460c3e34222fee8cbe245d8fac", "shasum": "" }, "require": { - "php": "^5.3.3 || ^7.0" + "php": "^5.6 || ^7.0" }, "require-dev": { - "phpunit/phpunit": "^4.8 || ^5.0" + "phpunit/phpunit": "^5.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.3.x-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { @@ -2806,25 +3141,25 @@ "environment", "hhvm" ], - "time": "2016-08-18 05:49:44" + "time": "2016-11-26T07:53:53+00:00" }, { "name": "sebastian/exporter", - "version": "1.2.2", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4" + "reference": "ce474bdd1a34744d7ac5d6aad3a46d48d9bac4c4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/42c4c2eec485ee3e159ec9884f95b431287edde4", - "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/ce474bdd1a34744d7ac5d6aad3a46d48d9bac4c4", + "reference": "ce474bdd1a34744d7ac5d6aad3a46d48d9bac4c4", "shasum": "" }, "require": { "php": ">=5.3.3", - "sebastian/recursion-context": "~1.0" + "sebastian/recursion-context": "~2.0" }, "require-dev": { "ext-mbstring": "*", @@ -2833,7 +3168,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.3.x-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { @@ -2873,7 +3208,7 @@ "export", "exporter" ], - "time": "2016-06-17 09:04:28" + "time": "2016-11-19T08:54:04+00:00" }, { "name": "sebastian/global-state", @@ -2924,25 +3259,25 @@ "keywords": [ "global state" ], - "time": "2015-10-12 03:26:01" + "time": "2015-10-12T03:26:01+00:00" }, { "name": "sebastian/object-enumerator", - "version": "1.0.0", + "version": "2.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "d4ca2fb70344987502567bc50081c03e6192fb26" + "reference": "1311872ac850040a79c3c058bea3e22d0f09cbb7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/d4ca2fb70344987502567bc50081c03e6192fb26", - "reference": "d4ca2fb70344987502567bc50081c03e6192fb26", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/1311872ac850040a79c3c058bea3e22d0f09cbb7", + "reference": "1311872ac850040a79c3c058bea3e22d0f09cbb7", "shasum": "" }, "require": { "php": ">=5.6", - "sebastian/recursion-context": "~1.0" + "sebastian/recursion-context": "~2.0" }, "require-dev": { "phpunit/phpunit": "~5" @@ -2950,7 +3285,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { @@ -2970,20 +3305,20 @@ ], "description": "Traverses array structures and object graphs to enumerate all referenced objects", "homepage": "https://github.com/sebastianbergmann/object-enumerator/", - "time": "2016-01-28 13:25:10" + "time": "2017-02-18T15:18:39+00:00" }, { "name": "sebastian/recursion-context", - "version": "1.0.3", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "79860854756415e1cec8d186c9cf261cafd87dfc" + "reference": "2c3ba150cbec723aa057506e73a8d33bdb286c9a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/79860854756415e1cec8d186c9cf261cafd87dfc", - "reference": "79860854756415e1cec8d186c9cf261cafd87dfc", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/2c3ba150cbec723aa057506e73a8d33bdb286c9a", + "reference": "2c3ba150cbec723aa057506e73a8d33bdb286c9a", "shasum": "" }, "require": { @@ -2995,7 +3330,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { @@ -3023,7 +3358,7 @@ ], "description": "Provides functionality to recursively process PHP variables", "homepage": "http://www.github.com/sebastianbergmann/recursion-context", - "time": "2016-11-14 15:54:23" + "time": "2016-11-19T07:33:16+00:00" }, { "name": "sebastian/resource-operations", @@ -3065,20 +3400,20 @@ ], "description": "Provides a list of PHP built-in functions that operate on resources", "homepage": "https://www.github.com/sebastianbergmann/resource-operations", - "time": "2015-07-28 20:34:47" + "time": "2015-07-28T20:34:47+00:00" }, { "name": "sebastian/version", - "version": "2.0.0", + "version": "2.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/version.git", - "reference": "c829badbd8fdf16a0bad8aa7fa7971c029f1b9c5" + "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c829badbd8fdf16a0bad8aa7fa7971c029f1b9c5", - "reference": "c829badbd8fdf16a0bad8aa7fa7971c029f1b9c5", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019", + "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019", "shasum": "" }, "require": { @@ -3108,20 +3443,20 @@ ], "description": "Library that helps with managing the version number of Git-hosted PHP projects", "homepage": "https://github.com/sebastianbergmann/version", - "time": "2016-02-04 12:56:52" + "time": "2016-10-03T07:35:21+00:00" }, { "name": "squizlabs/php_codesniffer", - "version": "2.7.0", + "version": "2.9.1", "source": { "type": "git", "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", - "reference": "571e27b6348e5b3a637b2abc82ac0d01e6d7bbed" + "reference": "dcbed1074f8244661eecddfc2a675430d8d33f62" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/571e27b6348e5b3a637b2abc82ac0d01e6d7bbed", - "reference": "571e27b6348e5b3a637b2abc82ac0d01e6d7bbed", + "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/dcbed1074f8244661eecddfc2a675430d8d33f62", + "reference": "dcbed1074f8244661eecddfc2a675430d8d33f62", "shasum": "" }, "require": { @@ -3186,29 +3521,29 @@ "phpcs", "standards" ], - "time": "2016-09-01 23:53:02" + "time": "2017-05-22T02:43:20+00:00" }, { "name": "symfony/browser-kit", - "version": "v3.1.6", + "version": "v3.4.2", "source": { "type": "git", "url": "https://github.com/symfony/browser-kit.git", - "reference": "901319a31c9b3cee7857b4aeeb81b5d64dfa34fc" + "reference": "f761b4ecdd23a451c2cae6fba704d8b207cbb045" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/browser-kit/zipball/901319a31c9b3cee7857b4aeeb81b5d64dfa34fc", - "reference": "901319a31c9b3cee7857b4aeeb81b5d64dfa34fc", + "url": "https://api.github.com/repos/symfony/browser-kit/zipball/f761b4ecdd23a451c2cae6fba704d8b207cbb045", + "reference": "f761b4ecdd23a451c2cae6fba704d8b207cbb045", "shasum": "" }, "require": { - "php": ">=5.5.9", - "symfony/dom-crawler": "~2.8|~3.0" + "php": "^5.5.9|>=7.0.8", + "symfony/dom-crawler": "~2.8|~3.0|~4.0" }, "require-dev": { - "symfony/css-selector": "~2.8|~3.0", - "symfony/process": "~2.8|~3.0" + "symfony/css-selector": "~2.8|~3.0|~4.0", + "symfony/process": "~2.8|~3.0|~4.0" }, "suggest": { "symfony/process": "" @@ -3216,7 +3551,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "3.4-dev" } }, "autoload": { @@ -3243,25 +3578,34 @@ ], "description": "Symfony BrowserKit Component", "homepage": "https://symfony.com", - "time": "2016-09-06 11:02:40" + "time": "2017-12-11T22:06:16+00:00" }, { "name": "symfony/config", - "version": "v3.1.6", + "version": "v3.4.2", "source": { "type": "git", "url": "https://github.com/symfony/config.git", - "reference": "949e7e846743a7f9e46dc50eb639d5fde1f53341" + "reference": "e57211b88aa889fefac1cb36866db04100b0f21c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/949e7e846743a7f9e46dc50eb639d5fde1f53341", - "reference": "949e7e846743a7f9e46dc50eb639d5fde1f53341", + "url": "https://api.github.com/repos/symfony/config/zipball/e57211b88aa889fefac1cb36866db04100b0f21c", + "reference": "e57211b88aa889fefac1cb36866db04100b0f21c", "shasum": "" }, "require": { - "php": ">=5.5.9", - "symfony/filesystem": "~2.8|~3.0" + "php": "^5.5.9|>=7.0.8", + "symfony/filesystem": "~2.8|~3.0|~4.0" + }, + "conflict": { + "symfony/dependency-injection": "<3.3", + "symfony/finder": "<3.3" + }, + "require-dev": { + "symfony/dependency-injection": "~3.3|~4.0", + "symfony/finder": "~3.3|~4.0", + "symfony/yaml": "~3.0|~4.0" }, "suggest": { "symfony/yaml": "To use the yaml reference dumper" @@ -3269,7 +3613,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "3.4-dev" } }, "autoload": { @@ -3296,29 +3640,29 @@ ], "description": "Symfony Config Component", "homepage": "https://symfony.com", - "time": "2016-09-25 08:27:07" + "time": "2017-12-14T19:40:10+00:00" }, { "name": "symfony/css-selector", - "version": "v3.1.6", + "version": "v3.4.2", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "ca809c64072e0fe61c1c7fb3c76cdc32265042ac" + "reference": "eac760b414cf1f64362c3dd047b989e4db121332" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/ca809c64072e0fe61c1c7fb3c76cdc32265042ac", - "reference": "ca809c64072e0fe61c1c7fb3c76cdc32265042ac", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/eac760b414cf1f64362c3dd047b989e4db121332", + "reference": "eac760b414cf1f64362c3dd047b989e4db121332", "shasum": "" }, "require": { - "php": ">=5.5.9" + "php": "^5.5.9|>=7.0.8" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "3.4-dev" } }, "autoload": { @@ -3349,28 +3693,28 @@ ], "description": "Symfony CssSelector Component", "homepage": "https://symfony.com", - "time": "2016-09-06 11:02:40" + "time": "2017-12-14T19:40:10+00:00" }, { "name": "symfony/dom-crawler", - "version": "v3.1.6", + "version": "v3.4.2", "source": { "type": "git", "url": "https://github.com/symfony/dom-crawler.git", - "reference": "59eee3c76eb89f21857798620ebdad7a05ad14f4" + "reference": "dc847845c66fa68ad4522ed27e62b9b9dd12ab3b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/59eee3c76eb89f21857798620ebdad7a05ad14f4", - "reference": "59eee3c76eb89f21857798620ebdad7a05ad14f4", + "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/dc847845c66fa68ad4522ed27e62b9b9dd12ab3b", + "reference": "dc847845c66fa68ad4522ed27e62b9b9dd12ab3b", "shasum": "" }, "require": { - "php": ">=5.5.9", + "php": "^5.5.9|>=7.0.8", "symfony/polyfill-mbstring": "~1.0" }, "require-dev": { - "symfony/css-selector": "~2.8|~3.0" + "symfony/css-selector": "~2.8|~3.0|~4.0" }, "suggest": { "symfony/css-selector": "" @@ -3378,7 +3722,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "3.4-dev" } }, "autoload": { @@ -3405,29 +3749,29 @@ ], "description": "Symfony DomCrawler Component", "homepage": "https://symfony.com", - "time": "2016-10-18 15:46:07" + "time": "2017-12-14T19:40:10+00:00" }, { "name": "symfony/stopwatch", - "version": "v3.1.6", + "version": "v3.4.2", "source": { "type": "git", "url": "https://github.com/symfony/stopwatch.git", - "reference": "bb42806b12c5f89db4ebf64af6741afe6d8457e1" + "reference": "52510fe1aefdc1c5d2076ac6030421d387e689d1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/bb42806b12c5f89db4ebf64af6741afe6d8457e1", - "reference": "bb42806b12c5f89db4ebf64af6741afe6d8457e1", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/52510fe1aefdc1c5d2076ac6030421d387e689d1", + "reference": "52510fe1aefdc1c5d2076ac6030421d387e689d1", "shasum": "" }, "require": { - "php": ">=5.5.9" + "php": "^5.5.9|>=7.0.8" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "3.4-dev" } }, "autoload": { @@ -3454,38 +3798,39 @@ ], "description": "Symfony Stopwatch Component", "homepage": "https://symfony.com", - "time": "2016-06-29 05:41:56" + "time": "2017-11-07T14:28:09+00:00" }, { - "name": "symfony/yaml", - "version": "v3.1.6", + "name": "webmozart/assert", + "version": "1.2.0", "source": { "type": "git", - "url": "https://github.com/symfony/yaml.git", - "reference": "7ff51b06c6c3d5cc6686df69004a42c69df09e27" + "url": "https://github.com/webmozart/assert.git", + "reference": "2db61e59ff05fe5126d152bd0655c9ea113e550f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/7ff51b06c6c3d5cc6686df69004a42c69df09e27", - "reference": "7ff51b06c6c3d5cc6686df69004a42c69df09e27", + "url": "https://api.github.com/repos/webmozart/assert/zipball/2db61e59ff05fe5126d152bd0655c9ea113e550f", + "reference": "2db61e59ff05fe5126d152bd0655c9ea113e550f", "shasum": "" }, "require": { - "php": ">=5.5.9" + "php": "^5.3.3 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.6", + "sebastian/version": "^1.0.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "1.3-dev" } }, "autoload": { "psr-4": { - "Symfony\\Component\\Yaml\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] + "Webmozart\\Assert\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -3493,17 +3838,17 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" } ], - "description": "Symfony Yaml Component", - "homepage": "https://symfony.com", - "time": "2016-10-24 18:41:13" + "description": "Assertions to validate method input/output with nice error messages.", + "keywords": [ + "assert", + "check", + "validate" + ], + "time": "2016-11-23T20:04:58+00:00" } ], "aliases": [], @@ -3514,5 +3859,8 @@ "platform": { "php": ">=5.5.0" }, - "platform-dev": [] + "platform-dev": [], + "platform-overrides": { + "php": "5.6.3" + } } diff --git a/lib/composer/vendor/consolidation/robo/docs/collections.md b/lib/composer/vendor/consolidation/robo/docs/collections.md deleted file mode 100644 index fc027daa3..000000000 --- a/lib/composer/vendor/consolidation/robo/docs/collections.md +++ /dev/null @@ -1,250 +0,0 @@ -# Collection Builders - -Robo provides task collections as a means of making error detection and recovery easier. When Robo tasks are added to a collection, their execution is deferred until the `$collection->run()` method is called. If one of the tasks fail, then the operation will be aborted; rollback tasks may also be defined to restore the system to its original condition. - -When using collections, a Robo script will go through three phases: - -1. Determine which tasks will need to be run, and create a task builder. - - Assign values to variables. - - Do not alter the state of the system. -2. Create the necessary tasks via the task builder. - - Use variables calculated in the first phase in task parameters. -3. Run the tasks via the `run()` method. - - Check and report errors once after `run()` returns. - -Following this pattern will keep your code linear and easy to understand. - -## Collections API - -Collections are made up of a combination of tasks and/or `callable` functions / method pointers, such as: - - - A task (implements TaskInterface) - - A function name (string) - - A closure (inline function) - - A method reference (array with object and method name) - -Examples of adding different kinds of tasks to a collection are provided below. - -### TaskInterface Objects - -```php -add( - $this->taskExec('ls') - ); -?> -``` - -### Functions - -```php -addCode('mytaskfunction'); -?> -``` - -### Closures - -```php -addCode( - function() use ($work) - { - // do something with $work - }); -?> -``` - -### Methods - -```php -addCode([$myobject, 'mymethod']); -?> -``` - -## Using a Collection Builder - -To manage a collection of tasks, a collection builder. Collection builders allow tasks to be created via chained methods. All of the tasks created by the same builder are added to a collection; when the `run()` method is called, all of the tasks in the collection run. - -The 'publish' command from Robo's own RoboFile is shown below. It uses a collection builder to run some git and filesystem operations. The "completion" tasks are run after all other tasks complete, or during rollback processing when an operation fails. - -``` php -collectionBuilder(); - $collection->taskGitStack() - ->checkout('site') - ->merge('master') - ->completion($this->taskGitStack()->checkout($current_branch)) - ->taskFilesystemStack() - ->copy('CHANGELOG.md', 'docs/changelog.md') - ->completion($this->taskFilesystemStack()->remove('docs/changelog.md')) - ->taskExec('mkdocs gh-deploy'); - - return $collection; - } -} -?> -``` - -The example above also adds a couple of tasks as "completions"; these are run when the collection completes execution, as explained below. - -## Rollbacks and Completions - -Robo also provides rollbacks and completions, special tasks that are eligible to run only if all of the tasks added to the collection before them succeed. The section below explains the circumstances under which these tasks will run. - -### Completion Tasks - -Completions run whenever their collection completes or fails, but only if all of the tasks that come before it succeed. An example of this is shown in the first example above. A filesystem stack task copies CHANDELOG.md to docs/changelog.md; after this task is added to the collection, another filesystem stack task is added as a completion to delete docs/changelog.md. This is done because docs/changelog.md is only intended to exist long enough to be used by the `mkdocs` task, which is added later. - -### Rollback Tasks - -In addition to completions, Robo also supports rollbacks. Rollback tasks can be used to clean up after failures, so the state of the system does not change when execution is interrupted by an error. A rollback task is executed if all of the tasks that come before it succeed, and at least one of the tasks that come after it fails. If all tasks succeed, then no rollback tasks are executed. - -### Rollback and Completion Methods - -Any task may also implement \Robo\Contract\RollbackInterface; if this is done, then its `rollback()` method will be called if the task is `run()` on a collection that later fails. - -Use `addAsCompletion($collection)` in place of `addAsRollback($collection)`, or implement \Robo\Contract\CompletionInterface. Completions otherwise work exactly like rollbacks. - -## Temporary Objects - -Since the concept of temporary objects that are cleaned up on failure is a common pattern, Robo provides built-in support for them. Temporary directories and files are provided out of the box; other kinds of temporary objects can be easily created using the Temporary global collection. - -### Temporary Directories - -It is recommended that operations that perform multiple filesystem operations should, whenever possible, do most of their work in a temporary directory. Temporary directories are created by `$this->taskTmpDir()`, and are automatically be removed when the collection completes or rolls back. As an added convenience, the CollectionBuilder class has a `tmpDir()` method that creates a temporary directory via `taskTmpDir()`, and then returns the path to the temporary directory. - -``` php -collectionBuilder(); - - // Create a temporary directory, and fetch its path. - $work = $collection->tmpDir(); - - $collection - ->taskWriteToFile("$work/README.md") - ->line('-----') - ->line(date('Y-m-d').' Generated file: do not edit.') - ->line('----'); - - // If all of the preceding tasks succeed, then rename the temporary - // directory to its final name. - $collection->taskFilesystemStack() - ->rename($work, 'destination'); - - return $collection->run(); - } -} -?> -``` - -In the previous example, the path to the temporary directory is stored in the variable `$work`, and is passed as needed to the parameters of the other tasks as they are added to the collection. After the task collection is run, the temporary directory will be automatically deleted. In the example above, the temporary directory is renamed by the last task in the collection. This allows the working directory to persist; the collection will still attempt to remove the working directory, but no errors will be thrown if it no longer exists in its original location. Following this pattern allows Robo scripts to easily and safely do work that cleans up after itself on failure, without introducing a lot of branching or additional error recovery code. This paradigm is common enough to warrant a shortcut method of accomplishing the same thing. The example below is identical to the one above, save for the fact that it uses the `workDir()` method instead of `tmpDir()`. `workDir()` renames the temporary directory to its final name if the collection completes; any directory that exists in the same location will be overwritten at that time, but will persist if the collection roles back. - -``` php -collectionBuilder(); - - // Create a temporary directory, and fetch its path. - // If all of the tasks succeed, then rename the temporary directory - // to its final name. - $work = $collection->workDir('destination'); - - $collection - ->taskWriteToFile("$work/README.md") - ->line('-----') - ->line(date('Y-m-d').' Generated file: do not edit.') - ->line('----'); - - return $collection->run(); - } -} -?> -``` - -Temporary directories may also be created via the shortcut `$this->_tmpDir();`. Temporary directories created in this way are deleted when the script terminates. - -### Temporary Files - -Robo also provides an API for creating temporary files. They may be created via `$this->taskTmpFile()`; they are used exactly like `$this->taskWrite()`, except they are given a random name on creation, and are deleted when their collection completes. If they are not added to a collection, then they are deleted when the script terminates. - -### The Temporary Global Collection - -Robo maintains a special collection called the Temporary global collection. This collection is used to keep track of temporary objects that are not part of any collection. For example, Robo temporary directories and temporary files are managed by the Temporary global collection. These temporary objects are cleaned up automatically when the script terminates. - -It is easy to create your own temporary tasks that behave in the same way as the provided temporary directory and temporary file tasks. There are two steps required: - -- Implement \Robo\Contract\CompletionInterface -- Wrap the task via Temporary::wrap() - -For example, the implementation of taskTmpFile() looks like this: - -``` php - -``` - -The `complete()` method of the task will be called once the Collection the temporary object is attached to finishes running. If the temporary is not added to a collection, then its `complete()` method will be called when the script terminates. - -## Named Tasks - -It is also possible to provide names for the tasks added to a collection. This has two primary benefits: - -1. Any result data returned from a named task is stored in the Result object under the task name. -2. It is possible for other code to add more tasks before or after any named task. - -This feature is useful if you have functions that create task collections, and return them as a function results. The original caller can then use the `$collection->before()` or `$collection->after()` to insert sequenced tasks into the set of operations to be performed. One reason this might be done would be to define a base set of operations to perform (e.g. in a deploy), and then apply modifications for other environments (e.g. dev or stage). - -```php -addCode( - function() use ($work) - { - // do something with $work - }, - "taskname"); -?> -``` - -Given a collection with named tasks, it is possible to insert more tasks before or after a task of a given name. - -```php -after("taskname", - function() use ($work) - { - // do something with $work after "taskname" executes, if it succeeds. - }); -?> -``` - -```php -before("taskname", - function() use ($work) - { - // do something with $work before "taskname" executes. - }); -?> -``` - -It is recommended that named tasks be avoided unless specifically needed. - diff --git a/lib/composer/vendor/consolidation/robo/docs/extending.md b/lib/composer/vendor/consolidation/robo/docs/extending.md deleted file mode 100644 index c71b7bc88..000000000 --- a/lib/composer/vendor/consolidation/robo/docs/extending.md +++ /dev/null @@ -1,191 +0,0 @@ -# Extending - -Robo tasks can be added to your Robo application by using Composer to suppliment the set of built-in tasks that Robo provides by default. To find existing Robo task extensions, search in Packagist for projects of type [robo-tasks](https://packagist.org/search/?type=robo-tasks). - -The convention used to add new tasks for use in your RoboFiles is to create a wrapper trait named `loadTasks` that instantiates the implementation class for each task. Each task method in the trait should start with the prefix `task`, and should use **chained method calls** for configuration. Task execution should be triggered by the method `run`. - -To include additional tasks in your RoboFile, you must `use` the appropriate `loadTasks` in your RoboFile. See the section [Including Additional Tasks](#including-additional-tasks) below. To create your own Robo extension that provides tasks for use in RoboFiles, then you must write your own class that implements TaskInterface, and create a `loadTasks` trait for it as described in the section [Creating a Robo Extension](#creating-a-robo-extension). - -## Including Additional Tasks - -Additional tasks may be installed into projects that have included Robo via Composer. For example: -``` -$ cd myproject -$ composer require boedah/robo-drush -``` -If any of the tasks you include require external Composer projects themselves, then you must `composer require` these as well. See the `suggests` section of Robo's composer.json file for a list of some projects you might need to require. - -Once the extension you wish to use has been added to your vendor directory, you may then include it from your RoboFile: -``` php -class RoboFile extends \Robo\Tasks -{ - use \Boedah\Robo\Task\Drush\loadTasks; - - public function test() - { - // ... - } -} -``` -Once you have done this, all of the tasks defined in the extension you selected will be available for use in your commands. - -Note that at the moment, it is not possible to extend Robo when using the robo.phar. This capability may be added in the future via [embedded composer](https://github.com/dflydev/dflydev-embedded-composer). - -## Creating a Robo Extension - -A Robo tasks extension is created by advertising a Composer package of type `robo-tasks` on [Packagist](https://packagist.org/). For an overview on how this is done, see the article [Creating your very own Composer Package](https://knpuniversity.com/screencast/question-answer-day/create-composer-package). Specific instructions for creating Robo task extensions are provided below. - -### Create your composer.json File - -Your composer.json file should look something like the example below: -``` -{ - "name": "boedah/robo-drush", - "description": "Drush CommandStack for Robo Task Runner", - "type": "robo-tasks", - "autoload": { - "psr-4": { - "Boedah\\Robo\\Task\\Drush\\": "src" - } - }, - "require": { - "php": ">=5.5.0", - "consolidation/robo": "~1" - } -} -``` -Customize the name and autoload paths as necessary, and add any additional required projects needed by the tasks that your extensions will provide. The type of your project should always be `robo-tasks`. Robo only supports php >= 5.5.0; you may require a higher version of php if necessary. - -### Create the loadTasks.php Trait - -It is recommended to place your trait-loading task in a `loadTasks` file in the same namespace as the task implementation. -``` -namespace Boedah\Robo\Task\Drush; - -use Robo\Container\SimpleServiceProvider; - -trait loadTasks -{ - /** - * @param string $pathToDrush - * @return DrushStack - */ - protected function taskDrushStack($pathToDrush = 'drush') - { - return $this->task(__FUNCTION__, $pathToDrush); - } -} -``` -Note that the name of the service for a given task must start with the word "task", and must have the same name as the function used to call the task. `$this->task()` looks up the service by name; using the PHP built-in constant __FUNCTION__ for this parameter ensures that the names of these items remain in alignment. - -### Task implementation - -The implementation of each task class should extend \Robo\Task\BaseTask, or some class that extends the same, and should used chained initializer methods and defer all operations that alter the state of the system until its `run()` method. If you follow these patterns, then your task extensions will be usable via Robo collection builders, as explained in the [collections](collections.md) documentation. - -There are many examples of task implementations in the Robo\Task namespace. A very basic task example is provided below. The namespace is `MyAssetTasks`, and the example task is `CompileAssets`. To customize to your purposes, choose an appropriate namespace, and then define as many tasks as you need. - -``` php -task(CompileAssets::class, $path); - } -} - -class CompileAssets implements \Robo\Contract\TaskInterface -{ - // configuration params - protected $path; - protected $to; - function __construct($path) - { - $this->path = $path; - } - - function to($filename) - { - $this->to = $filename; - // must return $this - return $this; - } - - // must implement Run - function run() - { - //.... - } -} -?> -``` - -To use the tasks you define in a RoboFile, use its `loadTasks` trait as explained in the section [Including Additional Tasks](#including-additional-tasks), above. - -### TaskIO - -To allow tasks access IO, use the `Robo\Common\TaskIO` trait, or inherit your task class from `Robo\Task\BaseTask` (recommended). - -Inside tasks you should print process details with `printTaskInfo`, `printTaskSuccess`, and `printTaskError`. -``` -$this->printTaskInfo('Processing...'); -``` -The Task IO methods send all output through a PSR-3 logger. Tasks should use task IO exclusively; methods such as 'say' and 'ask' should reside in the command method. This allows tasks to be usable in any context that has a PSR-3 logger, including background or server processes where it is not possible to directly query the user. - -### Tasks That Use Tasks - -If one task implementation needs to use other tasks while it is running, it should do so via a `CollectionBuilder` object, as explained in the [Collections](collections.md) documentation. - -To obtain access to a `CollectionBuilder`, a task should implement `BuilderAwareInterface` and use `BuilderAwareTrait`. It will then have access to a collection builder via the `$this->collectionBuilder()` method. - -### Testing Extensions - -If you wish to use the `task()` methods from your `loadTasks` trait in your unit tests, it is necessary to also use the Robo `TaskAccessor` trait, and define a `collectionBuilder()` method to provide a builder. Collection builders are used to initialize all Robo tasks. The easiest way to get a usable collection builder in your tests is to initialize Robo's default dependency injection container, and use it to request a new builder. - -An example of how to do this in a PHPUnit test is shown below. -``` -use League\Container\ContainerAwareInterface; -use League\Container\ContainerAwareTrait; -use Symfony\Component\Console\Output\NullOutput; -use Robo\TaskAccessor; -use Robo\Robo; - -class DrushStackTest extends \PHPUnit_Framework_TestCase implements ContainerAwareInterface -{ - use \Boedah\Robo\Task\Drush\loadTasks; - use TaskAccessor; - use ContainerAwareTrait; - - // Set up the Robo container so that we can create tasks in our tests. - function setup() - { - $container = Robo::createDefaultContainer(null, new NullOutput()); - $this->setContainer($container); - } - - // Scaffold the collection builder - public function collectionBuilder() - { - $emptyRobofile = new \Robo\Tasks; - return $this->getContainer()->get('collectionBuilder', [$emptyRobofile]); - } - - public function testYesIsAssumed() - { - $command = $this->taskDrushStack() - ->drush('command') - ->getCommand(); - $this->assertEquals('drush command -y', $command); - } -} -``` -To assert that the output of a command contains some value, use a `Symfony\Component\Console\Output\BufferedOutput` in place of null output when calling Robo::createDefaultContainer(). diff --git a/lib/composer/vendor/consolidation/robo/docs/framework.md b/lib/composer/vendor/consolidation/robo/docs/framework.md deleted file mode 100644 index d0ae942fe..000000000 --- a/lib/composer/vendor/consolidation/robo/docs/framework.md +++ /dev/null @@ -1,89 +0,0 @@ -# Robo as a Framework - -There are multiple ways to use and package Robo scripts; a few of the alternatives are presented below. - -## Creating a Standalone Phar with Robo - -It is possible to create a standalone phar that is implemented with Robo; doing this does not require the RoboFile to be located in the current working directory, or any particular location within your project. To achieve this, first set up your project as shown in the section [Implementing Composer Scripts with Robo](getting-started.md#implementing-composer-scripts-with-robo). Use of the "scripts" section is optional. - -Next, add an "autoload" section to your composer.json to provide a namespace for your Robo commands: -``` -{ - "name": "myorg/myproject", - "require": { - "consolidation/Robo": "~1" - }, - "autoload":{ - "psr-4":{ - "MyProject\\":"src" - } - } -} -``` -Create a new file for your Robo commands, e.g. `class RoboFile` in `namespace MyProject\Commands;` in the file `src\Commands\RoboFile.php`. Optionally, add more task libraries as described in the [extending](extending.md) document. - -Create a startup script similar to the one below, and add it to the root of your project, or some other location of your choosing: - -``` php -#!/usr/bin/env php -setSearchPattern('*Command.php'); -$commandClasses = $discovery->discover('php/MyProject/Commands', '\MyProject\Commands'); -``` -Pass the resulting `$commandClasses` to the `Runner()` constructor as shown above. See the annotated-commands project for more information about the different options that the discovery command takes. - -## Using Your Own Dependency Injection Container with Robo (Advanced) - -It is also possible to completely replace the Robo application with your own. To do this, set up your project as described in the sections above, but replace the Robo runner with your own main event loop. - -Create the Robo dependency injection container: -``` -use League\Container\Container; - -$input = new \Symfony\Component\Console\Input\ArgvInput($argv); -$output = new \Symfony\Component\Console\Output\ConsoleOutput(); -$conf = new \Robo\Config(); \\ or use your own subclass -$app = new \My\Application(); -$container = \Robo\Robo::createDefaultContainer($input, $output, $app, $conf); -``` -If you are using League\Container (recommended), then you may simply add and share your own classes to the same container. If you are using some other DI container, then you should use [delegate lookup](https://github.com/container-interop/fig-standards/blob/master/proposed/container.md#14-additional-feature-delegate-lookup) to combine them. diff --git a/lib/composer/vendor/consolidation/robo/docs/getting-started.md b/lib/composer/vendor/consolidation/robo/docs/getting-started.md deleted file mode 100644 index 673f688db..000000000 --- a/lib/composer/vendor/consolidation/robo/docs/getting-started.md +++ /dev/null @@ -1,418 +0,0 @@ -# Getting Started - -To begin you need to create a RoboFile. Just run `robo init` in your project directory: - -``` -cd myproject -robo init -``` - -Your project directory may start out empty; Robo will create a new `RoboFile.php` for you. There will be RoboFile class which extends `\Robo\Tasks`, which includes all bundled tasks of Robo. - -``` php - -``` - -## Commands - -All public methods of the RoboFile class will be treated as **commands**. You can run them from the CLI and pass arguments. - -``` php -say("Hello, $world"); - } -} -?> -``` - -When we run: - -``` -robo hello davert -➜ Hello, davert -``` - -Method names should be camelCased. In CLI `camelCased` method will be available as `camel:cased` command. -`longCamelCased` method will be transformed to `long:camel-cased` command. - -**Note:** This assumes you have installed Robo by downloading the [robo.phar](http://robo.li/robo.phar) file and copied it to a directory in your $PATH. For example, `cp robo.phar ~/bin/robo`. - -### Arguments - -All method parameters without default values are treated as required arguments. In our example command `hello` requires one argument. -If you pass a default value to parameter the argument becomes optional: - -``` php -say("Hello, $world"); - } -?> -``` - -``` -robo hello -➜ Hello, world -``` - -To accept multiple, variable arguments, define a parameter as an `array`; Robo will then pass all CLI arguments in this variable: - -``` php -say("Hello, " . implode(', ', $world)); - } -?> -``` - -``` -robo hello davert jon bill bob -➜ Hello, davert, jon, bill, bob -``` - -### Options - -To define command options you should define the last method parameter as an associative array where the keys define the option names and the values provide each option's default values: - -``` php - false]) - { - if (!$opts['silent']) $this->say("Hello, world"); - } -?> -``` - -``` -robo hello -➜ Hello, world - -robo hello --silent -``` - -A one-character shortcut can be specified for option: - -``` php - false]) - { - if (!$opts['silent']) $this->say("Hello, world"); - } -?> -``` - -Now command can be executed with '-s' to run in silent mode: - -``` -robo hello -s -``` - -### Load From Other Directories - -Robo can execute commands from a RoboFile located in different directory. -You can specify the path to another RoboFile by including the `--load-from` option: - -``` -robo run --load-from /path/to/my/other/project -``` - -### Pass-Through Arguments - -Sometimes you need to pass arguments from your command into a task. A command line after the `--` characters is treated as one argument. -Any special character like `-` will be passed into without change. - -``` php -taskExec('ls')->args($args)->run(); - } -?> -``` - -``` -robo ls -- Robo -c --all - [Robo\Task\ExecTask] running ls Robo -c --all - . .. CHANGELOG.md codeception.yml composer.json composer.lock docs .git .gitignore .idea LICENSE README.md robo RoboFile.php robo.phar src tests .travis.yml vendor -``` - -### Help - -The help text for a command in a RoboFile may be provided in Doc-Block comments. An example help Doc-Block comment is shown below: - -``` php - false]) -{ -} -?> -``` - -The corresponding help text produced is: - -``` -robo fibonacci --help -Usage: - fibonacci [--graphic] start steps - -Arguments: - start Number to start from - steps Number of steps to perform - -Options: - --graphic Display the sequence graphically using cube representation - -Help: - Graphic output will look like - +----+---+-------------+ - | | | | - | |-+-| | - |----+-+-+ | - | | | - | | | - | | | - +--------+-------------+ -``` - -Arguments and options are populated from annotations. - -Initially added with [PR by @jonsa](https://github.com/consolidation/Robo/pull/71); now provided by the [consolidation/annotated-command](https://github.com/consolidation/annotated-command) project, which was factored out from Robo. - -### Ignored methods - -Robo ignores any method of your RoboFile that begins with `get` or `set`. These methods are presumed to be data accessors, not commands. To implement a command whose name contains `get` or `set`, use the `@command` annotation. - -``` php - -``` - -## Tasks - -Robo commands typically divide the work they need to accomplish into **tasks**. The command first determines what needs to be done, inspecting current state if necessary, and then sets up and executes one or more tasks that make the actual changes needed by the command. (See also the documentation on [Collections](collections.md), which allow you to combine groups of tasks which can provide rollback functions to recover from failure situations.) - -For details on how to add custom tasks to Robo, see the [extending](extending.md) document. - -### Shortcuts - -Some tasks may have shortcuts. If a task does not require multi-step configuration, it can be executed with a single line: - -```php -_exec('ps aux'); -$this->_copy('config/env.example.yml','config/env.yml'); -?> -``` - -### Result - -Each task must return an instance of `Robo\Result`. A Robo Result contains the task instance, exit code, message, and any variable data that the task may wish to return. - -The `run` method of `CompileAssets` class may look like this: - -``` -return new Robo\Result($this, $exitCode, "Assets compiled"); -``` - -or - -``` -return Robo\Result::success($this, "Assets compiled"); -return Robo\Result::error($this, "Failed to compile assets"); -``` - -You can use this results to check if execution was successful, either using the `wasSuccessful()` method, or via the `invoke` shortcut. We will use the `Exec` task in next example to illustrate this: - -``` php -_exec('phpunit tests/integration'); - $res2 = $this->_exec('phpunit tests/unit'); - - // print message when tests passed - if ($res1->wasSuccessful() and $res2->wasSuccessful()) $this->say("All tests passed"); - } -} -?> -``` -When making multi-step commands that call one task after another, it is best to use a collection to group the tasks together. The collection will handle error detection and rollback, and will return a single Result object when done. For more information, see the [Collections](collections.md) documentation. - -Some tasks may also attach data to the Result object. If this is done, the data may be accessed as an array; for example, `$result['path'];`. This is not common. - -Commands should return a Result object obtained from a task; this will ensure that the command exit code is set correctly. If a command does not have a Result object available, then it may use a ResultData object. ResultData objects are just like Result objects, except the do not contain a reference to a task. - -return new Robo\ResultData($exitcode, 'Error message.'); - -If the command returns a TaskInterface instead of a result, then the task will be executed, and the result from that task will be used as the final result of the command. See also `Formatters`, below. - -### Stack - -Some tasks contain `Stack` in their name. These are called "stack" tasks, and they execute similar tasks one after the other. Each of the primary methods in a stack class executes an operation. - -Stack tasks also contain a `stopOnFail` method which can be used to stop task execution if one of its commands was unsuccessful. - -### Global StopOnFail - -There is a global `stopOnFail` method as well, that can be used to stop a command on first failure of a task. - -``` -$this->stopOnFail(true); -``` - -### IO - -As you noticed, you can print text via the `say` method, which is taken from the `Robo\Output` trait. - -``` -$this->say("Hello"); -``` - -Also, you can ask for input from console: - -``` -$name = $this->ask("What is your name?"); -``` - -There are also `askDefault`, `askHidden`, and `confirm` methods. - -In addition, Robo makes all of the methods of Symfony Style available throgh the `io()` method: - -$this->io()->title("Build all site assets"); - -This allows Robo scripts to follow the [Symfony Console Style Guide](http://symfony.com/blog/new-in-symfony-2-8-console-style-guide) if desired. - -### Formatters - -It is preferable for commands that look up and display information should avoid doing IO directly, and should instead return the data they wish to display as an array. This data can then be converted into different data formats, such as "table" and "json". The user may select which formatter to use via the --format option. For details on formatters, see the [consolidation/output-formatters](https://github.com/consolidation/output-formatters) project. - -### Progress - -Robo supports progress indicators via the Symfony ProgressBar class. Long-running tasks that wish to display the progress indicator may do so via four simple steps: - -- Override the `progressIndicatorSteps()` method and return the number of "steps" in the operation. -- Call `$this->startProgressIndicator()` to begin the progress indicator running. -- Call `$this->advanceProgressIndicator()` a number of times equal to the result returned by `progressIndicatorSteps()` -- Call `$this->stopProgressIndicator()` when the operation is completed. - -An example of this is shown below: - -``` php -steps; - } - - public function run() - { - $exitCode = 0; - $errorMessage = ""; - - $this->startProgressIndicator(); - for ($i = 0; $i < $this->steps; ++$i) { - $this->advanceProgressIndicator(); - } - $this->stopProgressIndicator(); - - return new Result($this, $exitCode, $errorMessage, ['time' => $this->getExecutionTime()]); - } -} -?> -``` -Tasks should not attempt to use a specific progress indicator (e.g. the Symfony ProgressBar class) directly, as the ProgressIndicatorAwareTrait allows for an appropriate progress indicator to be used (or omitted) as best suits the application. - -Note that when using [Collections](collections.md), the progress bar will automatically be shown if the collection takes longer than two seconds to run. Each task in the collection will count for one "step"; if the task supports progress indicators as shown above, then it will add an additional number of steps as indicated by its `progressIndicatorSteps()` method. - -## Working with Composer - -### Adding a RoboFile to your Project - -Robo is designed to work well with Composer. To use Robo scripts in your Composer-based project, simply add `robo` to your composer.json file: -``` -$ cd myproject -$ composer require consolidation/Robo:~1 -$ ./vendor/bin/robo mycommand -``` -If you do not want to type the whole path to Robo, you may add `./vendor/bin` to your $PATH (relative paths work), or use `composer exec` to find and run Robo: -``` -$ composer exec robo mycommand -``` - -### Implementing Composer Scripts with Robo - -When using Robo in your project, it is convenient to define Composer scripts that call your Robo commands. Simply add the following to your composer.json file: -``` -{ - "name": "myorg/myproject", - "require": { - "consolidation/Robo": "~1" - }, - "scripts": { - "test": "composer robo test", - "phar": "composer robo phar:build", - "robo": "robo --ansi --load-from $(pwd)/scripts/BuildCommands.php" - } -} -``` -*Note*: When you include Robo as a library like this, some external projects used by certain core Robo tasks are not automatically included in your project. See the `"suggest":` section of Robo's composer.json for a list of external projects you might also want to require in your project. - -Once you have set up your composer.json file (and ran `composer update` if you manually changed the `require` or `require-dev` sections), Composer will ensure that your project-local copy of Robo in the `vendor/bin` dir is in your $PATH when you run the additional Composer scripts that you declared: -``` -$ cd myproject -$ composer test -$ composer phar -``` -This will call the public methods `test()` and `phar()` in your RoboFile.php when using `composer test` and `composer phar`, respectively. - -Advertising your build commands as Composer scripts is a useful way to provide the key commands used for testing, building or packaging your application. Also, if your application should happen to provide a commandline tool to perform the operations of the application itself, then defining your build commands in their own RoboFile provides desirable separation, keeping your build commands out of the help and list commands of your primary script. - -If you would like to simplify the output of your script (e.g. when running on a CI service), replace the `--ansi` option in the example above with `--no-ansi`, and colored terminal output and progress bars will be disabled. - -## Robo as a Framework - -For an overview on how to turn your Robo scripts into standalone tools, see the example [robo.script](https://github.com/consolidation/Robo/blob/master/examples/robo.script), and the section [Robo as a Framework](framework.md). diff --git a/lib/composer/vendor/consolidation/robo/docs/index.md b/lib/composer/vendor/consolidation/robo/docs/index.md deleted file mode 100644 index cdb6d099f..000000000 --- a/lib/composer/vendor/consolidation/robo/docs/index.md +++ /dev/null @@ -1,24 +0,0 @@ -# Robo Documentation - -* [Getting Started](getting-started.md) -* [Collections](collections.md) -* [Extending](extending.md) -* [Robo as a Framework](framework.md) - -## Tasks - -* [ApiGen](tasks/ApiGen.md) -* [Archive](tasks/Archive.md) -* [Assets](tasks/Assets.md) -* [Base](tasks/Base.md) -* [Bower](tasks/Bower.md) -* [Composer](tasks/Composer.md) -* [Development](tasks/Development.md) -* [Docker](tasks/Docker.md) -* [File](tasks/File.md) -* [Filesystem](tasks/Filesystem.md) -* [Gulp](tasks/Gulp.md) -* [Npm](tasks/Npm.md) -* [Remote](tasks/Remote.md) -* [Testing](tasks/Testing.md) -* [Vcs](tasks/Vcs.md) diff --git a/lib/composer/vendor/consolidation/robo/docs/tasks/ApiGen.md b/lib/composer/vendor/consolidation/robo/docs/tasks/ApiGen.md deleted file mode 100644 index 255404b8f..000000000 --- a/lib/composer/vendor/consolidation/robo/docs/tasks/ApiGen.md +++ /dev/null @@ -1,56 +0,0 @@ -# ApiGen Tasks -## ApiGen - - -Executes ApiGen command to generate documentation - -``` php -taskApiGen('./apigen.neon') - ->templateConfig('vendor/apigen/apigen/templates/bootstrap/config.neon') - ->wipeout(true) - ->run(); -?> -``` - -* `config($config)` * `param string` $config -* `source($src)` * `param array|string|Traversable` $src one or more source values -* `destination($dest)` * `param string` $dest -* `extensions($exts)` * `param array|string` $exts one or more extensions -* `exclude($exclude)` * `param array|string` $exclude one or more exclusions -* `skipDocPath($path)` * `param array|string|Traversable` $path one or more skip-doc-path values -* `skipDocPrefix($prefix)` * `param array|string|Traversable` $prefix one or more skip-doc-prefix values -* `charset($charset)` * `param array|string` $charset one or more charsets -* `mainProjectNamePrefix($name)` * `param string` $name -* `title($title)` * `param string` $title -* `baseUrl($baseUrl)` * `param string` $baseUrl -* `googleCseId($id)` * `param string` $id -* `googleAnalytics($trackingCode)` * `param string` $trackingCode -* `templateConfig($templateConfig)` * `param mixed` $templateConfig -* `allowedHtml($tags)` * `param array|string` $tags one or more supported html tags -* `groups($groups)` * `param string` $groups -* `autocomplete($types)` * `param array|string` $types or more supported autocomplete types -* `accessLevels($levels)` * `param array|string` $levels one or more access levels -* `internal($internal)` * `param boolean|string` $internal 'yes' or true if internal, 'no' or false if not -* `php($php)` * `param boolean|string` $php 'yes' or true to generate documentation for internal php classes, -* `tree($tree)` * `param bool|string` $tree 'yes' or true to generate a tree view of classes, 'no' or false otherwise -* `deprecated($dep)` * `param bool|string` $dep 'yes' or true to generate documentation for deprecated classes, 'no' or false otherwise -* `todo($todo)` * `param bool|string` $todo 'yes' or true to document tasks, 'no' or false otherwise -* `sourceCode($src)` * `param bool|string` $src 'yes' or true to generate highlighted source code, 'no' or false otherwise -* `download($zipped)` * `param bool|string` $zipped 'yes' or true to generate downloadable documentation, 'no' or false otherwise -* `report($path)` -* `wipeout($wipeout)` * `param bool|string` $wipeout 'yes' or true to clear out the destination directory, 'no' or false otherwise -* `quiet($quiet)` * `param bool|string` $quiet 'yes' or true for quiet, 'no' or false otherwise -* `progressbar($bar)` * `param bool|string` $bar 'yes' or true to display a progress bar, 'no' or false otherwise -* `colors($colors)` * `param bool|string` $colors 'yes' or true colorize the output, 'no' or false otherwise -* `updateCheck($check)` * `param bool|string` $check 'yes' or true to check for updates, 'no' or false otherwise -* `debug($debug)` * `param bool|string` $debug 'yes' or true to enable debug mode, 'no' or false otherwise -* `dir($dir)` Changes working directory of command -* `printed($arg)` Should command output be printed -* `arg($arg)` Pass argument to executable. Its value will be automatically escaped. -* `args($args)` Pass methods parameters as arguments to executable. Argument values -* `rawArg($arg)` Pass the provided string in its raw (as provided) form as an argument to executable. -* `option($option, $value = null)` Pass option to executable. Options are prefixed with `--` , value can be provided in second parameter. -* `optionList($option, $value = null)` Pass multiple options to executable. Value can be a string or array. - diff --git a/lib/composer/vendor/consolidation/robo/docs/tasks/Archive.md b/lib/composer/vendor/consolidation/robo/docs/tasks/Archive.md deleted file mode 100644 index 103845d2a..000000000 --- a/lib/composer/vendor/consolidation/robo/docs/tasks/Archive.md +++ /dev/null @@ -1,52 +0,0 @@ -# Archive Tasks -## Extract - - -Extracts an archive. - -Note that often, distributions are packaged in tar or zip archives -where the topmost folder may contain variable information, such as -the release date, or the version of the package. This information -is very useful when unpacking by hand, but arbitrarily-named directories -are much less useful to scripts. Therefore, by default, Extract will -remove the top-level directory, and instead store all extracted files -into the directory specified by $archivePath. - -To keep the top-level directory when extracting, use -`preserveTopDirectory(true)`. - -``` php -taskExtract($archivePath) - ->to($destination) - ->preserveTopDirectory(false) // the default - ->run(); -?> -``` - -* `to(string)` location to store extracted files - -* `to($to)` Location to store extracted files. -* `preserveTopDirectory($preserve = null)` * `param bool` $preserve - -## Pack - - -Creates a zip or tar archive. - -``` php -taskPack( -) -->add('README') // Puts file 'README' in archive at the root -->add('project') // Puts entire contents of directory 'project' in archinve inside 'project' -->addFile('dir/file.txt', 'file.txt') // Takes 'file.txt' from cwd and puts it in archive inside 'dir'. -->run(); -?> -``` - -* `archiveFile($archiveFile)` * `param string` $archiveFile -* `addFile($placementLocation, $filesystemLocation)` Add an item to the archive. Like file_exists(), the parameter -* `addDir($placementLocation, $filesystemLocation)` Alias for addFile, in case anyone has angst about using -* `add($item)` Add a file or directory, or list of same to the archive. - diff --git a/lib/composer/vendor/consolidation/robo/docs/tasks/Assets.md b/lib/composer/vendor/consolidation/robo/docs/tasks/Assets.md deleted file mode 100644 index 54fc21104..000000000 --- a/lib/composer/vendor/consolidation/robo/docs/tasks/Assets.md +++ /dev/null @@ -1,163 +0,0 @@ -# Assets Tasks - -## ImageMinify - - -Minifies images. When the required minifier is not installed on the system -the task will try to download it from the [imagemin](https://github.com/imagemin) repository. - -When the task is run without any specified minifier it will compress the images -based on the extension. - -```php -$this->taskImageMinify('assets/images/*') - ->to('dist/images/') - ->run(); -``` - -This will use the following minifiers: - -- PNG: optipng -- GIF: gifsicle -- JPG, JPEG: jpegtran -- SVG: svgo - -When the minifier is specified the task will use that for all the input files. In that case -it is useful to filter the files with the extension: - -```php -$this->taskImageMinify('assets/images/*.png') - ->to('dist/images/') - ->minifier('pngcrush'); - ->run(); -``` - -The task supports the following minifiers: - -- optipng -- pngquant -- advpng -- pngout -- zopflipng -- pngcrush -- gifsicle -- jpegoptim -- jpeg-recompress -- jpegtran -- svgo (only minification, no downloading) - -You can also specifiy extra options for the minifiers: - -```php -$this->taskImageMinify('assets/images/*.jpg') - ->to('dist/images/') - ->minifier('jpegtran', ['-progressive' => null, '-copy' => 'none']) - ->run(); -``` - -This will execute as: -`jpegtran -copy none -progressive -optimize -outfile "dist/images/test.jpg" "/var/www/test/assets/images/test.jpg"` - -* `to($target)` Sets the target directory where the files will be copied to. -* `minifier($minifier, array $options = Array ( ) )` Sets the minifier. - -## Less - - -Compiles less files. - -```php -taskLess([ - 'less/default.less' => 'css/default.css' -]) -->run(); -?> -``` - -Use one of both less compilers in your project: - -``` -"leafo/lessphp": "~0.5", -"oyejorge/less.php": "~1.5" -``` - -Specify directory (string or array) for less imports lookup: - -```php -taskLess([ - 'less/default.less' => 'css/default.css' -]) -->importDir('less') -->compiler('lessphp') -->run(); -?> -``` - -You can implement additional compilers by extending this task and adding a -method named after them and overloading the lessCompilers() method to -inject the name there. - -* `importDir($dirs)` Sets import directories -* `addImportPath($dir)` Adds import directory -* `setImportPaths($dirs)` Sets import directories -* `setFormatter($formatterName)` * `param string` $formatterName -* `compiler($compiler, array $options = Array ( ) )` Sets the compiler. - -## Minify - - -Minifies asset file (CSS or JS). - -``` php -taskMinify( 'web/assets/theme.css' ) - ->run() -?> -``` -Please install additional dependencies to use: - -``` -"patchwork/jsqueeze": "~1.0", -"natxet/CssMin": "~3.0" -``` - -* `to($dst)` Sets destination. Tries to guess type from it. -* `type($type)` Sets type with validation. -* `singleLine($singleLine)` Single line option for the JS minimisation. -* `keepImportantComments($keepImportantComments)` keepImportantComments option for the JS minimisation. -* `specialVarRx($specialVarRx)` specialVarRx option for the JS minimisation. -* `__toString()` @return string - -## Scss - - -Compiles scss files. - -```php -taskScss([ - 'scss/default.scss' => 'css/default.css' -]) -->importDir('assets/styles') -->run(); -?> -``` - -Use the following scss compiler in your project: - -``` -"leafo/scssphp": "~0.1", -``` - -You can implement additional compilers by extending this task and adding a -method named after them and overloading the scssCompilers() method to -inject the name there. - -* `setFormatter($formatterName)` Sets the formatter for scssphp -* `importDir($dirs)` Sets import directories -* `addImportPath($dir)` Adds import directory -* `setImportPaths($dirs)` Sets import directories -* `compiler($compiler, array $options = Array ( ) )` Sets the compiler. - diff --git a/lib/composer/vendor/consolidation/robo/docs/tasks/Base.md b/lib/composer/vendor/consolidation/robo/docs/tasks/Base.md deleted file mode 100644 index 3dc5fcd8b..000000000 --- a/lib/composer/vendor/consolidation/robo/docs/tasks/Base.md +++ /dev/null @@ -1,126 +0,0 @@ -# Base Tasks -## Exec - - -Executes shell script. Closes it when running in background mode. - -``` php -taskExec('compass')->arg('watch')->run(); -// or use shortcut -$this->_exec('compass watch'); - -$this->taskExec('compass watch')->background()->run(); - -if ($this->taskExec('phpunit .')->run()->wasSuccessful()) { - $this->say('tests passed'); -} - -?> -``` - -* `background()` Executes command in background mode (asynchronously) -* `timeout($timeout)` Stop command if it runs longer then $timeout in seconds -* `idleTimeout($timeout)` Stops command if it does not output something for a while -* `env(array $env)` Sets the environment variables for the command -* `simulate($context)` {@inheritdoc} -* `dir($dir)` Changes working directory of command -* `printed($arg)` Should command output be printed -* `arg($arg)` Pass argument to executable. Its value will be automatically escaped. -* `args($args)` Pass methods parameters as arguments to executable. Argument values -* `rawArg($arg)` Pass the provided string in its raw (as provided) form as an argument to executable. -* `option($option, $value = null)` Pass option to executable. Options are prefixed with `--` , value can be provided in second parameter. -* `optionList($option, $value = null)` Pass multiple options to executable. Value can be a string or array. - -## ExecStack - - -Execute commands one by one in stack. -Stack can be stopped on first fail if you call `stopOnFail()`. - -```php -taskExecStack() - ->stopOnFail() - ->exec('mkdir site') - ->exec('cd site') - ->run(); - -?> -``` - -* `$this stopOnFail()` - -* `executable($executable)` * `param string` $executable -* `exec($command)` * `param string|string[]` $command -* `stopOnFail($stopOnFail = null)` * `param bool` $stopOnFail -* `result($result)` -* `dir($dir)` Changes working directory of command -* `printed($arg)` Should command output be printed - -## ParallelExec - - -Class ParallelExecTask - -``` php -taskParallelExec() - ->process('php ~/demos/script.php hey') - ->process('php ~/demos/script.php hoy') - ->process('php ~/demos/script.php gou') - ->run(); -?> -``` - - -* ` timeout(int $timeout)` stops process if it runs longer then `$timeout` (seconds) -* ` idleTimeout(int $timeout)` stops process if it does not output for time longer then `$timeout` (seconds) - -* `printed($isPrinted = null)` * `param bool` $isPrinted -* `process($command)` * `param string|\Robo\Contract\CommandInterface` $command -* `timeout($timeout)` * `param int` $timeout -* `idleTimeout($idleTimeout)` * `param int` $idleTimeout - -## SymfonyCommand - - -Executes Symfony Command - -``` php -taskSymfonyCommand(new \Codeception\Command\Run('run')) - ->arg('suite','acceptance') - ->opt('debug') - ->run(); - -// Artisan Command -$this->taskSymfonyCommand(new ModelGeneratorCommand()) - ->arg('name', 'User') - ->run(); -?> -``` - -* `arg($arg, $value)` * `param string` $arg -* `opt($option, $value = null)` - -## Watch - - -Runs task when specified file or dir was changed. -Uses Lurker library. - -``` php -taskWatch() - ->monitor('composer.json', function() { - $this->taskComposerUpdate()->run(); -})->monitor('src', function() { - $this->taskExec('phpunit')->run(); -})->run(); -?> -``` - -* `monitor($paths, $callable)` * `param string|string[]` $paths - diff --git a/lib/composer/vendor/consolidation/robo/docs/tasks/Bower.md b/lib/composer/vendor/consolidation/robo/docs/tasks/Bower.md deleted file mode 100644 index c54d6015d..000000000 --- a/lib/composer/vendor/consolidation/robo/docs/tasks/Bower.md +++ /dev/null @@ -1,60 +0,0 @@ -# Bower Tasks - -## Install - - -Bower Install - -``` php -taskBowerInstall()->run(); - -// prefer dist with custom path -$this->taskBowerInstall('path/to/my/bower') - ->noDev() - ->run(); -?> -``` - -* `allowRoot()` adds `allow-root` option to bower -* `forceLatest()` adds `force-latest` option to bower -* `noDev()` adds `production` option to bower -* `offline()` adds `offline` option to bower -* `dir($dir)` Changes working directory of command -* `printed($arg)` Should command output be printed -* `arg($arg)` Pass argument to executable. Its value will be automatically escaped. -* `args($args)` Pass methods parameters as arguments to executable. Argument values -* `rawArg($arg)` Pass the provided string in its raw (as provided) form as an argument to executable. -* `option($option, $value = null)` Pass option to executable. Options are prefixed with `--` , value can be provided in second parameter. -* `optionList($option, $value = null)` Pass multiple options to executable. Value can be a string or array. - -## Update - - -Bower Update - -``` php -taskBowerUpdate->run(); - -// prefer dist with custom path -$this->taskBowerUpdate('path/to/my/bower') - ->noDev() - ->run(); -?> -``` - -* `allowRoot()` adds `allow-root` option to bower -* `forceLatest()` adds `force-latest` option to bower -* `noDev()` adds `production` option to bower -* `offline()` adds `offline` option to bower -* `dir($dir)` Changes working directory of command -* `printed($arg)` Should command output be printed -* `arg($arg)` Pass argument to executable. Its value will be automatically escaped. -* `args($args)` Pass methods parameters as arguments to executable. Argument values -* `rawArg($arg)` Pass the provided string in its raw (as provided) form as an argument to executable. -* `option($option, $value = null)` Pass option to executable. Options are prefixed with `--` , value can be provided in second parameter. -* `optionList($option, $value = null)` Pass multiple options to executable. Value can be a string or array. - diff --git a/lib/composer/vendor/consolidation/robo/docs/tasks/Composer.md b/lib/composer/vendor/consolidation/robo/docs/tasks/Composer.md deleted file mode 100644 index 310c3ef32..000000000 --- a/lib/composer/vendor/consolidation/robo/docs/tasks/Composer.md +++ /dev/null @@ -1,179 +0,0 @@ -# Composer Tasks - -## DumpAutoload - - -Composer Dump Autoload - -``` php -taskComposerDumpAutoload()->run(); - -// dump auto loader with custom path -$this->taskComposerDumpAutoload('path/to/my/composer.phar') - ->preferDist() - ->run(); - -// optimize autoloader dump with custom path -$this->taskComposerDumpAutoload('path/to/my/composer.phar') - ->optimize() - ->run(); - -// optimize autoloader dump with custom path and no dev -$this->taskComposerDumpAutoload('path/to/my/composer.phar') - ->optimize() - ->noDev() - ->run(); -?> -``` - -* `optimize()` * `return` $this -* `preferDist()` adds `prefer-dist` option to composer -* `preferSource()` adds `prefer-source` option to composer -* `noDev()` adds `no-dev` option to composer -* `noAnsi()` adds `no-ansi` option to composer -* `ansi()` adds `ansi` option to composer -* `optimizeAutoloader()` adds `optimize-autoloader` option to composer -* `dir($dir)` Changes working directory of command -* `printed($arg)` Should command output be printed -* `arg($arg)` Pass argument to executable. Its value will be automatically escaped. -* `args($args)` Pass methods parameters as arguments to executable. Argument values -* `rawArg($arg)` Pass the provided string in its raw (as provided) form as an argument to executable. -* `option($option, $value = null)` Pass option to executable. Options are prefixed with `--` , value can be provided in second parameter. -* `optionList($option, $value = null)` Pass multiple options to executable. Value can be a string or array. - -## Install - - -Composer Install - -``` php -taskComposerInstall()->run(); - -// prefer dist with custom path -$this->taskComposerInstall('path/to/my/composer.phar') - ->preferDist() - ->run(); - -// optimize autoloader with custom path -$this->taskComposerInstall('path/to/my/composer.phar') - ->optimizeAutoloader() - ->run(); -?> -``` - -* `preferDist()` adds `prefer-dist` option to composer -* `preferSource()` adds `prefer-source` option to composer -* `noDev()` adds `no-dev` option to composer -* `noAnsi()` adds `no-ansi` option to composer -* `ansi()` adds `ansi` option to composer -* `optimizeAutoloader()` adds `optimize-autoloader` option to composer -* `dir($dir)` Changes working directory of command -* `printed($arg)` Should command output be printed -* `arg($arg)` Pass argument to executable. Its value will be automatically escaped. -* `args($args)` Pass methods parameters as arguments to executable. Argument values -* `rawArg($arg)` Pass the provided string in its raw (as provided) form as an argument to executable. -* `option($option, $value = null)` Pass option to executable. Options are prefixed with `--` , value can be provided in second parameter. -* `optionList($option, $value = null)` Pass multiple options to executable. Value can be a string or array. - -## Remove - - -Composer Validate - -``` php -taskComposerValidate()->run(); -?> -``` - -* `dev()` * `return` $this -* `noProgress()` * `return` $this -* `noUpdate()` * `return` $this -* `updateNoDev()` * `return` $this -* `noUpdateWithDependencies()` * `return` $this -* `preferDist()` adds `prefer-dist` option to composer -* `preferSource()` adds `prefer-source` option to composer -* `noDev()` adds `no-dev` option to composer -* `noAnsi()` adds `no-ansi` option to composer -* `ansi()` adds `ansi` option to composer -* `optimizeAutoloader()` adds `optimize-autoloader` option to composer -* `dir($dir)` Changes working directory of command -* `printed($arg)` Should command output be printed -* `arg($arg)` Pass argument to executable. Its value will be automatically escaped. -* `args($args)` Pass methods parameters as arguments to executable. Argument values -* `rawArg($arg)` Pass the provided string in its raw (as provided) form as an argument to executable. -* `option($option, $value = null)` Pass option to executable. Options are prefixed with `--` , value can be provided in second parameter. -* `optionList($option, $value = null)` Pass multiple options to executable. Value can be a string or array. - -## Update - - -Composer Update - -``` php -taskComposerUpdate()->run(); - -// prefer dist with custom path -$this->taskComposerUpdate('path/to/my/composer.phar') - ->preferDist() - ->run(); - -// optimize autoloader with custom path -$this->taskComposerUpdate('path/to/my/composer.phar') - ->optimizeAutoloader() - ->run(); -?> -``` - -* `preferDist()` adds `prefer-dist` option to composer -* `preferSource()` adds `prefer-source` option to composer -* `noDev()` adds `no-dev` option to composer -* `noAnsi()` adds `no-ansi` option to composer -* `ansi()` adds `ansi` option to composer -* `optimizeAutoloader()` adds `optimize-autoloader` option to composer -* `dir($dir)` Changes working directory of command -* `printed($arg)` Should command output be printed -* `arg($arg)` Pass argument to executable. Its value will be automatically escaped. -* `args($args)` Pass methods parameters as arguments to executable. Argument values -* `rawArg($arg)` Pass the provided string in its raw (as provided) form as an argument to executable. -* `option($option, $value = null)` Pass option to executable. Options are prefixed with `--` , value can be provided in second parameter. -* `optionList($option, $value = null)` Pass multiple options to executable. Value can be a string or array. - -## Validate - - -Composer Validate - -``` php -taskComposerValidate()->run(); -?> -``` - -* `noCheckAll()` * `return` $this -* `noCheckLock()` * `return` $this -* `noCheckPublish()` * `return` $this -* `withDependencies()` * `return` $this -* `strict()` * `return` $this -* `preferDist()` adds `prefer-dist` option to composer -* `preferSource()` adds `prefer-source` option to composer -* `noDev()` adds `no-dev` option to composer -* `noAnsi()` adds `no-ansi` option to composer -* `ansi()` adds `ansi` option to composer -* `optimizeAutoloader()` adds `optimize-autoloader` option to composer -* `dir($dir)` Changes working directory of command -* `printed($arg)` Should command output be printed -* `arg($arg)` Pass argument to executable. Its value will be automatically escaped. -* `args($args)` Pass methods parameters as arguments to executable. Argument values -* `rawArg($arg)` Pass the provided string in its raw (as provided) form as an argument to executable. -* `option($option, $value = null)` Pass option to executable. Options are prefixed with `--` , value can be provided in second parameter. -* `optionList($option, $value = null)` Pass multiple options to executable. Value can be a string or array. - diff --git a/lib/composer/vendor/consolidation/robo/docs/tasks/Development.md b/lib/composer/vendor/consolidation/robo/docs/tasks/Development.md deleted file mode 100644 index f5c715572..000000000 --- a/lib/composer/vendor/consolidation/robo/docs/tasks/Development.md +++ /dev/null @@ -1,282 +0,0 @@ -# Development Tasks -## Changelog - - -Helps to manage changelog file. -Creates or updates `changelog.md` file with recent changes in current version. - -``` php -taskChangelog() - ->version($version) - ->change("released to github") - ->run(); -?> -``` - -Changes can be asked from Console - -``` php -taskChangelog() - ->version($version) - ->askForChanges() - ->run(); -?> -``` - -* `Development\Changelog filename(string $filename)` -* `Development\Changelog anchor(string $anchor)` -* `Development\Changelog version(string $version)` - -* `filename($filename)` * `param string` $filename -* `log($item)` * `param string` $item -* `anchor($anchor)` * `param string` $anchor -* `version($version)` * `param string` $version -* `changes(array $data)` * `param array` $data -* `change($change)` * `param string` $change -* `getChanges()` @return array - -## GenerateMarkdownDoc - - -Simple documentation generator from source files. -Takes classes, properties and methods with their docblocks and writes down a markdown file. - -``` php -taskGenDoc('models.md') - ->docClass('Model\User') // take class Model\User - ->docClass('Model\Post') // take class Model\Post - ->filterMethods(function(\ReflectionMethod $r) { - return $r->isPublic() or $r->isProtected(); // process public and protected methods - })->processClass(function(\ReflectionClass $r, $text) { - return "Class ".$r->getName()."\n\n$text\n\n###Methods\n"; - })->run(); -``` - -By default this task generates a documentation for each public method of a class. -It combines method signature with a docblock. Both can be post-processed. - -``` php -taskGenDoc('models.md') - ->docClass('Model\User') - ->processClassSignature(false) // false can be passed to not include class signature - ->processClassDocBlock(function(\ReflectionClass $r, $text) { - return "[This is part of application model]\n" . $text; - })->processMethodSignature(function(\ReflectionMethod $r, $text) { - return "#### {$r->name}()"; - })->processMethodDocBlock(function(\ReflectionMethod $r, $text) { - return strpos($r->name, 'save')===0 ? "[Saves to the database]\n" . $text : $text; - })->run(); -``` - -* ` docClass(string $classname)` put a class you want to be documented -* ` filterMethods(\Closure $func)` using callback function filter out methods that won't be documented -* ` filterClasses(\Closure $func)` using callback function filter out classes that won't be documented -* ` filterProperties(\Closure $func)` using callback function filter out properties that won't be documented -* ` processClass(\Closure $func)` post-process class documentation -* ` processClassSignature(\Closure $func)` post-process class signature. Provide *false* to skip. -* ` processClassDocBlock(\Closure $func)` post-process class docblock contents. Provide *false* to skip. -* ` processMethod(\Closure $func)` post-process method documentation. Provide *false* to skip. -* ` processMethodSignature(\Closure $func)` post-process method signature. Provide *false* to skip. -* ` processMethodDocBlock(\Closure $func)` post-process method docblock contents. Provide *false* to skip. -* ` processProperty(\Closure $func)` post-process property documentation. Provide *false* to skip. -* ` processPropertySignature(\Closure $func)` post-process property signature. Provide *false* to skip. -* ` processPropertyDocBlock(\Closure $func)` post-process property docblock contents. Provide *false* to skip. -* ` reorder(\Closure $func)` use a function to reorder classes -* ` reorderMethods(\Closure $func)` use a function to reorder methods in class -* ` prepend($text)` inserts text into beginning of markdown file -* ` append($text)` inserts text in the end of markdown file - -* `docClass($item)` * `param string` $item -* `filterMethods($filterMethods)` * `param callable` $filterMethods -* `filterClasses($filterClasses)` * `param callable` $filterClasses -* `filterProperties($filterProperties)` * `param callable` $filterProperties -* `processClass($processClass)` * `param callable` $processClass -* `processClassSignature($processClassSignature)` * `param callable|false` $processClassSignature -* `processClassDocBlock($processClassDocBlock)` * `param callable|false` $processClassDocBlock -* `processMethod($processMethod)` * `param callable|false` $processMethod -* `processMethodSignature($processMethodSignature)` * `param callable|false` $processMethodSignature -* `processMethodDocBlock($processMethodDocBlock)` * `param callable|false` $processMethodDocBlock -* `processProperty($processProperty)` * `param callable|false` $processProperty -* `processPropertySignature($processPropertySignature)` * `param callable|false` $processPropertySignature -* `processPropertyDocBlock($processPropertyDocBlock)` * `param callable|false` $processPropertyDocBlock -* `reorder($reorder)` * `param callable` $reorder -* `reorderMethods($reorderMethods)` * `param callable` $reorderMethods -* `reorderProperties($reorderProperties)` * `param callable` $reorderProperties -* `filename($filename)` * `param string` $filename -* `prepend($prepend)` * `param string` $prepend -* `append($append)` * `param string` $append -* `text($text)` * `param string` $text -* `textForClass($item)` * `param string` $item - -## Generate - - -Generate a Robo Task that is a wrapper around an existing class. - -``` php -taskGenerateTask('Symfony\Component\Filesystem\Filesystem', 'FilesystemStack') - ->run(); -``` - - - - -## GitHubRelease - - -Publishes new GitHub release. - -``` php -taskGitHubRelease('0.1.0') - ->uri('consolidation-org/Robo') - ->description('Add stuff people need.') - ->change('Fix #123') - ->change('Add frobulation method to all widgets') - ->run(); -?> -``` - -* `tag($tag)` * `param string` $tag -* `draft($draft)` * `param bool` $draft -* `name($name)` * `param string` $name -* `description($description)` * `param string` $description -* `prerelease($prerelease)` * `param bool` $prerelease -* `comittish($comittish)` * `param string` $comittish -* `appendDescription($description)` * `param string` $description -* `changes(array $changes)` -* `change($change)` * `param string` $change -* `repo($repo)` * `param string` $repo -* `owner($owner)` * `param string` $owner -* `uri($uri)` * `param string` $uri -* `user($user)` * `param string` $user -* `password($password)` * `param` $password - -## OpenBrowser - - -Opens the default's user browser -code inspired from openBrowser() function in https://github.com/composer/composer/blob/master/src/Composer/Command/HomeCommand.php - -``` php -taskOpenBrowser('http://localhost') - ->run(); - -// open two browser windows -$this->taskOpenBrowser([ - 'http://localhost/mysite', - 'http://localhost/mysite2' - ]) - ->run(); -``` - - - -## PackPhar - - -Creates Phar. - -``` php -taskPackPhar('package/codecept.phar') - ->compress() - ->stub('package/stub.php'); - - $finder = Finder::create() - ->name('*.php') - ->in('src'); - - foreach ($finder as $file) { - $pharTask->addFile('src/'.$file->getRelativePathname(), $file->getRealPath()); - } - - $finder = Finder::create()->files() - ->name('*.php') - ->in('vendor'); - - foreach ($finder as $file) { - $pharTask->addStripped('vendor/'.$file->getRelativePathname(), $file->getRealPath()); - } - $pharTask->run(); - - // verify Phar is packed correctly - $code = $this->_exec('php package/codecept.phar'); -?> -``` - -* `compress($compress = null)` * `param bool` $compress -* `stub($stub)` * `param string` $stub -* `addStripped($path, $file)` * `param string` $path -* `addFile($path, $file)` * `param string` $path -* `addFiles($files)` * `param \Symfony\Component\Finder\SplFileInfo[]` $files -* `executable($file)` * `param string` $file - -## PhpServer - - -Runs PHP server and stops it when task finishes. - -``` php -taskServer(8000) - ->dir('public') - ->run(); - -// run with IP 0.0.0.0 -$this->taskServer(8000) - ->host('0.0.0.0') - ->run(); - -// execute server in background -$this->taskServer(8000) - ->background() - ->run(); -?> -``` - -* `host($host)` * `param string` $host -* `dir($path)` * `param string` $path -* `background()` Executes command in background mode (asynchronously) -* `timeout($timeout)` Stop command if it runs longer then $timeout in seconds -* `idleTimeout($timeout)` Stops command if it does not output something for a while -* `env(array $env)` Sets the environment variables for the command -* `simulate($context)` {@inheritdoc} -* `printed($arg)` Should command output be printed -* `arg($arg)` Pass argument to executable. Its value will be automatically escaped. -* `args($args)` Pass methods parameters as arguments to executable. Argument values -* `rawArg($arg)` Pass the provided string in its raw (as provided) form as an argument to executable. -* `option($option, $value = null)` Pass option to executable. Options are prefixed with `--` , value can be provided in second parameter. -* `optionList($option, $value = null)` Pass multiple options to executable. Value can be a string or array. - -## SemVer - - -Helps to maintain `.semver` file. - -```php -taskSemVer('.semver') - ->increment() - ->run(); -?> -``` - - -* `__toString()` @return string -* `setFormat($format)` * `param string` $format -* `setMetadataSeparator($separator)` * `param string` $separator -* `setPrereleaseSeparator($separator)` * `param string` $separator -* `increment($what = null)` * `param string` $what -* `prerelease($tag = null)` * `param string` $tag -* `metadata($data)` * `param array|string` $data - diff --git a/lib/composer/vendor/consolidation/robo/docs/tasks/Docker.md b/lib/composer/vendor/consolidation/robo/docs/tasks/Docker.md deleted file mode 100644 index 712b236ec..000000000 --- a/lib/composer/vendor/consolidation/robo/docs/tasks/Docker.md +++ /dev/null @@ -1,249 +0,0 @@ -# Docker Tasks - -## Build - - -Builds Docker image - -```php -taskDockerBuild()->run(); - -$this->taskDockerBuild('path/to/dir') - ->tag('database') - ->run(); - -?> - -``` - -Class Build -@package Robo\Task\Docker - -* `tag($tag)` * `param string` $tag -* `dir($dir)` Changes working directory of command -* `printed($arg)` Should command output be printed -* `arg($arg)` Pass argument to executable. Its value will be automatically escaped. -* `args($args)` Pass methods parameters as arguments to executable. Argument values -* `rawArg($arg)` Pass the provided string in its raw (as provided) form as an argument to executable. -* `option($option, $value = null)` Pass option to executable. Options are prefixed with `--` , value can be provided in second parameter. -* `optionList($option, $value = null)` Pass multiple options to executable. Value can be a string or array. - -## Commit - - -Commits docker container to an image - -``` -$this->taskDockerCommit($containerId) - ->name('my/database') - ->run(); - -// alternatively you can take the result from DockerRun task: - -$result = $this->taskDockerRun('db') - ->exec('./prepare_database.sh') - ->run(); - -$task->dockerCommit($result) - ->name('my/database') - ->run(); -``` - -* `name($name)` * `param` $name -* `dir($dir)` Changes working directory of command -* `printed($arg)` Should command output be printed -* `arg($arg)` Pass argument to executable. Its value will be automatically escaped. -* `args($args)` Pass methods parameters as arguments to executable. Argument values -* `rawArg($arg)` Pass the provided string in its raw (as provided) form as an argument to executable. -* `option($option, $value = null)` Pass option to executable. Options are prefixed with `--` , value can be provided in second parameter. -* `optionList($option, $value = null)` Pass multiple options to executable. Value can be a string or array. - -## Exec - - -Executes command inside running Docker container - -```php -taskDockerRun('test_env') - ->detached() - ->run(); - -$this->taskDockerExec($test) - ->interactive() - ->exec('./runtests') - ->run(); - -// alternatively use commands from other tasks - -$this->taskDockerExec($test) - ->interactive() - ->exec($this->taskCodecept()->suite('acceptance')) - ->run(); -?> -``` - - -* `detached()` * `return` $this -* `interactive()` * `return` $this -* `exec($command)` * `param string|\Robo\Contract\CommandInterface` $command -* `dir($dir)` Changes working directory of command -* `printed($arg)` Should command output be printed -* `arg($arg)` Pass argument to executable. Its value will be automatically escaped. -* `args($args)` Pass methods parameters as arguments to executable. Argument values -* `rawArg($arg)` Pass the provided string in its raw (as provided) form as an argument to executable. -* `option($option, $value = null)` Pass option to executable. Options are prefixed with `--` , value can be provided in second parameter. -* `optionList($option, $value = null)` Pass multiple options to executable. Value can be a string or array. - -## Pull - - -Pulls an image from DockerHub - -```php -taskDockerPull('wordpress') - ->run(); - -?> -``` - - -* `dir($dir)` Changes working directory of command -* `printed($arg)` Should command output be printed -* `arg($arg)` Pass argument to executable. Its value will be automatically escaped. -* `args($args)` Pass methods parameters as arguments to executable. Argument values -* `rawArg($arg)` Pass the provided string in its raw (as provided) form as an argument to executable. -* `option($option, $value = null)` Pass option to executable. Options are prefixed with `--` , value can be provided in second parameter. -* `optionList($option, $value = null)` Pass multiple options to executable. Value can be a string or array. - -## Remove - - -Remove docker container - -```php -taskDockerRemove($container) - ->run(); -?> -``` - - -* `dir($dir)` Changes working directory of command -* `printed($arg)` Should command output be printed -* `arg($arg)` Pass argument to executable. Its value will be automatically escaped. -* `args($args)` Pass methods parameters as arguments to executable. Argument values -* `rawArg($arg)` Pass the provided string in its raw (as provided) form as an argument to executable. -* `option($option, $value = null)` Pass option to executable. Options are prefixed with `--` , value can be provided in second parameter. -* `optionList($option, $value = null)` Pass multiple options to executable. Value can be a string or array. - - -## Run - - -Performs `docker run` on a container. - -```php -taskDockerRun('mysql')->run(); - -$result = $this->taskDockerRun('my_db_image') - ->env('DB', 'database_name') - ->volume('/path/to/data', '/data') - ->detached() - ->publish(3306) - ->name('my_mysql') - ->run(); - -// retrieve container's cid: -$this->say("Running container ".$result->getCid()); - -// execute script inside container -$result = $this->taskDockerRun('db') - ->exec('prepare_test_data.sh') - ->run(); - -$this->taskDockerCommit($result) - ->name('test_db') - ->run(); - -// link containers -$mysql = $this->taskDockerRun('mysql') - ->name('wp_db') // important to set name for linked container - ->env('MYSQL_ROOT_PASSWORD', '123456') - ->run(); - -$this->taskDockerRun('wordpress') - ->link($mysql) - ->publish(80, 8080) - ->detached() - ->run(); - -?> -``` - - -* `detached()` * `return` $this -* `interactive()` * `return` $this -* `exec($run)` * `param string|\Robo\Contract\CommandInterface` $run -* `volume($from, $to = null)` * `param string` $from -* `env($variable, $value = null)` * `param string` $variable -* `publish($port = null, $portTo = null)` * `param null|int` $port -* `containerWorkdir($dir)` * `param string` $dir -* `user($user)` * `param string` $user -* `privileged()` * `return` $this -* `name($name)` * `param string` $name -* `link($name, $alias)` * `param string|\Robo\Task\Docker\Result` $name -* `tmpDir($dir)` * `param string` $dir -* `getTmpDir()` @return string -* `getUniqId()` @return string -* `dir($dir)` Changes working directory of command -* `printed($arg)` Should command output be printed -* `arg($arg)` Pass argument to executable. Its value will be automatically escaped. -* `args($args)` Pass methods parameters as arguments to executable. Argument values -* `rawArg($arg)` Pass the provided string in its raw (as provided) form as an argument to executable. -* `option($option, $value = null)` Pass option to executable. Options are prefixed with `--` , value can be provided in second parameter. -* `optionList($option, $value = null)` Pass multiple options to executable. Value can be a string or array. - -## Start - - -Starts Docker container - -```php -taskDockerStart($cidOrResult) - ->run(); -?> -``` - -* `dir($dir)` Changes working directory of command -* `printed($arg)` Should command output be printed -* `arg($arg)` Pass argument to executable. Its value will be automatically escaped. -* `args($args)` Pass methods parameters as arguments to executable. Argument values -* `rawArg($arg)` Pass the provided string in its raw (as provided) form as an argument to executable. -* `option($option, $value = null)` Pass option to executable. Options are prefixed with `--` , value can be provided in second parameter. -* `optionList($option, $value = null)` Pass multiple options to executable. Value can be a string or array. - -## Stop - - -Stops Docker container - -```php -taskDockerStop($cidOrResult) - ->run(); -?> -``` - -* `dir($dir)` Changes working directory of command -* `printed($arg)` Should command output be printed -* `arg($arg)` Pass argument to executable. Its value will be automatically escaped. -* `args($args)` Pass methods parameters as arguments to executable. Argument values -* `rawArg($arg)` Pass the provided string in its raw (as provided) form as an argument to executable. -* `option($option, $value = null)` Pass option to executable. Options are prefixed with `--` , value can be provided in second parameter. -* `optionList($option, $value = null)` Pass multiple options to executable. Value can be a string or array. - diff --git a/lib/composer/vendor/consolidation/robo/docs/tasks/File.md b/lib/composer/vendor/consolidation/robo/docs/tasks/File.md deleted file mode 100644 index 7cb86a3ae..000000000 --- a/lib/composer/vendor/consolidation/robo/docs/tasks/File.md +++ /dev/null @@ -1,129 +0,0 @@ -# File Tasks -## Concat - - -Merges files into one. Used for preparing assets. - -``` php -taskConcat([ - 'web/assets/screen.css', - 'web/assets/print.css', - 'web/assets/theme.css' - ]) - ->to('web/assets/style.css') - ->run() -?> -``` - -* `to($dst)` set the destination file - -## Replace - - -Performs search and replace inside a files. - -``` php -taskReplaceInFile('VERSION') - ->from('0.2.0') - ->to('0.3.0') - ->run(); - -$this->taskReplaceInFile('README.md') - ->from(date('Y')-1) - ->to(date('Y')) - ->run(); - -$this->taskReplaceInFile('config.yml') - ->regex('~^service:~') - ->to('services:') - ->run(); - -$this->taskReplaceInFile('box/robo.txt') - ->from(array('##dbname##', '##dbhost##')) - ->to(array('robo', 'localhost')) - ->run(); -?> -``` - -* `regex(string)` regex to match string to be replaced -* `from(string|array)` string(s) to be replaced -* `to(string|array)` value(s) to be set as a replacement - -* `filename($filename)` * `param string` $filename -* `from($from)` * `param string` $from -* `to($to)` * `param string` $to -* `regex($regex)` * `param string` $regex - -## TmpFile - - -Create a temporary file that is automatically cleaned up -once the task collection is is part of completes. When created, -it is given a random filename. - -This temporary file may be manipulated exacatly like taskWrite(). -It is deleted as soon as the collection it is a part of completes -or rolls back. - -``` php -collectionBuilder(); -$tmpFilePath = $collection->taskTmpFile() - ->line('-----') - ->line(date('Y-m-d').' '.$title) - ->line('----') - ->getPath(); -$collection->run(); -?> -``` - -* `complete()` Delete this file when our collection completes. -* `filename($filename)` * `param string` $filename -* `append($append = null)` * `param bool` $append -* `line($line)` add a line. -* `lines(array $lines)` add more lines. -* `text($text)` add a text. -* `textFromFile($filename)` add a text from a file. -* `place($name, $val)` substitute a placeholder with value, placeholder must be enclosed by `{}`. -* `replace($string, $replacement)` replace any string with value. -* `regexReplace($pattern, $replacement)` replace any string with value using regular expression. -* `appendIfMatches($pattern, $text)` Append the provided text to the end of the buffer if the provided -* `appendUnlessMatches($pattern, $text)` Append the provided text to the end of the buffer unless the provided -* `originalContents()` @return string -* `wouldChange()` @return bool -* `getPath()` @return string - -## Write - - -Writes to file. - -``` php -taskWriteToFile('blogpost.md') - ->line('-----') - ->line(date('Y-m-d').' '.$title) - ->line('----') - ->run(); -?> -``` - -* `append()` - -* `filename($filename)` * `param string` $filename -* `append($append = null)` * `param bool` $append -* `line($line)` add a line. -* `lines(array $lines)` add more lines. -* `text($text)` add a text. -* `textFromFile($filename)` add a text from a file. -* `place($name, $val)` substitute a placeholder with value, placeholder must be enclosed by `{}`. -* `replace($string, $replacement)` replace any string with value. -* `regexReplace($pattern, $replacement)` replace any string with value using regular expression. -* `appendIfMatches($pattern, $text)` Append the provided text to the end of the buffer if the provided -* `appendUnlessMatches($pattern, $text)` Append the provided text to the end of the buffer unless the provided -* `originalContents()` @return string -* `wouldChange()` @return bool -* `getPath()` @return string - diff --git a/lib/composer/vendor/consolidation/robo/docs/tasks/Filesystem.md b/lib/composer/vendor/consolidation/robo/docs/tasks/Filesystem.md deleted file mode 100644 index 20bc01709..000000000 --- a/lib/composer/vendor/consolidation/robo/docs/tasks/Filesystem.md +++ /dev/null @@ -1,217 +0,0 @@ -# Filesystem Tasks - -## CleanDir - - -Deletes all files from specified dir, ignoring git files. - -``` php -taskCleanDir(['tmp','logs'])->run(); -// as shortcut -$this->_cleanDir('app/cache'); -?> -``` - - - -## CopyDir - - -Copies one dir into another - -``` php -taskCopyDir(['dist/config' => 'config'])->run(); -// as shortcut -$this->_copyDir('dist/config', 'config'); -?> -``` - -* `dirPermissions($value)` Sets the default folder permissions for the destination if it doesn't exist -* `exclude($exclude = null)` List files to exclude. - -## DeleteDir - - -Deletes dir - -``` php -taskDeleteDir('tmp')->run(); -// as shortcut -$this->_deleteDir(['tmp', 'log']); -?> -``` - - - -## FilesystemStack - - -Wrapper for [Symfony Filesystem](http://symfony.com/doc/current/components/filesystem.html) Component. -Comands are executed in stack and can be stopped on first fail with `stopOnFail` option. - -``` php -taskFilesystemStack() - ->mkdir('logs') - ->touch('logs/.gitignore') - ->chgrp('www', 'www-data') - ->symlink('/var/log/nginx/error.log', 'logs/error.log') - ->run(); - -// one line -$this->_touch('.gitignore'); -$this->_mkdir('logs'); - -?> -``` - -* `$this mkdir($dir)` -* `$this touch($file)` -* `$this copy($from, $to, $force = null)` -* `$this chmod($file, $permissions, $umask = null, $recursive = null)` -* `$this chgrp($file, $group, $recursive = null)` -* `$this chown($file, $user, $recursive = null)` -* `$this remove($file)` -* `$this rename($from, $to)` -* `$this symlink($from, $to)` -* `$this mirror($from, $to)` - -* `stopOnFail($stop = null)` * `param bool` $stop - -## FlattenDir - - -Searches for files in a nested directory structure and copies them to -a target directory with or without the parent directories. The task was -inspired by [gulp-flatten](https://www.npmjs.com/package/gulp-flatten). - -Example directory structure: - -``` -└── assets - ├── asset-library1 - │ ├── README.md - │ └── asset-library1.min.js - └── asset-library2 - ├── README.md - └── asset-library2.min.js -``` - -The following code will search the `*.min.js` files and copy them -inside a new `dist` folder: - -``` php -taskFlattenDir(['assets/*.min.js' => 'dist'])->run(); -// or use shortcut -$this->_flattenDir('assets/*.min.js', 'dist'); -?> -``` - -You can also define the target directory with an additional method, instead of -key/value pairs. More similar to the gulp-flatten syntax: - -``` php -taskFlattenDir(['assets/*.min.js']) - ->to('dist') - ->run(); -?> -``` - -You can also append parts of the parent directories to the target path. If you give -the value `1` to the `includeParents()` method, then the top parent will be appended -to the target directory resulting in a path such as `dist/assets/asset-library1.min.js`. - -If you give a negative number, such as `-1` (the same as specifying `array(0, 1)` then -the bottom parent will be appended, resulting in a path such as -`dist/asset-library1/asset-library1.min.js`. - -The top parent directory will always be starting from the relative path to the current -directory. You can override that with the `parentDir()` method. If in the above example -you would specify `assets`, then the top parent directory would be `asset-library1`. - -``` php -taskFlattenDir(['assets/*.min.js' => 'dist']) - ->parentDir('assets') - ->includeParents(1) - ->run(); -?> -``` - -* `dirPermissions($permission)` Sets the default folder permissions for the destination if it does not exist. -* `includeParents($parents)` Sets the value from which direction and how much parent dirs should be included. -* `parentDir($dir)` Sets the parent directory from which the relative parent directories will be calculated. -* `to($target)` Sets the target directory where the files will be copied to. - -## MirrorDir - - -Mirrors a directory to another - -``` php -taskMirrorDir(['dist/config/' => 'config/'])->run(); -// or use shortcut -$this->_mirrorDir('dist/config/', 'config/'); - -?> -``` - - - -## TmpDir - - -Create a temporary directory that is automatically cleaned up -once the task collection is is part of completes. - -Use WorkDir if you do not want the directory to be deleted. - -``` php -run(). -$collection = $this->collectionBuilder(); -$tmpPath = $collection->tmpDir()->getPath(); -$collection->taskFilesystemStack() - ->mkdir("$tmpPath/log") - ->touch("$tmpPath/log/error.txt"); -$collection->run(); -// as shortcut (deleted when program exits) -$tmpPath = $this->_tmpDir(); -?> -``` - -* `cwd($shouldChangeWorkingDirectory = null)` Flag that we should cwd to the temporary directory when it is -* `complete()` Delete this directory when our collection completes. -* `getPath()` Get a reference to the path to the temporary directory, so that - -## WorkDir - - -Create a temporary working directory that is automatically renamed to its -final desired location if all of the tasks in the collection succeed. If -there is a rollback, then the working directory is deleted. - -``` php -collectionBuilder(); -$workingPath = $collection->workDir("build")->getPath(); -$collection->taskFilesystemStack() - ->mkdir("$workingPath/log") - ->touch("$workingPath/log/error.txt"); -$collection->run(); -?> -``` - -* `complete()` Move our working directory into its final destination once the -* `rollback()` Delete our working directory -* `getPath()` Get a reference to the path to the temporary directory, so that -* `cwd($shouldChangeWorkingDirectory = null)` Flag that we should cwd to the temporary directory when it is - diff --git a/lib/composer/vendor/consolidation/robo/docs/tasks/Gulp.md b/lib/composer/vendor/consolidation/robo/docs/tasks/Gulp.md deleted file mode 100644 index fd387cc4e..000000000 --- a/lib/composer/vendor/consolidation/robo/docs/tasks/Gulp.md +++ /dev/null @@ -1,31 +0,0 @@ -# Gulp Tasks - -## Run - - -Gulp Run - -``` php -taskGulpRun()->run(); - -// run task 'clean' with --silent option -$this->taskGulpRun('clean') - ->silent() - ->run(); -?> -``` - -* `silent()` adds `silent` option to gulp -* `noColor()` adds `--no-color` option to gulp -* `color()` adds `--color` option to gulp -* `simple()` adds `--tasks-simple` option to gulp -* `dir($dir)` Changes working directory of command -* `printed($arg)` Should command output be printed -* `arg($arg)` Pass argument to executable. Its value will be automatically escaped. -* `args($args)` Pass methods parameters as arguments to executable. Argument values -* `rawArg($arg)` Pass the provided string in its raw (as provided) form as an argument to executable. -* `option($option, $value = null)` Pass option to executable. Options are prefixed with `--` , value can be provided in second parameter. -* `optionList($option, $value = null)` Pass multiple options to executable. Value can be a string or array. - diff --git a/lib/composer/vendor/consolidation/robo/docs/tasks/Npm.md b/lib/composer/vendor/consolidation/robo/docs/tasks/Npm.md deleted file mode 100644 index 2a60f2afb..000000000 --- a/lib/composer/vendor/consolidation/robo/docs/tasks/Npm.md +++ /dev/null @@ -1,54 +0,0 @@ -# Npm Tasks - -## Install - - -Npm Install - -``` php -taskNpmInstall()->run(); - -// prefer dist with custom path -$this->taskNpmInstall('path/to/my/npm') - ->noDev() - ->run(); -?> -``` - -* `noDev()` adds `production` option to npm -* `dir($dir)` Changes working directory of command -* `printed($arg)` Should command output be printed -* `arg($arg)` Pass argument to executable. Its value will be automatically escaped. -* `args($args)` Pass methods parameters as arguments to executable. Argument values -* `rawArg($arg)` Pass the provided string in its raw (as provided) form as an argument to executable. -* `option($option, $value = null)` Pass option to executable. Options are prefixed with `--` , value can be provided in second parameter. -* `optionList($option, $value = null)` Pass multiple options to executable. Value can be a string or array. - -## Update - - -Npm Update - -```php -taskNpmUpdate()->run(); - -// prefer dist with custom path -$this->taskNpmUpdate('path/to/my/npm') - ->noDev() - ->run(); -?> -``` - -* `noDev()` adds `production` option to npm -* `dir($dir)` Changes working directory of command -* `printed($arg)` Should command output be printed -* `arg($arg)` Pass argument to executable. Its value will be automatically escaped. -* `args($args)` Pass methods parameters as arguments to executable. Argument values -* `rawArg($arg)` Pass the provided string in its raw (as provided) form as an argument to executable. -* `option($option, $value = null)` Pass option to executable. Options are prefixed with `--` , value can be provided in second parameter. -* `optionList($option, $value = null)` Pass multiple options to executable. Value can be a string or array. - diff --git a/lib/composer/vendor/consolidation/robo/docs/tasks/Remote.md b/lib/composer/vendor/consolidation/robo/docs/tasks/Remote.md deleted file mode 100644 index 7121b7c8c..000000000 --- a/lib/composer/vendor/consolidation/robo/docs/tasks/Remote.md +++ /dev/null @@ -1,143 +0,0 @@ -# Remote Tasks -## Rsync - - -Executes rsync in a flexible manner. - -``` php -$this->taskRsync() - ->fromPath('src/') - ->toHost('localhost') - ->toUser('dev') - ->toPath('/var/www/html/app/') - ->remoteShell('ssh -i public_key') - ->recursive() - ->excludeVcs() - ->checksum() - ->wholeFile() - ->verbose() - ->progress() - ->humanReadable() - ->stats() - ->run(); -``` - -You could also clone the task and do a dry-run first: - -``` php -$rsync = $this->taskRsync() - ->fromPath('src/') - ->toPath('example.com:/var/www/html/app/') - ->archive() - ->excludeVcs() - ->progress() - ->stats(); - -$dryRun = clone $rsync; -$dryRun->dryRun()->run(); -if ('y' === $this->ask('Do you want to run (y/n)')) { - $rsync->run(); -} -``` - -* ` fromUser(string $user)` -* ` fromHost(string $hostname)` -* ` toUser(string $user)` -* ` toHost(string $hostname)` - -* `fromPath($path)` This can either be a full rsync path spec (user@host:path) or just a path. -* `toPath($path)` This can either be a full rsync path spec (user@host:path) or just a path. -* `fromUser($fromUser)` * `param string` $fromUser -* `fromHost($fromHost)` * `param string` $fromHost -* `toUser($toUser)` * `param string` $toUser -* `toHost($toHost)` * `param string` $toHost -* `progress()` * `return` $this -* `stats()` * `return` $this -* `recursive()` * `return` $this -* `verbose()` * `return` $this -* `checksum()` * `return` $this -* `archive()` * `return` $this -* `compress()` * `return` $this -* `owner()` * `return` $this -* `group()` * `return` $this -* `times()` * `return` $this -* `delete()` * `return` $this -* `timeout($seconds)` * `param int` $seconds -* `humanReadable()` * `return` $this -* `wholeFile()` * `return` $this -* `dryRun()` * `return` $this -* `itemizeChanges()` * `return` $this -* `excludeVcs()` Excludes .git, .svn and .hg items at any depth. -* `exclude($pattern)` * `param array|string` $pattern -* `excludeFrom($file)` * `param string` $file -* `includeFilter($pattern)` * `param array|string` $pattern -* `filter($pattern)` * `param array|string` $pattern -* `filesFrom($file)` * `param string` $file -* `remoteShell($command)` * `param string` $command -* `dir($dir)` Changes working directory of command -* `printed($arg)` Should command output be printed -* `arg($arg)` Pass argument to executable. Its value will be automatically escaped. -* `args($args)` Pass methods parameters as arguments to executable. Argument values -* `rawArg($arg)` Pass the provided string in its raw (as provided) form as an argument to executable. -* `option($option, $value = null)` Pass option to executable. Options are prefixed with `--` , value can be provided in second parameter. -* `optionList($option, $value = null)` Pass multiple options to executable. Value can be a string or array. - -## Ssh - - -Runs multiple commands on a remote server. -Per default, commands are combined with &&, unless stopOnFail is false. - -```php -taskSshExec('remote.example.com', 'user') - ->remoteDir('/var/www/html') - ->exec('ls -la') - ->exec('chmod g+x logs') - ->run(); - -``` - -You can even exec other tasks (which implement CommandInterface): - -```php -$gitTask = $this->taskGitStack() - ->checkout('master') - ->pull(); - -$this->taskSshExec('remote.example.com') - ->remoteDir('/var/www/html/site') - ->exec($gitTask) - ->run(); -``` - -You can configure the remote directory for all future calls: - -```php -::configure('remoteDir', '/some-dir'); -``` - -* `$this stopOnFail(bool $stopOnFail)` Whether or not to chain commands together with && - and stop the chain if one command fails -* `$this remoteDir(string $remoteWorkingDirectory)` Changes to the given directory before running commands - -* `hostname($hostname)` * `param string` $hostname -* `user($user)` * `param string` $user -* `stopOnFail($stopOnFail = null)` * `param bool` $stopOnFail -* `remoteDir($remoteDir)` * `param string` $remoteDir -* `identityFile($filename)` * `param string` $filename -* `port($port)` * `param int` $port -* `forcePseudoTty()` * `return` $this -* `quiet()` * `return` $this -* `verbose()` * `return` $this -* `exec($command)` * `param string|string[]|CommandInterface` $command -* `simulate($context)` {@inheritdoc} -* `dir($dir)` Changes working directory of command -* `printed($arg)` Should command output be printed -* `arg($arg)` Pass argument to executable. Its value will be automatically escaped. -* `args($args)` Pass methods parameters as arguments to executable. Argument values -* `rawArg($arg)` Pass the provided string in its raw (as provided) form as an argument to executable. -* `option($option, $value = null)` Pass option to executable. Options are prefixed with `--` , value can be provided in second parameter. -* `optionList($option, $value = null)` Pass multiple options to executable. Value can be a string or array. - diff --git a/lib/composer/vendor/consolidation/robo/docs/tasks/Testing.md b/lib/composer/vendor/consolidation/robo/docs/tasks/Testing.md deleted file mode 100644 index c9fd5196d..000000000 --- a/lib/composer/vendor/consolidation/robo/docs/tasks/Testing.md +++ /dev/null @@ -1,171 +0,0 @@ -# Testing Tasks -## Atoum - - -Runs [atoum](http://atoum.org/) tests - -``` php -taskAtoum() - ->files('path/to/test.php') - ->configFile('config/dev.php') - ->run() - -?> -``` - -* `tags($tags)` Tag or Tags to filter. -* `lightReport()` Display result using the light reporter. -* `tap()` Display result using the tap reporter. -* `bootstrap($file)` Path to the bootstrap file. -* `configFile($file)` Path to the config file. -* `debug()` Use atoum's debug mode. -* `files($files)` Test file or test files to run. -* `directories($directories)` Test directory or directories to run. -* `dir($dir)` Changes working directory of command -* `printed($arg)` Should command output be printed -* `arg($arg)` Pass argument to executable. Its value will be automatically escaped. -* `args($args)` Pass methods parameters as arguments to executable. Argument values -* `rawArg($arg)` Pass the provided string in its raw (as provided) form as an argument to executable. -* `option($option, $value = null)` Pass option to executable. Options are prefixed with `--` , value can be provided in second parameter. -* `optionList($option, $value = null)` Pass multiple options to executable. Value can be a string or array. - -## Behat - - -Executes Behat tests - -``` php -taskBehat() - ->format('pretty') - ->noInteraction() - ->run(); -?> -``` - - -* `stopOnFail()` * `return` $this -* `noInteraction()` * `return` $this -* `config($config_file)` * `param` $config_file -* `colors()` * `return` $this -* `noColors()` * `return` $this -* `suite($suite)` * `param string` $suite -* `verbose($level = null)` * `param string` $level -* `format($formater)` * `param string` $formater -* `dir($dir)` Changes working directory of command -* `printed($arg)` Should command output be printed -* `arg($arg)` Pass argument to executable. Its value will be automatically escaped. -* `args($args)` Pass methods parameters as arguments to executable. Argument values -* `rawArg($arg)` Pass the provided string in its raw (as provided) form as an argument to executable. -* `option($option, $value = null)` Pass option to executable. Options are prefixed with `--` , value can be provided in second parameter. -* `optionList($option, $value = null)` Pass multiple options to executable. Value can be a string or array. - -## Codecept - - -Executes Codeception tests - -``` php -taskCodecept() - ->suite('acceptance') - ->env('chrome') - ->group('admin') - ->xml() - ->html() - ->run(); - -?> -``` - - -* `suite($suite)` * `param string` $suite -* `test($testName)` * `param string` $testName -* `group($group)` set group option. Can be called multiple times -* `excludeGroup($group)` * `param string` $group -* `json($file = null)` generate json report -* `xml($file = null)` generate xml JUnit report -* `html($dir = null)` Generate html report -* `tap($file = null)` generate tap report -* `configFile($file)` provides config file other then default `codeception.yml` with `-c` option -* `coverage($cov = null)` collect codecoverage in raw format. You may pass name of cov file to save results -* `silent()` execute in silent mode -* `coverageXml($xml = null)` collect code coverage in xml format. You may pass name of xml file to save results -* `coverageHtml($html = null)` collect code coverage and generate html report. You may pass -* `env($env)` * `param string` $env -* `debug()` * `return` $this -* `dir($dir)` Changes working directory of command -* `printed($arg)` Should command output be printed -* `arg($arg)` Pass argument to executable. Its value will be automatically escaped. -* `args($args)` Pass methods parameters as arguments to executable. Argument values -* `rawArg($arg)` Pass the provided string in its raw (as provided) form as an argument to executable. -* `option($option, $value = null)` Pass option to executable. Options are prefixed with `--` , value can be provided in second parameter. -* `optionList($option, $value = null)` Pass multiple options to executable. Value can be a string or array. - -## PHPUnit - - -Runs PHPUnit tests - -``` php -taskPHPUnit() - ->group('core') - ->bootstrap('test/bootstrap.php') - ->run() - -?> -``` - -* `filter($filter)` * `param string` $filter -* `group($group)` * `param string` $group -* `excludeGroup($group)` * `param string` $group -* `json($file = null)` adds `log-json` option to runner -* `xml($file = null)` adds `log-junit` option -* `tap($file = null)` * `param string` $file -* `bootstrap($file)` * `param string` $file -* `configFile($file)` * `param string` $file -* `debug()` * `return` $this -* `files($files)` Directory of test files or single test file to run. -* `file($file)` Test the provided file. -* `dir($dir)` Changes working directory of command -* `printed($arg)` Should command output be printed -* `arg($arg)` Pass argument to executable. Its value will be automatically escaped. -* `args($args)` Pass methods parameters as arguments to executable. Argument values -* `rawArg($arg)` Pass the provided string in its raw (as provided) form as an argument to executable. -* `option($option, $value = null)` Pass option to executable. Options are prefixed with `--` , value can be provided in second parameter. -* `optionList($option, $value = null)` Pass multiple options to executable. Value can be a string or array. - -## Phpspec - - -Executes Phpspec tests - -``` php -taskPhpspec() - ->format('pretty') - ->noInteraction() - ->run(); -?> -``` - - -* `stopOnFail()` -* `noCodeGeneration()` -* `quiet()` -* `verbose($level = null)` -* `noAnsi()` -* `noInteraction()` -* `config($config_file)` -* `format($formater)` -* `dir($dir)` Changes working directory of command -* `printed($arg)` Should command output be printed -* `arg($arg)` Pass argument to executable. Its value will be automatically escaped. -* `args($args)` Pass methods parameters as arguments to executable. Argument values -* `rawArg($arg)` Pass the provided string in its raw (as provided) form as an argument to executable. -* `option($option, $value = null)` Pass option to executable. Options are prefixed with `--` , value can be provided in second parameter. -* `optionList($option, $value = null)` Pass multiple options to executable. Value can be a string or array. - diff --git a/lib/composer/vendor/consolidation/robo/docs/tasks/Vcs.md b/lib/composer/vendor/consolidation/robo/docs/tasks/Vcs.md deleted file mode 100644 index 69465c0d2..000000000 --- a/lib/composer/vendor/consolidation/robo/docs/tasks/Vcs.md +++ /dev/null @@ -1,108 +0,0 @@ -# Vcs Tasks -## GitStack - - -Runs Git commands in stack. You can use `stopOnFail()` to point that stack should be terminated on first fail. - -``` php -taskGitStack() - ->stopOnFail() - ->add('-A') - ->commit('adding everything') - ->push('origin','master') - ->tag('0.6.0') - ->push('origin','0.6.0') - ->run() - -$this->taskGitStack() - ->stopOnFail() - ->add('doc/*') - ->commit('doc updated') - ->push() - ->run(); -?> -``` - -* `cloneRepo($repo, $to = null)` Executes `git clone` -* `add($pattern)` Executes `git add` command with files to add pattern -* `commit($message, $options = null)` Executes `git commit` command with a message -* `pull($origin = null, $branch = null)` Executes `git pull` command. -* `push($origin = null, $branch = null)` Executes `git push` command -* `merge($branch)` Performs git merge -* `checkout($branch)` Executes `git checkout` command -* `tag($tag_name, $message = null)` Executes `git tag` command -* `executable($executable)` * `param string` $executable -* `exec($command)` * `param string|string[]` $command -* `stopOnFail($stopOnFail = null)` * `param bool` $stopOnFail -* `result($result)` -* `dir($dir)` Changes working directory of command -* `printed($arg)` Should command output be printed - -## HgStack - - -Runs hg commands in stack. You can use `stopOnFail()` to point that stack should be terminated on first fail. - -``` php -hgStack - ->cloneRepo('https://bitbucket.org/durin42/hgsubversion') - ->pull() - ->add() - ->commit('changed') - ->push() - ->tag('0.6.0') - ->push('0.6.0') - ->run(); -?> -``` - -* `cloneRepo($repo, $to = null)` Executes `hg clone` -* `add($include = null, $exclude = null)` Executes `hg add` command with files to add by pattern -* `commit($message, $options = null)` Executes `hg commit` command with a message -* `pull($branch = null)` Executes `hg pull` command. -* `push($branch = null)` Executes `hg push` command -* `merge($revision = null)` Performs hg merge -* `tag($tag_name, $message = null)` Executes `hg tag` command -* `executable($executable)` * `param string` $executable -* `exec($command)` * `param string|string[]` $command -* `stopOnFail($stopOnFail = null)` * `param bool` $stopOnFail -* `result($result)` -* `dir($dir)` Changes working directory of command -* `printed($arg)` Should command output be printed - -## SvnStack - - -Runs Svn commands in stack. You can use `stopOnFail()` to point that stack should be terminated on first fail. - -``` php -taskSvnStack() - ->checkout('http://svn.collab.net/repos/svn/trunk') - ->run() - -// alternatively -$this->_svnCheckout('http://svn.collab.net/repos/svn/trunk'); - -$this->taskSvnStack('username', 'password') - ->stopOnFail() - ->update() - ->add('doc/*') - ->commit('doc updated') - ->run(); -?> -``` - -* `update($path = null)` Updates `svn update` command -* `add($pattern = null)` Executes `svn add` command with files to add pattern -* `commit($message, $options = null)` Executes `svn commit` command with a message -* `checkout($branch)` Executes `svn checkout` command -* `executable($executable)` * `param string` $executable -* `exec($command)` * `param string|string[]` $command -* `stopOnFail($stopOnFail = null)` * `param bool` $stopOnFail -* `result($result)` -* `dir($dir)` Changes working directory of command -* `printed($arg)` Should command output be printed - diff --git a/lib/composer/vendor/consolidation/robo/examples/RoboFile.php b/lib/composer/vendor/consolidation/robo/examples/RoboFile.php deleted file mode 100644 index 8e057f6fe..000000000 --- a/lib/composer/vendor/consolidation/robo/examples/RoboFile.php +++ /dev/null @@ -1,425 +0,0 @@ -taskWatch()->monitor(['composer.json', 'composer.lock'], function () { - $this->taskComposerUpdate()->run(); - })->run(); - } - - /** - * Demonstrates Robo input APIs. - */ - public function tryInput() - { - $answer = $this->ask('how are you?'); - $this->say('You are '.$answer); - $yes = $this->confirm('Do you want one more question?'); - if (!$yes) { - return Result::cancelled(); - } - $lang = $this->askDefault('what is your favorite scripting language?', 'PHP'); - $this->say($lang); - $pin = $this->askHidden('Ok, now tell your PIN code (it is hidden)'); - $this->yell('Ha-ha, your pin code is: '.$pin); - $this->say('Bye!'); - } - - /** - * Demonstrates parallel execution. - * - * @option $printed Print the output of each process. - * @option $error Include an extra process that fails. - */ - public function tryPara($options = ['printed' => false, 'error' => false]) - { - $dir = __DIR__; - $para = $this->taskParallelExec() - ->printed($options['printed']) - ->process("php $dir/tests/_data/parascript.php hey 4") - ->process("php $dir/tests/_data/parascript.php hoy 3") - ->process("php $dir/tests/_data/parascript.php gou 2") - ->process("php $dir/tests/_data/parascript.php die 1"); - if ($options['error']) { - $para->process("ls $dir/tests/_data/filenotfound"); - } - return $para->run(); - } - - /** - * Demonstrates Robo argument passing. - * - * @param string $a The first parameter. Required. - * @param string $b The second parameter. Optional. - */ - public function tryArgs($a, $b = 'default') - { - $this->say("The parameter a is $a and b is $b"); - } - - /** - * Demonstrate Robo variable argument passing. - * - * @param $a A list of commandline parameters. - */ - public function tryArrayArgs(array $a) - { - $this->say("The parameters passed are:\n" . var_export($a, true)); - } - - /** - * Demonstrate Robo boolean options. - * - * @param $opts The options. - * @option boolean $silent Supress output. - */ - public function tryOptbool($opts = ['silent|s' => false]) - { - if (!$opts['silent']) { - $this->say("Hello, world"); - } - } - - /** - * Demonstrate the use of the PHP built-in webserver. - */ - public function tryServer() - { - return $this->taskServer(8000) - ->dir('site') - ->arg('site/index.php') - ->run(); - } - - /** - * Demonstrate the use of the Robo open-browser task. - */ - public function tryOpenBrowser() - { - return $this->taskOpenBrowser([ - 'http://robo.li', - 'https://github.com/consolidation-org/Robo' - ])->run(); - } - - /** - * Demonstrate Robo error output and command failure. - */ - public function tryError() - { - return $this->taskExec('ls xyzzy' . date('U'))->dir('/tmp')->run(); - } - - /** - * Demonstrate Robo standard output and command success. - */ - public function trySuccess() - { - return $this->_exec('pwd'); - } - - /** - * @field-labels - * name: Name - * species: Species - * legs: Legs - * food: Favorite Food - * id: Id - * @return PropertyList - */ - public function tryInfo() - { - $outputData = [ - 'name' => 'fluffy', - 'species' => 'cat', - 'legs' => 4, - 'food' => 'salmon', - 'id' => 389245032, - ]; - - $data = new PropertyList($outputData); - - // Add a render function to transform cell data when the output - // format is a table, or similar. This allows us to add color - // information to the output without modifying the data cells when - // using yaml or json output formats. - $data->addRendererFunction( - // n.b. There is a fourth parameter $rowData that may be added here. - function ($key, $cellData, FormatterOptions $options) { - if ($key == 'name') { - return "$cellData"; - } - return $cellData; - } - ); - - return $data; - } - - /** - * Demonstrate Robo formatters. Default format is 'table'. - * - * @field-labels - * first: I - * second: II - * third: III - * @default-string-field second - * @usage try:formatters --format=yaml - * @usage try:formatters --format=csv - * @usage try:formatters --fields=first,third - * @usage try:formatters --fields=III,II - * @aliases tf - * - * @return \Consolidation\OutputFormatters\StructuredData\RowsOfFields - */ - public function tryFormatters($somthing = 'default', $options = ['format' => 'table', 'fields' => '']) - { - $outputData = [ - 'en' => [ 'first' => 'One', 'second' => 'Two', 'third' => 'Three' ], - 'de' => [ 'first' => 'Eins', 'second' => 'Zwei', 'third' => 'Drei' ], - 'jp' => [ 'first' => 'Ichi', 'second' => 'Ni', 'third' => 'San' ], - 'es' => [ 'first' => 'Uno', 'second' => 'Dos', 'third' => 'Tres' ], - ]; - return new RowsOfFields($outputData); - } - - /** - * Demonstrate an alter hook with an option - * - * @hook alter try:formatters - * @option $french Add a row with French numbers. - * @usage try:formatters --french - */ - public function alterFormatters($result, CommandData $commandData) - { - if ($commandData->input()->getOption('french')) { - $result['fr'] = [ 'first' => 'Un', 'second' => 'Deux', 'third' => 'Trois' ]; - } - - return $result; - } - - /** - * Demonstrate what happens when a command or a task - * throws an exception. Note that typically, Robo commands - * should return Result objects rather than throw exceptions. - */ - public function tryException($options = ['task' => false]) - { - if (!$options['task']) { - throw new RuntimeException('Command failed with an exception.'); - } - return new ExceptionTask('Task failed with an exception.'); - } - - /** - * Demonstrate deprecated task behavior. - * - * Demonstrate what happens when using a task that is created via - * direct instantiation, which omits initialization done by the - * container. Emits a warning message. - */ - public function tryDeprecated() - { - // Calling 'new' directly without manually setting - // up dependencies will result in a deprecation warning. - // @see RoboFile::trySuccess() - return (new \Robo\Task\Base\Exec('pwd'))->run(); - } - - /** - * Demonstrate the use of a collection builder to chain multiple tasks - * together into a collection, which is executed once constructed. - * - * For demonstration purposes only; this could, of course, be done - * with a single FilesystemStack. - */ - public function tryBuilder() - { - return $this->collectionBuilder() - ->taskFilesystemStack() - ->mkdir('a') - ->touch('a/a.txt') - ->taskFilesystemStack() - ->mkdir('a/b') - ->touch('a/b/b.txt') - ->taskFilesystemStack() - ->mkdir('a/b/c') - ->touch('a/b/c/c.txt') - ->run(); - } - - public function tryBuilderRollback() - { - // This example will create two builders, and add - // the first one as a child of the second in order - // to demonstrate nested rollbacks. - $collection = $this->collectionBuilder() - ->taskFilesystemStack() - ->mkdir('g') - ->touch('g/g.txt') - ->rollback( - $this->taskDeleteDir('g') - ) - ->taskFilesystemStack() - ->mkdir('g/h') - ->touch('g/h/h.txt') - ->taskFilesystemStack() - ->mkdir('g/h/i/c') - ->touch('g/h/i/i.txt'); - - return $this->collectionBuilder() - ->progressMessage('Start recursive collection') - ->addTask($collection) - ->progressMessage('Done with recursive collection') - ->taskExec('ls xyzzy' . date('U')) - ->dir('/tmp') - ->run(); - } - - public function tryWorkdir() - { - // This example works like tryBuilderRollback, - // but does equivalent operations using a working - // directory. The working directory is deleted on rollback - $collection = $this->collectionBuilder(); - - $workdir = $collection->workDir('w'); - - $collection - ->taskFilesystemStack() - ->touch("$workdir/g.txt") - ->taskFilesystemStack() - ->mkdir("$workdir/h") - ->touch("$workdir/h/h.txt") - ->taskFilesystemStack() - ->mkdir("$workdir/h/i/c") - ->touch("$workdir/h/i/i.txt"); - - return $this->collectionBuilder() - ->progressMessage('Start recursive collection') - ->addTask($collection) - ->progressMessage('Done with recursive collection') - ->taskExec('ls xyzzy' . date('U')) - ->dir('/tmp') - ->run(); - } - - /** - * Demonstrates Robo temporary directory usage. - */ - public function tryTmpDir() - { - // Set up a collection to add tasks to - $collection = $this->collectionBuilder(); - - // Get a temporary directory to work in. Note that we get a path - // back, but the directory is not created until the task runs. - $tmpPath = $collection->tmpDir(); - - $result = $collection - ->taskWriteToFile("$tmpPath/file.txt") - ->line('Example file') - ->run(); - - if (is_dir($tmpPath)) { - $this->say("The temporary directory at $tmpPath was not cleaned up after the collection completed."); - } else { - $this->say("The temporary directory at $tmpPath was automatically deleted."); - } - - return $result; - } - - /** - * Description - * @param $options - * @option delay Miliseconds delay - * @return type - */ - public function tryProgress($options = ['delay' => 500]) - { - $delay = $options['delay']; - $delayUntilProgressStart = \Robo\Robo::config()->get(\Robo\Config::PROGRESS_BAR_AUTO_DISPLAY_INTERVAL); - $this->say("Progress bar will display after $delayUntilProgressStart seconds of activity."); - - $processList = range(1, 10); - return $this->collectionBuilder() - ->taskForEach($processList) - ->iterationMessage('Processing {value}') - ->call( - function ($value) use($delay) { - // TaskForEach::call should only be used to do - // non-Robo operations. To use Robo tasks in an - // iterator, @see TaskForEach::withBuilder. - usleep($delay * 1000); // delay units: msec, usleep units: usec - } - ) - ->run(); - } - - public function tryIter() - { - $workdir = 'build/iter-example'; - $this->say("Creating sample direcories in $workdir."); - - $processList = ['cats', 'dogs', 'sheep', 'fish', 'horses', 'cows']; - return $this->collectionBuilder() - ->taskFilesystemStack() - ->mkdir($workdir) - ->taskCleanDir($workdir) - ->taskForEach($processList) - ->withBuilder( - function ($builder, $key, $value) use ($workdir) { - return $builder - ->taskFilesystemStack() - ->mkdir("$workdir/$value"); - } - ) - ->run(); - } -} - -class ExceptionTask extends \Robo\Task\BaseTask -{ - protected $message; - - public function __construct($message) - { - $this->message = $message; - } - - public function run() - { - throw new RuntimeException($this->message); - } -} diff --git a/lib/composer/vendor/consolidation/robo/examples/robo.script b/lib/composer/vendor/consolidation/robo/examples/robo.script deleted file mode 100755 index bfec26a91..000000000 --- a/lib/composer/vendor/consolidation/robo/examples/robo.script +++ /dev/null @@ -1,44 +0,0 @@ -#!/usr/bin/env robo -say("This is a Robo script, $name"); - } -} diff --git a/lib/composer/vendor/consolidation/robo/robo b/lib/composer/vendor/consolidation/robo/robo index ce4d9dfab..2093bd119 100755 --- a/lib/composer/vendor/consolidation/robo/robo +++ b/lib/composer/vendor/consolidation/robo/robo @@ -17,5 +17,6 @@ if (strpos(basename(__FILE__), 'phar')) { } } $runner = new \Robo\Runner(); +$runner->setSelfUpdateRepository('consolidation/robo'); $statusCode = $runner->execute($_SERVER['argv']); exit($statusCode); diff --git a/lib/composer/vendor/consolidation/robo/robo.yml b/lib/composer/vendor/consolidation/robo/robo.yml new file mode 100644 index 000000000..12fb4f61d --- /dev/null +++ b/lib/composer/vendor/consolidation/robo/robo.yml @@ -0,0 +1,3 @@ +options: + progress-delay: 2 + simulate: null diff --git a/lib/composer/vendor/consolidation/robo/scenarios/install b/lib/composer/vendor/consolidation/robo/scenarios/install new file mode 100755 index 000000000..e921ec0cb --- /dev/null +++ b/lib/composer/vendor/consolidation/robo/scenarios/install @@ -0,0 +1,28 @@ +#!/bin/bash + +SCENARIO=$1 +ACTION=${2-install} + +dir=scenarios/${SCENARIO} +if [ -z "$SCENARIO" ] ; then + SCENARIO=default + dir=. +fi + + +if [ ! -d "$dir" ] ; then + echo "Requested scenario '${SCENARIO}' does not exist." + exit 1 +fi + +echo +echo "::" +echo ":: Switch to ${SCENARIO} scenario" +echo "::" +echo + +set -ex + +composer -n validate --working-dir=$dir --no-check-all --ansi +composer -n --working-dir=$dir ${ACTION} --prefer-dist --no-scripts +composer -n --working-dir=$dir info diff --git a/lib/composer/vendor/consolidation/robo/scenarios/symfony2/.gitignore b/lib/composer/vendor/consolidation/robo/scenarios/symfony2/.gitignore new file mode 100644 index 000000000..7579f7431 --- /dev/null +++ b/lib/composer/vendor/consolidation/robo/scenarios/symfony2/.gitignore @@ -0,0 +1,2 @@ +vendor +composer.lock diff --git a/lib/composer/vendor/consolidation/robo/scenarios/symfony2/composer.json b/lib/composer/vendor/consolidation/robo/scenarios/symfony2/composer.json new file mode 100644 index 000000000..6a6429331 --- /dev/null +++ b/lib/composer/vendor/consolidation/robo/scenarios/symfony2/composer.json @@ -0,0 +1,93 @@ +{ + "name": "consolidation/robo", + "description": "Modern task runner", + "license": "MIT", + "authors": [ + { + "name": "Davert", + "email": "davert.php@resend.cc" + } + ], + "autoload":{ + "psr-4":{ + "Robo\\":"src" + } + }, + "autoload-dev":{ + "psr-4":{ + "Robo\\":"tests/src" + } + }, + "bin":["robo"], + "require": { + "php": ">=5.5.0", + "league/container": "^2.2", + "consolidation/log": "~1", + "consolidation/config": "^1.0.1", + "consolidation/annotated-command": "^2.8.2", + "consolidation/output-formatters": "^3.1.13", + "grasmash/yaml-expander": "^1.3", + "symfony/finder": "^2.5|^3|^4", + "symfony/process": "^2.5|^3|^4", + "symfony/filesystem": "^2.5|^3|^4", + "symfony/event-dispatcher": "^2.5|^3|^4" + }, + "require-dev": { + "codeception/aspect-mock": "^1|^2.1.1", + "codeception/base": "^2.3.7", + "codeception/verify": "^0.3.2", + "greg-1-anderson/composer-test-scenarios": "^1", + "natxet/CssMin": "3.0.4", + "patchwork/jsqueeze": "~2", + "pear/archive_tar": "^1.4.2", + "phpunit/php-code-coverage": "~2|~4", + "satooshi/php-coveralls": "^2", + "squizlabs/php_codesniffer": "^2.8", + "symfony/console": "^2.8" + }, + "scripts": { + "cs": "./robo sniff", + "unit": "./robo test", + "lint": [ + "find src -name '*.php' -print0 | xargs -0 -n1 php -l", + "find tests/src -name '*.php' -print0 | xargs -0 -n1 php -l" + ], + "test": [ + "@lint", + "@unit", + "@cs" + ], + "scenario": "scenarios/install", + "pre-install-cmd": [ + "Robo\\composer\\ScriptHandler::checkDependencies" + ], + "post-update-cmd": [ + "create-scenario symfony4 'symfony/console:^4.0' --platform-php '7.1.3'", + "create-scenario symfony2 'symfony/console:^2.8' --platform-php '5.5.9' --no-lockfile" + ] + }, + "config": { + "optimize-autoloader": true, + "sort-packages": true, + "platform": { + "php": "5.5.9" + }, + "vendor-dir": "../../vendor" + }, + "extra": { + "branch-alias": { + "dev-master": "1.x-dev", + "dev-state": "1.x-dev" + } + }, + "suggest": { + "pear/archive_tar": "Allows tar archives to be created and extracted in taskPack and taskExtract, respectively.", + "henrikbjorn/lurker": "For monitoring filesystem changes in taskWatch", + "patchwork/jsqueeze": "For minifying JS files in taskMinify", + "natxet/CssMin": "For minifying CSS files in taskMinify" + }, + "replace": { + "codegyre/robo": "< 1.0" + }, + "minimum-stability": "stable" +} diff --git a/lib/composer/vendor/consolidation/robo/scenarios/symfony2/src b/lib/composer/vendor/consolidation/robo/scenarios/symfony2/src new file mode 120000 index 000000000..929cb3dc9 --- /dev/null +++ b/lib/composer/vendor/consolidation/robo/scenarios/symfony2/src @@ -0,0 +1 @@ +../../src \ No newline at end of file diff --git a/lib/composer/vendor/consolidation/robo/scenarios/symfony2/tests/.gitkeep b/lib/composer/vendor/consolidation/robo/scenarios/symfony2/tests/.gitkeep new file mode 100644 index 000000000..54bcf3046 --- /dev/null +++ b/lib/composer/vendor/consolidation/robo/scenarios/symfony2/tests/.gitkeep @@ -0,0 +1 @@ +~ diff --git a/lib/composer/vendor/consolidation/robo/scenarios/symfony4/.gitignore b/lib/composer/vendor/consolidation/robo/scenarios/symfony4/.gitignore new file mode 100644 index 000000000..22d0d82f8 --- /dev/null +++ b/lib/composer/vendor/consolidation/robo/scenarios/symfony4/.gitignore @@ -0,0 +1 @@ +vendor diff --git a/lib/composer/vendor/consolidation/robo/scenarios/symfony4/.gitkeep b/lib/composer/vendor/consolidation/robo/scenarios/symfony4/.gitkeep new file mode 100644 index 000000000..54bcf3046 --- /dev/null +++ b/lib/composer/vendor/consolidation/robo/scenarios/symfony4/.gitkeep @@ -0,0 +1 @@ +~ diff --git a/lib/composer/vendor/consolidation/robo/scenarios/symfony4/composer.json b/lib/composer/vendor/consolidation/robo/scenarios/symfony4/composer.json new file mode 100644 index 000000000..6e1c61148 --- /dev/null +++ b/lib/composer/vendor/consolidation/robo/scenarios/symfony4/composer.json @@ -0,0 +1,93 @@ +{ + "name": "consolidation/robo", + "description": "Modern task runner", + "license": "MIT", + "authors": [ + { + "name": "Davert", + "email": "davert.php@resend.cc" + } + ], + "autoload":{ + "psr-4":{ + "Robo\\":"src" + } + }, + "autoload-dev":{ + "psr-4":{ + "Robo\\":"tests/src" + } + }, + "bin":["robo"], + "require": { + "php": ">=5.5.0", + "league/container": "^2.2", + "consolidation/log": "~1", + "consolidation/config": "^1.0.1", + "consolidation/annotated-command": "^2.8.2", + "consolidation/output-formatters": "^3.1.13", + "grasmash/yaml-expander": "^1.3", + "symfony/finder": "^2.5|^3|^4", + "symfony/process": "^2.5|^3|^4", + "symfony/filesystem": "^2.5|^3|^4", + "symfony/event-dispatcher": "^2.5|^3|^4" + }, + "require-dev": { + "codeception/aspect-mock": "^1|^2.1.1", + "codeception/base": "^2.3.7", + "codeception/verify": "^0.3.2", + "greg-1-anderson/composer-test-scenarios": "^1", + "natxet/CssMin": "3.0.4", + "patchwork/jsqueeze": "~2", + "pear/archive_tar": "^1.4.2", + "phpunit/php-code-coverage": "~2|~4", + "satooshi/php-coveralls": "^2", + "squizlabs/php_codesniffer": "^2.8", + "symfony/console": "^4.0" + }, + "scripts": { + "cs": "./robo sniff", + "unit": "./robo test", + "lint": [ + "find src -name '*.php' -print0 | xargs -0 -n1 php -l", + "find tests/src -name '*.php' -print0 | xargs -0 -n1 php -l" + ], + "test": [ + "@lint", + "@unit", + "@cs" + ], + "scenario": "scenarios/install", + "pre-install-cmd": [ + "Robo\\composer\\ScriptHandler::checkDependencies" + ], + "post-update-cmd": [ + "create-scenario symfony4 'symfony/console:^4.0' --platform-php '7.1.3'", + "create-scenario symfony2 'symfony/console:^2.8' --platform-php '5.5.9' --no-lockfile" + ] + }, + "config": { + "optimize-autoloader": true, + "sort-packages": true, + "platform": { + "php": "7.1.3" + }, + "vendor-dir": "../../vendor" + }, + "extra": { + "branch-alias": { + "dev-master": "1.x-dev", + "dev-state": "1.x-dev" + } + }, + "suggest": { + "pear/archive_tar": "Allows tar archives to be created and extracted in taskPack and taskExtract, respectively.", + "henrikbjorn/lurker": "For monitoring filesystem changes in taskWatch", + "patchwork/jsqueeze": "For minifying JS files in taskMinify", + "natxet/CssMin": "For minifying CSS files in taskMinify" + }, + "replace": { + "codegyre/robo": "< 1.0" + }, + "minimum-stability": "stable" +} diff --git a/lib/composer/vendor/consolidation/robo/scenarios/symfony4/composer.lock b/lib/composer/vendor/consolidation/robo/scenarios/symfony4/composer.lock new file mode 100644 index 000000000..331dac081 --- /dev/null +++ b/lib/composer/vendor/consolidation/robo/scenarios/symfony4/composer.lock @@ -0,0 +1,3813 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", + "This file is @generated automatically" + ], + "content-hash": "e2d42097d21dbc2b1344779e3995a774", + "packages": [ + { + "name": "consolidation/annotated-command", + "version": "2.8.2", + "source": { + "type": "git", + "url": "https://github.com/consolidation/annotated-command.git", + "reference": "e97c38717eae23a2bafcf3f09438290eee6ebeb4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/consolidation/annotated-command/zipball/e97c38717eae23a2bafcf3f09438290eee6ebeb4", + "reference": "e97c38717eae23a2bafcf3f09438290eee6ebeb4", + "shasum": "" + }, + "require": { + "consolidation/output-formatters": "^3.1.12", + "php": ">=5.4.0", + "psr/log": "^1", + "symfony/console": "^2.8|^3|^4", + "symfony/event-dispatcher": "^2.5|^3|^4", + "symfony/finder": "^2.5|^3|^4" + }, + "require-dev": { + "phpunit/phpunit": "^4.8", + "satooshi/php-coveralls": "^1.0.2 | dev-master", + "squizlabs/php_codesniffer": "^2.7" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Consolidation\\AnnotatedCommand\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Greg Anderson", + "email": "greg.1.anderson@greenknowe.org" + } + ], + "description": "Initialize Symfony Console commands from annotated command class methods.", + "time": "2017-11-29T16:23:23+00:00" + }, + { + "name": "consolidation/config", + "version": "1.0.9", + "source": { + "type": "git", + "url": "https://github.com/consolidation/config.git", + "reference": "34ca8d7c1ee60a7b591b10617114cf1210a2e92c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/consolidation/config/zipball/34ca8d7c1ee60a7b591b10617114cf1210a2e92c", + "reference": "34ca8d7c1ee60a7b591b10617114cf1210a2e92c", + "shasum": "" + }, + "require": { + "dflydev/dot-access-data": "^1.1.0", + "grasmash/expander": "^1", + "php": ">=5.4.0" + }, + "require-dev": { + "greg-1-anderson/composer-test-scenarios": "^1", + "phpunit/phpunit": "^4", + "satooshi/php-coveralls": "^1.0", + "squizlabs/php_codesniffer": "2.*", + "symfony/console": "^2.5|^3|^4", + "symfony/yaml": "^2.8.11|^3|^4" + }, + "suggest": { + "symfony/yaml": "Required to use Consolidation\\Config\\Loader\\YamlConfigLoader" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Consolidation\\Config\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Greg Anderson", + "email": "greg.1.anderson@greenknowe.org" + } + ], + "description": "Provide configuration services for a commandline tool.", + "time": "2017-12-22T17:28:19+00:00" + }, + { + "name": "consolidation/log", + "version": "1.0.5", + "source": { + "type": "git", + "url": "https://github.com/consolidation/log.git", + "reference": "dbc7c535f319a4a2d5a5077738f8eb7c10df8821" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/consolidation/log/zipball/dbc7c535f319a4a2d5a5077738f8eb7c10df8821", + "reference": "dbc7c535f319a4a2d5a5077738f8eb7c10df8821", + "shasum": "" + }, + "require": { + "php": ">=5.5.0", + "psr/log": "~1.0", + "symfony/console": "^2.8|^3|^4" + }, + "require-dev": { + "phpunit/phpunit": "4.*", + "satooshi/php-coveralls": "dev-master", + "squizlabs/php_codesniffer": "2.*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Consolidation\\Log\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Greg Anderson", + "email": "greg.1.anderson@greenknowe.org" + } + ], + "description": "Improved Psr-3 / Psr\\Log logger based on Symfony Console components.", + "time": "2017-11-29T01:44:16+00:00" + }, + { + "name": "consolidation/output-formatters", + "version": "3.1.13", + "source": { + "type": "git", + "url": "https://github.com/consolidation/output-formatters.git", + "reference": "3188461e965b32148c8fb85261833b2b72d34b8c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/consolidation/output-formatters/zipball/3188461e965b32148c8fb85261833b2b72d34b8c", + "reference": "3188461e965b32148c8fb85261833b2b72d34b8c", + "shasum": "" + }, + "require": { + "php": ">=5.4.0", + "symfony/console": "^2.8|^3|^4", + "symfony/finder": "^2.5|^3|^4" + }, + "require-dev": { + "phpunit/phpunit": "^4.8", + "satooshi/php-coveralls": "^1.0.2 | dev-master", + "squizlabs/php_codesniffer": "^2.7", + "victorjonsson/markdowndocs": "^1.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Consolidation\\OutputFormatters\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Greg Anderson", + "email": "greg.1.anderson@greenknowe.org" + } + ], + "description": "Format text by applying transformations provided by plug-in formatters.", + "time": "2017-11-29T15:25:38+00:00" + }, + { + "name": "container-interop/container-interop", + "version": "1.2.0", + "source": { + "type": "git", + "url": "https://github.com/container-interop/container-interop.git", + "reference": "79cbf1341c22ec75643d841642dd5d6acd83bdb8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/container-interop/container-interop/zipball/79cbf1341c22ec75643d841642dd5d6acd83bdb8", + "reference": "79cbf1341c22ec75643d841642dd5d6acd83bdb8", + "shasum": "" + }, + "require": { + "psr/container": "^1.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Interop\\Container\\": "src/Interop/Container/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Promoting the interoperability of container objects (DIC, SL, etc.)", + "homepage": "https://github.com/container-interop/container-interop", + "time": "2017-02-14T19:40:03+00:00" + }, + { + "name": "dflydev/dot-access-data", + "version": "v1.1.0", + "source": { + "type": "git", + "url": "https://github.com/dflydev/dflydev-dot-access-data.git", + "reference": "3fbd874921ab2c041e899d044585a2ab9795df8a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/3fbd874921ab2c041e899d044585a2ab9795df8a", + "reference": "3fbd874921ab2c041e899d044585a2ab9795df8a", + "shasum": "" + }, + "require": { + "php": ">=5.3.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "psr-0": { + "Dflydev\\DotAccessData": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Dragonfly Development Inc.", + "email": "info@dflydev.com", + "homepage": "http://dflydev.com" + }, + { + "name": "Beau Simensen", + "email": "beau@dflydev.com", + "homepage": "http://beausimensen.com" + }, + { + "name": "Carlos Frutos", + "email": "carlos@kiwing.it", + "homepage": "https://github.com/cfrutos" + } + ], + "description": "Given a deep data structure, access data by dot notation.", + "homepage": "https://github.com/dflydev/dflydev-dot-access-data", + "keywords": [ + "access", + "data", + "dot", + "notation" + ], + "time": "2017-01-20T21:14:22+00:00" + }, + { + "name": "grasmash/expander", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/grasmash/expander.git", + "reference": "95d6037344a4be1dd5f8e0b0b2571a28c397578f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/grasmash/expander/zipball/95d6037344a4be1dd5f8e0b0b2571a28c397578f", + "reference": "95d6037344a4be1dd5f8e0b0b2571a28c397578f", + "shasum": "" + }, + "require": { + "dflydev/dot-access-data": "^1.1.0", + "php": ">=5.4" + }, + "require-dev": { + "greg-1-anderson/composer-test-scenarios": "^1", + "phpunit/phpunit": "^4|^5.5.4", + "satooshi/php-coveralls": "^1.0.2|dev-master", + "squizlabs/php_codesniffer": "^2.7" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Grasmash\\Expander\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Matthew Grasmick" + } + ], + "description": "Expands internal property references in PHP arrays file.", + "time": "2017-12-21T22:14:55+00:00" + }, + { + "name": "grasmash/yaml-expander", + "version": "1.4.0", + "source": { + "type": "git", + "url": "https://github.com/grasmash/yaml-expander.git", + "reference": "3f0f6001ae707a24f4d9733958d77d92bf9693b1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/grasmash/yaml-expander/zipball/3f0f6001ae707a24f4d9733958d77d92bf9693b1", + "reference": "3f0f6001ae707a24f4d9733958d77d92bf9693b1", + "shasum": "" + }, + "require": { + "dflydev/dot-access-data": "^1.1.0", + "php": ">=5.4", + "symfony/yaml": "^2.8.11|^3|^4" + }, + "require-dev": { + "greg-1-anderson/composer-test-scenarios": "^1", + "phpunit/phpunit": "^4.8|^5.5.4", + "satooshi/php-coveralls": "^1.0.2|dev-master", + "squizlabs/php_codesniffer": "^2.7" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Grasmash\\YamlExpander\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Matthew Grasmick" + } + ], + "description": "Expands internal property references in a yaml file.", + "time": "2017-12-16T16:06:03+00:00" + }, + { + "name": "league/container", + "version": "2.4.1", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/container.git", + "reference": "43f35abd03a12977a60ffd7095efd6a7808488c0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/container/zipball/43f35abd03a12977a60ffd7095efd6a7808488c0", + "reference": "43f35abd03a12977a60ffd7095efd6a7808488c0", + "shasum": "" + }, + "require": { + "container-interop/container-interop": "^1.2", + "php": "^5.4.0 || ^7.0" + }, + "provide": { + "container-interop/container-interop-implementation": "^1.2", + "psr/container-implementation": "^1.0" + }, + "replace": { + "orno/di": "~2.0" + }, + "require-dev": { + "phpunit/phpunit": "4.*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-2.x": "2.x-dev", + "dev-1.x": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "League\\Container\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Phil Bennett", + "email": "philipobenito@gmail.com", + "homepage": "http://www.philipobenito.com", + "role": "Developer" + } + ], + "description": "A fast and intuitive dependency injection container.", + "homepage": "https://github.com/thephpleague/container", + "keywords": [ + "container", + "dependency", + "di", + "injection", + "league", + "provider", + "service" + ], + "time": "2017-05-10T09:20:27+00:00" + }, + { + "name": "psr/container", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/container.git", + "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f", + "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Container\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", + "keywords": [ + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" + ], + "time": "2017-02-14T16:28:37+00:00" + }, + { + "name": "psr/log", + "version": "1.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", + "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "Psr/Log/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "time": "2016-10-10T12:19:37+00:00" + }, + { + "name": "symfony/console", + "version": "v4.0.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "de8cf039eacdec59d83f7def67e3b8ff5ed46714" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/de8cf039eacdec59d83f7def67e3b8ff5ed46714", + "reference": "de8cf039eacdec59d83f7def67e3b8ff5ed46714", + "shasum": "" + }, + "require": { + "php": "^7.1.3", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "symfony/dependency-injection": "<3.4", + "symfony/process": "<3.3" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/config": "~3.4|~4.0", + "symfony/dependency-injection": "~3.4|~4.0", + "symfony/event-dispatcher": "~3.4|~4.0", + "symfony/lock": "~3.4|~4.0", + "symfony/process": "~3.4|~4.0" + }, + "suggest": { + "psr/log": "For using the console logger", + "symfony/event-dispatcher": "", + "symfony/lock": "", + "symfony/process": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Console\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Console Component", + "homepage": "https://symfony.com", + "time": "2017-12-14T19:48:22+00:00" + }, + { + "name": "symfony/event-dispatcher", + "version": "v4.0.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "d4face19ed8002eec8280bc1c5ec18130472bf43" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/d4face19ed8002eec8280bc1c5ec18130472bf43", + "reference": "d4face19ed8002eec8280bc1c5ec18130472bf43", + "shasum": "" + }, + "require": { + "php": "^7.1.3" + }, + "conflict": { + "symfony/dependency-injection": "<3.4" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/config": "~3.4|~4.0", + "symfony/dependency-injection": "~3.4|~4.0", + "symfony/expression-language": "~3.4|~4.0", + "symfony/stopwatch": "~3.4|~4.0" + }, + "suggest": { + "symfony/dependency-injection": "", + "symfony/http-kernel": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\EventDispatcher\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony EventDispatcher Component", + "homepage": "https://symfony.com", + "time": "2017-12-14T19:48:22+00:00" + }, + { + "name": "symfony/filesystem", + "version": "v4.0.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/filesystem.git", + "reference": "8c2868641d0c4885eee9c12a89c2b695eb1985cd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/8c2868641d0c4885eee9c12a89c2b695eb1985cd", + "reference": "8c2868641d0c4885eee9c12a89c2b695eb1985cd", + "shasum": "" + }, + "require": { + "php": "^7.1.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Filesystem\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Filesystem Component", + "homepage": "https://symfony.com", + "time": "2017-12-14T19:48:22+00:00" + }, + { + "name": "symfony/finder", + "version": "v3.4.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "dac8d7db537bac7ad8143eb11360a8c2231f251a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/dac8d7db537bac7ad8143eb11360a8c2231f251a", + "reference": "dac8d7db537bac7ad8143eb11360a8c2231f251a", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Finder\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Finder Component", + "homepage": "https://symfony.com", + "time": "2017-11-05T16:10:10+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.6.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296", + "reference": "2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.6-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "time": "2017-10-11T12:05:26+00:00" + }, + { + "name": "symfony/process", + "version": "v4.0.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/process.git", + "reference": "18d1953068e72262830bad593f0366fa62c93fb7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/process/zipball/18d1953068e72262830bad593f0366fa62c93fb7", + "reference": "18d1953068e72262830bad593f0366fa62c93fb7", + "shasum": "" + }, + "require": { + "php": "^7.1.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Process\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Process Component", + "homepage": "https://symfony.com", + "time": "2017-12-14T19:48:22+00:00" + }, + { + "name": "symfony/yaml", + "version": "v4.0.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/yaml.git", + "reference": "a5ee52d155f06ad23b19eb63c31228ff56ad1116" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/yaml/zipball/a5ee52d155f06ad23b19eb63c31228ff56ad1116", + "reference": "a5ee52d155f06ad23b19eb63c31228ff56ad1116", + "shasum": "" + }, + "require": { + "php": "^7.1.3" + }, + "conflict": { + "symfony/console": "<3.4" + }, + "require-dev": { + "symfony/console": "~3.4|~4.0" + }, + "suggest": { + "symfony/console": "For validating YAML files using the lint command" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Yaml\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Yaml Component", + "homepage": "https://symfony.com", + "time": "2017-12-12T08:41:51+00:00" + } + ], + "packages-dev": [ + { + "name": "behat/gherkin", + "version": "v4.4.5", + "source": { + "type": "git", + "url": "https://github.com/Behat/Gherkin.git", + "reference": "5c14cff4f955b17d20d088dec1bde61c0539ec74" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Behat/Gherkin/zipball/5c14cff4f955b17d20d088dec1bde61c0539ec74", + "reference": "5c14cff4f955b17d20d088dec1bde61c0539ec74", + "shasum": "" + }, + "require": { + "php": ">=5.3.1" + }, + "require-dev": { + "phpunit/phpunit": "~4.5|~5", + "symfony/phpunit-bridge": "~2.7|~3", + "symfony/yaml": "~2.3|~3" + }, + "suggest": { + "symfony/yaml": "If you want to parse features, represented in YAML files" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.4-dev" + } + }, + "autoload": { + "psr-0": { + "Behat\\Gherkin": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Konstantin Kudryashov", + "email": "ever.zet@gmail.com", + "homepage": "http://everzet.com" + } + ], + "description": "Gherkin DSL parser for PHP 5.3", + "homepage": "http://behat.org/", + "keywords": [ + "BDD", + "Behat", + "Cucumber", + "DSL", + "gherkin", + "parser" + ], + "time": "2016-10-30T11:50:56+00:00" + }, + { + "name": "codeception/aspect-mock", + "version": "2.1.1", + "source": { + "type": "git", + "url": "https://github.com/Codeception/AspectMock.git", + "reference": "bf3c000599c0dc75ecb52e19dee2b8ed294cf7ba" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Codeception/AspectMock/zipball/bf3c000599c0dc75ecb52e19dee2b8ed294cf7ba", + "reference": "bf3c000599c0dc75ecb52e19dee2b8ed294cf7ba", + "shasum": "" + }, + "require": { + "goaop/framework": "^2.0.0", + "php": ">=5.6.0", + "symfony/finder": "~2.4|~3.0" + }, + "require-dev": { + "codeception/base": "~2.1", + "codeception/specify": "~0.3", + "codeception/verify": "~0.2" + }, + "type": "library", + "autoload": { + "psr-0": { + "AspectMock": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Bodnarchuk", + "email": "davert@codeception.com" + } + ], + "description": "Experimental Mocking Framework powered by Aspects", + "time": "2017-10-24T10:20:17+00:00" + }, + { + "name": "codeception/base", + "version": "2.3.7", + "source": { + "type": "git", + "url": "https://github.com/Codeception/base.git", + "reference": "c3fcea61525e62361ecc45aea1837f225ba73b4f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Codeception/base/zipball/c3fcea61525e62361ecc45aea1837f225ba73b4f", + "reference": "c3fcea61525e62361ecc45aea1837f225ba73b4f", + "shasum": "" + }, + "require": { + "behat/gherkin": "~4.4.0", + "ext-json": "*", + "ext-mbstring": "*", + "guzzlehttp/psr7": "~1.0", + "php": ">=5.4.0 <8.0", + "phpunit/php-code-coverage": ">=2.2.4 <6.0", + "phpunit/phpunit": ">=4.8.28 <5.0.0 || >=5.6.3 <7.0", + "phpunit/phpunit-mock-objects": ">2.3 <5.0", + "sebastian/comparator": ">1.1 <3.0", + "sebastian/diff": ">=1.4 <3.0", + "symfony/browser-kit": ">=2.7 <5.0", + "symfony/console": ">=2.7 <5.0", + "symfony/css-selector": ">=2.7 <5.0", + "symfony/dom-crawler": ">=2.7 <5.0", + "symfony/event-dispatcher": ">=2.7 <5.0", + "symfony/finder": ">=2.7 <5.0", + "symfony/yaml": ">=2.7 <5.0" + }, + "require-dev": { + "codeception/specify": "~0.3", + "facebook/graph-sdk": "~5.3", + "flow/jsonpath": "~0.2", + "league/factory-muffin": "^3.0", + "league/factory-muffin-faker": "^1.0", + "monolog/monolog": "~1.8", + "pda/pheanstalk": "~3.0", + "php-amqplib/php-amqplib": "~2.4", + "predis/predis": "^1.0", + "squizlabs/php_codesniffer": "~2.0", + "symfony/process": ">=2.7 <5.0", + "vlucas/phpdotenv": "^2.4.0" + }, + "suggest": { + "aws/aws-sdk-php": "For using AWS Auth in REST module and Queue module", + "codeception/phpbuiltinserver": "Start and stop PHP built-in web server for your tests", + "codeception/specify": "BDD-style code blocks", + "codeception/verify": "BDD-style assertions", + "flow/jsonpath": "For using JSONPath in REST module", + "league/factory-muffin": "For DataFactory module", + "league/factory-muffin-faker": "For Faker support in DataFactory module", + "phpseclib/phpseclib": "for SFTP option in FTP Module", + "stecman/symfony-console-completion": "For BASH autocompletion", + "symfony/phpunit-bridge": "For phpunit-bridge support" + }, + "bin": [ + "codecept" + ], + "type": "library", + "extra": { + "branch-alias": [] + }, + "autoload": { + "psr-4": { + "Codeception\\": "src\\Codeception", + "Codeception\\Extension\\": "ext" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Bodnarchuk", + "email": "davert@mail.ua", + "homepage": "http://codegyre.com" + } + ], + "description": "BDD-style testing framework", + "homepage": "http://codeception.com/", + "keywords": [ + "BDD", + "TDD", + "acceptance testing", + "functional testing", + "unit testing" + ], + "time": "2017-12-12T04:54:15+00:00" + }, + { + "name": "codeception/verify", + "version": "0.3.3", + "source": { + "type": "git", + "url": "https://github.com/Codeception/Verify.git", + "reference": "5d649dda453cd814dadc4bb053060cd2c6bb4b4c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Codeception/Verify/zipball/5d649dda453cd814dadc4bb053060cd2c6bb4b4c", + "reference": "5d649dda453cd814dadc4bb053060cd2c6bb4b4c", + "shasum": "" + }, + "require-dev": { + "phpunit/phpunit": "~4.0" + }, + "type": "library", + "autoload": { + "files": [ + "src/Codeception/function.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Bodnarchuk", + "email": "davert.php@mailican.com" + } + ], + "description": "BDD assertion library for PHPUnit", + "time": "2017-01-09T10:58:51+00:00" + }, + { + "name": "doctrine/annotations", + "version": "v1.6.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/annotations.git", + "reference": "c7f2050c68a9ab0bdb0f98567ec08d80ea7d24d5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/annotations/zipball/c7f2050c68a9ab0bdb0f98567ec08d80ea7d24d5", + "reference": "c7f2050c68a9ab0bdb0f98567ec08d80ea7d24d5", + "shasum": "" + }, + "require": { + "doctrine/lexer": "1.*", + "php": "^7.1" + }, + "require-dev": { + "doctrine/cache": "1.*", + "phpunit/phpunit": "^6.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.6.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Docblock Annotations Parser", + "homepage": "http://www.doctrine-project.org", + "keywords": [ + "annotations", + "docblock", + "parser" + ], + "time": "2017-12-06T07:11:42+00:00" + }, + { + "name": "doctrine/instantiator", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/instantiator.git", + "reference": "185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda", + "reference": "185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda", + "shasum": "" + }, + "require": { + "php": "^7.1" + }, + "require-dev": { + "athletic/athletic": "~0.1.8", + "ext-pdo": "*", + "ext-phar": "*", + "phpunit/phpunit": "^6.2.3", + "squizlabs/php_codesniffer": "^3.0.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "homepage": "http://ocramius.github.com/" + } + ], + "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", + "homepage": "https://github.com/doctrine/instantiator", + "keywords": [ + "constructor", + "instantiate" + ], + "time": "2017-07-22T11:58:36+00:00" + }, + { + "name": "doctrine/lexer", + "version": "v1.0.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/lexer.git", + "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/83893c552fd2045dd78aef794c31e694c37c0b8c", + "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c", + "shasum": "" + }, + "require": { + "php": ">=5.3.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-0": { + "Doctrine\\Common\\Lexer\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Base library for a lexer that can be used in Top-Down, Recursive Descent Parsers.", + "homepage": "http://www.doctrine-project.org", + "keywords": [ + "lexer", + "parser" + ], + "time": "2014-09-09T13:34:57+00:00" + }, + { + "name": "goaop/framework", + "version": "2.1.2", + "source": { + "type": "git", + "url": "https://github.com/goaop/framework.git", + "reference": "6e2a0fe13c1943db02a67588cfd27692bddaffa5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/goaop/framework/zipball/6e2a0fe13c1943db02a67588cfd27692bddaffa5", + "reference": "6e2a0fe13c1943db02a67588cfd27692bddaffa5", + "shasum": "" + }, + "require": { + "doctrine/annotations": "~1.0", + "goaop/parser-reflection": "~1.2", + "jakubledl/dissect": "~1.0", + "php": ">=5.6.0" + }, + "require-dev": { + "adlawson/vfs": "^0.12", + "doctrine/orm": "^2.5", + "phpunit/phpunit": "^4.8", + "symfony/console": "^2.7|^3.0" + }, + "suggest": { + "symfony/console": "Enables the usage of the command-line tool." + }, + "bin": [ + "bin/aspect" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "psr-4": { + "Go\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Lisachenko Alexander", + "homepage": "https://github.com/lisachenko" + } + ], + "description": "Framework for aspect-oriented programming in PHP.", + "homepage": "http://go.aopphp.com/", + "keywords": [ + "aop", + "aspect", + "library", + "php" + ], + "time": "2017-07-12T11:46:25+00:00" + }, + { + "name": "goaop/parser-reflection", + "version": "1.4.0", + "source": { + "type": "git", + "url": "https://github.com/goaop/parser-reflection.git", + "reference": "adfc38fee63014880932ebcc4810871b8e33edc9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/goaop/parser-reflection/zipball/adfc38fee63014880932ebcc4810871b8e33edc9", + "reference": "adfc38fee63014880932ebcc4810871b8e33edc9", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^1.2|^2.0|^3.0", + "php": ">=5.6.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Go\\ParserReflection\\": "src" + }, + "files": [ + "src/bootstrap.php" + ], + "exclude-from-classmap": [ + "/tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Alexander Lisachenko", + "email": "lisachenko.it@gmail.com" + } + ], + "description": "Provides reflection information, based on raw source", + "time": "2017-09-03T14:59:13+00:00" + }, + { + "name": "greg-1-anderson/composer-test-scenarios", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/greg-1-anderson/composer-test-scenarios.git", + "reference": "dc81660f44a8b126d7fa947156c98e34f45af3e9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/greg-1-anderson/composer-test-scenarios/zipball/dc81660f44a8b126d7fa947156c98e34f45af3e9", + "reference": "dc81660f44a8b126d7fa947156c98e34f45af3e9", + "shasum": "" + }, + "bin": [ + "scripts/create-scenario", + "scripts/install-scenario" + ], + "type": "library", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Greg Anderson", + "email": "greg.1.anderson@greenknowe.org" + } + ], + "description": "Useful scripts for testing multiple sets of Composer dependencies.", + "time": "2017-12-13T18:41:24+00:00" + }, + { + "name": "guzzlehttp/guzzle", + "version": "6.3.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/guzzle.git", + "reference": "f4db5a78a5ea468d4831de7f0bf9d9415e348699" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/f4db5a78a5ea468d4831de7f0bf9d9415e348699", + "reference": "f4db5a78a5ea468d4831de7f0bf9d9415e348699", + "shasum": "" + }, + "require": { + "guzzlehttp/promises": "^1.0", + "guzzlehttp/psr7": "^1.4", + "php": ">=5.5" + }, + "require-dev": { + "ext-curl": "*", + "phpunit/phpunit": "^4.0 || ^5.0", + "psr/log": "^1.0" + }, + "suggest": { + "psr/log": "Required for using the Log middleware" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "6.2-dev" + } + }, + "autoload": { + "files": [ + "src/functions_include.php" + ], + "psr-4": { + "GuzzleHttp\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "description": "Guzzle is a PHP HTTP client library", + "homepage": "http://guzzlephp.org/", + "keywords": [ + "client", + "curl", + "framework", + "http", + "http client", + "rest", + "web service" + ], + "time": "2017-06-22T18:50:49+00:00" + }, + { + "name": "guzzlehttp/promises", + "version": "v1.3.1", + "source": { + "type": "git", + "url": "https://github.com/guzzle/promises.git", + "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/promises/zipball/a59da6cf61d80060647ff4d3eb2c03a2bc694646", + "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646", + "shasum": "" + }, + "require": { + "php": ">=5.5.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Promise\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "description": "Guzzle promises library", + "keywords": [ + "promise" + ], + "time": "2016-12-20T10:07:11+00:00" + }, + { + "name": "guzzlehttp/psr7", + "version": "1.4.2", + "source": { + "type": "git", + "url": "https://github.com/guzzle/psr7.git", + "reference": "f5b8a8512e2b58b0071a7280e39f14f72e05d87c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/f5b8a8512e2b58b0071a7280e39f14f72e05d87c", + "reference": "f5b8a8512e2b58b0071a7280e39f14f72e05d87c", + "shasum": "" + }, + "require": { + "php": ">=5.4.0", + "psr/http-message": "~1.0" + }, + "provide": { + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Psr7\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Tobias Schultze", + "homepage": "https://github.com/Tobion" + } + ], + "description": "PSR-7 message implementation that also provides common utility methods", + "keywords": [ + "http", + "message", + "request", + "response", + "stream", + "uri", + "url" + ], + "time": "2017-03-20T17:10:46+00:00" + }, + { + "name": "jakubledl/dissect", + "version": "v1.0.1", + "source": { + "type": "git", + "url": "https://github.com/jakubledl/dissect.git", + "reference": "d3a391de31e45a247e95cef6cf58a91c05af67c4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/jakubledl/dissect/zipball/d3a391de31e45a247e95cef6cf58a91c05af67c4", + "reference": "d3a391de31e45a247e95cef6cf58a91c05af67c4", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "symfony/console": "~2.1" + }, + "suggest": { + "symfony/console": "for the command-line tool" + }, + "bin": [ + "bin/dissect.php", + "bin/dissect" + ], + "type": "library", + "autoload": { + "psr-0": { + "Dissect": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "unlicense" + ], + "authors": [ + { + "name": "Jakub Lédl", + "email": "jakubledl@gmail.com" + } + ], + "description": "Lexing and parsing in pure PHP", + "homepage": "https://github.com/jakubledl/dissect", + "keywords": [ + "ast", + "lexing", + "parser", + "parsing" + ], + "time": "2013-01-29T21:29:14+00:00" + }, + { + "name": "myclabs/deep-copy", + "version": "1.7.0", + "source": { + "type": "git", + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e", + "reference": "3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0" + }, + "require-dev": { + "doctrine/collections": "^1.0", + "doctrine/common": "^2.6", + "phpunit/phpunit": "^4.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + }, + "files": [ + "src/DeepCopy/deep_copy.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Create deep copies (clones) of your objects", + "keywords": [ + "clone", + "copy", + "duplicate", + "object", + "object graph" + ], + "time": "2017-10-19T19:58:43+00:00" + }, + { + "name": "natxet/CssMin", + "version": "v3.0.4", + "source": { + "type": "git", + "url": "https://github.com/natxet/CssMin.git", + "reference": "92de3fe3ccb4f8298d31952490ef7d5395855c39" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/natxet/CssMin/zipball/92de3fe3ccb4f8298d31952490ef7d5395855c39", + "reference": "92de3fe3ccb4f8298d31952490ef7d5395855c39", + "shasum": "" + }, + "require": { + "php": ">=5.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Joe Scylla", + "email": "joe.scylla@gmail.com", + "homepage": "https://profiles.google.com/joe.scylla" + } + ], + "description": "Minifying CSS", + "homepage": "http://code.google.com/p/cssmin/", + "keywords": [ + "css", + "minify" + ], + "time": "2015-09-25T11:13:11+00:00" + }, + { + "name": "nikic/php-parser", + "version": "v3.1.3", + "source": { + "type": "git", + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "579f4ce846734a1cf55d6a531d00ca07a43e3cda" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/579f4ce846734a1cf55d6a531d00ca07a43e3cda", + "reference": "579f4ce846734a1cf55d6a531d00ca07a43e3cda", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": ">=5.5" + }, + "require-dev": { + "phpunit/phpunit": "~4.0|~5.0" + }, + "bin": [ + "bin/php-parse" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "psr-4": { + "PhpParser\\": "lib/PhpParser" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Nikita Popov" + } + ], + "description": "A PHP parser written in PHP", + "keywords": [ + "parser", + "php" + ], + "time": "2017-12-26T14:43:21+00:00" + }, + { + "name": "patchwork/jsqueeze", + "version": "v2.0.5", + "source": { + "type": "git", + "url": "https://github.com/tchwork/jsqueeze.git", + "reference": "693d64850eab2ce6a7c8f7cf547e1ab46e69d542" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/tchwork/jsqueeze/zipball/693d64850eab2ce6a7c8f7cf547e1ab46e69d542", + "reference": "693d64850eab2ce6a7c8f7cf547e1ab46e69d542", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "psr-4": { + "Patchwork\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "(Apache-2.0 or GPL-2.0)" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + } + ], + "description": "Efficient JavaScript minification in PHP", + "homepage": "https://github.com/tchwork/jsqueeze", + "keywords": [ + "compression", + "javascript", + "minification" + ], + "time": "2016-04-19T09:28:22+00:00" + }, + { + "name": "pear/archive_tar", + "version": "1.4.3", + "source": { + "type": "git", + "url": "https://github.com/pear/Archive_Tar.git", + "reference": "43455c960da70e655c6bdf8ea2bc8cc1a6034afb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/pear/Archive_Tar/zipball/43455c960da70e655c6bdf8ea2bc8cc1a6034afb", + "reference": "43455c960da70e655c6bdf8ea2bc8cc1a6034afb", + "shasum": "" + }, + "require": { + "pear/pear-core-minimal": "^1.10.0alpha2", + "php": ">=5.2.0" + }, + "require-dev": { + "phpunit/phpunit": "*" + }, + "suggest": { + "ext-bz2": "bz2 compression support.", + "ext-xz": "lzma2 compression support.", + "ext-zlib": "Gzip compression support." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4.x-dev" + } + }, + "autoload": { + "psr-0": { + "Archive_Tar": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "include-path": [ + "./" + ], + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Vincent Blavet", + "email": "vincent@phpconcept.net" + }, + { + "name": "Greg Beaver", + "email": "greg@chiaraquartet.net" + }, + { + "name": "Michiel Rook", + "email": "mrook@php.net" + } + ], + "description": "Tar file management class", + "homepage": "https://github.com/pear/Archive_Tar", + "keywords": [ + "archive", + "tar" + ], + "time": "2017-06-11T17:28:11+00:00" + }, + { + "name": "pear/console_getopt", + "version": "v1.4.1", + "source": { + "type": "git", + "url": "https://github.com/pear/Console_Getopt.git", + "reference": "82f05cd1aa3edf34e19aa7c8ca312ce13a6a577f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/pear/Console_Getopt/zipball/82f05cd1aa3edf34e19aa7c8ca312ce13a6a577f", + "reference": "82f05cd1aa3edf34e19aa7c8ca312ce13a6a577f", + "shasum": "" + }, + "type": "library", + "autoload": { + "psr-0": { + "Console": "./" + } + }, + "notification-url": "https://packagist.org/downloads/", + "include-path": [ + "./" + ], + "license": [ + "BSD-2-Clause" + ], + "authors": [ + { + "name": "Greg Beaver", + "email": "cellog@php.net", + "role": "Helper" + }, + { + "name": "Andrei Zmievski", + "email": "andrei@php.net", + "role": "Lead" + }, + { + "name": "Stig Bakken", + "email": "stig@php.net", + "role": "Developer" + } + ], + "description": "More info available on: http://pear.php.net/package/Console_Getopt", + "time": "2015-07-20T20:28:12+00:00" + }, + { + "name": "pear/pear-core-minimal", + "version": "v1.10.3", + "source": { + "type": "git", + "url": "https://github.com/pear/pear-core-minimal.git", + "reference": "070f0b600b2caca2501e2c9b7e553016e4b0d115" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/pear/pear-core-minimal/zipball/070f0b600b2caca2501e2c9b7e553016e4b0d115", + "reference": "070f0b600b2caca2501e2c9b7e553016e4b0d115", + "shasum": "" + }, + "require": { + "pear/console_getopt": "~1.4", + "pear/pear_exception": "~1.0" + }, + "replace": { + "rsky/pear-core-min": "self.version" + }, + "type": "library", + "autoload": { + "psr-0": { + "": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "include-path": [ + "src/" + ], + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Christian Weiske", + "email": "cweiske@php.net", + "role": "Lead" + } + ], + "description": "Minimal set of PEAR core files to be used as composer dependency", + "time": "2017-02-28T16:46:11+00:00" + }, + { + "name": "pear/pear_exception", + "version": "v1.0.0", + "source": { + "type": "git", + "url": "https://github.com/pear/PEAR_Exception.git", + "reference": "8c18719fdae000b690e3912be401c76e406dd13b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/pear/PEAR_Exception/zipball/8c18719fdae000b690e3912be401c76e406dd13b", + "reference": "8c18719fdae000b690e3912be401c76e406dd13b", + "shasum": "" + }, + "require": { + "php": ">=4.4.0" + }, + "require-dev": { + "phpunit/phpunit": "*" + }, + "type": "class", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-0": { + "PEAR": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "include-path": [ + "." + ], + "license": [ + "BSD-2-Clause" + ], + "authors": [ + { + "name": "Helgi Thormar", + "email": "dufuz@php.net" + }, + { + "name": "Greg Beaver", + "email": "cellog@php.net" + } + ], + "description": "The PEAR Exception base class.", + "homepage": "https://github.com/pear/PEAR_Exception", + "keywords": [ + "exception" + ], + "time": "2015-02-10T20:07:52+00:00" + }, + { + "name": "phpdocumentor/reflection-common", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionCommon.git", + "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", + "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", + "shasum": "" + }, + "require": { + "php": ">=5.5" + }, + "require-dev": { + "phpunit/phpunit": "^4.6" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": [ + "src" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jaap van Otterdijk", + "email": "opensource@ijaap.nl" + } + ], + "description": "Common reflection classes used by phpdocumentor to reflect the code structure", + "homepage": "http://www.phpdoc.org", + "keywords": [ + "FQSEN", + "phpDocumentor", + "phpdoc", + "reflection", + "static analysis" + ], + "time": "2017-09-11T18:02:19+00:00" + }, + { + "name": "phpdocumentor/reflection-docblock", + "version": "4.2.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "66465776cfc249844bde6d117abff1d22e06c2da" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/66465776cfc249844bde6d117abff1d22e06c2da", + "reference": "66465776cfc249844bde6d117abff1d22e06c2da", + "shasum": "" + }, + "require": { + "php": "^7.0", + "phpdocumentor/reflection-common": "^1.0.0", + "phpdocumentor/type-resolver": "^0.4.0", + "webmozart/assert": "^1.0" + }, + "require-dev": { + "doctrine/instantiator": "~1.0.5", + "mockery/mockery": "^1.0", + "phpunit/phpunit": "^6.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + } + ], + "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", + "time": "2017-11-27T17:38:31+00:00" + }, + { + "name": "phpdocumentor/type-resolver", + "version": "0.4.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/TypeResolver.git", + "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/9c977708995954784726e25d0cd1dddf4e65b0f7", + "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7", + "shasum": "" + }, + "require": { + "php": "^5.5 || ^7.0", + "phpdocumentor/reflection-common": "^1.0" + }, + "require-dev": { + "mockery/mockery": "^0.9.4", + "phpunit/phpunit": "^5.2||^4.8.24" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + } + ], + "time": "2017-07-14T14:27:02+00:00" + }, + { + "name": "phpspec/prophecy", + "version": "1.7.3", + "source": { + "type": "git", + "url": "https://github.com/phpspec/prophecy.git", + "reference": "e4ed002c67da8eceb0eb8ddb8b3847bb53c5c2bf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/e4ed002c67da8eceb0eb8ddb8b3847bb53c5c2bf", + "reference": "e4ed002c67da8eceb0eb8ddb8b3847bb53c5c2bf", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.0.2", + "php": "^5.3|^7.0", + "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0", + "sebastian/comparator": "^1.1|^2.0", + "sebastian/recursion-context": "^1.0|^2.0|^3.0" + }, + "require-dev": { + "phpspec/phpspec": "^2.5|^3.2", + "phpunit/phpunit": "^4.8.35 || ^5.7" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.7.x-dev" + } + }, + "autoload": { + "psr-0": { + "Prophecy\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Konstantin Kudryashov", + "email": "ever.zet@gmail.com", + "homepage": "http://everzet.com" + }, + { + "name": "Marcello Duarte", + "email": "marcello.duarte@gmail.com" + } + ], + "description": "Highly opinionated mocking framework for PHP 5.3+", + "homepage": "https://github.com/phpspec/prophecy", + "keywords": [ + "Double", + "Dummy", + "fake", + "mock", + "spy", + "stub" + ], + "time": "2017-11-24T13:59:53+00:00" + }, + { + "name": "phpunit/php-code-coverage", + "version": "4.0.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "ef7b2f56815df854e66ceaee8ebe9393ae36a40d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/ef7b2f56815df854e66ceaee8ebe9393ae36a40d", + "reference": "ef7b2f56815df854e66ceaee8ebe9393ae36a40d", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-xmlwriter": "*", + "php": "^5.6 || ^7.0", + "phpunit/php-file-iterator": "^1.3", + "phpunit/php-text-template": "^1.2", + "phpunit/php-token-stream": "^1.4.2 || ^2.0", + "sebastian/code-unit-reverse-lookup": "^1.0", + "sebastian/environment": "^1.3.2 || ^2.0", + "sebastian/version": "^1.0 || ^2.0" + }, + "require-dev": { + "ext-xdebug": "^2.1.4", + "phpunit/phpunit": "^5.7" + }, + "suggest": { + "ext-xdebug": "^2.5.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", + "homepage": "https://github.com/sebastianbergmann/php-code-coverage", + "keywords": [ + "coverage", + "testing", + "xunit" + ], + "time": "2017-04-02T07:44:40+00:00" + }, + { + "name": "phpunit/php-file-iterator", + "version": "1.4.5", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/730b01bc3e867237eaac355e06a36b85dd93a8b4", + "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "FilterIterator implementation that filters files based on a list of suffixes.", + "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", + "keywords": [ + "filesystem", + "iterator" + ], + "time": "2017-11-27T13:52:08+00:00" + }, + { + "name": "phpunit/php-text-template", + "version": "1.2.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "keywords": [ + "template" + ], + "time": "2015-06-21T13:50:34+00:00" + }, + { + "name": "phpunit/php-timer", + "version": "1.0.9", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", + "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", + "shasum": "" + }, + "require": { + "php": "^5.3.3 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", + "keywords": [ + "timer" + ], + "time": "2017-02-26T11:10:40+00:00" + }, + { + "name": "phpunit/php-token-stream", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-token-stream.git", + "reference": "791198a2c6254db10131eecfe8c06670700904db" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/791198a2c6254db10131eecfe8c06670700904db", + "reference": "791198a2c6254db10131eecfe8c06670700904db", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": "^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.2.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Wrapper around PHP's tokenizer extension.", + "homepage": "https://github.com/sebastianbergmann/php-token-stream/", + "keywords": [ + "tokenizer" + ], + "time": "2017-11-27T05:48:46+00:00" + }, + { + "name": "phpunit/phpunit", + "version": "5.7.26", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "7fbc25c13309de0c4c9bb48b7361f1eca34c7fbd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/7fbc25c13309de0c4c9bb48b7361f1eca34c7fbd", + "reference": "7fbc25c13309de0c4c9bb48b7361f1eca34c7fbd", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-xml": "*", + "myclabs/deep-copy": "~1.3", + "php": "^5.6 || ^7.0", + "phpspec/prophecy": "^1.6.2", + "phpunit/php-code-coverage": "^4.0.4", + "phpunit/php-file-iterator": "~1.4", + "phpunit/php-text-template": "~1.2", + "phpunit/php-timer": "^1.0.6", + "phpunit/phpunit-mock-objects": "^3.2", + "sebastian/comparator": "^1.2.4", + "sebastian/diff": "^1.4.3", + "sebastian/environment": "^1.3.4 || ^2.0", + "sebastian/exporter": "~2.0", + "sebastian/global-state": "^1.1", + "sebastian/object-enumerator": "~2.0", + "sebastian/resource-operations": "~1.0", + "sebastian/version": "~1.0.3|~2.0", + "symfony/yaml": "~2.1|~3.0|~4.0" + }, + "conflict": { + "phpdocumentor/reflection-docblock": "3.0.2" + }, + "require-dev": { + "ext-pdo": "*" + }, + "suggest": { + "ext-xdebug": "*", + "phpunit/php-invoker": "~1.1" + }, + "bin": [ + "phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.7.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "The PHP Unit Testing framework.", + "homepage": "https://phpunit.de/", + "keywords": [ + "phpunit", + "testing", + "xunit" + ], + "time": "2017-12-17T06:14:38+00:00" + }, + { + "name": "phpunit/phpunit-mock-objects", + "version": "3.4.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", + "reference": "a23b761686d50a560cc56233b9ecf49597cc9118" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/a23b761686d50a560cc56233b9ecf49597cc9118", + "reference": "a23b761686d50a560cc56233b9ecf49597cc9118", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.0.2", + "php": "^5.6 || ^7.0", + "phpunit/php-text-template": "^1.2", + "sebastian/exporter": "^1.2 || ^2.0" + }, + "conflict": { + "phpunit/phpunit": "<5.4.0" + }, + "require-dev": { + "phpunit/phpunit": "^5.4" + }, + "suggest": { + "ext-soap": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.2.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "Mock Object library for PHPUnit", + "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/", + "keywords": [ + "mock", + "xunit" + ], + "time": "2017-06-30T09:13:00+00:00" + }, + { + "name": "psr/http-message", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-message.git", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP messages", + "homepage": "https://github.com/php-fig/http-message", + "keywords": [ + "http", + "http-message", + "psr", + "psr-7", + "request", + "response" + ], + "time": "2016-08-06T14:39:51+00:00" + }, + { + "name": "satooshi/php-coveralls", + "version": "v2.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-coveralls/php-coveralls.git", + "reference": "3eaf7eb689cdf6b86801a3843940d974dc657068" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-coveralls/php-coveralls/zipball/3eaf7eb689cdf6b86801a3843940d974dc657068", + "reference": "3eaf7eb689cdf6b86801a3843940d974dc657068", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-simplexml": "*", + "guzzlehttp/guzzle": "^6.0", + "php": "^5.5 || ^7.0", + "psr/log": "^1.0", + "symfony/config": "^2.1 || ^3.0 || ^4.0", + "symfony/console": "^2.1 || ^3.0 || ^4.0", + "symfony/stopwatch": "^2.0 || ^3.0 || ^4.0", + "symfony/yaml": "^2.0 || ^3.0 || ^4.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.4.3 || ^6.0" + }, + "suggest": { + "symfony/http-kernel": "Allows Symfony integration" + }, + "bin": [ + "bin/php-coveralls" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "psr-4": { + "PhpCoveralls\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Kitamura Satoshi", + "email": "with.no.parachute@gmail.com", + "homepage": "https://www.facebook.com/satooshi.jp", + "role": "Original creator" + }, + { + "name": "Takashi Matsuo", + "email": "tmatsuo@google.com" + }, + { + "name": "Google Inc" + }, + { + "name": "Dariusz Ruminski", + "email": "dariusz.ruminski@gmail.com", + "homepage": "https://github.com/keradus" + }, + { + "name": "Contributors", + "homepage": "https://github.com/php-coveralls/php-coveralls/graphs/contributors" + } + ], + "description": "PHP client library for Coveralls API", + "homepage": "https://github.com/php-coveralls/php-coveralls", + "keywords": [ + "ci", + "coverage", + "github", + "test" + ], + "time": "2017-12-08T14:28:16+00:00" + }, + { + "name": "sebastian/code-unit-reverse-lookup", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", + "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", + "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^5.7 || ^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Looks up which function or method a line of code belongs to", + "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", + "time": "2017-03-04T06:30:41+00:00" + }, + { + "name": "sebastian/comparator", + "version": "1.2.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2b7424b55f5047b47ac6e5ccb20b2aea4011d9be", + "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "sebastian/diff": "~1.2", + "sebastian/exporter": "~1.2 || ~2.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides the functionality to compare PHP values for equality", + "homepage": "http://www.github.com/sebastianbergmann/comparator", + "keywords": [ + "comparator", + "compare", + "equality" + ], + "time": "2017-01-29T09:50:25+00:00" + }, + { + "name": "sebastian/diff", + "version": "1.4.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/7f066a26a962dbe58ddea9f72a4e82874a3975a4", + "reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4", + "shasum": "" + }, + "require": { + "php": "^5.3.3 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Diff implementation", + "homepage": "https://github.com/sebastianbergmann/diff", + "keywords": [ + "diff" + ], + "time": "2017-05-22T07:24:03+00:00" + }, + { + "name": "sebastian/environment", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "5795ffe5dc5b02460c3e34222fee8cbe245d8fac" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/5795ffe5dc5b02460c3e34222fee8cbe245d8fac", + "reference": "5795ffe5dc5b02460c3e34222fee8cbe245d8fac", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^5.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides functionality to handle HHVM/PHP environments", + "homepage": "http://www.github.com/sebastianbergmann/environment", + "keywords": [ + "Xdebug", + "environment", + "hhvm" + ], + "time": "2016-11-26T07:53:53+00:00" + }, + { + "name": "sebastian/exporter", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "ce474bdd1a34744d7ac5d6aad3a46d48d9bac4c4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/ce474bdd1a34744d7ac5d6aad3a46d48d9bac4c4", + "reference": "ce474bdd1a34744d7ac5d6aad3a46d48d9bac4c4", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "sebastian/recursion-context": "~2.0" + }, + "require-dev": { + "ext-mbstring": "*", + "phpunit/phpunit": "~4.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides the functionality to export PHP variables for visualization", + "homepage": "http://www.github.com/sebastianbergmann/exporter", + "keywords": [ + "export", + "exporter" + ], + "time": "2016-11-19T08:54:04+00:00" + }, + { + "name": "sebastian/global-state", + "version": "1.1.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bc37d50fea7d017d3d340f230811c9f1d7280af4", + "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.2" + }, + "suggest": { + "ext-uopz": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Snapshotting of global state", + "homepage": "http://www.github.com/sebastianbergmann/global-state", + "keywords": [ + "global state" + ], + "time": "2015-10-12T03:26:01+00:00" + }, + { + "name": "sebastian/object-enumerator", + "version": "2.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-enumerator.git", + "reference": "1311872ac850040a79c3c058bea3e22d0f09cbb7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/1311872ac850040a79c3c058bea3e22d0f09cbb7", + "reference": "1311872ac850040a79c3c058bea3e22d0f09cbb7", + "shasum": "" + }, + "require": { + "php": ">=5.6", + "sebastian/recursion-context": "~2.0" + }, + "require-dev": { + "phpunit/phpunit": "~5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Traverses array structures and object graphs to enumerate all referenced objects", + "homepage": "https://github.com/sebastianbergmann/object-enumerator/", + "time": "2017-02-18T15:18:39+00:00" + }, + { + "name": "sebastian/recursion-context", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "2c3ba150cbec723aa057506e73a8d33bdb286c9a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/2c3ba150cbec723aa057506e73a8d33bdb286c9a", + "reference": "2c3ba150cbec723aa057506e73a8d33bdb286c9a", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides functionality to recursively process PHP variables", + "homepage": "http://www.github.com/sebastianbergmann/recursion-context", + "time": "2016-11-19T07:33:16+00:00" + }, + { + "name": "sebastian/resource-operations", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/resource-operations.git", + "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/ce990bb21759f94aeafd30209e8cfcdfa8bc3f52", + "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52", + "shasum": "" + }, + "require": { + "php": ">=5.6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides a list of PHP built-in functions that operate on resources", + "homepage": "https://www.github.com/sebastianbergmann/resource-operations", + "time": "2015-07-28T20:34:47+00:00" + }, + { + "name": "sebastian/version", + "version": "2.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019", + "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019", + "shasum": "" + }, + "require": { + "php": ">=5.6" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", + "time": "2016-10-03T07:35:21+00:00" + }, + { + "name": "squizlabs/php_codesniffer", + "version": "2.9.1", + "source": { + "type": "git", + "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", + "reference": "dcbed1074f8244661eecddfc2a675430d8d33f62" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/dcbed1074f8244661eecddfc2a675430d8d33f62", + "reference": "dcbed1074f8244661eecddfc2a675430d8d33f62", + "shasum": "" + }, + "require": { + "ext-simplexml": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": ">=5.1.2" + }, + "require-dev": { + "phpunit/phpunit": "~4.0" + }, + "bin": [ + "scripts/phpcs", + "scripts/phpcbf" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "autoload": { + "classmap": [ + "CodeSniffer.php", + "CodeSniffer/CLI.php", + "CodeSniffer/Exception.php", + "CodeSniffer/File.php", + "CodeSniffer/Fixer.php", + "CodeSniffer/Report.php", + "CodeSniffer/Reporting.php", + "CodeSniffer/Sniff.php", + "CodeSniffer/Tokens.php", + "CodeSniffer/Reports/", + "CodeSniffer/Tokenizers/", + "CodeSniffer/DocGenerators/", + "CodeSniffer/Standards/AbstractPatternSniff.php", + "CodeSniffer/Standards/AbstractScopeSniff.php", + "CodeSniffer/Standards/AbstractVariableSniff.php", + "CodeSniffer/Standards/IncorrectPatternException.php", + "CodeSniffer/Standards/Generic/Sniffs/", + "CodeSniffer/Standards/MySource/Sniffs/", + "CodeSniffer/Standards/PEAR/Sniffs/", + "CodeSniffer/Standards/PSR1/Sniffs/", + "CodeSniffer/Standards/PSR2/Sniffs/", + "CodeSniffer/Standards/Squiz/Sniffs/", + "CodeSniffer/Standards/Zend/Sniffs/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Greg Sherwood", + "role": "lead" + } + ], + "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", + "homepage": "http://www.squizlabs.com/php-codesniffer", + "keywords": [ + "phpcs", + "standards" + ], + "time": "2017-05-22T02:43:20+00:00" + }, + { + "name": "symfony/browser-kit", + "version": "v4.0.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/browser-kit.git", + "reference": "67359d6a03f96f9d15b956013fade2bd271de75a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/browser-kit/zipball/67359d6a03f96f9d15b956013fade2bd271de75a", + "reference": "67359d6a03f96f9d15b956013fade2bd271de75a", + "shasum": "" + }, + "require": { + "php": "^7.1.3", + "symfony/dom-crawler": "~3.4|~4.0" + }, + "require-dev": { + "symfony/css-selector": "~3.4|~4.0", + "symfony/process": "~3.4|~4.0" + }, + "suggest": { + "symfony/process": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\BrowserKit\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony BrowserKit Component", + "homepage": "https://symfony.com", + "time": "2017-12-12T08:41:51+00:00" + }, + { + "name": "symfony/config", + "version": "v4.0.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/config.git", + "reference": "0356e6d5298e9e72212c0bad65c2f1b49e42d622" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/config/zipball/0356e6d5298e9e72212c0bad65c2f1b49e42d622", + "reference": "0356e6d5298e9e72212c0bad65c2f1b49e42d622", + "shasum": "" + }, + "require": { + "php": "^7.1.3", + "symfony/filesystem": "~3.4|~4.0" + }, + "conflict": { + "symfony/finder": "<3.4" + }, + "require-dev": { + "symfony/finder": "~3.4|~4.0", + "symfony/yaml": "~3.4|~4.0" + }, + "suggest": { + "symfony/yaml": "To use the yaml reference dumper" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Config\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Config Component", + "homepage": "https://symfony.com", + "time": "2017-12-14T19:48:22+00:00" + }, + { + "name": "symfony/css-selector", + "version": "v4.0.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/css-selector.git", + "reference": "2b71219bf15530f293f6a9262de841d0ca90b11c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/2b71219bf15530f293f6a9262de841d0ca90b11c", + "reference": "2b71219bf15530f293f6a9262de841d0ca90b11c", + "shasum": "" + }, + "require": { + "php": "^7.1.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\CssSelector\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jean-François Simon", + "email": "jeanfrancois.simon@sensiolabs.com" + }, + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony CssSelector Component", + "homepage": "https://symfony.com", + "time": "2017-12-14T19:48:22+00:00" + }, + { + "name": "symfony/dom-crawler", + "version": "v4.0.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/dom-crawler.git", + "reference": "9f207697b4aa664823f43b6568797c48316b621a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/9f207697b4aa664823f43b6568797c48316b621a", + "reference": "9f207697b4aa664823f43b6568797c48316b621a", + "shasum": "" + }, + "require": { + "php": "^7.1.3", + "symfony/polyfill-mbstring": "~1.0" + }, + "require-dev": { + "symfony/css-selector": "~3.4|~4.0" + }, + "suggest": { + "symfony/css-selector": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\DomCrawler\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony DomCrawler Component", + "homepage": "https://symfony.com", + "time": "2017-12-14T19:48:22+00:00" + }, + { + "name": "symfony/stopwatch", + "version": "v4.0.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/stopwatch.git", + "reference": "ac0e49150555c703fef6b696d8eaba1db7a3ca03" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/ac0e49150555c703fef6b696d8eaba1db7a3ca03", + "reference": "ac0e49150555c703fef6b696d8eaba1db7a3ca03", + "shasum": "" + }, + "require": { + "php": "^7.1.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Stopwatch\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Stopwatch Component", + "homepage": "https://symfony.com", + "time": "2017-11-09T12:45:29+00:00" + }, + { + "name": "webmozart/assert", + "version": "1.2.0", + "source": { + "type": "git", + "url": "https://github.com/webmozart/assert.git", + "reference": "2db61e59ff05fe5126d152bd0655c9ea113e550f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozart/assert/zipball/2db61e59ff05fe5126d152bd0655c9ea113e550f", + "reference": "2db61e59ff05fe5126d152bd0655c9ea113e550f", + "shasum": "" + }, + "require": { + "php": "^5.3.3 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.6", + "sebastian/version": "^1.0.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3-dev" + } + }, + "autoload": { + "psr-4": { + "Webmozart\\Assert\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Assertions to validate method input/output with nice error messages.", + "keywords": [ + "assert", + "check", + "validate" + ], + "time": "2016-11-23T20:04:58+00:00" + } + ], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": [], + "prefer-stable": false, + "prefer-lowest": false, + "platform": { + "php": ">=5.5.0" + }, + "platform-dev": [], + "platform-overrides": { + "php": "7.1.3" + } +} diff --git a/lib/composer/vendor/consolidation/robo/scenarios/symfony4/src b/lib/composer/vendor/consolidation/robo/scenarios/symfony4/src new file mode 120000 index 000000000..929cb3dc9 --- /dev/null +++ b/lib/composer/vendor/consolidation/robo/scenarios/symfony4/src @@ -0,0 +1 @@ +../../src \ No newline at end of file diff --git a/lib/composer/vendor/consolidation/robo/src/Application.php b/lib/composer/vendor/consolidation/robo/src/Application.php index e6664b5df..19d4725f3 100644 --- a/lib/composer/vendor/consolidation/robo/src/Application.php +++ b/lib/composer/vendor/consolidation/robo/src/Application.php @@ -3,8 +3,6 @@ use Symfony\Component\Console\Application as SymfonyApplication; use Symfony\Component\Console\Command\Command; -use Symfony\Component\Console\Input\InputArgument; -use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Input\InputOption; class Application extends SymfonyApplication @@ -25,6 +23,11 @@ public function __construct($name, $version) ->addOption( new InputOption('--progress-delay', null, InputOption::VALUE_REQUIRED, 'Number of seconds before progress bar is displayed in long-running task collections. Default: 2s.', Config::DEFAULT_PROGRESS_DELAY) ); + + $this->getDefinition() + ->addOption( + new InputOption('--define', '-D', InputOption::VALUE_REQUIRED | InputOption::VALUE_IS_ARRAY, 'Define a configuration item value.', []) + ); } /** @@ -53,4 +56,18 @@ public function addInitRoboFileCommand($roboFile, $roboClass) }); $this->add($createRoboFile); } + + /** + * Add self update command, do nothing if null is provided + * + * @param string $repository GitHub Repository for self update + */ + public function addSelfUpdateCommand($repository = null) + { + if (!$repository) { + return; + } + $selfUpdateCommand = new SelfUpdateCommand($this->getName(), $this->getVersion(), $repository); + $this->add($selfUpdateCommand); + } } diff --git a/lib/composer/vendor/consolidation/robo/src/Collection/CallableTask.php b/lib/composer/vendor/consolidation/robo/src/Collection/CallableTask.php index 8ae3a3300..ae9c54fc5 100644 --- a/lib/composer/vendor/consolidation/robo/src/Collection/CallableTask.php +++ b/lib/composer/vendor/consolidation/robo/src/Collection/CallableTask.php @@ -3,7 +3,8 @@ use Robo\Result; use Robo\Contract\TaskInterface; -use Robo\Collection\Collection; +use Robo\State\StateAwareInterface; +use Robo\State\Data; /** * Creates a task wrapper that converts any Callable into an @@ -35,7 +36,7 @@ public function __construct(callable $fn, TaskInterface $reference) */ public function run() { - $result = call_user_func($this->fn); + $result = call_user_func($this->fn, $this->getState()); // If the function returns no result, then count it // as a success. if (!isset($result)) { @@ -50,4 +51,12 @@ public function run() return $result; } + + public function getState() + { + if ($this->reference instanceof StateAwareInterface) { + return $this->reference->getState(); + } + return new Data(); + } } diff --git a/lib/composer/vendor/consolidation/robo/src/Collection/Collection.php b/lib/composer/vendor/consolidation/robo/src/Collection/Collection.php index 5458c8a53..607435a48 100644 --- a/lib/composer/vendor/consolidation/robo/src/Collection/Collection.php +++ b/lib/composer/vendor/consolidation/robo/src/Collection/Collection.php @@ -2,6 +2,7 @@ namespace Robo\Collection; use Robo\Result; +use Robo\State\Data; use Psr\Log\LogLevel; use Robo\Contract\TaskInterface; use Robo\Task\StackBasedTask; @@ -12,9 +13,9 @@ use Robo\Exception\TaskExitException; use Robo\Contract\CommandInterface; - -use Robo\Common\ProgressIndicatorAwareTrait; use Robo\Contract\InflectionInterface; +use Robo\State\StateAwareInterface; +use Robo\State\StateAwareTrait; /** * Group tasks into a collection that run together. Supports @@ -30,8 +31,10 @@ * called. Here, taskDeleteDir is used to remove partial results * of an unfinished task. */ -class Collection extends BaseTask implements CollectionInterface, CommandInterface +class Collection extends BaseTask implements CollectionInterface, CommandInterface, StateAwareInterface { + use StateAwareTrait; + /** * @var \Robo\Collection\Element[] */ @@ -52,11 +55,22 @@ class Collection extends BaseTask implements CollectionInterface, CommandInterfa */ protected $parentCollection; + /** + * @var callable[] + */ + protected $deferredCallbacks = []; + + /** + * @var string[] + */ + protected $messageStoreKeys = []; + /** * Constructor. */ public function __construct() { + $this->resetState(); } public function setProgressBarAutoDisplayInterval($interval) @@ -165,6 +179,7 @@ public function progressMessage($text, $context = [], $level = LogLevel::NOTICE) $context += TaskInfo::getTaskContext($this); return $this->addCode( function () use ($level, $text, $context) { + $context += $this->getState()->getData(); $this->printTaskOutput($level, $text, $context); } ); @@ -552,6 +567,8 @@ private function runTaskList($name, array $taskList, Result $result) // the incremental results, if they wish. $key = Result::isUnnamed($taskName) ? $name : $taskName; $result->accumulate($key, $taskResult); + // The result message will be the message of the last task executed. + $result->setMessage($taskResult->getMessage()); } } catch (TaskExitException $exitException) { $this->fail(); @@ -632,10 +649,79 @@ protected function runSubtask($task) if ($original instanceof InflectionInterface) { $original->inflect($this); } + if ($original instanceof StateAwareInterface) { + $original->setState($this->getState()); + } + $this->doDeferredInitialization($original); $taskResult = $task->run(); + $taskResult = Result::ensureResult($task, $taskResult); + $this->doStateUpdates($original, $taskResult); return $taskResult; } + protected function doStateUpdates($task, Data $taskResult) + { + $this->updateState($taskResult); + $key = spl_object_hash($task); + if (array_key_exists($key, $this->messageStoreKeys)) { + $state = $this->getState(); + list($stateKey, $sourceKey) = $this->messageStoreKeys[$key]; + $value = empty($sourceKey) ? $taskResult->getMessage() : $taskResult[$sourceKey]; + $state[$stateKey] = $value; + } + } + + public function storeState($task, $key, $source = '') + { + $this->messageStoreKeys[spl_object_hash($task)] = [$key, $source]; + + return $this; + } + + public function deferTaskConfiguration($task, $functionName, $stateKey) + { + return $this->defer( + $task, + function ($task, $state) use ($functionName, $stateKey) { + $fn = [$task, $functionName]; + $value = $state[$stateKey]; + $fn($value); + } + ); + } + + /** + * Defer execution of a callback function until just before a task + * runs. Use this time to provide more settings for the task, e.g. from + * the collection's shared state, which is populated with the results + * of previous test runs. + */ + public function defer($task, $callback) + { + $this->deferredCallbacks[spl_object_hash($task)][] = $callback; + + return $this; + } + + protected function doDeferredInitialization($task) + { + // If the task is a state consumer, then call its receiveState method + if ($task instanceof \Robo\State\Consumer) { + $task->receiveState($this->getState()); + } + + // Check and see if there are any deferred callbacks for this task. + $key = spl_object_hash($task); + if (!array_key_exists($key, $this->deferredCallbacks)) { + return; + } + + // Call all of the deferred callbacks + foreach ($this->deferredCallbacks[$key] as $fn) { + $fn($task, $this->getState()); + } + } + /** * @param TaskInterface|NestedCollectionInterface|WrappedTaskInterface $task * @param $parentCollection diff --git a/lib/composer/vendor/consolidation/robo/src/Collection/CollectionBuilder.php b/lib/composer/vendor/consolidation/robo/src/Collection/CollectionBuilder.php index 9b4d51803..3e037b01e 100644 --- a/lib/composer/vendor/consolidation/robo/src/Collection/CollectionBuilder.php +++ b/lib/composer/vendor/consolidation/robo/src/Collection/CollectionBuilder.php @@ -1,26 +1,22 @@ commandFile = $commandFile; + $this->resetState(); + } + + public static function create($container, $commandFile) + { + $builder = new self($commandFile); + + $builder->setLogger($container->get('logger')); + $builder->setProgressIndicator($container->get('progressIndicator')); + $builder->setConfig($container->get('config')); + $builder->setOutputAdapter($container->get('outputAdapter')); + + return $builder; } /** @@ -147,9 +158,18 @@ public function addTask(TaskInterface $task) return $this; } - public function addCode(callable $code) + /** + * Add arbitrary code to execute as a task. + * + * @see \Robo\Collection\CollectionInterface::addCode + * + * @param callable $code + * @param int|string $name + * @return $this + */ + public function addCode(callable $code, $name = \Robo\Collection\CollectionInterface::UNNAMEDTASK) { - $this->getCollection()->addCode($code); + $this->getCollection()->addCode($code, $name); return $this; } @@ -245,6 +265,51 @@ public function addTaskToCollection($task) return $this; } + public function getState() + { + $collection = $this->getCollection(); + return $collection->getState(); + } + + public function storeState($key, $source = '') + { + return $this->callCollectionStateFuntion(__FUNCTION__, func_get_args()); + } + + public function deferTaskConfiguration($functionName, $stateKey) + { + return $this->callCollectionStateFuntion(__FUNCTION__, func_get_args()); + } + + public function defer($callback) + { + return $this->callCollectionStateFuntion(__FUNCTION__, func_get_args()); + } + + protected function callCollectionStateFuntion($functionName, $args) + { + $currentTask = ($this->currentTask instanceof WrappedTaskInterface) ? $this->currentTask->original() : $this->currentTask; + + array_unshift($args, $currentTask); + $collection = $this->getCollection(); + $fn = [$collection, $functionName]; + + call_user_func_array($fn, $args); + return $this; + } + + public function setVerbosityThreshold($verbosityThreshold) + { + $currentTask = ($this->currentTask instanceof WrappedTaskInterface) ? $this->currentTask->original() : $this->currentTask; + if ($currentTask) { + $currentTask->setVerbosityThreshold($verbosityThreshold); + return $this; + } + parent::setVerbosityThreshold($verbosityThreshold); + return $this; + } + + /** * Return the current task for this collection builder. * TODO: Not needed? @@ -266,6 +331,9 @@ public function newBuilder() $collectionBuilder = new self($this->commandFile); $collectionBuilder->inflect($this); $collectionBuilder->simulated($this->isSimulated()); + $collectionBuilder->setVerbosityThreshold($this->verbosityThreshold()); + $collectionBuilder->setState($this->getState()); + return $collectionBuilder; } @@ -355,6 +423,7 @@ public function build($name, $args) throw new RuntimeException("Can not construct task $name"); } $task = $this->fixTask($task, $args); + $this->configureTask($name, $task); return $this->addTaskToCollection($task); } @@ -366,10 +435,15 @@ public function build($name, $args) */ protected function fixTask($task, $args) { - $task->inflect($this); + if ($task instanceof InflectionInterface) { + $task->inflect($this); + } if ($task instanceof BuilderAwareInterface) { $task->setBuilder($this); } + if ($task instanceof VerbosityThresholdInterface) { + $task->setVerbosityThreshold($this->verbosityThreshold()); + } // Do not wrap our wrappers. if ($task instanceof CompletionWrapper || $task instanceof Simulator) { @@ -402,6 +476,25 @@ protected function fixTask($task, $args) return $task; } + /** + * Check to see if there are any setter methods defined in configuration + * for this task. + */ + protected function configureTask($taskClass, $task) + { + $taskClass = static::configClassIdentifier($taskClass); + $configurationApplier = new ConfigForSetters($this->getConfig(), $taskClass, 'task.'); + $configurationApplier->apply($task, 'settings'); + + // TODO: If we counted each instance of $taskClass that was called from + // this builder, then we could also apply configuration from + // "task.{$taskClass}[$N].settings" + + // TODO: If the builder knew what the current command name was, + // then we could also search for task configuration under + // command-specific keys such as "command.{$commandname}.task.{$taskClass}.settings". + } + /** * When we run the collection builder, run everything in the collection. * @@ -413,6 +506,7 @@ public function run() $result = $this->runTasks(); $this->stopTimer(); $result['time'] = $this->getExecutionTime(); + $result->mergeData($this->getState()->getData()); return $result; } @@ -425,7 +519,8 @@ public function run() protected function runTasks() { if (!$this->collection && $this->currentTask) { - return $this->currentTask->run(); + $result = $this->currentTask->run(); + return Result::ensureResult($this->currentTask, $result); } return $this->getCollection()->run(); } @@ -464,6 +559,7 @@ public function getCollection() if (!isset($this->collection)) { $this->collection = new Collection(); $this->collection->inflect($this); + $this->collection->setState($this->getState()); $this->collection->setProgressBarAutoDisplayInterval($this->getConfig()->get(Config::PROGRESS_BAR_AUTO_DISPLAY_INTERVAL)); if (isset($this->currentTask)) { diff --git a/lib/composer/vendor/consolidation/robo/src/Collection/CollectionInterface.php b/lib/composer/vendor/consolidation/robo/src/Collection/CollectionInterface.php index b3a34f4eb..173ca169c 100644 --- a/lib/composer/vendor/consolidation/robo/src/Collection/CollectionInterface.php +++ b/lib/composer/vendor/consolidation/robo/src/Collection/CollectionInterface.php @@ -141,7 +141,8 @@ public function after($name, $task, $nameOfTaskToAdd = self::UNNAMEDTASK); * message will not be printed. * * @param string $text Message to print. - * @param array $context Extra context data for use by the logger. + * @param array $context Extra context data for use by the logger. Note + * that the data from the collection state is merged with the provided context. * @param \Psr\Log\LogLevel|string $level The log level to print the information at. Default is NOTICE. * * @return $this diff --git a/lib/composer/vendor/consolidation/robo/src/Collection/NestedCollectionInterface.php b/lib/composer/vendor/consolidation/robo/src/Collection/NestedCollectionInterface.php index 73d26282a..5e32cf37a 100644 --- a/lib/composer/vendor/consolidation/robo/src/Collection/NestedCollectionInterface.php +++ b/lib/composer/vendor/consolidation/robo/src/Collection/NestedCollectionInterface.php @@ -1,9 +1,6 @@ arguments .= " $arg"; + + return $this; } /** @@ -74,36 +78,51 @@ public static function escape($value) * * @param string $option * @param string $value + * @param string $separator * * @return $this */ - public function option($option, $value = null) + public function option($option, $value = null, $separator = ' ') { if ($option !== null and strpos($option, '-') !== 0) { $option = "--$option"; } $this->arguments .= null == $option ? '' : " " . $option; - $this->arguments .= null == $value ? '' : " " . static::escape($value); + $this->arguments .= null == $value ? '' : $separator . static::escape($value); + return $this; + } + + /** + * Pass multiple options to executable. The associative array contains + * the key:value pairs that become `--key value`, for each item in the array. + * Values are automatically escaped. + */ + public function options(array $options, $separator = ' ') + { + foreach ($options as $option => $value) { + $this->option($option, $value, $separator); + } return $this; } /** - * Pass multiple options to executable. Value can be a string or array. + * Pass an option with multiple values to executable. Value can be a string or array. * Option values are automatically escaped. * * @param string $option * @param string|array $value + * @param string $separator * * @return $this */ - public function optionList($option, $value = array()) + public function optionList($option, $value = array(), $separator = ' ') { if (is_array($value)) { foreach ($value as $item) { - $this->optionList($option, $item); + $this->optionList($option, $item, $separator); } } else { - $this->option($option, $value); + $this->option($option, $value, $separator); } return $this; diff --git a/lib/composer/vendor/consolidation/robo/src/Common/ConfigAwareTrait.php b/lib/composer/vendor/consolidation/robo/src/Common/ConfigAwareTrait.php index 8f8ba48c6..d6d45788d 100644 --- a/lib/composer/vendor/consolidation/robo/src/Common/ConfigAwareTrait.php +++ b/lib/composer/vendor/consolidation/robo/src/Common/ConfigAwareTrait.php @@ -3,25 +3,25 @@ namespace Robo\Common; use Robo\Robo; -use Robo\Config; +use Consolidation\Config\ConfigInterface; trait ConfigAwareTrait { /** - * @var \Robo\Config + * @var ConfigInterface */ protected $config; /** * Set the config management object. * - * @param \Robo\Config $config + * @param ConfigInterface $config * * @return $this * * @see \Robo\Contract\ConfigAwareInterface::setConfig() */ - public function setConfig(Config $config) + public function setConfig(ConfigInterface $config) { $this->config = $config; @@ -31,7 +31,7 @@ public function setConfig(Config $config) /** * Get the config management object. * - * @return \Robo\Config + * @return ConfigInterface * * @see \Robo\Contract\ConfigAwareInterface::getConfig() */ @@ -40,6 +40,32 @@ public function getConfig() return $this->config; } + /** + * Any class that uses ConfigAwareTrait SHOULD override this method + * , and define a prefix for its configuration items. This is usually + * done in a base class. When used, this method should return a string + * that ends with a "."; see BaseTask::configPrefix(). + * + * @return string + */ + protected static function configPrefix() + { + return ''; + } + + protected static function configClassIdentifier($classname) + { + $configIdentifier = strtr($classname, '\\', '.'); + $configIdentifier = preg_replace('#^(.*\.Task\.|\.)#', '', $configIdentifier); + + return $configIdentifier; + } + + protected static function configPostfix() + { + return ''; + } + /** * @param string $key * @@ -47,18 +73,24 @@ public function getConfig() */ private static function getClassKey($key) { - return sprintf('%s.%s', get_called_class(), $key); + $configPrefix = static::configPrefix(); // task. + $configClass = static::configClassIdentifier(get_called_class()); // PARTIAL_NAMESPACE.CLASSNAME + $configPostFix = static::configPostfix(); // .settings + + return sprintf('%s%s%s.%s', $configPrefix, $configClass, $configPostFix, $key); } /** * @param string $key * @param mixed $value - * - * @deprecated + * @param Config|null $config */ - public static function configure($key, $value) + public static function configure($key, $value, $config = null) { - Robo::config()->set(static::getClassKey($key), $value); + if (!$config) { + $config = Robo::config(); + } + $config->setDefault(static::getClassKey($key), $value); } /** diff --git a/lib/composer/vendor/consolidation/robo/src/Common/ExecCommand.php b/lib/composer/vendor/consolidation/robo/src/Common/ExecCommand.php index ad4c40934..c3e6c3af6 100644 --- a/lib/composer/vendor/consolidation/robo/src/Common/ExecCommand.php +++ b/lib/composer/vendor/consolidation/robo/src/Common/ExecCommand.php @@ -11,15 +11,7 @@ */ trait ExecCommand { - /** - * @var bool - */ - protected $isPrinted = true; - - /** - * @var string - */ - protected $workingDirectory; + use ExecTrait; /** * @var \Robo\Common\TimeKeeper @@ -37,45 +29,6 @@ protected function getExecTimer() return $this->execTimer; } - /** - * Is command printing its output to screen - * - * @return bool - */ - public function getPrinted() - { - return $this->isPrinted; - } - - /** - * Changes working directory of command - * - * @param string $dir - * - * @return $this - */ - public function dir($dir) - { - $this->workingDirectory = $dir; - return $this; - } - - - /** - * Should command output be printed - * - * @param bool $arg - * - * @return $this - */ - public function printed($arg) - { - if (is_bool($arg)) { - $this->isPrinted = $arg; - } - return $this; - } - /** * Look for a "{$cmd}.phar" in the current working * directory; return a string to exec it if it is @@ -135,7 +88,8 @@ private function searchForExecutable($cmd) */ protected function findProjectBin() { - $candidates = [ __DIR__ . '/../../vendor/bin', __DIR__ . '/../../bin' ]; + $cwd = getcwd(); + $candidates = [ __DIR__ . '/../../vendor/bin', __DIR__ . '/../../bin', $cwd . '/vendor/bin' ]; // If this project is inside a vendor directory, give highest priority // to that directory. @@ -170,6 +124,11 @@ protected function useCallOnWindows($cmd) return $cmd; } + protected function getCommandDescription() + { + return $this->process->getCommandLine(); + } + /** * @param string $command * @@ -177,21 +136,13 @@ protected function useCallOnWindows($cmd) */ protected function executeCommand($command) { - $process = new Process($command); - $process->setTimeout(null); - if ($this->workingDirectory) { - $process->setWorkingDirectory($this->workingDirectory); - } - $this->getExecTimer()->start(); - if ($this->isPrinted) { - $process->run(function ($type, $buffer) { - print $buffer; - }); - } else { - $process->run(); - } - $this->getExecTimer()->stop(); - - return new Result($this, $process->getExitCode(), $process->getOutput(), ['time' => $this->getExecTimer()->elapsed()]); + // TODO: Symfony 4 requires that we supply the working directory. + $result_data = $this->execute(new Process($command, getcwd())); + return new Result( + $this, + $result_data->getExitCode(), + $result_data->getMessage(), + $result_data->getData() + ); } } diff --git a/lib/composer/vendor/consolidation/robo/src/Common/ExecTrait.php b/lib/composer/vendor/consolidation/robo/src/Common/ExecTrait.php new file mode 100644 index 000000000..0dd1a6cdf --- /dev/null +++ b/lib/composer/vendor/consolidation/robo/src/Common/ExecTrait.php @@ -0,0 +1,408 @@ +interactive() based on posix_isatty(). + * + * @return $this + */ + public function detectInteractive() + { + // If the caller did not explicity set the 'interactive' mode, + // and output should be produced by this task (verbosityMeetsThreshold), + // then we will automatically set interactive mode based on whether + // or not output was redirected when robo was executed. + if (!isset($this->interactive) && function_exists('posix_isatty') && $this->verbosityMeetsThreshold()) { + $this->interactive = posix_isatty(STDOUT); + } + + return $this; + } + + /** + * Executes command in background mode (asynchronously) + * + * @return $this + */ + public function background($arg = true) + { + $this->background = $arg; + return $this; + } + + /** + * Stop command if it runs longer then $timeout in seconds + * + * @param int $timeout + * + * @return $this + */ + public function timeout($timeout) + { + $this->timeout = $timeout; + return $this; + } + + /** + * Stops command if it does not output something for a while + * + * @param int $timeout + * + * @return $this + */ + public function idleTimeout($timeout) + { + $this->idleTimeout = $timeout; + return $this; + } + + /** + * Set a single environment variable, or multiple. + */ + public function env($env, $value = null) + { + if (!is_array($env)) { + $env = [$env => ($value ? $value : true)]; + } + return $this->envVars($env); + } + + /** + * Sets the environment variables for the command + * + * @param array $env + * + * @return $this + */ + public function envVars(array $env) + { + $this->env = $env; + return $this; + } + + /** + * Pass an input to the process. Can be resource created with fopen() or string + * + * @param resource|string $input + * + * @return $this + */ + public function setInput($input) + { + $this->input = $input; + return $this; + } + + /** + * Attach tty to process for interactive input + * + * @param $interactive bool + * + * @return $this + */ + public function interactive($interactive = true) + { + $this->interactive = $interactive; + return $this; + } + + + /** + * Is command printing its output to screen + * + * @return bool + */ + public function getPrinted() + { + return $this->isPrinted; + } + + /** + * Changes working directory of command + * + * @param string $dir + * + * @return $this + */ + public function dir($dir) + { + $this->workingDirectory = $dir; + return $this; + } + + /** + * Shortcut for setting isPrinted() and isMetadataPrinted() to false. + * + * @param bool $arg + * + * @return $this + */ + public function silent($arg) + { + if (is_bool($arg)) { + $this->isPrinted = !$arg; + $this->isMetadataPrinted = !$arg; + } + return $this; + } + + /** + * Should command output be printed + * + * @param bool $arg + * + * @return $this + * + * @deprecated + */ + public function printed($arg) + { + $this->logger->warning("printed() is deprecated. Please use printOutput()."); + return $this->printOutput($arg); + } + + /** + * Should command output be printed + * + * @param bool $arg + * + * @return $this + */ + public function printOutput($arg) + { + if (is_bool($arg)) { + $this->isPrinted = $arg; + } + return $this; + } + + /** + * Should command metadata be printed. I,e., command and timer. + * + * @param bool $arg + * + * @return $this + */ + public function printMetadata($arg) + { + if (is_bool($arg)) { + $this->isMetadataPrinted = $arg; + } + return $this; + } + + /** + * @param Process $process + * @param callable $output_callback + * + * @return \Robo\ResultData + */ + protected function execute($process, $output_callback = null) + { + $this->process = $process; + + if (!$output_callback) { + $output_callback = function ($type, $buffer) { + $progressWasVisible = $this->hideTaskProgress(); + $this->writeMessage($buffer); + $this->showTaskProgress($progressWasVisible); + }; + } + + $this->detectInteractive(); + + if ($this->isMetadataPrinted) { + $this->printAction(); + } + $this->process->setTimeout($this->timeout); + $this->process->setIdleTimeout($this->idleTimeout); + if ($this->workingDirectory) { + $this->process->setWorkingDirectory($this->workingDirectory); + } + if ($this->input) { + $this->process->setInput($this->input); + } + + if ($this->interactive && $this->isPrinted) { + $this->process->setTty(true); + } + + if (isset($this->env)) { + $this->process->setEnv($this->env); + } + + if (!$this->background && !$this->isPrinted) { + $this->startTimer(); + $this->process->run(); + $this->stopTimer(); + $output = rtrim($this->process->getOutput()); + return new ResultData( + $this->process->getExitCode(), + $output, + $this->getResultData() + ); + } + + if (!$this->background && $this->isPrinted) { + $this->startTimer(); + $this->process->run($output_callback); + $this->stopTimer(); + return new ResultData( + $this->process->getExitCode(), + $this->process->getOutput(), + $this->getResultData() + ); + } + + try { + $this->process->start(); + } catch (\Exception $e) { + return new ResultData( + $this->process->getExitCode(), + $e->getMessage(), + $this->getResultData() + ); + } + return new ResultData($this->process->getExitCode()); + } + + /** + * + */ + protected function stop() + { + if ($this->background && isset($this->process) && $this->process->isRunning()) { + $this->process->stop(); + $this->printTaskInfo( + "Stopped {command}", + ['command' => $this->getCommandDescription()] + ); + } + } + + /** + * @param array $context + */ + protected function printAction($context = []) + { + $command = $this->getCommandDescription(); + $formatted_command = $this->formatCommandDisplay($command); + + $dir = $this->workingDirectory ? " in {dir}" : ""; + $this->printTaskInfo("Running {command}$dir", [ + 'command' => $formatted_command, + 'dir' => $this->workingDirectory + ] + $context); + } + + /** + * @param $command + * + * @return mixed + */ + protected function formatCommandDisplay($command) + { + $formatted_command = str_replace("&&", "&&\n", $command); + $formatted_command = str_replace("||", "||\n", $formatted_command); + + return $formatted_command; + } + + /** + * Gets the data array to be passed to Result(). + * + * @return array + * The data array passed to Result(). + */ + protected function getResultData() + { + if ($this->isMetadataPrinted) { + return ['time' => $this->getExecutionTime()]; + } + + return []; + } +} diff --git a/lib/composer/vendor/consolidation/robo/src/Common/IO.php b/lib/composer/vendor/consolidation/robo/src/Common/IO.php index 8da7b61db..d6c77bff8 100644 --- a/lib/composer/vendor/consolidation/robo/src/Common/IO.php +++ b/lib/composer/vendor/consolidation/robo/src/Common/IO.php @@ -1,12 +1,7 @@ getDialog()->ask($this->input(), $this->output(), $question); } @@ -153,7 +148,7 @@ private function doAsk(Question $question) * * @return string */ - private function formatQuestion($message) + protected function formatQuestion($message) { return "? $message "; } @@ -169,7 +164,7 @@ protected function getDialog() /** * @param $text */ - private function writeln($text) + protected function writeln($text) { $this->output()->writeln($text); } diff --git a/lib/composer/vendor/consolidation/robo/src/Common/OutputAdapter.php b/lib/composer/vendor/consolidation/robo/src/Common/OutputAdapter.php new file mode 100644 index 000000000..b8e795f23 --- /dev/null +++ b/lib/composer/vendor/consolidation/robo/src/Common/OutputAdapter.php @@ -0,0 +1,38 @@ + OutputInterface::VERBOSITY_NORMAL, + VerbosityThresholdInterface::VERBOSITY_VERBOSE => OutputInterface::VERBOSITY_VERBOSE, + VerbosityThresholdInterface::VERBOSITY_VERY_VERBOSE => OutputInterface::VERBOSITY_VERY_VERBOSE, + VerbosityThresholdInterface::VERBOSITY_DEBUG => OutputInterface::VERBOSITY_DEBUG, + ]; + + public function verbosityMeetsThreshold($verbosityThreshold) + { + if (!isset($this->verbosityMap[$verbosityThreshold])) { + return true; + } + $verbosityThreshold = $this->verbosityMap[$verbosityThreshold]; + $verbosity = $this->output()->getVerbosity(); + + return $verbosity >= $verbosityThreshold; + } + + public function writeMessage($message) + { + $this->output()->write($message); + } +} diff --git a/lib/composer/vendor/consolidation/robo/src/Common/ProcessExecutor.php b/lib/composer/vendor/consolidation/robo/src/Common/ProcessExecutor.php new file mode 100644 index 000000000..f78a47752 --- /dev/null +++ b/lib/composer/vendor/consolidation/robo/src/Common/ProcessExecutor.php @@ -0,0 +1,51 @@ +process = $process; + } + + public static function create($container, $process) + { + $processExecutor = new self($process); + + $processExecutor->setLogger($container->get('logger')); + $processExecutor->setProgressIndicator($container->get('progressIndicator')); + $processExecutor->setConfig($container->get('config')); + $processExecutor->setOutputAdapter($container->get('outputAdapter')); + + return $processExecutor; + } + + /** + * @return string + */ + protected function getCommandDescription() + { + return $this->process->getCommandLine(); + } + + public function run() + { + return $this->execute($this->process); + } +} diff --git a/lib/composer/vendor/consolidation/robo/src/Common/ProcessUtils.php b/lib/composer/vendor/consolidation/robo/src/Common/ProcessUtils.php new file mode 100644 index 000000000..7dc4e5531 --- /dev/null +++ b/lib/composer/vendor/consolidation/robo/src/Common/ProcessUtils.php @@ -0,0 +1,79 @@ + + */ + +namespace Robo\Common; + +use Symfony\Component\Process\Exception\InvalidArgumentException; + +/** + * ProcessUtils is a bunch of utility methods. We want to allow Robo 1.x + * to work with Symfony 4.x while remaining backwards compatibility. This + * requires us to replace some deprecated functionality removed in Symfony. + */ +class ProcessUtils +{ + /** + * This class should not be instantiated. + */ + private function __construct() + { + } + + /** + * Escapes a string to be used as a shell argument. + * + * @param string $argument The argument that will be escaped + * + * @return string The escaped argument + * + * @deprecated since version 3.3, to be removed in 4.0. Use a command line array or give env vars to the `Process::start/run()` method instead. + */ + public static function escapeArgument($argument) + { + @trigger_error('The '.__METHOD__.'() method is a copy of a method that was deprecated by Symfony 3.3 and removed in Symfony 4; it will be removed in Robo 2.0.', E_USER_DEPRECATED); + + //Fix for PHP bug #43784 escapeshellarg removes % from given string + //Fix for PHP bug #49446 escapeshellarg doesn't work on Windows + //@see https://bugs.php.net/bug.php?id=43784 + //@see https://bugs.php.net/bug.php?id=49446 + if ('\\' === DIRECTORY_SEPARATOR) { + if ('' === $argument) { + return escapeshellarg($argument); + } + + $escapedArgument = ''; + $quote = false; + foreach (preg_split('/(")/', $argument, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE) as $part) { + if ('"' === $part) { + $escapedArgument .= '\\"'; + } elseif (self::isSurroundedBy($part, '%')) { + // Avoid environment variable expansion + $escapedArgument .= '^%"'.substr($part, 1, -1).'"^%'; + } else { + // escape trailing backslash + if ('\\' === substr($part, -1)) { + $part .= '\\'; + } + $quote = true; + $escapedArgument .= $part; + } + } + if ($quote) { + $escapedArgument = '"'.$escapedArgument.'"'; + } + + return $escapedArgument; + } + + return "'".str_replace("'", "'\\''", $argument)."'"; + } + + private static function isSurroundedBy($arg, $char) + { + return 2 < strlen($arg) && $char === $arg[0] && $char === $arg[strlen($arg) - 1]; + } +} diff --git a/lib/composer/vendor/consolidation/robo/src/Common/ProgressIndicatorAwareTrait.php b/lib/composer/vendor/consolidation/robo/src/Common/ProgressIndicatorAwareTrait.php index 5d33e6d07..060e039a1 100644 --- a/lib/composer/vendor/consolidation/robo/src/Common/ProgressIndicatorAwareTrait.php +++ b/lib/composer/vendor/consolidation/robo/src/Common/ProgressIndicatorAwareTrait.php @@ -1,6 +1,9 @@ progressIndicator = $progressIndicator; + + return $this; } /** @@ -70,6 +77,10 @@ protected function getTotalExecutionTime() protected function startProgressIndicator() { $this->startTimer(); + if ($this instanceof VerbosityThresholdInterface + && !$this->verbosityMeetsThreshold()) { + return; + } if (!$this->progressIndicator) { return; } diff --git a/lib/composer/vendor/consolidation/robo/src/Common/TaskIO.php b/lib/composer/vendor/consolidation/robo/src/Common/TaskIO.php index 57ebb6fee..49b5ccd86 100644 --- a/lib/composer/vendor/consolidation/robo/src/Common/TaskIO.php +++ b/lib/composer/vendor/consolidation/robo/src/Common/TaskIO.php @@ -4,9 +4,7 @@ use Robo\Robo; use Robo\TaskInfo; use Consolidation\Log\ConsoleLogLevel; -use Robo\Common\ConfigAwareTrait; use Psr\Log\LoggerAwareTrait; -use Psr\Log\LoggerInterface; use Psr\Log\LogLevel; use Robo\Contract\ProgressIndicatorAwareInterface; @@ -21,6 +19,7 @@ trait TaskIO { use LoggerAwareTrait; use ConfigAwareTrait; + use VerbosityThresholdTrait; /** * @return mixed|null|\Psr\Log\LoggerInterface @@ -137,6 +136,9 @@ protected function printTaskDebug($text, $context = null) */ protected function printTaskOutput($level, $text, $context) { + if (!$this->verbosityMeetsThreshold()) { + return; + } $logger = $this->logger(); if (!$logger) { return; diff --git a/lib/composer/vendor/consolidation/robo/src/Common/VerbosityThresholdTrait.php b/lib/composer/vendor/consolidation/robo/src/Common/VerbosityThresholdTrait.php new file mode 100644 index 000000000..2fc51c22b --- /dev/null +++ b/lib/composer/vendor/consolidation/robo/src/Common/VerbosityThresholdTrait.php @@ -0,0 +1,79 @@ +verbosityThreshold = $verbosityThreshold; + return $this; + } + + public function verbosityThreshold() + { + return $this->verbosityThreshold; + } + + public function setOutputAdapter(OutputAdapterInterface $outputAdapter) + { + $this->outputAdapter = $outputAdapter; + } + + /** + * @return OutputAdapterInterface + */ + public function outputAdapter() + { + return $this->outputAdapter; + } + + public function hasOutputAdapter() + { + return isset($this->outputAdapter); + } + + public function verbosityMeetsThreshold() + { + if ($this->hasOutputAdapter()) { + return $this->outputAdapter()->verbosityMeetsThreshold($this->verbosityThreshold()); + } + return true; + } + + /** + * Print a message if the selected verbosity level is over this task's + * verbosity threshhold. + */ + public function writeMessage($message) + { + if (!$this->verbosityMeetsThreshold()) { + return; + } + $this->outputAdapter()->writeMessage($message); + } +} diff --git a/lib/composer/vendor/consolidation/robo/src/Config.php b/lib/composer/vendor/consolidation/robo/src/Config.php index 10e29effb..9e9370d81 100644 --- a/lib/composer/vendor/consolidation/robo/src/Config.php +++ b/lib/composer/vendor/consolidation/robo/src/Config.php @@ -1,122 +1,9 @@ config[$key])) { - return $this->config[$key]; - } - return $this->getDefault($key, $defaultOverride); - } - - /** - * Set a config value - * - * @param string $key - * @param mixed $value - * - * @return $this - */ - public function set($key, $value) - { - $this->config[$key] = $value; - return $this; - } - - /** - * Return an associative array containing all of the global configuration - * options and their default values. - * - * @return array - */ - public function getGlobalOptionDefaultValues() - { - $globalOptions = - [ - self::PROGRESS_BAR_AUTO_DISPLAY_INTERVAL => self::DEFAULT_PROGRESS_DELAY, - self::SIMULATE => false, - ]; - - return $globalOptions; - } - - /** - * Return the default value for a given configuration item. - * - * @param string $key - * @param mixed $defaultOverride - * - * @return mixed - */ - public function getDefault($key, $defaultOverride = null) - { - $globalOptions = $this->getGlobalOptionDefaultValues(); - return isset($globalOptions[$key]) ? $globalOptions[$key] : $defaultOverride; - } - - /** - * @return bool - */ - public function isSimulated() - { - return $this->get(self::SIMULATE); - } - - /** - * @param bool $simulated - * - * @return $this - */ - public function setSimulated($simulated = true) - { - return $this->set(self::SIMULATE, $simulated); - } - - /** - * @return bool - */ - public function isDecorated() - { - return $this->get(self::DECORATED); - } - - /** - * @param bool $decorated - * - * @return $this - */ - public function setDecorated($decorated = true) - { - return $this->set(self::DECORATED, $decorated); - } - - /** - * @param int $interval - * - * @return $this - */ - public function setProgressBarAutoDisplayInterval($interval) - { - return $this->set(self::PROGRESS_BAR_AUTO_DISPLAY_INTERVAL, $interval); - } } diff --git a/lib/composer/vendor/consolidation/robo/src/Config/Config.php b/lib/composer/vendor/consolidation/robo/src/Config/Config.php new file mode 100644 index 000000000..3da9e5a93 --- /dev/null +++ b/lib/composer/vendor/consolidation/robo/src/Config/Config.php @@ -0,0 +1,130 @@ +defaults = $this->getGlobalOptionDefaultValues(); + } + + /** + * Return an associative array containing all of the global configuration + * options and their default values. + * + * @return array + */ + public function getGlobalOptionDefaultValues() + { + $globalOptions = + [ + self::PROGRESS_BAR_AUTO_DISPLAY_INTERVAL => self::DEFAULT_PROGRESS_DELAY, + self::SIMULATE => false, + ]; + return $this->trimPrefixFromGlobalOptions($globalOptions); + } + + /** + * Remove the 'options.' prefix from the global options list. + */ + protected function trimPrefixFromGlobalOptions($globalOptions) + { + $result = []; + foreach ($globalOptions as $option => $value) { + $option = str_replace('options.', '', $option); + $result[$option] = $value; + } + return $result; + } + + /** + * @deprecated Use $config->get(Config::SIMULATE) + * + * @return bool + */ + public function isSimulated() + { + return $this->get(self::SIMULATE); + } + + /** + * @deprecated Use $config->set(Config::SIMULATE, true) + * + * @param bool $simulated + * + * @return $this + */ + public function setSimulated($simulated = true) + { + return $this->set(self::SIMULATE, $simulated); + } + + /** + * @deprecated Use $config->get(Config::INTERACTIVE) + * + * @return bool + */ + public function isInteractive() + { + return $this->get(self::INTERACTIVE); + } + + /** + * @deprecated Use $config->set(Config::INTERACTIVE, true) + * + * @param bool $interactive + * + * @return $this + */ + public function setInteractive($interactive = true) + { + return $this->set(self::INTERACTIVE, $interactive); + } + + /** + * @deprecated Use $config->get(Config::DECORATED) + * + * @return bool + */ + public function isDecorated() + { + return $this->get(self::DECORATED); + } + + /** + * @deprecated Use $config->set(Config::DECORATED, true) + * + * @param bool $decorated + * + * @return $this + */ + public function setDecorated($decorated = true) + { + return $this->set(self::DECORATED, $decorated); + } + + /** + * @deprecated Use $config->set(Config::PROGRESS_BAR_AUTO_DISPLAY_INTERVAL, $interval) + * + * @param int $interval + * + * @return $this + */ + public function setProgressBarAutoDisplayInterval($interval) + { + return $this->set(self::PROGRESS_BAR_AUTO_DISPLAY_INTERVAL, $interval); + } +} diff --git a/lib/composer/vendor/consolidation/robo/src/Config/GlobalOptionDefaultValuesInterface.php b/lib/composer/vendor/consolidation/robo/src/Config/GlobalOptionDefaultValuesInterface.php new file mode 100644 index 000000000..f76394554 --- /dev/null +++ b/lib/composer/vendor/consolidation/robo/src/Config/GlobalOptionDefaultValuesInterface.php @@ -0,0 +1,17 @@ +prefix = 'options'; + } + + /** + * Add a reference to the Symfony Console application object. + */ + public function setApplication($application) + { + $this->application = $application; + return $this; + } + + /** + * Stipulate the prefix to use for option injection. + * @param string $prefix + */ + public function setGlobalOptionsPrefix($prefix) + { + $this->prefix = $prefix; + return $this; + } + /** * {@inheritdoc} */ public static function getSubscribedEvents() { - return [ConsoleEvents::COMMAND => 'setGlobalOptions']; + return [ConsoleEvents::COMMAND => 'handleCommandEvent']; + } + + /** + * Run all of our individual operations when a command event is received. + */ + public function handleCommandEvent(ConsoleCommandEvent $event) + { + $this->setGlobalOptions($event); + $this->setConfigurationValues($event); } /** @@ -31,15 +73,74 @@ public function setGlobalOptions(ConsoleCommandEvent $event) { $config = $this->getConfig(); $input = $event->getInput(); - $globalOptions = $config->getGlobalOptionDefaultValues(); + $globalOptions = $config->get($this->prefix, []); + if ($config instanceof \Consolidation\Config\GlobalOptionDefaultValuesInterface) { + $globalOptions += $config->getGlobalOptionDefaultValues(); + } + + $globalOptions += $this->applicationOptionDefaultValues(); + + // Set any config value that has a defined global option (e.g. --simulate) foreach ($globalOptions as $option => $default) { $value = $input->hasOption($option) ? $input->getOption($option) : null; // Unfortunately, the `?:` operator does not differentate between `0` and `null` if (!isset($value)) { $value = $default; } - $config->set($option, $value); + $config->set($this->prefix . '.' . $option, $value); + } + } + + /** + * Examine the commandline --define / -D options, and apply the provided + * values to the active configuration. + * + * @param \Symfony\Component\Console\Event\ConsoleCommandEvent $event + */ + public function setConfigurationValues(ConsoleCommandEvent $event) + { + $config = $this->getConfig(); + $input = $event->getInput(); + + // Also set any `-D config.key=value` options from the commandline. + if ($input->hasOption('define')) { + $configDefinitions = $input->getOption('define'); + foreach ($configDefinitions as $value) { + list($key, $value) = $this->splitConfigKeyValue($value); + $config->set($key, $value); + } + } + } + + /** + * Split up the key=value config setting into its component parts. If + * the input string contains no '=' character, then the value will be 'true'. + * + * @param string $value + * @return array + */ + protected function splitConfigKeyValue($value) + { + $parts = explode('=', $value, 2); + $parts[] = true; + return $parts; + } + + /** + * Get default option values from the Symfony Console application, if + * it is available. + */ + protected function applicationOptionDefaultValues() + { + if (!$this->application) { + return []; + } + + $result = []; + foreach ($this->application->getDefinition()->getOptions() as $key => $option) { + $result[$key] = $option->acceptValue() ? $option->getDefault() : null; } + return $result; } } diff --git a/lib/composer/vendor/consolidation/robo/src/Log/ResultPrinter.php b/lib/composer/vendor/consolidation/robo/src/Log/ResultPrinter.php index ef2218f57..a6f166a09 100644 --- a/lib/composer/vendor/consolidation/robo/src/Log/ResultPrinter.php +++ b/lib/composer/vendor/consolidation/robo/src/Log/ResultPrinter.php @@ -2,13 +2,12 @@ namespace Robo\Log; use Robo\Result; -use Robo\TaskInfo; use Robo\Contract\PrintedInterface; use Robo\Contract\ProgressIndicatorAwareInterface; +use Robo\Contract\VerbosityThresholdInterface; use Robo\Common\ProgressIndicatorAwareTrait; use Psr\Log\LogLevel; -use Psr\Log\LoggerInterface; use Psr\Log\LoggerAwareInterface; use Psr\Log\LoggerAwareTrait; use Consolidation\Log\ConsoleLogLevel; @@ -32,6 +31,10 @@ class ResultPrinter implements LoggerAwareInterface, ProgressIndicatorAwareInter */ public function printResult(Result $result) { + $task = $result->getTask(); + if ($task instanceof VerbosityThresholdInterface && !$task->verbosityMeetsThreshold()) { + return; + } if (!$result->wasSuccessful()) { return $this->printError($result); } else { diff --git a/lib/composer/vendor/consolidation/robo/src/Log/RoboLogStyle.php b/lib/composer/vendor/consolidation/robo/src/Log/RoboLogStyle.php index c66e6fcb8..e4999a879 100644 --- a/lib/composer/vendor/consolidation/robo/src/Log/RoboLogStyle.php +++ b/lib/composer/vendor/consolidation/robo/src/Log/RoboLogStyle.php @@ -3,8 +3,6 @@ use Robo\Common\TimeKeeper; use Consolidation\Log\LogOutputStyler; -use Symfony\Component\Console\Output\OutputInterface; -use Symfony\Component\Console\Style\OutputStyle; /** * Robo Log Styler. diff --git a/lib/composer/vendor/consolidation/robo/src/Log/RoboLogger.php b/lib/composer/vendor/consolidation/robo/src/Log/RoboLogger.php index c3e223fde..75cf23f7c 100644 --- a/lib/composer/vendor/consolidation/robo/src/Log/RoboLogger.php +++ b/lib/composer/vendor/consolidation/robo/src/Log/RoboLogger.php @@ -1,17 +1,10 @@ getMessage(), $result->getData()); + } + if ($result instanceof ResultData) { + return new Result($task, $result->getExitCode(), $result->getMessage(), $result->getData()); + } + if (is_array($result)) { + return static::success($task, '', $result); + } + throw new \Exception(sprintf('Task %s returned a %s instead of a \Robo\Result.', get_class($task), get_class($result))); + } + protected function printResult() { // For historic reasons, the Result constructor is responsible @@ -45,7 +69,7 @@ protected function printResult() $resultPrinter = Robo::resultPrinter(); if ($resultPrinter) { if ($resultPrinter->printResult($this)) { - $this->data['already-printed'] = true; + $this->alreadyPrinted(); } } } diff --git a/lib/composer/vendor/consolidation/robo/src/ResultData.php b/lib/composer/vendor/consolidation/robo/src/ResultData.php index be7b5c63e..90baf6e92 100644 --- a/lib/composer/vendor/consolidation/robo/src/ResultData.php +++ b/lib/composer/vendor/consolidation/robo/src/ResultData.php @@ -1,22 +1,17 @@ exitCode = $exitCode; - $this->message = $message; - - parent::__construct($data); + parent::__construct($message, $data); } /** @@ -65,14 +58,6 @@ public static function cancelled($message = '', $data = []) return new ResultData(self::EXITCODE_USER_CANCEL, $message, $data); } - /** - * @return array - */ - public function getData() - { - return $this->getArrayCopy(); - } - /** * @return int */ @@ -86,67 +71,40 @@ public function getExitCode() */ public function getOutputData() { - if (!empty($this->message) && !isset($this['already-printed'])) { + if (!empty($this->message) && !isset($this['already-printed']) && isset($this['provide-outputdata'])) { return $this->message; } } /** - * @return string + * Indicate that the message in this data has already been displayed. */ - public function getMessage() + public function alreadyPrinted() { - return $this->message; + $this['already-printed'] = true; } /** - * @return bool + * Opt-in to providing the result message as the output data */ - public function wasSuccessful() + public function provideOutputdata() { - return $this->exitCode === self::EXITCODE_OK; + $this['provide-outputdata'] = true; } /** * @return bool */ - public function wasCancelled() - { - return $this->exitCode == self::EXITCODE_USER_CANCEL; - } - - /** - * Merge another result into this result. Data already - * existing in this result takes precedence over the - * data in the Result being merged. - * - * @param \Robo\ResultData $result - * - * @return $this - */ - public function merge(ResultData $result) + public function wasSuccessful() { - $mergedData = $this->getArrayCopy() + $result->getArrayCopy(); - $this->exchangeArray($mergedData); - return $this; + return $this->exitCode === self::EXITCODE_OK; } /** * @return bool */ - public function hasExecutionTime() - { - return isset($this['time']); - } - - /** - * @return null|float - */ - public function getExecutionTime() + public function wasCancelled() { - if (!$this->hasExecutionTime()) { - return null; - } - return $this['time']; + return $this->exitCode == self::EXITCODE_USER_CANCEL; } } diff --git a/lib/composer/vendor/consolidation/robo/src/Robo.php b/lib/composer/vendor/consolidation/robo/src/Robo.php index 7c350db7e..0f4277076 100644 --- a/lib/composer/vendor/consolidation/robo/src/Robo.php +++ b/lib/composer/vendor/consolidation/robo/src/Robo.php @@ -3,8 +3,13 @@ use League\Container\Container; use League\Container\ContainerInterface; +use Robo\Common\ProcessExecutor; +use Consolidation\Config\ConfigInterface; +use Consolidation\Config\Loader\ConfigProcessor; +use Consolidation\Config\Loader\YamlConfigLoader; use Symfony\Component\Console\Input\StringInput; use Symfony\Component\Console\Application as SymfonyApplication; +use Symfony\Component\Process\Process; /** * Manages the container reference and other static data. Favor @@ -14,7 +19,7 @@ class Robo { const APPLICATION_NAME = 'Robo'; - const VERSION = '1.0.4'; + const VERSION = '1.2.1'; /** * The currently active container object, or NULL if not initialized yet. @@ -34,9 +39,10 @@ class Robo * * @return int */ - public static function run($argv, $commandClasses, $appName = null, $appVersion = null, $output = null) + public static function run($argv, $commandClasses, $appName = null, $appVersion = null, $output = null, $repository = null) { $runner = new \Robo\Runner($commandClasses); + $runner->setSelfUpdateRepository($repository); $statusCode = $runner->execute($argv, $appName, $appVersion, $output); return $statusCode; } @@ -85,6 +91,33 @@ public static function hasContainer() return static::$container !== null; } + /** + * Create a config object and load it from the provided paths. + */ + public static function createConfiguration($paths) + { + $config = new \Robo\Config\Config(); + static::loadConfiguration($paths, $config); + return $config; + } + + /** + * Use a simple config loader to load configuration values from specified paths + */ + public static function loadConfiguration($paths, $config = null) + { + if ($config == null) { + $config = static::config(); + } + $loader = new YamlConfigLoader(); + $processor = new ConfigProcessor(); + $processor->add($config->export()); + foreach ($paths as $path) { + $processor->extend($loader->load($path)); + } + $config->import($processor->export()); + } + /** * Create a container and initiailze it. If you wish to *change* * anything defined in the container, then you should call @@ -93,7 +126,7 @@ public static function hasContainer() * @param null|\Symfony\Component\Console\Input\InputInterface $input * @param null|\Symfony\Component\Console\Output\OutputInterface $output * @param null|\Robo\Application $app - * @param null|\Robo\Config $config + * @param null|ConfigInterface $config * * @return \League\Container\Container|\League\Container\ContainerInterface */ @@ -109,7 +142,7 @@ public static function createDefaultContainer($input = null, $output = null, $ap } if (!$config) { - $config = new Config(); + $config = new \Robo\Config\Config(); } // Set up our dependency injection container. @@ -139,11 +172,11 @@ public static function createDefaultContainer($input = null, $output = null, $ap * * @param \League\Container\ContainerInterface $container * @param \Symfony\Component\Console\Application $app - * @param \Robo\Config $config + * @param ConfigInterface $config * @param null|\Symfony\Component\Console\Input\InputInterface $input * @param null|\Symfony\Component\Console\Output\OutputInterface $output */ - public static function configureContainer(ContainerInterface $container, SymfonyApplication $app, Config $config, $input = null, $output = null) + public static function configureContainer(ContainerInterface $container, SymfonyApplication $app, ConfigInterface $config, $input = null, $output = null) { // Self-referential container refernce for the inflector $container->add('container', $container); @@ -156,12 +189,14 @@ public static function configureContainer(ContainerInterface $container, Symfony if (!$output) { $output = new \Symfony\Component\Console\Output\ConsoleOutput(); } - $config->setDecorated($output->isDecorated()); + $config->set(Config::DECORATED, $output->isDecorated()); + $config->set(Config::INTERACTIVE, $input->isInteractive()); $container->share('application', $app); $container->share('config', $config); $container->share('input', $input); $container->share('output', $output); + $container->share('outputAdapter', \Robo\Common\OutputAdapter::class); // Register logging and related services. $container->share('logStyler', \Robo\Log\RoboLogStyle::class); @@ -175,22 +210,30 @@ public static function configureContainer(ContainerInterface $container, Symfony ->withArgument('output'); $container->share('resultPrinter', \Robo\Log\ResultPrinter::class); $container->add('simulator', \Robo\Task\Simulator::class); - $container->share('globalOptionsEventListener', \Robo\GlobalOptionsEventListener::class); + $container->share('globalOptionsEventListener', \Robo\GlobalOptionsEventListener::class) + ->withMethodCall('setApplication', ['application']); + $container->share('injectConfigEventListener', \Consolidation\Config\Inject\ConfigForCommand::class) + ->withArgument('config') + ->withMethodCall('setApplication', ['application']); $container->share('collectionProcessHook', \Robo\Collection\CollectionProcessHook::class); - $container->share('hookManager', \Consolidation\AnnotatedCommand\Hooks\HookManager::class) - ->withMethodCall('addResultProcessor', ['collectionProcessHook', '*']); $container->share('alterOptionsCommandEvent', \Consolidation\AnnotatedCommand\Options\AlterOptionsCommandEvent::class) ->withArgument('application'); + $container->share('hookManager', \Consolidation\AnnotatedCommand\Hooks\HookManager::class) + ->withMethodCall('addCommandEvent', ['alterOptionsCommandEvent']) + ->withMethodCall('addCommandEvent', ['injectConfigEventListener']) + ->withMethodCall('addCommandEvent', ['globalOptionsEventListener']) + ->withMethodCall('addResultProcessor', ['collectionProcessHook', '*']); $container->share('eventDispatcher', \Symfony\Component\EventDispatcher\EventDispatcher::class) - ->withMethodCall('addSubscriber', ['globalOptionsEventListener']) - ->withMethodCall('addSubscriber', ['alterOptionsCommandEvent']) ->withMethodCall('addSubscriber', ['hookManager']); $container->share('formatterManager', \Consolidation\OutputFormatters\FormatterManager::class) ->withMethodCall('addDefaultFormatters', []) ->withMethodCall('addDefaultSimplifiers', []); + $container->share('prepareTerminalWidthOption', \Consolidation\AnnotatedCommand\Options\PrepareTerminalWidthOption::class) + ->withMethodCall('setApplication', ['application']); $container->share('commandProcessor', \Consolidation\AnnotatedCommand\CommandProcessor::class) ->withArgument('hookManager') ->withMethodCall('setFormatterManager', ['formatterManager']) + ->withMethodCall('addPrepareFormatter', ['prepareTerminalWidthOption']) ->withMethodCall( 'setDisplayErrorFunction', [ @@ -202,8 +245,13 @@ function ($output, $message) use ($container) { ); $container->share('commandFactory', \Consolidation\AnnotatedCommand\AnnotatedCommandFactory::class) ->withMethodCall('setCommandProcessor', ['commandProcessor']); + + // Deprecated: favor using collection builders to direct use of collections. $container->add('collection', \Robo\Collection\Collection::class); + // Deprecated: use CollectionBuilder::create() instead -- or, better + // yet, BuilderAwareInterface::collectionBuilder() if available. $container->add('collectionBuilder', \Robo\Collection\CollectionBuilder::class); + static::addInflectors($container); // Make sure the application is appropriately initialized. @@ -246,6 +294,10 @@ public static function addInflectors($container) ->invokeMethod('setOutput', ['output']); $container->inflector(\Robo\Contract\ProgressIndicatorAwareInterface::class) ->invokeMethod('setProgressIndicator', ['progressIndicator']); + $container->inflector(\Consolidation\AnnotatedCommand\Events\CustomEventAwareInterface::class) + ->invokeMethod('setHookManager', ['hookManager']); + $container->inflector(\Robo\Contract\VerbosityThresholdInterface::class) + ->invokeMethod('setOutputAdapter', ['outputAdapter']); } /** @@ -292,7 +344,7 @@ public static function resultPrinter() } /** - * @return \Robo\Config + * @return ConfigInterface */ public static function config() { @@ -334,4 +386,9 @@ public static function input() { return static::service('input'); } + + public static function process(Process $process) + { + return ProcessExecutor::create(static::getContainer(), $process); + } } diff --git a/lib/composer/vendor/consolidation/robo/src/Runner.php b/lib/composer/vendor/consolidation/robo/src/Runner.php index 06218ec1b..800ad281a 100644 --- a/lib/composer/vendor/consolidation/robo/src/Runner.php +++ b/lib/composer/vendor/consolidation/robo/src/Runner.php @@ -1,15 +1,12 @@ dir = getcwd(); } + protected function errorCondtion($msg, $errorType) + { + $this->errorConditions[$msg] = $errorType; + } + /** * @param \Symfony\Component\Console\Output\OutputInterface $output * @@ -70,7 +82,7 @@ protected function loadRoboFile($output) return true; } if (!file_exists($this->dir)) { - $output->writeln("Path `{$this->dir}` is invalid; please provide a valid absolute path to the Robofile to load."); + $this->errorCondtion("Path `{$this->dir}` is invalid; please provide a valid absolute path to the Robofile to load.", 'red'); return false; } @@ -79,13 +91,13 @@ protected function loadRoboFile($output) $roboFilePath = $realDir . DIRECTORY_SEPARATOR . $this->roboFile; if (!file_exists($roboFilePath)) { $requestedRoboFilePath = $this->dir . DIRECTORY_SEPARATOR . $this->roboFile; - $output->writeln("Requested RoboFile `$requestedRoboFilePath` is invalid, please provide valid absolute path to load Robofile"); + $this->errorCondtion("Requested RoboFile `$requestedRoboFilePath` is invalid, please provide valid absolute path to load Robofile.", 'red'); return false; } require_once $roboFilePath; if (!class_exists($this->roboClass)) { - $output->writeln("Class ".$this->roboClass." was not loaded"); + $this->errorCondtion("Class {$this->roboClass} was not loaded.", 'red'); return false; } return true; @@ -136,7 +148,10 @@ public function run($input = null, $output = null, $app = null, $commandFiles = // If we were not provided a container, then create one if (!$this->getContainer()) { - $container = Robo::createDefaultContainer($input, $output, $app); + $userConfig = 'robo.yml'; + $roboAppConfig = dirname(__DIR__) . '/robo.yml'; + $config = Robo::createConfiguration([$userConfig, $roboAppConfig]); + $container = Robo::createDefaultContainer($input, $output, $app, $config); $this->setContainer($container); // Automatically register a shutdown function and // an error handler when we provide the container. @@ -146,10 +161,13 @@ public function run($input = null, $output = null, $app = null, $commandFiles = if (!$app) { $app = Robo::application(); } - if (!isset($commandFiles)) { - $this->yell("Robo is not initialized here. Please run `robo init` to create a new RoboFile", 40, 'yellow'); - $app->addInitRoboFileCommand($this->roboFile, $this->roboClass); - $commandFiles = []; + if ($app instanceof \Robo\Application) { + $app->addSelfUpdateCommand($this->getSelfUpdateRepository()); + if (!isset($commandFiles)) { + $this->errorCondtion("Robo is not initialized here. Please run `robo init` to create a new RoboFile.", 'yellow'); + $app->addInitRoboFileCommand($this->roboFile, $this->roboClass); + $commandFiles = []; + } } $this->registerCommandClasses($app, $commandFiles); @@ -158,6 +176,15 @@ public function run($input = null, $output = null, $app = null, $commandFiles = } catch (TaskExitException $e) { $statusCode = $e->getCode() ?: 1; } + + // If there were any error conditions in bootstrapping Robo, + // print them only if the requested command did not complete + // successfully. + if ($statusCode) { + foreach ($this->errorConditions as $msg => $color) { + $this->yell($msg, 40, $color); + } + } return $statusCode; } @@ -222,6 +249,9 @@ protected function instantiateCommandClass($commandClass) // If the command class is already an instantiated object, then // just use it exactly as it was provided to us. if (is_string($commandClass)) { + if (!class_exists($commandClass)) { + return; + } $reflectionClass = new \ReflectionClass($commandClass); if ($reflectionClass->isAbstract()) { return; @@ -235,7 +265,7 @@ protected function instantiateCommandClass($commandClass) // ensure that it has a builder. Every command class needs // its own collection builder, as they have references to each other. if ($commandClass instanceof BuilderAwareInterface) { - $builder = $container->get('collectionBuilder', [$commandClass]); + $builder = CollectionBuilder::create($container, $commandClass); $commandClass->setBuilder($builder); } if ($commandClass instanceof ContainerAwareInterface) { @@ -416,4 +446,20 @@ public function handleError() } return false; } + + /** + * @return string + */ + public function getSelfUpdateRepository() + { + return $this->selfUpdateRepository; + } + + /** + * @param string $selfUpdateRepository + */ + public function setSelfUpdateRepository($selfUpdateRepository) + { + $this->selfUpdateRepository = $selfUpdateRepository; + } } diff --git a/lib/composer/vendor/consolidation/robo/src/SelfUpdateCommand.php b/lib/composer/vendor/consolidation/robo/src/SelfUpdateCommand.php new file mode 100644 index 000000000..d07ee71f4 --- /dev/null +++ b/lib/composer/vendor/consolidation/robo/src/SelfUpdateCommand.php @@ -0,0 +1,152 @@ + + */ +class SelfUpdateCommand extends Command +{ + const SELF_UPDATE_COMMAND_NAME = 'self:update'; + + protected $gitHubRepository; + + protected $currentVersion; + + protected $applicationName; + + public function __construct($applicationName = null, $currentVersion = null, $gitHubRepository = null) + { + parent::__construct(self::SELF_UPDATE_COMMAND_NAME); + + $this->applicationName = $applicationName; + $this->currentVersion = $currentVersion; + $this->gitHubRepository = $gitHubRepository; + } + + /** + * {@inheritdoc} + */ + protected function configure() + { + $this + ->setAliases(array('update')) + ->setDescription('Updates the robo.phar to the latest version.') + ->setHelp( + <<self-update command checks github for newer +versions of robo and if found, installs the latest. +EOT + ); + } + + protected function getLatestReleaseFromGithub() + { + $opts = [ + 'http' => [ + 'method' => 'GET', + 'header' => [ + 'User-Agent: ' . $this->applicationName . ' (' . $this->gitHubRepository . ')' . ' Self-Update (PHP)' + ] + ] + ]; + + $context = stream_context_create($opts); + + $releases = file_get_contents('https://api.github.com/repos/' . $this->gitHubRepository . '/releases', false, $context); + $releases = json_decode($releases); + + if (! isset($releases[0])) { + throw new \Exception('API error - no release found at GitHub repository ' . $this->gitHubRepository); + } + + $version = $releases[0]->tag_name; + $url = $releases[0]->assets[0]->browser_download_url; + + return [ $version, $url ]; + } + + /** + * {@inheritdoc} + */ + protected function execute(InputInterface $input, OutputInterface $output) + { + if (empty(\Phar::running())) { + throw new \Exception(self::SELF_UPDATE_COMMAND_NAME . ' only works when running the phar version of ' . $this->applicationName . '.'); + } + + $localFilename = realpath($_SERVER['argv'][0]) ?: $_SERVER['argv'][0]; + $programName = basename($localFilename); + $tempFilename = dirname($localFilename) . '/' . basename($localFilename, '.phar') . '-temp.phar'; + + // check for permissions in local filesystem before start connection process + if (! is_writable($tempDirectory = dirname($tempFilename))) { + throw new \Exception( + $programName . ' update failed: the "' . $tempDirectory . + '" directory used to download the temp file could not be written' + ); + } + + if (! is_writable($localFilename)) { + throw new \Exception( + $programName . ' update failed: the "' . $localFilename . '" file could not be written (execute with sudo)' + ); + } + + list( $latest, $downloadUrl ) = $this->getLatestReleaseFromGithub(); + + + if ($this->currentVersion == $latest) { + $output->writeln('No update available'); + return; + } + + $fs = new sfFilesystem(); + + $output->writeln('Downloading ' . $this->applicationName . ' (' . $this->gitHubRepository . ') ' . $latest); + + $fs->copy($downloadUrl, $tempFilename); + + $output->writeln('Download finished'); + + try { + \error_reporting(E_ALL); // supress notices + + @chmod($tempFilename, 0777 & ~umask()); + // test the phar validity + $phar = new \Phar($tempFilename); + // free the variable to unlock the file + unset($phar); + @rename($tempFilename, $localFilename); + $output->writeln('Successfully updated ' . $programName . ''); + $this->_exit(); + } catch (\Exception $e) { + @unlink($tempFilename); + if (! $e instanceof \UnexpectedValueException && ! $e instanceof \PharException) { + throw $e; + } + $output->writeln('The download is corrupted (' . $e->getMessage() . ').'); + $output->writeln('Please re-run the self-update command to try again.'); + } + } + + /** + * Stop execution + * + * This is a workaround to prevent warning of dispatcher after replacing + * the phar file. + * + * @return void + */ + protected function _exit() + { + exit; + } +} diff --git a/lib/composer/vendor/consolidation/robo/src/State/Consumer.php b/lib/composer/vendor/consolidation/robo/src/State/Consumer.php new file mode 100644 index 000000000..ab9c0e277 --- /dev/null +++ b/lib/composer/vendor/consolidation/robo/src/State/Consumer.php @@ -0,0 +1,12 @@ +message = $message; + parent::__construct($data); + } + + /** + * @return array + */ + public function getData() + { + return $this->getArrayCopy(); + } + + /** + * @return string + */ + public function getMessage() + { + return $this->message; + } + + /** + * @param string message + */ + public function setMessage($message) + { + $this->message = $message; + } + + /** + * Merge another result into this result. Data already + * existing in this result takes precedence over the + * data in the Result being merged. + * + * @param \Robo\ResultData $result + * + * @return $this + */ + public function merge(Data $result) + { + $mergedData = $this->getArrayCopy() + $result->getArrayCopy(); + $this->exchangeArray($mergedData); + return $this; + } + + /** + * Update the current data with the data provided in the parameter. + * Provided data takes precedence. + * + * @param \ArrayObject $update + * + * @return $this + */ + public function update(\ArrayObject $update) + { + $iterator = $update->getIterator(); + + while ($iterator->valid()) { + $this[$iterator->key()] = $iterator->current(); + $iterator->next(); + } + + return $this; + } + + /** + * Merge another result into this result. Data already + * existing in this result takes precedence over the + * data in the Result being merged. + * + * $data['message'] is handled specially, and is appended + * to $this->message if set. + * + * @param array $data + * + * @return array + */ + public function mergeData(array $data) + { + $mergedData = $this->getArrayCopy() + $data; + $this->exchangeArray($mergedData); + return $mergedData; + } + + /** + * @return bool + */ + public function hasExecutionTime() + { + return isset($this['time']); + } + + /** + * @return null|float + */ + public function getExecutionTime() + { + if (!$this->hasExecutionTime()) { + return null; + } + return $this['time']; + } + + /** + * Accumulate execution time + */ + public function accumulateExecutionTime($duration) + { + // Convert data arrays to scalar + if (is_array($duration)) { + $duration = isset($duration['time']) ? $duration['time'] : 0; + } + $this['time'] = $this->getExecutionTime() + $duration; + return $this->getExecutionTime(); + } + + /** + * Accumulate the message. + */ + public function accumulateMessage($message) + { + if (!empty($this->message)) { + $this->message .= "\n"; + } + $this->message .= $message; + return $this->getMessage(); + } +} diff --git a/lib/composer/vendor/consolidation/robo/src/State/StateAwareInterface.php b/lib/composer/vendor/consolidation/robo/src/State/StateAwareInterface.php new file mode 100644 index 000000000..f86bccb87 --- /dev/null +++ b/lib/composer/vendor/consolidation/robo/src/State/StateAwareInterface.php @@ -0,0 +1,30 @@ +state; + } + + /** + * {@inheritdoc} + */ + public function setState(Data $state) + { + $this->state = $state; + } + + /** + * {@inheritdoc} + */ + public function setStateValue($key, $value) + { + $this->state[$key] = $value; + } + + /** + * {@inheritdoc} + */ + public function updateState(Data $update) + { + $this->state->update($update); + } + + /** + * {@inheritdoc} + */ + public function resetState() + { + $this->state = new Data(); + } +} diff --git a/lib/composer/vendor/consolidation/robo/src/Task/ApiGen/ApiGen.php b/lib/composer/vendor/consolidation/robo/src/Task/ApiGen/ApiGen.php index 0d1b35a0d..11ff764c2 100644 --- a/lib/composer/vendor/consolidation/robo/src/Task/ApiGen/ApiGen.php +++ b/lib/composer/vendor/consolidation/robo/src/Task/ApiGen/ApiGen.php @@ -12,7 +12,8 @@ * ``` php * taskApiGen('./apigen.neon') + * $this->taskApiGen('./vendor/apigen/apigen.phar') + * ->config('./apigen.neon') * ->templateConfig('vendor/apigen/apigen/templates/bootstrap/config.neon') * ->wipeout(true) * ->run(); @@ -30,6 +31,7 @@ class ApiGen extends BaseTask implements CommandInterface * @var string */ protected $command; + protected $operation = 'generate'; /** * @param null|string $pathToApiGen @@ -39,6 +41,15 @@ class ApiGen extends BaseTask implements CommandInterface public function __construct($pathToApiGen = null) { $this->command = $pathToApiGen; + $command_parts = []; + preg_match('/((?:.+)?apigen(?:\.phar)?) ?( \w+)? ?(.+)?/', $this->command, $command_parts); + if (count($command_parts) === 3) { + list(, $this->command, $this->operation) = $command_parts; + } + if (count($command_parts) === 4) { + list(, $this->command, $this->operation, $arg) = $command_parts; + $this->arg($arg); + } if (!$this->command) { $this->command = $this->findExecutablePhar('apigen'); } @@ -47,6 +58,31 @@ public function __construct($pathToApiGen = null) } } + /** + * Pass methods parameters as arguments to executable. Argument values + * are automatically escaped. + * + * @param string|string[] $args + * + * @return $this + */ + public function args($args) + { + if (!is_array($args)) { + $args = func_get_args(); + } + $args = array_map(function ($arg) { + if (preg_match('/^\w+$/', trim($arg)) === 1) { + $this->operation = $arg; + return null; + } + return $arg; + }, $args); + $args = array_filter($args); + $this->arguments .= ' ' . implode(' ', array_map('static::escape', $args)); + return $this; + } + /** * @param array|Traversable|string $arg a single object or something traversable * @@ -468,7 +504,7 @@ public function debug($debug) */ public function getCommand() { - return $this->command . $this->arguments; + return "$this->command $this->operation$this->arguments"; } /** diff --git a/lib/composer/vendor/consolidation/robo/src/Task/Archive/Extract.php b/lib/composer/vendor/consolidation/robo/src/Task/Archive/Extract.php index add5397fa..a00a0baf8 100644 --- a/lib/composer/vendor/consolidation/robo/src/Task/Archive/Extract.php +++ b/lib/composer/vendor/consolidation/robo/src/Task/Archive/Extract.php @@ -31,8 +31,6 @@ * ->run(); * ?> * ``` - * - * @method to(string) location to store extracted files */ class Extract extends BaseTask implements BuilderAwareInterface { diff --git a/lib/composer/vendor/consolidation/robo/src/Task/Base/Exec.php b/lib/composer/vendor/consolidation/robo/src/Task/Base/Exec.php index 5baccedde..c3e47917b 100644 --- a/lib/composer/vendor/consolidation/robo/src/Task/Base/Exec.php +++ b/lib/composer/vendor/consolidation/robo/src/Task/Base/Exec.php @@ -1,6 +1,7 @@ command . $this->arguments); + $this->stop(); } /** @@ -87,116 +63,26 @@ public function getCommand() * * @return $this */ - public function background() + public function background($arg = true) { self::$instances[] = $this; - $this->background = true; - return $this; - } - - /** - * Stop command if it runs longer then $timeout in seconds - * - * @param int $timeout - * - * @return $this - */ - public function timeout($timeout) - { - $this->timeout = $timeout; - return $this; - } - - /** - * Stops command if it does not output something for a while - * - * @param int $timeout - * - * @return $this - */ - public function idleTimeout($timeout) - { - $this->idleTimeout = $timeout; + $this->background = $arg; return $this; } /** - * Sets the environment variables for the command - * - * @param array $env - * - * @return $this - */ - public function env(array $env) - { - $this->env = $env; - return $this; - } - - public function __destruct() - { - $this->stop(); - } - - protected function stop() - { - if ($this->background && $this->process->isRunning()) { - $this->process->stop(); - $this->printTaskInfo("Stopped {command}", ['command' => $this->getCommand()]); - } - } - - /** - * @param array $context + * {@inheritdoc} */ - protected function printAction($context = []) + protected function getCommandDescription() { - $command = $this->getCommand(); - $dir = $this->workingDirectory ? " in {dir}" : ""; - $this->printTaskInfo("Running {command}$dir", ['command' => $command, 'dir' => $this->workingDirectory] + $context); + return $this->getCommand(); } - /** * {@inheritdoc} */ - public function run() + public function getCommand() { - $this->printAction(); - $this->process = new Process($this->getCommand()); - $this->process->setTimeout($this->timeout); - $this->process->setIdleTimeout($this->idleTimeout); - $this->process->setWorkingDirectory($this->workingDirectory); - - if (isset($this->env)) { - $this->process->setEnv($this->env); - } - - if (!$this->background and !$this->isPrinted) { - $this->startTimer(); - $this->process->run(); - $this->stopTimer(); - return new Result($this, $this->process->getExitCode(), $this->process->getOutput(), ['time' => $this->getExecutionTime()]); - } - - if (!$this->background and $this->isPrinted) { - $this->startTimer(); - $this->process->run( - function ($type, $buffer) { - $progressWasVisible = $this->hideTaskProgress(); - print($buffer); - $this->showTaskProgress($progressWasVisible); - } - ); - $this->stopTimer(); - return new Result($this, $this->process->getExitCode(), $this->process->getOutput(), ['time' => $this->getExecutionTime()]); - } - - try { - $this->process->start(); - } catch (\Exception $e) { - return Result::fromException($this, $e); - } - return Result::success($this); + return trim($this->command . $this->arguments); } /** @@ -215,6 +101,21 @@ public static function stopRunningJobs() } } } + + /** + * {@inheritdoc} + */ + public function run() + { + // TODO: Symfony 4 requires that we supply the working directory. + $result_data = $this->execute(new Process($this->getCommand(), getcwd())); + return new Result( + $this, + $result_data->getExitCode(), + $result_data->getMessage(), + $result_data->getData() + ); + } } if (function_exists('pcntl_signal')) { diff --git a/lib/composer/vendor/consolidation/robo/src/Task/Base/ExecStack.php b/lib/composer/vendor/consolidation/robo/src/Task/Base/ExecStack.php index b5855deee..51b39ef1d 100644 --- a/lib/composer/vendor/consolidation/robo/src/Task/Base/ExecStack.php +++ b/lib/composer/vendor/consolidation/robo/src/Task/Base/ExecStack.php @@ -2,7 +2,6 @@ namespace Robo\Task\Base; use Robo\Task\CommandStack; -use Robo\Task\Base; /** * Execute commands one by one in stack. @@ -18,8 +17,6 @@ * * ?> * ``` - * - * @method $this stopOnFail() */ class ExecStack extends CommandStack { diff --git a/lib/composer/vendor/consolidation/robo/src/Task/Base/ParallelExec.php b/lib/composer/vendor/consolidation/robo/src/Task/Base/ParallelExec.php index 2cd1ebc66..c98b78419 100644 --- a/lib/composer/vendor/consolidation/robo/src/Task/Base/ParallelExec.php +++ b/lib/composer/vendor/consolidation/robo/src/Task/Base/ParallelExec.php @@ -1,8 +1,6 @@ run(); * ?> * ``` - * - * - * @method \Robo\Task\Base\ParallelExec timeout(int $timeout) stops process if it runs longer then `$timeout` (seconds) - * @method \Robo\Task\Base\ParallelExec idleTimeout(int $timeout) stops process if it does not output for time longer then `$timeout` (seconds) */ class ParallelExec extends BaseTask implements CommandInterface, PrintedInterface { @@ -46,6 +40,11 @@ class ParallelExec extends BaseTask implements CommandInterface, PrintedInterfac */ protected $idleTimeout = null; + /** + * @var null|int + */ + protected $waitInterval = 0; + /** * @var bool */ @@ -77,11 +76,14 @@ public function printed($isPrinted = true) */ public function process($command) { - $this->processes[] = new Process($this->receiveCommand($command)); + // TODO: Symfony 4 requires that we supply the working directory. + $this->processes[] = new Process($this->receiveCommand($command), getcwd()); return $this; } /** + * Stops process if it runs longer then `$timeout` (seconds). + * * @param int $timeout * * @return $this @@ -93,6 +95,8 @@ public function timeout($timeout) } /** + * Stops process if it does not output for time longer then `$timeout` (seconds). + * * @param int $idleTimeout * * @return $this @@ -103,6 +107,20 @@ public function idleTimeout($idleTimeout) return $this; } + /** + * Parallel processing will wait `$waitInterval` seconds after launching each process and before + * the next one. + * + * @param int $waitInterval + * + * @return $this + */ + public function waitInterval($waitInterval) + { + $this->waitInterval = $waitInterval; + return $this; + } + /** * {@inheritdoc} */ @@ -124,16 +142,20 @@ public function progressIndicatorSteps() */ public function run() { - foreach ($this->processes as $process) { - $process->setIdleTimeout($this->idleTimeout); - $process->setTimeout($this->timeout); - $process->start(); - $this->printTaskInfo($process->getCommandLine()); - } - $this->startProgressIndicator(); - $running = $this->processes; + $running = []; + $queue = $this->processes; + $nextTime = time(); while (true) { + if (($nextTime <= time()) && !empty($queue)) { + $process = array_shift($queue); + $process->setIdleTimeout($this->idleTimeout); + $process->setTimeout($this->timeout); + $process->start(); + $this->printTaskInfo($process->getCommandLine()); + $running[] = $process; + $nextTime = time() + $this->waitInterval; + } foreach ($running as $k => $process) { try { $process->checkTimeout(); @@ -152,7 +174,7 @@ public function run() unset($running[$k]); } } - if (empty($running)) { + if (empty($running) && empty($queue)) { break; } usleep(1000); diff --git a/lib/composer/vendor/consolidation/robo/src/Task/Base/SymfonyCommand.php b/lib/composer/vendor/consolidation/robo/src/Task/Base/SymfonyCommand.php index 51c81d6d8..708ea8451 100644 --- a/lib/composer/vendor/consolidation/robo/src/Task/Base/SymfonyCommand.php +++ b/lib/composer/vendor/consolidation/robo/src/Task/Base/SymfonyCommand.php @@ -6,7 +6,6 @@ use Robo\Task\BaseTask; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\ArrayInput; -use Symfony\Component\Console\Input\InputInterface; /** * Executes Symfony Command diff --git a/lib/composer/vendor/consolidation/robo/src/Task/Base/loadTasks.php b/lib/composer/vendor/consolidation/robo/src/Task/Base/loadTasks.php index 530fbcd5e..ab5301bbe 100644 --- a/lib/composer/vendor/consolidation/robo/src/Task/Base/loadTasks.php +++ b/lib/composer/vendor/consolidation/robo/src/Task/Base/loadTasks.php @@ -13,6 +13,9 @@ protected function taskExec($command) return $this->task(Exec::class, $command); } + /** + * @return ExecStack + */ protected function taskExecStack() { return $this->task(ExecStack::class); diff --git a/lib/composer/vendor/consolidation/robo/src/Task/BaseTask.php b/lib/composer/vendor/consolidation/robo/src/Task/BaseTask.php index 36c9fa8c6..66155c093 100644 --- a/lib/composer/vendor/consolidation/robo/src/Task/BaseTask.php +++ b/lib/composer/vendor/consolidation/robo/src/Task/BaseTask.php @@ -7,16 +7,38 @@ use Robo\Common\TaskIO; use Robo\Contract\TaskInterface; use Robo\Contract\ProgressIndicatorAwareInterface; +use Robo\Contract\VerbosityThresholdInterface; use Robo\Common\ProgressIndicatorAwareTrait; use Robo\Contract\ConfigAwareInterface; use Psr\Log\LoggerAwareInterface; +use Robo\Contract\OutputAwareInterface; -abstract class BaseTask implements TaskInterface, LoggerAwareInterface, ConfigAwareInterface, ProgressIndicatorAwareInterface, InflectionInterface +abstract class BaseTask implements TaskInterface, LoggerAwareInterface, VerbosityThresholdInterface, ConfigAwareInterface, ProgressIndicatorAwareInterface, InflectionInterface { - use TaskIO; // uses LoggerAwareTrait and ConfigAwareTrait + use TaskIO; // uses LoggerAwareTrait, VerbosityThresholdTrait and ConfigAwareTrait use ProgressIndicatorAwareTrait; use InflectionTrait; + /** + * ConfigAwareInterface uses this to decide where configuration + * items come from. Default is this prefix + class name + key, + * e.g. `task.Remote.Ssh.remoteDir`. + */ + protected static function configPrefix() + { + return 'task.'; + } + + /** + * ConfigAwareInterface uses this to decide where configuration + * items come from. Default is this prefix + class name + key, + * e.g. `task.Ssh.remoteDir`. + */ + protected static function configPostfix() + { + return '.settings'; + } + /** * {@inheritdoc} */ @@ -31,5 +53,8 @@ public function injectDependencies(InflectionInterface $child) if ($child instanceof ConfigAwareInterface && $this->getConfig()) { $child->setConfig($this->getConfig()); } + if ($child instanceof VerbosityThresholdInterface && $this->outputAdapter()) { + $child->setOutputAdapter($this->outputAdapter()); + } } } diff --git a/lib/composer/vendor/consolidation/robo/src/Task/Bower/Install.php b/lib/composer/vendor/consolidation/robo/src/Task/Bower/Install.php index d7fb57ddc..c3c0ce755 100644 --- a/lib/composer/vendor/consolidation/robo/src/Task/Bower/Install.php +++ b/lib/composer/vendor/consolidation/robo/src/Task/Bower/Install.php @@ -1,7 +1,6 @@ executable . ' ' . $this->stripExecutableFromCommand($command); - array_push($this->exec, trim($command)); + $command = $this->executable . ' ' . $this->stripExecutableFromCommand($command); + $this->exec[] = trim($command); return $this; } @@ -105,19 +104,31 @@ public function run() if (empty($this->exec)) { throw new TaskException($this, 'You must add at least one command'); } - if (!$this->stopOnFail) { + // If 'stopOnFail' is not set, or if there is only one command to run, + // then execute the single command to run. + if (!$this->stopOnFail || (count($this->exec) == 1)) { $this->printTaskInfo('{command}', ['command' => $this->getCommand()]); return $this->executeCommand($this->getCommand()); } + // When executing multiple commands in 'stopOnFail' mode, run them + // one at a time so that the result will have the exact command + // that failed available to the caller. This is at the expense of + // losing the output from all successful commands. + $data = []; + $message = ''; + $result = null; foreach ($this->exec as $command) { $this->printTaskInfo("Executing {command}", ['command' => $command]); $result = $this->executeCommand($command); + $result->accumulateExecutionTime($data); + $message = $result->accumulateMessage($message); + $data = $result->mergeData($data); if (!$result->wasSuccessful()) { return $result; } } - return Result::success($this); + return $result; } } diff --git a/lib/composer/vendor/consolidation/robo/src/Task/Composer/Base.php b/lib/composer/vendor/consolidation/robo/src/Task/Composer/Base.php index 4f6597b70..de3fe2174 100644 --- a/lib/composer/vendor/consolidation/robo/src/Task/Composer/Base.php +++ b/lib/composer/vendor/consolidation/robo/src/Task/Composer/Base.php @@ -1,11 +1,11 @@ command = $pathToComposer; + if (!$this->command) { + $this->command = $this->findExecutablePhar('composer'); + } + if (!$this->command) { + throw new TaskException(__CLASS__, "Neither local composer.phar nor global composer installation could be found."); + } + } + /** * adds `prefer-dist` option to composer * * @return $this */ - public function preferDist() + public function preferDist($preferDist = true) { + if (!$preferDist) { + return $this->preferSource(); + } $this->prefer = '--prefer-dist'; return $this; } @@ -68,6 +87,20 @@ public function preferSource() return $this; } + /** + * adds `dev` option to composer + * + * @return $this + */ + public function dev($dev = true) + { + if (!$dev) { + return $this->noDev(); + } + $this->dev = '--dev'; + return $this; + } + /** * adds `no-dev` option to composer * @@ -79,6 +112,20 @@ public function noDev() return $this; } + /** + * adds `ansi` option to composer + * + * @return $this + */ + public function ansi($ansi = true) + { + if (!$ansi) { + return $this->noAnsi(); + } + $this->ansi = '--ansi'; + return $this; + } + /** * adds `no-ansi` option to composer * @@ -90,14 +137,22 @@ public function noAnsi() return $this; } + public function interaction($interaction = true) + { + if (!$interaction) { + return $this->noInteraction(); + } + return $this; + } + /** - * adds `ansi` option to composer + * adds `no-interaction` option to composer * * @return $this */ - public function ansi() + public function noInteraction() { - $this->ansi = '--ansi'; + $this->nointeraction = '--no-interaction'; return $this; } @@ -106,40 +161,88 @@ public function ansi() * * @return $this */ - public function optimizeAutoloader() + public function optimizeAutoloader($optimize = true) { - $this->optimizeAutoloader = '--optimize-autoloader'; + if ($optimize) { + $this->option('--optimize-autoloader'); + } return $this; } /** - * @param null|string $pathToComposer + * adds `ignore-platform-reqs` option to composer * - * @throws \Robo\Exception\TaskException + * @return $this */ - public function __construct($pathToComposer = null) + public function ignorePlatformRequirements($ignore = true) { - $this->command = $pathToComposer; - if (!$this->command) { - $this->command = $this->findExecutablePhar('composer'); + $this->option('--ignore-platform-reqs'); + return $this; + } + + /** + * disable plugins + * + * @return $this + */ + public function disablePlugins($disable = true) + { + if ($disable) { + $this->option('--no-plugins'); } - if (!$this->command) { - throw new TaskException(__CLASS__, "Neither local composer.phar nor global composer installation could be found."); + return $this; + } + + /** + * skip scripts + * + * @return $this + */ + public function noScripts($disable = true) + { + if ($disable) { + $this->option('--no-scripts'); } + return $this; } /** - * {@inheritdoc} + * adds `--working-dir $dir` option to composer + * + * @return $this */ - public function getCommand() + public function workingDir($dir) + { + $this->option("--working-dir", $dir); + return $this; + } + + /** + * Copy class fields into command options as directed. + */ + public function buildCommand() { - if (!isset($this->ansi) && $this->getConfig()->isDecorated()) { + if (!isset($this->ansi) && $this->getConfig()->get(\Robo\Config\Config::DECORATED)) { $this->ansi(); } + if (!isset($this->nointeraction) && !$this->getConfig()->get(\Robo\Config\Config::INTERACTIVE)) { + $this->noInteraction(); + } $this->option($this->prefer) ->option($this->dev) - ->option($this->optimizeAutoloader) + ->option($this->nointeraction) ->option($this->ansi); + } + + /** + * {@inheritdoc} + */ + public function getCommand() + { + if (!$this->built) { + $this->buildCommand(); + $this->built = true; + } return "{$this->command} {$this->action}{$this->arguments}"; } } diff --git a/lib/composer/vendor/consolidation/robo/src/Task/Composer/Config.php b/lib/composer/vendor/consolidation/robo/src/Task/Composer/Config.php new file mode 100644 index 000000000..b5a6bbff9 --- /dev/null +++ b/lib/composer/vendor/consolidation/robo/src/Task/Composer/Config.php @@ -0,0 +1,93 @@ +taskComposerConfig()->set('bin-dir', 'bin/')->run(); + * ?> + * ``` + */ +class Config extends Base +{ + /** + * {@inheritdoc} + */ + protected $action = 'config'; + + /** + * Set a configuration value + * @return $this + */ + public function set($key, $value) + { + $this->arg($key); + $this->arg($value); + return $this; + } + + /** + * Operate on the global repository + * @return $this + */ + public function useGlobal($useGlobal = true) + { + if ($useGlobal) { + $this->option('global'); + } + return $this; + } + + /** + * @return $this + */ + public function repository($id, $uri, $repoType = 'vcs') + { + $this->arg("repositories.$id"); + $this->arg($repoType); + $this->arg($uri); + return $this; + } + + /** + * @return $this + */ + public function removeRepository($id) + { + $this->option('unset', "repositories.$id"); + return $this; + } + + /** + * @return $this + */ + public function disableRepository($id) + { + $this->arg("repositories.$id"); + $this->arg('false'); + return $this; + } + + /** + * @return $this + */ + public function enableRepository($id) + { + $this->arg("repositories.$id"); + $this->arg('true'); + return $this; + } + + /** + * {@inheritdoc} + */ + public function run() + { + $command = $this->getCommand(); + $this->printTaskInfo('Configuring composer.json: {command}', ['command' => $command]); + return $this->executeCommand($command); + } +} diff --git a/lib/composer/vendor/consolidation/robo/src/Task/Composer/CreateProject.php b/lib/composer/vendor/consolidation/robo/src/Task/Composer/CreateProject.php new file mode 100644 index 000000000..5f979a646 --- /dev/null +++ b/lib/composer/vendor/consolidation/robo/src/Task/Composer/CreateProject.php @@ -0,0 +1,112 @@ +taskComposerCreateProject()->source('foo/bar')->target('myBar')->run(); + * ?> + * ``` + */ +class CreateProject extends Base +{ + /** + * {@inheritdoc} + */ + protected $action = 'create-project'; + + protected $source; + protected $target = ''; + protected $version = ''; + + /** + * @return $this + */ + public function source($source) + { + $this->source = $source; + return $this; + } + + /** + * @return $this + */ + public function target($target) + { + $this->target = $target; + return $this; + } + + /** + * @return $this + */ + public function version($version) + { + $this->version = $version; + return $this; + } + + public function keepVcs($keep = true) + { + if ($keep) { + $this->option('--keep-vcs'); + } + return $this; + } + + public function noInstall($noInstall = true) + { + if ($noInstall) { + $this->option('--no-install'); + } + return $this; + } + + /** + * @return $this + */ + public function repository($repository) + { + if (!empty($repository)) { + $this->option('repository', $repository); + } + return $this; + } + + /** + * @return $this + */ + public function stability($stability) + { + if (!empty($stability)) { + $this->option('stability', $stability); + } + return $this; + } + + public function buildCommand() + { + $this->arg($this->source); + if (!empty($this->target)) { + $this->arg($this->target); + } + if (!empty($this->version)) { + $this->arg($this->version); + } + + return parent::buildCommand(); + } + + /** + * {@inheritdoc} + */ + public function run() + { + $command = $this->getCommand(); + $this->printTaskInfo('Creating project: {command}', ['command' => $command]); + return $this->executeCommand($command); + } +} diff --git a/lib/composer/vendor/consolidation/robo/src/Task/Composer/DumpAutoload.php b/lib/composer/vendor/consolidation/robo/src/Task/Composer/DumpAutoload.php index 6297a2b40..55b1ea00e 100644 --- a/lib/composer/vendor/consolidation/robo/src/Task/Composer/DumpAutoload.php +++ b/lib/composer/vendor/consolidation/robo/src/Task/Composer/DumpAutoload.php @@ -42,21 +42,14 @@ class DumpAutoload extends Base /** * @return $this */ - public function optimize() + public function optimize($optimize = true) { - $this->optimize = "--optimize"; + if ($optimize) { + $this->option("--optimize"); + } return $this; } - /** - * {@inheritdoc} - */ - public function getCommand() - { - $this->option($this->optimize); - return parent::getCommand(); - } - /** * {@inheritdoc} */ diff --git a/lib/composer/vendor/consolidation/robo/src/Task/Composer/Init.php b/lib/composer/vendor/consolidation/robo/src/Task/Composer/Init.php new file mode 100644 index 000000000..c841299dd --- /dev/null +++ b/lib/composer/vendor/consolidation/robo/src/Task/Composer/Init.php @@ -0,0 +1,115 @@ +taskComposerInit()->run(); + * ?> + * ``` + */ +class Init extends Base +{ + /** + * {@inheritdoc} + */ + protected $action = 'init'; + + /** + * @return $this + */ + public function projectName($projectName) + { + $this->option('name', $projectName); + return $this; + } + + /** + * @return $this + */ + public function description($description) + { + $this->option('description', $description); + return $this; + } + + /** + * @return $this + */ + public function author($author) + { + $this->option('author', $author); + return $this; + } + + /** + * @return $this + */ + public function projectType($type) + { + $this->option('type', $type); + return $this; + } + + /** + * @return $this + */ + public function homepage($homepage) + { + $this->option('homepage', $homepage); + return $this; + } + + /** + * 'require' is a keyword, so it cannot be a method name. + * @return $this + */ + public function dependency($project, $version = null) + { + if (isset($version)) { + $project .= ":$version"; + } + $this->option('require', $project); + return $this; + } + + /** + * @return $this + */ + public function stability($stability) + { + $this->option('stability', $stability); + return $this; + } + + /** + * @return $this + */ + public function license($license) + { + $this->option('license', $license); + return $this; + } + + /** + * @return $this + */ + public function repository($repository) + { + $this->option('repository', $repository); + return $this; + } + + /** + * {@inheritdoc} + */ + public function run() + { + $command = $this->getCommand(); + $this->printTaskInfo('Creating composer.json: {command}', ['command' => $command]); + return $this->executeCommand($command); + } +} diff --git a/lib/composer/vendor/consolidation/robo/src/Task/Composer/Remove.php b/lib/composer/vendor/consolidation/robo/src/Task/Composer/Remove.php index 0011055a2..b0316f051 100644 --- a/lib/composer/vendor/consolidation/robo/src/Task/Composer/Remove.php +++ b/lib/composer/vendor/consolidation/robo/src/Task/Composer/Remove.php @@ -2,12 +2,12 @@ namespace Robo\Task\Composer; /** - * Composer Validate + * Composer Remove * * ``` php * taskComposerValidate()->run(); + * $this->taskComposerRemove()->run(); * ?> * ``` */ @@ -21,45 +21,55 @@ class Remove extends Base /** * @return $this */ - public function dev() + public function dev($dev = true) { - $this->option('--dev'); + if ($dev) { + $this->option('--dev'); + } return $this; } /** * @return $this */ - public function noProgress() + public function noProgress($noProgress = true) { - $this->option('--no-progress'); + if ($noProgress) { + $this->option('--no-progress'); + } return $this; } /** * @return $this */ - public function noUpdate() + public function noUpdate($noUpdate = true) { - $this->option('--no-update'); + if ($noUpdate) { + $this->option('--no-update'); + } return $this; } /** * @return $this */ - public function updateNoDev() + public function updateNoDev($updateNoDev = true) { - $this->option('--update-no-dev'); + if ($updateNoDev) { + $this->option('--update-no-dev'); + } return $this; } /** * @return $this */ - public function noUpdateWithDependencies() + public function noUpdateWithDependencies($updateWithDependencies = true) { - $this->option('--no-update-with-dependencies'); + if ($updateWithDependencies) { + $this->option('--no-update-with-dependencies'); + } return $this; } diff --git a/lib/composer/vendor/consolidation/robo/src/Task/Composer/RequireDependency.php b/lib/composer/vendor/consolidation/robo/src/Task/Composer/RequireDependency.php new file mode 100644 index 000000000..6cdbf6139 --- /dev/null +++ b/lib/composer/vendor/consolidation/robo/src/Task/Composer/RequireDependency.php @@ -0,0 +1,50 @@ +taskComposerRequire()->dependency('foo/bar', '^.2.4.8')->run(); + * ?> + * ``` + */ +class RequireDependency extends Base +{ + /** + * {@inheritdoc} + */ + protected $action = 'require'; + + /** + * 'require' is a keyword, so it cannot be a method name. + * @return $this + */ + public function dependency($project, $version = null) + { + $project = (array)$project; + + if (isset($version)) { + $project = array_map( + function ($item) use ($version) { + return "$item:$version"; + }, + $project + ); + } + $this->args($project); + return $this; + } + + /** + * {@inheritdoc} + */ + public function run() + { + $command = $this->getCommand(); + $this->printTaskInfo('Requiring packages: {command}', ['command' => $command]); + return $this->executeCommand($command); + } +} diff --git a/lib/composer/vendor/consolidation/robo/src/Task/Composer/Validate.php b/lib/composer/vendor/consolidation/robo/src/Task/Composer/Validate.php index 6db6fdd18..adb158543 100644 --- a/lib/composer/vendor/consolidation/robo/src/Task/Composer/Validate.php +++ b/lib/composer/vendor/consolidation/robo/src/Task/Composer/Validate.php @@ -18,90 +18,61 @@ class Validate extends Base */ protected $action = 'validate'; - /** - * @var string - */ - protected $noCheckAll; - - /** - * @var string - */ - protected $noCheckLock; - - /** - * @var string - */ - protected $noCheckPublish; - - /** - * @var string - */ - protected $withDependencies; - - /** - * @var string - */ - protected $strict; - /** * @return $this */ - public function noCheckAll() + public function noCheckAll($noCheckAll = true) { - $this->noCheckAll = '--no-check-all'; + if ($noCheckAll) { + $this->option('--no-check-all'); + } return $this; } /** * @return $this */ - public function noCheckLock() + public function noCheckLock($noCheckLock = true) { - $this->noCheckLock = '--no-check-lock'; + if ($noCheckLock) { + $this->option('--no-check-lock'); + } return $this; } /** * @return $this */ - public function noCheckPublish() + public function noCheckPublish($noCheckPublish = true) { - $this->noCheckPublish = '--no-check-publish'; + if ($noCheckPublish) { + $this->option('--no-check-publish'); + } return $this; } /** * @return $this */ - public function withDependencies() + public function withDependencies($withDependencies = true) { - $this->withDependencies = '--with-dependencies'; + if ($withDependencies) { + $this->option('--with-dependencies'); + } return $this; } /** * @return $this */ - public function strict() + public function strict($strict = true) { - $this->strict = '--strict'; + if ($strict) { + $this->option('--strict'); + } return $this; } - /** - * {@inheritdoc} - */ - public function getCommand() - { - $this->option($this->noCheckAll); - $this->option($this->noCheckLock); - $this->option($this->noCheckPublish); - $this->option($this->withDependencies); - $this->option($this->strict); - - return parent::getCommand(); - } - /** * {@inheritdoc} */ diff --git a/lib/composer/vendor/consolidation/robo/src/Task/Composer/loadTasks.php b/lib/composer/vendor/consolidation/robo/src/Task/Composer/loadTasks.php index 50dab2ec8..6b074ba32 100644 --- a/lib/composer/vendor/consolidation/robo/src/Task/Composer/loadTasks.php +++ b/lib/composer/vendor/consolidation/robo/src/Task/Composer/loadTasks.php @@ -33,6 +33,26 @@ protected function taskComposerDumpAutoload($pathToComposer = null) return $this->task(DumpAutoload::class, $pathToComposer); } + /** + * @param null|string $pathToComposer + * + * @return Init + */ + protected function taskComposerInit($pathToComposer = null) + { + return $this->task(Init::class, $pathToComposer); + } + + /** + * @param null|string $pathToComposer + * + * @return Init + */ + protected function taskComposerConfig($pathToComposer = null) + { + return $this->task(Config::class, $pathToComposer); + } + /** * @param null|string $pathToComposer * @@ -52,4 +72,24 @@ protected function taskComposerRemove($pathToComposer = null) { return $this->task(Remove::class, $pathToComposer); } + + /** + * @param null|string $pathToComposer + * + * @return Remove + */ + protected function taskComposerRequire($pathToComposer = null) + { + return $this->task(RequireDependency::class, $pathToComposer); + } + + /** + * @param null|string $pathToComposer + * + * @return Remove + */ + protected function taskComposerCreateProject($pathToComposer = null) + { + return $this->task(CreateProject::class, $pathToComposer); + } } diff --git a/lib/composer/vendor/consolidation/robo/src/Task/Development/Changelog.php b/lib/composer/vendor/consolidation/robo/src/Task/Development/Changelog.php index ce281852f..44af6d820 100644 --- a/lib/composer/vendor/consolidation/robo/src/Task/Development/Changelog.php +++ b/lib/composer/vendor/consolidation/robo/src/Task/Development/Changelog.php @@ -2,10 +2,7 @@ namespace Robo\Task\Development; use Robo\Task\BaseTask; -use Robo\Task\File\Replace; -use Robo\Task\Filesystem; use Robo\Result; -use Robo\Task\Development; use Robo\Contract\BuilderAwareInterface; use Robo\Common\BuilderAwareTrait; @@ -33,10 +30,6 @@ * ->run(); * ?> * ``` - * - * @method Development\Changelog filename(string $filename) - * @method Development\Changelog anchor(string $anchor) - * @method Development\Changelog version(string $version) */ class Changelog extends BaseTask implements BuilderAwareInterface { @@ -62,6 +55,16 @@ class Changelog extends BaseTask implements BuilderAwareInterface */ protected $version = ""; + /** + * @var string + */ + protected $body = ""; + + /** + * @var string + */ + protected $header = ""; + /** * @param string $filename * @@ -73,6 +76,32 @@ public function filename($filename) return $this; } + /** + * Sets the changelog body text. + * + * This method permits the raw changelog text to be set directly If this is set, $this->log changes will be ignored. + * + * @param string $body + * + * @return $this + */ + public function setBody($body) + { + $this->body = $body; + return $this; + } + + /** + * @param string $header + * + * @return $this + */ + public function setHeader($header) + { + $this->header = $header; + return $this; + } + /** * @param string $item * @@ -149,20 +178,17 @@ public function getChanges() */ public function run() { - if (empty($this->log)) { - return Result::error($this, "Changelog is empty"); + if (empty($this->body)) { + if (empty($this->log)) { + return Result::error($this, "Changelog is empty"); + } + $this->body = $this->generateBody(); + } + if (empty($this->header)) { + $this->header = $this->generateHeader(); } - $text = implode( - "\n", - array_map( - function ($i) { - return "* $i *" . date('Y-m-d') . "*"; - }, - $this->log - ) - ) . "\n"; - $ver = "#### {$this->version}\n\n"; - $text = $ver . $text; + + $text = $this->header . $this->body; if (!file_exists($this->filename)) { $this->printTaskInfo('Creating {filename}', ['filename' => $this->filename]); @@ -174,13 +200,13 @@ function ($i) { /** @var \Robo\Result $result */ // trying to append to changelog for today - $result = $this->collectionBuilder()->taskReplace($this->filename) - ->from($ver) + $result = $this->collectionBuilder()->taskReplaceInFile($this->filename) + ->from($this->header) ->to($text) ->run(); if (!isset($result['replaced']) || !$result['replaced']) { - $result = $this->collectionBuilder()->taskReplace($this->filename) + $result = $this->collectionBuilder()->taskReplaceInFile($this->filename) ->from($this->anchor) ->to($this->anchor . "\n\n" . $text) ->run(); @@ -188,4 +214,33 @@ function ($i) { return new Result($this, $result->getExitCode(), $result->getMessage(), $this->log); } + + /** + * @return \Robo\Result|string + */ + protected function generateBody() + { + $text = implode("\n", array_map([$this, 'processLogRow'], $this->log)); + $text .= "\n"; + + return $text; + } + + /** + * @return string + */ + protected function generateHeader() + { + return "#### {$this->version}\n\n"; + } + + /** + * @param $i + * + * @return string + */ + public function processLogRow($i) + { + return "* $i *" . date('Y-m-d') . "*"; + } } diff --git a/lib/composer/vendor/consolidation/robo/src/Task/Development/GenerateMarkdownDoc.php b/lib/composer/vendor/consolidation/robo/src/Task/Development/GenerateMarkdownDoc.php index 2387199f1..0c3ec26cb 100644 --- a/lib/composer/vendor/consolidation/robo/src/Task/Development/GenerateMarkdownDoc.php +++ b/lib/composer/vendor/consolidation/robo/src/Task/Development/GenerateMarkdownDoc.php @@ -2,10 +2,7 @@ namespace Robo\Task\Development; use Robo\Task\BaseTask; -use Robo\Task\File\Write; -use Robo\Task\Filesystem; use Robo\Result; -use Robo\Task\Development; use Robo\Contract\BuilderAwareInterface; use Robo\Common\BuilderAwareTrait; @@ -41,24 +38,6 @@ * return strpos($r->name, 'save')===0 ? "[Saves to the database]\n" . $text : $text; * })->run(); * ``` - * - * @method \Robo\Task\Development\GenerateMarkdownDoc docClass(string $classname) put a class you want to be documented - * @method \Robo\Task\Development\GenerateMarkdownDoc filterMethods(\Closure $func) using callback function filter out methods that won't be documented - * @method \Robo\Task\Development\GenerateMarkdownDoc filterClasses(\Closure $func) using callback function filter out classes that won't be documented - * @method \Robo\Task\Development\GenerateMarkdownDoc filterProperties(\Closure $func) using callback function filter out properties that won't be documented - * @method \Robo\Task\Development\GenerateMarkdownDoc processClass(\Closure $func) post-process class documentation - * @method \Robo\Task\Development\GenerateMarkdownDoc processClassSignature(\Closure $func) post-process class signature. Provide *false* to skip. - * @method \Robo\Task\Development\GenerateMarkdownDoc processClassDocBlock(\Closure $func) post-process class docblock contents. Provide *false* to skip. - * @method \Robo\Task\Development\GenerateMarkdownDoc processMethod(\Closure $func) post-process method documentation. Provide *false* to skip. - * @method \Robo\Task\Development\GenerateMarkdownDoc processMethodSignature(\Closure $func) post-process method signature. Provide *false* to skip. - * @method \Robo\Task\Development\GenerateMarkdownDoc processMethodDocBlock(\Closure $func) post-process method docblock contents. Provide *false* to skip. - * @method \Robo\Task\Development\GenerateMarkdownDoc processProperty(\Closure $func) post-process property documentation. Provide *false* to skip. - * @method \Robo\Task\Development\GenerateMarkdownDoc processPropertySignature(\Closure $func) post-process property signature. Provide *false* to skip. - * @method \Robo\Task\Development\GenerateMarkdownDoc processPropertyDocBlock(\Closure $func) post-process property docblock contents. Provide *false* to skip. - * @method \Robo\Task\Development\GenerateMarkdownDoc reorder(\Closure $func) use a function to reorder classes - * @method \Robo\Task\Development\GenerateMarkdownDoc reorderMethods(\Closure $func) use a function to reorder methods in class - * @method \Robo\Task\Development\GenerateMarkdownDoc prepend($text) inserts text into beginning of markdown file - * @method \Robo\Task\Development\GenerateMarkdownDoc append($text) inserts text in the end of markdown file */ class GenerateMarkdownDoc extends BaseTask implements BuilderAwareInterface { @@ -190,6 +169,8 @@ public function __construct($filename) } /** + * Put a class you want to be documented. + * * @param string $item * * @return $this @@ -201,6 +182,8 @@ public function docClass($item) } /** + * Using a callback function filter out methods that won't be documented. + * * @param callable $filterMethods * * @return $this @@ -212,6 +195,8 @@ public function filterMethods($filterMethods) } /** + * Using a callback function filter out classes that won't be documented. + * * @param callable $filterClasses * * @return $this @@ -223,6 +208,8 @@ public function filterClasses($filterClasses) } /** + * Using a callback function filter out properties that won't be documented. + * * @param callable $filterProperties * * @return $this @@ -234,6 +221,8 @@ public function filterProperties($filterProperties) } /** + * Post-process class documentation. + * * @param callable $processClass * * @return $this @@ -245,6 +234,8 @@ public function processClass($processClass) } /** + * Post-process class signature. Provide *false* to skip. + * * @param callable|false $processClassSignature * * @return $this @@ -256,6 +247,8 @@ public function processClassSignature($processClassSignature) } /** + * Post-process class docblock contents. Provide *false* to skip. + * * @param callable|false $processClassDocBlock * * @return $this @@ -267,6 +260,8 @@ public function processClassDocBlock($processClassDocBlock) } /** + * Post-process method documentation. Provide *false* to skip. + * * @param callable|false $processMethod * * @return $this @@ -278,6 +273,8 @@ public function processMethod($processMethod) } /** + * Post-process method signature. Provide *false* to skip. + * * @param callable|false $processMethodSignature * * @return $this @@ -289,6 +286,8 @@ public function processMethodSignature($processMethodSignature) } /** + * Post-process method docblock contents. Provide *false* to skip. + * * @param callable|false $processMethodDocBlock * * @return $this @@ -300,6 +299,8 @@ public function processMethodDocBlock($processMethodDocBlock) } /** + * Post-process property documentation. Provide *false* to skip. + * * @param callable|false $processProperty * * @return $this @@ -311,6 +312,8 @@ public function processProperty($processProperty) } /** + * Post-process property signature. Provide *false* to skip. + * * @param callable|false $processPropertySignature * * @return $this @@ -322,6 +325,8 @@ public function processPropertySignature($processPropertySignature) } /** + * Post-process property docblock contents. Provide *false* to skip. + * * @param callable|false $processPropertyDocBlock * * @return $this @@ -333,6 +338,8 @@ public function processPropertyDocBlock($processPropertyDocBlock) } /** + * Use a function to reorder classes. + * * @param callable $reorder * * @return $this @@ -344,6 +351,8 @@ public function reorder($reorder) } /** + * Use a function to reorder methods in class. + * * @param callable $reorderMethods * * @return $this @@ -377,6 +386,8 @@ public function filename($filename) } /** + * Inserts text at the beginning of markdown file. + * * @param string $prepend * * @return $this @@ -388,6 +399,8 @@ public function prepend($prepend) } /** + * Inserts text at the end of markdown file. + * * @param string $append * * @return $this diff --git a/lib/composer/vendor/consolidation/robo/src/Task/Development/GenerateTask.php b/lib/composer/vendor/consolidation/robo/src/Task/Development/GenerateTask.php index e50405759..9d7a698e9 100644 --- a/lib/composer/vendor/consolidation/robo/src/Task/Development/GenerateTask.php +++ b/lib/composer/vendor/consolidation/robo/src/Task/Development/GenerateTask.php @@ -2,7 +2,6 @@ namespace Robo\Task\Development; use Robo\Task\BaseTask; -use Symfony\Component\Process\ProcessUtils; use Robo\Result; /** diff --git a/lib/composer/vendor/consolidation/robo/src/Task/Development/GitHub.php b/lib/composer/vendor/consolidation/robo/src/Task/Development/GitHub.php index 3fd897239..9fc9909d4 100644 --- a/lib/composer/vendor/consolidation/robo/src/Task/Development/GitHub.php +++ b/lib/composer/vendor/consolidation/robo/src/Task/Development/GitHub.php @@ -4,13 +4,9 @@ use Robo\Exception\TaskException; use Robo\Task\BaseTask; -/** - * @method \Robo\Task\Development\GitHub repo(string) - * @method \Robo\Task\Development\GitHub owner(string) - */ abstract class GitHub extends BaseTask { - const GITHUB_URL = 'https://Api.github.com'; + const GITHUB_URL = 'https://api.github.com'; /** * @var string @@ -32,6 +28,11 @@ abstract class GitHub extends BaseTask */ protected $owner; + /** + * @var string + */ + protected $accessToken; + /** * @param string $repo * @@ -95,6 +96,17 @@ public function password($password) return $this; } + /** + * @param $accessToken + * + * @return $this + */ + public function accessToken($token) + { + $this->accessToken = $token; + return $this; + } + /** * @param string $uri * @param array $params @@ -119,6 +131,10 @@ protected function sendRequest($uri, $params = [], $method = 'POST') curl_setopt($ch, CURLOPT_USERPWD, $this->user . ':' . $this->password); } + if (!empty($this->accessToken)) { + $url .= "?access_token=" . $this->accessToken; + } + curl_setopt_array( $ch, array( diff --git a/lib/composer/vendor/consolidation/robo/src/Task/Development/GitHubRelease.php b/lib/composer/vendor/consolidation/robo/src/Task/Development/GitHubRelease.php index ac9743e03..bf7a4889e 100644 --- a/lib/composer/vendor/consolidation/robo/src/Task/Development/GitHubRelease.php +++ b/lib/composer/vendor/consolidation/robo/src/Task/Development/GitHubRelease.php @@ -190,7 +190,7 @@ public function run() [ "tag_name" => $this->tag, "target_commitish" => $this->comittish, - "name" => $this->tag, + "name" => $this->name, "body" => $this->getBody(), "draft" => $this->draft, "prerelease" => $this->prerelease diff --git a/lib/composer/vendor/consolidation/robo/src/Task/Development/OpenBrowser.php b/lib/composer/vendor/consolidation/robo/src/Task/Development/OpenBrowser.php index 867216ea7..ea01b326d 100644 --- a/lib/composer/vendor/consolidation/robo/src/Task/Development/OpenBrowser.php +++ b/lib/composer/vendor/consolidation/robo/src/Task/Development/OpenBrowser.php @@ -2,7 +2,7 @@ namespace Robo\Task\Development; use Robo\Task\BaseTask; -use Symfony\Component\Process\ProcessUtils; +use Robo\Common\ProcessUtils; use Robo\Result; /** diff --git a/lib/composer/vendor/consolidation/robo/src/Task/Development/PackPhar.php b/lib/composer/vendor/consolidation/robo/src/Task/Development/PackPhar.php index 3565dcbc6..6d0a04d72 100644 --- a/lib/composer/vendor/consolidation/robo/src/Task/Development/PackPhar.php +++ b/lib/composer/vendor/consolidation/robo/src/Task/Development/PackPhar.php @@ -2,7 +2,6 @@ namespace Robo\Task\Development; use Robo\Contract\ProgressIndicatorAwareInterface; -use Robo\Common\ProgressIndicatorAwareTrait; use Robo\Contract\PrintedInterface; use Robo\Result; use Robo\Task\BaseTask; diff --git a/lib/composer/vendor/consolidation/robo/src/Task/Development/SemVer.php b/lib/composer/vendor/consolidation/robo/src/Task/Development/SemVer.php index b9fb5929b..6c807d896 100644 --- a/lib/composer/vendor/consolidation/robo/src/Task/Development/SemVer.php +++ b/lib/composer/vendor/consolidation/robo/src/Task/Development/SemVer.php @@ -23,6 +23,8 @@ class SemVer implements TaskInterface const REGEX = "/^\-\-\-\n:major:\s(0|[1-9]\d*)\n:minor:\s(0|[1-9]\d*)\n:patch:\s(0|[1-9]\d*)\n:special:\s'([a-zA-z0-9]*\.?(?:0|[1-9]\d*)?)'\n:metadata:\s'((?:0|[1-9]\d*)?(?:\.[a-zA-z0-9\.]*)?)'/"; + const REGEX_STRING = '/^(?[0-9]+)\.(?[0-9]+)\.(?[0-9]+)(|-(?[0-9a-zA-Z.]+))(|\+(?[0-9a-zA-Z.]+))$/'; + /** * @var string */ @@ -62,7 +64,8 @@ public function __construct($filename = '') $this->path = $filename; if (file_exists($this->path)) { - $this->parse(); + $semverFileContents = file_get_contents($this->path); + $this->parseFile($semverFileContents); } } @@ -85,6 +88,12 @@ public function __toString() return str_replace($search, $replace, $this->format); } + public function version($version) + { + $this->parseString($version); + return $this; + } + /** * @param string $format * @@ -208,6 +217,9 @@ public function run() */ protected function dump() { + if (empty($this->path)) { + return true; + } extract($this->version); $semver = sprintf(self::SEMVER, $major, $minor, $patch, $special, $metadata); if (is_writeable($this->path) === false || file_put_contents($this->path, $semver) === false) { @@ -216,14 +228,24 @@ protected function dump() return true; } + protected function parseString($semverString) + { + if (!preg_match_all(self::REGEX_STRING, $semverString, $matches)) { + throw new TaskException($this, 'Bad semver value: ' . $semverString); + } + + $this->version = array_intersect_key($matches, $this->version); + $this->version = array_map(function ($item) { + return $item[0]; + }, $this->version); + } + /** * @throws \Robo\Exception\TaskException */ - protected function parse() + protected function parseFile($semverFileContents) { - $output = file_get_contents($this->path); - - if (!preg_match_all(self::REGEX, $output, $matches)) { + if (!preg_match_all(self::REGEX, $semverFileContents, $matches)) { throw new TaskException($this, 'Bad semver file.'); } diff --git a/lib/composer/vendor/consolidation/robo/src/Task/Docker/Base.php b/lib/composer/vendor/consolidation/robo/src/Task/Docker/Base.php index 9ecc3b6b5..135f39e7a 100644 --- a/lib/composer/vendor/consolidation/robo/src/Task/Docker/Base.php +++ b/lib/composer/vendor/consolidation/robo/src/Task/Docker/Base.php @@ -2,10 +2,11 @@ namespace Robo\Task\Docker; use Robo\Common\ExecOneCommand; +use Robo\Contract\CommandInterface; use Robo\Contract\PrintedInterface; use Robo\Task\BaseTask; -abstract class Base extends BaseTask implements PrintedInterface +abstract class Base extends BaseTask implements CommandInterface, PrintedInterface { use ExecOneCommand; @@ -20,7 +21,6 @@ abstract class Base extends BaseTask implements PrintedInterface public function run() { $command = $this->getCommand(); - $this->printTaskInfo('Running {command}', ['command' => $command]); return $this->executeCommand($command); } diff --git a/lib/composer/vendor/consolidation/robo/src/Task/Docker/Exec.php b/lib/composer/vendor/consolidation/robo/src/Task/Docker/Exec.php index f26942e38..fa67c8da0 100644 --- a/lib/composer/vendor/consolidation/robo/src/Task/Docker/Exec.php +++ b/lib/composer/vendor/consolidation/robo/src/Task/Docker/Exec.php @@ -64,12 +64,14 @@ public function detached() } /** - * @return $this + * {@inheritdoc)} */ - public function interactive() + public function interactive($interactive = true) { - $this->option('-i'); - return $this; + if ($interactive) { + $this->option('-i'); + } + return parent::interactive($interactive); } /** diff --git a/lib/composer/vendor/consolidation/robo/src/Task/Docker/Run.php b/lib/composer/vendor/consolidation/robo/src/Task/Docker/Run.php index f6661b639..a02ea76f6 100644 --- a/lib/composer/vendor/consolidation/robo/src/Task/Docker/Run.php +++ b/lib/composer/vendor/consolidation/robo/src/Task/Docker/Run.php @@ -115,12 +115,14 @@ public function detached() } /** - * @return $this + * {@inheritdoc)} */ - public function interactive() + public function interactive($interactive = true) { - $this->option('-i'); - return $this; + if ($interactive) { + $this->option('-i'); + } + return parent::interactive($interactive); } /** @@ -147,13 +149,29 @@ public function volume($from, $to = null) return $this; } + /** + * Set environment variables. + * n.b. $this->env($variable, $value) also available here, + * inherited from ExecTrait. + * + * @param array $env + * @return type + */ + public function envVars(array $env) + { + foreach ($env as $variable => $value) { + $this->setDockerEnv($variable, $value); + } + return $this; + } + /** * @param string $variable * @param null|string $value * * @return $this */ - public function env($variable, $value = null) + protected function setDockerEnv($variable, $value = null) { $env = $value ? "$variable=$value" : $variable; return $this->option("-e", $env); diff --git a/lib/composer/vendor/consolidation/robo/src/Task/File/Replace.php b/lib/composer/vendor/consolidation/robo/src/Task/File/Replace.php index 1c7f16a14..0107df13c 100644 --- a/lib/composer/vendor/consolidation/robo/src/Task/File/Replace.php +++ b/lib/composer/vendor/consolidation/robo/src/Task/File/Replace.php @@ -30,10 +30,6 @@ * ->run(); * ?> * ``` - * - * @method regex(string) regex to match string to be replaced - * @method from(string|array) string(s) to be replaced - * @method to(string|array) value(s) to be set as a replacement */ class Replace extends BaseTask { @@ -43,12 +39,12 @@ class Replace extends BaseTask protected $filename; /** - * @var string[] + * @var string|string[] */ protected $from; /** - * @var string[] + * @var string|string[] */ protected $to; @@ -77,7 +73,9 @@ public function filename($filename) } /** - * @param string $from + * String(s) to be replaced. + * + * @param string|string[] $from * * @return $this */ @@ -88,7 +86,9 @@ public function from($from) } /** - * @param string $to + * Value(s) to be set as a replacement. + * + * @param string|string[] $to * * @return $this */ @@ -99,6 +99,8 @@ public function to($to) } /** + * Regex to match string to be replaced. + * * @param string $regex * * @return $this diff --git a/lib/composer/vendor/consolidation/robo/src/Task/File/TmpFile.php b/lib/composer/vendor/consolidation/robo/src/Task/File/TmpFile.php index 7c796d4c3..4a18691d6 100644 --- a/lib/composer/vendor/consolidation/robo/src/Task/File/TmpFile.php +++ b/lib/composer/vendor/consolidation/robo/src/Task/File/TmpFile.php @@ -2,7 +2,6 @@ namespace Robo\Task\File; -use Robo\Collection\Collection; use Robo\Contract\CompletionInterface; /** @@ -36,15 +35,15 @@ class TmpFile extends Write implements CompletionInterface */ public function __construct($filename = 'tmp', $extension = '', $baseDir = '', $includeRandomPart = true) { - if (empty($base)) { - $base = sys_get_temp_dir(); + if (empty($baseDir)) { + $baseDir = sys_get_temp_dir(); } if ($includeRandomPart) { $random = static::randomString(); $filename = "{$filename}_{$random}"; } $filename .= $extension; - parent::__construct("{$base}/{$filename}"); + parent::__construct("{$baseDir}/{$filename}"); } /** diff --git a/lib/composer/vendor/consolidation/robo/src/Task/File/Write.php b/lib/composer/vendor/consolidation/robo/src/Task/File/Write.php index 6f0dae3a9..dc2199f92 100644 --- a/lib/composer/vendor/consolidation/robo/src/Task/File/Write.php +++ b/lib/composer/vendor/consolidation/robo/src/Task/File/Write.php @@ -17,8 +17,6 @@ * ->run(); * ?> * ``` - * - * @method append() */ class Write extends BaseTask { diff --git a/lib/composer/vendor/consolidation/robo/src/Task/File/loadTasks.php b/lib/composer/vendor/consolidation/robo/src/Task/File/loadTasks.php index 76ef72301..c5f39c950 100644 --- a/lib/composer/vendor/consolidation/robo/src/Task/File/loadTasks.php +++ b/lib/composer/vendor/consolidation/robo/src/Task/File/loadTasks.php @@ -1,8 +1,6 @@ exclude = $exclude; + $this->exclude = $this->simplifyForCompare($exclude); + return $this; + } + + /** + * Destination files newer than source files are overwritten. + * + * @param bool $overwrite + * + * @return $this + */ + public function overwrite($overwrite) + { + $this->overwrite = $overwrite; return $this; } @@ -82,10 +109,11 @@ public function exclude($exclude = []) * * @param string $src Source directory * @param string $dst Destination directory + * @param string $parent Parent directory * * @throws \Robo\Exception\TaskException */ - protected function copyDir($src, $dst) + protected function copyDir($src, $dst, $parent = '') { $dir = @opendir($src); if (false === $dir) { @@ -95,19 +123,40 @@ protected function copyDir($src, $dst) mkdir($dst, $this->chmod, true); } while (false !== ($file = readdir($dir))) { - if (in_array($file, $this->exclude)) { - continue; + // Support basename and full path exclusion. + if ($this->excluded($file, $src, $parent)) { + continue; } - if (($file !== '.') && ($file !== '..')) { - $srcFile = $src . '/' . $file; - $destFile = $dst . '/' . $file; - if (is_dir($srcFile)) { - $this->copyDir($srcFile, $destFile); - } else { - copy($srcFile, $destFile); - } + $srcFile = $src . '/' . $file; + $destFile = $dst . '/' . $file; + if (is_dir($srcFile)) { + $this->copyDir($srcFile, $destFile, $parent . $file . DIRECTORY_SEPARATOR); + } else { + $this->fs->copy($srcFile, $destFile, $this->overwrite); } } closedir($dir); } + + /** + * Check to see if the current item is excluded. + */ + protected function excluded($file, $src, $parent) + { + return + ($file == '.') || + ($file == '..') || + in_array($file, $this->exclude) || + in_array($this->simplifyForCompare($parent . $file), $this->exclude) || + in_array($this->simplifyForCompare($src . DIRECTORY_SEPARATOR . $file), $this->exclude); + } + + /** + * Avoid problems comparing paths on Windows that may have a + * combination of DIRECTORY_SEPARATOR and /. + */ + protected function simplifyForCompare($item) + { + return str_replace(DIRECTORY_SEPARATOR, '/', $item); + } } diff --git a/lib/composer/vendor/consolidation/robo/src/Task/Filesystem/FilesystemStack.php b/lib/composer/vendor/consolidation/robo/src/Task/Filesystem/FilesystemStack.php index 2a0e115a4..8663e245d 100644 --- a/lib/composer/vendor/consolidation/robo/src/Task/Filesystem/FilesystemStack.php +++ b/lib/composer/vendor/consolidation/robo/src/Task/Filesystem/FilesystemStack.php @@ -1,10 +1,8 @@ * ``` * - * @method $this mkdir($dir) - * @method $this touch($file) - * @method $this copy($from, $to, $force = null) - * @method $this chmod($file, $permissions, $umask = null, $recursive = null) - * @method $this chgrp($file, $group, $recursive = null) - * @method $this chown($file, $user, $recursive = null) - * @method $this remove($file) - * @method $this rename($from, $to) - * @method $this symlink($from, $to) - * @method $this mirror($from, $to) + * @method $this mkdir(string|array|\Traversable $dir, int $mode = 0777) + * @method $this touch(string|array|\Traversable $file, int $time = null, int $atime = null) + * @method $this copy(string $from, string $to, bool $force = false) + * @method $this chmod(string|array|\Traversable $file, int $permissions, int $umask = 0000, bool $recursive = false) + * @method $this chgrp(string|array|\Traversable $file, string $group, bool $recursive = false) + * @method $this chown(string|array|\Traversable $file, string $user, bool $recursive = false) + * @method $this remove(string|array|\Traversable $file) + * @method $this rename(string $from, string $to, bool $force = false) + * @method $this symlink(string $from, string $to, bool $copyOnWindows = false) + * @method $this mirror(string $from, string $to, \Traversable $iterator = null, array $options = []) */ class FilesystemStack extends StackBasedTask implements BuilderAwareInterface { diff --git a/lib/composer/vendor/consolidation/robo/src/Task/Filesystem/TmpDir.php b/lib/composer/vendor/consolidation/robo/src/Task/Filesystem/TmpDir.php index 8cf44f897..104318ded 100644 --- a/lib/composer/vendor/consolidation/robo/src/Task/Filesystem/TmpDir.php +++ b/lib/composer/vendor/consolidation/robo/src/Task/Filesystem/TmpDir.php @@ -3,7 +3,6 @@ namespace Robo\Task\Filesystem; use Robo\Result; -use Robo\Collection\Collection; use Robo\Contract\CompletionInterface; /** diff --git a/lib/composer/vendor/consolidation/robo/src/Task/Filesystem/WorkDir.php b/lib/composer/vendor/consolidation/robo/src/Task/Filesystem/WorkDir.php index 3c445b8bf..4b75c6ed2 100644 --- a/lib/composer/vendor/consolidation/robo/src/Task/Filesystem/WorkDir.php +++ b/lib/composer/vendor/consolidation/robo/src/Task/Filesystem/WorkDir.php @@ -3,8 +3,6 @@ namespace Robo\Task\Filesystem; use Robo\Result; -use Robo\Collection\Collection; -use Robo\Contract\CompletionInterface; use Robo\Contract\RollbackInterface; use Robo\Contract\BuilderAwareInterface; use Robo\Common\BuilderAwareTrait; diff --git a/lib/composer/vendor/consolidation/robo/src/Task/Filesystem/loadShortcuts.php b/lib/composer/vendor/consolidation/robo/src/Task/Filesystem/loadShortcuts.php index 3a670a939..fe72ce5a4 100644 --- a/lib/composer/vendor/consolidation/robo/src/Task/Filesystem/loadShortcuts.php +++ b/lib/composer/vendor/consolidation/robo/src/Task/Filesystem/loadShortcuts.php @@ -1,8 +1,6 @@ taskFilesystemStack()->rename($from, $to)->run(); + return $this->taskFilesystemStack()->rename($from, $to, $overwrite)->run(); } /** diff --git a/lib/composer/vendor/consolidation/robo/src/Task/Filesystem/loadTasks.php b/lib/composer/vendor/consolidation/robo/src/Task/Filesystem/loadTasks.php index 932e8332b..8fecaafff 100644 --- a/lib/composer/vendor/consolidation/robo/src/Task/Filesystem/loadTasks.php +++ b/lib/composer/vendor/consolidation/robo/src/Task/Filesystem/loadTasks.php @@ -1,8 +1,6 @@ run(); * } * ``` - * - * @method \Robo\Task\Remote\Rsync fromUser(string $user) - * @method \Robo\Task\Remote\Rsync fromHost(string $hostname) - * @method \Robo\Task\Remote\Rsync toUser(string $user) - * @method \Robo\Task\Remote\Rsync toHost(string $hostname) */ class Rsync extends BaseTask implements CommandInterface { @@ -432,7 +426,6 @@ public function remoteShell($command) public function run() { $command = $this->getCommand(); - $this->printTaskInfo("Running {command}", ['command' => $command]); return $this->executeCommand($command); } diff --git a/lib/composer/vendor/consolidation/robo/src/Task/Remote/Ssh.php b/lib/composer/vendor/consolidation/robo/src/Task/Remote/Ssh.php index 500e29fcc..69df9fe2c 100644 --- a/lib/composer/vendor/consolidation/robo/src/Task/Remote/Ssh.php +++ b/lib/composer/vendor/consolidation/robo/src/Task/Remote/Ssh.php @@ -2,7 +2,6 @@ namespace Robo\Task\Remote; -use Robo\Result; use Robo\Contract\CommandInterface; use Robo\Exception\TaskException; use Robo\Task\BaseTask; @@ -41,10 +40,6 @@ * ```php * \Robo\Task\Remote\Ssh::configure('remoteDir', '/some-dir'); * ``` - * - * @method $this stopOnFail(bool $stopOnFail) Whether or not to chain commands together with && - * and stop the chain if one command fails - * @method $this remoteDir(string $remoteWorkingDirectory) Changes to the given directory before running commands */ class Ssh extends BaseTask implements CommandInterface, SimulatedInterface { @@ -111,6 +106,8 @@ public function user($user) } /** + * Whether or not to chain commands together with && and stop the chain if one command fails. + * * @param bool $stopOnFail * * @return $this @@ -122,6 +119,8 @@ public function stopOnFail($stopOnFail = true) } /** + * Changes to the given directory before running commands. + * * @param string $remoteDir * * @return $this @@ -269,6 +268,6 @@ protected function sshCommand($command) $hostSpec = $this->user . '@' . $hostSpec; } - return sprintf("ssh{$sshOptions} {$hostSpec} '{$command}'"); + return "ssh{$sshOptions} {$hostSpec} '{$command}'"; } } diff --git a/lib/composer/vendor/consolidation/robo/src/Task/Simulator.php b/lib/composer/vendor/consolidation/robo/src/Task/Simulator.php index bc5f555b0..e69d23fa3 100644 --- a/lib/composer/vendor/consolidation/robo/src/Task/Simulator.php +++ b/lib/composer/vendor/consolidation/robo/src/Task/Simulator.php @@ -8,7 +8,6 @@ use Robo\Contract\TaskInterface; use Robo\Contract\SimulatedInterface; use Robo\Log\RoboLogLevel; -use Psr\Log\LogLevel; use Robo\Contract\CommandInterface; class Simulator extends BaseTask implements CommandInterface diff --git a/lib/composer/vendor/consolidation/robo/src/Task/StackBasedTask.php b/lib/composer/vendor/consolidation/robo/src/Task/StackBasedTask.php index 868fead8e..91659f33a 100644 --- a/lib/composer/vendor/consolidation/robo/src/Task/StackBasedTask.php +++ b/lib/composer/vendor/consolidation/robo/src/Task/StackBasedTask.php @@ -2,8 +2,6 @@ namespace Robo\Task; use Robo\Result; -use Robo\Task\BaseTask; -use Robo\Contract\TaskInterface; /** * Extend StackBasedTask to create a Robo task that @@ -116,7 +114,7 @@ protected function getDelegateCommandList($function) */ protected function printTaskProgress($command, $action) { - $this->printTaskInfo('{command} {action}', ['command' => "{$command[1]}", 'action' => json_encode($action)]); + $this->printTaskInfo('{command} {action}', ['command' => "{$command[1]}", 'action' => json_encode($action, JSON_UNESCAPED_SLASHES)]); } /** diff --git a/lib/composer/vendor/consolidation/robo/src/Task/Testing/Behat.php b/lib/composer/vendor/consolidation/robo/src/Task/Testing/Behat.php index a5d9ea0ad..7e4f1d41a 100644 --- a/lib/composer/vendor/consolidation/robo/src/Task/Testing/Behat.php +++ b/lib/composer/vendor/consolidation/robo/src/Task/Testing/Behat.php @@ -53,7 +53,6 @@ public function __construct($pathToBehat = null) if (!$this->command) { throw new \Robo\Exception\TaskException(__CLASS__, "Neither composer nor phar installation of Behat found"); } - $this->arg('run'); } /** diff --git a/lib/composer/vendor/consolidation/robo/src/Task/Testing/Codecept.php b/lib/composer/vendor/consolidation/robo/src/Task/Testing/Codecept.php index 442540a10..1f8cce703 100644 --- a/lib/composer/vendor/consolidation/robo/src/Task/Testing/Codecept.php +++ b/lib/composer/vendor/consolidation/robo/src/Task/Testing/Codecept.php @@ -5,6 +5,7 @@ use Robo\Exception\TaskException; use Robo\Task\BaseTask; use Robo\Contract\CommandInterface; +use Symfony\Component\Process\Process; /** * Executes Codeception tests @@ -27,17 +28,7 @@ class Codecept extends BaseTask implements CommandInterface, PrintedInterface { use \Robo\Common\ExecOneCommand; - - /** - * @var string - */ - protected $suite = ''; - - /** - * @var string - */ - protected $test = ''; - + /** * @var string */ @@ -67,7 +58,7 @@ public function __construct($pathToCodeception = '') */ public function suite($suite) { - $this->suite = $suite; + $this->option(null, $suite); return $this; } @@ -78,7 +69,7 @@ public function suite($suite) */ public function test($testName) { - $this->test = $testName; + $this->option(null, $testName); return $this; } @@ -241,13 +232,30 @@ public function debug() return $this; } + /** + * @return $this + */ + public function noRebuild() + { + $this->option("no-rebuild"); + return $this; + } + + /** + * @param string $failGroup + * @return $this + */ + public function failGroup($failGroup) + { + $this->option('override', "extensions: config: Codeception\\Extension\\RunFailed: fail-group: {$failGroup}"); + return $this; + } + /** * {@inheritdoc} */ public function getCommand() { - $this->option(null, $this->suite) - ->option(null, $this->test); return $this->command . $this->arguments; } diff --git a/lib/composer/vendor/consolidation/robo/src/Task/Vcs/GitStack.php b/lib/composer/vendor/consolidation/robo/src/Task/Vcs/GitStack.php index 9210bfecd..6cb1783f0 100644 --- a/lib/composer/vendor/consolidation/robo/src/Task/Vcs/GitStack.php +++ b/lib/composer/vendor/consolidation/robo/src/Task/Vcs/GitStack.php @@ -2,7 +2,7 @@ namespace Robo\Task\Vcs; use Robo\Task\CommandStack; -use Symfony\Component\Process\ProcessUtils; +use Robo\Common\ProcessUtils; /** * Runs Git commands in stack. You can use `stopOnFail()` to point that stack should be terminated on first fail. @@ -45,9 +45,33 @@ public function __construct($pathToGit = 'git') * * @return $this */ - public function cloneRepo($repo, $to = "") + public function cloneRepo($repo, $to = "", $branch = "") { - return $this->exec(['clone', $repo, $to]); + $cmd = ['clone', $repo, $to]; + if (!empty($branch)) { + $cmd[] = "--branch $branch"; + } + return $this->exec($cmd); + } + + /** + * Executes `git clone` with depth 1 as default + * + * @param string $repo + * @param string $to + * @param string $branch + * @param int $depth + * + * @return $this + */ + public function cloneShallow($repo, $to = '', $branch = "", $depth = 1) + { + $cmd = ["clone --depth $depth", $repo, $to]; + if (!empty($branch)) { + $cmd[] = "--branch $branch"; + } + + return $this->exec($cmd); } /** diff --git a/lib/composer/vendor/consolidation/robo/tests/_bootstrap.php b/lib/composer/vendor/consolidation/robo/tests/_bootstrap.php deleted file mode 100644 index 6e310e1ff..000000000 --- a/lib/composer/vendor/consolidation/robo/tests/_bootstrap.php +++ /dev/null @@ -1,12 +0,0 @@ -init([ - 'debug' => true, - 'includePaths' => [ - __DIR__.'/../src', - __DIR__.'/../vendor/symfony/process', - __DIR__.'/../vendor/symfony/console', - ] -]); diff --git a/lib/composer/vendor/consolidation/robo/tests/_data/TestedRoboFile.php b/lib/composer/vendor/consolidation/robo/tests/_data/TestedRoboFile.php deleted file mode 100644 index bc11796fc..000000000 --- a/lib/composer/vendor/consolidation/robo/tests/_data/TestedRoboFile.php +++ /dev/null @@ -1,38 +0,0 @@ - false, 'to' => null]) { - } - - /** - * Calculate the fibonacci sequence between two numbers. - * - * Graphic output will look like - * +----+---+-------------+ - * | | | | - * | |-+-| | - * |----+-+-+ | - * | | | - * | | | - * | | | - * +--------+-------------+ - * - * @param int $start Number to start from - * @param int $steps Number of steps to perform - * @param array $opts - * @option $graphic Display the sequence graphically using cube - * representation - */ - public function fibonacci($start, $steps, $opts = ['graphic' => false]) - { - } - - /** Compact doc comment */ - public function compact() - { - } -} diff --git a/lib/composer/vendor/consolidation/robo/tests/_data/TestedRoboTask.php b/lib/composer/vendor/consolidation/robo/tests/_data/TestedRoboTask.php deleted file mode 100644 index c1c5efbab..000000000 --- a/lib/composer/vendor/consolidation/robo/tests/_data/TestedRoboTask.php +++ /dev/null @@ -1,61 +0,0 @@ -taskTestedRoboTask([ - * 'web/assets/screen.css', - * 'web/assets/print.css', - * 'web/assets/theme.css' - * ]) - * ->to('web/assets/style.css') - * ->run() - * ?> - * ``` - */ -class TestedRoboTask extends BaseTask -{ - /** - * @var array|Iterator files - */ - protected $files; - - /** - * @var string dst - */ - protected $dst; - - /** - * Constructor. This should not be documented - * - * @param array|Iterator $files - */ - public function __construct() - { - } - - /** - * Set the destination file - * - * @param string $dst - * - * @return Concat The current instance - */ - public function to($dst) - { - return $this; - } - - /** - * {@inheritdoc} - */ - public function run() - { - return Result::success($this); - } -} diff --git a/lib/composer/vendor/consolidation/robo/tests/_data/claypit/a.txt b/lib/composer/vendor/consolidation/robo/tests/_data/claypit/a.txt deleted file mode 100644 index 8c7e5a667..000000000 --- a/lib/composer/vendor/consolidation/robo/tests/_data/claypit/a.txt +++ /dev/null @@ -1 +0,0 @@ -A \ No newline at end of file diff --git a/lib/composer/vendor/consolidation/robo/tests/_data/claypit/b.txt b/lib/composer/vendor/consolidation/robo/tests/_data/claypit/b.txt deleted file mode 100644 index 7371f47a6..000000000 --- a/lib/composer/vendor/consolidation/robo/tests/_data/claypit/b.txt +++ /dev/null @@ -1 +0,0 @@ -B \ No newline at end of file diff --git a/lib/composer/vendor/consolidation/robo/tests/_data/claypit/box/robo.txt b/lib/composer/vendor/consolidation/robo/tests/_data/claypit/box/robo.txt deleted file mode 100644 index 3ba64572a..000000000 --- a/lib/composer/vendor/consolidation/robo/tests/_data/claypit/box/robo.txt +++ /dev/null @@ -1 +0,0 @@ -HELLOROBO \ No newline at end of file diff --git a/lib/composer/vendor/consolidation/robo/tests/_data/claypit/some/deeply/existing_file b/lib/composer/vendor/consolidation/robo/tests/_data/claypit/some/deeply/existing_file deleted file mode 100644 index 37cfa2826..000000000 --- a/lib/composer/vendor/consolidation/robo/tests/_data/claypit/some/deeply/existing_file +++ /dev/null @@ -1 +0,0 @@ -some existing file diff --git a/lib/composer/vendor/consolidation/robo/tests/_data/claypit/some/deeply/nested/structu.re b/lib/composer/vendor/consolidation/robo/tests/_data/claypit/some/deeply/nested/structu.re deleted file mode 100644 index 98a202cbc..000000000 --- a/lib/composer/vendor/consolidation/robo/tests/_data/claypit/some/deeply/nested/structu.re +++ /dev/null @@ -1 +0,0 @@ -Just a file diff --git a/lib/composer/vendor/consolidation/robo/tests/_data/claypit/some_destination/deeply/existing_file b/lib/composer/vendor/consolidation/robo/tests/_data/claypit/some_destination/deeply/existing_file deleted file mode 100644 index 1765b73ba..000000000 --- a/lib/composer/vendor/consolidation/robo/tests/_data/claypit/some_destination/deeply/existing_file +++ /dev/null @@ -1 +0,0 @@ -some_destination existing file diff --git a/lib/composer/vendor/consolidation/robo/tests/_data/dump.sql b/lib/composer/vendor/consolidation/robo/tests/_data/dump.sql deleted file mode 100644 index 4bc742ce6..000000000 --- a/lib/composer/vendor/consolidation/robo/tests/_data/dump.sql +++ /dev/null @@ -1 +0,0 @@ -/* Replace this file with actual dump of your database */ \ No newline at end of file diff --git a/lib/composer/vendor/consolidation/robo/tests/_data/parascript.php b/lib/composer/vendor/consolidation/robo/tests/_data/parascript.php deleted file mode 100644 index 403e2f1cf..000000000 --- a/lib/composer/vendor/consolidation/robo/tests/_data/parascript.php +++ /dev/null @@ -1,8 +0,0 @@ -getContainer()->get('collectionBuilder', [$tasks]); - $tasks->setBuilder($builder); - return $builder; - } - - public function seeDirFound($dir) - { - $this->assertTrue(is_dir($dir) && file_exists($dir), "Directory does not exist"); - } - - public function _before(\Codeception\TestCase $test) { - $container = new \League\Container\Container(); - $this->initSeeInOutputTrait($container); - Robo::setContainer($container); - $this->setContainer($container); - - $this->getModule('Filesystem')->copyDir(codecept_data_dir().'claypit', codecept_data_dir().'sandbox'); - } - - public function _after(\Codeception\TestCase $test) { - $this->getModule('Filesystem')->deleteDir(codecept_data_dir().'sandbox'); - $this->getContainer()->add('output', new ConsoleOutput()); - chdir(codecept_root_dir()); - } -} diff --git a/lib/composer/vendor/consolidation/robo/tests/_helpers/CodeGuy.php b/lib/composer/vendor/consolidation/robo/tests/_helpers/CodeGuy.php deleted file mode 100644 index e7ce59172..000000000 --- a/lib/composer/vendor/consolidation/robo/tests/_helpers/CodeGuy.php +++ /dev/null @@ -1,26 +0,0 @@ -initSeeInOutputTrait(static::$container); - } - - public function _after(\Codeception\TestCase $test) - { - // Ensure that $stopOnFail global static is reset, as tests - // that set it to true will force an exception, and therefor - // will not have a chance to clean this up. - \Robo\Result::$stopOnFail = false; - - \AspectMock\Test::clean(); - $consoleOutput = new ConsoleOutput(); - static::$container->add('output', $consoleOutput); - static::$container->add('logger', new \Consolidation\Log\Logger($consoleOutput)); - } -} diff --git a/lib/composer/vendor/consolidation/robo/tests/_helpers/SeeInOutputTrait.php b/lib/composer/vendor/consolidation/robo/tests/_helpers/SeeInOutputTrait.php deleted file mode 100644 index 85ae5335d..000000000 --- a/lib/composer/vendor/consolidation/robo/tests/_helpers/SeeInOutputTrait.php +++ /dev/null @@ -1,62 +0,0 @@ -capturedOutput = ''; - $this->testPrinter = new BufferedOutput(OutputInterface::VERBOSITY_DEBUG); - - $app = Robo::createDefaultApplication(); - $config = new \Robo\Config(); - \Robo\Robo::configureContainer($container, $app, $config, $input, $this->testPrinter); - - // Set the application dispatcher - $app->setDispatcher($container->get('eventDispatcher')); - $this->logger = $container->get('logger'); - } - - public function capturedOutputStream() - { - return $this->testPrinter; - } - - public function logger() - { - return $this->logger; - } - - protected function accumulate() - { - $this->capturedOutput .= $this->testPrinter->fetch(); - return $this->capturedOutput; - } - - public function seeInOutput($value) - { - $output = $this->accumulate(); - $this->assertContains($value, $output); - } - - public function doNotSeeInOutput($value) - { - $output = $this->accumulate(); - $this->assertNotContains($value, $output); - } - - public function seeOutputEquals($value) - { - $output = $this->accumulate(); - $this->assertEquals($value, $output); - } -} diff --git a/lib/composer/vendor/consolidation/robo/tests/_helpers/TestHelper.php b/lib/composer/vendor/consolidation/robo/tests/_helpers/TestHelper.php deleted file mode 100644 index d25d90b7b..000000000 --- a/lib/composer/vendor/consolidation/robo/tests/_helpers/TestHelper.php +++ /dev/null @@ -1,10 +0,0 @@ -wantTo('minify a css file'); -$I->amInPath(codecept_data_dir().'sandbox'); - -$sampleCss = dirname(__DIR__) . '/_data/sample.css'; -$outputCss = 'minifiedSample.css'; - -$initialFileSize = filesize($sampleCss); - -$I->taskMinify($sampleCss) - ->to('minifiedSample.css') - ->run(); - -$I->seeFileFound($outputCss); -$minifiedFileSize = filesize($outputCss); -$outputCssContents = file_get_contents($outputCss); - -$I->assertLessThan($initialFileSize, $minifiedFileSize, 'Minified file is smaller than the source file'); -$I->assertGreaterThan(0, $minifiedFileSize, 'Minified file is not empty'); -$I->assertContains('body', $outputCssContents, 'Minified file has some content from the source file'); -$I->assertNotContains('Sample css file', $outputCssContents, 'Minified file does not contain comment from source file'); diff --git a/lib/composer/vendor/consolidation/robo/tests/cli/CleanDirCept.php b/lib/composer/vendor/consolidation/robo/tests/cli/CleanDirCept.php deleted file mode 100644 index 041f8b695..000000000 --- a/lib/composer/vendor/consolidation/robo/tests/cli/CleanDirCept.php +++ /dev/null @@ -1,13 +0,0 @@ -wantTo('clean dir with DeleteDirTask'); -$I->amInPath(codecept_data_dir()); -$I->seeFileFound('robo.txt', 'sandbox'); -$I->taskCleanDir(['sandbox']) - ->run(); -$I->dontSeeFileFound('box', 'sandbox'); -$I->dontSeeFileFound('robo.txt', 'sandbox'); -$I->dontSeeFileFound('a.txt' , 'sandbox'); - - diff --git a/lib/composer/vendor/consolidation/robo/tests/cli/CollectionCest.php b/lib/composer/vendor/consolidation/robo/tests/cli/CollectionCest.php deleted file mode 100644 index 493daf098..000000000 --- a/lib/composer/vendor/consolidation/robo/tests/cli/CollectionCest.php +++ /dev/null @@ -1,409 +0,0 @@ -amInPath(codecept_data_dir().'sandbox'); - } - - public function toRunMultipleTasksViaACollectionBuilder(CliGuy $I) - { - // This tests creating multiple tasks in a single builder, - // which implicitly adds them to a collection. To keep things - // simple, we are only going to use taskFilesystemStack. It - // would be possible, of course, to do these operations with - // a single FilesystemStack, but our goal is to test creating - // multiple tasks with a builder, and ensure that a propper - // collection is built. - $collection = $I->collectionBuilder(); - $result = $collection->taskFilesystemStack() - ->mkdir('a') - ->touch('a/a.txt') - ->rollback( - $I->taskDeleteDir('a') - ) - ->taskFilesystemStack() - ->mkdir('a/b') - ->touch('a/b/b.txt') - ->taskFilesystemStack() - ->mkdir('a/c') - ->touch('a/c/c.txt') - ->run(); - - $I->assertEquals(0, $result->getExitCode(), $result->getMessage()); - - // All of the tasks created by the builder should be added - // to a collection, and `run()` should run them all. - $I->seeDirFound('a'); - $I->seeFileFound('a/a.txt'); - $I->seeDirFound('a/b'); - $I->seeFileFound('a/b/b.txt'); - $I->seeDirFound('a/c'); - $I->seeFileFound('a/c/c.txt'); - } - - public function toUseAWorkingDirWithACollectionBuilder(CliGuy $I) - { - // Run the same test with a working directory. The working - // directory path will point to a temporary directory which - // will be moved into place once the tasks complete. - $collection = $I->collectionBuilder(); - $workDirPath = $collection->workDir("build"); - $I->assertNotEquals("build", basename($workDirPath)); - $result = $collection->taskFilesystemStack() - ->mkdir("{$workDirPath}/a") - ->touch("{$workDirPath}/a/a.txt") - ->taskFilesystemStack() - ->mkdir("{$workDirPath}/a/b") - ->touch("{$workDirPath}/a/b/b.txt") - ->taskFilesystemStack() - ->mkdir("{$workDirPath}/a/c") - ->touch("{$workDirPath}/a/c/c.txt") - ->run(); - - $I->assertEquals(0, $result->getExitCode(), $result->getMessage()); - - // All of the tasks created by the builder should be added - // to a collection, and `run()` should run them all. - $I->seeDirFound('build/a'); - $I->seeFileFound('build/a/a.txt'); - $I->seeDirFound('build/a/b'); - $I->seeFileFound('build/a/b/b.txt'); - $I->seeDirFound('build/a/c'); - $I->seeFileFound('build/a/c/c.txt'); - } - - public function toRollbackAfterFailureViaACollectionBuilder(CliGuy $I) - { - // This is like the previous test, toRunMultipleTasksViaACollectionBuilder, - // except we force an error at the end, and confirm that the - // rollback function is called. - $collection = $I->collectionBuilder(); - $result = $collection->taskFilesystemStack() - ->mkdir('j') - ->touch('j/j.txt') - ->rollback( - $I->taskDeleteDir('j') - ) - ->taskFilesystemStack() - ->mkdir('j/k') - ->touch('j/k/k.txt') - ->taskFilesystemStack() - ->mkdir('j/k/m') - ->touch('j/k/m/m.txt') - ->taskCopyDir(['doesNotExist' => 'copied']) - ->run(); - - $I->assertEquals(1, $result->getExitCode(), $result->getMessage()); - - // All of the tasks created by the builder should be added - // to a collection, and `run()` should run them all. - $I->dontSeeFileFound('q/q.txt'); - $I->dontSeeFileFound('j/j.txt'); - $I->dontSeeFileFound('j/k/k.txt'); - $I->dontSeeFileFound('j/k/m/m.txt'); - } - - public function toRollbackAWorkingDir(CliGuy $I) - { - // Run the same test with a working directory. The working - // directory path will point to a temporary directory which - // will be moved into place once the tasks complete. - $collection = $I->collectionBuilder(); - $workDirPath = $collection->workDir("build"); - $I->assertNotEquals("build", basename($workDirPath)); - $result = $collection->taskFilesystemStack() - ->mkdir("{$workDirPath}/a") - ->touch("{$workDirPath}/a/a.txt") - ->taskFilesystemStack() - ->mkdir("{$workDirPath}/a/b") - ->touch("{$workDirPath}/a/b/b.txt") - ->taskFilesystemStack() - ->mkdir("{$workDirPath}/a/c") - ->touch("{$workDirPath}/a/c/c.txt") - ->taskCopyDir(['doesNotExist' => 'copied']) - ->run(); - - $I->assertEquals(1, $result->getExitCode(), $result->getMessage()); - - // All of the tasks created by the builder should be added - // to a collection, and `run()` should run them all. - $I->dontSeeFileFound('build/a'); - $I->dontSeeFileFound($workDirPath); - } - - public function toBuildFilesViaAddIterable(CliGuy $I) - { - $processList = ['cats', 'dogs', 'sheep', 'fish', 'horses', 'cows']; - - $collection = $I->collectionBuilder(); - $result = $collection - ->taskFilesystemStack() - ->mkdir('stuff') - ->taskForEach($processList) - ->withBuilder( - function ($builder, $key, $value) { - return $builder - ->taskFilesystemStack() - ->touch("stuff/{$value}.txt"); - } - ) - ->run(); - - $I->assertEquals(0, $result->getExitCode(), $result->getMessage()); - - $I->seeFileFound('stuff/cats.txt'); - $I->seeFileFound('stuff/dogs.txt'); - $I->seeFileFound('stuff/sheep.txt'); - $I->seeFileFound('stuff/fish.txt'); - $I->seeFileFound('stuff/horses.txt'); - $I->seeFileFound('stuff/cows.txt'); - } - - public function toRollbackANestedCollection(CliGuy $I) - { - // This is like the previous test, toRunMultipleTasksViaACollectionBuilder, - // except we force an error at the end, and confirm that the - // rollback function is called. - $collection = $I->collectionBuilder(); - $collection->taskFilesystemStack() - ->mkdir('j') - ->touch('j/j.txt') - ->rollback( - $I->taskDeleteDir('j') - ) - ->taskFilesystemStack() - ->mkdir('j/k') - ->touch('j/k/k.txt') - ->taskFilesystemStack() - ->mkdir('j/k/m') - ->touch('j/k/m/m.txt'); - - $result = $I->collectionBuilder() - ->taskFilesystemStack() - ->mkdir('q') - ->touch('q/q.txt') - ->addTask($collection) - ->taskCopyDir(['doesNotExist' => 'copied']) - ->run(); - - $I->assertEquals(1, $result->getExitCode(), $result->getMessage()); - - // All of the tasks created by the builder should be added - // to a collection, and `run()` should run them all. - $I->seeFileFound('q/q.txt'); - $I->dontSeeFileFound('j/j.txt'); - $I->dontSeeFileFound('j/k/k.txt'); - $I->dontSeeFileFound('j/k/m/m.txt'); - } - - public function toCreateDirViaCollection(CliGuy $I) - { - // Set up a collection to add tasks to - $collection = $I->collectionBuilder(); - - // Set up a filesystem stack - $collection->taskFilesystemStack() - ->mkdir('log') - ->touch('log/error.txt'); - - // FilesystemStack has not run yet, so file should not be found. - $I->dontSeeFileFound('log/error.txt'); - - // Run the task collection; now the files should be present - $collection->run(); - $I->seeFileFound('log/error.txt'); - $I->seeDirFound('log'); - } - - public function toUseATmpDirAndConfirmItIsDeleted(CliGuy $I) - { - // Set up a collection to add tasks to - $collection = $I->collectionBuilder(); - - // Get a temporary directory to work in. Note that we get a - // name back, but the directory is not created until the task - // runs. This technically is not thread-safe, but we create - // a random name, so it is unlikely to conflict. - $tmpPath = $collection->tmpDir(); - - // Set up a filesystem stack, but use a collection to defer execution - $collection->taskFilesystemStack() - ->mkdir("$tmpPath/tmp") - ->touch("$tmpPath/tmp/error.txt") - ->rename("$tmpPath/tmp", "$tmpPath/log"); - - // Copy our tmp directory to a location that is not transient - $collection->taskCopyDir([$tmpPath => 'copied']); - - // FilesystemStack has not run yet, so no files should be found. - $I->dontSeeFileFound("$tmpPath/tmp/error.txt"); - $I->dontSeeFileFound("$tmpPath/log/error.txt"); - $I->dontSeeFileFound('copied/log/error.txt'); - - // Run the task collection - $result = $collection->run(); - $I->assertEquals(0, $result->getExitCode(), $result->getMessage()); - $I->assertEquals($result['path'], $tmpPath, "Tmp dir result matches accessor."); - - // The file 'error.txt' should have been copied into the "copied" dir. - // This also proves that the tmp directory was created. - $I->seeFileFound('copied/log/error.txt'); - // $tmpPath should be deleted after $collection->run() completes. - $I->dontSeeFileFound("$tmpPath/tmp/error.txt"); - $I->dontSeeFileFound("$tmpPath/log/error.txt"); - $I->dontSeeFileFound("$tmpPath"); - } - - public function toUseATmpDirAndChangeWorkingDirectory(CliGuy $I) - { - // Set up a collection to add tasks to - $collection = $I->collectionBuilder(); - - $cwd = getcwd(); - - $tmpPath = $collection->taskTmpDir() - ->cwd() - ->getPath(); - - // Set up a filesystem stack, but use a collection to defer execution. - // Note that since we used 'cwd()' above, the relative file paths - // used below will be inside the temporary directory. - $collection->taskFilesystemStack() - ->mkdir("log") - ->touch("log/error.txt"); - - // Copy our tmp directory to a location that is not transient - $collection->taskCopyDir(['log' => "$cwd/copied2"]); - - // FilesystemStack has not run yet, so no files should be found. - $I->dontSeeFileFound("$tmpPath/log/error.txt"); - $I->dontSeeFileFound('$cwd/copied2/log/error.txt'); - - // Run the task collection - $result = $collection->run(); - $I->assertEquals(0, $result->getExitCode(), $result->getMessage()); - - // The file 'error.txt' should have been copied into the "copied" dir - $I->seeFileFound("$cwd/copied2/error.txt"); - // $tmpPath should be deleted after $collection->run() completes. - $I->dontSeeFileFound("$tmpPath/log/error.txt"); - // Make sure that 'log' was created in the temporary directory, not - // at the current working directory. - $I->dontSeeFileFound("$cwd/log/error.txt"); - - // Make sure that our working directory was restored. - $finalWorkingDir = getcwd(); - $I->assertEquals($cwd, $finalWorkingDir); - } - - public function toCreateATmpFileAndConfirmItIsDeleted(CliGuy $I) - { - // Set up a collection to add tasks to - $collection = $I->collectionBuilder(); - - // Write to a temporary file. Note that we can get the path - // to the tempoary file that will be created, even though the - // the file is not created until the task collecction runs. - $tmpPath = $collection->taskTmpFile('tmp', '.txt') - ->line("This is a test file") - ->getPath(); - - // Copy our tmp directory to a location that is not transient - $collection->taskFilesystemStack() - ->copy($tmpPath, 'copied.txt'); - - // FilesystemStack has not run yet, so no files should be found. - $I->dontSeeFileFound("$tmpPath"); - $I->dontSeeFileFound('copied.txt'); - - // Run the task collection - $result = $collection->run(); - $I->assertEquals(0, $result->getExitCode(), $result->getMessage()); - - // The file 'copied.txt' should have been copied from the tmp file - $I->seeFileFound('copied.txt'); - // $tmpPath should be deleted after $collection->run() completes. - $I->dontSeeFileFound("$tmpPath"); - } - - public function toUseATmpDirWithAlternateSyntax(CliGuy $I) - { - $collection = $I->collectionBuilder(); - - // This test is equivalent to toUseATmpDirAndConfirmItIsDeleted, - // but uses a different technique to create a collection of tasks. - $tmpPath = $collection->tmpDir(); - - // Now, rather than creating the tasks with a collection builder, - // which automatically adds the tasks to the collection as they are - // created, we will instead create them individually and then add - // them to the collection via the addTaskList() method. - $result = $collection->addTaskList( - [ - $I->taskFilesystemStack()->mkdir("$tmpPath/log")->touch("$tmpPath/log/error.txt"), - $I->taskCopyDir([$tmpPath => 'copied3']), - ] - )->run(); - - // The results of this operation should be the same. - $I->assertEquals(0, $result->getExitCode(), $result->getMessage()); - $I->seeFileFound('copied3/log/error.txt'); - $I->dontSeeFileFound("$tmpPath/log/error.txt"); - } - - public function toCreateATmpDirWithoutACollection(CliGuy $I) - { - // Create a temporary directory, using our function name as - // the prefix for the directory name. - $tmpDirTask = $I->taskTmpDir(__FUNCTION__); - $tmpPath = $tmpDirTask->getPath(); - $I->dontSeeFileFound($tmpPath); - $tmpDirTask->run(); - $I->seeDirFound($tmpPath); - // Creating a temporary directory without a task collection will - // cause the temporary directory to be deleted when the program - // terminates. We can force it to clean up sooner by calling - // TransientManager::complete(); note that this deletes ALL global tmp - // directories, so this is not thread-safe! Useful in tests, though. - Temporary::complete(); - $I->dontSeeFileFound($tmpPath); - } - - public function toCreateATmpDirUsingShortcut(CliGuy $I) - { - // Create a temporary directory, using our function name as - // the prefix for the directory name. - $tmpPath = $I->shortcutTmpDir(__FUNCTION__); - $I->seeDirFound($tmpPath); - // Creating a temporary directory without a task collection will - // cause the temporary directory to be deleted when the program - // terminates. We can force it to clean up sooner by calling - // TransientManager::complete(); note that this deletes ALL global tmp - // directories, so this is not thread-safe! Useful in tests, though. - Temporary::complete(); - $I->dontSeeFileFound($tmpPath); - } - - public function toThrowAnExceptionAndConfirmItIsCaught(CliGuy $I) - { - $collection = $I->getContainer()->get('collection'); - - $collection->addCode( - function () { - throw new \RuntimeException('Error'); - } - ); - $result = $collection->run(); - $I->assertEquals('Error', $result->getMessage()); - $I->assertEquals(1, $result->getExitCode()); - } -} diff --git a/lib/composer/vendor/consolidation/robo/tests/cli/ConcatCept.php b/lib/composer/vendor/consolidation/robo/tests/cli/ConcatCept.php deleted file mode 100644 index d68798a5d..000000000 --- a/lib/composer/vendor/consolidation/robo/tests/cli/ConcatCept.php +++ /dev/null @@ -1,11 +0,0 @@ -wantTo('concat files using Concat Task'); -$I->amInPath(codecept_data_dir() . 'sandbox'); -$I->taskConcat(['a.txt', 'b.txt']) - ->to('merged.txt') - ->run(); -$I->seeFileFound('merged.txt'); -$I->seeFileContentsEqual("A\nB\n"); - diff --git a/lib/composer/vendor/consolidation/robo/tests/cli/CopyDirCept.php b/lib/composer/vendor/consolidation/robo/tests/cli/CopyDirCept.php deleted file mode 100644 index 1022ca2b3..000000000 --- a/lib/composer/vendor/consolidation/robo/tests/cli/CopyDirCept.php +++ /dev/null @@ -1,10 +0,0 @@ -wantTo('copy dir with CopyDir task'); -$I->amInPath(codecept_data_dir().'sandbox'); -$I->taskCopyDir(['box' => 'bin']) - ->run(); -$I->seeDirFound('bin'); -$I->seeFileFound('robo.txt', 'bin'); - diff --git a/lib/composer/vendor/consolidation/robo/tests/cli/CopyDirOverwritesFilesCept.php b/lib/composer/vendor/consolidation/robo/tests/cli/CopyDirOverwritesFilesCept.php deleted file mode 100644 index 03b02394b..000000000 --- a/lib/composer/vendor/consolidation/robo/tests/cli/CopyDirOverwritesFilesCept.php +++ /dev/null @@ -1,12 +0,0 @@ -wantTo('overwrite a file with CopyDir task'); -$I->amInPath(codecept_data_dir() . 'sandbox'); -$I->seeDirFound('some'); -$I->seeFileFound('existing_file', 'some'); -$I->taskCopyDir(['some' => 'some_destination']) - ->run(); -$I->seeFileFound('existing_file', 'some_destination/deeply'); -$I->openFile('some_destination/deeply/existing_file'); -$I->seeInThisFile('some existing file'); diff --git a/lib/composer/vendor/consolidation/robo/tests/cli/CopyDirRecursiveCept.php b/lib/composer/vendor/consolidation/robo/tests/cli/CopyDirRecursiveCept.php deleted file mode 100644 index a793faa23..000000000 --- a/lib/composer/vendor/consolidation/robo/tests/cli/CopyDirRecursiveCept.php +++ /dev/null @@ -1,11 +0,0 @@ -wantTo('copy dir recursively with CopyDir task'); -$I->amInPath(codecept_data_dir() . 'sandbox'); -$I->seeDirFound('some/deeply/nested'); -$I->seeFileFound('structu.re', 'some/deeply/nested'); -$I->taskCopyDir(['some/deeply' => 'some_destination/deeply']) - ->run(); -$I->seeDirFound('some_destination/deeply/nested'); -$I->seeFileFound('structu.re', 'some_destination/deeply/nested'); diff --git a/lib/composer/vendor/consolidation/robo/tests/cli/DeleteDirCept.php b/lib/composer/vendor/consolidation/robo/tests/cli/DeleteDirCept.php deleted file mode 100644 index ead565ff7..000000000 --- a/lib/composer/vendor/consolidation/robo/tests/cli/DeleteDirCept.php +++ /dev/null @@ -1,11 +0,0 @@ -wantTo('delete dir with DeleteDirTask'); -$I->amInPath(codecept_data_dir()); -$I->seeFileFound('robo.txt', 'sandbox'); -$I->taskDeleteDir(['sandbox/box']) - ->run(); -$I->dontSeeFileFound('box', 'sandbox'); -$I->dontSeeFileFound('robo.txt', 'sandbox'); diff --git a/lib/composer/vendor/consolidation/robo/tests/cli/ExecCest.php b/lib/composer/vendor/consolidation/robo/tests/cli/ExecCest.php deleted file mode 100644 index b87692463..000000000 --- a/lib/composer/vendor/consolidation/robo/tests/cli/ExecCest.php +++ /dev/null @@ -1,13 +0,0 @@ -taskExec($command)->run(); - verify($res->getMessage())->contains('src'); - verify($res->getMessage())->contains('codeception.yml'); - } -} diff --git a/lib/composer/vendor/consolidation/robo/tests/cli/FilesystemStackCest.php b/lib/composer/vendor/consolidation/robo/tests/cli/FilesystemStackCest.php deleted file mode 100644 index b9e680438..000000000 --- a/lib/composer/vendor/consolidation/robo/tests/cli/FilesystemStackCest.php +++ /dev/null @@ -1,50 +0,0 @@ -amInPath(codecept_data_dir().'sandbox'); - } - - public function toCreateDir(CliGuy $I) - { - $I->taskFilesystemStack() - ->mkdir('log') - ->touch('log/error.txt') - ->run(); - $I->seeFileFound('log/error.txt'); - } - - public function toDeleteFile(CliGuy $I) - { - $I->taskFilesystemStack() - ->stopOnFail() - ->remove('a.txt') - ->run(); - $I->dontSeeFileFound('a.txt'); - } - - public function toTestCrossVolumeRename(CliGuy $I) - { - $fsStack = $I->taskFilesystemStack() - ->mkdir('log') - ->touch('log/error.txt'); - $fsStack->run(); - - // We can't force _rename to run the cross-volume - // code path, so we will directly call the protected - // method crossVolumeRename to test to ensure it works. - // We will get a reference to it via reflection, set - // the reflected method object to public, and then - // call it via reflection. - $class = new ReflectionClass('\Robo\Task\Filesystem\FilesystemStack'); - $method = $class->getMethod('crossVolumeRename'); - $method->setAccessible(true); - $actualFsStackTask = $fsStack->getCollectionBuilderCurrentTask(); - $method->invokeArgs($actualFsStackTask, ['log', 'logfiles']); - - $I->dontSeeFileFound('log/error.txt'); - $I->seeFileFound('logfiles/error.txt'); - } -} diff --git a/lib/composer/vendor/consolidation/robo/tests/cli/FlattenDirCept.php b/lib/composer/vendor/consolidation/robo/tests/cli/FlattenDirCept.php deleted file mode 100644 index fbb27a56e..000000000 --- a/lib/composer/vendor/consolidation/robo/tests/cli/FlattenDirCept.php +++ /dev/null @@ -1,14 +0,0 @@ -wantTo('flatten dir with FlattenDir task'); -$I->amInPath(codecept_data_dir().'sandbox'); -$I->taskFlattenDir([ - 'some/deeply/nested/*.re' => 'flattened', - '*.txt' => 'flattened' - ]) - ->run(); -$I->seeDirFound('flattened'); -$I->seeFileFound('structu.re', 'flattened'); -$I->seeFileFound('a.txt', 'flattened'); -$I->seeFileFound('b.txt', 'flattened'); diff --git a/lib/composer/vendor/consolidation/robo/tests/cli/FlattenDirParentsCept.php b/lib/composer/vendor/consolidation/robo/tests/cli/FlattenDirParentsCept.php deleted file mode 100644 index d1d0504d9..000000000 --- a/lib/composer/vendor/consolidation/robo/tests/cli/FlattenDirParentsCept.php +++ /dev/null @@ -1,12 +0,0 @@ -wantTo('flatten dir with FlattenDir task including parents'); -$I->amInPath(codecept_data_dir().'sandbox'); -$I->taskFlattenDir('some/deeply/nested/*.re') - ->includeParents(array(1,1)) - ->parentDir('some') - ->to('flattened') - ->run(); -$I->seeDirFound('flattened/deeply/nested'); -$I->seeFileFound('structu.re', 'flattened/deeply/nested'); diff --git a/lib/composer/vendor/consolidation/robo/tests/cli/GenTaskCest.php b/lib/composer/vendor/consolidation/robo/tests/cli/GenTaskCest.php deleted file mode 100644 index ce8928743..000000000 --- a/lib/composer/vendor/consolidation/robo/tests/cli/GenTaskCest.php +++ /dev/null @@ -1,11 +0,0 @@ -taskGenTask('Symfony\Component\Filesystem\Filesystem', 'FilesystemStack')->run(); - verify($result->getMessage())->contains('protected function _chgrp($files, $group, $recursive = false)'); - } -} diff --git a/lib/composer/vendor/consolidation/robo/tests/cli/GenerateMarkdownDocCest.php b/lib/composer/vendor/consolidation/robo/tests/cli/GenerateMarkdownDocCest.php deleted file mode 100644 index de2b40e45..000000000 --- a/lib/composer/vendor/consolidation/robo/tests/cli/GenerateMarkdownDocCest.php +++ /dev/null @@ -1,86 +0,0 @@ -amInPath(codecept_data_dir().'sandbox'); - } - - public function toGenerateDocumentation(CliGuy $I) - { - $sourceFile = codecept_data_dir() . 'TestedRoboTask.php'; - $I->seeFileFound($sourceFile); - include $sourceFile; - $I->assertTrue(class_exists('TestedRoboTask')); - - $collection = $I->collectionBuilder(); - $taskGenerator = $collection->taskGenDoc("TestedRoboTask.md"); - $taskGenerator->filterClasses(function (\ReflectionClass $r) { - return !($r->isAbstract() || $r->isTrait()) && $r->implementsInterface('Robo\Contract\TaskInterface'); - })->prepend("# TestedRoboTask Tasks"); - $taskGenerator->docClass('TestedRoboTask'); - - $taskGenerator->filterMethods( - function (\ReflectionMethod $m) { - if ($m->isConstructor() || $m->isDestructor() || $m->isStatic()) { - return false; - } - $undocumentedMethods = - [ - '', - 'run', - '__call', - 'inflect', - 'injectDependencies', - 'getCommand', - 'getPrinted', - 'getConfig', - 'setConfig', - 'logger', - 'setLogger', - 'setProgressIndicator', - 'progressIndicatorSteps', - 'setBuilder', - 'getBuilder', - 'collectionBuilder', - ]; - return !in_array($m->name, $undocumentedMethods) && $m->isPublic(); // methods are not documented - } - )->processClassSignature( - function ($c) { - return "## " . preg_replace('~Task$~', '', $c->getShortName()) . "\n"; - } - )->processClassDocBlock( - function (\ReflectionClass $c, $doc) { - $doc = preg_replace('~@method .*?(.*?)\)~', '* `$1)` ', $doc); - $doc = str_replace('\\'.$c->name, '', $doc); - return $doc; - } - )->processMethodSignature( - function (\ReflectionMethod $m, $text) { - return str_replace('#### *public* ', '* `', $text) . '`'; - } - )->processMethodDocBlock( - function (\ReflectionMethod $m, $text) { - - return $text ? ' ' . trim(strtok($text, "\n"), "\n") : ''; - } - ); - - $collection->run(); - $I->seeFileFound('TestedRoboTask.md'); - - $contents = file_get_contents('TestedRoboTask.md'); - $I->assertContains('A test task file. Used for testig documentation generation.', $contents); - $I->assertContains('taskTestedRoboTask', $contents); - $I->assertContains('Set the destination file', $contents); - } -} diff --git a/lib/composer/vendor/consolidation/robo/tests/cli/PackExtractCept.php b/lib/composer/vendor/consolidation/robo/tests/cli/PackExtractCept.php deleted file mode 100644 index a280c0cb3..000000000 --- a/lib/composer/vendor/consolidation/robo/tests/cli/PackExtractCept.php +++ /dev/null @@ -1,57 +0,0 @@ -wantTo('archive directory and then extract it again with Archive and Extract tasks'); -$I->amInPath(codecept_data_dir().'sandbox'); -$I->seeDirFound('some/deeply/nested'); -$I->seeFileFound('structu.re', 'some/deeply/nested'); -$I->seeFileFound('existing_file', 'some/deeply'); - -// Test a bunch of archive types that we support -foreach (['zip', 'tar', 'tar.gz', 'tar.bz2', 'tgz'] as $archiveType) { - // First, take everything from the folder 'some/deeply' and make - // an archive for it located in 'deep' - $I->taskPack("deeply.$archiveType") - ->add(['deep' => 'some/deeply']) - ->run(); - $I->seeFileFound("deeply.$archiveType"); - // We are next going to extract the archive we created, this time - // putting it into a folder called "extracted-$archiveType" (different - // for each archive type we test). We rely on the default behavior - // of our extractor to remove the top-level directory in the archive - // ("deeply"). - $I->taskExtract("deeply.$archiveType") - ->to("extracted-$archiveType") - ->preserveTopDirectory(false) // this is the default - ->run(); - $I->seeDirFound("extracted-$archiveType"); - $I->seeDirFound("extracted-$archiveType/nested"); - $I->seeFileFound('structu.re', "extracted-$archiveType/nested"); - // Next, we'll extract the same archive again, this time preserving - // the top-level folder. - $I->taskExtract("deeply.$archiveType") - ->to("preserved-$archiveType") - ->preserveTopDirectory() - ->run(); - $I->seeDirFound("preserved-$archiveType"); - $I->seeDirFound("preserved-$archiveType/deep/nested"); - $I->seeFileFound('structu.re', "preserved-$archiveType/deep/nested"); - // Make another archive, this time composed of fanciful locations - $I->taskPack("composed.$archiveType") - ->add(['a/b/existing_file' => 'some/deeply/existing_file']) - ->add(['x/y/z/structu.re' => 'some/deeply/nested/structu.re']) - ->run(); - $I->seeFileFound("composed.$archiveType"); - // Extract our composed archive, and see if the resulting file - // structure matches expectations. - $I->taskExtract("composed.$archiveType") - ->to("decomposed-$archiveType") - ->preserveTopDirectory() - ->run(); - $I->seeDirFound("decomposed-$archiveType"); - $I->seeDirFound("decomposed-$archiveType/x/y/z"); - $I->seeFileFound('structu.re', "decomposed-$archiveType/x/y/z"); - $I->seeDirFound("decomposed-$archiveType/a/b"); - $I->seeFileFound('existing_file', "decomposed-$archiveType/a/b"); -} diff --git a/lib/composer/vendor/consolidation/robo/tests/cli/ShortcutsCest.php b/lib/composer/vendor/consolidation/robo/tests/cli/ShortcutsCest.php deleted file mode 100644 index addfb27ca..000000000 --- a/lib/composer/vendor/consolidation/robo/tests/cli/ShortcutsCest.php +++ /dev/null @@ -1,25 +0,0 @@ -amInPath(codecept_data_dir('sandbox')); - } - - public function useTheCopyDirShortcut(CliGuy $I) - { - $I->wantTo('copy dir with _copyDir shortcut'); - $I->shortcutCopyDir('box', 'bin'); - $I->seeDirFound('bin'); - $I->seeFileFound('robo.txt', 'bin'); - } - - public function useTheMirrorDirShortcut(CliGuy $I) - { - $I->wantTo('mirror dir with _mirrorDir shortcut'); - $I->shortcutMirrorDir('box', 'bin'); - $I->seeDirFound('bin'); - $I->seeFileFound('robo.txt', 'bin'); - } -} diff --git a/lib/composer/vendor/consolidation/robo/tests/cli/SimulatedCest.php b/lib/composer/vendor/consolidation/robo/tests/cli/SimulatedCest.php deleted file mode 100644 index fde6cc79e..000000000 --- a/lib/composer/vendor/consolidation/robo/tests/cli/SimulatedCest.php +++ /dev/null @@ -1,34 +0,0 @@ -amInPath(codecept_data_dir().'sandbox'); - } - - public function toSimulateDirCreation(CliGuy $I) - { - // Set up a collection to add tasks to - $collection = $I->collectionBuilder(); - $collection->simulated(true); - - // Set up a filesystem stack - $collection->taskFilesystemStack() - ->mkdir('simulatedir') - ->touch('simulatedir/error.txt'); - - // Run the task collection; now the files should be present - $collection->run(); - // Nothing should be created in simulated mode - $I->dontSeeFileFound('simulatedir/error.txt'); - $I->seeInOutput('[Simulator] Simulating Filesystem\FilesystemStack()'); - } -} diff --git a/lib/composer/vendor/consolidation/robo/tests/cli/WriteFileCest.php b/lib/composer/vendor/consolidation/robo/tests/cli/WriteFileCest.php deleted file mode 100644 index b9ede453a..000000000 --- a/lib/composer/vendor/consolidation/robo/tests/cli/WriteFileCest.php +++ /dev/null @@ -1,111 +0,0 @@ -amInPath(codecept_data_dir('sandbox')); - } - - public function writeFewLines(CliGuy $I) - { - $I->wantTo('write lines with WriteToFile task'); - $I->taskWriteToFile('blogpost.md') - ->line('****') - ->line('hello world') - ->line('****') - ->run(); - $I->seeFileFound('blogpost.md'); - $I->seeFileContentsEqual(<<taskWriteToFile('a.txt') - ->append() - ->line('hello world') - ->run(); - $I->seeFileFound('a.txt'); - $I->seeFileContentsEqual(<<taskWriteToFile('a.txt') - ->append(); - $I->assertEquals(false, $writeTask->wouldChange(), "No changes to test file."); - $writeTask->line('hello world'); - $I->assertEquals(true, $writeTask->wouldChange(), "Test file would change."); - } - - public function insertFile(CliGuy $I) - { - $I->taskWriteToFile('a.txt') - ->line('****') - ->textFromFile('b.txt') - ->line("C") - ->run(); - $I->seeFileFound('a.txt'); - $I->seeFileContentsEqual(<<wantTo('append lines with WriteToFile task, but only if pattern does not match'); - $I->taskWriteToFile('blogpost.md') - ->line('****') - ->line('hello world') - ->line('****') - ->appendUnlessMatches('/hello/', 'Should not add this') - ->appendUnlessMatches('/goodbye/', 'Should add this') - ->appendIfMatches('/hello/', ' and should also add this') - ->appendIfMatches('/goodbye/', ' but should not add this') - ->appendIfMatches('/should/', '!') - ->run(); - $I->seeFileFound('blogpost.md'); - $I->seeFileContentsEqual(<<taskReplaceInFile('a.txt') - ->from('A') - ->to('B') - ->run(); - $I->seeFileFound('a.txt'); - $I->seeFileContentsEqual('B'); - - } - - public function replaceMultipleInFile(CliGuy $I) - { - $I->taskReplaceInFile('box/robo.txt') - ->from(array('HELLO', 'ROBO')) - ->to(array('Hello ', 'robo.li!')) - ->run(); - $I->seeFileFound('box/robo.txt'); - $I->seeFileContentsEqual('Hello robo.li!'); - } -} - diff --git a/lib/composer/vendor/consolidation/robo/tests/cli/_bootstrap.php b/lib/composer/vendor/consolidation/robo/tests/cli/_bootstrap.php deleted file mode 100644 index c481d9b48..000000000 --- a/lib/composer/vendor/consolidation/robo/tests/cli/_bootstrap.php +++ /dev/null @@ -1,9 +0,0 @@ -say("The parameters passed are:\n" . var_export($a, true)); - } - - /** - * Demonstrate use of SymfonyStyle - */ - public function testSymfonyStyle() - { - $this->io()->title('My Title'); - $this->io()->section('Section 1'); - $this->io()->text('Some text in section one.'); - $this->io()->comment('This is just an example of different styles.'); - $this->io()->section('Section 2'); - $this->io()->text('Some text in section two.'); - } - - /** - * @hook command-event test:command-event - */ - public function hookCommandEvent() - { - $this->io()->text('This is the command-event hook for the test:command-event command.'); - } - - public function testCommandEvent() - { - $this->io()->text('This is the main method for the test:command-event command.'); - } - - /** - * @hook post-command test:command-event - */ - public function hookPostCommand() - { - $this->io()->text('This is the post-command hook for the test:command-event command.'); - } - - /** - * Demonstrate Robo error output and command failure. - */ - public function testError() - { - return $this->taskExec('ls xyzzy' . date('U'))->dir('/tmp')->run(); - } - - /** - * Demonstrate what happens when a command or a task - * throws an exception. Note that typically, Robo commands - * should return Result objects rather than throw exceptions. - */ - public function testException($options = ['task' => false]) - { - if (!$options['task']) { - throw new \RuntimeException('Command failed with an exception.'); - } - throw new \RuntimeException('Task failed with an exception.'); - } - - public function testStopOnFail() - { - $this->stopOnFail(); - $this->collectionBuilder() - ->taskExec('ls xyzzy' . date('U')) - ->dir('/tmp') - ->run(); - - // stopOnFail() should cause the failed task to throw an exception, - // so we should not get here, and instead exit the program with a - // non-zero status. - return 0; - } - - public function testVerbosity() - { - $this->output()->writeln('This command will print more information at higher verbosity levels.'); - $this->output()->writeln('Try running with -v, -vv or -vvv'); - $this->output()->writeln('The current verbosity level is ' . $this->output()->getVerbosity()); - $this->output()->writeln('This is a verbose message (-v).', OutputInterface::VERBOSITY_VERBOSE); - $this->output()->writeln('This is a very verbose message (-vv).', OutputInterface::VERBOSITY_VERY_VERBOSE); - $this->output()->writeln('This is a debug message (-vvv).', OutputInterface::VERBOSITY_DEBUG); - $this->logger->warning('This is a warning log message.'); - $this->logger->notice('This is a notice log message.'); - $this->logger->debug('This is a debug log message.'); - } - - public function testDeploy() - { - $gitTask = $this->taskGitStack() - ->pull(); - - $this->taskSshExec('mysite.com') - ->remoteDir('/var/www/somesite') - ->exec($gitTask) - ->run(); - } -} diff --git a/lib/composer/vendor/consolidation/robo/tests/src/Traits/Common/CommandArgumentsHost.php b/lib/composer/vendor/consolidation/robo/tests/src/Traits/Common/CommandArgumentsHost.php deleted file mode 100644 index 363764dcd..000000000 --- a/lib/composer/vendor/consolidation/robo/tests/src/Traits/Common/CommandArgumentsHost.php +++ /dev/null @@ -1,18 +0,0 @@ -arguments; - } -} diff --git a/lib/composer/vendor/consolidation/robo/tests/unit.suite.yml b/lib/composer/vendor/consolidation/robo/tests/unit.suite.yml deleted file mode 100644 index bb94af02a..000000000 --- a/lib/composer/vendor/consolidation/robo/tests/unit.suite.yml +++ /dev/null @@ -1,8 +0,0 @@ -# Codeception Test Suite Configuration - -# suite for unit (internal) tests. -# RUN `build` COMMAND AFTER ADDING/REMOVING MODULES. - -class_name: CodeGuy -modules: - enabled: [Asserts, CodeHelper] diff --git a/lib/composer/vendor/consolidation/robo/tests/unit/ApplicationTest.php b/lib/composer/vendor/consolidation/robo/tests/unit/ApplicationTest.php deleted file mode 100644 index bdb6c90a9..000000000 --- a/lib/composer/vendor/consolidation/robo/tests/unit/ApplicationTest.php +++ /dev/null @@ -1,140 +0,0 @@ -app = $container->get('application'); - $config = $container->get('config'); - $this->commandFactory = $container->get('commandFactory'); - $this->roboCommandFileInstance = new TestedRoboFile; - $builder = $container->get('collectionBuilder', [$this->roboCommandFileInstance]); - $this->roboCommandFileInstance->setBuilder($builder); - $commandList = $this->commandFactory->createCommandsFromClass($this->roboCommandFileInstance); - foreach ($commandList as $command) { - $this->app->add($command); - } - } - - public function testTaskAccessor() - { - // Get a reference to the protected 'task' method, as - // this is normally only callable by methods of the - // commandfile instance. - $method = new ReflectionMethod($this->roboCommandFileInstance, 'task'); - $method->setAccessible(true); - $collectionBuilder = $method->invoke($this->roboCommandFileInstance, 'Robo\Task\Base\Exec', ['ls']); - verify(get_class($collectionBuilder))->equals('Robo\Collection\CollectionBuilder'); - $task = $collectionBuilder->getCollectionBuilderCurrentTask(); - verify(get_class($task))->equals('Robo\Task\Base\Exec'); - verify(get_class($task))->equals('Robo\Task\Base\Exec'); - } - - public function testAllowEmptyValuesAsDefaultsToOptionalOptions() - { - $command = $this->createCommand('hello'); - - $yell = $command->getDefinition()->getOption('yell'); - - verify($yell->isValueOptional()) - ->equals(false); - verify($yell->getDefault()) - ->equals(false); - - $to = $command->getDefinition()->getOption('to'); - - verify($to->isValueOptional()) - ->equals(true); - verify($to->getDefault()) - ->equals(null); - } - - public function testCommandDocumentation() - { - $command = $this->createCommand('fibonacci'); - - verify($command->getDescription()) - ->equals('Calculate the fibonacci sequence between two numbers.'); - } - - public function testCommandCompactDocumentation() - { - $command = $this->createCommand('compact'); - - verify($command->getDescription()) - ->equals('Compact doc comment'); - } - - public function testCommandArgumentDocumentation() - { - $command = $this->createCommand('fibonacci'); - - $start = $command->getDefinition()->getArgument('start'); - - verify($start->getDescription()) - ->equals('Number to start from'); - - $steps = $command->getDefinition()->getArgument('steps'); - - verify($steps->getDescription()) - ->equals('Number of steps to perform'); - } - - public function testCommandOptionDocumentation() - { - $command = $this->createCommand('fibonacci'); - - $graphic = $command->getDefinition()->getOption('graphic'); - - verify($graphic->getDescription()) - ->equals('Display the sequence graphically using cube representation'); - } - - public function testCommandHelpDocumentation() - { - $command = $this->createCommand('fibonacci'); - - verify($command->getHelp()) - ->contains('+----+---+'); - } - - public function testCommandNaming() - { - $this->assertNotNull($this->app->find('generate:user-avatar')); - } - - protected function createCommand($name) - { - $commandInfo = new CommandInfo($this->roboCommandFileInstance, $name); - return $this->commandFactory->createCommand($commandInfo, $this->roboCommandFileInstance); - } -} diff --git a/lib/composer/vendor/consolidation/robo/tests/unit/Common/CommandArgumentsTest.php b/lib/composer/vendor/consolidation/robo/tests/unit/Common/CommandArgumentsTest.php deleted file mode 100644 index c30672f16..000000000 --- a/lib/composer/vendor/consolidation/robo/tests/unit/Common/CommandArgumentsTest.php +++ /dev/null @@ -1,86 +0,0 @@ - [ - ' ', - [], - ], - 'empty string' => [ - " ''", - [''], - ], - 'space' => [ - " ' '", - [' '], - ], - 'no escape - a' => [ - " a", - ['a'], - ], - 'no escape - A' => [ - " A", - ['A'], - ], - 'no escape - 0' => [ - " 0", - ['0'], - ], - 'no escape - --' => [ - " --", - ['--'], - ], - 'no escape - @_~.' => [ - " @_~.", - ['@_~.'], - ], - '$' => [ - " 'a\$b'", - ['a$b'], - ], - '*' => [ - " 'a*b'", - ['a*b'], - ], - 'multi' => [ - " '' a '\$PATH'", - ['', 'a', '$PATH'], - ], - ]; - } - - /** - * @dataProvider casesArgs - * - * @covers ::args - * - * @param string $expected - * @param array $args - */ - public function testArgs($expected, $args) - { - $commandArguments = new CommandArgumentsHost(); - $commandArguments->args($args); - $this->guy->assertEquals($expected, $commandArguments->getArguments()); - - if ($args) { - $commandArguments = new CommandArgumentsHost(); - call_user_func_array([$commandArguments, 'args'], $args); - $this->guy->assertEquals($expected, $commandArguments->getArguments()); - } - } -} diff --git a/lib/composer/vendor/consolidation/robo/tests/unit/Common/ResourceExistenceChecker.php b/lib/composer/vendor/consolidation/robo/tests/unit/Common/ResourceExistenceChecker.php deleted file mode 100644 index e45f1df0c..000000000 --- a/lib/composer/vendor/consolidation/robo/tests/unit/Common/ResourceExistenceChecker.php +++ /dev/null @@ -1,80 +0,0 @@ -apigen = test::double('Robo\Task\ApiGen\ApiGen', [ - 'executeCommand' => null, - 'output' => new \Symfony\Component\Console\Output\NullOutput() - ]); - if (!defined('DS')) { - define('DS', DIRECTORY_SEPARATOR); - } - $this->testDir = __DIR__ . '..' . DS . '..' . DS . 'data' . DS; - $this->testFile = $this->testDir . 'dump.sql'; - } - - /** - * testCheckResources - */ - public function testCheckResources() - { - $this->assertTrue($this->checkResources($this->testDir, 'dir')); - $this->assertTrue($this->checkResources([ - $this->testDir, - $this->testFile - ])); - } - - /** - * @expectException \InvalidArgumentException - */ - public function testCheckResourcesException() - { - $this->checkResources('does not exist', 'invalid type'); - } - - /** - * testCheckResource - */ - public function testCheckResource() - { - $this->assertTrue($this->checkResource($this->testDir, 'dir')); - $this->assertTrue($this->checkResource($this->testDir, 'fileAndDir')); - $this->assertTrue($this->checkResource($this->testFile, 'file')); - $this->assertTrue($this->checkResource($this->testFile, 'fileAndDir')); - - $this->assertFalse($this->checkResource('does-not-exist', 'dir')); - $this->assertFalse($this->checkResource('does-not-exist', 'fileAndDir')); - $this->assertFalse($this->checkResource('does-not-exist', 'file')); - $this->assertFalse($this->checkResource('does-not-exist', 'fileAndDir')); - } - - /** - * testIsDir - */ - public function testIsDir() - { - $this->assertTrue($this->isDir($this->testDir)); - $this->assertFalse($this->isDir('does-not-exist')); - } - - /** - * testIsFile - */ - public function testIsFile() - { - $this->assertTrue($this->isFile($this->testFile)); - $this->assertFalse($this->isFile($this->testDir . 'does-not-exist')); - } -} diff --git a/lib/composer/vendor/consolidation/robo/tests/unit/ConfigurationTest.php b/lib/composer/vendor/consolidation/robo/tests/unit/ConfigurationTest.php deleted file mode 100644 index 7c29ea4f2..000000000 --- a/lib/composer/vendor/consolidation/robo/tests/unit/ConfigurationTest.php +++ /dev/null @@ -1,40 +0,0 @@ -setConfig(Robo::config()); - verify($taskA->run())->equals('value-a'); - - $taskB = new ConfigurationTestTaskB(); - $taskB->setConfig(Robo::config()); - verify($taskB->run())->equals('value-b'); - } - -} - -class ConfigurationTestTaskA extends BaseTask -{ - public function run() - { - return $this->getConfigValue('key'); - } -} - -class ConfigurationTestTaskB extends BaseTask -{ - public function run() - { - return $this->getConfigValue('key'); - } -} diff --git a/lib/composer/vendor/consolidation/robo/tests/unit/OutputTest.php b/lib/composer/vendor/consolidation/robo/tests/unit/OutputTest.php deleted file mode 100644 index 0e1468d64..000000000 --- a/lib/composer/vendor/consolidation/robo/tests/unit/OutputTest.php +++ /dev/null @@ -1,81 +0,0 @@ -dialog = new Symfony\Component\Console\Helper\QuestionHelper; - $this->setOutput(Robo::service('output')); - } - - public function testSay() - { - $this->say('Hello, world!'); - $this->guy->seeInOutput('> Hello, world!'); - } - - public function testAskReply() - { - $this->expectedAnswer = 'jon'; - verify($this->ask('What is your name?'))->equals('jon'); - $this->guy->seeOutputEquals('? What is your name? '); - } - public function testAskMethod() - { - if (method_exists($this, 'createMock')) { - $this->dialog = $this->createMock('\Symfony\Component\Console\Helper\QuestionHelper', ['ask']); - } else { - $this->dialog = $this->getMock('\Symfony\Component\Console\Helper\QuestionHelper', ['ask']); - } - $this->dialog->expects($this->once()) - ->method('ask'); - $this->ask('What is your name?'); - } - public function testAskHiddenMethod() - { - if (method_exists($this, 'createMock')) { - $this->dialog = $this->createMock('\Symfony\Component\Console\Helper\QuestionHelper', ['ask']); - } else { - $this->dialog = $this->getMock('\Symfony\Component\Console\Helper\QuestionHelper', ['ask']); - } - $this->dialog->expects($this->once()) - ->method('ask'); - $this->ask('What is your name?', true); - } - public function testYell() - { - $this->yell('Buuuu!'); - $this->guy->seeInOutput('Buuuu!'); - } - protected function getDialog() - { - $stream = fopen('php://memory', 'r+', false); - fputs($stream, $this->expectedAnswer); - rewind($stream); - $this->dialog->setInputStream($stream); - return $this->dialog; - } - -} diff --git a/lib/composer/vendor/consolidation/robo/tests/unit/ResultTest.php b/lib/composer/vendor/consolidation/robo/tests/unit/ResultTest.php deleted file mode 100644 index 02fc322e4..000000000 --- a/lib/composer/vendor/consolidation/robo/tests/unit/ResultTest.php +++ /dev/null @@ -1,79 +0,0 @@ - 10]); - - $this->guy->seeInOutput('The foo barred'); - $this->guy->seeInOutput('Exit code 1'); - $this->guy->seeInOutput('10s'); - $this->guy->seeInOutput('[ResultDummyTask]'); - - $this->assertSame($task, $result->getTask()); - $this->assertEquals(1, $result->getExitCode()); - $this->assertEquals('The foo barred', $result->getMessage()); - $data = $result->getData(); - $this->assertEquals(10, $data['time']); - - $taskClone = $result->cloneTask(); - $this->assertNotSame($task, $taskClone); - $this->assertInstanceOf('Robo\Contract\TaskInterface', $taskClone); - } - - public function testArrayAccess() - { - $task = new ResultDummyTask(); - $result = new Result($task, 1, 'The foo barred', ['time' => 10]); - $this->assertEquals($result['time'], 10); - } - - public function testStopOnFail() - { - $exceptionClass = false; - $task = new ResultDummyTask(); - - Result::$stopOnFail = true; - $result = Result::success($task, "Something that worked"); - try { - $result = Result::error($task, "Something that did not work"); - // stopOnFail will cause Result::error() to throw an exception, - // so we will never get here. If we did, the assert below would fail. - $this->assertTrue($result->wasSuccessful()); - $this->assertTrue(false); - } catch (\Exception $e) { - $exceptionClass = get_class($e); - } - $this->assertEquals(TaskExitException::class, $exceptionClass); - $this->assertTrue($result->wasSuccessful()); - - /* - // This gives an error: - // Exception of class Robo\Exception\TaskExitException expected to - // be thrown, but PHPUnit_Framework_Exception caught - // This happens whether or not the expected exception is thrown - $this->guy->expectException(TaskExitException::class, function() { - // $result = Result::error($task, "Something that did not work"); - $result = Result::success($task, "Something that worked"); - }); - */ - - Result::$stopOnFail = false; - } -} - -class ResultDummyTask implements \Robo\Contract\TaskInterface -{ - public function run() - { - } -} diff --git a/lib/composer/vendor/consolidation/robo/tests/unit/RunnerTest.php b/lib/composer/vendor/consolidation/robo/tests/unit/RunnerTest.php deleted file mode 100644 index 9a871c93f..000000000 --- a/lib/composer/vendor/consolidation/robo/tests/unit/RunnerTest.php +++ /dev/null @@ -1,279 +0,0 @@ -runner = new \Robo\Runner('\Robo\RoboFileFixture'); - } - - public function testHandleError() - { - $tmpLevel = error_reporting(); - - $this->assertFalse($this->runner->handleError()); - error_reporting(0); - $this->assertTrue($this->runner->handleError()); - - error_reporting($tmpLevel); - } - - public function testErrorIsHandled() - { - $tmpLevel = error_reporting(); - - // Set error_get_last to a known state. Note that it can never be - // reset; see http://php.net/manual/en/function.error-get-last.php - @trigger_error('control'); - $error_description = error_get_last(); - $this->assertEquals('control', $error_description['message']); - @trigger_error(''); - $error_description = error_get_last(); - $this->assertEquals('', $error_description['message']); - - // Set error_reporting to a non-zero value. In this instance, - // 'trigger_error' would abort our test script, so we use - // @trigger_error so that execution will continue. With our - // error handler in place, the value of error_get_last() does - // not change. - error_reporting(E_USER_ERROR); - set_error_handler(array($this->runner, 'handleError')); - @trigger_error('test error', E_USER_ERROR); - $error_description = error_get_last(); - $this->assertEquals('', $error_description['message']); - - // Set error_reporting to zero. Now, even 'trigger_error' - // does not abort execution. The value of error_get_last() - // still does not change. - error_reporting(0); - trigger_error('test error 2', E_USER_ERROR); - $error_description = error_get_last(); - $this->assertEquals('', $error_description['message']); - - error_reporting($tmpLevel); - } - - public function testThrowsExceptionWhenNoContainerAvailable() - { - \PHPUnit_Framework_TestCase::setExpectedExceptionRegExp( - '\RuntimeException', - '/container is not initialized yet.*/' - ); - Robo::unsetContainer(); - Robo::getContainer(); - } - - public function testRunnerNoSuchCommand() - { - $argv = ['placeholder', 'no-such-command']; - $this->runner->execute($argv, null, null, $this->guy->capturedOutputStream()); - $this->guy->seeInOutput('Command "no-such-command" is not defined.'); - } - - public function testRunnerList() - { - $argv = ['placeholder', 'list']; - $this->runner->execute($argv, null, null, $this->guy->capturedOutputStream()); - $this->guy->seeInOutput('test:array-args'); - } - - public function testRunnerTryArgs() - { - $argv = ['placeholder', 'test:array-args', 'a', 'b', 'c']; - $this->runner->execute($argv, null, null, $this->guy->capturedOutputStream()); - - $expected = << The parameters passed are: -array ( - 0 => 'a', - 1 => 'b', - 2 => 'c', -) - -EOT; - $this->guy->seeOutputEquals($expected); - } - - public function testSymfonyStyle() - { - $argv = ['placeholder', 'test:symfony-style']; - $this->runner->execute($argv, null, null, $this->guy->capturedOutputStream()); - $this->guy->seeInOutput('Some text in section one.'); - } - - public function testCommandEventHook() - { - $argv = ['placeholder', 'test:command-event']; - $this->runner->execute($argv, null, null, $this->guy->capturedOutputStream()); - - $expected = <<guy->seeInOutput($expected); - } - - public function testRoboStaticRunMethod() - { - $argv = ['placeholder', 'test:symfony-style']; - $commandFiles = ['\Robo\RoboFileFixture']; - Robo::run($argv, $commandFiles, 'MyApp', '1.2.3', $this->guy->capturedOutputStream()); - $this->guy->seeInOutput('Some text in section one.'); - } - - public function testDeploy() - { - $argv = ['placeholder', 'test:deploy', '--simulate']; - $this->runner->execute($argv, null, null, $this->guy->capturedOutputStream()); - $this->guy->seeInOutput('[Simulator] Simulating Remote\\Ssh(\'mysite.com\', null)'); - $this->guy->seeInOutput('[Simulator] Running ssh mysite.com \'cd "/var/www/somesite" && git pull\''); - } - - public function testRunnerTryError() - { - $argv = ['placeholder', 'test:error']; - $result = $this->runner->execute($argv, null, null, $this->guy->capturedOutputStream()); - - $this->guy->seeInOutput('[Exec] Running ls xyzzy'); - $this->assertTrue($result > 0); - } - - public function testRunnerTrySimulatedError() - { - $argv = ['placeholder', 'test:error', '--simulate']; - $result = $this->runner->execute($argv, null, null, $this->guy->capturedOutputStream()); - - $this->guy->seeInOutput('Simulating Exec'); - $this->assertEquals(0, $result); - } - - public function testRunnerTryException() - { - $argv = ['placeholder', 'test:exception', '--task']; - $result = $this->runner->execute($argv, null, null, $this->guy->capturedOutputStream()); - - $this->guy->seeInOutput('Task failed with an exception'); - $this->assertEquals(1, $result); - } - - public function testInitCommand() - { - $container = \Robo\Robo::getContainer(); - $app = $container->get('application'); - $app->addInitRoboFileCommand(getcwd() . '/testRoboFile.php', 'RoboTestClass'); - - $argv = ['placeholder', 'init']; - $status = $this->runner->run($argv, $this->guy->capturedOutputStream(), $app); - $this->guy->seeInOutput('testRoboFile.php will be created in the current directory'); - $this->assertEquals(0, $status); - - $this->assertTrue(file_exists('testRoboFile.php')); - $commandContents = file_get_contents('testRoboFile.php'); - unlink('testRoboFile.php'); - $this->assertContains('class RoboTestClass', $commandContents); - } - - public function testTasksStopOnFail() - { - $argv = ['placeholder', 'test:stop-on-fail']; - $result = $this->runner->execute($argv, null, null, $this->guy->capturedOutputStream()); - - $this->guy->seeInOutput('['); - $this->assertTrue($result > 0); - } - - public function testInvalidRoboDirectory() - { - $runnerWithNoRoboFile = new \Robo\Runner(); - - $argv = ['placeholder', 'list', '-f', 'no-such-directory']; - $result = $runnerWithNoRoboFile->execute($argv, null, null, $this->guy->capturedOutputStream()); - - $this->guy->seeInOutput('Path `no-such-directory` is invalid; please provide a valid absolute path to the Robofile to load.'); - } - - public function testUnloadableRoboFile() - { - $runnerWithNoRoboFile = new \Robo\Runner(); - - $argv = ['placeholder', 'list', '-f', dirname(__DIR__) . '/src/RoboFileFixture.php']; - $result = $runnerWithNoRoboFile->execute($argv, null, null, $this->guy->capturedOutputStream()); - - // We cannot load RoboFileFixture.php via -f / --load-from because - // it has a namespace, and --load-from does not support that. - $this->guy->seeInOutput('Class RoboFileFixture was not loaded'); - } - - public function testRunnerQuietOutput() - { - $argv = ['placeholder', 'test:verbosity', '--quiet']; - $result = $this->runner->execute($argv, null, null, $this->guy->capturedOutputStream()); - - $this->guy->doNotSeeInOutput('This command will print more information at higher verbosity levels'); - $this->guy->doNotSeeInOutput('This is a verbose message (-v).'); - $this->guy->doNotSeeInOutput('This is a very verbose message (-vv).'); - $this->guy->doNotSeeInOutput('This is a debug message (-vvv).'); - $this->guy->doNotSeeInOutput(' [warning] This is a warning log message.'); - $this->guy->doNotSeeInOutput(' [notice] This is a notice log message.'); - $this->guy->doNotSeeInOutput(' [debug] This is a debug log message.'); - $this->assertEquals(0, $result); - } - - public function testRunnerVerboseOutput() - { - $argv = ['placeholder', 'test:verbosity', '-v']; - $result = $this->runner->execute($argv, null, null, $this->guy->capturedOutputStream()); - - $this->guy->seeInOutput('This command will print more information at higher verbosity levels'); - $this->guy->seeInOutput('This is a verbose message (-v).'); - $this->guy->doNotSeeInOutput('This is a very verbose message (-vv).'); - $this->guy->doNotSeeInOutput('This is a debug message (-vvv).'); - $this->guy->seeInOutput(' [warning] This is a warning log message.'); - $this->guy->seeInOutput(' [notice] This is a notice log message.'); - $this->guy->doNotSeeInOutput(' [debug] This is a debug log message.'); - $this->assertEquals(0, $result); - } - - public function testRunnerVeryVerboseOutput() - { - $argv = ['placeholder', 'test:verbosity', '-vv']; - $result = $this->runner->execute($argv, null, null, $this->guy->capturedOutputStream()); - - $this->guy->seeInOutput('This command will print more information at higher verbosity levels'); - $this->guy->seeInOutput('This is a verbose message (-v).'); - $this->guy->seeInOutput('This is a very verbose message (-vv).'); - $this->guy->doNotSeeInOutput('This is a debug message (-vvv).'); - $this->guy->seeInOutput(' [warning] This is a warning log message.'); - $this->guy->seeInOutput(' [notice] This is a notice log message.'); - $this->guy->doNotSeeInOutput(' [debug] This is a debug log message.'); - $this->assertEquals(0, $result); - } - - public function testRunnerDebugOutput() - { - $argv = ['placeholder', 'test:verbosity', '-vvv']; - $result = $this->runner->execute($argv, null, null, $this->guy->capturedOutputStream()); - - $this->guy->seeInOutput('This command will print more information at higher verbosity levels'); - $this->guy->seeInOutput('This is a verbose message (-v).'); - $this->guy->seeInOutput('This is a very verbose message (-vv).'); - $this->guy->seeInOutput('This is a debug message (-vvv).'); - $this->guy->seeInOutput(' [warning] This is a warning log message.'); - $this->guy->seeInOutput(' [notice] This is a notice log message.'); - $this->guy->seeInOutput(' [debug] This is a debug log message.'); - $this->assertEquals(0, $result); - } -} diff --git a/lib/composer/vendor/consolidation/robo/tests/unit/Task/ApiGenTest.php b/lib/composer/vendor/consolidation/robo/tests/unit/Task/ApiGenTest.php deleted file mode 100644 index cc21850ef..000000000 --- a/lib/composer/vendor/consolidation/robo/tests/unit/Task/ApiGenTest.php +++ /dev/null @@ -1,52 +0,0 @@ -apigen = test::double('Robo\Task\ApiGen\ApiGen', [ - 'executeCommand' => null, - 'output' => new \Symfony\Component\Console\Output\NullOutput(), - 'logger' => new \Psr\Log\NullLogger(), - ]); - - $this->container = Robo::getContainer(); - } - - // tests - public function testPHPUnitCommand() - { - // need an explicit Traversable - $skippedPaths = new \SplDoublyLinkedList(); - $skippedPaths->push('a'); - $skippedPaths->push('b'); - - // going for 'bang for the buck' here re: test converage - $task = (new \Robo\Task\ApiGen\ApiGen('apigen')) - ->config('./apigen.neon') - ->source('src') // single string value of Traversable - ->extensions('php') // single string value of List - ->exclude(array('test', 'tmp')) // array value of Traversable - ->skipDocPath($skippedPaths) // multi-value of Traversable - ->charset(array('utf8','iso88591')) // array of List - ->internal('no') // boolean as supported "no" - ->php(true) // boolean as boolean - ->tree('Y') // boolean as string - ->debug('n'); - - $cmd = 'apigen --config ./apigen.neon --source src --extensions php --exclude test --exclude tmp --skip-doc-path a --skip-doc-path b --charset \'utf8,iso88591\' --internal no --php yes --tree yes --debug no'; - verify($task->getCommand())->equals($cmd); - - $task->run(); - $this->apigen->verifyInvoked('executeCommand', [$cmd]); - } -} diff --git a/lib/composer/vendor/consolidation/robo/tests/unit/Task/AtoumTest.php b/lib/composer/vendor/consolidation/robo/tests/unit/Task/AtoumTest.php deleted file mode 100644 index 0bd71a349..000000000 --- a/lib/composer/vendor/consolidation/robo/tests/unit/Task/AtoumTest.php +++ /dev/null @@ -1,38 +0,0 @@ -atoum = test::double('Robo\Task\Testing\Atoum', [ - 'executeCommand' => null, - 'output' => new \Symfony\Component\Console\Output\NullOutput(), - 'logger' => new \Psr\Log\NullLogger(), - ]); - } - - public function testAtoumCommand() - { - $task = (new \Robo\Task\Testing\Atoum('atoum')) - ->bootstrap('bootstrap.php') - ->tags("needDb") - ->lightReport() - ->tap() - ->bootstrap('tests/bootstrap.php') - ->configFile("config/dev.php") - ->debug() - ->files(array("path/to/file1.php", "path/to/file2.php")) - ->directories("tests/units") - ; - verify($task->getCommand())->equals('atoum --bootstrap bootstrap.php --tags needDb --use-light-report --use-tap-report --bootstrap tests/bootstrap.php -c config/dev.php --debug --f path/to/file1.php --f path/to/file2.php --directories tests/units'); - $task->run(); - $this->atoum->verifyInvoked('executeCommand', ['atoum --bootstrap bootstrap.php --tags needDb --use-light-report --use-tap-report --bootstrap tests/bootstrap.php -c config/dev.php --debug --f path/to/file1.php --f path/to/file2.php --directories tests/units']); - } -} diff --git a/lib/composer/vendor/consolidation/robo/tests/unit/Task/BehatTest.php b/lib/composer/vendor/consolidation/robo/tests/unit/Task/BehatTest.php deleted file mode 100644 index d08e15700..000000000 --- a/lib/composer/vendor/consolidation/robo/tests/unit/Task/BehatTest.php +++ /dev/null @@ -1,43 +0,0 @@ -behat = test::double('Robo\Task\Testing\Behat', [ - 'executeCommand' => null, - 'output' => new \Symfony\Component\Console\Output\NullOutput(), - 'logger' => new \Psr\Log\NullLogger(), - ]); - } - - // tests - public function testBehatRun() - { - $behat = test::double('Robo\Task\Testing\Behat', ['executeCommand' => null, 'getConfig' => new \Robo\Config(), 'logger' => new \Psr\Log\NullLogger()]); - - (new \Robo\Task\Testing\Behat('behat'))->run(); - $behat->verifyInvoked('executeCommand'); - } - - public function testBehatCommand() - { - $behat = test::double('Robo\Task\Testing\Behat', ['executeCommand' => null, 'getConfig' => new \Robo\Config(), 'logger' => new \Psr\Log\NullLogger()]); - - $task = (new \Robo\Task\Testing\Behat('behat')) - ->stopOnFail() - ->noInteraction() - ->colors(); - verify($task->getCommand())->equals('behat run --stop-on-failure --no-interaction --colors'); - $task->run(); - $behat->verifyInvoked('executeCommand', ['behat run --stop-on-failure --no-interaction --colors']); - } - -} diff --git a/lib/composer/vendor/consolidation/robo/tests/unit/Task/BowerTest.php b/lib/composer/vendor/consolidation/robo/tests/unit/Task/BowerTest.php deleted file mode 100644 index f656d7533..000000000 --- a/lib/composer/vendor/consolidation/robo/tests/unit/Task/BowerTest.php +++ /dev/null @@ -1,59 +0,0 @@ -baseBower = test::double('Robo\Task\Bower\Base', [ - 'output' => new \Symfony\Component\Console\Output\NullOutput(), - 'logger' => new \Psr\Log\NullLogger(), - ]); - } - // tests - public function testBowerInstall() - { - $bower = test::double('Robo\Task\Bower\Install', ['executeCommand' => null, 'logger' => new \Psr\Log\NullLogger(),]); - (new \Robo\Task\Bower\Install('bower'))->run(); - $bower->verifyInvoked('executeCommand', ['bower install']); - } - - public function testBowerUpdate() - { - $bower = test::double('Robo\Task\Bower\Update', ['executeCommand' => null]); - $task = new \Robo\Task\Bower\Update('bower'); - $task->setLogger(new \Psr\Log\NullLogger()); - - $task->run(); - $bower->verifyInvoked('executeCommand', ['bower update']); - } - - public function testBowerInstallCommand() - { - verify( - (new \Robo\Task\Bower\Install('bower'))->getCommand() - )->equals('bower install'); - - verify( - (new \Robo\Task\Bower\Update('bower'))->getCommand() - )->equals('bower update'); - - verify( - (new \Robo\Task\Bower\Install('bower')) - ->allowRoot() - ->forceLatest() - ->offline() - ->noDev() - ->getCommand() - )->equals('bower install --allow-root --force-latest --offline --production'); - } - -} diff --git a/lib/composer/vendor/consolidation/robo/tests/unit/Task/CodeceptionTest.php b/lib/composer/vendor/consolidation/robo/tests/unit/Task/CodeceptionTest.php deleted file mode 100644 index d2c637b0f..000000000 --- a/lib/composer/vendor/consolidation/robo/tests/unit/Task/CodeceptionTest.php +++ /dev/null @@ -1,63 +0,0 @@ -codecept = test::double('Robo\Task\Testing\Codecept', [ - 'executeCommand' => null, - 'output' => new \Symfony\Component\Console\Output\NullOutput() - ]); - } - - // tests - public function testCodeceptionCommand() - { - verify(trim((new \Robo\Task\Testing\Codecept('codecept.phar'))->getCommand()))->equals('codecept.phar run'); - } - - public function testCodeceptionRun() - { - $task = new \Robo\Task\Testing\Codecept('codecept.phar'); - $task->setLogger(new \Psr\Log\NullLogger()); - - $task->run(); - $this->codecept->verifyInvoked('executeCommand'); - } - - public function testCodeceptOptions() - { - verify((new \Robo\Task\Testing\Codecept('codecept')) - ->suite('unit') - ->test('Codeception/Command') - ->group('core') - ->env('process1') - ->coverage() - ->getCommand() - )->equals('codecept run --group core --env process1 --coverage unit Codeception/Command'); - - verify((new \Robo\Task\Testing\Codecept('codecept')) - ->test('tests/unit/Codeception') - ->configFile('~/Codeception') - ->xml('result.xml') - ->html() - ->getCommand() - )->equals('codecept run -c ~/Codeception --xml result.xml --html tests/unit/Codeception'); - - verify((new \Robo\Task\Testing\Codecept('codecept.phar'))->debug()->getCommand())->contains(' --debug'); - verify((new \Robo\Task\Testing\Codecept('codecept.phar'))->silent()->getCommand())->contains(' --silent'); - verify((new \Robo\Task\Testing\Codecept('codecept.phar'))->excludeGroup('g')->getCommand())->contains(' --skip-group g'); - verify((new \Robo\Task\Testing\Codecept('codecept.phar'))->tap()->getCommand())->contains('--tap'); - verify((new \Robo\Task\Testing\Codecept('codecept.phar'))->json()->getCommand())->contains('--json'); - } - -} diff --git a/lib/composer/vendor/consolidation/robo/tests/unit/Task/CollectionTest.php b/lib/composer/vendor/consolidation/robo/tests/unit/Task/CollectionTest.php deleted file mode 100644 index 843589a9a..000000000 --- a/lib/composer/vendor/consolidation/robo/tests/unit/Task/CollectionTest.php +++ /dev/null @@ -1,183 +0,0 @@ -add($taskA, 'a-name') - ->add($taskB, 'b-name'); - - // We add methods of our task instances as before and - // after tasks. These methods have access to the task - // class' fields, and may modify them as needed. - $collection - ->after('a-name', [$taskA, 'parenthesizer']) - ->after('a-name', [$taskA, 'emphasizer']) - ->after('b-name', [$taskB, 'emphasizer']) - ->after('b-name', [$taskB, 'parenthesizer']) - ->after('b-name', [$taskB, 'parenthesizer'], 'special-name'); - - $result = $collection->run(); - - // verify(var_export($result->getData(), true))->equals(''); - - // Ensure that the results have the correct key values - verify(implode(',', array_keys($result->getData())))->equals('a-name,b-name,special-name,time'); - - // Verify that all of the after tasks ran in - // the correct order. - verify($result['a-name']['a'])->equals('*(value-a)*'); - verify($result['b-name']['b'])->equals('(*value-b*)'); - - // Note that the last after task is added with a special name; - // its results therefore show up under the name given, rather - // than being stored under the name of the task it was added after. - verify($result['special-name']['b'])->equals('((*value-b*))'); - } - - public function testBeforeFilters() - { - $collection = new Collection(); - - $taskA = new CollectionTestTask('a', 'value-a'); - $taskB = new CollectionTestTask('b', 'value-b'); - - $collection - ->add($taskA, 'a-name') - ->add($taskB, 'b-name'); - - // We add methods of our task instances as before and - // after tasks. These methods have access to the task - // class' fields, and may modify them as needed. - $collection - ->before('b-name', [$taskA, 'parenthesizer']) - ->before('b-name', [$taskA, 'emphasizer'], 'special-before-name'); - - $result = $collection->run(); - - // Ensure that the results have the correct key values - verify(implode(',', array_keys($result->getData())))->equals('a-name,b-name,special-before-name,time'); - - // The result from the 'before' task is attached - // to 'b-name', since it was called as before('b-name', ...) - verify($result['b-name']['a'])->equals('(value-a)'); - // When a 'before' task is given its own name, then - // its results are attached under that name. - verify($result['special-before-name']['a'])->equals('*(value-a)*'); - } - - public function testAddCodeRollbackAndCompletion() - { - $collection = new Collection(); - $rollback1 = new CountingTask(); - $rollback2 = new CountingTask(); - $completion1 = new CountingTask(); - $completion2 = new CountingTask(); - - $collection - ->progressMessage("start collection tasks") - ->rollback($rollback1) - ->completion($completion1) - ->rollbackCode(function() use($rollback1) { $rollback1->run(); } ) - ->completionCode(function() use($completion1) { $completion1->run(); } ) - ->addCode(function () { return 42; }) - ->progressMessage("not reached") - ->rollback($rollback2) - ->completion($completion2) - ->addCode(function () { return 13; }); - - $collection->setLogger($this->guy->logger()); - - $result = $collection->run(); - // Execution stops on the first error. - // Confirm that status code is converted to a Result object. - verify($result->getExitCode())->equals(42); - verify($rollback1->getCount())->equals(2); - verify($rollback2->getCount())->equals(0); - verify($completion1->getCount())->equals(2); - verify($completion2->getCount())->equals(0); - $this->guy->seeInOutput('start collection tasks'); - $this->guy->doNotSeeInOutput('not reached'); - } -} - -class CountingTask extends BaseTask -{ - protected $count = 0; - - public function run() - { - $this->count++; - return Result::success($this); - } - - public function getCount() - { - return $this->count; - } -} - -class CollectionTestTask extends BaseTask -{ - protected $key; - protected $value; - - public function __construct($key, $value) - { - $this->key = $key; - $this->value = $value; - } - - public function run() - { - return $this->getValue(); - } - - protected function getValue() - { - $result = Result::success($this); - $result[$this->key] = $this->value; - - return $result; - } - - // Note that by returning a value with the same - // key as the result, we overwrite the value generated - // by the primary task method ('run()'). If we returned - // a result with a different key, then both values - // would appear in the result. - public function parenthesizer() - { - $this->value = "({$this->value})"; - return $this->getValue(); - } - - public function emphasizer() - { - $this->value = "*{$this->value}*"; - return $this->getValue(); - } -} diff --git a/lib/composer/vendor/consolidation/robo/tests/unit/Task/CommandStackTest.php b/lib/composer/vendor/consolidation/robo/tests/unit/Task/CommandStackTest.php deleted file mode 100644 index 7a83b5f7b..000000000 --- a/lib/composer/vendor/consolidation/robo/tests/unit/Task/CommandStackTest.php +++ /dev/null @@ -1,26 +0,0 @@ -executable('some-executable') - ->exec('some-executable status') - ->getCommand() - )->equals('some-executable status'); - } - - public function testExecStackCommandIsNotTrimmedIfHavingSameCharsAsExecutable() - { - $commandStack = Stub::make('Robo\Task\CommandStack'); - verify($commandStack - ->executable('some-executable') - ->exec('status') - ->getCommand() - )->equals('some-executable status'); - } -} diff --git a/lib/composer/vendor/consolidation/robo/tests/unit/Task/ComposerTest.php b/lib/composer/vendor/consolidation/robo/tests/unit/Task/ComposerTest.php deleted file mode 100644 index 4e01fb896..000000000 --- a/lib/composer/vendor/consolidation/robo/tests/unit/Task/ComposerTest.php +++ /dev/null @@ -1,266 +0,0 @@ -baseComposer = test::double('Robo\Task\Composer\Base', [ - 'output' => new \Symfony\Component\Console\Output\NullOutput(), - 'logger' => new \Psr\Log\NullLogger(), - ]); - } - // tests - public function testComposerInstall() - { - $composer = test::double('Robo\Task\Composer\Install', ['executeCommand' => null, 'getConfig' => new \Robo\Config(), 'logger' => new \Psr\Log\NullLogger()]); - - (new \Robo\Task\Composer\Install('composer'))->run(); - $composer->verifyInvoked('executeCommand', ['composer install']); - - (new \Robo\Task\Composer\Install('composer')) - ->preferSource() - ->run(); - $composer->verifyInvoked('executeCommand', ['composer install --prefer-source']); - - (new \Robo\Task\Composer\Install('composer')) - ->optimizeAutoloader() - ->run(); - $composer->verifyInvoked('executeCommand', ['composer install --optimize-autoloader']); - } - - public function testComposerInstallAnsi() - { - $config = new \Robo\Config(); - $config->setDecorated(true); - $composer = test::double('Robo\Task\Composer\Install', ['executeCommand' => null, 'getConfig' => $config, 'logger' => new \Psr\Log\NullLogger()]); - - (new \Robo\Task\Composer\Install('composer'))->run(); - $composer->verifyInvoked('executeCommand', ['composer install --ansi']); - - (new \Robo\Task\Composer\Install('composer')) - ->preferSource() - ->run(); - $composer->verifyInvoked('executeCommand', ['composer install --prefer-source --ansi']); - - (new \Robo\Task\Composer\Install('composer')) - ->optimizeAutoloader() - ->run(); - $composer->verifyInvoked('executeCommand', ['composer install --optimize-autoloader --ansi']); - } - - public function testComposerUpdate() - { - $composer = test::double('Robo\Task\Composer\Update', ['executeCommand' => null, 'getConfig' => new \Robo\Config(), 'logger' => new \Psr\Log\NullLogger()]); - - (new \Robo\Task\Composer\Update('composer'))->run(); - $composer->verifyInvoked('executeCommand', ['composer update']); - - (new \Robo\Task\Composer\Update('composer')) - ->optimizeAutoloader() - ->run(); - $composer->verifyInvoked('executeCommand', ['composer update --optimize-autoloader']); - } - - public function testComposerDumpAutoload() - { - $composer = test::double('Robo\Task\Composer\DumpAutoload', ['executeCommand' => null, 'getConfig' => new \Robo\Config(), 'logger' => new \Psr\Log\NullLogger()]); - - (new \Robo\Task\Composer\DumpAutoload('composer'))->run(); - $composer->verifyInvoked('executeCommand', ['composer dump-autoload']); - - (new \Robo\Task\Composer\DumpAutoload('composer')) - ->noDev() - ->run(); - $composer->verifyInvoked('executeCommand', ['composer dump-autoload --no-dev']); - - (new \Robo\Task\Composer\DumpAutoload('composer')) - ->optimize() - ->run(); - $composer->verifyInvoked('executeCommand', ['composer dump-autoload --optimize']); - - (new \Robo\Task\Composer\DumpAutoload('composer')) - ->optimize() - ->noDev() - ->run(); - $composer->verifyInvoked('executeCommand', ['composer dump-autoload --optimize --no-dev']); - } - - public function testComposerValidate() - { - $composer = test::double('Robo\Task\Composer\Validate', ['executeCommand' => null, 'getConfig' => new \Robo\Config(), 'logger' => new \Psr\Log\NullLogger()]); - - (new \Robo\Task\Composer\Validate('composer'))->run(); - $composer->verifyInvoked('executeCommand', ['composer validate']); - - (new \Robo\Task\Composer\Validate('composer')) - ->noCheckAll() - ->run(); - $composer->verifyInvoked('executeCommand', ['composer validate --no-check-all']); - - (new \Robo\Task\Composer\Validate('composer')) - ->noCheckLock() - ->run(); - $composer->verifyInvoked('executeCommand', ['composer validate --no-check-lock']); - - (new \Robo\Task\Composer\Validate('composer')) - ->noCheckPublish() - ->run(); - $composer->verifyInvoked('executeCommand', ['composer validate --no-check-publish']); - - (new \Robo\Task\Composer\Validate('composer')) - ->withDependencies() - ->run(); - $composer->verifyInvoked('executeCommand', ['composer validate --with-dependencies']); - - (new \Robo\Task\Composer\Validate('composer')) - ->strict() - ->run(); - $composer->verifyInvoked('executeCommand', ['composer validate --strict']); - } - - public function testComposerInstallCommand() - { - verify( - (new \Robo\Task\Composer\Install('composer'))->setConfig(new \Robo\Config())->getCommand() - )->equals('composer install'); - - verify( - (new \Robo\Task\Composer\Install('composer')) - ->setConfig(new \Robo\Config()) - ->noDev() - ->preferDist() - ->optimizeAutoloader() - ->getCommand() - )->equals('composer install --prefer-dist --no-dev --optimize-autoloader'); - } - - public function testComposerUpdateCommand() - { - verify( - (new \Robo\Task\Composer\Update('composer'))->setConfig(new \Robo\Config())->getCommand() - )->equals('composer update'); - - verify( - (new \Robo\Task\Composer\Update('composer')) - ->setConfig(new \Robo\Config()) - ->noDev() - ->preferDist() - ->getCommand() - )->equals('composer update --prefer-dist --no-dev'); - - verify( - (new \Robo\Task\Composer\Update('composer')) - ->setConfig(new \Robo\Config()) - ->noDev() - ->preferDist() - ->optimizeAutoloader() - ->getCommand() - )->equals('composer update --prefer-dist --no-dev --optimize-autoloader'); - } - - public function testComposerDumpAutoloadCommand() - { - verify( - (new \Robo\Task\Composer\DumpAutoload('composer'))->setConfig(new \Robo\Config())->getCommand() - )->equals('composer dump-autoload'); - - verify( - (new \Robo\Task\Composer\DumpAutoload('composer')) - ->setConfig(new \Robo\Config()) - ->noDev() - ->getCommand() - )->equals('composer dump-autoload --no-dev'); - - verify( - (new \Robo\Task\Composer\DumpAutoload('composer')) - ->setConfig(new \Robo\Config()) - ->optimize() - ->getCommand() - )->equals('composer dump-autoload --optimize'); - - verify( - (new \Robo\Task\Composer\DumpAutoload('composer')) - ->setConfig(new \Robo\Config()) - ->optimize() - ->noDev() - ->getCommand() - )->equals('composer dump-autoload --optimize --no-dev'); - } - - public function testComposerRemove() - { - verify( - (new \Robo\Task\Composer\Remove('composer'))->setConfig(new \Robo\Config())->getCommand() - )->equals('composer remove'); - verify( - (new \Robo\Task\Composer\Remove('composer')) - ->setConfig(new \Robo\Config()) - ->dev() - ->noProgress() - ->noUpdate() - ->getCommand() - )->equals('composer remove --dev --no-progress --no-update'); - } - - public function testComposerValidateCommand() - { - verify( - (new \Robo\Task\Composer\Validate('composer'))->setConfig(new \Robo\Config())->getCommand() - )->equals('composer validate'); - - verify( - (new \Robo\Task\Composer\Validate('composer')) - ->setConfig(new \Robo\Config()) - ->noCheckAll() - ->getCommand() - )->equals('composer validate --no-check-all'); - - verify( - (new \Robo\Task\Composer\Validate('composer')) - ->setConfig(new \Robo\Config()) - ->noCheckLock() - ->getCommand() - )->equals('composer validate --no-check-lock'); - - verify( - (new \Robo\Task\Composer\Validate('composer')) - ->setConfig(new \Robo\Config()) - ->noCheckPublish() - ->getCommand() - )->equals('composer validate --no-check-publish'); - - verify( - (new \Robo\Task\Composer\Validate('composer')) - ->setConfig(new \Robo\Config()) - ->withDependencies() - ->getCommand() - )->equals('composer validate --with-dependencies'); - - verify( - (new \Robo\Task\Composer\Validate('composer')) - ->setConfig(new \Robo\Config()) - ->strict() - ->getCommand() - )->equals('composer validate --strict'); - - verify( - (new \Robo\Task\Composer\Validate('composer')) - ->setConfig(new \Robo\Config()) - ->noCheckAll() - ->noCheckLock() - ->noCheckPublish() - ->withDependencies() - ->strict() - ->getCommand() - )->equals('composer validate --no-check-all --no-check-lock --no-check-publish --with-dependencies --strict'); - } -} diff --git a/lib/composer/vendor/consolidation/robo/tests/unit/Task/DockerTest.php b/lib/composer/vendor/consolidation/robo/tests/unit/Task/DockerTest.php deleted file mode 100644 index f72b237f4..000000000 --- a/lib/composer/vendor/consolidation/robo/tests/unit/Task/DockerTest.php +++ /dev/null @@ -1,97 +0,0 @@ -baseDocker = test::double('Robo\Task\Docker\Base', [ - 'output' => new \Symfony\Component\Console\Output\NullOutput(), - 'logger' => new \Psr\Log\NullLogger(), - ]); - } - // tests - public function testDockerBuild() - { - $docker = test::double('Robo\Task\Docker\Build', ['executeCommand' => null, 'getConfig' => new \Robo\Config(), 'logger' => new \Psr\Log\NullLogger()]); - - (new \Robo\Task\Docker\Build())->run(); - $docker->verifyInvoked('executeCommand', ['docker build .']); - - (new \Robo\Task\Docker\Build())->tag('something')->run(); - $docker->verifyInvoked('executeCommand', ['docker build -t something .']); - } - - public function testDockerCommit() - { - $docker = test::double('Robo\Task\Docker\Commit', ['executeCommand' => null, 'getConfig' => new \Robo\Config(), 'logger' => new \Psr\Log\NullLogger()]); - - (new \Robo\Task\Docker\Commit('cid'))->run(); - $docker->verifyInvoked('executeCommand', ['docker commit cid ']); - - (new \Robo\Task\Docker\Commit('cid'))->name('somename')->run(); - $docker->verifyInvoked('executeCommand', ['docker commit cid somename ']); - } - - public function testDockerExec() - { - $docker = test::double('Robo\Task\Docker\Exec', ['executeCommand' => null, 'getConfig' => new \Robo\Config(), 'logger' => new \Psr\Log\NullLogger()]); - - (new \Robo\Task\Docker\Exec('cid'))->run(); - $docker->verifyInvoked('executeCommand', ['docker exec cid ']); - - (new \Robo\Task\Docker\Exec('cid'))->exec('pwd')->run(); - $docker->verifyInvoked('executeCommand', ['docker exec cid pwd']); - } - - public function testDockerPull() - { - $docker = test::double('Robo\Task\Docker\Pull', ['executeCommand' => null, 'getConfig' => new \Robo\Config(), 'logger' => new \Psr\Log\NullLogger()]); - - (new \Robo\Task\Docker\Pull('image'))->run(); - $docker->verifyInvoked('executeCommand', ['docker pull image ']); - } - - public function testDockerRemove() - { - $docker = test::double('Robo\Task\Docker\Remove', ['executeCommand' => null, 'getConfig' => new \Robo\Config(), 'logger' => new \Psr\Log\NullLogger()]); - - (new \Robo\Task\Docker\Remove('container'))->run(); - $docker->verifyInvoked('executeCommand', ['docker rm container ']); - } - - public function testDockerRun() - { - $docker = test::double('Robo\Task\Docker\Run', ['executeCommand' => null, 'getConfig' => new \Robo\Config(), 'logger' => new \Psr\Log\NullLogger(), 'getUniqId' => '12345']); - - (new \Robo\Task\Docker\Run('cid'))->tmpDir('/tmp')->run(); - $docker->verifyInvoked('executeCommand', ['docker run -i --cidfile /tmp/docker_12345.cid cid']); - - (new \Robo\Task\Docker\Run('cid'))->tmpDir('/tmp')->exec('pwd')->run(); - $docker->verifyInvoked('executeCommand', ['docker run -i --cidfile /tmp/docker_12345.cid cid pwd']); - } - - public function testDockerStart() - { - $docker = test::double('Robo\Task\Docker\Start', ['executeCommand' => null, 'getConfig' => new \Robo\Config(), 'logger' => new \Psr\Log\NullLogger()]); - - (new \Robo\Task\Docker\Start('cid'))->run(); - $docker->verifyInvoked('executeCommand', ['docker start cid']); - } - - public function testDockerStop() - { - $docker = test::double('Robo\Task\Docker\Stop', ['executeCommand' => null, 'getConfig' => new \Robo\Config(), 'logger' => new \Psr\Log\NullLogger()]); - - (new \Robo\Task\Docker\Stop('cid'))->run(); - $docker->verifyInvoked('executeCommand', ['docker stop cid']); - } -} diff --git a/lib/composer/vendor/consolidation/robo/tests/unit/Task/ExecTaskTest.php b/lib/composer/vendor/consolidation/robo/tests/unit/Task/ExecTaskTest.php deleted file mode 100644 index 15b3c224d..000000000 --- a/lib/composer/vendor/consolidation/robo/tests/unit/Task/ExecTaskTest.php +++ /dev/null @@ -1,73 +0,0 @@ -process = test::double('Symfony\Component\Process\Process', [ - 'run' => false, - 'start' => false, - 'getOutput' => 'Hello world', - 'getExitCode' => 0, - 'logger' => new \Psr\Log\NullLogger(), - ]); - test::double('Robo\Task\Base\Exec', ['output' => new \Symfony\Component\Console\Output\NullOutput()]); - } - - public function testExec() - { - $task = new \Robo\Task\Base\Exec('ls'); - $task->setLogger(new \Psr\Log\NullLogger()); - - $result = $task->run(); - $this->process->verifyInvoked('run'); - verify($result->getMessage())->equals('Hello world'); - verify($result->getExitCode())->equals(0); - } - - public function testExecInBackground() - { - $task = new \Robo\Task\Base\Exec('ls'); - $task->setLogger(new \Psr\Log\NullLogger()); - - $result = $task->background()->run(); - $this->process->verifyInvoked('start'); - $this->process->verifyNeverInvoked('run'); - verify('exit code was not received', $result->getExitCode())->notEquals(100); - } - - public function testGetCommand() - { - verify((new \Robo\Task\Base\Exec('ls'))->getCommand())->equals('ls'); - } - - public function testExecStack() - { - $task = new \Robo\Task\Base\ExecStack(); - $task->setLogger(new \Psr\Log\NullLogger()); - - $task - ->exec('ls') - ->exec('cd /') - ->exec('cd home') - ->run(); - $this->process->verifyInvoked('run', 3); - } - - public function testExecStackCommand() - { - verify((new \Robo\Task\Base\ExecStack()) - ->exec('ls') - ->exec('cd /') - ->exec('cd home') - ->getCommand() - )->equals('ls && cd / && cd home'); - } -}; diff --git a/lib/composer/vendor/consolidation/robo/tests/unit/Task/GitTest.php b/lib/composer/vendor/consolidation/robo/tests/unit/Task/GitTest.php deleted file mode 100644 index 63b463b6b..000000000 --- a/lib/composer/vendor/consolidation/robo/tests/unit/Task/GitTest.php +++ /dev/null @@ -1,62 +0,0 @@ -git = test::double('Robo\Task\Vcs\GitStack', [ - 'executeCommand' => new \AspectMock\Proxy\Anything(), - 'output' => new \Symfony\Component\Console\Output\NullOutput(), - 'logger' => new \Psr\Log\NullLogger(), - ]); - } - - // tests - public function testGitStackRun() - { - (new \Robo\Task\Vcs\GitStack('git'))->stopOnFail()->add('-A')->pull()->run(); - $this->git->verifyInvoked('executeCommand', ['git add -A']); - $this->git->verifyInvoked('executeCommand', ['git pull']); - - (new \Robo\Task\Vcs\GitStack('git'))->add('-A')->pull()->run(); - $this->git->verifyInvoked('executeCommand', ['git add -A && git pull']); - } - - public function testGitStackCommands() - { - verify( - (new \Robo\Task\Vcs\GitStack()) - ->cloneRepo('http://github.com/consolidation-org/Robo') - ->pull() - ->add('-A') - ->commit('changed') - ->push() - ->tag('0.6.0') - ->push('origin', '0.6.0') - ->getCommand() - )->equals("git clone http://github.com/consolidation-org/Robo && git pull && git add -A && git commit -m 'changed' && git push && git tag 0.6.0 && git push origin 0.6.0"); - } - - public function testGitStackCommandsWithTagMessage() - { - verify( - (new \Robo\Task\Vcs\GitStack()) - ->cloneRepo('http://github.com/consolidation-org/Robo') - ->pull() - ->add('-A') - ->commit('changed') - ->push() - ->tag('0.6.0', 'message') - ->push('origin', '0.6.0') - ->getCommand() - )->equals("git clone http://github.com/consolidation-org/Robo && git pull && git add -A && git commit -m 'changed' && git push && git tag -m 'message' 0.6.0 && git push origin 0.6.0"); - } -} diff --git a/lib/composer/vendor/consolidation/robo/tests/unit/Task/GulpTest.php b/lib/composer/vendor/consolidation/robo/tests/unit/Task/GulpTest.php deleted file mode 100644 index e5b36c98b..000000000 --- a/lib/composer/vendor/consolidation/robo/tests/unit/Task/GulpTest.php +++ /dev/null @@ -1,85 +0,0 @@ -baseGulp = test::double('Robo\Task\Gulp\Base', [ - 'output' => new \Symfony\Component\Console\Output\NullOutput() - ]); - } - - protected function adjustQuotes($expected) - { - $isWindows = defined('PHP_WINDOWS_VERSION_MAJOR'); - - if (!$isWindows) { - return strtr($expected, '"', "'"); - } - return $expected; - } - - // tests - public function testGulpGetCommand() - { - verify( - (new \Robo\Task\Gulp\Run('default','gulp'))->getCommand() - )->equals($this->adjustQuotes('gulp "default"')); - - verify( - (new \Robo\Task\Gulp\Run('another','gulp'))->getCommand() - )->equals($this->adjustQuotes('gulp "another"')); - - verify( - (new \Robo\Task\Gulp\Run('default','gulp'))->silent()->getCommand() - )->equals($this->adjustQuotes('gulp "default" --silent')); - - verify( - (new \Robo\Task\Gulp\Run('default','gulp'))->noColor()->getCommand() - )->equals($this->adjustQuotes('gulp "default" --no-color')); - - verify( - (new \Robo\Task\Gulp\Run('default','gulp'))->color()->getCommand() - )->equals($this->adjustQuotes('gulp "default" --color')); - - verify( - (new \Robo\Task\Gulp\Run('default','gulp'))->simple()->getCommand() - )->equals($this->adjustQuotes('gulp "default" --tasks-simple')); - } - - public function testGulpRun() - { - $gulp = test::double('Robo\Task\Gulp\Run', ['executeCommand' => null, 'getConfig' => new \Robo\Config(), 'logger' => new \Psr\Log\NullLogger()]); - - $task = (new \Robo\Task\Gulp\Run('default','gulp'))->simple(); - verify($task->getCommand())->equals($this->adjustQuotes('gulp "default" --tasks-simple')); - $task->run(); - $gulp->verifyInvoked('executeCommand', [$this->adjustQuotes('gulp "default" --tasks-simple')]); - } - - public function testGulpUnusualChars() - { - $isWindows = defined('PHP_WINDOWS_VERSION_MAJOR'); - - if ($isWindows) { - - verify( - (new \Robo\Task\Gulp\Run('anotherWith weired!("\') Chars','gulp'))->getCommand() - )->equals('gulp "anotherWith weired!(\"\') Chars"'); - - } else { - - verify( - (new \Robo\Task\Gulp\Run('anotherWith weired!("\') Chars','gulp'))->getCommand() - )->equals("gulp 'anotherWith weired!(\"'\\'') Chars'"); - - } - } -} diff --git a/lib/composer/vendor/consolidation/robo/tests/unit/Task/HgTest.php b/lib/composer/vendor/consolidation/robo/tests/unit/Task/HgTest.php deleted file mode 100644 index 7b36ece33..000000000 --- a/lib/composer/vendor/consolidation/robo/tests/unit/Task/HgTest.php +++ /dev/null @@ -1,86 +0,0 @@ -hg = Test::double('Robo\Task\Vcs\HgStack', [ - 'executeCommand' => new \AspectMock\Proxy\Anything(), - 'output' => new \Symfony\Component\Console\Output\NullOutput(), - 'logger' => new \Psr\Log\NullLogger(), - ]); - $this->hgStack = (new \Robo\Task\Vcs\HgStack('hg')); - } - - // tests - public function testHgStackRun() - { - $this->hgStack->stopOnFail()->add()->pull()->run(); - $this->hg->verifyInvoked('executeCommand', ['hg add']); - $this->hg->verifyInvoked('executeCommand', ['hg pull']); - - (new \Robo\Task\Vcs\HgStack('hg'))->add()->pull()->run(); - $this->hg->verifyInvoked('executeCommand', ['hg add && hg pull']); - } - - public function testHgStackPull() - { - verify( - $this->hgStack - ->pull() - ->getCommand() - )->equals('hg pull'); - } - - public function testHgStackAddFiles() - { - verify( - $this->hgStack - ->add('*.php', '*.css') - ->getCommand() - )->equals('hg add -I *.php -X *.css'); - } - - public function testHgStackCommands() - { - verify( - $this->hgStack - ->cloneRepo('https://bitbucket.org/durin42/hgsubversion') - ->pull() - ->add() - ->commit('changed') - ->push() - ->tag('0.6.0') - ->push('0.6.0') - ->getCommand() - )->equals("hg clone https://bitbucket.org/durin42/hgsubversion && hg pull && hg add && hg commit -m 'changed' && hg push && hg tag 0.6.0 && hg push -b '0.6.0'"); - } - - public function testHgStackCommandsWithTagMessage() - { - verify( - $this->hgStack - ->cloneRepo('https://bitbucket.org/durin42/hgsubversion') - ->pull() - ->add() - ->commit('changed') - ->push() - ->tag('0.6.0', 'message') - ->push('0.6.0') - ->getCommand() - )->equals("hg clone https://bitbucket.org/durin42/hgsubversion && hg pull && hg add && hg commit -m 'changed' && hg push && hg tag -m 'message' 0.6.0 && hg push -b '0.6.0'"); - } -} diff --git a/lib/composer/vendor/consolidation/robo/tests/unit/Task/NpmTest.php b/lib/composer/vendor/consolidation/robo/tests/unit/Task/NpmTest.php deleted file mode 100644 index ce3ba6f4a..000000000 --- a/lib/composer/vendor/consolidation/robo/tests/unit/Task/NpmTest.php +++ /dev/null @@ -1,52 +0,0 @@ -baseNpm = test::double('Robo\Task\Npm\Base', [ - 'output' => new \Symfony\Component\Console\Output\NullOutput(), - 'logger' => new \Psr\Log\NullLogger(), - ]); - } - - // tests - public function testNpmInstall() - { - $npm = test::double('Robo\Task\Npm\Install', ['executeCommand' => null, 'logger' => new \Psr\Log\NullLogger()]); - (new \Robo\Task\Npm\Install('npm'))->run(); - $npm->verifyInvoked('executeCommand', ['npm install']); - } - - public function testNpmUpdate() - { - $npm = test::double('Robo\Task\Npm\Update', ['executeCommand' => null, 'logger' => new \Psr\Log\NullLogger()]); - (new \Robo\Task\Npm\Update('npm'))->run(); - $npm->verifyInvoked('executeCommand', ['npm update']); - } - - public function testNpmInstallCommand() - { - verify( - (new \Robo\Task\Npm\Install('npm'))->getCommand() - )->equals('npm install'); - - verify( - (new \Robo\Task\Npm\Install('npm'))->getCommand() - )->equals('npm install'); - - verify( - (new \Robo\Task\Npm\Install('npm')) - ->noDev() - ->getCommand() - )->equals('npm install --production'); - } - -} diff --git a/lib/composer/vendor/consolidation/robo/tests/unit/Task/PHPServerTest.php b/lib/composer/vendor/consolidation/robo/tests/unit/Task/PHPServerTest.php deleted file mode 100644 index 307449582..000000000 --- a/lib/composer/vendor/consolidation/robo/tests/unit/Task/PHPServerTest.php +++ /dev/null @@ -1,59 +0,0 @@ -process = test::double('Symfony\Component\Process\Process', [ - 'run' => false, - 'start' => false, - 'getOutput' => 'Hello world', - 'getExitCode' => 0, - 'logger' => new \Psr\Log\NullLogger(), - ]); - test::double('Robo\Task\Development\PhpServer', ['output' => new \Symfony\Component\Console\Output\NullOutput()]); - } - - public function testServerBackgroundRun() - { - $task = new \Robo\Task\Development\PhpServer('8000'); - $task->setLogger(new \Psr\Log\NullLogger()); - - $task->background()->run(); - $this->process->verifyInvoked('start'); - } - - public function testServerRun() - { - $task = new \Robo\Task\Development\PhpServer('8000'); - $task->setLogger(new \Psr\Log\NullLogger()); - - $task->run(); - $this->process->verifyInvoked('run'); - } - - public function testServerCommand() - { - if (strtolower(PHP_OS) === 'linux') { - $expectedCommand = 'exec php -S 127.0.0.1:8000 -t web'; - } else { - $expectedCommand = 'php -S 127.0.0.1:8000 -t web'; - } - - verify( - (new \Robo\Task\Development\PhpServer('8000')) - ->host('127.0.0.1') - ->dir('web') - ->getCommand() - )->equals($expectedCommand); - } - -} diff --git a/lib/composer/vendor/consolidation/robo/tests/unit/Task/PHPUnitTest.php b/lib/composer/vendor/consolidation/robo/tests/unit/Task/PHPUnitTest.php deleted file mode 100644 index 3f7b235cc..000000000 --- a/lib/composer/vendor/consolidation/robo/tests/unit/Task/PHPUnitTest.php +++ /dev/null @@ -1,41 +0,0 @@ -phpunit = test::double('Robo\Task\Testing\PHPUnit', [ - 'executeCommand' => null, - 'output' => new \Symfony\Component\Console\Output\NullOutput(), - 'logger' => new \Psr\Log\NullLogger(), - ]); - } - - // tests - public function testPhpUnitRun() - { - (new \Robo\Task\Testing\PHPUnit())->run(); - $this->phpunit->verifyInvoked('executeCommand'); - } - - public function testPHPUnitCommand() - { - $task = (new \Robo\Task\Testing\PHPUnit('phpunit')) - ->bootstrap('bootstrap.php') - ->filter('Model') - ->group('important') - ->xml('result.xml') - ->debug(); - verify($task->getCommand())->equals('phpunit --bootstrap bootstrap.php --filter Model --group important --log-junit result.xml --debug'); - $task->run(); - $this->phpunit->verifyInvoked('executeCommand', ['phpunit --bootstrap bootstrap.php --filter Model --group important --log-junit result.xml --debug']); - } - -} diff --git a/lib/composer/vendor/consolidation/robo/tests/unit/Task/ParallelExecTest.php b/lib/composer/vendor/consolidation/robo/tests/unit/Task/ParallelExecTest.php deleted file mode 100644 index 037f7ee32..000000000 --- a/lib/composer/vendor/consolidation/robo/tests/unit/Task/ParallelExecTest.php +++ /dev/null @@ -1,43 +0,0 @@ -process = test::double('Symfony\Component\Process\Process', [ - 'run' => false, - 'start' => false, - 'isRunning' => false, - 'getOutput' => 'Hello world', - 'getExitCode' => 0, - 'logger' => new \Psr\Log\NullLogger(), - ]); - } - - public function testParallelExec() - { - $task = new \Robo\Task\Base\ParallelExec(); - $task->setLogger($this->guy->logger()); - - $result = $task - ->process('ls 1') - ->process('ls 2') - ->process('ls 3') - ->run(); - $this->process->verifyInvokedMultipleTimes('start', 3); - verify($result->getExitCode())->equals(0); - $this->guy->seeInOutput("3 processes finished"); - } -} diff --git a/lib/composer/vendor/consolidation/robo/tests/unit/Task/PhpspecTest.php b/lib/composer/vendor/consolidation/robo/tests/unit/Task/PhpspecTest.php deleted file mode 100644 index 71336b336..000000000 --- a/lib/composer/vendor/consolidation/robo/tests/unit/Task/PhpspecTest.php +++ /dev/null @@ -1,42 +0,0 @@ -phpspec = test::double('Robo\Task\Testing\Phpspec', [ - 'executeCommand' => null, - 'output' => new \Symfony\Component\Console\Output\NullOutput(), - 'logger' => new \Psr\Log\NullLogger(), - ]); - } - - // tests - public function testPhpSpecRun() - { - (new \Robo\Task\Testing\Phpspec('phpspec'))->run(); - $this->phpspec->verifyInvoked('executeCommand', ['phpspec run']); - } - - public function testPHPSpecCommand() - { - $task = (new \Robo\Task\Testing\Phpspec('phpspec')) - ->stopOnFail() - ->noCodeGeneration() - ->quiet() - ->verbose('vv') - ->noAnsi() - ->noInteraction() - ->format('pretty'); - verify($task->getCommand())->equals('phpspec run --stop-on-failure --no-code-generation --quiet -vv --no-ansi --no-interaction --format pretty'); - $task->run(); - $this->phpspec->verifyInvoked('executeCommand', ['phpspec run --stop-on-failure --no-code-generation --quiet -vv --no-ansi --no-interaction --format pretty']); - } -} diff --git a/lib/composer/vendor/consolidation/robo/tests/unit/Task/RsyncTest.php b/lib/composer/vendor/consolidation/robo/tests/unit/Task/RsyncTest.php deleted file mode 100644 index 957d21887..000000000 --- a/lib/composer/vendor/consolidation/robo/tests/unit/Task/RsyncTest.php +++ /dev/null @@ -1,59 +0,0 @@ -fromPath('src/') - ->toHost('localhost') - ->toUser('dev') - ->toPath('/var/www/html/app/') - ->recursive() - ->excludeVcs() - ->checksum() - ->wholeFile() - ->verbose() - ->progress() - ->humanReadable() - ->stats() - ->getCommand() - )->equals( - 'rsync --recursive --exclude .git --exclude .svn --exclude .hg --checksum --whole-file --verbose --progress --human-readable --stats src/ \'dev@localhost:/var/www/html/app/\'' - ); - - // From the folder 'foo bar' (with space) in 'src' directory - verify( - (new \Robo\Task\Remote\Rsync()) - ->fromPath('src/foo bar/baz') - ->toHost('localhost') - ->toUser('dev') - ->toPath('/var/path/with/a space') - ->getCommand() - )->equals( - 'rsync \'src/foo bar/baz\' \'dev@localhost:/var/path/with/a space\'' - ); - - // Copy two folders, 'src/foo' and 'src/bar' - verify( - (new \Robo\Task\Remote\Rsync()) - ->fromPath(['src/foo', 'src/bar']) - ->toHost('localhost') - ->toUser('dev') - ->toPath('/var/path/with/a space') - ->getCommand() - )->equals( - 'rsync src/foo src/bar \'dev@localhost:/var/path/with/a space\'' - ); - } -} diff --git a/lib/composer/vendor/consolidation/robo/tests/unit/Task/SemVerTest.php b/lib/composer/vendor/consolidation/robo/tests/unit/Task/SemVerTest.php deleted file mode 100644 index f68535bbe..000000000 --- a/lib/composer/vendor/consolidation/robo/tests/unit/Task/SemVerTest.php +++ /dev/null @@ -1,72 +0,0 @@ - null]); - $res = (new \Robo\Task\Development\SemVer()) - ->increment('major') - ->prerelease('RC') - ->increment('patch') - ->run(); - verify($res->getMessage())->equals('v1.0.1-RC.1'); - $semver->verifyInvoked('dump'); - } - - public function testSemverIncrementMinorAfterIncrementedPatch() - { - $semver = test::double('Robo\Task\Development\SemVer', ['dump' => null]); - $res = (new \Robo\Task\Development\SemVer()) - ->increment('patch') - ->run(); - verify($res->getMessage())->equals('v0.0.1'); - $res = (new \Robo\Task\Development\SemVer()) - ->increment('minor') - ->run(); - verify($res->getMessage())->equals('v0.1.0'); - $semver->verifyInvoked('dump'); - } - - public function testSemverIncrementMajorAfterIncrementedMinorAndPatch() - { - $semver = test::double('Robo\Task\Development\SemVer', ['dump' => null]); - $res = (new \Robo\Task\Development\SemVer()) - ->increment('patch') - ->run(); - verify($res->getMessage())->equals('v0.0.1'); - $res = (new \Robo\Task\Development\SemVer()) - ->increment('minor') - ->run(); - verify($res->getMessage())->equals('v0.1.0'); - $res = (new \Robo\Task\Development\SemVer()) - ->increment('major') - ->run(); - verify($res->getMessage())->equals('v1.0.0'); - $semver->verifyInvoked('dump'); - } - - public function testThrowsExceptionWhenIncrementWithWrongParameter() - { - \PHPUnit_Framework_TestCase::setExpectedExceptionRegExp( - 'Robo\Exception\TaskException', - '/Bad argument, only one of the following is allowed: major, minor, patch/' - ); - $res = (new \Robo\Task\Development\SemVer()) - ->increment('wrongParameter'); - } - - public function testThrowsExceptionWhenSemverFileNotWriteable() - { - \PHPUnit_Framework_TestCase::setExpectedExceptionRegExp( - 'Robo\Exception\TaskException', - '/Failed to write semver file./' - ); - (new \Robo\Task\Development\SemVer('/.semver')) - ->increment('major') - ->run(); - } -} diff --git a/lib/composer/vendor/consolidation/robo/tests/unit/Task/SshTest.php b/lib/composer/vendor/consolidation/robo/tests/unit/Task/SshTest.php deleted file mode 100644 index ec2289988..000000000 --- a/lib/composer/vendor/consolidation/robo/tests/unit/Task/SshTest.php +++ /dev/null @@ -1,61 +0,0 @@ -exec('ls -la') - ->exec('chmod g+x logs') - ->getCommand() - )->equals("ssh user@remote.example.com 'ls -la && chmod g+x logs'"); - } - - public function testStopOnFail() - { - verify( - (new \Robo\Task\Remote\Ssh('remote.example.com', 'user')) - ->stopOnFail(false) - ->exec('one') - ->exec('two') - ->getCommand() - )->equals("ssh user@remote.example.com 'one ; two'"); - } - - /** - * Sets static configuration, then runs task without working dir, with working dir and again without. - */ - public function testWorkingDirectoryStaticConfiguration() - { - \Robo\Task\Remote\Ssh::configure('remoteDir', '/some-dir'); - verify( - (new \Robo\Task\Remote\Ssh('remote.example.com', 'user')) - ->setConfig(Robo::config()) - ->exec('echo test') - ->getCommand() - )->equals("ssh user@remote.example.com 'cd \"/some-dir\" && echo test'"); - verify( - (new \Robo\Task\Remote\Ssh('remote.example.com', 'user')) - ->remoteDir('/other-dir') - ->exec('echo test') - ->getCommand() - )->equals("ssh user@remote.example.com 'cd \"/other-dir\" && echo test'"); - verify( - (new \Robo\Task\Remote\Ssh('remote.example.com', 'user')) - ->setConfig(Robo::config()) - ->exec('echo test') - ->getCommand() - )->equals("ssh user@remote.example.com 'cd \"/some-dir\" && echo test'"); - \Robo\Task\Remote\Ssh::configure('remoteDir', null); - verify( - (new \Robo\Task\Remote\Ssh('remote.example.com', 'user')) - ->exec('echo test') - ->getCommand() - )->equals("ssh user@remote.example.com 'echo test'"); - } -} diff --git a/lib/composer/vendor/consolidation/robo/tests/unit/Task/SvnTest.php b/lib/composer/vendor/consolidation/robo/tests/unit/Task/SvnTest.php deleted file mode 100644 index eeff03b7d..000000000 --- a/lib/composer/vendor/consolidation/robo/tests/unit/Task/SvnTest.php +++ /dev/null @@ -1,49 +0,0 @@ -svn = test::double('Robo\Task\Vcs\SvnStack', [ - 'executeCommand' => new \AspectMock\Proxy\Anything(), - 'output' => $nullOutput, - 'logger' => new \Psr\Log\NullLogger(), - 'logger' => Robo::logger(), - 'getConfig' => Robo::config(), - 'progressIndicator' => $progressIndicator, - ]); - } - - // tests - public function testSvnStackRun() - { - $this->svn->construct()->update()->add()->run(); - $this->svn->verifyInvoked('executeCommand', ['svn update && svn add']); - } - - public function testSvnStackCommands() - { - verify( - (new \Robo\Task\Vcs\SvnStack('guest', 'foo')) - ->checkout('svn://server/trunk') - ->update() - ->add() - ->commit('changed') - ->getCommand() - )->equals("svn --username guest --password foo checkout svn://server/trunk && svn --username guest --password foo update && svn --username guest --password foo add && svn --username guest --password foo commit -m 'changed'"); - } - -} diff --git a/lib/composer/vendor/consolidation/robo/tests/unit/_bootstrap.php b/lib/composer/vendor/consolidation/robo/tests/unit/_bootstrap.php deleted file mode 100644 index 8a8855580..000000000 --- a/lib/composer/vendor/consolidation/robo/tests/unit/_bootstrap.php +++ /dev/null @@ -1,2 +0,0 @@ -set('a.b.c', 'C'); +$data->set('a.b.d', 'D1'); +$data->append('a.b.d', 'D2'); +$data->set('a.b.e', array('E0', 'E1', 'E2')); + +// C +$data->get('a.b.c'); + +// array('D1', 'D2') +$data->get('a.b.d'); + +// array('E0', 'E1', 'E2') +$data->get('a.b.e'); + +// true +$data->has('a.b.c'); + +// false +$data->has('a.b.d.j'); +``` + +A more concrete example: + +```php +use Dflydev\DotAccessData\Data; + +$data = new Data(array( + 'hosts' => array( + 'hewey' => array( + 'username' => 'hman', + 'password' => 'HPASS', + 'roles' => array('web'), + ), + 'dewey' => array( + 'username' => 'dman', + 'password' => 'D---S', + 'roles' => array('web', 'db'), + 'nick' => 'dewey dman' + ), + 'lewey' => array( + 'username' => 'lman', + 'password' => 'LP@$$', + 'roles' => array('db'), + ), + ) +)); + +// hman +$username = $data->get('hosts.hewey.username'); +// HPASS +$password = $data->get('hosts.hewey.password'); +// array('web') +$roles = $data->get('hosts.hewey.roles'); +// dewey dman +$nick = $data->get('hosts.dewey.nick'); +// Unknown +$nick = $data->get('hosts.lewey.nick', 'Unknown'); + +// DataInterface instance +$dewey = $data->getData('hosts.dewey'); +// dman +$username = $dewey->get('username'); +// D---S +$password = $dewey->get('password'); +// array('web', 'db') +$roles = $dewey->get('roles'); + +// No more lewey +$data->remove('hosts.lewey'); + +// Add DB to hewey's roles +$data->append('hosts.hewey.roles', 'db'); + +$data->set('hosts.april', array( + 'username' => 'aman', + 'password' => '@---S', + 'roles' => array('web'), +)); + +// Check if a key exists (true to this case) +$hasKey = $data->has('hosts.dewey.username'); +``` + + +License +------- + +This library is licensed under the New BSD License - see the LICENSE file +for details. + + +Community +--------- + +If you have questions or want to help out, join us in the +[#dflydev](irc://irc.freenode.net/#dflydev) channel on irc.freenode.net. diff --git a/lib/composer/vendor/dflydev/dot-access-data/composer.json b/lib/composer/vendor/dflydev/dot-access-data/composer.json new file mode 100644 index 000000000..b200c9f24 --- /dev/null +++ b/lib/composer/vendor/dflydev/dot-access-data/composer.json @@ -0,0 +1,38 @@ +{ + "name": "dflydev/dot-access-data", + "type": "library", + "description": "Given a deep data structure, access data by dot notation.", + "homepage": "https://github.com/dflydev/dflydev-dot-access-data", + "keywords": ["dot", "access", "data", "notation"], + "license": "MIT", + "authors": [ + { + "name": "Dragonfly Development Inc.", + "email": "info@dflydev.com", + "homepage": "http://dflydev.com" + }, + { + "name": "Beau Simensen", + "email": "beau@dflydev.com", + "homepage": "http://beausimensen.com" + }, + { + "name": "Carlos Frutos", + "email": "carlos@kiwing.it", + "homepage": "https://github.com/cfrutos" + } + ], + "require": { + "php": ">=5.3.2" + }, + "autoload": { + "psr-0": { + "Dflydev\\DotAccessData": "src" + } + }, + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + } +} diff --git a/lib/composer/vendor/dflydev/dot-access-data/phpunit.xml.dist b/lib/composer/vendor/dflydev/dot-access-data/phpunit.xml.dist new file mode 100644 index 000000000..2b386b3a8 --- /dev/null +++ b/lib/composer/vendor/dflydev/dot-access-data/phpunit.xml.dist @@ -0,0 +1,14 @@ + + + + + ./tests/Dflydev/DotAccessData + + + + + + ./src/Dflydev/DotAccessData/ + + + diff --git a/lib/composer/vendor/dflydev/dot-access-data/src/Dflydev/DotAccessData/Data.php b/lib/composer/vendor/dflydev/dot-access-data/src/Dflydev/DotAccessData/Data.php new file mode 100644 index 000000000..34bda67e4 --- /dev/null +++ b/lib/composer/vendor/dflydev/dot-access-data/src/Dflydev/DotAccessData/Data.php @@ -0,0 +1,220 @@ +data = $data ?: array(); + } + + /** + * {@inheritdoc} + */ + public function append($key, $value = null) + { + if (0 == strlen($key)) { + throw new \RuntimeException("Key cannot be an empty string"); + } + + $currentValue =& $this->data; + $keyPath = explode('.', $key); + + if (1 == count($keyPath)) { + if (!isset($currentValue[$key])) { + $currentValue[$key] = array(); + } + if (!is_array($currentValue[$key])) { + // Promote this key to an array. + // TODO: Is this really what we want to do? + $currentValue[$key] = array($currentValue[$key]); + } + $currentValue[$key][] = $value; + + return; + } + + $endKey = array_pop($keyPath); + for ( $i = 0; $i < count($keyPath); $i++ ) { + $currentKey =& $keyPath[$i]; + if ( ! isset($currentValue[$currentKey]) ) { + $currentValue[$currentKey] = array(); + } + $currentValue =& $currentValue[$currentKey]; + } + + if (!isset($currentValue[$endKey])) { + $currentValue[$endKey] = array(); + } + if (!is_array($currentValue[$endKey])) { + $currentValue[$endKey] = array($currentValue[$endKey]); + } + // Promote this key to an array. + // TODO: Is this really what we want to do? + $currentValue[$endKey][] = $value; + } + + /** + * {@inheritdoc} + */ + public function set($key, $value = null) + { + if (0 == strlen($key)) { + throw new \RuntimeException("Key cannot be an empty string"); + } + + $currentValue =& $this->data; + $keyPath = explode('.', $key); + + if (1 == count($keyPath)) { + $currentValue[$key] = $value; + + return; + } + + $endKey = array_pop($keyPath); + for ( $i = 0; $i < count($keyPath); $i++ ) { + $currentKey =& $keyPath[$i]; + if (!isset($currentValue[$currentKey])) { + $currentValue[$currentKey] = array(); + } + if (!is_array($currentValue[$currentKey])) { + throw new \RuntimeException("Key path at $currentKey of $key cannot be indexed into (is not an array)"); + } + $currentValue =& $currentValue[$currentKey]; + } + $currentValue[$endKey] = $value; + } + + /** + * {@inheritdoc} + */ + public function remove($key) + { + if (0 == strlen($key)) { + throw new \RuntimeException("Key cannot be an empty string"); + } + + $currentValue =& $this->data; + $keyPath = explode('.', $key); + + if (1 == count($keyPath)) { + unset($currentValue[$key]); + + return; + } + + $endKey = array_pop($keyPath); + for ( $i = 0; $i < count($keyPath); $i++ ) { + $currentKey =& $keyPath[$i]; + if (!isset($currentValue[$currentKey])) { + return; + } + $currentValue =& $currentValue[$currentKey]; + } + unset($currentValue[$endKey]); + } + + /** + * {@inheritdoc} + */ + public function get($key, $default = null) + { + $currentValue = $this->data; + $keyPath = explode('.', $key); + + for ( $i = 0; $i < count($keyPath); $i++ ) { + $currentKey = $keyPath[$i]; + if (!isset($currentValue[$currentKey]) ) { + return $default; + } + if (!is_array($currentValue)) { + return $default; + } + $currentValue = $currentValue[$currentKey]; + } + + return $currentValue === null ? $default : $currentValue; + } + + /** + * {@inheritdoc} + */ + public function has($key) + { + $currentValue = &$this->data; + $keyPath = explode('.', $key); + + for ( $i = 0; $i < count($keyPath); $i++ ) { + $currentKey = $keyPath[$i]; + if ( + !is_array($currentValue) || + !array_key_exists($currentKey, $currentValue) + ) { + return false; + } + $currentValue = &$currentValue[$currentKey]; + } + + return true; + } + + /** + * {@inheritdoc} + */ + public function getData($key) + { + $value = $this->get($key); + if (is_array($value) && Util::isAssoc($value)) { + return new Data($value); + } + + throw new \RuntimeException("Value at '$key' could not be represented as a DataInterface"); + } + + /** + * {@inheritdoc} + */ + public function import(array $data, $clobber = true) + { + $this->data = Util::mergeAssocArray($this->data, $data, $clobber); + } + + /** + * {@inheritdoc} + */ + public function importData(DataInterface $data, $clobber = true) + { + $this->import($data->export(), $clobber); + } + + /** + * {@inheritdoc} + */ + public function export() + { + return $this->data; + } +} diff --git a/lib/composer/vendor/dflydev/dot-access-data/src/Dflydev/DotAccessData/DataInterface.php b/lib/composer/vendor/dflydev/dot-access-data/src/Dflydev/DotAccessData/DataInterface.php new file mode 100644 index 000000000..3498f26e5 --- /dev/null +++ b/lib/composer/vendor/dflydev/dot-access-data/src/Dflydev/DotAccessData/DataInterface.php @@ -0,0 +1,89 @@ + $v) { + if (!isset($to[$k])) { + $to[$k] = $v; + } else { + $to[$k] = self::mergeAssocArray($to[$k], $v, $clobber); + } + } + + return $to; + } + + return $clobber ? $from : $to; + } +} diff --git a/lib/composer/vendor/dflydev/dot-access-data/tests/Dflydev/DotAccessData/DataTest.php b/lib/composer/vendor/dflydev/dot-access-data/tests/Dflydev/DotAccessData/DataTest.php new file mode 100644 index 000000000..c75260bec --- /dev/null +++ b/lib/composer/vendor/dflydev/dot-access-data/tests/Dflydev/DotAccessData/DataTest.php @@ -0,0 +1,205 @@ + 'A', + 'b' => array( + 'b' => 'B', + 'c' => array('C1', 'C2', 'C3'), + 'd' => array( + 'd1' => 'D1', + 'd2' => 'D2', + 'd3' => 'D3', + ), + ), + 'c' => array('c1', 'c2', 'c3'), + 'f' => array( + 'g' => array( + 'h' => 'FGH', + ), + ), + 'h' => array( + 'i' => 'I', + ), + 'i' => array( + 'j' => 'J', + ), + ); + } + + protected function runSampleDataTests(DataInterface $data) + { + $this->assertEquals('A', $data->get('a')); + $this->assertEquals('B', $data->get('b.b')); + $this->assertEquals(array('C1', 'C2', 'C3'), $data->get('b.c')); + $this->assertEquals('D3', $data->get('b.d.d3')); + $this->assertEquals(array('c1', 'c2', 'c3'), $data->get('c')); + $this->assertNull($data->get('foo'), 'Foo should not exist'); + $this->assertNull($data->get('f.g.h.i')); + $this->assertEquals($data->get('foo', 'default-value-1'), 'default-value-1', 'Return default value'); + $this->assertEquals($data->get('f.g.h.i', 'default-value-2'), 'default-value-2'); + } + + public function testAppend() + { + $data = new Data($this->getSampleData()); + + $data->append('a', 'B'); + $data->append('c', 'c4'); + $data->append('b.c', 'C4'); + $data->append('b.d.d3', 'D3b'); + $data->append('b.d.d4', 'D'); + $data->append('e', 'E'); + $data->append('f.a', 'b'); + $data->append('h.i', 'I2'); + $data->append('i.k.l', 'L'); + + $this->assertEquals(array('A', 'B'), $data->get('a')); + $this->assertEquals(array('c1', 'c2', 'c3', 'c4'), $data->get('c')); + $this->assertEquals(array('C1', 'C2', 'C3', 'C4'), $data->get('b.c')); + $this->assertEquals(array('D3', 'D3b'), $data->get('b.d.d3')); + $this->assertEquals(array('D'), $data->get('b.d.d4')); + $this->assertEquals(array('E'), $data->get('e')); + $this->assertEquals(array('b'), $data->get('f.a')); + $this->assertEquals(array('I', 'I2'), $data->get('h.i')); + $this->assertEquals(array('L'), $data->get('i.k.l')); + + $this->setExpectedException('RuntimeException'); + + $data->append('', 'broken'); + } + + public function testSet() + { + $data = new Data; + + $this->assertNull($data->get('a')); + $this->assertNull($data->get('b.c')); + $this->assertNull($data->get('d.e')); + + $data->set('a', 'A'); + $data->set('b.c', 'C'); + $data->set('d.e', array('f' => 'F', 'g' => 'G',)); + + $this->assertEquals('A', $data->get('a')); + $this->assertEquals(array('c' => 'C'), $data->get('b')); + $this->assertEquals('C', $data->get('b.c')); + $this->assertEquals('F', $data->get('d.e.f')); + $this->assertEquals(array('e' => array('f' => 'F', 'g' => 'G',)), $data->get('d')); + + $this->setExpectedException('RuntimeException'); + + $data->set('', 'broken'); + } + + public function testSetClobberStringInPath() + { + $data = new Data; + + $data->set('a.b.c', 'Should not be able to write to a.b.c.d.e'); + + $this->setExpectedException('RuntimeException'); + + $data->set('a.b.c.d.e', 'broken'); + } + + public function testRemove() + { + $data = new Data($this->getSampleData()); + + $data->remove('a'); + $data->remove('b.c'); + $data->remove('b.d.d3'); + $data->remove('d'); + $data->remove('d.e.f'); + $data->remove('empty.path'); + + $this->assertNull($data->get('a')); + $this->assertNull($data->get('b.c')); + $this->assertNull($data->get('b.d.d3')); + $this->assertNull(null); + $this->assertEquals('D2', $data->get('b.d.d2')); + + $this->setExpectedException('RuntimeException'); + + $data->remove('', 'broken'); + } + + public function testGet() + { + $data = new Data($this->getSampleData()); + + $this->runSampleDataTests($data); + } + + public function testHas() + { + $data = new Data($this->getSampleData()); + + foreach ( + array('a', 'i', 'b.d', 'f.g.h', 'h.i', 'b.d.d1') as $existentKey + ) { + $this->assertTrue($data->has($existentKey)); + } + + foreach ( + array('p', 'b.b1', 'b.c.C1', 'h.i.I', 'b.d.d1.D1') as $notExistentKey + ) { + $this->assertFalse($data->has($notExistentKey)); + } + } + + public function testGetData() + { + $wrappedData = new Data(array( + 'wrapped' => array( + 'sampleData' => $this->getSampleData() + ), + )); + + $data = $wrappedData->getData('wrapped.sampleData'); + + $this->runSampleDataTests($data); + + $this->setExpectedException('RuntimeException'); + + $data = $wrappedData->getData('wrapped.sampleData.a'); + } + + public function testImport() + { + $data = new Data(); + $data->import($this->getSampleData()); + + $this->runSampleDataTests($data); + } + + public function testImportData() + { + $data = new Data(); + $data->importData(new Data($this->getSampleData())); + + $this->runSampleDataTests($data); + } + + public function testExport() + { + $data = new Data($this->getSampleData()); + + $this->assertEquals($this->getSampleData(), $data->export()); + } +} diff --git a/lib/composer/vendor/dflydev/dot-access-data/tests/Dflydev/DotAccessData/UtilTest.php b/lib/composer/vendor/dflydev/dot-access-data/tests/Dflydev/DotAccessData/UtilTest.php new file mode 100644 index 000000000..3a7c9ac59 --- /dev/null +++ b/lib/composer/vendor/dflydev/dot-access-data/tests/Dflydev/DotAccessData/UtilTest.php @@ -0,0 +1,121 @@ +assertTrue(Util::isAssoc(array('a' => 'A',))); + $this->assertTrue(Util::isAssoc(array())); + $this->assertFalse(Util::isAssoc(array(1 => 'One',))); + } + + /** + * @dataProvider mergeAssocArrayProvider + */ + public function testMergeAssocArray($message, $to, $from, $clobber, $expectedResult) + { + $result = Util::mergeAssocArray($to, $from, $clobber); + $this->assertEquals($expectedResult, $result, $message); + } + + public function mergeAssocArrayProvider() + { + return array( + + array( + 'Clobber should replace to value with from value for strings (shallow)', + // to + array('a' => 'A'), + // from + array('a' => 'B'), + // clobber + true, + // expected result + array('a' => 'B'), + ), + + array( + 'Clobber should replace to value with from value for strings (deep)', + // to + array('a' => array('b' => 'B',),), + // from + array('a' => array('b' => 'C',),), + // clobber + true, + // expected result + array('a' => array('b' => 'C',),), + ), + + array( + 'Clobber should NOTreplace to value with from value for strings (shallow)', + // to + array('a' => 'A'), + // from + array('a' => 'B'), + // clobber + false, + // expected result + array('a' => 'A'), + ), + + array( + 'Clobber should NOT replace to value with from value for strings (deep)', + // to + array('a' => array('b' => 'B',),), + // from + array('a' => array('b' => 'C',),), + // clobber + false, + // expected result + array('a' => array('b' => 'B',),), + ), + + array( + 'Associative arrays should be combined', + // to + array('a' => array('b' => 'B',),), + // from + array('a' => array('c' => 'C',),), + // clobber + null, + // expected result + array('a' => array('b' => 'B', 'c' => 'C',),), + ), + + array( + 'Arrays should be replaced (with clobber enabled)', + // to + array('a' => array('b', 'c',)), + // from + array('a' => array('B', 'C',),), + // clobber + true, + // expected result + array('a' => array('B', 'C',),), + ), + + array( + 'Arrays should be NOT replaced (with clobber disabled)', + // to + array('a' => array('b', 'c',)), + // from + array('a' => array('B', 'C',),), + // clobber + false, + // expected result + array('a' => array('b', 'c',),), + ), + ); + } +} diff --git a/lib/composer/vendor/dflydev/dot-access-data/tests/bootstrap.php b/lib/composer/vendor/dflydev/dot-access-data/tests/bootstrap.php new file mode 100644 index 000000000..a10725e95 --- /dev/null +++ b/lib/composer/vendor/dflydev/dot-access-data/tests/bootstrap.php @@ -0,0 +1,13 @@ +frames = array_filter($this->frames, $callable); + $this->frames = array_values(array_filter($this->frames, $callable)); return $this; } @@ -146,7 +146,7 @@ public function count() */ public function countIsApplication() { - return count(array_filter($this->frames, function(Frame $f) { + return count(array_filter($this->frames, function (Frame $f) { return $f->isApplication(); })); } diff --git a/lib/composer/vendor/filp/whoops/src/Whoops/Exception/Inspector.php b/lib/composer/vendor/filp/whoops/src/Whoops/Exception/Inspector.php index 108c2ae0d..c88323bef 100644 --- a/lib/composer/vendor/filp/whoops/src/Whoops/Exception/Inspector.php +++ b/lib/composer/vendor/filp/whoops/src/Whoops/Exception/Inspector.php @@ -67,7 +67,8 @@ public function getExceptionDocrefUrl() return $this->extractDocrefUrl($this->exception->getMessage())['url']; } - private function extractDocrefUrl($message) { + private function extractDocrefUrl($message) + { $docref = [ 'message' => $message, 'url' => null, @@ -128,7 +129,6 @@ public function getFrames() // Fill empty line/file info for call_user_func_array usages (PHP Bug #44428) foreach ($frames as $k => $frame) { - if (empty($frame['file'])) { // Default values when file and line are missing $file = '[internal]'; @@ -144,7 +144,6 @@ public function getFrames() $frames[$k]['file'] = $file; $frames[$k]['line'] = $line; } - } // Find latest non-error handling frame index ($i) used to remove error handling frames diff --git a/lib/composer/vendor/filp/whoops/src/Whoops/Handler/Handler.php b/lib/composer/vendor/filp/whoops/src/Whoops/Handler/Handler.php index 78bad01d7..cf1f70877 100644 --- a/lib/composer/vendor/filp/whoops/src/Whoops/Handler/Handler.php +++ b/lib/composer/vendor/filp/whoops/src/Whoops/Handler/Handler.php @@ -14,13 +14,20 @@ */ abstract class Handler implements HandlerInterface { - /** - * Return constants that can be returned from Handler::handle - * to message the handler walker. + /* + Return constants that can be returned from Handler::handle + to message the handler walker. */ const DONE = 0x10; // returning this is optional, only exists for // semantic purposes + /** + * The Handler has handled the Throwable in some way, and wishes to skip any other Handler. + * Execution will continue. + */ const LAST_HANDLER = 0x20; + /** + * The Handler has handled the Throwable in some way, and wishes to quit/stop execution + */ const QUIT = 0x30; /** diff --git a/lib/composer/vendor/filp/whoops/src/Whoops/Handler/JsonResponseHandler.php b/lib/composer/vendor/filp/whoops/src/Whoops/Handler/JsonResponseHandler.php index f3559a7b5..fdd7ead35 100644 --- a/lib/composer/vendor/filp/whoops/src/Whoops/Handler/JsonResponseHandler.php +++ b/lib/composer/vendor/filp/whoops/src/Whoops/Handler/JsonResponseHandler.php @@ -55,23 +55,23 @@ public function addTraceToOutput($returnFrames = null) */ public function handle() { - if ($this->jsonApi === true) { - $response = [ - 'errors' => [ - Formatter::formatExceptionAsDataArray( - $this->getInspector(), - $this->addTraceToOutput() - ), - ] - ]; - } else { - $response = [ - 'error' => Formatter::formatExceptionAsDataArray( - $this->getInspector(), - $this->addTraceToOutput() - ), - ]; - } + if ($this->jsonApi === true) { + $response = [ + 'errors' => [ + Formatter::formatExceptionAsDataArray( + $this->getInspector(), + $this->addTraceToOutput() + ), + ] + ]; + } else { + $response = [ + 'error' => Formatter::formatExceptionAsDataArray( + $this->getInspector(), + $this->addTraceToOutput() + ), + ]; + } echo json_encode($response, defined('JSON_PARTIAL_OUTPUT_ON_ERROR') ? JSON_PARTIAL_OUTPUT_ON_ERROR : 0); diff --git a/lib/composer/vendor/filp/whoops/src/Whoops/Handler/PlainTextHandler.php b/lib/composer/vendor/filp/whoops/src/Whoops/Handler/PlainTextHandler.php index 78dbacb47..2f5be9067 100644 --- a/lib/composer/vendor/filp/whoops/src/Whoops/Handler/PlainTextHandler.php +++ b/lib/composer/vendor/filp/whoops/src/Whoops/Handler/PlainTextHandler.php @@ -151,7 +151,8 @@ public function setTraceFunctionArgsOutputLimit($traceFunctionArgsOutputLimit) public function generateResponse() { $exception = $this->getException(); - return sprintf("%s: %s in file %s on line %d%s\n", + return sprintf( + "%s: %s in file %s on line %d%s\n", get_class($exception), $exception->getMessage(), $exception->getFile(), @@ -221,7 +222,8 @@ private function getFrameArgsOutput(Frame $frame, $line) ); } - return sprintf("\n%s", + return sprintf( + "\n%s", preg_replace('/^/m', self::VAR_DUMP_PREFIX, ob_get_clean()) ); } diff --git a/lib/composer/vendor/filp/whoops/src/Whoops/Handler/PrettyPageHandler.php b/lib/composer/vendor/filp/whoops/src/Whoops/Handler/PrettyPageHandler.php index 0f215a8b4..1a0fcc832 100644 --- a/lib/composer/vendor/filp/whoops/src/Whoops/Handler/PrettyPageHandler.php +++ b/lib/composer/vendor/filp/whoops/src/Whoops/Handler/PrettyPageHandler.php @@ -168,6 +168,7 @@ public function handle() $templateFile = $this->getResource("views/layout.html.php"); $cssFile = $this->getResource("css/whoops.base.css"); $zeptoFile = $this->getResource("js/zepto.min.js"); + $prettifyFile = $this->getResource("js/prettify.min.js"); $clipboard = $this->getResource("js/clipboard.min.js"); $jsFile = $this->getResource("js/whoops.base.js"); @@ -186,6 +187,7 @@ public function handle() // @todo: Asset compiler "stylesheet" => file_get_contents($cssFile), "zepto" => file_get_contents($zeptoFile), + "prettify" => file_get_contents($prettifyFile), "clipboard" => file_get_contents($clipboard), "javascript" => file_get_contents($jsFile), @@ -491,7 +493,7 @@ protected function getEditor($filePath, $line) } if (is_string($this->editor) && isset($this->editors[$this->editor]) && !is_callable($this->editors[$this->editor])) { - return [ + return [ 'ajax' => false, 'url' => $this->editors[$this->editor], ]; @@ -674,7 +676,8 @@ public function setApplicationRootPath($applicationRootPath) * @param $superGlobalName string the name of the superglobal array, e.g. '_GET' * @param $key string the key within the superglobal */ - public function blacklist($superGlobalName, $key) { + public function blacklist($superGlobalName, $key) + { $this->blacklist[$superGlobalName][] = $key; } @@ -688,11 +691,12 @@ public function blacklist($superGlobalName, $key) { * @param $superGlobalName string the name of the superglobal array, e.g. '_GET' * @return array $values without sensitive data */ - private function masked(array $superGlobal, $superGlobalName) { + private function masked(array $superGlobal, $superGlobalName) + { $blacklisted = $this->blacklist[$superGlobalName]; $values = $superGlobal; - foreach($blacklisted as $key) { + foreach ($blacklisted as $key) { if (isset($superGlobal[$key])) { $values[$key] = str_repeat('*', strlen($superGlobal[$key])); } diff --git a/lib/composer/vendor/filp/whoops/src/Whoops/Handler/XmlResponseHandler.php b/lib/composer/vendor/filp/whoops/src/Whoops/Handler/XmlResponseHandler.php index f94497f9b..b6f93c576 100644 --- a/lib/composer/vendor/filp/whoops/src/Whoops/Handler/XmlResponseHandler.php +++ b/lib/composer/vendor/filp/whoops/src/Whoops/Handler/XmlResponseHandler.php @@ -62,7 +62,7 @@ public function contentType() /** * @param SimpleXMLElement $node Node to append data to, will be modified in place - * @param array|Traversable $data + * @param array|\Traversable $data * @return SimpleXMLElement The modified node, for chaining */ private static function addDataToNode(\SimpleXMLElement $node, $data) @@ -93,7 +93,7 @@ private static function addDataToNode(\SimpleXMLElement $node, $data) /** * The main function for converting to an XML document. * - * @param array|Traversable $data + * @param array|\Traversable $data * @return string XML */ private static function toXml($data) diff --git a/lib/composer/vendor/filp/whoops/src/Whoops/Resources/css/whoops.base.css b/lib/composer/vendor/filp/whoops/src/Whoops/Resources/css/whoops.base.css index 56109b8a1..0289f122c 100644 --- a/lib/composer/vendor/filp/whoops/src/Whoops/Resources/css/whoops.base.css +++ b/lib/composer/vendor/filp/whoops/src/Whoops/Resources/css/whoops.base.css @@ -228,8 +228,6 @@ header { } .code-block { - max-height: 345px; - overflow: hidden; padding: 10px; margin: 0; border-radius: 6px; @@ -384,13 +382,15 @@ pre.code-block, code.code-block, .frame-args.code-block, .frame-args.code-block .linenums li.current{ background: rgba(255, 100, 100, .07); - padding-top: 4px; - padding-left: 1px; } .linenums li.current.active { background: rgba(255, 100, 100, .17); } +pre:not(.prettyprinted) { + padding-left: 60px; +} + #plain-exception { display: none; } diff --git a/lib/composer/vendor/filp/whoops/src/Whoops/Resources/js/prettify.min.js b/lib/composer/vendor/filp/whoops/src/Whoops/Resources/js/prettify.min.js new file mode 100644 index 000000000..4827bc3f9 --- /dev/null +++ b/lib/composer/vendor/filp/whoops/src/Whoops/Resources/js/prettify.min.js @@ -0,0 +1,28 @@ +var r=null;window.PR_SHOULD_USE_CONTINUATION=!0; +(function(){function O(a){function i(d){var a=d.charCodeAt(0);if(a!==92)return a;var f=d.charAt(1);return(a=s[f])?a:"0"<=f&&f<="7"?parseInt(d.substring(1),8):f==="u"||f==="x"?parseInt(d.substring(2),16):d.charCodeAt(1)}function g(d){if(d<32)return(d<16?"\\x0":"\\x")+d.toString(16);d=String.fromCharCode(d);return d==="\\"||d==="-"||d==="]"||d==="^"?"\\"+d:d}function j(d){var a=d.substring(1,d.length-1).match(/\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\[0-3][0-7]{0,2}|\\[0-7]{1,2}|\\[\S\s]|[^\\]/g),d=[],f= +a[0]==="^",b=["["];f&&b.push("^");for(var f=f?1:0,c=a.length;f122||(e<65||h>90||d.push([Math.max(65,h)|32,Math.min(e,90)|32]),e<97||h>122||d.push([Math.max(97,h)&-33,Math.min(e,122)&-33]))}}d.sort(function(d,a){return d[0]-a[0]||a[1]-d[1]});a=[];c=[];for(f=0;fh[0]&&(h[1]+1>h[0]&&b.push("-"),b.push(g(h[1])));b.push("]");return b.join("")}function t(d){for(var a=d.source.match(/\[(?:[^\\\]]|\\[\S\s])*]|\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\\d+|\\[^\dux]|\(\?[!:=]|[()^]|[^()[\\^]+/g),b=a.length,i=[],c=0,h=0;c=2&&d==="["?a[c]=j(e):d!=="\\"&&(a[c]=e.replace(/[A-Za-z]/g,function(d){d=d.charCodeAt(0);return"["+String.fromCharCode(d&-33,d|32)+"]"}));return a.join("")}for(var z=0,w=!1,k=!1,m=0,b=a.length;m=5&&"lang-"===f.substring(0, +5))&&!(u&&typeof u[1]==="string"))c=!1,f="src";c||(s[v]=f)}h=b;b+=v.length;if(c){c=u[1];var e=v.indexOf(c),p=e+c.length;u[2]&&(p=v.length-u[2].length,e=p-c.length);f=f.substring(5);E(k+h,v.substring(0,e),g,m);E(k+h+e,c,F(f,c),m);E(k+h+p,v.substring(p),g,m)}else m.push(k+h,f)}a.g=m}var j={},t;(function(){for(var g=a.concat(i),k=[],m={},b=0,o=g.length;b=0;)j[q.charAt(d)]=s;s=s[1];q=""+s;m.hasOwnProperty(q)||(k.push(s),m[q]=r)}k.push(/[\S\s]/);t= +O(k)})();var z=i.length;return g}function l(a){var i=[],g=[];a.tripleQuotedStrings?i.push(["str",/^(?:'''(?:[^'\\]|\\[\S\s]|''?(?=[^']))*(?:'''|$)|"""(?:[^"\\]|\\[\S\s]|""?(?=[^"]))*(?:"""|$)|'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$))/,r,"'\""]):a.multiLineStrings?i.push(["str",/^(?:'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$)|`(?:[^\\`]|\\[\S\s])*(?:`|$))/,r,"'\"`"]):i.push(["str",/^(?:'(?:[^\n\r'\\]|\\.)*(?:'|$)|"(?:[^\n\r"\\]|\\.)*(?:"|$))/,r,"\"'"]);a.verbatimStrings&& +g.push(["str",/^@"(?:[^"]|"")*(?:"|$)/,r]);var j=a.hashComments;j&&(a.cStyleComments?(j>1?i.push(["com",/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,r,"#"]):i.push(["com",/^#(?:(?:define|e(?:l|nd)if|else|error|ifn?def|include|line|pragma|undef|warning)\b|[^\n\r]*)/,r,"#"]),g.push(["str",/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h(?:h|pp|\+\+)?|[a-z]\w*)>/,r])):i.push(["com",/^#[^\n\r]*/,r,"#"]));a.cStyleComments&&(g.push(["com",/^\/\/[^\n\r]*/,r]),g.push(["com",/^\/\*[\S\s]*?(?:\*\/|$)/, +r]));a.regexLiterals&&g.push(["lang-regex",/^(?:^^\.?|[+-]|[!=]={0,2}|#|%=?|&&?=?|\(|\*=?|[+-]=|->|\/=?|::?|<{1,3}=?|[,;?@[{~]|\^\^?=?|\|\|?=?|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\s*(\/(?=[^*/])(?:[^/[\\]|\\[\S\s]|\[(?:[^\\\]]|\\[\S\s])*(?:]|$))+\/)/]);(j=a.types)&&g.push(["typ",j]);a=(""+a.keywords).replace(/^ | $/g,"");a.length&&g.push(["kwd",RegExp("^(?:"+a.replace(/[\s,]+/g,"|")+")\\b"),r]);i.push(["pln",/^\s+/,r," \r\n\t\u00a0"]);g.push(["lit", +/^@[$_a-z][\w$@]*/i,r],["typ",/^(?:[@_]?[A-Z]+[a-z][\w$@]*|\w+_t\b)/,r],["pln",/^[$_a-z][\w$@]*/i,r],["lit",/^(?:0x[\da-f]+|(?:\d(?:_\d+)*\d*(?:\.\d*)?|\.\d\+)(?:e[+-]?\d+)?)[a-z]*/i,r,"0123456789"],["pln",/^\\[\S\s]?/,r],["pun",/^.[^\s\w"$'./@\\`]*/,r]);return x(i,g)}function G(a,i,g){function j(a){switch(a.nodeType){case 1:if(z.test(a.className))break;if("br"===a.nodeName)t(a),a.parentNode&&a.parentNode.removeChild(a);else for(a=a.firstChild;a;a=a.nextSibling)j(a);break;case 3:case 4:if(g){var b= +a.nodeValue,f=b.match(n);if(f){var i=b.substring(0,f.index);a.nodeValue=i;(b=b.substring(f.index+f[0].length))&&a.parentNode.insertBefore(k.createTextNode(b),a.nextSibling);t(a);i||a.parentNode.removeChild(a)}}}}function t(a){function i(a,b){var d=b?a.cloneNode(!1):a,e=a.parentNode;if(e){var e=i(e,1),f=a.nextSibling;e.appendChild(d);for(var g=f;g;g=f)f=g.nextSibling,e.appendChild(g)}return d}for(;!a.nextSibling;)if(a=a.parentNode,!a)return;for(var a=i(a.nextSibling,0),f;(f=a.parentNode)&&f.nodeType=== +1;)a=f;b.push(a)}for(var z=/(?:^|\s)nocode(?:\s|$)/,n=/\r\n?|\n/,k=a.ownerDocument,m=k.createElement("li");a.firstChild;)m.appendChild(a.firstChild);for(var b=[m],o=0;o=0;){var j= +i[g];A.hasOwnProperty(j)?C.console&&console.warn("cannot override language handler %s",j):A[j]=a}}function F(a,i){if(!a||!A.hasOwnProperty(a))a=/^\s*=e&&(j+=2);g>=p&&(s+=2)}}finally{if(c)c.style.display=h}}catch(A){C.console&&console.log(A&&A.stack?A.stack:A)}}var C=window,y=["break,continue,do,else,for,if,return,while"],B=[[y,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"],"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"],I=[B,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"], +J=[B,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"],K=[J,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,let,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var,virtual,where"],B=[B,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"], +L=[y,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"],M=[y,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"],y=[y,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"],N=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)\b/, +Q=/\S/,R=l({keywords:[I,K,B,"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END"+L,M,y],hashComments:!0,cStyleComments:!0,multiLineStrings:!0,regexLiterals:!0}),A={};n(R,["default-code"]);n(x([],[["pln",/^[^]*(?:>|$)/],["com",/^<\!--[\S\s]*?(?:--\>|$)/],["lang-",/^<\?([\S\s]+?)(?:\?>|$)/],["lang-",/^<%([\S\s]+?)(?:%>|$)/],["pun",/^(?:<[%?]|[%?]>)/],["lang-", +/^]*>([\S\s]+?)<\/xmp\b[^>]*>/i],["lang-js",/^]*>([\S\s]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\S\s]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]),["default-markup","htm","html","mxml","xhtml","xml","xsl"]);n(x([["pln",/^\s+/,r," \t\r\n"],["atv",/^(?:"[^"]*"?|'[^']*'?)/,r,"\"'"]],[["tag",/^^<\/?[a-z](?:[\w-.:]*\w)?|\/?>$/i],["atn",/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^\s"'>]*(?:[^\s"'/>]|\/(?=\s)))/],["pun",/^[/<->]+/], +["lang-js",/^on\w+\s*=\s*"([^"]+)"/i],["lang-js",/^on\w+\s*=\s*'([^']+)'/i],["lang-js",/^on\w+\s*=\s*([^\s"'>]+)/i],["lang-css",/^style\s*=\s*"([^"]+)"/i],["lang-css",/^style\s*=\s*'([^']+)'/i],["lang-css",/^style\s*=\s*([^\s"'>]+)/i]]),["in.tag"]);n(x([],[["atv",/^[\S\s]+/]]),["uq.val"]);n(l({keywords:I,hashComments:!0,cStyleComments:!0,types:N}),["c","cc","cpp","cxx","cyc","m"]);n(l({keywords:"null,true,false"}),["json"]);n(l({keywords:K,hashComments:!0,cStyleComments:!0,verbatimStrings:!0,types:N}), +["cs"]);n(l({keywords:J,cStyleComments:!0}),["java"]);n(l({keywords:y,hashComments:!0,multiLineStrings:!0}),["bsh","csh","sh"]);n(l({keywords:L,hashComments:!0,multiLineStrings:!0,tripleQuotedStrings:!0}),["cv","py"]);n(l({keywords:"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END",hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),["perl","pl","pm"]);n(l({keywords:M,hashComments:!0, +multiLineStrings:!0,regexLiterals:!0}),["rb"]);n(l({keywords:B,cStyleComments:!0,regexLiterals:!0}),["js"]);n(l({keywords:"all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,throw,true,try,unless,until,when,while,yes",hashComments:3,cStyleComments:!0,multilineStrings:!0,tripleQuotedStrings:!0,regexLiterals:!0}),["coffee"]);n(x([],[["str",/^[\S\s]+/]]),["regex"]);var S=C.PR={createSimpleLexer:x,registerLangHandler:n,sourceDecorator:l, +PR_ATTRIB_NAME:"atn",PR_ATTRIB_VALUE:"atv",PR_COMMENT:"com",PR_DECLARATION:"dec",PR_KEYWORD:"kwd",PR_LITERAL:"lit",PR_NOCODE:"nocode",PR_PLAIN:"pln",PR_PUNCTUATION:"pun",PR_SOURCE:"src",PR_STRING:"str",PR_TAG:"tag",PR_TYPE:"typ",prettyPrintOne:C.prettyPrintOne=function(a,i,g){var j=document.createElement("pre");j.innerHTML=a;g&&G(j,g,!0);H({h:i,j:g,c:j,i:1});return j.innerHTML},prettyPrint:C.prettyPrint=function(a){function i(){var u;for(var g=C.PR_SHOULD_USE_CONTINUATION?k.now()+250:Infinity;m 0) { $offset[0].scrollIntoView(); @@ -186,6 +175,9 @@ Zepto(function($) { } }); + // Render late enough for highlightCurrentLine to be ready + renderCurrentCodeblock(); + // Avoid to quit the page with some protocol (e.g. IntelliJ Platform REST API) $ajaxEditors.on('click', function(e){ e.preventDefault(); diff --git a/lib/composer/vendor/filp/whoops/src/Whoops/Resources/views/frames_description.html.php b/lib/composer/vendor/filp/whoops/src/Whoops/Resources/views/frames_description.html.php index ac53ca819..e32cf8890 100644 --- a/lib/composer/vendor/filp/whoops/src/Whoops/Resources/views/frames_description.html.php +++ b/lib/composer/vendor/filp/whoops/src/Whoops/Resources/views/frames_description.html.php @@ -1,13 +1,13 @@ \ No newline at end of file + diff --git a/lib/composer/vendor/filp/whoops/src/Whoops/Resources/views/layout.html.php b/lib/composer/vendor/filp/whoops/src/Whoops/Resources/views/layout.html.php index 8756ab968..76911d0df 100644 --- a/lib/composer/vendor/filp/whoops/src/Whoops/Resources/views/layout.html.php +++ b/lib/composer/vendor/filp/whoops/src/Whoops/Resources/views/layout.html.php @@ -7,6 +7,7 @@ + <?php echo $tpl->escape($page_title) ?> @@ -23,6 +24,7 @@ + diff --git a/lib/composer/vendor/filp/whoops/src/Whoops/Util/HtmlDumperOutput.php b/lib/composer/vendor/filp/whoops/src/Whoops/Util/HtmlDumperOutput.php index 748632318..8c828fd92 100644 --- a/lib/composer/vendor/filp/whoops/src/Whoops/Util/HtmlDumperOutput.php +++ b/lib/composer/vendor/filp/whoops/src/Whoops/Util/HtmlDumperOutput.php @@ -33,5 +33,4 @@ public function clear() { $this->output = null; } - } diff --git a/lib/composer/vendor/filp/whoops/src/Whoops/Util/Misc.php b/lib/composer/vendor/filp/whoops/src/Whoops/Util/Misc.php index 7ab5ae8d3..001a68794 100644 --- a/lib/composer/vendor/filp/whoops/src/Whoops/Util/Misc.php +++ b/lib/composer/vendor/filp/whoops/src/Whoops/Util/Misc.php @@ -9,15 +9,15 @@ class Misc { /** - * Can we at this point in time send HTTP headers? - * - * Currently this checks if we are even serving an HTTP request, - * as opposed to running from a command line. - * - * If we are serving an HTTP request, we check if it's not too late. - * - * @return bool - */ + * Can we at this point in time send HTTP headers? + * + * Currently this checks if we are even serving an HTTP request, + * as opposed to running from a command line. + * + * If we are serving an HTTP request, we check if it's not too late. + * + * @return bool + */ public static function canSendHeaders() { return isset($_SERVER["REQUEST_URI"]) && !headers_sent(); @@ -40,15 +40,15 @@ public static function isCommandLine() } /** - * Translate ErrorException code into the represented constant. - * - * @param int $error_code - * @return string - */ + * Translate ErrorException code into the represented constant. + * + * @param int $error_code + * @return string + */ public static function translateErrorCode($error_code) { $constants = get_defined_constants(true); - if (array_key_exists('Core' , $constants)) { + if (array_key_exists('Core', $constants)) { foreach ($constants['Core'] as $constant => $value) { if (substr($constant, 0, 2) == 'E_' && $value == $error_code) { return $constant; @@ -60,7 +60,7 @@ public static function translateErrorCode($error_code) /** * Determine if an error level is fatal (halts execution) - * + * * @param int $level * @return bool */ diff --git a/lib/composer/vendor/filp/whoops/src/Whoops/Util/TemplateHelper.php b/lib/composer/vendor/filp/whoops/src/Whoops/Util/TemplateHelper.php index c8e7f6bb4..00f6ae499 100644 --- a/lib/composer/vendor/filp/whoops/src/Whoops/Util/TemplateHelper.php +++ b/lib/composer/vendor/filp/whoops/src/Whoops/Util/TemplateHelper.php @@ -88,7 +88,8 @@ public function escapeButPreserveUris($raw) $escaped = $this->escape($raw); return preg_replace( "@([A-z]+?://([-\w\.]+[-\w])+(:\d+)?(/([\w/_\.#-]*(\?\S+)?[^\.\s])?)?)@", - "$1", $escaped + "$1", + $escaped ); } @@ -166,7 +167,7 @@ public function dump($value) // exclude verbose information (e.g. exception stack traces) if (class_exists('Symfony\Component\VarDumper\Caster\Caster')) { $cloneVar = $this->getCloner()->cloneVar($value, Caster::EXCLUDE_VERBOSE); - // Symfony VarDumper 2.6 Caster class dont exist. + // Symfony VarDumper 2.6 Caster class dont exist. } else { $cloneVar = $this->getCloner()->cloneVar($value); } @@ -182,7 +183,7 @@ public function dump($value) return $output; } - return print_r($value, true); + return htmlspecialchars(print_r($value, true)); } /** @@ -203,7 +204,7 @@ public function dumpArgs(Frame $frame) if ($numFrames > 0) { $html = '
    '; - foreach($frame->getArgs() as $j => $frameArg) { + foreach ($frame->getArgs() as $j => $frameArg) { $html .= '
  1. '. $this->dump($frameArg) .'
  2. '; } $html .= '
'; @@ -265,7 +266,7 @@ public function setVariables(array $variables) * Sets a single template variable, by its name: * * @param string $variableName - * @param mixd $variableValue + * @param mixed $variableValue */ public function setVariable($variableName, $variableValue) { diff --git a/lib/composer/vendor/gettext/languages/bin/export-plural-rules b/lib/composer/vendor/gettext/languages/bin/export-plural-rules new file mode 100755 index 000000000..e246599cb --- /dev/null +++ b/lib/composer/vendor/gettext/languages/bin/export-plural-rules @@ -0,0 +1,4 @@ +#!/usr/bin/env php +=5.3" - } -} + "name" : "gettext/languages", + "description" : "gettext languages with plural rules", + "keywords" : [ + "localization", + "l10n", + "internationalization", + "i18n", + "translations", + "translate", + "php", + "unicode", + "cldr", + "language", + "languages", + "plural", + "plurals", + "plural rules" + ], + "homepage" : "https://github.com/mlocati/cldr-to-gettext-plural-rules", + "license" : "MIT", + "authors" : [{ + "name" : "Michele Locati", + "email" : "mlocati@gmail.com", + "role" : "Developer" + } + ], + "autoload" : { + "psr-4" : { + "Gettext\\Languages\\" : "src/" + } + }, + "require" : { + "php" : ">=5.3" + }, + "require-dev": { + "phpunit/phpunit": "^4" + }, + "scripts": { + "test": "phpunit" + }, + "bin" : [ + "bin/export-plural-rules", + "bin/export-plural-rules.php" + ] +} \ No newline at end of file diff --git a/lib/composer/vendor/gettext/languages/src/CldrData.php b/lib/composer/vendor/gettext/languages/src/CldrData.php index 07023201f..81b1d9fa8 100644 --- a/lib/composer/vendor/gettext/languages/src/CldrData.php +++ b/lib/composer/vendor/gettext/languages/src/CldrData.php @@ -36,7 +36,7 @@ private static function getData($key) $match = null; foreach ($list as $key => $value) { $variant = ''; - if (preg_match('/^(.+)-alt-(short|variant|stand-alone)$/', $key, $match)) { + if (preg_match('/^(.+)-alt-(short|variant|stand-alone|long)$/', $key, $match)) { $key = $match[1]; $variant = $match[2]; } @@ -54,17 +54,13 @@ private static function getData($key) case 'Zzzz': // Script: Unknown Script break; default: - if ( - ((strlen($key) !== 4) || ($key < 'Qaaa') || ($key > 'Qabx')) // Script: Reserved for private use - ) { - switch ($variant) { - case 'stand-alone': - $standAlone[$key] = $value; - break; - case '': - $result[$key] = $value; - break; - } + switch ($variant) { + case 'stand-alone': + $standAlone[$key] = $value; + break; + case '': + $result[$key] = $value; + break; } break; } diff --git a/lib/composer/vendor/gettext/languages/src/FormulaConverter.php b/lib/composer/vendor/gettext/languages/src/FormulaConverter.php index 27960903a..4890117ce 100644 --- a/lib/composer/vendor/gettext/languages/src/FormulaConverter.php +++ b/lib/composer/vendor/gettext/languages/src/FormulaConverter.php @@ -129,7 +129,11 @@ private static function expandAtom($atom) $chunk = "$what >= $from && $what <= $to"; break; case '!=': - $chunk = "($what < $from || $what > $to)"; + if ($what === 'n' && $from <= 0) { + $chunk = "$what > $to"; + } else { + $chunk = "($what < $from || $what > $to)"; + } break; } } diff --git a/lib/composer/vendor/gettext/languages/src/Language.php b/lib/composer/vendor/gettext/languages/src/Language.php index 898bb61e9..2323400cd 100644 --- a/lib/composer/vendor/gettext/languages/src/Language.php +++ b/lib/composer/vendor/gettext/languages/src/Language.php @@ -73,7 +73,7 @@ private function __construct($info) $this->categories[] = $category; } if (empty($this->categories)) { - throw new Exception("The language '$id' does not have any plural category"); + throw new Exception("The language '{$info['id']}' does not have any plural category"); } // Let's sort the categories from 'zero' to 'other' usort($this->categories, function (Category $category1, Category $category2) { @@ -81,7 +81,7 @@ private function __construct($info) }); // The 'other' category should always be there if ($this->categories[count($this->categories) - 1]->id !== CldrData::OTHER_CATEGORY) { - throw new Exception("The language '$id' does not have the '".CldrData::OTHER_CATEGORY."' plural category"); + throw new Exception("The language '{$info['id']}' does not have the '".CldrData::OTHER_CATEGORY."' plural category"); } $this->checkAlwaysTrueCategories(); $this->checkAlwaysFalseCategories(); diff --git a/lib/composer/vendor/gettext/languages/src/cldr-data/main/en-US/languages.json b/lib/composer/vendor/gettext/languages/src/cldr-data/main/en-US/languages.json index 808a36d83..b58f1a592 100644 --- a/lib/composer/vendor/gettext/languages/src/cldr-data/main/en-US/languages.json +++ b/lib/composer/vendor/gettext/languages/src/cldr-data/main/en-US/languages.json @@ -1,636 +1,642 @@ -{ - "main": { - "en-US": { - "identity": { - "version": { - "_cldrVersion": "27", - "_number": "$Revision: 10669 $" - }, - "generation": { - "_date": "$Date: 2014-07-23 16:10:33 -0500 (Wed, 23 Jul 2014) $" - }, - "language": "en", - "territory": "US" - }, - "localeDisplayNames": { - "languages": { - "aa": "Afar", - "ab": "Abkhazian", - "ace": "Achinese", - "ach": "Acoli", - "ada": "Adangme", - "ady": "Adyghe", - "ae": "Avestan", - "aeb": "Tunisian Arabic", - "af": "Afrikaans", - "afh": "Afrihili", - "agq": "Aghem", - "ain": "Ainu", - "ak": "Akan", - "akk": "Akkadian", - "akz": "Alabama", - "ale": "Aleut", - "aln": "Gheg Albanian", - "alt": "Southern Altai", - "am": "Amharic", - "an": "Aragonese", - "ang": "Old English", - "anp": "Angika", - "ar": "Arabic", - "ar-001": "Modern Standard Arabic", - "arc": "Aramaic", - "arn": "Mapuche", - "aro": "Araona", - "arp": "Arapaho", - "arq": "Algerian Arabic", - "arw": "Arawak", - "ary": "Moroccan Arabic", - "arz": "Egyptian Arabic", - "as": "Assamese", - "asa": "Asu", - "ase": "American Sign Language", - "ast": "Asturian", - "av": "Avaric", - "avk": "Kotava", - "awa": "Awadhi", - "ay": "Aymara", - "az": "Azerbaijani", - "az-alt-short": "Azeri", - "azb": "South Azerbaijani", - "ba": "Bashkir", - "bal": "Baluchi", - "ban": "Balinese", - "bar": "Bavarian", - "bas": "Basaa", - "bax": "Bamun", - "bbc": "Batak Toba", - "bbj": "Ghomala", - "be": "Belarusian", - "bej": "Beja", - "bem": "Bemba", - "bew": "Betawi", - "bez": "Bena", - "bfd": "Bafut", - "bfq": "Badaga", - "bg": "Bulgarian", - "bho": "Bhojpuri", - "bi": "Bislama", - "bik": "Bikol", - "bin": "Bini", - "bjn": "Banjar", - "bkm": "Kom", - "bla": "Siksika", - "bm": "Bambara", - "bn": "Bengali", - "bo": "Tibetan", - "bpy": "Bishnupriya", - "bqi": "Bakhtiari", - "br": "Breton", - "bra": "Braj", - "brh": "Brahui", - "brx": "Bodo", - "bs": "Bosnian", - "bss": "Akoose", - "bua": "Buriat", - "bug": "Buginese", - "bum": "Bulu", - "byn": "Blin", - "byv": "Medumba", - "ca": "Catalan", - "cad": "Caddo", - "car": "Carib", - "cay": "Cayuga", - "cch": "Atsam", - "ce": "Chechen", - "ceb": "Cebuano", - "cgg": "Chiga", - "ch": "Chamorro", - "chb": "Chibcha", - "chg": "Chagatai", - "chk": "Chuukese", - "chm": "Mari", - "chn": "Chinook Jargon", - "cho": "Choctaw", - "chp": "Chipewyan", - "chr": "Cherokee", - "chy": "Cheyenne", - "ckb": "Central Kurdish", - "co": "Corsican", - "cop": "Coptic", - "cps": "Capiznon", - "cr": "Cree", - "crh": "Crimean Turkish", - "cs": "Czech", - "csb": "Kashubian", - "cu": "Church Slavic", - "cv": "Chuvash", - "cy": "Welsh", - "da": "Danish", - "dak": "Dakota", - "dar": "Dargwa", - "dav": "Taita", - "de": "German", - "de-AT": "Austrian German", - "de-CH": "Swiss High German", - "del": "Delaware", - "den": "Slave", - "dgr": "Dogrib", - "din": "Dinka", - "dje": "Zarma", - "doi": "Dogri", - "dsb": "Lower Sorbian", - "dtp": "Central Dusun", - "dua": "Duala", - "dum": "Middle Dutch", - "dv": "Divehi", - "dyo": "Jola-Fonyi", - "dyu": "Dyula", - "dz": "Dzongkha", - "dzg": "Dazaga", - "ebu": "Embu", - "ee": "Ewe", - "efi": "Efik", - "egl": "Emilian", - "egy": "Ancient Egyptian", - "eka": "Ekajuk", - "el": "Greek", - "elx": "Elamite", - "en": "English", - "en-AU": "Australian English", - "en-CA": "Canadian English", - "en-GB": "British English", - "en-GB-alt-short": "UK English", - "en-US": "American English", - "en-US-alt-short": "US English", - "enm": "Middle English", - "eo": "Esperanto", - "es": "Spanish", - "es-419": "Latin American Spanish", - "es-ES": "European Spanish", - "es-MX": "Mexican Spanish", - "esu": "Central Yupik", - "et": "Estonian", - "eu": "Basque", - "ewo": "Ewondo", - "ext": "Extremaduran", - "fa": "Persian", - "fan": "Fang", - "fat": "Fanti", - "ff": "Fulah", - "fi": "Finnish", - "fil": "Filipino", - "fit": "Tornedalen Finnish", - "fj": "Fijian", - "fo": "Faroese", - "fon": "Fon", - "fr": "French", - "fr-CA": "Canadian French", - "fr-CH": "Swiss French", - "frc": "Cajun French", - "frm": "Middle French", - "fro": "Old French", - "frp": "Arpitan", - "frr": "Northern Frisian", - "frs": "Eastern Frisian", - "fur": "Friulian", - "fy": "Western Frisian", - "ga": "Irish", - "gaa": "Ga", - "gag": "Gagauz", - "gan": "Gan Chinese", - "gay": "Gayo", - "gba": "Gbaya", - "gbz": "Zoroastrian Dari", - "gd": "Scottish Gaelic", - "gez": "Geez", - "gil": "Gilbertese", - "gl": "Galician", - "glk": "Gilaki", - "gmh": "Middle High German", - "gn": "Guarani", - "goh": "Old High German", - "gom": "Goan Konkani", - "gon": "Gondi", - "gor": "Gorontalo", - "got": "Gothic", - "grb": "Grebo", - "grc": "Ancient Greek", - "gsw": "Swiss German", - "gu": "Gujarati", - "guc": "Wayuu", - "gur": "Frafra", - "guz": "Gusii", - "gv": "Manx", - "gwi": "Gwichʼin", - "ha": "Hausa", - "hai": "Haida", - "hak": "Hakka Chinese", - "haw": "Hawaiian", - "he": "Hebrew", - "hi": "Hindi", - "hif": "Fiji Hindi", - "hil": "Hiligaynon", - "hit": "Hittite", - "hmn": "Hmong", - "ho": "Hiri Motu", - "hr": "Croatian", - "hsb": "Upper Sorbian", - "hsn": "Xiang Chinese", - "ht": "Haitian", - "hu": "Hungarian", - "hup": "Hupa", - "hy": "Armenian", - "hz": "Herero", - "ia": "Interlingua", - "iba": "Iban", - "ibb": "Ibibio", - "id": "Indonesian", - "ie": "Interlingue", - "ig": "Igbo", - "ii": "Sichuan Yi", - "ik": "Inupiaq", - "ilo": "Iloko", - "inh": "Ingush", - "io": "Ido", - "is": "Icelandic", - "it": "Italian", - "iu": "Inuktitut", - "izh": "Ingrian", - "ja": "Japanese", - "jam": "Jamaican Creole English", - "jbo": "Lojban", - "jgo": "Ngomba", - "jmc": "Machame", - "jpr": "Judeo-Persian", - "jrb": "Judeo-Arabic", - "jut": "Jutish", - "jv": "Javanese", - "ka": "Georgian", - "kaa": "Kara-Kalpak", - "kab": "Kabyle", - "kac": "Kachin", - "kaj": "Jju", - "kam": "Kamba", - "kaw": "Kawi", - "kbd": "Kabardian", - "kbl": "Kanembu", - "kcg": "Tyap", - "kde": "Makonde", - "kea": "Kabuverdianu", - "ken": "Kenyang", - "kfo": "Koro", - "kg": "Kongo", - "kgp": "Kaingang", - "kha": "Khasi", - "kho": "Khotanese", - "khq": "Koyra Chiini", - "khw": "Khowar", - "ki": "Kikuyu", - "kiu": "Kirmanjki", - "kj": "Kuanyama", - "kk": "Kazakh", - "kkj": "Kako", - "kl": "Kalaallisut", - "kln": "Kalenjin", - "km": "Khmer", - "kmb": "Kimbundu", - "kn": "Kannada", - "ko": "Korean", - "koi": "Komi-Permyak", - "kok": "Konkani", - "kos": "Kosraean", - "kpe": "Kpelle", - "kr": "Kanuri", - "krc": "Karachay-Balkar", - "kri": "Krio", - "krj": "Kinaray-a", - "krl": "Karelian", - "kru": "Kurukh", - "ks": "Kashmiri", - "ksb": "Shambala", - "ksf": "Bafia", - "ksh": "Colognian", - "ku": "Kurdish", - "kum": "Kumyk", - "kut": "Kutenai", - "kv": "Komi", - "kw": "Cornish", - "ky": "Kyrgyz", - "ky-alt-variant": "Kirghiz", - "la": "Latin", - "lad": "Ladino", - "lag": "Langi", - "lah": "Lahnda", - "lam": "Lamba", - "lb": "Luxembourgish", - "lez": "Lezghian", - "lfn": "Lingua Franca Nova", - "lg": "Ganda", - "li": "Limburgish", - "lij": "Ligurian", - "liv": "Livonian", - "lkt": "Lakota", - "lmo": "Lombard", - "ln": "Lingala", - "lo": "Lao", - "lol": "Mongo", - "loz": "Lozi", - "lt": "Lithuanian", - "ltg": "Latgalian", - "lu": "Luba-Katanga", - "lua": "Luba-Lulua", - "lui": "Luiseno", - "lun": "Lunda", - "luo": "Luo", - "lus": "Mizo", - "luy": "Luyia", - "lv": "Latvian", - "lzh": "Literary Chinese", - "lzz": "Laz", - "mad": "Madurese", - "maf": "Mafa", - "mag": "Magahi", - "mai": "Maithili", - "mak": "Makasar", - "man": "Mandingo", - "mas": "Masai", - "mde": "Maba", - "mdf": "Moksha", - "mdr": "Mandar", - "men": "Mende", - "mer": "Meru", - "mfe": "Morisyen", - "mg": "Malagasy", - "mga": "Middle Irish", - "mgh": "Makhuwa-Meetto", - "mgo": "Metaʼ", - "mh": "Marshallese", - "mi": "Maori", - "mic": "Micmac", - "min": "Minangkabau", - "mk": "Macedonian", - "ml": "Malayalam", - "mn": "Mongolian", - "mnc": "Manchu", - "mni": "Manipuri", - "moh": "Mohawk", - "mos": "Mossi", - "mr": "Marathi", - "mrj": "Western Mari", - "ms": "Malay", - "mt": "Maltese", - "mua": "Mundang", - "mul": "Multiple Languages", - "mus": "Creek", - "mwl": "Mirandese", - "mwr": "Marwari", - "mwv": "Mentawai", - "my": "Burmese", - "mye": "Myene", - "myv": "Erzya", - "mzn": "Mazanderani", - "na": "Nauru", - "nan": "Min Nan Chinese", - "nap": "Neapolitan", - "naq": "Nama", - "nb": "Norwegian Bokmål", - "nd": "North Ndebele", - "nds": "Low German", - "ne": "Nepali", - "new": "Newari", - "ng": "Ndonga", - "nia": "Nias", - "niu": "Niuean", - "njo": "Ao Naga", - "nl": "Dutch", - "nl-BE": "Flemish", - "nmg": "Kwasio", - "nn": "Norwegian Nynorsk", - "nnh": "Ngiemboon", - "no": "Norwegian", - "nog": "Nogai", - "non": "Old Norse", - "nov": "Novial", - "nqo": "NʼKo", - "nr": "South Ndebele", - "nso": "Northern Sotho", - "nus": "Nuer", - "nv": "Navajo", - "nwc": "Classical Newari", - "ny": "Nyanja", - "nym": "Nyamwezi", - "nyn": "Nyankole", - "nyo": "Nyoro", - "nzi": "Nzima", - "oc": "Occitan", - "oj": "Ojibwa", - "om": "Oromo", - "or": "Oriya", - "os": "Ossetic", - "osa": "Osage", - "ota": "Ottoman Turkish", - "pa": "Punjabi", - "pag": "Pangasinan", - "pal": "Pahlavi", - "pam": "Pampanga", - "pap": "Papiamento", - "pau": "Palauan", - "pcd": "Picard", - "pdc": "Pennsylvania German", - "pdt": "Plautdietsch", - "peo": "Old Persian", - "pfl": "Palatine German", - "phn": "Phoenician", - "pi": "Pali", - "pl": "Polish", - "pms": "Piedmontese", - "pnt": "Pontic", - "pon": "Pohnpeian", - "prg": "Prussian", - "pro": "Old Provençal", - "ps": "Pashto", - "ps-alt-variant": "Pushto", - "pt": "Portuguese", - "pt-BR": "Brazilian Portuguese", - "pt-PT": "European Portuguese", - "qu": "Quechua", - "quc": "Kʼicheʼ", - "qug": "Chimborazo Highland Quichua", - "raj": "Rajasthani", - "rap": "Rapanui", - "rar": "Rarotongan", - "rgn": "Romagnol", - "rif": "Riffian", - "rm": "Romansh", - "rn": "Rundi", - "ro": "Romanian", - "ro-MD": "Moldavian", - "rof": "Rombo", - "rom": "Romany", - "root": "Root", - "rtm": "Rotuman", - "ru": "Russian", - "rue": "Rusyn", - "rug": "Roviana", - "rup": "Aromanian", - "rw": "Kinyarwanda", - "rwk": "Rwa", - "sa": "Sanskrit", - "sad": "Sandawe", - "sah": "Sakha", - "sam": "Samaritan Aramaic", - "saq": "Samburu", - "sas": "Sasak", - "sat": "Santali", - "saz": "Saurashtra", - "sba": "Ngambay", - "sbp": "Sangu", - "sc": "Sardinian", - "scn": "Sicilian", - "sco": "Scots", - "sd": "Sindhi", - "sdc": "Sassarese Sardinian", - "se": "Northern Sami", - "see": "Seneca", - "seh": "Sena", - "sei": "Seri", - "sel": "Selkup", - "ses": "Koyraboro Senni", - "sg": "Sango", - "sga": "Old Irish", - "sgs": "Samogitian", - "sh": "Serbo-Croatian", - "shi": "Tachelhit", - "shn": "Shan", - "shu": "Chadian Arabic", - "si": "Sinhala", - "sid": "Sidamo", - "sk": "Slovak", - "sl": "Slovenian", - "sli": "Lower Silesian", - "sly": "Selayar", - "sm": "Samoan", - "sma": "Southern Sami", - "smj": "Lule Sami", - "smn": "Inari Sami", - "sms": "Skolt Sami", - "sn": "Shona", - "snk": "Soninke", - "so": "Somali", - "sog": "Sogdien", - "sq": "Albanian", - "sr": "Serbian", - "srn": "Sranan Tongo", - "srr": "Serer", - "ss": "Swati", - "ssy": "Saho", - "st": "Southern Sotho", - "stq": "Saterland Frisian", - "su": "Sundanese", - "suk": "Sukuma", - "sus": "Susu", - "sux": "Sumerian", - "sv": "Swedish", - "sw": "Swahili", - "swb": "Comorian", - "swc": "Congo Swahili", - "syc": "Classical Syriac", - "syr": "Syriac", - "szl": "Silesian", - "ta": "Tamil", - "tcy": "Tulu", - "te": "Telugu", - "tem": "Timne", - "teo": "Teso", - "ter": "Tereno", - "tet": "Tetum", - "tg": "Tajik", - "th": "Thai", - "ti": "Tigrinya", - "tig": "Tigre", - "tiv": "Tiv", - "tk": "Turkmen", - "tkl": "Tokelau", - "tkr": "Tsakhur", - "tl": "Tagalog", - "tlh": "Klingon", - "tli": "Tlingit", - "tly": "Talysh", - "tmh": "Tamashek", - "tn": "Tswana", - "to": "Tongan", - "tog": "Nyasa Tonga", - "tpi": "Tok Pisin", - "tr": "Turkish", - "tru": "Turoyo", - "trv": "Taroko", - "ts": "Tsonga", - "tsd": "Tsakonian", - "tsi": "Tsimshian", - "tt": "Tatar", - "ttt": "Muslim Tat", - "tum": "Tumbuka", - "tvl": "Tuvalu", - "tw": "Twi", - "twq": "Tasawaq", - "ty": "Tahitian", - "tyv": "Tuvinian", - "tzm": "Central Atlas Tamazight", - "udm": "Udmurt", - "ug": "Uyghur", - "ug-alt-variant": "Uighur", - "uga": "Ugaritic", - "uk": "Ukrainian", - "umb": "Umbundu", - "und": "Unknown Language", - "ur": "Urdu", - "uz": "Uzbek", - "vai": "Vai", - "ve": "Venda", - "vec": "Venetian", - "vep": "Veps", - "vi": "Vietnamese", - "vls": "West Flemish", - "vmf": "Main-Franconian", - "vo": "Volapük", - "vot": "Votic", - "vro": "Võro", - "vun": "Vunjo", - "wa": "Walloon", - "wae": "Walser", - "wal": "Wolaytta", - "war": "Waray", - "was": "Washo", - "wbp": "Warlpiri", - "wo": "Wolof", - "wuu": "Wu Chinese", - "xal": "Kalmyk", - "xh": "Xhosa", - "xmf": "Mingrelian", - "xog": "Soga", - "yao": "Yao", - "yap": "Yapese", - "yav": "Yangben", - "ybb": "Yemba", - "yi": "Yiddish", - "yo": "Yoruba", - "yrl": "Nheengatu", - "yue": "Cantonese", - "za": "Zhuang", - "zap": "Zapotec", - "zbl": "Blissymbols", - "zea": "Zeelandic", - "zen": "Zenaga", - "zgh": "Standard Moroccan Tamazight", - "zh": "Chinese", - "zh-Hans": "Simplified Chinese", - "zh-Hant": "Traditional Chinese", - "zu": "Zulu", - "zun": "Zuni", - "zxx": "No linguistic content", - "zza": "Zaza" - } - } - } - } -} +{ + "main": { + "en-US": { + "identity": { + "version": { + "_number": "$Revision: 13133 $", + "_cldrVersion": "31" + }, + "language": "en", + "territory": "US" + }, + "localeDisplayNames": { + "languages": { + "aa": "Afar", + "ab": "Abkhazian", + "ace": "Achinese", + "ach": "Acoli", + "ada": "Adangme", + "ady": "Adyghe", + "ae": "Avestan", + "aeb": "Tunisian Arabic", + "af": "Afrikaans", + "afh": "Afrihili", + "agq": "Aghem", + "ain": "Ainu", + "ak": "Akan", + "akk": "Akkadian", + "akz": "Alabama", + "ale": "Aleut", + "aln": "Gheg Albanian", + "alt": "Southern Altai", + "am": "Amharic", + "an": "Aragonese", + "ang": "Old English", + "anp": "Angika", + "ar": "Arabic", + "ar-001": "Modern Standard Arabic", + "arc": "Aramaic", + "arn": "Mapuche", + "aro": "Araona", + "arp": "Arapaho", + "arq": "Algerian Arabic", + "ars": "Najdi Arabic", + "arw": "Arawak", + "ary": "Moroccan Arabic", + "arz": "Egyptian Arabic", + "as": "Assamese", + "asa": "Asu", + "ase": "American Sign Language", + "ast": "Asturian", + "av": "Avaric", + "avk": "Kotava", + "awa": "Awadhi", + "ay": "Aymara", + "az": "Azerbaijani", + "az-alt-short": "Azeri", + "ba": "Bashkir", + "bal": "Baluchi", + "ban": "Balinese", + "bar": "Bavarian", + "bas": "Basaa", + "bax": "Bamun", + "bbc": "Batak Toba", + "bbj": "Ghomala", + "be": "Belarusian", + "bej": "Beja", + "bem": "Bemba", + "bew": "Betawi", + "bez": "Bena", + "bfd": "Bafut", + "bfq": "Badaga", + "bg": "Bulgarian", + "bgn": "Western Balochi", + "bho": "Bhojpuri", + "bi": "Bislama", + "bik": "Bikol", + "bin": "Bini", + "bjn": "Banjar", + "bkm": "Kom", + "bla": "Siksika", + "bm": "Bambara", + "bn": "Bangla", + "bo": "Tibetan", + "bpy": "Bishnupriya", + "bqi": "Bakhtiari", + "br": "Breton", + "bra": "Braj", + "brh": "Brahui", + "brx": "Bodo", + "bs": "Bosnian", + "bss": "Akoose", + "bua": "Buriat", + "bug": "Buginese", + "bum": "Bulu", + "byn": "Blin", + "byv": "Medumba", + "ca": "Catalan", + "cad": "Caddo", + "car": "Carib", + "cay": "Cayuga", + "cch": "Atsam", + "ce": "Chechen", + "ceb": "Cebuano", + "cgg": "Chiga", + "ch": "Chamorro", + "chb": "Chibcha", + "chg": "Chagatai", + "chk": "Chuukese", + "chm": "Mari", + "chn": "Chinook Jargon", + "cho": "Choctaw", + "chp": "Chipewyan", + "chr": "Cherokee", + "chy": "Cheyenne", + "ckb": "Central Kurdish", + "co": "Corsican", + "cop": "Coptic", + "cps": "Capiznon", + "cr": "Cree", + "crh": "Crimean Turkish", + "crs": "Seselwa Creole French", + "cs": "Czech", + "csb": "Kashubian", + "cu": "Church Slavic", + "cv": "Chuvash", + "cy": "Welsh", + "da": "Danish", + "dak": "Dakota", + "dar": "Dargwa", + "dav": "Taita", + "de": "German", + "de-AT": "Austrian German", + "de-CH": "Swiss High German", + "del": "Delaware", + "den": "Slave", + "dgr": "Dogrib", + "din": "Dinka", + "dje": "Zarma", + "doi": "Dogri", + "dsb": "Lower Sorbian", + "dtp": "Central Dusun", + "dua": "Duala", + "dum": "Middle Dutch", + "dv": "Divehi", + "dyo": "Jola-Fonyi", + "dyu": "Dyula", + "dz": "Dzongkha", + "dzg": "Dazaga", + "ebu": "Embu", + "ee": "Ewe", + "efi": "Efik", + "egl": "Emilian", + "egy": "Ancient Egyptian", + "eka": "Ekajuk", + "el": "Greek", + "elx": "Elamite", + "en": "English", + "en-AU": "Australian English", + "en-CA": "Canadian English", + "en-GB": "British English", + "en-GB-alt-short": "UK English", + "en-US": "American English", + "en-US-alt-short": "US English", + "enm": "Middle English", + "eo": "Esperanto", + "es": "Spanish", + "es-419": "Latin American Spanish", + "es-ES": "European Spanish", + "es-MX": "Mexican Spanish", + "esu": "Central Yupik", + "et": "Estonian", + "eu": "Basque", + "ewo": "Ewondo", + "ext": "Extremaduran", + "fa": "Persian", + "fa-AF": "Dari", + "fan": "Fang", + "fat": "Fanti", + "ff": "Fulah", + "fi": "Finnish", + "fil": "Filipino", + "fit": "Tornedalen Finnish", + "fj": "Fijian", + "fo": "Faroese", + "fon": "Fon", + "fr": "French", + "fr-CA": "Canadian French", + "fr-CH": "Swiss French", + "frc": "Cajun French", + "frm": "Middle French", + "fro": "Old French", + "frp": "Arpitan", + "frr": "Northern Frisian", + "frs": "Eastern Frisian", + "fur": "Friulian", + "fy": "Western Frisian", + "ga": "Irish", + "gaa": "Ga", + "gag": "Gagauz", + "gan": "Gan Chinese", + "gay": "Gayo", + "gba": "Gbaya", + "gbz": "Zoroastrian Dari", + "gd": "Scottish Gaelic", + "gez": "Geez", + "gil": "Gilbertese", + "gl": "Galician", + "glk": "Gilaki", + "gmh": "Middle High German", + "gn": "Guarani", + "goh": "Old High German", + "gom": "Goan Konkani", + "gon": "Gondi", + "gor": "Gorontalo", + "got": "Gothic", + "grb": "Grebo", + "grc": "Ancient Greek", + "gsw": "Swiss German", + "gu": "Gujarati", + "guc": "Wayuu", + "gur": "Frafra", + "guz": "Gusii", + "gv": "Manx", + "gwi": "Gwichʼin", + "ha": "Hausa", + "hai": "Haida", + "hak": "Hakka Chinese", + "haw": "Hawaiian", + "he": "Hebrew", + "hi": "Hindi", + "hif": "Fiji Hindi", + "hil": "Hiligaynon", + "hit": "Hittite", + "hmn": "Hmong", + "ho": "Hiri Motu", + "hr": "Croatian", + "hsb": "Upper Sorbian", + "hsn": "Xiang Chinese", + "ht": "Haitian Creole", + "hu": "Hungarian", + "hup": "Hupa", + "hy": "Armenian", + "hz": "Herero", + "ia": "Interlingua", + "iba": "Iban", + "ibb": "Ibibio", + "id": "Indonesian", + "ie": "Interlingue", + "ig": "Igbo", + "ii": "Sichuan Yi", + "ik": "Inupiaq", + "ilo": "Iloko", + "inh": "Ingush", + "io": "Ido", + "is": "Icelandic", + "it": "Italian", + "iu": "Inuktitut", + "izh": "Ingrian", + "ja": "Japanese", + "jam": "Jamaican Creole English", + "jbo": "Lojban", + "jgo": "Ngomba", + "jmc": "Machame", + "jpr": "Judeo-Persian", + "jrb": "Judeo-Arabic", + "jut": "Jutish", + "jv": "Javanese", + "ka": "Georgian", + "kaa": "Kara-Kalpak", + "kab": "Kabyle", + "kac": "Kachin", + "kaj": "Jju", + "kam": "Kamba", + "kaw": "Kawi", + "kbd": "Kabardian", + "kbl": "Kanembu", + "kcg": "Tyap", + "kde": "Makonde", + "kea": "Kabuverdianu", + "ken": "Kenyang", + "kfo": "Koro", + "kg": "Kongo", + "kgp": "Kaingang", + "kha": "Khasi", + "kho": "Khotanese", + "khq": "Koyra Chiini", + "khw": "Khowar", + "ki": "Kikuyu", + "kiu": "Kirmanjki", + "kj": "Kuanyama", + "kk": "Kazakh", + "kkj": "Kako", + "kl": "Kalaallisut", + "kln": "Kalenjin", + "km": "Khmer", + "kmb": "Kimbundu", + "kn": "Kannada", + "ko": "Korean", + "koi": "Komi-Permyak", + "kok": "Konkani", + "kos": "Kosraean", + "kpe": "Kpelle", + "kr": "Kanuri", + "krc": "Karachay-Balkar", + "kri": "Krio", + "krj": "Kinaray-a", + "krl": "Karelian", + "kru": "Kurukh", + "ks": "Kashmiri", + "ksb": "Shambala", + "ksf": "Bafia", + "ksh": "Colognian", + "ku": "Kurdish", + "kum": "Kumyk", + "kut": "Kutenai", + "kv": "Komi", + "kw": "Cornish", + "ky": "Kyrgyz", + "ky-alt-variant": "Kirghiz", + "la": "Latin", + "lad": "Ladino", + "lag": "Langi", + "lah": "Lahnda", + "lam": "Lamba", + "lb": "Luxembourgish", + "lez": "Lezghian", + "lfn": "Lingua Franca Nova", + "lg": "Ganda", + "li": "Limburgish", + "lij": "Ligurian", + "liv": "Livonian", + "lkt": "Lakota", + "lmo": "Lombard", + "ln": "Lingala", + "lo": "Lao", + "lol": "Mongo", + "loz": "Lozi", + "lrc": "Northern Luri", + "lt": "Lithuanian", + "ltg": "Latgalian", + "lu": "Luba-Katanga", + "lua": "Luba-Lulua", + "lui": "Luiseno", + "lun": "Lunda", + "luo": "Luo", + "lus": "Mizo", + "luy": "Luyia", + "lv": "Latvian", + "lzh": "Literary Chinese", + "lzz": "Laz", + "mad": "Madurese", + "maf": "Mafa", + "mag": "Magahi", + "mai": "Maithili", + "mak": "Makasar", + "man": "Mandingo", + "mas": "Masai", + "mde": "Maba", + "mdf": "Moksha", + "mdr": "Mandar", + "men": "Mende", + "mer": "Meru", + "mfe": "Morisyen", + "mg": "Malagasy", + "mga": "Middle Irish", + "mgh": "Makhuwa-Meetto", + "mgo": "Metaʼ", + "mh": "Marshallese", + "mi": "Maori", + "mic": "Mi'kmaq", + "min": "Minangkabau", + "mk": "Macedonian", + "ml": "Malayalam", + "mn": "Mongolian", + "mnc": "Manchu", + "mni": "Manipuri", + "moh": "Mohawk", + "mos": "Mossi", + "mr": "Marathi", + "mrj": "Western Mari", + "ms": "Malay", + "mt": "Maltese", + "mua": "Mundang", + "mul": "Multiple languages", + "mus": "Creek", + "mwl": "Mirandese", + "mwr": "Marwari", + "mwv": "Mentawai", + "my": "Burmese", + "my-alt-variant": "Myanmar Language", + "mye": "Myene", + "myv": "Erzya", + "mzn": "Mazanderani", + "na": "Nauru", + "nan": "Min Nan Chinese", + "nap": "Neapolitan", + "naq": "Nama", + "nb": "Norwegian Bokmål", + "nd": "North Ndebele", + "nds": "Low German", + "nds-NL": "Low Saxon", + "ne": "Nepali", + "new": "Newari", + "ng": "Ndonga", + "nia": "Nias", + "niu": "Niuean", + "njo": "Ao Naga", + "nl": "Dutch", + "nl-BE": "Flemish", + "nmg": "Kwasio", + "nn": "Norwegian Nynorsk", + "nnh": "Ngiemboon", + "no": "Norwegian", + "nog": "Nogai", + "non": "Old Norse", + "nov": "Novial", + "nqo": "N’Ko", + "nr": "South Ndebele", + "nso": "Northern Sotho", + "nus": "Nuer", + "nv": "Navajo", + "nwc": "Classical Newari", + "ny": "Nyanja", + "nym": "Nyamwezi", + "nyn": "Nyankole", + "nyo": "Nyoro", + "nzi": "Nzima", + "oc": "Occitan", + "oj": "Ojibwa", + "om": "Oromo", + "or": "Odia", + "os": "Ossetic", + "osa": "Osage", + "ota": "Ottoman Turkish", + "pa": "Punjabi", + "pag": "Pangasinan", + "pal": "Pahlavi", + "pam": "Pampanga", + "pap": "Papiamento", + "pau": "Palauan", + "pcd": "Picard", + "pcm": "Nigerian Pidgin", + "pdc": "Pennsylvania German", + "pdt": "Plautdietsch", + "peo": "Old Persian", + "pfl": "Palatine German", + "phn": "Phoenician", + "pi": "Pali", + "pl": "Polish", + "pms": "Piedmontese", + "pnt": "Pontic", + "pon": "Pohnpeian", + "prg": "Prussian", + "pro": "Old Provençal", + "ps": "Pashto", + "ps-alt-variant": "Pushto", + "pt": "Portuguese", + "pt-BR": "Brazilian Portuguese", + "pt-PT": "European Portuguese", + "qu": "Quechua", + "quc": "Kʼicheʼ", + "qug": "Chimborazo Highland Quichua", + "raj": "Rajasthani", + "rap": "Rapanui", + "rar": "Rarotongan", + "rgn": "Romagnol", + "rif": "Riffian", + "rm": "Romansh", + "rn": "Rundi", + "ro": "Romanian", + "ro-MD": "Moldavian", + "rof": "Rombo", + "rom": "Romany", + "root": "Root", + "rtm": "Rotuman", + "ru": "Russian", + "rue": "Rusyn", + "rug": "Roviana", + "rup": "Aromanian", + "rw": "Kinyarwanda", + "rwk": "Rwa", + "sa": "Sanskrit", + "sad": "Sandawe", + "sah": "Sakha", + "sam": "Samaritan Aramaic", + "saq": "Samburu", + "sas": "Sasak", + "sat": "Santali", + "saz": "Saurashtra", + "sba": "Ngambay", + "sbp": "Sangu", + "sc": "Sardinian", + "scn": "Sicilian", + "sco": "Scots", + "sd": "Sindhi", + "sdc": "Sassarese Sardinian", + "sdh": "Southern Kurdish", + "se": "Northern Sami", + "see": "Seneca", + "seh": "Sena", + "sei": "Seri", + "sel": "Selkup", + "ses": "Koyraboro Senni", + "sg": "Sango", + "sga": "Old Irish", + "sgs": "Samogitian", + "sh": "Serbo-Croatian", + "shi": "Tachelhit", + "shn": "Shan", + "shu": "Chadian Arabic", + "si": "Sinhala", + "sid": "Sidamo", + "sk": "Slovak", + "sl": "Slovenian", + "sli": "Lower Silesian", + "sly": "Selayar", + "sm": "Samoan", + "sma": "Southern Sami", + "smj": "Lule Sami", + "smn": "Inari Sami", + "sms": "Skolt Sami", + "sn": "Shona", + "snk": "Soninke", + "so": "Somali", + "sog": "Sogdien", + "sq": "Albanian", + "sr": "Serbian", + "srn": "Sranan Tongo", + "srr": "Serer", + "ss": "Swati", + "ssy": "Saho", + "st": "Southern Sotho", + "stq": "Saterland Frisian", + "su": "Sundanese", + "suk": "Sukuma", + "sus": "Susu", + "sux": "Sumerian", + "sv": "Swedish", + "sw": "Swahili", + "sw-CD": "Congo Swahili", + "swb": "Comorian", + "syc": "Classical Syriac", + "syr": "Syriac", + "szl": "Silesian", + "ta": "Tamil", + "tcy": "Tulu", + "te": "Telugu", + "tem": "Timne", + "teo": "Teso", + "ter": "Tereno", + "tet": "Tetum", + "tg": "Tajik", + "th": "Thai", + "ti": "Tigrinya", + "tig": "Tigre", + "tiv": "Tiv", + "tk": "Turkmen", + "tkl": "Tokelau", + "tkr": "Tsakhur", + "tl": "Tagalog", + "tlh": "Klingon", + "tli": "Tlingit", + "tly": "Talysh", + "tmh": "Tamashek", + "tn": "Tswana", + "to": "Tongan", + "tog": "Nyasa Tonga", + "tpi": "Tok Pisin", + "tr": "Turkish", + "tru": "Turoyo", + "trv": "Taroko", + "ts": "Tsonga", + "tsd": "Tsakonian", + "tsi": "Tsimshian", + "tt": "Tatar", + "ttt": "Muslim Tat", + "tum": "Tumbuka", + "tvl": "Tuvalu", + "tw": "Twi", + "twq": "Tasawaq", + "ty": "Tahitian", + "tyv": "Tuvinian", + "tzm": "Central Atlas Tamazight", + "udm": "Udmurt", + "ug": "Uyghur", + "ug-alt-variant": "Uighur", + "uga": "Ugaritic", + "uk": "Ukrainian", + "umb": "Umbundu", + "und": "Unknown language", + "ur": "Urdu", + "uz": "Uzbek", + "vai": "Vai", + "ve": "Venda", + "vec": "Venetian", + "vep": "Veps", + "vi": "Vietnamese", + "vls": "West Flemish", + "vmf": "Main-Franconian", + "vo": "Volapük", + "vot": "Votic", + "vro": "Võro", + "vun": "Vunjo", + "wa": "Walloon", + "wae": "Walser", + "wal": "Wolaytta", + "war": "Waray", + "was": "Washo", + "wbp": "Warlpiri", + "wo": "Wolof", + "wuu": "Wu Chinese", + "xal": "Kalmyk", + "xh": "Xhosa", + "xmf": "Mingrelian", + "xog": "Soga", + "yao": "Yao", + "yap": "Yapese", + "yav": "Yangben", + "ybb": "Yemba", + "yi": "Yiddish", + "yo": "Yoruba", + "yrl": "Nheengatu", + "yue": "Cantonese", + "za": "Zhuang", + "zap": "Zapotec", + "zbl": "Blissymbols", + "zea": "Zeelandic", + "zen": "Zenaga", + "zgh": "Standard Moroccan Tamazight", + "zh": "Chinese", + "zh-alt-long": "Mandarin Chinese", + "zh-Hans": "Simplified Chinese", + "zh-Hant": "Traditional Chinese", + "zu": "Zulu", + "zun": "Zuni", + "zxx": "No linguistic content", + "zza": "Zaza" + } + } + } + } +} diff --git a/lib/composer/vendor/gettext/languages/src/cldr-data/main/en-US/scripts.json b/lib/composer/vendor/gettext/languages/src/cldr-data/main/en-US/scripts.json index 83185ede3..315db5b1b 100644 --- a/lib/composer/vendor/gettext/languages/src/cldr-data/main/en-US/scripts.json +++ b/lib/composer/vendor/gettext/languages/src/cldr-data/main/en-US/scripts.json @@ -1,239 +1,198 @@ -{ - "main": { - "en-US": { - "identity": { - "version": { - "_cldrVersion": "27", - "_number": "$Revision: 10669 $" - }, - "generation": { - "_date": "$Date: 2014-07-23 16:10:33 -0500 (Wed, 23 Jul 2014) $" - }, - "language": "en", - "territory": "US" - }, - "localeDisplayNames": { - "scripts": { - "Afak": "Afaka", - "Aghb": "Caucasian Albanian", - "Arab": "Arabic", - "Arab-alt-variant": "Perso-Arabic", - "Armi": "Imperial Aramaic", - "Armn": "Armenian", - "Avst": "Avestan", - "Bali": "Balinese", - "Bamu": "Bamum", - "Bass": "Bassa Vah", - "Batk": "Batak", - "Beng": "Bengali", - "Blis": "Blissymbols", - "Bopo": "Bopomofo", - "Brah": "Brahmi", - "Brai": "Braille", - "Bugi": "Buginese", - "Buhd": "Buhid", - "Cakm": "Chakma", - "Cans": "Unified Canadian Aboriginal Syllabics", - "Cans-alt-short": "UCAS", - "Cari": "Carian", - "Cham": "Cham", - "Cher": "Cherokee", - "Cirt": "Cirth", - "Copt": "Coptic", - "Cprt": "Cypriot", - "Cyrl": "Cyrillic", - "Cyrs": "Old Church Slavonic Cyrillic", - "Deva": "Devanagari", - "Dsrt": "Deseret", - "Dupl": "Duployan shorthand", - "Egyd": "Egyptian demotic", - "Egyh": "Egyptian hieratic", - "Egyp": "Egyptian hieroglyphs", - "Elba": "Elbasan", - "Ethi": "Ethiopic", - "Geok": "Georgian Khutsuri", - "Geor": "Georgian", - "Glag": "Glagolitic", - "Goth": "Gothic", - "Gran": "Grantha", - "Grek": "Greek", - "Gujr": "Gujarati", - "Guru": "Gurmukhi", - "Hang": "Hangul", - "Hani": "Han", - "Hano": "Hanunoo", - "Hans": "Simplified", - "Hans-alt-stand-alone": "Simplified Han", - "Hant": "Traditional", - "Hant-alt-stand-alone": "Traditional Han", - "Hebr": "Hebrew", - "Hira": "Hiragana", - "Hluw": "Anatolian Hieroglyphs", - "Hmng": "Pahawh Hmong", - "Hrkt": "Japanese syllabaries", - "Hung": "Old Hungarian", - "Inds": "Indus", - "Ital": "Old Italic", - "Java": "Javanese", - "Jpan": "Japanese", - "Jurc": "Jurchen", - "Kali": "Kayah Li", - "Kana": "Katakana", - "Khar": "Kharoshthi", - "Khmr": "Khmer", - "Khoj": "Khojki", - "Knda": "Kannada", - "Kore": "Korean", - "Kpel": "Kpelle", - "Kthi": "Kaithi", - "Lana": "Lanna", - "Laoo": "Lao", - "Latf": "Fraktur Latin", - "Latg": "Gaelic Latin", - "Latn": "Latin", - "Lepc": "Lepcha", - "Limb": "Limbu", - "Lina": "Linear A", - "Linb": "Linear B", - "Lisu": "Fraser", - "Loma": "Loma", - "Lyci": "Lycian", - "Lydi": "Lydian", - "Mahj": "Mahajani", - "Mand": "Mandaean", - "Mani": "Manichaean", - "Maya": "Mayan hieroglyphs", - "Mend": "Mende", - "Merc": "Meroitic Cursive", - "Mero": "Meroitic", - "Mlym": "Malayalam", - "Modi": "Modi", - "Mong": "Mongolian", - "Moon": "Moon", - "Mroo": "Mro", - "Mtei": "Meitei Mayek", - "Mymr": "Myanmar", - "Narb": "Old North Arabian", - "Nbat": "Nabataean", - "Nkgb": "Naxi Geba", - "Nkoo": "N’Ko", - "Nshu": "Nüshu", - "Ogam": "Ogham", - "Olck": "Ol Chiki", - "Orkh": "Orkhon", - "Orya": "Oriya", - "Osma": "Osmanya", - "Palm": "Palmyrene", - "Pauc": "Pau Cin Hau", - "Perm": "Old Permic", - "Phag": "Phags-pa", - "Phli": "Inscriptional Pahlavi", - "Phlp": "Psalter Pahlavi", - "Phlv": "Book Pahlavi", - "Phnx": "Phoenician", - "Plrd": "Pollard Phonetic", - "Prti": "Inscriptional Parthian", - "Qaaa": "Qaaa", - "Qaab": "Qaab", - "Qaac": "Qaac", - "Qaad": "Qaad", - "Qaae": "Qaae", - "Qaaf": "Qaaf", - "Qaag": "Qaag", - "Qaah": "Qaah", - "Qaaj": "Qaaj", - "Qaak": "Qaak", - "Qaal": "Qaal", - "Qaam": "Qaam", - "Qaan": "Qaan", - "Qaao": "Qaao", - "Qaap": "Qaap", - "Qaaq": "Qaaq", - "Qaar": "Qaar", - "Qaas": "Qaas", - "Qaat": "Qaat", - "Qaau": "Qaau", - "Qaav": "Qaav", - "Qaaw": "Qaaw", - "Qaax": "Qaax", - "Qaay": "Qaay", - "Qaaz": "Qaaz", - "Qaba": "Qaba", - "Qabb": "Qabb", - "Qabc": "Qabc", - "Qabd": "Qabd", - "Qabe": "Qabe", - "Qabf": "Qabf", - "Qabg": "Qabg", - "Qabh": "Qabh", - "Qabi": "Qabi", - "Qabj": "Qabj", - "Qabk": "Qabk", - "Qabl": "Qabl", - "Qabm": "Qabm", - "Qabn": "Qabn", - "Qabo": "Qabo", - "Qabp": "Qabp", - "Qabq": "Qabq", - "Qabr": "Qabr", - "Qabs": "Qabs", - "Qabt": "Qabt", - "Qabu": "Qabu", - "Qabv": "Qabv", - "Qabw": "Qabw", - "Qabx": "Qabx", - "Rjng": "Rejang", - "Roro": "Rongorongo", - "Runr": "Runic", - "Samr": "Samaritan", - "Sara": "Sarati", - "Sarb": "Old South Arabian", - "Saur": "Saurashtra", - "Sgnw": "SignWriting", - "Shaw": "Shavian", - "Shrd": "Sharada", - "Sidd": "Siddham", - "Sind": "Khudawadi", - "Sinh": "Sinhala", - "Sora": "Sora Sompeng", - "Sund": "Sundanese", - "Sylo": "Syloti Nagri", - "Syrc": "Syriac", - "Syre": "Estrangelo Syriac", - "Syrj": "Western Syriac", - "Syrn": "Eastern Syriac", - "Tagb": "Tagbanwa", - "Takr": "Takri", - "Tale": "Tai Le", - "Talu": "New Tai Lue", - "Taml": "Tamil", - "Tang": "Tangut", - "Tavt": "Tai Viet", - "Telu": "Telugu", - "Teng": "Tengwar", - "Tfng": "Tifinagh", - "Tglg": "Tagalog", - "Thaa": "Thaana", - "Thai": "Thai", - "Tibt": "Tibetan", - "Tirh": "Tirhuta", - "Ugar": "Ugaritic", - "Vaii": "Vai", - "Visp": "Visible Speech", - "Wara": "Varang Kshiti", - "Wole": "Woleai", - "Xpeo": "Old Persian", - "Xsux": "Sumero-Akkadian Cuneiform", - "Xsux-alt-short": "S-A Cuneiform", - "Yiii": "Yi", - "Zinh": "Inherited", - "Zmth": "Mathematical Notation", - "Zsym": "Symbols", - "Zxxx": "Unwritten", - "Zyyy": "Common", - "Zzzz": "Unknown Script" - } - } - } - } -} +{ + "main": { + "en-US": { + "identity": { + "version": { + "_number": "$Revision: 13133 $", + "_cldrVersion": "31" + }, + "language": "en", + "territory": "US" + }, + "localeDisplayNames": { + "scripts": { + "Adlm": "Adlam", + "Afak": "Afaka", + "Aghb": "Caucasian Albanian", + "Ahom": "Ahom", + "Arab": "Arabic", + "Arab-alt-variant": "Perso-Arabic", + "Armi": "Imperial Aramaic", + "Armn": "Armenian", + "Avst": "Avestan", + "Bali": "Balinese", + "Bamu": "Bamum", + "Bass": "Bassa Vah", + "Batk": "Batak", + "Beng": "Bangla", + "Bhks": "Bhaiksuki", + "Blis": "Blissymbols", + "Bopo": "Bopomofo", + "Brah": "Brahmi", + "Brai": "Braille", + "Bugi": "Buginese", + "Buhd": "Buhid", + "Cakm": "Chakma", + "Cans": "Unified Canadian Aboriginal Syllabics", + "Cans-alt-short": "UCAS", + "Cari": "Carian", + "Cham": "Cham", + "Cher": "Cherokee", + "Cirt": "Cirth", + "Copt": "Coptic", + "Cprt": "Cypriot", + "Cyrl": "Cyrillic", + "Cyrs": "Old Church Slavonic Cyrillic", + "Deva": "Devanagari", + "Dsrt": "Deseret", + "Dupl": "Duployan shorthand", + "Egyd": "Egyptian demotic", + "Egyh": "Egyptian hieratic", + "Egyp": "Egyptian hieroglyphs", + "Elba": "Elbasan", + "Ethi": "Ethiopic", + "Geok": "Georgian Khutsuri", + "Geor": "Georgian", + "Glag": "Glagolitic", + "Goth": "Gothic", + "Gran": "Grantha", + "Grek": "Greek", + "Gujr": "Gujarati", + "Guru": "Gurmukhi", + "Hanb": "Han with Bopomofo", + "Hang": "Hangul", + "Hani": "Han", + "Hano": "Hanunoo", + "Hans": "Simplified", + "Hans-alt-stand-alone": "Simplified Han", + "Hant": "Traditional", + "Hant-alt-stand-alone": "Traditional Han", + "Hatr": "Hatran", + "Hebr": "Hebrew", + "Hira": "Hiragana", + "Hluw": "Anatolian Hieroglyphs", + "Hmng": "Pahawh Hmong", + "Hrkt": "Japanese syllabaries", + "Hung": "Old Hungarian", + "Inds": "Indus", + "Ital": "Old Italic", + "Jamo": "Jamo", + "Java": "Javanese", + "Jpan": "Japanese", + "Jurc": "Jurchen", + "Kali": "Kayah Li", + "Kana": "Katakana", + "Khar": "Kharoshthi", + "Khmr": "Khmer", + "Khoj": "Khojki", + "Knda": "Kannada", + "Kore": "Korean", + "Kpel": "Kpelle", + "Kthi": "Kaithi", + "Lana": "Lanna", + "Laoo": "Lao", + "Latf": "Fraktur Latin", + "Latg": "Gaelic Latin", + "Latn": "Latin", + "Lepc": "Lepcha", + "Limb": "Limbu", + "Lina": "Linear A", + "Linb": "Linear B", + "Lisu": "Fraser", + "Loma": "Loma", + "Lyci": "Lycian", + "Lydi": "Lydian", + "Mahj": "Mahajani", + "Mand": "Mandaean", + "Mani": "Manichaean", + "Marc": "Marchen", + "Maya": "Mayan hieroglyphs", + "Mend": "Mende", + "Merc": "Meroitic Cursive", + "Mero": "Meroitic", + "Mlym": "Malayalam", + "Modi": "Modi", + "Mong": "Mongolian", + "Moon": "Moon", + "Mroo": "Mro", + "Mtei": "Meitei Mayek", + "Mult": "Multani", + "Mymr": "Myanmar", + "Narb": "Old North Arabian", + "Nbat": "Nabataean", + "Newa": "Newa", + "Nkgb": "Naxi Geba", + "Nkoo": "N’Ko", + "Nshu": "Nüshu", + "Ogam": "Ogham", + "Olck": "Ol Chiki", + "Orkh": "Orkhon", + "Orya": "Odia", + "Osge": "Osage", + "Osma": "Osmanya", + "Palm": "Palmyrene", + "Pauc": "Pau Cin Hau", + "Perm": "Old Permic", + "Phag": "Phags-pa", + "Phli": "Inscriptional Pahlavi", + "Phlp": "Psalter Pahlavi", + "Phlv": "Book Pahlavi", + "Phnx": "Phoenician", + "Plrd": "Pollard Phonetic", + "Prti": "Inscriptional Parthian", + "Rjng": "Rejang", + "Roro": "Rongorongo", + "Runr": "Runic", + "Samr": "Samaritan", + "Sara": "Sarati", + "Sarb": "Old South Arabian", + "Saur": "Saurashtra", + "Sgnw": "SignWriting", + "Shaw": "Shavian", + "Shrd": "Sharada", + "Sidd": "Siddham", + "Sind": "Khudawadi", + "Sinh": "Sinhala", + "Sora": "Sora Sompeng", + "Sund": "Sundanese", + "Sylo": "Syloti Nagri", + "Syrc": "Syriac", + "Syre": "Estrangelo Syriac", + "Syrj": "Western Syriac", + "Syrn": "Eastern Syriac", + "Tagb": "Tagbanwa", + "Takr": "Takri", + "Tale": "Tai Le", + "Talu": "New Tai Lue", + "Taml": "Tamil", + "Tang": "Tangut", + "Tavt": "Tai Viet", + "Telu": "Telugu", + "Teng": "Tengwar", + "Tfng": "Tifinagh", + "Tglg": "Tagalog", + "Thaa": "Thaana", + "Thai": "Thai", + "Tibt": "Tibetan", + "Tirh": "Tirhuta", + "Ugar": "Ugaritic", + "Vaii": "Vai", + "Visp": "Visible Speech", + "Wara": "Varang Kshiti", + "Wole": "Woleai", + "Xpeo": "Old Persian", + "Xsux": "Sumero-Akkadian Cuneiform", + "Xsux-alt-short": "S-A Cuneiform", + "Yiii": "Yi", + "Zinh": "Inherited", + "Zmth": "Mathematical Notation", + "Zsye": "Emoji", + "Zsym": "Symbols", + "Zxxx": "Unwritten", + "Zyyy": "Common", + "Zzzz": "Unknown Script" + } + } + } + } +} diff --git a/lib/composer/vendor/gettext/languages/src/cldr-data/main/en-US/territories.json b/lib/composer/vendor/gettext/languages/src/cldr-data/main/en-US/territories.json index c2c9ce172..7427e6656 100644 --- a/lib/composer/vendor/gettext/languages/src/cldr-data/main/en-US/territories.json +++ b/lib/composer/vendor/gettext/languages/src/cldr-data/main/en-US/territories.json @@ -1,324 +1,324 @@ -{ - "main": { - "en-US": { - "identity": { - "version": { - "_cldrVersion": "27", - "_number": "$Revision: 10669 $" - }, - "generation": { - "_date": "$Date: 2014-07-23 16:10:33 -0500 (Wed, 23 Jul 2014) $" - }, - "language": "en", - "territory": "US" - }, - "localeDisplayNames": { - "territories": { - "001": "World", - "002": "Africa", - "003": "North America", - "005": "South America", - "009": "Oceania", - "011": "Western Africa", - "013": "Central America", - "014": "Eastern Africa", - "015": "Northern Africa", - "017": "Middle Africa", - "018": "Southern Africa", - "019": "Americas", - "021": "Northern America", - "029": "Caribbean", - "030": "Eastern Asia", - "034": "Southern Asia", - "035": "Southeast Asia", - "039": "Southern Europe", - "053": "Australasia", - "054": "Melanesia", - "057": "Micronesian Region", - "061": "Polynesia", - "142": "Asia", - "143": "Central Asia", - "145": "Western Asia", - "150": "Europe", - "151": "Eastern Europe", - "154": "Northern Europe", - "155": "Western Europe", - "419": "Latin America", - "AC": "Ascension Island", - "AD": "Andorra", - "AE": "United Arab Emirates", - "AF": "Afghanistan", - "AG": "Antigua & Barbuda", - "AI": "Anguilla", - "AL": "Albania", - "AM": "Armenia", - "AN": "Netherlands Antilles", - "AO": "Angola", - "AQ": "Antarctica", - "AR": "Argentina", - "AS": "American Samoa", - "AT": "Austria", - "AU": "Australia", - "AW": "Aruba", - "AX": "Åland Islands", - "AZ": "Azerbaijan", - "BA": "Bosnia & Herzegovina", - "BA-alt-short": "Bosnia", - "BB": "Barbados", - "BD": "Bangladesh", - "BE": "Belgium", - "BF": "Burkina Faso", - "BG": "Bulgaria", - "BH": "Bahrain", - "BI": "Burundi", - "BJ": "Benin", - "BL": "St. Barthélemy", - "BM": "Bermuda", - "BN": "Brunei", - "BO": "Bolivia", - "BQ": "Caribbean Netherlands", - "BR": "Brazil", - "BS": "Bahamas", - "BT": "Bhutan", - "BV": "Bouvet Island", - "BW": "Botswana", - "BY": "Belarus", - "BZ": "Belize", - "CA": "Canada", - "CC": "Cocos (Keeling) Islands", - "CD": "Congo - Kinshasa", - "CD-alt-variant": "Congo (DRC)", - "CF": "Central African Republic", - "CG": "Congo - Brazzaville", - "CG-alt-variant": "Congo (Republic)", - "CH": "Switzerland", - "CI": "Côte d’Ivoire", - "CI-alt-variant": "Ivory Coast", - "CK": "Cook Islands", - "CL": "Chile", - "CM": "Cameroon", - "CN": "China", - "CO": "Colombia", - "CP": "Clipperton Island", - "CR": "Costa Rica", - "CU": "Cuba", - "CV": "Cape Verde", - "CW": "Curaçao", - "CX": "Christmas Island", - "CY": "Cyprus", - "CZ": "Czech Republic", - "DE": "Germany", - "DG": "Diego Garcia", - "DJ": "Djibouti", - "DK": "Denmark", - "DM": "Dominica", - "DO": "Dominican Republic", - "DZ": "Algeria", - "EA": "Ceuta & Melilla", - "EC": "Ecuador", - "EE": "Estonia", - "EG": "Egypt", - "EH": "Western Sahara", - "ER": "Eritrea", - "ES": "Spain", - "ET": "Ethiopia", - "EU": "European Union", - "FI": "Finland", - "FJ": "Fiji", - "FK": "Falkland Islands", - "FK-alt-variant": "Falkland Islands (Islas Malvinas)", - "FM": "Micronesia", - "FO": "Faroe Islands", - "FR": "France", - "GA": "Gabon", - "GB": "United Kingdom", - "GB-alt-short": "UK", - "GD": "Grenada", - "GE": "Georgia", - "GF": "French Guiana", - "GG": "Guernsey", - "GH": "Ghana", - "GI": "Gibraltar", - "GL": "Greenland", - "GM": "Gambia", - "GN": "Guinea", - "GP": "Guadeloupe", - "GQ": "Equatorial Guinea", - "GR": "Greece", - "GS": "South Georgia & South Sandwich Islands", - "GT": "Guatemala", - "GU": "Guam", - "GW": "Guinea-Bissau", - "GY": "Guyana", - "HK": "Hong Kong SAR China", - "HK-alt-short": "Hong Kong", - "HM": "Heard & McDonald Islands", - "HN": "Honduras", - "HR": "Croatia", - "HT": "Haiti", - "HU": "Hungary", - "IC": "Canary Islands", - "ID": "Indonesia", - "IE": "Ireland", - "IL": "Israel", - "IM": "Isle of Man", - "IN": "India", - "IO": "British Indian Ocean Territory", - "IQ": "Iraq", - "IR": "Iran", - "IS": "Iceland", - "IT": "Italy", - "JE": "Jersey", - "JM": "Jamaica", - "JO": "Jordan", - "JP": "Japan", - "KE": "Kenya", - "KG": "Kyrgyzstan", - "KH": "Cambodia", - "KI": "Kiribati", - "KM": "Comoros", - "KN": "St. Kitts & Nevis", - "KP": "North Korea", - "KR": "South Korea", - "KW": "Kuwait", - "KY": "Cayman Islands", - "KZ": "Kazakhstan", - "LA": "Laos", - "LB": "Lebanon", - "LC": "St. Lucia", - "LI": "Liechtenstein", - "LK": "Sri Lanka", - "LR": "Liberia", - "LS": "Lesotho", - "LT": "Lithuania", - "LU": "Luxembourg", - "LV": "Latvia", - "LY": "Libya", - "MA": "Morocco", - "MC": "Monaco", - "MD": "Moldova", - "ME": "Montenegro", - "MF": "St. Martin", - "MG": "Madagascar", - "MH": "Marshall Islands", - "MK": "Macedonia", - "MK-alt-variant": "Macedonia (FYROM)", - "ML": "Mali", - "MM": "Myanmar (Burma)", - "MM-alt-short": "Myanmar", - "MN": "Mongolia", - "MO": "Macau SAR China", - "MO-alt-short": "Macau", - "MP": "Northern Mariana Islands", - "MQ": "Martinique", - "MR": "Mauritania", - "MS": "Montserrat", - "MT": "Malta", - "MU": "Mauritius", - "MV": "Maldives", - "MW": "Malawi", - "MX": "Mexico", - "MY": "Malaysia", - "MZ": "Mozambique", - "NA": "Namibia", - "NC": "New Caledonia", - "NE": "Niger", - "NF": "Norfolk Island", - "NG": "Nigeria", - "NI": "Nicaragua", - "NL": "Netherlands", - "NO": "Norway", - "NP": "Nepal", - "NR": "Nauru", - "NU": "Niue", - "NZ": "New Zealand", - "OM": "Oman", - "PA": "Panama", - "PE": "Peru", - "PF": "French Polynesia", - "PG": "Papua New Guinea", - "PH": "Philippines", - "PK": "Pakistan", - "PL": "Poland", - "PM": "St. Pierre & Miquelon", - "PN": "Pitcairn Islands", - "PR": "Puerto Rico", - "PS": "Palestinian Territories", - "PS-alt-short": "Palestine", - "PT": "Portugal", - "PW": "Palau", - "PY": "Paraguay", - "QA": "Qatar", - "QO": "Outlying Oceania", - "RE": "Réunion", - "RO": "Romania", - "RS": "Serbia", - "RU": "Russia", - "RW": "Rwanda", - "SA": "Saudi Arabia", - "SB": "Solomon Islands", - "SC": "Seychelles", - "SD": "Sudan", - "SE": "Sweden", - "SG": "Singapore", - "SH": "St. Helena", - "SI": "Slovenia", - "SJ": "Svalbard & Jan Mayen", - "SK": "Slovakia", - "SL": "Sierra Leone", - "SM": "San Marino", - "SN": "Senegal", - "SO": "Somalia", - "SR": "Suriname", - "SS": "South Sudan", - "ST": "São Tomé & Príncipe", - "SV": "El Salvador", - "SX": "Sint Maarten", - "SY": "Syria", - "SZ": "Swaziland", - "TA": "Tristan da Cunha", - "TC": "Turks & Caicos Islands", - "TD": "Chad", - "TF": "French Southern Territories", - "TG": "Togo", - "TH": "Thailand", - "TJ": "Tajikistan", - "TK": "Tokelau", - "TL": "Timor-Leste", - "TL-alt-variant": "East Timor", - "TM": "Turkmenistan", - "TN": "Tunisia", - "TO": "Tonga", - "TR": "Turkey", - "TT": "Trinidad & Tobago", - "TV": "Tuvalu", - "TW": "Taiwan", - "TZ": "Tanzania", - "UA": "Ukraine", - "UG": "Uganda", - "UM": "U.S. Outlying Islands", - "US": "United States", - "US-alt-short": "US", - "UY": "Uruguay", - "UZ": "Uzbekistan", - "VA": "Vatican City", - "VC": "St. Vincent & Grenadines", - "VE": "Venezuela", - "VG": "British Virgin Islands", - "VI": "U.S. Virgin Islands", - "VN": "Vietnam", - "VU": "Vanuatu", - "WF": "Wallis & Futuna", - "WS": "Samoa", - "XK": "Kosovo", - "YE": "Yemen", - "YT": "Mayotte", - "ZA": "South Africa", - "ZM": "Zambia", - "ZW": "Zimbabwe", - "ZZ": "Unknown Region" - } - } - } - } -} +{ + "main": { + "en-US": { + "identity": { + "version": { + "_number": "$Revision: 13133 $", + "_cldrVersion": "31" + }, + "language": "en", + "territory": "US" + }, + "localeDisplayNames": { + "territories": { + "001": "World", + "002": "Africa", + "003": "North America", + "005": "South America", + "009": "Oceania", + "011": "Western Africa", + "013": "Central America", + "014": "Eastern Africa", + "015": "Northern Africa", + "017": "Middle Africa", + "018": "Southern Africa", + "019": "Americas", + "021": "Northern America", + "029": "Caribbean", + "030": "Eastern Asia", + "034": "Southern Asia", + "035": "Southeast Asia", + "039": "Southern Europe", + "053": "Australasia", + "054": "Melanesia", + "057": "Micronesian Region", + "061": "Polynesia", + "142": "Asia", + "143": "Central Asia", + "145": "Western Asia", + "150": "Europe", + "151": "Eastern Europe", + "154": "Northern Europe", + "155": "Western Europe", + "419": "Latin America", + "AC": "Ascension Island", + "AD": "Andorra", + "AE": "United Arab Emirates", + "AF": "Afghanistan", + "AG": "Antigua & Barbuda", + "AI": "Anguilla", + "AL": "Albania", + "AM": "Armenia", + "AO": "Angola", + "AQ": "Antarctica", + "AR": "Argentina", + "AS": "American Samoa", + "AT": "Austria", + "AU": "Australia", + "AW": "Aruba", + "AX": "Åland Islands", + "AZ": "Azerbaijan", + "BA": "Bosnia & Herzegovina", + "BA-alt-short": "Bosnia", + "BB": "Barbados", + "BD": "Bangladesh", + "BE": "Belgium", + "BF": "Burkina Faso", + "BG": "Bulgaria", + "BH": "Bahrain", + "BI": "Burundi", + "BJ": "Benin", + "BL": "St. Barthélemy", + "BM": "Bermuda", + "BN": "Brunei", + "BO": "Bolivia", + "BQ": "Caribbean Netherlands", + "BR": "Brazil", + "BS": "Bahamas", + "BT": "Bhutan", + "BV": "Bouvet Island", + "BW": "Botswana", + "BY": "Belarus", + "BZ": "Belize", + "CA": "Canada", + "CC": "Cocos (Keeling) Islands", + "CD": "Congo - Kinshasa", + "CD-alt-variant": "Congo (DRC)", + "CF": "Central African Republic", + "CG": "Congo - Brazzaville", + "CG-alt-variant": "Congo (Republic)", + "CH": "Switzerland", + "CI": "Côte d’Ivoire", + "CI-alt-variant": "Ivory Coast", + "CK": "Cook Islands", + "CL": "Chile", + "CM": "Cameroon", + "CN": "China", + "CO": "Colombia", + "CP": "Clipperton Island", + "CR": "Costa Rica", + "CU": "Cuba", + "CV": "Cape Verde", + "CW": "Curaçao", + "CX": "Christmas Island", + "CY": "Cyprus", + "CZ": "Czechia", + "CZ-alt-variant": "Czech Republic", + "DE": "Germany", + "DG": "Diego Garcia", + "DJ": "Djibouti", + "DK": "Denmark", + "DM": "Dominica", + "DO": "Dominican Republic", + "DZ": "Algeria", + "EA": "Ceuta & Melilla", + "EC": "Ecuador", + "EE": "Estonia", + "EG": "Egypt", + "EH": "Western Sahara", + "ER": "Eritrea", + "ES": "Spain", + "ET": "Ethiopia", + "EU": "European Union", + "EZ": "Eurozone", + "FI": "Finland", + "FJ": "Fiji", + "FK": "Falkland Islands", + "FK-alt-variant": "Falkland Islands (Islas Malvinas)", + "FM": "Micronesia", + "FO": "Faroe Islands", + "FR": "France", + "GA": "Gabon", + "GB": "United Kingdom", + "GB-alt-short": "UK", + "GD": "Grenada", + "GE": "Georgia", + "GF": "French Guiana", + "GG": "Guernsey", + "GH": "Ghana", + "GI": "Gibraltar", + "GL": "Greenland", + "GM": "Gambia", + "GN": "Guinea", + "GP": "Guadeloupe", + "GQ": "Equatorial Guinea", + "GR": "Greece", + "GS": "South Georgia & South Sandwich Islands", + "GT": "Guatemala", + "GU": "Guam", + "GW": "Guinea-Bissau", + "GY": "Guyana", + "HK": "Hong Kong SAR China", + "HK-alt-short": "Hong Kong", + "HM": "Heard & McDonald Islands", + "HN": "Honduras", + "HR": "Croatia", + "HT": "Haiti", + "HU": "Hungary", + "IC": "Canary Islands", + "ID": "Indonesia", + "IE": "Ireland", + "IL": "Israel", + "IM": "Isle of Man", + "IN": "India", + "IO": "British Indian Ocean Territory", + "IQ": "Iraq", + "IR": "Iran", + "IS": "Iceland", + "IT": "Italy", + "JE": "Jersey", + "JM": "Jamaica", + "JO": "Jordan", + "JP": "Japan", + "KE": "Kenya", + "KG": "Kyrgyzstan", + "KH": "Cambodia", + "KI": "Kiribati", + "KM": "Comoros", + "KN": "St. Kitts & Nevis", + "KP": "North Korea", + "KR": "South Korea", + "KW": "Kuwait", + "KY": "Cayman Islands", + "KZ": "Kazakhstan", + "LA": "Laos", + "LB": "Lebanon", + "LC": "St. Lucia", + "LI": "Liechtenstein", + "LK": "Sri Lanka", + "LR": "Liberia", + "LS": "Lesotho", + "LT": "Lithuania", + "LU": "Luxembourg", + "LV": "Latvia", + "LY": "Libya", + "MA": "Morocco", + "MC": "Monaco", + "MD": "Moldova", + "ME": "Montenegro", + "MF": "St. Martin", + "MG": "Madagascar", + "MH": "Marshall Islands", + "MK": "Macedonia", + "MK-alt-variant": "Macedonia (FYROM)", + "ML": "Mali", + "MM": "Myanmar (Burma)", + "MM-alt-short": "Myanmar", + "MN": "Mongolia", + "MO": "Macau SAR China", + "MO-alt-short": "Macau", + "MP": "Northern Mariana Islands", + "MQ": "Martinique", + "MR": "Mauritania", + "MS": "Montserrat", + "MT": "Malta", + "MU": "Mauritius", + "MV": "Maldives", + "MW": "Malawi", + "MX": "Mexico", + "MY": "Malaysia", + "MZ": "Mozambique", + "NA": "Namibia", + "NC": "New Caledonia", + "NE": "Niger", + "NF": "Norfolk Island", + "NG": "Nigeria", + "NI": "Nicaragua", + "NL": "Netherlands", + "NO": "Norway", + "NP": "Nepal", + "NR": "Nauru", + "NU": "Niue", + "NZ": "New Zealand", + "OM": "Oman", + "PA": "Panama", + "PE": "Peru", + "PF": "French Polynesia", + "PG": "Papua New Guinea", + "PH": "Philippines", + "PK": "Pakistan", + "PL": "Poland", + "PM": "St. Pierre & Miquelon", + "PN": "Pitcairn Islands", + "PR": "Puerto Rico", + "PS": "Palestinian Territories", + "PS-alt-short": "Palestine", + "PT": "Portugal", + "PW": "Palau", + "PY": "Paraguay", + "QA": "Qatar", + "QO": "Outlying Oceania", + "RE": "Réunion", + "RO": "Romania", + "RS": "Serbia", + "RU": "Russia", + "RW": "Rwanda", + "SA": "Saudi Arabia", + "SB": "Solomon Islands", + "SC": "Seychelles", + "SD": "Sudan", + "SE": "Sweden", + "SG": "Singapore", + "SH": "St. Helena", + "SI": "Slovenia", + "SJ": "Svalbard & Jan Mayen", + "SK": "Slovakia", + "SL": "Sierra Leone", + "SM": "San Marino", + "SN": "Senegal", + "SO": "Somalia", + "SR": "Suriname", + "SS": "South Sudan", + "ST": "São Tomé & Príncipe", + "SV": "El Salvador", + "SX": "Sint Maarten", + "SY": "Syria", + "SZ": "Swaziland", + "TA": "Tristan da Cunha", + "TC": "Turks & Caicos Islands", + "TD": "Chad", + "TF": "French Southern Territories", + "TG": "Togo", + "TH": "Thailand", + "TJ": "Tajikistan", + "TK": "Tokelau", + "TL": "Timor-Leste", + "TL-alt-variant": "East Timor", + "TM": "Turkmenistan", + "TN": "Tunisia", + "TO": "Tonga", + "TR": "Turkey", + "TT": "Trinidad & Tobago", + "TV": "Tuvalu", + "TW": "Taiwan", + "TZ": "Tanzania", + "UA": "Ukraine", + "UG": "Uganda", + "UM": "U.S. Outlying Islands", + "UN": "United Nations", + "UN-alt-short": "UN", + "US": "United States", + "US-alt-short": "US", + "UY": "Uruguay", + "UZ": "Uzbekistan", + "VA": "Vatican City", + "VC": "St. Vincent & Grenadines", + "VE": "Venezuela", + "VG": "British Virgin Islands", + "VI": "U.S. Virgin Islands", + "VN": "Vietnam", + "VU": "Vanuatu", + "WF": "Wallis & Futuna", + "WS": "Samoa", + "XK": "Kosovo", + "YE": "Yemen", + "YT": "Mayotte", + "ZA": "South Africa", + "ZM": "Zambia", + "ZW": "Zimbabwe", + "ZZ": "Unknown Region" + } + } + } + } +} diff --git a/lib/composer/vendor/gettext/languages/src/cldr-data/supplemental/plurals.json b/lib/composer/vendor/gettext/languages/src/cldr-data/supplemental/plurals.json index cea956d94..3042a5b7e 100644 --- a/lib/composer/vendor/gettext/languages/src/cldr-data/supplemental/plurals.json +++ b/lib/composer/vendor/gettext/languages/src/cldr-data/supplemental/plurals.json @@ -1,844 +1,853 @@ -{ - "supplemental": { - "version": { - "_cldrVersion": "27", - "_number": "$Revision: 11229 $" - }, - "generation": { - "_date": "$Date: 2015-02-18 16:11:57 +0100 (Wed, 18 Feb 2015) $" - }, - "plurals-type-cardinal": { - "af": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "ak": { - "pluralRule-count-one": "n = 0..1 @integer 0, 1 @decimal 0.0, 1.0, 0.00, 1.00, 0.000, 1.000, 0.0000, 1.0000", - "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "am": { - "pluralRule-count-one": "i = 0 or n = 1 @integer 0, 1 @decimal 0.0~1.0, 0.00~0.04", - "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 1.1~2.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "ar": { - "pluralRule-count-zero": "n = 0 @integer 0 @decimal 0.0, 0.00, 0.000, 0.0000", - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-two": "n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000", - "pluralRule-count-few": "n % 100 = 3..10 @integer 3~10, 103~110, 1003, … @decimal 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 103.0, 1003.0, …", - "pluralRule-count-many": "n % 100 = 11..99 @integer 11~26, 111, 1011, … @decimal 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 111.0, 1011.0, …", - "pluralRule-count-other": " @integer 100~102, 200~202, 300~302, 400~402, 500~502, 600, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.1, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "as": { - "pluralRule-count-one": "i = 0 or n = 1 @integer 0, 1 @decimal 0.0~1.0, 0.00~0.04", - "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 1.1~2.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "asa": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "ast": { - "pluralRule-count-one": "i = 1 and v = 0 @integer 1", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "az": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "be": { - "pluralRule-count-one": "n % 10 = 1 and n % 100 != 11 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, … @decimal 1.0, 21.0, 31.0, 41.0, 51.0, 61.0, 71.0, 81.0, 101.0, 1001.0, …", - "pluralRule-count-few": "n % 10 = 2..4 and n % 100 != 12..14 @integer 2~4, 22~24, 32~34, 42~44, 52~54, 62, 102, 1002, … @decimal 2.0, 3.0, 4.0, 22.0, 23.0, 24.0, 32.0, 33.0, 102.0, 1002.0, …", - "pluralRule-count-many": "n % 10 = 0 or n % 10 = 5..9 or n % 100 = 11..14 @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …", - "pluralRule-count-other": " @decimal 0.1~0.9, 1.1~1.7, 10.1, 100.1, 1000.1, …" - }, - "bem": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "bez": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "bg": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "bh": { - "pluralRule-count-one": "n = 0..1 @integer 0, 1 @decimal 0.0, 1.0, 0.00, 1.00, 0.000, 1.000, 0.0000, 1.0000", - "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "bm": { - "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "bn": { - "pluralRule-count-one": "i = 0 or n = 1 @integer 0, 1 @decimal 0.0~1.0, 0.00~0.04", - "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 1.1~2.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "bo": { - "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "br": { - "pluralRule-count-one": "n % 10 = 1 and n % 100 != 11,71,91 @integer 1, 21, 31, 41, 51, 61, 81, 101, 1001, … @decimal 1.0, 21.0, 31.0, 41.0, 51.0, 61.0, 81.0, 101.0, 1001.0, …", - "pluralRule-count-two": "n % 10 = 2 and n % 100 != 12,72,92 @integer 2, 22, 32, 42, 52, 62, 82, 102, 1002, … @decimal 2.0, 22.0, 32.0, 42.0, 52.0, 62.0, 82.0, 102.0, 1002.0, …", - "pluralRule-count-few": "n % 10 = 3..4,9 and n % 100 != 10..19,70..79,90..99 @integer 3, 4, 9, 23, 24, 29, 33, 34, 39, 43, 44, 49, 103, 1003, … @decimal 3.0, 4.0, 9.0, 23.0, 24.0, 29.0, 33.0, 34.0, 103.0, 1003.0, …", - "pluralRule-count-many": "n != 0 and n % 1000000 = 0 @integer 1000000, … @decimal 1000000.0, 1000000.00, 1000000.000, …", - "pluralRule-count-other": " @integer 0, 5~8, 10~20, 100, 1000, 10000, 100000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, …" - }, - "brx": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "bs": { - "pluralRule-count-one": "v = 0 and i % 10 = 1 and i % 100 != 11 or f % 10 = 1 and f % 100 != 11 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, … @decimal 0.1, 1.1, 2.1, 3.1, 4.1, 5.1, 6.1, 7.1, 10.1, 100.1, 1000.1, …", - "pluralRule-count-few": "v = 0 and i % 10 = 2..4 and i % 100 != 12..14 or f % 10 = 2..4 and f % 100 != 12..14 @integer 2~4, 22~24, 32~34, 42~44, 52~54, 62, 102, 1002, … @decimal 0.2~0.4, 1.2~1.4, 2.2~2.4, 3.2~3.4, 4.2~4.4, 5.2, 10.2, 100.2, 1000.2, …", - "pluralRule-count-other": " @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 0.5~1.0, 1.5~2.0, 2.5~2.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "ca": { - "pluralRule-count-one": "i = 1 and v = 0 @integer 1", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "ce": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "cgg": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "chr": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "ckb": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "cs": { - "pluralRule-count-one": "i = 1 and v = 0 @integer 1", - "pluralRule-count-few": "i = 2..4 and v = 0 @integer 2~4", - "pluralRule-count-many": "v != 0 @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …", - "pluralRule-count-other": " @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, …" - }, - "cy": { - "pluralRule-count-zero": "n = 0 @integer 0 @decimal 0.0, 0.00, 0.000, 0.0000", - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-two": "n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000", - "pluralRule-count-few": "n = 3 @integer 3 @decimal 3.0, 3.00, 3.000, 3.0000", - "pluralRule-count-many": "n = 6 @integer 6 @decimal 6.0, 6.00, 6.000, 6.0000", - "pluralRule-count-other": " @integer 4, 5, 7~20, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "da": { - "pluralRule-count-one": "n = 1 or t != 0 and i = 0,1 @integer 1 @decimal 0.1~1.6", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 2.0~3.4, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "de": { - "pluralRule-count-one": "i = 1 and v = 0 @integer 1", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "dsb": { - "pluralRule-count-one": "v = 0 and i % 100 = 1 or f % 100 = 1 @integer 1, 101, 201, 301, 401, 501, 601, 701, 1001, … @decimal 0.1, 1.1, 2.1, 3.1, 4.1, 5.1, 6.1, 7.1, 10.1, 100.1, 1000.1, …", - "pluralRule-count-two": "v = 0 and i % 100 = 2 or f % 100 = 2 @integer 2, 102, 202, 302, 402, 502, 602, 702, 1002, … @decimal 0.2, 1.2, 2.2, 3.2, 4.2, 5.2, 6.2, 7.2, 10.2, 100.2, 1000.2, …", - "pluralRule-count-few": "v = 0 and i % 100 = 3..4 or f % 100 = 3..4 @integer 3, 4, 103, 104, 203, 204, 303, 304, 403, 404, 503, 504, 603, 604, 703, 704, 1003, … @decimal 0.3, 0.4, 1.3, 1.4, 2.3, 2.4, 3.3, 3.4, 4.3, 4.4, 5.3, 5.4, 6.3, 6.4, 7.3, 7.4, 10.3, 100.3, 1000.3, …", - "pluralRule-count-other": " @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 0.5~1.0, 1.5~2.0, 2.5~2.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "dv": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "dz": { - "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "ee": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "el": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "en": { - "pluralRule-count-one": "i = 1 and v = 0 @integer 1", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "eo": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "es": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "et": { - "pluralRule-count-one": "i = 1 and v = 0 @integer 1", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "eu": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "fa": { - "pluralRule-count-one": "i = 0 or n = 1 @integer 0, 1 @decimal 0.0~1.0, 0.00~0.04", - "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 1.1~2.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "ff": { - "pluralRule-count-one": "i = 0,1 @integer 0, 1 @decimal 0.0~1.5", - "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 2.0~3.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "fi": { - "pluralRule-count-one": "i = 1 and v = 0 @integer 1", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "fil": { - "pluralRule-count-one": "v = 0 and i = 1,2,3 or v = 0 and i % 10 != 4,6,9 or v != 0 and f % 10 != 4,6,9 @integer 0~3, 5, 7, 8, 10~13, 15, 17, 18, 20, 21, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.3, 0.5, 0.7, 0.8, 1.0~1.3, 1.5, 1.7, 1.8, 2.0, 2.1, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …", - "pluralRule-count-other": " @integer 4, 6, 9, 14, 16, 19, 24, 26, 104, 1004, … @decimal 0.4, 0.6, 0.9, 1.4, 1.6, 1.9, 2.4, 2.6, 10.4, 100.4, 1000.4, …" - }, - "fo": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "fr": { - "pluralRule-count-one": "i = 0,1 @integer 0, 1 @decimal 0.0~1.5", - "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 2.0~3.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "fur": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "fy": { - "pluralRule-count-one": "i = 1 and v = 0 @integer 1", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "ga": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-two": "n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000", - "pluralRule-count-few": "n = 3..6 @integer 3~6 @decimal 3.0, 4.0, 5.0, 6.0, 3.00, 4.00, 5.00, 6.00, 3.000, 4.000, 5.000, 6.000, 3.0000, 4.0000, 5.0000, 6.0000", - "pluralRule-count-many": "n = 7..10 @integer 7~10 @decimal 7.0, 8.0, 9.0, 10.0, 7.00, 8.00, 9.00, 10.00, 7.000, 8.000, 9.000, 10.000, 7.0000, 8.0000, 9.0000, 10.0000", - "pluralRule-count-other": " @integer 0, 11~25, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.1, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "gd": { - "pluralRule-count-one": "n = 1,11 @integer 1, 11 @decimal 1.0, 11.0, 1.00, 11.00, 1.000, 11.000, 1.0000", - "pluralRule-count-two": "n = 2,12 @integer 2, 12 @decimal 2.0, 12.0, 2.00, 12.00, 2.000, 12.000, 2.0000", - "pluralRule-count-few": "n = 3..10,13..19 @integer 3~10, 13~19 @decimal 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 19.0, 3.00", - "pluralRule-count-other": " @integer 0, 20~34, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.1, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "gl": { - "pluralRule-count-one": "i = 1 and v = 0 @integer 1", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "gsw": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "gu": { - "pluralRule-count-one": "i = 0 or n = 1 @integer 0, 1 @decimal 0.0~1.0, 0.00~0.04", - "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 1.1~2.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "guw": { - "pluralRule-count-one": "n = 0..1 @integer 0, 1 @decimal 0.0, 1.0, 0.00, 1.00, 0.000, 1.000, 0.0000, 1.0000", - "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "gv": { - "pluralRule-count-one": "v = 0 and i % 10 = 1 @integer 1, 11, 21, 31, 41, 51, 61, 71, 101, 1001, …", - "pluralRule-count-two": "v = 0 and i % 10 = 2 @integer 2, 12, 22, 32, 42, 52, 62, 72, 102, 1002, …", - "pluralRule-count-few": "v = 0 and i % 100 = 0,20,40,60,80 @integer 0, 20, 40, 60, 80, 100, 120, 140, 1000, 10000, 100000, 1000000, …", - "pluralRule-count-many": "v != 0 @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …", - "pluralRule-count-other": " @integer 3~10, 13~19, 23, 103, 1003, …" - }, - "ha": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "haw": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "he": { - "pluralRule-count-one": "i = 1 and v = 0 @integer 1", - "pluralRule-count-two": "i = 2 and v = 0 @integer 2", - "pluralRule-count-many": "v = 0 and n != 0..10 and n % 10 = 0 @integer 20, 30, 40, 50, 60, 70, 80, 90, 100, 1000, 10000, 100000, 1000000, …", - "pluralRule-count-other": " @integer 0, 3~17, 101, 1001, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "hi": { - "pluralRule-count-one": "i = 0 or n = 1 @integer 0, 1 @decimal 0.0~1.0, 0.00~0.04", - "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 1.1~2.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "hr": { - "pluralRule-count-one": "v = 0 and i % 10 = 1 and i % 100 != 11 or f % 10 = 1 and f % 100 != 11 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, … @decimal 0.1, 1.1, 2.1, 3.1, 4.1, 5.1, 6.1, 7.1, 10.1, 100.1, 1000.1, …", - "pluralRule-count-few": "v = 0 and i % 10 = 2..4 and i % 100 != 12..14 or f % 10 = 2..4 and f % 100 != 12..14 @integer 2~4, 22~24, 32~34, 42~44, 52~54, 62, 102, 1002, … @decimal 0.2~0.4, 1.2~1.4, 2.2~2.4, 3.2~3.4, 4.2~4.4, 5.2, 10.2, 100.2, 1000.2, …", - "pluralRule-count-other": " @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 0.5~1.0, 1.5~2.0, 2.5~2.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "hsb": { - "pluralRule-count-one": "v = 0 and i % 100 = 1 or f % 100 = 1 @integer 1, 101, 201, 301, 401, 501, 601, 701, 1001, … @decimal 0.1, 1.1, 2.1, 3.1, 4.1, 5.1, 6.1, 7.1, 10.1, 100.1, 1000.1, …", - "pluralRule-count-two": "v = 0 and i % 100 = 2 or f % 100 = 2 @integer 2, 102, 202, 302, 402, 502, 602, 702, 1002, … @decimal 0.2, 1.2, 2.2, 3.2, 4.2, 5.2, 6.2, 7.2, 10.2, 100.2, 1000.2, …", - "pluralRule-count-few": "v = 0 and i % 100 = 3..4 or f % 100 = 3..4 @integer 3, 4, 103, 104, 203, 204, 303, 304, 403, 404, 503, 504, 603, 604, 703, 704, 1003, … @decimal 0.3, 0.4, 1.3, 1.4, 2.3, 2.4, 3.3, 3.4, 4.3, 4.4, 5.3, 5.4, 6.3, 6.4, 7.3, 7.4, 10.3, 100.3, 1000.3, …", - "pluralRule-count-other": " @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 0.5~1.0, 1.5~2.0, 2.5~2.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "hu": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "hy": { - "pluralRule-count-one": "i = 0,1 @integer 0, 1 @decimal 0.0~1.5", - "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 2.0~3.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "id": { - "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "ig": { - "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "ii": { - "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "in": { - "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "is": { - "pluralRule-count-one": "t = 0 and i % 10 = 1 and i % 100 != 11 or t != 0 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, … @decimal 0.1~1.6, 10.1, 100.1, 1000.1, …", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "it": { - "pluralRule-count-one": "i = 1 and v = 0 @integer 1", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "iu": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-two": "n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000", - "pluralRule-count-other": " @integer 0, 3~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "iw": { - "pluralRule-count-one": "i = 1 and v = 0 @integer 1", - "pluralRule-count-two": "i = 2 and v = 0 @integer 2", - "pluralRule-count-many": "v = 0 and n != 0..10 and n % 10 = 0 @integer 20, 30, 40, 50, 60, 70, 80, 90, 100, 1000, 10000, 100000, 1000000, …", - "pluralRule-count-other": " @integer 0, 3~17, 101, 1001, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "ja": { - "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "jbo": { - "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "jgo": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "ji": { - "pluralRule-count-one": "i = 1 and v = 0 @integer 1", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "jmc": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "jv": { - "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "jw": { - "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "ka": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "kab": { - "pluralRule-count-one": "i = 0,1 @integer 0, 1 @decimal 0.0~1.5", - "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 2.0~3.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "kaj": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "kcg": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "kde": { - "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "kea": { - "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "kk": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "kkj": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "kl": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "km": { - "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "kn": { - "pluralRule-count-one": "i = 0 or n = 1 @integer 0, 1 @decimal 0.0~1.0, 0.00~0.04", - "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 1.1~2.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "ko": { - "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "ks": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "ksb": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "ksh": { - "pluralRule-count-zero": "n = 0 @integer 0 @decimal 0.0, 0.00, 0.000, 0.0000", - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "ku": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "kw": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-two": "n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000", - "pluralRule-count-other": " @integer 0, 3~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "ky": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "lag": { - "pluralRule-count-zero": "n = 0 @integer 0 @decimal 0.0, 0.00, 0.000, 0.0000", - "pluralRule-count-one": "i = 0,1 and n != 0 @integer 1 @decimal 0.1~1.6", - "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 2.0~3.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "lb": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "lg": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "lkt": { - "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "ln": { - "pluralRule-count-one": "n = 0..1 @integer 0, 1 @decimal 0.0, 1.0, 0.00, 1.00, 0.000, 1.000, 0.0000, 1.0000", - "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "lo": { - "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "lt": { - "pluralRule-count-one": "n % 10 = 1 and n % 100 != 11..19 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, … @decimal 1.0, 21.0, 31.0, 41.0, 51.0, 61.0, 71.0, 81.0, 101.0, 1001.0, …", - "pluralRule-count-few": "n % 10 = 2..9 and n % 100 != 11..19 @integer 2~9, 22~29, 102, 1002, … @decimal 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 22.0, 102.0, 1002.0, …", - "pluralRule-count-many": "f != 0 @decimal 0.1~0.9, 1.1~1.7, 10.1, 100.1, 1000.1, …", - "pluralRule-count-other": " @integer 0, 10~20, 30, 40, 50, 60, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "lv": { - "pluralRule-count-zero": "n % 10 = 0 or n % 100 = 11..19 or v = 2 and f % 100 = 11..19 @integer 0, 10~20, 30, 40, 50, 60, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …", - "pluralRule-count-one": "n % 10 = 1 and n % 100 != 11 or v = 2 and f % 10 = 1 and f % 100 != 11 or v != 2 and f % 10 = 1 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, … @decimal 0.1, 1.0, 1.1, 2.1, 3.1, 4.1, 5.1, 6.1, 7.1, 10.1, 100.1, 1000.1, …", - "pluralRule-count-other": " @integer 2~9, 22~29, 102, 1002, … @decimal 0.2~0.9, 1.2~1.9, 10.2, 100.2, 1000.2, …" - }, - "mas": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "mg": { - "pluralRule-count-one": "n = 0..1 @integer 0, 1 @decimal 0.0, 1.0, 0.00, 1.00, 0.000, 1.000, 0.0000, 1.0000", - "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "mgo": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "mk": { - "pluralRule-count-one": "v = 0 and i % 10 = 1 or f % 10 = 1 @integer 1, 11, 21, 31, 41, 51, 61, 71, 101, 1001, … @decimal 0.1, 1.1, 2.1, 3.1, 4.1, 5.1, 6.1, 7.1, 10.1, 100.1, 1000.1, …", - "pluralRule-count-other": " @integer 0, 2~10, 12~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 0.2~1.0, 1.2~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "ml": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "mn": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "mo": { - "pluralRule-count-one": "i = 1 and v = 0 @integer 1", - "pluralRule-count-few": "v != 0 or n = 0 or n != 1 and n % 100 = 1..19 @integer 0, 2~16, 101, 1001, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …", - "pluralRule-count-other": " @integer 20~35, 100, 1000, 10000, 100000, 1000000, …" - }, - "mr": { - "pluralRule-count-one": "i = 0 or n = 1 @integer 0, 1 @decimal 0.0~1.0, 0.00~0.04", - "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 1.1~2.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "ms": { - "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "mt": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-few": "n = 0 or n % 100 = 2..10 @integer 0, 2~10, 102~107, 1002, … @decimal 0.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 10.0, 102.0, 1002.0, …", - "pluralRule-count-many": "n % 100 = 11..19 @integer 11~19, 111~117, 1011, … @decimal 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 111.0, 1011.0, …", - "pluralRule-count-other": " @integer 20~35, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.1, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "my": { - "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "nah": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "naq": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-two": "n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000", - "pluralRule-count-other": " @integer 0, 3~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "nb": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "nd": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "ne": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "nl": { - "pluralRule-count-one": "i = 1 and v = 0 @integer 1", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "nn": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "nnh": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "no": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "nqo": { - "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "nr": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "nso": { - "pluralRule-count-one": "n = 0..1 @integer 0, 1 @decimal 0.0, 1.0, 0.00, 1.00, 0.000, 1.000, 0.0000, 1.0000", - "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "ny": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "nyn": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "om": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "or": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "os": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "pa": { - "pluralRule-count-one": "n = 0..1 @integer 0, 1 @decimal 0.0, 1.0, 0.00, 1.00, 0.000, 1.000, 0.0000, 1.0000", - "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "pap": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "pl": { - "pluralRule-count-one": "i = 1 and v = 0 @integer 1", - "pluralRule-count-few": "v = 0 and i % 10 = 2..4 and i % 100 != 12..14 @integer 2~4, 22~24, 32~34, 42~44, 52~54, 62, 102, 1002, …", - "pluralRule-count-many": "v = 0 and i != 1 and i % 10 = 0..1 or v = 0 and i % 10 = 5..9 or v = 0 and i % 100 = 12..14 @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, …", - "pluralRule-count-other": " @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "prg": { - "pluralRule-count-zero": "n % 10 = 0 or n % 100 = 11..19 or v = 2 and f % 100 = 11..19 @integer 0, 10~20, 30, 40, 50, 60, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …", - "pluralRule-count-one": "n % 10 = 1 and n % 100 != 11 or v = 2 and f % 10 = 1 and f % 100 != 11 or v != 2 and f % 10 = 1 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, … @decimal 0.1, 1.0, 1.1, 2.1, 3.1, 4.1, 5.1, 6.1, 7.1, 10.1, 100.1, 1000.1, …", - "pluralRule-count-other": " @integer 2~9, 22~29, 102, 1002, … @decimal 0.2~0.9, 1.2~1.9, 10.2, 100.2, 1000.2, …" - }, - "ps": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "pt": { - "pluralRule-count-one": "n = 0..2 and n != 2 @integer 0, 1 @decimal 0.0, 1.0, 0.00, 1.00, 0.000, 1.000, 0.0000, 1.0000", - "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "pt-PT": { - "pluralRule-count-one": "n = 1 and v = 0 @integer 1", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "rm": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "ro": { - "pluralRule-count-one": "i = 1 and v = 0 @integer 1", - "pluralRule-count-few": "v != 0 or n = 0 or n != 1 and n % 100 = 1..19 @integer 0, 2~16, 101, 1001, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …", - "pluralRule-count-other": " @integer 20~35, 100, 1000, 10000, 100000, 1000000, …" - }, - "rof": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "root": { - "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "ru": { - "pluralRule-count-one": "v = 0 and i % 10 = 1 and i % 100 != 11 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, …", - "pluralRule-count-few": "v = 0 and i % 10 = 2..4 and i % 100 != 12..14 @integer 2~4, 22~24, 32~34, 42~44, 52~54, 62, 102, 1002, …", - "pluralRule-count-many": "v = 0 and i % 10 = 0 or v = 0 and i % 10 = 5..9 or v = 0 and i % 100 = 11..14 @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, …", - "pluralRule-count-other": " @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "rwk": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "sah": { - "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "saq": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "se": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-two": "n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000", - "pluralRule-count-other": " @integer 0, 3~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "seh": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "ses": { - "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "sg": { - "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "sh": { - "pluralRule-count-one": "v = 0 and i % 10 = 1 and i % 100 != 11 or f % 10 = 1 and f % 100 != 11 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, … @decimal 0.1, 1.1, 2.1, 3.1, 4.1, 5.1, 6.1, 7.1, 10.1, 100.1, 1000.1, …", - "pluralRule-count-few": "v = 0 and i % 10 = 2..4 and i % 100 != 12..14 or f % 10 = 2..4 and f % 100 != 12..14 @integer 2~4, 22~24, 32~34, 42~44, 52~54, 62, 102, 1002, … @decimal 0.2~0.4, 1.2~1.4, 2.2~2.4, 3.2~3.4, 4.2~4.4, 5.2, 10.2, 100.2, 1000.2, …", - "pluralRule-count-other": " @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 0.5~1.0, 1.5~2.0, 2.5~2.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "shi": { - "pluralRule-count-one": "i = 0 or n = 1 @integer 0, 1 @decimal 0.0~1.0, 0.00~0.04", - "pluralRule-count-few": "n = 2..10 @integer 2~10 @decimal 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 2.00, 3.00, 4.00, 5.00, 6.00, 7.00, 8.00", - "pluralRule-count-other": " @integer 11~26, 100, 1000, 10000, 100000, 1000000, … @decimal 1.1~1.9, 2.1~2.7, 10.1, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "si": { - "pluralRule-count-one": "n = 0,1 or i = 0 and f = 1 @integer 0, 1 @decimal 0.0, 0.1, 1.0, 0.00, 0.01, 1.00, 0.000, 0.001, 1.000, 0.0000, 0.0001, 1.0000", - "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.2~0.9, 1.1~1.8, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "sk": { - "pluralRule-count-one": "i = 1 and v = 0 @integer 1", - "pluralRule-count-few": "i = 2..4 and v = 0 @integer 2~4", - "pluralRule-count-many": "v != 0 @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …", - "pluralRule-count-other": " @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, …" - }, - "sl": { - "pluralRule-count-one": "v = 0 and i % 100 = 1 @integer 1, 101, 201, 301, 401, 501, 601, 701, 1001, …", - "pluralRule-count-two": "v = 0 and i % 100 = 2 @integer 2, 102, 202, 302, 402, 502, 602, 702, 1002, …", - "pluralRule-count-few": "v = 0 and i % 100 = 3..4 or v != 0 @integer 3, 4, 103, 104, 203, 204, 303, 304, 403, 404, 503, 504, 603, 604, 703, 704, 1003, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …", - "pluralRule-count-other": " @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, …" - }, - "sma": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-two": "n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000", - "pluralRule-count-other": " @integer 0, 3~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "smi": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-two": "n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000", - "pluralRule-count-other": " @integer 0, 3~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "smj": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-two": "n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000", - "pluralRule-count-other": " @integer 0, 3~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "smn": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-two": "n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000", - "pluralRule-count-other": " @integer 0, 3~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "sms": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-two": "n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000", - "pluralRule-count-other": " @integer 0, 3~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "sn": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "so": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "sq": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "sr": { - "pluralRule-count-one": "v = 0 and i % 10 = 1 and i % 100 != 11 or f % 10 = 1 and f % 100 != 11 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, … @decimal 0.1, 1.1, 2.1, 3.1, 4.1, 5.1, 6.1, 7.1, 10.1, 100.1, 1000.1, …", - "pluralRule-count-few": "v = 0 and i % 10 = 2..4 and i % 100 != 12..14 or f % 10 = 2..4 and f % 100 != 12..14 @integer 2~4, 22~24, 32~34, 42~44, 52~54, 62, 102, 1002, … @decimal 0.2~0.4, 1.2~1.4, 2.2~2.4, 3.2~3.4, 4.2~4.4, 5.2, 10.2, 100.2, 1000.2, …", - "pluralRule-count-other": " @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 0.5~1.0, 1.5~2.0, 2.5~2.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "ss": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "ssy": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "st": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "sv": { - "pluralRule-count-one": "i = 1 and v = 0 @integer 1", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "sw": { - "pluralRule-count-one": "i = 1 and v = 0 @integer 1", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "syr": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "ta": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "te": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "teo": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "th": { - "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "ti": { - "pluralRule-count-one": "n = 0..1 @integer 0, 1 @decimal 0.0, 1.0, 0.00, 1.00, 0.000, 1.000, 0.0000, 1.0000", - "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "tig": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "tk": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "tl": { - "pluralRule-count-one": "v = 0 and i = 1,2,3 or v = 0 and i % 10 != 4,6,9 or v != 0 and f % 10 != 4,6,9 @integer 0~3, 5, 7, 8, 10~13, 15, 17, 18, 20, 21, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.3, 0.5, 0.7, 0.8, 1.0~1.3, 1.5, 1.7, 1.8, 2.0, 2.1, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …", - "pluralRule-count-other": " @integer 4, 6, 9, 14, 16, 19, 24, 26, 104, 1004, … @decimal 0.4, 0.6, 0.9, 1.4, 1.6, 1.9, 2.4, 2.6, 10.4, 100.4, 1000.4, …" - }, - "tn": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "to": { - "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "tr": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "ts": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "tzm": { - "pluralRule-count-one": "n = 0..1 or n = 11..99 @integer 0, 1, 11~24 @decimal 0.0, 1.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 19.0, 20.0, 21.0, 22.0, 23.0, 24.0", - "pluralRule-count-other": " @integer 2~10, 100~106, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "ug": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "uk": { - "pluralRule-count-one": "v = 0 and i % 10 = 1 and i % 100 != 11 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, …", - "pluralRule-count-few": "v = 0 and i % 10 = 2..4 and i % 100 != 12..14 @integer 2~4, 22~24, 32~34, 42~44, 52~54, 62, 102, 1002, …", - "pluralRule-count-many": "v = 0 and i % 10 = 0 or v = 0 and i % 10 = 5..9 or v = 0 and i % 100 = 11..14 @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, …", - "pluralRule-count-other": " @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "ur": { - "pluralRule-count-one": "i = 1 and v = 0 @integer 1", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "uz": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "ve": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "vi": { - "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "vo": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "vun": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "wa": { - "pluralRule-count-one": "n = 0..1 @integer 0, 1 @decimal 0.0, 1.0, 0.00, 1.00, 0.000, 1.000, 0.0000, 1.0000", - "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "wae": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "wo": { - "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "xh": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "xog": { - "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "yi": { - "pluralRule-count-one": "i = 1 and v = 0 @integer 1", - "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "yo": { - "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "zh": { - "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - }, - "zu": { - "pluralRule-count-one": "i = 0 or n = 1 @integer 0, 1 @decimal 0.0~1.0, 0.00~0.04", - "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 1.1~2.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" - } - } - } -} +{ + "supplemental": { + "version": { + "_number": "$Revision: 13253 $", + "_unicodeVersion": "9.0.0", + "_cldrVersion": "31" + }, + "plurals-type-cardinal": { + "af": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "ak": { + "pluralRule-count-one": "n = 0..1 @integer 0, 1 @decimal 0.0, 1.0, 0.00, 1.00, 0.000, 1.000, 0.0000, 1.0000", + "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "am": { + "pluralRule-count-one": "i = 0 or n = 1 @integer 0, 1 @decimal 0.0~1.0, 0.00~0.04", + "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 1.1~2.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "ar": { + "pluralRule-count-zero": "n = 0 @integer 0 @decimal 0.0, 0.00, 0.000, 0.0000", + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-two": "n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000", + "pluralRule-count-few": "n % 100 = 3..10 @integer 3~10, 103~110, 1003, … @decimal 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 103.0, 1003.0, …", + "pluralRule-count-many": "n % 100 = 11..99 @integer 11~26, 111, 1011, … @decimal 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 111.0, 1011.0, …", + "pluralRule-count-other": " @integer 100~102, 200~202, 300~302, 400~402, 500~502, 600, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.1, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "ars": { + "pluralRule-count-zero": "n = 0 @integer 0 @decimal 0.0, 0.00, 0.000, 0.0000", + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-two": "n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000", + "pluralRule-count-few": "n % 100 = 3..10 @integer 3~10, 103~110, 1003, … @decimal 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 103.0, 1003.0, …", + "pluralRule-count-many": "n % 100 = 11..99 @integer 11~26, 111, 1011, … @decimal 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 111.0, 1011.0, …", + "pluralRule-count-other": " @integer 100~102, 200~202, 300~302, 400~402, 500~502, 600, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.1, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "as": { + "pluralRule-count-one": "i = 0 or n = 1 @integer 0, 1 @decimal 0.0~1.0, 0.00~0.04", + "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 1.1~2.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "asa": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "ast": { + "pluralRule-count-one": "i = 1 and v = 0 @integer 1", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "az": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "be": { + "pluralRule-count-one": "n % 10 = 1 and n % 100 != 11 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, … @decimal 1.0, 21.0, 31.0, 41.0, 51.0, 61.0, 71.0, 81.0, 101.0, 1001.0, …", + "pluralRule-count-few": "n % 10 = 2..4 and n % 100 != 12..14 @integer 2~4, 22~24, 32~34, 42~44, 52~54, 62, 102, 1002, … @decimal 2.0, 3.0, 4.0, 22.0, 23.0, 24.0, 32.0, 33.0, 102.0, 1002.0, …", + "pluralRule-count-many": "n % 10 = 0 or n % 10 = 5..9 or n % 100 = 11..14 @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …", + "pluralRule-count-other": " @decimal 0.1~0.9, 1.1~1.7, 10.1, 100.1, 1000.1, …" + }, + "bem": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "bez": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "bg": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "bh": { + "pluralRule-count-one": "n = 0..1 @integer 0, 1 @decimal 0.0, 1.0, 0.00, 1.00, 0.000, 1.000, 0.0000, 1.0000", + "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "bm": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "bn": { + "pluralRule-count-one": "i = 0 or n = 1 @integer 0, 1 @decimal 0.0~1.0, 0.00~0.04", + "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 1.1~2.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "bo": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "br": { + "pluralRule-count-one": "n % 10 = 1 and n % 100 != 11,71,91 @integer 1, 21, 31, 41, 51, 61, 81, 101, 1001, … @decimal 1.0, 21.0, 31.0, 41.0, 51.0, 61.0, 81.0, 101.0, 1001.0, …", + "pluralRule-count-two": "n % 10 = 2 and n % 100 != 12,72,92 @integer 2, 22, 32, 42, 52, 62, 82, 102, 1002, … @decimal 2.0, 22.0, 32.0, 42.0, 52.0, 62.0, 82.0, 102.0, 1002.0, …", + "pluralRule-count-few": "n % 10 = 3..4,9 and n % 100 != 10..19,70..79,90..99 @integer 3, 4, 9, 23, 24, 29, 33, 34, 39, 43, 44, 49, 103, 1003, … @decimal 3.0, 4.0, 9.0, 23.0, 24.0, 29.0, 33.0, 34.0, 103.0, 1003.0, …", + "pluralRule-count-many": "n != 0 and n % 1000000 = 0 @integer 1000000, … @decimal 1000000.0, 1000000.00, 1000000.000, …", + "pluralRule-count-other": " @integer 0, 5~8, 10~20, 100, 1000, 10000, 100000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, …" + }, + "brx": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "bs": { + "pluralRule-count-one": "v = 0 and i % 10 = 1 and i % 100 != 11 or f % 10 = 1 and f % 100 != 11 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, … @decimal 0.1, 1.1, 2.1, 3.1, 4.1, 5.1, 6.1, 7.1, 10.1, 100.1, 1000.1, …", + "pluralRule-count-few": "v = 0 and i % 10 = 2..4 and i % 100 != 12..14 or f % 10 = 2..4 and f % 100 != 12..14 @integer 2~4, 22~24, 32~34, 42~44, 52~54, 62, 102, 1002, … @decimal 0.2~0.4, 1.2~1.4, 2.2~2.4, 3.2~3.4, 4.2~4.4, 5.2, 10.2, 100.2, 1000.2, …", + "pluralRule-count-other": " @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 0.5~1.0, 1.5~2.0, 2.5~2.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "ca": { + "pluralRule-count-one": "i = 1 and v = 0 @integer 1", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "ce": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "cgg": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "chr": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "ckb": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "cs": { + "pluralRule-count-one": "i = 1 and v = 0 @integer 1", + "pluralRule-count-few": "i = 2..4 and v = 0 @integer 2~4", + "pluralRule-count-many": "v != 0 @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …", + "pluralRule-count-other": " @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, …" + }, + "cy": { + "pluralRule-count-zero": "n = 0 @integer 0 @decimal 0.0, 0.00, 0.000, 0.0000", + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-two": "n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000", + "pluralRule-count-few": "n = 3 @integer 3 @decimal 3.0, 3.00, 3.000, 3.0000", + "pluralRule-count-many": "n = 6 @integer 6 @decimal 6.0, 6.00, 6.000, 6.0000", + "pluralRule-count-other": " @integer 4, 5, 7~20, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "da": { + "pluralRule-count-one": "n = 1 or t != 0 and i = 0,1 @integer 1 @decimal 0.1~1.6", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 2.0~3.4, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "de": { + "pluralRule-count-one": "i = 1 and v = 0 @integer 1", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "dsb": { + "pluralRule-count-one": "v = 0 and i % 100 = 1 or f % 100 = 1 @integer 1, 101, 201, 301, 401, 501, 601, 701, 1001, … @decimal 0.1, 1.1, 2.1, 3.1, 4.1, 5.1, 6.1, 7.1, 10.1, 100.1, 1000.1, …", + "pluralRule-count-two": "v = 0 and i % 100 = 2 or f % 100 = 2 @integer 2, 102, 202, 302, 402, 502, 602, 702, 1002, … @decimal 0.2, 1.2, 2.2, 3.2, 4.2, 5.2, 6.2, 7.2, 10.2, 100.2, 1000.2, …", + "pluralRule-count-few": "v = 0 and i % 100 = 3..4 or f % 100 = 3..4 @integer 3, 4, 103, 104, 203, 204, 303, 304, 403, 404, 503, 504, 603, 604, 703, 704, 1003, … @decimal 0.3, 0.4, 1.3, 1.4, 2.3, 2.4, 3.3, 3.4, 4.3, 4.4, 5.3, 5.4, 6.3, 6.4, 7.3, 7.4, 10.3, 100.3, 1000.3, …", + "pluralRule-count-other": " @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 0.5~1.0, 1.5~2.0, 2.5~2.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "dv": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "dz": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "ee": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "el": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "en": { + "pluralRule-count-one": "i = 1 and v = 0 @integer 1", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "eo": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "es": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "et": { + "pluralRule-count-one": "i = 1 and v = 0 @integer 1", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "eu": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "fa": { + "pluralRule-count-one": "i = 0 or n = 1 @integer 0, 1 @decimal 0.0~1.0, 0.00~0.04", + "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 1.1~2.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "ff": { + "pluralRule-count-one": "i = 0,1 @integer 0, 1 @decimal 0.0~1.5", + "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 2.0~3.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "fi": { + "pluralRule-count-one": "i = 1 and v = 0 @integer 1", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "fil": { + "pluralRule-count-one": "v = 0 and i = 1,2,3 or v = 0 and i % 10 != 4,6,9 or v != 0 and f % 10 != 4,6,9 @integer 0~3, 5, 7, 8, 10~13, 15, 17, 18, 20, 21, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.3, 0.5, 0.7, 0.8, 1.0~1.3, 1.5, 1.7, 1.8, 2.0, 2.1, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …", + "pluralRule-count-other": " @integer 4, 6, 9, 14, 16, 19, 24, 26, 104, 1004, … @decimal 0.4, 0.6, 0.9, 1.4, 1.6, 1.9, 2.4, 2.6, 10.4, 100.4, 1000.4, …" + }, + "fo": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "fr": { + "pluralRule-count-one": "i = 0,1 @integer 0, 1 @decimal 0.0~1.5", + "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 2.0~3.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "fur": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "fy": { + "pluralRule-count-one": "i = 1 and v = 0 @integer 1", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "ga": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-two": "n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000", + "pluralRule-count-few": "n = 3..6 @integer 3~6 @decimal 3.0, 4.0, 5.0, 6.0, 3.00, 4.00, 5.00, 6.00, 3.000, 4.000, 5.000, 6.000, 3.0000, 4.0000, 5.0000, 6.0000", + "pluralRule-count-many": "n = 7..10 @integer 7~10 @decimal 7.0, 8.0, 9.0, 10.0, 7.00, 8.00, 9.00, 10.00, 7.000, 8.000, 9.000, 10.000, 7.0000, 8.0000, 9.0000, 10.0000", + "pluralRule-count-other": " @integer 0, 11~25, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.1, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "gd": { + "pluralRule-count-one": "n = 1,11 @integer 1, 11 @decimal 1.0, 11.0, 1.00, 11.00, 1.000, 11.000, 1.0000", + "pluralRule-count-two": "n = 2,12 @integer 2, 12 @decimal 2.0, 12.0, 2.00, 12.00, 2.000, 12.000, 2.0000", + "pluralRule-count-few": "n = 3..10,13..19 @integer 3~10, 13~19 @decimal 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 19.0, 3.00", + "pluralRule-count-other": " @integer 0, 20~34, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.1, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "gl": { + "pluralRule-count-one": "i = 1 and v = 0 @integer 1", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "gsw": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "gu": { + "pluralRule-count-one": "i = 0 or n = 1 @integer 0, 1 @decimal 0.0~1.0, 0.00~0.04", + "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 1.1~2.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "guw": { + "pluralRule-count-one": "n = 0..1 @integer 0, 1 @decimal 0.0, 1.0, 0.00, 1.00, 0.000, 1.000, 0.0000, 1.0000", + "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "gv": { + "pluralRule-count-one": "v = 0 and i % 10 = 1 @integer 1, 11, 21, 31, 41, 51, 61, 71, 101, 1001, …", + "pluralRule-count-two": "v = 0 and i % 10 = 2 @integer 2, 12, 22, 32, 42, 52, 62, 72, 102, 1002, …", + "pluralRule-count-few": "v = 0 and i % 100 = 0,20,40,60,80 @integer 0, 20, 40, 60, 80, 100, 120, 140, 1000, 10000, 100000, 1000000, …", + "pluralRule-count-many": "v != 0 @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …", + "pluralRule-count-other": " @integer 3~10, 13~19, 23, 103, 1003, …" + }, + "ha": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "haw": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "he": { + "pluralRule-count-one": "i = 1 and v = 0 @integer 1", + "pluralRule-count-two": "i = 2 and v = 0 @integer 2", + "pluralRule-count-many": "v = 0 and n != 0..10 and n % 10 = 0 @integer 20, 30, 40, 50, 60, 70, 80, 90, 100, 1000, 10000, 100000, 1000000, …", + "pluralRule-count-other": " @integer 0, 3~17, 101, 1001, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "hi": { + "pluralRule-count-one": "i = 0 or n = 1 @integer 0, 1 @decimal 0.0~1.0, 0.00~0.04", + "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 1.1~2.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "hr": { + "pluralRule-count-one": "v = 0 and i % 10 = 1 and i % 100 != 11 or f % 10 = 1 and f % 100 != 11 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, … @decimal 0.1, 1.1, 2.1, 3.1, 4.1, 5.1, 6.1, 7.1, 10.1, 100.1, 1000.1, …", + "pluralRule-count-few": "v = 0 and i % 10 = 2..4 and i % 100 != 12..14 or f % 10 = 2..4 and f % 100 != 12..14 @integer 2~4, 22~24, 32~34, 42~44, 52~54, 62, 102, 1002, … @decimal 0.2~0.4, 1.2~1.4, 2.2~2.4, 3.2~3.4, 4.2~4.4, 5.2, 10.2, 100.2, 1000.2, …", + "pluralRule-count-other": " @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 0.5~1.0, 1.5~2.0, 2.5~2.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "hsb": { + "pluralRule-count-one": "v = 0 and i % 100 = 1 or f % 100 = 1 @integer 1, 101, 201, 301, 401, 501, 601, 701, 1001, … @decimal 0.1, 1.1, 2.1, 3.1, 4.1, 5.1, 6.1, 7.1, 10.1, 100.1, 1000.1, …", + "pluralRule-count-two": "v = 0 and i % 100 = 2 or f % 100 = 2 @integer 2, 102, 202, 302, 402, 502, 602, 702, 1002, … @decimal 0.2, 1.2, 2.2, 3.2, 4.2, 5.2, 6.2, 7.2, 10.2, 100.2, 1000.2, …", + "pluralRule-count-few": "v = 0 and i % 100 = 3..4 or f % 100 = 3..4 @integer 3, 4, 103, 104, 203, 204, 303, 304, 403, 404, 503, 504, 603, 604, 703, 704, 1003, … @decimal 0.3, 0.4, 1.3, 1.4, 2.3, 2.4, 3.3, 3.4, 4.3, 4.4, 5.3, 5.4, 6.3, 6.4, 7.3, 7.4, 10.3, 100.3, 1000.3, …", + "pluralRule-count-other": " @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 0.5~1.0, 1.5~2.0, 2.5~2.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "hu": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "hy": { + "pluralRule-count-one": "i = 0,1 @integer 0, 1 @decimal 0.0~1.5", + "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 2.0~3.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "id": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "ig": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "ii": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "in": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "is": { + "pluralRule-count-one": "t = 0 and i % 10 = 1 and i % 100 != 11 or t != 0 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, … @decimal 0.1~1.6, 10.1, 100.1, 1000.1, …", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "it": { + "pluralRule-count-one": "i = 1 and v = 0 @integer 1", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "iu": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-two": "n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000", + "pluralRule-count-other": " @integer 0, 3~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "iw": { + "pluralRule-count-one": "i = 1 and v = 0 @integer 1", + "pluralRule-count-two": "i = 2 and v = 0 @integer 2", + "pluralRule-count-many": "v = 0 and n != 0..10 and n % 10 = 0 @integer 20, 30, 40, 50, 60, 70, 80, 90, 100, 1000, 10000, 100000, 1000000, …", + "pluralRule-count-other": " @integer 0, 3~17, 101, 1001, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "ja": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "jbo": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "jgo": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "ji": { + "pluralRule-count-one": "i = 1 and v = 0 @integer 1", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "jmc": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "jv": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "jw": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "ka": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "kab": { + "pluralRule-count-one": "i = 0,1 @integer 0, 1 @decimal 0.0~1.5", + "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 2.0~3.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "kaj": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "kcg": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "kde": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "kea": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "kk": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "kkj": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "kl": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "km": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "kn": { + "pluralRule-count-one": "i = 0 or n = 1 @integer 0, 1 @decimal 0.0~1.0, 0.00~0.04", + "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 1.1~2.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "ko": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "ks": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "ksb": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "ksh": { + "pluralRule-count-zero": "n = 0 @integer 0 @decimal 0.0, 0.00, 0.000, 0.0000", + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "ku": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "kw": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-two": "n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000", + "pluralRule-count-other": " @integer 0, 3~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "ky": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "lag": { + "pluralRule-count-zero": "n = 0 @integer 0 @decimal 0.0, 0.00, 0.000, 0.0000", + "pluralRule-count-one": "i = 0,1 and n != 0 @integer 1 @decimal 0.1~1.6", + "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 2.0~3.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "lb": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "lg": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "lkt": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "ln": { + "pluralRule-count-one": "n = 0..1 @integer 0, 1 @decimal 0.0, 1.0, 0.00, 1.00, 0.000, 1.000, 0.0000, 1.0000", + "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "lo": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "lt": { + "pluralRule-count-one": "n % 10 = 1 and n % 100 != 11..19 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, … @decimal 1.0, 21.0, 31.0, 41.0, 51.0, 61.0, 71.0, 81.0, 101.0, 1001.0, …", + "pluralRule-count-few": "n % 10 = 2..9 and n % 100 != 11..19 @integer 2~9, 22~29, 102, 1002, … @decimal 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 22.0, 102.0, 1002.0, …", + "pluralRule-count-many": "f != 0 @decimal 0.1~0.9, 1.1~1.7, 10.1, 100.1, 1000.1, …", + "pluralRule-count-other": " @integer 0, 10~20, 30, 40, 50, 60, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "lv": { + "pluralRule-count-zero": "n % 10 = 0 or n % 100 = 11..19 or v = 2 and f % 100 = 11..19 @integer 0, 10~20, 30, 40, 50, 60, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …", + "pluralRule-count-one": "n % 10 = 1 and n % 100 != 11 or v = 2 and f % 10 = 1 and f % 100 != 11 or v != 2 and f % 10 = 1 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, … @decimal 0.1, 1.0, 1.1, 2.1, 3.1, 4.1, 5.1, 6.1, 7.1, 10.1, 100.1, 1000.1, …", + "pluralRule-count-other": " @integer 2~9, 22~29, 102, 1002, … @decimal 0.2~0.9, 1.2~1.9, 10.2, 100.2, 1000.2, …" + }, + "mas": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "mg": { + "pluralRule-count-one": "n = 0..1 @integer 0, 1 @decimal 0.0, 1.0, 0.00, 1.00, 0.000, 1.000, 0.0000, 1.0000", + "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "mgo": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "mk": { + "pluralRule-count-one": "v = 0 and i % 10 = 1 or f % 10 = 1 @integer 1, 11, 21, 31, 41, 51, 61, 71, 101, 1001, … @decimal 0.1, 1.1, 2.1, 3.1, 4.1, 5.1, 6.1, 7.1, 10.1, 100.1, 1000.1, …", + "pluralRule-count-other": " @integer 0, 2~10, 12~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 0.2~1.0, 1.2~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "ml": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "mn": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "mo": { + "pluralRule-count-one": "i = 1 and v = 0 @integer 1", + "pluralRule-count-few": "v != 0 or n = 0 or n != 1 and n % 100 = 1..19 @integer 0, 2~16, 101, 1001, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …", + "pluralRule-count-other": " @integer 20~35, 100, 1000, 10000, 100000, 1000000, …" + }, + "mr": { + "pluralRule-count-one": "i = 0 or n = 1 @integer 0, 1 @decimal 0.0~1.0, 0.00~0.04", + "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 1.1~2.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "ms": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "mt": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-few": "n = 0 or n % 100 = 2..10 @integer 0, 2~10, 102~107, 1002, … @decimal 0.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 10.0, 102.0, 1002.0, …", + "pluralRule-count-many": "n % 100 = 11..19 @integer 11~19, 111~117, 1011, … @decimal 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 111.0, 1011.0, …", + "pluralRule-count-other": " @integer 20~35, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.1, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "my": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "nah": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "naq": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-two": "n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000", + "pluralRule-count-other": " @integer 0, 3~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "nb": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "nd": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "ne": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "nl": { + "pluralRule-count-one": "i = 1 and v = 0 @integer 1", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "nn": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "nnh": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "no": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "nqo": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "nr": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "nso": { + "pluralRule-count-one": "n = 0..1 @integer 0, 1 @decimal 0.0, 1.0, 0.00, 1.00, 0.000, 1.000, 0.0000, 1.0000", + "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "ny": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "nyn": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "om": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "or": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "os": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "pa": { + "pluralRule-count-one": "n = 0..1 @integer 0, 1 @decimal 0.0, 1.0, 0.00, 1.00, 0.000, 1.000, 0.0000, 1.0000", + "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "pap": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "pl": { + "pluralRule-count-one": "i = 1 and v = 0 @integer 1", + "pluralRule-count-few": "v = 0 and i % 10 = 2..4 and i % 100 != 12..14 @integer 2~4, 22~24, 32~34, 42~44, 52~54, 62, 102, 1002, …", + "pluralRule-count-many": "v = 0 and i != 1 and i % 10 = 0..1 or v = 0 and i % 10 = 5..9 or v = 0 and i % 100 = 12..14 @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, …", + "pluralRule-count-other": " @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "prg": { + "pluralRule-count-zero": "n % 10 = 0 or n % 100 = 11..19 or v = 2 and f % 100 = 11..19 @integer 0, 10~20, 30, 40, 50, 60, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …", + "pluralRule-count-one": "n % 10 = 1 and n % 100 != 11 or v = 2 and f % 10 = 1 and f % 100 != 11 or v != 2 and f % 10 = 1 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, … @decimal 0.1, 1.0, 1.1, 2.1, 3.1, 4.1, 5.1, 6.1, 7.1, 10.1, 100.1, 1000.1, …", + "pluralRule-count-other": " @integer 2~9, 22~29, 102, 1002, … @decimal 0.2~0.9, 1.2~1.9, 10.2, 100.2, 1000.2, …" + }, + "ps": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "pt": { + "pluralRule-count-one": "i = 0..1 @integer 0, 1 @decimal 0.0~1.5", + "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 2.0~3.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "rm": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "ro": { + "pluralRule-count-one": "i = 1 and v = 0 @integer 1", + "pluralRule-count-few": "v != 0 or n = 0 or n != 1 and n % 100 = 1..19 @integer 0, 2~16, 101, 1001, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …", + "pluralRule-count-other": " @integer 20~35, 100, 1000, 10000, 100000, 1000000, …" + }, + "rof": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "root": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "ru": { + "pluralRule-count-one": "v = 0 and i % 10 = 1 and i % 100 != 11 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, …", + "pluralRule-count-few": "v = 0 and i % 10 = 2..4 and i % 100 != 12..14 @integer 2~4, 22~24, 32~34, 42~44, 52~54, 62, 102, 1002, …", + "pluralRule-count-many": "v = 0 and i % 10 = 0 or v = 0 and i % 10 = 5..9 or v = 0 and i % 100 = 11..14 @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, …", + "pluralRule-count-other": " @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "rwk": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "sah": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "saq": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "sdh": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "se": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-two": "n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000", + "pluralRule-count-other": " @integer 0, 3~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "seh": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "ses": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "sg": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "sh": { + "pluralRule-count-one": "v = 0 and i % 10 = 1 and i % 100 != 11 or f % 10 = 1 and f % 100 != 11 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, … @decimal 0.1, 1.1, 2.1, 3.1, 4.1, 5.1, 6.1, 7.1, 10.1, 100.1, 1000.1, …", + "pluralRule-count-few": "v = 0 and i % 10 = 2..4 and i % 100 != 12..14 or f % 10 = 2..4 and f % 100 != 12..14 @integer 2~4, 22~24, 32~34, 42~44, 52~54, 62, 102, 1002, … @decimal 0.2~0.4, 1.2~1.4, 2.2~2.4, 3.2~3.4, 4.2~4.4, 5.2, 10.2, 100.2, 1000.2, …", + "pluralRule-count-other": " @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 0.5~1.0, 1.5~2.0, 2.5~2.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "shi": { + "pluralRule-count-one": "i = 0 or n = 1 @integer 0, 1 @decimal 0.0~1.0, 0.00~0.04", + "pluralRule-count-few": "n = 2..10 @integer 2~10 @decimal 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 2.00, 3.00, 4.00, 5.00, 6.00, 7.00, 8.00", + "pluralRule-count-other": " @integer 11~26, 100, 1000, 10000, 100000, 1000000, … @decimal 1.1~1.9, 2.1~2.7, 10.1, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "si": { + "pluralRule-count-one": "n = 0,1 or i = 0 and f = 1 @integer 0, 1 @decimal 0.0, 0.1, 1.0, 0.00, 0.01, 1.00, 0.000, 0.001, 1.000, 0.0000, 0.0001, 1.0000", + "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.2~0.9, 1.1~1.8, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "sk": { + "pluralRule-count-one": "i = 1 and v = 0 @integer 1", + "pluralRule-count-few": "i = 2..4 and v = 0 @integer 2~4", + "pluralRule-count-many": "v != 0 @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …", + "pluralRule-count-other": " @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, …" + }, + "sl": { + "pluralRule-count-one": "v = 0 and i % 100 = 1 @integer 1, 101, 201, 301, 401, 501, 601, 701, 1001, …", + "pluralRule-count-two": "v = 0 and i % 100 = 2 @integer 2, 102, 202, 302, 402, 502, 602, 702, 1002, …", + "pluralRule-count-few": "v = 0 and i % 100 = 3..4 or v != 0 @integer 3, 4, 103, 104, 203, 204, 303, 304, 403, 404, 503, 504, 603, 604, 703, 704, 1003, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …", + "pluralRule-count-other": " @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, …" + }, + "sma": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-two": "n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000", + "pluralRule-count-other": " @integer 0, 3~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "smi": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-two": "n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000", + "pluralRule-count-other": " @integer 0, 3~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "smj": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-two": "n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000", + "pluralRule-count-other": " @integer 0, 3~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "smn": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-two": "n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000", + "pluralRule-count-other": " @integer 0, 3~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "sms": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-two": "n = 2 @integer 2 @decimal 2.0, 2.00, 2.000, 2.0000", + "pluralRule-count-other": " @integer 0, 3~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "sn": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "so": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "sq": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "sr": { + "pluralRule-count-one": "v = 0 and i % 10 = 1 and i % 100 != 11 or f % 10 = 1 and f % 100 != 11 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, … @decimal 0.1, 1.1, 2.1, 3.1, 4.1, 5.1, 6.1, 7.1, 10.1, 100.1, 1000.1, …", + "pluralRule-count-few": "v = 0 and i % 10 = 2..4 and i % 100 != 12..14 or f % 10 = 2..4 and f % 100 != 12..14 @integer 2~4, 22~24, 32~34, 42~44, 52~54, 62, 102, 1002, … @decimal 0.2~0.4, 1.2~1.4, 2.2~2.4, 3.2~3.4, 4.2~4.4, 5.2, 10.2, 100.2, 1000.2, …", + "pluralRule-count-other": " @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0, 0.5~1.0, 1.5~2.0, 2.5~2.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "ss": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "ssy": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "st": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "sv": { + "pluralRule-count-one": "i = 1 and v = 0 @integer 1", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "sw": { + "pluralRule-count-one": "i = 1 and v = 0 @integer 1", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "syr": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "ta": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "te": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "teo": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "th": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "ti": { + "pluralRule-count-one": "n = 0..1 @integer 0, 1 @decimal 0.0, 1.0, 0.00, 1.00, 0.000, 1.000, 0.0000, 1.0000", + "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "tig": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "tk": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "tl": { + "pluralRule-count-one": "v = 0 and i = 1,2,3 or v = 0 and i % 10 != 4,6,9 or v != 0 and f % 10 != 4,6,9 @integer 0~3, 5, 7, 8, 10~13, 15, 17, 18, 20, 21, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.3, 0.5, 0.7, 0.8, 1.0~1.3, 1.5, 1.7, 1.8, 2.0, 2.1, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …", + "pluralRule-count-other": " @integer 4, 6, 9, 14, 16, 19, 24, 26, 104, 1004, … @decimal 0.4, 0.6, 0.9, 1.4, 1.6, 1.9, 2.4, 2.6, 10.4, 100.4, 1000.4, …" + }, + "tn": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "to": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "tr": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "ts": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "tzm": { + "pluralRule-count-one": "n = 0..1 or n = 11..99 @integer 0, 1, 11~24 @decimal 0.0, 1.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 19.0, 20.0, 21.0, 22.0, 23.0, 24.0", + "pluralRule-count-other": " @integer 2~10, 100~106, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "ug": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "uk": { + "pluralRule-count-one": "v = 0 and i % 10 = 1 and i % 100 != 11 @integer 1, 21, 31, 41, 51, 61, 71, 81, 101, 1001, …", + "pluralRule-count-few": "v = 0 and i % 10 = 2..4 and i % 100 != 12..14 @integer 2~4, 22~24, 32~34, 42~44, 52~54, 62, 102, 1002, …", + "pluralRule-count-many": "v = 0 and i % 10 = 0 or v = 0 and i % 10 = 5..9 or v = 0 and i % 100 = 11..14 @integer 0, 5~19, 100, 1000, 10000, 100000, 1000000, …", + "pluralRule-count-other": " @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "ur": { + "pluralRule-count-one": "i = 1 and v = 0 @integer 1", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "uz": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "ve": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "vi": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "vo": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "vun": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "wa": { + "pluralRule-count-one": "n = 0..1 @integer 0, 1 @decimal 0.0, 1.0, 0.00, 1.00, 0.000, 1.000, 0.0000, 1.0000", + "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 0.1~0.9, 1.1~1.7, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "wae": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "wo": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "xh": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "xog": { + "pluralRule-count-one": "n = 1 @integer 1 @decimal 1.0, 1.00, 1.000, 1.0000", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~0.9, 1.1~1.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "yi": { + "pluralRule-count-one": "i = 1 and v = 0 @integer 1", + "pluralRule-count-other": " @integer 0, 2~16, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "yo": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "yue": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "zh": { + "pluralRule-count-other": " @integer 0~15, 100, 1000, 10000, 100000, 1000000, … @decimal 0.0~1.5, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + }, + "zu": { + "pluralRule-count-one": "i = 0 or n = 1 @integer 0, 1 @decimal 0.0~1.0, 0.00~0.04", + "pluralRule-count-other": " @integer 2~17, 100, 1000, 10000, 100000, 1000000, … @decimal 1.1~2.6, 10.0, 100.0, 1000.0, 10000.0, 100000.0, 1000000.0, …" + } + } + } +} diff --git a/lib/composer/vendor/grasmash/expander/.gitignore b/lib/composer/vendor/grasmash/expander/.gitignore new file mode 100644 index 000000000..60c86adf5 --- /dev/null +++ b/lib/composer/vendor/grasmash/expander/.gitignore @@ -0,0 +1,50 @@ +# Cache and logs (Symfony2) +/app/cache/* +/app/logs/* +!app/cache/.gitkeep +!app/logs/.gitkeep + +# Email spool folder +/app/spool/* + +# Cache, session files and logs (Symfony3) +/var/cache/* +/var/logs/* +/var/sessions/* +!var/cache/.gitkeep +!var/logs/.gitkeep +!var/sessions/.gitkeep + +# Parameters +/app/config/parameters.yml +/app/config/parameters.ini + +# Managed by Composer +/app/bootstrap.php.cache +/var/bootstrap.php.cache +/bin/* +!bin/console +!bin/symfony_requirements +/vendor/ + +# Assets and user uploads +/web/bundles/ +/web/uploads/ + +# Assets managed by Bower +/web/assets/vendor/ + +# PHPUnit +/app/phpunit.xml +/phpunit.xml + +# Build data +/build/ + +# Composer PHAR +/composer.phar + +# Backup entities generated with doctrine:generate:entities command +*/Entity/*~ + +.idea diff --git a/lib/composer/vendor/grasmash/expander/.travis.yml b/lib/composer/vendor/grasmash/expander/.travis.yml new file mode 100644 index 000000000..5076ffeaf --- /dev/null +++ b/lib/composer/vendor/grasmash/expander/.travis.yml @@ -0,0 +1,28 @@ +language: php + +matrix: + fast_finish: true + include: + - php: 7.2 + - php: 7.1 + - php: 7.0.11 + - php: 5.6 + - php: 5.5 + - php: 5.4 + +sudo: false + +cache: + apt: true + directories: + - "$HOME/.composer/cache" + - "vendor" + +install: + - composer install + +script: + - composer test + +after_success: + - travis_retry php vendor/bin/coveralls -v diff --git a/lib/composer/vendor/grasmash/expander/CONTRIBUTING.md b/lib/composer/vendor/grasmash/expander/CONTRIBUTING.md new file mode 100644 index 000000000..e69de29bb diff --git a/lib/composer/vendor/grasmash/expander/LICENSE.md b/lib/composer/vendor/grasmash/expander/LICENSE.md new file mode 100644 index 000000000..632424eee --- /dev/null +++ b/lib/composer/vendor/grasmash/expander/LICENSE.md @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2017 Matthew Grasmick + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/lib/composer/vendor/grasmash/expander/README.md b/lib/composer/vendor/grasmash/expander/README.md new file mode 100644 index 000000000..8bfbaac6e --- /dev/null +++ b/lib/composer/vendor/grasmash/expander/README.md @@ -0,0 +1,149 @@ +[![Build Status](https://travis-ci.org/grasmash/expander.svg?branch=master)](https://travis-ci.org/grasmash/expander) [![Packagist](https://img.shields.io/packagist/v/grasmash/expander.svg)](https://packagist.org/packages/grasmash/expander) +[![Total Downloads](https://poser.pugx.org/grasmash/expander/downloads)](https://packagist.org/packages/grasmash/expander) [![Coverage Status](https://coveralls.io/repos/github/grasmash/expander/badge.svg?branch=master)](https://coveralls.io/github/grasmash/expander?branch=master) + +This tool expands property references in PHP arrays. For example implementation, see Yaml Expander. + +### Installation + + composer require grasmash/expander + +### Example usage: + +Property references use dot notation to indicate array keys, and must be wrapped in `${}`. + +Expansion logic: + +```php + 'book', + 'book' => [ + 'title' => 'Dune', + 'author' => 'Frank Herbert', + 'copyright' => '${book.author} 1965', + 'protaganist' => '${characters.0.name}', + 'media' => [ + 0 => 'hardcover', + 1 => 'paperback', + ], + 'nested-reference' => '${book.sequel}', + ], + 'characters' => [ + 0 => [ + 'name' => 'Paul Atreides', + 'occupation' => 'Kwisatz Haderach', + 'aliases' => [ + 0 => 'Usul', + 1 => 'Muad\'Dib', + 2 => 'The Preacher', + ], + ], + 1 => [ + 'name' => 'Duncan Idaho', + 'occupation' => 'Swordmaster', + ], + ], + 'summary' => '${book.title} by ${book.author}', + 'publisher' => '${not.real.property}', + 'sequels' => '${book.sequel}, and others.', + 'available-products' => '${book.media.1}, ${book.media.0}', + 'product-name' => '${${type}.title}', + 'boolean-value' => true, + 'null-value' => NULL, + 'inline-array' => [ + 0 => 'one', + 1 => 'two', + 2 => 'three', + ], + 'expand-array' => '${inline-array}', + 'env-test' => '${env.test}', +]; + +$expander = new Expander(); +// Optionally set a logger. +$expander->setLogger(new Psr\Log\NullLogger()); +// Optionally set a Stringfier, used to convert array placeholders into strings. Defaults to using implode() with `,` delimeter. +// @see StringifierInterface. +$expander->setStringifier(new Grasmash\Expander\Stringifier()); + +// Parse an array, expanding internal property references. +$expanded = $expander->expandArrayProperties($array); + +// Parse an array, expanding references using both internal and supplementary values. +$reference_properties = 'book' => ['sequel' => 'Dune Messiah']; +// Set an environmental variable. +putenv("test=gomjabbar"); +$expanded = $expander->expandArrayProperties($array, $reference_properties); + +print_r($expanded); +```` + +Resultant array: + +```php +Array +( + [type] => book + [book] => Array + ( + [title] => Dune + [author] => Frank Herbert + [copyright] => Frank Herbert 1965 + [protaganist] => Paul Atreides + [media] => Array + ( + [0] => hardcover + [1] => paperback + ) + + [nested-reference] => Dune Messiah + ) + + [characters] => Array + ( + [0] => Array + ( + [name] => Paul Atreides + [occupation] => Kwisatz Haderach + [aliases] => Array + ( + [0] => Usul + [1] => Muad'Dib + [2] => The Preacher + ) + + ) + + [1] => Array + ( + [name] => Duncan Idaho + [occupation] => Swordmaster + ) + + ) + + [summary] => Dune by Frank Herbert + [publisher] => ${not.real.property} + [sequels] => Dune Messiah, and others. + [available-products] => paperback, hardcover + [product-name] => Dune + [boolean-value] => 1 + [null-value] => + [inline-array] => Array + ( + [0] => one + [1] => two + [2] => three + ) + + [expand-array] => one,two,three + [env-test] => gomjabbar + [env] => Array + ( + [test] => gomjabbar + ) + +) + +``` diff --git a/lib/composer/vendor/grasmash/expander/RELEASE.md b/lib/composer/vendor/grasmash/expander/RELEASE.md new file mode 100644 index 000000000..2549d0c2d --- /dev/null +++ b/lib/composer/vendor/grasmash/expander/RELEASE.md @@ -0,0 +1,11 @@ +# Releasing + +### Execute tests + + ./scripts/run-tests.sh + +To quickly fix PHPCS issues: + + ./scripts/clean-code.sh + + diff --git a/lib/composer/vendor/grasmash/expander/composer.json b/lib/composer/vendor/grasmash/expander/composer.json new file mode 100644 index 000000000..e1b692bf1 --- /dev/null +++ b/lib/composer/vendor/grasmash/expander/composer.json @@ -0,0 +1,50 @@ +{ + "name": "grasmash/expander", + "description": "Expands internal property references in PHP arrays file.", + "type": "library", + "require": { + "php": ">=5.4", + "dflydev/dot-access-data": "^1.1.0" + }, + "license": "MIT", + "authors": [ + { + "name": "Matthew Grasmick" + } + ], + "minimum-stability": "stable", + "autoload": { + "psr-4": { + "Grasmash\\Expander\\": "src/" + } + }, + "require-dev": { + "phpunit/phpunit": "^4|^5.5.4", + "satooshi/php-coveralls": "^1.0.2|dev-master", + "greg-1-anderson/composer-test-scenarios": "^1", + "squizlabs/php_codesniffer": "^2.7" + }, + "scripts": { + "cs": "phpcs -n --standard=PSR2 src tests --exclude=Generic.Files.LineLength", + "cbf": "phpcbf -n --standard=PSR2 src tests --exclude=Generic.Files.LineLength", + "unit": "phpunit", + "lint": [ + "find src -name '*.php' -print0 | xargs -0 -n1 php -l", + "find tests -name '*.php' -print0 | xargs -0 -n1 php -l" + ], + "test": [ + "@lint", + "@unit", + "@cs" + ] + }, + "config": { + "optimize-autoloader": true, + "sort-packages": true + }, + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + } +} diff --git a/lib/composer/vendor/grasmash/expander/composer.lock b/lib/composer/vendor/grasmash/expander/composer.lock new file mode 100644 index 000000000..2019acc7d --- /dev/null +++ b/lib/composer/vendor/grasmash/expander/composer.lock @@ -0,0 +1,1750 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", + "This file is @generated automatically" + ], + "content-hash": "a297a5ed4d1b90e8a7dfadfcc0845cc8", + "packages": [ + { + "name": "dflydev/dot-access-data", + "version": "v1.1.0", + "source": { + "type": "git", + "url": "https://github.com/dflydev/dflydev-dot-access-data.git", + "reference": "3fbd874921ab2c041e899d044585a2ab9795df8a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/3fbd874921ab2c041e899d044585a2ab9795df8a", + "reference": "3fbd874921ab2c041e899d044585a2ab9795df8a", + "shasum": "" + }, + "require": { + "php": ">=5.3.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "psr-0": { + "Dflydev\\DotAccessData": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Dragonfly Development Inc.", + "email": "info@dflydev.com", + "homepage": "http://dflydev.com" + }, + { + "name": "Beau Simensen", + "email": "beau@dflydev.com", + "homepage": "http://beausimensen.com" + }, + { + "name": "Carlos Frutos", + "email": "carlos@kiwing.it", + "homepage": "https://github.com/cfrutos" + } + ], + "description": "Given a deep data structure, access data by dot notation.", + "homepage": "https://github.com/dflydev/dflydev-dot-access-data", + "keywords": [ + "access", + "data", + "dot", + "notation" + ], + "time": "2017-01-20T21:14:22+00:00" + } + ], + "packages-dev": [ + { + "name": "doctrine/instantiator", + "version": "1.0.5", + "source": { + "type": "git", + "url": "https://github.com/doctrine/instantiator.git", + "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d", + "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d", + "shasum": "" + }, + "require": { + "php": ">=5.3,<8.0-DEV" + }, + "require-dev": { + "athletic/athletic": "~0.1.8", + "ext-pdo": "*", + "ext-phar": "*", + "phpunit/phpunit": "~4.0", + "squizlabs/php_codesniffer": "~2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "homepage": "http://ocramius.github.com/" + } + ], + "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", + "homepage": "https://github.com/doctrine/instantiator", + "keywords": [ + "constructor", + "instantiate" + ], + "time": "2015-06-14T21:17:01+00:00" + }, + { + "name": "greg-1-anderson/composer-test-scenarios", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/greg-1-anderson/composer-test-scenarios.git", + "reference": "dc81660f44a8b126d7fa947156c98e34f45af3e9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/greg-1-anderson/composer-test-scenarios/zipball/dc81660f44a8b126d7fa947156c98e34f45af3e9", + "reference": "dc81660f44a8b126d7fa947156c98e34f45af3e9", + "shasum": "" + }, + "bin": [ + "scripts/create-scenario", + "scripts/install-scenario" + ], + "type": "library", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Greg Anderson", + "email": "greg.1.anderson@greenknowe.org" + } + ], + "description": "Useful scripts for testing multiple sets of Composer dependencies.", + "time": "2017-12-13T18:41:24+00:00" + }, + { + "name": "guzzle/guzzle", + "version": "v3.9.3", + "source": { + "type": "git", + "url": "https://github.com/guzzle/guzzle3.git", + "reference": "0645b70d953bc1c067bbc8d5bc53194706b628d9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/guzzle3/zipball/0645b70d953bc1c067bbc8d5bc53194706b628d9", + "reference": "0645b70d953bc1c067bbc8d5bc53194706b628d9", + "shasum": "" + }, + "require": { + "ext-curl": "*", + "php": ">=5.3.3", + "symfony/event-dispatcher": "~2.1" + }, + "replace": { + "guzzle/batch": "self.version", + "guzzle/cache": "self.version", + "guzzle/common": "self.version", + "guzzle/http": "self.version", + "guzzle/inflection": "self.version", + "guzzle/iterator": "self.version", + "guzzle/log": "self.version", + "guzzle/parser": "self.version", + "guzzle/plugin": "self.version", + "guzzle/plugin-async": "self.version", + "guzzle/plugin-backoff": "self.version", + "guzzle/plugin-cache": "self.version", + "guzzle/plugin-cookie": "self.version", + "guzzle/plugin-curlauth": "self.version", + "guzzle/plugin-error-response": "self.version", + "guzzle/plugin-history": "self.version", + "guzzle/plugin-log": "self.version", + "guzzle/plugin-md5": "self.version", + "guzzle/plugin-mock": "self.version", + "guzzle/plugin-oauth": "self.version", + "guzzle/service": "self.version", + "guzzle/stream": "self.version" + }, + "require-dev": { + "doctrine/cache": "~1.3", + "monolog/monolog": "~1.0", + "phpunit/phpunit": "3.7.*", + "psr/log": "~1.0", + "symfony/class-loader": "~2.1", + "zendframework/zend-cache": "2.*,<2.3", + "zendframework/zend-log": "2.*,<2.3" + }, + "suggest": { + "guzzlehttp/guzzle": "Guzzle 5 has moved to a new package name. The package you have installed, Guzzle 3, is deprecated." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.9-dev" + } + }, + "autoload": { + "psr-0": { + "Guzzle": "src/", + "Guzzle\\Tests": "tests/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Guzzle Community", + "homepage": "https://github.com/guzzle/guzzle/contributors" + } + ], + "description": "PHP HTTP client. This library is deprecated in favor of https://packagist.org/packages/guzzlehttp/guzzle", + "homepage": "http://guzzlephp.org/", + "keywords": [ + "client", + "curl", + "framework", + "http", + "http client", + "rest", + "web service" + ], + "abandoned": "guzzlehttp/guzzle", + "time": "2015-03-18T18:23:50+00:00" + }, + { + "name": "phpdocumentor/reflection-docblock", + "version": "2.0.5", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "e6a969a640b00d8daa3c66518b0405fb41ae0c4b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/e6a969a640b00d8daa3c66518b0405fb41ae0c4b", + "reference": "e6a969a640b00d8daa3c66518b0405fb41ae0c4b", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.0" + }, + "suggest": { + "dflydev/markdown": "~1.0", + "erusev/parsedown": "~1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-0": { + "phpDocumentor": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "mike.vanriel@naenius.com" + } + ], + "time": "2016-01-25T08:17:30+00:00" + }, + { + "name": "phpspec/prophecy", + "version": "1.7.3", + "source": { + "type": "git", + "url": "https://github.com/phpspec/prophecy.git", + "reference": "e4ed002c67da8eceb0eb8ddb8b3847bb53c5c2bf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/e4ed002c67da8eceb0eb8ddb8b3847bb53c5c2bf", + "reference": "e4ed002c67da8eceb0eb8ddb8b3847bb53c5c2bf", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.0.2", + "php": "^5.3|^7.0", + "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0", + "sebastian/comparator": "^1.1|^2.0", + "sebastian/recursion-context": "^1.0|^2.0|^3.0" + }, + "require-dev": { + "phpspec/phpspec": "^2.5|^3.2", + "phpunit/phpunit": "^4.8.35 || ^5.7" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.7.x-dev" + } + }, + "autoload": { + "psr-0": { + "Prophecy\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Konstantin Kudryashov", + "email": "ever.zet@gmail.com", + "homepage": "http://everzet.com" + }, + { + "name": "Marcello Duarte", + "email": "marcello.duarte@gmail.com" + } + ], + "description": "Highly opinionated mocking framework for PHP 5.3+", + "homepage": "https://github.com/phpspec/prophecy", + "keywords": [ + "Double", + "Dummy", + "fake", + "mock", + "spy", + "stub" + ], + "time": "2017-11-24T13:59:53+00:00" + }, + { + "name": "phpunit/php-code-coverage", + "version": "2.2.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/eabf68b476ac7d0f73793aada060f1c1a9bf8979", + "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "phpunit/php-file-iterator": "~1.3", + "phpunit/php-text-template": "~1.2", + "phpunit/php-token-stream": "~1.3", + "sebastian/environment": "^1.3.2", + "sebastian/version": "~1.0" + }, + "require-dev": { + "ext-xdebug": ">=2.1.4", + "phpunit/phpunit": "~4" + }, + "suggest": { + "ext-dom": "*", + "ext-xdebug": ">=2.2.1", + "ext-xmlwriter": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.2.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", + "homepage": "https://github.com/sebastianbergmann/php-code-coverage", + "keywords": [ + "coverage", + "testing", + "xunit" + ], + "time": "2015-10-06T15:47:00+00:00" + }, + { + "name": "phpunit/php-file-iterator", + "version": "1.4.5", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/730b01bc3e867237eaac355e06a36b85dd93a8b4", + "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "FilterIterator implementation that filters files based on a list of suffixes.", + "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", + "keywords": [ + "filesystem", + "iterator" + ], + "time": "2017-11-27T13:52:08+00:00" + }, + { + "name": "phpunit/php-text-template", + "version": "1.2.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "keywords": [ + "template" + ], + "time": "2015-06-21T13:50:34+00:00" + }, + { + "name": "phpunit/php-timer", + "version": "1.0.9", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", + "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", + "shasum": "" + }, + "require": { + "php": "^5.3.3 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", + "keywords": [ + "timer" + ], + "time": "2017-02-26T11:10:40+00:00" + }, + { + "name": "phpunit/php-token-stream", + "version": "1.4.12", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-token-stream.git", + "reference": "1ce90ba27c42e4e44e6d8458241466380b51fa16" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/1ce90ba27c42e4e44e6d8458241466380b51fa16", + "reference": "1ce90ba27c42e4e44e6d8458241466380b51fa16", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Wrapper around PHP's tokenizer extension.", + "homepage": "https://github.com/sebastianbergmann/php-token-stream/", + "keywords": [ + "tokenizer" + ], + "time": "2017-12-04T08:55:13+00:00" + }, + { + "name": "phpunit/phpunit", + "version": "4.8.36", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "46023de9a91eec7dfb06cc56cb4e260017298517" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/46023de9a91eec7dfb06cc56cb4e260017298517", + "reference": "46023de9a91eec7dfb06cc56cb4e260017298517", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-json": "*", + "ext-pcre": "*", + "ext-reflection": "*", + "ext-spl": "*", + "php": ">=5.3.3", + "phpspec/prophecy": "^1.3.1", + "phpunit/php-code-coverage": "~2.1", + "phpunit/php-file-iterator": "~1.4", + "phpunit/php-text-template": "~1.2", + "phpunit/php-timer": "^1.0.6", + "phpunit/phpunit-mock-objects": "~2.3", + "sebastian/comparator": "~1.2.2", + "sebastian/diff": "~1.2", + "sebastian/environment": "~1.3", + "sebastian/exporter": "~1.2", + "sebastian/global-state": "~1.0", + "sebastian/version": "~1.0", + "symfony/yaml": "~2.1|~3.0" + }, + "suggest": { + "phpunit/php-invoker": "~1.1" + }, + "bin": [ + "phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.8.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "The PHP Unit Testing framework.", + "homepage": "https://phpunit.de/", + "keywords": [ + "phpunit", + "testing", + "xunit" + ], + "time": "2017-06-21T08:07:12+00:00" + }, + { + "name": "phpunit/phpunit-mock-objects", + "version": "2.3.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", + "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/ac8e7a3db35738d56ee9a76e78a4e03d97628983", + "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.0.2", + "php": ">=5.3.3", + "phpunit/php-text-template": "~1.2", + "sebastian/exporter": "~1.2" + }, + "require-dev": { + "phpunit/phpunit": "~4.4" + }, + "suggest": { + "ext-soap": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.3.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "Mock Object library for PHPUnit", + "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/", + "keywords": [ + "mock", + "xunit" + ], + "time": "2015-10-02T06:51:40+00:00" + }, + { + "name": "psr/log", + "version": "1.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", + "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "Psr/Log/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "time": "2016-10-10T12:19:37+00:00" + }, + { + "name": "satooshi/php-coveralls", + "version": "1.1.x-dev", + "source": { + "type": "git", + "url": "https://github.com/php-coveralls/php-coveralls.git", + "reference": "37f8f83fe22224eb9d9c6d593cdeb33eedd2a9ad" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-coveralls/php-coveralls/zipball/37f8f83fe22224eb9d9c6d593cdeb33eedd2a9ad", + "reference": "37f8f83fe22224eb9d9c6d593cdeb33eedd2a9ad", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-simplexml": "*", + "guzzle/guzzle": "^2.8 || ^3.0", + "php": "^5.3.3 || ^7.0", + "psr/log": "^1.0", + "symfony/config": "^2.1 || ^3.0 || ^4.0", + "symfony/console": "^2.1 || ^3.0 || ^4.0", + "symfony/stopwatch": "^2.0 || ^3.0 || ^4.0", + "symfony/yaml": "^2.0 || ^3.0 || ^4.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.4.3 || ^6.0" + }, + "suggest": { + "symfony/http-kernel": "Allows Symfony integration" + }, + "bin": [ + "bin/coveralls" + ], + "type": "library", + "autoload": { + "psr-4": { + "Satooshi\\": "src/Satooshi/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Kitamura Satoshi", + "email": "with.no.parachute@gmail.com", + "homepage": "https://www.facebook.com/satooshi.jp" + } + ], + "description": "PHP client library for Coveralls API", + "homepage": "https://github.com/php-coveralls/php-coveralls", + "keywords": [ + "ci", + "coverage", + "github", + "test" + ], + "time": "2017-12-06T23:17:56+00:00" + }, + { + "name": "sebastian/comparator", + "version": "1.2.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2b7424b55f5047b47ac6e5ccb20b2aea4011d9be", + "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "sebastian/diff": "~1.2", + "sebastian/exporter": "~1.2 || ~2.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides the functionality to compare PHP values for equality", + "homepage": "http://www.github.com/sebastianbergmann/comparator", + "keywords": [ + "comparator", + "compare", + "equality" + ], + "time": "2017-01-29T09:50:25+00:00" + }, + { + "name": "sebastian/diff", + "version": "1.4.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/7f066a26a962dbe58ddea9f72a4e82874a3975a4", + "reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4", + "shasum": "" + }, + "require": { + "php": "^5.3.3 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Diff implementation", + "homepage": "https://github.com/sebastianbergmann/diff", + "keywords": [ + "diff" + ], + "time": "2017-05-22T07:24:03+00:00" + }, + { + "name": "sebastian/environment", + "version": "1.3.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "be2c607e43ce4c89ecd60e75c6a85c126e754aea" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/be2c607e43ce4c89ecd60e75c6a85c126e754aea", + "reference": "be2c607e43ce4c89ecd60e75c6a85c126e754aea", + "shasum": "" + }, + "require": { + "php": "^5.3.3 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8 || ^5.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides functionality to handle HHVM/PHP environments", + "homepage": "http://www.github.com/sebastianbergmann/environment", + "keywords": [ + "Xdebug", + "environment", + "hhvm" + ], + "time": "2016-08-18T05:49:44+00:00" + }, + { + "name": "sebastian/exporter", + "version": "1.2.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/42c4c2eec485ee3e159ec9884f95b431287edde4", + "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "sebastian/recursion-context": "~1.0" + }, + "require-dev": { + "ext-mbstring": "*", + "phpunit/phpunit": "~4.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides the functionality to export PHP variables for visualization", + "homepage": "http://www.github.com/sebastianbergmann/exporter", + "keywords": [ + "export", + "exporter" + ], + "time": "2016-06-17T09:04:28+00:00" + }, + { + "name": "sebastian/global-state", + "version": "1.1.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bc37d50fea7d017d3d340f230811c9f1d7280af4", + "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.2" + }, + "suggest": { + "ext-uopz": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Snapshotting of global state", + "homepage": "http://www.github.com/sebastianbergmann/global-state", + "keywords": [ + "global state" + ], + "time": "2015-10-12T03:26:01+00:00" + }, + { + "name": "sebastian/recursion-context", + "version": "1.0.5", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "b19cc3298482a335a95f3016d2f8a6950f0fbcd7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/b19cc3298482a335a95f3016d2f8a6950f0fbcd7", + "reference": "b19cc3298482a335a95f3016d2f8a6950f0fbcd7", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides functionality to recursively process PHP variables", + "homepage": "http://www.github.com/sebastianbergmann/recursion-context", + "time": "2016-10-03T07:41:43+00:00" + }, + { + "name": "sebastian/version", + "version": "1.0.6", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/58b3a85e7999757d6ad81c787a1fbf5ff6c628c6", + "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6", + "shasum": "" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", + "time": "2015-06-21T13:59:46+00:00" + }, + { + "name": "squizlabs/php_codesniffer", + "version": "2.9.1", + "source": { + "type": "git", + "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", + "reference": "dcbed1074f8244661eecddfc2a675430d8d33f62" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/dcbed1074f8244661eecddfc2a675430d8d33f62", + "reference": "dcbed1074f8244661eecddfc2a675430d8d33f62", + "shasum": "" + }, + "require": { + "ext-simplexml": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": ">=5.1.2" + }, + "require-dev": { + "phpunit/phpunit": "~4.0" + }, + "bin": [ + "scripts/phpcs", + "scripts/phpcbf" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "autoload": { + "classmap": [ + "CodeSniffer.php", + "CodeSniffer/CLI.php", + "CodeSniffer/Exception.php", + "CodeSniffer/File.php", + "CodeSniffer/Fixer.php", + "CodeSniffer/Report.php", + "CodeSniffer/Reporting.php", + "CodeSniffer/Sniff.php", + "CodeSniffer/Tokens.php", + "CodeSniffer/Reports/", + "CodeSniffer/Tokenizers/", + "CodeSniffer/DocGenerators/", + "CodeSniffer/Standards/AbstractPatternSniff.php", + "CodeSniffer/Standards/AbstractScopeSniff.php", + "CodeSniffer/Standards/AbstractVariableSniff.php", + "CodeSniffer/Standards/IncorrectPatternException.php", + "CodeSniffer/Standards/Generic/Sniffs/", + "CodeSniffer/Standards/MySource/Sniffs/", + "CodeSniffer/Standards/PEAR/Sniffs/", + "CodeSniffer/Standards/PSR1/Sniffs/", + "CodeSniffer/Standards/PSR2/Sniffs/", + "CodeSniffer/Standards/Squiz/Sniffs/", + "CodeSniffer/Standards/Zend/Sniffs/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Greg Sherwood", + "role": "lead" + } + ], + "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", + "homepage": "http://www.squizlabs.com/php-codesniffer", + "keywords": [ + "phpcs", + "standards" + ], + "time": "2017-05-22T02:43:20+00:00" + }, + { + "name": "symfony/config", + "version": "v2.8.32", + "source": { + "type": "git", + "url": "https://github.com/symfony/config.git", + "reference": "f4f3f1d7090c464434bbbc3e8aa2b41149c59196" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/config/zipball/f4f3f1d7090c464434bbbc3e8aa2b41149c59196", + "reference": "f4f3f1d7090c464434bbbc3e8aa2b41149c59196", + "shasum": "" + }, + "require": { + "php": ">=5.3.9", + "symfony/filesystem": "~2.3|~3.0.0" + }, + "require-dev": { + "symfony/yaml": "~2.7|~3.0.0" + }, + "suggest": { + "symfony/yaml": "To use the yaml reference dumper" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.8-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Config\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Config Component", + "homepage": "https://symfony.com", + "time": "2017-11-07T11:56:23+00:00" + }, + { + "name": "symfony/console", + "version": "v2.8.32", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "46270f1ca44f08ebc134ce120fd2c2baf5fd63de" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/46270f1ca44f08ebc134ce120fd2c2baf5fd63de", + "reference": "46270f1ca44f08ebc134ce120fd2c2baf5fd63de", + "shasum": "" + }, + "require": { + "php": ">=5.3.9", + "symfony/debug": "^2.7.2|~3.0.0", + "symfony/polyfill-mbstring": "~1.0" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/event-dispatcher": "~2.1|~3.0.0", + "symfony/process": "~2.1|~3.0.0" + }, + "suggest": { + "psr/log": "For using the console logger", + "symfony/event-dispatcher": "", + "symfony/process": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.8-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Console\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Console Component", + "homepage": "https://symfony.com", + "time": "2017-11-29T09:33:18+00:00" + }, + { + "name": "symfony/debug", + "version": "v2.8.32", + "source": { + "type": "git", + "url": "https://github.com/symfony/debug.git", + "reference": "e72a0340dc2e273b3c4398d8eef9157ba51d8b95" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/debug/zipball/e72a0340dc2e273b3c4398d8eef9157ba51d8b95", + "reference": "e72a0340dc2e273b3c4398d8eef9157ba51d8b95", + "shasum": "" + }, + "require": { + "php": ">=5.3.9", + "psr/log": "~1.0" + }, + "conflict": { + "symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2" + }, + "require-dev": { + "symfony/class-loader": "~2.2|~3.0.0", + "symfony/http-kernel": "~2.3.24|~2.5.9|^2.6.2|~3.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.8-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Debug\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Debug Component", + "homepage": "https://symfony.com", + "time": "2017-11-19T19:05:05+00:00" + }, + { + "name": "symfony/event-dispatcher", + "version": "v2.8.32", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "b59aacf238fadda50d612c9de73b74751872a903" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/b59aacf238fadda50d612c9de73b74751872a903", + "reference": "b59aacf238fadda50d612c9de73b74751872a903", + "shasum": "" + }, + "require": { + "php": ">=5.3.9" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/config": "^2.0.5|~3.0.0", + "symfony/dependency-injection": "~2.6|~3.0.0", + "symfony/expression-language": "~2.6|~3.0.0", + "symfony/stopwatch": "~2.3|~3.0.0" + }, + "suggest": { + "symfony/dependency-injection": "", + "symfony/http-kernel": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.8-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\EventDispatcher\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony EventDispatcher Component", + "homepage": "https://symfony.com", + "time": "2017-11-05T15:25:56+00:00" + }, + { + "name": "symfony/filesystem", + "version": "v2.8.32", + "source": { + "type": "git", + "url": "https://github.com/symfony/filesystem.git", + "reference": "15ceb6736a9eebd0d99f9e05a62296ab6ce1cf2b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/15ceb6736a9eebd0d99f9e05a62296ab6ce1cf2b", + "reference": "15ceb6736a9eebd0d99f9e05a62296ab6ce1cf2b", + "shasum": "" + }, + "require": { + "php": ">=5.3.9" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.8-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Filesystem\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Filesystem Component", + "homepage": "https://symfony.com", + "time": "2017-11-19T18:39:05+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.6.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296", + "reference": "2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.6-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "time": "2017-10-11T12:05:26+00:00" + }, + { + "name": "symfony/stopwatch", + "version": "v2.8.32", + "source": { + "type": "git", + "url": "https://github.com/symfony/stopwatch.git", + "reference": "533bb9d7c2da1c6d2da163ecf0f22043ea98f59b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/533bb9d7c2da1c6d2da163ecf0f22043ea98f59b", + "reference": "533bb9d7c2da1c6d2da163ecf0f22043ea98f59b", + "shasum": "" + }, + "require": { + "php": ">=5.3.9" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.8-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Stopwatch\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Stopwatch Component", + "homepage": "https://symfony.com", + "time": "2017-11-10T18:59:36+00:00" + }, + { + "name": "symfony/yaml", + "version": "v2.8.32", + "source": { + "type": "git", + "url": "https://github.com/symfony/yaml.git", + "reference": "968ef42161e4bc04200119da473077f9e7015128" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/yaml/zipball/968ef42161e4bc04200119da473077f9e7015128", + "reference": "968ef42161e4bc04200119da473077f9e7015128", + "shasum": "" + }, + "require": { + "php": ">=5.3.9" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.8-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Yaml\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Yaml Component", + "homepage": "https://symfony.com", + "time": "2017-11-29T09:33:18+00:00" + } + ], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": { + "satooshi/php-coveralls": 20 + }, + "prefer-stable": false, + "prefer-lowest": false, + "platform": { + "php": ">=5.4" + }, + "platform-dev": [] +} diff --git a/lib/composer/vendor/grasmash/expander/phpunit.xml.dist b/lib/composer/vendor/grasmash/expander/phpunit.xml.dist new file mode 100644 index 000000000..59d799076 --- /dev/null +++ b/lib/composer/vendor/grasmash/expander/phpunit.xml.dist @@ -0,0 +1,16 @@ + + + + + tests/phpunit + + + + + + + + src + + + \ No newline at end of file diff --git a/lib/composer/vendor/grasmash/expander/src/Expander.php b/lib/composer/vendor/grasmash/expander/src/Expander.php new file mode 100644 index 000000000..7f5fcef7a --- /dev/null +++ b/lib/composer/vendor/grasmash/expander/src/Expander.php @@ -0,0 +1,303 @@ +setLogger(new NullLogger()); + $this->setStringifier(new Stringifier()); + } + + /** + * @return \Grasmash\Expander\StringifierInterface + */ + public function getStringifier() + { + return $this->stringifier; + } + + /** + * @param \Grasmash\Expander\StringifierInterface $stringifier + */ + public function setStringifier(\Grasmash\Expander\StringifierInterface $stringifier) + { + $this->stringifier = $stringifier; + } + + /** + * @return \Psr\Log\LoggerInterface + */ + public function getLogger() + { + return $this->logger; + } + + /** + * @param \Psr\Log\LoggerInterface $logger + */ + public function setLogger(\Psr\Log\LoggerInterface $logger) + { + $this->logger = $logger; + } + + /** + * Expands property placeholders in an array. + * + * Placeholders should formatted as ${parent.child}. + * + * @param array $array + * An array containing properties to expand. + * + * @return array + * The modified array in which placeholders have been replaced with + * values. + */ + public function expandArrayProperties($array, $reference_array = []) + { + $data = new Data($array); + if ($reference_array) { + $reference_data = new Data($reference_array); + $this->doExpandArrayProperties($data, $array, '', $reference_data); + } else { + $this->doExpandArrayProperties($data, $array); + } + + return $data->export(); + } + + /** + * Performs the actual property expansion. + * + * @param Data $data + * A data object, containing the $array. + * @param array $array + * The original, unmodified array. + * @param string $parent_keys + * The parent keys of the current key in dot notation. This is used to + * track the absolute path to the current key in recursive cases. + * @param Data|null $reference_data + * A reference data object. This is not operated upon but is used as a + * reference to provide supplemental values for property expansion. + */ + protected function doExpandArrayProperties( + $data, + $array, + $parent_keys = '', + $reference_data = null + ) { + foreach ($array as $key => $value) { + // Boundary condition(s). + if (is_null($value) || is_bool($value)) { + continue; + } + // Recursive case. + if (is_array($value)) { + $this->doExpandArrayProperties($data, $value, $parent_keys . "$key.", $reference_data); + } // Base case. + else { + $this->expandStringProperties($data, $parent_keys, $reference_data, $value, $key); + } + } + } + + /** + * Expand a single property. + * + * @param Data $data + * A data object, containing the $array. + * @param string $parent_keys + * The parent keys of the current key in dot notation. This is used to + * track the absolute path to the current key in recursive cases. + * @param Data|null $reference_data + * A reference data object. This is not operated upon but is used as a + * reference to provide supplemental values for property expansion. + * @param string $value + * The unexpanded property value. + * @param string $key + * The immediate key of the property. + * + * @return mixed + */ + protected function expandStringProperties( + $data, + $parent_keys, + $reference_data, + $value, + $key + ) { + // We loop through all placeholders in a given string. + // E.g., '${placeholder1} ${placeholder2}' requires two replacements. + while (strpos($value, '${') !== false) { + $original_value = $value; + $value = preg_replace_callback( + '/\$\{([^\$}]+)\}/', + function ($matches) use ($data, $reference_data) { + return $this->expandStringPropertiesCallback( + $matches, + $data, + $reference_data + ); + }, + $value + ); + + // If no replacement occurred at all, break to prevent + // infinite loop. + if ($original_value == $value) { + break; + } + + // Set value on $data object. + if ($parent_keys) { + $full_key = $parent_keys . "$key"; + } else { + $full_key = $key; + } + $data->set($full_key, $value); + } + return $value; + } + + /** + * Expansion callback used by preg_replace_callback() in expandProperty(). + * + * @param array $matches + * An array of matches created by preg_replace_callback(). + * @param Data $data + * A data object containing the complete array being operated upon. + * @param Data|null $reference_data + * A reference data object. This is not operated upon but is used as a + * reference to provide supplemental values for property expansion. + * + * @return mixed + */ + public function expandStringPropertiesCallback( + $matches, + $data, + $reference_data = null + ) { + $property_name = $matches[1]; + $unexpanded_value = $matches[0]; + + // Use only values within the subject array's data. + if (!$reference_data) { + return $this->expandProperty($property_name, $unexpanded_value, $data); + } // Search both the subject array's data and the reference data for a value. + else { + return $this->expandPropertyWithReferenceData( + $property_name, + $unexpanded_value, + $data, + $reference_data + ); + } + } + + /** + * Searches both the subject data and the reference data for value. + * + * @param string $property_name + * The name of the value for which to search. + * @param string $unexpanded_value + * The original, unexpanded value, containing the placeholder. + * @param Data $data + * A data object containing the complete array being operated upon. + * @param Data|null $reference_data + * A reference data object. This is not operated upon but is used as a + * reference to provide supplemental values for property expansion. + * + * @return string + * The expanded string. + */ + public function expandPropertyWithReferenceData( + $property_name, + $unexpanded_value, + $data, + $reference_data + ) { + $expanded_value = $this->expandProperty( + $property_name, + $unexpanded_value, + $data + ); + // If the string was not changed using the subject data, try using + // the reference data. + if ($expanded_value == $unexpanded_value) { + $expanded_value = $this->expandProperty( + $property_name, + $unexpanded_value, + $reference_data + ); + } + + return $expanded_value; + } + + /** + * Searches a data object for a value. + * + * @param string $property_name + * The name of the value for which to search. + * @param string $unexpanded_value + * The original, unexpanded value, containing the placeholder. + * @param Data $data + * A data object containing possible replacement values. + * + * @return mixed + */ + public function expandProperty($property_name, $unexpanded_value, $data) + { + if (strpos($property_name, "env.") === 0 && + !$data->has($property_name)) { + $env_key = substr($property_name, 4); + if (getenv($env_key)) { + $data->set($property_name, getenv($env_key)); + } + } + + if (!$data->has($property_name)) { + $this->log("Property \${'$property_name'} could not be expanded."); + return $unexpanded_value; + } else { + $expanded_value = $data->get($property_name); + if (is_array($expanded_value)) { + $expanded_value = $this->getStringifier()->stringifyArray($expanded_value); + return $expanded_value; + } + $this->log("Expanding property \${'$property_name'} => $expanded_value."); + return $expanded_value; + } + } + + /** + * Logs a message using the logger. + * + * @param string $message + * The message to log. + */ + public function log($message) + { + if ($this->getLogger()) { + $this->getLogger()->debug($message); + } + } +} diff --git a/lib/composer/vendor/grasmash/expander/src/Stringifier.php b/lib/composer/vendor/grasmash/expander/src/Stringifier.php new file mode 100644 index 000000000..7937b3197 --- /dev/null +++ b/lib/composer/vendor/grasmash/expander/src/Stringifier.php @@ -0,0 +1,24 @@ +expandArrayProperties($array); + $this->assertEquals('gomjabbar', $expanded['env-test']); + $this->assertEquals('Frank Herbert 1965', $expanded['book']['copyright']); + $this->assertEquals('Paul Atreides', $expanded['book']['protaganist']); + $this->assertEquals('Dune by Frank Herbert', $expanded['summary']); + $this->assertEquals('${book.media.1}, hardcover', $expanded['available-products']); + $this->assertEquals('Dune', $expanded['product-name']); + $this->assertEquals(Stringifier::stringifyArray($array['inline-array']), $expanded['expand-array']); + + $expanded = $expander->expandArrayProperties($array, $reference_array); + $this->assertEquals('Dune Messiah, and others.', $expanded['sequels']); + $this->assertEquals('Dune Messiah', $expanded['book']['nested-reference']); + } + + /** + * @return array + * An array of values to test. + */ + public function providerYaml() + { + return [ + [ + [ + 'type' => 'book', + 'book' => [ + 'title' => 'Dune', + 'author' => 'Frank Herbert', + 'copyright' => '${book.author} 1965', + 'protaganist' => '${characters.0.name}', + 'media' => [ + 0 => 'hardcover', + ], + 'nested-reference' => '${book.sequel}', + ], + 'characters' => [ + 0 => [ + 'name' => 'Paul Atreides', + 'occupation' => 'Kwisatz Haderach', + 'aliases' => [ + 0 => 'Usul', + 1 => "Muad'Dib", + 2 => 'The Preacher', + ], + ], + 1 => [ + 'name' => 'Duncan Idaho', + 'occupation' => 'Swordmaster', + ], + ], + 'summary' => '${book.title} by ${book.author}', + 'publisher' => '${not.real.property}', + 'sequels' => '${book.sequel}, and others.', + 'available-products' => '${book.media.1}, ${book.media.0}', + 'product-name' => '${${type}.title}', + 'boolean-value' => true, + 'null-value' => null, + 'inline-array' => [ + 0 => 'one', + 1 => 'two', + 2 => 'three', + ], + 'expand-array' => '${inline-array}', + 'env-test' => '${env.test}', + ], + [ + 'book' => [ + 'sequel' => 'Dune Messiah' + ] + ] + ], + ]; + } + + /** + * Tests Expander::expandProperty(). + * + * @dataProvider providerTestExpandProperty + */ + public function testExpandProperty(array $array, $property_name, $unexpanded_string, $expected) + { + $data = new Data($array); + $expander = new Expander(); + $expanded_value = $expander->expandProperty($property_name, $unexpanded_string, $data); + + $this->assertEquals($expected, $expanded_value); + } + + /** + * @return array + */ + public function providerTestExpandProperty() + { + return [ + [ ['author' => 'Frank Herbert'], 'author', '${author}', 'Frank Herbert' ], + [ ['book' => ['author' => 'Frank Herbert' ]], 'book.author', '${book.author}', 'Frank Herbert' ], + ]; + } +} diff --git a/lib/composer/vendor/grasmash/yaml-expander/.gitignore b/lib/composer/vendor/grasmash/yaml-expander/.gitignore new file mode 100644 index 000000000..60c86adf5 --- /dev/null +++ b/lib/composer/vendor/grasmash/yaml-expander/.gitignore @@ -0,0 +1,50 @@ +# Cache and logs (Symfony2) +/app/cache/* +/app/logs/* +!app/cache/.gitkeep +!app/logs/.gitkeep + +# Email spool folder +/app/spool/* + +# Cache, session files and logs (Symfony3) +/var/cache/* +/var/logs/* +/var/sessions/* +!var/cache/.gitkeep +!var/logs/.gitkeep +!var/sessions/.gitkeep + +# Parameters +/app/config/parameters.yml +/app/config/parameters.ini + +# Managed by Composer +/app/bootstrap.php.cache +/var/bootstrap.php.cache +/bin/* +!bin/console +!bin/symfony_requirements +/vendor/ + +# Assets and user uploads +/web/bundles/ +/web/uploads/ + +# Assets managed by Bower +/web/assets/vendor/ + +# PHPUnit +/app/phpunit.xml +/phpunit.xml + +# Build data +/build/ + +# Composer PHAR +/composer.phar + +# Backup entities generated with doctrine:generate:entities command +*/Entity/*~ + +.idea diff --git a/lib/composer/vendor/grasmash/yaml-expander/.travis.yml b/lib/composer/vendor/grasmash/yaml-expander/.travis.yml new file mode 100644 index 000000000..0416daaec --- /dev/null +++ b/lib/composer/vendor/grasmash/yaml-expander/.travis.yml @@ -0,0 +1,39 @@ +language: php + +branches: + # Only test the master branch and SemVer tags. + only: + - master + - /^[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+.*$/ + +matrix: + fast_finish: true + include: + - php: 7.2 + env: 'SCENARIO=symfony4 HIGHEST_LOWEST="update"' + - php: 7.1 + env: 'SCENARIO=symfony4' + - php: 7.0.11 + env: 'HIGHEST_LOWEST="update"' + - php: 7.0.11 + - php: 5.6 + - php: 5.5 + - php: 5.4 + env: 'SCENARIO=symfony2 HIGHEST_LOWEST="update --prefer-lowest' + +sudo: false + +cache: + apt: true + directories: + - "$HOME/.composer/cache" + - "vendor" + +install: + - 'composer scenario "${SCENARIO}" "${HIGHEST_LOWEST-install}"' + +script: + - composer test + +after_success: + - travis_retry php vendor/bin/coveralls -v diff --git a/lib/composer/vendor/grasmash/yaml-expander/CONTRIBUTING.md b/lib/composer/vendor/grasmash/yaml-expander/CONTRIBUTING.md new file mode 100644 index 000000000..e69de29bb diff --git a/lib/composer/vendor/grasmash/yaml-expander/LICENSE.md b/lib/composer/vendor/grasmash/yaml-expander/LICENSE.md new file mode 100644 index 000000000..632424eee --- /dev/null +++ b/lib/composer/vendor/grasmash/yaml-expander/LICENSE.md @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2017 Matthew Grasmick + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/lib/composer/vendor/grasmash/yaml-expander/README.md b/lib/composer/vendor/grasmash/yaml-expander/README.md new file mode 100644 index 000000000..837614626 --- /dev/null +++ b/lib/composer/vendor/grasmash/yaml-expander/README.md @@ -0,0 +1,100 @@ +[![Build Status](https://travis-ci.org/grasmash/yaml-expander.svg?branch=master)](https://travis-ci.org/grasmash/yaml-expander) [![Packagist](https://img.shields.io/packagist/v/grasmash/yaml-expander.svg)](https://packagist.org/packages/grasmash/yaml-expander) +[![Total Downloads](https://poser.pugx.org/grasmash/yaml-expander/downloads)](https://packagist.org/packages/grasmash/yaml-expander) [![Coverage Status](https://coveralls.io/repos/github/grasmash/yaml-expander/badge.svg?branch=master)](https://coveralls.io/github/grasmash/yaml-expander?branch=master) + +This tool expands property references in YAML files. + +### Installation + + composer require grasmash/yaml-expander + +### Example usage: + +Example dune.yml: + +```yaml +type: book +book: + title: Dune + author: Frank Herbert + copyright: ${book.author} 1965 + protaganist: ${characters.0.name} + media: + - hardcover +characters: + - name: Paul Atreides + occupation: Kwisatz Haderach + aliases: + - Usul + - Muad'Dib + - The Preacher + - name: Duncan Idaho + occupation: Swordmaster +summary: ${book.title} by ${book.author} +product-name: ${${type}.title} +``` + +Property references use dot notation to indicate array keys, and must be wrapped in `${}`. + +Expansion logic: + +```php + ['publication-year' => 1965]]; +$expanded = \Grasmash\YamlExpander\Expander::expandArrayProperties($array, $reference_properties); +print_r($expanded); +```` + +Resultant array: + +```php + 'book', + 'book' => + array ( + 'title' => 'Dune', + 'author' => 'Frank Herbert', + 'copyright' => 'Frank Herbert 1965', + 'protaganist' => 'Paul Atreides', + 'media' => + array ( + 0 => 'hardcover', + ), + ), + 'characters' => + array ( + 0 => + array ( + 'name' => 'Paul Atreides', + 'occupation' => 'Kwisatz Haderach', + 'aliases' => + array ( + 0 => 'Usul', + 1 => 'Muad\'Dib', + 2 => 'The Preacher', + ), + ), + 1 => + array ( + 'name' => 'Duncan Idaho', + 'occupation' => 'Swordmaster', + ), + ), + 'summary' => 'Dune by Frank Herbert', + 'product-name' => 'Dune', +); +``` diff --git a/lib/composer/vendor/grasmash/yaml-expander/RELEASE.md b/lib/composer/vendor/grasmash/yaml-expander/RELEASE.md new file mode 100644 index 000000000..2549d0c2d --- /dev/null +++ b/lib/composer/vendor/grasmash/yaml-expander/RELEASE.md @@ -0,0 +1,11 @@ +# Releasing + +### Execute tests + + ./scripts/run-tests.sh + +To quickly fix PHPCS issues: + + ./scripts/clean-code.sh + + diff --git a/lib/composer/vendor/grasmash/yaml-expander/composer.json b/lib/composer/vendor/grasmash/yaml-expander/composer.json new file mode 100644 index 000000000..f671ee40d --- /dev/null +++ b/lib/composer/vendor/grasmash/yaml-expander/composer.json @@ -0,0 +1,59 @@ +{ + "name": "grasmash/yaml-expander", + "description": "Expands internal property references in a yaml file.", + "type": "library", + "require": { + "php": ">=5.4", + "symfony/yaml": "^2.8.11|^3|^4", + "dflydev/dot-access-data": "^1.1.0" + }, + "license": "MIT", + "authors": [ + { + "name": "Matthew Grasmick" + } + ], + "minimum-stability": "stable", + "autoload": { + "psr-4": { + "Grasmash\\YamlExpander\\": "src/" + } + }, + "require-dev": { + "phpunit/phpunit": "^4.8|^5.5.4", + "satooshi/php-coveralls": "^1.0.2|dev-master", + "greg-1-anderson/composer-test-scenarios": "^1", + "squizlabs/php_codesniffer": "^2.7" + }, + "scripts": { + "cs": "phpcs -n --standard=PSR2 src tests --exclude=Generic.Files.LineLength", + "cbf": "phpcbf -n --standard=PSR2 src tests --exclude=Generic.Files.LineLength", + "unit": "phpunit", + "lint": [ + "find src -name '*.php' -print0 | xargs -0 -n1 php -l", + "find tests -name '*.php' -print0 | xargs -0 -n1 php -l" + ], + "test": [ + "@lint", + "@unit", + "@cs" + ], + "scenario": "scenarios/install", + "post-update-cmd": [ + "create-scenario symfony4 'symfony/console:^4.0'", + "create-scenario symfony2 'symfony/console:^2.8' --platform-php '5.4' --no-lockfile" + ] + }, + "config": { + "optimize-autoloader": true, + "sort-packages": true, + "platform": { + "php": "5.5.9" + } + }, + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + } +} diff --git a/lib/composer/vendor/grasmash/yaml-expander/composer.lock b/lib/composer/vendor/grasmash/yaml-expander/composer.lock new file mode 100644 index 000000000..7f1268ad4 --- /dev/null +++ b/lib/composer/vendor/grasmash/yaml-expander/composer.lock @@ -0,0 +1,2019 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", + "This file is @generated automatically" + ], + "content-hash": "ae81b9e7daa60d332450889eb23e80a9", + "packages": [ + { + "name": "dflydev/dot-access-data", + "version": "v1.1.0", + "source": { + "type": "git", + "url": "https://github.com/dflydev/dflydev-dot-access-data.git", + "reference": "3fbd874921ab2c041e899d044585a2ab9795df8a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/3fbd874921ab2c041e899d044585a2ab9795df8a", + "reference": "3fbd874921ab2c041e899d044585a2ab9795df8a", + "shasum": "" + }, + "require": { + "php": ">=5.3.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "psr-0": { + "Dflydev\\DotAccessData": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Dragonfly Development Inc.", + "email": "info@dflydev.com", + "homepage": "http://dflydev.com" + }, + { + "name": "Beau Simensen", + "email": "beau@dflydev.com", + "homepage": "http://beausimensen.com" + }, + { + "name": "Carlos Frutos", + "email": "carlos@kiwing.it", + "homepage": "https://github.com/cfrutos" + } + ], + "description": "Given a deep data structure, access data by dot notation.", + "homepage": "https://github.com/dflydev/dflydev-dot-access-data", + "keywords": [ + "access", + "data", + "dot", + "notation" + ], + "time": "2017-01-20T21:14:22+00:00" + }, + { + "name": "symfony/yaml", + "version": "v3.4.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/yaml.git", + "reference": "b3d0c9c11be3831b84825967dc6b52b5a7b84e04" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/yaml/zipball/b3d0c9c11be3831b84825967dc6b52b5a7b84e04", + "reference": "b3d0c9c11be3831b84825967dc6b52b5a7b84e04", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8" + }, + "conflict": { + "symfony/console": "<3.4" + }, + "require-dev": { + "symfony/console": "~3.4|~4.0" + }, + "suggest": { + "symfony/console": "For validating YAML files using the lint command" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Yaml\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Yaml Component", + "homepage": "https://symfony.com", + "time": "2017-11-29T13:28:14+00:00" + } + ], + "packages-dev": [ + { + "name": "doctrine/instantiator", + "version": "1.0.5", + "source": { + "type": "git", + "url": "https://github.com/doctrine/instantiator.git", + "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d", + "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d", + "shasum": "" + }, + "require": { + "php": ">=5.3,<8.0-DEV" + }, + "require-dev": { + "athletic/athletic": "~0.1.8", + "ext-pdo": "*", + "ext-phar": "*", + "phpunit/phpunit": "~4.0", + "squizlabs/php_codesniffer": "~2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "homepage": "http://ocramius.github.com/" + } + ], + "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", + "homepage": "https://github.com/doctrine/instantiator", + "keywords": [ + "constructor", + "instantiate" + ], + "time": "2015-06-14T21:17:01+00:00" + }, + { + "name": "greg-1-anderson/composer-test-scenarios", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/greg-1-anderson/composer-test-scenarios.git", + "reference": "00ff9f3af3132f0c6b2fb9e0906efee402f0c703" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/greg-1-anderson/composer-test-scenarios/zipball/00ff9f3af3132f0c6b2fb9e0906efee402f0c703", + "reference": "00ff9f3af3132f0c6b2fb9e0906efee402f0c703", + "shasum": "" + }, + "bin": [ + "scripts/create-scenario", + "scripts/install-scenario" + ], + "type": "library", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Greg Anderson", + "email": "greg.1.anderson@greenknowe.org" + } + ], + "description": "Useful scripts for testing multiple sets of Composer dependencies.", + "time": "2017-12-01T21:34:53+00:00" + }, + { + "name": "guzzlehttp/guzzle", + "version": "6.3.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/guzzle.git", + "reference": "f4db5a78a5ea468d4831de7f0bf9d9415e348699" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/f4db5a78a5ea468d4831de7f0bf9d9415e348699", + "reference": "f4db5a78a5ea468d4831de7f0bf9d9415e348699", + "shasum": "" + }, + "require": { + "guzzlehttp/promises": "^1.0", + "guzzlehttp/psr7": "^1.4", + "php": ">=5.5" + }, + "require-dev": { + "ext-curl": "*", + "phpunit/phpunit": "^4.0 || ^5.0", + "psr/log": "^1.0" + }, + "suggest": { + "psr/log": "Required for using the Log middleware" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "6.2-dev" + } + }, + "autoload": { + "files": [ + "src/functions_include.php" + ], + "psr-4": { + "GuzzleHttp\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "description": "Guzzle is a PHP HTTP client library", + "homepage": "http://guzzlephp.org/", + "keywords": [ + "client", + "curl", + "framework", + "http", + "http client", + "rest", + "web service" + ], + "time": "2017-06-22T18:50:49+00:00" + }, + { + "name": "guzzlehttp/promises", + "version": "v1.3.1", + "source": { + "type": "git", + "url": "https://github.com/guzzle/promises.git", + "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/promises/zipball/a59da6cf61d80060647ff4d3eb2c03a2bc694646", + "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646", + "shasum": "" + }, + "require": { + "php": ">=5.5.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Promise\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "description": "Guzzle promises library", + "keywords": [ + "promise" + ], + "time": "2016-12-20T10:07:11+00:00" + }, + { + "name": "guzzlehttp/psr7", + "version": "1.4.2", + "source": { + "type": "git", + "url": "https://github.com/guzzle/psr7.git", + "reference": "f5b8a8512e2b58b0071a7280e39f14f72e05d87c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/f5b8a8512e2b58b0071a7280e39f14f72e05d87c", + "reference": "f5b8a8512e2b58b0071a7280e39f14f72e05d87c", + "shasum": "" + }, + "require": { + "php": ">=5.4.0", + "psr/http-message": "~1.0" + }, + "provide": { + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Psr7\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Tobias Schultze", + "homepage": "https://github.com/Tobion" + } + ], + "description": "PSR-7 message implementation that also provides common utility methods", + "keywords": [ + "http", + "message", + "request", + "response", + "stream", + "uri", + "url" + ], + "time": "2017-03-20T17:10:46+00:00" + }, + { + "name": "phpdocumentor/reflection-common", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionCommon.git", + "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", + "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", + "shasum": "" + }, + "require": { + "php": ">=5.5" + }, + "require-dev": { + "phpunit/phpunit": "^4.6" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": [ + "src" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jaap van Otterdijk", + "email": "opensource@ijaap.nl" + } + ], + "description": "Common reflection classes used by phpdocumentor to reflect the code structure", + "homepage": "http://www.phpdoc.org", + "keywords": [ + "FQSEN", + "phpDocumentor", + "phpdoc", + "reflection", + "static analysis" + ], + "time": "2017-09-11T18:02:19+00:00" + }, + { + "name": "phpdocumentor/reflection-docblock", + "version": "3.2.2", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "4aada1f93c72c35e22fb1383b47fee43b8f1d157" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/4aada1f93c72c35e22fb1383b47fee43b8f1d157", + "reference": "4aada1f93c72c35e22fb1383b47fee43b8f1d157", + "shasum": "" + }, + "require": { + "php": ">=5.5", + "phpdocumentor/reflection-common": "^1.0@dev", + "phpdocumentor/type-resolver": "^0.3.0", + "webmozart/assert": "^1.0" + }, + "require-dev": { + "mockery/mockery": "^0.9.4", + "phpunit/phpunit": "^4.4" + }, + "type": "library", + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + } + ], + "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", + "time": "2017-08-08T06:39:58+00:00" + }, + { + "name": "phpdocumentor/type-resolver", + "version": "0.3.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/TypeResolver.git", + "reference": "fb3933512008d8162b3cdf9e18dba9309b7c3773" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/fb3933512008d8162b3cdf9e18dba9309b7c3773", + "reference": "fb3933512008d8162b3cdf9e18dba9309b7c3773", + "shasum": "" + }, + "require": { + "php": "^5.5 || ^7.0", + "phpdocumentor/reflection-common": "^1.0" + }, + "require-dev": { + "mockery/mockery": "^0.9.4", + "phpunit/phpunit": "^5.2||^4.8.24" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + } + ], + "time": "2017-06-03T08:32:36+00:00" + }, + { + "name": "phpspec/prophecy", + "version": "1.7.3", + "source": { + "type": "git", + "url": "https://github.com/phpspec/prophecy.git", + "reference": "e4ed002c67da8eceb0eb8ddb8b3847bb53c5c2bf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/e4ed002c67da8eceb0eb8ddb8b3847bb53c5c2bf", + "reference": "e4ed002c67da8eceb0eb8ddb8b3847bb53c5c2bf", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.0.2", + "php": "^5.3|^7.0", + "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0", + "sebastian/comparator": "^1.1|^2.0", + "sebastian/recursion-context": "^1.0|^2.0|^3.0" + }, + "require-dev": { + "phpspec/phpspec": "^2.5|^3.2", + "phpunit/phpunit": "^4.8.35 || ^5.7" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.7.x-dev" + } + }, + "autoload": { + "psr-0": { + "Prophecy\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Konstantin Kudryashov", + "email": "ever.zet@gmail.com", + "homepage": "http://everzet.com" + }, + { + "name": "Marcello Duarte", + "email": "marcello.duarte@gmail.com" + } + ], + "description": "Highly opinionated mocking framework for PHP 5.3+", + "homepage": "https://github.com/phpspec/prophecy", + "keywords": [ + "Double", + "Dummy", + "fake", + "mock", + "spy", + "stub" + ], + "time": "2017-11-24T13:59:53+00:00" + }, + { + "name": "phpunit/php-code-coverage", + "version": "2.2.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/eabf68b476ac7d0f73793aada060f1c1a9bf8979", + "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "phpunit/php-file-iterator": "~1.3", + "phpunit/php-text-template": "~1.2", + "phpunit/php-token-stream": "~1.3", + "sebastian/environment": "^1.3.2", + "sebastian/version": "~1.0" + }, + "require-dev": { + "ext-xdebug": ">=2.1.4", + "phpunit/phpunit": "~4" + }, + "suggest": { + "ext-dom": "*", + "ext-xdebug": ">=2.2.1", + "ext-xmlwriter": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.2.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", + "homepage": "https://github.com/sebastianbergmann/php-code-coverage", + "keywords": [ + "coverage", + "testing", + "xunit" + ], + "time": "2015-10-06T15:47:00+00:00" + }, + { + "name": "phpunit/php-file-iterator", + "version": "1.4.5", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/730b01bc3e867237eaac355e06a36b85dd93a8b4", + "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "FilterIterator implementation that filters files based on a list of suffixes.", + "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", + "keywords": [ + "filesystem", + "iterator" + ], + "time": "2017-11-27T13:52:08+00:00" + }, + { + "name": "phpunit/php-text-template", + "version": "1.2.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "keywords": [ + "template" + ], + "time": "2015-06-21T13:50:34+00:00" + }, + { + "name": "phpunit/php-timer", + "version": "1.0.9", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", + "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", + "shasum": "" + }, + "require": { + "php": "^5.3.3 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", + "keywords": [ + "timer" + ], + "time": "2017-02-26T11:10:40+00:00" + }, + { + "name": "phpunit/php-token-stream", + "version": "1.4.11", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-token-stream.git", + "reference": "e03f8f67534427a787e21a385a67ec3ca6978ea7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/e03f8f67534427a787e21a385a67ec3ca6978ea7", + "reference": "e03f8f67534427a787e21a385a67ec3ca6978ea7", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Wrapper around PHP's tokenizer extension.", + "homepage": "https://github.com/sebastianbergmann/php-token-stream/", + "keywords": [ + "tokenizer" + ], + "time": "2017-02-27T10:12:30+00:00" + }, + { + "name": "phpunit/phpunit", + "version": "4.8.36", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "46023de9a91eec7dfb06cc56cb4e260017298517" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/46023de9a91eec7dfb06cc56cb4e260017298517", + "reference": "46023de9a91eec7dfb06cc56cb4e260017298517", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-json": "*", + "ext-pcre": "*", + "ext-reflection": "*", + "ext-spl": "*", + "php": ">=5.3.3", + "phpspec/prophecy": "^1.3.1", + "phpunit/php-code-coverage": "~2.1", + "phpunit/php-file-iterator": "~1.4", + "phpunit/php-text-template": "~1.2", + "phpunit/php-timer": "^1.0.6", + "phpunit/phpunit-mock-objects": "~2.3", + "sebastian/comparator": "~1.2.2", + "sebastian/diff": "~1.2", + "sebastian/environment": "~1.3", + "sebastian/exporter": "~1.2", + "sebastian/global-state": "~1.0", + "sebastian/version": "~1.0", + "symfony/yaml": "~2.1|~3.0" + }, + "suggest": { + "phpunit/php-invoker": "~1.1" + }, + "bin": [ + "phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.8.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "The PHP Unit Testing framework.", + "homepage": "https://phpunit.de/", + "keywords": [ + "phpunit", + "testing", + "xunit" + ], + "time": "2017-06-21T08:07:12+00:00" + }, + { + "name": "phpunit/phpunit-mock-objects", + "version": "2.3.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", + "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/ac8e7a3db35738d56ee9a76e78a4e03d97628983", + "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.0.2", + "php": ">=5.3.3", + "phpunit/php-text-template": "~1.2", + "sebastian/exporter": "~1.2" + }, + "require-dev": { + "phpunit/phpunit": "~4.4" + }, + "suggest": { + "ext-soap": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.3.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "Mock Object library for PHPUnit", + "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/", + "keywords": [ + "mock", + "xunit" + ], + "time": "2015-10-02T06:51:40+00:00" + }, + { + "name": "psr/http-message", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-message.git", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP messages", + "homepage": "https://github.com/php-fig/http-message", + "keywords": [ + "http", + "http-message", + "psr", + "psr-7", + "request", + "response" + ], + "time": "2016-08-06T14:39:51+00:00" + }, + { + "name": "psr/log", + "version": "1.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", + "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "Psr/Log/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "time": "2016-10-10T12:19:37+00:00" + }, + { + "name": "satooshi/php-coveralls", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/php-coveralls/php-coveralls.git", + "reference": "c9d3fe2327c8539f1105dc19954673ba993e4ad9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-coveralls/php-coveralls/zipball/c9d3fe2327c8539f1105dc19954673ba993e4ad9", + "reference": "c9d3fe2327c8539f1105dc19954673ba993e4ad9", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-simplexml": "*", + "guzzlehttp/guzzle": "^6.0", + "php": "^5.5 || ^7.0", + "psr/log": "^1.0", + "symfony/config": "^2.1 || ^3.0 || ^4.0", + "symfony/console": "^2.1 || ^3.0 || ^4.0", + "symfony/stopwatch": "^2.0 || ^3.0 || ^4.0", + "symfony/yaml": "^2.0 || ^3.0 || ^4.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.4.3 || ^6.0" + }, + "suggest": { + "symfony/http-kernel": "Allows Symfony integration" + }, + "bin": [ + "bin/coveralls" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "psr-4": { + "PhpCoveralls\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Kitamura Satoshi", + "email": "with.no.parachute@gmail.com", + "homepage": "https://www.facebook.com/satooshi.jp", + "role": "Original creator" + }, + { + "name": "Takashi Matsuo", + "email": "tmatsuo@google.com" + }, + { + "name": "Google Inc" + }, + { + "name": "Dariusz Ruminski", + "email": "dariusz.ruminski@gmail.com", + "homepage": "https://github.com/keradus" + }, + { + "name": "Contributors", + "homepage": "https://github.com/php-coveralls/php-coveralls/graphs/contributors" + } + ], + "description": "PHP client library for Coveralls API", + "homepage": "https://github.com/php-coveralls/php-coveralls", + "keywords": [ + "ci", + "coverage", + "github", + "test" + ], + "time": "2017-10-14T23:16:28+00:00" + }, + { + "name": "sebastian/comparator", + "version": "1.2.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2b7424b55f5047b47ac6e5ccb20b2aea4011d9be", + "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "sebastian/diff": "~1.2", + "sebastian/exporter": "~1.2 || ~2.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides the functionality to compare PHP values for equality", + "homepage": "http://www.github.com/sebastianbergmann/comparator", + "keywords": [ + "comparator", + "compare", + "equality" + ], + "time": "2017-01-29T09:50:25+00:00" + }, + { + "name": "sebastian/diff", + "version": "1.4.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/7f066a26a962dbe58ddea9f72a4e82874a3975a4", + "reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4", + "shasum": "" + }, + "require": { + "php": "^5.3.3 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Diff implementation", + "homepage": "https://github.com/sebastianbergmann/diff", + "keywords": [ + "diff" + ], + "time": "2017-05-22T07:24:03+00:00" + }, + { + "name": "sebastian/environment", + "version": "1.3.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "be2c607e43ce4c89ecd60e75c6a85c126e754aea" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/be2c607e43ce4c89ecd60e75c6a85c126e754aea", + "reference": "be2c607e43ce4c89ecd60e75c6a85c126e754aea", + "shasum": "" + }, + "require": { + "php": "^5.3.3 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8 || ^5.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides functionality to handle HHVM/PHP environments", + "homepage": "http://www.github.com/sebastianbergmann/environment", + "keywords": [ + "Xdebug", + "environment", + "hhvm" + ], + "time": "2016-08-18T05:49:44+00:00" + }, + { + "name": "sebastian/exporter", + "version": "1.2.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/42c4c2eec485ee3e159ec9884f95b431287edde4", + "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "sebastian/recursion-context": "~1.0" + }, + "require-dev": { + "ext-mbstring": "*", + "phpunit/phpunit": "~4.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides the functionality to export PHP variables for visualization", + "homepage": "http://www.github.com/sebastianbergmann/exporter", + "keywords": [ + "export", + "exporter" + ], + "time": "2016-06-17T09:04:28+00:00" + }, + { + "name": "sebastian/global-state", + "version": "1.1.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bc37d50fea7d017d3d340f230811c9f1d7280af4", + "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.2" + }, + "suggest": { + "ext-uopz": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Snapshotting of global state", + "homepage": "http://www.github.com/sebastianbergmann/global-state", + "keywords": [ + "global state" + ], + "time": "2015-10-12T03:26:01+00:00" + }, + { + "name": "sebastian/recursion-context", + "version": "1.0.5", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "b19cc3298482a335a95f3016d2f8a6950f0fbcd7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/b19cc3298482a335a95f3016d2f8a6950f0fbcd7", + "reference": "b19cc3298482a335a95f3016d2f8a6950f0fbcd7", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides functionality to recursively process PHP variables", + "homepage": "http://www.github.com/sebastianbergmann/recursion-context", + "time": "2016-10-03T07:41:43+00:00" + }, + { + "name": "sebastian/version", + "version": "1.0.6", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/58b3a85e7999757d6ad81c787a1fbf5ff6c628c6", + "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6", + "shasum": "" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", + "time": "2015-06-21T13:59:46+00:00" + }, + { + "name": "squizlabs/php_codesniffer", + "version": "2.9.1", + "source": { + "type": "git", + "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", + "reference": "dcbed1074f8244661eecddfc2a675430d8d33f62" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/dcbed1074f8244661eecddfc2a675430d8d33f62", + "reference": "dcbed1074f8244661eecddfc2a675430d8d33f62", + "shasum": "" + }, + "require": { + "ext-simplexml": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": ">=5.1.2" + }, + "require-dev": { + "phpunit/phpunit": "~4.0" + }, + "bin": [ + "scripts/phpcs", + "scripts/phpcbf" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "autoload": { + "classmap": [ + "CodeSniffer.php", + "CodeSniffer/CLI.php", + "CodeSniffer/Exception.php", + "CodeSniffer/File.php", + "CodeSniffer/Fixer.php", + "CodeSniffer/Report.php", + "CodeSniffer/Reporting.php", + "CodeSniffer/Sniff.php", + "CodeSniffer/Tokens.php", + "CodeSniffer/Reports/", + "CodeSniffer/Tokenizers/", + "CodeSniffer/DocGenerators/", + "CodeSniffer/Standards/AbstractPatternSniff.php", + "CodeSniffer/Standards/AbstractScopeSniff.php", + "CodeSniffer/Standards/AbstractVariableSniff.php", + "CodeSniffer/Standards/IncorrectPatternException.php", + "CodeSniffer/Standards/Generic/Sniffs/", + "CodeSniffer/Standards/MySource/Sniffs/", + "CodeSniffer/Standards/PEAR/Sniffs/", + "CodeSniffer/Standards/PSR1/Sniffs/", + "CodeSniffer/Standards/PSR2/Sniffs/", + "CodeSniffer/Standards/Squiz/Sniffs/", + "CodeSniffer/Standards/Zend/Sniffs/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Greg Sherwood", + "role": "lead" + } + ], + "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", + "homepage": "http://www.squizlabs.com/php-codesniffer", + "keywords": [ + "phpcs", + "standards" + ], + "time": "2017-05-22T02:43:20+00:00" + }, + { + "name": "symfony/config", + "version": "v3.4.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/config.git", + "reference": "1de51a6c76359897ab32c309934b93d036bccb60" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/config/zipball/1de51a6c76359897ab32c309934b93d036bccb60", + "reference": "1de51a6c76359897ab32c309934b93d036bccb60", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8", + "symfony/filesystem": "~2.8|~3.0|~4.0" + }, + "conflict": { + "symfony/dependency-injection": "<3.3", + "symfony/finder": "<3.3" + }, + "require-dev": { + "symfony/dependency-injection": "~3.3|~4.0", + "symfony/finder": "~3.3|~4.0", + "symfony/yaml": "~3.0|~4.0" + }, + "suggest": { + "symfony/yaml": "To use the yaml reference dumper" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Config\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Config Component", + "homepage": "https://symfony.com", + "time": "2017-11-19T20:09:36+00:00" + }, + { + "name": "symfony/console", + "version": "v3.4.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "9468ad3fba3a5e1f0dc12a96e50e84cddb923cf0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/9468ad3fba3a5e1f0dc12a96e50e84cddb923cf0", + "reference": "9468ad3fba3a5e1f0dc12a96e50e84cddb923cf0", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8", + "symfony/debug": "~2.8|~3.0|~4.0", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "symfony/dependency-injection": "<3.4", + "symfony/process": "<3.3" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/config": "~3.3|~4.0", + "symfony/dependency-injection": "~3.4|~4.0", + "symfony/event-dispatcher": "~2.8|~3.0|~4.0", + "symfony/lock": "~3.4|~4.0", + "symfony/process": "~3.3|~4.0" + }, + "suggest": { + "psr/log": "For using the console logger", + "symfony/event-dispatcher": "", + "symfony/lock": "", + "symfony/process": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Console\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Console Component", + "homepage": "https://symfony.com", + "time": "2017-11-29T13:28:14+00:00" + }, + { + "name": "symfony/debug", + "version": "v3.4.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/debug.git", + "reference": "fb2001e5d85f95d8b6ab94ae3be5d2672df128fd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/debug/zipball/fb2001e5d85f95d8b6ab94ae3be5d2672df128fd", + "reference": "fb2001e5d85f95d8b6ab94ae3be5d2672df128fd", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8", + "psr/log": "~1.0" + }, + "conflict": { + "symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2" + }, + "require-dev": { + "symfony/http-kernel": "~2.8|~3.0|~4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Debug\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Debug Component", + "homepage": "https://symfony.com", + "time": "2017-11-21T09:01:46+00:00" + }, + { + "name": "symfony/filesystem", + "version": "v3.4.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/filesystem.git", + "reference": "de56eee71e0a128d8c54ccc1909cdefd574bad0f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/de56eee71e0a128d8c54ccc1909cdefd574bad0f", + "reference": "de56eee71e0a128d8c54ccc1909cdefd574bad0f", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Filesystem\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Filesystem Component", + "homepage": "https://symfony.com", + "time": "2017-11-19T18:59:05+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.6.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296", + "reference": "2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.6-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "time": "2017-10-11T12:05:26+00:00" + }, + { + "name": "symfony/stopwatch", + "version": "v3.4.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/stopwatch.git", + "reference": "52510fe1aefdc1c5d2076ac6030421d387e689d1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/52510fe1aefdc1c5d2076ac6030421d387e689d1", + "reference": "52510fe1aefdc1c5d2076ac6030421d387e689d1", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Stopwatch\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Stopwatch Component", + "homepage": "https://symfony.com", + "time": "2017-11-07T14:28:09+00:00" + }, + { + "name": "webmozart/assert", + "version": "1.2.0", + "source": { + "type": "git", + "url": "https://github.com/webmozart/assert.git", + "reference": "2db61e59ff05fe5126d152bd0655c9ea113e550f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozart/assert/zipball/2db61e59ff05fe5126d152bd0655c9ea113e550f", + "reference": "2db61e59ff05fe5126d152bd0655c9ea113e550f", + "shasum": "" + }, + "require": { + "php": "^5.3.3 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.6", + "sebastian/version": "^1.0.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3-dev" + } + }, + "autoload": { + "psr-4": { + "Webmozart\\Assert\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Assertions to validate method input/output with nice error messages.", + "keywords": [ + "assert", + "check", + "validate" + ], + "time": "2016-11-23T20:04:58+00:00" + } + ], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": { + "satooshi/php-coveralls": 20 + }, + "prefer-stable": false, + "prefer-lowest": false, + "platform": { + "php": ">=5.4" + }, + "platform-dev": [], + "platform-overrides": { + "php": "5.5.9" + } +} diff --git a/lib/composer/vendor/grasmash/yaml-expander/phpunit.xml.dist b/lib/composer/vendor/grasmash/yaml-expander/phpunit.xml.dist new file mode 100644 index 000000000..59d799076 --- /dev/null +++ b/lib/composer/vendor/grasmash/yaml-expander/phpunit.xml.dist @@ -0,0 +1,16 @@ + + + + + tests/phpunit + + + + + + + + src + + + \ No newline at end of file diff --git a/lib/composer/vendor/grasmash/yaml-expander/scenarios/install b/lib/composer/vendor/grasmash/yaml-expander/scenarios/install new file mode 100755 index 000000000..5bc73b734 --- /dev/null +++ b/lib/composer/vendor/grasmash/yaml-expander/scenarios/install @@ -0,0 +1,23 @@ +#!/bin/bash + +SCENARIO=$1 +ACTION=${2-install} + +dir=scenarios/${SCENARIO} +if [ -z "$SCENARIO" ] ; then + SCENARIO=default + dir=. +fi + + +if [ ! -d "$dir" ] ; then + echo "Requested scenario '${SCENARIO}' does not exist." + exit 1 +fi + +echo "Switch to ${SCENARIO} scenario" + +set -ex + +composer -n --working-dir=$dir ${ACTION} --prefer-dist --no-scripts +composer -n --working-dir=$dir info diff --git a/lib/composer/vendor/grasmash/yaml-expander/scenarios/symfony2/.gitignore b/lib/composer/vendor/grasmash/yaml-expander/scenarios/symfony2/.gitignore new file mode 100644 index 000000000..7579f7431 --- /dev/null +++ b/lib/composer/vendor/grasmash/yaml-expander/scenarios/symfony2/.gitignore @@ -0,0 +1,2 @@ +vendor +composer.lock diff --git a/lib/composer/vendor/grasmash/yaml-expander/scenarios/symfony2/composer.json b/lib/composer/vendor/grasmash/yaml-expander/scenarios/symfony2/composer.json new file mode 100644 index 000000000..43e4e9653 --- /dev/null +++ b/lib/composer/vendor/grasmash/yaml-expander/scenarios/symfony2/composer.json @@ -0,0 +1,61 @@ +{ + "name": "grasmash/yaml-expander", + "description": "Expands internal property references in a yaml file.", + "type": "library", + "require": { + "php": ">=5.4", + "symfony/yaml": "^2.8.11|^3|^4", + "dflydev/dot-access-data": "^1.1.0" + }, + "license": "MIT", + "authors": [ + { + "name": "Matthew Grasmick" + } + ], + "minimum-stability": "stable", + "autoload": { + "psr-4": { + "Grasmash\\YamlExpander\\": "src/" + } + }, + "require-dev": { + "greg-1-anderson/composer-test-scenarios": "^1", + "phpunit/phpunit": "^4.8|^5.5.4", + "satooshi/php-coveralls": "^1.0.2|dev-master", + "squizlabs/php_codesniffer": "^2.7", + "symfony/console": "^2.8" + }, + "scripts": { + "cs": "phpcs -n --standard=PSR2 src tests --exclude=Generic.Files.LineLength", + "cbf": "phpcbf -n --standard=PSR2 src tests --exclude=Generic.Files.LineLength", + "unit": "phpunit", + "lint": [ + "find src -name '*.php' -print0 | xargs -0 -n1 php -l", + "find tests -name '*.php' -print0 | xargs -0 -n1 php -l" + ], + "test": [ + "@lint", + "@unit", + "@cs" + ], + "scenario": "scenarios/install", + "post-update-cmd": [ + "create-scenario symfony4 'symfony/console:^4.0'", + "create-scenario symfony2 'symfony/console:^2.8' --platform-php '5.4' --no-lockfile" + ] + }, + "config": { + "optimize-autoloader": true, + "sort-packages": true, + "platform": { + "php": "5.4" + }, + "vendor-dir": "../../vendor" + }, + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + } +} diff --git a/lib/composer/vendor/grasmash/yaml-expander/scenarios/symfony2/src b/lib/composer/vendor/grasmash/yaml-expander/scenarios/symfony2/src new file mode 120000 index 000000000..929cb3dc9 --- /dev/null +++ b/lib/composer/vendor/grasmash/yaml-expander/scenarios/symfony2/src @@ -0,0 +1 @@ +../../src \ No newline at end of file diff --git a/lib/composer/vendor/grasmash/yaml-expander/scenarios/symfony2/tests b/lib/composer/vendor/grasmash/yaml-expander/scenarios/symfony2/tests new file mode 120000 index 000000000..c2ebfe530 --- /dev/null +++ b/lib/composer/vendor/grasmash/yaml-expander/scenarios/symfony2/tests @@ -0,0 +1 @@ +../../tests \ No newline at end of file diff --git a/lib/composer/vendor/grasmash/yaml-expander/scenarios/symfony4/.gitignore b/lib/composer/vendor/grasmash/yaml-expander/scenarios/symfony4/.gitignore new file mode 100644 index 000000000..22d0d82f8 --- /dev/null +++ b/lib/composer/vendor/grasmash/yaml-expander/scenarios/symfony4/.gitignore @@ -0,0 +1 @@ +vendor diff --git a/lib/composer/vendor/grasmash/yaml-expander/scenarios/symfony4/composer.json b/lib/composer/vendor/grasmash/yaml-expander/scenarios/symfony4/composer.json new file mode 100644 index 000000000..3052d4e9a --- /dev/null +++ b/lib/composer/vendor/grasmash/yaml-expander/scenarios/symfony4/composer.json @@ -0,0 +1,61 @@ +{ + "name": "grasmash/yaml-expander", + "description": "Expands internal property references in a yaml file.", + "type": "library", + "require": { + "php": ">=5.4", + "symfony/yaml": "^2.8.11|^3|^4", + "dflydev/dot-access-data": "^1.1.0" + }, + "license": "MIT", + "authors": [ + { + "name": "Matthew Grasmick" + } + ], + "minimum-stability": "stable", + "autoload": { + "psr-4": { + "Grasmash\\YamlExpander\\": "src/" + } + }, + "require-dev": { + "greg-1-anderson/composer-test-scenarios": "^1", + "phpunit/phpunit": "^4.8|^5.5.4", + "satooshi/php-coveralls": "^1.0.2|dev-master", + "squizlabs/php_codesniffer": "^2.7", + "symfony/console": "^4.0" + }, + "scripts": { + "cs": "phpcs -n --standard=PSR2 src tests --exclude=Generic.Files.LineLength", + "cbf": "phpcbf -n --standard=PSR2 src tests --exclude=Generic.Files.LineLength", + "unit": "phpunit", + "lint": [ + "find src -name '*.php' -print0 | xargs -0 -n1 php -l", + "find tests -name '*.php' -print0 | xargs -0 -n1 php -l" + ], + "test": [ + "@lint", + "@unit", + "@cs" + ], + "scenario": "scenarios/install", + "post-update-cmd": [ + "create-scenario symfony4 'symfony/console:^4.0'", + "create-scenario symfony2 'symfony/console:^2.8' --platform-php '5.4' --no-lockfile" + ] + }, + "config": { + "optimize-autoloader": true, + "sort-packages": true, + "platform": { + + }, + "vendor-dir": "../../vendor" + }, + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + } +} diff --git a/lib/composer/vendor/grasmash/yaml-expander/scenarios/symfony4/composer.lock b/lib/composer/vendor/grasmash/yaml-expander/scenarios/symfony4/composer.lock new file mode 100644 index 000000000..d0fe611a2 --- /dev/null +++ b/lib/composer/vendor/grasmash/yaml-expander/scenarios/symfony4/composer.lock @@ -0,0 +1,2163 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", + "This file is @generated automatically" + ], + "content-hash": "d2caa274a8dbc1766b1756b440be19a0", + "packages": [ + { + "name": "dflydev/dot-access-data", + "version": "v1.1.0", + "source": { + "type": "git", + "url": "https://github.com/dflydev/dflydev-dot-access-data.git", + "reference": "3fbd874921ab2c041e899d044585a2ab9795df8a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/3fbd874921ab2c041e899d044585a2ab9795df8a", + "reference": "3fbd874921ab2c041e899d044585a2ab9795df8a", + "shasum": "" + }, + "require": { + "php": ">=5.3.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "psr-0": { + "Dflydev\\DotAccessData": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Dragonfly Development Inc.", + "email": "info@dflydev.com", + "homepage": "http://dflydev.com" + }, + { + "name": "Beau Simensen", + "email": "beau@dflydev.com", + "homepage": "http://beausimensen.com" + }, + { + "name": "Carlos Frutos", + "email": "carlos@kiwing.it", + "homepage": "https://github.com/cfrutos" + } + ], + "description": "Given a deep data structure, access data by dot notation.", + "homepage": "https://github.com/dflydev/dflydev-dot-access-data", + "keywords": [ + "access", + "data", + "dot", + "notation" + ], + "time": "2017-01-20T21:14:22+00:00" + }, + { + "name": "symfony/yaml", + "version": "v4.0.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/yaml.git", + "reference": "7be8741ce5dce9943f41a9269f6828b66e726776" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/yaml/zipball/7be8741ce5dce9943f41a9269f6828b66e726776", + "reference": "7be8741ce5dce9943f41a9269f6828b66e726776", + "shasum": "" + }, + "require": { + "php": "^7.1.3" + }, + "conflict": { + "symfony/console": "<3.4" + }, + "require-dev": { + "symfony/console": "~3.4|~4.0" + }, + "suggest": { + "symfony/console": "For validating YAML files using the lint command" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Yaml\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Yaml Component", + "homepage": "https://symfony.com", + "time": "2017-11-29T13:42:03+00:00" + } + ], + "packages-dev": [ + { + "name": "doctrine/instantiator", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/instantiator.git", + "reference": "185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda", + "reference": "185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda", + "shasum": "" + }, + "require": { + "php": "^7.1" + }, + "require-dev": { + "athletic/athletic": "~0.1.8", + "ext-pdo": "*", + "ext-phar": "*", + "phpunit/phpunit": "^6.2.3", + "squizlabs/php_codesniffer": "^3.0.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "homepage": "http://ocramius.github.com/" + } + ], + "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", + "homepage": "https://github.com/doctrine/instantiator", + "keywords": [ + "constructor", + "instantiate" + ], + "time": "2017-07-22T11:58:36+00:00" + }, + { + "name": "greg-1-anderson/composer-test-scenarios", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/greg-1-anderson/composer-test-scenarios.git", + "reference": "00ff9f3af3132f0c6b2fb9e0906efee402f0c703" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/greg-1-anderson/composer-test-scenarios/zipball/00ff9f3af3132f0c6b2fb9e0906efee402f0c703", + "reference": "00ff9f3af3132f0c6b2fb9e0906efee402f0c703", + "shasum": "" + }, + "bin": [ + "scripts/create-scenario", + "scripts/install-scenario" + ], + "type": "library", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Greg Anderson", + "email": "greg.1.anderson@greenknowe.org" + } + ], + "description": "Useful scripts for testing multiple sets of Composer dependencies.", + "time": "2017-12-01T21:34:53+00:00" + }, + { + "name": "guzzlehttp/guzzle", + "version": "6.3.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/guzzle.git", + "reference": "f4db5a78a5ea468d4831de7f0bf9d9415e348699" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/f4db5a78a5ea468d4831de7f0bf9d9415e348699", + "reference": "f4db5a78a5ea468d4831de7f0bf9d9415e348699", + "shasum": "" + }, + "require": { + "guzzlehttp/promises": "^1.0", + "guzzlehttp/psr7": "^1.4", + "php": ">=5.5" + }, + "require-dev": { + "ext-curl": "*", + "phpunit/phpunit": "^4.0 || ^5.0", + "psr/log": "^1.0" + }, + "suggest": { + "psr/log": "Required for using the Log middleware" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "6.2-dev" + } + }, + "autoload": { + "files": [ + "src/functions_include.php" + ], + "psr-4": { + "GuzzleHttp\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "description": "Guzzle is a PHP HTTP client library", + "homepage": "http://guzzlephp.org/", + "keywords": [ + "client", + "curl", + "framework", + "http", + "http client", + "rest", + "web service" + ], + "time": "2017-06-22T18:50:49+00:00" + }, + { + "name": "guzzlehttp/promises", + "version": "v1.3.1", + "source": { + "type": "git", + "url": "https://github.com/guzzle/promises.git", + "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/promises/zipball/a59da6cf61d80060647ff4d3eb2c03a2bc694646", + "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646", + "shasum": "" + }, + "require": { + "php": ">=5.5.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Promise\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "description": "Guzzle promises library", + "keywords": [ + "promise" + ], + "time": "2016-12-20T10:07:11+00:00" + }, + { + "name": "guzzlehttp/psr7", + "version": "1.4.2", + "source": { + "type": "git", + "url": "https://github.com/guzzle/psr7.git", + "reference": "f5b8a8512e2b58b0071a7280e39f14f72e05d87c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/f5b8a8512e2b58b0071a7280e39f14f72e05d87c", + "reference": "f5b8a8512e2b58b0071a7280e39f14f72e05d87c", + "shasum": "" + }, + "require": { + "php": ">=5.4.0", + "psr/http-message": "~1.0" + }, + "provide": { + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Psr7\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Tobias Schultze", + "homepage": "https://github.com/Tobion" + } + ], + "description": "PSR-7 message implementation that also provides common utility methods", + "keywords": [ + "http", + "message", + "request", + "response", + "stream", + "uri", + "url" + ], + "time": "2017-03-20T17:10:46+00:00" + }, + { + "name": "myclabs/deep-copy", + "version": "1.7.0", + "source": { + "type": "git", + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e", + "reference": "3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0" + }, + "require-dev": { + "doctrine/collections": "^1.0", + "doctrine/common": "^2.6", + "phpunit/phpunit": "^4.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + }, + "files": [ + "src/DeepCopy/deep_copy.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Create deep copies (clones) of your objects", + "keywords": [ + "clone", + "copy", + "duplicate", + "object", + "object graph" + ], + "time": "2017-10-19T19:58:43+00:00" + }, + { + "name": "phpdocumentor/reflection-common", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionCommon.git", + "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", + "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", + "shasum": "" + }, + "require": { + "php": ">=5.5" + }, + "require-dev": { + "phpunit/phpunit": "^4.6" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": [ + "src" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jaap van Otterdijk", + "email": "opensource@ijaap.nl" + } + ], + "description": "Common reflection classes used by phpdocumentor to reflect the code structure", + "homepage": "http://www.phpdoc.org", + "keywords": [ + "FQSEN", + "phpDocumentor", + "phpdoc", + "reflection", + "static analysis" + ], + "time": "2017-09-11T18:02:19+00:00" + }, + { + "name": "phpdocumentor/reflection-docblock", + "version": "4.2.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "66465776cfc249844bde6d117abff1d22e06c2da" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/66465776cfc249844bde6d117abff1d22e06c2da", + "reference": "66465776cfc249844bde6d117abff1d22e06c2da", + "shasum": "" + }, + "require": { + "php": "^7.0", + "phpdocumentor/reflection-common": "^1.0.0", + "phpdocumentor/type-resolver": "^0.4.0", + "webmozart/assert": "^1.0" + }, + "require-dev": { + "doctrine/instantiator": "~1.0.5", + "mockery/mockery": "^1.0", + "phpunit/phpunit": "^6.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + } + ], + "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", + "time": "2017-11-27T17:38:31+00:00" + }, + { + "name": "phpdocumentor/type-resolver", + "version": "0.4.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/TypeResolver.git", + "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/9c977708995954784726e25d0cd1dddf4e65b0f7", + "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7", + "shasum": "" + }, + "require": { + "php": "^5.5 || ^7.0", + "phpdocumentor/reflection-common": "^1.0" + }, + "require-dev": { + "mockery/mockery": "^0.9.4", + "phpunit/phpunit": "^5.2||^4.8.24" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + } + ], + "time": "2017-07-14T14:27:02+00:00" + }, + { + "name": "phpspec/prophecy", + "version": "1.7.3", + "source": { + "type": "git", + "url": "https://github.com/phpspec/prophecy.git", + "reference": "e4ed002c67da8eceb0eb8ddb8b3847bb53c5c2bf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/e4ed002c67da8eceb0eb8ddb8b3847bb53c5c2bf", + "reference": "e4ed002c67da8eceb0eb8ddb8b3847bb53c5c2bf", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.0.2", + "php": "^5.3|^7.0", + "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0", + "sebastian/comparator": "^1.1|^2.0", + "sebastian/recursion-context": "^1.0|^2.0|^3.0" + }, + "require-dev": { + "phpspec/phpspec": "^2.5|^3.2", + "phpunit/phpunit": "^4.8.35 || ^5.7" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.7.x-dev" + } + }, + "autoload": { + "psr-0": { + "Prophecy\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Konstantin Kudryashov", + "email": "ever.zet@gmail.com", + "homepage": "http://everzet.com" + }, + { + "name": "Marcello Duarte", + "email": "marcello.duarte@gmail.com" + } + ], + "description": "Highly opinionated mocking framework for PHP 5.3+", + "homepage": "https://github.com/phpspec/prophecy", + "keywords": [ + "Double", + "Dummy", + "fake", + "mock", + "spy", + "stub" + ], + "time": "2017-11-24T13:59:53+00:00" + }, + { + "name": "phpunit/php-code-coverage", + "version": "4.0.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "ef7b2f56815df854e66ceaee8ebe9393ae36a40d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/ef7b2f56815df854e66ceaee8ebe9393ae36a40d", + "reference": "ef7b2f56815df854e66ceaee8ebe9393ae36a40d", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-xmlwriter": "*", + "php": "^5.6 || ^7.0", + "phpunit/php-file-iterator": "^1.3", + "phpunit/php-text-template": "^1.2", + "phpunit/php-token-stream": "^1.4.2 || ^2.0", + "sebastian/code-unit-reverse-lookup": "^1.0", + "sebastian/environment": "^1.3.2 || ^2.0", + "sebastian/version": "^1.0 || ^2.0" + }, + "require-dev": { + "ext-xdebug": "^2.1.4", + "phpunit/phpunit": "^5.7" + }, + "suggest": { + "ext-xdebug": "^2.5.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", + "homepage": "https://github.com/sebastianbergmann/php-code-coverage", + "keywords": [ + "coverage", + "testing", + "xunit" + ], + "time": "2017-04-02T07:44:40+00:00" + }, + { + "name": "phpunit/php-file-iterator", + "version": "1.4.5", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/730b01bc3e867237eaac355e06a36b85dd93a8b4", + "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "FilterIterator implementation that filters files based on a list of suffixes.", + "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", + "keywords": [ + "filesystem", + "iterator" + ], + "time": "2017-11-27T13:52:08+00:00" + }, + { + "name": "phpunit/php-text-template", + "version": "1.2.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "keywords": [ + "template" + ], + "time": "2015-06-21T13:50:34+00:00" + }, + { + "name": "phpunit/php-timer", + "version": "1.0.9", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", + "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", + "shasum": "" + }, + "require": { + "php": "^5.3.3 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", + "keywords": [ + "timer" + ], + "time": "2017-02-26T11:10:40+00:00" + }, + { + "name": "phpunit/php-token-stream", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-token-stream.git", + "reference": "791198a2c6254db10131eecfe8c06670700904db" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/791198a2c6254db10131eecfe8c06670700904db", + "reference": "791198a2c6254db10131eecfe8c06670700904db", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": "^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.2.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Wrapper around PHP's tokenizer extension.", + "homepage": "https://github.com/sebastianbergmann/php-token-stream/", + "keywords": [ + "tokenizer" + ], + "time": "2017-11-27T05:48:46+00:00" + }, + { + "name": "phpunit/phpunit", + "version": "5.7.25", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "4b1c822a68ae6577df38a59eb49b046712ec0f6a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/4b1c822a68ae6577df38a59eb49b046712ec0f6a", + "reference": "4b1c822a68ae6577df38a59eb49b046712ec0f6a", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-xml": "*", + "myclabs/deep-copy": "~1.3", + "php": "^5.6 || ^7.0", + "phpspec/prophecy": "^1.6.2", + "phpunit/php-code-coverage": "^4.0.4", + "phpunit/php-file-iterator": "~1.4", + "phpunit/php-text-template": "~1.2", + "phpunit/php-timer": "^1.0.6", + "phpunit/phpunit-mock-objects": "^3.2", + "sebastian/comparator": "^1.2.4", + "sebastian/diff": "^1.4.3", + "sebastian/environment": "^1.3.4 || ^2.0", + "sebastian/exporter": "~2.0", + "sebastian/global-state": "^1.1", + "sebastian/object-enumerator": "~2.0", + "sebastian/resource-operations": "~1.0", + "sebastian/version": "~1.0.3|~2.0", + "symfony/yaml": "~2.1|~3.0|~4.0" + }, + "conflict": { + "phpdocumentor/reflection-docblock": "3.0.2" + }, + "require-dev": { + "ext-pdo": "*" + }, + "suggest": { + "ext-xdebug": "*", + "phpunit/php-invoker": "~1.1" + }, + "bin": [ + "phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.7.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "The PHP Unit Testing framework.", + "homepage": "https://phpunit.de/", + "keywords": [ + "phpunit", + "testing", + "xunit" + ], + "time": "2017-11-14T14:50:51+00:00" + }, + { + "name": "phpunit/phpunit-mock-objects", + "version": "3.4.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", + "reference": "a23b761686d50a560cc56233b9ecf49597cc9118" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/a23b761686d50a560cc56233b9ecf49597cc9118", + "reference": "a23b761686d50a560cc56233b9ecf49597cc9118", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.0.2", + "php": "^5.6 || ^7.0", + "phpunit/php-text-template": "^1.2", + "sebastian/exporter": "^1.2 || ^2.0" + }, + "conflict": { + "phpunit/phpunit": "<5.4.0" + }, + "require-dev": { + "phpunit/phpunit": "^5.4" + }, + "suggest": { + "ext-soap": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.2.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "Mock Object library for PHPUnit", + "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/", + "keywords": [ + "mock", + "xunit" + ], + "time": "2017-06-30T09:13:00+00:00" + }, + { + "name": "psr/http-message", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-message.git", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP messages", + "homepage": "https://github.com/php-fig/http-message", + "keywords": [ + "http", + "http-message", + "psr", + "psr-7", + "request", + "response" + ], + "time": "2016-08-06T14:39:51+00:00" + }, + { + "name": "psr/log", + "version": "1.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", + "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "Psr/Log/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "time": "2016-10-10T12:19:37+00:00" + }, + { + "name": "satooshi/php-coveralls", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/php-coveralls/php-coveralls.git", + "reference": "c9d3fe2327c8539f1105dc19954673ba993e4ad9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-coveralls/php-coveralls/zipball/c9d3fe2327c8539f1105dc19954673ba993e4ad9", + "reference": "c9d3fe2327c8539f1105dc19954673ba993e4ad9", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-simplexml": "*", + "guzzlehttp/guzzle": "^6.0", + "php": "^5.5 || ^7.0", + "psr/log": "^1.0", + "symfony/config": "^2.1 || ^3.0 || ^4.0", + "symfony/console": "^2.1 || ^3.0 || ^4.0", + "symfony/stopwatch": "^2.0 || ^3.0 || ^4.0", + "symfony/yaml": "^2.0 || ^3.0 || ^4.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.4.3 || ^6.0" + }, + "suggest": { + "symfony/http-kernel": "Allows Symfony integration" + }, + "bin": [ + "bin/coveralls" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "psr-4": { + "PhpCoveralls\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Kitamura Satoshi", + "email": "with.no.parachute@gmail.com", + "homepage": "https://www.facebook.com/satooshi.jp", + "role": "Original creator" + }, + { + "name": "Takashi Matsuo", + "email": "tmatsuo@google.com" + }, + { + "name": "Google Inc" + }, + { + "name": "Dariusz Ruminski", + "email": "dariusz.ruminski@gmail.com", + "homepage": "https://github.com/keradus" + }, + { + "name": "Contributors", + "homepage": "https://github.com/php-coveralls/php-coveralls/graphs/contributors" + } + ], + "description": "PHP client library for Coveralls API", + "homepage": "https://github.com/php-coveralls/php-coveralls", + "keywords": [ + "ci", + "coverage", + "github", + "test" + ], + "time": "2017-10-14T23:16:28+00:00" + }, + { + "name": "sebastian/code-unit-reverse-lookup", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", + "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", + "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^5.7 || ^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Looks up which function or method a line of code belongs to", + "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", + "time": "2017-03-04T06:30:41+00:00" + }, + { + "name": "sebastian/comparator", + "version": "1.2.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2b7424b55f5047b47ac6e5ccb20b2aea4011d9be", + "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "sebastian/diff": "~1.2", + "sebastian/exporter": "~1.2 || ~2.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides the functionality to compare PHP values for equality", + "homepage": "http://www.github.com/sebastianbergmann/comparator", + "keywords": [ + "comparator", + "compare", + "equality" + ], + "time": "2017-01-29T09:50:25+00:00" + }, + { + "name": "sebastian/diff", + "version": "1.4.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/7f066a26a962dbe58ddea9f72a4e82874a3975a4", + "reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4", + "shasum": "" + }, + "require": { + "php": "^5.3.3 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Diff implementation", + "homepage": "https://github.com/sebastianbergmann/diff", + "keywords": [ + "diff" + ], + "time": "2017-05-22T07:24:03+00:00" + }, + { + "name": "sebastian/environment", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "5795ffe5dc5b02460c3e34222fee8cbe245d8fac" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/5795ffe5dc5b02460c3e34222fee8cbe245d8fac", + "reference": "5795ffe5dc5b02460c3e34222fee8cbe245d8fac", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^5.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides functionality to handle HHVM/PHP environments", + "homepage": "http://www.github.com/sebastianbergmann/environment", + "keywords": [ + "Xdebug", + "environment", + "hhvm" + ], + "time": "2016-11-26T07:53:53+00:00" + }, + { + "name": "sebastian/exporter", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "ce474bdd1a34744d7ac5d6aad3a46d48d9bac4c4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/ce474bdd1a34744d7ac5d6aad3a46d48d9bac4c4", + "reference": "ce474bdd1a34744d7ac5d6aad3a46d48d9bac4c4", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "sebastian/recursion-context": "~2.0" + }, + "require-dev": { + "ext-mbstring": "*", + "phpunit/phpunit": "~4.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides the functionality to export PHP variables for visualization", + "homepage": "http://www.github.com/sebastianbergmann/exporter", + "keywords": [ + "export", + "exporter" + ], + "time": "2016-11-19T08:54:04+00:00" + }, + { + "name": "sebastian/global-state", + "version": "1.1.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bc37d50fea7d017d3d340f230811c9f1d7280af4", + "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.2" + }, + "suggest": { + "ext-uopz": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Snapshotting of global state", + "homepage": "http://www.github.com/sebastianbergmann/global-state", + "keywords": [ + "global state" + ], + "time": "2015-10-12T03:26:01+00:00" + }, + { + "name": "sebastian/object-enumerator", + "version": "2.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-enumerator.git", + "reference": "1311872ac850040a79c3c058bea3e22d0f09cbb7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/1311872ac850040a79c3c058bea3e22d0f09cbb7", + "reference": "1311872ac850040a79c3c058bea3e22d0f09cbb7", + "shasum": "" + }, + "require": { + "php": ">=5.6", + "sebastian/recursion-context": "~2.0" + }, + "require-dev": { + "phpunit/phpunit": "~5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Traverses array structures and object graphs to enumerate all referenced objects", + "homepage": "https://github.com/sebastianbergmann/object-enumerator/", + "time": "2017-02-18T15:18:39+00:00" + }, + { + "name": "sebastian/recursion-context", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "2c3ba150cbec723aa057506e73a8d33bdb286c9a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/2c3ba150cbec723aa057506e73a8d33bdb286c9a", + "reference": "2c3ba150cbec723aa057506e73a8d33bdb286c9a", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides functionality to recursively process PHP variables", + "homepage": "http://www.github.com/sebastianbergmann/recursion-context", + "time": "2016-11-19T07:33:16+00:00" + }, + { + "name": "sebastian/resource-operations", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/resource-operations.git", + "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/ce990bb21759f94aeafd30209e8cfcdfa8bc3f52", + "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52", + "shasum": "" + }, + "require": { + "php": ">=5.6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides a list of PHP built-in functions that operate on resources", + "homepage": "https://www.github.com/sebastianbergmann/resource-operations", + "time": "2015-07-28T20:34:47+00:00" + }, + { + "name": "sebastian/version", + "version": "2.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019", + "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019", + "shasum": "" + }, + "require": { + "php": ">=5.6" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", + "time": "2016-10-03T07:35:21+00:00" + }, + { + "name": "squizlabs/php_codesniffer", + "version": "2.9.1", + "source": { + "type": "git", + "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", + "reference": "dcbed1074f8244661eecddfc2a675430d8d33f62" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/dcbed1074f8244661eecddfc2a675430d8d33f62", + "reference": "dcbed1074f8244661eecddfc2a675430d8d33f62", + "shasum": "" + }, + "require": { + "ext-simplexml": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": ">=5.1.2" + }, + "require-dev": { + "phpunit/phpunit": "~4.0" + }, + "bin": [ + "scripts/phpcs", + "scripts/phpcbf" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "autoload": { + "classmap": [ + "CodeSniffer.php", + "CodeSniffer/CLI.php", + "CodeSniffer/Exception.php", + "CodeSniffer/File.php", + "CodeSniffer/Fixer.php", + "CodeSniffer/Report.php", + "CodeSniffer/Reporting.php", + "CodeSniffer/Sniff.php", + "CodeSniffer/Tokens.php", + "CodeSniffer/Reports/", + "CodeSniffer/Tokenizers/", + "CodeSniffer/DocGenerators/", + "CodeSniffer/Standards/AbstractPatternSniff.php", + "CodeSniffer/Standards/AbstractScopeSniff.php", + "CodeSniffer/Standards/AbstractVariableSniff.php", + "CodeSniffer/Standards/IncorrectPatternException.php", + "CodeSniffer/Standards/Generic/Sniffs/", + "CodeSniffer/Standards/MySource/Sniffs/", + "CodeSniffer/Standards/PEAR/Sniffs/", + "CodeSniffer/Standards/PSR1/Sniffs/", + "CodeSniffer/Standards/PSR2/Sniffs/", + "CodeSniffer/Standards/Squiz/Sniffs/", + "CodeSniffer/Standards/Zend/Sniffs/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Greg Sherwood", + "role": "lead" + } + ], + "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", + "homepage": "http://www.squizlabs.com/php-codesniffer", + "keywords": [ + "phpcs", + "standards" + ], + "time": "2017-05-22T02:43:20+00:00" + }, + { + "name": "symfony/config", + "version": "v4.0.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/config.git", + "reference": "6e6dbc6d2beff8117b974d74274bff02e43c32a6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/config/zipball/6e6dbc6d2beff8117b974d74274bff02e43c32a6", + "reference": "6e6dbc6d2beff8117b974d74274bff02e43c32a6", + "shasum": "" + }, + "require": { + "php": "^7.1.3", + "symfony/filesystem": "~3.4|~4.0" + }, + "conflict": { + "symfony/finder": "<3.4" + }, + "require-dev": { + "symfony/finder": "~3.4|~4.0", + "symfony/yaml": "~3.4|~4.0" + }, + "suggest": { + "symfony/yaml": "To use the yaml reference dumper" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Config\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Config Component", + "homepage": "https://symfony.com", + "time": "2017-11-20T18:22:57+00:00" + }, + { + "name": "symfony/console", + "version": "v4.0.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "5cd0dd461dfc72f59c8405cac32d31e82c7348e8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/5cd0dd461dfc72f59c8405cac32d31e82c7348e8", + "reference": "5cd0dd461dfc72f59c8405cac32d31e82c7348e8", + "shasum": "" + }, + "require": { + "php": "^7.1.3", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "symfony/dependency-injection": "<3.4", + "symfony/process": "<3.3" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/config": "~3.4|~4.0", + "symfony/dependency-injection": "~3.4|~4.0", + "symfony/event-dispatcher": "~3.4|~4.0", + "symfony/lock": "~3.4|~4.0", + "symfony/process": "~3.4|~4.0" + }, + "suggest": { + "psr/log": "For using the console logger", + "symfony/event-dispatcher": "", + "symfony/lock": "", + "symfony/process": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Console\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Console Component", + "homepage": "https://symfony.com", + "time": "2017-11-29T13:42:03+00:00" + }, + { + "name": "symfony/filesystem", + "version": "v4.0.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/filesystem.git", + "reference": "c9d4a26759ff75a077e4e334315cb632739b661a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/c9d4a26759ff75a077e4e334315cb632739b661a", + "reference": "c9d4a26759ff75a077e4e334315cb632739b661a", + "shasum": "" + }, + "require": { + "php": "^7.1.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Filesystem\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Filesystem Component", + "homepage": "https://symfony.com", + "time": "2017-11-21T14:14:53+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.6.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296", + "reference": "2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.6-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "time": "2017-10-11T12:05:26+00:00" + }, + { + "name": "symfony/stopwatch", + "version": "v4.0.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/stopwatch.git", + "reference": "ac0e49150555c703fef6b696d8eaba1db7a3ca03" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/ac0e49150555c703fef6b696d8eaba1db7a3ca03", + "reference": "ac0e49150555c703fef6b696d8eaba1db7a3ca03", + "shasum": "" + }, + "require": { + "php": "^7.1.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Stopwatch\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Stopwatch Component", + "homepage": "https://symfony.com", + "time": "2017-11-09T12:45:29+00:00" + }, + { + "name": "webmozart/assert", + "version": "1.2.0", + "source": { + "type": "git", + "url": "https://github.com/webmozart/assert.git", + "reference": "2db61e59ff05fe5126d152bd0655c9ea113e550f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozart/assert/zipball/2db61e59ff05fe5126d152bd0655c9ea113e550f", + "reference": "2db61e59ff05fe5126d152bd0655c9ea113e550f", + "shasum": "" + }, + "require": { + "php": "^5.3.3 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.6", + "sebastian/version": "^1.0.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3-dev" + } + }, + "autoload": { + "psr-4": { + "Webmozart\\Assert\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Assertions to validate method input/output with nice error messages.", + "keywords": [ + "assert", + "check", + "validate" + ], + "time": "2016-11-23T20:04:58+00:00" + } + ], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": { + "satooshi/php-coveralls": 20 + }, + "prefer-stable": false, + "prefer-lowest": false, + "platform": { + "php": ">=5.4" + }, + "platform-dev": [] +} diff --git a/lib/composer/vendor/grasmash/yaml-expander/scenarios/symfony4/src b/lib/composer/vendor/grasmash/yaml-expander/scenarios/symfony4/src new file mode 120000 index 000000000..929cb3dc9 --- /dev/null +++ b/lib/composer/vendor/grasmash/yaml-expander/scenarios/symfony4/src @@ -0,0 +1 @@ +../../src \ No newline at end of file diff --git a/lib/composer/vendor/grasmash/yaml-expander/scenarios/symfony4/tests b/lib/composer/vendor/grasmash/yaml-expander/scenarios/symfony4/tests new file mode 120000 index 000000000..c2ebfe530 --- /dev/null +++ b/lib/composer/vendor/grasmash/yaml-expander/scenarios/symfony4/tests @@ -0,0 +1 @@ +../../tests \ No newline at end of file diff --git a/lib/composer/vendor/grasmash/yaml-expander/src/Expander.php b/lib/composer/vendor/grasmash/yaml-expander/src/Expander.php new file mode 100644 index 000000000..d922db59a --- /dev/null +++ b/lib/composer/vendor/grasmash/yaml-expander/src/Expander.php @@ -0,0 +1,273 @@ +export(); + } + + /** + * Performs the actual property expansion. + * + * @param Data $data + * A data object, containing the $array. + * @param array $array + * The original, unmodified array. + * @param string $parent_keys + * The parent keys of the current key in dot notation. This is used to + * track the absolute path to the current key in recursive cases. + * @param Data|null $reference_data + * A reference data object. This is not operated upon but is used as a + * reference to provide supplemental values for property expansion. + */ + protected static function doExpandArrayProperties( + $data, + $array, + $parent_keys = '', + $reference_data = null + ) { + foreach ($array as $key => $value) { + // Boundary condition(s). + if (is_null($value) || is_bool($value)) { + continue; + } + // Recursive case. + if (is_array($value)) { + self::doExpandArrayProperties($data, $value, $parent_keys . "$key.", $reference_data); + } // Base case. + else { + self::expandStringProperties($data, $parent_keys, $reference_data, $value, $key); + } + } + } + + /** + * Expand a single property. + * + * @param Data $data + * A data object, containing the $array. + * @param string $parent_keys + * The parent keys of the current key in dot notation. This is used to + * track the absolute path to the current key in recursive cases. + * @param Data|null $reference_data + * A reference data object. This is not operated upon but is used as a + * reference to provide supplemental values for property expansion. + * @param string $value + * The unexpanded property value. + * @param string $key + * The immediate key of the property. + * + * @return mixed + */ + protected static function expandStringProperties( + $data, + $parent_keys, + $reference_data, + $value, + $key + ) { + // We loop through all placeholders in a given string. + // E.g., '${placeholder1} ${placeholder2}' requires two replacements. + while (strpos($value, '${') !== false) { + $original_value = $value; + $value = preg_replace_callback( + '/\$\{([^\$}]+)\}/', + function ($matches) use ($data, $reference_data) { + return self::expandStringPropertiesCallback( + $matches, + $data, + $reference_data + ); + }, + $value + ); + + // If no replacement occurred at all, break to prevent + // infinite loop. + if ($original_value == $value) { + break; + } + + // Set value on $data object. + if ($parent_keys) { + $full_key = $parent_keys . "$key"; + } else { + $full_key = $key; + } + $data->set($full_key, $value); + } + return $value; + } + + /** + * Expansion callback used by preg_replace_callback() in expandProperty(). + * + * @param array $matches + * An array of matches created by preg_replace_callback(). + * @param Data $data + * A data object containing the complete array being operated upon. + * @param Data|null $reference_data + * A reference data object. This is not operated upon but is used as a + * reference to provide supplemental values for property expansion. + * + * @return mixed + */ + public static function expandStringPropertiesCallback( + $matches, + $data, + $reference_data = null + ) { + $property_name = $matches[1]; + $unexpanded_value = $matches[0]; + + // Use only values within the subject array's data. + if (!$reference_data) { + return self::expandProperty($property_name, $unexpanded_value, $data); + } // Search both the subject array's data and the reference data for a value. + else { + return self::expandPropertyWithReferenceData( + $property_name, + $unexpanded_value, + $data, + $reference_data + ); + } + } + + /** + * Searches both the subject data and the reference data for value. + * + * @param string $property_name + * The name of the value for which to search. + * @param string $unexpanded_value + * The original, unexpanded value, containing the placeholder. + * @param Data $data + * A data object containing the complete array being operated upon. + * @param Data|null $reference_data + * A reference data object. This is not operated upon but is used as a + * reference to provide supplemental values for property expansion. + * + * @return string + * The expanded string. + */ + public static function expandPropertyWithReferenceData( + $property_name, + $unexpanded_value, + $data, + $reference_data + ) { + $expanded_value = self::expandProperty( + $property_name, + $unexpanded_value, + $data + ); + // If the string was not changed using the subject data, try using + // the reference data. + if ($expanded_value == $unexpanded_value) { + $expanded_value = self::expandProperty( + $property_name, + $unexpanded_value, + $reference_data + ); + } + + return $expanded_value; + } + + /** + * Searches a data object for a value. + * + * @param string $property_name + * The name of the value for which to search. + * @param string $unexpanded_value + * The original, unexpanded value, containing the placeholder. + * @param Data $data + * A data object containing possible replacement values. + * + * @return mixed + */ + public static function expandProperty($property_name, $unexpanded_value, $data) + { + if (strpos($property_name, "env.") === 0 && + !$data->has($property_name)) { + $env_key = substr($property_name, 4); + if (getenv($env_key)) { + $data->set($property_name, getenv($env_key)); + } + } + + if (!$data->has($property_name)) { + self::log("Property \${'$property_name'} could not be expanded."); + return $unexpanded_value; + } else { + $expanded_value = $data->get($property_name); + if (is_array($expanded_value)) { + $expanded_value = Yaml::dump($expanded_value, 0); + return $expanded_value; + } + self::log("Expanding property \${'$property_name'} => $expanded_value."); + return $expanded_value; + } + } + + /** + * @param $message + */ + public static function log($message) + { + // print "$message\n"; + } +} diff --git a/lib/composer/vendor/grasmash/yaml-expander/tests/phpunit/ExpanderTest.php b/lib/composer/vendor/grasmash/yaml-expander/tests/phpunit/ExpanderTest.php new file mode 100644 index 000000000..291d00ccf --- /dev/null +++ b/lib/composer/vendor/grasmash/yaml-expander/tests/phpunit/ExpanderTest.php @@ -0,0 +1,99 @@ +assertEquals('gomjabbar', $expanded['env-test']); + $this->assertEquals('Frank Herbert 1965', $expanded['book']['copyright']); + $this->assertEquals('Paul Atreides', $expanded['book']['protaganist']); + $this->assertEquals('Dune by Frank Herbert', $expanded['summary']); + $this->assertEquals('${book.media.1}, hardcover', $expanded['available-products']); + $this->assertEquals('Dune', $expanded['product-name']); + $this->assertEquals(Yaml::dump($array['inline-array'], 0), $expanded['expand-array']); + + $expanded = Expander::expandArrayProperties($array, $reference_array); + $this->assertEquals('Dune Messiah, and others.', $expanded['sequels']); + $this->assertEquals('Dune Messiah', $expanded['book']['nested-reference']); + } + + /** + * Tests Expander::parse(). + * + * @param string $filename + * @param array $reference_array + * + * @dataProvider providerYaml + */ + public function testParse($filename, $reference_array) + { + $yaml_string = file_get_contents(__DIR__ . "/../resources/$filename"); + $expanded = Expander::parse($yaml_string); + $this->assertEquals('Frank Herbert 1965', $expanded['book']['copyright']); + $this->assertEquals('Paul Atreides', $expanded['book']['protaganist']); + $this->assertEquals('Dune by Frank Herbert', $expanded['summary']); + $this->assertEquals('${book.media.1}, hardcover', $expanded['available-products']); + + $expanded = Expander::parse($yaml_string, $reference_array); + $this->assertEquals('Dune Messiah, and others.', $expanded['sequels']); + $this->assertEquals('Dune Messiah', $expanded['book']['nested-reference']); + } + + /** + * @return array + * An array of values to test. + */ + public function providerYaml() + { + return [ + ['valid.yml', [ + 'book' => [ + 'sequel' => 'Dune Messiah' + ] + ]], + ]; + } + + /** + * Tests Expander::expandProperty(). + * + * @dataProvider providerTestExpandProperty + */ + public function testExpandProperty($array, $property_name, $unexpanded_string, $expected) + { + $data = new Data($array); + $expanded_value = Expander::expandProperty($property_name, $unexpanded_string, $data); + + $this->assertEquals($expected, $expanded_value); + } + + /** + * @return array + */ + public function providerTestExpandProperty() + { + return [ + [ ['author' => 'Frank Herbert'], 'author', '${author}', 'Frank Herbert' ], + [ ['book' => ['author' => 'Frank Herbert' ]], 'book.author', '${book.author}', 'Frank Herbert' ], + ]; + } +} diff --git a/lib/composer/vendor/grasmash/yaml-expander/tests/resources/valid.yml b/lib/composer/vendor/grasmash/yaml-expander/tests/resources/valid.yml new file mode 100644 index 000000000..78e4bc613 --- /dev/null +++ b/lib/composer/vendor/grasmash/yaml-expander/tests/resources/valid.yml @@ -0,0 +1,35 @@ +# This file should contain only valid YAML. +type: book +book: + title: Dune + author: Frank Herbert + copyright: ${book.author} 1965 + protaganist: ${characters.0.name} + media: + - hardcover + # Use a nested key to reference an external value. + nested-reference: ${book.sequel} +characters: + - name: Paul Atreides + occupation: Kwisatz Haderach + aliases: + - Usul + - Muad'Dib + - The Preacher + - name: Duncan Idaho + occupation: Swordmaster +summary: ${book.title} by ${book.author} +# This is a complete fake property. +publisher: ${not.real.property} +# series.books is not defined in this YAML file, but is passed in to the parser by the application. +sequels: ${book.sequel}, and others. +# Reference one real value and one fake value. +available-products: ${book.media.1}, ${book.media.0} +# Nested property, should resolve to ${book.title} and then 'Dune'. +product-name: ${${type}.title} +# Represent a few more data types and formats. +boolean-value: true +null-value: null +inline-array: [ one, two, three ] +expand-array: ${inline-array} +env-test: ${env.test} \ No newline at end of file diff --git a/lib/composer/vendor/league/container/CHANGELOG.md b/lib/composer/vendor/league/container/CHANGELOG.md index cb2a92513..6e99c7382 100644 --- a/lib/composer/vendor/league/container/CHANGELOG.md +++ b/lib/composer/vendor/league/container/CHANGELOG.md @@ -2,6 +2,21 @@ All Notable changes to `League\Container` will be documented in this file +## 2.3.0 + +### Added +- Now implementation of the PSR-11. + +### Changed +- Can now wrap shared objects as `RawArgument`. +- Ability to override shared items. + +### Fixed +- Booleans now recognised as accepted values. +- Various docblock fixes. +- Unused imports removed. +- Unreachable arguments no longer passed. + ## 2.2.0 ### Changed diff --git a/lib/composer/vendor/league/container/README.md b/lib/composer/vendor/league/container/README.md index 536ec6dec..3a2e89598 100644 --- a/lib/composer/vendor/league/container/README.md +++ b/lib/composer/vendor/league/container/README.md @@ -16,6 +16,7 @@ please send a patch via pull request. [PSR-1]: https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-1-basic-coding-standard.md [PSR-2]: https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-2-coding-style-guide.md [PSR-4]: https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-4-autoloader.md +[PSR-11]: https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-11-container.md ## Install @@ -33,6 +34,7 @@ The following versions of PHP are supported by this version. * PHP 5.5 * PHP 5.6 * PHP 7.0 +* PHP 7.1 * HHVM ## Documentation diff --git a/lib/composer/vendor/league/container/composer.json b/lib/composer/vendor/league/container/composer.json index 26a17b7b9..8ce66c340 100644 --- a/lib/composer/vendor/league/container/composer.json +++ b/lib/composer/vendor/league/container/composer.json @@ -21,14 +21,15 @@ } ], "require": { - "php": ">=5.4.0", - "container-interop/container-interop": "^1.1" + "php": "^5.4.0 || ^7.0", + "container-interop/container-interop": "^1.2" }, "require-dev": { "phpunit/phpunit" : "4.*" }, "provide": { - "container-interop/container-interop-implementation": "^1.1" + "container-interop/container-interop-implementation": "^1.2", + "psr/container-implementation": "^1.0" }, "replace": { "orno/di": "~2.0" @@ -45,7 +46,7 @@ }, "extra": { "branch-alias": { - "dev-master": "2.x-dev", + "dev-2.x": "2.x-dev", "dev-1.x": "1.x-dev" } } diff --git a/lib/composer/vendor/league/container/src/Argument/ArgumentResolverTrait.php b/lib/composer/vendor/league/container/src/Argument/ArgumentResolverTrait.php index 90d8fb599..a371f82cb 100644 --- a/lib/composer/vendor/league/container/src/Argument/ArgumentResolverTrait.php +++ b/lib/composer/vendor/league/container/src/Argument/ArgumentResolverTrait.php @@ -76,7 +76,7 @@ public function reflectArguments(ReflectionFunctionAbstract $method, array $args } /** - * @return ContainerInterface + * @return \League\Container\ContainerInterface */ abstract public function getContainer(); } diff --git a/lib/composer/vendor/league/container/src/Container.php b/lib/composer/vendor/league/container/src/Container.php index 7e937bc05..80a0537dc 100644 --- a/lib/composer/vendor/league/container/src/Container.php +++ b/lib/composer/vendor/league/container/src/Container.php @@ -3,6 +3,7 @@ namespace League\Container; use Interop\Container\ContainerInterface as InteropContainerInterface; +use League\Container\Argument\RawArgumentInterface; use League\Container\Definition\DefinitionFactory; use League\Container\Definition\DefinitionFactoryInterface; use League\Container\Definition\DefinitionInterface; @@ -80,24 +81,19 @@ public function __construct( */ public function get($alias, array $args = []) { - $service = $this->getFromThisContainer($alias, $args); + try { + return $this->getFromThisContainer($alias, $args); + } catch (NotFoundException $exception) { + if ($this->providers->provides($alias)) { + $this->providers->register($alias); - if ($service === false && $this->providers->provides($alias)) { - $this->providers->register($alias); - $service = $this->getFromThisContainer($alias, $args); - } + return $this->getFromThisContainer($alias, $args); + } - if ($service !== false) { - return $service; - } + $resolved = $this->getFromDelegate($alias, $args); - if ($resolved = $this->getFromDelegate($alias, $args)) { return $this->inflectors->inflect($resolved); } - - throw new NotFoundException( - sprintf('Alias (%s) is not being managed by the container', $alias) - ); } /** @@ -135,6 +131,10 @@ public function hasShared($alias, $resolved = false) */ public function add($alias, $concrete = null, $share = false) { + unset($this->shared[$alias]); + unset($this->definitions[$alias]); + unset($this->sharedDefinitions[$alias]); + if (is_null($concrete)) { $concrete = $alias; } @@ -263,7 +263,10 @@ protected function getFromDelegate($alias, array $args = []) continue; } - return false; + throw new NotFoundException( + sprintf('Alias (%s) is not being managed by the container', $alias) + ); + } /** @@ -276,7 +279,11 @@ protected function getFromDelegate($alias, array $args = []) protected function getFromThisContainer($alias, array $args = []) { if ($this->hasShared($alias, true)) { - return $this->inflectors->inflect($this->shared[$alias]); + $shared = $this->inflectors->inflect($this->shared[$alias]); + if ($shared instanceof RawArgumentInterface) { + return $shared->getValue(); + } + return $shared; } if (array_key_exists($alias, $this->sharedDefinitions)) { @@ -291,6 +298,8 @@ protected function getFromThisContainer($alias, array $args = []) ); } - return false; + throw new NotFoundException( + sprintf('Alias (%s) is not being managed by the container', $alias) + ); } } diff --git a/lib/composer/vendor/league/container/src/Definition/DefinitionFactory.php b/lib/composer/vendor/league/container/src/Definition/DefinitionFactory.php index 256a336c2..8f2c03df5 100644 --- a/lib/composer/vendor/league/container/src/Definition/DefinitionFactory.php +++ b/lib/composer/vendor/league/container/src/Definition/DefinitionFactory.php @@ -21,7 +21,7 @@ public function getDefinition($alias, $concrete) return (new ClassDefinition($alias, $concrete))->setContainer($this->getContainer()); } - // if the item is not defineable we just return the value to be stored + // if the item is not definable we just return the value to be stored // in the container as an arbitrary value/instance return $concrete; } diff --git a/lib/composer/vendor/league/container/src/ReflectionContainer.php b/lib/composer/vendor/league/container/src/ReflectionContainer.php index 5eb6ce4a9..c6d9222b9 100644 --- a/lib/composer/vendor/league/container/src/ReflectionContainer.php +++ b/lib/composer/vendor/league/container/src/ReflectionContainer.php @@ -6,7 +6,6 @@ use League\Container\Argument\ArgumentResolverTrait; use League\Container\Exception\NotFoundException; use ReflectionClass; -use ReflectionException; use ReflectionFunction; use ReflectionMethod; @@ -62,6 +61,10 @@ public function call(callable $callable, array $args = []) } if (is_array($callable)) { + if (is_string($callable[0])) { + $callable[0] = $this->getContainer()->get($callable[0]); + } + $reflection = new ReflectionMethod($callable[0], $callable[1]); if ($reflection->isStatic()) { @@ -71,6 +74,12 @@ public function call(callable $callable, array $args = []) return $reflection->invokeArgs($callable[0], $this->reflectArguments($reflection, $args)); } + if (is_object($callable)) { + $reflection = new ReflectionMethod($callable, '__invoke'); + + return $reflection->invokeArgs($callable, $this->reflectArguments($reflection, $args)); + } + $reflection = new ReflectionFunction($callable); return $reflection->invokeArgs($this->reflectArguments($reflection, $args)); diff --git a/lib/composer/vendor/league/container/src/ServiceProvider/ServiceProviderAggregateInterface.php b/lib/composer/vendor/league/container/src/ServiceProvider/ServiceProviderAggregateInterface.php index 0825ff383..f7b351311 100644 --- a/lib/composer/vendor/league/container/src/ServiceProvider/ServiceProviderAggregateInterface.php +++ b/lib/composer/vendor/league/container/src/ServiceProvider/ServiceProviderAggregateInterface.php @@ -25,8 +25,8 @@ public function provides($service); /** * Invokes the register method of a provider that provides a specific service. * - * @param string $provider + * @param string $service * @return void */ - public function register($provider); + public function register($service); } diff --git a/lib/composer/vendor/monolog/monolog/.php_cs b/lib/composer/vendor/monolog/monolog/.php_cs index 2511e98c0..8c11b2347 100644 --- a/lib/composer/vendor/monolog/monolog/.php_cs +++ b/lib/composer/vendor/monolog/monolog/.php_cs @@ -1,15 +1,15 @@ -files() - ->name('*.php') - ->in(__DIR__.'/src') - ->in(__DIR__.'/tests') -; - -return Symfony\CS\Config\Config::create() - ->fixers(array( - 'psr0', 'encoding', 'short_tag', 'braces', 'elseif', 'eof_ending', 'function_declaration', 'indentation', 'line_after_namespace', 'linefeed', 'lowercase_constants', 'lowercase_keywords', 'multiple_use', 'php_closing_tag', 'trailing_spaces', 'visibility', 'duplicate_semicolon', 'extra_empty_lines', 'include', 'namespace_no_leading_whitespace', 'object_operator', 'operators_spaces', 'phpdoc_params', 'return', 'single_array_no_trailing_comma', 'spaces_cast', 'standardize_not_equal', 'ternary_spaces', 'unused_use', 'whitespacy_lines', - )) - ->finder($finder) -; +files() + ->name('*.php') + ->in(__DIR__.'/src') + ->in(__DIR__.'/tests') +; + +return Symfony\CS\Config\Config::create() + ->fixers(array( + 'psr0', 'encoding', 'short_tag', 'braces', 'elseif', 'eof_ending', 'function_declaration', 'indentation', 'line_after_namespace', 'linefeed', 'lowercase_constants', 'lowercase_keywords', 'multiple_use', 'php_closing_tag', 'trailing_spaces', 'visibility', 'duplicate_semicolon', 'extra_empty_lines', 'include', 'namespace_no_leading_whitespace', 'object_operator', 'operators_spaces', 'phpdoc_params', 'return', 'single_array_no_trailing_comma', 'spaces_cast', 'standardize_not_equal', 'ternary_spaces', 'unused_use', 'whitespacy_lines', + )) + ->finder($finder) +; diff --git a/lib/composer/vendor/monolog/monolog/src/Monolog/Handler/FlowdockHandler.php b/lib/composer/vendor/monolog/monolog/src/Monolog/Handler/FlowdockHandler.php index 5243e4c0b..6eaaa9d48 100644 --- a/lib/composer/vendor/monolog/monolog/src/Monolog/Handler/FlowdockHandler.php +++ b/lib/composer/vendor/monolog/monolog/src/Monolog/Handler/FlowdockHandler.php @@ -44,7 +44,7 @@ public function __construct($apiToken, $level = Logger::DEBUG, $bubble = true) throw new MissingExtensionException('The OpenSSL PHP extension is required to use the FlowdockHandler'); } - parent::__construct('ssl://Api.flowdock.com:443', $level, $bubble); + parent::__construct('ssl://api.flowdock.com:443', $level, $bubble); $this->apiToken = $apiToken; } @@ -93,7 +93,7 @@ private function buildContent($record) private function buildHeader($content) { $header = "POST /v1/messages/team_inbox/" . $this->apiToken . " HTTP/1.1\r\n"; - $header .= "Host: Api.flowdock.com\r\n"; + $header .= "Host: api.flowdock.com\r\n"; $header .= "Content-Type: application/json\r\n"; $header .= "Content-Length: " . strlen($content) . "\r\n"; $header .= "\r\n"; diff --git a/lib/composer/vendor/monolog/monolog/src/Monolog/Handler/HipChatHandler.php b/lib/composer/vendor/monolog/monolog/src/Monolog/Handler/HipChatHandler.php index f4888882b..185e86e07 100644 --- a/lib/composer/vendor/monolog/monolog/src/Monolog/Handler/HipChatHandler.php +++ b/lib/composer/vendor/monolog/monolog/src/Monolog/Handler/HipChatHandler.php @@ -14,7 +14,7 @@ use Monolog\Logger; /** - * Sends notifications through the hipchat Api to a hipchat room + * Sends notifications through the hipchat api to a hipchat room * * Notes: * API token - HipChat API token @@ -78,7 +78,7 @@ class HipChatHandler extends SocketHandler * @param string $format The format of the messages (default to text, can be set to html if you have html in the messages) * @param string $host The HipChat server hostname. */ - public function __construct($token, $room, $name = 'Monolog', $notify = false, $level = Logger::CRITICAL, $bubble = true, $useSSL = true, $format = 'text', $host = 'Api.hipchat.com') + public function __construct($token, $room, $name = 'Monolog', $notify = false, $level = Logger::CRITICAL, $bubble = true, $useSSL = true, $format = 'text', $host = 'api.hipchat.com') { if (!$this->validateStringLength($name, static::MAXIMUM_NAME_LENGTH)) { throw new \InvalidArgumentException('The supplied name is too long. HipChat\'s v1 API supports names up to 15 UTF-8 characters.'); diff --git a/lib/composer/vendor/monolog/monolog/src/Monolog/Handler/MandrillHandler.php b/lib/composer/vendor/monolog/monolog/src/Monolog/Handler/MandrillHandler.php index cb3118b59..60a2901ee 100644 --- a/lib/composer/vendor/monolog/monolog/src/Monolog/Handler/MandrillHandler.php +++ b/lib/composer/vendor/monolog/monolog/src/Monolog/Handler/MandrillHandler.php @@ -54,7 +54,7 @@ protected function send($content, array $records) $ch = curl_init(); - curl_setopt($ch, CURLOPT_URL, 'https://mandrillapp.com/Api/1.0/messages/send-raw.json'); + curl_setopt($ch, CURLOPT_URL, 'https://mandrillapp.com/api/1.0/messages/send-raw.json'); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query(array( diff --git a/lib/composer/vendor/monolog/monolog/src/Monolog/Handler/PushoverHandler.php b/lib/composer/vendor/monolog/monolog/src/Monolog/Handler/PushoverHandler.php index 9e0531835..cd2fcfa3d 100644 --- a/lib/composer/vendor/monolog/monolog/src/Monolog/Handler/PushoverHandler.php +++ b/lib/composer/vendor/monolog/monolog/src/Monolog/Handler/PushoverHandler.php @@ -14,7 +14,7 @@ use Monolog\Logger; /** - * Sends notifications through the pushover Api to mobile phones + * Sends notifications through the pushover api to mobile phones * * @author Sebastian Göttschkes * @see https://www.pushover.net/api @@ -53,7 +53,7 @@ class PushoverHandler extends SocketHandler ); /** - * Sounds the Api supports by default + * Sounds the api supports by default * @see https://pushover.net/api#sounds * @var array */ @@ -64,7 +64,7 @@ class PushoverHandler extends SocketHandler ); /** - * @param string $token Pushover Api token + * @param string $token Pushover api token * @param string|array $users Pushover user id or array of ids the message will be sent to * @param string $title Title sent to the Pushover API * @param integer $level The minimum logging level at which this handler will be triggered @@ -80,7 +80,7 @@ class PushoverHandler extends SocketHandler */ public function __construct($token, $users, $title = null, $level = Logger::CRITICAL, $bubble = true, $useSSL = true, $highPriorityLevel = Logger::CRITICAL, $emergencyLevel = Logger::EMERGENCY, $retry = 30, $expire = 25200) { - $connectionString = $useSSL ? 'ssl://Api.pushover.net:443' : 'Api.pushover.net:80'; + $connectionString = $useSSL ? 'ssl://api.pushover.net:443' : 'api.pushover.net:80'; parent::__construct($connectionString, $level, $bubble); $this->token = $token; @@ -140,7 +140,7 @@ private function buildContent($record) private function buildHeader($content) { $header = "POST /1/messages.json HTTP/1.1\r\n"; - $header .= "Host: Api.pushover.net\r\n"; + $header .= "Host: api.pushover.net\r\n"; $header .= "Content-Type: application/x-www-form-urlencoded\r\n"; $header .= "Content-Length: " . strlen($content) . "\r\n"; $header .= "\r\n"; diff --git a/lib/composer/vendor/monolog/monolog/src/Monolog/Handler/SlackHandler.php b/lib/composer/vendor/monolog/monolog/src/Monolog/Handler/SlackHandler.php index d0b480886..7328deee5 100644 --- a/lib/composer/vendor/monolog/monolog/src/Monolog/Handler/SlackHandler.php +++ b/lib/composer/vendor/monolog/monolog/src/Monolog/Handler/SlackHandler.php @@ -218,7 +218,7 @@ private function buildContent($record) */ private function buildHeader($content) { - $header = "POST /Api/chat.postMessage HTTP/1.1\r\n"; + $header = "POST /api/chat.postMessage HTTP/1.1\r\n"; $header .= "Host: slack.com\r\n"; $header .= "Content-Type: application/x-www-form-urlencoded\r\n"; $header .= "Content-Length: " . strlen($content) . "\r\n"; diff --git a/lib/composer/vendor/monolog/monolog/src/Monolog/Registry.php b/lib/composer/vendor/monolog/monolog/src/Monolog/Registry.php index de28cf22d..923b7745f 100644 --- a/lib/composer/vendor/monolog/monolog/src/Monolog/Registry.php +++ b/lib/composer/vendor/monolog/monolog/src/Monolog/Registry.php @@ -21,14 +21,14 @@ * * * $application = new Monolog\Logger('application'); - * $Api = new Monolog\Logger('Api'); + * $api = new Monolog\Logger('api'); * * Monolog\Registry::addLogger($application); - * Monolog\Registry::addLogger($Api); + * Monolog\Registry::addLogger($api); * * function testLogger() * { - * Monolog\Registry::Api()->addError('Sent to $Api Logger instance'); + * Monolog\Registry::api()->addError('Sent to $api Logger instance'); * Monolog\Registry::application()->addError('Sent to $application Logger instance'); * } * diff --git a/lib/composer/vendor/monolog/monolog/tests/Monolog/Handler/FlowdockHandlerTest.php b/lib/composer/vendor/monolog/monolog/tests/Monolog/Handler/FlowdockHandlerTest.php index f027f198b..4b120d51a 100644 --- a/lib/composer/vendor/monolog/monolog/tests/Monolog/Handler/FlowdockHandlerTest.php +++ b/lib/composer/vendor/monolog/monolog/tests/Monolog/Handler/FlowdockHandlerTest.php @@ -45,7 +45,7 @@ public function testWriteHeader() fseek($this->res, 0); $content = fread($this->res, 1024); - $this->assertRegexp('/POST \/v1\/messages\/team_inbox\/.* HTTP\/1.1\\r\\nHost: Api.flowdock.com\\r\\nContent-Type: application\/json\\r\\nContent-Length: \d{2,4}\\r\\n\\r\\n/', $content); + $this->assertRegexp('/POST \/v1\/messages\/team_inbox\/.* HTTP\/1.1\\r\\nHost: api.flowdock.com\\r\\nContent-Type: application\/json\\r\\nContent-Length: \d{2,4}\\r\\n\\r\\n/', $content); return $content; } diff --git a/lib/composer/vendor/monolog/monolog/tests/Monolog/Handler/HipChatHandlerTest.php b/lib/composer/vendor/monolog/monolog/tests/Monolog/Handler/HipChatHandlerTest.php index dba87f4f6..49f1dfbd2 100644 --- a/lib/composer/vendor/monolog/monolog/tests/Monolog/Handler/HipChatHandlerTest.php +++ b/lib/composer/vendor/monolog/monolog/tests/Monolog/Handler/HipChatHandlerTest.php @@ -30,7 +30,7 @@ public function testWriteHeader() fseek($this->res, 0); $content = fread($this->res, 1024); - $this->assertRegexp('/POST \/v1\/rooms\/message\?format=json&auth_token=.* HTTP\/1.1\\r\\nHost: Api.hipchat.com\\r\\nContent-Type: application\/x-www-form-urlencoded\\r\\nContent-Length: \d{2,4}\\r\\n\\r\\n/', $content); + $this->assertRegexp('/POST \/v1\/rooms\/message\?format=json&auth_token=.* HTTP\/1.1\\r\\nHost: api.hipchat.com\\r\\nContent-Type: application\/x-www-form-urlencoded\\r\\nContent-Length: \d{2,4}\\r\\n\\r\\n/', $content); return $content; } @@ -141,7 +141,7 @@ public function provideBatchRecords() ); } - private function createHandler($token = 'myToken', $room = 'room1', $name = 'Monolog', $notify = false, $host = 'Api.hipchat.com') + private function createHandler($token = 'myToken', $room = 'room1', $name = 'Monolog', $notify = false, $host = 'api.hipchat.com') { $constructorArgs = array($token, $room, $name, $notify, Logger::DEBUG, true, true, 'text', $host); $this->res = fopen('php://memory', 'a'); diff --git a/lib/composer/vendor/monolog/monolog/tests/Monolog/Handler/PushoverHandlerTest.php b/lib/composer/vendor/monolog/monolog/tests/Monolog/Handler/PushoverHandlerTest.php index e8228aa11..894082368 100644 --- a/lib/composer/vendor/monolog/monolog/tests/Monolog/Handler/PushoverHandlerTest.php +++ b/lib/composer/vendor/monolog/monolog/tests/Monolog/Handler/PushoverHandlerTest.php @@ -33,7 +33,7 @@ public function testWriteHeader() fseek($this->res, 0); $content = fread($this->res, 1024); - $this->assertRegexp('/POST \/1\/messages.json HTTP\/1.1\\r\\nHost: Api.pushover.net\\r\\nContent-Type: application\/x-www-form-urlencoded\\r\\nContent-Length: \d{2,4}\\r\\n\\r\\n/', $content); + $this->assertRegexp('/POST \/1\/messages.json HTTP\/1.1\\r\\nHost: api.pushover.net\\r\\nContent-Type: application\/x-www-form-urlencoded\\r\\nContent-Length: \d{2,4}\\r\\n\\r\\n/', $content); return $content; } diff --git a/lib/composer/vendor/monolog/monolog/tests/Monolog/Handler/SlackHandlerTest.php b/lib/composer/vendor/monolog/monolog/tests/Monolog/Handler/SlackHandlerTest.php index 310d1ec57..d657fae31 100644 --- a/lib/composer/vendor/monolog/monolog/tests/Monolog/Handler/SlackHandlerTest.php +++ b/lib/composer/vendor/monolog/monolog/tests/Monolog/Handler/SlackHandlerTest.php @@ -44,7 +44,7 @@ public function testWriteHeader() fseek($this->res, 0); $content = fread($this->res, 1024); - $this->assertRegexp('/POST \/Api\/chat.postMessage HTTP\/1.1\\r\\nHost: slack.com\\r\\nContent-Type: application\/x-www-form-urlencoded\\r\\nContent-Length: \d{2,4}\\r\\n\\r\\n/', $content); + $this->assertRegexp('/POST \/api\/chat.postMessage HTTP\/1.1\\r\\nHost: slack.com\\r\\nContent-Type: application\/x-www-form-urlencoded\\r\\nContent-Length: \d{2,4}\\r\\n\\r\\n/', $content); } public function testWriteContent() diff --git a/lib/composer/vendor/myclabs/deep-copy/.gitignore b/lib/composer/vendor/myclabs/deep-copy/.gitignore index 935417104..eef72f754 100755 --- a/lib/composer/vendor/myclabs/deep-copy/.gitignore +++ b/lib/composer/vendor/myclabs/deep-copy/.gitignore @@ -1,6 +1,3 @@ -.DS_Store -.idea/* - -vendor/* -composer.phar -composer.lock +/composer.phar +/composer.lock +/vendor/* diff --git a/lib/composer/vendor/myclabs/deep-copy/.travis.yml b/lib/composer/vendor/myclabs/deep-copy/.travis.yml index 347c6e759..89dc02af6 100755 --- a/lib/composer/vendor/myclabs/deep-copy/.travis.yml +++ b/lib/composer/vendor/myclabs/deep-copy/.travis.yml @@ -1,30 +1,33 @@ language: php +sudo: false + php: - - '5.5' - '5.6' - '7.0' - '7.1' - nightly - - hhvm matrix: fast_finish: true include: - - php: '5.4' + - php: '5.6' env: COMPOSER_FLAGS="--prefer-lowest" allow_failures: - php: nightly - - php: hhvm + +cache: + directories: + - $HOME/.composer/cache/files before_install: - | - if [ "$TRAVIS_PHP_VERSION" = "nightly" ] || "$TRAVIS_PHP_VERSION" = "7.1" ]; then + if [ "$TRAVIS_PHP_VERSION" = "nightly" ]; then COMPOSER_FLAGS="$COMPOSER_FLAGS --ignore-platform-reqs" fi; install: - - composer update -n --prefer-dist $COMPOSER_FLAGS + - composer update --no-interaction --no-progress --no-suggest --prefer-dist $COMPOSER_FLAGS - wget https://github.com/satooshi/php-coveralls/releases/download/v1.0.0/coveralls.phar before_script: diff --git a/lib/composer/vendor/myclabs/deep-copy/README.md b/lib/composer/vendor/myclabs/deep-copy/README.md index 4cd11ed1f..7f010df2a 100644 --- a/lib/composer/vendor/myclabs/deep-copy/README.md +++ b/lib/composer/vendor/myclabs/deep-copy/README.md @@ -2,7 +2,9 @@ DeepCopy helps you create deep copies (clones) of your objects. It is designed to handle cycles in the association graph. -[![Build Status](https://travis-ci.org/myclabs/DeepCopy.png?branch=master)](https://travis-ci.org/myclabs/DeepCopy) [![Coverage Status](https://coveralls.io/repos/myclabs/DeepCopy/badge.png?branch=master)](https://coveralls.io/r/myclabs/DeepCopy?branch=master) [![Scrutinizer Quality Score](https://scrutinizer-ci.com/g/myclabs/DeepCopy/badges/quality-score.png?s=2747100c19b275f93a777e3297c6c12d1b68b934)](https://scrutinizer-ci.com/g/myclabs/DeepCopy/) +[![Build Status](https://travis-ci.org/myclabs/DeepCopy.png?branch=master)](https://travis-ci.org/myclabs/DeepCopy) +[![Coverage Status](https://coveralls.io/repos/myclabs/DeepCopy/badge.png?branch=master)](https://coveralls.io/r/myclabs/DeepCopy?branch=master) +[![Scrutinizer Quality Score](https://scrutinizer-ci.com/g/myclabs/DeepCopy/badges/quality-score.png?s=2747100c19b275f93a777e3297c6c12d1b68b934)](https://scrutinizer-ci.com/g/myclabs/DeepCopy/) [![Total Downloads](https://poser.pugx.org/myclabs/deep-copy/downloads.svg)](https://packagist.org/packages/myclabs/deep-copy) @@ -20,15 +22,18 @@ DeepCopy helps you create deep copies (clones) of your objects. It is designed t 1. [Specific property](#specific-property) 1. [Type](#type) 1. [Filters](#filters) - 1. [`SetNullFilter`](#setnullfilter) - 1. [`KeepFilter`](#keepfilter) - 1. [`ReplaceFilter`](#replacefilter) - 1. [`ShallowCopyFilter`](#doctrinecollectionfilter) - 1. [`DoctrineCollectionFilter`](#doctrinecollectionfilter) - 1. [`DoctrineEmptyCollectionFilter`](#doctrineemptycollectionfilter) + 1. [`SetNullFilter`](#setnullfilter-filter) + 1. [`KeepFilter`](#keepfilter-filter) + 1. [`DoctrineCollectionFilter`](#doctrinecollectionfilter-filter) + 1. [`DoctrineEmptyCollectionFilter`](#doctrineemptycollectionfilter-filter) + 1. [`DoctrineProxyFilter`](#doctrineproxyfilter-filter) + 1. [`ReplaceFilter`](#replacefilter-type-filter) + 1. [`ShallowCopyFilter`](#doctrinecollectionfilter-type-filter) +1. [Edge cases](#edge-cases) 1. [Contributing](#contributing) 1. [Tests](#tests) + ## How? Install with Composer: @@ -42,8 +47,8 @@ Use simply: ```php use DeepCopy\DeepCopy; -$deepCopy = new DeepCopy(); -$myCopy = $deepCopy->copy($myObject); +$copier = new DeepCopy(); +$myCopy = $copier->copy($myObject); ``` @@ -57,7 +62,8 @@ $myCopy = clone $myObject; - How do you create **deep** copies of your objects (i.e. copying also all the objects referenced in the properties)? -You use [`__clone()`](http://www.php.net/manual/en/language.oop5.cloning.php#object.clone) and implement the behavior yourself. +You use [`__clone()`](http://www.php.net/manual/en/language.oop5.cloning.php#object.clone) and implement the behavior +yourself. - But how do you handle **cycles** in the association graph? @@ -65,37 +71,82 @@ Now you're in for a big mess :( ![association graph](doc/graph.png) + ### Using simply `clone` ![Using clone](doc/clone.png) + ### Overridding `__clone()` ![Overridding __clone](doc/deep-clone.png) + ### With `DeepCopy` ![With DeepCopy](doc/deep-copy.png) + ## How it works -DeepCopy recursively traverses all the object's properties and clones them. To avoid cloning the same object twice it keeps a hash map of all instances and thus preserves the object graph. +DeepCopy recursively traverses all the object's properties and clones them. To avoid cloning the same object twice it +keeps a hash map of all instances and thus preserves the object graph. + +To use it: + +```php +use function DeepCopy\deep_copy; + +$copy = deep_copy($var); +``` + +Alternatively, you can create your own `DeepCopy` instance to configure it differently for example: + +```php +use DeepCopy\DeepCopy; + +$copier = new DeepCopy(true); + +$copy = $copier->copy($var); +``` + +You may want to roll your own deep copy function: + +```php +namespace Acme; + +use DeepCopy\DeepCopy; + +function deep_copy($var) +{ + static $copier = null; + + if (null === $copier) { + $copier = new DeepCopy(true); + } + + return $copier->copy($var); +} +``` + ## Going further You can add filters to customize the copy process. -The method to add a filter is `$deepCopy->addFilter($filter, $matcher)`, +The method to add a filter is `DeepCopy\DeepCopy::addFilter($filter, $matcher)`, with `$filter` implementing `DeepCopy\Filter\Filter` and `$matcher` implementing `DeepCopy\Matcher\Matcher`. We provide some generic filters and matchers. + ### Matchers - `DeepCopy\Matcher` applies on a object attribute. - `DeepCopy\TypeMatcher` applies on any element found in graph, including array elements. + #### Property name The `PropertyNameMatcher` will match a property by its name: @@ -103,10 +154,11 @@ The `PropertyNameMatcher` will match a property by its name: ```php use DeepCopy\Matcher\PropertyNameMatcher; +// Will apply a filter to any property of any objects named "id" $matcher = new PropertyNameMatcher('id'); -// will apply a filter to any property of any objects named "id" ``` + #### Specific property The `PropertyMatcher` will match a specific property of a specific class: @@ -114,46 +166,53 @@ The `PropertyMatcher` will match a specific property of a specific class: ```php use DeepCopy\Matcher\PropertyMatcher; +// Will apply a filter to the property "id" of any objects of the class "MyClass" $matcher = new PropertyMatcher('MyClass', 'id'); -// will apply a filter to the property "id" of any objects of the class "MyClass" ``` + #### Type -The `TypeMatcher` will match any element by its type (instance of a class or any value that could be parameter of [gettype()](http://php.net/manual/en/function.gettype.php) function): +The `TypeMatcher` will match any element by its type (instance of a class or any value that could be parameter of +[gettype()](http://php.net/manual/en/function.gettype.php) function): ```php use DeepCopy\TypeMatcher\TypeMatcher; +// Will apply a filter to any object that is an instance of Doctrine\Common\Collections\Collection $matcher = new TypeMatcher('Doctrine\Common\Collections\Collection'); -// will apply a filter to any object that is an instance of Doctrine\Common\Collections\Collection ``` + ### Filters - - `DeepCopy\Filter` applies a transformation to the object attribute matched by `DeepCopy\Matcher`. - - `DeepCopy\TypeFilter` applies a transformation to any element matched by `DeepCopy\TypeMatcher`. +- `DeepCopy\Filter` applies a transformation to the object attribute matched by `DeepCopy\Matcher` +- `DeepCopy\TypeFilter` applies a transformation to any element matched by `DeepCopy\TypeMatcher` -#### `SetNullFilter` -Let's say for example that you are copying a database record (or a Doctrine entity), so you want the copy not to have any ID: +#### `SetNullFilter` (filter) + +Let's say for example that you are copying a database record (or a Doctrine entity), so you want the copy not to have +any ID: ```php use DeepCopy\DeepCopy; use DeepCopy\Filter\SetNullFilter; use DeepCopy\Matcher\PropertyNameMatcher; -$myObject = MyClass::load(123); -echo $myObject->id; // 123 +$object = MyClass::load(123); +echo $object->id; // 123 + +$copier = new DeepCopy(); +$copier->addFilter(new SetNullFilter(), new PropertyNameMatcher('id')); -$deepCopy = new DeepCopy(); -$deepCopy->addFilter(new SetNullFilter(), new PropertyNameMatcher('id')); -$myCopy = $deepCopy->copy($myObject); +$copy = $copier->copy($object); -echo $myCopy->id; // null +echo $copy->id; // null ``` -#### `KeepFilter` + +#### `KeepFilter` (filter) If you want a property to remain untouched (for example, an association to an object): @@ -162,53 +221,114 @@ use DeepCopy\DeepCopy; use DeepCopy\Filter\KeepFilter; use DeepCopy\Matcher\PropertyMatcher; -$deepCopy = new DeepCopy(); -$deepCopy->addFilter(new KeepFilter(), new PropertyMatcher('MyClass', 'category')); -$myCopy = $deepCopy->copy($myObject); +$copier = new DeepCopy(); +$copier->addFilter(new KeepFilter(), new PropertyMatcher('MyClass', 'category')); -// $myCopy->category has not been touched +$copy = $copier->copy($object); +// $copy->category has not been touched ``` -#### `ReplaceFilter` - 1. If you want to replace the value of a property: +#### `DoctrineCollectionFilter` (filter) + +If you use Doctrine and want to copy an entity, you will need to use the `DoctrineCollectionFilter`: + +```php +use DeepCopy\DeepCopy; +use DeepCopy\Filter\Doctrine\DoctrineCollectionFilter; +use DeepCopy\Matcher\PropertyTypeMatcher; + +$copier = new DeepCopy(); +$copier->addFilter(new DoctrineCollectionFilter(), new PropertyTypeMatcher('Doctrine\Common\Collections\Collection')); + +$copy = $copier->copy($object); +``` - ```php - use DeepCopy\DeepCopy; - use DeepCopy\Filter\ReplaceFilter; - use DeepCopy\Matcher\PropertyMatcher; - $deepCopy = new DeepCopy(); - $callback = function ($currentValue) { - return $currentValue . ' (copy)' - }; - $deepCopy->addFilter(new ReplaceFilter($callback), new PropertyMatcher('MyClass', 'title')); - $myCopy = $deepCopy->copy($myObject); +#### `DoctrineEmptyCollectionFilter` (filter) - // $myCopy->title will contain the data returned by the callback, e.g. 'The title (copy)' - ``` +If you use Doctrine and want to copy an entity who contains a `Collection` that you want to be reset, you can use the +`DoctrineEmptyCollectionFilter` - 2. If you want to replace whole element: +```php +use DeepCopy\DeepCopy; +use DeepCopy\Filter\Doctrine\DoctrineEmptyCollectionFilter; +use DeepCopy\Matcher\PropertyMatcher; - ```php - use DeepCopy\DeepCopy; - use DeepCopy\TypeFilter\ReplaceFilter; - use DeepCopy\TypeMatcher\TypeMatcher; +$copier = new DeepCopy(); +$copier->addFilter(new DoctrineEmptyCollectionFilter(), new PropertyMatcher('MyClass', 'myProperty')); - $deepCopy = new DeepCopy(); - $callback = function (MyClass $myClass) { - return get_class($myClass); - }; - $deepCopy->addTypeFilter(new ReplaceFilter($callback), new TypeMatcher('MyClass')); - $myCopy = $deepCopy->copy(array(new MyClass, 'some string', new MyClass)); +$copy = $copier->copy($object); - // $myCopy will contain ['MyClass', 'some stirng', 'MyClass'] - ``` +// $copy->myProperty will return an empty collection +``` + + +#### `DoctrineProxyFilter` (filter) + +If you use Doctrine and use cloning on lazy loaded entities, you might encounter errors mentioning missing fields on a +Doctrine proxy class (...\\\_\_CG\_\_\Proxy). +You can use the `DoctrineProxyFilter` to load the actual entity behind the Doctrine proxy class. +**Make sure, though, to put this as one of your very first filters in the filter chain so that the entity is loaded +before other filters are applied!** + +```php +use DeepCopy\DeepCopy; +use DeepCopy\Filter\Doctrine\DoctrineProxyFilter; +use DeepCopy\Matcher\Doctrine\DoctrineProxyMatcher; + +$copier = new DeepCopy(); +$copier->addFilter(new DoctrineProxyFilter(), new DoctrineProxyMatcher()); + +$copy = $copier->copy($object); + +// $copy should now contain a clone of all entities, including those that were not yet fully loaded. +``` + + +#### `ReplaceFilter` (type filter) + +1. If you want to replace the value of a property: + +```php +use DeepCopy\DeepCopy; +use DeepCopy\Filter\ReplaceFilter; +use DeepCopy\Matcher\PropertyMatcher; + +$copier = new DeepCopy(); +$callback = function ($currentValue) { + return $currentValue . ' (copy)' +}; +$copier->addFilter(new ReplaceFilter($callback), new PropertyMatcher('MyClass', 'title')); + +$copy = $copier->copy($object); + +// $copy->title will contain the data returned by the callback, e.g. 'The title (copy)' +``` + +2. If you want to replace whole element: + +```php +use DeepCopy\DeepCopy; +use DeepCopy\TypeFilter\ReplaceFilter; +use DeepCopy\TypeMatcher\TypeMatcher; + +$copier = new DeepCopy(); +$callback = function (MyClass $myClass) { + return get_class($myClass); +}; +$copier->addTypeFilter(new ReplaceFilter($callback), new TypeMatcher('MyClass')); + +$copy = $copier->copy([new MyClass, 'some string', new MyClass]); + +// $copy will contain ['MyClass', 'some string', 'MyClass'] +``` The `$callback` parameter of the `ReplaceFilter` constructor accepts any PHP callable. -#### `ShallowCopyFilter` + +#### `ShallowCopyFilter` (type filter) Stop *DeepCopy* from recursively copying element, using standard `clone` instead: @@ -225,47 +345,28 @@ $this->deepCopy->addTypeFilter( ); $myServiceWithMocks = new MyService(m::mock(MyDependency1::class), m::mock(MyDependency2::class)); -// all mocks will be just cloned, not deep-copied +// All mocks will be just cloned, not deep copied ``` -#### `DoctrineCollectionFilter` -If you use Doctrine and want to copy an entity, you will need to use the `DoctrineCollectionFilter`: +## Edge cases -```php -use DeepCopy\DeepCopy; -use DeepCopy\Filter\Doctrine\DoctrineCollectionFilter; -use DeepCopy\Matcher\PropertyTypeMatcher; +The following structures cannot be deep-copied with PHP Reflection. As a result they are shallow cloned and filters are +not applied. There is two ways for you to handle them: -$deepCopy = new DeepCopy(); -$deepCopy->addFilter(new DoctrineCollectionFilter(), new PropertyTypeMatcher('Doctrine\Common\Collections\Collection')); -$myCopy = $deepCopy->copy($myObject); -``` - -#### `DoctrineEmptyCollectionFilter` +- Implement your own `__clone()` method +- Use a filter with a type matcher -If you use Doctrine and want to copy an entity who contains a `Collection` that you want to be reset, you can use the `DoctrineEmptyCollectionFilter` - -```php -use DeepCopy\DeepCopy; -use DeepCopy\Filter\Doctrine\DoctrineEmptyCollectionFilter; -use DeepCopy\Matcher\PropertyMatcher; - -$deepCopy = new DeepCopy(); -$deepCopy->addFilter(new DoctrineEmptyCollectionFilter(), new PropertyMatcher('MyClass', 'myProperty')); -$myCopy = $deepCopy->copy($myObject); - -// $myCopy->myProperty will return an empty collection -``` ## Contributing DeepCopy is distributed under the MIT license. + ### Tests Running the tests is simple: ```php -phpunit +vendor/bin/phpunit ``` diff --git a/lib/composer/vendor/myclabs/deep-copy/composer.json b/lib/composer/vendor/myclabs/deep-copy/composer.json index d20287abc..d5d3a7798 100644 --- a/lib/composer/vendor/myclabs/deep-copy/composer.json +++ b/lib/composer/vendor/myclabs/deep-copy/composer.json @@ -3,19 +3,33 @@ "type": "library", "description": "Create deep copies (clones) of your objects", "keywords": ["clone", "copy", "duplicate", "object", "object graph"], - "homepage": "https://github.com/myclabs/DeepCopy", "license": "MIT", + "autoload": { - "psr-4": { "DeepCopy\\": "src/DeepCopy/" } + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + }, + "files": [ + "src/DeepCopy/deep_copy.php" + ] }, "autoload-dev": { - "psr-4": { "DeepCopyTest\\": "tests/DeepCopyTest/" } + "psr-4": { + "DeepCopy\\": "fixtures/", + "DeepCopyTest\\": "tests/DeepCopyTest/" + } }, + "require": { - "php": ">=5.4.0" + "php": "^5.6 || ^7.0" }, "require-dev": { - "doctrine/collections": "1.*", - "phpunit/phpunit": "~4.1" + "doctrine/collections": "^1.0", + "doctrine/common": "^2.6", + "phpunit/phpunit": "^4.1" + }, + + "config": { + "sort-packages": true } } diff --git a/lib/composer/vendor/myclabs/deep-copy/fixtures/f001/A.php b/lib/composer/vendor/myclabs/deep-copy/fixtures/f001/A.php new file mode 100644 index 000000000..648d5dfff --- /dev/null +++ b/lib/composer/vendor/myclabs/deep-copy/fixtures/f001/A.php @@ -0,0 +1,20 @@ +aProp; + } + + public function setAProp($prop) + { + $this->aProp = $prop; + + return $this; + } +} diff --git a/lib/composer/vendor/myclabs/deep-copy/fixtures/f001/B.php b/lib/composer/vendor/myclabs/deep-copy/fixtures/f001/B.php new file mode 100644 index 000000000..462bb44e8 --- /dev/null +++ b/lib/composer/vendor/myclabs/deep-copy/fixtures/f001/B.php @@ -0,0 +1,20 @@ +bProp; + } + + public function setBProp($prop) + { + $this->bProp = $prop; + + return $this; + } +} diff --git a/lib/composer/vendor/myclabs/deep-copy/fixtures/f002/A.php b/lib/composer/vendor/myclabs/deep-copy/fixtures/f002/A.php new file mode 100644 index 000000000..d9aa5c35b --- /dev/null +++ b/lib/composer/vendor/myclabs/deep-copy/fixtures/f002/A.php @@ -0,0 +1,33 @@ +prop1; + } + + public function setProp1($prop) + { + $this->prop1 = $prop; + + return $this; + } + + public function getProp2() + { + return $this->prop2; + } + + public function setProp2($prop) + { + $this->prop2 = $prop; + + return $this; + } +} diff --git a/lib/composer/vendor/myclabs/deep-copy/fixtures/f003/Foo.php b/lib/composer/vendor/myclabs/deep-copy/fixtures/f003/Foo.php new file mode 100644 index 000000000..9cd76224a --- /dev/null +++ b/lib/composer/vendor/myclabs/deep-copy/fixtures/f003/Foo.php @@ -0,0 +1,26 @@ +name = $name; + } + + public function getProp() + { + return $this->prop; + } + + public function setProp($prop) + { + $this->prop = $prop; + + return $this; + } +} \ No newline at end of file diff --git a/lib/composer/vendor/myclabs/deep-copy/fixtures/f004/UnclonableItem.php b/lib/composer/vendor/myclabs/deep-copy/fixtures/f004/UnclonableItem.php new file mode 100644 index 000000000..82c6c67cd --- /dev/null +++ b/lib/composer/vendor/myclabs/deep-copy/fixtures/f004/UnclonableItem.php @@ -0,0 +1,13 @@ +cloned = true; + } +} diff --git a/lib/composer/vendor/myclabs/deep-copy/fixtures/f006/A.php b/lib/composer/vendor/myclabs/deep-copy/fixtures/f006/A.php new file mode 100644 index 000000000..d9efb1166 --- /dev/null +++ b/lib/composer/vendor/myclabs/deep-copy/fixtures/f006/A.php @@ -0,0 +1,26 @@ +aProp; + } + + public function setAProp($prop) + { + $this->aProp = $prop; + + return $this; + } + + public function __clone() + { + $this->cloned = true; + } +} diff --git a/lib/composer/vendor/myclabs/deep-copy/fixtures/f006/B.php b/lib/composer/vendor/myclabs/deep-copy/fixtures/f006/B.php new file mode 100644 index 000000000..1f80b3d44 --- /dev/null +++ b/lib/composer/vendor/myclabs/deep-copy/fixtures/f006/B.php @@ -0,0 +1,26 @@ +bProp; + } + + public function setBProp($prop) + { + $this->bProp = $prop; + + return $this; + } + + public function __clone() + { + $this->cloned = true; + } +} diff --git a/lib/composer/vendor/myclabs/deep-copy/fixtures/f007/FooDateInterval.php b/lib/composer/vendor/myclabs/deep-copy/fixtures/f007/FooDateInterval.php new file mode 100644 index 000000000..e16bc6aa6 --- /dev/null +++ b/lib/composer/vendor/myclabs/deep-copy/fixtures/f007/FooDateInterval.php @@ -0,0 +1,15 @@ +cloned = true; + } +} diff --git a/lib/composer/vendor/myclabs/deep-copy/fixtures/f007/FooDateTimeZone.php b/lib/composer/vendor/myclabs/deep-copy/fixtures/f007/FooDateTimeZone.php new file mode 100644 index 000000000..6f4e61fe9 --- /dev/null +++ b/lib/composer/vendor/myclabs/deep-copy/fixtures/f007/FooDateTimeZone.php @@ -0,0 +1,15 @@ +cloned = true; + } +} diff --git a/lib/composer/vendor/myclabs/deep-copy/fixtures/f008/A.php b/lib/composer/vendor/myclabs/deep-copy/fixtures/f008/A.php new file mode 100644 index 000000000..88471d013 --- /dev/null +++ b/lib/composer/vendor/myclabs/deep-copy/fixtures/f008/A.php @@ -0,0 +1,18 @@ +foo = $foo; + } + + public function getFoo() + { + return $this->foo; + } +} diff --git a/lib/composer/vendor/myclabs/deep-copy/fixtures/f008/B.php b/lib/composer/vendor/myclabs/deep-copy/fixtures/f008/B.php new file mode 100644 index 000000000..6053092d7 --- /dev/null +++ b/lib/composer/vendor/myclabs/deep-copy/fixtures/f008/B.php @@ -0,0 +1,7 @@ + Filter, 'matcher' => Matcher] pairs. */ private $filters = []; /** * Type Filters to apply. - * @var array + * + * @var array Array of ['filter' => Filter, 'matcher' => Matcher] pairs. */ private $typeFilters = []; + /** + * @var bool + */ private $skipUncloneable = false; /** @@ -48,23 +59,29 @@ public function __construct($useCloneMethod = false) { $this->useCloneMethod = $useCloneMethod; - $this->addTypeFilter(new SplDoublyLinkedList($this), new TypeMatcher('\SplDoublyLinkedList')); + $this->addTypeFilter(new DateIntervalFilter(), new TypeMatcher(DateInterval::class)); + $this->addTypeFilter(new SplDoublyLinkedListFilter($this), new TypeMatcher(SplDoublyLinkedList::class)); } /** - * Cloning uncloneable properties won't throw exception. + * If enabled, will not throw an exception when coming across an uncloneable property. + * * @param $skipUncloneable + * * @return $this */ public function skipUncloneable($skipUncloneable = true) { $this->skipUncloneable = $skipUncloneable; + return $this; } /** - * Perform a deep copy of the object. + * Deep copies the given object. + * * @param mixed $object + * * @return mixed */ public function copy($object) @@ -90,7 +107,6 @@ public function addTypeFilter(TypeFilter $filter, TypeMatcher $matcher) ]; } - private function recursiveCopy($var) { // Matches Type Filter @@ -102,14 +118,17 @@ private function recursiveCopy($var) if (is_resource($var)) { return $var; } + // Array if (is_array($var)) { return $this->copyArray($var); } + // Scalar if (! is_object($var)) { return $var; } + // Object return $this->copyObject($var); } @@ -129,8 +148,12 @@ private function copyArray(array $array) } /** - * Copy an object + * Copies an object. + * * @param object $object + * + * @throws CloneException + * * @return object */ private function copyObject($object) @@ -141,29 +164,35 @@ private function copyObject($object) return $this->hashMap[$objectHash]; } - $reflectedObject = new \ReflectionObject($object); - - if (false === $isCloneable = $reflectedObject->isCloneable() and $this->skipUncloneable) { - $this->hashMap[$objectHash] = $object; - return $object; - } + $reflectedObject = new ReflectionObject($object); + $isCloneable = $reflectedObject->isCloneable(); if (false === $isCloneable) { - throw new CloneException(sprintf( - 'Class "%s" is not cloneable.', - $reflectedObject->getName() - )); + if ($this->skipUncloneable) { + $this->hashMap[$objectHash] = $object; + + return $object; + } + + throw new CloneException( + sprintf( + 'The class "%s" is not cloneable.', + $reflectedObject->getName() + ) + ); } $newObject = clone $object; $this->hashMap[$objectHash] = $newObject; + if ($this->useCloneMethod && $reflectedObject->hasMethod('__clone')) { - return $object; + return $newObject; } - if ($newObject instanceof \DateTimeInterface) { + if ($newObject instanceof DateTimeInterface || $newObject instanceof DateTimeZone) { return $newObject; } + foreach (ReflectionHelper::getProperties($reflectedObject) as $property) { $this->copyObjectProperty($newObject, $property); } @@ -193,6 +222,7 @@ function ($object) { return $this->recursiveCopy($object); } ); + // If a filter matches, we stop processing this property return; } @@ -206,10 +236,12 @@ function ($object) { } /** - * Returns first filter that matches variable, NULL if no such filter found. + * Returns first filter that matches variable, `null` if no such filter found. + * * @param array $filterRecords Associative array with 2 members: 'filter' with value of type {@see TypeFilter} and * 'matcher' with value of type {@see TypeMatcher} * @param mixed $var + * * @return TypeFilter|null */ private function getFirstMatchedTypeFilter(array $filterRecords, $var) @@ -228,10 +260,13 @@ function (array $record) use ($var) { } /** - * Returns first element that matches predicate, NULL if no such element found. - * @param array $elements + * Returns first element that matches predicate, `null` if no such element found. + * + * @param array $elements Array of ['filter' => Filter, 'matcher' => Matcher] pairs. * @param callable $predicate Predicate arguments are: element. - * @return mixed|null + * + * @return array|null Associative array with 2 members: 'filter' with value of type {@see TypeFilter} and 'matcher' + * with value of type {@see TypeMatcher} or `null`. */ private function first(array $elements, callable $predicate) { diff --git a/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/Exception/CloneException.php b/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/Exception/CloneException.php index dd3b617b0..c046706a2 100644 --- a/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/Exception/CloneException.php +++ b/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/Exception/CloneException.php @@ -1,6 +1,9 @@ setAccessible(true); $oldCollection = $reflectionProperty->getValue($object); diff --git a/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/Filter/Doctrine/DoctrineEmptyCollectionFilter.php b/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/Filter/Doctrine/DoctrineEmptyCollectionFilter.php index f9b3f7acf..7b33fd547 100644 --- a/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/Filter/Doctrine/DoctrineEmptyCollectionFilter.php +++ b/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/Filter/Doctrine/DoctrineEmptyCollectionFilter.php @@ -3,12 +3,16 @@ namespace DeepCopy\Filter\Doctrine; use DeepCopy\Filter\Filter; +use DeepCopy\Reflection\ReflectionHelper; use Doctrine\Common\Collections\ArrayCollection; +/** + * @final + */ class DoctrineEmptyCollectionFilter implements Filter { /** - * Apply the filter to the object. + * Sets the object property to an empty doctrine collection. * * @param object $object * @param string $property @@ -16,7 +20,7 @@ class DoctrineEmptyCollectionFilter implements Filter */ public function apply($object, $property, $objectCopier) { - $reflectionProperty = new \ReflectionProperty($object, $property); + $reflectionProperty = ReflectionHelper::getProperty($object, $property); $reflectionProperty->setAccessible(true); $reflectionProperty->setValue($object, new ArrayCollection()); diff --git a/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/Filter/Doctrine/DoctrineProxyFilter.php b/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/Filter/Doctrine/DoctrineProxyFilter.php new file mode 100644 index 000000000..8bee8f769 --- /dev/null +++ b/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/Filter/Doctrine/DoctrineProxyFilter.php @@ -0,0 +1,22 @@ +__load(); + } +} diff --git a/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/Filter/Filter.php b/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/Filter/Filter.php index 48076a1b0..85ba18ce1 100644 --- a/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/Filter/Filter.php +++ b/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/Filter/Filter.php @@ -8,7 +8,8 @@ interface Filter { /** - * Apply the filter to the object. + * Applies the filter to the object. + * * @param object $object * @param string $property * @param callable $objectCopier diff --git a/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/Filter/KeepFilter.php b/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/Filter/KeepFilter.php index 14c55e750..4b11a081b 100644 --- a/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/Filter/KeepFilter.php +++ b/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/Filter/KeepFilter.php @@ -2,12 +2,11 @@ namespace DeepCopy\Filter; -/** - * Keep the value of a property - */ class KeepFilter implements Filter { /** + * Keeps the value of the object property. + * * {@inheritdoc} */ public function apply($object, $property, $objectCopier) diff --git a/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/Filter/ReplaceFilter.php b/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/Filter/ReplaceFilter.php index fce7114b4..7aca593bb 100644 --- a/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/Filter/ReplaceFilter.php +++ b/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/Filter/ReplaceFilter.php @@ -2,8 +2,10 @@ namespace DeepCopy\Filter; +use DeepCopy\Reflection\ReflectionHelper; + /** - * Replace the value of a property + * @final */ class ReplaceFilter implements Filter { @@ -21,11 +23,13 @@ public function __construct(callable $callable) } /** + * Replaces the object property by the result of the callback called with the object property. + * * {@inheritdoc} */ public function apply($object, $property, $objectCopier) { - $reflectionProperty = new \ReflectionProperty($object, $property); + $reflectionProperty = ReflectionHelper::getProperty($object, $property); $reflectionProperty->setAccessible(true); $value = call_user_func($this->callback, $reflectionProperty->getValue($object)); diff --git a/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/Filter/SetNullFilter.php b/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/Filter/SetNullFilter.php index d48f15b62..bea86b884 100644 --- a/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/Filter/SetNullFilter.php +++ b/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/Filter/SetNullFilter.php @@ -2,19 +2,21 @@ namespace DeepCopy\Filter; -use ReflectionProperty; +use DeepCopy\Reflection\ReflectionHelper; /** - * Set a null value for a property + * @final */ class SetNullFilter implements Filter { /** + * Sets the object property to null. + * * {@inheritdoc} */ public function apply($object, $property, $objectCopier) { - $reflectionProperty = new ReflectionProperty($object, $property); + $reflectionProperty = ReflectionHelper::getProperty($object, $property); $reflectionProperty->setAccessible(true); $reflectionProperty->setValue($object, null); diff --git a/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/Matcher/Doctrine/DoctrineProxyMatcher.php b/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/Matcher/Doctrine/DoctrineProxyMatcher.php new file mode 100644 index 000000000..ec8856f50 --- /dev/null +++ b/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/Matcher/Doctrine/DoctrineProxyMatcher.php @@ -0,0 +1,22 @@ +class) && ($property == $this->property); + return ($object instanceof $this->class) && $property == $this->property; } } diff --git a/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/Matcher/PropertyNameMatcher.php b/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/Matcher/PropertyNameMatcher.php index 9d9575f03..c8ec0d2bc 100644 --- a/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/Matcher/PropertyNameMatcher.php +++ b/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/Matcher/PropertyNameMatcher.php @@ -3,7 +3,7 @@ namespace DeepCopy\Matcher; /** - * Match a property by its name + * @final */ class PropertyNameMatcher implements Matcher { @@ -21,6 +21,8 @@ public function __construct($property) } /** + * Matches a property by its name. + * * {@inheritdoc} */ public function matches($object, $property) diff --git a/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/Matcher/PropertyTypeMatcher.php b/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/Matcher/PropertyTypeMatcher.php index 6935541df..a6b0c0bc5 100644 --- a/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/Matcher/PropertyTypeMatcher.php +++ b/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/Matcher/PropertyTypeMatcher.php @@ -2,13 +2,16 @@ namespace DeepCopy\Matcher; -use ReflectionProperty; +use DeepCopy\Reflection\ReflectionHelper; +use ReflectionException; /** - * Match a property by its type + * Matches a property by its type. * - * @deprecated It is recommended to use {@see DeepCopy\TypeFilter\TypeFilter} instead, as it applies on all occurrences - * of given type in copied context (eg. array elements), not just on object properties. + * It is recommended to use {@see DeepCopy\TypeFilter\TypeFilter} instead, as it applies on all occurrences + * of given type in copied context (eg. array elements), not just on object properties. + * + * @final */ class PropertyTypeMatcher implements Matcher { @@ -30,7 +33,12 @@ public function __construct($propertyType) */ public function matches($object, $property) { - $reflectionProperty = new ReflectionProperty($object, $property); + try { + $reflectionProperty = ReflectionHelper::getProperty($object, $property); + } catch (ReflectionException $exception) { + return false; + } + $reflectionProperty->setAccessible(true); return $reflectionProperty->getValue($object) instanceof $this->propertyType; diff --git a/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/Reflection/ReflectionHelper.php b/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/Reflection/ReflectionHelper.php index a094e7294..742410cb2 100644 --- a/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/Reflection/ReflectionHelper.php +++ b/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/Reflection/ReflectionHelper.php @@ -2,6 +2,12 @@ namespace DeepCopy\Reflection; +use DeepCopy\Exception\PropertyException; +use ReflectionClass; +use ReflectionException; +use ReflectionObject; +use ReflectionProperty; + class ReflectionHelper { /** @@ -12,10 +18,11 @@ class ReflectionHelper * @author muratyaman@gmail.com * @see http://php.net/manual/en/reflectionclass.getproperties.php * - * @param \ReflectionClass $ref - * @return \ReflectionProperty[] + * @param ReflectionClass $ref + * + * @return ReflectionProperty[] */ - public static function getProperties(\ReflectionClass $ref) + public static function getProperties(ReflectionClass $ref) { $props = $ref->getProperties(); $propsArr = array(); @@ -36,4 +43,36 @@ public static function getProperties(\ReflectionClass $ref) return $propsArr; } + + /** + * Retrieves property by name from object and all its ancestors. + * + * @param object|string $object + * @param string $name + * + * @throws PropertyException + * @throws ReflectionException + * + * @return ReflectionProperty + */ + public static function getProperty($object, $name) + { + $reflection = is_object($object) ? new ReflectionObject($object) : new ReflectionClass($object); + + if ($reflection->hasProperty($name)) { + return $reflection->getProperty($name); + } + + if ($parentClass = $reflection->getParentClass()) { + return self::getProperty($parentClass->getName(), $name); + } + + throw new PropertyException( + sprintf( + 'The class "%s" doesn\'t have a property with the given name: "%s".', + is_object($object) ? get_class($object) : $object, + $name + ) + ); + } } diff --git a/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/TypeFilter/Date/DateIntervalFilter.php b/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/TypeFilter/Date/DateIntervalFilter.php new file mode 100644 index 000000000..becd1cfff --- /dev/null +++ b/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/TypeFilter/Date/DateIntervalFilter.php @@ -0,0 +1,33 @@ + $propertyValue) { + $copy->{$propertyName} = $propertyValue; + } + + return $copy; + } +} diff --git a/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/TypeFilter/ReplaceFilter.php b/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/TypeFilter/ReplaceFilter.php index 0e42b0fe1..164f8b8e2 100644 --- a/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/TypeFilter/ReplaceFilter.php +++ b/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/TypeFilter/ReplaceFilter.php @@ -2,6 +2,9 @@ namespace DeepCopy\TypeFilter; +/** + * @final + */ class ReplaceFilter implements TypeFilter { /** diff --git a/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/TypeFilter/ShallowCopyFilter.php b/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/TypeFilter/ShallowCopyFilter.php index 408d18bb7..a5fbd7a2b 100644 --- a/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/TypeFilter/ShallowCopyFilter.php +++ b/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/TypeFilter/ShallowCopyFilter.php @@ -2,6 +2,9 @@ namespace DeepCopy\TypeFilter; +/** + * @final + */ class ShallowCopyFilter implements TypeFilter { /** diff --git a/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/TypeFilter/Spl/SplDoublyLinkedList.php b/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/TypeFilter/Spl/SplDoublyLinkedList.php index 2bdc53734..c5644cff8 100644 --- a/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/TypeFilter/Spl/SplDoublyLinkedList.php +++ b/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/TypeFilter/Spl/SplDoublyLinkedList.php @@ -2,36 +2,9 @@ namespace DeepCopy\TypeFilter\Spl; -use DeepCopy\DeepCopy; -use DeepCopy\TypeFilter\TypeFilter; - -class SplDoublyLinkedList implements TypeFilter +/** + * @deprecated Use {@see SplDoublyLinkedListFilter} instead. + */ +class SplDoublyLinkedList extends SplDoublyLinkedListFilter { - /** - * @var DeepCopy - */ - private $deepCopy; - - public function __construct(DeepCopy $deepCopy) - { - $this->deepCopy = $deepCopy; - } - - /** - * {@inheritdoc} - */ - public function apply($element) - { - $newElement = clone $element; - - if ($element instanceof \SplDoublyLinkedList) { - // Replace each element in the list with a deep copy of itself - for ($i = 1; $i <= $newElement->count(); $i++) { - $newElement->push($this->deepCopy->copy($newElement->shift())); - } - } - - return $newElement; - - } } diff --git a/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/TypeFilter/Spl/SplDoublyLinkedListFilter.php b/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/TypeFilter/Spl/SplDoublyLinkedListFilter.php new file mode 100644 index 000000000..c33be4580 --- /dev/null +++ b/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/TypeFilter/Spl/SplDoublyLinkedListFilter.php @@ -0,0 +1,51 @@ +copier = $copier; + } + + /** + * {@inheritdoc} + */ + public function apply($element) + { + $newElement = clone $element; + + $copy = $this->createCopyClosure(); + + return $copy($newElement); + } + + private function createCopyClosure() + { + $copier = $this->copier; + + $copy = function (SplDoublyLinkedList $list) use ($copier) { + // Replace each element in the list with a deep copy of itself + for ($i = 1; $i <= $list->count(); $i++) { + $copy = $copier->recursiveCopy($list->shift()); + + $list->push($copy); + } + + return $list; + }; + + return Closure::bind($copy, null, DeepCopy::class); + } +} diff --git a/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/TypeFilter/TypeFilter.php b/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/TypeFilter/TypeFilter.php index a37a8ba88..5785a7da9 100644 --- a/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/TypeFilter/TypeFilter.php +++ b/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/TypeFilter/TypeFilter.php @@ -5,7 +5,8 @@ interface TypeFilter { /** - * Apply the filter to the object. + * Applies the filter to the object. + * * @param mixed $element */ public function apply($element); diff --git a/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/TypeMatcher/TypeMatcher.php b/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/TypeMatcher/TypeMatcher.php index e640f31e2..a563cb294 100644 --- a/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/TypeMatcher/TypeMatcher.php +++ b/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/TypeMatcher/TypeMatcher.php @@ -2,9 +2,6 @@ namespace DeepCopy\TypeMatcher; -/** - * TypeMatcher class - */ class TypeMatcher { /** @@ -21,7 +18,8 @@ public function __construct($type) } /** - * @param $element + * @param mixed $element + * * @return boolean */ public function matches($element) diff --git a/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/deep_copy.php b/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/deep_copy.php new file mode 100644 index 000000000..272652ca5 --- /dev/null +++ b/lib/composer/vendor/myclabs/deep-copy/src/DeepCopy/deep_copy.php @@ -0,0 +1,16 @@ +copy($value); +} diff --git a/lib/composer/vendor/pear/console_getopt/.gitignore b/lib/composer/vendor/pear/console_getopt/.gitignore new file mode 100644 index 000000000..783582816 --- /dev/null +++ b/lib/composer/vendor/pear/console_getopt/.gitignore @@ -0,0 +1,6 @@ +# composer related +composer.lock +composer.phar +vendor +README.html +dist/ diff --git a/lib/composer/vendor/pear/console_getopt/.travis.yml b/lib/composer/vendor/pear/console_getopt/.travis.yml new file mode 100644 index 000000000..2711415f5 --- /dev/null +++ b/lib/composer/vendor/pear/console_getopt/.travis.yml @@ -0,0 +1,9 @@ +language: php +php: + - 7 + - 5.6 + - 5.5 + - 5.4 +sudo: false +script: + - pear run-tests -r tests/ diff --git a/lib/composer/vendor/pear/console_getopt/Console/Getopt.php b/lib/composer/vendor/pear/console_getopt/Console/Getopt.php new file mode 100644 index 000000000..0da88585d --- /dev/null +++ b/lib/composer/vendor/pear/console_getopt/Console/Getopt.php @@ -0,0 +1,360 @@ + + * @license http://www.php.net/license/3_0.txt PHP 3.0 + * @version CVS: $Id$ + * @link http://pear.php.net/package/Console_Getopt + */ + +require_once 'PEAR.php'; + +/** + * Command-line options parsing class. + * + * @category Console + * @package Console_Getopt + * @author Andrei Zmievski + * @license http://www.php.net/license/3_0.txt PHP 3.0 + * @link http://pear.php.net/package/Console_Getopt + */ +class Console_Getopt +{ + + /** + * Parses the command-line options. + * + * The first parameter to this function should be the list of command-line + * arguments without the leading reference to the running program. + * + * The second parameter is a string of allowed short options. Each of the + * option letters can be followed by a colon ':' to specify that the option + * requires an argument, or a double colon '::' to specify that the option + * takes an optional argument. + * + * The third argument is an optional array of allowed long options. The + * leading '--' should not be included in the option name. Options that + * require an argument should be followed by '=', and options that take an + * option argument should be followed by '=='. + * + * The return value is an array of two elements: the list of parsed + * options and the list of non-option command-line arguments. Each entry in + * the list of parsed options is a pair of elements - the first one + * specifies the option, and the second one specifies the option argument, + * if there was one. + * + * Long and short options can be mixed. + * + * Most of the semantics of this function are based on GNU getopt_long(). + * + * @param array $args an array of command-line arguments + * @param string $short_options specifies the list of allowed short options + * @param array $long_options specifies the list of allowed long options + * @param boolean $skip_unknown suppresses Console_Getopt: unrecognized option + * + * @return array two-element array containing the list of parsed options and + * the non-option arguments + */ + public static function getopt2($args, $short_options, $long_options = null, $skip_unknown = false) + { + return Console_Getopt::doGetopt(2, $args, $short_options, $long_options, $skip_unknown); + } + + /** + * This function expects $args to start with the script name (POSIX-style). + * Preserved for backwards compatibility. + * + * @param array $args an array of command-line arguments + * @param string $short_options specifies the list of allowed short options + * @param array $long_options specifies the list of allowed long options + * + * @see getopt2() + * @return array two-element array containing the list of parsed options and + * the non-option arguments + */ + public static function getopt($args, $short_options, $long_options = null, $skip_unknown = false) + { + return Console_Getopt::doGetopt(1, $args, $short_options, $long_options, $skip_unknown); + } + + /** + * The actual implementation of the argument parsing code. + * + * @param int $version Version to use + * @param array $args an array of command-line arguments + * @param string $short_options specifies the list of allowed short options + * @param array $long_options specifies the list of allowed long options + * @param boolean $skip_unknown suppresses Console_Getopt: unrecognized option + * + * @return array + */ + public static function doGetopt($version, $args, $short_options, $long_options = null, $skip_unknown = false) + { + // in case you pass directly readPHPArgv() as the first arg + if (PEAR::isError($args)) { + return $args; + } + + if (empty($args)) { + return array(array(), array()); + } + + $non_opts = $opts = array(); + + settype($args, 'array'); + + if ($long_options) { + sort($long_options); + } + + /* + * Preserve backwards compatibility with callers that relied on + * erroneous POSIX fix. + */ + if ($version < 2) { + if (isset($args[0]{0}) && $args[0]{0} != '-') { + array_shift($args); + } + } + + reset($args); + while (list($i, $arg) = each($args)) { + /* The special element '--' means explicit end of + options. Treat the rest of the arguments as non-options + and end the loop. */ + if ($arg == '--') { + $non_opts = array_merge($non_opts, array_slice($args, $i + 1)); + break; + } + + if ($arg{0} != '-' || (strlen($arg) > 1 && $arg{1} == '-' && !$long_options)) { + $non_opts = array_merge($non_opts, array_slice($args, $i)); + break; + } elseif (strlen($arg) > 1 && $arg{1} == '-') { + $error = Console_Getopt::_parseLongOption(substr($arg, 2), + $long_options, + $opts, + $args, + $skip_unknown); + if (PEAR::isError($error)) { + return $error; + } + } elseif ($arg == '-') { + // - is stdin + $non_opts = array_merge($non_opts, array_slice($args, $i)); + break; + } else { + $error = Console_Getopt::_parseShortOption(substr($arg, 1), + $short_options, + $opts, + $args, + $skip_unknown); + if (PEAR::isError($error)) { + return $error; + } + } + } + + return array($opts, $non_opts); + } + + /** + * Parse short option + * + * @param string $arg Argument + * @param string[] $short_options Available short options + * @param string[][] &$opts + * @param string[] &$args + * @param boolean $skip_unknown suppresses Console_Getopt: unrecognized option + * + * @return void + */ + protected static function _parseShortOption($arg, $short_options, &$opts, &$args, $skip_unknown) + { + for ($i = 0; $i < strlen($arg); $i++) { + $opt = $arg{$i}; + $opt_arg = null; + + /* Try to find the short option in the specifier string. */ + if (($spec = strstr($short_options, $opt)) === false || $arg{$i} == ':') { + if ($skip_unknown === true) { + break; + } + + $msg = "Console_Getopt: unrecognized option -- $opt"; + return PEAR::raiseError($msg); + } + + if (strlen($spec) > 1 && $spec{1} == ':') { + if (strlen($spec) > 2 && $spec{2} == ':') { + if ($i + 1 < strlen($arg)) { + /* Option takes an optional argument. Use the remainder of + the arg string if there is anything left. */ + $opts[] = array($opt, substr($arg, $i + 1)); + break; + } + } else { + /* Option requires an argument. Use the remainder of the arg + string if there is anything left. */ + if ($i + 1 < strlen($arg)) { + $opts[] = array($opt, substr($arg, $i + 1)); + break; + } else if (list(, $opt_arg) = each($args)) { + /* Else use the next argument. */; + if (Console_Getopt::_isShortOpt($opt_arg) + || Console_Getopt::_isLongOpt($opt_arg)) { + $msg = "option requires an argument --$opt"; + return PEAR::raiseError("Console_Getopt: " . $msg); + } + } else { + $msg = "option requires an argument --$opt"; + return PEAR::raiseError("Console_Getopt: " . $msg); + } + } + } + + $opts[] = array($opt, $opt_arg); + } + } + + /** + * Checks if an argument is a short option + * + * @param string $arg Argument to check + * + * @return bool + */ + protected static function _isShortOpt($arg) + { + return strlen($arg) == 2 && $arg[0] == '-' + && preg_match('/[a-zA-Z]/', $arg[1]); + } + + /** + * Checks if an argument is a long option + * + * @param string $arg Argument to check + * + * @return bool + */ + protected static function _isLongOpt($arg) + { + return strlen($arg) > 2 && $arg[0] == '-' && $arg[1] == '-' && + preg_match('/[a-zA-Z]+$/', substr($arg, 2)); + } + + /** + * Parse long option + * + * @param string $arg Argument + * @param string[] $long_options Available long options + * @param string[][] &$opts + * @param string[] &$args + * + * @return void|PEAR_Error + */ + protected static function _parseLongOption($arg, $long_options, &$opts, &$args, $skip_unknown) + { + @list($opt, $opt_arg) = explode('=', $arg, 2); + + $opt_len = strlen($opt); + + for ($i = 0; $i < count($long_options); $i++) { + $long_opt = $long_options[$i]; + $opt_start = substr($long_opt, 0, $opt_len); + + $long_opt_name = str_replace('=', '', $long_opt); + + /* Option doesn't match. Go on to the next one. */ + if ($long_opt_name != $opt) { + continue; + } + + $opt_rest = substr($long_opt, $opt_len); + + /* Check that the options uniquely matches one of the allowed + options. */ + if ($i + 1 < count($long_options)) { + $next_option_rest = substr($long_options[$i + 1], $opt_len); + } else { + $next_option_rest = ''; + } + + if ($opt_rest != '' && $opt{0} != '=' && + $i + 1 < count($long_options) && + $opt == substr($long_options[$i+1], 0, $opt_len) && + $next_option_rest != '' && + $next_option_rest{0} != '=') { + + $msg = "Console_Getopt: option --$opt is ambiguous"; + return PEAR::raiseError($msg); + } + + if (substr($long_opt, -1) == '=') { + if (substr($long_opt, -2) != '==') { + /* Long option requires an argument. + Take the next argument if one wasn't specified. */; + if (!strlen($opt_arg) && !(list(, $opt_arg) = each($args))) { + $msg = "Console_Getopt: option requires an argument --$opt"; + return PEAR::raiseError($msg); + } + + if (Console_Getopt::_isShortOpt($opt_arg) + || Console_Getopt::_isLongOpt($opt_arg)) { + $msg = "Console_Getopt: option requires an argument --$opt"; + return PEAR::raiseError($msg); + } + } + } else if ($opt_arg) { + $msg = "Console_Getopt: option --$opt doesn't allow an argument"; + return PEAR::raiseError($msg); + } + + $opts[] = array('--' . $opt, $opt_arg); + return; + } + + if ($skip_unknown === true) { + return; + } + + return PEAR::raiseError("Console_Getopt: unrecognized option --$opt"); + } + + /** + * Safely read the $argv PHP array across different PHP configurations. + * Will take care on register_globals and register_argc_argv ini directives + * + * @return mixed the $argv PHP array or PEAR error if not registered + */ + public static function readPHPArgv() + { + global $argv; + if (!is_array($argv)) { + if (!@is_array($_SERVER['argv'])) { + if (!@is_array($GLOBALS['HTTP_SERVER_VARS']['argv'])) { + $msg = "Could not read cmd args (register_argc_argv=Off?)"; + return PEAR::raiseError("Console_Getopt: " . $msg); + } + return $GLOBALS['HTTP_SERVER_VARS']['argv']; + } + return $_SERVER['argv']; + } + return $argv; + } + +} \ No newline at end of file diff --git a/lib/composer/vendor/pear/console_getopt/LICENSE b/lib/composer/vendor/pear/console_getopt/LICENSE new file mode 100644 index 000000000..452b08839 --- /dev/null +++ b/lib/composer/vendor/pear/console_getopt/LICENSE @@ -0,0 +1,25 @@ +Copyright (c) 2001-2015, The PEAR developers +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +1. Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/lib/composer/vendor/pear/console_getopt/README.rst b/lib/composer/vendor/pear/console_getopt/README.rst new file mode 100644 index 000000000..64e5b41be --- /dev/null +++ b/lib/composer/vendor/pear/console_getopt/README.rst @@ -0,0 +1,26 @@ +******************************************* +Console_Getopt - Command-line option parser +******************************************* + +This is a PHP implementation of "getopt" supporting both short and long options. +It helps parsing command line options in your PHP script. + +Homepage: http://pear.php.net/package/Console_Getopt + +.. image:: https://travis-ci.org/pear/Console_Getopt.svg?branch=master + :target: https://travis-ci.org/pear/Console_Getopt + + +Alternatives +============ + +* Console_CommandLine__ (recommended) +* Console_GetoptPlus__ + +__ http://pear.php.net/package/Console_CommandLine +__ http://pear.php.net/package/Console_GetoptPlus + + +License +======= +BSD-2-Clause diff --git a/lib/composer/vendor/pear/console_getopt/composer.json b/lib/composer/vendor/pear/console_getopt/composer.json new file mode 100644 index 000000000..4dc7e7cca --- /dev/null +++ b/lib/composer/vendor/pear/console_getopt/composer.json @@ -0,0 +1,35 @@ +{ + "authors": [ + { + "email": "andrei@php.net", + "name": "Andrei Zmievski", + "role": "Lead" + }, + { + "email": "stig@php.net", + "name": "Stig Bakken", + "role": "Developer" + }, + { + "email": "cellog@php.net", + "name": "Greg Beaver", + "role": "Helper" + } + ], + "autoload": { + "psr-0": { + "Console": "./" + } + }, + "description": "More info available on: http://pear.php.net/package/Console_Getopt", + "include-path": [ + "./" + ], + "license": "BSD-2-Clause", + "name": "pear/console_getopt", + "support": { + "issues": "http://pear.php.net/bugs/search.php?cmd=display&package_name[]=Console_Getopt", + "source": "https://github.com/pear/Console_Getopt" + }, + "type": "library" +} diff --git a/lib/composer/vendor/pear/console_getopt/package.xml b/lib/composer/vendor/pear/console_getopt/package.xml new file mode 100644 index 000000000..7e8deb0e8 --- /dev/null +++ b/lib/composer/vendor/pear/console_getopt/package.xml @@ -0,0 +1,269 @@ + + + Console_Getopt + pear.php.net + Command-line option parser + This is a PHP implementation of "getopt" supporting both +short and long options. + + Andrei Zmievski + andrei + andrei@php.net + no + + + Stig Bakken + ssb + stig@php.net + no + + + Greg Beaver + cellog + cellog@php.net + yes + + + 2015-07-20 + + + 1.4.1 + 1.4.0 + + + stable + stable + + BSD-2-Clause + + +* Fix unit test on PHP 7 [cweiske] + + + + + + + + + + + + + + + + + + PEAR + pear.php.net + 1.4.0 + 1.999.999 + + + + + + 5.4.0 + + + 1.8.0 + + + + + + + + + + 2015-07-20 + + 1.4.1 + 1.4.0 + + + stable + stable + + BSD-2-Clause + + * Fix unit test on PHP 7 [cweiske] + + + + + 2015-02-22 + + 1.4.0 + 1.4.0 + + + stable + stable + + BSD-2-Clause + + * Change license to BSD-2-Clause + * Set minimum PHP version to 5.4.0 + * Mark static methods with "static" keyword + + + + + 2011-03-07 + + 1.3.1 + 1.3.0 + + + stable + stable + + PHP License + + * Change the minimum PEAR installer dep to be lower + + + + + 2010-12-11 + + + 1.3.0 + 1.3.0 + + + stable + stable + + PHP License + + * Implement Request #13140: [PATCH] to skip unknown parameters. [patch by rquadling, improved on by dufuz] + + + + + 2007-06-12 + + 1.2.3 + 1.2.1 + + + stable + stable + + PHP License + +* fix Bug #11068: No way to read plain "-" option [cardoe] + + + + + 1.2.2 + 1.2.1 + + + stable + stable + + 2007-02-17 + PHP License + +* fix Bug #4475: An ambiguous error occurred when specifying similar longoption name. +* fix Bug #10055: Not failing properly on short options missing required values + + + + + 1.2.1 + 1.2.1 + + + stable + stable + + 2006-12-08 + PHP License + +Fixed bugs #4448 (Long parameter values truncated with longoption parameter) and #7444 (Trailing spaces after php closing tag) + + + + + 1.2 + 1.2 + + + stable + stable + + 2003-12-11 + PHP License + +Fix to preserve BC with 1.0 and allow correct behaviour for new users + + + + + 1.0 + 1.0 + + + stable + stable + + 2002-09-13 + PHP License + +Stable release + + + + + 0.11 + 0.11 + + + beta + beta + + 2002-05-26 + PHP License + +POSIX getopt compatibility fix: treat first element of args + array as command name + + + + + 0.10 + 0.10 + + + beta + beta + + 2002-05-12 + PHP License + +Packaging fix + + + + + 0.9 + 0.9 + + + beta + beta + + 2002-05-12 + PHP License + +Initial release + + + + diff --git a/lib/composer/vendor/pear/console_getopt/tests/001-getopt.phpt b/lib/composer/vendor/pear/console_getopt/tests/001-getopt.phpt new file mode 100644 index 000000000..75ae8481b --- /dev/null +++ b/lib/composer/vendor/pear/console_getopt/tests/001-getopt.phpt @@ -0,0 +1,63 @@ +--TEST-- +Console_Getopt +--FILE-- + $d) { + if ($i++ > 0) { + print ", "; + } + print $d[0] . '=' . $d[1]; + } + print "\n"; + print "params: " . implode(", ", $non_opts) . "\n"; + print "\n"; +} + +test("-abc", "abc"); +test("-abc foo", "abc"); +test("-abc foo", "abc:"); +test("-abc foo bar gazonk", "abc"); +test("-abc foo bar gazonk", "abc:"); +test("-a -b -c", "abc"); +test("-a -b -c", "abc:"); +test("-abc", "ab:c"); +test("-abc foo -bar gazonk", "abc"); +?> +--EXPECT-- +options: a=, b=, c= +params: + +options: a=, b=, c= +params: foo + +options: a=, b=, c=foo +params: + +options: a=, b=, c= +params: foo, bar, gazonk + +options: a=, b=, c=foo +params: bar, gazonk + +options: a=, b=, c= +params: + +Console_Getopt: option requires an argument --c + +options: a=, b=c +params: + +options: a=, b=, c= +params: foo, -bar, gazonk diff --git a/lib/composer/vendor/pear/console_getopt/tests/bug10557.phpt b/lib/composer/vendor/pear/console_getopt/tests/bug10557.phpt new file mode 100644 index 000000000..08b72ac8f --- /dev/null +++ b/lib/composer/vendor/pear/console_getopt/tests/bug10557.phpt @@ -0,0 +1,22 @@ +--TEST-- +Console_Getopt [bug 10557] +--SKIPIF-- +--FILE-- +getMessage()."\n"; + echo 'FATAL'; + exit; +} + +print_r($ret); +?> +--EXPECT-- +Console_Getopt: option requires an argument --to +FATAL \ No newline at end of file diff --git a/lib/composer/vendor/pear/console_getopt/tests/bug11068.phpt b/lib/composer/vendor/pear/console_getopt/tests/bug11068.phpt new file mode 100644 index 000000000..8bbe4bfce --- /dev/null +++ b/lib/composer/vendor/pear/console_getopt/tests/bug11068.phpt @@ -0,0 +1,44 @@ +--TEST-- +Console_Getopt [bug 11068] +--SKIPIF-- +--FILE-- +getMessage()."\n"; + echo 'FATAL'; + exit; +} + +print_r($ret); +?> +--EXPECT-- +Array +( + [0] => Array + ( + [0] => Array + ( + [0] => f + [1] => jjohnston@mail.com + ) + + [1] => Array + ( + [0] => --to + [1] => hi + ) + + ) + + [1] => Array + ( + [0] => - + ) + +) \ No newline at end of file diff --git a/lib/composer/vendor/pear/console_getopt/tests/bug13140.phpt b/lib/composer/vendor/pear/console_getopt/tests/bug13140.phpt new file mode 100644 index 000000000..4ce13bbf9 --- /dev/null +++ b/lib/composer/vendor/pear/console_getopt/tests/bug13140.phpt @@ -0,0 +1,75 @@ +--TEST-- +Console_Getopt [bug 13140] +--SKIPIF-- +--FILE-- +getopt2($cg->readPHPArgv(), 't', array('test'), true)); +print_r($cg->getopt2($cg->readPHPArgv(), 'bar', array('foo'), true)); +?> +--EXPECT-- +Array +( + [0] => Array + ( + [0] => Array + ( + [0] => --test + [1] => + ) + + ) + + [1] => Array + ( + [0] => thisshouldbehere + ) + +) +Array +( + [0] => Array + ( + [0] => Array + ( + [0] => --foo + [1] => + ) + + [1] => Array + ( + [0] => b + [1] => + ) + + [2] => Array + ( + [0] => a + [1] => + ) + + [3] => Array + ( + [0] => r + [1] => + ) + + [4] => Array + ( + [0] => r + [1] => + ) + + ) + + [1] => Array + ( + [0] => thisshouldbehere + ) + +) diff --git a/lib/composer/vendor/pear/mail/.gitignore b/lib/composer/vendor/pear/mail/.gitignore new file mode 100644 index 000000000..869f49858 --- /dev/null +++ b/lib/composer/vendor/pear/mail/.gitignore @@ -0,0 +1,4 @@ +# composer related +composer.lock +composer.phar +vendor diff --git a/lib/composer/vendor/pear/mail/.travis.yml b/lib/composer/vendor/pear/mail/.travis.yml new file mode 100644 index 000000000..c15027295 --- /dev/null +++ b/lib/composer/vendor/pear/mail/.travis.yml @@ -0,0 +1,19 @@ +language: php +sudo: false +php: + - 5.4 + - 5.5 + - 5.6 + - 7.0 + - 7.1 + - nightly +install: + - pear list + - pear channel-update pear.php.net + - pear upgrade --force pear/pear + - pear list + - pear upgrade --force xml_util + - pear install --force --alldeps package.xml + - pear list +script: + - pear run-tests -d tests/ diff --git a/lib/composer/vendor/pear/mail/LICENSE b/lib/composer/vendor/pear/mail/LICENSE new file mode 100644 index 000000000..9aee685ef --- /dev/null +++ b/lib/composer/vendor/pear/mail/LICENSE @@ -0,0 +1,29 @@ +Copyright (c) 1997-2017, Chuck Hagenbuch +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/lib/composer/vendor/pear/mail/Mail.php b/lib/composer/vendor/pear/mail/Mail.php new file mode 100644 index 000000000..b04bc01c1 --- /dev/null +++ b/lib/composer/vendor/pear/mail/Mail.php @@ -0,0 +1,267 @@ + + * @copyright 1997-2017 Chuck Hagenbuch + * @license http://opensource.org/licenses/BSD-3-Clause New BSD License + * @version CVS: $Id$ + * @link http://pear.php.net/package/Mail/ + */ + +require_once 'PEAR.php'; + +/** + * PEAR's Mail:: interface. Defines the interface for implementing + * mailers under the PEAR hierarchy, and provides supporting functions + * useful in multiple mailer backends. + * + * @version $Revision$ + * @package Mail + */ +class Mail +{ + /** + * Line terminator used for separating header lines. + * @var string + */ + public $sep = "\r\n"; + + /** + * Provides an interface for generating Mail:: objects of various + * types + * + * @param string $driver The kind of Mail:: object to instantiate. + * @param array $params The parameters to pass to the Mail:: object. + * + * @return object Mail a instance of the driver class or if fails a PEAR Error + */ + public static function factory($driver, $params = array()) + { + $driver = strtolower($driver); + @include_once 'Mail/' . $driver . '.php'; + $class = 'Mail_' . $driver; + if (class_exists($class)) { + $mailer = new $class($params); + return $mailer; + } else { + return PEAR::raiseError('Unable to find class for driver ' . $driver); + } + } + + /** + * Implements Mail::send() function using php's built-in mail() + * command. + * + * @param mixed $recipients Either a comma-seperated list of recipients + * (RFC822 compliant), or an array of recipients, + * each RFC822 valid. This may contain recipients not + * specified in the headers, for Bcc:, resending + * messages, etc. + * + * @param array $headers The array of headers to send with the mail, in an + * associative array, where the array key is the + * header name (ie, 'Subject'), and the array value + * is the header value (ie, 'test'). The header + * produced from those values would be 'Subject: + * test'. + * + * @param string $body The full text of the message body, including any + * Mime parts, etc. + * + * @return mixed Returns true on success, or a PEAR_Error + * containing a descriptive error message on + * failure. + * + * @deprecated use Mail_mail::send instead + */ + public function send($recipients, $headers, $body) + { + if (!is_array($headers)) { + return PEAR::raiseError('$headers must be an array'); + } + + $result = $this->_sanitizeHeaders($headers); + if (is_a($result, 'PEAR_Error')) { + return $result; + } + + // if we're passed an array of recipients, implode it. + if (is_array($recipients)) { + $recipients = implode(', ', $recipients); + } + + // get the Subject out of the headers array so that we can + // pass it as a seperate argument to mail(). + $subject = ''; + if (isset($headers['Subject'])) { + $subject = $headers['Subject']; + unset($headers['Subject']); + } + + // flatten the headers out. + list(, $text_headers) = Mail::prepareHeaders($headers); + + return mail($recipients, $subject, $body, $text_headers); + } + + /** + * Sanitize an array of mail headers by removing any additional header + * strings present in a legitimate header's value. The goal of this + * filter is to prevent mail injection attacks. + * + * @param array $headers The associative array of headers to sanitize. + */ + protected function _sanitizeHeaders(&$headers) + { + foreach ($headers as $key => $value) { + $headers[$key] = + preg_replace('=((||0x0A/%0A|0x0D/%0D|\\n|\\r)\S).*=i', + null, $value); + } + } + + /** + * Take an array of mail headers and return a string containing + * text usable in sending a message. + * + * @param array $headers The array of headers to prepare, in an associative + * array, where the array key is the header name (ie, + * 'Subject'), and the array value is the header + * value (ie, 'test'). The header produced from those + * values would be 'Subject: test'. + * + * @return mixed Returns false if it encounters a bad address, + * otherwise returns an array containing two + * elements: Any From: address found in the headers, + * and the plain text version of the headers. + */ + protected function prepareHeaders($headers) + { + $lines = array(); + $from = null; + + foreach ($headers as $key => $value) { + if (strcasecmp($key, 'From') === 0) { + include_once 'Mail/RFC822.php'; + $parser = new Mail_RFC822(); + $addresses = $parser->parseAddressList($value, 'localhost', false); + if (is_a($addresses, 'PEAR_Error')) { + return $addresses; + } + + $from = $addresses[0]->mailbox . '@' . $addresses[0]->host; + + // Reject envelope From: addresses with spaces. + if (strstr($from, ' ')) { + return false; + } + + $lines[] = $key . ': ' . $value; + } elseif (strcasecmp($key, 'Received') === 0) { + $received = array(); + if (is_array($value)) { + foreach ($value as $line) { + $received[] = $key . ': ' . $line; + } + } + else { + $received[] = $key . ': ' . $value; + } + // Put Received: headers at the top. Spam detectors often + // flag messages with Received: headers after the Subject: + // as spam. + $lines = array_merge($received, $lines); + } else { + // If $value is an array (i.e., a list of addresses), convert + // it to a comma-delimited string of its elements (addresses). + if (is_array($value)) { + $value = implode(', ', $value); + } + $lines[] = $key . ': ' . $value; + } + } + + return array($from, join($this->sep, $lines)); + } + + /** + * Take a set of recipients and parse them, returning an array of + * bare addresses (forward paths) that can be passed to sendmail + * or an smtp server with the rcpt to: command. + * + * @param mixed Either a comma-seperated list of recipients + * (RFC822 compliant), or an array of recipients, + * each RFC822 valid. + * + * @return mixed An array of forward paths (bare addresses) or a PEAR_Error + * object if the address list could not be parsed. + */ + protected function parseRecipients($recipients) + { + include_once 'Mail/RFC822.php'; + + // if we're passed an array, assume addresses are valid and + // implode them before parsing. + if (is_array($recipients)) { + $recipients = implode(', ', $recipients); + } + + // Parse recipients, leaving out all personal info. This is + // for smtp recipients, etc. All relevant personal information + // should already be in the headers. + $Mail_RFC822 = new Mail_RFC822(); + $addresses = $Mail_RFC822->parseAddressList($recipients, 'localhost', false); + + // If parseAddressList() returned a PEAR_Error object, just return it. + if (is_a($addresses, 'PEAR_Error')) { + return $addresses; + } + + $recipients = array(); + if (is_array($addresses)) { + foreach ($addresses as $ob) { + $recipients[] = $ob->mailbox . '@' . $ob->host; + } + } + + return $recipients; + } + +} diff --git a/lib/Mail/RFC822.php b/lib/composer/vendor/pear/mail/Mail/RFC822.php similarity index 91% rename from lib/Mail/RFC822.php rename to lib/composer/vendor/pear/mail/Mail/RFC822.php index 58d36465c..e0748f586 100644 --- a/lib/Mail/RFC822.php +++ b/lib/composer/vendor/pear/mail/Mail/RFC822.php @@ -2,31 +2,33 @@ /** * RFC 822 Email address list validation Utility * - * PHP versions 4 and 5 + * PHP version 5 * * LICENSE: * - * Copyright (c) 2001-2010, Richard Heyes + * Copyright (c) 2001-2017, Chuck Hagenbuch & Richard Heyes * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * - * o Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * o Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * o The names of the authors may not be used to endorse or promote - * products derived from this software without specific prior written - * permission. + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY @@ -38,9 +40,9 @@ * @package Mail * @author Richard Heyes * @author Chuck Hagenbuch * @author Chuck Hagenbuch - * @version $Revision: 294749 $ + * @version $Revision$ * @license BSD * @package Mail */ @@ -141,7 +143,6 @@ class Mail_RFC822 { * Sets up the object. The address must either be set here or when * calling parseAddressList(). One or the other. * - * @access public * @param string $address The address(es) to validate. * @param string $default_domain Default domain/host etc. If not supplied, will be set to localhost. * @param boolean $nest_groups Whether to return the structure with groups nested for easier viewing. @@ -149,7 +150,7 @@ class Mail_RFC822 { * * @return object Mail_RFC822 A new Mail_RFC822 object. */ - function Mail_RFC822($address = null, $default_domain = null, $nest_groups = null, $validate = null, $limit = null) + public function __construct($address = null, $default_domain = null, $nest_groups = null, $validate = null, $limit = null) { if (isset($address)) $this->address = $address; if (isset($default_domain)) $this->default_domain = $default_domain; @@ -162,7 +163,6 @@ function Mail_RFC822($address = null, $default_domain = null, $nest_groups = nul * Starts the whole process. The address must either be set here * or when creating the object. One or the other. * - * @access public * @param string $address The address(es) to validate. * @param string $default_domain Default domain/host etc. * @param boolean $nest_groups Whether to return the structure with groups nested for easier viewing. @@ -170,7 +170,7 @@ function Mail_RFC822($address = null, $default_domain = null, $nest_groups = nul * * @return array A structured array of addresses. */ - function parseAddressList($address = null, $default_domain = null, $nest_groups = null, $validate = null, $limit = null) + public function parseAddressList($address = null, $default_domain = null, $nest_groups = null, $validate = null, $limit = null) { if (!isset($this) || !isset($this->mailRFC822)) { $obj = new Mail_RFC822($address, $default_domain, $nest_groups, $validate, $limit); @@ -222,11 +222,10 @@ function parseAddressList($address = null, $default_domain = null, $nest_groups /** * Splits an address into separate addresses. * - * @access private * @param string $address The addresses to split. * @return boolean Success or failure. */ - function _splitAddresses($address) + protected function _splitAddresses($address) { if (!empty($this->limit) && count($this->addresses) == $this->limit) { return ''; @@ -298,11 +297,10 @@ function _splitAddresses($address) /** * Checks for a group at the start of the string. * - * @access private * @param string $address The address to check. * @return boolean Whether or not there is a group at the start of the string. */ - function _isGroup($address) + protected function _isGroup($address) { // First comma not in quotes, angles or escaped: $parts = explode(',', $address); @@ -322,12 +320,11 @@ function _isGroup($address) /** * A common function that will check an exploded string. * - * @access private * @param array $parts The exloded string. * @param string $char The char that was exploded on. * @return mixed False if the string contains unclosed quotes/brackets, or the string on success. */ - function _splitCheck($parts, $char) + protected function _splitCheck($parts, $char) { $string = $parts[0]; @@ -355,12 +352,11 @@ function _splitCheck($parts, $char) /** * Checks if a string has unclosed quotes or not. * - * @access private * @param string $string The string to check. * @return boolean True if there are unclosed quotes inside the string, * false otherwise. */ - function _hasUnclosedQuotes($string) + protected function _hasUnclosedQuotes($string) { $string = trim($string); $iMax = strlen($string); @@ -392,12 +388,11 @@ function _hasUnclosedQuotes($string) * Checks if a string has an unclosed brackets or not. IMPORTANT: * This function handles both angle brackets and square brackets; * - * @access private * @param string $string The string to check. * @param string $chars The characters to check for. * @return boolean True if there are unclosed brackets inside the string, false otherwise. */ - function _hasUnclosedBrackets($string, $chars) + protected function _hasUnclosedBrackets($string, $chars) { $num_angle_start = substr_count($string, $chars[0]); $num_angle_end = substr_count($string, $chars[1]); @@ -416,13 +411,12 @@ function _hasUnclosedBrackets($string, $chars) /** * Sub function that is used only by hasUnclosedBrackets(). * - * @access private * @param string $string The string to check. * @param integer &$num The number of occurences. * @param string $char The character to count. * @return integer The number of occurences of $char in $string, adjusted for backslashes. */ - function _hasUnclosedBracketsSub($string, &$num, $char) + protected function _hasUnclosedBracketsSub($string, &$num, $char) { $parts = explode($char, $string); for ($i = 0; $i < count($parts); $i++){ @@ -438,11 +432,10 @@ function _hasUnclosedBracketsSub($string, &$num, $char) /** * Function to begin checking the address. * - * @access private * @param string $address The address to validate. * @return mixed False on failure, or a structured array of address information on success. */ - function _validateAddress($address) + protected function _validateAddress($address) { $is_group = false; $addresses = array(); @@ -483,14 +476,6 @@ function _validateAddress($address) $addresses[] = $address['address']; } - // Check that $addresses is set, if address like this: - // Groupname:; - // Then errors were appearing. - if (!count($addresses)){ - $this->error = 'Empty group.'; - return false; - } - // Trim the whitespace from all of the address strings. array_map('trim', $addresses); @@ -531,11 +516,10 @@ function _validateAddress($address) /** * Function to validate a phrase. * - * @access private * @param string $phrase The phrase to check. * @return boolean Success or failure. */ - function _validatePhrase($phrase) + protected function _validatePhrase($phrase) { // Splits on one or more Tab or space. $parts = preg_split('/[ \\x09]+/', $phrase, -1, PREG_SPLIT_NO_EMPTY); @@ -572,11 +556,10 @@ function _validatePhrase($phrase) * can split a list of addresses up before encoding personal names * (umlauts, etc.), for example. * - * @access private * @param string $atom The string to check. * @return boolean Success or failure. */ - function _validateAtom($atom) + protected function _validateAtom($atom) { if (!$this->validate) { // Validation has been turned off; assume the atom is okay. @@ -605,11 +588,10 @@ function _validateAtom($atom) * Function to validate quoted string, which is: * quoted-string = <"> *(qtext/quoted-pair) <"> * - * @access private * @param string $qstring The string to check * @return boolean Success or failure. */ - function _validateQuotedString($qstring) + protected function _validateQuotedString($qstring) { // Leading and trailing " $qstring = substr($qstring, 1, -1); @@ -623,11 +605,10 @@ function _validateQuotedString($qstring) * mailbox = addr-spec ; simple address * / phrase route-addr ; name and route-addr * - * @access public * @param string &$mailbox The string to check. * @return boolean Success or failure. */ - function validateMailbox(&$mailbox) + public function validateMailbox(&$mailbox) { // A couple of defaults. $phrase = ''; @@ -712,11 +693,10 @@ function validateMailbox(&$mailbox) * Angle brackets have already been removed at the point of * getting to this function. * - * @access private * @param string $route_addr The string to check. * @return mixed False on failure, or an array containing validated address/route information on success. */ - function _validateRouteAddr($route_addr) + protected function _validateRouteAddr($route_addr) { // Check for colon. if (strpos($route_addr, ':') !== false) { @@ -762,11 +742,10 @@ function _validateRouteAddr($route_addr) * Function to validate a route, which is: * route = 1#("@" domain) ":" * - * @access private * @param string $route The string to check. * @return mixed False on failure, or the validated $route on success. */ - function _validateRoute($route) + protected function _validateRoute($route) { // Split on comma. $domains = explode(',', trim($route)); @@ -785,11 +764,10 @@ function _validateRoute($route) * * domain = sub-domain *("." sub-domain) * - * @access private * @param string $domain The string to check. * @return mixed False on failure, or the validated domain on success. */ - function _validateDomain($domain) + protected function _validateDomain($domain) { // Note the different use of $subdomains and $sub_domains $subdomains = explode('.', $domain); @@ -813,11 +791,10 @@ function _validateDomain($domain) * Function to validate a subdomain: * subdomain = domain-ref / domain-literal * - * @access private * @param string $subdomain The string to check. * @return boolean Success or failure. */ - function _validateSubdomain($subdomain) + protected function _validateSubdomain($subdomain) { if (preg_match('|^\[(.*)]$|', $subdomain, $arr)){ if (!$this->_validateDliteral($arr[1])) return false; @@ -833,13 +810,12 @@ function _validateSubdomain($subdomain) * Function to validate a domain literal: * domain-literal = "[" *(dtext / quoted-pair) "]" * - * @access private * @param string $dliteral The string to check. * @return boolean Success or failure. */ - function _validateDliteral($dliteral) + protected function _validateDliteral($dliteral) { - return !preg_match('/(.)[][\x0D\\\\]/', $dliteral, $matches) && $matches[1] != '\\'; + return !preg_match('/(.)[][\x0D\\\\]/', $dliteral, $matches) && ((! isset($matches[1])) || $matches[1] != '\\'); } /** @@ -847,11 +823,10 @@ function _validateDliteral($dliteral) * * addr-spec = local-part "@" domain * - * @access private * @param string $addr_spec The string to check. * @return mixed False on failure, or the validated addr-spec on success. */ - function _validateAddrSpec($addr_spec) + protected function _validateAddrSpec($addr_spec) { $addr_spec = trim($addr_spec); @@ -878,17 +853,16 @@ function _validateAddrSpec($addr_spec) * Function to validate the local part of an address: * local-part = word *("." word) * - * @access private * @param string $local_part * @return mixed False on failure, or the validated local part on success. */ - function _validateLocalPart($local_part) + protected function _validateLocalPart($local_part) { $parts = explode('.', $local_part); $words = array(); // Split the local_part into words. - while (count($parts) > 0){ + while (count($parts) > 0) { $words[] = $this->_splitCheck($parts, '.'); for ($i = 0; $i < $this->index + 1; $i++) { array_shift($parts); @@ -897,6 +871,10 @@ function _validateLocalPart($local_part) // Validate each word. foreach ($words as $word) { + // word cannot be empty (#17317) + if ($word === '') { + return false; + } // If this word contains an unquoted space, it is invalid. (6.2.4) if (strpos($word, ' ') && $word[0] !== '"') { @@ -920,7 +898,7 @@ function _validateLocalPart($local_part) * @param string $data Addresses to count * @return int Approximate count */ - function approximateCount($data) + public function approximateCount($data) { return count(preg_split('/(? - * @copyright 2010 Chuck Hagenbuch - * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version CVS: $Id: mail.php 294747 2010-02-08 08:18:33Z clockwerx $ + * @copyright 2010-2017 Chuck Hagenbuch + * @license http://opensource.org/licenses/BSD-3-Clause New BSD License + * @version CVS: $Id$ * @link http://pear.php.net/package/Mail/ */ /** * internal PHP-mail() implementation of the PEAR Mail:: interface. * @package Mail - * @version $Revision: 294747 $ + * @version $Revision$ */ class Mail_mail extends Mail { @@ -64,7 +66,7 @@ class Mail_mail extends Mail { * * @param array $params Extra arguments for the mail() function. */ - function Mail_mail($params = null) + public function __construct($params = null) { // The other mail implementations accept parameters as arrays. // In the interest of being consistent, explode an array into @@ -109,10 +111,8 @@ function Mail_mail($params = null) * @return mixed Returns true on success, or a PEAR_Error * containing a descriptive error message on * failure. - * - * @access public */ - function send($recipients, $headers, $body) + public function send($recipients, $headers, $body) { if (!is_array($headers)) { return PEAR::raiseError('$headers must be an array'); diff --git a/lib/Mail/mock.php b/lib/composer/vendor/pear/mail/Mail/mock.php similarity index 77% rename from lib/Mail/mock.php rename to lib/composer/vendor/pear/mail/Mail/mock.php index 61570ba40..24d46a855 100644 --- a/lib/Mail/mock.php +++ b/lib/composer/vendor/pear/mail/Mail/mock.php @@ -2,31 +2,33 @@ /** * Mock implementation * - * PHP versions 4 and 5 + * PHP version 5 * * LICENSE: * - * Copyright (c) 2010 Chuck Hagenbuch + * Copyright (c) 2010-2017, Chuck Hagenbuch * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * - * o Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * o Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * o The names of the authors may not be used to endorse or promote - * products derived from this software without specific prior written - * permission. + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY @@ -37,9 +39,9 @@ * @category Mail * @package Mail * @author Chuck Hagenbuch - * @copyright 2010 Chuck Hagenbuch - * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version CVS: $Id: mock.php 294747 2010-02-08 08:18:33Z clockwerx $ + * @copyright 2010-2017 Chuck Hagenbuch + * @license http://opensource.org/licenses/BSD-3-Clause New BSD License + * @version CVS: $Id$ * @link http://pear.php.net/package/Mail/ */ @@ -47,7 +49,7 @@ * Mock implementation of the PEAR Mail:: interface for testing. * @access public * @package Mail - * @version $Revision: 294747 $ + * @version $Revision$ */ class Mail_mock extends Mail { @@ -55,23 +57,22 @@ class Mail_mock extends Mail { * Array of messages that have been sent with the mock. * * @var array - * @access public */ - var $sentMessages = array(); + public $sentMessages = array(); /** * Callback before sending mail. * * @var callback */ - var $_preSendCallback; + protected $_preSendCallback; /** * Callback after sending mai. * * @var callback */ - var $_postSendCallback; + protected $_postSendCallback; /** * Constructor. @@ -82,9 +83,8 @@ class Mail_mock extends Mail { * postSendCallback Called after an email would have been sent. * * @param array Hash containing any parameters. - * @access public */ - function Mail_mock($params) + public function __construct($params) { if (isset($params['preSendCallback']) && is_callable($params['preSendCallback'])) { @@ -120,9 +120,8 @@ function Mail_mock($params) * @return mixed Returns true on success, or a PEAR_Error * containing a descriptive error message on * failure. - * @access public */ - function send($recipients, $headers, $body) + public function send($recipients, $headers, $body) { if ($this->_preSendCallback) { call_user_func_array($this->_preSendCallback, diff --git a/lib/composer/vendor/pear/mail/Mail/null.php b/lib/composer/vendor/pear/mail/Mail/null.php new file mode 100644 index 000000000..5e3ecb6f9 --- /dev/null +++ b/lib/composer/vendor/pear/mail/Mail/null.php @@ -0,0 +1,85 @@ + + * @copyright 2010-2017 Phil Kernick + * @license http://opensource.org/licenses/BSD-3-Clause New BSD License + * @version CVS: $Id$ + * @link http://pear.php.net/package/Mail/ + */ + +/** + * Null implementation of the PEAR Mail:: interface. + * @access public + * @package Mail + * @version $Revision$ + */ +class Mail_null extends Mail { + + /** + * Implements Mail_null::send() function. Silently discards all + * mail. + * + * @param mixed $recipients Either a comma-seperated list of recipients + * (RFC822 compliant), or an array of recipients, + * each RFC822 valid. This may contain recipients not + * specified in the headers, for Bcc:, resending + * messages, etc. + * + * @param array $headers The array of headers to send with the mail, in an + * associative array, where the array key is the + * header name (ie, 'Subject'), and the array value + * is the header value (ie, 'test'). The header + * produced from those values would be 'Subject: + * test'. + * + * @param string $body The full text of the message body, including any + * Mime parts, etc. + * + * @return mixed Returns true on success, or a PEAR_Error + * containing a descriptive error message on + * failure. + */ + public function send($recipients, $headers, $body) + { + return true; + } + +} diff --git a/lib/composer/vendor/pear/mail/Mail/sendmail.php b/lib/composer/vendor/pear/mail/Mail/sendmail.php new file mode 100644 index 000000000..7e8f8048c --- /dev/null +++ b/lib/composer/vendor/pear/mail/Mail/sendmail.php @@ -0,0 +1,199 @@ + + * @author Chuck Hagenbuch + * @copyright 2010-2017 Chuck Hagenbuch + * @license http://opensource.org/licenses/BSD-3-Clause New BSD License + * @version CVS: $Id$ + * @link http://pear.php.net/package/Mail/ + */ + +/** + * Sendmail implementation of the PEAR Mail:: interface. + * @access public + * @package Mail + * @version $Revision$ + */ +class Mail_sendmail extends Mail { + + /** + * The location of the sendmail or sendmail wrapper binary on the + * filesystem. + * @var string + */ + var $sendmail_path = '/usr/sbin/sendmail'; + + /** + * Any extra command-line parameters to pass to the sendmail or + * sendmail wrapper binary. + * @var string + */ + var $sendmail_args = '-i'; + + /** + * Constructor. + * + * Instantiates a new Mail_sendmail:: object based on the parameters + * passed in. It looks for the following parameters: + * sendmail_path The location of the sendmail binary on the + * filesystem. Defaults to '/usr/sbin/sendmail'. + * + * sendmail_args Any extra parameters to pass to the sendmail + * or sendmail wrapper binary. + * + * If a parameter is present in the $params array, it replaces the + * default. + * + * @param array $params Hash containing any parameters different from the + * defaults. + */ + public function __construct($params) + { + if (isset($params['sendmail_path'])) { + $this->sendmail_path = $params['sendmail_path']; + } + if (isset($params['sendmail_args'])) { + $this->sendmail_args = $params['sendmail_args']; + } + + /* + * Because we need to pass message headers to the sendmail program on + * the commandline, we can't guarantee the use of the standard "\r\n" + * separator. Instead, we use the system's native line separator. + */ + if (defined('PHP_EOL')) { + $this->sep = PHP_EOL; + } else { + $this->sep = (strpos(PHP_OS, 'WIN') === false) ? "\n" : "\r\n"; + } + } + + /** + * Implements Mail::send() function using the sendmail + * command-line binary. + * + * @param mixed $recipients Either a comma-seperated list of recipients + * (RFC822 compliant), or an array of recipients, + * each RFC822 valid. This may contain recipients not + * specified in the headers, for Bcc:, resending + * messages, etc. + * + * @param array $headers The array of headers to send with the mail, in an + * associative array, where the array key is the + * header name (ie, 'Subject'), and the array value + * is the header value (ie, 'test'). The header + * produced from those values would be 'Subject: + * test'. + * + * @param string $body The full text of the message body, including any + * Mime parts, etc. + * + * @return mixed Returns true on success, or a PEAR_Error + * containing a descriptive error message on + * failure. + */ + public function send($recipients, $headers, $body) + { + if (!is_array($headers)) { + return PEAR::raiseError('$headers must be an array'); + } + + $result = $this->_sanitizeHeaders($headers); + if (is_a($result, 'PEAR_Error')) { + return $result; + } + + $recipients = $this->parseRecipients($recipients); + if (is_a($recipients, 'PEAR_Error')) { + return $recipients; + } + $recipients = implode(' ', array_map('escapeshellarg', $recipients)); + + $headerElements = $this->prepareHeaders($headers); + if (is_a($headerElements, 'PEAR_Error')) { + return $headerElements; + } + list($from, $text_headers) = $headerElements; + + /* Since few MTAs are going to allow this header to be forged + * unless it's in the MAIL FROM: exchange, we'll use + * Return-Path instead of From: if it's set. */ + if (!empty($headers['Return-Path'])) { + $from = $headers['Return-Path']; + } + + if (!isset($from)) { + return PEAR::raiseError('No from address given.'); + } elseif (strpos($from, ' ') !== false || + strpos($from, ';') !== false || + strpos($from, '&') !== false || + strpos($from, '`') !== false) { + return PEAR::raiseError('From address specified with dangerous characters.'); + } + + $from = escapeshellarg($from); // Security bug #16200 + + $mail = @popen($this->sendmail_path . (!empty($this->sendmail_args) ? ' ' . $this->sendmail_args : '') . " -f$from -- $recipients", 'w'); + if (!$mail) { + return PEAR::raiseError('Failed to open sendmail [' . $this->sendmail_path . '] for execution.'); + } + + // Write the headers following by two newlines: one to end the headers + // section and a second to separate the headers block from the body. + fputs($mail, $text_headers . $this->sep . $this->sep); + + fputs($mail, $body); + $result = pclose($mail); + if (version_compare(phpversion(), '4.2.3') == -1) { + // With older php versions, we need to shift the pclose + // result to get the exit code. + $result = $result >> 8 & 0xFF; + } + + if ($result != 0) { + return PEAR::raiseError('sendmail returned error code ' . $result, + $result); + } + + return true; + } + +} diff --git a/lib/Mail/smtp.php b/lib/composer/vendor/pear/mail/Mail/smtp.php similarity index 84% rename from lib/Mail/smtp.php rename to lib/composer/vendor/pear/mail/Mail/smtp.php index 52ea60208..5e698feee 100644 --- a/lib/Mail/smtp.php +++ b/lib/composer/vendor/pear/mail/Mail/smtp.php @@ -2,31 +2,33 @@ /** * SMTP implementation of the PEAR Mail interface. Requires the Net_SMTP class. * - * PHP versions 4 and 5 + * PHP version 5 * * LICENSE: * - * Copyright (c) 2010, Chuck Hagenbuch + * Copyright (c) 2010-2017, Chuck Hagenbuch & Jon Parise * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * - * o Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * o Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * o The names of the authors may not be used to endorse or promote - * products derived from this software without specific prior written - * permission. + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY @@ -38,9 +40,9 @@ * @package HTTP_Request * @author Jon Parise * @author Chuck Hagenbuch - * @copyright 2010 Chuck Hagenbuch - * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version CVS: $Id: smtp.php 294747 2010-02-08 08:18:33Z clockwerx $ + * @copyright 2010-2017 Chuck Hagenbuch + * @license http://opensource.org/licenses/BSD-3-Clause New BSD License + * @version CVS: $Id$ * @link http://pear.php.net/package/Mail/ */ @@ -69,7 +71,7 @@ * SMTP implementation of the PEAR Mail interface. Requires the Net_SMTP class. * @access public * @package Mail - * @version $Revision: 294747 $ + * @version $Revision$ */ class Mail_smtp extends Mail { @@ -84,18 +86,21 @@ class Mail_smtp extends Mail { /** * The list of service extension parameters to pass to the Net_SMTP * mailFrom() command. + * * @var array */ var $_extparams = array(); /** * The SMTP host to connect to. + * * @var string */ var $host = 'localhost'; /** * The port the SMTP server is on. + * * @var integer */ var $port = 25; @@ -115,12 +120,14 @@ class Mail_smtp extends Mail { /** * The username to use if the SMTP server requires authentication. + * * @var string */ var $username = ''; /** * The password to use if the SMTP server requires authentication. + * * @var string */ var $password = ''; @@ -159,10 +166,18 @@ class Mail_smtp extends Mail { * Use SMTP command pipelining (specified in RFC 2920) if the SMTP server * supports it. This speeds up delivery over high-latency connections. By * default, use the default value supplied by Net_SMTP. - * @var bool + * + * @var boolean */ var $pipelining; + /** + * The list of socket options + * + * @var array + */ + var $socket_options = array(); + /** * Constructor. * @@ -186,9 +201,8 @@ class Mail_smtp extends Mail { * * @param array Hash containing any parameters different from the * defaults. - * @access public */ - function Mail_smtp($params) + public function __construct($params) { if (isset($params['host'])) $this->host = $params['host']; if (isset($params['port'])) $this->port = $params['port']; @@ -200,20 +214,18 @@ function Mail_smtp($params) if (isset($params['debug'])) $this->debug = (bool)$params['debug']; if (isset($params['persist'])) $this->persist = (bool)$params['persist']; if (isset($params['pipelining'])) $this->pipelining = (bool)$params['pipelining']; - + if (isset($params['socket_options'])) $this->socket_options = $params['socket_options']; // Deprecated options if (isset($params['verp'])) { $this->addServiceExtensionParameter('XVERP', is_bool($params['verp']) ? null : $params['verp']); } - - register_shutdown_function(array(&$this, '_Mail_smtp')); } /** * Destructor implementation to ensure that we disconnect from any * potentially-alive persistent SMTP connections. */ - function _Mail_smtp() + public function __destruct() { $this->disconnect(); } @@ -240,12 +252,23 @@ function _Mail_smtp() * @return mixed Returns true on success, or a PEAR_Error * containing a descriptive error message on * failure. - * @access public */ - function send($recipients, $headers, $body) + public function send($recipients, $headers, $body) + { + $result = $this->send_or_fail($recipients, $headers, $body); + + /* If persistent connections are disabled, destroy our SMTP object. */ + if ($this->persist === false) { + $this->disconnect(); + } + + return $result; + } + + protected function send_or_fail($recipients, $headers, $body) { /* If we don't already have an SMTP object, create one. */ - $result = &$this->getSMTPObject(); + $result = $this->getSMTPObject(); if (PEAR::isError($result)) { return $result; } @@ -304,16 +327,16 @@ function send($recipients, $headers, $body) } /* Send the message's headers and the body as SMTP data. */ - $res = $this->_smtp->data($textHeaders . "\r\n\r\n" . $body); - list(,$args) = $this->_smtp->getResponse(); + $res = $this->_smtp->data($body, $textHeaders); + list(,$args) = $this->_smtp->getResponse(); - if (preg_match("/Ok: queued as (.*)/", $args, $queued)) { - $this->queued_as = $queued[1]; - } + if (preg_match("/ queued as (.*)/", $args, $queued)) { + $this->queued_as = $queued[1]; + } - /* we need the greeting; from it we can extract the authorative name of the mail server we've really connected to. - * ideal if we're connecting to a round-robin of relay servers and need to track which exact one took the email */ - $this->greeting = $this->_smtp->getGreeting(); + /* we need the greeting; from it we can extract the authorative name of the mail server we've really connected to. + * ideal if we're connecting to a round-robin of relay servers and need to track which exact one took the email */ + $this->greeting = $this->_smtp->getGreeting(); if (is_a($res, 'PEAR_Error')) { $error = $this->_error('Failed to send data', $res); @@ -321,11 +344,6 @@ function send($recipients, $headers, $body) return PEAR::raiseError($error, PEAR_MAIL_SMTP_ERROR_DATA); } - /* If persistent connections are disabled, destroy our SMTP object. */ - if ($this->persist === false) { - $this->disconnect(); - } - return true; } @@ -337,18 +355,20 @@ function send($recipients, $headers, $body) * failure. * * @since 1.2.0 - * @access public */ - function &getSMTPObject() + public function getSMTPObject() { if (is_object($this->_smtp) !== false) { return $this->_smtp; } include_once 'Net/SMTP.php'; - $this->_smtp = &new Net_SMTP($this->host, + $this->_smtp = new Net_SMTP($this->host, $this->port, - $this->localhost); + $this->localhost, + $this->pipelining, + 0, + $this->socket_options); /* If we still don't have an SMTP object at this point, fail. */ if (is_object($this->_smtp) === false) { @@ -393,9 +413,8 @@ function &getSMTPObject() * @param string Any value the keyword needs. * * @since 1.2.0 - * @access public */ - function addServiceExtensionParameter($keyword, $value = null) + public function addServiceExtensionParameter($keyword, $value = null) { $this->_extparams[$keyword] = $value; } @@ -406,9 +425,8 @@ function addServiceExtensionParameter($keyword, $value = null) * @return boolean True if the SMTP connection no longer exists. * * @since 1.1.9 - * @access public */ - function disconnect() + public function disconnect() { /* If we have an SMTP object, disconnect and destroy it. */ if (is_object($this->_smtp) && $this->_smtp->disconnect()) { @@ -428,9 +446,8 @@ function disconnect() * @return string A string describing the current SMTP error. * * @since 1.1.7 - * @access private */ - function _error($text, &$error) + protected function _error($text, $error) { /* Split the SMTP response into a code and a response string. */ list($code, $response) = $this->_smtp->getResponse(); diff --git a/lib/Mail/smtpmx.php b/lib/composer/vendor/pear/mail/Mail/smtpmx.php similarity index 93% rename from lib/Mail/smtpmx.php rename to lib/composer/vendor/pear/mail/Mail/smtpmx.php index f0b694086..e26db1be8 100644 --- a/lib/Mail/smtpmx.php +++ b/lib/composer/vendor/pear/mail/Mail/smtpmx.php @@ -1,4 +1,4 @@ - - * @copyright 2010 gERD Schaufelberger - * @license http://opensource.org/licenses/bsd-license.php New BSD License - * @version CVS: $Id: smtpmx.php 294747 2010-02-08 08:18:33Z clockwerx $ + * @copyright 2010-2017 gERD Schaufelberger + * @license http://opensource.org/licenses/BSD-3-Clause New BSD License + * @version CVS: $Id$ * @link http://pear.php.net/package/Mail/ */ @@ -56,7 +58,7 @@ * @access public * @author gERD Schaufelberger * @package Mail - * @version $Revision: 294747 $ + * @version $Revision$ */ class Mail_smtpmx extends Mail { @@ -386,7 +388,7 @@ function send($recipients, $headers, $body) } // Send data - $res = $this->_smtp->data("$textHeaders\r\n$body"); + $res = $this->_smtp->data($body, $textHeaders); if (is_a($res, 'PEAR_Error')) { $info = array('rcpt' => $rcpt); return $this->_raiseError('failed_send_data', $info); diff --git a/lib/composer/vendor/pear/mail/README.rst b/lib/composer/vendor/pear/mail/README.rst new file mode 100644 index 000000000..9697e631d --- /dev/null +++ b/lib/composer/vendor/pear/mail/README.rst @@ -0,0 +1,53 @@ +**** +Mail +**** +Class that provides multiple interfaces for sending emails. + +PEAR's Mail package defines an interface for implementing mailers under the +PEAR hierarchy. +It also provides supporting functions useful to multiple mailer backends. + +Currently supported backends include: + +- PHP's native ``mail()`` function +- sendmail +- SMTP + +This package also provides a `RFC 822`__ email address list validation utility class. + +Use Mail in combination with `Mail_Mime`__ to send HTML emails or emails with +attachments - have a look at the example__. + +__ https://tools.ietf.org/html/rfc822 +__ http://pear.php.net/package/Mail_Mime +__ http://pear.php.net/manual/en/package.mail.mail-mime.example.php + +============ +Installation +============ + +PEAR +==== +:: + + $ pear install mail + +Composer +======== +:: + + $ composer require pear/mail + +===== +Links +===== +Homepage + http://pear.php.net/package/Mail +Source code + https://github.com/pear/Mail +Issue tracker + http://pear.php.net/bugs/search.php?cmd=display&package_name[]=Mail +Unit test status + https://travis-ci.org/pear/Mail +Packagist + https://packagist.org/packages/pear/mail diff --git a/lib/composer/vendor/pear/mail/composer.json b/lib/composer/vendor/pear/mail/composer.json new file mode 100644 index 000000000..a167cc666 --- /dev/null +++ b/lib/composer/vendor/pear/mail/composer.json @@ -0,0 +1,46 @@ +{ + "authors": [ + { + "email": "chuck@horde.org", + "name": "Chuck Hagenbuch", + "role": "Lead" + }, + { + "email": "richard@phpguru.org", + "name": "Richard Heyes", + "role": "Developer" + }, + { + "email": "alec@alec.pl", + "name": "Aleksander Machniak", + "role": "Developer" + } + ], + "autoload": { + "psr-0": { + "Mail": "./" + } + }, + "description": "Class that provides multiple interfaces for sending emails.", + "homepage": "http://pear.php.net/package/Mail", + "include-path": [ + "./" + ], + "license": "BSD-2-Clause", + "name": "pear/mail", + "support": { + "issues": "http://pear.php.net/bugs/search.php?cmd=display&package_name[]=Mail", + "source": "https://github.com/pear/Mail" + }, + "type": "library", + "require": { + "php": ">=5.2.1", + "pear/pear-core-minimal": "~1.9" + }, + "require-dev": { + "pear/pear": "*" + }, + "suggest": { + "pear/net_smtp": "Install optionally via your project's composer.json" + } +} diff --git a/lib/composer/vendor/pear/mail/package.xml b/lib/composer/vendor/pear/mail/package.xml new file mode 100644 index 000000000..d08c12c68 --- /dev/null +++ b/lib/composer/vendor/pear/mail/package.xml @@ -0,0 +1,79 @@ + + + Mail + pear.php.net + Class that provides multiple interfaces for sending emails + PEAR's Mail package defines an interface for implementing mailers under the PEAR hierarchy. It also provides supporting functions useful to multiple mailer backends. Currently supported backends include: PHP's native mail() function, sendmail, and SMTP. This package also provides a RFC822 email address list validation utility class. + + Chuck Hagenbuch + chagenbu + chuck@horde.org + no + + + Richard Heyes + richard + richard@phpguru.org + no + + + Aleksander Machniak + alec + alec@alec.pl + yes + + 2017-04-11 + + 1.4.1 + 1.3.0 + + + stable + stable + + New BSD License + +* Loosen recognition of "queued as" server response (PR #10) + +* Bug #20463: domain-literal parsing error +* Bug #20513: Mail_smtp::send() doesn't close socket for smtp connection + + + + + + + + + + + + + + + + + + + + + + + + + 5.2.1 + + + 1.5.6 + + + + + Net_SMTP + pear.php.net + 1.4.1 + + + + + diff --git a/lib/composer/vendor/pear/mail/tests/13659.phpt b/lib/composer/vendor/pear/mail/tests/13659.phpt new file mode 100644 index 000000000..0b57a72d8 --- /dev/null +++ b/lib/composer/vendor/pear/mail/tests/13659.phpt @@ -0,0 +1,25 @@ +--TEST-- +Mail: Test for bug #13659 +--FILE-- + (test)'; +$parser = new Mail_RFC822(); +$result = $parser->parseAddressList($address, 'anydomain.com', TRUE); + +if (!PEAR::isError($result) && is_array($result) && is_object($result[0])) + if ($result[0]->personal == '"Test Student"' && + $result[0]->mailbox == "test" && + $result[0]->host == "mydomain.com" && + is_array($result[0]->comment) && $result[0]->comment[0] == 'test') + { + print("OK"); + } + + +?> +--EXPECT-- +OK diff --git a/lib/composer/vendor/pear/mail/tests/9137.phpt b/lib/composer/vendor/pear/mail/tests/9137.phpt new file mode 100644 index 000000000..ba54c0567 --- /dev/null +++ b/lib/composer/vendor/pear/mail/tests/9137.phpt @@ -0,0 +1,33 @@ +--TEST-- +Mail: Test for bug #9137 +--FILE-- + 'John Doe', 'email' => 'test@example.com'), + array('name' => 'John Doe\\', 'email' => 'test@example.com'), + array('name' => 'John "Doe', 'email' => 'test@example.com'), + array('name' => 'John "Doe\\', 'email' => 'test@example.com'), +); + +for ($i = 0; $i < count($addresses); $i++) { + // construct the address + $address = "\"" . addslashes($addresses[$i]['name']) . "\" ". + "<".$addresses[$i]['email'].">"; + + $parsedAddresses = Mail_RFC822::parseAddressList($address); + if (is_a($parsedAddresses, 'PEAR_Error')) { + echo $address." :: Failed to validate\n"; + } else { + echo $address." :: Parsed\n"; + } +} + +--EXPECT-- +"John Doe" :: Parsed +"John Doe\\" :: Parsed +"John \"Doe" :: Parsed +"John \"Doe\\" :: Parsed diff --git a/lib/composer/vendor/pear/mail/tests/9137_2.phpt b/lib/composer/vendor/pear/mail/tests/9137_2.phpt new file mode 100644 index 000000000..cc9dcbcec --- /dev/null +++ b/lib/composer/vendor/pear/mail/tests/9137_2.phpt @@ -0,0 +1,35 @@ +--TEST-- +Mail: Test for bug #9137, take 2 +--FILE-- + '"John Doe" '), + array('raw' => '"John Doe' . chr(92) . '" '), + array('raw' => '"John Doe' . chr(92) . chr(92) . '" '), + array('raw' => '"John Doe' . chr(92) . chr(92) . chr(92) . '" '), + array('raw' => '"John Doe' . chr(92) . chr(92) . chr(92) . chr(92) . '" '), + array('raw' => '"John Doe '), +); + +for ($i = 0; $i < count($addresses); $i++) { + // construct the address + $address = $addresses[$i]['raw']; + $parsedAddresses = Mail_RFC822::parseAddressList($address); + if (PEAR::isError($parsedAddresses)) { + echo $address." :: Failed to validate\n"; + } else { + echo $address." :: Parsed\n"; + } +} + +--EXPECT-- +"John Doe" :: Parsed +"John Doe\" :: Failed to validate +"John Doe\\" :: Parsed +"John Doe\\\" :: Failed to validate +"John Doe\\\\" :: Parsed +"John Doe :: Failed to validate diff --git a/lib/composer/vendor/pear/mail/tests/Makefile b/lib/composer/vendor/pear/mail/tests/Makefile new file mode 100644 index 000000000..bb6b1be4c --- /dev/null +++ b/lib/composer/vendor/pear/mail/tests/Makefile @@ -0,0 +1,8 @@ + +clean: + rm -f *.log *.php *.diff *.exp *.out + + + +test: + cd .. && pear run-tests tests/*.phpt && cd tests; diff --git a/lib/composer/vendor/pear/mail/tests/bug17178.phpt b/lib/composer/vendor/pear/mail/tests/bug17178.phpt new file mode 100755 index 000000000..4572dda1c --- /dev/null +++ b/lib/composer/vendor/pear/mail/tests/bug17178.phpt @@ -0,0 +1,11 @@ +--TEST-- +Mail_RFC822::parseAddressList does not accept RFC-valid group syntax +--FILE-- +parseAddressList($address, null, true, true)); + +/* Address groups. */ +$address = 'My Group: "Richard" (A comment), ted@example.com (Ted Bloggs), Barney;'; +print_r($parser->parseAddressList($address, null, true, true)); + +/* A valid address with spaces in the local part. */ +$address = '<"Jon Parise"@php.net>'; +print_r($parser->parseAddressList($address, null, true, true)); + +/* An invalid address with spaces in the local part. */ +$address = ''; +$result = $parser->parseAddressList($address, null, true, true); +if (is_a($result, 'PEAR_Error')) echo $result->getMessage() . "\n"; + +/* A valid address with an uncommon TLD. */ +$address = 'jon@host.longtld'; +$result = $parser->parseAddressList($address, null, true, true); +if (is_a($result, 'PEAR_Error')) echo $result->getMessage() . "\n"; + +--EXPECT-- +Array +( + [0] => stdClass Object + ( + [personal] => + [comment] => Array + ( + ) + + [mailbox] => user + [host] => example.com + ) + +) +Array +( + [0] => stdClass Object + ( + [groupname] => My Group + [addresses] => Array + ( + [0] => stdClass Object + ( + [personal] => "Richard" + [comment] => Array + ( + [0] => A comment + ) + + [mailbox] => richard + [host] => localhost + ) + + [1] => stdClass Object + ( + [personal] => + [comment] => Array + ( + [0] => Ted Bloggs + ) + + [mailbox] => ted + [host] => example.com + ) + + [2] => stdClass Object + ( + [personal] => + [comment] => Array + ( + ) + + [mailbox] => Barney + [host] => localhost + ) + + ) + + ) + +) +Array +( + [0] => stdClass Object + ( + [personal] => + [comment] => Array + ( + ) + + [mailbox] => "Jon Parise" + [host] => php.net + ) + +) +Validation failed for: diff --git a/lib/composer/vendor/pear/mail/tests/smtp_error.phpt b/lib/composer/vendor/pear/mail/tests/smtp_error.phpt new file mode 100644 index 000000000..4e8e5a6ab --- /dev/null +++ b/lib/composer/vendor/pear/mail/tests/smtp_error.phpt @@ -0,0 +1,30 @@ +--TEST-- +Mail: SMTP Error Reporting +--SKIPIF-- +packageExists('Net_SMTP')) die("skip\n"); +--FILE-- + 'bogus.host.tld'); + +/* Create our SMTP-based mailer object. */ +$mailer = Mail::factory('smtp', $params); + +/* Attempt to send an empty message in order to trigger an error. */ +$e = $mailer->send(array(), array(), ''); +if (is_a($e, 'PEAR_Error')) { + $err = $e->getMessage(); + if (preg_match('/Failed to connect to bogus.host.tld:25 \[SMTP: Failed to connect socket:.*/i', $err)) { + echo "OK"; + } +} + +--EXPECT-- +OK \ No newline at end of file diff --git a/lib/composer/vendor/pear/mail/tests/validateQuotedString.php b/lib/composer/vendor/pear/mail/tests/validateQuotedString.php new file mode 100644 index 000000000..bc9a8f4bf --- /dev/null +++ b/lib/composer/vendor/pear/mail/tests/validateQuotedString.php @@ -0,0 +1,17 @@ +, postmaster@example.com, root'; +// $address_string = "Joe Doe from Somewhere , postmaster@example.com, root"; +echo $address_string . "\n"; + +$address_array = Mail_RFC822::parseAddressList($address_string, "example.com"); +if (!is_array($address_array) || count($address_array) < 1) { + die("something is wrong\n"); +} + +foreach ($address_array as $val) { + echo "mailbox : " . $val->mailbox . "\n"; + echo "host : " . $val->host . "\n"; + echo "personal: " . $val->personal . "\n"; +} +print_r($address_array); diff --git a/lib/composer/vendor/pear/net_smtp/.gitignore b/lib/composer/vendor/pear/net_smtp/.gitignore new file mode 100644 index 000000000..d6a279e8f --- /dev/null +++ b/lib/composer/vendor/pear/net_smtp/.gitignore @@ -0,0 +1,15 @@ +.DS_Store +Net_SMTP-*.tgz + +# Tests +run-tests.log +/tests/*.diff +/tests/*.exp +/tests/*.log +/tests/*.out +/tests/config.php + +# composer related +composer.lock +composer.phar +vendor diff --git a/lib/composer/vendor/pear/net_smtp/.travis.yml b/lib/composer/vendor/pear/net_smtp/.travis.yml new file mode 100644 index 000000000..59943a133 --- /dev/null +++ b/lib/composer/vendor/pear/net_smtp/.travis.yml @@ -0,0 +1,11 @@ +language: php +install: + - pear install package.xml +php: + - 5.4 + - 5.5 + - 5.6 + - 7.0 + - 7.1 + - nightly +script: pear run-tests -d tests/ diff --git a/lib/composer/vendor/pear/net_smtp/LICENSE b/lib/composer/vendor/pear/net_smtp/LICENSE new file mode 100644 index 000000000..539591ccd --- /dev/null +++ b/lib/composer/vendor/pear/net_smtp/LICENSE @@ -0,0 +1,69 @@ +-------------------------------------------------------------------- + The PHP License, version 3.01 + Copyright (c) 2002-2015 Jon Parise and Chuck Hagenbuch. + All rights reserved. +-------------------------------------------------------------------- + +Redistribution and use in source and binary forms, with or without +modification, is permitted provided that the following conditions +are met: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + 3. The name "PHP" must not be used to endorse or promote products + derived from this software without prior written permission. For + written permission, please contact group@php.net. + + 4. Products derived from this software may not be called "PHP", nor + may "PHP" appear in their name, without prior written permission + from group@php.net. You may indicate that your software works in + conjunction with PHP by saying "Foo for PHP" instead of calling + it "PHP Foo" or "phpfoo" + + 5. The PHP Group may publish revised and/or new versions of the + license from time to time. Each version will be given a + distinguishing version number. + Once covered code has been published under a particular version + of the license, you may always continue to use it under the terms + of that version. You may also choose to use such covered code + under the terms of any subsequent version of the license + published by the PHP Group. No one other than the PHP Group has + the right to modify the terms applicable to covered code created + under this License. + + 6. Redistributions of any form whatsoever must retain the following + acknowledgment: + "This product includes PHP software, freely available from + ". + +THIS SOFTWARE IS PROVIDED BY THE PHP DEVELOPMENT TEAM ``AS IS'' AND +ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE PHP +DEVELOPMENT TEAM OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +OF THE POSSIBILITY OF SUCH DAMAGE. + +-------------------------------------------------------------------- + +This software consists of voluntary contributions made by many +individuals on behalf of the PHP Group. + +The PHP Group can be contacted via Email at group@php.net. + +For more information on the PHP Group and the PHP project, +please see . + +PHP includes the Zend Engine, freely available at +. diff --git a/lib/composer/vendor/pear/net_smtp/Net/SMTP.php b/lib/composer/vendor/pear/net_smtp/Net/SMTP.php new file mode 100644 index 000000000..5593343ac --- /dev/null +++ b/lib/composer/vendor/pear/net_smtp/Net/SMTP.php @@ -0,0 +1,1256 @@ + | +// | Jon Parise | +// | Damian Alejandro Fernandez Sosa | +// +----------------------------------------------------------------------+ + +require_once 'PEAR.php'; +require_once 'Net/Socket.php'; + +/** + * Provides an implementation of the SMTP protocol using PEAR's + * Net_Socket class. + * + * @package Net_SMTP + * @author Chuck Hagenbuch + * @author Jon Parise + * @author Damian Alejandro Fernandez Sosa + * + * @example basic.php A basic implementation of the Net_SMTP package. + */ +class Net_SMTP +{ + /** + * The server to connect to. + * @var string + */ + public $host = 'localhost'; + + /** + * The port to connect to. + * @var int + */ + public $port = 25; + + /** + * The value to give when sending EHLO or HELO. + * @var string + */ + public $localhost = 'localhost'; + + /** + * List of supported authentication methods, in preferential order. + * @var array + */ + public $auth_methods = array(); + + /** + * Use SMTP command pipelining (specified in RFC 2920) if the SMTP + * server supports it. + * + * When pipeling is enabled, rcptTo(), mailFrom(), sendFrom(), + * somlFrom() and samlFrom() do not wait for a response from the + * SMTP server but return immediately. + * + * @var bool + */ + public $pipelining = false; + + /** + * Number of pipelined commands. + * @var int + */ + protected $pipelined_commands = 0; + + /** + * Should debugging output be enabled? + * @var boolean + */ + protected $debug = false; + + /** + * Debug output handler. + * @var callback + */ + protected $debug_handler = null; + + /** + * The socket resource being used to connect to the SMTP server. + * @var resource + */ + protected $socket = null; + + /** + * Array of socket options that will be passed to Net_Socket::connect(). + * @see stream_context_create() + * @var array + */ + protected $socket_options = null; + + /** + * The socket I/O timeout value in seconds. + * @var int + */ + protected $timeout = 0; + + /** + * The most recent server response code. + * @var int + */ + protected $code = -1; + + /** + * The most recent server response arguments. + * @var array + */ + protected $arguments = array(); + + /** + * Stores the SMTP server's greeting string. + * @var string + */ + protected $greeting = null; + + /** + * Stores detected features of the SMTP server. + * @var array + */ + protected $esmtp = array(); + + /** + * Instantiates a new Net_SMTP object, overriding any defaults + * with parameters that are passed in. + * + * If you have SSL support in PHP, you can connect to a server + * over SSL using an 'ssl://' prefix: + * + * // 465 is a common smtps port. + * $smtp = new Net_SMTP('ssl://mail.host.com', 465); + * $smtp->connect(); + * + * @param string $host The server to connect to. + * @param integer $port The port to connect to. + * @param string $localhost The value to give when sending EHLO or HELO. + * @param boolean $pipelining Use SMTP command pipelining + * @param integer $timeout Socket I/O timeout in seconds. + * @param array $socket_options Socket stream_context_create() options. + * + * @since 1.0 + */ + public function __construct($host = null, $port = null, $localhost = null, + $pipelining = false, $timeout = 0, $socket_options = null + ) { + if (isset($host)) { + $this->host = $host; + } + if (isset($port)) { + $this->port = $port; + } + if (isset($localhost)) { + $this->localhost = $localhost; + } + + $this->pipelining = $pipelining; + $this->socket = new Net_Socket(); + $this->socket_options = $socket_options; + $this->timeout = $timeout; + + /* Include the Auth_SASL package. If the package is available, we + * enable the authentication methods that depend upon it. */ + if (@include_once 'Auth/SASL.php') { + $this->setAuthMethod('CRAM-MD5', array($this, 'authCramMD5')); + $this->setAuthMethod('DIGEST-MD5', array($this, 'authDigestMD5')); + } + + /* These standard authentication methods are always available. */ + $this->setAuthMethod('LOGIN', array($this, 'authLogin'), false); + $this->setAuthMethod('PLAIN', array($this, 'authPlain'), false); + } + + /** + * Set the socket I/O timeout value in seconds plus microseconds. + * + * @param integer $seconds Timeout value in seconds. + * @param integer $microseconds Additional value in microseconds. + * + * @since 1.5.0 + */ + public function setTimeout($seconds, $microseconds = 0) + { + return $this->socket->setTimeout($seconds, $microseconds); + } + + /** + * Set the value of the debugging flag. + * + * @param boolean $debug New value for the debugging flag. + * @param callback $handler Debug handler callback + * + * @since 1.1.0 + */ + public function setDebug($debug, $handler = null) + { + $this->debug = $debug; + $this->debug_handler = $handler; + } + + /** + * Write the given debug text to the current debug output handler. + * + * @param string $message Debug mesage text. + * + * @since 1.3.3 + */ + protected function debug($message) + { + if ($this->debug) { + if ($this->debug_handler) { + call_user_func_array( + $this->debug_handler, array(&$this, $message) + ); + } else { + echo "DEBUG: $message\n"; + } + } + } + + /** + * Send the given string of data to the server. + * + * @param string $data The string of data to send. + * + * @return mixed The number of bytes that were actually written, + * or a PEAR_Error object on failure. + * + * @since 1.1.0 + */ + protected function send($data) + { + $this->debug("Send: $data"); + + $result = $this->socket->write($data); + if (!$result || PEAR::isError($result)) { + $msg = $result ? $result->getMessage() : "unknown error"; + return PEAR::raiseError("Failed to write to socket: $msg"); + } + + return $result; + } + + /** + * Send a command to the server with an optional string of + * arguments. A carriage return / linefeed (CRLF) sequence will + * be appended to each command string before it is sent to the + * SMTP server - an error will be thrown if the command string + * already contains any newline characters. Use send() for + * commands that must contain newlines. + * + * @param string $command The SMTP command to send to the server. + * @param string $args A string of optional arguments to append + * to the command. + * + * @return mixed The result of the send() call. + * + * @since 1.1.0 + */ + protected function put($command, $args = '') + { + if (!empty($args)) { + $command .= ' ' . $args; + } + + if (strcspn($command, "\r\n") !== strlen($command)) { + return PEAR::raiseError('Commands cannot contain newlines'); + } + + return $this->send($command . "\r\n"); + } + + /** + * Read a reply from the SMTP server. The reply consists of a response + * code and a response message. + * + * @param mixed $valid The set of valid response codes. These + * may be specified as an array of integer + * values or as a single integer value. + * @param bool $later Do not parse the response now, but wait + * until the last command in the pipelined + * command group + * + * @return mixed True if the server returned a valid response code or + * a PEAR_Error object is an error condition is reached. + * + * @since 1.1.0 + * + * @see getResponse + */ + protected function parseResponse($valid, $later = false) + { + $this->code = -1; + $this->arguments = array(); + + if ($later) { + $this->pipelined_commands++; + return true; + } + + for ($i = 0; $i <= $this->pipelined_commands; $i++) { + while ($line = $this->socket->readLine()) { + $this->debug("Recv: $line"); + + /* If we receive an empty line, the connection was closed. */ + if (empty($line)) { + $this->disconnect(); + return PEAR::raiseError('Connection was closed'); + } + + /* Read the code and store the rest in the arguments array. */ + $code = substr($line, 0, 3); + $this->arguments[] = trim(substr($line, 4)); + + /* Check the syntax of the response code. */ + if (is_numeric($code)) { + $this->code = (int)$code; + } else { + $this->code = -1; + break; + } + + /* If this is not a multiline response, we're done. */ + if (substr($line, 3, 1) != '-') { + break; + } + } + } + + $this->pipelined_commands = 0; + + /* Compare the server's response code with the valid code/codes. */ + if (is_int($valid) && ($this->code === $valid)) { + return true; + } elseif (is_array($valid) && in_array($this->code, $valid, true)) { + return true; + } + + return PEAR::raiseError('Invalid response code received from server', $this->code); + } + + /** + * Issue an SMTP command and verify its response. + * + * @param string $command The SMTP command string or data. + * @param mixed $valid The set of valid response codes. These + * may be specified as an array of integer + * values or as a single integer value. + * + * @return mixed True on success or a PEAR_Error object on failure. + * + * @since 1.6.0 + */ + public function command($command, $valid) + { + if (PEAR::isError($error = $this->put($command))) { + return $error; + } + if (PEAR::isError($error = $this->parseResponse($valid))) { + return $error; + } + + return true; + } + + /** + * Return a 2-tuple containing the last response from the SMTP server. + * + * @return array A two-element array: the first element contains the + * response code as an integer and the second element + * contains the response's arguments as a string. + * + * @since 1.1.0 + */ + public function getResponse() + { + return array($this->code, join("\n", $this->arguments)); + } + + /** + * Return the SMTP server's greeting string. + * + * @return string A string containing the greeting string, or null if + * a greeting has not been received. + * + * @since 1.3.3 + */ + public function getGreeting() + { + return $this->greeting; + } + + /** + * Attempt to connect to the SMTP server. + * + * @param int $timeout The timeout value (in seconds) for the + * socket connection attempt. + * @param bool $persistent Should a persistent socket connection + * be used? + * + * @return mixed Returns a PEAR_Error with an error message on any + * kind of failure, or true on success. + * @since 1.0 + */ + public function connect($timeout = null, $persistent = false) + { + $this->greeting = null; + + $result = $this->socket->connect( + $this->host, $this->port, $persistent, $timeout, $this->socket_options + ); + + if (PEAR::isError($result)) { + return PEAR::raiseError( + 'Failed to connect socket: ' . $result->getMessage() + ); + } + + /* + * Now that we're connected, reset the socket's timeout value for + * future I/O operations. This allows us to have different socket + * timeout values for the initial connection (our $timeout parameter) + * and all other socket operations. + */ + if ($this->timeout > 0) { + if (PEAR::isError($error = $this->setTimeout($this->timeout))) { + return $error; + } + } + + if (PEAR::isError($error = $this->parseResponse(220))) { + return $error; + } + + /* Extract and store a copy of the server's greeting string. */ + list(, $this->greeting) = $this->getResponse(); + + if (PEAR::isError($error = $this->negotiate())) { + return $error; + } + + return true; + } + + /** + * Attempt to disconnect from the SMTP server. + * + * @return mixed Returns a PEAR_Error with an error message on any + * kind of failure, or true on success. + * @since 1.0 + */ + public function disconnect() + { + if (PEAR::isError($error = $this->put('QUIT'))) { + return $error; + } + if (PEAR::isError($error = $this->parseResponse(221))) { + return $error; + } + if (PEAR::isError($error = $this->socket->disconnect())) { + return PEAR::raiseError( + 'Failed to disconnect socket: ' . $error->getMessage() + ); + } + + return true; + } + + /** + * Attempt to send the EHLO command and obtain a list of ESMTP + * extensions available, and failing that just send HELO. + * + * @return mixed Returns a PEAR_Error with an error message on any + * kind of failure, or true on success. + * + * @since 1.1.0 + */ + protected function negotiate() + { + if (PEAR::isError($error = $this->put('EHLO', $this->localhost))) { + return $error; + } + + if (PEAR::isError($this->parseResponse(250))) { + /* If the EHLO failed, try the simpler HELO command. */ + if (PEAR::isError($error = $this->put('HELO', $this->localhost))) { + return $error; + } + if (PEAR::isError($this->parseResponse(250))) { + return PEAR::raiseError('HELO was not accepted', $this->code); + } + + return true; + } + + foreach ($this->arguments as $argument) { + $verb = strtok($argument, ' '); + $len = strlen($verb); + $arguments = substr($argument, $len + 1, strlen($argument) - $len - 1); + $this->esmtp[$verb] = $arguments; + } + + if (!isset($this->esmtp['PIPELINING'])) { + $this->pipelining = false; + } + + return true; + } + + /** + * Returns the name of the best authentication method that the server + * has advertised. + * + * @return mixed Returns a string containing the name of the best + * supported authentication method or a PEAR_Error object + * if a failure condition is encountered. + * @since 1.1.0 + */ + protected function getBestAuthMethod() + { + $available_methods = explode(' ', $this->esmtp['AUTH']); + + foreach ($this->auth_methods as $method => $callback) { + if (in_array($method, $available_methods)) { + return $method; + } + } + + return PEAR::raiseError('No supported authentication methods'); + } + + /** + * Attempt to do SMTP authentication. + * + * @param string $uid The userid to authenticate as. + * @param string $pwd The password to authenticate with. + * @param string $method The requested authentication method. If none is + * specified, the best supported method will be used. + * @param bool $tls Flag indicating whether or not TLS should be attempted. + * @param string $authz An optional authorization identifier. If specified, this + * identifier will be used as the authorization proxy. + * + * @return mixed Returns a PEAR_Error with an error message on any + * kind of failure, or true on success. + * @since 1.0 + */ + public function auth($uid, $pwd , $method = '', $tls = true, $authz = '') + { + /* We can only attempt a TLS connection if one has been requested, + * we're running PHP 5.1.0 or later, have access to the OpenSSL + * extension, are connected to an SMTP server which supports the + * STARTTLS extension, and aren't already connected over a secure + * (SSL) socket connection. */ + if ($tls && version_compare(PHP_VERSION, '5.1.0', '>=') + && extension_loaded('openssl') && isset($this->esmtp['STARTTLS']) + && strncasecmp($this->host, 'ssl://', 6) !== 0 + ) { + /* Start the TLS connection attempt. */ + if (PEAR::isError($result = $this->put('STARTTLS'))) { + return $result; + } + if (PEAR::isError($result = $this->parseResponse(220))) { + return $result; + } + if (isset($this->socket_options['ssl']['crypto_method'])) { + $crypto_method = $this->socket_options['ssl']['crypto_method']; + } else { + /* STREAM_CRYPTO_METHOD_TLS_ANY_CLIENT constant does not exist + * and STREAM_CRYPTO_METHOD_SSLv23_CLIENT constant is + * inconsistent across PHP versions. */ + $crypto_method = STREAM_CRYPTO_METHOD_TLS_CLIENT + | @STREAM_CRYPTO_METHOD_TLSv1_1_CLIENT + | @STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT; + } + if (PEAR::isError($result = $this->socket->enableCrypto(true, $crypto_method))) { + return $result; + } elseif ($result !== true) { + return PEAR::raiseError('STARTTLS failed'); + } + + /* Send EHLO again to recieve the AUTH string from the + * SMTP server. */ + $this->negotiate(); + } + + if (empty($this->esmtp['AUTH'])) { + return PEAR::raiseError('SMTP server does not support authentication'); + } + + /* If no method has been specified, get the name of the best + * supported method advertised by the SMTP server. */ + if (empty($method)) { + if (PEAR::isError($method = $this->getBestAuthMethod())) { + /* Return the PEAR_Error object from _getBestAuthMethod(). */ + return $method; + } + } else { + $method = strtoupper($method); + if (!array_key_exists($method, $this->auth_methods)) { + return PEAR::raiseError("$method is not a supported authentication method"); + } + } + + if (!isset($this->auth_methods[$method])) { + return PEAR::raiseError("$method is not a supported authentication method"); + } + + if (!is_callable($this->auth_methods[$method], false)) { + return PEAR::raiseError("$method authentication method cannot be called"); + } + + if (is_array($this->auth_methods[$method])) { + list($object, $method) = $this->auth_methods[$method]; + $result = $object->{$method}($uid, $pwd, $authz, $this); + } else { + $func = $this->auth_methods[$method]; + $result = $func($uid, $pwd, $authz, $this); + } + + /* If an error was encountered, return the PEAR_Error object. */ + if (PEAR::isError($result)) { + return $result; + } + + return true; + } + + /** + * Add a new authentication method. + * + * @param string $name The authentication method name (e.g. 'PLAIN') + * @param mixed $callback The authentication callback (given as the name of a + * function or as an (object, method name) array). + * @param bool $prepend Should the new method be prepended to the list of + * available methods? This is the default behavior, + * giving the new method the highest priority. + * + * @return mixed True on success or a PEAR_Error object on failure. + * + * @since 1.6.0 + */ + public function setAuthMethod($name, $callback, $prepend = true) + { + if (!is_string($name)) { + return PEAR::raiseError('Method name is not a string'); + } + + if (!is_string($callback) && !is_array($callback)) { + return PEAR::raiseError('Method callback must be string or array'); + } + + if (is_array($callback)) { + if (!is_object($callback[0]) || !is_string($callback[1])) { + return PEAR::raiseError('Bad mMethod callback array'); + } + } + + if ($prepend) { + $this->auth_methods = array_merge( + array($name => $callback), $this->auth_methods + ); + } else { + $this->auth_methods[$name] = $callback; + } + + return true; + } + + /** + * Authenticates the user using the DIGEST-MD5 method. + * + * @param string $uid The userid to authenticate as. + * @param string $pwd The password to authenticate with. + * @param string $authz The optional authorization proxy identifier. + * + * @return mixed Returns a PEAR_Error with an error message on any + * kind of failure, or true on success. + * @since 1.1.0 + */ + protected function authDigestMD5($uid, $pwd, $authz = '') + { + if (PEAR::isError($error = $this->put('AUTH', 'DIGEST-MD5'))) { + return $error; + } + /* 334: Continue authentication request */ + if (PEAR::isError($error = $this->parseResponse(334))) { + /* 503: Error: already authenticated */ + if ($this->code === 503) { + return true; + } + return $error; + } + + $auth_sasl = new Auth_SASL; + $digest = $auth_sasl->factory('digest-md5'); + $challenge = base64_decode($this->arguments[0]); + $auth_str = base64_encode( + $digest->getResponse($uid, $pwd, $challenge, $this->host, "smtp", $authz) + ); + + if (PEAR::isError($error = $this->put($auth_str))) { + return $error; + } + /* 334: Continue authentication request */ + if (PEAR::isError($error = $this->parseResponse(334))) { + return $error; + } + + /* We don't use the protocol's third step because SMTP doesn't + * allow subsequent authentication, so we just silently ignore + * it. */ + if (PEAR::isError($error = $this->put(''))) { + return $error; + } + /* 235: Authentication successful */ + if (PEAR::isError($error = $this->parseResponse(235))) { + return $error; + } + } + + /** + * Authenticates the user using the CRAM-MD5 method. + * + * @param string $uid The userid to authenticate as. + * @param string $pwd The password to authenticate with. + * @param string $authz The optional authorization proxy identifier. + * + * @return mixed Returns a PEAR_Error with an error message on any + * kind of failure, or true on success. + * @since 1.1.0 + */ + protected function authCRAMMD5($uid, $pwd, $authz = '') + { + if (PEAR::isError($error = $this->put('AUTH', 'CRAM-MD5'))) { + return $error; + } + /* 334: Continue authentication request */ + if (PEAR::isError($error = $this->parseResponse(334))) { + /* 503: Error: already authenticated */ + if ($this->code === 503) { + return true; + } + return $error; + } + + $auth_sasl = new Auth_SASL; + $challenge = base64_decode($this->arguments[0]); + $cram = $auth_sasl->factory('cram-md5'); + $auth_str = base64_encode($cram->getResponse($uid, $pwd, $challenge)); + + if (PEAR::isError($error = $this->put($auth_str))) { + return $error; + } + + /* 235: Authentication successful */ + if (PEAR::isError($error = $this->parseResponse(235))) { + return $error; + } + } + + /** + * Authenticates the user using the LOGIN method. + * + * @param string $uid The userid to authenticate as. + * @param string $pwd The password to authenticate with. + * @param string $authz The optional authorization proxy identifier. + * + * @return mixed Returns a PEAR_Error with an error message on any + * kind of failure, or true on success. + * @since 1.1.0 + */ + protected function authLogin($uid, $pwd, $authz = '') + { + if (PEAR::isError($error = $this->put('AUTH', 'LOGIN'))) { + return $error; + } + /* 334: Continue authentication request */ + if (PEAR::isError($error = $this->parseResponse(334))) { + /* 503: Error: already authenticated */ + if ($this->code === 503) { + return true; + } + return $error; + } + + if (PEAR::isError($error = $this->put(base64_encode($uid)))) { + return $error; + } + /* 334: Continue authentication request */ + if (PEAR::isError($error = $this->parseResponse(334))) { + return $error; + } + + if (PEAR::isError($error = $this->put(base64_encode($pwd)))) { + return $error; + } + + /* 235: Authentication successful */ + if (PEAR::isError($error = $this->parseResponse(235))) { + return $error; + } + + return true; + } + + /** + * Authenticates the user using the PLAIN method. + * + * @param string $uid The userid to authenticate as. + * @param string $pwd The password to authenticate with. + * @param string $authz The optional authorization proxy identifier. + * + * @return mixed Returns a PEAR_Error with an error message on any + * kind of failure, or true on success. + * @since 1.1.0 + */ + protected function authPlain($uid, $pwd, $authz = '') + { + if (PEAR::isError($error = $this->put('AUTH', 'PLAIN'))) { + return $error; + } + /* 334: Continue authentication request */ + if (PEAR::isError($error = $this->parseResponse(334))) { + /* 503: Error: already authenticated */ + if ($this->code === 503) { + return true; + } + return $error; + } + + $auth_str = base64_encode($authz . chr(0) . $uid . chr(0) . $pwd); + + if (PEAR::isError($error = $this->put($auth_str))) { + return $error; + } + + /* 235: Authentication successful */ + if (PEAR::isError($error = $this->parseResponse(235))) { + return $error; + } + + return true; + } + + /** + * Send the HELO command. + * + * @param string $domain The domain name to say we are. + * + * @return mixed Returns a PEAR_Error with an error message on any + * kind of failure, or true on success. + * @since 1.0 + */ + public function helo($domain) + { + if (PEAR::isError($error = $this->put('HELO', $domain))) { + return $error; + } + if (PEAR::isError($error = $this->parseResponse(250))) { + return $error; + } + + return true; + } + + /** + * Return the list of SMTP service extensions advertised by the server. + * + * @return array The list of SMTP service extensions. + * @since 1.3 + */ + public function getServiceExtensions() + { + return $this->esmtp; + } + + /** + * Send the MAIL FROM: command. + * + * @param string $sender The sender (reverse path) to set. + * @param string $params String containing additional MAIL parameters, + * such as the NOTIFY flags defined by RFC 1891 + * or the VERP protocol. + * + * If $params is an array, only the 'verp' option + * is supported. If 'verp' is true, the XVERP + * parameter is appended to the MAIL command. + * If the 'verp' value is a string, the full + * XVERP=value parameter is appended. + * + * @return mixed Returns a PEAR_Error with an error message on any + * kind of failure, or true on success. + * @since 1.0 + */ + public function mailFrom($sender, $params = null) + { + $args = "FROM:<$sender>"; + + /* Support the deprecated array form of $params. */ + if (is_array($params) && isset($params['verp'])) { + if ($params['verp'] === true) { + $args .= ' XVERP'; + } elseif (trim($params['verp'])) { + $args .= ' XVERP=' . $params['verp']; + } + } elseif (is_string($params) && !empty($params)) { + $args .= ' ' . $params; + } + + if (PEAR::isError($error = $this->put('MAIL', $args))) { + return $error; + } + if (PEAR::isError($error = $this->parseResponse(250, $this->pipelining))) { + return $error; + } + + return true; + } + + /** + * Send the RCPT TO: command. + * + * @param string $recipient The recipient (forward path) to add. + * @param string $params String containing additional RCPT parameters, + * such as the NOTIFY flags defined by RFC 1891. + * + * @return mixed Returns a PEAR_Error with an error message on any + * kind of failure, or true on success. + * + * @since 1.0 + */ + public function rcptTo($recipient, $params = null) + { + $args = "TO:<$recipient>"; + if (is_string($params)) { + $args .= ' ' . $params; + } + + if (PEAR::isError($error = $this->put('RCPT', $args))) { + return $error; + } + if (PEAR::isError($error = $this->parseResponse(array(250, 251), $this->pipelining))) { + return $error; + } + + return true; + } + + /** + * Quote the data so that it meets SMTP standards. + * + * This is provided as a separate public function to facilitate + * easier overloading for the cases where it is desirable to + * customize the quoting behavior. + * + * @param string &$data The message text to quote. The string must be passed + * by reference, and the text will be modified in place. + * + * @since 1.2 + */ + public function quotedata(&$data) + { + /* Because a single leading period (.) signifies an end to the + * data, legitimate leading periods need to be "doubled" ('..'). */ + $data = preg_replace('/^\./m', '..', $data); + + /* Change Unix (\n) and Mac (\r) linefeeds into CRLF's (\r\n). */ + $data = preg_replace('/(?:\r\n|\n|\r(?!\n))/', "\r\n", $data); + } + + /** + * Send the DATA command. + * + * @param mixed $data The message data, either as a string or an open + * file resource. + * @param string $headers The message headers. If $headers is provided, + * $data is assumed to contain only body data. + * + * @return mixed Returns a PEAR_Error with an error message on any + * kind of failure, or true on success. + * @since 1.0 + */ + public function data($data, $headers = null) + { + /* Verify that $data is a supported type. */ + if (!is_string($data) && !is_resource($data)) { + return PEAR::raiseError('Expected a string or file resource'); + } + + /* Start by considering the size of the optional headers string. We + * also account for the addition 4 character "\r\n\r\n" separator + * sequence. */ + $size = $headers_size = (is_null($headers)) ? 0 : strlen($headers) + 4; + + if (is_resource($data)) { + $stat = fstat($data); + if ($stat === false) { + return PEAR::raiseError('Failed to get file size'); + } + $size += $stat['size']; + } else { + $size += strlen($data); + } + + /* RFC 1870, section 3, subsection 3 states "a value of zero indicates + * that no fixed maximum message size is in force". Furthermore, it + * says that if "the parameter is omitted no information is conveyed + * about the server's fixed maximum message size". */ + $limit = (isset($this->esmtp['SIZE'])) ? $this->esmtp['SIZE'] : 0; + if ($limit > 0 && $size >= $limit) { + $this->disconnect(); + return PEAR::raiseError('Message size exceeds server limit'); + } + + /* Initiate the DATA command. */ + if (PEAR::isError($error = $this->put('DATA'))) { + return $error; + } + if (PEAR::isError($error = $this->parseResponse(354))) { + return $error; + } + + /* If we have a separate headers string, send it first. */ + if (!is_null($headers)) { + $this->quotedata($headers); + if (PEAR::isError($result = $this->send($headers . "\r\n\r\n"))) { + return $result; + } + + /* Subtract the headers size now that they've been sent. */ + $size -= $headers_size; + } + + /* Now we can send the message body data. */ + if (is_resource($data)) { + /* Stream the contents of the file resource out over our socket + * connection, line by line. Each line must be run through the + * quoting routine. */ + while (strlen($line = fread($data, 8192)) > 0) { + /* If the last character is an newline, we need to grab the + * next character to check to see if it is a period. */ + while (!feof($data)) { + $char = fread($data, 1); + $line .= $char; + if ($char != "\n") { + break; + } + } + $this->quotedata($line); + if (PEAR::isError($result = $this->send($line))) { + return $result; + } + } + + $last = $line; + } else { + /* + * Break up the data by sending one chunk (up to 512k) at a time. + * This approach reduces our peak memory usage. + */ + for ($offset = 0; $offset < $size;) { + $end = $offset + 512000; + + /* + * Ensure we don't read beyond our data size or span multiple + * lines. quotedata() can't properly handle character data + * that's split across two line break boundaries. + */ + if ($end >= $size) { + $end = $size; + } else { + for (; $end < $size; $end++) { + if ($data[$end] != "\n") { + break; + } + } + } + + /* Extract our chunk and run it through the quoting routine. */ + $chunk = substr($data, $offset, $end - $offset); + $this->quotedata($chunk); + + /* If we run into a problem along the way, abort. */ + if (PEAR::isError($result = $this->send($chunk))) { + return $result; + } + + /* Advance the offset to the end of this chunk. */ + $offset = $end; + } + + $last = $chunk; + } + + /* Don't add another CRLF sequence if it's already in the data */ + $terminator = (substr($last, -2) == "\r\n" ? '' : "\r\n") . ".\r\n"; + + /* Finally, send the DATA terminator sequence. */ + if (PEAR::isError($result = $this->send($terminator))) { + return $result; + } + + /* Verify that the data was successfully received by the server. */ + if (PEAR::isError($error = $this->parseResponse(250, $this->pipelining))) { + return $error; + } + + return true; + } + + /** + * Send the SEND FROM: command. + * + * @param string $path The reverse path to send. + * + * @return mixed Returns a PEAR_Error with an error message on any + * kind of failure, or true on success. + * @since 1.2.6 + */ + public function sendFrom($path) + { + if (PEAR::isError($error = $this->put('SEND', "FROM:<$path>"))) { + return $error; + } + if (PEAR::isError($error = $this->parseResponse(250, $this->pipelining))) { + return $error; + } + + return true; + } + + /** + * Send the SOML FROM: command. + * + * @param string $path The reverse path to send. + * + * @return mixed Returns a PEAR_Error with an error message on any + * kind of failure, or true on success. + * @since 1.2.6 + */ + public function somlFrom($path) + { + if (PEAR::isError($error = $this->put('SOML', "FROM:<$path>"))) { + return $error; + } + if (PEAR::isError($error = $this->parseResponse(250, $this->pipelining))) { + return $error; + } + + return true; + } + + /** + * Send the SAML FROM: command. + * + * @param string $path The reverse path to send. + * + * @return mixed Returns a PEAR_Error with an error message on any + * kind of failure, or true on success. + * @since 1.2.6 + */ + public function samlFrom($path) + { + if (PEAR::isError($error = $this->put('SAML', "FROM:<$path>"))) { + return $error; + } + if (PEAR::isError($error = $this->parseResponse(250, $this->pipelining))) { + return $error; + } + + return true; + } + + /** + * Send the RSET command. + * + * @return mixed Returns a PEAR_Error with an error message on any + * kind of failure, or true on success. + * @since 1.0 + */ + public function rset() + { + if (PEAR::isError($error = $this->put('RSET'))) { + return $error; + } + if (PEAR::isError($error = $this->parseResponse(250, $this->pipelining))) { + return $error; + } + + return true; + } + + /** + * Send the VRFY command. + * + * @param string $string The string to verify + * + * @return mixed Returns a PEAR_Error with an error message on any + * kind of failure, or true on success. + * @since 1.0 + */ + public function vrfy($string) + { + /* Note: 251 is also a valid response code */ + if (PEAR::isError($error = $this->put('VRFY', $string))) { + return $error; + } + if (PEAR::isError($error = $this->parseResponse(array(250, 252)))) { + return $error; + } + + return true; + } + + /** + * Send the NOOP command. + * + * @return mixed Returns a PEAR_Error with an error message on any + * kind of failure, or true on success. + * @since 1.0 + */ + public function noop() + { + if (PEAR::isError($error = $this->put('NOOP'))) { + return $error; + } + if (PEAR::isError($error = $this->parseResponse(250))) { + return $error; + } + + return true; + } + + /** + * Backwards-compatibility method. identifySender()'s functionality is + * now handled internally. + * + * @return boolean This method always return true. + * + * @since 1.0 + */ + public function identifySender() + { + return true; + } +} diff --git a/lib/composer/vendor/pear/net_smtp/README.rst b/lib/composer/vendor/pear/net_smtp/README.rst new file mode 120000 index 000000000..753c5b5c6 --- /dev/null +++ b/lib/composer/vendor/pear/net_smtp/README.rst @@ -0,0 +1 @@ +docs/guide.txt \ No newline at end of file diff --git a/lib/composer/vendor/pear/net_smtp/composer.json b/lib/composer/vendor/pear/net_smtp/composer.json new file mode 100644 index 000000000..88a392362 --- /dev/null +++ b/lib/composer/vendor/pear/net_smtp/composer.json @@ -0,0 +1,48 @@ +{ + "authors": [ + { + "email": "jon@php.net", + "name": "Jon Parise", + "homepage": "http://www.indelible.org", + "role": "Lead" + }, + { + "email": "chuck@horde.org", + "name": "Chuck Hagenbuch", + "role": "Lead" + } + ], + "autoload": { + "psr-0": { + "Net": "./" + } + }, + "description": "An implementation of the SMTP protocol", + "keywords": [ + "smtp", + "mail", + "email" + ], + "include-path": [ + "./" + ], + "license": "PHP-3.01", + "name": "pear/net_smtp", + "homepage": "http://pear.github.io/Net_SMTP/", + "support": { + "issues": "https://github.com/pear/Net_SMTP/issues", + "source": "https://github.com/pear/Net_SMTP" + }, + "type": "library", + "require": { + "php": ">=5.4.0", + "pear/pear-core-minimal": "*", + "pear/net_socket": "*" + }, + "require-dev": { + "phpunit/phpunit": "*" + }, + "suggest": { + "pear/auth_sasl": "Install optionally via your project's composer.json" + } +} diff --git a/lib/composer/vendor/pear/net_smtp/docs/docutils.conf b/lib/composer/vendor/pear/net_smtp/docs/docutils.conf new file mode 100644 index 000000000..10aeab469 --- /dev/null +++ b/lib/composer/vendor/pear/net_smtp/docs/docutils.conf @@ -0,0 +1,16 @@ +[general] +source-link: no +no-datestamp: yes +generator: off +strip-comments: yes +toc-backlinks: no + +[standalone reader] +docinfo_xform: no + +[html4css1 writer] +stylesheet-path: docutils.css +embed-stylesheet: yes +field-name-limit: 20 +cloak-email-addresses: yes +initial-header-level: 2 diff --git a/lib/composer/vendor/pear/net_smtp/docs/docutils.css b/lib/composer/vendor/pear/net_smtp/docs/docutils.css new file mode 100644 index 000000000..fba72b592 --- /dev/null +++ b/lib/composer/vendor/pear/net_smtp/docs/docutils.css @@ -0,0 +1,108 @@ +body { + font-family: Verdana, Helvetica, Arial, sans-serif; + font-size: 0.8em; + letter-spacing: 0.01em; + line-height: 1.5em; + text-align: justify; + margin: 0 auto; + width: 48em; +} + +a:link, a:visited { + color: #00c; + padding-bottom: 0; + text-decoration: none; + border-bottom: 1px solid #dbd5c5; +} + +a:hover { + padding-bottom: 0; + border-bottom: 2px solid #dbd5c5; +} + +h1, h2, h3 { + font-family: Georgia, "Times New Roman", Times, serif; + font-weight: normal; + line-height: normal; +} + +h1 { + font-size: 2.1em; + letter-spacing: -0.02em; + margin-top: 30px; + text-align: center; +} + +h2 { + font-size: 1.6em; + font-style: italic; + margin: 30px 0 10px 0; +} + +h3 { + font-size: 1.3em; + font-style: italic; + margin-top: 20px; +} + +li { + line-height: 135%; +} + +ul, ol { + margin: 0 0 1em 2em; + padding: 0 0 0 1em; +} + +hr { + background-color: #ccc; + border: 0px none; + color: #eee; + height: 1px; + margin: 30px 0px; +} + +blockquote, pre { + background-color: #f9f9f9; + border: 1px solid #eee; + border-left: 2px solid #ccc; + padding: 1em; +} + +blockquote { + color: #666; + line-height: 1.3em; +} + +pre { + line-height: normal; + overflow: auto; +} + +pre.code-block { + padding-bottom: 0; +} + +tt, pre, code, samp, kbd { + color: #333; + font-family: Consolas, 'Lucida Console', monospace; + font-size: 13px; +} + +label em { + font-weight: normal; +} + +form { + margin: 0; + padding: 0; +} + +.code-block .err { border: 1px solid #FF0000 } /* Error */ +.code-block .k,.kn { color: #369 } /* Keywords */ +.code-block .c,.cm,.cp,.c1 { color: #666; font-style: italic } /* Comments */ +.code-block .n { color: #000 } /* Names */ +.code-block .p { color: #000 } /* Punctuation */ +.code-block .nc,.nf,.nn { color: #333; font-weight: bold } /* Symbol Names */ +.code-block .s { color: #933 } /* Literal.String */ +.code-block .sd { color: #666 } /* Literal.String.Doc */ diff --git a/lib/composer/vendor/pear/net_smtp/docs/guide.txt b/lib/composer/vendor/pear/net_smtp/docs/guide.txt new file mode 100644 index 000000000..a0e61dbd6 --- /dev/null +++ b/lib/composer/vendor/pear/net_smtp/docs/guide.txt @@ -0,0 +1,267 @@ +====================== + The Net_SMTP Package +====================== + +-------------------- + User Documentation +-------------------- + +:Author: Jon Parise +:Contact: jon@php.net + +.. contents:: Table of Contents +.. section-numbering:: + +Dependencies +============ + +The ``PEAR_Error`` Class +------------------------ + +The Net_SMTP package uses the `PEAR_Error`_ class for all of its `error +handling`_. + +The ``Net_Socket`` Package +-------------------------- + +The Net_Socket_ package is used as the basis for all network communications. +Connection options can be specified via the `$socket_options` construction +parameter:: + + $socket_options = array('ssl' => array('verify_peer_name' => false)); + $smtp = new Net_SMTP($host, null, null, false, 0, $socket_options); + +**Note:** PHP 5.6 introduced `OpenSSL changes`_. Peer certificate verification +is now enabled by default. Although not recommended, `$socket_options` can be +used to disable peer verification (as shown above). + +.. _OpenSSL changes: http://php.net/manual/en/migration56.openssl.php + +The ``Auth_SASL`` Package +------------------------- + +The `Auth_SASL`_ package is an optional dependency. If it is available, the +Net_SMTP package will be able to support the DIGEST-MD5_ and CRAM-MD5_ SMTP +authentication methods. Otherwise, only the LOGIN_ and PLAIN_ methods will +be available. + +Error Handling +============== + +All of the Net_SMTP class's public methods return a PEAR_Error_ object if an +error occurs. The standard way to check for a PEAR_Error object is by using +`PEAR::isError()`_:: + + if (PEAR::isError($error = $smtp->connect())) { + die($error->getMessage()); + } + +.. _PEAR::isError(): http://pear.php.net/manual/en/core.pear.pear.iserror.php + +SMTP Authentication +=================== + +The Net_SMTP package supports the SMTP authentication standard (as defined +by RFC-2554_). The Net_SMTP package supports the following authentication +methods, in order of preference: + +.. _RFC-2554: http://www.ietf.org/rfc/rfc2554.txt + +DIGEST-MD5 +---------- + +The DIGEST-MD5 authentication method uses `RSA Data Security Inc.`_'s MD5 +Message Digest algorithm. It is considered the most secure method of SMTP +authentication. + +**Note:** The DIGEST-MD5 authentication method is only supported if the +AUTH_SASL_ package is available. + +.. _RSA Data Security Inc.: http://www.rsasecurity.com/ + +CRAM-MD5 +-------- + +The CRAM-MD5 authentication method has been superseded by the DIGEST-MD5_ +method in terms of security. It is provided here for compatibility with +older SMTP servers that may not support the newer DIGEST-MD5 algorithm. + +**Note:** The CRAM-MD5 authentication method is only supported if the +AUTH_SASL_ package is available. + +LOGIN +----- + +The LOGIN authentication method encrypts the user's password using the +Base64_ encoding scheme. Because decrypting a Base64-encoded string is +trivial, LOGIN is not considered a secure authentication method and should +be avoided. + +.. _Base64: http://www.php.net/manual/en/function.base64-encode.php + +PLAIN +----- + +The PLAIN authentication method sends the user's password in plain text. +This method of authentication is not secure and should be avoided. + +Secure Connections +================== + +If `secure socket transports`_ have been enabled in PHP, it is possible to +establish a secure connection to the remote SMTP server:: + + $smtp = new Net_SMTP('ssl://mail.example.com', 465); + +This example connects to ``mail.example.com`` on port 465 (a common SMTPS +port) using the ``ssl://`` transport. + +.. _secure socket transports: http://www.php.net/transports + +Sending Data +============ + +Message data is sent using the ``data()`` method. The data can be supplied +as a single string or as an open file resource. + +If a string is provided, it is passed through the `data quoting`_ system and +sent to the socket connection as a single block. These operations are all +memory-based, so sending large messages may result in high memory usage. + +If an open file resource is provided, the ``data()`` method will read the +message data from the file line-by-line. Each chunk will be quoted and sent +to the socket connection individually, reducing the overall memory overhead of +this data sending operation. + +Header data can be specified separately from message body data by passing it +as the optional second parameter to ``data()``. This is especially useful +when an open file resource is being used to supply message data because it +allows header fields (like *Subject:*) to be built dynamically at runtime. + +:: + + $smtp->data($fp, "Subject: My Subject"); + +Data Quoting +============ + +By default, all outbound string data is quoted in accordance with SMTP +standards. This means that all native Unix (``\n``) and Mac (``\r``) line +endings are converted to Internet-standard CRLF (``\r\n``) line endings. +Also, because the SMTP protocol uses a single leading period (``.``) to signal +an end to the message data, single leading periods in the original data +string are "doubled" (e.g. "``..``"). + +These string transformation can be expensive when large blocks of data are +involved. For example, the Net_SMTP package is not aware of MIME parts (it +just sees the MIME message as one big string of characters), so it is not +able to skip non-text attachments when searching for characters that may +need to be quoted. + +Because of this, it is possible to extend the Net_SMTP class in order to +implement your own custom quoting routine. Just create a new class based on +the Net_SMTP class and reimplement the ``quotedata()`` method:: + + require 'Net_SMTP.php'; + + class Net_SMTP_custom extends Net_SMTP + { + function quotedata($data) + { + /* Perform custom data quoting */ + } + } + +Note that the ``$data`` parameter will be passed to the ``quotedata()`` +function `by reference`_. This means that you can operate directly on +``$data``. It also the overhead of copying a large ``$data`` string to and +from the ``quotedata()`` method. + +.. _by reference: http://www.php.net/manual/en/language.references.pass.php + +Server Responses +================ + +The Net_SMTP package retains the server's last response for further +inspection. The ``getResponse()`` method returns a 2-tuple (two element +array) containing the server's response code as an integer and the response's +arguments as a string. + +Upon a successful connection, the server's greeting string is available via +the ``getGreeting()`` method. + +Debugging +========= + +The Net_SMTP package contains built-in debugging output routines (disabled by +default). Debugging output must be explicitly enabled via the ``setDebug()`` +method:: + + $smtp->setDebug(true); + +The debugging messages will be sent to the standard output stream by default. +If you need more control over the output, you can optionally install your own +debug handler. + +:: + + function debugHandler($smtp, $message) + { + echo "[$smtp->host] $message\n"; + } + + $smtp->setDebug(true, "debugHandler"); + + +Examples +======== + +Basic Use +--------- + +The following script demonstrates how a simple email message can be sent +using the Net_SMTP package:: + + require 'Net/SMTP.php'; + + $host = 'mail.example.com'; + $from = 'user@example.com'; + $rcpt = array('recipient1@example.com', 'recipient2@example.com'); + $subj = "Subject: Test Message\n"; + $body = "Body Line 1\nBody Line 2"; + + /* Create a new Net_SMTP object. */ + if (! ($smtp = new Net_SMTP($host))) { + die("Unable to instantiate Net_SMTP object\n"); + } + + /* Connect to the SMTP server. */ + if (PEAR::isError($e = $smtp->connect())) { + die($e->getMessage() . "\n"); + } + + /* Send the 'MAIL FROM:' SMTP command. */ + if (PEAR::isError($smtp->mailFrom($from))) { + die("Unable to set sender to <$from>\n"); + } + + /* Address the message to each of the recipients. */ + foreach ($rcpt as $to) { + if (PEAR::isError($res = $smtp->rcptTo($to))) { + die("Unable to add recipient <$to>: " . $res->getMessage() . "\n"); + } + } + + /* Set the body of the message. */ + if (PEAR::isError($smtp->data($subj . "\r\n" . $body))) { + die("Unable to send data\n"); + } + + /* Disconnect from the SMTP server. */ + $smtp->disconnect(); + +.. _PEAR_Error: http://pear.php.net/manual/en/core.pear.pear-error.php +.. _Net_Socket: http://pear.php.net/package/Net_Socket +.. _Auth_SASL: http://pear.php.net/package/Auth_SASL + +.. vim: tabstop=4 shiftwidth=4 softtabstop=4 expandtab textwidth=78 ft=rst: diff --git a/lib/composer/vendor/pear/net_smtp/examples/basic.php b/lib/composer/vendor/pear/net_smtp/examples/basic.php new file mode 100644 index 000000000..0f09fe05a --- /dev/null +++ b/lib/composer/vendor/pear/net_smtp/examples/basic.php @@ -0,0 +1,39 @@ +connect())) { + die($e->getMessage() . "\n"); +} +$smtp->auth('username','password'); +/* Send the 'MAIL FROM:' SMTP command. */ +if (PEAR::isError($smtp->mailFrom($from))) { + die("Unable to set sender to <$from>\n"); +} + +/* Address the message to each of the recipients. */ +foreach ($rcpt as $to) { + if (PEAR::isError($res = $smtp->rcptTo($to))) { + die("Unable to add recipient <$to>: " . $res->getMessage() . "\n"); + } +} + +/* Set the body of the message. */ +if (PEAR::isError($smtp->data($subj . "\r\n" . $body))) { + die("Unable to send data\n"); +} + +/* Disconnect from the SMTP server. */ +$smtp->disconnect(); diff --git a/lib/composer/vendor/pear/net_smtp/package.xml b/lib/composer/vendor/pear/net_smtp/package.xml new file mode 100644 index 000000000..2183ef988 --- /dev/null +++ b/lib/composer/vendor/pear/net_smtp/package.xml @@ -0,0 +1,77 @@ + + + Net_SMTP + pear.php.net + An implementation of the SMTP protocol + Provides an implementation of the SMTP protocol using PEAR's Net_Socket class. + + Jon Parise + jon + jon@php.net + yes + + + Chuck Hagenbuch + chagenbu + chuck@horde.org + yes + + 2017-01-14 + + + 1.7.3 + 1.3.0 + + + stable + stable + + PHP License + - Fix MIME boundary size calculation (#34) +- Workaround E_DEPRECATED warning on Auth_SASL::factory() call (#29) + + + + + + + + + + + + + + + + + + + + + + + 5.4.0 + + + 1.4.3 + + + Net_Socket + pear.php.net + 1.0.7 + + + + + Auth_SASL + pear.php.net + 1.0.5 + + + + + diff --git a/lib/composer/vendor/pear/net_smtp/phpdoc.sh b/lib/composer/vendor/pear/net_smtp/phpdoc.sh new file mode 100755 index 000000000..6d8b414c9 --- /dev/null +++ b/lib/composer/vendor/pear/net_smtp/phpdoc.sh @@ -0,0 +1,3 @@ +#!/bin/sh + +phpdoc -f Net/SMTP.php -t docs/api -p -ti "Net_SMTP Package API" -dn Net_SMTP -dc Net_SMTP -ed examples diff --git a/lib/composer/vendor/pear/net_smtp/tests/auth.phpt b/lib/composer/vendor/pear/net_smtp/tests/auth.phpt new file mode 100644 index 000000000..e227f14c3 --- /dev/null +++ b/lib/composer/vendor/pear/net_smtp/tests/auth.phpt @@ -0,0 +1,28 @@ +--TEST-- +Net_SMTP: SMTP Authentication +--SKIPIF-- +connect())) { + die($e->getMessage() . "\n"); +} + +if (PEAR::isError($e = $smtp->auth(TEST_AUTH_USER, TEST_AUTH_PASS))) { + die("Authentication failure\n"); +} + +$smtp->disconnect(); + +echo 'Success!'; + +--EXPECT-- +Success! diff --git a/lib/composer/vendor/pear/net_smtp/tests/basic.phpt b/lib/composer/vendor/pear/net_smtp/tests/basic.phpt new file mode 100644 index 000000000..5d85d2fd8 --- /dev/null +++ b/lib/composer/vendor/pear/net_smtp/tests/basic.phpt @@ -0,0 +1,42 @@ +--TEST-- +Net_SMTP: Basic Functionality +--SKIPIF-- +connect())) { + die($e->getMessage() . "\n"); +} + +if (PEAR::isError($e = $smtp->auth(TEST_AUTH_USER, TEST_AUTH_PASS))) { + die("Authentication failure\n"); +} + +if (PEAR::isError($smtp->mailFrom(TEST_FROM))) { + die('Unable to set sender to <' . TEST_FROM . ">\n"); +} + +if (PEAR::isError($res = $smtp->rcptTo(TEST_TO))) { + die('Unable to add recipient <' . TEST_TO . '>: ' . + $res->getMessage() . "\n"); +} + +$headers = 'Subject: ' . TEST_SUBJECT; +if (PEAR::isError($smtp->data(TEST_BODY, $headers))) { + die("Unable to send data\n"); +} + +$smtp->disconnect(); + +echo 'Success!'; + +--EXPECT-- +Success! diff --git a/lib/composer/vendor/pear/net_smtp/tests/config.php.dist b/lib/composer/vendor/pear/net_smtp/tests/config.php.dist new file mode 100644 index 000000000..fe4a0c975 --- /dev/null +++ b/lib/composer/vendor/pear/net_smtp/tests/config.php.dist @@ -0,0 +1,15 @@ + "\r\n", + "\r\n" => "\r\n", + "\nxx" => "\r\nxx", + "xx\n" => "xx\r\n", + "xx\nxx" => "xx\r\nxx", + "\n\nxx" => "\r\n\r\nxx", + "xx\n\nxx" => "xx\r\n\r\nxx", + "xx\n\n" => "xx\r\n\r\n", + "\r\nxx" => "\r\nxx", + "xx\r\n" => "xx\r\n", + "xx\r\nxx" => "xx\r\nxx", + "\r\n\r\nxx" => "\r\n\r\nxx", + "xx\r\n\r\nxx" => "xx\r\n\r\nxx", + "xx\r\n\r\n" => "xx\r\n\r\n", + "\r\n\nxx" => "\r\n\r\nxx", + "\n\r\nxx" => "\r\n\r\nxx", + "xx\r\n\nxx" => "xx\r\n\r\nxx", + "xx\n\r\nxx" => "xx\r\n\r\nxx", + "xx\r\n\n" => "xx\r\n\r\n", + "xx\n\r\n" => "xx\r\n\r\n", + "\r" => "\r\n", + "\rxx" => "\r\nxx", + "xx\rxx" => "xx\r\nxx", + "xx\r" => "xx\r\n", + "\r\r" => "\r\n\r\n", + "\r\rxx" => "\r\n\r\nxx", + "xx\r\rxx" => "xx\r\n\r\nxx", + "xx\r\r" => "xx\r\n\r\n", + "xx\rxx\nxx\r\nxx" => "xx\r\nxx\r\nxx\r\nxx", + "\r\r\n\n" => "\r\n\r\n\r\n", + + /* Dots */ + "." => "..", + "xxx\n." => "xxx\r\n..", + "xxx\n.\nxxx" => "xxx\r\n..\r\nxxx", + "xxx.\n.xxx" => "xxx.\r\n..xxx", +); + +function literal($x) +{ + return str_replace(array("\r", "\n"), array('\r', '\n'), $x); +} + +$smtp = new Net_SMTP(); +$error = false; +foreach ($tests as $input => $expected) { + $output = $input; + $smtp->quotedata($output); + if ($output != $expected) { + printf("Error: '%s' => '%s' (expected: '%s')", + literal($input), literal($output), literal($expected)); + $error = true; + } +} + +if (!$error) { + echo "success\n"; +} + +--EXPECT-- +success diff --git a/lib/composer/vendor/pear/net_socket/.gitignore b/lib/composer/vendor/pear/net_socket/.gitignore new file mode 100644 index 000000000..e2b2f027c --- /dev/null +++ b/lib/composer/vendor/pear/net_socket/.gitignore @@ -0,0 +1,6 @@ +# composer related +composer.lock +composer.phar +vendor + +*.tgz diff --git a/lib/composer/vendor/pear/net_socket/.travis.yml b/lib/composer/vendor/pear/net_socket/.travis.yml new file mode 100644 index 000000000..2acb4d644 --- /dev/null +++ b/lib/composer/vendor/pear/net_socket/.travis.yml @@ -0,0 +1,21 @@ +language: php +sudo: false +php: + - 5.4 + - 5.5 + - 5.6 + - 7.0 + - 7.1 +script: + - pear list + - pear channel-update pear.php.net + - pear upgrade --force pear/pear-1.10.1 + - pear list + - pear install --force package.xml + - pear list + - pear package + - pear package-validate + - pear install --force *.tgz + - pear list + - composer install + - ./vendor/bin/phpunit -c phpunit.xml.dist diff --git a/lib/composer/vendor/pear/net_socket/LICENSE b/lib/composer/vendor/pear/net_socket/LICENSE new file mode 100644 index 000000000..5a6b12a0b --- /dev/null +++ b/lib/composer/vendor/pear/net_socket/LICENSE @@ -0,0 +1,9 @@ +Copyright 1997-2017 The PHP Group + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/lib/composer/vendor/pear/net_socket/Net/Socket.php b/lib/composer/vendor/pear/net_socket/Net/Socket.php new file mode 100644 index 000000000..8df768d9a --- /dev/null +++ b/lib/composer/vendor/pear/net_socket/Net/Socket.php @@ -0,0 +1,723 @@ + + * @author Chuck Hagenbuch + * @copyright 1997-2017 The PHP Group + * @license http://opensource.org/licenses/bsd-license.php BSD-2-Clause + * @link http://pear.php.net/packages/Net_Socket + */ + +require_once 'PEAR.php'; + +define('NET_SOCKET_READ', 1); +define('NET_SOCKET_WRITE', 2); +define('NET_SOCKET_ERROR', 4); + +/** + * Generalized Socket class. + * + * @category Net + * @package Net_Socket + * @author Stig Bakken + * @author Chuck Hagenbuch + * @copyright 1997-2017 The PHP Group + * @license http://opensource.org/licenses/bsd-license.php BSD-2-Clause + * @link http://pear.php.net/packages/Net_Socket + */ +class Net_Socket extends PEAR +{ + /** + * Socket file pointer. + * @var resource $fp + */ + public $fp = null; + + /** + * Whether the socket is blocking. Defaults to true. + * @var boolean $blocking + */ + public $blocking = true; + + /** + * Whether the socket is persistent. Defaults to false. + * @var boolean $persistent + */ + public $persistent = false; + + /** + * The IP address to connect to. + * @var string $addr + */ + public $addr = ''; + + /** + * The port number to connect to. + * @var integer $port + */ + public $port = 0; + + /** + * Number of seconds to wait on socket operations before assuming + * there's no more data. Defaults to no timeout. + * @var integer|float $timeout + */ + public $timeout = null; + + /** + * Number of bytes to read at a time in readLine() and + * readAll(). Defaults to 2048. + * @var integer $lineLength + */ + public $lineLength = 2048; + + /** + * The string to use as a newline terminator. Usually "\r\n" or "\n". + * @var string $newline + */ + public $newline = "\r\n"; + + /** + * Connect to the specified port. If called when the socket is + * already connected, it disconnects and connects again. + * + * @param string $addr IP address or host name (may be with protocol prefix). + * @param integer $port TCP port number. + * @param boolean $persistent (optional) Whether the connection is + * persistent (kept open between requests + * by the web server). + * @param integer $timeout (optional) Connection socket timeout. + * @param array $options See options for stream_context_create. + * + * @access public + * + * @return boolean|PEAR_Error True on success or a PEAR_Error on failure. + */ + public function connect( + $addr, + $port = 0, + $persistent = null, + $timeout = null, + $options = null + ) { + if (is_resource($this->fp)) { + @fclose($this->fp); + $this->fp = null; + } + + if (!$addr) { + return $this->raiseError('$addr cannot be empty'); + } else { + if (strspn($addr, ':.0123456789') === strlen($addr)) { + $this->addr = strpos($addr, ':') !== false ? '[' . $addr . ']' : $addr; + } else { + $this->addr = $addr; + } + } + + $this->port = $port % 65536; + + if ($persistent !== null) { + $this->persistent = $persistent; + } + + $openfunc = $this->persistent ? 'pfsockopen' : 'fsockopen'; + $errno = 0; + $errstr = ''; + + $old_track_errors = @ini_set('track_errors', 1); + + if ($timeout <= 0) { + $timeout = @ini_get('default_socket_timeout'); + } + + if ($options && function_exists('stream_context_create')) { + $context = stream_context_create($options); + + // Since PHP 5 fsockopen doesn't allow context specification + if (function_exists('stream_socket_client')) { + $flags = STREAM_CLIENT_CONNECT; + + if ($this->persistent) { + $flags = STREAM_CLIENT_PERSISTENT; + } + + $addr = $this->addr . ':' . $this->port; + $fp = @stream_socket_client($addr, $errno, $errstr, + $timeout, $flags, $context); + } else { + $fp = @$openfunc($this->addr, $this->port, $errno, + $errstr, $timeout, $context); + } + } else { + $fp = @$openfunc($this->addr, $this->port, $errno, $errstr, $timeout); + } + + if (!$fp) { + if ($errno === 0 && !strlen($errstr) && isset($php_errormsg)) { + $errstr = $php_errormsg; + } + @ini_set('track_errors', $old_track_errors); + + return $this->raiseError($errstr, $errno); + } + + @ini_set('track_errors', $old_track_errors); + $this->fp = $fp; + $this->setTimeout(); + + return $this->setBlocking($this->blocking); + } + + /** + * Disconnects from the peer, closes the socket. + * + * @access public + * @return mixed true on success or a PEAR_Error instance otherwise + */ + public function disconnect() + { + if (!is_resource($this->fp)) { + return $this->raiseError('not connected'); + } + + @fclose($this->fp); + $this->fp = null; + + return true; + } + + /** + * Set the newline character/sequence to use. + * + * @param string $newline Newline character(s) + * @return boolean True + */ + public function setNewline($newline) + { + $this->newline = $newline; + + return true; + } + + /** + * Find out if the socket is in blocking mode. + * + * @access public + * @return boolean The current blocking mode. + */ + public function isBlocking() + { + return $this->blocking; + } + + /** + * Sets whether the socket connection should be blocking or + * not. A read call to a non-blocking socket will return immediately + * if there is no data available, whereas it will block until there + * is data for blocking sockets. + * + * @param boolean $mode True for blocking sockets, false for nonblocking. + * + * @access public + * @return mixed true on success or a PEAR_Error instance otherwise + */ + public function setBlocking($mode) + { + if (!is_resource($this->fp)) { + return $this->raiseError('not connected'); + } + + $this->blocking = $mode; + stream_set_blocking($this->fp, (int)$this->blocking); + + return true; + } + + /** + * Sets the timeout value on socket descriptor, + * expressed in the sum of seconds and microseconds + * + * @param integer $seconds Seconds. + * @param integer $microseconds Microseconds, optional. + * + * @access public + * @return mixed True on success or false on failure or + * a PEAR_Error instance when not connected + */ + public function setTimeout($seconds = null, $microseconds = null) + { + if (!is_resource($this->fp)) { + return $this->raiseError('not connected'); + } + + if ($seconds === null && $microseconds === null) { + $seconds = (int)$this->timeout; + $microseconds = (int)(($this->timeout - $seconds) * 1000000); + } else { + $this->timeout = $seconds + $microseconds / 1000000; + } + + if ($this->timeout > 0) { + return stream_set_timeout($this->fp, (int)$seconds, (int)$microseconds); + } else { + return false; + } + } + + /** + * Sets the file buffering size on the stream. + * See php's stream_set_write_buffer for more information. + * + * @param integer $size Write buffer size. + * + * @access public + * @return mixed on success or an PEAR_Error object otherwise + */ + public function setWriteBuffer($size) + { + if (!is_resource($this->fp)) { + return $this->raiseError('not connected'); + } + + $returned = stream_set_write_buffer($this->fp, $size); + if ($returned === 0) { + return true; + } + + return $this->raiseError('Cannot set write buffer.'); + } + + /** + * Returns information about an existing socket resource. + * Currently returns four entries in the result array: + * + *

+ * timed_out (bool) - The socket timed out waiting for data
+ * blocked (bool) - The socket was blocked
+ * eof (bool) - Indicates EOF event
+ * unread_bytes (int) - Number of bytes left in the socket buffer
+ *

+ * + * @access public + * @return mixed Array containing information about existing socket + * resource or a PEAR_Error instance otherwise + */ + public function getStatus() + { + if (!is_resource($this->fp)) { + return $this->raiseError('not connected'); + } + + return stream_get_meta_data($this->fp); + } + + /** + * Get a specified line of data + * + * @param int $size Reading ends when size - 1 bytes have been read, + * or a newline or an EOF (whichever comes first). + * If no size is specified, it will keep reading from + * the stream until it reaches the end of the line. + * + * @access public + * @return mixed $size bytes of data from the socket, or a PEAR_Error if + * not connected. If an error occurs, FALSE is returned. + */ + public function gets($size = null) + { + if (!is_resource($this->fp)) { + return $this->raiseError('not connected'); + } + + if (null === $size) { + return @fgets($this->fp); + } else { + return @fgets($this->fp, $size); + } + } + + /** + * Read a specified amount of data. This is guaranteed to return, + * and has the added benefit of getting everything in one fread() + * chunk; if you know the size of the data you're getting + * beforehand, this is definitely the way to go. + * + * @param integer $size The number of bytes to read from the socket. + * + * @access public + * @return string $size bytes of data from the socket, or a PEAR_Error if + * not connected. + */ + public function read($size) + { + if (!is_resource($this->fp)) { + return $this->raiseError('not connected'); + } + + return @fread($this->fp, $size); + } + + /** + * Write a specified amount of data. + * + * @param string $data Data to write. + * @param integer $blocksize Amount of data to write at once. + * NULL means all at once. + * + * @access public + * @return mixed If the socket is not connected, returns an instance of + * PEAR_Error. + * If the write succeeds, returns the number of bytes written. + * If the write fails, returns false. + * If the socket times out, returns an instance of PEAR_Error. + */ + public function write($data, $blocksize = null) + { + if (!is_resource($this->fp)) { + return $this->raiseError('not connected'); + } + + if (null === $blocksize && !OS_WINDOWS) { + $written = @fwrite($this->fp, $data); + + // Check for timeout or lost connection + if ($written === false) { + $meta_data = $this->getStatus(); + + if (!is_array($meta_data)) { + return $meta_data; // PEAR_Error + } + + if (!empty($meta_data['timed_out'])) { + return $this->raiseError('timed out'); + } + } + + return $written; + } else { + if (null === $blocksize) { + $blocksize = 1024; + } + + $pos = 0; + $size = strlen($data); + while ($pos < $size) { + $written = @fwrite($this->fp, substr($data, $pos, $blocksize)); + + // Check for timeout or lost connection + if ($written === false) { + $meta_data = $this->getStatus(); + + if (!is_array($meta_data)) { + return $meta_data; // PEAR_Error + } + + if (!empty($meta_data['timed_out'])) { + return $this->raiseError('timed out'); + } + + return $written; + } + + $pos += $written; + } + + return $pos; + } + } + + /** + * Write a line of data to the socket, followed by a trailing newline. + * + * @param string $data Data to write + * + * @access public + * @return mixed fwrite() result, or PEAR_Error when not connected + */ + public function writeLine($data) + { + if (!is_resource($this->fp)) { + return $this->raiseError('not connected'); + } + + return fwrite($this->fp, $data . $this->newline); + } + + /** + * Tests for end-of-file on a socket descriptor. + * + * Also returns true if the socket is disconnected. + * + * @access public + * @return bool + */ + public function eof() + { + return (!is_resource($this->fp) || feof($this->fp)); + } + + /** + * Reads a byte of data + * + * @access public + * @return integer 1 byte of data from the socket, or a PEAR_Error if + * not connected. + */ + public function readByte() + { + if (!is_resource($this->fp)) { + return $this->raiseError('not connected'); + } + + return ord(@fread($this->fp, 1)); + } + + /** + * Reads a word of data + * + * @access public + * @return integer 1 word of data from the socket, or a PEAR_Error if + * not connected. + */ + public function readWord() + { + if (!is_resource($this->fp)) { + return $this->raiseError('not connected'); + } + + $buf = @fread($this->fp, 2); + + return (ord($buf[0]) + (ord($buf[1]) << 8)); + } + + /** + * Reads an int of data + * + * @access public + * @return integer 1 int of data from the socket, or a PEAR_Error if + * not connected. + */ + public function readInt() + { + if (!is_resource($this->fp)) { + return $this->raiseError('not connected'); + } + + $buf = @fread($this->fp, 4); + + return (ord($buf[0]) + (ord($buf[1]) << 8) + + (ord($buf[2]) << 16) + (ord($buf[3]) << 24)); + } + + /** + * Reads a zero-terminated string of data + * + * @access public + * @return string, or a PEAR_Error if + * not connected. + */ + public function readString() + { + if (!is_resource($this->fp)) { + return $this->raiseError('not connected'); + } + + $string = ''; + while (($char = @fread($this->fp, 1)) !== "\x00") { + $string .= $char; + } + + return $string; + } + + /** + * Reads an IP Address and returns it in a dot formatted string + * + * @access public + * @return string Dot formatted string, or a PEAR_Error if + * not connected. + */ + public function readIPAddress() + { + if (!is_resource($this->fp)) { + return $this->raiseError('not connected'); + } + + $buf = @fread($this->fp, 4); + + return sprintf('%d.%d.%d.%d', ord($buf[0]), ord($buf[1]), + ord($buf[2]), ord($buf[3])); + } + + /** + * Read until either the end of the socket or a newline, whichever + * comes first. Strips the trailing newline from the returned data. + * + * @access public + * @return string All available data up to a newline, without that + * newline, or until the end of the socket, or a PEAR_Error if + * not connected. + */ + public function readLine() + { + if (!is_resource($this->fp)) { + return $this->raiseError('not connected'); + } + + $line = ''; + + $timeout = time() + $this->timeout; + + while (!feof($this->fp) && (!$this->timeout || time() < $timeout)) { + $line .= @fgets($this->fp, $this->lineLength); + if (substr($line, -1) == "\n") { + return rtrim($line, $this->newline); + } + } + + return $line; + } + + /** + * Read until the socket closes, or until there is no more data in + * the inner PHP buffer. If the inner buffer is empty, in blocking + * mode we wait for at least 1 byte of data. Therefore, in + * blocking mode, if there is no data at all to be read, this + * function will never exit (unless the socket is closed on the + * remote end). + * + * @access public + * + * @return string All data until the socket closes, or a PEAR_Error if + * not connected. + */ + public function readAll() + { + if (!is_resource($this->fp)) { + return $this->raiseError('not connected'); + } + + $data = ''; + $timeout = time() + $this->timeout; + + while (!feof($this->fp) && (!$this->timeout || time() < $timeout)) { + $data .= @fread($this->fp, $this->lineLength); + } + + return $data; + } + + /** + * Runs the equivalent of the select() system call on the socket + * with a timeout specified by tv_sec and tv_usec. + * + * @param integer $state Which of read/write/error to check for. + * @param integer $tv_sec Number of seconds for timeout. + * @param integer $tv_usec Number of microseconds for timeout. + * + * @access public + * @return False if select fails, integer describing which of read/write/error + * are ready, or PEAR_Error if not connected. + */ + public function select($state, $tv_sec, $tv_usec = 0) + { + if (!is_resource($this->fp)) { + return $this->raiseError('not connected'); + } + + $read = null; + $write = null; + $except = null; + if ($state & NET_SOCKET_READ) { + $read[] = $this->fp; + } + if ($state & NET_SOCKET_WRITE) { + $write[] = $this->fp; + } + if ($state & NET_SOCKET_ERROR) { + $except[] = $this->fp; + } + if (false === ($sr = stream_select($read, $write, $except, + $tv_sec, $tv_usec)) + ) { + return false; + } + + $result = 0; + if (count($read)) { + $result |= NET_SOCKET_READ; + } + if (count($write)) { + $result |= NET_SOCKET_WRITE; + } + if (count($except)) { + $result |= NET_SOCKET_ERROR; + } + + return $result; + } + + /** + * Turns encryption on/off on a connected socket. + * + * @param bool $enabled Set this parameter to true to enable encryption + * and false to disable encryption. + * @param integer $type Type of encryption. See stream_socket_enable_crypto() + * for values. + * + * @see http://se.php.net/manual/en/function.stream-socket-enable-crypto.php + * @access public + * @return false on error, true on success and 0 if there isn't enough data + * and the user should try again (non-blocking sockets only). + * A PEAR_Error object is returned if the socket is not + * connected + */ + public function enableCrypto($enabled, $type) + { + if (version_compare(phpversion(), '5.1.0', '>=')) { + if (!is_resource($this->fp)) { + return $this->raiseError('not connected'); + } + + return @stream_socket_enable_crypto($this->fp, $enabled, $type); + } else { + $msg = 'Net_Socket::enableCrypto() requires php version >= 5.1.0'; + + return $this->raiseError($msg); + } + } + +} diff --git a/lib/composer/vendor/pear/net_socket/README.md b/lib/composer/vendor/pear/net_socket/README.md new file mode 100644 index 000000000..d6eb53024 --- /dev/null +++ b/lib/composer/vendor/pear/net_socket/README.md @@ -0,0 +1,43 @@ +# Net_Socket - Network Socket Interface + +[![Build Status](https://travis-ci.org/pear/Net_Socket.svg?branch=master)](https://travis-ci.org/pear/Net_Socket) + + +Net_Socket is a class interface to TCP sockets. It provides blocking +and non-blocking operation, with different reading and writing modes +(byte-wise, block-wise, line-wise and special formats like network +byte-order ip addresses). + +[Homepage](http://pear.php.net/package/Net_Socket/) + + +## Installation +For a PEAR installation that downloads from the PEAR channel: + +`$ pear install pear/net_socket` + +For a PEAR installation from a previously downloaded tarball: + +`$ pear install Net_Socket-*.tgz` + +For a PEAR installation from a code clone: + +`$ pear install package.xml` + +For a local composer installation: + +`$ composer install` + +To add as a dependency to your composer-managed application: + +`$composer require pear/net_socket` + + +## Tests +Run the tests from a local composer installation: + +`$ ./vendor/bin/phpunit` + + +## License +BSD-2 license diff --git a/lib/composer/vendor/pear/net_socket/composer.json b/lib/composer/vendor/pear/net_socket/composer.json new file mode 100644 index 000000000..7bf46ecbc --- /dev/null +++ b/lib/composer/vendor/pear/net_socket/composer.json @@ -0,0 +1,42 @@ +{ + "authors": [ + { + "email": "chuck@horde.org", + "name": "Chuck Hagenbuch", + "role": "Lead" + }, + { + "email": "stig@php.net", + "name": "Stig Bakken", + "role": "Lead" + }, + { + "email": "alec@php.net", + "name": "Aleksander Machniak", + "role": "Lead" + } + ], + "autoload": { + "psr-0": { + "Net": "./" + } + }, + "description": "More info available on: http://pear.php.net/package/Net_Socket", + "include-path": [ + "./" + ], + "license": "BSD-2-Clause", + "name": "pear/net_socket", + "support": { + "issues": "http://pear.php.net/bugs/search.php?cmd=display&package_name[]=Net_Socket", + "source": "https://github.com/pear/Net_Socket" + }, + "type": "library", + "require": { + "php": ">=5.4.0", + "pear/pear_exception": "@stable" + }, + "require-dev": { + "phpunit/phpunit": "^4" + } +} diff --git a/lib/composer/vendor/pear/net_socket/package.xml b/lib/composer/vendor/pear/net_socket/package.xml new file mode 100644 index 000000000..116f6d282 --- /dev/null +++ b/lib/composer/vendor/pear/net_socket/package.xml @@ -0,0 +1,59 @@ + + + Net_Socket + pear.php.net + Network Socket Interface + Net_Socket is a class interface to TCP sockets. It provides blocking + and non-blocking operation, with different reading and writing modes + (byte-wise, block-wise, line-wise and special formats like network + byte-order ip addresses). + + Chuck Hagenbuch + chagenbu + chuck@horde.org + no + + + Stig Bakken + ssb + stig@php.net + no + + + Aleksander Machniak + alec + alec@php.net + no + + 2017-04-06 + + 1.2.1 + 1.2.0 + + + stable + stable + + BSD-2-Clause + +* Fix BSD-2 licensing + + + + + + + + + + + + 5.4.0 + + + 1.10.1 + + + + + diff --git a/lib/composer/vendor/pear/net_socket/phpunit.xml.dist b/lib/composer/vendor/pear/net_socket/phpunit.xml.dist new file mode 100644 index 000000000..8eaaa2fe6 --- /dev/null +++ b/lib/composer/vendor/pear/net_socket/phpunit.xml.dist @@ -0,0 +1,29 @@ + + + + + tests/ + + + + + + Net/ + + + + + + + + + diff --git a/lib/composer/vendor/pear/pear-core-minimal/README.rst b/lib/composer/vendor/pear/pear-core-minimal/README.rst new file mode 100644 index 000000000..9e412fbd1 --- /dev/null +++ b/lib/composer/vendor/pear/pear-core-minimal/README.rst @@ -0,0 +1,26 @@ +****************************** +Minimal set of PEAR core files +****************************** + +This repository provides a set of files from ``pear-core`` +that are often used in PEAR packages. + +It follows the `pear-core`__ repository and gets updated whenever a new +PEAR version is released. + +It's meant to be used as dependency for composer packages. + +__ https://github.com/pear/pear-core + +============== +Included files +============== +- ``OS/Guess.php`` +- ``PEAR.php`` +- ``PEAR/Error.php`` +- ``PEAR/ErrorStack.php`` +- ``System.php`` + + +``PEAR/Error.php`` is a dummy file that only includes ``PEAR.php``, +to make autoloaders work without problems. diff --git a/lib/composer/vendor/pear/pear-core-minimal/composer.json b/lib/composer/vendor/pear/pear-core-minimal/composer.json new file mode 100644 index 000000000..d805f56ae --- /dev/null +++ b/lib/composer/vendor/pear/pear-core-minimal/composer.json @@ -0,0 +1,32 @@ +{ + "name": "pear/pear-core-minimal", + "description": "Minimal set of PEAR core files to be used as composer dependency", + "license": "BSD-3-Clause", + "authors": [ + { + "email": "cweiske@php.net", + "name": "Christian Weiske", + "role": "Lead" + } + ], + "autoload": { + "psr-0": { + "": "src/" + } + }, + "include-path": [ + "src/" + ], + "support": { + "issues": "http://pear.php.net/bugs/search.php?cmd=display&package_name[]=PEAR", + "source": "https://github.com/pear/pear-core-minimal" + }, + "type": "library", + "require": { + "pear/console_getopt": "~1.4", + "pear/pear_exception": "~1.0" + }, + "replace": { + "rsky/pear-core-min": "self.version" + } +} diff --git a/lib/composer/vendor/pear/pear-core-minimal/src/OS/Guess.php b/lib/composer/vendor/pear/pear-core-minimal/src/OS/Guess.php new file mode 100644 index 000000000..c45e84f15 --- /dev/null +++ b/lib/composer/vendor/pear/pear-core-minimal/src/OS/Guess.php @@ -0,0 +1,337 @@ + + * @author Gregory Beaver + * @copyright 1997-2009 The Authors + * @license http://opensource.org/licenses/bsd-license.php New BSD License + * @link http://pear.php.net/package/PEAR + * @since File available since PEAR 0.1 + */ + +// {{{ uname examples + +// php_uname() without args returns the same as 'uname -a', or a PHP-custom +// string for Windows. +// PHP versions prior to 4.3 return the uname of the host where PHP was built, +// as of 4.3 it returns the uname of the host running the PHP code. +// +// PC RedHat Linux 7.1: +// Linux host.example.com 2.4.2-2 #1 Sun Apr 8 20:41:30 EDT 2001 i686 unknown +// +// PC Debian Potato: +// Linux host 2.4.17 #2 SMP Tue Feb 12 15:10:04 CET 2002 i686 unknown +// +// PC FreeBSD 3.3: +// FreeBSD host.example.com 3.3-STABLE FreeBSD 3.3-STABLE #0: Mon Feb 21 00:42:31 CET 2000 root@example.com:/usr/src/sys/compile/CONFIG i386 +// +// PC FreeBSD 4.3: +// FreeBSD host.example.com 4.3-RELEASE FreeBSD 4.3-RELEASE #1: Mon Jun 25 11:19:43 EDT 2001 root@example.com:/usr/src/sys/compile/CONFIG i386 +// +// PC FreeBSD 4.5: +// FreeBSD host.example.com 4.5-STABLE FreeBSD 4.5-STABLE #0: Wed Feb 6 23:59:23 CET 2002 root@example.com:/usr/src/sys/compile/CONFIG i386 +// +// PC FreeBSD 4.5 w/uname from GNU shellutils: +// FreeBSD host.example.com 4.5-STABLE FreeBSD 4.5-STABLE #0: Wed Feb i386 unknown +// +// HP 9000/712 HP-UX 10: +// HP-UX iq B.10.10 A 9000/712 2008429113 two-user license +// +// HP 9000/712 HP-UX 10 w/uname from GNU shellutils: +// HP-UX host B.10.10 A 9000/712 unknown +// +// IBM RS6000/550 AIX 4.3: +// AIX host 3 4 000003531C00 +// +// AIX 4.3 w/uname from GNU shellutils: +// AIX host 3 4 000003531C00 unknown +// +// SGI Onyx IRIX 6.5 w/uname from GNU shellutils: +// IRIX64 host 6.5 01091820 IP19 mips +// +// SGI Onyx IRIX 6.5: +// IRIX64 host 6.5 01091820 IP19 +// +// SparcStation 20 Solaris 8 w/uname from GNU shellutils: +// SunOS host.example.com 5.8 Generic_108528-12 sun4m sparc +// +// SparcStation 20 Solaris 8: +// SunOS host.example.com 5.8 Generic_108528-12 sun4m sparc SUNW,SPARCstation-20 +// +// Mac OS X (Darwin) +// Darwin home-eden.local 7.5.0 Darwin Kernel Version 7.5.0: Thu Aug 5 19:26:16 PDT 2004; root:xnu/xnu-517.7.21.obj~3/RELEASE_PPC Power Macintosh +// +// Mac OS X early versions +// + +// }}} + +/* TODO: + * - define endianness, to allow matchSignature("bigend") etc. + */ + +/** + * Retrieves information about the current operating system + * + * This class uses php_uname() to grok information about the current OS + * + * @category pear + * @package PEAR + * @author Stig Bakken + * @author Gregory Beaver + * @copyright 1997-2009 The Authors + * @license http://opensource.org/licenses/bsd-license.php New BSD License + * @version Release: @package_version@ + * @link http://pear.php.net/package/PEAR + * @since Class available since Release 0.1 + */ +class OS_Guess +{ + var $sysname; + var $nodename; + var $cpu; + var $release; + var $extra; + + function __construct($uname = null) + { + list($this->sysname, + $this->release, + $this->cpu, + $this->extra, + $this->nodename) = $this->parseSignature($uname); + } + + function parseSignature($uname = null) + { + static $sysmap = array( + 'HP-UX' => 'hpux', + 'IRIX64' => 'irix', + ); + static $cpumap = array( + 'i586' => 'i386', + 'i686' => 'i386', + 'ppc' => 'powerpc', + ); + if ($uname === null) { + $uname = php_uname(); + } + $parts = preg_split('/\s+/', trim($uname)); + $n = count($parts); + + $release = $machine = $cpu = ''; + $sysname = $parts[0]; + $nodename = $parts[1]; + $cpu = $parts[$n-1]; + $extra = ''; + if ($cpu == 'unknown') { + $cpu = $parts[$n - 2]; + } + + switch ($sysname) { + case 'AIX' : + $release = "$parts[3].$parts[2]"; + break; + case 'Windows' : + switch ($parts[1]) { + case '95/98': + $release = '9x'; + break; + default: + $release = $parts[1]; + break; + } + $cpu = 'i386'; + break; + case 'Linux' : + $extra = $this->_detectGlibcVersion(); + // use only the first two digits from the kernel version + $release = preg_replace('/^([0-9]+\.[0-9]+).*/', '\1', $parts[2]); + break; + case 'Mac' : + $sysname = 'darwin'; + $nodename = $parts[2]; + $release = $parts[3]; + if ($cpu == 'Macintosh') { + if ($parts[$n - 2] == 'Power') { + $cpu = 'powerpc'; + } + } + break; + case 'Darwin' : + if ($cpu == 'Macintosh') { + if ($parts[$n - 2] == 'Power') { + $cpu = 'powerpc'; + } + } + $release = preg_replace('/^([0-9]+\.[0-9]+).*/', '\1', $parts[2]); + break; + default: + $release = preg_replace('/-.*/', '', $parts[2]); + break; + } + + if (isset($sysmap[$sysname])) { + $sysname = $sysmap[$sysname]; + } else { + $sysname = strtolower($sysname); + } + if (isset($cpumap[$cpu])) { + $cpu = $cpumap[$cpu]; + } + return array($sysname, $release, $cpu, $extra, $nodename); + } + + function _detectGlibcVersion() + { + static $glibc = false; + if ($glibc !== false) { + return $glibc; // no need to run this multiple times + } + $major = $minor = 0; + include_once "System.php"; + // Use glibc's header file to + // get major and minor version number: + if (@file_exists('/usr/include/features.h') && + @is_readable('/usr/include/features.h')) { + if (!@file_exists('/usr/bin/cpp') || !@is_executable('/usr/bin/cpp')) { + $features_file = fopen('/usr/include/features.h', 'rb'); + while (!feof($features_file)) { + $line = fgets($features_file, 8192); + if (!$line || (strpos($line, '#define') === false)) { + continue; + } + if (strpos($line, '__GLIBC__')) { + // major version number #define __GLIBC__ version + $line = preg_split('/\s+/', $line); + $glibc_major = trim($line[2]); + if (isset($glibc_minor)) { + break; + } + continue; + } + + if (strpos($line, '__GLIBC_MINOR__')) { + // got the minor version number + // #define __GLIBC_MINOR__ version + $line = preg_split('/\s+/', $line); + $glibc_minor = trim($line[2]); + if (isset($glibc_major)) { + break; + } + continue; + } + } + fclose($features_file); + if (!isset($glibc_major) || !isset($glibc_minor)) { + return $glibc = ''; + } + return $glibc = 'glibc' . trim($glibc_major) . "." . trim($glibc_minor) ; + } // no cpp + + $tmpfile = System::mktemp("glibctest"); + $fp = fopen($tmpfile, "w"); + fwrite($fp, "#include \n__GLIBC__ __GLIBC_MINOR__\n"); + fclose($fp); + $cpp = popen("/usr/bin/cpp $tmpfile", "r"); + while ($line = fgets($cpp, 1024)) { + if ($line{0} == '#' || trim($line) == '') { + continue; + } + + if (list($major, $minor) = explode(' ', trim($line))) { + break; + } + } + pclose($cpp); + unlink($tmpfile); + } // features.h + + if (!($major && $minor) && @is_link('/lib/libc.so.6')) { + // Let's try reading the libc.so.6 symlink + if (preg_match('/^libc-(.*)\.so$/', basename(readlink('/lib/libc.so.6')), $matches)) { + list($major, $minor) = explode('.', $matches[1]); + } + } + + if (!($major && $minor)) { + return $glibc = ''; + } + + return $glibc = "glibc{$major}.{$minor}"; + } + + function getSignature() + { + if (empty($this->extra)) { + return "{$this->sysname}-{$this->release}-{$this->cpu}"; + } + return "{$this->sysname}-{$this->release}-{$this->cpu}-{$this->extra}"; + } + + function getSysname() + { + return $this->sysname; + } + + function getNodename() + { + return $this->nodename; + } + + function getCpu() + { + return $this->cpu; + } + + function getRelease() + { + return $this->release; + } + + function getExtra() + { + return $this->extra; + } + + function matchSignature($match) + { + $fragments = is_array($match) ? $match : explode('-', $match); + $n = count($fragments); + $matches = 0; + if ($n > 0) { + $matches += $this->_matchFragment($fragments[0], $this->sysname); + } + if ($n > 1) { + $matches += $this->_matchFragment($fragments[1], $this->release); + } + if ($n > 2) { + $matches += $this->_matchFragment($fragments[2], $this->cpu); + } + if ($n > 3) { + $matches += $this->_matchFragment($fragments[3], $this->extra); + } + return ($matches == $n); + } + + function _matchFragment($fragment, $value) + { + if (strcspn($fragment, '*?') < strlen($fragment)) { + $reg = '/^' . str_replace(array('*', '?', '/'), array('.*', '.', '\\/'), $fragment) . '\\z/'; + return preg_match($reg, $value); + } + return ($fragment == '*' || !strcasecmp($fragment, $value)); + } + +} +/* + * Local Variables: + * indent-tabs-mode: nil + * c-basic-offset: 4 + * End: + */ diff --git a/lib/composer/vendor/pear/pear-core-minimal/src/PEAR.php b/lib/composer/vendor/pear/pear-core-minimal/src/PEAR.php new file mode 100644 index 000000000..b6bb191e7 --- /dev/null +++ b/lib/composer/vendor/pear/pear-core-minimal/src/PEAR.php @@ -0,0 +1,1113 @@ + + * @author Stig Bakken + * @author Tomas V.V.Cox + * @author Greg Beaver + * @copyright 1997-2010 The Authors + * @license http://opensource.org/licenses/bsd-license.php New BSD License + * @link http://pear.php.net/package/PEAR + * @since File available since Release 0.1 + */ + +/**#@+ + * ERROR constants + */ +define('PEAR_ERROR_RETURN', 1); +define('PEAR_ERROR_PRINT', 2); +define('PEAR_ERROR_TRIGGER', 4); +define('PEAR_ERROR_DIE', 8); +define('PEAR_ERROR_CALLBACK', 16); +/** + * WARNING: obsolete + * @deprecated + */ +define('PEAR_ERROR_EXCEPTION', 32); +/**#@-*/ + +if (substr(PHP_OS, 0, 3) == 'WIN') { + define('OS_WINDOWS', true); + define('OS_UNIX', false); + define('PEAR_OS', 'Windows'); +} else { + define('OS_WINDOWS', false); + define('OS_UNIX', true); + define('PEAR_OS', 'Unix'); // blatant assumption +} + +$GLOBALS['_PEAR_default_error_mode'] = PEAR_ERROR_RETURN; +$GLOBALS['_PEAR_default_error_options'] = E_USER_NOTICE; +$GLOBALS['_PEAR_destructor_object_list'] = array(); +$GLOBALS['_PEAR_shutdown_funcs'] = array(); +$GLOBALS['_PEAR_error_handler_stack'] = array(); + +@ini_set('track_errors', true); + +/** + * Base class for other PEAR classes. Provides rudimentary + * emulation of destructors. + * + * If you want a destructor in your class, inherit PEAR and make a + * destructor method called _yourclassname (same name as the + * constructor, but with a "_" prefix). Also, in your constructor you + * have to call the PEAR constructor: $this->PEAR();. + * The destructor method will be called without parameters. Note that + * at in some SAPI implementations (such as Apache), any output during + * the request shutdown (in which destructors are called) seems to be + * discarded. If you need to get any debug information from your + * destructor, use error_log(), syslog() or something similar. + * + * IMPORTANT! To use the emulated destructors you need to create the + * objects by reference: $obj =& new PEAR_child; + * + * @category pear + * @package PEAR + * @author Stig Bakken + * @author Tomas V.V. Cox + * @author Greg Beaver + * @copyright 1997-2006 The PHP Group + * @license http://opensource.org/licenses/bsd-license.php New BSD License + * @version Release: @package_version@ + * @link http://pear.php.net/package/PEAR + * @see PEAR_Error + * @since Class available since PHP 4.0.2 + * @link http://pear.php.net/manual/en/core.pear.php#core.pear.pear + */ +class PEAR +{ + /** + * Whether to enable internal debug messages. + * + * @var bool + * @access private + */ + var $_debug = false; + + /** + * Default error mode for this object. + * + * @var int + * @access private + */ + var $_default_error_mode = null; + + /** + * Default error options used for this object when error mode + * is PEAR_ERROR_TRIGGER. + * + * @var int + * @access private + */ + var $_default_error_options = null; + + /** + * Default error handler (callback) for this object, if error mode is + * PEAR_ERROR_CALLBACK. + * + * @var string + * @access private + */ + var $_default_error_handler = ''; + + /** + * Which class to use for error objects. + * + * @var string + * @access private + */ + var $_error_class = 'PEAR_Error'; + + /** + * An array of expected errors. + * + * @var array + * @access private + */ + var $_expected_errors = array(); + + /** + * List of methods that can be called both statically and non-statically. + * @var array + */ + protected static $bivalentMethods = array( + 'setErrorHandling' => true, + 'raiseError' => true, + 'throwError' => true, + 'pushErrorHandling' => true, + 'popErrorHandling' => true, + ); + + /** + * Constructor. Registers this object in + * $_PEAR_destructor_object_list for destructor emulation if a + * destructor object exists. + * + * @param string $error_class (optional) which class to use for + * error objects, defaults to PEAR_Error. + * @access public + * @return void + */ + function __construct($error_class = null) + { + $classname = strtolower(get_class($this)); + if ($this->_debug) { + print "PEAR constructor called, class=$classname\n"; + } + + if ($error_class !== null) { + $this->_error_class = $error_class; + } + + while ($classname && strcasecmp($classname, "pear")) { + $destructor = "_$classname"; + if (method_exists($this, $destructor)) { + global $_PEAR_destructor_object_list; + $_PEAR_destructor_object_list[] = &$this; + if (!isset($GLOBALS['_PEAR_SHUTDOWN_REGISTERED'])) { + register_shutdown_function("_PEAR_call_destructors"); + $GLOBALS['_PEAR_SHUTDOWN_REGISTERED'] = true; + } + break; + } else { + $classname = get_parent_class($classname); + } + } + } + + /** + * Only here for backwards compatibility. + * E.g. Archive_Tar calls $this->PEAR() in its constructor. + * + * @param string $error_class Which class to use for error objects, + * defaults to PEAR_Error. + */ + public function PEAR($error_class = null) + { + self::__construct($error_class); + } + + /** + * Destructor (the emulated type of...). Does nothing right now, + * but is included for forward compatibility, so subclass + * destructors should always call it. + * + * See the note in the class desciption about output from + * destructors. + * + * @access public + * @return void + */ + function _PEAR() { + if ($this->_debug) { + printf("PEAR destructor called, class=%s\n", strtolower(get_class($this))); + } + } + + public function __call($method, $arguments) + { + if (!isset(self::$bivalentMethods[$method])) { + trigger_error( + 'Call to undefined method PEAR::' . $method . '()', E_USER_ERROR + ); + } + return call_user_func_array( + array(get_class(), '_' . $method), + array_merge(array($this), $arguments) + ); + } + + public static function __callStatic($method, $arguments) + { + if (!isset(self::$bivalentMethods[$method])) { + trigger_error( + 'Call to undefined method PEAR::' . $method . '()', E_USER_ERROR + ); + } + return call_user_func_array( + array(get_class(), '_' . $method), + array_merge(array(null), $arguments) + ); + } + + /** + * If you have a class that's mostly/entirely static, and you need static + * properties, you can use this method to simulate them. Eg. in your method(s) + * do this: $myVar = &PEAR::getStaticProperty('myclass', 'myVar'); + * You MUST use a reference, or they will not persist! + * + * @param string $class The calling classname, to prevent clashes + * @param string $var The variable to retrieve. + * @return mixed A reference to the variable. If not set it will be + * auto initialised to NULL. + */ + public static function &getStaticProperty($class, $var) + { + static $properties; + if (!isset($properties[$class])) { + $properties[$class] = array(); + } + + if (!array_key_exists($var, $properties[$class])) { + $properties[$class][$var] = null; + } + + return $properties[$class][$var]; + } + + /** + * Use this function to register a shutdown method for static + * classes. + * + * @param mixed $func The function name (or array of class/method) to call + * @param mixed $args The arguments to pass to the function + * + * @return void + */ + public static function registerShutdownFunc($func, $args = array()) + { + // if we are called statically, there is a potential + // that no shutdown func is registered. Bug #6445 + if (!isset($GLOBALS['_PEAR_SHUTDOWN_REGISTERED'])) { + register_shutdown_function("_PEAR_call_destructors"); + $GLOBALS['_PEAR_SHUTDOWN_REGISTERED'] = true; + } + $GLOBALS['_PEAR_shutdown_funcs'][] = array($func, $args); + } + + /** + * Tell whether a value is a PEAR error. + * + * @param mixed $data the value to test + * @param int $code if $data is an error object, return true + * only if $code is a string and + * $obj->getMessage() == $code or + * $code is an integer and $obj->getCode() == $code + * + * @return bool true if parameter is an error + */ + public static function isError($data, $code = null) + { + if (!is_a($data, 'PEAR_Error')) { + return false; + } + + if (is_null($code)) { + return true; + } elseif (is_string($code)) { + return $data->getMessage() == $code; + } + + return $data->getCode() == $code; + } + + /** + * Sets how errors generated by this object should be handled. + * Can be invoked both in objects and statically. If called + * statically, setErrorHandling sets the default behaviour for all + * PEAR objects. If called in an object, setErrorHandling sets + * the default behaviour for that object. + * + * @param object $object + * Object the method was called on (non-static mode) + * + * @param int $mode + * One of PEAR_ERROR_RETURN, PEAR_ERROR_PRINT, + * PEAR_ERROR_TRIGGER, PEAR_ERROR_DIE, + * PEAR_ERROR_CALLBACK or PEAR_ERROR_EXCEPTION. + * + * @param mixed $options + * When $mode is PEAR_ERROR_TRIGGER, this is the error level (one + * of E_USER_NOTICE, E_USER_WARNING or E_USER_ERROR). + * + * When $mode is PEAR_ERROR_CALLBACK, this parameter is expected + * to be the callback function or method. A callback + * function is a string with the name of the function, a + * callback method is an array of two elements: the element + * at index 0 is the object, and the element at index 1 is + * the name of the method to call in the object. + * + * When $mode is PEAR_ERROR_PRINT or PEAR_ERROR_DIE, this is + * a printf format string used when printing the error + * message. + * + * @access public + * @return void + * @see PEAR_ERROR_RETURN + * @see PEAR_ERROR_PRINT + * @see PEAR_ERROR_TRIGGER + * @see PEAR_ERROR_DIE + * @see PEAR_ERROR_CALLBACK + * @see PEAR_ERROR_EXCEPTION + * + * @since PHP 4.0.5 + */ + protected static function _setErrorHandling( + $object, $mode = null, $options = null + ) { + if ($object !== null) { + $setmode = &$object->_default_error_mode; + $setoptions = &$object->_default_error_options; + } else { + $setmode = &$GLOBALS['_PEAR_default_error_mode']; + $setoptions = &$GLOBALS['_PEAR_default_error_options']; + } + + switch ($mode) { + case PEAR_ERROR_EXCEPTION: + case PEAR_ERROR_RETURN: + case PEAR_ERROR_PRINT: + case PEAR_ERROR_TRIGGER: + case PEAR_ERROR_DIE: + case null: + $setmode = $mode; + $setoptions = $options; + break; + + case PEAR_ERROR_CALLBACK: + $setmode = $mode; + // class/object method callback + if (is_callable($options)) { + $setoptions = $options; + } else { + trigger_error("invalid error callback", E_USER_WARNING); + } + break; + + default: + trigger_error("invalid error mode", E_USER_WARNING); + break; + } + } + + /** + * This method is used to tell which errors you expect to get. + * Expected errors are always returned with error mode + * PEAR_ERROR_RETURN. Expected error codes are stored in a stack, + * and this method pushes a new element onto it. The list of + * expected errors are in effect until they are popped off the + * stack with the popExpect() method. + * + * Note that this method can not be called statically + * + * @param mixed $code a single error code or an array of error codes to expect + * + * @return int the new depth of the "expected errors" stack + * @access public + */ + function expectError($code = '*') + { + if (is_array($code)) { + array_push($this->_expected_errors, $code); + } else { + array_push($this->_expected_errors, array($code)); + } + return count($this->_expected_errors); + } + + /** + * This method pops one element off the expected error codes + * stack. + * + * @return array the list of error codes that were popped + */ + function popExpect() + { + return array_pop($this->_expected_errors); + } + + /** + * This method checks unsets an error code if available + * + * @param mixed error code + * @return bool true if the error code was unset, false otherwise + * @access private + * @since PHP 4.3.0 + */ + function _checkDelExpect($error_code) + { + $deleted = false; + foreach ($this->_expected_errors as $key => $error_array) { + if (in_array($error_code, $error_array)) { + unset($this->_expected_errors[$key][array_search($error_code, $error_array)]); + $deleted = true; + } + + // clean up empty arrays + if (0 == count($this->_expected_errors[$key])) { + unset($this->_expected_errors[$key]); + } + } + + return $deleted; + } + + /** + * This method deletes all occurrences of the specified element from + * the expected error codes stack. + * + * @param mixed $error_code error code that should be deleted + * @return mixed list of error codes that were deleted or error + * @access public + * @since PHP 4.3.0 + */ + function delExpect($error_code) + { + $deleted = false; + if ((is_array($error_code) && (0 != count($error_code)))) { + // $error_code is a non-empty array here; we walk through it trying + // to unset all values + foreach ($error_code as $key => $error) { + $deleted = $this->_checkDelExpect($error) ? true : false; + } + + return $deleted ? true : PEAR::raiseError("The expected error you submitted does not exist"); // IMPROVE ME + } elseif (!empty($error_code)) { + // $error_code comes alone, trying to unset it + if ($this->_checkDelExpect($error_code)) { + return true; + } + + return PEAR::raiseError("The expected error you submitted does not exist"); // IMPROVE ME + } + + // $error_code is empty + return PEAR::raiseError("The expected error you submitted is empty"); // IMPROVE ME + } + + /** + * This method is a wrapper that returns an instance of the + * configured error class with this object's default error + * handling applied. If the $mode and $options parameters are not + * specified, the object's defaults are used. + * + * @param mixed $message a text error message or a PEAR error object + * + * @param int $code a numeric error code (it is up to your class + * to define these if you want to use codes) + * + * @param int $mode One of PEAR_ERROR_RETURN, PEAR_ERROR_PRINT, + * PEAR_ERROR_TRIGGER, PEAR_ERROR_DIE, + * PEAR_ERROR_CALLBACK, PEAR_ERROR_EXCEPTION. + * + * @param mixed $options If $mode is PEAR_ERROR_TRIGGER, this parameter + * specifies the PHP-internal error level (one of + * E_USER_NOTICE, E_USER_WARNING or E_USER_ERROR). + * If $mode is PEAR_ERROR_CALLBACK, this + * parameter specifies the callback function or + * method. In other error modes this parameter + * is ignored. + * + * @param string $userinfo If you need to pass along for example debug + * information, this parameter is meant for that. + * + * @param string $error_class The returned error object will be + * instantiated from this class, if specified. + * + * @param bool $skipmsg If true, raiseError will only pass error codes, + * the error message parameter will be dropped. + * + * @return object a PEAR error object + * @see PEAR::setErrorHandling + * @since PHP 4.0.5 + */ + protected static function _raiseError($object, + $message = null, + $code = null, + $mode = null, + $options = null, + $userinfo = null, + $error_class = null, + $skipmsg = false) + { + // The error is yet a PEAR error object + if (is_object($message)) { + $code = $message->getCode(); + $userinfo = $message->getUserInfo(); + $error_class = $message->getType(); + $message->error_message_prefix = ''; + $message = $message->getMessage(); + } + + if ( + $object !== null && + isset($object->_expected_errors) && + count($object->_expected_errors) > 0 && + count($exp = end($object->_expected_errors)) + ) { + if ($exp[0] == "*" || + (is_int(reset($exp)) && in_array($code, $exp)) || + (is_string(reset($exp)) && in_array($message, $exp)) + ) { + $mode = PEAR_ERROR_RETURN; + } + } + + // No mode given, try global ones + if ($mode === null) { + // Class error handler + if ($object !== null && isset($object->_default_error_mode)) { + $mode = $object->_default_error_mode; + $options = $object->_default_error_options; + // Global error handler + } elseif (isset($GLOBALS['_PEAR_default_error_mode'])) { + $mode = $GLOBALS['_PEAR_default_error_mode']; + $options = $GLOBALS['_PEAR_default_error_options']; + } + } + + if ($error_class !== null) { + $ec = $error_class; + } elseif ($object !== null && isset($object->_error_class)) { + $ec = $object->_error_class; + } else { + $ec = 'PEAR_Error'; + } + + if ($skipmsg) { + $a = new $ec($code, $mode, $options, $userinfo); + } else { + $a = new $ec($message, $code, $mode, $options, $userinfo); + } + + return $a; + } + + /** + * Simpler form of raiseError with fewer options. In most cases + * message, code and userinfo are enough. + * + * @param mixed $message a text error message or a PEAR error object + * + * @param int $code a numeric error code (it is up to your class + * to define these if you want to use codes) + * + * @param string $userinfo If you need to pass along for example debug + * information, this parameter is meant for that. + * + * @return object a PEAR error object + * @see PEAR::raiseError + */ + protected static function _throwError($object, $message = null, $code = null, $userinfo = null) + { + if ($object !== null) { + $a = &$object->raiseError($message, $code, null, null, $userinfo); + return $a; + } + + $a = &PEAR::raiseError($message, $code, null, null, $userinfo); + return $a; + } + + public static function staticPushErrorHandling($mode, $options = null) + { + $stack = &$GLOBALS['_PEAR_error_handler_stack']; + $def_mode = &$GLOBALS['_PEAR_default_error_mode']; + $def_options = &$GLOBALS['_PEAR_default_error_options']; + $stack[] = array($def_mode, $def_options); + switch ($mode) { + case PEAR_ERROR_EXCEPTION: + case PEAR_ERROR_RETURN: + case PEAR_ERROR_PRINT: + case PEAR_ERROR_TRIGGER: + case PEAR_ERROR_DIE: + case null: + $def_mode = $mode; + $def_options = $options; + break; + + case PEAR_ERROR_CALLBACK: + $def_mode = $mode; + // class/object method callback + if (is_callable($options)) { + $def_options = $options; + } else { + trigger_error("invalid error callback", E_USER_WARNING); + } + break; + + default: + trigger_error("invalid error mode", E_USER_WARNING); + break; + } + $stack[] = array($mode, $options); + return true; + } + + public static function staticPopErrorHandling() + { + $stack = &$GLOBALS['_PEAR_error_handler_stack']; + $setmode = &$GLOBALS['_PEAR_default_error_mode']; + $setoptions = &$GLOBALS['_PEAR_default_error_options']; + array_pop($stack); + list($mode, $options) = $stack[sizeof($stack) - 1]; + array_pop($stack); + switch ($mode) { + case PEAR_ERROR_EXCEPTION: + case PEAR_ERROR_RETURN: + case PEAR_ERROR_PRINT: + case PEAR_ERROR_TRIGGER: + case PEAR_ERROR_DIE: + case null: + $setmode = $mode; + $setoptions = $options; + break; + + case PEAR_ERROR_CALLBACK: + $setmode = $mode; + // class/object method callback + if (is_callable($options)) { + $setoptions = $options; + } else { + trigger_error("invalid error callback", E_USER_WARNING); + } + break; + + default: + trigger_error("invalid error mode", E_USER_WARNING); + break; + } + return true; + } + + /** + * Push a new error handler on top of the error handler options stack. With this + * you can easily override the actual error handler for some code and restore + * it later with popErrorHandling. + * + * @param mixed $mode (same as setErrorHandling) + * @param mixed $options (same as setErrorHandling) + * + * @return bool Always true + * + * @see PEAR::setErrorHandling + */ + protected static function _pushErrorHandling($object, $mode, $options = null) + { + $stack = &$GLOBALS['_PEAR_error_handler_stack']; + if ($object !== null) { + $def_mode = &$object->_default_error_mode; + $def_options = &$object->_default_error_options; + } else { + $def_mode = &$GLOBALS['_PEAR_default_error_mode']; + $def_options = &$GLOBALS['_PEAR_default_error_options']; + } + $stack[] = array($def_mode, $def_options); + + if ($object !== null) { + $object->setErrorHandling($mode, $options); + } else { + PEAR::setErrorHandling($mode, $options); + } + $stack[] = array($mode, $options); + return true; + } + + /** + * Pop the last error handler used + * + * @return bool Always true + * + * @see PEAR::pushErrorHandling + */ + protected static function _popErrorHandling($object) + { + $stack = &$GLOBALS['_PEAR_error_handler_stack']; + array_pop($stack); + list($mode, $options) = $stack[sizeof($stack) - 1]; + array_pop($stack); + if ($object !== null) { + $object->setErrorHandling($mode, $options); + } else { + PEAR::setErrorHandling($mode, $options); + } + return true; + } + + /** + * OS independent PHP extension load. Remember to take care + * on the correct extension name for case sensitive OSes. + * + * @param string $ext The extension name + * @return bool Success or not on the dl() call + */ + public static function loadExtension($ext) + { + if (extension_loaded($ext)) { + return true; + } + + // if either returns true dl() will produce a FATAL error, stop that + if ( + function_exists('dl') === false || + ini_get('enable_dl') != 1 + ) { + return false; + } + + if (OS_WINDOWS) { + $suffix = '.dll'; + } elseif (PHP_OS == 'HP-UX') { + $suffix = '.sl'; + } elseif (PHP_OS == 'AIX') { + $suffix = '.a'; + } elseif (PHP_OS == 'OSX') { + $suffix = '.bundle'; + } else { + $suffix = '.so'; + } + + return @dl('php_'.$ext.$suffix) || @dl($ext.$suffix); + } +} + +function _PEAR_call_destructors() +{ + global $_PEAR_destructor_object_list; + if (is_array($_PEAR_destructor_object_list) && + sizeof($_PEAR_destructor_object_list)) + { + reset($_PEAR_destructor_object_list); + + $destructLifoExists = PEAR::getStaticProperty('PEAR', 'destructlifo'); + + if ($destructLifoExists) { + $_PEAR_destructor_object_list = array_reverse($_PEAR_destructor_object_list); + } + + while (list($k, $objref) = each($_PEAR_destructor_object_list)) { + $classname = get_class($objref); + while ($classname) { + $destructor = "_$classname"; + if (method_exists($objref, $destructor)) { + $objref->$destructor(); + break; + } else { + $classname = get_parent_class($classname); + } + } + } + // Empty the object list to ensure that destructors are + // not called more than once. + $_PEAR_destructor_object_list = array(); + } + + // Now call the shutdown functions + if ( + isset($GLOBALS['_PEAR_shutdown_funcs']) && + is_array($GLOBALS['_PEAR_shutdown_funcs']) && + !empty($GLOBALS['_PEAR_shutdown_funcs']) + ) { + foreach ($GLOBALS['_PEAR_shutdown_funcs'] as $value) { + call_user_func_array($value[0], $value[1]); + } + } +} + +/** + * Standard PEAR error class for PHP 4 + * + * This class is supserseded by {@link PEAR_Exception} in PHP 5 + * + * @category pear + * @package PEAR + * @author Stig Bakken + * @author Tomas V.V. Cox + * @author Gregory Beaver + * @copyright 1997-2006 The PHP Group + * @license http://opensource.org/licenses/bsd-license.php New BSD License + * @version Release: @package_version@ + * @link http://pear.php.net/manual/en/core.pear.pear-error.php + * @see PEAR::raiseError(), PEAR::throwError() + * @since Class available since PHP 4.0.2 + */ +class PEAR_Error +{ + var $error_message_prefix = ''; + var $mode = PEAR_ERROR_RETURN; + var $level = E_USER_NOTICE; + var $code = -1; + var $message = ''; + var $userinfo = ''; + var $backtrace = null; + + /** + * PEAR_Error constructor + * + * @param string $message message + * + * @param int $code (optional) error code + * + * @param int $mode (optional) error mode, one of: PEAR_ERROR_RETURN, + * PEAR_ERROR_PRINT, PEAR_ERROR_DIE, PEAR_ERROR_TRIGGER, + * PEAR_ERROR_CALLBACK or PEAR_ERROR_EXCEPTION + * + * @param mixed $options (optional) error level, _OR_ in the case of + * PEAR_ERROR_CALLBACK, the callback function or object/method + * tuple. + * + * @param string $userinfo (optional) additional user/debug info + * + * @access public + * + */ + function __construct($message = 'unknown error', $code = null, + $mode = null, $options = null, $userinfo = null) + { + if ($mode === null) { + $mode = PEAR_ERROR_RETURN; + } + $this->message = $message; + $this->code = $code; + $this->mode = $mode; + $this->userinfo = $userinfo; + + $skiptrace = PEAR::getStaticProperty('PEAR_Error', 'skiptrace'); + + if (!$skiptrace) { + $this->backtrace = debug_backtrace(); + if (isset($this->backtrace[0]) && isset($this->backtrace[0]['object'])) { + unset($this->backtrace[0]['object']); + } + } + + if ($mode & PEAR_ERROR_CALLBACK) { + $this->level = E_USER_NOTICE; + $this->callback = $options; + } else { + if ($options === null) { + $options = E_USER_NOTICE; + } + + $this->level = $options; + $this->callback = null; + } + + if ($this->mode & PEAR_ERROR_PRINT) { + if (is_null($options) || is_int($options)) { + $format = "%s"; + } else { + $format = $options; + } + + printf($format, $this->getMessage()); + } + + if ($this->mode & PEAR_ERROR_TRIGGER) { + trigger_error($this->getMessage(), $this->level); + } + + if ($this->mode & PEAR_ERROR_DIE) { + $msg = $this->getMessage(); + if (is_null($options) || is_int($options)) { + $format = "%s"; + if (substr($msg, -1) != "\n") { + $msg .= "\n"; + } + } else { + $format = $options; + } + printf($format, $msg); + exit($code); + } + + if ($this->mode & PEAR_ERROR_CALLBACK && is_callable($this->callback)) { + call_user_func($this->callback, $this); + } + + if ($this->mode & PEAR_ERROR_EXCEPTION) { + trigger_error("PEAR_ERROR_EXCEPTION is obsolete, use class PEAR_Exception for exceptions", E_USER_WARNING); + eval('$e = new Exception($this->message, $this->code);throw($e);'); + } + } + + /** + * Only here for backwards compatibility. + * + * Class "Cache_Error" still uses it, among others. + * + * @param string $message Message + * @param int $code Error code + * @param int $mode Error mode + * @param mixed $options See __construct() + * @param string $userinfo Additional user/debug info + */ + public function PEAR_Error( + $message = 'unknown error', $code = null, $mode = null, + $options = null, $userinfo = null + ) { + self::__construct($message, $code, $mode, $options, $userinfo); + } + + /** + * Get the error mode from an error object. + * + * @return int error mode + * @access public + */ + function getMode() + { + return $this->mode; + } + + /** + * Get the callback function/method from an error object. + * + * @return mixed callback function or object/method array + * @access public + */ + function getCallback() + { + return $this->callback; + } + + /** + * Get the error message from an error object. + * + * @return string full error message + * @access public + */ + function getMessage() + { + return ($this->error_message_prefix . $this->message); + } + + /** + * Get error code from an error object + * + * @return int error code + * @access public + */ + function getCode() + { + return $this->code; + } + + /** + * Get the name of this error/exception. + * + * @return string error/exception name (type) + * @access public + */ + function getType() + { + return get_class($this); + } + + /** + * Get additional user-supplied information. + * + * @return string user-supplied information + * @access public + */ + function getUserInfo() + { + return $this->userinfo; + } + + /** + * Get additional debug information supplied by the application. + * + * @return string debug information + * @access public + */ + function getDebugInfo() + { + return $this->getUserInfo(); + } + + /** + * Get the call backtrace from where the error was generated. + * Supported with PHP 4.3.0 or newer. + * + * @param int $frame (optional) what frame to fetch + * @return array Backtrace, or NULL if not available. + * @access public + */ + function getBacktrace($frame = null) + { + if (defined('PEAR_IGNORE_BACKTRACE')) { + return null; + } + if ($frame === null) { + return $this->backtrace; + } + return $this->backtrace[$frame]; + } + + function addUserInfo($info) + { + if (empty($this->userinfo)) { + $this->userinfo = $info; + } else { + $this->userinfo .= " ** $info"; + } + } + + function __toString() + { + return $this->getMessage(); + } + + /** + * Make a string representation of this object. + * + * @return string a string with an object summary + * @access public + */ + function toString() + { + $modes = array(); + $levels = array(E_USER_NOTICE => 'notice', + E_USER_WARNING => 'warning', + E_USER_ERROR => 'error'); + if ($this->mode & PEAR_ERROR_CALLBACK) { + if (is_array($this->callback)) { + $callback = (is_object($this->callback[0]) ? + strtolower(get_class($this->callback[0])) : + $this->callback[0]) . '::' . + $this->callback[1]; + } else { + $callback = $this->callback; + } + return sprintf('[%s: message="%s" code=%d mode=callback '. + 'callback=%s prefix="%s" info="%s"]', + strtolower(get_class($this)), $this->message, $this->code, + $callback, $this->error_message_prefix, + $this->userinfo); + } + if ($this->mode & PEAR_ERROR_PRINT) { + $modes[] = 'print'; + } + if ($this->mode & PEAR_ERROR_TRIGGER) { + $modes[] = 'trigger'; + } + if ($this->mode & PEAR_ERROR_DIE) { + $modes[] = 'die'; + } + if ($this->mode & PEAR_ERROR_RETURN) { + $modes[] = 'return'; + } + return sprintf('[%s: message="%s" code=%d mode=%s level=%s '. + 'prefix="%s" info="%s"]', + strtolower(get_class($this)), $this->message, $this->code, + implode("|", $modes), $levels[$this->level], + $this->error_message_prefix, + $this->userinfo); + } +} + +/* + * Local Variables: + * mode: php + * tab-width: 4 + * c-basic-offset: 4 + * End: + */ diff --git a/lib/composer/vendor/pear/pear-core-minimal/src/PEAR/Error.php b/lib/composer/vendor/pear/pear-core-minimal/src/PEAR/Error.php new file mode 100644 index 000000000..96efff75d --- /dev/null +++ b/lib/composer/vendor/pear/pear-core-minimal/src/PEAR/Error.php @@ -0,0 +1,14 @@ + + * @license http://opensource.org/licenses/bsd-license.php New BSD License + * @link http://pear.php.net/package/PEAR + */ +require_once __DIR__ . '/../PEAR.php'; +?> \ No newline at end of file diff --git a/lib/composer/vendor/pear/pear-core-minimal/src/PEAR/ErrorStack.php b/lib/composer/vendor/pear/pear-core-minimal/src/PEAR/ErrorStack.php new file mode 100644 index 000000000..7af45bfae --- /dev/null +++ b/lib/composer/vendor/pear/pear-core-minimal/src/PEAR/ErrorStack.php @@ -0,0 +1,979 @@ + + * @copyright 2004-2008 Greg Beaver + * @license http://opensource.org/licenses/bsd-license.php New BSD License + * @link http://pear.php.net/package/PEAR_ErrorStack + */ + +/** + * Singleton storage + * + * Format: + *
+ * array(
+ *  'package1' => PEAR_ErrorStack object,
+ *  'package2' => PEAR_ErrorStack object,
+ *  ...
+ * )
+ * 
+ * @access private + * @global array $GLOBALS['_PEAR_ERRORSTACK_SINGLETON'] + */ +$GLOBALS['_PEAR_ERRORSTACK_SINGLETON'] = array(); + +/** + * Global error callback (default) + * + * This is only used if set to non-false. * is the default callback for + * all packages, whereas specific packages may set a default callback + * for all instances, regardless of whether they are a singleton or not. + * + * To exclude non-singletons, only set the local callback for the singleton + * @see PEAR_ErrorStack::setDefaultCallback() + * @access private + * @global array $GLOBALS['_PEAR_ERRORSTACK_DEFAULT_CALLBACK'] + */ +$GLOBALS['_PEAR_ERRORSTACK_DEFAULT_CALLBACK'] = array( + '*' => false, +); + +/** + * Global Log object (default) + * + * This is only used if set to non-false. Use to set a default log object for + * all stacks, regardless of instantiation order or location + * @see PEAR_ErrorStack::setDefaultLogger() + * @access private + * @global array $GLOBALS['_PEAR_ERRORSTACK_DEFAULT_LOGGER'] + */ +$GLOBALS['_PEAR_ERRORSTACK_DEFAULT_LOGGER'] = false; + +/** + * Global Overriding Callback + * + * This callback will override any error callbacks that specific loggers have set. + * Use with EXTREME caution + * @see PEAR_ErrorStack::staticPushCallback() + * @access private + * @global array $GLOBALS['_PEAR_ERRORSTACK_DEFAULT_LOGGER'] + */ +$GLOBALS['_PEAR_ERRORSTACK_OVERRIDE_CALLBACK'] = array(); + +/**#@+ + * One of four possible return values from the error Callback + * @see PEAR_ErrorStack::_errorCallback() + */ +/** + * If this is returned, then the error will be both pushed onto the stack + * and logged. + */ +define('PEAR_ERRORSTACK_PUSHANDLOG', 1); +/** + * If this is returned, then the error will only be pushed onto the stack, + * and not logged. + */ +define('PEAR_ERRORSTACK_PUSH', 2); +/** + * If this is returned, then the error will only be logged, but not pushed + * onto the error stack. + */ +define('PEAR_ERRORSTACK_LOG', 3); +/** + * If this is returned, then the error is completely ignored. + */ +define('PEAR_ERRORSTACK_IGNORE', 4); +/** + * If this is returned, then the error is logged and die() is called. + */ +define('PEAR_ERRORSTACK_DIE', 5); +/**#@-*/ + +/** + * Error code for an attempt to instantiate a non-class as a PEAR_ErrorStack in + * the singleton method. + */ +define('PEAR_ERRORSTACK_ERR_NONCLASS', 1); + +/** + * Error code for an attempt to pass an object into {@link PEAR_ErrorStack::getMessage()} + * that has no __toString() method + */ +define('PEAR_ERRORSTACK_ERR_OBJTOSTRING', 2); +/** + * Error Stack Implementation + * + * Usage: + * + * // global error stack + * $global_stack = &PEAR_ErrorStack::singleton('MyPackage'); + * // local error stack + * $local_stack = new PEAR_ErrorStack('MyPackage'); + * + * @author Greg Beaver + * @version @package_version@ + * @package PEAR_ErrorStack + * @category Debugging + * @copyright 2004-2008 Greg Beaver + * @license http://opensource.org/licenses/bsd-license.php New BSD License + * @link http://pear.php.net/package/PEAR_ErrorStack + */ +class PEAR_ErrorStack { + /** + * Errors are stored in the order that they are pushed on the stack. + * @since 0.4alpha Errors are no longer organized by error level. + * This renders pop() nearly unusable, and levels could be more easily + * handled in a callback anyway + * @var array + * @access private + */ + var $_errors = array(); + + /** + * Storage of errors by level. + * + * Allows easy retrieval and deletion of only errors from a particular level + * @since PEAR 1.4.0dev + * @var array + * @access private + */ + var $_errorsByLevel = array(); + + /** + * Package name this error stack represents + * @var string + * @access protected + */ + var $_package; + + /** + * Determines whether a PEAR_Error is thrown upon every error addition + * @var boolean + * @access private + */ + var $_compat = false; + + /** + * If set to a valid callback, this will be used to generate the error + * message from the error code, otherwise the message passed in will be + * used + * @var false|string|array + * @access private + */ + var $_msgCallback = false; + + /** + * If set to a valid callback, this will be used to generate the error + * context for an error. For PHP-related errors, this will be a file + * and line number as retrieved from debug_backtrace(), but can be + * customized for other purposes. The error might actually be in a separate + * configuration file, or in a database query. + * @var false|string|array + * @access protected + */ + var $_contextCallback = false; + + /** + * If set to a valid callback, this will be called every time an error + * is pushed onto the stack. The return value will be used to determine + * whether to allow an error to be pushed or logged. + * + * The return value must be one an PEAR_ERRORSTACK_* constant + * @see PEAR_ERRORSTACK_PUSHANDLOG, PEAR_ERRORSTACK_PUSH, PEAR_ERRORSTACK_LOG + * @var false|string|array + * @access protected + */ + var $_errorCallback = array(); + + /** + * PEAR::Log object for logging errors + * @var false|Log + * @access protected + */ + var $_logger = false; + + /** + * Error messages - designed to be overridden + * @var array + * @abstract + */ + var $_errorMsgs = array(); + + /** + * Set up a new error stack + * + * @param string $package name of the package this error stack represents + * @param callback $msgCallback callback used for error message generation + * @param callback $contextCallback callback used for context generation, + * defaults to {@link getFileLine()} + * @param boolean $throwPEAR_Error + */ + function __construct($package, $msgCallback = false, $contextCallback = false, + $throwPEAR_Error = false) + { + $this->_package = $package; + $this->setMessageCallback($msgCallback); + $this->setContextCallback($contextCallback); + $this->_compat = $throwPEAR_Error; + } + + /** + * Return a single error stack for this package. + * + * Note that all parameters are ignored if the stack for package $package + * has already been instantiated + * @param string $package name of the package this error stack represents + * @param callback $msgCallback callback used for error message generation + * @param callback $contextCallback callback used for context generation, + * defaults to {@link getFileLine()} + * @param boolean $throwPEAR_Error + * @param string $stackClass class to instantiate + * + * @return PEAR_ErrorStack + */ + public static function &singleton( + $package, $msgCallback = false, $contextCallback = false, + $throwPEAR_Error = false, $stackClass = 'PEAR_ErrorStack' + ) { + if (isset($GLOBALS['_PEAR_ERRORSTACK_SINGLETON'][$package])) { + return $GLOBALS['_PEAR_ERRORSTACK_SINGLETON'][$package]; + } + if (!class_exists($stackClass)) { + if (function_exists('debug_backtrace')) { + $trace = debug_backtrace(); + } + PEAR_ErrorStack::staticPush('PEAR_ErrorStack', PEAR_ERRORSTACK_ERR_NONCLASS, + 'exception', array('stackclass' => $stackClass), + 'stack class "%stackclass%" is not a valid class name (should be like PEAR_ErrorStack)', + false, $trace); + } + $GLOBALS['_PEAR_ERRORSTACK_SINGLETON'][$package] = + new $stackClass($package, $msgCallback, $contextCallback, $throwPEAR_Error); + + return $GLOBALS['_PEAR_ERRORSTACK_SINGLETON'][$package]; + } + + /** + * Internal error handler for PEAR_ErrorStack class + * + * Dies if the error is an exception (and would have died anyway) + * @access private + */ + function _handleError($err) + { + if ($err['level'] == 'exception') { + $message = $err['message']; + if (isset($_SERVER['REQUEST_URI'])) { + echo '
'; + } else { + echo "\n"; + } + var_dump($err['context']); + die($message); + } + } + + /** + * Set up a PEAR::Log object for all error stacks that don't have one + * @param Log $log + */ + public static function setDefaultLogger(&$log) + { + if (is_object($log) && method_exists($log, 'log') ) { + $GLOBALS['_PEAR_ERRORSTACK_DEFAULT_LOGGER'] = &$log; + } elseif (is_callable($log)) { + $GLOBALS['_PEAR_ERRORSTACK_DEFAULT_LOGGER'] = &$log; + } + } + + /** + * Set up a PEAR::Log object for this error stack + * @param Log $log + */ + function setLogger(&$log) + { + if (is_object($log) && method_exists($log, 'log') ) { + $this->_logger = &$log; + } elseif (is_callable($log)) { + $this->_logger = &$log; + } + } + + /** + * Set an error code => error message mapping callback + * + * This method sets the callback that can be used to generate error + * messages for any instance + * @param array|string Callback function/method + */ + function setMessageCallback($msgCallback) + { + if (!$msgCallback) { + $this->_msgCallback = array(&$this, 'getErrorMessage'); + } else { + if (is_callable($msgCallback)) { + $this->_msgCallback = $msgCallback; + } + } + } + + /** + * Get an error code => error message mapping callback + * + * This method returns the current callback that can be used to generate error + * messages + * @return array|string|false Callback function/method or false if none + */ + function getMessageCallback() + { + return $this->_msgCallback; + } + + /** + * Sets a default callback to be used by all error stacks + * + * This method sets the callback that can be used to generate error + * messages for a singleton + * @param array|string Callback function/method + * @param string Package name, or false for all packages + */ + public static function setDefaultCallback($callback = false, $package = false) + { + if (!is_callable($callback)) { + $callback = false; + } + $package = $package ? $package : '*'; + $GLOBALS['_PEAR_ERRORSTACK_DEFAULT_CALLBACK'][$package] = $callback; + } + + /** + * Set a callback that generates context information (location of error) for an error stack + * + * This method sets the callback that can be used to generate context + * information for an error. Passing in NULL will disable context generation + * and remove the expensive call to debug_backtrace() + * @param array|string|null Callback function/method + */ + function setContextCallback($contextCallback) + { + if ($contextCallback === null) { + return $this->_contextCallback = false; + } + if (!$contextCallback) { + $this->_contextCallback = array(&$this, 'getFileLine'); + } else { + if (is_callable($contextCallback)) { + $this->_contextCallback = $contextCallback; + } + } + } + + /** + * Set an error Callback + * If set to a valid callback, this will be called every time an error + * is pushed onto the stack. The return value will be used to determine + * whether to allow an error to be pushed or logged. + * + * The return value must be one of the ERRORSTACK_* constants. + * + * This functionality can be used to emulate PEAR's pushErrorHandling, and + * the PEAR_ERROR_CALLBACK mode, without affecting the integrity of + * the error stack or logging + * @see PEAR_ERRORSTACK_PUSHANDLOG, PEAR_ERRORSTACK_PUSH, PEAR_ERRORSTACK_LOG + * @see popCallback() + * @param string|array $cb + */ + function pushCallback($cb) + { + array_push($this->_errorCallback, $cb); + } + + /** + * Remove a callback from the error callback stack + * @see pushCallback() + * @return array|string|false + */ + function popCallback() + { + if (!count($this->_errorCallback)) { + return false; + } + return array_pop($this->_errorCallback); + } + + /** + * Set a temporary overriding error callback for every package error stack + * + * Use this to temporarily disable all existing callbacks (can be used + * to emulate the @ operator, for instance) + * @see PEAR_ERRORSTACK_PUSHANDLOG, PEAR_ERRORSTACK_PUSH, PEAR_ERRORSTACK_LOG + * @see staticPopCallback(), pushCallback() + * @param string|array $cb + */ + public static function staticPushCallback($cb) + { + array_push($GLOBALS['_PEAR_ERRORSTACK_OVERRIDE_CALLBACK'], $cb); + } + + /** + * Remove a temporary overriding error callback + * @see staticPushCallback() + * @return array|string|false + */ + public static function staticPopCallback() + { + $ret = array_pop($GLOBALS['_PEAR_ERRORSTACK_OVERRIDE_CALLBACK']); + if (!is_array($GLOBALS['_PEAR_ERRORSTACK_OVERRIDE_CALLBACK'])) { + $GLOBALS['_PEAR_ERRORSTACK_OVERRIDE_CALLBACK'] = array(); + } + return $ret; + } + + /** + * Add an error to the stack + * + * If the message generator exists, it is called with 2 parameters. + * - the current Error Stack object + * - an array that is in the same format as an error. Available indices + * are 'code', 'package', 'time', 'params', 'level', and 'context' + * + * Next, if the error should contain context information, this is + * handled by the context grabbing method. + * Finally, the error is pushed onto the proper error stack + * @param int $code Package-specific error code + * @param string $level Error level. This is NOT spell-checked + * @param array $params associative array of error parameters + * @param string $msg Error message, or a portion of it if the message + * is to be generated + * @param array $repackage If this error re-packages an error pushed by + * another package, place the array returned from + * {@link pop()} in this parameter + * @param array $backtrace Protected parameter: use this to pass in the + * {@link debug_backtrace()} that should be used + * to find error context + * @return PEAR_Error|array if compatibility mode is on, a PEAR_Error is also + * thrown. If a PEAR_Error is returned, the userinfo + * property is set to the following array: + * + * + * array( + * 'code' => $code, + * 'params' => $params, + * 'package' => $this->_package, + * 'level' => $level, + * 'time' => time(), + * 'context' => $context, + * 'message' => $msg, + * //['repackage' => $err] repackaged error array/Exception class + * ); + * + * + * Normally, the previous array is returned. + */ + function push($code, $level = 'error', $params = array(), $msg = false, + $repackage = false, $backtrace = false) + { + $context = false; + // grab error context + if ($this->_contextCallback) { + if (!$backtrace) { + $backtrace = debug_backtrace(); + } + $context = call_user_func($this->_contextCallback, $code, $params, $backtrace); + } + + // save error + $time = explode(' ', microtime()); + $time = $time[1] + $time[0]; + $err = array( + 'code' => $code, + 'params' => $params, + 'package' => $this->_package, + 'level' => $level, + 'time' => $time, + 'context' => $context, + 'message' => $msg, + ); + + if ($repackage) { + $err['repackage'] = $repackage; + } + + // set up the error message, if necessary + if ($this->_msgCallback) { + $msg = call_user_func_array($this->_msgCallback, + array(&$this, $err)); + $err['message'] = $msg; + } + $push = $log = true; + $die = false; + // try the overriding callback first + $callback = $this->staticPopCallback(); + if ($callback) { + $this->staticPushCallback($callback); + } + if (!is_callable($callback)) { + // try the local callback next + $callback = $this->popCallback(); + if (is_callable($callback)) { + $this->pushCallback($callback); + } else { + // try the default callback + $callback = isset($GLOBALS['_PEAR_ERRORSTACK_DEFAULT_CALLBACK'][$this->_package]) ? + $GLOBALS['_PEAR_ERRORSTACK_DEFAULT_CALLBACK'][$this->_package] : + $GLOBALS['_PEAR_ERRORSTACK_DEFAULT_CALLBACK']['*']; + } + } + if (is_callable($callback)) { + switch(call_user_func($callback, $err)){ + case PEAR_ERRORSTACK_IGNORE: + return $err; + break; + case PEAR_ERRORSTACK_PUSH: + $log = false; + break; + case PEAR_ERRORSTACK_LOG: + $push = false; + break; + case PEAR_ERRORSTACK_DIE: + $die = true; + break; + // anything else returned has the same effect as pushandlog + } + } + if ($push) { + array_unshift($this->_errors, $err); + if (!isset($this->_errorsByLevel[$err['level']])) { + $this->_errorsByLevel[$err['level']] = array(); + } + $this->_errorsByLevel[$err['level']][] = &$this->_errors[0]; + } + if ($log) { + if ($this->_logger || $GLOBALS['_PEAR_ERRORSTACK_DEFAULT_LOGGER']) { + $this->_log($err); + } + } + if ($die) { + die(); + } + if ($this->_compat && $push) { + return $this->raiseError($msg, $code, null, null, $err); + } + return $err; + } + + /** + * Static version of {@link push()} + * + * @param string $package Package name this error belongs to + * @param int $code Package-specific error code + * @param string $level Error level. This is NOT spell-checked + * @param array $params associative array of error parameters + * @param string $msg Error message, or a portion of it if the message + * is to be generated + * @param array $repackage If this error re-packages an error pushed by + * another package, place the array returned from + * {@link pop()} in this parameter + * @param array $backtrace Protected parameter: use this to pass in the + * {@link debug_backtrace()} that should be used + * to find error context + * @return PEAR_Error|array if compatibility mode is on, a PEAR_Error is also + * thrown. see docs for {@link push()} + */ + public static function staticPush( + $package, $code, $level = 'error', $params = array(), + $msg = false, $repackage = false, $backtrace = false + ) { + $s = &PEAR_ErrorStack::singleton($package); + if ($s->_contextCallback) { + if (!$backtrace) { + if (function_exists('debug_backtrace')) { + $backtrace = debug_backtrace(); + } + } + } + return $s->push($code, $level, $params, $msg, $repackage, $backtrace); + } + + /** + * Log an error using PEAR::Log + * @param array $err Error array + * @param array $levels Error level => Log constant map + * @access protected + */ + function _log($err) + { + if ($this->_logger) { + $logger = &$this->_logger; + } else { + $logger = &$GLOBALS['_PEAR_ERRORSTACK_DEFAULT_LOGGER']; + } + if (is_a($logger, 'Log')) { + $levels = array( + 'exception' => PEAR_LOG_CRIT, + 'alert' => PEAR_LOG_ALERT, + 'critical' => PEAR_LOG_CRIT, + 'error' => PEAR_LOG_ERR, + 'warning' => PEAR_LOG_WARNING, + 'notice' => PEAR_LOG_NOTICE, + 'info' => PEAR_LOG_INFO, + 'debug' => PEAR_LOG_DEBUG); + if (isset($levels[$err['level']])) { + $level = $levels[$err['level']]; + } else { + $level = PEAR_LOG_INFO; + } + $logger->log($err['message'], $level, $err); + } else { // support non-standard logs + call_user_func($logger, $err); + } + } + + + /** + * Pop an error off of the error stack + * + * @return false|array + * @since 0.4alpha it is no longer possible to specify a specific error + * level to return - the last error pushed will be returned, instead + */ + function pop() + { + $err = @array_shift($this->_errors); + if (!is_null($err)) { + @array_pop($this->_errorsByLevel[$err['level']]); + if (!count($this->_errorsByLevel[$err['level']])) { + unset($this->_errorsByLevel[$err['level']]); + } + } + return $err; + } + + /** + * Pop an error off of the error stack, static method + * + * @param string package name + * @return boolean + * @since PEAR1.5.0a1 + */ + function staticPop($package) + { + if ($package) { + if (!isset($GLOBALS['_PEAR_ERRORSTACK_SINGLETON'][$package])) { + return false; + } + return $GLOBALS['_PEAR_ERRORSTACK_SINGLETON'][$package]->pop(); + } + } + + /** + * Determine whether there are any errors on the stack + * @param string|array Level name. Use to determine if any errors + * of level (string), or levels (array) have been pushed + * @return boolean + */ + function hasErrors($level = false) + { + if ($level) { + return isset($this->_errorsByLevel[$level]); + } + return count($this->_errors); + } + + /** + * Retrieve all errors since last purge + * + * @param boolean set in order to empty the error stack + * @param string level name, to return only errors of a particular severity + * @return array + */ + function getErrors($purge = false, $level = false) + { + if (!$purge) { + if ($level) { + if (!isset($this->_errorsByLevel[$level])) { + return array(); + } else { + return $this->_errorsByLevel[$level]; + } + } else { + return $this->_errors; + } + } + if ($level) { + $ret = $this->_errorsByLevel[$level]; + foreach ($this->_errorsByLevel[$level] as $i => $unused) { + // entries are references to the $_errors array + $this->_errorsByLevel[$level][$i] = false; + } + // array_filter removes all entries === false + $this->_errors = array_filter($this->_errors); + unset($this->_errorsByLevel[$level]); + return $ret; + } + $ret = $this->_errors; + $this->_errors = array(); + $this->_errorsByLevel = array(); + return $ret; + } + + /** + * Determine whether there are any errors on a single error stack, or on any error stack + * + * The optional parameter can be used to test the existence of any errors without the need of + * singleton instantiation + * @param string|false Package name to check for errors + * @param string Level name to check for a particular severity + * @return boolean + */ + public static function staticHasErrors($package = false, $level = false) + { + if ($package) { + if (!isset($GLOBALS['_PEAR_ERRORSTACK_SINGLETON'][$package])) { + return false; + } + return $GLOBALS['_PEAR_ERRORSTACK_SINGLETON'][$package]->hasErrors($level); + } + foreach ($GLOBALS['_PEAR_ERRORSTACK_SINGLETON'] as $package => $obj) { + if ($obj->hasErrors($level)) { + return true; + } + } + return false; + } + + /** + * Get a list of all errors since last purge, organized by package + * @since PEAR 1.4.0dev BC break! $level is now in the place $merge used to be + * @param boolean $purge Set to purge the error stack of existing errors + * @param string $level Set to a level name in order to retrieve only errors of a particular level + * @param boolean $merge Set to return a flat array, not organized by package + * @param array $sortfunc Function used to sort a merged array - default + * sorts by time, and should be good for most cases + * + * @return array + */ + public static function staticGetErrors( + $purge = false, $level = false, $merge = false, + $sortfunc = array('PEAR_ErrorStack', '_sortErrors') + ) { + $ret = array(); + if (!is_callable($sortfunc)) { + $sortfunc = array('PEAR_ErrorStack', '_sortErrors'); + } + foreach ($GLOBALS['_PEAR_ERRORSTACK_SINGLETON'] as $package => $obj) { + $test = $GLOBALS['_PEAR_ERRORSTACK_SINGLETON'][$package]->getErrors($purge, $level); + if ($test) { + if ($merge) { + $ret = array_merge($ret, $test); + } else { + $ret[$package] = $test; + } + } + } + if ($merge) { + usort($ret, $sortfunc); + } + return $ret; + } + + /** + * Error sorting function, sorts by time + * @access private + */ + public static function _sortErrors($a, $b) + { + if ($a['time'] == $b['time']) { + return 0; + } + if ($a['time'] < $b['time']) { + return 1; + } + return -1; + } + + /** + * Standard file/line number/function/class context callback + * + * This function uses a backtrace generated from {@link debug_backtrace()} + * and so will not work at all in PHP < 4.3.0. The frame should + * reference the frame that contains the source of the error. + * @return array|false either array('file' => file, 'line' => line, + * 'function' => function name, 'class' => class name) or + * if this doesn't work, then false + * @param unused + * @param integer backtrace frame. + * @param array Results of debug_backtrace() + */ + public static function getFileLine($code, $params, $backtrace = null) + { + if ($backtrace === null) { + return false; + } + $frame = 0; + $functionframe = 1; + if (!isset($backtrace[1])) { + $functionframe = 0; + } else { + while (isset($backtrace[$functionframe]['function']) && + $backtrace[$functionframe]['function'] == 'eval' && + isset($backtrace[$functionframe + 1])) { + $functionframe++; + } + } + if (isset($backtrace[$frame])) { + if (!isset($backtrace[$frame]['file'])) { + $frame++; + } + $funcbacktrace = $backtrace[$functionframe]; + $filebacktrace = $backtrace[$frame]; + $ret = array('file' => $filebacktrace['file'], + 'line' => $filebacktrace['line']); + // rearrange for eval'd code or create function errors + if (strpos($filebacktrace['file'], '(') && + preg_match(';^(.*?)\((\d+)\) : (.*?)\\z;', $filebacktrace['file'], + $matches)) { + $ret['file'] = $matches[1]; + $ret['line'] = $matches[2] + 0; + } + if (isset($funcbacktrace['function']) && isset($backtrace[1])) { + if ($funcbacktrace['function'] != 'eval') { + if ($funcbacktrace['function'] == '__lambda_func') { + $ret['function'] = 'create_function() code'; + } else { + $ret['function'] = $funcbacktrace['function']; + } + } + } + if (isset($funcbacktrace['class']) && isset($backtrace[1])) { + $ret['class'] = $funcbacktrace['class']; + } + return $ret; + } + return false; + } + + /** + * Standard error message generation callback + * + * This method may also be called by a custom error message generator + * to fill in template values from the params array, simply + * set the third parameter to the error message template string to use + * + * The special variable %__msg% is reserved: use it only to specify + * where a message passed in by the user should be placed in the template, + * like so: + * + * Error message: %msg% - internal error + * + * If the message passed like so: + * + * + * $stack->push(ERROR_CODE, 'error', array(), 'server error 500'); + * + * + * The returned error message will be "Error message: server error 500 - + * internal error" + * @param PEAR_ErrorStack + * @param array + * @param string|false Pre-generated error message template + * + * @return string + */ + public static function getErrorMessage(&$stack, $err, $template = false) + { + if ($template) { + $mainmsg = $template; + } else { + $mainmsg = $stack->getErrorMessageTemplate($err['code']); + } + $mainmsg = str_replace('%__msg%', $err['message'], $mainmsg); + if (is_array($err['params']) && count($err['params'])) { + foreach ($err['params'] as $name => $val) { + if (is_array($val)) { + // @ is needed in case $val is a multi-dimensional array + $val = @implode(', ', $val); + } + if (is_object($val)) { + if (method_exists($val, '__toString')) { + $val = $val->__toString(); + } else { + PEAR_ErrorStack::staticPush('PEAR_ErrorStack', PEAR_ERRORSTACK_ERR_OBJTOSTRING, + 'warning', array('obj' => get_class($val)), + 'object %obj% passed into getErrorMessage, but has no __toString() method'); + $val = 'Object'; + } + } + $mainmsg = str_replace('%' . $name . '%', $val, $mainmsg); + } + } + return $mainmsg; + } + + /** + * Standard Error Message Template generator from code + * @return string + */ + function getErrorMessageTemplate($code) + { + if (!isset($this->_errorMsgs[$code])) { + return '%__msg%'; + } + return $this->_errorMsgs[$code]; + } + + /** + * Set the Error Message Template array + * + * The array format must be: + *
+     * array(error code => 'message template',...)
+     * 
+ * + * Error message parameters passed into {@link push()} will be used as input + * for the error message. If the template is 'message %foo% was %bar%', and the + * parameters are array('foo' => 'one', 'bar' => 'six'), the error message returned will + * be 'message one was six' + * @return string + */ + function setErrorMessageTemplate($template) + { + $this->_errorMsgs = $template; + } + + + /** + * emulate PEAR::raiseError() + * + * @return PEAR_Error + */ + function raiseError() + { + require_once 'PEAR.php'; + $args = func_get_args(); + return call_user_func_array(array('PEAR', 'raiseError'), $args); + } +} +$stack = &PEAR_ErrorStack::singleton('PEAR_ErrorStack'); +$stack->pushCallback(array('PEAR_ErrorStack', '_handleError')); +?> diff --git a/lib/composer/vendor/pear/pear-core-minimal/src/System.php b/lib/composer/vendor/pear/pear-core-minimal/src/System.php new file mode 100644 index 000000000..89c53e3c1 --- /dev/null +++ b/lib/composer/vendor/pear/pear-core-minimal/src/System.php @@ -0,0 +1,622 @@ + + * @copyright 1997-2009 The Authors + * @license http://opensource.org/licenses/bsd-license.php New BSD License + * @link http://pear.php.net/package/PEAR + * @since File available since Release 0.1 + */ + +/** + * base class + */ +require_once 'PEAR.php'; +require_once 'Console/Getopt.php'; + +$GLOBALS['_System_temp_files'] = array(); + +/** +* System offers cross platform compatible system functions +* +* Static functions for different operations. Should work under +* Unix and Windows. The names and usage has been taken from its respectively +* GNU commands. The functions will return (bool) false on error and will +* trigger the error with the PHP trigger_error() function (you can silence +* the error by prefixing a '@' sign after the function call, but this +* is not recommended practice. Instead use an error handler with +* {@link set_error_handler()}). +* +* Documentation on this class you can find in: +* http://pear.php.net/manual/ +* +* Example usage: +* if (!@System::rm('-r file1 dir1')) { +* print "could not delete file1 or dir1"; +* } +* +* In case you need to to pass file names with spaces, +* pass the params as an array: +* +* System::rm(array('-r', $file1, $dir1)); +* +* @category pear +* @package System +* @author Tomas V.V. Cox +* @copyright 1997-2006 The PHP Group +* @license http://opensource.org/licenses/bsd-license.php New BSD License +* @version Release: @package_version@ +* @link http://pear.php.net/package/PEAR +* @since Class available since Release 0.1 +* @static +*/ +class System +{ + /** + * returns the commandline arguments of a function + * + * @param string $argv the commandline + * @param string $short_options the allowed option short-tags + * @param string $long_options the allowed option long-tags + * @return array the given options and there values + */ + public static function _parseArgs($argv, $short_options, $long_options = null) + { + if (!is_array($argv) && $argv !== null) { + /* + // Quote all items that are a short option + $av = preg_split('/(\A| )--?[a-z0-9]+[ =]?((? $a) { + if (empty($a)) { + continue; + } + $argv[$k] = trim($a) ; + } + } + + return Console_Getopt::getopt2($argv, $short_options, $long_options); + } + + /** + * Output errors with PHP trigger_error(). You can silence the errors + * with prefixing a "@" sign to the function call: @System::mkdir(..); + * + * @param mixed $error a PEAR error or a string with the error message + * @return bool false + */ + protected static function raiseError($error) + { + if (PEAR::isError($error)) { + $error = $error->getMessage(); + } + trigger_error($error, E_USER_WARNING); + return false; + } + + /** + * Creates a nested array representing the structure of a directory + * + * System::_dirToStruct('dir1', 0) => + * Array + * ( + * [dirs] => Array + * ( + * [0] => dir1 + * ) + * + * [files] => Array + * ( + * [0] => dir1/file2 + * [1] => dir1/file3 + * ) + * ) + * @param string $sPath Name of the directory + * @param integer $maxinst max. deep of the lookup + * @param integer $aktinst starting deep of the lookup + * @param bool $silent if true, do not emit errors. + * @return array the structure of the dir + */ + protected static function _dirToStruct($sPath, $maxinst, $aktinst = 0, $silent = false) + { + $struct = array('dirs' => array(), 'files' => array()); + if (($dir = @opendir($sPath)) === false) { + if (!$silent) { + System::raiseError("Could not open dir $sPath"); + } + return $struct; // XXX could not open error + } + + $struct['dirs'][] = $sPath = realpath($sPath); // XXX don't add if '.' or '..' ? + $list = array(); + while (false !== ($file = readdir($dir))) { + if ($file != '.' && $file != '..') { + $list[] = $file; + } + } + + closedir($dir); + natsort($list); + if ($aktinst < $maxinst || $maxinst == 0) { + foreach ($list as $val) { + $path = $sPath . DIRECTORY_SEPARATOR . $val; + if (is_dir($path) && !is_link($path)) { + $tmp = System::_dirToStruct($path, $maxinst, $aktinst+1, $silent); + $struct = array_merge_recursive($struct, $tmp); + } else { + $struct['files'][] = $path; + } + } + } + + return $struct; + } + + /** + * Creates a nested array representing the structure of a directory and files + * + * @param array $files Array listing files and dirs + * @return array + * @static + * @see System::_dirToStruct() + */ + protected static function _multipleToStruct($files) + { + $struct = array('dirs' => array(), 'files' => array()); + settype($files, 'array'); + foreach ($files as $file) { + if (is_dir($file) && !is_link($file)) { + $tmp = System::_dirToStruct($file, 0); + $struct = array_merge_recursive($tmp, $struct); + } else { + if (!in_array($file, $struct['files'])) { + $struct['files'][] = $file; + } + } + } + return $struct; + } + + /** + * The rm command for removing files. + * Supports multiple files and dirs and also recursive deletes + * + * @param string $args the arguments for rm + * @return mixed PEAR_Error or true for success + * @static + * @access public + */ + public static function rm($args) + { + $opts = System::_parseArgs($args, 'rf'); // "f" does nothing but I like it :-) + if (PEAR::isError($opts)) { + return System::raiseError($opts); + } + foreach ($opts[0] as $opt) { + if ($opt[0] == 'r') { + $do_recursive = true; + } + } + $ret = true; + if (isset($do_recursive)) { + $struct = System::_multipleToStruct($opts[1]); + foreach ($struct['files'] as $file) { + if (!@unlink($file)) { + $ret = false; + } + } + + rsort($struct['dirs']); + foreach ($struct['dirs'] as $dir) { + if (!@rmdir($dir)) { + $ret = false; + } + } + } else { + foreach ($opts[1] as $file) { + $delete = (is_dir($file)) ? 'rmdir' : 'unlink'; + if (!@$delete($file)) { + $ret = false; + } + } + } + return $ret; + } + + /** + * Make directories. + * + * The -p option will create parent directories + * @param string $args the name of the director(y|ies) to create + * @return bool True for success + */ + public static function mkDir($args) + { + $opts = System::_parseArgs($args, 'pm:'); + if (PEAR::isError($opts)) { + return System::raiseError($opts); + } + + $mode = 0777; // default mode + foreach ($opts[0] as $opt) { + if ($opt[0] == 'p') { + $create_parents = true; + } elseif ($opt[0] == 'm') { + // if the mode is clearly an octal number (starts with 0) + // convert it to decimal + if (strlen($opt[1]) && $opt[1]{0} == '0') { + $opt[1] = octdec($opt[1]); + } else { + // convert to int + $opt[1] += 0; + } + $mode = $opt[1]; + } + } + + $ret = true; + if (isset($create_parents)) { + foreach ($opts[1] as $dir) { + $dirstack = array(); + while ((!file_exists($dir) || !is_dir($dir)) && + $dir != DIRECTORY_SEPARATOR) { + array_unshift($dirstack, $dir); + $dir = dirname($dir); + } + + while ($newdir = array_shift($dirstack)) { + if (!is_writeable(dirname($newdir))) { + $ret = false; + break; + } + + if (!mkdir($newdir, $mode)) { + $ret = false; + } + } + } + } else { + foreach($opts[1] as $dir) { + if ((@file_exists($dir) || !is_dir($dir)) && !mkdir($dir, $mode)) { + $ret = false; + } + } + } + + return $ret; + } + + /** + * Concatenate files + * + * Usage: + * 1) $var = System::cat('sample.txt test.txt'); + * 2) System::cat('sample.txt test.txt > final.txt'); + * 3) System::cat('sample.txt test.txt >> final.txt'); + * + * Note: as the class use fopen, urls should work also (test that) + * + * @param string $args the arguments + * @return boolean true on success + */ + public static function &cat($args) + { + $ret = null; + $files = array(); + if (!is_array($args)) { + $args = preg_split('/\s+/', $args, -1, PREG_SPLIT_NO_EMPTY); + } + + $count_args = count($args); + for ($i = 0; $i < $count_args; $i++) { + if ($args[$i] == '>') { + $mode = 'wb'; + $outputfile = $args[$i+1]; + break; + } elseif ($args[$i] == '>>') { + $mode = 'ab+'; + $outputfile = $args[$i+1]; + break; + } else { + $files[] = $args[$i]; + } + } + $outputfd = false; + if (isset($mode)) { + if (!$outputfd = fopen($outputfile, $mode)) { + $err = System::raiseError("Could not open $outputfile"); + return $err; + } + $ret = true; + } + foreach ($files as $file) { + if (!$fd = fopen($file, 'r')) { + System::raiseError("Could not open $file"); + continue; + } + while ($cont = fread($fd, 2048)) { + if (is_resource($outputfd)) { + fwrite($outputfd, $cont); + } else { + $ret .= $cont; + } + } + fclose($fd); + } + if (is_resource($outputfd)) { + fclose($outputfd); + } + return $ret; + } + + /** + * Creates temporary files or directories. This function will remove + * the created files when the scripts finish its execution. + * + * Usage: + * 1) $tempfile = System::mktemp("prefix"); + * 2) $tempdir = System::mktemp("-d prefix"); + * 3) $tempfile = System::mktemp(); + * 4) $tempfile = System::mktemp("-t /var/tmp prefix"); + * + * prefix -> The string that will be prepended to the temp name + * (defaults to "tmp"). + * -d -> A temporary dir will be created instead of a file. + * -t -> The target dir where the temporary (file|dir) will be created. If + * this param is missing by default the env vars TMP on Windows or + * TMPDIR in Unix will be used. If these vars are also missing + * c:\windows\temp or /tmp will be used. + * + * @param string $args The arguments + * @return mixed the full path of the created (file|dir) or false + * @see System::tmpdir() + */ + public static function mktemp($args = null) + { + static $first_time = true; + $opts = System::_parseArgs($args, 't:d'); + if (PEAR::isError($opts)) { + return System::raiseError($opts); + } + + foreach ($opts[0] as $opt) { + if ($opt[0] == 'd') { + $tmp_is_dir = true; + } elseif ($opt[0] == 't') { + $tmpdir = $opt[1]; + } + } + + $prefix = (isset($opts[1][0])) ? $opts[1][0] : 'tmp'; + if (!isset($tmpdir)) { + $tmpdir = System::tmpdir(); + } + + if (!System::mkDir(array('-p', $tmpdir))) { + return false; + } + + $tmp = tempnam($tmpdir, $prefix); + if (isset($tmp_is_dir)) { + unlink($tmp); // be careful possible race condition here + if (!mkdir($tmp, 0700)) { + return System::raiseError("Unable to create temporary directory $tmpdir"); + } + } + + $GLOBALS['_System_temp_files'][] = $tmp; + if (isset($tmp_is_dir)) { + //$GLOBALS['_System_temp_files'][] = dirname($tmp); + } + + if ($first_time) { + PEAR::registerShutdownFunc(array('System', '_removeTmpFiles')); + $first_time = false; + } + + return $tmp; + } + + /** + * Remove temporary files created my mkTemp. This function is executed + * at script shutdown time + */ + public static function _removeTmpFiles() + { + if (count($GLOBALS['_System_temp_files'])) { + $delete = $GLOBALS['_System_temp_files']; + array_unshift($delete, '-r'); + System::rm($delete); + $GLOBALS['_System_temp_files'] = array(); + } + } + + /** + * Get the path of the temporal directory set in the system + * by looking in its environments variables. + * Note: php.ini-recommended removes the "E" from the variables_order setting, + * making unavaible the $_ENV array, that s why we do tests with _ENV + * + * @return string The temporary directory on the system + */ + public static function tmpdir() + { + if (OS_WINDOWS) { + if ($var = isset($_ENV['TMP']) ? $_ENV['TMP'] : getenv('TMP')) { + return $var; + } + if ($var = isset($_ENV['TEMP']) ? $_ENV['TEMP'] : getenv('TEMP')) { + return $var; + } + if ($var = isset($_ENV['USERPROFILE']) ? $_ENV['USERPROFILE'] : getenv('USERPROFILE')) { + return $var; + } + if ($var = isset($_ENV['windir']) ? $_ENV['windir'] : getenv('windir')) { + return $var; + } + return getenv('SystemRoot') . '\temp'; + } + if ($var = isset($_ENV['TMPDIR']) ? $_ENV['TMPDIR'] : getenv('TMPDIR')) { + return $var; + } + return realpath('/tmp'); + } + + /** + * The "which" command (show the full path of a command) + * + * @param string $program The command to search for + * @param mixed $fallback Value to return if $program is not found + * + * @return mixed A string with the full path or false if not found + * @author Stig Bakken + */ + public static function which($program, $fallback = false) + { + // enforce API + if (!is_string($program) || '' == $program) { + return $fallback; + } + + // full path given + if (basename($program) != $program) { + $path_elements[] = dirname($program); + $program = basename($program); + } else { + $path = getenv('PATH'); + if (!$path) { + $path = getenv('Path'); // some OSes are just stupid enough to do this + } + + $path_elements = explode(PATH_SEPARATOR, $path); + } + + if (OS_WINDOWS) { + $exe_suffixes = getenv('PATHEXT') + ? explode(PATH_SEPARATOR, getenv('PATHEXT')) + : array('.exe','.bat','.cmd','.com'); + // allow passing a command.exe param + if (strpos($program, '.') !== false) { + array_unshift($exe_suffixes, ''); + } + } else { + $exe_suffixes = array(''); + } + + foreach ($exe_suffixes as $suff) { + foreach ($path_elements as $dir) { + $file = $dir . DIRECTORY_SEPARATOR . $program . $suff; + if (is_executable($file)) { + return $file; + } + } + } + return $fallback; + } + + /** + * The "find" command + * + * Usage: + * + * System::find($dir); + * System::find("$dir -type d"); + * System::find("$dir -type f"); + * System::find("$dir -name *.php"); + * System::find("$dir -name *.php -name *.htm*"); + * System::find("$dir -maxdepth 1"); + * + * Params implemented: + * $dir -> Start the search at this directory + * -type d -> return only directories + * -type f -> return only files + * -maxdepth -> max depth of recursion + * -name -> search pattern (bash style). Multiple -name param allowed + * + * @param mixed Either array or string with the command line + * @return array Array of found files + */ + public static function find($args) + { + if (!is_array($args)) { + $args = preg_split('/\s+/', $args, -1, PREG_SPLIT_NO_EMPTY); + } + $dir = realpath(array_shift($args)); + if (!$dir) { + return array(); + } + $patterns = array(); + $depth = 0; + $do_files = $do_dirs = true; + $args_count = count($args); + for ($i = 0; $i < $args_count; $i++) { + switch ($args[$i]) { + case '-type': + if (in_array($args[$i+1], array('d', 'f'))) { + if ($args[$i+1] == 'd') { + $do_files = false; + } else { + $do_dirs = false; + } + } + $i++; + break; + case '-name': + $name = preg_quote($args[$i+1], '#'); + // our magic characters ? and * have just been escaped, + // so now we change the escaped versions to PCRE operators + $name = strtr($name, array('\?' => '.', '\*' => '.*')); + $patterns[] = '('.$name.')'; + $i++; + break; + case '-maxdepth': + $depth = $args[$i+1]; + break; + } + } + $path = System::_dirToStruct($dir, $depth, 0, true); + if ($do_files && $do_dirs) { + $files = array_merge($path['files'], $path['dirs']); + } elseif ($do_dirs) { + $files = $path['dirs']; + } else { + $files = $path['files']; + } + if (count($patterns)) { + $dsq = preg_quote(DIRECTORY_SEPARATOR, '#'); + $pattern = '#(^|'.$dsq.')'.implode('|', $patterns).'($|'.$dsq.')#'; + $ret = array(); + $files_count = count($files); + for ($i = 0; $i < $files_count; $i++) { + // only search in the part of the file below the current directory + $filepart = basename($files[$i]); + if (preg_match($pattern, $filepart)) { + $ret[] = $files[$i]; + } + } + return $ret; + } + return $files; + } +} \ No newline at end of file diff --git a/lib/composer/vendor/pear/pear_exception/.gitignore b/lib/composer/vendor/pear/pear_exception/.gitignore new file mode 100644 index 000000000..479265b07 --- /dev/null +++ b/lib/composer/vendor/pear/pear_exception/.gitignore @@ -0,0 +1,6 @@ +PEAR_Exception*.tgz + +# composer related +composer.lock +composer.phar +vendor diff --git a/lib/composer/vendor/pear/pear_exception/.travis.yml b/lib/composer/vendor/pear/pear_exception/.travis.yml new file mode 100644 index 000000000..18875d993 --- /dev/null +++ b/lib/composer/vendor/pear/pear_exception/.travis.yml @@ -0,0 +1,7 @@ +language: php +php: + - 5.6 + - 5.5 + - 5.4 +script: + - cd tests && phpunit --coverage-text . diff --git a/lib/composer/vendor/pear/pear_exception/LICENSE b/lib/composer/vendor/pear/pear_exception/LICENSE new file mode 100644 index 000000000..a00a2421f --- /dev/null +++ b/lib/composer/vendor/pear/pear_exception/LICENSE @@ -0,0 +1,27 @@ +Copyright (c) 1997-2009, + Stig Bakken , + Gregory Beaver , + Helgi Þormar Þorbjörnsson , + Tomas V.V.Cox , + Martin Jansen . +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/lib/composer/vendor/pear/pear_exception/PEAR/Exception.php b/lib/composer/vendor/pear/pear_exception/PEAR/Exception.php new file mode 100644 index 000000000..5abf4f84a --- /dev/null +++ b/lib/composer/vendor/pear/pear_exception/PEAR/Exception.php @@ -0,0 +1,456 @@ + + * @author Hans Lellelid + * @author Bertrand Mansion + * @author Greg Beaver + * @copyright 1997-2009 The Authors + * @license http://opensource.org/licenses/bsd-license.php New BSD License + * @link http://pear.php.net/package/PEAR_Exception + * @since File available since Release 1.0.0 + */ + + +/** + * Base PEAR_Exception Class + * + * 1) Features: + * + * - Nestable exceptions (throw new PEAR_Exception($msg, $prev_exception)) + * - Definable triggers, shot when exceptions occur + * - Pretty and informative error messages + * - Added more context info available (like class, method or cause) + * - cause can be a PEAR_Exception or an array of mixed + * PEAR_Exceptions/PEAR_ErrorStack warnings + * - callbacks for specific exception classes and their children + * + * 2) Ideas: + * + * - Maybe a way to define a 'template' for the output + * + * 3) Inherited properties from PHP Exception Class: + * + * protected $message + * protected $code + * protected $line + * protected $file + * private $trace + * + * 4) Inherited methods from PHP Exception Class: + * + * __clone + * __construct + * getMessage + * getCode + * getFile + * getLine + * getTraceSafe + * getTraceSafeAsString + * __toString + * + * 5) Usage example + * + * + * require_once 'PEAR/Exception.php'; + * + * class Test { + * function foo() { + * throw new PEAR_Exception('Error Message', ERROR_CODE); + * } + * } + * + * function myLogger($pear_exception) { + * echo $pear_exception->getMessage(); + * } + * // each time a exception is thrown the 'myLogger' will be called + * // (its use is completely optional) + * PEAR_Exception::addObserver('myLogger'); + * $test = new Test; + * try { + * $test->foo(); + * } catch (PEAR_Exception $e) { + * print $e; + * } + * + * + * @category PEAR + * @package PEAR_Exception + * @author Tomas V.V.Cox + * @author Hans Lellelid + * @author Bertrand Mansion + * @author Greg Beaver + * @copyright 1997-2009 The Authors + * @license http://opensource.org/licenses/bsd-license.php New BSD License + * @version Release: @package_version@ + * @link http://pear.php.net/package/PEAR_Exception + * @since Class available since Release 1.0.0 + */ +class PEAR_Exception extends Exception +{ + const OBSERVER_PRINT = -2; + const OBSERVER_TRIGGER = -4; + const OBSERVER_DIE = -8; + protected $cause; + private static $_observers = array(); + private static $_uniqueid = 0; + private $_trace; + + /** + * Supported signatures: + * - PEAR_Exception(string $message); + * - PEAR_Exception(string $message, int $code); + * - PEAR_Exception(string $message, Exception $cause); + * - PEAR_Exception(string $message, Exception $cause, int $code); + * - PEAR_Exception(string $message, PEAR_Error $cause); + * - PEAR_Exception(string $message, PEAR_Error $cause, int $code); + * - PEAR_Exception(string $message, array $causes); + * - PEAR_Exception(string $message, array $causes, int $code); + * + * @param string $message exception message + * @param int|Exception|PEAR_Error|array|null $p2 exception cause + * @param int|null $p3 exception code or null + */ + public function __construct($message, $p2 = null, $p3 = null) + { + if (is_int($p2)) { + $code = $p2; + $this->cause = null; + } elseif (is_object($p2) || is_array($p2)) { + // using is_object allows both Exception and PEAR_Error + if (is_object($p2) && !($p2 instanceof Exception)) { + if (!class_exists('PEAR_Error') || !($p2 instanceof PEAR_Error)) { + throw new PEAR_Exception( + 'exception cause must be Exception, ' . + 'array, or PEAR_Error' + ); + } + } + $code = $p3; + if (is_array($p2) && isset($p2['message'])) { + // fix potential problem of passing in a single warning + $p2 = array($p2); + } + $this->cause = $p2; + } else { + $code = null; + $this->cause = null; + } + parent::__construct($message, $code); + $this->signal(); + } + + /** + * Add an exception observer + * + * @param mixed $callback - A valid php callback, see php func is_callable() + * - A PEAR_Exception::OBSERVER_* constant + * - An array(const PEAR_Exception::OBSERVER_*, + * mixed $options) + * @param string $label The name of the observer. Use this if you want + * to remove it later with removeObserver() + * + * @return void + */ + public static function addObserver($callback, $label = 'default') + { + self::$_observers[$label] = $callback; + } + + /** + * Remove an exception observer + * + * @param string $label Name of the observer + * + * @return void + */ + public static function removeObserver($label = 'default') + { + unset(self::$_observers[$label]); + } + + /** + * Generate a unique ID for an observer + * + * @return int unique identifier for an observer + */ + public static function getUniqueId() + { + return self::$_uniqueid++; + } + + /** + * Send a signal to all observers + * + * @return void + */ + protected function signal() + { + foreach (self::$_observers as $func) { + if (is_callable($func)) { + call_user_func($func, $this); + continue; + } + settype($func, 'array'); + switch ($func[0]) { + case self::OBSERVER_PRINT : + $f = (isset($func[1])) ? $func[1] : '%s'; + printf($f, $this->getMessage()); + break; + case self::OBSERVER_TRIGGER : + $f = (isset($func[1])) ? $func[1] : E_USER_NOTICE; + trigger_error($this->getMessage(), $f); + break; + case self::OBSERVER_DIE : + $f = (isset($func[1])) ? $func[1] : '%s'; + die(printf($f, $this->getMessage())); + break; + default: + trigger_error('invalid observer type', E_USER_WARNING); + } + } + } + + /** + * Return specific error information that can be used for more detailed + * error messages or translation. + * + * This method may be overridden in child exception classes in order + * to add functionality not present in PEAR_Exception and is a placeholder + * to define API + * + * The returned array must be an associative array of parameter => value like so: + *
+     * array('name' => $name, 'context' => array(...))
+     * 
+ * + * @return array + */ + public function getErrorData() + { + return array(); + } + + /** + * Returns the exception that caused this exception to be thrown + * + * @return Exception|array The context of the exception + */ + public function getCause() + { + return $this->cause; + } + + /** + * Function must be public to call on caused exceptions + * + * @param array $causes Array that gets filled. + * + * @return void + */ + public function getCauseMessage(&$causes) + { + $trace = $this->getTraceSafe(); + $cause = array('class' => get_class($this), + 'message' => $this->message, + 'file' => 'unknown', + 'line' => 'unknown'); + if (isset($trace[0])) { + if (isset($trace[0]['file'])) { + $cause['file'] = $trace[0]['file']; + $cause['line'] = $trace[0]['line']; + } + } + $causes[] = $cause; + if ($this->cause instanceof PEAR_Exception) { + $this->cause->getCauseMessage($causes); + } elseif ($this->cause instanceof Exception) { + $causes[] = array('class' => get_class($this->cause), + 'message' => $this->cause->getMessage(), + 'file' => $this->cause->getFile(), + 'line' => $this->cause->getLine()); + } elseif (class_exists('PEAR_Error') && $this->cause instanceof PEAR_Error) { + $causes[] = array('class' => get_class($this->cause), + 'message' => $this->cause->getMessage(), + 'file' => 'unknown', + 'line' => 'unknown'); + } elseif (is_array($this->cause)) { + foreach ($this->cause as $cause) { + if ($cause instanceof PEAR_Exception) { + $cause->getCauseMessage($causes); + } elseif ($cause instanceof Exception) { + $causes[] = array('class' => get_class($cause), + 'message' => $cause->getMessage(), + 'file' => $cause->getFile(), + 'line' => $cause->getLine()); + } elseif (class_exists('PEAR_Error') + && $cause instanceof PEAR_Error + ) { + $causes[] = array('class' => get_class($cause), + 'message' => $cause->getMessage(), + 'file' => 'unknown', + 'line' => 'unknown'); + } elseif (is_array($cause) && isset($cause['message'])) { + // PEAR_ErrorStack warning + $causes[] = array( + 'class' => $cause['package'], + 'message' => $cause['message'], + 'file' => isset($cause['context']['file']) ? + $cause['context']['file'] : + 'unknown', + 'line' => isset($cause['context']['line']) ? + $cause['context']['line'] : + 'unknown', + ); + } + } + } + } + + /** + * Build a backtrace and return it + * + * @return array Backtrace + */ + public function getTraceSafe() + { + if (!isset($this->_trace)) { + $this->_trace = $this->getTrace(); + if (empty($this->_trace)) { + $backtrace = debug_backtrace(); + $this->_trace = array($backtrace[count($backtrace)-1]); + } + } + return $this->_trace; + } + + /** + * Gets the first class of the backtrace + * + * @return string Class name + */ + public function getErrorClass() + { + $trace = $this->getTraceSafe(); + return $trace[0]['class']; + } + + /** + * Gets the first method of the backtrace + * + * @return string Method/function name + */ + public function getErrorMethod() + { + $trace = $this->getTraceSafe(); + return $trace[0]['function']; + } + + /** + * Converts the exception to a string (HTML or plain text) + * + * @return string String representation + * + * @see toHtml() + * @see toText() + */ + public function __toString() + { + if (isset($_SERVER['REQUEST_URI'])) { + return $this->toHtml(); + } + return $this->toText(); + } + + /** + * Generates a HTML representation of the exception + * + * @return string HTML code + */ + public function toHtml() + { + $trace = $this->getTraceSafe(); + $causes = array(); + $this->getCauseMessage($causes); + $html = '' . "\n"; + foreach ($causes as $i => $cause) { + $html .= '\n"; + } + $html .= '' . "\n" + . '' + . '' + . '' . "\n"; + + foreach ($trace as $k => $v) { + $html .= '' + . '' + . '' . "\n"; + } + $html .= '' + . '' + . '' . "\n" + . '
' + . str_repeat('-', $i) . ' ' . $cause['class'] . ': ' + . htmlspecialchars($cause['message']) + . ' in ' . $cause['file'] . ' ' + . 'on line ' . $cause['line'] . '' + . "
Exception trace
#FunctionLocation
' . $k . ''; + if (!empty($v['class'])) { + $html .= $v['class'] . $v['type']; + } + $html .= $v['function']; + $args = array(); + if (!empty($v['args'])) { + foreach ($v['args'] as $arg) { + if (is_null($arg)) { + $args[] = 'null'; + } else if (is_array($arg)) { + $args[] = 'Array'; + } else if (is_object($arg)) { + $args[] = 'Object('.get_class($arg).')'; + } else if (is_bool($arg)) { + $args[] = $arg ? 'true' : 'false'; + } else if (is_int($arg) || is_double($arg)) { + $args[] = $arg; + } else { + $arg = (string)$arg; + $str = htmlspecialchars(substr($arg, 0, 16)); + if (strlen($arg) > 16) { + $str .= '…'; + } + $args[] = "'" . $str . "'"; + } + } + } + $html .= '(' . implode(', ', $args) . ')' + . '' . (isset($v['file']) ? $v['file'] : 'unknown') + . ':' . (isset($v['line']) ? $v['line'] : 'unknown') + . '
' . ($k+1) . '{main} 
'; + return $html; + } + + /** + * Generates text representation of the exception and stack trace + * + * @return string + */ + public function toText() + { + $causes = array(); + $this->getCauseMessage($causes); + $causeMsg = ''; + foreach ($causes as $i => $cause) { + $causeMsg .= str_repeat(' ', $i) . $cause['class'] . ': ' + . $cause['message'] . ' in ' . $cause['file'] + . ' on line ' . $cause['line'] . "\n"; + } + return $causeMsg . $this->getTraceAsString(); + } +} +?> diff --git a/lib/composer/vendor/pear/pear_exception/composer.json b/lib/composer/vendor/pear/pear_exception/composer.json new file mode 100644 index 000000000..ce33ed1c8 --- /dev/null +++ b/lib/composer/vendor/pear/pear_exception/composer.json @@ -0,0 +1,43 @@ +{ + "name": "pear/pear_exception", + "description": "The PEAR Exception base class.", + "type": "class", + "keywords": [ + "exception" + ], + "homepage": "https://github.com/pear/PEAR_Exception", + "license": "BSD-2-Clause", + "authors": [ + { + "name": "Helgi Thormar", + "email": "dufuz@php.net" + }, + { + "name": "Greg Beaver", + "email": "cellog@php.net" + } + ], + "require": { + "php": ">=4.4.0" + }, + "autoload": { + "psr-0": { + "PEAR": "" + } + }, + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "include-path": [ + "." + ], + "support": { + "issues": "http://pear.php.net/bugs/search.php?cmd=display&package_name[]=PEAR_Exception", + "source": "https://github.com/pear/PEAR_Exception" + }, + "require-dev": { + "phpunit/phpunit": "*" + } +} diff --git a/lib/composer/vendor/pear/pear_exception/package.xml b/lib/composer/vendor/pear/pear_exception/package.xml new file mode 100644 index 000000000..98290c6a8 --- /dev/null +++ b/lib/composer/vendor/pear/pear_exception/package.xml @@ -0,0 +1,120 @@ + + + PEAR_Exception + pear.php.net + The PEAR Exception base class + PEAR_Exception PHP5 error handling mechanism + + + Christian Weiske + cweiske + cweiske@php.net + yes + + + Helgi Thormar + dufuz + dufuz@php.net + no + + + Greg Beaver + cellog + cellog@php.net + no + + + 2015-02-10 + + + 1.0.0 + 1.0.0 + + + stable + stable + + New BSD License + + This package was split out from the PEAR package. + If you use PEAR_Exception in your package and use nothing from the PEAR package + then it's better to depend on just PEAR_Exception. + + + + + + + + + + + + + + + + + + 5.4.0 + + + 1.9.5 + + + + + + + + + + 1.0.0 + 1.0.0 + + + stable + stable + + 2015-02-10 + New BSD License + Release stable version + + + + + 1.0.0beta2 + 1.0.0 + + + beta + stable + + 2014-02-21 + New BSD License + Bump up PEAR dependency. + + + + + 1.0.0beta1 + 1.0.0 + + + beta + stable + + 2012-05-10 + New BSD License + +This packge was split out from the PEAR package. If you use PEAR_Exception in your package +and use nothing from the PEAR package then it's better to depend on just PEAR_Exception. + + + + diff --git a/lib/composer/vendor/pear/pear_exception/tests/PEAR/ExceptionTest.php b/lib/composer/vendor/pear/pear_exception/tests/PEAR/ExceptionTest.php new file mode 100644 index 000000000..61d2df4f1 --- /dev/null +++ b/lib/composer/vendor/pear/pear_exception/tests/PEAR/ExceptionTest.php @@ -0,0 +1,78 @@ +assertNull($e->getCause()); + } + + public function testGetCauseException() + { + $cause = new Exception('foo bar'); + $e = new PEAR_Exception('I caught an exception', $cause); + $this->assertNotNull($e->getCause()); + $this->assertInstanceOf('Exception', $e->getCause()); + $this->assertEquals($cause, $e->getCause()); + } + + public function testGetCauseMessage() + { + $cause = new Exception('foo bar'); + $e = new PEAR_Exception('I caught an exception', $cause); + + $e->getCauseMessage($causes); + $this->assertEquals('I caught an exception', $causes[0]['message']); + $this->assertEquals('foo bar', $causes[1]['message']); + } + + public function testGetTraceSafe() + { + $e = new PEAR_Exception('oops'); + $this->assertInternalType('array', $e->getTraceSafe()); + } + + public function testGetErrorClass() + { + $e = new PEAR_Exception('oops'); + $this->assertEquals('PEAR_ExceptionTest', $e->getErrorClass()); + } + + public function testGetErrorMethod() + { + $e = new PEAR_Exception('oops'); + $this->assertEquals('testGetErrorMethod', $e->getErrorMethod()); + } + + public function test__toString() + { + $e = new PEAR_Exception('oops'); + $this->assertInternalType('string', (string) $e); + $this->assertContains('oops', (string) $e); + } + + public function testToHtml() + { + $e = new PEAR_Exception('oops'); + $html = $e->toHtml(); + $this->assertInternalType('string', $html); + $this->assertContains('oops', $html); + } +} +?> diff --git a/lib/composer/vendor/phar-io/manifest/.gitignore b/lib/composer/vendor/phar-io/manifest/.gitignore new file mode 100644 index 000000000..94d433b57 --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/.gitignore @@ -0,0 +1,8 @@ +/.idea +/.php_cs.cache +/composer.lock +/src/autoload.php +/tools +/vendor + +/build diff --git a/lib/composer/vendor/phar-io/manifest/.php_cs b/lib/composer/vendor/phar-io/manifest/.php_cs new file mode 100644 index 000000000..159d6a35a --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/.php_cs @@ -0,0 +1,67 @@ +files() + ->in('src') + ->in('tests') + ->name('*.php'); + +return Symfony\CS\Config\Config::create() + ->setUsingCache(true) + ->level(\Symfony\CS\FixerInterface::NONE_LEVEL) + ->fixers( + array( + 'align_double_arrow', + 'align_equals', + 'concat_with_spaces', + 'duplicate_semicolon', + 'elseif', + 'empty_return', + 'encoding', + 'eof_ending', + 'extra_empty_lines', + 'function_call_space', + 'function_declaration', + 'indentation', + 'join_function', + 'line_after_namespace', + 'linefeed', + 'list_commas', + 'lowercase_constants', + 'lowercase_keywords', + 'method_argument_space', + 'multiple_use', + 'namespace_no_leading_whitespace', + 'no_blank_lines_after_class_opening', + 'no_empty_lines_after_phpdocs', + 'parenthesis', + 'php_closing_tag', + 'phpdoc_indent', + 'phpdoc_no_access', + 'phpdoc_no_empty_return', + 'phpdoc_no_package', + 'phpdoc_params', + 'phpdoc_scalar', + 'phpdoc_separation', + 'phpdoc_to_comment', + 'phpdoc_trim', + 'phpdoc_types', + 'phpdoc_var_without_name', + 'remove_lines_between_uses', + 'return', + 'self_accessor', + 'short_array_syntax', + 'short_tag', + 'single_line_after_imports', + 'single_quote', + 'spaces_before_semicolon', + 'spaces_cast', + 'ternary_spaces', + 'trailing_spaces', + 'trim_array_spaces', + 'unused_use', + 'visibility', + 'whitespacy_lines' + ) + ) + ->finder($finder); + diff --git a/lib/composer/vendor/phar-io/manifest/.travis.yml b/lib/composer/vendor/phar-io/manifest/.travis.yml new file mode 100644 index 000000000..b4be10f9c --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/.travis.yml @@ -0,0 +1,33 @@ +os: +- linux + +language: php + +before_install: + - wget https://phar.io/releases/phive.phar + - wget https://phar.io/releases/phive.phar.asc + - gpg --keyserver hkps.pool.sks-keyservers.net --recv-keys 0x9B2D5D79 + - gpg --verify phive.phar.asc phive.phar + - chmod +x phive.phar + - sudo mv phive.phar /usr/bin/phive + +install: + - ant setup + +script: ./tools/phpunit + +php: + - 5.6 + - 7.0 + - 7.1 + - 7.0snapshot + - 7.1snapshot + - master + +matrix: + allow_failures: + - php: master + fast_finish: true + +notifications: + email: false diff --git a/lib/composer/vendor/phar-io/manifest/LICENSE b/lib/composer/vendor/phar-io/manifest/LICENSE new file mode 100644 index 000000000..96051b14e --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/LICENSE @@ -0,0 +1,31 @@ +manifest + +Copyright (c) 2016 Arne Blankerts , Sebastian Heuer , Sebastian Bergmann , and contributors +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +* Neither the name of Arne Blankerts nor the names of contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT * NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS +BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, +OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. + diff --git a/lib/composer/vendor/phar-io/manifest/README.md b/lib/composer/vendor/phar-io/manifest/README.md new file mode 100644 index 000000000..e6d0b055d --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/README.md @@ -0,0 +1,30 @@ +# Manifest + +Component for reading [phar.io](https://phar.io/) manifest information from a [PHP Archive (PHAR)](http://php.net/phar). + +[![Build Status](https://travis-ci.org/phar-io/manifest.svg?branch=master)](https://travis-ci.org/phar-io/manifest) +[![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/phar-io/manifest/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/phar-io/manifest/?branch=master) +[![SensioLabsInsight](https://insight.sensiolabs.com/projects/d8cc6035-69ad-477d-bd1a-ccc605480fd7/mini.png)](https://insight.sensiolabs.com/projects/d8cc6035-69ad-477d-bd1a-ccc605480fd7) + +## Installation + +You can add this library as a local, per-project dependency to your project using [Composer](https://getcomposer.org/): + + composer require phar-io/manifest + +If you only need this library during development, for instance to run your project's test suite, then you should add it as a development-time dependency: + + composer require --dev phar-io/manifest + +## Usage + +```php +use PharIo\Manifest\ManifestLoader; +use PharIo\Manifest\ManifestSerializer; + +$manifest = ManifestLoader::fromFile('manifest.xml'); + +var_dump($manifest); + +echo (new ManifestSerializer)->serializeToString($manifest); +``` diff --git a/lib/composer/vendor/phar-io/manifest/build.xml b/lib/composer/vendor/phar-io/manifest/build.xml new file mode 100644 index 000000000..fc6eb1a8e --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/build.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/lib/composer/vendor/phar-io/manifest/composer.json b/lib/composer/vendor/phar-io/manifest/composer.json new file mode 100644 index 000000000..832134d64 --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/composer.json @@ -0,0 +1,42 @@ +{ + "name": "phar-io/manifest", + "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", + "license": "BSD-3-Clause", + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "support": { + "issues": "https://github.com/phar-io/manifest/issues" + }, + "require": { + "php": "^5.6 || ^7.0", + "ext-dom": "*", + "ext-phar": "*", + "phar-io/version": "^1.0.1" + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + } +} + diff --git a/lib/composer/vendor/phar-io/manifest/examples/example-01.php b/lib/composer/vendor/phar-io/manifest/examples/example-01.php new file mode 100644 index 000000000..345c407ad --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/examples/example-01.php @@ -0,0 +1,23 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +use PharIo\Manifest\ManifestLoader; +use PharIo\Manifest\ManifestSerializer; + +require __DIR__ . '/../vendor/autoload.php'; + +$manifest = ManifestLoader::fromFile(__DIR__ . '/../tests/_fixture/phpunit-5.6.5.xml'); + +echo sprintf( + "Manifest for %s (%s):\n\n", + $manifest->getName(), + $manifest->getVersion()->getVersionString() +); +echo (new ManifestSerializer)->serializeToString($manifest); diff --git a/lib/composer/vendor/phar-io/manifest/phive.xml b/lib/composer/vendor/phar-io/manifest/phive.xml new file mode 100644 index 000000000..69f2f91b7 --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/phive.xml @@ -0,0 +1,4 @@ + + + + diff --git a/lib/composer/vendor/phar-io/manifest/phpunit.xml b/lib/composer/vendor/phar-io/manifest/phpunit.xml new file mode 100644 index 000000000..2d7708eec --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/phpunit.xml @@ -0,0 +1,20 @@ + + + + tests + + + + + src + + + diff --git a/lib/composer/vendor/phar-io/manifest/src/ManifestDocumentMapper.php b/lib/composer/vendor/phar-io/manifest/src/ManifestDocumentMapper.php new file mode 100644 index 000000000..d41e4f93f --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/src/ManifestDocumentMapper.php @@ -0,0 +1,193 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +use PharIo\Version\Version; +use PharIo\Version\Exception as VersionException; +use PharIo\Version\VersionConstraintParser; + +class ManifestDocumentMapper { + /** + * @param ManifestDocument $document + * + * @returns Manifest + * + * @throws ManifestDocumentMapperException + */ + public function map(ManifestDocument $document) { + try { + $contains = $document->getContainsElement(); + $type = $this->mapType($contains); + $copyright = $this->mapCopyright($document->getCopyrightElement()); + $requirements = $this->mapRequirements($document->getRequiresElement()); + $bundledComponents = $this->mapBundledComponents($document); + + return new Manifest( + new ApplicationName($contains->getName()), + new Version($contains->getVersion()), + $type, + $copyright, + $requirements, + $bundledComponents + ); + } catch (VersionException $e) { + throw new ManifestDocumentMapperException($e->getMessage(), $e->getCode(), $e); + } catch (Exception $e) { + throw new ManifestDocumentMapperException($e->getMessage(), $e->getCode(), $e); + } + } + + /** + * @param ContainsElement $contains + * + * @return Type + * + * @throws ManifestDocumentMapperException + */ + private function mapType(ContainsElement $contains) { + switch ($contains->getType()) { + case 'application': + return Type::application(); + case 'library': + return Type::library(); + case 'extension': + return $this->mapExtension($contains->getExtensionElement()); + } + + throw new ManifestDocumentMapperException( + sprintf('Unsupported type %s', $contains->getType()) + ); + } + + /** + * @param CopyrightElement $copyright + * + * @return CopyrightInformation + * + * @throws InvalidUrlException + * @throws InvalidEmailException + */ + private function mapCopyright(CopyrightElement $copyright) { + $authors = new AuthorCollection(); + + foreach($copyright->getAuthorElements() as $authorElement) { + $authors->add( + new Author( + $authorElement->getName(), + new Email($authorElement->getEmail()) + ) + ); + } + + $licenseElement = $copyright->getLicenseElement(); + $license = new License( + $licenseElement->getType(), + new Url($licenseElement->getUrl()) + ); + + return new CopyrightInformation( + $authors, + $license + ); + } + + /** + * @param RequiresElement $requires + * + * @return RequirementCollection + * + * @throws ManifestDocumentMapperException + */ + private function mapRequirements(RequiresElement $requires) { + $collection = new RequirementCollection(); + $phpElement = $requires->getPHPElement(); + $parser = new VersionConstraintParser; + + try { + $versionConstraint = $parser->parse($phpElement->getVersion()); + } catch (VersionException $e) { + throw new ManifestDocumentMapperException( + sprintf('Unsupported version constraint - %s', $e->getMessage()), + $e->getCode(), + $e + ); + } + + $collection->add( + new PhpVersionRequirement( + $versionConstraint + ) + ); + + if (!$phpElement->hasExtElements()) { + return $collection; + } + + foreach($phpElement->getExtElements() as $extElement) { + $collection->add( + new PhpExtensionRequirement($extElement->getName()) + ); + } + + return $collection; + } + + /** + * @param ManifestDocument $document + * + * @return BundledComponentCollection + */ + private function mapBundledComponents(ManifestDocument $document) { + $collection = new BundledComponentCollection(); + + if (!$document->hasBundlesElement()) { + return $collection; + } + + foreach($document->getBundlesElement()->getComponentElements() as $componentElement) { + $collection->add( + new BundledComponent( + $componentElement->getName(), + new Version( + $componentElement->getVersion() + ) + ) + ); + } + + return $collection; + } + + /** + * @param ExtensionElement $extension + * + * @return Extension + * + * @throws ManifestDocumentMapperException + */ + private function mapExtension(ExtensionElement $extension) { + try { + $parser = new VersionConstraintParser; + $versionConstraint = $parser->parse($extension->getCompatible()); + + return Type::extension( + new ApplicationName($extension->getFor()), + $versionConstraint + ); + } catch (VersionException $e) { + throw new ManifestDocumentMapperException( + sprintf('Unsupported version constraint - %s', $e->getMessage()), + $e->getCode(), + $e + ); + } + } +} diff --git a/lib/composer/vendor/phar-io/manifest/src/ManifestLoader.php b/lib/composer/vendor/phar-io/manifest/src/ManifestLoader.php new file mode 100644 index 000000000..81c5c90e4 --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/src/ManifestLoader.php @@ -0,0 +1,66 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +class ManifestLoader { + /** + * @param string $filename + * + * @return Manifest + * + * @throws ManifestLoaderException + */ + public static function fromFile($filename) { + try { + return (new ManifestDocumentMapper())->map( + ManifestDocument::fromFile($filename) + ); + } catch (Exception $e) { + throw new ManifestLoaderException( + sprintf('Loading %s failed.', $filename), + $e->getCode(), + $e + ); + } + } + + /** + * @param string $filename + * + * @return Manifest + * + * @throws ManifestLoaderException + */ + public static function fromPhar($filename) { + return self::fromFile('phar://' . $filename . '/manifest.xml'); + } + + /** + * @param string $manifest + * + * @return Manifest + * + * @throws ManifestLoaderException + */ + public static function fromString($manifest) { + try { + return (new ManifestDocumentMapper())->map( + ManifestDocument::fromString($manifest) + ); + } catch (Exception $e) { + throw new ManifestLoaderException( + 'Processing string failed', + $e->getCode(), + $e + ); + } + } +} diff --git a/lib/composer/vendor/phar-io/manifest/src/ManifestSerializer.php b/lib/composer/vendor/phar-io/manifest/src/ManifestSerializer.php new file mode 100644 index 000000000..4c18ddd81 --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/src/ManifestSerializer.php @@ -0,0 +1,163 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +use PharIo\Version\AnyVersionConstraint; +use PharIo\Version\Version; +use PharIo\Version\VersionConstraint; +use XMLWriter; + +class ManifestSerializer { + /** + * @var XMLWriter + */ + private $xmlWriter; + + public function serializeToFile(Manifest $manifest, $filename) { + file_put_contents( + $filename, + $this->serializeToString($manifest) + ); + } + + public function serializeToString(Manifest $manifest) { + $this->startDocument(); + + $this->addContains($manifest->getName(), $manifest->getVersion(), $manifest->getType()); + $this->addCopyright($manifest->getCopyrightInformation()); + $this->addRequirements($manifest->getRequirements()); + $this->addBundles($manifest->getBundledComponents()); + + return $this->finishDocument(); + } + + private function startDocument() { + $xmlWriter = new XMLWriter(); + $xmlWriter->openMemory(); + $xmlWriter->setIndent(true); + $xmlWriter->setIndentString(str_repeat(' ', 4)); + $xmlWriter->startDocument('1.0', 'UTF-8'); + $xmlWriter->startElement('phar'); + $xmlWriter->writeAttribute('xmlns', 'https://phar.io/xml/manifest/1.0'); + + $this->xmlWriter = $xmlWriter; + } + + private function finishDocument() { + $this->xmlWriter->endElement(); + $this->xmlWriter->endDocument(); + + return $this->xmlWriter->outputMemory(); + } + + private function addContains($name, Version $version, Type $type) { + $this->xmlWriter->startElement('contains'); + $this->xmlWriter->writeAttribute('name', $name); + $this->xmlWriter->writeAttribute('version', $version->getVersionString()); + + switch (true) { + case $type->isApplication(): { + $this->xmlWriter->writeAttribute('type', 'application'); + break; + } + + case $type->isLibrary(): { + $this->xmlWriter->writeAttribute('type', 'library'); + break; + } + + case $type->isExtension(): { + /* @var $type Extension */ + $this->xmlWriter->writeAttribute('type', 'extension'); + $this->addExtension($type->getApplicationName(), $type->getVersionConstraint()); + break; + } + + default: { + $this->xmlWriter->writeAttribute('type', 'custom'); + } + } + + $this->xmlWriter->endElement(); + } + + private function addCopyright(CopyrightInformation $copyrightInformation) { + $this->xmlWriter->startElement('copyright'); + + foreach($copyrightInformation->getAuthors() as $author) { + $this->xmlWriter->startElement('author'); + $this->xmlWriter->writeAttribute('name', $author->getName()); + $this->xmlWriter->writeAttribute('email', (string) $author->getEmail()); + $this->xmlWriter->endElement(); + } + + $license = $copyrightInformation->getLicense(); + + $this->xmlWriter->startElement('license'); + $this->xmlWriter->writeAttribute('type', $license->getName()); + $this->xmlWriter->writeAttribute('url', $license->getUrl()); + $this->xmlWriter->endElement(); + + $this->xmlWriter->endElement(); + } + + private function addRequirements(RequirementCollection $requirementCollection) { + $phpRequirement = new AnyVersionConstraint(); + $extensions = []; + + foreach($requirementCollection as $requirement) { + if ($requirement instanceof PhpVersionRequirement) { + $phpRequirement = $requirement->getVersionConstraint(); + continue; + } + + if ($requirement instanceof PhpExtensionRequirement) { + $extensions[] = (string) $requirement; + } + } + + $this->xmlWriter->startElement('requires'); + $this->xmlWriter->startElement('php'); + $this->xmlWriter->writeAttribute('version', $phpRequirement->asString()); + + foreach($extensions as $extension) { + $this->xmlWriter->startElement('ext'); + $this->xmlWriter->writeAttribute('name', $extension); + $this->xmlWriter->endElement(); + } + + $this->xmlWriter->endElement(); + $this->xmlWriter->endElement(); + } + + private function addBundles(BundledComponentCollection $bundledComponentCollection) { + if (count($bundledComponentCollection) === 0) { + return; + } + $this->xmlWriter->startElement('bundles'); + + foreach($bundledComponentCollection as $bundledComponent) { + $this->xmlWriter->startElement('component'); + $this->xmlWriter->writeAttribute('name', $bundledComponent->getName()); + $this->xmlWriter->writeAttribute('version', $bundledComponent->getVersion()->getVersionString()); + $this->xmlWriter->endElement(); + } + + $this->xmlWriter->endElement(); + } + + private function addExtension($application, VersionConstraint $versionConstraint) { + $this->xmlWriter->startElement('extension'); + $this->xmlWriter->writeAttribute('for', $application); + $this->xmlWriter->writeAttribute('compatible', $versionConstraint->asString()); + $this->xmlWriter->endElement(); + } +} diff --git a/lib/composer/vendor/phar-io/manifest/src/exceptions/Exception.php b/lib/composer/vendor/phar-io/manifest/src/exceptions/Exception.php new file mode 100644 index 000000000..3ce46f24c --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/src/exceptions/Exception.php @@ -0,0 +1,14 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +interface Exception { +} diff --git a/lib/composer/vendor/phar-io/manifest/src/exceptions/InvalidApplicationNameException.php b/lib/composer/vendor/phar-io/manifest/src/exceptions/InvalidApplicationNameException.php new file mode 100644 index 000000000..a53735a4b --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/src/exceptions/InvalidApplicationNameException.php @@ -0,0 +1,16 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +class InvalidApplicationNameException extends \InvalidArgumentException implements Exception { + const NotAString = 1; + const InvalidFormat = 2; +} diff --git a/lib/composer/vendor/phar-io/manifest/src/exceptions/InvalidEmailException.php b/lib/composer/vendor/phar-io/manifest/src/exceptions/InvalidEmailException.php new file mode 100644 index 000000000..854399b29 --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/src/exceptions/InvalidEmailException.php @@ -0,0 +1,14 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +class InvalidEmailException extends \InvalidArgumentException implements Exception { +} diff --git a/lib/composer/vendor/phar-io/manifest/src/exceptions/InvalidUrlException.php b/lib/composer/vendor/phar-io/manifest/src/exceptions/InvalidUrlException.php new file mode 100644 index 000000000..cdd832340 --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/src/exceptions/InvalidUrlException.php @@ -0,0 +1,14 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +class InvalidUrlException extends \InvalidArgumentException implements Exception { +} diff --git a/lib/composer/vendor/phar-io/manifest/src/exceptions/ManifestDocumentException.php b/lib/composer/vendor/phar-io/manifest/src/exceptions/ManifestDocumentException.php new file mode 100644 index 000000000..8b40195ef --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/src/exceptions/ManifestDocumentException.php @@ -0,0 +1,6 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +class Application extends Type { + /** + * @return bool + */ + public function isApplication() { + return true; + } +} diff --git a/lib/composer/vendor/phar-io/manifest/src/values/ApplicationName.php b/lib/composer/vendor/phar-io/manifest/src/values/ApplicationName.php new file mode 100644 index 000000000..1e71af48e --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/src/values/ApplicationName.php @@ -0,0 +1,65 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +class ApplicationName { + /** + * @var string + */ + private $name; + + /** + * ApplicationName constructor. + * + * @param string $name + * + * @throws InvalidApplicationNameException + */ + public function __construct($name) { + $this->ensureIsString($name); + $this->ensureValidFormat($name); + $this->name = $name; + } + + /** + * @return string + */ + public function __toString() { + return $this->name; + } + + public function isEqual(ApplicationName $name) { + return $this->name === $name->name; + } + + /** + * @param string $name + * + * @throws InvalidApplicationNameException + */ + private function ensureValidFormat($name) { + if (!preg_match('#\w/\w#', $name)) { + throw new InvalidApplicationNameException( + sprintf('Format of name "%s" is not valid - expected: vendor/packagename', $name), + InvalidApplicationNameException::InvalidFormat + ); + } + } + + private function ensureIsString($name) { + if (!is_string($name)) { + throw new InvalidApplicationNameException( + 'Name must be a string', + InvalidApplicationNameException::NotAString + ); + } + } +} diff --git a/lib/composer/vendor/phar-io/manifest/src/values/Author.php b/lib/composer/vendor/phar-io/manifest/src/values/Author.php new file mode 100644 index 000000000..8295f513e --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/src/values/Author.php @@ -0,0 +1,57 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +class Author { + /** + * @var string + */ + private $name; + + /** + * @var Email + */ + private $email; + + /** + * @param string $name + * @param Email $email + */ + public function __construct($name, Email $email) { + $this->name = $name; + $this->email = $email; + } + + /** + * @return string + */ + public function getName() { + return $this->name; + } + + /** + * @return Email + */ + public function getEmail() { + return $this->email; + } + + /** + * @return string + */ + public function __toString() { + return sprintf( + '%s <%s>', + $this->name, + $this->email + ); + } +} diff --git a/lib/composer/vendor/phar-io/manifest/src/values/AuthorCollection.php b/lib/composer/vendor/phar-io/manifest/src/values/AuthorCollection.php new file mode 100644 index 000000000..d9158793a --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/src/values/AuthorCollection.php @@ -0,0 +1,43 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +class AuthorCollection implements \Countable, \IteratorAggregate { + /** + * @var Author[] + */ + private $authors = []; + + public function add(Author $author) { + $this->authors[] = $author; + } + + /** + * @return Author[] + */ + public function getAuthors() { + return $this->authors; + } + + /** + * @return int + */ + public function count() { + return count($this->authors); + } + + /** + * @return AuthorCollectionIterator + */ + public function getIterator() { + return new AuthorCollectionIterator($this); + } +} diff --git a/lib/composer/vendor/phar-io/manifest/src/values/AuthorCollectionIterator.php b/lib/composer/vendor/phar-io/manifest/src/values/AuthorCollectionIterator.php new file mode 100644 index 000000000..792a05029 --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/src/values/AuthorCollectionIterator.php @@ -0,0 +1,56 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +class AuthorCollectionIterator implements \Iterator { + /** + * @var Author[] + */ + private $authors = []; + + /** + * @var int + */ + private $position; + + public function __construct(AuthorCollection $authors) { + $this->authors = $authors->getAuthors(); + } + + public function rewind() { + $this->position = 0; + } + + /** + * @return bool + */ + public function valid() { + return $this->position < count($this->authors); + } + + /** + * @return int + */ + public function key() { + return $this->position; + } + + /** + * @return Author + */ + public function current() { + return $this->authors[$this->position]; + } + + public function next() { + $this->position++; + } +} diff --git a/lib/composer/vendor/phar-io/manifest/src/values/BundledComponent.php b/lib/composer/vendor/phar-io/manifest/src/values/BundledComponent.php new file mode 100644 index 000000000..846d15a39 --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/src/values/BundledComponent.php @@ -0,0 +1,48 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +use PharIo\Version\Version; + +class BundledComponent { + /** + * @var string + */ + private $name; + + /** + * @var Version + */ + private $version; + + /** + * @param string $name + * @param Version $version + */ + public function __construct($name, Version $version) { + $this->name = $name; + $this->version = $version; + } + + /** + * @return string + */ + public function getName() { + return $this->name; + } + + /** + * @return Version + */ + public function getVersion() { + return $this->version; + } +} diff --git a/lib/composer/vendor/phar-io/manifest/src/values/BundledComponentCollection.php b/lib/composer/vendor/phar-io/manifest/src/values/BundledComponentCollection.php new file mode 100644 index 000000000..2dbb918c0 --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/src/values/BundledComponentCollection.php @@ -0,0 +1,43 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +class BundledComponentCollection implements \Countable, \IteratorAggregate { + /** + * @var BundledComponent[] + */ + private $bundledComponents = []; + + public function add(BundledComponent $bundledComponent) { + $this->bundledComponents[] = $bundledComponent; + } + + /** + * @return BundledComponent[] + */ + public function getBundledComponents() { + return $this->bundledComponents; + } + + /** + * @return int + */ + public function count() { + return count($this->bundledComponents); + } + + /** + * @return BundledComponentCollectionIterator + */ + public function getIterator() { + return new BundledComponentCollectionIterator($this); + } +} diff --git a/lib/composer/vendor/phar-io/manifest/src/values/BundledComponentCollectionIterator.php b/lib/composer/vendor/phar-io/manifest/src/values/BundledComponentCollectionIterator.php new file mode 100644 index 000000000..13b8f050c --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/src/values/BundledComponentCollectionIterator.php @@ -0,0 +1,56 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +class BundledComponentCollectionIterator implements \Iterator { + /** + * @var BundledComponent[] + */ + private $bundledComponents = []; + + /** + * @var int + */ + private $position; + + public function __construct(BundledComponentCollection $bundledComponents) { + $this->bundledComponents = $bundledComponents->getBundledComponents(); + } + + public function rewind() { + $this->position = 0; + } + + /** + * @return bool + */ + public function valid() { + return $this->position < count($this->bundledComponents); + } + + /** + * @return int + */ + public function key() { + return $this->position; + } + + /** + * @return BundledComponent + */ + public function current() { + return $this->bundledComponents[$this->position]; + } + + public function next() { + $this->position++; + } +} diff --git a/lib/composer/vendor/phar-io/manifest/src/values/CopyrightInformation.php b/lib/composer/vendor/phar-io/manifest/src/values/CopyrightInformation.php new file mode 100644 index 000000000..ece60b194 --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/src/values/CopyrightInformation.php @@ -0,0 +1,42 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +class CopyrightInformation { + /** + * @var AuthorCollection + */ + private $authors; + + /** + * @var License + */ + private $license; + + public function __construct(AuthorCollection $authors, License $license) { + $this->authors = $authors; + $this->license = $license; + } + + /** + * @return AuthorCollection + */ + public function getAuthors() { + return $this->authors; + } + + /** + * @return License + */ + public function getLicense() { + return $this->license; + } +} diff --git a/lib/composer/vendor/phar-io/manifest/src/values/Email.php b/lib/composer/vendor/phar-io/manifest/src/values/Email.php new file mode 100644 index 000000000..57cce042d --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/src/values/Email.php @@ -0,0 +1,47 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +class Email { + /** + * @var string + */ + private $email; + + /** + * @param string $email + * + * @throws InvalidEmailException + */ + public function __construct($email) { + $this->ensureEmailIsValid($email); + + $this->email = $email; + } + + /** + * @return string + */ + public function __toString() { + return $this->email; + } + + /** + * @param string $url + * + * @throws InvalidEmailException + */ + private function ensureEmailIsValid($url) { + if (filter_var($url, \FILTER_VALIDATE_EMAIL) === false) { + throw new InvalidEmailException; + } + } +} diff --git a/lib/composer/vendor/phar-io/manifest/src/values/Extension.php b/lib/composer/vendor/phar-io/manifest/src/values/Extension.php new file mode 100644 index 000000000..90d6a6fd7 --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/src/values/Extension.php @@ -0,0 +1,75 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +use PharIo\Version\Version; +use PharIo\Version\VersionConstraint; + +class Extension extends Type { + /** + * @var ApplicationName + */ + private $application; + + /** + * @var VersionConstraint + */ + private $versionConstraint; + + /** + * @param ApplicationName $application + * @param VersionConstraint $versionConstraint + */ + public function __construct(ApplicationName $application, VersionConstraint $versionConstraint) { + $this->application = $application; + $this->versionConstraint = $versionConstraint; + } + + /** + * @return ApplicationName + */ + public function getApplicationName() { + return $this->application; + } + + /** + * @return VersionConstraint + */ + public function getVersionConstraint() { + return $this->versionConstraint; + } + + /** + * @return bool + */ + public function isExtension() { + return true; + } + + /** + * @param ApplicationName $name + * + * @return bool + */ + public function isExtensionFor(ApplicationName $name) { + return $this->application->isEqual($name); + } + + /** + * @param ApplicationName $name + * @param Version $version + * + * @return bool + */ + public function isCompatibleWith(ApplicationName $name, Version $version) { + return $this->isExtensionFor($name) && $this->versionConstraint->complies($version); + } +} diff --git a/lib/composer/vendor/phar-io/manifest/src/values/Library.php b/lib/composer/vendor/phar-io/manifest/src/values/Library.php new file mode 100644 index 000000000..a6ff94438 --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/src/values/Library.php @@ -0,0 +1,20 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +class Library extends Type { + /** + * @return bool + */ + public function isLibrary() { + return true; + } +} diff --git a/lib/composer/vendor/phar-io/manifest/src/values/License.php b/lib/composer/vendor/phar-io/manifest/src/values/License.php new file mode 100644 index 000000000..e278670a9 --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/src/values/License.php @@ -0,0 +1,42 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +class License { + /** + * @var string + */ + private $name; + + /** + * @var Url + */ + private $url; + + public function __construct($name, Url $url) { + $this->name = $name; + $this->url = $url; + } + + /** + * @return string + */ + public function getName() { + return $this->name; + } + + /** + * @return Url + */ + public function getUrl() { + return $this->url; + } +} diff --git a/lib/composer/vendor/phar-io/manifest/src/values/Manifest.php b/lib/composer/vendor/phar-io/manifest/src/values/Manifest.php new file mode 100644 index 000000000..217acefc6 --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/src/values/Manifest.php @@ -0,0 +1,138 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +use PharIo\Version\Version; + +class Manifest { + /** + * @var ApplicationName + */ + private $name; + + /** + * @var Version + */ + private $version; + + /** + * @var Type + */ + private $type; + + /** + * @var CopyrightInformation + */ + private $copyrightInformation; + + /** + * @var RequirementCollection + */ + private $requirements; + + /** + * @var BundledComponentCollection + */ + private $bundledComponents; + + public function __construct(ApplicationName $name, Version $version, Type $type, CopyrightInformation $copyrightInformation, RequirementCollection $requirements, BundledComponentCollection $bundledComponents) { + $this->name = $name; + $this->version = $version; + $this->type = $type; + $this->copyrightInformation = $copyrightInformation; + $this->requirements = $requirements; + $this->bundledComponents = $bundledComponents; + } + + /** + * @return ApplicationName + */ + public function getName() { + return $this->name; + } + + /** + * @return Version + */ + public function getVersion() { + return $this->version; + } + + /** + * @return Type + */ + public function getType() { + return $this->type; + } + + /** + * @return CopyrightInformation + */ + public function getCopyrightInformation() { + return $this->copyrightInformation; + } + + /** + * @return RequirementCollection + */ + public function getRequirements() { + return $this->requirements; + } + + /** + * @return BundledComponentCollection + */ + public function getBundledComponents() { + return $this->bundledComponents; + } + + /** + * @return bool + */ + public function isApplication() { + return $this->type->isApplication(); + } + + /** + * @return bool + */ + public function isLibrary() { + return $this->type->isLibrary(); + } + + /** + * @return bool + */ + public function isExtension() { + return $this->type->isExtension(); + } + + /** + * @param ApplicationName $application + * @param Version|null $version + * + * @return bool + */ + public function isExtensionFor(ApplicationName $application, Version $version = null) { + if (!$this->isExtension()) { + return false; + } + + /** @var Extension $type */ + $type = $this->type; + + if ($version !== null) { + return $type->isCompatibleWith($application, $version); + } + + return $type->isExtensionFor($application); + } +} diff --git a/lib/composer/vendor/phar-io/manifest/src/values/PhpExtensionRequirement.php b/lib/composer/vendor/phar-io/manifest/src/values/PhpExtensionRequirement.php new file mode 100644 index 000000000..6dd929688 --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/src/values/PhpExtensionRequirement.php @@ -0,0 +1,32 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +class PhpExtensionRequirement implements Requirement { + /** + * @var string + */ + private $extension; + + /** + * @param string $extension + */ + public function __construct($extension) { + $this->extension = $extension; + } + + /** + * @return string + */ + public function __toString() { + return $this->extension; + } +} diff --git a/lib/composer/vendor/phar-io/manifest/src/values/PhpVersionRequirement.php b/lib/composer/vendor/phar-io/manifest/src/values/PhpVersionRequirement.php new file mode 100644 index 000000000..8ad3e7691 --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/src/values/PhpVersionRequirement.php @@ -0,0 +1,31 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +use PharIo\Version\VersionConstraint; + +class PhpVersionRequirement implements Requirement { + /** + * @var VersionConstraint + */ + private $versionConstraint; + + public function __construct(VersionConstraint $versionConstraint) { + $this->versionConstraint = $versionConstraint; + } + + /** + * @return VersionConstraint + */ + public function getVersionConstraint() { + return $this->versionConstraint; + } +} diff --git a/lib/composer/vendor/phar-io/manifest/src/values/Requirement.php b/lib/composer/vendor/phar-io/manifest/src/values/Requirement.php new file mode 100644 index 000000000..03bb56d11 --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/src/values/Requirement.php @@ -0,0 +1,14 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +interface Requirement { +} diff --git a/lib/composer/vendor/phar-io/manifest/src/values/RequirementCollection.php b/lib/composer/vendor/phar-io/manifest/src/values/RequirementCollection.php new file mode 100644 index 000000000..af0e09b86 --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/src/values/RequirementCollection.php @@ -0,0 +1,43 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +class RequirementCollection implements \Countable, \IteratorAggregate { + /** + * @var Requirement[] + */ + private $requirements = []; + + public function add(Requirement $requirement) { + $this->requirements[] = $requirement; + } + + /** + * @return Requirement[] + */ + public function getRequirements() { + return $this->requirements; + } + + /** + * @return int + */ + public function count() { + return count($this->requirements); + } + + /** + * @return RequirementCollectionIterator + */ + public function getIterator() { + return new RequirementCollectionIterator($this); + } +} diff --git a/lib/composer/vendor/phar-io/manifest/src/values/RequirementCollectionIterator.php b/lib/composer/vendor/phar-io/manifest/src/values/RequirementCollectionIterator.php new file mode 100644 index 000000000..9bb7003db --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/src/values/RequirementCollectionIterator.php @@ -0,0 +1,56 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +class RequirementCollectionIterator implements \Iterator { + /** + * @var Requirement[] + */ + private $requirements = []; + + /** + * @var int + */ + private $position; + + public function __construct(RequirementCollection $requirements) { + $this->requirements = $requirements->getRequirements(); + } + + public function rewind() { + $this->position = 0; + } + + /** + * @return bool + */ + public function valid() { + return $this->position < count($this->requirements); + } + + /** + * @return int + */ + public function key() { + return $this->position; + } + + /** + * @return Requirement + */ + public function current() { + return $this->requirements[$this->position]; + } + + public function next() { + $this->position++; + } +} diff --git a/lib/composer/vendor/phar-io/manifest/src/values/Type.php b/lib/composer/vendor/phar-io/manifest/src/values/Type.php new file mode 100644 index 000000000..31fbd440e --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/src/values/Type.php @@ -0,0 +1,60 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +use PharIo\Version\VersionConstraint; + +abstract class Type { + /** + * @return Application + */ + public static function application() { + return new Application; + } + + /** + * @return Library + */ + public static function library() { + return new Library; + } + + /** + * @param ApplicationName $application + * @param VersionConstraint $versionConstraint + * + * @return Extension + */ + public static function extension(ApplicationName $application, VersionConstraint $versionConstraint) { + return new Extension($application, $versionConstraint); + } + + /** + * @return bool + */ + public function isApplication() { + return false; + } + + /** + * @return bool + */ + public function isLibrary() { + return false; + } + + /** + * @return bool + */ + public function isExtension() { + return false; + } +} diff --git a/lib/composer/vendor/phar-io/manifest/src/values/Url.php b/lib/composer/vendor/phar-io/manifest/src/values/Url.php new file mode 100644 index 000000000..37917c8c6 --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/src/values/Url.php @@ -0,0 +1,47 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +class Url { + /** + * @var string + */ + private $url; + + /** + * @param string $url + * + * @throws InvalidUrlException + */ + public function __construct($url) { + $this->ensureUrlIsValid($url); + + $this->url = $url; + } + + /** + * @return string + */ + public function __toString() { + return $this->url; + } + + /** + * @param string $url + * + * @throws InvalidUrlException + */ + private function ensureUrlIsValid($url) { + if (filter_var($url, \FILTER_VALIDATE_URL) === false) { + throw new InvalidUrlException; + } + } +} diff --git a/lib/composer/vendor/phar-io/manifest/src/xml/AuthorElement.php b/lib/composer/vendor/phar-io/manifest/src/xml/AuthorElement.php new file mode 100644 index 000000000..a32f39737 --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/src/xml/AuthorElement.php @@ -0,0 +1,21 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +class AuthorElement extends ManifestElement { + public function getName() { + return $this->getAttributeValue('name'); + } + + public function getEmail() { + return $this->getAttributeValue('email'); + } +} diff --git a/lib/composer/vendor/phar-io/manifest/src/xml/AuthorElementCollection.php b/lib/composer/vendor/phar-io/manifest/src/xml/AuthorElementCollection.php new file mode 100644 index 000000000..1240d8c1b --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/src/xml/AuthorElementCollection.php @@ -0,0 +1,19 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +class AuthorElementCollection extends ElementCollection { + public function current() { + return new AuthorElement( + $this->getCurrentElement() + ); + } +} diff --git a/lib/composer/vendor/phar-io/manifest/src/xml/BundlesElement.php b/lib/composer/vendor/phar-io/manifest/src/xml/BundlesElement.php new file mode 100644 index 000000000..b90023e4f --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/src/xml/BundlesElement.php @@ -0,0 +1,19 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +class BundlesElement extends ManifestElement { + public function getComponentElements() { + return new ComponentElementCollection( + $this->getChildrenByName('component') + ); + } +} diff --git a/lib/composer/vendor/phar-io/manifest/src/xml/ComponentElement.php b/lib/composer/vendor/phar-io/manifest/src/xml/ComponentElement.php new file mode 100644 index 000000000..64ed6b0dd --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/src/xml/ComponentElement.php @@ -0,0 +1,21 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +class ComponentElement extends ManifestElement { + public function getName() { + return $this->getAttributeValue('name'); + } + + public function getVersion() { + return $this->getAttributeValue('version'); + } +} diff --git a/lib/composer/vendor/phar-io/manifest/src/xml/ComponentElementCollection.php b/lib/composer/vendor/phar-io/manifest/src/xml/ComponentElementCollection.php new file mode 100644 index 000000000..9d375f981 --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/src/xml/ComponentElementCollection.php @@ -0,0 +1,19 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +class ComponentElementCollection extends ElementCollection { + public function current() { + return new ComponentElement( + $this->getCurrentElement() + ); + } +} diff --git a/lib/composer/vendor/phar-io/manifest/src/xml/ContainsElement.php b/lib/composer/vendor/phar-io/manifest/src/xml/ContainsElement.php new file mode 100644 index 000000000..8172f3341 --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/src/xml/ContainsElement.php @@ -0,0 +1,31 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +class ContainsElement extends ManifestElement { + public function getName() { + return $this->getAttributeValue('name'); + } + + public function getVersion() { + return $this->getAttributeValue('version'); + } + + public function getType() { + return $this->getAttributeValue('type'); + } + + public function getExtensionElement() { + return new ExtensionElement( + $this->getChildByName('extension') + ); + } +} diff --git a/lib/composer/vendor/phar-io/manifest/src/xml/CopyrightElement.php b/lib/composer/vendor/phar-io/manifest/src/xml/CopyrightElement.php new file mode 100644 index 000000000..bf7848e41 --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/src/xml/CopyrightElement.php @@ -0,0 +1,25 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +class CopyrightElement extends ManifestElement { + public function getAuthorElements() { + return new AuthorElementCollection( + $this->getChildrenByName('author') + ); + } + + public function getLicenseElement() { + return new LicenseElement( + $this->getChildByName('license') + ); + } +} diff --git a/lib/composer/vendor/phar-io/manifest/src/xml/ElementCollection.php b/lib/composer/vendor/phar-io/manifest/src/xml/ElementCollection.php new file mode 100644 index 000000000..284e77b6e --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/src/xml/ElementCollection.php @@ -0,0 +1,58 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +use DOMElement; +use DOMNodeList; + +abstract class ElementCollection implements \Iterator { + /** + * @var DOMNodeList + */ + private $nodeList; + + private $position; + + /** + * ElementCollection constructor. + * + * @param DOMNodeList $nodeList + */ + public function __construct(DOMNodeList $nodeList) { + $this->nodeList = $nodeList; + $this->position = 0; + } + + abstract public function current(); + + /** + * @return DOMElement + */ + protected function getCurrentElement() { + return $this->nodeList->item($this->position); + } + + public function next() { + $this->position++; + } + + public function key() { + return $this->position; + } + + public function valid() { + return $this->position < $this->nodeList->length; + } + + public function rewind() { + $this->position = 0; + } +} diff --git a/lib/composer/vendor/phar-io/manifest/src/xml/ExtElement.php b/lib/composer/vendor/phar-io/manifest/src/xml/ExtElement.php new file mode 100644 index 000000000..7a824ab7c --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/src/xml/ExtElement.php @@ -0,0 +1,17 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +class ExtElement extends ManifestElement { + public function getName() { + return $this->getAttributeValue('name'); + } +} diff --git a/lib/composer/vendor/phar-io/manifest/src/xml/ExtElementCollection.php b/lib/composer/vendor/phar-io/manifest/src/xml/ExtElementCollection.php new file mode 100644 index 000000000..17acc62a5 --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/src/xml/ExtElementCollection.php @@ -0,0 +1,20 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +class ExtElementCollection extends ElementCollection { + public function current() { + return new ExtElement( + $this->getCurrentElement() + ); + } + +} diff --git a/lib/composer/vendor/phar-io/manifest/src/xml/ExtensionElement.php b/lib/composer/vendor/phar-io/manifest/src/xml/ExtensionElement.php new file mode 100644 index 000000000..536c085cb --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/src/xml/ExtensionElement.php @@ -0,0 +1,21 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +class ExtensionElement extends ManifestElement { + public function getFor() { + return $this->getAttributeValue('for'); + } + + public function getCompatible() { + return $this->getAttributeValue('compatible'); + } +} diff --git a/lib/composer/vendor/phar-io/manifest/src/xml/LicenseElement.php b/lib/composer/vendor/phar-io/manifest/src/xml/LicenseElement.php new file mode 100644 index 000000000..ee001dfa3 --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/src/xml/LicenseElement.php @@ -0,0 +1,21 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +class LicenseElement extends ManifestElement { + public function getType() { + return $this->getAttributeValue('type'); + } + + public function getUrl() { + return $this->getAttributeValue('url'); + } +} diff --git a/lib/composer/vendor/phar-io/manifest/src/xml/ManifestDocument.php b/lib/composer/vendor/phar-io/manifest/src/xml/ManifestDocument.php new file mode 100644 index 000000000..9b0bd9d9d --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/src/xml/ManifestDocument.php @@ -0,0 +1,118 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +use DOMDocument; +use DOMElement; + +class ManifestDocument { + const XMLNS = 'https://phar.io/xml/manifest/1.0'; + + /** + * @var DOMDocument + */ + private $dom; + + /** + * ManifestDocument constructor. + * + * @param DOMDocument $dom + */ + private function __construct(DOMDocument $dom) { + $this->ensureCorrectDocumentType($dom); + + $this->dom = $dom; + } + + public static function fromFile($filename) { + if (!file_exists($filename)) { + throw new ManifestDocumentException( + sprintf('File "%s" not found', $filename) + ); + } + + return self::fromString( + file_get_contents($filename) + ); + } + + public static function fromString($xmlString) { + $prev = libxml_use_internal_errors(true); + libxml_clear_errors(); + + $dom = new DOMDocument(); + $dom->loadXML($xmlString); + + $errors = libxml_get_errors(); + libxml_use_internal_errors($prev); + + if (count($errors) !== 0) { + throw new ManifestDocumentLoadingException($errors); + } + + return new self($dom); + } + + public function getContainsElement() { + return new ContainsElement( + $this->fetchElementByName('contains') + ); + } + + public function getCopyrightElement() { + return new CopyrightElement( + $this->fetchElementByName('copyright') + ); + } + + public function getRequiresElement() { + return new RequiresElement( + $this->fetchElementByName('requires') + ); + } + + public function hasBundlesElement() { + return $this->dom->getElementsByTagNameNS(self::XMLNS, 'bundles')->length === 1; + } + + public function getBundlesElement() { + return new BundlesElement( + $this->fetchElementByName('bundles') + ); + } + + private function ensureCorrectDocumentType(DOMDocument $dom) { + $root = $dom->documentElement; + + if ($root->localName !== 'phar' || $root->namespaceURI !== self::XMLNS) { + throw new ManifestDocumentException('Not a phar.io manifest document'); + } + } + + /** + * @param $elementName + * + * @return DOMElement + * + * @throws ManifestDocumentException + */ + private function fetchElementByName($elementName) { + $element = $this->dom->getElementsByTagNameNS(self::XMLNS, $elementName)->item(0); + + if (!$element instanceof DOMElement) { + throw new ManifestDocumentException( + sprintf('Element %s missing', $elementName) + ); + } + + return $element; + } +} diff --git a/lib/composer/vendor/phar-io/manifest/src/xml/ManifestDocumentLoadingException.php b/lib/composer/vendor/phar-io/manifest/src/xml/ManifestDocumentLoadingException.php new file mode 100644 index 000000000..59ac5c69d --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/src/xml/ManifestDocumentLoadingException.php @@ -0,0 +1,48 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +use LibXMLError; + +class ManifestDocumentLoadingException extends \Exception implements Exception { + /** + * @var LibXMLError[] + */ + private $libxmlErrors; + + /** + * ManifestDocumentLoadingException constructor. + * + * @param LibXMLError[] $libxmlErrors + */ + public function __construct(array $libxmlErrors) { + $this->libxmlErrors = $libxmlErrors; + $first = $this->libxmlErrors[0]; + + parent::__construct( + sprintf( + '%s (Line: %d / Column: %d / File: %s)', + $first->message, + $first->line, + $first->column, + $first->file + ), + $first->code + ); + } + + /** + * @return LibXMLError[] + */ + public function getLibxmlErrors() { + return $this->libxmlErrors; + } +} diff --git a/lib/composer/vendor/phar-io/manifest/src/xml/ManifestElement.php b/lib/composer/vendor/phar-io/manifest/src/xml/ManifestElement.php new file mode 100644 index 000000000..09d07ccf6 --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/src/xml/ManifestElement.php @@ -0,0 +1,100 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +use DOMElement; +use DOMNodeList; + +class ManifestElement { + const XMLNS = 'https://phar.io/xml/manifest/1.0'; + + /** + * @var DOMElement + */ + private $element; + + /** + * ContainsElement constructor. + * + * @param DOMElement $element + */ + public function __construct(DOMElement $element) { + $this->element = $element; + } + + /** + * @param string $name + * + * @return string + * + * @throws ManifestElementException + */ + protected function getAttributeValue($name) { + if (!$this->element->hasAttribute($name)) { + throw new ManifestElementException( + sprintf( + 'Attribute %s not set on element %s', + $name, + $this->element->localName + ) + ); + } + + return $this->element->getAttribute($name); + } + + /** + * @param $elementName + * + * @return DOMElement + * + * @throws ManifestElementException + */ + protected function getChildByName($elementName) { + $element = $this->element->getElementsByTagNameNS(self::XMLNS, $elementName)->item(0); + + if (!$element instanceof DOMElement) { + throw new ManifestElementException( + sprintf('Element %s missing', $elementName) + ); + } + + return $element; + } + + /** + * @param $elementName + * + * @return DOMNodeList + * + * @throws ManifestElementException + */ + protected function getChildrenByName($elementName) { + $elementList = $this->element->getElementsByTagNameNS(self::XMLNS, $elementName); + + if ($elementList->length === 0) { + throw new ManifestElementException( + sprintf('Element(s) %s missing', $elementName) + ); + } + + return $elementList; + } + + /** + * @param string $elementName + * + * @return bool + */ + protected function hasChild($elementName) { + return $this->element->getElementsByTagNameNS(self::XMLNS, $elementName)->length !== 0; + } +} diff --git a/lib/composer/vendor/phar-io/manifest/src/xml/PhpElement.php b/lib/composer/vendor/phar-io/manifest/src/xml/PhpElement.php new file mode 100644 index 000000000..e7340c0d3 --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/src/xml/PhpElement.php @@ -0,0 +1,27 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +class PhpElement extends ManifestElement { + public function getVersion() { + return $this->getAttributeValue('version'); + } + + public function hasExtElements() { + return $this->hasChild('ext'); + } + + public function getExtElements() { + return new ExtElementCollection( + $this->getChildrenByName('ext') + ); + } +} diff --git a/lib/composer/vendor/phar-io/manifest/src/xml/RequiresElement.php b/lib/composer/vendor/phar-io/manifest/src/xml/RequiresElement.php new file mode 100644 index 000000000..5f41b2eb1 --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/src/xml/RequiresElement.php @@ -0,0 +1,19 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +class RequiresElement extends ManifestElement { + public function getPHPElement() { + return new PhpElement( + $this->getChildByName('php') + ); + } +} diff --git a/lib/composer/vendor/phar-io/manifest/tests/ManifestDocumentMapperTest.php b/lib/composer/vendor/phar-io/manifest/tests/ManifestDocumentMapperTest.php new file mode 100644 index 000000000..e26123173 --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/tests/ManifestDocumentMapperTest.php @@ -0,0 +1,110 @@ +assertInstanceOf( + Manifest::class, + $mapper->map($manifestDocument) + ); + } + + public function dataProvider() { + return [ + 'application' => [__DIR__ . '/_fixture/phpunit-5.6.5.xml'], + 'library' => [__DIR__ . '/_fixture/library.xml'], + 'extension' => [__DIR__ . '/_fixture/extension.xml'] + ]; + } + + public function testThrowsExceptionOnUnsupportedType() { + $manifestDocument = ManifestDocument::fromFile(__DIR__ . '/_fixture/custom.xml'); + $mapper = new ManifestDocumentMapper(); + + $this->expectException(ManifestDocumentMapperException::class); + $mapper->map($manifestDocument); + } + + public function testInvalidVersionInformationThrowsException() { + $manifestDocument = ManifestDocument::fromFile(__DIR__ . '/_fixture/invalidversion.xml'); + $mapper = new ManifestDocumentMapper(); + + $this->expectException(ManifestDocumentMapperException::class); + $mapper->map($manifestDocument); + } + + public function testInvalidVersionConstraintThrowsException() { + $manifestDocument = ManifestDocument::fromFile(__DIR__ . '/_fixture/invalidversionconstraint.xml'); + $mapper = new ManifestDocumentMapper(); + + $this->expectException(ManifestDocumentMapperException::class); + $mapper->map($manifestDocument); + } + + /** + * @uses \PharIo\Manifest\ExtensionElement + */ + public function testInvalidCompatibleConstraintThrowsException() { + $manifestDocument = ManifestDocument::fromFile(__DIR__ . '/_fixture/extension-invalidcompatible.xml'); + $mapper = new ManifestDocumentMapper(); + + $this->expectException(ManifestDocumentMapperException::class); + $mapper->map($manifestDocument); + } + +} diff --git a/lib/composer/vendor/phar-io/manifest/tests/ManifestLoaderTest.php b/lib/composer/vendor/phar-io/manifest/tests/ManifestLoaderTest.php new file mode 100644 index 000000000..73b682ef6 --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/tests/ManifestLoaderTest.php @@ -0,0 +1,83 @@ +assertInstanceOf( + Manifest::class, + ManifestLoader::fromFile(__DIR__ . '/_fixture/library.xml') + ); + } + + public function testCanBeLoadedFromString() { + $this->assertInstanceOf( + Manifest::class, + ManifestLoader::fromString( + file_get_contents(__DIR__ . '/_fixture/library.xml') + ) + ); + } + + public function testCanBeLoadedFromPhar() { + $this->assertInstanceOf( + Manifest::class, + ManifestLoader::fromPhar(__DIR__ . '/_fixture/test.phar') + ); + + } + + public function testLoadingNonExistingFileThrowsException() { + $this->expectException(ManifestLoaderException::class); + ManifestLoader::fromFile('/not/existing'); + } + + /** + * @uses \PharIo\Manifest\ManifestDocumentLoadingException + */ + public function testLoadingInvalidXmlThrowsException() { + $this->expectException(ManifestLoaderException::class); + ManifestLoader::fromString(''); + } + +} diff --git a/lib/composer/vendor/phar-io/manifest/tests/ManifestSerializerTest.php b/lib/composer/vendor/phar-io/manifest/tests/ManifestSerializerTest.php new file mode 100644 index 000000000..4433020ac --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/tests/ManifestSerializerTest.php @@ -0,0 +1,114 @@ +assertXmlStringEqualsXmlString( + $expected, + $serializer->serializeToString($manifest) + ); + } + + public function dataProvider() { + return [ + 'application' => [file_get_contents(__DIR__ . '/_fixture/phpunit-5.6.5.xml')], + 'library' => [file_get_contents(__DIR__ . '/_fixture/library.xml')], + 'extension' => [file_get_contents(__DIR__ . '/_fixture/extension.xml')] + ]; + } + + /** + * @uses \PharIo\Manifest\Library + * @uses \PharIo\Manifest\ApplicationName + */ + public function testCanSerializeToFile() { + $src = __DIR__ . '/_fixture/library.xml'; + $dest = '/tmp/' . uniqid('serializer', true); + $manifest = ManifestLoader::fromFile($src); + $serializer = new ManifestSerializer(); + $serializer->serializeToFile($manifest, $dest); + $this->assertXmlFileEqualsXmlFile($src, $dest); + unlink($dest); + } + + /** + * @uses \PharIo\Manifest\ApplicationName + */ + public function testCanHandleUnknownType() { + $type = $this->getMockForAbstractClass(Type::class); + $manifest = new Manifest( + new ApplicationName('testvendor/testname'), + new Version('1.0.0'), + $type, + new CopyrightInformation( + new AuthorCollection(), + new License('bsd-3', new Url('https://some/uri')) + ), + new RequirementCollection(), + new BundledComponentCollection() + ); + + $serializer = new ManifestSerializer(); + $this->assertXmlStringEqualsXmlFile( + __DIR__ . '/_fixture/custom.xml', + $serializer->serializeToString($manifest) + ); + } +} diff --git a/lib/composer/vendor/phar-io/manifest/tests/_fixture/custom.xml b/lib/composer/vendor/phar-io/manifest/tests/_fixture/custom.xml new file mode 100644 index 000000000..4f4382807 --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/tests/_fixture/custom.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/lib/composer/vendor/phar-io/manifest/tests/_fixture/extension-invalidcompatible.xml b/lib/composer/vendor/phar-io/manifest/tests/_fixture/extension-invalidcompatible.xml new file mode 100644 index 000000000..a78111c16 --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/tests/_fixture/extension-invalidcompatible.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/lib/composer/vendor/phar-io/manifest/tests/_fixture/extension.xml b/lib/composer/vendor/phar-io/manifest/tests/_fixture/extension.xml new file mode 100644 index 000000000..a870aee8e --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/tests/_fixture/extension.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/lib/composer/vendor/phar-io/manifest/tests/_fixture/invalidversion.xml b/lib/composer/vendor/phar-io/manifest/tests/_fixture/invalidversion.xml new file mode 100644 index 000000000..788dd4cd3 --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/tests/_fixture/invalidversion.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/lib/composer/vendor/phar-io/manifest/tests/_fixture/invalidversionconstraint.xml b/lib/composer/vendor/phar-io/manifest/tests/_fixture/invalidversionconstraint.xml new file mode 100644 index 000000000..f881f8b03 --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/tests/_fixture/invalidversionconstraint.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/lib/composer/vendor/phar-io/manifest/tests/_fixture/library.xml b/lib/composer/vendor/phar-io/manifest/tests/_fixture/library.xml new file mode 100644 index 000000000..a5e25237a --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/tests/_fixture/library.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/lib/composer/vendor/phar-io/manifest/tests/_fixture/manifest.xml b/lib/composer/vendor/phar-io/manifest/tests/_fixture/manifest.xml new file mode 100644 index 000000000..a5e25237a --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/tests/_fixture/manifest.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/lib/composer/vendor/phar-io/manifest/tests/_fixture/phpunit-5.6.5.xml b/lib/composer/vendor/phar-io/manifest/tests/_fixture/phpunit-5.6.5.xml new file mode 100644 index 000000000..aadbea2f9 --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/tests/_fixture/phpunit-5.6.5.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/lib/composer/vendor/phar-io/manifest/tests/_fixture/test.phar b/lib/composer/vendor/phar-io/manifest/tests/_fixture/test.phar new file mode 100644 index 000000000..d2a3e393e Binary files /dev/null and b/lib/composer/vendor/phar-io/manifest/tests/_fixture/test.phar differ diff --git a/lib/composer/vendor/phar-io/manifest/tests/exceptions/ManifestDocumentLoadingExceptionTest.php b/lib/composer/vendor/phar-io/manifest/tests/exceptions/ManifestDocumentLoadingExceptionTest.php new file mode 100644 index 000000000..d87e84eab --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/tests/exceptions/ManifestDocumentLoadingExceptionTest.php @@ -0,0 +1,19 @@ +loadXML(''); + $exception = new ManifestDocumentLoadingException(libxml_get_errors()); + libxml_use_internal_errors($prev); + + $this->assertContainsOnlyInstancesOf(LibXMLError::class, $exception->getLibxmlErrors()); + } + +} diff --git a/lib/composer/vendor/phar-io/manifest/tests/values/ApplicationNameTest.php b/lib/composer/vendor/phar-io/manifest/tests/values/ApplicationNameTest.php new file mode 100644 index 000000000..c95941579 --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/tests/values/ApplicationNameTest.php @@ -0,0 +1,48 @@ +assertInstanceOf( + ApplicationName::class, + new ApplicationName('foo/bar') + ); + } + + public function testUsingInvalidFormatForNameThrowsException() { + $this->expectException(InvalidApplicationNameException::class); + $this->expectExceptionCode(InvalidApplicationNameException::InvalidFormat); + new ApplicationName('foo'); + } + + public function testUsingWrongTypeForNameThrowsException() { + $this->expectException(InvalidApplicationNameException::class); + $this->expectExceptionCode(InvalidApplicationNameException::NotAString); + new ApplicationName(123); + } + + public function testReturnsTrueForEqualNamesWhenCompared() { + $app = new ApplicationName('foo/bar'); + $this->assertTrue( + $app->isEqual($app) + ); + } + + public function testReturnsFalseForNonEqualNamesWhenCompared() { + $app1 = new ApplicationName('foo/bar'); + $app2 = new ApplicationName('foo/foo'); + $this->assertFalse( + $app1->isEqual($app2) + ); + } + + public function testCanBeConvertedToString() { + $this->assertEquals( + 'foo/bar', + new ApplicationName('foo/bar') + ); + } +} diff --git a/lib/composer/vendor/phar-io/manifest/tests/values/ApplicationTest.php b/lib/composer/vendor/phar-io/manifest/tests/values/ApplicationTest.php new file mode 100644 index 000000000..86b5da64d --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/tests/values/ApplicationTest.php @@ -0,0 +1,44 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +use PHPUnit\Framework\TestCase; + +/** + * @covers PharIo\Manifest\Application + * @covers PharIo\Manifest\Type + */ +class ApplicationTest extends TestCase { + /** + * @var Application + */ + private $type; + + protected function setUp() { + $this->type = Type::application(); + } + + public function testCanBeCreated() { + $this->assertInstanceOf(Application::class, $this->type); + } + + public function testIsApplication() { + $this->assertTrue($this->type->isApplication()); + } + + public function testIsNotLibrary() { + $this->assertFalse($this->type->isLibrary()); + } + + public function testIsNotExtension() { + $this->assertFalse($this->type->isExtension()); + } +} diff --git a/lib/composer/vendor/phar-io/manifest/tests/values/AuthorCollectionTest.php b/lib/composer/vendor/phar-io/manifest/tests/values/AuthorCollectionTest.php new file mode 100644 index 000000000..0fa1b9503 --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/tests/values/AuthorCollectionTest.php @@ -0,0 +1,62 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +use PHPUnit\Framework\TestCase; + +/** + * @covers \PharIo\Manifest\AuthorCollection + * @covers \PharIo\Manifest\AuthorCollectionIterator + * + * @uses \PharIo\Manifest\Author + * @uses \PharIo\Manifest\Email + */ +class AuthorCollectionTest extends TestCase { + /** + * @var AuthorCollection + */ + private $collection; + + /** + * @var Author + */ + private $item; + + protected function setUp() { + $this->collection = new AuthorCollection; + $this->item = new Author('Joe Developer', new Email('user@example.com')); + } + + public function testCanBeCreated() { + $this->assertInstanceOf(AuthorCollection::class, $this->collection); + } + + public function testCanBeCounted() { + $this->collection->add($this->item); + + $this->assertCount(1, $this->collection); + } + + public function testCanBeIterated() { + $this->collection->add( + new Author('Dummy First', new Email('dummy@example.com')) + ); + $this->collection->add($this->item); + $this->assertContains($this->item, $this->collection); + } + + public function testKeyPositionCanBeRetreived() { + $this->collection->add($this->item); + foreach($this->collection as $key => $item) { + $this->assertEquals(0, $key); + } + } +} diff --git a/lib/composer/vendor/phar-io/manifest/tests/values/AuthorTest.php b/lib/composer/vendor/phar-io/manifest/tests/values/AuthorTest.php new file mode 100644 index 000000000..b7317fab2 --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/tests/values/AuthorTest.php @@ -0,0 +1,45 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +use PHPUnit\Framework\TestCase; + +/** + * @covers PharIo\Manifest\Author + * + * @uses PharIo\Manifest\Email + */ +class AuthorTest extends TestCase { + /** + * @var Author + */ + private $author; + + protected function setUp() { + $this->author = new Author('Joe Developer', new Email('user@example.com')); + } + + public function testCanBeCreated() { + $this->assertInstanceOf(Author::class, $this->author); + } + + public function testNameCanBeRetrieved() { + $this->assertEquals('Joe Developer', $this->author->getName()); + } + + public function testEmailCanBeRetrieved() { + $this->assertEquals('user@example.com', $this->author->getEmail()); + } + + public function testCanBeUsedAsString() { + $this->assertEquals('Joe Developer ', $this->author); + } +} diff --git a/lib/composer/vendor/phar-io/manifest/tests/values/BundledComponentCollectionTest.php b/lib/composer/vendor/phar-io/manifest/tests/values/BundledComponentCollectionTest.php new file mode 100644 index 000000000..66cd0c4cb --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/tests/values/BundledComponentCollectionTest.php @@ -0,0 +1,63 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +use PharIo\Version\Version; +use PHPUnit\Framework\TestCase; + +/** + * @covers \PharIo\Manifest\BundledComponentCollection + * @covers \PharIo\Manifest\BundledComponentCollectionIterator + * + * @uses \PharIo\Manifest\BundledComponent + * @uses \PharIo\Version\Version + */ +class BundledComponentCollectionTest extends TestCase { + /** + * @var BundledComponentCollection + */ + private $collection; + + /** + * @var BundledComponent + */ + private $item; + + protected function setUp() { + $this->collection = new BundledComponentCollection; + $this->item = new BundledComponent('phpunit/php-code-coverage', new Version('4.0.2')); + } + + public function testCanBeCreated() { + $this->assertInstanceOf(BundledComponentCollection::class, $this->collection); + } + + public function testCanBeCounted() { + $this->collection->add($this->item); + + $this->assertCount(1, $this->collection); + } + + public function testCanBeIterated() { + $this->collection->add($this->createMock(BundledComponent::class)); + $this->collection->add($this->item); + + $this->assertContains($this->item, $this->collection); + } + + public function testKeyPositionCanBeRetreived() { + $this->collection->add($this->item); + foreach($this->collection as $key => $item) { + $this->assertEquals(0, $key); + } + } + +} diff --git a/lib/composer/vendor/phar-io/manifest/tests/values/BundledComponentTest.php b/lib/composer/vendor/phar-io/manifest/tests/values/BundledComponentTest.php new file mode 100644 index 000000000..01b8e13e7 --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/tests/values/BundledComponentTest.php @@ -0,0 +1,42 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +use PharIo\Version\Version; +use PHPUnit\Framework\TestCase; + +/** + * @covers PharIo\Manifest\BundledComponent + * + * @uses \PharIo\Version\Version + */ +class BundledComponentTest extends TestCase { + /** + * @var BundledComponent + */ + private $bundledComponent; + + protected function setUp() { + $this->bundledComponent = new BundledComponent('phpunit/php-code-coverage', new Version('4.0.2')); + } + + public function testCanBeCreated() { + $this->assertInstanceOf(BundledComponent::class, $this->bundledComponent); + } + + public function testNameCanBeRetrieved() { + $this->assertEquals('phpunit/php-code-coverage', $this->bundledComponent->getName()); + } + + public function testVersionCanBeRetrieved() { + $this->assertEquals('4.0.2', $this->bundledComponent->getVersion()->getVersionString()); + } +} diff --git a/lib/composer/vendor/phar-io/manifest/tests/values/CopyrightInformationTest.php b/lib/composer/vendor/phar-io/manifest/tests/values/CopyrightInformationTest.php new file mode 100644 index 000000000..de738f486 --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/tests/values/CopyrightInformationTest.php @@ -0,0 +1,62 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +use PHPUnit\Framework\TestCase; + +/** + * @covers PharIo\Manifest\CopyrightInformation + * + * @uses PharIo\Manifest\AuthorCollection + * @uses PharIo\Manifest\AuthorCollectionIterator + * @uses PharIo\Manifest\Author + * @uses PharIo\Manifest\Email + * @uses PharIo\Manifest\License + * @uses PharIo\Manifest\Url + */ +class CopyrightInformationTest extends TestCase { + /** + * @var CopyrightInformation + */ + private $copyrightInformation; + + /** + * @var Author + */ + private $author; + + /** + * @var License + */ + private $license; + + protected function setUp() { + $this->author = new Author('Joe Developer', new Email('user@example.com')); + $this->license = new License('BSD-3-Clause', new Url('https://github.com/sebastianbergmann/phpunit/blob/master/LICENSE')); + + $authors = new AuthorCollection; + $authors->add($this->author); + + $this->copyrightInformation = new CopyrightInformation($authors, $this->license); + } + + public function testCanBeCreated() { + $this->assertInstanceOf(CopyrightInformation::class, $this->copyrightInformation); + } + + public function testAuthorsCanBeRetrieved() { + $this->assertContains($this->author, $this->copyrightInformation->getAuthors()); + } + + public function testLicenseCanBeRetrieved() { + $this->assertEquals($this->license, $this->copyrightInformation->getLicense()); + } +} diff --git a/lib/composer/vendor/phar-io/manifest/tests/values/EmailTest.php b/lib/composer/vendor/phar-io/manifest/tests/values/EmailTest.php new file mode 100644 index 000000000..ee38531f1 --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/tests/values/EmailTest.php @@ -0,0 +1,35 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +use PHPUnit\Framework\TestCase; + +/** + * @covers PharIo\Manifest\Email + */ +class EmailTest extends TestCase { + public function testCanBeCreatedForValidEmail() { + $this->assertInstanceOf(Email::class, new Email('user@example.com')); + } + + public function testCanBeUsedAsString() { + $this->assertEquals('user@example.com', new Email('user@example.com')); + } + + /** + * @covers PharIo\Manifest\InvalidEmailException + */ + public function testCannotBeCreatedForInvalidEmail() { + $this->expectException(InvalidEmailException::class); + + new Email('invalid'); + } +} diff --git a/lib/composer/vendor/phar-io/manifest/tests/values/ExtensionTest.php b/lib/composer/vendor/phar-io/manifest/tests/values/ExtensionTest.php new file mode 100644 index 000000000..1c9d676f0 --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/tests/values/ExtensionTest.php @@ -0,0 +1,109 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +use PharIo\Version\AnyVersionConstraint; +use PharIo\Version\Version; +use PharIo\Version\VersionConstraint; +use PharIo\Version\VersionConstraintParser; +use PHPUnit\Framework\TestCase; + +/** + * @covers \PharIo\Manifest\Extension + * @covers \PharIo\Manifest\Type + * + * @uses \PharIo\Version\VersionConstraint + * @uses \PharIo\Manifest\ApplicationName + */ +class ExtensionTest extends TestCase { + /** + * @var Extension + */ + private $type; + + /** + * @var ApplicationName|\PHPUnit_Framework_MockObject_MockObject + */ + private $name; + + protected function setUp() { + $this->name = $this->createMock(ApplicationName::class); + $this->type = Type::extension($this->name, new AnyVersionConstraint); + } + + public function testCanBeCreated() { + $this->assertInstanceOf(Extension::class, $this->type); + } + + public function testIsNotApplication() { + $this->assertFalse($this->type->isApplication()); + } + + public function testIsNotLibrary() { + $this->assertFalse($this->type->isLibrary()); + } + + public function testIsExtension() { + $this->assertTrue($this->type->isExtension()); + } + + public function testApplicationCanBeRetrieved() + { + $this->assertInstanceOf(ApplicationName::class, $this->type->getApplicationName()); + } + + public function testVersionConstraintCanBeRetrieved() { + $this->assertInstanceOf( + VersionConstraint::class, + $this->type->getVersionConstraint() + ); + } + + public function testApplicationCanBeQueried() + { + $this->name->method('isEqual')->willReturn(true); + $this->assertTrue( + $this->type->isExtensionFor($this->createMock(ApplicationName::class)) + ); + } + + public function testCompatibleWithReturnsTrueForMatchingVersionConstraintAndApplicaiton() { + $app = new ApplicationName('foo/bar'); + $extension = Type::extension($app, (new VersionConstraintParser)->parse('^1.0')); + $version = new Version('1.0.0'); + + $this->assertTrue( + $extension->isCompatibleWith($app, $version) + ); + } + + public function testCompatibleWithReturnsFalseForNotMatchingVersionConstraint() { + $app = new ApplicationName('foo/bar'); + $extension = Type::extension($app, (new VersionConstraintParser)->parse('^1.0')); + $version = new Version('2.0.0'); + + $this->assertFalse( + $extension->isCompatibleWith($app, $version) + ); + } + + public function testCompatibleWithReturnsFalseForNotMatchingApplication() { + $app1 = new ApplicationName('foo/bar'); + $app2 = new ApplicationName('foo/foo'); + $extension = Type::extension($app1, (new VersionConstraintParser)->parse('^1.0')); + $version = new Version('1.0.0'); + + $this->assertFalse( + $extension->isCompatibleWith($app2, $version) + ); + } + +} diff --git a/lib/composer/vendor/phar-io/manifest/tests/values/LibraryTest.php b/lib/composer/vendor/phar-io/manifest/tests/values/LibraryTest.php new file mode 100644 index 000000000..f8d1c6495 --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/tests/values/LibraryTest.php @@ -0,0 +1,44 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +use PHPUnit\Framework\TestCase; + +/** + * @covers PharIo\Manifest\Library + * @covers PharIo\Manifest\Type + */ +class LibraryTest extends TestCase { + /** + * @var Library + */ + private $type; + + protected function setUp() { + $this->type = Type::library(); + } + + public function testCanBeCreated() { + $this->assertInstanceOf(Library::class, $this->type); + } + + public function testIsNotApplication() { + $this->assertFalse($this->type->isApplication()); + } + + public function testIsLibrary() { + $this->assertTrue($this->type->isLibrary()); + } + + public function testIsNotExtension() { + $this->assertFalse($this->type->isExtension()); + } +} diff --git a/lib/composer/vendor/phar-io/manifest/tests/values/LicenseTest.php b/lib/composer/vendor/phar-io/manifest/tests/values/LicenseTest.php new file mode 100644 index 000000000..c9c5c3c78 --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/tests/values/LicenseTest.php @@ -0,0 +1,41 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +use PHPUnit\Framework\TestCase; + +/** + * @covers PharIo\Manifest\License + * + * @uses PharIo\Manifest\Url + */ +class LicenseTest extends TestCase { + /** + * @var License + */ + private $license; + + protected function setUp() { + $this->license = new License('BSD-3-Clause', new Url('https://github.com/sebastianbergmann/phpunit/blob/master/LICENSE')); + } + + public function testCanBeCreated() { + $this->assertInstanceOf(License::class, $this->license); + } + + public function testNameCanBeRetrieved() { + $this->assertEquals('BSD-3-Clause', $this->license->getName()); + } + + public function testUrlCanBeRetrieved() { + $this->assertEquals('https://github.com/sebastianbergmann/phpunit/blob/master/LICENSE', $this->license->getUrl()); + } +} diff --git a/lib/composer/vendor/phar-io/manifest/tests/values/ManifestTest.php b/lib/composer/vendor/phar-io/manifest/tests/values/ManifestTest.php new file mode 100644 index 000000000..cff0a682c --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/tests/values/ManifestTest.php @@ -0,0 +1,187 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +use PharIo\Version\Version; +use PharIo\Version\AnyVersionConstraint; +use PHPUnit\Framework\TestCase; + +/** + * @covers \PharIo\Manifest\Manifest + * + * @uses \PharIo\Manifest\ApplicationName + * @uses \PharIo\Manifest\Author + * @uses \PharIo\Manifest\AuthorCollection + * @uses \PharIo\Manifest\BundledComponent + * @uses \PharIo\Manifest\BundledComponentCollection + * @uses \PharIo\Manifest\CopyrightInformation + * @uses \PharIo\Manifest\Email + * @uses \PharIo\Manifest\License + * @uses \PharIo\Manifest\RequirementCollection + * @uses \PharIo\Manifest\PhpVersionRequirement + * @uses \PharIo\Manifest\Type + * @uses \PharIo\Manifest\Application + * @uses \PharIo\Manifest\Url + * @uses \PharIo\Version\Version + * @uses \PharIo\Version\VersionConstraint + */ +class ManifestTest extends TestCase { + /** + * @var ApplicationName + */ + private $name; + + /** + * @var Version + */ + private $version; + + /** + * @var Type + */ + private $type; + + /** + * @var CopyrightInformation + */ + private $copyrightInformation; + + /** + * @var RequirementCollection + */ + private $requirements; + + /** + * @var BundledComponentCollection + */ + private $bundledComponents; + + /** + * @var Manifest + */ + private $manifest; + + protected function setUp() { + $this->version = new Version('5.6.5'); + + $this->type = Type::application(); + + $author = new Author('Joe Developer', new Email('user@example.com')); + $license = new License('BSD-3-Clause', new Url('https://github.com/sebastianbergmann/phpunit/blob/master/LICENSE')); + + $authors = new AuthorCollection; + $authors->add($author); + + $this->copyrightInformation = new CopyrightInformation($authors, $license); + + $this->requirements = new RequirementCollection; + $this->requirements->add(new PhpVersionRequirement(new AnyVersionConstraint)); + + $this->bundledComponents = new BundledComponentCollection; + $this->bundledComponents->add(new BundledComponent('phpunit/php-code-coverage', new Version('4.0.2'))); + + $this->name = new ApplicationName('phpunit/phpunit'); + + $this->manifest = new Manifest( + $this->name, + $this->version, + $this->type, + $this->copyrightInformation, + $this->requirements, + $this->bundledComponents + ); + } + + public function testCanBeCreated() { + $this->assertInstanceOf(Manifest::class, $this->manifest); + } + + public function testNameCanBeRetrieved() { + $this->assertEquals($this->name, $this->manifest->getName()); + } + + public function testVersionCanBeRetrieved() { + $this->assertEquals($this->version, $this->manifest->getVersion()); + } + + public function testTypeCanBeRetrieved() { + $this->assertEquals($this->type, $this->manifest->getType()); + } + + public function testTypeCanBeQueried() { + $this->assertTrue($this->manifest->isApplication()); + $this->assertFalse($this->manifest->isLibrary()); + $this->assertFalse($this->manifest->isExtension()); + } + + public function testCopyrightInformationCanBeRetrieved() { + $this->assertEquals($this->copyrightInformation, $this->manifest->getCopyrightInformation()); + } + + public function testRequirementsCanBeRetrieved() { + $this->assertEquals($this->requirements, $this->manifest->getRequirements()); + } + + public function testBundledComponentsCanBeRetrieved() { + $this->assertEquals($this->bundledComponents, $this->manifest->getBundledComponents()); + } + + /** + * @uses \PharIo\Manifest\Extension + */ + public function testExtendedApplicationCanBeQueriedForExtension() + { + $appName = new ApplicationName('foo/bar'); + $manifest = new Manifest( + new ApplicationName('foo/foo'), + new Version('1.0.0'), + Type::extension($appName, new AnyVersionConstraint), + $this->copyrightInformation, + new RequirementCollection, + new BundledComponentCollection + ); + + $this->assertTrue($manifest->isExtensionFor($appName)); + } + + public function testNonExtensionReturnsFalseWhenQueriesForExtension() { + $appName = new ApplicationName('foo/bar'); + $manifest = new Manifest( + new ApplicationName('foo/foo'), + new Version('1.0.0'), + Type::library(), + $this->copyrightInformation, + new RequirementCollection, + new BundledComponentCollection + ); + + $this->assertFalse($manifest->isExtensionFor($appName)); + } + + /** + * @uses \PharIo\Manifest\Extension + */ + public function testExtendedApplicationCanBeQueriedForExtensionWithVersion() + { + $appName = new ApplicationName('foo/bar'); + $manifest = new Manifest( + new ApplicationName('foo/foo'), + new Version('1.0.0'), + Type::extension($appName, new AnyVersionConstraint), + $this->copyrightInformation, + new RequirementCollection, + new BundledComponentCollection + ); + + $this->assertTrue($manifest->isExtensionFor($appName, new Version('1.2.3'))); + } + +} diff --git a/lib/composer/vendor/phar-io/manifest/tests/values/PhpExtensionRequirementTest.php b/lib/composer/vendor/phar-io/manifest/tests/values/PhpExtensionRequirementTest.php new file mode 100644 index 000000000..ae1c058fc --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/tests/values/PhpExtensionRequirementTest.php @@ -0,0 +1,26 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +use PHPUnit\Framework\TestCase; + +/** + * @covers PharIo\Manifest\PhpExtensionRequirement + */ +class PhpExtensionRequirementTest extends TestCase { + public function testCanBeCreated() { + $this->assertInstanceOf(PhpExtensionRequirement::class, new PhpExtensionRequirement('dom')); + } + + public function testCanBeUsedAsString() { + $this->assertEquals('dom', new PhpExtensionRequirement('dom')); + } +} diff --git a/lib/composer/vendor/phar-io/manifest/tests/values/PhpVersionRequirementTest.php b/lib/composer/vendor/phar-io/manifest/tests/values/PhpVersionRequirementTest.php new file mode 100644 index 000000000..67ac41ada --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/tests/values/PhpVersionRequirementTest.php @@ -0,0 +1,38 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +use PharIo\Version\ExactVersionConstraint; +use PHPUnit\Framework\TestCase; + +/** + * @covers PharIo\Manifest\PhpVersionRequirement + * + * @uses \PharIo\Version\VersionConstraint + */ +class PhpVersionRequirementTest extends TestCase { + /** + * @var PhpVersionRequirement + */ + private $requirement; + + protected function setUp() { + $this->requirement = new PhpVersionRequirement(new ExactVersionConstraint('7.1.0')); + } + + public function testCanBeCreated() { + $this->assertInstanceOf(PhpVersionRequirement::class, $this->requirement); + } + + public function testVersionConstraintCanBeRetrieved() { + $this->assertEquals('7.1.0', $this->requirement->getVersionConstraint()->asString()); + } +} diff --git a/lib/composer/vendor/phar-io/manifest/tests/values/RequirementCollectionTest.php b/lib/composer/vendor/phar-io/manifest/tests/values/RequirementCollectionTest.php new file mode 100644 index 000000000..2afeb1a3c --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/tests/values/RequirementCollectionTest.php @@ -0,0 +1,63 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +use PharIo\Version\ExactVersionConstraint; +use PHPUnit\Framework\TestCase; + +/** + * @covers \PharIo\Manifest\RequirementCollection + * @covers \PharIo\Manifest\RequirementCollectionIterator + * + * @uses \PharIo\Manifest\PhpVersionRequirement + * @uses \PharIo\Version\VersionConstraint + */ +class RequirementCollectionTest extends TestCase { + /** + * @var RequirementCollection + */ + private $collection; + + /** + * @var Requirement + */ + private $item; + + protected function setUp() { + $this->collection = new RequirementCollection; + $this->item = new PhpVersionRequirement(new ExactVersionConstraint('7.1.0')); + } + + public function testCanBeCreated() { + $this->assertInstanceOf(RequirementCollection::class, $this->collection); + } + + public function testCanBeCounted() { + $this->collection->add($this->item); + + $this->assertCount(1, $this->collection); + } + + public function testCanBeIterated() { + $this->collection->add(new PhpVersionRequirement(new ExactVersionConstraint('5.6.0'))); + $this->collection->add($this->item); + + $this->assertContains($this->item, $this->collection); + } + + public function testKeyPositionCanBeRetreived() { + $this->collection->add($this->item); + foreach($this->collection as $key => $item) { + $this->assertEquals(0, $key); + } + } + +} diff --git a/lib/composer/vendor/phar-io/manifest/tests/values/UrlTest.php b/lib/composer/vendor/phar-io/manifest/tests/values/UrlTest.php new file mode 100644 index 000000000..20f09c152 --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/tests/values/UrlTest.php @@ -0,0 +1,35 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Manifest; + +use PHPUnit\Framework\TestCase; + +/** + * @covers PharIo\Manifest\Url + */ +class UrlTest extends TestCase { + public function testCanBeCreatedForValidUrl() { + $this->assertInstanceOf(Url::class, new Url('https://phar.io/')); + } + + public function testCanBeUsedAsString() { + $this->assertEquals('https://phar.io/', new Url('https://phar.io/')); + } + + /** + * @covers PharIo\Manifest\InvalidUrlException + */ + public function testCannotBeCreatedForInvalidUrl() { + $this->expectException(InvalidUrlException::class); + + new Url('invalid'); + } +} diff --git a/lib/composer/vendor/phar-io/manifest/tests/xml/AuthorElementCollectionTest.php b/lib/composer/vendor/phar-io/manifest/tests/xml/AuthorElementCollectionTest.php new file mode 100644 index 000000000..327a7e3fd --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/tests/xml/AuthorElementCollectionTest.php @@ -0,0 +1,18 @@ +loadXML(''); + $collection = new AuthorElementCollection($dom->childNodes); + + foreach($collection as $authorElement) { + $this->assertInstanceOf(AuthorElement::class, $authorElement); + } + } + +} diff --git a/lib/composer/vendor/phar-io/manifest/tests/xml/AuthorElementTest.php b/lib/composer/vendor/phar-io/manifest/tests/xml/AuthorElementTest.php new file mode 100644 index 000000000..430c0caa7 --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/tests/xml/AuthorElementTest.php @@ -0,0 +1,25 @@ +loadXML(''); + $this->author = new AuthorElement($dom->documentElement); + } + + public function testNameCanBeRetrieved() { + $this->assertEquals('Reiner Zufall', $this->author->getName()); + } + + public function testEmailCanBeRetrieved() { + $this->assertEquals('reiner@zufall.de', $this->author->getEmail()); + } + +} diff --git a/lib/composer/vendor/phar-io/manifest/tests/xml/BundlesElementTest.php b/lib/composer/vendor/phar-io/manifest/tests/xml/BundlesElementTest.php new file mode 100644 index 000000000..797261765 --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/tests/xml/BundlesElementTest.php @@ -0,0 +1,41 @@ +dom = new DOMDocument(); + $this->dom->loadXML(''); + $this->bundles = new BundlesElement($this->dom->documentElement); + } + + public function testThrowsExceptionWhenGetComponentElementsIsCalledButNodesAreMissing() { + $this->expectException(ManifestElementException::class); + $this->bundles->getComponentElements(); + } + + public function testGetComponentElementsReturnsComponentElementCollection() { + $this->addComponent(); + $this->assertInstanceOf( + ComponentElementCollection::class, $this->bundles->getComponentElements() + ); + } + + private function addComponent() { + $this->dom->documentElement->appendChild( + $this->dom->createElementNS('https://phar.io/xml/manifest/1.0', 'component') + ); + } +} diff --git a/lib/composer/vendor/phar-io/manifest/tests/xml/ComponentElementCollectionTest.php b/lib/composer/vendor/phar-io/manifest/tests/xml/ComponentElementCollectionTest.php new file mode 100644 index 000000000..3a2716f81 --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/tests/xml/ComponentElementCollectionTest.php @@ -0,0 +1,18 @@ +loadXML(''); + $collection = new ComponentElementCollection($dom->childNodes); + + foreach($collection as $componentElement) { + $this->assertInstanceOf(ComponentElement::class, $componentElement); + } + } + +} diff --git a/lib/composer/vendor/phar-io/manifest/tests/xml/ComponentElementTest.php b/lib/composer/vendor/phar-io/manifest/tests/xml/ComponentElementTest.php new file mode 100644 index 000000000..ab89fbd9c --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/tests/xml/ComponentElementTest.php @@ -0,0 +1,25 @@ +loadXML(''); + $this->component = new ComponentElement($dom->documentElement); + } + + public function testNameCanBeRetrieved() { + $this->assertEquals('phar-io/phive', $this->component->getName()); + } + + public function testEmailCanBeRetrieved() { + $this->assertEquals('0.6.0', $this->component->getVersion()); + } + +} diff --git a/lib/composer/vendor/phar-io/manifest/tests/xml/ContainsElementTest.php b/lib/composer/vendor/phar-io/manifest/tests/xml/ContainsElementTest.php new file mode 100644 index 000000000..f77313de3 --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/tests/xml/ContainsElementTest.php @@ -0,0 +1,63 @@ +loadXML(''); + $this->domElement = $dom->documentElement; + $this->contains = new ContainsElement($this->domElement); + } + + public function testVersionCanBeRetrieved() { + $this->assertEquals('5.6.5', $this->contains->getVersion()); + } + + public function testThrowsExceptionWhenVersionAttributeIsMissing() { + $this->domElement->removeAttribute('version'); + $this->expectException(ManifestElementException::class); + $this->contains->getVersion(); + } + + public function testNameCanBeRetrieved() { + $this->assertEquals('phpunit/phpunit', $this->contains->getName()); + } + + public function testThrowsExceptionWhenNameAttributeIsMissing() { + $this->domElement->removeAttribute('name'); + $this->expectException(ManifestElementException::class); + $this->contains->getName(); + } + + public function testTypeCanBeRetrieved() { + $this->assertEquals('application', $this->contains->getType()); + } + + public function testThrowsExceptionWhenTypeAttributeIsMissing() { + $this->domElement->removeAttribute('type'); + $this->expectException(ManifestElementException::class); + $this->contains->getType(); + } + + public function testGetExtensionElementReturnsExtensionElement() { + $this->domElement->appendChild( + $this->domElement->ownerDocument->createElementNS('https://phar.io/xml/manifest/1.0', 'extension') + ); + $this->assertInstanceOf(ExtensionElement::class, $this->contains->getExtensionElement()); + } + +} diff --git a/lib/composer/vendor/phar-io/manifest/tests/xml/CopyrightElementTest.php b/lib/composer/vendor/phar-io/manifest/tests/xml/CopyrightElementTest.php new file mode 100644 index 000000000..9ad8eb383 --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/tests/xml/CopyrightElementTest.php @@ -0,0 +1,52 @@ +dom = new DOMDocument(); + $this->dom->loadXML(''); + $this->copyright = new CopyrightElement($this->dom->documentElement); + } + + public function testThrowsExceptionWhenGetAuthroElementsIsCalledButNodesAreMissing() { + $this->expectException(ManifestElementException::class); + $this->copyright->getAuthorElements(); + } + + public function testThrowsExceptionWhenGetLicenseElementIsCalledButNodeIsMissing() { + $this->expectException(ManifestElementException::class); + $this->copyright->getLicenseElement(); + } + + public function testGetAuthorElementsReturnsAuthorElementCollection() { + $this->dom->documentElement->appendChild( + $this->dom->createElementNS('https://phar.io/xml/manifest/1.0', 'author') + ); + $this->assertInstanceOf( + AuthorElementCollection::class, $this->copyright->getAuthorElements() + ); + } + + public function testGetLicenseElementReturnsLicenseElement() { + $this->dom->documentElement->appendChild( + $this->dom->createElementNS('https://phar.io/xml/manifest/1.0', 'license') + ); + $this->assertInstanceOf( + LicenseElement::class, $this->copyright->getLicenseElement() + ); + } + +} diff --git a/lib/composer/vendor/phar-io/manifest/tests/xml/ExtElementCollectionTest.php b/lib/composer/vendor/phar-io/manifest/tests/xml/ExtElementCollectionTest.php new file mode 100644 index 000000000..463e4d6e6 --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/tests/xml/ExtElementCollectionTest.php @@ -0,0 +1,19 @@ +loadXML(''); + $collection = new ExtElementCollection($dom->childNodes); + + foreach($collection as $position => $extElement) { + $this->assertInstanceOf(ExtElement::class, $extElement); + $this->assertEquals(0, $position); + } + } + +} diff --git a/lib/composer/vendor/phar-io/manifest/tests/xml/ExtElementTest.php b/lib/composer/vendor/phar-io/manifest/tests/xml/ExtElementTest.php new file mode 100644 index 000000000..097b52249 --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/tests/xml/ExtElementTest.php @@ -0,0 +1,21 @@ +loadXML(''); + $this->ext = new ExtElement($dom->documentElement); + } + + public function testNameCanBeRetrieved() { + $this->assertEquals('dom', $this->ext->getName()); + } + +} diff --git a/lib/composer/vendor/phar-io/manifest/tests/xml/ExtensionElementTest.php b/lib/composer/vendor/phar-io/manifest/tests/xml/ExtensionElementTest.php new file mode 100644 index 000000000..2ae01126e --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/tests/xml/ExtensionElementTest.php @@ -0,0 +1,25 @@ +loadXML(''); + $this->extension = new ExtensionElement($dom->documentElement); + } + + public function testNForCanBeRetrieved() { + $this->assertEquals('phar-io/phive', $this->extension->getFor()); + } + + public function testCompatibleVersionConstraintCanBeRetrieved() { + $this->assertEquals('~0.6', $this->extension->getCompatible()); + } + +} diff --git a/lib/composer/vendor/phar-io/manifest/tests/xml/LicenseElementTest.php b/lib/composer/vendor/phar-io/manifest/tests/xml/LicenseElementTest.php new file mode 100644 index 000000000..00d4a6c45 --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/tests/xml/LicenseElementTest.php @@ -0,0 +1,25 @@ +loadXML(''); + $this->license = new LicenseElement($dom->documentElement); + } + + public function testTypeCanBeRetrieved() { + $this->assertEquals('BSD-3', $this->license->getType()); + } + + public function testUrlCanBeRetrieved() { + $this->assertEquals('https://some.tld/LICENSE', $this->license->getUrl()); + } + +} diff --git a/lib/composer/vendor/phar-io/manifest/tests/xml/ManifestDocumentTest.php b/lib/composer/vendor/phar-io/manifest/tests/xml/ManifestDocumentTest.php new file mode 100644 index 000000000..b5bb8cd0c --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/tests/xml/ManifestDocumentTest.php @@ -0,0 +1,110 @@ +expectException(ManifestDocumentException::class); + ManifestDocument::fromFile('/does/not/exist'); + } + + public function testCanBeCreatedFromFile() { + $this->assertInstanceOf( + ManifestDocument::class, + ManifestDocument::fromFile(__DIR__ . '/../_fixture/phpunit-5.6.5.xml') + ); + } + + public function testCaneBeConstructedFromString() { + $content = file_get_contents(__DIR__ . '/../_fixture/phpunit-5.6.5.xml'); + $this->assertInstanceOf( + ManifestDocument::class, + ManifestDocument::fromString($content) + ); + } + + public function testThrowsExceptionOnInvalidXML() { + $this->expectException(ManifestDocumentLoadingException::class); + ManifestDocument::fromString(''); + } + + public function testLoadingDocumentWithWrongRootNameThrowsException() { + $this->expectException(ManifestDocumentException::class); + ManifestDocument::fromString(''); + } + + public function testLoadingDocumentWithWrongNamespaceThrowsException() { + $this->expectException(ManifestDocumentException::class); + ManifestDocument::fromString(''); + } + + public function testContainsElementCanBeRetrieved() { + $this->assertInstanceOf( + ContainsElement::class, + $this->loadFixture()->getContainsElement() + ); + } + + public function testRequiresElementCanBeRetrieved() { + $this->assertInstanceOf( + RequiresElement::class, + $this->loadFixture()->getRequiresElement() + ); + } + + public function testCopyrightElementCanBeRetrieved() { + $this->assertInstanceOf( + CopyrightElement::class, + $this->loadFixture()->getCopyrightElement() + ); + } + + public function testBundlesElementCanBeRetrieved() { + $this->assertInstanceOf( + BundlesElement::class, + $this->loadFixture()->getBundlesElement() + ); + } + + public function testThrowsExceptionWhenContainsIsMissing() { + $this->expectException(ManifestDocumentException::class); + $this->loadEmptyFixture()->getContainsElement(); + } + + public function testThrowsExceptionWhenCopyirhgtIsMissing() { + $this->expectException(ManifestDocumentException::class); + $this->loadEmptyFixture()->getCopyrightElement(); + } + + public function testThrowsExceptionWhenRequiresIsMissing() { + $this->expectException(ManifestDocumentException::class); + $this->loadEmptyFixture()->getRequiresElement(); + } + + public function testThrowsExceptionWhenBundlesIsMissing() { + $this->expectException(ManifestDocumentException::class); + $this->loadEmptyFixture()->getBundlesElement(); + } + + public function testHasBundlesReturnsTrueWhenBundlesNodeIsPresent() { + $this->assertTrue( + $this->loadFixture()->hasBundlesElement() + ); + } + + public function testHasBundlesReturnsFalseWhenBundlesNoNodeIsPresent() { + $this->assertFalse( + $this->loadEmptyFixture()->hasBundlesElement() + ); + } + + private function loadFixture() { + return ManifestDocument::fromFile(__DIR__ . '/../_fixture/phpunit-5.6.5.xml'); + } + + private function loadEmptyFixture() { + return ManifestDocument::fromString( + '' + ); + } +} diff --git a/lib/composer/vendor/phar-io/manifest/tests/xml/PhpElementTest.php b/lib/composer/vendor/phar-io/manifest/tests/xml/PhpElementTest.php new file mode 100644 index 000000000..546187a09 --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/tests/xml/PhpElementTest.php @@ -0,0 +1,48 @@ +dom = new DOMDocument(); + $this->dom->loadXML(''); + $this->php = new PhpElement($this->dom->documentElement); + } + + public function testVersionConstraintCanBeRetrieved() { + $this->assertEquals('^5.6 || ^7.0', $this->php->getVersion()); + } + + public function testHasExtElementsReturnsFalseWhenNoExtensionsAreRequired() { + $this->assertFalse($this->php->hasExtElements()); + } + + public function testHasExtElementsReturnsTrueWhenExtensionsAreRequired() { + $this->addExtElement(); + $this->assertTrue($this->php->hasExtElements()); + } + + public function testGetExtElementsReturnsExtElementCollection() { + $this->addExtElement(); + $this->assertInstanceOf(ExtElementCollection::class, $this->php->getExtElements()); + } + + private function addExtElement() { + $this->dom->documentElement->appendChild( + $this->dom->createElementNS('https://phar.io/xml/manifest/1.0', 'ext') + ); + } + +} diff --git a/lib/composer/vendor/phar-io/manifest/tests/xml/RequiresElementTest.php b/lib/composer/vendor/phar-io/manifest/tests/xml/RequiresElementTest.php new file mode 100644 index 000000000..907b0a6fa --- /dev/null +++ b/lib/composer/vendor/phar-io/manifest/tests/xml/RequiresElementTest.php @@ -0,0 +1,37 @@ +dom = new DOMDocument(); + $this->dom->loadXML(''); + $this->requires = new RequiresElement($this->dom->documentElement); + } + + public function testThrowsExceptionWhenGetPhpElementIsCalledButElementIsMissing() { + $this->expectException(ManifestElementException::class); + $this->requires->getPHPElement(); + } + + public function testHasExtElementsReturnsTrueWhenExtensionsAreRequired() { + $this->dom->documentElement->appendChild( + $this->dom->createElementNS('https://phar.io/xml/manifest/1.0', 'php') + ); + + $this->assertInstanceOf(PhpElement::class, $this->requires->getPHPElement()); + } + +} diff --git a/lib/composer/vendor/phar-io/version/.gitignore b/lib/composer/vendor/phar-io/version/.gitignore new file mode 100644 index 000000000..1c8f2e64a --- /dev/null +++ b/lib/composer/vendor/phar-io/version/.gitignore @@ -0,0 +1,7 @@ +/.idea +/.php_cs.cache +/composer.lock +/src/autoload.php +/tools +/vendor + diff --git a/lib/composer/vendor/phar-io/version/.php_cs b/lib/composer/vendor/phar-io/version/.php_cs new file mode 100644 index 000000000..159d6a35a --- /dev/null +++ b/lib/composer/vendor/phar-io/version/.php_cs @@ -0,0 +1,67 @@ +files() + ->in('src') + ->in('tests') + ->name('*.php'); + +return Symfony\CS\Config\Config::create() + ->setUsingCache(true) + ->level(\Symfony\CS\FixerInterface::NONE_LEVEL) + ->fixers( + array( + 'align_double_arrow', + 'align_equals', + 'concat_with_spaces', + 'duplicate_semicolon', + 'elseif', + 'empty_return', + 'encoding', + 'eof_ending', + 'extra_empty_lines', + 'function_call_space', + 'function_declaration', + 'indentation', + 'join_function', + 'line_after_namespace', + 'linefeed', + 'list_commas', + 'lowercase_constants', + 'lowercase_keywords', + 'method_argument_space', + 'multiple_use', + 'namespace_no_leading_whitespace', + 'no_blank_lines_after_class_opening', + 'no_empty_lines_after_phpdocs', + 'parenthesis', + 'php_closing_tag', + 'phpdoc_indent', + 'phpdoc_no_access', + 'phpdoc_no_empty_return', + 'phpdoc_no_package', + 'phpdoc_params', + 'phpdoc_scalar', + 'phpdoc_separation', + 'phpdoc_to_comment', + 'phpdoc_trim', + 'phpdoc_types', + 'phpdoc_var_without_name', + 'remove_lines_between_uses', + 'return', + 'self_accessor', + 'short_array_syntax', + 'short_tag', + 'single_line_after_imports', + 'single_quote', + 'spaces_before_semicolon', + 'spaces_cast', + 'ternary_spaces', + 'trailing_spaces', + 'trim_array_spaces', + 'unused_use', + 'visibility', + 'whitespacy_lines' + ) + ) + ->finder($finder); + diff --git a/lib/composer/vendor/phar-io/version/.travis.yml b/lib/composer/vendor/phar-io/version/.travis.yml new file mode 100644 index 000000000..b4be10f9c --- /dev/null +++ b/lib/composer/vendor/phar-io/version/.travis.yml @@ -0,0 +1,33 @@ +os: +- linux + +language: php + +before_install: + - wget https://phar.io/releases/phive.phar + - wget https://phar.io/releases/phive.phar.asc + - gpg --keyserver hkps.pool.sks-keyservers.net --recv-keys 0x9B2D5D79 + - gpg --verify phive.phar.asc phive.phar + - chmod +x phive.phar + - sudo mv phive.phar /usr/bin/phive + +install: + - ant setup + +script: ./tools/phpunit + +php: + - 5.6 + - 7.0 + - 7.1 + - 7.0snapshot + - 7.1snapshot + - master + +matrix: + allow_failures: + - php: master + fast_finish: true + +notifications: + email: false diff --git a/lib/composer/vendor/phar-io/version/LICENSE b/lib/composer/vendor/phar-io/version/LICENSE new file mode 100644 index 000000000..359dbc50f --- /dev/null +++ b/lib/composer/vendor/phar-io/version/LICENSE @@ -0,0 +1,31 @@ +phar-io/version + +Copyright (c) 2016-2017 Arne Blankerts , Sebastian Heuer and contributors +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +* Neither the name of Arne Blankerts nor the names of contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT * NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS +BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, +OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. + diff --git a/lib/composer/vendor/phar-io/version/README.md b/lib/composer/vendor/phar-io/version/README.md new file mode 100644 index 000000000..df448f82c --- /dev/null +++ b/lib/composer/vendor/phar-io/version/README.md @@ -0,0 +1,16 @@ +# Version + +Library for handling version information and constraints + +[![Build Status](https://travis-ci.org/phar-io/version.svg?branch=master)](https://travis-ci.org/phar-io/version) + +## Installation + +You can add this library as a local, per-project dependency to your project using [Composer](https://getcomposer.org/): + + composer require phar-io/version + +If you only need this library during development, for instance to run your project's test suite, then you should add it as a development-time dependency: + + composer require --dev phar-io/version + diff --git a/lib/composer/vendor/phar-io/version/build.xml b/lib/composer/vendor/phar-io/version/build.xml new file mode 100644 index 000000000..943c957fd --- /dev/null +++ b/lib/composer/vendor/phar-io/version/build.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/lib/composer/vendor/phar-io/version/composer.json b/lib/composer/vendor/phar-io/version/composer.json new file mode 100644 index 000000000..891e8b174 --- /dev/null +++ b/lib/composer/vendor/phar-io/version/composer.json @@ -0,0 +1,34 @@ +{ + "name": "phar-io/version", + "description": "Library for handling version information and constraints", + "license": "BSD-3-Clause", + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "support": { + "issues": "https://github.com/phar-io/version/issues" + }, + "require": { + "php": "^5.6 || ^7.0" + }, + "autoload": { + "classmap": [ + "src/" + ] + } +} + diff --git a/lib/composer/vendor/phar-io/version/phive.xml b/lib/composer/vendor/phar-io/version/phive.xml new file mode 100644 index 000000000..0c3bc6f38 --- /dev/null +++ b/lib/composer/vendor/phar-io/version/phive.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/lib/composer/vendor/phar-io/version/phpunit.xml b/lib/composer/vendor/phar-io/version/phpunit.xml new file mode 100644 index 000000000..c21ffbc09 --- /dev/null +++ b/lib/composer/vendor/phar-io/version/phpunit.xml @@ -0,0 +1,19 @@ + + + + tests + + + + + src + + + diff --git a/lib/composer/vendor/phar-io/version/src/AbstractVersionConstraint.php b/lib/composer/vendor/phar-io/version/src/AbstractVersionConstraint.php new file mode 100644 index 000000000..b732dbcab --- /dev/null +++ b/lib/composer/vendor/phar-io/version/src/AbstractVersionConstraint.php @@ -0,0 +1,32 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Version; + +abstract class AbstractVersionConstraint implements VersionConstraint { + /** + * @var string + */ + private $originalValue = ''; + + /** + * @param string $originalValue + */ + public function __construct($originalValue) { + $this->originalValue = $originalValue; + } + + /** + * @return string + */ + public function asString() { + return $this->originalValue; + } +} diff --git a/lib/composer/vendor/phar-io/version/src/AndVersionConstraintGroup.php b/lib/composer/vendor/phar-io/version/src/AndVersionConstraintGroup.php new file mode 100644 index 000000000..455dcd193 --- /dev/null +++ b/lib/composer/vendor/phar-io/version/src/AndVersionConstraintGroup.php @@ -0,0 +1,43 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Version; + +class AndVersionConstraintGroup extends AbstractVersionConstraint { + /** + * @var VersionConstraint[] + */ + private $constraints = []; + + /** + * @param string $originalValue + * @param VersionConstraint[] $constraints + */ + public function __construct($originalValue, array $constraints) { + parent::__construct($originalValue); + + $this->constraints = $constraints; + } + + /** + * @param Version $version + * + * @return bool + */ + public function complies(Version $version) { + foreach ($this->constraints as $constraint) { + if (!$constraint->complies($version)) { + return false; + } + } + + return true; + } +} diff --git a/lib/composer/vendor/phar-io/version/src/AnyVersionConstraint.php b/lib/composer/vendor/phar-io/version/src/AnyVersionConstraint.php new file mode 100644 index 000000000..13ca2efcb --- /dev/null +++ b/lib/composer/vendor/phar-io/version/src/AnyVersionConstraint.php @@ -0,0 +1,29 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Version; + +class AnyVersionConstraint implements VersionConstraint { + /** + * @param Version $version + * + * @return bool + */ + public function complies(Version $version) { + return true; + } + + /** + * @return string + */ + public function asString() { + return '*'; + } +} diff --git a/lib/composer/vendor/phar-io/version/src/ExactVersionConstraint.php b/lib/composer/vendor/phar-io/version/src/ExactVersionConstraint.php new file mode 100644 index 000000000..b21411720 --- /dev/null +++ b/lib/composer/vendor/phar-io/version/src/ExactVersionConstraint.php @@ -0,0 +1,22 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Version; + +class ExactVersionConstraint extends AbstractVersionConstraint { + /** + * @param Version $version + * + * @return bool + */ + public function complies(Version $version) { + return $this->asString() == $version->getVersionString(); + } +} diff --git a/lib/composer/vendor/phar-io/version/src/Exception.php b/lib/composer/vendor/phar-io/version/src/Exception.php new file mode 100644 index 000000000..b99e4dd45 --- /dev/null +++ b/lib/composer/vendor/phar-io/version/src/Exception.php @@ -0,0 +1,14 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Version; + +interface Exception { +} diff --git a/lib/composer/vendor/phar-io/version/src/GreaterThanOrEqualToVersionConstraint.php b/lib/composer/vendor/phar-io/version/src/GreaterThanOrEqualToVersionConstraint.php new file mode 100644 index 000000000..a237d79c3 --- /dev/null +++ b/lib/composer/vendor/phar-io/version/src/GreaterThanOrEqualToVersionConstraint.php @@ -0,0 +1,38 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Version; + +class GreaterThanOrEqualToVersionConstraint extends AbstractVersionConstraint { + /** + * @var Version + */ + private $minimalVersion; + + /** + * @param string $originalValue + * @param Version $minimalVersion + */ + public function __construct($originalValue, Version $minimalVersion) { + parent::__construct($originalValue); + + $this->minimalVersion = $minimalVersion; + } + + /** + * @param Version $version + * + * @return bool + */ + public function complies(Version $version) { + return $version->getVersionString() == $this->minimalVersion->getVersionString() || + $version->isGreaterThan($this->minimalVersion); + } +} diff --git a/lib/composer/vendor/phar-io/version/src/InvalidVersionException.php b/lib/composer/vendor/phar-io/version/src/InvalidVersionException.php new file mode 100644 index 000000000..e52f5d716 --- /dev/null +++ b/lib/composer/vendor/phar-io/version/src/InvalidVersionException.php @@ -0,0 +1,5 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Version; + +class OrVersionConstraintGroup extends AbstractVersionConstraint { + /** + * @var VersionConstraint[] + */ + private $constraints = []; + + /** + * @param string $originalValue + * @param VersionConstraint[] $constraints + */ + public function __construct($originalValue, array $constraints) { + parent::__construct($originalValue); + + $this->constraints = $constraints; + } + + /** + * @param Version $version + * + * @return bool + */ + public function complies(Version $version) { + foreach ($this->constraints as $constraint) { + if ($constraint->complies($version)) { + return true; + } + } + + return false; + } +} diff --git a/lib/composer/vendor/phar-io/version/src/PreReleaseSuffix.php b/lib/composer/vendor/phar-io/version/src/PreReleaseSuffix.php new file mode 100644 index 000000000..d9e7ee7dc --- /dev/null +++ b/lib/composer/vendor/phar-io/version/src/PreReleaseSuffix.php @@ -0,0 +1,41 @@ +value = $value; + $this->number = $number; + } + + /** + * @return string + */ + public function getValue() + { + return $this->value; + } + + /** + * @return int|null + */ + public function getNumber() + { + return $this->number; + } +} diff --git a/lib/composer/vendor/phar-io/version/src/SpecificMajorAndMinorVersionConstraint.php b/lib/composer/vendor/phar-io/version/src/SpecificMajorAndMinorVersionConstraint.php new file mode 100644 index 000000000..dbeaa06d2 --- /dev/null +++ b/lib/composer/vendor/phar-io/version/src/SpecificMajorAndMinorVersionConstraint.php @@ -0,0 +1,48 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Version; + +class SpecificMajorAndMinorVersionConstraint extends AbstractVersionConstraint { + /** + * @var int + */ + private $major = 0; + + /** + * @var int + */ + private $minor = 0; + + /** + * @param string $originalValue + * @param int $major + * @param int $minor + */ + public function __construct($originalValue, $major, $minor) { + parent::__construct($originalValue); + + $this->major = $major; + $this->minor = $minor; + } + + /** + * @param Version $version + * + * @return bool + */ + public function complies(Version $version) { + if ($version->getMajor()->getValue() != $this->major) { + return false; + } + + return $version->getMinor()->getValue() == $this->minor; + } +} diff --git a/lib/composer/vendor/phar-io/version/src/SpecificMajorVersionConstraint.php b/lib/composer/vendor/phar-io/version/src/SpecificMajorVersionConstraint.php new file mode 100644 index 000000000..51b12d9dc --- /dev/null +++ b/lib/composer/vendor/phar-io/version/src/SpecificMajorVersionConstraint.php @@ -0,0 +1,37 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Version; + +class SpecificMajorVersionConstraint extends AbstractVersionConstraint { + /** + * @var int + */ + private $major = 0; + + /** + * @param string $originalValue + * @param int $major + */ + public function __construct($originalValue, $major) { + parent::__construct($originalValue); + + $this->major = $major; + } + + /** + * @param Version $version + * + * @return bool + */ + public function complies(Version $version) { + return $version->getMajor()->getValue() == $this->major; + } +} diff --git a/lib/composer/vendor/phar-io/version/src/UnsupportedVersionConstraintException.php b/lib/composer/vendor/phar-io/version/src/UnsupportedVersionConstraintException.php new file mode 100644 index 000000000..45488c2de --- /dev/null +++ b/lib/composer/vendor/phar-io/version/src/UnsupportedVersionConstraintException.php @@ -0,0 +1,14 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Version; + +final class UnsupportedVersionConstraintException extends \RuntimeException implements Exception { +} diff --git a/lib/composer/vendor/phar-io/version/src/Version.php b/lib/composer/vendor/phar-io/version/src/Version.php new file mode 100644 index 000000000..825ed4434 --- /dev/null +++ b/lib/composer/vendor/phar-io/version/src/Version.php @@ -0,0 +1,162 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Version; + +class Version { + /** + * @var VersionNumber + */ + private $major; + + /** + * @var VersionNumber + */ + private $minor; + + /** + * @var VersionNumber + */ + private $patch; + + /** + * @var PreReleaseSuffix + */ + private $preReleaseSuffix; + + /** + * @var string + */ + private $versionString = ''; + + /** + * @param string $versionString + */ + public function __construct($versionString) { + $this->ensureVersionStringIsValid($versionString); + + $this->versionString = $versionString; + } + + /** + * @param array $matches + */ + private function parseVersion(array $matches) { + $this->major = new VersionNumber($matches['Major']); + $this->minor = new VersionNumber($matches['Minor']); + $this->patch = isset($matches['Patch']) ? new VersionNumber($matches['Patch']) : new VersionNumber(null); + + if (isset($matches['ReleaseType'])) { + $preReleaseNumber = isset($matches['ReleaseTypeCount']) ? (int) $matches['ReleaseTypeCount'] : null; + + $this->preReleaseSuffix = new PreReleaseSuffix($matches['ReleaseType'], $preReleaseNumber); + } + } + + /** + * @return PreReleaseSuffix + */ + public function getPreReleaseSuffix() + { + return $this->preReleaseSuffix; + } + + /** + * @return string + */ + public function getVersionString() { + return $this->versionString; + } + + /** + * @param Version $version + * + * @return bool + */ + public function isGreaterThan(Version $version) { + if ($version->getMajor()->getValue() > $this->getMajor()->getValue()) { + return false; + } + + if ($version->getMajor()->getValue() < $this->getMajor()->getValue()) { + return true; + } + + if ($version->getMinor()->getValue() > $this->getMinor()->getValue()) { + return false; + } + + if ($version->getMinor()->getValue() < $this->getMinor()->getValue()) { + return true; + } + + if ($version->getPatch()->getValue() >= $this->getPatch()->getValue()) { + return false; + } + + if ($version->getPatch()->getValue() < $this->getPatch()->getValue()) { + return true; + } + + return false; + } + + /** + * @return VersionNumber + */ + public function getMajor() { + return $this->major; + } + + /** + * @return VersionNumber + */ + public function getMinor() { + return $this->minor; + } + + /** + * @return VersionNumber + */ + public function getPatch() { + return $this->patch; + } + + /** + * @param string $version + * + * @throws InvalidVersionException + */ + private function ensureVersionStringIsValid($version) { + $regex = '/^v? + (?(0|(?:[1-9][0-9]*))) + \\. + (?(0|(?:[1-9][0-9]*))) + (\\. + (?(0|(?:[1-9][0-9]*))) + )? + (?: + - + (?(?:(dev|beta|b|RC|alpha|a|patch|p))) + (?: + (?[0-9]) + )? + )? + $/x'; + + if (preg_match($regex, $version, $matches) !== 1) { + throw new InvalidVersionException( + sprintf("Version string '%s' does not follow SemVer semantics", $version) + ); + } + + $this->parseVersion($matches); + } +} diff --git a/lib/composer/vendor/phar-io/version/src/VersionConstraint.php b/lib/composer/vendor/phar-io/version/src/VersionConstraint.php new file mode 100644 index 000000000..9558163f0 --- /dev/null +++ b/lib/composer/vendor/phar-io/version/src/VersionConstraint.php @@ -0,0 +1,26 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Version; + +interface VersionConstraint { + /** + * @param Version $version + * + * @return bool + */ + public function complies(Version $version); + + /** + * @return string + */ + public function asString(); + +} diff --git a/lib/composer/vendor/phar-io/version/src/VersionConstraintParser.php b/lib/composer/vendor/phar-io/version/src/VersionConstraintParser.php new file mode 100644 index 000000000..0a24f87d3 --- /dev/null +++ b/lib/composer/vendor/phar-io/version/src/VersionConstraintParser.php @@ -0,0 +1,122 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Version; + +class VersionConstraintParser { + /** + * @param string $value + * + * @return VersionConstraint + * + * @throws UnsupportedVersionConstraintException + */ + public function parse($value) { + + if (strpos($value, '||') !== false) { + return $this->handleOrGroup($value); + } + + if (!preg_match('/^[\^~\*]?[\d.\*]+$/', $value)) { + throw new UnsupportedVersionConstraintException( + sprintf('Version constraint %s is not supported.', $value) + ); + } + + switch ($value[0]) { + case '~': + return $this->handleTildeOperator($value); + case '^': + return $this->handleCaretOperator($value); + } + + $version = new VersionConstraintValue($value); + + if ($version->getMajor()->isAny()) { + return new AnyVersionConstraint(); + } + + if ($version->getMinor()->isAny()) { + return new SpecificMajorVersionConstraint( + $value, + $version->getMajor()->getValue() + ); + } + + if ($version->getPatch()->isAny()) { + return new SpecificMajorAndMinorVersionConstraint( + $value, + $version->getMajor()->getValue(), + $version->getMinor()->getValue() + ); + } + + return new ExactVersionConstraint($value); + } + + /** + * @param $value + * + * @return OrVersionConstraintGroup + */ + private function handleOrGroup($value) { + $constraints = []; + + foreach (explode('||', $value) as $groupSegment) { + $constraints[] = $this->parse(trim($groupSegment)); + } + + return new OrVersionConstraintGroup($value, $constraints); + } + + /** + * @param string $value + * + * @return AndVersionConstraintGroup + */ + private function handleTildeOperator($value) { + $version = new Version(substr($value, 1)); + $constraints = [ + new GreaterThanOrEqualToVersionConstraint($value, $version) + ]; + + if ($version->getPatch()->isAny()) { + $constraints[] = new SpecificMajorVersionConstraint( + $value, + $version->getMajor()->getValue() + ); + } else { + $constraints[] = new SpecificMajorAndMinorVersionConstraint( + $value, + $version->getMajor()->getValue(), + $version->getMinor()->getValue() + ); + } + + return new AndVersionConstraintGroup($value, $constraints); + } + + /** + * @param string $value + * + * @return AndVersionConstraintGroup + */ + private function handleCaretOperator($value) { + $version = new Version(substr($value, 1)); + + return new AndVersionConstraintGroup( + $value, + [ + new GreaterThanOrEqualToVersionConstraint($value, $version), + new SpecificMajorVersionConstraint($value, $version->getMajor()->getValue()) + ] + ); + } +} diff --git a/lib/composer/vendor/phar-io/version/src/VersionConstraintValue.php b/lib/composer/vendor/phar-io/version/src/VersionConstraintValue.php new file mode 100644 index 000000000..ad59068cf --- /dev/null +++ b/lib/composer/vendor/phar-io/version/src/VersionConstraintValue.php @@ -0,0 +1,123 @@ +versionString = $versionString; + + $this->parseVersion($versionString); + } + + /** + * @param $versionString + */ + private function parseVersion($versionString) { + $this->extractBuildMetaData($versionString); + $this->extractLabel($versionString); + + $versionSegments = explode('.', $versionString); + $this->major = new VersionNumber($versionSegments[0]); + + $minorValue = isset($versionSegments[1]) ? $versionSegments[1] : null; + $patchValue = isset($versionSegments[2]) ? $versionSegments[2] : null; + + $this->minor = new VersionNumber($minorValue); + $this->patch = new VersionNumber($patchValue); + } + + /** + * @param string $versionString + */ + private function extractBuildMetaData(&$versionString) { + if (preg_match('/\+(.*)/', $versionString, $matches) == 1) { + $this->buildMetaData = $matches[1]; + $versionString = str_replace($matches[0], '', $versionString); + } + } + + /** + * @param string $versionString + */ + private function extractLabel(&$versionString) { + if (preg_match('/\-(.*)/', $versionString, $matches) == 1) { + $this->label = $matches[1]; + $versionString = str_replace($matches[0], '', $versionString); + } + } + + /** + * @return string + */ + public function getLabel() { + return $this->label; + } + + /** + * @return string + */ + public function getBuildMetaData() { + return $this->buildMetaData; + } + + /** + * @return string + */ + public function getVersionString() { + return $this->versionString; + } + + /** + * @return VersionNumber + */ + public function getMajor() { + return $this->major; + } + + /** + * @return VersionNumber + */ + public function getMinor() { + return $this->minor; + } + + /** + * @return VersionNumber + */ + public function getPatch() { + return $this->patch; + } +} diff --git a/lib/composer/vendor/phar-io/version/src/VersionNumber.php b/lib/composer/vendor/phar-io/version/src/VersionNumber.php new file mode 100644 index 000000000..ab512ed15 --- /dev/null +++ b/lib/composer/vendor/phar-io/version/src/VersionNumber.php @@ -0,0 +1,41 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Version; + +class VersionNumber { + /** + * @var int + */ + private $value; + + /** + * @param mixed $value + */ + public function __construct($value) { + if (is_numeric($value)) { + $this->value = $value; + } + } + + /** + * @return bool + */ + public function isAny() { + return $this->value === null; + } + + /** + * @return int + */ + public function getValue() { + return $this->value; + } +} diff --git a/lib/composer/vendor/phar-io/version/tests/Integration/VersionConstraintParserTest.php b/lib/composer/vendor/phar-io/version/tests/Integration/VersionConstraintParserTest.php new file mode 100644 index 000000000..683e9d03a --- /dev/null +++ b/lib/composer/vendor/phar-io/version/tests/Integration/VersionConstraintParserTest.php @@ -0,0 +1,125 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Version; + +use PHPUnit\Framework\TestCase; + +/** + * @covers \PharIo\Version\VersionConstraintParser + */ +class VersionConstraintParserTest extends TestCase { + /** + * @dataProvider versionStringProvider + * + * @param string $versionString + * @param VersionConstraint $expectedConstraint + */ + public function testReturnsExpectedConstraint($versionString, VersionConstraint $expectedConstraint) { + $parser = new VersionConstraintParser; + + $this->assertEquals($expectedConstraint, $parser->parse($versionString)); + } + + /** + * @dataProvider unsupportedVersionStringProvider + * + * @param string $versionString + */ + public function testThrowsExceptionIfVersionStringIsNotSupported($versionString) { + $parser = new VersionConstraintParser; + + $this->expectException(UnsupportedVersionConstraintException::class); + + $parser->parse($versionString); + } + + /** + * @return array + */ + public function versionStringProvider() { + return [ + ['1.0.2', new ExactVersionConstraint('1.0.2')], + [ + '~4.6', + new AndVersionConstraintGroup( + '~4.6', + [ + new GreaterThanOrEqualToVersionConstraint('~4.6', new Version('4.6')), + new SpecificMajorVersionConstraint('~4.6', 4) + ] + ) + ], + [ + '~4.6.2', + new AndVersionConstraintGroup( + '~4.6.2', + [ + new GreaterThanOrEqualToVersionConstraint('~4.6.2', new Version('4.6.2')), + new SpecificMajorAndMinorVersionConstraint('~4.6.2', 4, 6) + ] + ) + ], + [ + '^2.6.1', + new AndVersionConstraintGroup( + '^2.6.1', + [ + new GreaterThanOrEqualToVersionConstraint('^2.6.1', new Version('2.6.1')), + new SpecificMajorVersionConstraint('^2.6.1', 2) + ] + ) + ], + ['5.1.*', new SpecificMajorAndMinorVersionConstraint('5.1.*', 5, 1)], + ['5.*', new SpecificMajorVersionConstraint('5.*', 5)], + ['*', new AnyVersionConstraint()], + [ + '1.0.2 || 1.0.5', + new OrVersionConstraintGroup( + '1.0.2 || 1.0.5', + [ + new ExactVersionConstraint('1.0.2'), + new ExactVersionConstraint('1.0.5') + ] + ) + ], + [ + '^5.6 || ^7.0', + new OrVersionConstraintGroup( + '^5.6 || ^7.0', + [ + new AndVersionConstraintGroup( + '^5.6', [ + new GreaterThanOrEqualToVersionConstraint('^5.6', new Version('5.6')), + new SpecificMajorVersionConstraint('^5.6', 5) + ] + ), + new AndVersionConstraintGroup( + '^7.0', [ + new GreaterThanOrEqualToVersionConstraint('^7.0', new Version('7.0')), + new SpecificMajorVersionConstraint('^7.0', 7) + ] + ) + ] + ) + ] + ]; + } + + public function unsupportedVersionStringProvider() { + return [ + ['foo'], + ['+1.0.2'], + ['>=2.0'], + ['^5.6 || >= 7.0'], + ['2.0 || foo'] + ]; + } +} diff --git a/lib/composer/vendor/phar-io/version/tests/Unit/AbstractVersionConstraintTest.php b/lib/composer/vendor/phar-io/version/tests/Unit/AbstractVersionConstraintTest.php new file mode 100644 index 000000000..c61856692 --- /dev/null +++ b/lib/composer/vendor/phar-io/version/tests/Unit/AbstractVersionConstraintTest.php @@ -0,0 +1,25 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Version; + +use PHPUnit\Framework\TestCase; + +/** + * @covers \PharIo\Version\AbstractVersionConstraint + */ +class AbstractVersionConstraintTest extends TestCase { + public function testAsString() { + /** @var AbstractVersionConstraint|\PHPUnit_Framework_MockObject_MockObject $constraint */ + $constraint = $this->getMockForAbstractClass(AbstractVersionConstraint::class, ['foo']); + + $this->assertSame('foo', $constraint->asString()); + } +} diff --git a/lib/composer/vendor/phar-io/version/tests/Unit/AndVersionConstraintGroupTest.php b/lib/composer/vendor/phar-io/version/tests/Unit/AndVersionConstraintGroupTest.php new file mode 100644 index 000000000..ce7f5da8b --- /dev/null +++ b/lib/composer/vendor/phar-io/version/tests/Unit/AndVersionConstraintGroupTest.php @@ -0,0 +1,52 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Version; + +use PHPUnit\Framework\TestCase; + +/** + * @covers PharIo\Version\AndVersionConstraintGroup + */ +class AndVersionConstraintGroupTest extends TestCase { + public function testReturnsFalseIfOneConstraintReturnsFalse() { + $firstConstraint = $this->createMock(VersionConstraint::class); + $secondConstraint = $this->createMock(VersionConstraint::class); + + $firstConstraint->expects($this->once()) + ->method('complies') + ->will($this->returnValue(true)); + + $secondConstraint->expects($this->once()) + ->method('complies') + ->will($this->returnValue(false)); + + $group = new AndVersionConstraintGroup('foo', [$firstConstraint, $secondConstraint]); + + $this->assertFalse($group->complies(new Version('1.0.0'))); + } + + public function testReturnsTrueIfAllConstraintsReturnsTrue() { + $firstConstraint = $this->createMock(VersionConstraint::class); + $secondConstraint = $this->createMock(VersionConstraint::class); + + $firstConstraint->expects($this->once()) + ->method('complies') + ->will($this->returnValue(true)); + + $secondConstraint->expects($this->once()) + ->method('complies') + ->will($this->returnValue(true)); + + $group = new AndVersionConstraintGroup('foo', [$firstConstraint, $secondConstraint]); + + $this->assertTrue($group->complies(new Version('1.0.0'))); + } +} diff --git a/lib/composer/vendor/phar-io/version/tests/Unit/AnyVersionConstraintTest.php b/lib/composer/vendor/phar-io/version/tests/Unit/AnyVersionConstraintTest.php new file mode 100644 index 000000000..331785e38 --- /dev/null +++ b/lib/composer/vendor/phar-io/version/tests/Unit/AnyVersionConstraintTest.php @@ -0,0 +1,41 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Version; + +use PHPUnit\Framework\TestCase; + +/** + * @covers PharIo\Version\AnyVersionConstraint + */ +class AnyVersionConstraintTest extends TestCase { + public function versionProvider() { + return [ + [new Version('1.0.2')], + [new Version('4.8')], + [new Version('0.1.1-dev')] + ]; + } + + /** + * @dataProvider versionProvider + * + * @param Version $version + */ + public function testReturnsTrue(Version $version) { + $constraint = new AnyVersionConstraint; + + $this->assertTrue($constraint->complies($version)); + } + + public function testAsString() { + $this->assertSame('*', (new AnyVersionConstraint())->asString()); + } +} diff --git a/lib/composer/vendor/phar-io/version/tests/Unit/ExactVersionConstraintTest.php b/lib/composer/vendor/phar-io/version/tests/Unit/ExactVersionConstraintTest.php new file mode 100644 index 000000000..6b906faf4 --- /dev/null +++ b/lib/composer/vendor/phar-io/version/tests/Unit/ExactVersionConstraintTest.php @@ -0,0 +1,58 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Version; + +use PHPUnit\Framework\TestCase; + +/** + * @covers PharIo\Version\ExactVersionConstraint + */ +class ExactVersionConstraintTest extends TestCase { + public function compliantVersionProvider() { + return [ + ['1.0.2', new Version('1.0.2')], + ['4.8.9', new Version('4.8.9')], + ['4.8', new Version('4.8')], + ]; + } + + public function nonCompliantVersionProvider() { + return [ + ['1.0.2', new Version('1.0.3')], + ['4.8.9', new Version('4.7.9')], + ['4.8', new Version('4.8.5')], + ]; + } + + /** + * @dataProvider compliantVersionProvider + * + * @param string $constraintValue + * @param Version $version + */ + public function testReturnsTrueForCompliantVersion($constraintValue, Version $version) { + $constraint = new ExactVersionConstraint($constraintValue); + + $this->assertTrue($constraint->complies($version)); + } + + /** + * @dataProvider nonCompliantVersionProvider + * + * @param string $constraintValue + * @param Version $version + */ + public function testReturnsFalseForNonCompliantVersion($constraintValue, Version $version) { + $constraint = new ExactVersionConstraint($constraintValue); + + $this->assertFalse($constraint->complies($version)); + } +} diff --git a/lib/composer/vendor/phar-io/version/tests/Unit/GreaterThanOrEqualToVersionConstraintTest.php b/lib/composer/vendor/phar-io/version/tests/Unit/GreaterThanOrEqualToVersionConstraintTest.php new file mode 100644 index 000000000..2ae54a86d --- /dev/null +++ b/lib/composer/vendor/phar-io/version/tests/Unit/GreaterThanOrEqualToVersionConstraintTest.php @@ -0,0 +1,47 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Version; + +use PHPUnit\Framework\TestCase; + +/** + * @covers PharIo\Version\GreaterThanOrEqualToVersionConstraint + */ +class GreaterThanOrEqualToVersionConstraintTest extends TestCase { + public function versionProvider() { + return [ + // compliant versions + [new Version('1.0.2'), new Version('1.0.2'), true], + [new Version('1.0.2'), new Version('1.0.3'), true], + [new Version('1.0.2'), new Version('1.1.1'), true], + [new Version('1.0.2'), new Version('2.0.0'), true], + [new Version('1.0.2'), new Version('1.0.3'), true], + // non-compliant versions + [new Version('1.0.2'), new Version('1.0.1'), false], + [new Version('1.9.8'), new Version('0.9.9'), false], + [new Version('2.3.1'), new Version('2.2.3'), false], + [new Version('3.0.2'), new Version('2.9.9'), false], + ]; + } + + /** + * @dataProvider versionProvider + * + * @param Version $constraintVersion + * @param Version $version + * @param bool $expectedResult + */ + public function testReturnsTrueForCompliantVersions(Version $constraintVersion, Version $version, $expectedResult) { + $constraint = new GreaterThanOrEqualToVersionConstraint('foo', $constraintVersion); + + $this->assertSame($expectedResult, $constraint->complies($version)); + } +} diff --git a/lib/composer/vendor/phar-io/version/tests/Unit/OrVersionConstraintGroupTest.php b/lib/composer/vendor/phar-io/version/tests/Unit/OrVersionConstraintGroupTest.php new file mode 100644 index 000000000..4c6f5949d --- /dev/null +++ b/lib/composer/vendor/phar-io/version/tests/Unit/OrVersionConstraintGroupTest.php @@ -0,0 +1,65 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Version; + +use PHPUnit\Framework\TestCase; + +/** + * @covers PharIo\Version\OrVersionConstraintGroup + */ +class OrVersionConstraintGroupTest extends TestCase { + public function testReturnsTrueIfOneConstraintReturnsFalse() { + $firstConstraint = $this->createMock(VersionConstraint::class); + $secondConstraint = $this->createMock(VersionConstraint::class); + + $firstConstraint->expects($this->once()) + ->method('complies') + ->will($this->returnValue(false)); + + $secondConstraint->expects($this->once()) + ->method('complies') + ->will($this->returnValue(true)); + + $group = new OrVersionConstraintGroup('foo', [$firstConstraint, $secondConstraint]); + + $this->assertTrue($group->complies(new Version('1.0.0'))); + } + + public function testReturnsTrueIfAllConstraintsReturnsTrue() { + $firstConstraint = $this->createMock(VersionConstraint::class); + $secondConstraint = $this->createMock(VersionConstraint::class); + + $firstConstraint->expects($this->once()) + ->method('complies') + ->will($this->returnValue(true)); + + $group = new OrVersionConstraintGroup('foo', [$firstConstraint, $secondConstraint]); + + $this->assertTrue($group->complies(new Version('1.0.0'))); + } + + public function testReturnsFalseIfAllConstraintsReturnsFalse() { + $firstConstraint = $this->createMock(VersionConstraint::class); + $secondConstraint = $this->createMock(VersionConstraint::class); + + $firstConstraint->expects($this->once()) + ->method('complies') + ->will($this->returnValue(false)); + + $secondConstraint->expects($this->once()) + ->method('complies') + ->will($this->returnValue(false)); + + $group = new OrVersionConstraintGroup('foo', [$firstConstraint, $secondConstraint]); + + $this->assertFalse($group->complies(new Version('1.0.0'))); + } +} diff --git a/lib/composer/vendor/phar-io/version/tests/Unit/SpecificMajorAndMinorVersionConstraintTest.php b/lib/composer/vendor/phar-io/version/tests/Unit/SpecificMajorAndMinorVersionConstraintTest.php new file mode 100644 index 000000000..d3ab1235e --- /dev/null +++ b/lib/composer/vendor/phar-io/version/tests/Unit/SpecificMajorAndMinorVersionConstraintTest.php @@ -0,0 +1,45 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Version; + +use PHPUnit\Framework\TestCase; + +/** + * @covers PharIo\Version\SpecificMajorAndMinorVersionConstraint + */ +class SpecificMajorAndMinorVersionConstraintTest extends TestCase { + public function versionProvider() { + return [ + // compliant versions + [1, 0, new Version('1.0.2'), true], + [1, 0, new Version('1.0.3'), true], + [1, 1, new Version('1.1.1'), true], + // non-compliant versions + [2, 9, new Version('0.9.9'), false], + [3, 2, new Version('2.2.3'), false], + [2, 8, new Version('2.9.9'), false], + ]; + } + + /** + * @dataProvider versionProvider + * + * @param int $major + * @param int $minor + * @param Version $version + * @param bool $expectedResult + */ + public function testReturnsTrueForCompliantVersions($major, $minor, Version $version, $expectedResult) { + $constraint = new SpecificMajorAndMinorVersionConstraint('foo', $major, $minor); + + $this->assertSame($expectedResult, $constraint->complies($version)); + } +} diff --git a/lib/composer/vendor/phar-io/version/tests/Unit/SpecificMajorVersionConstraintTest.php b/lib/composer/vendor/phar-io/version/tests/Unit/SpecificMajorVersionConstraintTest.php new file mode 100644 index 000000000..fc78c7e93 --- /dev/null +++ b/lib/composer/vendor/phar-io/version/tests/Unit/SpecificMajorVersionConstraintTest.php @@ -0,0 +1,44 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Version; + +use PHPUnit\Framework\TestCase; + +/** + * @covers PharIo\Version\SpecificMajorVersionConstraint + */ +class SpecificMajorVersionConstraintTest extends TestCase { + public function versionProvider() { + return [ + // compliant versions + [1, new Version('1.0.2'), true], + [1, new Version('1.0.3'), true], + [1, new Version('1.1.1'), true], + // non-compliant versions + [2, new Version('0.9.9'), false], + [3, new Version('2.2.3'), false], + [3, new Version('2.9.9'), false], + ]; + } + + /** + * @dataProvider versionProvider + * + * @param int $major + * @param Version $version + * @param bool $expectedResult + */ + public function testReturnsTrueForCompliantVersions($major, Version $version, $expectedResult) { + $constraint = new SpecificMajorVersionConstraint('foo', $major); + + $this->assertSame($expectedResult, $constraint->complies($version)); + } +} diff --git a/lib/composer/vendor/phar-io/version/tests/Unit/VersionTest.php b/lib/composer/vendor/phar-io/version/tests/Unit/VersionTest.php new file mode 100644 index 000000000..4d0eee4e7 --- /dev/null +++ b/lib/composer/vendor/phar-io/version/tests/Unit/VersionTest.php @@ -0,0 +1,104 @@ +, Sebastian Heuer , Sebastian Bergmann + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace PharIo\Version; + +use PHPUnit\Framework\TestCase; + +/** + * @covers \PharIo\Version\Version + */ +class VersionTest extends TestCase { + /** + * @dataProvider versionProvider + * + * @param string $versionString + * @param string $expectedMajor + * @param string $expectedMinor + * @param string $expectedPatch + * @param string $expectedPreReleaseValue + * @param int $expectedReleaseCount + */ + public function testParsesVersionNumbers($versionString, $expectedMajor, $expectedMinor, $expectedPatch, $expectedPreReleaseValue = '', $expectedReleaseCount = 0) { + $version = new Version($versionString); + + $this->assertSame($expectedMajor, $version->getMajor()->getValue()); + $this->assertSame($expectedMinor, $version->getMinor()->getValue()); + $this->assertSame($expectedPatch, $version->getPatch()->getValue()); + if ($expectedPreReleaseValue !== '') { + $this->assertSame($expectedPreReleaseValue, $version->getPreReleaseSuffix()->getValue()); + } + if ($expectedReleaseCount !== 0) { + $this->assertSame($expectedReleaseCount, $version->getPreReleaseSuffix()->getNumber()); + } + + $this->assertSame($versionString, $version->getVersionString()); + } + + public function versionProvider() { + return [ + ['0.0.1', '0', '0', '1'], + ['0.1.2', '0', '1', '2'], + ['1.0.0-alpha', '1', '0', '0', 'alpha'], + ['3.4.12-dev3', '3', '4', '12', 'dev', 3], + ]; + } + + /** + * @dataProvider versionGreaterThanProvider + * + * @param Version $versionA + * @param Version $versionB + * @param bool $expectedResult + */ + public function testIsGreaterThan(Version $versionA, Version $versionB, $expectedResult) { + $this->assertSame($expectedResult, $versionA->isGreaterThan($versionB)); + } + + /** + * @return array + */ + public function versionGreaterThanProvider() { + return [ + [new Version('1.0.0'), new Version('1.0.1'), false], + [new Version('1.0.1'), new Version('1.0.0'), true], + [new Version('1.1.0'), new Version('1.0.1'), true], + [new Version('1.1.0'), new Version('2.0.1'), false], + [new Version('1.1.0'), new Version('1.1.0'), false], + [new Version('2.5.8'), new Version('1.6.8'), true], + [new Version('2.5.8'), new Version('2.6.8'), false], + [new Version('2.5.8'), new Version('3.1.2'), false], + ]; + } + + /** + * @dataProvider invalidVersionStringProvider + * + * @param string $versionString + */ + public function testThrowsExceptionIfVersionStringDoesNotFollowSemVer($versionString) + { + $this->expectException(InvalidVersionException::class); + new Version($versionString); + } + + /** + * @return array + */ + public function invalidVersionStringProvider() + { + return [ + ['foo'], + ['0.0.1-dev+ABC', '0', '0', '1', 'dev', 'ABC'], + ['1.0.0-x.7.z.92', '1', '0', '0', 'x.7.z.92'] + ]; + } + +} diff --git a/lib/composer/vendor/phpdocumentor/reflection-common/.gitignore b/lib/composer/vendor/phpdocumentor/reflection-common/.gitignore deleted file mode 100644 index c56f67191..000000000 --- a/lib/composer/vendor/phpdocumentor/reflection-common/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -composer.phar -vendor/ -build/ - diff --git a/lib/composer/vendor/phpdocumentor/reflection-common/.travis.yml b/lib/composer/vendor/phpdocumentor/reflection-common/.travis.yml new file mode 100644 index 000000000..958ecf864 --- /dev/null +++ b/lib/composer/vendor/phpdocumentor/reflection-common/.travis.yml @@ -0,0 +1,35 @@ +language: php +php: + - 5.5 + - 5.6 + - 7.0 + - 7.1 + - hhvm + - nightly + +matrix: + allow_failures: + - php: + - hhvm + - nightly + +cache: + directories: + - $HOME/.composer/cache + +script: + - vendor/bin/phpunit --coverage-clover=coverage.clover -v + - composer update --no-interaction --prefer-source + - vendor/bin/phpunit -v + +before_script: + - composer install --no-interaction + +after_script: + - if [ $TRAVIS_PHP_VERSION = '5.6' ]; then wget https://scrutinizer-ci.com/ocular.phar; php ocular.phar code-coverage:upload --format=php-clover coverage.clover; fi + +notifications: + irc: "irc.freenode.org#phpdocumentor" + email: + - me@mikevanriel.com + - ashnazg@php.net diff --git a/lib/composer/vendor/phpdocumentor/reflection-common/README.md b/lib/composer/vendor/phpdocumentor/reflection-common/README.md index 52b12bc01..68a80c82f 100644 --- a/lib/composer/vendor/phpdocumentor/reflection-common/README.md +++ b/lib/composer/vendor/phpdocumentor/reflection-common/README.md @@ -1 +1,2 @@ # ReflectionCommon +[![Build Status](https://travis-ci.org/phpDocumentor/ReflectionCommon.svg?branch=master)](https://travis-ci.org/phpDocumentor/ReflectionCommon) diff --git a/lib/composer/vendor/phpdocumentor/reflection-common/composer.lock b/lib/composer/vendor/phpdocumentor/reflection-common/composer.lock deleted file mode 100644 index e01dc3c16..000000000 --- a/lib/composer/vendor/phpdocumentor/reflection-common/composer.lock +++ /dev/null @@ -1,974 +0,0 @@ -{ - "_readme": [ - "This file locks the dependencies of your project to a known state", - "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", - "This file is @generated automatically" - ], - "hash": "49ee00389e4ccd00d7e93a147103b2ab", - "packages": [], - "packages-dev": [ - { - "name": "doctrine/instantiator", - "version": "1.0.4", - "source": { - "type": "git", - "url": "https://github.com/doctrine/instantiator.git", - "reference": "f976e5de371104877ebc89bd8fecb0019ed9c119" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/f976e5de371104877ebc89bd8fecb0019ed9c119", - "reference": "f976e5de371104877ebc89bd8fecb0019ed9c119", - "shasum": "" - }, - "require": { - "php": ">=5.3,<8.0-DEV" - }, - "require-dev": { - "athletic/athletic": "~0.1.8", - "ext-pdo": "*", - "ext-phar": "*", - "phpunit/phpunit": "~4.0", - "squizlabs/php_codesniffer": "2.0.*@ALPHA" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-0": { - "Doctrine\\Instantiator\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com", - "homepage": "http://ocramius.github.com/" - } - ], - "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", - "homepage": "https://github.com/doctrine/instantiator", - "keywords": [ - "constructor", - "instantiate" - ], - "time": "2014-10-13 12:58:55" - }, - { - "name": "phpdocumentor/reflection-docblock", - "version": "2.0.4", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "d68dbdc53dc358a816f00b300704702b2eaff7b8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/d68dbdc53dc358a816f00b300704702b2eaff7b8", - "reference": "d68dbdc53dc358a816f00b300704702b2eaff7b8", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "require-dev": { - "phpunit/phpunit": "~4.0" - }, - "suggest": { - "dflydev/markdown": "~1.0", - "erusev/parsedown": "~1.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "autoload": { - "psr-0": { - "phpDocumentor": [ - "src/" - ] - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike van Riel", - "email": "mike.vanriel@naenius.com" - } - ], - "time": "2015-02-03 12:10:50" - }, - { - "name": "phpspec/prophecy", - "version": "v1.4.1", - "source": { - "type": "git", - "url": "https://github.com/phpspec/prophecy.git", - "reference": "3132b1f44c7bf2ec4c7eb2d3cb78fdeca760d373" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/3132b1f44c7bf2ec4c7eb2d3cb78fdeca760d373", - "reference": "3132b1f44c7bf2ec4c7eb2d3cb78fdeca760d373", - "shasum": "" - }, - "require": { - "doctrine/instantiator": "^1.0.2", - "phpdocumentor/reflection-docblock": "~2.0", - "sebastian/comparator": "~1.1" - }, - "require-dev": { - "phpspec/phpspec": "~2.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.4.x-dev" - } - }, - "autoload": { - "psr-0": { - "Prophecy\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Konstantin Kudryashov", - "email": "ever.zet@gmail.com", - "homepage": "http://everzet.com" - }, - { - "name": "Marcello Duarte", - "email": "marcello.duarte@gmail.com" - } - ], - "description": "Highly opinionated mocking framework for PHP 5.3+", - "homepage": "https://github.com/phpspec/prophecy", - "keywords": [ - "Double", - "Dummy", - "fake", - "mock", - "spy", - "stub" - ], - "time": "2015-04-27 22:15:08" - }, - { - "name": "phpunit/php-code-coverage", - "version": "2.1.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "6b7d2094ca2a685a2cad846cb7cd7a30e8b9470f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/6b7d2094ca2a685a2cad846cb7cd7a30e8b9470f", - "reference": "6b7d2094ca2a685a2cad846cb7cd7a30e8b9470f", - "shasum": "" - }, - "require": { - "php": ">=5.3.3", - "phpunit/php-file-iterator": "~1.3", - "phpunit/php-text-template": "~1.2", - "phpunit/php-token-stream": "~1.3", - "sebastian/environment": "~1.0", - "sebastian/version": "~1.0" - }, - "require-dev": { - "ext-xdebug": ">=2.1.4", - "phpunit/phpunit": "~4" - }, - "suggest": { - "ext-dom": "*", - "ext-xdebug": ">=2.2.1", - "ext-xmlwriter": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.1.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", - "role": "lead" - } - ], - "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", - "homepage": "https://github.com/sebastianbergmann/php-code-coverage", - "keywords": [ - "coverage", - "testing", - "xunit" - ], - "time": "2015-06-01 07:35:26" - }, - { - "name": "phpunit/php-file-iterator", - "version": "1.4.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "a923bb15680d0089e2316f7a4af8f437046e96bb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/a923bb15680d0089e2316f7a4af8f437046e96bb", - "reference": "a923bb15680d0089e2316f7a4af8f437046e96bb", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.4.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", - "role": "lead" - } - ], - "description": "FilterIterator implementation that filters files based on a list of suffixes.", - "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", - "keywords": [ - "filesystem", - "iterator" - ], - "time": "2015-04-02 05:19:05" - }, - { - "name": "phpunit/php-text-template", - "version": "1.2.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "206dfefc0ffe9cebf65c413e3d0e809c82fbf00a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/206dfefc0ffe9cebf65c413e3d0e809c82fbf00a", - "reference": "206dfefc0ffe9cebf65c413e3d0e809c82fbf00a", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "type": "library", - "autoload": { - "classmap": [ - "Text/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "include-path": [ - "" - ], - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", - "role": "lead" - } - ], - "description": "Simple template engine.", - "homepage": "https://github.com/sebastianbergmann/php-text-template/", - "keywords": [ - "template" - ], - "time": "2014-01-30 17:20:04" - }, - { - "name": "phpunit/php-timer", - "version": "1.0.5", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "19689d4354b295ee3d8c54b4f42c3efb69cbc17c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/19689d4354b295ee3d8c54b4f42c3efb69cbc17c", - "reference": "19689d4354b295ee3d8c54b4f42c3efb69cbc17c", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "type": "library", - "autoload": { - "classmap": [ - "PHP/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "include-path": [ - "" - ], - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", - "role": "lead" - } - ], - "description": "Utility class for timing", - "homepage": "https://github.com/sebastianbergmann/php-timer/", - "keywords": [ - "timer" - ], - "time": "2013-08-02 07:42:54" - }, - { - "name": "phpunit/php-token-stream", - "version": "1.4.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-token-stream.git", - "reference": "eab81d02569310739373308137284e0158424330" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/eab81d02569310739373308137284e0158424330", - "reference": "eab81d02569310739373308137284e0158424330", - "shasum": "" - }, - "require": { - "ext-tokenizer": "*", - "php": ">=5.3.3" - }, - "require-dev": { - "phpunit/phpunit": "~4.2" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.4-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Wrapper around PHP's tokenizer extension.", - "homepage": "https://github.com/sebastianbergmann/php-token-stream/", - "keywords": [ - "tokenizer" - ], - "time": "2015-04-08 04:46:07" - }, - { - "name": "phpunit/phpunit", - "version": "4.6.9", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "816d12536a7a032adc3b68737f82cfbbf98b79c1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/816d12536a7a032adc3b68737f82cfbbf98b79c1", - "reference": "816d12536a7a032adc3b68737f82cfbbf98b79c1", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-json": "*", - "ext-pcre": "*", - "ext-reflection": "*", - "ext-spl": "*", - "php": ">=5.3.3", - "phpspec/prophecy": "~1.3,>=1.3.1", - "phpunit/php-code-coverage": "~2.0,>=2.0.11", - "phpunit/php-file-iterator": "~1.4", - "phpunit/php-text-template": "~1.2", - "phpunit/php-timer": "~1.0", - "phpunit/phpunit-mock-objects": "~2.3", - "sebastian/comparator": "~1.1", - "sebastian/diff": "~1.2", - "sebastian/environment": "~1.2", - "sebastian/exporter": "~1.2", - "sebastian/global-state": "~1.0", - "sebastian/version": "~1.0", - "symfony/yaml": "~2.1|~3.0" - }, - "suggest": { - "phpunit/php-invoker": "~1.1" - }, - "bin": [ - "phpunit" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.6.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "The PHP Unit Testing framework.", - "homepage": "https://phpunit.de/", - "keywords": [ - "phpunit", - "testing", - "xunit" - ], - "time": "2015-05-29 06:00:03" - }, - { - "name": "phpunit/phpunit-mock-objects", - "version": "2.3.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", - "reference": "253c005852591fd547fc18cd5b7b43a1ec82d8f7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/253c005852591fd547fc18cd5b7b43a1ec82d8f7", - "reference": "253c005852591fd547fc18cd5b7b43a1ec82d8f7", - "shasum": "" - }, - "require": { - "doctrine/instantiator": "~1.0,>=1.0.2", - "php": ">=5.3.3", - "phpunit/php-text-template": "~1.2" - }, - "require-dev": { - "phpunit/phpunit": "~4.4" - }, - "suggest": { - "ext-soap": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.3.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", - "role": "lead" - } - ], - "description": "Mock Object library for PHPUnit", - "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/", - "keywords": [ - "mock", - "xunit" - ], - "time": "2015-05-29 05:19:18" - }, - { - "name": "sebastian/comparator", - "version": "1.1.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "1dd8869519a225f7f2b9eb663e225298fade819e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/1dd8869519a225f7f2b9eb663e225298fade819e", - "reference": "1dd8869519a225f7f2b9eb663e225298fade819e", - "shasum": "" - }, - "require": { - "php": ">=5.3.3", - "sebastian/diff": "~1.2", - "sebastian/exporter": "~1.2" - }, - "require-dev": { - "phpunit/phpunit": "~4.4" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.1.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@2bepublished.at" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Provides the functionality to compare PHP values for equality", - "homepage": "http://www.github.com/sebastianbergmann/comparator", - "keywords": [ - "comparator", - "compare", - "equality" - ], - "time": "2015-01-29 16:28:08" - }, - { - "name": "sebastian/diff", - "version": "1.3.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "863df9687835c62aa423a22412d26fa2ebde3fd3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/863df9687835c62aa423a22412d26fa2ebde3fd3", - "reference": "863df9687835c62aa423a22412d26fa2ebde3fd3", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "require-dev": { - "phpunit/phpunit": "~4.2" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.3-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Kore Nordmann", - "email": "mail@kore-nordmann.de" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Diff implementation", - "homepage": "http://www.github.com/sebastianbergmann/diff", - "keywords": [ - "diff" - ], - "time": "2015-02-22 15:13:53" - }, - { - "name": "sebastian/environment", - "version": "1.2.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "5a8c7d31914337b69923db26c4221b81ff5a196e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/5a8c7d31914337b69923db26c4221b81ff5a196e", - "reference": "5a8c7d31914337b69923db26c4221b81ff5a196e", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "require-dev": { - "phpunit/phpunit": "~4.4" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.3.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Provides functionality to handle HHVM/PHP environments", - "homepage": "http://www.github.com/sebastianbergmann/environment", - "keywords": [ - "Xdebug", - "environment", - "hhvm" - ], - "time": "2015-01-01 10:01:08" - }, - { - "name": "sebastian/exporter", - "version": "1.2.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "84839970d05254c73cde183a721c7af13aede943" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/84839970d05254c73cde183a721c7af13aede943", - "reference": "84839970d05254c73cde183a721c7af13aede943", - "shasum": "" - }, - "require": { - "php": ">=5.3.3", - "sebastian/recursion-context": "~1.0" - }, - "require-dev": { - "phpunit/phpunit": "~4.4" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.2.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@2bepublished.at" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Adam Harvey", - "email": "aharvey@php.net" - } - ], - "description": "Provides the functionality to export PHP variables for visualization", - "homepage": "http://www.github.com/sebastianbergmann/exporter", - "keywords": [ - "export", - "exporter" - ], - "time": "2015-01-27 07:23:06" - }, - { - "name": "sebastian/global-state", - "version": "1.0.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "c7428acdb62ece0a45e6306f1ae85e1c05b09c01" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/c7428acdb62ece0a45e6306f1ae85e1c05b09c01", - "reference": "c7428acdb62ece0a45e6306f1ae85e1c05b09c01", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "require-dev": { - "phpunit/phpunit": "~4.2" - }, - "suggest": { - "ext-uopz": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Snapshotting of global state", - "homepage": "http://www.github.com/sebastianbergmann/global-state", - "keywords": [ - "global state" - ], - "time": "2014-10-06 09:23:50" - }, - { - "name": "sebastian/recursion-context", - "version": "1.0.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "3989662bbb30a29d20d9faa04a846af79b276252" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/3989662bbb30a29d20d9faa04a846af79b276252", - "reference": "3989662bbb30a29d20d9faa04a846af79b276252", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "require-dev": { - "phpunit/phpunit": "~4.4" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Adam Harvey", - "email": "aharvey@php.net" - } - ], - "description": "Provides functionality to recursively process PHP variables", - "homepage": "http://www.github.com/sebastianbergmann/recursion-context", - "time": "2015-01-24 09:48:32" - }, - { - "name": "sebastian/version", - "version": "1.0.5", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/version.git", - "reference": "ab931d46cd0d3204a91e1b9a40c4bc13032b58e4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/ab931d46cd0d3204a91e1b9a40c4bc13032b58e4", - "reference": "ab931d46cd0d3204a91e1b9a40c4bc13032b58e4", - "shasum": "" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library that helps with managing the version number of Git-hosted PHP projects", - "homepage": "https://github.com/sebastianbergmann/version", - "time": "2015-02-24 06:35:25" - }, - { - "name": "symfony/yaml", - "version": "v2.7.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/Yaml.git", - "reference": "4a29a5248aed4fb45f626a7bbbd330291492f5c3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/Yaml/zipball/4a29a5248aed4fb45f626a7bbbd330291492f5c3", - "reference": "4a29a5248aed4fb45f626a7bbbd330291492f5c3", - "shasum": "" - }, - "require": { - "php": ">=5.3.9" - }, - "require-dev": { - "symfony/phpunit-bridge": "~2.7" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.7-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Component\\Yaml\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony Yaml Component", - "homepage": "https://symfony.com", - "time": "2015-05-02 15:21:08" - } - ], - "aliases": [], - "minimum-stability": "stable", - "stability-flags": [], - "prefer-stable": false, - "prefer-lowest": false, - "platform": [], - "platform-dev": [] -} diff --git a/lib/composer/vendor/phpdocumentor/reflection-common/phpunit.xml.dist b/lib/composer/vendor/phpdocumentor/reflection-common/phpunit.xml.dist deleted file mode 100644 index 31811501b..000000000 --- a/lib/composer/vendor/phpdocumentor/reflection-common/phpunit.xml.dist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - ./tests/unit/ - - - - - src - - - - - - - - diff --git a/lib/composer/vendor/phpdocumentor/reflection-common/src/Fqsen.php b/lib/composer/vendor/phpdocumentor/reflection-common/src/Fqsen.php index c7be3f15b..ce88d03ff 100644 --- a/lib/composer/vendor/phpdocumentor/reflection-common/src/Fqsen.php +++ b/lib/composer/vendor/phpdocumentor/reflection-common/src/Fqsen.php @@ -38,7 +38,11 @@ final class Fqsen public function __construct($fqsen) { $matches = array(); - $result = preg_match('/^\\\\([\\w_\\\\]*)(?:[:]{2}\\$?([\\w_]+))?(?:\\(\\))?$/', $fqsen, $matches); + $result = preg_match( + '/^\\\\([a-zA-Z_\\x7f-\\xff][a-zA-Z0-9_\\x7f-\\xff\\\\]*)?(?:[:]{2}\\$?([a-zA-Z_\\x7f-\\xff][a-zA-Z0-9_\\x7f-\\xff]*))?(?:\\(\\))?$/', + $fqsen, + $matches + ); if ($result === 0) { throw new \InvalidArgumentException( diff --git a/lib/composer/vendor/phpdocumentor/reflection-common/tests/common/bootstrap.php b/lib/composer/vendor/phpdocumentor/reflection-common/tests/common/bootstrap.php deleted file mode 100644 index 6e46d5e63..000000000 --- a/lib/composer/vendor/phpdocumentor/reflection-common/tests/common/bootstrap.php +++ /dev/null @@ -1,10 +0,0 @@ -assertEquals($name, $instance->getName()); - } - - /** - * Data provider for ValidFormats tests. Contains a complete list from psr-5 draft. - * - * @return array - */ - public function validFqsenProvider() - { - return [ - ['\\', ''], - ['\My\Space', 'Space'], - ['\My\Space\myFunction()', 'myFunction'], - ['\My\Space\MY_CONSTANT', 'MY_CONSTANT'], - ['\My\Space\MY_CONSTANT2', 'MY_CONSTANT2'], - ['\My\Space\MyClass', 'MyClass'], - ['\My\Space\MyInterface', 'MyInterface'], - ['\My\Space\MyTrait', 'MyTrait'], - ['\My\Space\MyClass::myMethod()', 'myMethod'], - ['\My\Space\MyClass::$my_property', 'my_property'], - ['\My\Space\MyClass::MY_CONSTANT', 'MY_CONSTANT'], - ]; - } - - /** - * @param string $fqsen - * @covers ::__construct - * @dataProvider invalidFqsenProvider - * @expectedException \InvalidArgumentException - */ - public function testInValidFormats($fqsen) - { - new Fqsen($fqsen); - } - - /** - * Data provider for invalidFormats tests. Contains a complete list from psr-5 draft. - * - * @return array - */ - public function invalidFqsenProvider() - { - return [ - ['\My\*'], - ['\My\Space\.()'], - ['My\Space'], - ]; - } - - /** - * @covers ::__construct - * @covers ::__toString - */ - public function testToString() - { - $className = new Fqsen('\\phpDocumentor\\Application'); - - $this->assertEquals('\\phpDocumentor\\Application', (string)$className); - } -} diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/.coveralls.yml b/lib/composer/vendor/phpdocumentor/reflection-docblock/.coveralls.yml new file mode 100644 index 000000000..c512a3d57 --- /dev/null +++ b/lib/composer/vendor/phpdocumentor/reflection-docblock/.coveralls.yml @@ -0,0 +1,3 @@ +service_name: travis-ci +coverage_clover: coverage.xml +json_path: coverage.json diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/.gitignore b/lib/composer/vendor/phpdocumentor/reflection-docblock/.gitignore deleted file mode 100644 index 3ce5adbbd..000000000 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -.idea -vendor diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/.scrutinizer.yml b/lib/composer/vendor/phpdocumentor/reflection-docblock/.scrutinizer.yml deleted file mode 100644 index 5061d5239..000000000 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/.scrutinizer.yml +++ /dev/null @@ -1,32 +0,0 @@ -before_commands: - - "composer install --no-dev --prefer-source" - -tools: - external_code_coverage: true - php_code_sniffer: - enabled: true - config: - standard: PSR2 - filter: - paths: ["src/*", "tests/*"] - php_cpd: - enabled: true - excluded_dirs: ["tests", "vendor"] - php_loc: - enabled: true - excluded_dirs: ["tests", "vendor"] - php_mess_detector: - enabled: true - config: - ruleset: phpmd.xml.dist - design_rules: { eval_expression: false } - filter: - paths: ["src/*"] - php_pdepend: - enabled: true - excluded_dirs: ["tests", "vendor"] - php_analyzer: - enabled: true - filter: - paths: ["src/*", "tests/*"] - sensiolabs_security_checker: true diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/.travis.yml b/lib/composer/vendor/phpdocumentor/reflection-docblock/.travis.yml deleted file mode 100644 index 920958df4..000000000 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/.travis.yml +++ /dev/null @@ -1,36 +0,0 @@ -language: php -php: - - 5.5 - - 5.6 - - 7.0 - - hhvm - - nightly - -matrix: - allow_failures: - - php: - - hhvm - - nightly - -cache: - directories: - - $HOME/.composer/cache - -script: - - vendor/bin/phpunit --coverage-clover=coverage.clover -v - - composer update --no-interaction --prefer-source - - vendor/bin/phpunit -v - -before_script: - - composer install --no-interaction - -after_script: - - wget https://scrutinizer-ci.com/ocular.phar - - php ocular.phar code-coverage:upload --format=php-clover coverage.clover - -notifications: - irc: "irc.freenode.org#phpdocumentor" - email: - - mike.vanriel@naenius.com - - ashnazg@php.net - - boen.robot@gmail.com diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/README.md b/lib/composer/vendor/phpdocumentor/reflection-docblock/README.md index a1984a15e..5a7d326de 100644 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/README.md +++ b/lib/composer/vendor/phpdocumentor/reflection-docblock/README.md @@ -10,16 +10,12 @@ that is 100% compatible with the [PHPDoc standard](http://phpdoc.org/docs/latest With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock. -> **Note**: *this is a core component of phpDocumentor and is constantly being -> optimized for performance.* - Installation ------------ -You can install the component in the following ways: - -* Use the official Github repository (https://github.com/phpDocumentor/ReflectionDocBlock) -* Via Composer (http://packagist.org/packages/phpdocumentor/reflection-docblock) +```bash +composer require phpdocumentor/reflection-docblock +``` Usage ----- @@ -52,18 +48,20 @@ $docblock = $factory->create($docComment); ``` The `create` method will yield an object of type `\phpDocumentor\Reflection\DocBlock` -whose methods can be queried as shown in the following example. +whose methods can be queried: ```php -// Should contain the summary for this DocBlock +// Contains the summary for this DocBlock $summary = $docblock->getSummary(); -// Contains an object of type \phpDocumentor\Reflection\DocBlock\Description; -// you can either cast it to string or use the render method to get a string -// representation of the Description. +// Contains \phpDocumentor\Reflection\DocBlock\Description object $description = $docblock->getDescription(); -``` -> For more examples it would be best to review the scripts in the `/examples` -> folder. +// You can either cast it to string +$description = (string) $docblock->getDescription(); + +// Or use the render method to get a string representation of the Description. +$description = $docblock->getDescription()->render(); +``` +> For more examples it would be best to review the scripts in the [`/examples` folder](/examples). diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/composer.json b/lib/composer/vendor/phpdocumentor/reflection-docblock/composer.json index 85be2fdd0..e3dc38a9e 100644 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/composer.json +++ b/lib/composer/vendor/phpdocumentor/reflection-docblock/composer.json @@ -10,9 +10,9 @@ } ], "require": { - "php": ">=5.5", - "phpdocumentor/reflection-common": "^1.0@dev", - "phpdocumentor/type-resolver": "^0.2.0", + "php": "^7.0", + "phpdocumentor/reflection-common": "^1.0.0", + "phpdocumentor/type-resolver": "^0.4.0", "webmozart/assert": "^1.0" }, "autoload": { @@ -22,7 +22,13 @@ "psr-4": {"phpDocumentor\\Reflection\\": ["tests/unit"]} }, "require-dev": { - "mockery/mockery": "^0.9.4", - "phpunit/phpunit": "^4.4" + "mockery/mockery": "^1.0", + "phpunit/phpunit": "^6.4", + "doctrine/instantiator": "~1.0.5" + }, + "extra": { + "branch-alias": { + "dev-master": "4.x-dev" + } } } diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/composer.lock b/lib/composer/vendor/phpdocumentor/reflection-docblock/composer.lock deleted file mode 100644 index b4da3c1b4..000000000 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/composer.lock +++ /dev/null @@ -1,1120 +0,0 @@ -{ - "_readme": [ - "This file locks the dependencies of your project to a known state", - "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", - "This file is @generated automatically" - ], - "hash": "9dfabded4193c3fd2ec85874de3b2e3c", - "content-hash": "69f6ae6608b8524fa04ddb0264bbf091", - "packages": [ - { - "name": "phpdocumentor/reflection-common", - "version": "dev-master", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionCommon.git", - "reference": "9969bd1c9661a73fdab104df7dbf132639d5c4d8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/9969bd1c9661a73fdab104df7dbf132639d5c4d8", - "reference": "9969bd1c9661a73fdab104df7dbf132639d5c4d8", - "shasum": "" - }, - "require": { - "php": ">=5.5" - }, - "require-dev": { - "phpunit/phpunit": "^4.6" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": [ - "src" - ] - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jaap van Otterdijk", - "email": "opensource@ijaap.nl" - } - ], - "description": "Common reflection classes used by phpdocumentor to reflect the code structure", - "homepage": "http://www.phpdoc.org", - "keywords": [ - "FQSEN", - "phpDocumentor", - "phpdoc", - "reflection", - "static analysis" - ], - "time": "2015-06-12 22:21:38" - }, - { - "name": "phpdocumentor/type-resolver", - "version": "0.2", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "b39c7a5b194f9ed7bd0dd345c751007a41862443" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/b39c7a5b194f9ed7bd0dd345c751007a41862443", - "reference": "b39c7a5b194f9ed7bd0dd345c751007a41862443", - "shasum": "" - }, - "require": { - "php": ">=5.5", - "phpdocumentor/reflection-common": "^1.0" - }, - "require-dev": { - "mockery/mockery": "^0.9.4", - "phpunit/phpunit": "^5.2||^4.8.24" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": [ - "src/" - ] - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" - } - ], - "time": "2016-06-10 07:14:17" - }, - { - "name": "webmozart/assert", - "version": "1.0.1", - "source": { - "type": "git", - "url": "https://github.com/webmozart/assert.git", - "reference": "b8ef76d0f0c3b9a0a1bc987085fe0a0ddba984ab" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/webmozart/assert/zipball/b8ef76d0f0c3b9a0a1bc987085fe0a0ddba984ab", - "reference": "b8ef76d0f0c3b9a0a1bc987085fe0a0ddba984ab", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "autoload": { - "psr-4": { - "Webmozart\\Assert\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" - } - ], - "description": "Assertions to validate method input/output with nice error messages.", - "keywords": [ - "assert", - "check", - "validate" - ], - "time": "2015-05-12 15:19:25" - } - ], - "packages-dev": [ - { - "name": "doctrine/instantiator", - "version": "1.0.5", - "source": { - "type": "git", - "url": "https://github.com/doctrine/instantiator.git", - "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d", - "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d", - "shasum": "" - }, - "require": { - "php": ">=5.3,<8.0-DEV" - }, - "require-dev": { - "athletic/athletic": "~0.1.8", - "ext-pdo": "*", - "ext-phar": "*", - "phpunit/phpunit": "~4.0", - "squizlabs/php_codesniffer": "~2.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com", - "homepage": "http://ocramius.github.com/" - } - ], - "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", - "homepage": "https://github.com/doctrine/instantiator", - "keywords": [ - "constructor", - "instantiate" - ], - "time": "2015-06-14 21:17:01" - }, - { - "name": "hamcrest/hamcrest-php", - "version": "v1.2.2", - "source": { - "type": "git", - "url": "https://github.com/hamcrest/hamcrest-php.git", - "reference": "b37020aa976fa52d3de9aa904aa2522dc518f79c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/b37020aa976fa52d3de9aa904aa2522dc518f79c", - "reference": "b37020aa976fa52d3de9aa904aa2522dc518f79c", - "shasum": "" - }, - "require": { - "php": ">=5.3.2" - }, - "replace": { - "cordoval/hamcrest-php": "*", - "davedevelopment/hamcrest-php": "*", - "kodova/hamcrest-php": "*" - }, - "require-dev": { - "phpunit/php-file-iterator": "1.3.3", - "satooshi/php-coveralls": "dev-master" - }, - "type": "library", - "autoload": { - "classmap": [ - "hamcrest" - ], - "files": [ - "hamcrest/Hamcrest.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD" - ], - "description": "This is the PHP port of Hamcrest Matchers", - "keywords": [ - "test" - ], - "time": "2015-05-11 14:41:42" - }, - { - "name": "mockery/mockery", - "version": "0.9.4", - "source": { - "type": "git", - "url": "https://github.com/padraic/mockery.git", - "reference": "70bba85e4aabc9449626651f48b9018ede04f86b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/padraic/mockery/zipball/70bba85e4aabc9449626651f48b9018ede04f86b", - "reference": "70bba85e4aabc9449626651f48b9018ede04f86b", - "shasum": "" - }, - "require": { - "hamcrest/hamcrest-php": "~1.1", - "lib-pcre": ">=7.0", - "php": ">=5.3.2" - }, - "require-dev": { - "phpunit/phpunit": "~4.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "0.9.x-dev" - } - }, - "autoload": { - "psr-0": { - "Mockery": "library/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Pádraic Brady", - "email": "padraic.brady@gmail.com", - "homepage": "http://blog.astrumfutura.com" - }, - { - "name": "Dave Marshall", - "email": "dave.marshall@atstsolutions.co.uk", - "homepage": "http://davedevelopment.co.uk" - } - ], - "description": "Mockery is a simple yet flexible PHP mock object framework for use in unit testing with PHPUnit, PHPSpec or any other testing framework. Its core goal is to offer a test double framework with a succinct API capable of clearly defining all possible object operations and interactions using a human readable Domain Specific Language (DSL). Designed as a drop in alternative to PHPUnit's phpunit-mock-objects library, Mockery is easy to integrate with PHPUnit and can operate alongside phpunit-mock-objects without the World ending.", - "homepage": "http://github.com/padraic/mockery", - "keywords": [ - "BDD", - "TDD", - "library", - "mock", - "mock objects", - "mockery", - "stub", - "test", - "test double", - "testing" - ], - "time": "2015-04-02 19:54:00" - }, - { - "name": "phpunit/php-code-coverage", - "version": "2.1.6", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "631e365cf26bb2c078683e8d9bcf8bc631ac4d44" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/631e365cf26bb2c078683e8d9bcf8bc631ac4d44", - "reference": "631e365cf26bb2c078683e8d9bcf8bc631ac4d44", - "shasum": "" - }, - "require": { - "php": ">=5.3.3", - "phpunit/php-file-iterator": "~1.3", - "phpunit/php-text-template": "~1.2", - "phpunit/php-token-stream": "~1.3", - "sebastian/environment": "~1.0", - "sebastian/version": "~1.0" - }, - "require-dev": { - "ext-xdebug": ">=2.1.4", - "phpunit/phpunit": "~4" - }, - "suggest": { - "ext-dom": "*", - "ext-xdebug": ">=2.2.1", - "ext-xmlwriter": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.1.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", - "role": "lead" - } - ], - "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", - "homepage": "https://github.com/sebastianbergmann/php-code-coverage", - "keywords": [ - "coverage", - "testing", - "xunit" - ], - "time": "2015-06-19 07:11:55" - }, - { - "name": "phpunit/php-file-iterator", - "version": "1.3.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "acd690379117b042d1c8af1fafd61bde001bf6bb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/acd690379117b042d1c8af1fafd61bde001bf6bb", - "reference": "acd690379117b042d1c8af1fafd61bde001bf6bb", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "type": "library", - "autoload": { - "classmap": [ - "File/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "include-path": [ - "" - ], - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", - "role": "lead" - } - ], - "description": "FilterIterator implementation that filters files based on a list of suffixes.", - "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", - "keywords": [ - "filesystem", - "iterator" - ], - "time": "2013-10-10 15:34:57" - }, - { - "name": "phpunit/php-text-template", - "version": "1.2.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", - "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Simple template engine.", - "homepage": "https://github.com/sebastianbergmann/php-text-template/", - "keywords": [ - "template" - ], - "time": "2015-06-21 13:50:34" - }, - { - "name": "phpunit/php-timer", - "version": "1.0.6", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "83fe1bdc5d47658b727595c14da140da92b3d66d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/83fe1bdc5d47658b727595c14da140da92b3d66d", - "reference": "83fe1bdc5d47658b727595c14da140da92b3d66d", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", - "role": "lead" - } - ], - "description": "Utility class for timing", - "homepage": "https://github.com/sebastianbergmann/php-timer/", - "keywords": [ - "timer" - ], - "time": "2015-06-13 07:35:30" - }, - { - "name": "phpunit/php-token-stream", - "version": "1.4.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-token-stream.git", - "reference": "7a9b0969488c3c54fd62b4d504b3ec758fd005d9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/7a9b0969488c3c54fd62b4d504b3ec758fd005d9", - "reference": "7a9b0969488c3c54fd62b4d504b3ec758fd005d9", - "shasum": "" - }, - "require": { - "ext-tokenizer": "*", - "php": ">=5.3.3" - }, - "require-dev": { - "phpunit/phpunit": "~4.2" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.4-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Wrapper around PHP's tokenizer extension.", - "homepage": "https://github.com/sebastianbergmann/php-token-stream/", - "keywords": [ - "tokenizer" - ], - "time": "2015-06-19 03:43:16" - }, - { - "name": "phpunit/phpunit", - "version": "4.4.5", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "2e8580deebb7d1ac92ac878595e6bffe01069c2a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/2e8580deebb7d1ac92ac878595e6bffe01069c2a", - "reference": "2e8580deebb7d1ac92ac878595e6bffe01069c2a", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-json": "*", - "ext-pcre": "*", - "ext-reflection": "*", - "ext-spl": "*", - "php": ">=5.3.3", - "phpunit/php-code-coverage": "~2.0", - "phpunit/php-file-iterator": "~1.3.2", - "phpunit/php-text-template": "~1.2", - "phpunit/php-timer": "~1.0.2", - "phpunit/phpunit-mock-objects": "~2.3", - "sebastian/comparator": "~1.0", - "sebastian/diff": "~1.1", - "sebastian/environment": "~1.1", - "sebastian/exporter": "~1.1", - "sebastian/global-state": "~1.0", - "sebastian/recursion-context": "~1.0", - "sebastian/version": "~1.0", - "symfony/yaml": "~2.0" - }, - "suggest": { - "phpunit/php-invoker": "~1.1" - }, - "bin": [ - "phpunit" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.4.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "The PHP Unit Testing framework.", - "homepage": "https://phpunit.de/", - "keywords": [ - "phpunit", - "testing", - "xunit" - ], - "time": "2015-01-27 16:06:15" - }, - { - "name": "phpunit/phpunit-mock-objects", - "version": "2.3.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", - "reference": "92408bb1968a81b3217a6fdf6c1a198da83caa35" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/92408bb1968a81b3217a6fdf6c1a198da83caa35", - "reference": "92408bb1968a81b3217a6fdf6c1a198da83caa35", - "shasum": "" - }, - "require": { - "doctrine/instantiator": "~1.0,>=1.0.2", - "php": ">=5.3.3", - "phpunit/php-text-template": "~1.2" - }, - "require-dev": { - "phpunit/phpunit": "~4.4" - }, - "suggest": { - "ext-soap": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.3.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", - "role": "lead" - } - ], - "description": "Mock Object library for PHPUnit", - "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/", - "keywords": [ - "mock", - "xunit" - ], - "time": "2015-06-11 15:55:48" - }, - { - "name": "sebastian/comparator", - "version": "1.1.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "1dd8869519a225f7f2b9eb663e225298fade819e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/1dd8869519a225f7f2b9eb663e225298fade819e", - "reference": "1dd8869519a225f7f2b9eb663e225298fade819e", - "shasum": "" - }, - "require": { - "php": ">=5.3.3", - "sebastian/diff": "~1.2", - "sebastian/exporter": "~1.2" - }, - "require-dev": { - "phpunit/phpunit": "~4.4" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.1.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@2bepublished.at" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Provides the functionality to compare PHP values for equality", - "homepage": "http://www.github.com/sebastianbergmann/comparator", - "keywords": [ - "comparator", - "compare", - "equality" - ], - "time": "2015-01-29 16:28:08" - }, - { - "name": "sebastian/diff", - "version": "1.3.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "863df9687835c62aa423a22412d26fa2ebde3fd3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/863df9687835c62aa423a22412d26fa2ebde3fd3", - "reference": "863df9687835c62aa423a22412d26fa2ebde3fd3", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "require-dev": { - "phpunit/phpunit": "~4.2" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.3-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Kore Nordmann", - "email": "mail@kore-nordmann.de" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Diff implementation", - "homepage": "http://www.github.com/sebastianbergmann/diff", - "keywords": [ - "diff" - ], - "time": "2015-02-22 15:13:53" - }, - { - "name": "sebastian/environment", - "version": "1.2.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "5a8c7d31914337b69923db26c4221b81ff5a196e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/5a8c7d31914337b69923db26c4221b81ff5a196e", - "reference": "5a8c7d31914337b69923db26c4221b81ff5a196e", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "require-dev": { - "phpunit/phpunit": "~4.4" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.3.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Provides functionality to handle HHVM/PHP environments", - "homepage": "http://www.github.com/sebastianbergmann/environment", - "keywords": [ - "Xdebug", - "environment", - "hhvm" - ], - "time": "2015-01-01 10:01:08" - }, - { - "name": "sebastian/exporter", - "version": "1.2.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "84839970d05254c73cde183a721c7af13aede943" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/84839970d05254c73cde183a721c7af13aede943", - "reference": "84839970d05254c73cde183a721c7af13aede943", - "shasum": "" - }, - "require": { - "php": ">=5.3.3", - "sebastian/recursion-context": "~1.0" - }, - "require-dev": { - "phpunit/phpunit": "~4.4" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.2.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@2bepublished.at" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Adam Harvey", - "email": "aharvey@php.net" - } - ], - "description": "Provides the functionality to export PHP variables for visualization", - "homepage": "http://www.github.com/sebastianbergmann/exporter", - "keywords": [ - "export", - "exporter" - ], - "time": "2015-01-27 07:23:06" - }, - { - "name": "sebastian/global-state", - "version": "1.0.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "c7428acdb62ece0a45e6306f1ae85e1c05b09c01" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/c7428acdb62ece0a45e6306f1ae85e1c05b09c01", - "reference": "c7428acdb62ece0a45e6306f1ae85e1c05b09c01", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "require-dev": { - "phpunit/phpunit": "~4.2" - }, - "suggest": { - "ext-uopz": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Snapshotting of global state", - "homepage": "http://www.github.com/sebastianbergmann/global-state", - "keywords": [ - "global state" - ], - "time": "2014-10-06 09:23:50" - }, - { - "name": "sebastian/recursion-context", - "version": "1.0.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "3989662bbb30a29d20d9faa04a846af79b276252" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/3989662bbb30a29d20d9faa04a846af79b276252", - "reference": "3989662bbb30a29d20d9faa04a846af79b276252", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "require-dev": { - "phpunit/phpunit": "~4.4" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Adam Harvey", - "email": "aharvey@php.net" - } - ], - "description": "Provides functionality to recursively process PHP variables", - "homepage": "http://www.github.com/sebastianbergmann/recursion-context", - "time": "2015-01-24 09:48:32" - }, - { - "name": "sebastian/version", - "version": "1.0.6", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/version.git", - "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/58b3a85e7999757d6ad81c787a1fbf5ff6c628c6", - "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6", - "shasum": "" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library that helps with managing the version number of Git-hosted PHP projects", - "homepage": "https://github.com/sebastianbergmann/version", - "time": "2015-06-21 13:59:46" - }, - { - "name": "symfony/yaml", - "version": "v2.7.1", - "source": { - "type": "git", - "url": "https://github.com/symfony/Yaml.git", - "reference": "9808e75c609a14f6db02f70fccf4ca4aab53c160" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/Yaml/zipball/9808e75c609a14f6db02f70fccf4ca4aab53c160", - "reference": "9808e75c609a14f6db02f70fccf4ca4aab53c160", - "shasum": "" - }, - "require": { - "php": ">=5.3.9" - }, - "require-dev": { - "symfony/phpunit-bridge": "~2.7" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.7-dev" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Component\\Yaml\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony Yaml Component", - "homepage": "https://symfony.com", - "time": "2015-06-10 15:30:22" - } - ], - "aliases": [], - "minimum-stability": "stable", - "stability-flags": { - "phpdocumentor/reflection-common": 20 - }, - "prefer-stable": false, - "prefer-lowest": false, - "platform": { - "php": ">=5.5" - }, - "platform-dev": [] -} diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/easy-coding-standard.neon b/lib/composer/vendor/phpdocumentor/reflection-docblock/easy-coding-standard.neon new file mode 100644 index 000000000..7c2ba6e2d --- /dev/null +++ b/lib/composer/vendor/phpdocumentor/reflection-docblock/easy-coding-standard.neon @@ -0,0 +1,31 @@ +includes: + - temp/ecs/config/clean-code.neon + - temp/ecs/config/psr2-checkers.neon + - temp/ecs/config/spaces.neon + - temp/ecs/config/common.neon + +checkers: + PhpCsFixer\Fixer\Operator\ConcatSpaceFixer: + spacing: one + +parameters: + exclude_checkers: + # from temp/ecs/config/common.neon + - PhpCsFixer\Fixer\ClassNotation\OrderedClassElementsFixer + - PhpCsFixer\Fixer\PhpUnit\PhpUnitStrictFixer + - PhpCsFixer\Fixer\ControlStructure\YodaStyleFixer + # from temp/ecs/config/spaces.neon + - PhpCsFixer\Fixer\Operator\NotOperatorWithSuccessorSpaceFixer + + skip: + SlevomatCodingStandard\Sniffs\Classes\UnusedPrivateElementsSniff: + # WIP code + - src/DocBlock/StandardTagFactory.php + PHP_CodeSniffer\Standards\Generic\Sniffs\CodeAnalysis\EmptyStatementSniff: + # WIP code + - src/DocBlock/StandardTagFactory.php + PHP_CodeSniffer\Standards\Squiz\Sniffs\Classes\ValidClassNameSniff: + - src/DocBlock/Tags/Return_.php + - src/DocBlock/Tags/Var_.php + PHP_CodeSniffer\Standards\Generic\Sniffs\NamingConventions\CamelCapsFunctionNameSniff: + - */tests/** diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/examples/01-interpreting-a-simple-docblock.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/examples/01-interpreting-a-simple-docblock.php deleted file mode 100644 index 6d67dea4c..000000000 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/examples/01-interpreting-a-simple-docblock.php +++ /dev/null @@ -1,27 +0,0 @@ -create($docComment); - -// Should contain the first line of the DocBlock -$summary = $docblock->getSummary(); - -// Contains an object of type Description; you can either cast it to string or use -// the render method to get a string representation of the Description. -// -// In subsequent examples we will be fiddling a bit more with the Description. -$description = $docblock->getDescription(); diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/examples/02-interpreting-tags.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/examples/02-interpreting-tags.php deleted file mode 100644 index 23995889c..000000000 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/examples/02-interpreting-tags.php +++ /dev/null @@ -1,24 +0,0 @@ -create($docComment); - -// You can check if a DocBlock has one or more see tags -$hasSeeTag = $docblock->hasTag('see'); - -// Or we can get a complete list of all tags -$tags = $docblock->getTags(); - -// But we can also grab all tags of a specific type, such as `see` -$seeTags = $docblock->getTagsByName('see'); diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/examples/03-reconstituting-a-docblock.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/examples/03-reconstituting-a-docblock.php deleted file mode 100644 index 6bc10baf4..000000000 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/examples/03-reconstituting-a-docblock.php +++ /dev/null @@ -1,27 +0,0 @@ -create($docComment); - -// Create the serializer that will reconstitute the DocBlock back to its original form. -$serializer = new Serializer(); - -// Reconstitution is performed by the `getDocComment()` method. -$reconstitutedDocComment = $serializer->getDocComment($docblock); - diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/examples/04-adding-your-own-tag.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/examples/04-adding-your-own-tag.php deleted file mode 100644 index 026d60693..000000000 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/examples/04-adding-your-own-tag.php +++ /dev/null @@ -1,135 +0,0 @@ - Important: Tag classes that act as Factories using the `create` method should implement the TagFactory interface. - */ -final class MyTag extends BaseTag implements StaticMethod -{ - /** - * A required property that is used by Formatters to reconstitute the complete tag line. - * - * @see Formatter - * - * @var string - */ - protected $name = 'my-tag'; - - /** - * The constructor for this Tag; this should contain all properties for this object. - * - * @param Description $description An example of how to add a Description to the tag; the Description is often - * an optional variable so passing null is allowed in this instance (though you can - * also construct an empty description object). - * - * @see BaseTag for the declaration of the description property and getDescription method. - */ - public function __construct(Description $description = null) - { - $this->description = $description; - } - - /** - * A static Factory that creates a new instance of the current Tag. - * - * In this example the MyTag tag can be created by passing a description text as $body. Because we have added - * a $descriptionFactory that is type-hinted as DescriptionFactory we can now construct a new Description object - * and pass that to the constructor. - * - * > You could directly instantiate a Description object here but that won't be parsed for inline tags and Types - * > won't be resolved. The DescriptionFactory will take care of those actions. - * - * The `create` method's interface states that this method only features a single parameter (`$body`) but the - * {@see TagFactory} will read the signature of this method and if it has more parameters then it will try - * to find declarations for it in the ServiceLocator of the TagFactory (see {@see TagFactory::$serviceLocator}). - * - * > Important: all properties following the `$body` should default to `null`, otherwise PHP will error because - * > it no longer matches the interface. This is why you often see the default tags check that an optional argument - * > is not null nonetheless. - * - * @param string $body - * @param DescriptionFactory $descriptionFactory - * @param Context|null $context The Context is used to resolve Types and FQSENs, although optional - * it is highly recommended to pass it. If you omit it then it is assumed that - * the DocBlock is in the global namespace and has no `use` statements. - * - * @see Tag for the interface declaration of the `create` method. - * @see Tag::create() for more information on this method's workings. - * - * @return MyTag - */ - public static function create($body, DescriptionFactory $descriptionFactory = null, Context $context = null) - { - Assert::string($body); - Assert::notNull($descriptionFactory); - - return new static($descriptionFactory->create($body, $context)); - } - - /** - * Returns a rendition of the original tag line. - * - * This method is used to reconstitute a DocBlock into its original form by the {@see Serializer}. It should - * feature all parts of the tag so that the serializer can put it back together. - * - * @return string - */ - public function __toString() - { - return (string)$this->description; - } -} - -$docComment = << MyTag::class]; - -// Do pass the list of custom tags to the Factory for the DocBlockFactory. -$factory = DocBlockFactory::createInstance($customTags); -// You can also add Tags later using `$factory->registerTagHandler()` with a tag name and Tag class name. - -// Create the DocBlock -$docblock = $factory->create($docComment); - -// Take a look: the $customTagObjects now contain an array with your newly added tag -$customTagObjects = $docblock->getTagsByName('my-tag'); - -// As an experiment: let's reconstitute the DocBlock and observe that because we added a __toString() method -// to the tag class that we can now also see it. -$serializer = new Serializer(); -$reconstitutedDocComment = $serializer->getDocComment($docblock); diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/examples/playing-with-descriptions/02-escaping.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/examples/playing-with-descriptions/02-escaping.php deleted file mode 100644 index 5ec772fec..000000000 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/examples/playing-with-descriptions/02-escaping.php +++ /dev/null @@ -1,47 +0,0 @@ -create($docComment); - -// Escaping is automatic so this happens in the DescriptionFactory. -$description = $docblock->getDescription(); - -// This is the rendition that we will receive of the Description. -$receivedDocComment = <<render(); diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/phpmd.xml.dist b/lib/composer/vendor/phpdocumentor/reflection-docblock/phpmd.xml.dist deleted file mode 100644 index 9abf85cff..000000000 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/phpmd.xml.dist +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - - - - - 40 - - - diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/phpunit.xml.dist b/lib/composer/vendor/phpdocumentor/reflection-docblock/phpunit.xml.dist deleted file mode 100644 index 3c2e9a375..000000000 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/phpunit.xml.dist +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - ./tests/unit - - - ./tests/integration - - - - - ./src/ - - - ./vendor/ - - - - - - diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock.php index 399114067..46605b784 100644 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock.php +++ b/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock.php @@ -24,7 +24,7 @@ final class DocBlock private $description = null; /** @var Tag[] An array containing all the tags in this docblock; except inline. */ - private $tags = array(); + private $tags = []; /** @var Types\Context Information about the context of this DocBlock. */ private $context = null; @@ -55,8 +55,7 @@ public function __construct( Location $location = null, $isTemplateStart = false, $isTemplateEnd = false - ) - { + ) { Assert::string($summary); Assert::boolean($isTemplateStart); Assert::boolean($isTemplateEnd); @@ -171,11 +170,11 @@ public function getTagsByName($name) { Assert::string($name); - $result = array(); + $result = []; /** @var Tag $tag */ foreach ($this->getTags() as $tag) { - if ($tag->getName() != $name) { + if ($tag->getName() !== $name) { continue; } @@ -198,7 +197,7 @@ public function hasTag($name) /** @var Tag $tag */ foreach ($this->getTags() as $tag) { - if ($tag->getName() == $name) { + if ($tag->getName() === $name) { return true; } } @@ -206,6 +205,23 @@ public function hasTag($name) return false; } + /** + * Remove a tag from this DocBlock. + * + * @param Tag $tag The tag to remove. + * + * @return void + */ + public function removeTag(Tag $tagToRemove) + { + foreach ($this->tags as $key => $tag) { + if ($tag === $tagToRemove) { + unset($this->tags[$key]); + break; + } + } + } + /** * Adds a tag to this DocBlock. * diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Description.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Description.php index d1d7fc64b..25a79e007 100644 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Description.php +++ b/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Description.php @@ -70,6 +70,16 @@ public function __construct($bodyTemplate, array $tags = []) $this->tags = $tags; } + /** + * Returns the tags for this DocBlock. + * + * @return Tag[] + */ + public function getTags() + { + return $this->tags; + } + /** * Renders this description as a string where the provided formatter will format the tags in the expected string * format. @@ -88,6 +98,7 @@ public function render(Formatter $formatter = null) foreach ($this->tags as $tag) { $tags[] = '{' . $formatter->format($tag) . '}'; } + return vsprintf($this->bodyTemplate, $tags); } diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/DescriptionFactory.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/DescriptionFactory.php index f34d0f7e9..48f9c2195 100644 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/DescriptionFactory.php +++ b/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/DescriptionFactory.php @@ -188,5 +188,4 @@ private function removeSuperfluousStartingWhitespace($contents) return implode("\n", $lines); } - } diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/ExampleFinder.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/ExampleFinder.php index 3cc5dab31..571ed7499 100644 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/ExampleFinder.php +++ b/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/ExampleFinder.php @@ -10,7 +10,7 @@ * @link http://phpdoc.org */ -namespace phpDocumentor\Reflection; +namespace phpDocumentor\Reflection\DocBlock; use phpDocumentor\Reflection\DocBlock\Tags\Example; @@ -23,7 +23,7 @@ class ExampleFinder private $sourceDirectory = ''; /** @var string[] */ - private $exampleDirectories = array(); + private $exampleDirectories = []; /** * Attempts to find the example contents for the given descriptor. diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Serializer.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Serializer.php index 7f1c89d38..007c93931 100644 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Serializer.php +++ b/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Serializer.php @@ -32,6 +32,9 @@ class Serializer /** @var int|null The max length of a line. */ protected $lineLength = null; + /** @var DocBlock\Tags\Formatter A custom tag formatter. */ + protected $tagFormatter = null; + /** * Create a Serializer instance. * @@ -39,18 +42,21 @@ class Serializer * @param string $indentString The string to indent the comment with. * @param bool $indentFirstLine Whether to indent the first line. * @param int|null $lineLength The max length of a line or NULL to disable line wrapping. + * @param DocBlock\Tags\Formatter $tagFormatter A custom tag formatter, defaults to PassthroughFormatter. */ - public function __construct($indent = 0, $indentString = ' ', $indentFirstLine = true, $lineLength = null) + public function __construct($indent = 0, $indentString = ' ', $indentFirstLine = true, $lineLength = null, $tagFormatter = null) { Assert::integer($indent); Assert::string($indentString); Assert::boolean($indentFirstLine); Assert::nullOrInteger($lineLength); + Assert::nullOrIsInstanceOf($tagFormatter, 'phpDocumentor\Reflection\DocBlock\Tags\Formatter'); $this->indent = $indent; $this->indentString = $indentString; $this->isFirstLineIndented = $indentFirstLine; $this->lineLength = $lineLength; + $this->tagFormatter = $tagFormatter ?: new DocBlock\Tags\Formatter\PassthroughFormatter(); } /** @@ -115,6 +121,7 @@ private function getSummaryAndDescriptionTextBlock(DocBlock $docblock, $wrapLeng $text = wordwrap($text, $wrapLength); return $text; } + return $text; } @@ -128,11 +135,11 @@ private function getSummaryAndDescriptionTextBlock(DocBlock $docblock, $wrapLeng private function addTagBlock(DocBlock $docblock, $wrapLength, $indent, $comment) { foreach ($docblock->getTags() as $tag) { - $formatter = new DocBlock\Tags\Formatter\PassthroughFormatter(); - $tagText = $formatter->format($tag); + $tagText = $this->tagFormatter->format($tag); if ($wrapLength !== null) { $tagText = wordwrap($tagText, $wrapLength); } + $tagText = str_replace("\n", "\n{$indent} * ", $tagText); $comment .= "{$indent} * {$tagText}\n"; diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/StandardTagFactory.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/StandardTagFactory.php index 0a656466a..5a8143cf9 100644 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/StandardTagFactory.php +++ b/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/StandardTagFactory.php @@ -113,6 +113,12 @@ public function create($tagLine, TypeContext $context = null) list($tagName, $tagBody) = $this->extractTagParts($tagLine); + if ($tagBody !== '' && $tagBody[0] === '[') { + throw new \InvalidArgumentException( + 'The tag "' . $tagLine . '" does not seem to be wellformed, please check it for errors' + ); + } + return $this->createTag($tagBody, $tagName, $context); } @@ -160,8 +166,8 @@ public function registerTagHandler($tagName, $handler) */ private function extractTagParts($tagLine) { - $matches = array(); - if (! preg_match('/^@(' . self::REGEX_TAGNAME . ')(?:\s*([^\s].*)|$)?/us', $tagLine, $matches)) { + $matches = []; + if (! preg_match('/^@(' . self::REGEX_TAGNAME . ')(?:\s*([^\s].*)|$)/us', $tagLine, $matches)) { throw new \InvalidArgumentException( 'The tag "' . $tagLine . '" does not seem to be wellformed, please check it for errors' ); @@ -190,8 +196,7 @@ private function createTag($body, $name, TypeContext $context) $arguments = $this->getArgumentsForParametersFromWiring( $this->fetchParametersForHandlerFactoryMethod($handlerClassName), $this->getServiceLocatorWithDynamicParameters($context, $name, $body) - ) - ; + ); return call_user_func_array([$handlerClassName, 'create'], $arguments); } diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Author.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Author.php index 41a278867..29d7f1de1 100644 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Author.php +++ b/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Author.php @@ -73,7 +73,7 @@ public function getEmail() */ public function __toString() { - return $this->authorName . '<' . $this->authorEmail . '>'; + return $this->authorName . (strlen($this->authorEmail) ? ' <' . $this->authorEmail . '>' : ''); } /** diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Covers.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Covers.php index 31b4f82c8..8d65403fe 100644 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Covers.php +++ b/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Covers.php @@ -12,11 +12,11 @@ namespace phpDocumentor\Reflection\DocBlock\Tags; +use phpDocumentor\Reflection\DocBlock\Description; use phpDocumentor\Reflection\DocBlock\DescriptionFactory; use phpDocumentor\Reflection\Fqsen; -use phpDocumentor\Reflection\DocBlock\Description; -use phpDocumentor\Reflection\Types\Context as TypeContext; use phpDocumentor\Reflection\FqsenResolver; +use phpDocumentor\Reflection\Types\Context as TypeContext; use Webmozart\Assert\Assert; /** @@ -49,8 +49,7 @@ public static function create( DescriptionFactory $descriptionFactory = null, FqsenResolver $resolver = null, TypeContext $context = null - ) - { + ) { Assert::string($body); Assert::notEmpty($body); diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Deprecated.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Deprecated.php index 7c1039fa2..822c30500 100644 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Deprecated.php +++ b/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Deprecated.php @@ -12,9 +12,9 @@ namespace phpDocumentor\Reflection\DocBlock\Tags; -use phpDocumentor\Reflection\Types\Context as TypeContext; use phpDocumentor\Reflection\DocBlock\Description; use phpDocumentor\Reflection\DocBlock\DescriptionFactory; +use phpDocumentor\Reflection\Types\Context as TypeContext; use Webmozart\Assert\Assert; /** diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Example.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Example.php index 571ef8df1..ecb199b49 100644 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Example.php +++ b/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Example.php @@ -12,7 +12,9 @@ namespace phpDocumentor\Reflection\DocBlock\Tags; +use phpDocumentor\Reflection\DocBlock\Description; use phpDocumentor\Reflection\DocBlock\Tag; +use Webmozart\Assert\Assert; /** * Reflection class for a {@}example tag in a Docblock. @@ -22,7 +24,7 @@ final class Example extends BaseTag /** * @var string Path to a file to use as an example. May also be an absolute URI. */ - private $filePath = ''; + private $filePath; /** * @var bool Whether the file path component represents an URI. This determines how the file portion @@ -30,6 +32,33 @@ final class Example extends BaseTag */ private $isURI = false; + /** + * @var int + */ + private $startingLine; + + /** + * @var int + */ + private $lineCount; + + public function __construct($filePath, $isURI, $startingLine, $lineCount, $description) + { + Assert::notEmpty($filePath); + Assert::integer($startingLine); + Assert::greaterThanEq($startingLine, 0); + + $this->filePath = $filePath; + $this->startingLine = $startingLine; + $this->lineCount = $lineCount; + $this->name = 'example'; + if ($description !== null) { + $this->description = trim($description); + } + + $this->isURI = $isURI; + } + /** * {@inheritdoc} */ @@ -43,7 +72,7 @@ public function getContent() :$this->filePath; } - $this->description = $filePath . ' ' . parent::getContent(); + return trim($filePath . ' ' . parent::getDescription()); } return $this->description; @@ -71,16 +100,29 @@ public static function create($body) $lineCount = null; $description = null; - // Starting line / Number of lines / Description - if (preg_match('/^([1-9]\d*)\s*(?:((?1))\s+)?(.*)$/sux', $matches[3], $matches)) { - $startingLine = (int)$matches[1]; - if (isset($matches[2]) && $matches[2] !== '') { - $lineCount = (int)$matches[2]; - } + if (array_key_exists(3, $matches)) { $description = $matches[3]; + + // Starting line / Number of lines / Description + if (preg_match('/^([1-9]\d*)(?:\s+((?1))\s*)?(.*)$/sux', $matches[3], $contentMatches)) { + $startingLine = (int)$contentMatches[1]; + if (isset($contentMatches[2]) && $contentMatches[2] !== '') { + $lineCount = (int)$contentMatches[2]; + } + + if (array_key_exists(3, $contentMatches)) { + $description = $contentMatches[3]; + } + } } - return new static($filePath, $fileUri, $startingLine, $lineCount, $description); + return new static( + $filePath !== null?$filePath:$fileUri, + $fileUri !== null, + $startingLine, + $lineCount, + $description + ); } /** @@ -95,64 +137,40 @@ public function getFilePath() } /** - * Sets the file path. - * - * @param string $filePath The new file path to use for the example. + * Returns a string representation for this tag. * - * @return $this + * @return string */ - public function setFilePath($filePath) + public function __toString() { - $this->isURI = false; - $this->filePath = trim($filePath); - - $this->description = null; - return $this; + return $this->filePath . ($this->description ? ' ' . $this->description : ''); } /** - * Sets the file path as an URI. - * - * This function is equivalent to {@link setFilePath()}, except that it - * converts an URI to a file path before that. - * - * There is no getFileURI(), as {@link getFilePath()} is compatible. + * Returns true if the provided URI is relative or contains a complete scheme (and thus is absolute). * - * @param string $uri The new file URI to use as an example. + * @param string $uri * - * @return $this + * @return bool */ - public function setFileURI($uri) + private function isUriRelative($uri) { - $this->isURI = true; - $this->description = null; - - $this->filePath = $this->isUriRelative($uri) - ? rawurldecode(str_replace(array('/', '\\'), '%2F', $uri)) - : $this->filePath = $uri; - - return $this; + return false === strpos($uri, ':'); } /** - * Returns a string representation for this tag. - * - * @return string + * @return int */ - public function __toString() + public function getStartingLine() { - return $this->filePath . ($this->description ? ' ' . $this->description->render() : ''); + return $this->startingLine; } /** - * Returns true if the provided URI is relative or contains a complete scheme (and thus is absolute). - * - * @param string $uri - * - * @return bool + * @return int */ - private function isUriRelative($uri) + public function getLineCount() { - return false === strpos($uri, ':'); + return $this->lineCount; } } diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Formatter/AlignFormatter.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Formatter/AlignFormatter.php new file mode 100644 index 000000000..ceb40cc32 --- /dev/null +++ b/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Formatter/AlignFormatter.php @@ -0,0 +1,47 @@ + + * @copyright 2017 Mike van Riel + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ + +namespace phpDocumentor\Reflection\DocBlock\Tags\Formatter; + +use phpDocumentor\Reflection\DocBlock\Tag; +use phpDocumentor\Reflection\DocBlock\Tags\Formatter; + +class AlignFormatter implements Formatter +{ + /** @var int The maximum tag name length. */ + protected $maxLen = 0; + + /** + * Constructor. + * + * @param Tag[] $tags All tags that should later be aligned with the formatter. + */ + public function __construct(array $tags) + { + foreach ($tags as $tag) { + $this->maxLen = max($this->maxLen, strlen($tag->getName())); + } + } + + /** + * Formats the given tag to return a simple plain text version. + * + * @param Tag $tag + * + * @return string + */ + public function format(Tag $tag) + { + return '@' . $tag->getName() . str_repeat(' ', $this->maxLen - strlen($tag->getName()) + 1) . (string)$tag; + } +} diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Formatter/PassthroughFormatter.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Formatter/PassthroughFormatter.php index aa97572ce..4e2c57626 100644 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Formatter/PassthroughFormatter.php +++ b/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Formatter/PassthroughFormatter.php @@ -26,6 +26,6 @@ class PassthroughFormatter implements Formatter */ public function format(Tag $tag) { - return '@' . $tag->getName() . ' ' . (string)$tag; + return trim('@' . $tag->getName() . ' ' . (string)$tag); } } diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Method.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Method.php index d600aaaac..752252992 100644 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Method.php +++ b/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Method.php @@ -91,11 +91,15 @@ public static function create( )? # Return type (?: - ( - (?:[\w\|_\\\\]+) - # array notation - (?:\[\])* - )? + ( + (?:[\w\|_\\\\]*\$this[\w\|_\\\\]*) + | + (?: + (?:[\w\|_\\\\]+) + # array notation + (?:\[\])* + )* + ) \s+ )? # Legacy method name (not captured) @@ -121,12 +125,17 @@ public static function create( list(, $static, $returnType, $methodName, $arguments, $description) = $matches; $static = $static === 'static'; + + if ($returnType === '') { + $returnType = 'void'; + } + $returnType = $typeResolver->resolve($returnType, $context); $description = $descriptionFactory->create($description, $context); - if ('' !== $arguments) { + if (is_string($arguments) && strlen($arguments) > 0) { $arguments = explode(',', $arguments); - foreach($arguments as &$argument) { + foreach ($arguments as &$argument) { $argument = explode(' ', self::stripRestArg(trim($argument)), 2); if ($argument[0][0] === '$') { $argumentName = substr($argument[0], 1); @@ -192,11 +201,11 @@ public function __toString() $arguments[] = $argument['type'] . ' $' . $argument['name']; } - return ($this->isStatic() ? 'static ' : '') + return trim(($this->isStatic() ? 'static ' : '') . (string)$this->returnType . ' ' . $this->methodName . '(' . implode(', ', $arguments) . ')' - . ($this->description ? ' ' . $this->description->render() : ''); + . ($this->description ? ' ' . $this->description->render() : '')); } private function filterArguments($arguments) @@ -205,10 +214,13 @@ private function filterArguments($arguments) if (is_string($argument)) { $argument = [ 'name' => $argument ]; } + if (! isset($argument['type'])) { $argument['type'] = new Void_(); } + $keys = array_keys($argument); + sort($keys); if ($keys !== [ 'name', 'type' ]) { throw new \InvalidArgumentException( 'Arguments can only have the "name" and "type" fields, found: ' . var_export($keys, true) diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Param.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Param.php index 1a51dc0dd..7d699d88d 100644 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Param.php +++ b/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Param.php @@ -77,7 +77,7 @@ public static function create( } // if the next item starts with a $ or ...$ it must be the variable name - if (isset($parts[0]) && (strlen($parts[0]) > 0) && ($parts[0][0] == '$' || substr($parts[0], 0, 4) === '...$')) { + if (isset($parts[0]) && (strlen($parts[0]) > 0) && ($parts[0][0] === '$' || substr($parts[0], 0, 4) === '...$')) { $variableName = array_shift($parts); array_shift($parts); diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Property.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Property.php index 3c5971333..f0ef7c07b 100644 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Property.php +++ b/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Property.php @@ -70,7 +70,7 @@ public static function create( } // if the next item starts with a $ or ...$ it must be the variable name - if (isset($parts[0]) && (strlen($parts[0]) > 0) && ($parts[0][0] == '$')) { + if (isset($parts[0]) && (strlen($parts[0]) > 0) && ($parts[0][0] === '$')) { $variableName = array_shift($parts); array_shift($parts); diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/PropertyRead.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/PropertyRead.php index bf2b80569..e41c0c1ce 100644 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/PropertyRead.php +++ b/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/PropertyRead.php @@ -70,7 +70,7 @@ public static function create( } // if the next item starts with a $ or ...$ it must be the variable name - if (isset($parts[0]) && (strlen($parts[0]) > 0) && ($parts[0][0] == '$')) { + if (isset($parts[0]) && (strlen($parts[0]) > 0) && ($parts[0][0] === '$')) { $variableName = array_shift($parts); array_shift($parts); diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/PropertyWrite.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/PropertyWrite.php index db37e0fb8..cfdb0ed00 100644 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/PropertyWrite.php +++ b/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/PropertyWrite.php @@ -70,7 +70,7 @@ public static function create( } // if the next item starts with a $ or ...$ it must be the variable name - if (isset($parts[0]) && (strlen($parts[0]) > 0) && ($parts[0][0] == '$')) { + if (isset($parts[0]) && (strlen($parts[0]) > 0) && ($parts[0][0] === '$')) { $variableName = array_shift($parts); array_shift($parts); diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Reference/Fqsen.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Reference/Fqsen.php new file mode 100644 index 000000000..dc7b8b6d4 --- /dev/null +++ b/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Reference/Fqsen.php @@ -0,0 +1,42 @@ + + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ + +namespace phpDocumentor\Reflection\DocBlock\Tags\Reference; + +use phpDocumentor\Reflection\Fqsen as RealFqsen; + +/** + * Fqsen reference used by {@see phpDocumentor\Reflection\DocBlock\Tags\See} + */ +final class Fqsen implements Reference +{ + /** + * @var RealFqsen + */ + private $fqsen; + + /** + * Fqsen constructor. + */ + public function __construct(RealFqsen $fqsen) + { + $this->fqsen = $fqsen; + } + + /** + * @return string string representation of the referenced fqsen + */ + public function __toString() + { + return (string)$this->fqsen; + } +} diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Reference/Reference.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Reference/Reference.php new file mode 100644 index 000000000..a3ffd24c9 --- /dev/null +++ b/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Reference/Reference.php @@ -0,0 +1,21 @@ + + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ + +namespace phpDocumentor\Reflection\DocBlock\Tags\Reference; + +/** + * Interface for references in {@see phpDocumentor\Reflection\DocBlock\Tags\See} + */ +interface Reference +{ + public function __toString(); +} diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Reference/Url.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Reference/Url.php new file mode 100644 index 000000000..2671d5e13 --- /dev/null +++ b/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Reference/Url.php @@ -0,0 +1,40 @@ + + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ + +namespace phpDocumentor\Reflection\DocBlock\Tags\Reference; + +use Webmozart\Assert\Assert; + +/** + * Url reference used by {@see phpDocumentor\Reflection\DocBlock\Tags\See} + */ +final class Url implements Reference +{ + /** + * @var string + */ + private $uri; + + /** + * Url constructor. + */ + public function __construct($uri) + { + Assert::stringNotEmpty($uri); + $this->uri = $uri; + } + + public function __toString() + { + return $this->uri; + } +} diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Return_.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Return_.php index 09a5870e6..ca5bda705 100644 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Return_.php +++ b/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Return_.php @@ -43,8 +43,7 @@ public static function create( TypeResolver $typeResolver = null, DescriptionFactory $descriptionFactory = null, TypeContext $context = null - ) - { + ) { Assert::string($body); Assert::allNotNull([$typeResolver, $descriptionFactory]); diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/See.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/See.php index 64ee3d8e4..9e9e723bd 100644 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/See.php +++ b/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/See.php @@ -12,11 +12,13 @@ namespace phpDocumentor\Reflection\DocBlock\Tags; +use phpDocumentor\Reflection\DocBlock\Description; use phpDocumentor\Reflection\DocBlock\DescriptionFactory; -use phpDocumentor\Reflection\Fqsen; +use phpDocumentor\Reflection\DocBlock\Tags\Reference\Fqsen as FqsenRef; +use phpDocumentor\Reflection\DocBlock\Tags\Reference\Reference; +use phpDocumentor\Reflection\DocBlock\Tags\Reference\Url; use phpDocumentor\Reflection\FqsenResolver; use phpDocumentor\Reflection\Types\Context as TypeContext; -use phpDocumentor\Reflection\DocBlock\Description; use Webmozart\Assert\Assert; /** @@ -26,16 +28,16 @@ class See extends BaseTag implements Factory\StaticMethod { protected $name = 'see'; - /** @var Fqsen */ + /** @var Reference */ protected $refers = null; /** * Initializes this tag. * - * @param Fqsen $refers + * @param Reference $refers * @param Description $description */ - public function __construct(Fqsen $refers, Description $description = null) + public function __construct(Reference $refers, Description $description = null) { $this->refers = $refers; $this->description = $description; @@ -56,13 +58,18 @@ public static function create( $parts = preg_split('/\s+/Su', $body, 2); $description = isset($parts[1]) ? $descriptionFactory->create($parts[1], $context) : null; - return new static($resolver->resolve($parts[0], $context), $description); + // https://tools.ietf.org/html/rfc2396#section-3 + if (preg_match('/\w:\/\/\w/i', $parts[0])) { + return new static(new Url($parts[0]), $description); + } + + return new static(new FqsenRef($resolver->resolve($parts[0], $context)), $description); } /** - * Returns the structural element this tag refers to. + * Returns the ref of this tag. * - * @return Fqsen + * @return Reference */ public function getReference() { diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Since.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Since.php index 3d002ed31..835fb0dcd 100644 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Since.php +++ b/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Since.php @@ -12,9 +12,9 @@ namespace phpDocumentor\Reflection\DocBlock\Tags; -use phpDocumentor\Reflection\Types\Context as TypeContext; use phpDocumentor\Reflection\DocBlock\Description; use phpDocumentor\Reflection\DocBlock\DescriptionFactory; +use phpDocumentor\Reflection\Types\Context as TypeContext; use Webmozart\Assert\Assert; /** diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Source.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Source.php index b0646b969..247b1b3ba 100644 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Source.php +++ b/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Source.php @@ -59,6 +59,7 @@ public static function create($body, DescriptionFactory $descriptionFactory = nu if (isset($matches[2]) && $matches[2] !== '') { $lineCount = (int)$matches[2]; } + $description = $matches[3]; } diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Var_.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Var_.php index e23c694b1..8907c951f 100644 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Var_.php +++ b/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Var_.php @@ -70,7 +70,7 @@ public static function create( } // if the next item starts with a $ or ...$ it must be the variable name - if (isset($parts[0]) && (strlen($parts[0]) > 0) && ($parts[0][0] == '$')) { + if (isset($parts[0]) && (strlen($parts[0]) > 0) && ($parts[0][0] === '$')) { $variableName = array_shift($parts); array_shift($parts); @@ -112,7 +112,7 @@ public function getType() public function __toString() { return ($this->type ? $this->type . ' ' : '') - . '$' . $this->variableName - . ($this->description ? ' ' . $this->description : ''); + . (empty($this->variableName) ? null : ('$' . $this->variableName)) + . ($this->description ? ' ' . $this->description : ''); } } diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Version.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Version.php index 3e0e5bef7..7bb042073 100644 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Version.php +++ b/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Version.php @@ -12,9 +12,9 @@ namespace phpDocumentor\Reflection\DocBlock\Tags; -use phpDocumentor\Reflection\Types\Context as TypeContext; use phpDocumentor\Reflection\DocBlock\Description; use phpDocumentor\Reflection\DocBlock\DescriptionFactory; +use phpDocumentor\Reflection\Types\Context as TypeContext; use Webmozart\Assert\Assert; /** diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlockFactory.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlockFactory.php index 9ec2455d2..1bdb8f4df 100644 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlockFactory.php +++ b/lib/composer/vendor/phpdocumentor/reflection-docblock/src/DocBlockFactory.php @@ -93,7 +93,7 @@ public function create($docblock, Types\Context $context = null, Location $locat return new DocBlock( $summary, $description ? $this->descriptionFactory->create($description, $context) : null, - array_filter($this->parseTagBlock($tags, $context), function($tag) { + array_filter($this->parseTagBlock($tags, $context), function ($tag) { return $tag instanceof Tag; }), $context, @@ -120,11 +120,11 @@ private function stripDocComment($comment) $comment = trim(preg_replace('#[ \t]*(?:\/\*\*|\*\/|\*)?[ \t]{0,1}(.*)?#u', '$1', $comment)); // reg ex above is not able to remove */ from a single line docblock - if (substr($comment, -2) == '*/') { + if (substr($comment, -2) === '*/') { $comment = trim(substr($comment, 0, -2)); } - return str_replace(array("\r\n", "\r"), "\n", $comment); + return str_replace(["\r\n", "\r"], "\n", $comment); } /** @@ -143,7 +143,7 @@ private function splitDocBlock($comment) // method does not split tags so we return this verbatim as the fourth result (tags). This saves us the // performance impact of running a regular expression if (strpos($comment, '@') === 0) { - return array('', '', '', $comment); + return ['', '', '', $comment]; } // clears all extra horizontal whitespace from the line endings to prevent parsing issues @@ -241,7 +241,7 @@ private function parseTagBlock($tags, Types\Context $context) */ private function splitTagBlockIntoTagLines($tags) { - $result = array(); + $result = []; foreach (explode("\n", $tags) as $tag_line) { if (isset($tag_line[0]) && ($tag_line[0] === '@')) { $result[] = $tag_line; diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/integration/InterpretingDocBlocksTest.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/integration/InterpretingDocBlocksTest.php deleted file mode 100644 index 91b8eb36c..000000000 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/integration/InterpretingDocBlocksTest.php +++ /dev/null @@ -1,97 +0,0 @@ - - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection; - -use phpDocumentor\Reflection\DocBlock\Description; -use phpDocumentor\Reflection\DocBlock\StandardTagFactory; -use phpDocumentor\Reflection\DocBlock\Tag; -use phpDocumentor\Reflection\DocBlock\Tags\See; - -/** - * @coversNothing - */ -class InterpretingDocBlocksTest extends \PHPUnit_Framework_TestCase -{ - public function testInterpretingASimpleDocBlock() - { - /** - * @var DocBlock $docblock - * @var string $summary - * @var Description $description - */ - include(__DIR__ . '/../../examples/01-interpreting-a-simple-docblock.php'); - - $descriptionText = <<assertInstanceOf(DocBlock::class, $docblock); - $this->assertSame('This is an example of a summary.', $summary); - $this->assertInstanceOf(Description::class, $description); - $this->assertSame($descriptionText, $description->render()); - $this->assertEmpty($docblock->getTags()); - } - - public function testInterpretingTags() - { - /** - * @var DocBlock $docblock - * @var boolean $hasSeeTag - * @var Tag[] $tags - * @var See[] $seeTags - */ - include(__DIR__ . '/../../examples/02-interpreting-tags.php'); - - $this->assertTrue($hasSeeTag); - $this->assertCount(1, $tags); - $this->assertCount(1, $seeTags); - - $this->assertInstanceOf(See::class, $tags[0]); - $this->assertInstanceOf(See::class, $seeTags[0]); - - $seeTag = $seeTags[0]; - $this->assertSame('\\' . StandardTagFactory::class, (string)$seeTag->getReference()); - $this->assertSame('', (string)$seeTag->getDescription()); - } - - public function testDescriptionsCanEscapeAtSignsAndClosingBraces() - { - /** - * @var string $docComment - * @var DocBlock $docblock - * @var Description $description - * @var string $receivedDocComment - * @var string $foundDescription - */ - - include(__DIR__ . '/../../examples/playing-with-descriptions/02-escaping.php'); - $this->assertSame(<<<'DESCRIPTION' -You can escape the @-sign by surrounding it with braces, for example: @. And escape a closing brace within an -inline tag by adding an opening brace in front of it like this: }. - -Here are example texts where you can see how they could be used in a real life situation: - - This is a text with an {@internal inline tag where a closing brace (}) is shown}. - Or an {@internal inline tag with a literal {@link} in it}. - -Do note that an {@internal inline tag that has an opening brace ({) does not break out}. -DESCRIPTION - , - $foundDescription - ) - ; - } -} diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/integration/ReconstitutingADocBlockTest.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/integration/ReconstitutingADocBlockTest.php deleted file mode 100644 index 92ac22ede..000000000 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/integration/ReconstitutingADocBlockTest.php +++ /dev/null @@ -1,35 +0,0 @@ - - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection; - -use phpDocumentor\Reflection\DocBlock\Description; -use phpDocumentor\Reflection\DocBlock\StandardTagFactory; -use phpDocumentor\Reflection\DocBlock\Tag; -use phpDocumentor\Reflection\DocBlock\Tags\See; - -/** - * @coversNothing - */ -class ReconstitutingADocBlockTest extends \PHPUnit_Framework_TestCase -{ - public function testReconstituteADocBlock() - { - /** - * @var string $docComment - * @var string $reconstitutedDocComment - */ - include(__DIR__ . '/../../examples/03-reconstituting-a-docblock.php'); - - $this->assertSame($docComment, $reconstitutedDocComment); - } -} diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/integration/UsingTagsTest.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/integration/UsingTagsTest.php deleted file mode 100644 index 984811b1c..000000000 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/integration/UsingTagsTest.php +++ /dev/null @@ -1,39 +0,0 @@ - - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection; - -use phpDocumentor\Reflection\DocBlock\Description; -use phpDocumentor\Reflection\DocBlock\StandardTagFactory; -use phpDocumentor\Reflection\DocBlock\Tag; -use phpDocumentor\Reflection\DocBlock\Tags\See; - -/** - * @coversNothing - */ -class UsingTagsTest extends \PHPUnit_Framework_TestCase -{ - public function testAddingYourOwnTagUsingAStaticMethodAsFactory() - { - /** - * @var object[] $customTagObjects - * @var string $docComment - * @var string $reconstitutedDocComment - */ - include(__DIR__ . '/../../examples/04-adding-your-own-tag.php'); - - $this->assertInstanceOf(\MyTag::class, $customTagObjects[0]); - $this->assertSame('my-tag', $customTagObjects[0]->getName()); - $this->assertSame('I have a description', (string)$customTagObjects[0]->getDescription()); - $this->assertSame($docComment, $reconstitutedDocComment); - } -} diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/DescriptionFactoryTest.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/DescriptionFactoryTest.php deleted file mode 100644 index d3043f9aa..000000000 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/DescriptionFactoryTest.php +++ /dev/null @@ -1,174 +0,0 @@ - - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection\DocBlock; - -use Mockery as m; -use phpDocumentor\Reflection\DocBlock\Tags\Link; -use phpDocumentor\Reflection\Types\Context; - -/** - * @coversDefaultClass \phpDocumentor\Reflection\DocBlock\DescriptionFactory - * @covers :: - */ -class DescriptionFactoryTest extends \PHPUnit_Framework_TestCase -{ - /** - * @covers ::__construct - * @covers ::create - * @uses phpDocumentor\Reflection\DocBlock\Description - * @dataProvider provideSimpleExampleDescriptions - */ - public function testDescriptionCanParseASimpleString($contents) - { - $tagFactory = m::mock(TagFactory::class); - $tagFactory->shouldReceive('create')->never(); - - $factory = new DescriptionFactory($tagFactory); - $description = $factory->create($contents, new Context('')); - - $this->assertSame($contents, $description->render()); - } - - /** - * @covers ::__construct - * @covers ::create - * @uses phpDocumentor\Reflection\DocBlock\Description - * @dataProvider provideEscapeSequences - */ - public function testEscapeSequences($contents, $expected) - { - $tagFactory = m::mock(TagFactory::class); - $tagFactory->shouldReceive('create')->never(); - - $factory = new DescriptionFactory($tagFactory); - $description = $factory->create($contents, new Context('')); - - $this->assertSame($expected, $description->render()); - } - - /** - * @covers ::__construct - * @covers ::create - * @uses phpDocumentor\Reflection\DocBlock\Description - * @uses phpDocumentor\Reflection\DocBlock\Tags\Link - * @uses phpDocumentor\Reflection\DocBlock\Tags\BaseTag - * @uses phpDocumentor\Reflection\DocBlock\Tags\Formatter\PassthroughFormatter - * @uses phpDocumentor\Reflection\Types\Context - */ - public function testDescriptionCanParseAStringWithInlineTag() - { - $contents = 'This is text for a {@link http://phpdoc.org/ description} that uses an inline tag.'; - $context = new Context(''); - $tagFactory = m::mock(TagFactory::class); - $tagFactory->shouldReceive('create') - ->once() - ->with('@link http://phpdoc.org/ description', $context) - ->andReturn(new Link('http://phpdoc.org/', new Description('description'))) - ; - - $factory = new DescriptionFactory($tagFactory); - $description = $factory->create($contents, $context); - - $this->assertSame($contents, $description->render()); - } - - /** - * @covers ::__construct - * @covers ::create - * @uses phpDocumentor\Reflection\DocBlock\Description - * @uses phpDocumentor\Reflection\DocBlock\Tags\Link - * @uses phpDocumentor\Reflection\DocBlock\Tags\BaseTag - * @uses phpDocumentor\Reflection\DocBlock\Tags\Formatter\PassthroughFormatter - * @uses phpDocumentor\Reflection\Types\Context - */ - public function testDescriptionCanParseAStringStartingWithInlineTag() - { - $contents = '{@link http://phpdoc.org/ This} is text for a description that starts with an inline tag.'; - $context = new Context(''); - $tagFactory = m::mock(TagFactory::class); - $tagFactory->shouldReceive('create') - ->once() - ->with('@link http://phpdoc.org/ This', $context) - ->andReturn(new Link('http://phpdoc.org/', new Description('This'))) - ; - - $factory = new DescriptionFactory($tagFactory); - $description = $factory->create($contents, $context); - - $this->assertSame($contents, $description->render()); - } - - /** - * @covers ::__construct - * @covers ::create - * @uses phpDocumentor\Reflection\DocBlock\Description - */ - public function testIfSuperfluousStartingSpacesAreRemoved() - { - $factory = new DescriptionFactory(m::mock(TagFactory::class)); - $descriptionText = <<create($descriptionText, new Context('')); - - $this->assertSame($expectedDescription, $description->render()); - } - - /** - * Provides a series of example strings that the parser should correctly interpret and return. - * - * @return string[][] - */ - public function provideSimpleExampleDescriptions() - { - return [ - ['This is text for a description.'], - ['This is text for a description containing { that is literal.'], - ['This is text for a description containing } that is literal.'], - ['This is text for a description with {just a text} that is not a tag.'], - ]; - } - - public function provideEscapeSequences() - { - return [ - ['This is text for a description with a {@}.', 'This is text for a description with a @.'], - ['This is text for a description with a {}.', 'This is text for a description with a }.'], - ]; - } -} diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/DescriptionTest.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/DescriptionTest.php deleted file mode 100644 index b5917a9e5..000000000 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/DescriptionTest.php +++ /dev/null @@ -1,75 +0,0 @@ - - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection\DocBlock; - -use Mockery as m; -use phpDocumentor\Reflection\DocBlock\Tags\Formatter\PassthroughFormatter; -use phpDocumentor\Reflection\DocBlock\Tags\Generic; - -/** - * @coversDefaultClass \phpDocumentor\Reflection\DocBlock\Description - */ -class DescriptionTest extends \PHPUnit_Framework_TestCase -{ - /** - * @covers ::__construct - * @covers ::render - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Generic - * @uses \phpDocumentor\Reflection\DocBlock\Tags\BaseTag - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Formatter\PassthroughFormatter - */ - public function testDescriptionCanRenderUsingABodyWithPlaceholdersAndTags() - { - $body = 'This is a %1$s body.'; - $expected = 'This is a {@internal significant } body.'; - $tags = [new Generic('internal', new Description('significant '))]; - - $fixture = new Description($body, $tags); - - // without formatter (thus the PassthroughFormatter by default) - $this->assertSame($expected, $fixture->render()); - - // with a custom formatter - $formatter = m::mock(PassthroughFormatter::class); - $formatter->shouldReceive('format')->with($tags[0])->andReturn('@internal significant '); - $this->assertSame($expected, $fixture->render($formatter)); - } - - /** - * @covers ::__construct - * @covers ::render - * @covers ::__toString - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Generic - * @uses \phpDocumentor\Reflection\DocBlock\Tags\BaseTag - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Formatter\PassthroughFormatter - */ - public function testDescriptionCanBeCastToString() - { - $body = 'This is a %1$s body.'; - $expected = 'This is a {@internal significant } body.'; - $tags = [new Generic('internal', new Description('significant '))]; - - $fixture = new Description($body, $tags); - - $this->assertSame($expected, (string)$fixture); - } - - /** - * @covers ::__construct - * @expectedException \InvalidArgumentException - */ - public function testBodyTemplateMustBeAString() - { - new Description([]); - } -} diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/SerializerTest.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/SerializerTest.php deleted file mode 100644 index cb2b400f4..000000000 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/SerializerTest.php +++ /dev/null @@ -1,201 +0,0 @@ - - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection\DocBlock; - -use Mockery as m; -use phpDocumentor\Reflection\DocBlock; - -/** - * @coversDefaultClass \phpDocumentor\Reflection\DocBlock\Serializer - * @covers :: - */ -class SerializerTest extends \PHPUnit_Framework_TestCase -{ - /** - * @covers ::__construct - * @covers ::getDocComment - * @uses phpDocumentor\Reflection\DocBlock\Description - * @uses phpDocumentor\Reflection\DocBlock\Tags\Formatter\PassthroughFormatter - * @uses phpDocumentor\Reflection\DocBlock - * @uses phpDocumentor\Reflection\DocBlock\Tags\BaseTag - * @uses phpDocumentor\Reflection\DocBlock\Tags\Generic - */ - public function testReconstructsADocCommentFromADocBlock() - { - $expected = <<<'DOCCOMMENT' -/** - * This is a summary - * - * This is a description - * - * @unknown-tag Test description for the unknown tag - */ -DOCCOMMENT; - - $fixture = new Serializer(); - - $docBlock = new DocBlock( - 'This is a summary', - new Description('This is a description'), - [ - new DocBlock\Tags\Generic('unknown-tag', new Description('Test description for the unknown tag')) - ] - ); - - $this->assertSame($expected, $fixture->getDocComment($docBlock)); - } - - /** - * @covers ::__construct - * @covers ::getDocComment - * @uses phpDocumentor\Reflection\DocBlock\Description - * @uses phpDocumentor\Reflection\DocBlock\Tags\Formatter\PassthroughFormatter - * @uses phpDocumentor\Reflection\DocBlock - * @uses phpDocumentor\Reflection\DocBlock\Tags\BaseTag - * @uses phpDocumentor\Reflection\DocBlock\Tags\Generic - */ - public function testAddPrefixToDocBlock() - { - $expected = <<<'DOCCOMMENT' -aa/** -aa * This is a summary -aa * -aa * This is a description -aa * -aa * @unknown-tag Test description for the unknown tag -aa */ -DOCCOMMENT; - - $fixture = new Serializer(2, 'a'); - - $docBlock = new DocBlock( - 'This is a summary', - new Description('This is a description'), - [ - new DocBlock\Tags\Generic('unknown-tag', new Description('Test description for the unknown tag')) - ] - ); - - $this->assertSame($expected, $fixture->getDocComment($docBlock)); - } - - /** - * @covers ::__construct - * @covers ::getDocComment - * @uses phpDocumentor\Reflection\DocBlock\Description - * @uses phpDocumentor\Reflection\DocBlock\Tags\Formatter\PassthroughFormatter - * @uses phpDocumentor\Reflection\DocBlock - * @uses phpDocumentor\Reflection\DocBlock\Tags\BaseTag - * @uses phpDocumentor\Reflection\DocBlock\Tags\Generic - */ - public function testAddPrefixToDocBlockExceptFirstLine() - { - $expected = <<<'DOCCOMMENT' -/** -aa * This is a summary -aa * -aa * This is a description -aa * -aa * @unknown-tag Test description for the unknown tag -aa */ -DOCCOMMENT; - - $fixture = new Serializer(2, 'a', false); - - $docBlock = new DocBlock( - 'This is a summary', - new Description('This is a description'), - [ - new DocBlock\Tags\Generic('unknown-tag', new Description('Test description for the unknown tag')) - ] - ); - - $this->assertSame($expected, $fixture->getDocComment($docBlock)); - } - - /** - * @covers ::__construct - * @covers ::getDocComment - * @uses phpDocumentor\Reflection\DocBlock\Description - * @uses phpDocumentor\Reflection\DocBlock\Tags\Formatter\PassthroughFormatter - * @uses phpDocumentor\Reflection\DocBlock - * @uses phpDocumentor\Reflection\DocBlock\Tags\BaseTag - * @uses phpDocumentor\Reflection\DocBlock\Tags\Generic - */ - public function testWordwrapsAroundTheGivenAmountOfCharacters() - { - $expected = <<<'DOCCOMMENT' -/** - * This is a - * summary - * - * This is a - * description - * - * @unknown-tag - * Test - * description - * for the - * unknown tag - */ -DOCCOMMENT; - - $fixture = new Serializer(0, '', true, 15); - - $docBlock = new DocBlock( - 'This is a summary', - new Description('This is a description'), - [ - new DocBlock\Tags\Generic('unknown-tag', new Description('Test description for the unknown tag')) - ] - ); - - $this->assertSame($expected, $fixture->getDocComment($docBlock)); - } - - /** - * @covers ::__construct - * @expectedException \InvalidArgumentException - */ - public function testInitializationFailsIfIndentIsNotAnInteger() - { - new Serializer([]); - } - - /** - * @covers ::__construct - * @expectedException \InvalidArgumentException - */ - public function testInitializationFailsIfIndentStringIsNotAString() - { - new Serializer(0, []); - } - - /** - * @covers ::__construct - * @expectedException \InvalidArgumentException - */ - public function testInitializationFailsIfIndentFirstLineIsNotABoolean() - { - new Serializer(0, '', []); - } - - /** - * @covers ::__construct - * @expectedException \InvalidArgumentException - */ - public function testInitializationFailsIfLineLengthIsNotNullNorAnInteger() - { - new Serializer(0, '', false, []); - } -} diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/StandardTagFactoryTest.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/StandardTagFactoryTest.php deleted file mode 100644 index 0247da046..000000000 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/StandardTagFactoryTest.php +++ /dev/null @@ -1,361 +0,0 @@ - - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection\DocBlock; - -use Mockery as m; -use phpDocumentor\Reflection\DocBlock\Tags\Author; -use phpDocumentor\Reflection\DocBlock\Tags\Formatter; -use phpDocumentor\Reflection\DocBlock\Tags\Formatter\PassthroughFormatter; -use phpDocumentor\Reflection\DocBlock\Tags\Generic; -use phpDocumentor\Reflection\DocBlock\Tags\Return_; -use phpDocumentor\Reflection\DocBlock\Tags\See; -use phpDocumentor\Reflection\Fqsen; -use phpDocumentor\Reflection\FqsenResolver; -use phpDocumentor\Reflection\TypeResolver; -use phpDocumentor\Reflection\Types\Context; - -/** - * @coversDefaultClass phpDocumentor\Reflection\DocBlock\StandardTagFactory - * @covers :: - */ -class StandardTagFactoryTest extends \PHPUnit_Framework_TestCase -{ - /** - * @covers ::__construct - * @covers ::create - * @uses phpDocumentor\Reflection\DocBlock\StandardTagFactory::addService - * @uses phpDocumentor\Reflection\DocBlock\Tags\Generic - * @uses phpDocumentor\Reflection\DocBlock\Tags\BaseTag - * @uses phpDocumentor\Reflection\DocBlock\Description - */ - public function testCreatingAGenericTag() - { - $expectedTagName = 'unknown-tag'; - $expectedDescriptionText = 'This is a description'; - $expectedDescription = new Description($expectedDescriptionText); - $context = new Context(''); - - $descriptionFactory = m::mock(DescriptionFactory::class); - $descriptionFactory - ->shouldReceive('create') - ->once() - ->with($expectedDescriptionText, $context) - ->andReturn($expectedDescription) - ; - - $tagFactory = new StandardTagFactory(m::mock(FqsenResolver::class)); - $tagFactory->addService($descriptionFactory, DescriptionFactory::class); - - /** @var Generic $tag */ - $tag = $tagFactory->create('@' . $expectedTagName . ' This is a description', $context); - - $this->assertInstanceOf(Generic::class, $tag); - $this->assertSame($expectedTagName, $tag->getName()); - $this->assertSame($expectedDescription, $tag->getDescription()); - } - - /** - * @covers ::__construct - * @covers ::create - * @uses phpDocumentor\Reflection\DocBlock\StandardTagFactory::addService - * @uses phpDocumentor\Reflection\DocBlock\Tags\Author - * @uses phpDocumentor\Reflection\DocBlock\Tags\BaseTag - */ - public function testCreatingASpecificTag() - { - $context = new Context(''); - $tagFactory = new StandardTagFactory(m::mock(FqsenResolver::class)); - - /** @var Author $tag */ - $tag = $tagFactory->create('@author Mike van Riel ', $context); - - $this->assertInstanceOf(Author::class, $tag); - $this->assertSame('author', $tag->getName()); - } - - /** - * @covers ::__construct - * @covers ::create - * @uses phpDocumentor\Reflection\DocBlock\StandardTagFactory::addService - * @uses phpDocumentor\Reflection\DocBlock\Tags\See - * @uses phpDocumentor\Reflection\DocBlock\Tags\BaseTag - */ - public function testAnEmptyContextIsCreatedIfNoneIsProvided() - { - $fqsen = '\Tag'; - $resolver = m::mock(FqsenResolver::class) - ->shouldReceive('resolve') - ->with('Tag', m::type(Context::class)) - ->andReturn(new Fqsen($fqsen)) - ->getMock() - ; - $descriptionFactory = m::mock(DescriptionFactory::class); - $descriptionFactory->shouldIgnoreMissing(); - - $tagFactory = new StandardTagFactory($resolver); - $tagFactory->addService($descriptionFactory, DescriptionFactory::class); - - /** @var See $tag */ - $tag = $tagFactory->create('@see Tag'); - - $this->assertInstanceOf(See::class, $tag); - $this->assertSame($fqsen, (string)$tag->getReference()); - } - - /** - * @covers ::__construct - * @covers ::create - * @uses phpDocumentor\Reflection\DocBlock\StandardTagFactory::addService - * @uses phpDocumentor\Reflection\DocBlock\Tags\Author - * @uses phpDocumentor\Reflection\DocBlock\Tags\BaseTag - */ - public function testPassingYourOwnSetOfTagHandlers() - { - $context = new Context(''); - $tagFactory = new StandardTagFactory(m::mock(FqsenResolver::class), ['user' => Author::class]); - - /** @var Author $tag */ - $tag = $tagFactory->create('@user Mike van Riel ', $context); - - $this->assertInstanceOf(Author::class, $tag); - $this->assertSame('author', $tag->getName()); - } - - /** - * @covers ::create - * @uses phpDocumentor\Reflection\DocBlock\StandardTagFactory::__construct - * @uses phpDocumentor\Reflection\DocBlock\StandardTagFactory::addService - * @expectedException \InvalidArgumentException - * @expectedExceptionMessage The tag "@user/myuser" does not seem to be wellformed, please check it for errors - */ - public function testExceptionIsThrownIfProvidedTagIsNotWellformed() - { - $this->markTestIncomplete( - 'For some reason this test fails; once I have access to a RegEx analyzer I will have to test the regex' - ) - ; - $tagFactory = new StandardTagFactory(m::mock(FqsenResolver::class)); - $tagFactory->create('@user[myuser'); - } - - /** - * @covers ::__construct - * @covers ::addParameter - * @uses phpDocumentor\Reflection\DocBlock\StandardTagFactory::addService - */ - public function testAddParameterToServiceLocator() - { - $resolver = m::mock(FqsenResolver::class); - $tagFactory = new StandardTagFactory($resolver); - $tagFactory->addParameter('myParam', 'myValue'); - - $this->assertAttributeSame( - [FqsenResolver::class => $resolver, 'myParam' => 'myValue'], - 'serviceLocator', - $tagFactory - ) - ; - } - - /** - * @covers ::addService - * @uses phpDocumentor\Reflection\DocBlock\StandardTagFactory::__construct - */ - public function testAddServiceToServiceLocator() - { - $service = new PassthroughFormatter(); - - $resolver = m::mock(FqsenResolver::class); - $tagFactory = new StandardTagFactory($resolver); - $tagFactory->addService($service); - - $this->assertAttributeSame( - [FqsenResolver::class => $resolver, PassthroughFormatter::class => $service], - 'serviceLocator', - $tagFactory - ) - ; - } - - /** - * @covers ::addService - * @uses phpDocumentor\Reflection\DocBlock\StandardTagFactory::__construct - */ - public function testInjectConcreteServiceForInterfaceToServiceLocator() - { - $interfaceName = Formatter::class; - $service = new PassthroughFormatter(); - - $resolver = m::mock(FqsenResolver::class); - $tagFactory = new StandardTagFactory($resolver); - $tagFactory->addService($service, $interfaceName); - - $this->assertAttributeSame( - [FqsenResolver::class => $resolver, $interfaceName => $service], - 'serviceLocator', - $tagFactory - ) - ; - } - - /** - * @covers ::registerTagHandler - * @uses phpDocumentor\Reflection\DocBlock\StandardTagFactory::__construct - * @uses phpDocumentor\Reflection\DocBlock\StandardTagFactory::addService - * @uses phpDocumentor\Reflection\DocBlock\StandardTagFactory::create - * @uses phpDocumentor\Reflection\DocBlock\Tags\Author - */ - public function testRegisteringAHandlerForANewTag() - { - $resolver = m::mock(FqsenResolver::class); - $tagFactory = new StandardTagFactory($resolver); - - $tagFactory->registerTagHandler('my-tag', Author::class); - - // Assert by trying to create one - $tag = $tagFactory->create('@my-tag Mike van Riel '); - $this->assertInstanceOf(Author::class, $tag); - } - - /** - * @covers ::registerTagHandler - * @uses phpDocumentor\Reflection\DocBlock\StandardTagFactory::__construct - * @uses phpDocumentor\Reflection\DocBlock\StandardTagFactory::addService - * @expectedException \InvalidArgumentException - */ - public function testHandlerRegistrationFailsIfProvidedTagNameIsNotAString() - { - $resolver = m::mock(FqsenResolver::class); - $tagFactory = new StandardTagFactory($resolver); - - $tagFactory->registerTagHandler([], Author::class); - } - - /** - * @covers ::registerTagHandler - * @uses phpDocumentor\Reflection\DocBlock\StandardTagFactory::__construct - * @uses phpDocumentor\Reflection\DocBlock\StandardTagFactory::addService - * @expectedException \InvalidArgumentException - */ - public function testHandlerRegistrationFailsIfProvidedTagNameIsEmpty() - { - $resolver = m::mock(FqsenResolver::class); - $tagFactory = new StandardTagFactory($resolver); - - $tagFactory->registerTagHandler('', Author::class); - } - - /** - * @covers ::registerTagHandler - * @uses phpDocumentor\Reflection\DocBlock\StandardTagFactory::__construct - * @uses phpDocumentor\Reflection\DocBlock\StandardTagFactory::addService - * @expectedException \InvalidArgumentException - */ - public function testHandlerRegistrationFailsIfProvidedTagNameIsNamespaceButNotFullyQualified() - { - $resolver = m::mock(FqsenResolver::class); - $tagFactory = new StandardTagFactory($resolver); - - $tagFactory->registerTagHandler('Name\Spaced\Tag', Author::class); - } - - /** - * @covers ::registerTagHandler - * @uses phpDocumentor\Reflection\DocBlock\StandardTagFactory::__construct - * @uses phpDocumentor\Reflection\DocBlock\StandardTagFactory::addService - * @expectedException \InvalidArgumentException - */ - public function testHandlerRegistrationFailsIfProvidedHandlerIsNotAString() - { - $resolver = m::mock(FqsenResolver::class); - $tagFactory = new StandardTagFactory($resolver); - - $tagFactory->registerTagHandler('my-tag', []); - } - - /** - * @covers ::registerTagHandler - * @uses phpDocumentor\Reflection\DocBlock\StandardTagFactory::__construct - * @uses phpDocumentor\Reflection\DocBlock\StandardTagFactory::addService - * @expectedException \InvalidArgumentException - */ - public function testHandlerRegistrationFailsIfProvidedHandlerIsEmpty() - { - $resolver = m::mock(FqsenResolver::class); - $tagFactory = new StandardTagFactory($resolver); - - $tagFactory->registerTagHandler('my-tag', ''); - } - - /** - * @covers ::registerTagHandler - * @uses phpDocumentor\Reflection\DocBlock\StandardTagFactory::__construct - * @uses phpDocumentor\Reflection\DocBlock\StandardTagFactory::addService - * @expectedException \InvalidArgumentException - */ - public function testHandlerRegistrationFailsIfProvidedHandlerIsNotAnExistingClassName() - { - $resolver = m::mock(FqsenResolver::class); - $tagFactory = new StandardTagFactory($resolver); - - $tagFactory->registerTagHandler('my-tag', 'IDoNotExist'); - } - - /** - * @covers ::registerTagHandler - * @uses phpDocumentor\Reflection\DocBlock\StandardTagFactory::__construct - * @uses phpDocumentor\Reflection\DocBlock\StandardTagFactory::addService - * @expectedException \InvalidArgumentException - */ - public function testHandlerRegistrationFailsIfProvidedHandlerDoesNotImplementTheTagInterface() - { - $resolver = m::mock(FqsenResolver::class); - $tagFactory = new StandardTagFactory($resolver); - - $tagFactory->registerTagHandler('my-tag', 'stdClass'); - } - - /** - * @covers ::create - * @uses phpDocumentor\Reflection\DocBlock\StandardTagFactory::__construct - * @uses phpDocumentor\Reflection\DocBlock\StandardTagFactory::addService - * @uses phpDocumentor\Reflection\Docblock\Description - * @uses phpDocumentor\Reflection\Docblock\Tags\Return_ - * @uses phpDocumentor\Reflection\Docblock\Tags\BaseTag - */ - public function testReturntagIsMappedCorrectly() - { - $context = new Context(''); - - $descriptionFactory = m::mock(DescriptionFactory::class); - $descriptionFactory - ->shouldReceive('create') - ->once() - ->with('', $context) - ->andReturn(new Description('')) - ; - - $typeResolver = new TypeResolver(); - - $tagFactory = new StandardTagFactory(m::mock(FqsenResolver::class)); - $tagFactory->addService($descriptionFactory, DescriptionFactory::class); - $tagFactory->addService($typeResolver, TypeResolver::class); - - - /** @var Return_ $tag */ - $tag = $tagFactory->create('@return mixed', $context); - - $this->assertInstanceOf(Return_::class, $tag); - $this->assertSame('return', $tag->getName()); - } -} diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/AuthorTest.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/AuthorTest.php deleted file mode 100644 index a54954f8d..000000000 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/AuthorTest.php +++ /dev/null @@ -1,148 +0,0 @@ - - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection\DocBlock\Tags; - -use Mockery as m; - -/** - * @coversDefaultClass \phpDocumentor\Reflection\DocBlock\Tags\Author - * @covers :: - */ -class AuthorTest extends \PHPUnit_Framework_TestCase -{ - /** - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Author::__construct - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::getName - */ - public function testIfCorrectTagNameIsReturned() - { - $fixture = new Author('Mike van Riel', 'mike@phpdoc.org'); - - $this->assertSame('author', $fixture->getName()); - } - - /** - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Author::__construct - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Author::__toString - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Formatter\PassthroughFormatter - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::render - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::getName - */ - public function testIfTagCanBeRenderedUsingDefaultFormatter() - { - $fixture = new Author('Mike van Riel', 'mike@phpdoc.org'); - - $this->assertSame('@author Mike van Riel', $fixture->render()); - } - - /** - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Author::__construct - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::render - */ - public function testIfTagCanBeRenderedUsingSpecificFormatter() - { - $fixture = new Author('Mike van Riel', 'mike@phpdoc.org'); - - $formatter = m::mock(Formatter::class); - $formatter->shouldReceive('format')->with($fixture)->andReturn('Rendered output'); - - $this->assertSame('Rendered output', $fixture->render($formatter)); - } - - /** - * @covers ::__construct - * @covers ::getAuthorName - */ - public function testHasTheAuthorName() - { - $expected = 'Mike van Riel'; - - $fixture = new Author($expected, 'mike@phpdoc.org'); - - $this->assertSame($expected, $fixture->getAuthorName()); - } - - /** - * @covers ::__construct - * @covers ::getAuthorName - * @expectedException \InvalidArgumentException - */ - public function testInitializationFailsIfAuthorNameIsNotAString() - { - new Author([], 'mike@phpdoc.org'); - } - - /** - * @covers ::__construct - * @covers ::getEmail - */ - public function testHasTheAuthorMailAddress() - { - $expected = 'mike@phpdoc.org'; - - $fixture = new Author('Mike van Riel', $expected); - - $this->assertSame($expected, $fixture->getEmail()); - } - - /** - * @covers ::__construct - * @expectedException \InvalidArgumentException - */ - public function testInitializationFailsIfEmailIsNotAString() - { - new Author('Mike van Riel', []); - } - - /** - * @covers ::__construct - * @expectedException \InvalidArgumentException - */ - public function testInitializationFailsIfEmailIsNotValid() - { - new Author('Mike van Riel', 'mike'); - } - - /** - * @covers ::__construct - * @covers ::__toString - */ - public function testStringRepresentationIsReturned() - { - $fixture = new Author('Mike van Riel', 'mike@phpdoc.org'); - - $this->assertSame('Mike van Riel', (string)$fixture); - } - - /** - * @covers ::create - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Author:: - */ - public function testFactoryMethod() - { - $fixture = Author::create('Mike van Riel '); - - $this->assertSame('Mike van Riel', (string)$fixture); - $this->assertSame('Mike van Riel', $fixture->getAuthorName()); - $this->assertSame('mike@phpdoc.org', $fixture->getEmail()); - } - - /** - * @covers ::create - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Author:: - */ - public function testFactoryMethodReturnsNullIfItCouldNotReadBody() - { - $this->assertNull(Author::create('dfgr<')); - } -} diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/CoversTest.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/CoversTest.php deleted file mode 100644 index a2b5e4b36..000000000 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/CoversTest.php +++ /dev/null @@ -1,155 +0,0 @@ - - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection\DocBlock\Tags; - -use Mockery as m; -use phpDocumentor\Reflection\DocBlock\Description; -use phpDocumentor\Reflection\DocBlock\DescriptionFactory; -use phpDocumentor\Reflection\Fqsen; -use phpDocumentor\Reflection\FqsenResolver; -use phpDocumentor\Reflection\Types\Context; - -/** - * @coversDefaultClass \phpDocumentor\Reflection\DocBlock\Tags\Covers - * @covers :: - */ -class CoversTest extends \PHPUnit_Framework_TestCase -{ - /** - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Covers::__construct - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::getName - */ - public function testIfCorrectTagNameIsReturned() - { - $fixture = new Covers(new Fqsen('\DateTime'), new Description('Description')); - - $this->assertSame('covers', $fixture->getName()); - } - - /** - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Covers::__construct - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Covers::__toString - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Formatter\PassthroughFormatter - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::render - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::getName - */ - public function testIfTagCanBeRenderedUsingDefaultFormatter() - { - $fixture = new Covers(new Fqsen('\DateTime'), new Description('Description')); - - $this->assertSame('@covers \DateTime Description', $fixture->render()); - } - - /** - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Covers::__construct - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::render - */ - public function testIfTagCanBeRenderedUsingSpecificFormatter() - { - $fixture = new Covers(new Fqsen('\DateTime'), new Description('Description')); - - $formatter = m::mock(Formatter::class); - $formatter->shouldReceive('format')->with($fixture)->andReturn('Rendered output'); - - $this->assertSame('Rendered output', $fixture->render($formatter)); - } - - /** - * @covers ::__construct - * @covers ::getReference - */ - public function testHasReferenceToFqsen() - { - $expected = new Fqsen('\DateTime'); - - $fixture = new Covers($expected); - - $this->assertSame($expected, $fixture->getReference()); - } - - /** - * @covers ::__construct - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::getDescription - * @uses \phpDocumentor\Reflection\DocBlock\Description - */ - public function testHasDescription() - { - $expected = new Description('Description'); - - $fixture = new Covers(new Fqsen('\DateTime'), $expected); - - $this->assertSame($expected, $fixture->getDescription()); - } - - /** - * @covers ::__construct - * @covers ::__toString - * @uses \phpDocumentor\Reflection\DocBlock\Description - */ - public function testStringRepresentationIsReturned() - { - $fixture = new Covers(new Fqsen('\DateTime'), new Description('Description')); - - $this->assertSame('\DateTime Description', (string)$fixture); - } - - /** - * @covers ::create - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Covers:: - * @uses \phpDocumentor\Reflection\DocBlock\DescriptionFactory - * @uses \phpDocumentor\Reflection\FqsenResolver - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @uses \phpDocumentor\Reflection\Fqsen - * @uses \phpDocumentor\Reflection\Types\Context - */ - public function testFactoryMethod() - { - $descriptionFactory = m::mock(DescriptionFactory::class); - $resolver = m::mock(FqsenResolver::class); - $context = new Context(''); - - $fqsen = new Fqsen('\DateTime'); - $description = new Description('My Description'); - - $descriptionFactory - ->shouldReceive('create')->with('My Description', $context)->andReturn($description); - $resolver->shouldReceive('resolve')->with('DateTime', $context)->andReturn($fqsen); - - $fixture = Covers::create('DateTime My Description', $descriptionFactory, $resolver, $context); - - $this->assertSame('\DateTime My Description', (string)$fixture); - $this->assertSame($fqsen, $fixture->getReference()); - $this->assertSame($description, $fixture->getDescription()); - } - - /** - * @covers ::create - * @expectedException \InvalidArgumentException - */ - public function testFactoryMethodFailsIfBodyIsNotString() - { - $this->assertNull(Covers::create([])); - } - - /** - * @covers ::create - * @expectedException \InvalidArgumentException - */ - public function testFactoryMethodFailsIfBodyIsNotEmpty() - { - $this->assertNull(Covers::create('')); - } -} diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/DeprecatedTest.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/DeprecatedTest.php deleted file mode 100644 index 8be9ad7e0..000000000 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/DeprecatedTest.php +++ /dev/null @@ -1,166 +0,0 @@ - - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection\DocBlock\Tags; - -use Mockery as m; -use phpDocumentor\Reflection\DocBlock\Description; -use phpDocumentor\Reflection\DocBlock\DescriptionFactory; -use phpDocumentor\Reflection\Types\Context; - -/** - * @coversDefaultClass \phpDocumentor\Reflection\DocBlock\Tags\Deprecated - * @covers :: - */ -class DeprecatedTest extends \PHPUnit_Framework_TestCase -{ - /** - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Deprecated::__construct - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::getName - */ - public function testIfCorrectTagNameIsReturned() - { - $fixture = new Deprecated('1.0', new Description('Description')); - - $this->assertSame('deprecated', $fixture->getName()); - } - - /** - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Deprecated::__construct - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Deprecated::__toString - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Formatter\PassthroughFormatter - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::render - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::getName - */ - public function testIfTagCanBeRenderedUsingDefaultFormatter() - { - $fixture = new Deprecated('1.0', new Description('Description')); - - $this->assertSame('@deprecated 1.0 Description', $fixture->render()); - } - - /** - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Deprecated::__construct - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::render - */ - public function testIfTagCanBeRenderedUsingSpecificFormatter() - { - $fixture = new Deprecated('1.0', new Description('Description')); - - $formatter = m::mock(Formatter::class); - $formatter->shouldReceive('format')->with($fixture)->andReturn('Rendered output'); - - $this->assertSame('Rendered output', $fixture->render($formatter)); - } - - /** - * @covers ::__construct - * @covers ::getVersion - */ - public function testHasVersionNumber() - { - $expected = '1.0'; - - $fixture = new Deprecated($expected); - - $this->assertSame($expected, $fixture->getVersion()); - } - - /** - * @covers ::__construct - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::getDescription - * @uses \phpDocumentor\Reflection\DocBlock\Description - */ - public function testHasDescription() - { - $expected = new Description('Description'); - - $fixture = new Deprecated('1.0', $expected); - - $this->assertSame($expected, $fixture->getDescription()); - } - - /** - * @covers ::__construct - * @covers ::__toString - * @uses \phpDocumentor\Reflection\DocBlock\Description - */ - public function testStringRepresentationIsReturned() - { - $fixture = new Deprecated('1.0', new Description('Description')); - - $this->assertSame('1.0 Description', (string)$fixture); - } - - /** - * @covers ::create - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Deprecated:: - * @uses \phpDocumentor\Reflection\DocBlock\DescriptionFactory - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @uses \phpDocumentor\Reflection\Types\Context - */ - public function testFactoryMethod() - { - $descriptionFactory = m::mock(DescriptionFactory::class); - $context = new Context(''); - - $version = '1.0'; - $description = new Description('My Description'); - - $descriptionFactory->shouldReceive('create')->with('My Description', $context)->andReturn($description); - - $fixture = Deprecated::create('1.0 My Description', $descriptionFactory, $context); - - $this->assertSame('1.0 My Description', (string)$fixture); - $this->assertSame($version, $fixture->getVersion()); - $this->assertSame($description, $fixture->getDescription()); - } - - /** - * @covers ::create - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Deprecated:: - * @uses \phpDocumentor\Reflection\DocBlock\DescriptionFactory - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @uses \phpDocumentor\Reflection\Types\Context - */ - public function testFactoryMethodCreatesEmptyDeprecatedTag() - { - $descriptionFactory = m::mock(DescriptionFactory::class); - $descriptionFactory->shouldReceive('create')->never(); - - $fixture = Deprecated::create('', $descriptionFactory, new Context('')); - - $this->assertSame('', (string)$fixture); - $this->assertSame(null, $fixture->getVersion()); - $this->assertSame(null, $fixture->getDescription()); - } - - /** - * @covers ::create - * @expectedException \InvalidArgumentException - */ - public function testFactoryMethodFailsIfVersionIsNotString() - { - $this->assertNull(Deprecated::create([])); - } - - /** - * @covers ::create - */ - public function testFactoryMethodReturnsNullIfBodyDoesNotMatchRegex() - { - $this->assertEquals(new Deprecated(), Deprecated::create('dkhf<')); - } -} diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/Formatter/PassthroughFormatterTest.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/Formatter/PassthroughFormatterTest.php deleted file mode 100644 index 045a197f6..000000000 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/Formatter/PassthroughFormatterTest.php +++ /dev/null @@ -1,41 +0,0 @@ - - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection\DocBlock\Tags\Formatter; - -use Mockery as m; -use phpDocumentor\Reflection\DocBlock\Description; -use phpDocumentor\Reflection\DocBlock\Tags\Generic; - -/** - * @coversDefaultClass \phpDocumentor\Reflection\DocBlock\Tags\Formatter\PassthroughFormatter - */ -class PassthroughFormatterTest extends \PHPUnit_Framework_TestCase -{ - /** - * @covers ::format - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @uses \phpDocumentor\Reflection\DocBlock\Tags\BaseTag - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Generic - */ - public function testFormatterCallsToStringAndReturnsAStandardRepresentation() - { - $expected = '@unknown-tag This is a description'; - - $fixture = new PassthroughFormatter(); - - $this->assertSame( - $expected, - $fixture->format(new Generic('unknown-tag', new Description('This is a description'))) - ); - } -} diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/GenericTest.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/GenericTest.php deleted file mode 100644 index 02fa53008..000000000 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/GenericTest.php +++ /dev/null @@ -1,146 +0,0 @@ - - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @generic http://phpdoc.org - */ - -namespace phpDocumentor\Reflection\DocBlock\Tags; - -use Mockery as m; -use phpDocumentor\Reflection\DocBlock\Description; -use phpDocumentor\Reflection\DocBlock\DescriptionFactory; -use phpDocumentor\Reflection\Types\Context; - -/** - * @coversDefaultClass \phpDocumentor\Reflection\DocBlock\Tags\Generic - * @covers :: - */ -class GenericTest extends \PHPUnit_Framework_TestCase -{ - /** - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Generic::__construct - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::getName - */ - public function testIfCorrectTagNameIsReturned() - { - $fixture = new Generic('generic', new Description('Description')); - - $this->assertSame('generic', $fixture->getName()); - } - - /** - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Generic::__construct - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Generic::__toString - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Formatter\PassthroughFormatter - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @uses \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::getName - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::render - */ - public function testIfTagCanBeRenderedUsingDefaultFormatter() - { - $fixture = new Generic('generic', new Description('Description')); - - $this->assertSame('@generic Description', $fixture->render()); - } - - /** - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Generic::__construct - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::render - */ - public function testIfTagCanBeRenderedUsingSpecificFormatter() - { - $fixture = new Generic('generic', new Description('Description')); - - $formatter = m::mock(Formatter::class); - $formatter->shouldReceive('format')->with($fixture)->andReturn('Rendered output'); - - $this->assertSame('Rendered output', $fixture->render($formatter)); - } - - /** - * @covers ::__construct - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::getDescription - * @uses \phpDocumentor\Reflection\DocBlock\Description - */ - public function testHasDescription() - { - $expected = new Description('Description'); - - $fixture = new Generic('generic', $expected); - - $this->assertSame($expected, $fixture->getDescription()); - } - - /** - * @covers ::__construct - * @covers ::__toString - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @uses \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::getName - */ - public function testStringRepresentationIsReturned() - { - $fixture = new Generic('generic', new Description('Description')); - - $this->assertSame('Description', (string)$fixture); - } - - /** - * @covers ::create - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Generic:: - * @uses \phpDocumentor\Reflection\DocBlock\DescriptionFactory - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @uses \phpDocumentor\Reflection\Types\Context - */ - public function testFactoryMethod() - { - $descriptionFactory = m::mock(DescriptionFactory::class); - $context = new Context(''); - - $generics = 'generic'; - $description = new Description('My Description'); - - $descriptionFactory->shouldReceive('create')->with('My Description', $context)->andReturn($description); - - $fixture = Generic::create('My Description', 'generic', $descriptionFactory, $context); - - $this->assertSame('My Description', (string)$fixture); - $this->assertSame($generics, $fixture->getName()); - $this->assertSame($description, $fixture->getDescription()); - } - - /** - * @covers ::create - * @expectedException \InvalidArgumentException - */ - public function testFactoryMethodFailsIfNameIsNotString() - { - Generic::create('', []); - } - - /** - * @covers ::create - * @expectedException \InvalidArgumentException - */ - public function testFactoryMethodFailsIfNameIsNotEmpty() - { - Generic::create('', ''); - } - - /** - * @covers ::create - * @covers ::__construct - * @expectedException \InvalidArgumentException - */ - public function testFactoryMethodFailsIfNameContainsIllegalCharacters() - { - Generic::create('', 'name/myname'); - } -} diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/LinkTest.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/LinkTest.php deleted file mode 100644 index 9940aec70..000000000 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/LinkTest.php +++ /dev/null @@ -1,158 +0,0 @@ - - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection\DocBlock\Tags; - -use Mockery as m; -use phpDocumentor\Reflection\DocBlock\Description; -use phpDocumentor\Reflection\DocBlock\DescriptionFactory; -use phpDocumentor\Reflection\Types\Context; - -/** - * @coversDefaultClass \phpDocumentor\Reflection\DocBlock\Tags\Link - * @covers :: - */ -class LinkTest extends \PHPUnit_Framework_TestCase -{ - /** - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Link::__construct - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::getName - */ - public function testIfCorrectTagNameIsReturned() - { - $fixture = new Link('http://this.is.my/link', new Description('Description')); - - $this->assertSame('link', $fixture->getName()); - } - - /** - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Link::__construct - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Link::__toString - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Formatter\PassthroughFormatter - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::render - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::getName - */ - public function testIfTagCanBeRenderedUsingDefaultFormatter() - { - $fixture = new Link('http://this.is.my/link', new Description('Description')); - - $this->assertSame('@link http://this.is.my/link Description', $fixture->render()); - } - - /** - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Link::__construct - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::render - */ - public function testIfTagCanBeRenderedUsingSpecificFormatter() - { - $fixture = new Link('http://this.is.my/link', new Description('Description')); - - $formatter = m::mock(Formatter::class); - $formatter->shouldReceive('format')->with($fixture)->andReturn('Rendered output'); - - $this->assertSame('Rendered output', $fixture->render($formatter)); - } - - /** - * @covers ::__construct - * @covers ::getLink - */ - public function testHasLinkUrl() - { - $expected = 'http://this.is.my/link'; - - $fixture = new Link($expected); - - $this->assertSame($expected, $fixture->getLink()); - } - - /** - * @covers ::__construct - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::getDescription - * @uses \phpDocumentor\Reflection\DocBlock\Description - */ - public function testHasDescription() - { - $expected = new Description('Description'); - - $fixture = new Link('http://this.is.my/link', $expected); - - $this->assertSame($expected, $fixture->getDescription()); - } - - /** - * @covers ::__construct - * @covers ::__toString - * @uses \phpDocumentor\Reflection\DocBlock\Description - */ - public function testStringRepresentationIsReturned() - { - $fixture = new Link('http://this.is.my/link', new Description('Description')); - - $this->assertSame('http://this.is.my/link Description', (string)$fixture); - } - - /** - * @covers ::create - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Link:: - * @uses \phpDocumentor\Reflection\DocBlock\DescriptionFactory - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @uses \phpDocumentor\Reflection\Types\Context - */ - public function testFactoryMethod() - { - $descriptionFactory = m::mock(DescriptionFactory::class); - $context = new Context(''); - - $links = 'http://this.is.my/link'; - $description = new Description('My Description'); - - $descriptionFactory->shouldReceive('create')->with('My Description', $context)->andReturn($description); - - $fixture = Link::create('http://this.is.my/link My Description', $descriptionFactory, $context); - - $this->assertSame('http://this.is.my/link My Description', (string)$fixture); - $this->assertSame($links, $fixture->getLink()); - $this->assertSame($description, $fixture->getDescription()); - } - - /** - * @covers ::create - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Link:: - * @uses \phpDocumentor\Reflection\DocBlock\DescriptionFactory - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @uses \phpDocumentor\Reflection\Types\Context - */ - public function testFactoryMethodCreatesEmptyLinkTag() - { - $descriptionFactory = m::mock(DescriptionFactory::class); - $descriptionFactory->shouldReceive('create')->never(); - - $fixture = Link::create('', $descriptionFactory, new Context('')); - - $this->assertSame('', (string)$fixture); - $this->assertSame('', $fixture->getLink()); - $this->assertSame(null, $fixture->getDescription()); - } - - /** - * @covers ::create - * @expectedException \InvalidArgumentException - */ - public function testFactoryMethodFailsIfVersionIsNotString() - { - $this->assertNull(Link::create([])); - } -} diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/MethodTest.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/MethodTest.php deleted file mode 100644 index 5d6e981e5..000000000 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/MethodTest.php +++ /dev/null @@ -1,437 +0,0 @@ - - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection\DocBlock\Tags; - -use Mockery as m; -use phpDocumentor\Reflection\DocBlock\Description; -use phpDocumentor\Reflection\DocBlock\DescriptionFactory; -use phpDocumentor\Reflection\TypeResolver; -use phpDocumentor\Reflection\Types\Array_; -use phpDocumentor\Reflection\Types\Compound; -use phpDocumentor\Reflection\Types\Context; -use phpDocumentor\Reflection\Types\Integer; -use phpDocumentor\Reflection\Types\Object_; -use phpDocumentor\Reflection\Types\String_; -use phpDocumentor\Reflection\Types\Void_; - -/** - * @coversDefaultClass \phpDocumentor\Reflection\DocBlock\Tags\Method - * @covers :: - */ -class MethodTest extends \PHPUnit_Framework_TestCase -{ - /** - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Method::__construct - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::getName - */ - public function testIfCorrectTagNameIsReturned() - { - $fixture = new Method('myMethod'); - - $this->assertSame('method', $fixture->getName()); - } - - /** - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Method::__construct - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Method::isStatic - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Method::__toString - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Formatter\PassthroughFormatter - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::render - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::getName - */ - public function testIfTagCanBeRenderedUsingDefaultFormatter() - { - $arguments = [ - ['name' => 'argument1', 'type' => new String_()], - ['name' => 'argument2', 'type' => new Object_()] - ]; - $fixture = new Method('myMethod', $arguments, new Void_(), true, new Description('My Description')); - - $this->assertSame( - '@method static void myMethod(string $argument1, object $argument2) My Description', - $fixture->render() - ); - } - - /** - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Method::__construct - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::render - */ - public function testIfTagCanBeRenderedUsingSpecificFormatter() - { - $fixture = new Method('myMethod'); - - $formatter = m::mock(Formatter::class); - $formatter->shouldReceive('format')->with($fixture)->andReturn('Rendered output'); - - $this->assertSame('Rendered output', $fixture->render($formatter)); - } - - /** - * @covers ::__construct - * @covers ::getMethodName - */ - public function testHasMethodName() - { - $expected = 'myMethod'; - - $fixture = new Method($expected); - - $this->assertSame($expected, $fixture->getMethodName()); - } - - /** - * @covers ::__construct - * @covers ::getArguments - */ - public function testHasArguments() - { - $arguments = [ - [ 'name' => 'argument1', 'type' => new String_() ] - ]; - - $fixture = new Method('myMethod', $arguments); - - $this->assertSame($arguments, $fixture->getArguments()); - } - - /** - * @covers ::__construct - * @covers ::getArguments - */ - public function testArgumentsMayBePassedAsString() - { - $arguments = ['argument1']; - $expected = [ - [ 'name' => $arguments[0], 'type' => new Void_() ] - ]; - - $fixture = new Method('myMethod', $arguments); - - $this->assertEquals($expected, $fixture->getArguments()); - } - - /** - * @covers ::__construct - * @covers ::getArguments - */ - public function testArgumentTypeCanBeInferredAsVoid() - { - $arguments = [ [ 'name' => 'argument1' ] ]; - $expected = [ - [ 'name' => $arguments[0]['name'], 'type' => new Void_() ] - ]; - - $fixture = new Method('myMethod', $arguments); - - $this->assertEquals($expected, $fixture->getArguments()); - } - - /** - * @covers ::create - */ - public function testRestArgumentIsParsedAsRegularArg() - { - $expected = [ - [ 'name' => 'arg1', 'type' => new Void_() ], - [ 'name' => 'rest', 'type' => new Void_() ], - [ 'name' => 'rest2', 'type' => new Array_() ], - ]; - - $descriptionFactory = m::mock(DescriptionFactory::class); - $resolver = new TypeResolver(); - $context = new Context(''); - $description = new Description(''); - $descriptionFactory->shouldReceive('create')->with('', $context)->andReturn($description); - - $fixture = Method::create( - 'void myMethod($arg1, ...$rest, array ... $rest2)', - $resolver, - $descriptionFactory, - $context - ); - - $this->assertEquals($expected, $fixture->getArguments()); - } - - /** - * @covers ::__construct - * @covers ::getReturnType - */ - public function testHasReturnType() - { - $expected = new String_(); - - $fixture = new Method('myMethod', [], $expected); - - $this->assertSame($expected, $fixture->getReturnType()); - } - - /** - * @covers ::__construct - * @covers ::getReturnType - */ - public function testReturnTypeCanBeInferredAsVoid() - { - $fixture = new Method('myMethod', []); - - $this->assertEquals(new Void_(), $fixture->getReturnType()); - } - - /** - * @covers ::__construct - * @covers ::isStatic - */ - public function testMethodCanBeStatic() - { - $expected = false; - $fixture = new Method('myMethod', [], null, $expected); - $this->assertSame($expected, $fixture->isStatic()); - - $expected = true; - $fixture = new Method('myMethod', [], null, $expected); - $this->assertSame($expected, $fixture->isStatic()); - } - - /** - * @covers ::__construct - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::getDescription - * @uses \phpDocumentor\Reflection\DocBlock\Description - */ - public function testHasDescription() - { - $expected = new Description('Description'); - - $fixture = new Method('myMethod', [], null, false, $expected); - - $this->assertSame($expected, $fixture->getDescription()); - } - - /** - * @covers ::__construct - * @covers ::__toString - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Method::isStatic - */ - public function testStringRepresentationIsReturned() - { - $arguments = [ - ['name' => 'argument1', 'type' => new String_()], - ['name' => 'argument2', 'type' => new Object_()] - ]; - $fixture = new Method('myMethod', $arguments, new Void_(), true, new Description('My Description')); - - $this->assertSame( - 'static void myMethod(string $argument1, object $argument2) My Description', - (string)$fixture - ); - } - - /** - * @covers ::create - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Method:: - * @uses \phpDocumentor\Reflection\DocBlock\DescriptionFactory - * @uses \phpDocumentor\Reflection\TypeResolver - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @uses \phpDocumentor\Reflection\Fqsen - * @uses \phpDocumentor\Reflection\Types\Context - */ - public function testFactoryMethod() - { - $descriptionFactory = m::mock(DescriptionFactory::class); - $resolver = new TypeResolver(); - $context = new Context(''); - - $description = new Description('My Description'); - $expectedArguments = [ - [ 'name' => 'argument1', 'type' => new String_() ], - [ 'name' => 'argument2', 'type' => new Void_() ] - ]; - - $descriptionFactory->shouldReceive('create')->with('My Description', $context)->andReturn($description); - - $fixture = Method::create( - 'static void myMethod(string $argument1, $argument2) My Description', - $resolver, - $descriptionFactory, - $context - ); - - $this->assertSame('static void myMethod(string $argument1, void $argument2) My Description', (string)$fixture); - $this->assertSame('myMethod', $fixture->getMethodName()); - $this->assertEquals($expectedArguments, $fixture->getArguments()); - $this->assertInstanceOf(Void_::class, $fixture->getReturnType()); - $this->assertSame($description, $fixture->getDescription()); - } - - public function collectionReturnTypesProvider() - { - return [ - ['int[]', Array_::class, Integer::class, Compound::class], - ['int[][]', Array_::class, Array_::class, Compound::class], - ['Object[]', Array_::class, Object_::class, Compound::class], - ['array[]', Array_::class, Array_::class, Compound::class], - ]; - } - - /** - * @dataProvider collectionReturnTypesProvider - * @covers ::create - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Method:: - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @uses \phpDocumentor\Reflection\DocBlock\DescriptionFactory - * @uses \phpDocumentor\Reflection\TypeResolver - * @uses \phpDocumentor\Reflection\Types\Array_ - * @uses \phpDocumentor\Reflection\Types\Compound - * @uses \phpDocumentor\Reflection\Types\Integer - * @uses \phpDocumentor\Reflection\Types\Object_ - * @param string $returnType - * @param string $expectedType - * @param string $expectedValueType - * @param string null $expectedKeyType - */ - public function testCollectionReturnTypes( - $returnType, - $expectedType, - $expectedValueType = null, - $expectedKeyType = null - ) { $resolver = new TypeResolver(); - $descriptionFactory = m::mock(DescriptionFactory::class); - $descriptionFactory->shouldReceive('create')->with('', null)->andReturn(new Description('')); - - $fixture = Method::create("$returnType myMethod(\$arg)", $resolver, $descriptionFactory); - $returnType = $fixture->getReturnType(); - $this->assertInstanceOf($expectedType, $returnType); - - if ($returnType instanceof Array_) { - $this->assertInstanceOf($expectedValueType, $returnType->getValueType()); - $this->assertInstanceOf($expectedKeyType, $returnType->getKeyType()); - } - } - - /** - * @covers ::create - * @expectedException \InvalidArgumentException - */ - public function testFactoryMethodFailsIfBodyIsNotString() - { - Method::create([]); - } - - /** - * @covers ::create - * @expectedException \InvalidArgumentException - */ - public function testFactoryMethodFailsIfBodyIsEmpty() - { - Method::create(''); - } - - /** - * @covers ::create - * @expectedException \InvalidArgumentException - */ - public function testFactoryMethodReturnsNullIfBodyIsIncorrect() - { - $this->assertNull(Method::create('body(')); - } - - /** - * @covers ::create - * @expectedException \InvalidArgumentException - */ - public function testFactoryMethodFailsIfResolverIsNull() - { - Method::create('body'); - } - - /** - * @covers ::create - * @expectedException \InvalidArgumentException - */ - public function testFactoryMethodFailsIfDescriptionFactoryIsNull() - { - Method::create('body', new TypeResolver()); - } - - /** - * @covers ::__construct - * @expectedException \InvalidArgumentException - */ - public function testCreationFailsIfBodyIsNotString() - { - new Method([]); - } - - /** - * @covers ::__construct - * @expectedException \InvalidArgumentException - */ - public function testCreationFailsIfBodyIsEmpty() - { - new Method(''); - } - - /** - * @covers ::__construct - * @expectedException \InvalidArgumentException - */ - public function testCreationFailsIfStaticIsNotBoolean() - { - new Method('body', [], null, []); - } - - /** - * @covers ::__construct - * @expectedException \InvalidArgumentException - */ - public function testCreationFailsIfArgumentRecordContainsInvalidEntry() - { - new Method('body', [ [ 'name' => 'myName', 'unknown' => 'nah' ] ]); - } - - /** - * @covers ::create - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Method:: - * @uses \phpDocumentor\Reflection\DocBlock\DescriptionFactory - * @uses \phpDocumentor\Reflection\TypeResolver - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @uses \phpDocumentor\Reflection\Fqsen - * @uses \phpDocumentor\Reflection\Types\Context - */ - public function testCreateMethodParenthesisMissing() - { - $descriptionFactory = m::mock(DescriptionFactory::class); - $resolver = new TypeResolver(); - $context = new Context(''); - - $description = new Description('My Description'); - - $descriptionFactory->shouldReceive('create')->with('My Description', $context)->andReturn($description); - - $fixture = Method::create( - 'static void myMethod My Description', - $resolver, - $descriptionFactory, - $context - ); - - $this->assertSame('static void myMethod() My Description', (string)$fixture); - $this->assertSame('myMethod', $fixture->getMethodName()); - $this->assertEquals([], $fixture->getArguments()); - $this->assertInstanceOf(Void_::class, $fixture->getReturnType()); - $this->assertSame($description, $fixture->getDescription()); - } -} diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/ParamTest.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/ParamTest.php deleted file mode 100644 index 0c718ab7b..000000000 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/ParamTest.php +++ /dev/null @@ -1,228 +0,0 @@ - - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection\DocBlock\Tags; - -use Mockery as m; -use phpDocumentor\Reflection\DocBlock\Description; -use phpDocumentor\Reflection\DocBlock\DescriptionFactory; -use phpDocumentor\Reflection\TypeResolver; -use phpDocumentor\Reflection\Types\Context; -use phpDocumentor\Reflection\Types\String_; - -/** - * @coversDefaultClass \phpDocumentor\Reflection\DocBlock\Tags\Param - * @covers :: - */ -class ParamTest extends \PHPUnit_Framework_TestCase -{ - /** - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Param::__construct - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::getName - */ - public function testIfCorrectTagNameIsReturned() - { - $fixture = new Param('myParameter', null, false, new Description('Description')); - - $this->assertSame('param', $fixture->getName()); - } - - /** - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Param::__construct - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Param::isVariadic - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Param::__toString - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Formatter\PassthroughFormatter - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::render - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::getName - */ - public function testIfTagCanBeRenderedUsingDefaultFormatter() - { - $fixture = new Param('myParameter', new String_(), true, new Description('Description')); - $this->assertSame('@param string ...$myParameter Description', $fixture->render()); - - $fixture = new Param('myParameter', new String_(), false, new Description('Description')); - $this->assertSame('@param string $myParameter Description', $fixture->render()); - - $fixture = new Param('myParameter', null, false, new Description('Description')); - $this->assertSame('@param $myParameter Description', $fixture->render()); - - $fixture = new Param('myParameter'); - $this->assertSame('@param $myParameter', $fixture->render()); - } - - /** - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Param::__construct - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::render - */ - public function testIfTagCanBeRenderedUsingSpecificFormatter() - { - $fixture = new Param('myParameter'); - - $formatter = m::mock(Formatter::class); - $formatter->shouldReceive('format')->with($fixture)->andReturn('Rendered output'); - - $this->assertSame('Rendered output', $fixture->render($formatter)); - } - - /** - * @covers ::__construct - * @covers ::getVariableName - */ - public function testHasVariableName() - { - $expected = 'myParameter'; - - $fixture = new Param($expected); - - $this->assertSame($expected, $fixture->getVariableName()); - } - - /** - * @covers ::__construct - * @covers ::getType - */ - public function testHasType() - { - $expected = new String_(); - - $fixture = new Param('myParameter', $expected); - - $this->assertSame($expected, $fixture->getType()); - } - - /** - * @covers ::__construct - * @covers ::isVariadic - */ - public function testIfParameterIsVariadic() - { - $fixture = new Param('myParameter', new String_(), false); - $this->assertFalse($fixture->isVariadic()); - - $fixture = new Param('myParameter', new String_(), true); - $this->assertTrue($fixture->isVariadic()); - } - - /** - * @covers ::__construct - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::getDescription - * @uses \phpDocumentor\Reflection\DocBlock\Description - */ - public function testHasDescription() - { - $expected = new Description('Description'); - - $fixture = new Param('1.0', null, false, $expected); - - $this->assertSame($expected, $fixture->getDescription()); - } - - /** - * @covers ::__construct - * @covers ::isVariadic - * @covers ::__toString - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @uses \phpDocumentor\Reflection\Types\String_ - */ - public function testStringRepresentationIsReturned() - { - $fixture = new Param('myParameter', new String_(), true, new Description('Description')); - - $this->assertSame('string ...$myParameter Description', (string)$fixture); - } - - /** - * @covers ::create - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Param:: - * @uses \phpDocumentor\Reflection\DocBlock\DescriptionFactory - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @uses \phpDocumentor\Reflection\Types\Context - */ - public function testFactoryMethod() - { - $typeResolver = new TypeResolver(); - $descriptionFactory = m::mock(DescriptionFactory::class); - $context = new Context(''); - - $description = new Description('My Description'); - $descriptionFactory->shouldReceive('create')->with('My Description', $context)->andReturn($description); - - $fixture = Param::create('string ...$myParameter My Description', $typeResolver, $descriptionFactory, $context); - - $this->assertSame('string ...$myParameter My Description', (string)$fixture); - $this->assertSame('myParameter', $fixture->getVariableName()); - $this->assertInstanceOf(String_::class, $fixture->getType()); - $this->assertTrue($fixture->isVariadic()); - $this->assertSame($description, $fixture->getDescription()); - } - - /** - * @covers ::create - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Param:: - * @uses \phpDocumentor\Reflection\TypeResolver - * @uses \phpDocumentor\Reflection\DocBlock\DescriptionFactory - * @expectedException \InvalidArgumentException - */ - public function testFactoryMethodFailsIfEmptyBodyIsGiven() - { - $descriptionFactory = m::mock(DescriptionFactory::class); - Param::create('', new TypeResolver(), $descriptionFactory); - } - - /** - * @covers ::create - * @expectedException \InvalidArgumentException - */ - public function testFactoryMethodFailsIfBodyIsNotString() - { - Param::create([]); - } - - /** - * @covers ::create - * @expectedException \InvalidArgumentException - */ - public function testFactoryMethodFailsIfResolverIsNull() - { - Param::create('body'); - } - - /** - * @covers ::create - * @uses \phpDocumentor\Reflection\TypeResolver - * @expectedException \InvalidArgumentException - */ - public function testFactoryMethodFailsIfDescriptionFactoryIsNull() - { - Param::create('body', new TypeResolver()); - } - - /** - * @covers ::__construct - * @expectedException \InvalidArgumentException - */ - public function testExceptionIsThrownIfVariableNameIsNotString() - { - new Param([]); - } - - /** - * @covers ::__construct - * @expectedException \InvalidArgumentException - */ - public function testExceptionIsThrownIfVariadicIsNotBoolean() - { - new Param('', null, []); - } -} diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/PropertyReadTest.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/PropertyReadTest.php deleted file mode 100644 index c3fb77006..000000000 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/PropertyReadTest.php +++ /dev/null @@ -1,201 +0,0 @@ - - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection\DocBlock\Tags; - -use Mockery as m; -use phpDocumentor\Reflection\DocBlock\Description; -use phpDocumentor\Reflection\DocBlock\DescriptionFactory; -use phpDocumentor\Reflection\TypeResolver; -use phpDocumentor\Reflection\Types\Context; -use phpDocumentor\Reflection\Types\String_; - -/** - * @coversDefaultClass \phpDocumentor\Reflection\DocBlock\Tags\PropertyRead - * @covers :: - */ -class PropertyReadTest extends \PHPUnit_Framework_TestCase -{ - /** - * @uses \phpDocumentor\Reflection\DocBlock\Tags\PropertyRead::__construct - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::getName - */ - public function testIfCorrectTagNameIsReturned() - { - $fixture = new PropertyRead('myProperty', null, new Description('Description')); - - $this->assertSame('property-read', $fixture->getName()); - } - - /** - * @uses \phpDocumentor\Reflection\DocBlock\Tags\PropertyRead::__construct - * @uses \phpDocumentor\Reflection\DocBlock\Tags\PropertyRead::__toString - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Formatter\PassthroughFormatter - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::render - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::getName - */ - public function testIfTagCanBeRenderedUsingDefaultFormatter() - { - $fixture = new PropertyRead('myProperty', new String_(), new Description('Description')); - $this->assertSame('@property-read string $myProperty Description', $fixture->render()); - - $fixture = new PropertyRead('myProperty', null, new Description('Description')); - $this->assertSame('@property-read $myProperty Description', $fixture->render()); - - $fixture = new PropertyRead('myProperty'); - $this->assertSame('@property-read $myProperty', $fixture->render()); - } - - /** - * @uses \phpDocumentor\Reflection\DocBlock\Tags\PropertyRead::__construct - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::render - */ - public function testIfTagCanBeRenderedUsingSpecificFormatter() - { - $fixture = new PropertyRead('myProperty'); - - $formatter = m::mock(Formatter::class); - $formatter->shouldReceive('format')->with($fixture)->andReturn('Rendered output'); - - $this->assertSame('Rendered output', $fixture->render($formatter)); - } - - /** - * @covers ::__construct - * @covers ::getVariableName - */ - public function testHasVariableName() - { - $expected = 'myProperty'; - - $fixture = new PropertyRead($expected); - - $this->assertSame($expected, $fixture->getVariableName()); - } - - /** - * @covers ::__construct - * @covers ::getType - */ - public function testHasType() - { - $expected = new String_(); - - $fixture = new PropertyRead('myProperty', $expected); - - $this->assertSame($expected, $fixture->getType()); - } - - /** - * @covers ::__construct - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::getDescription - * @uses \phpDocumentor\Reflection\DocBlock\Description - */ - public function testHasDescription() - { - $expected = new Description('Description'); - - $fixture = new PropertyRead('1.0', null, $expected); - - $this->assertSame($expected, $fixture->getDescription()); - } - - /** - * @covers ::__construct - * @covers ::__toString - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @uses \phpDocumentor\Reflection\Types\String_ - */ - public function testStringRepresentationIsReturned() - { - $fixture = new PropertyRead('myProperty', new String_(), new Description('Description')); - - $this->assertSame('string $myProperty Description', (string)$fixture); - } - - /** - * @covers ::create - * @uses \phpDocumentor\Reflection\DocBlock\Tags\PropertyRead:: - * @uses \phpDocumentor\Reflection\DocBlock\DescriptionFactory - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @uses \phpDocumentor\Reflection\Types\Context - */ - public function testFactoryMethod() - { - $typeResolver = new TypeResolver(); - $descriptionFactory = m::mock(DescriptionFactory::class); - $context = new Context(''); - - $description = new Description('My Description'); - $descriptionFactory->shouldReceive('create')->with('My Description', $context)->andReturn($description); - - $fixture = PropertyRead::create('string $myProperty My Description', $typeResolver, $descriptionFactory, - $context); - - $this->assertSame('string $myProperty My Description', (string)$fixture); - $this->assertSame('myProperty', $fixture->getVariableName()); - $this->assertInstanceOf(String_::class, $fixture->getType()); - $this->assertSame($description, $fixture->getDescription()); - } - - /** - * @covers ::create - * @uses \phpDocumentor\Reflection\DocBlock\Tags\PropertyRead:: - * @uses \phpDocumentor\Reflection\TypeResolver - * @uses \phpDocumentor\Reflection\DocBlock\DescriptionFactory - * @expectedException \InvalidArgumentException - */ - public function testFactoryMethodFailsIfEmptyBodyIsGiven() - { - $descriptionFactory = m::mock(DescriptionFactory::class); - PropertyRead::create('', new TypeResolver(), $descriptionFactory); - } - - /** - * @covers ::create - * @expectedException \InvalidArgumentException - */ - public function testFactoryMethodFailsIfBodyIsNotString() - { - PropertyRead::create([]); - } - - /** - * @covers ::create - * @expectedException \InvalidArgumentException - */ - public function testFactoryMethodFailsIfResolverIsNull() - { - PropertyRead::create('body'); - } - - /** - * @covers ::create - * @uses \phpDocumentor\Reflection\TypeResolver - * @expectedException \InvalidArgumentException - */ - public function testFactoryMethodFailsIfDescriptionFactoryIsNull() - { - PropertyRead::create('body', new TypeResolver()); - } - - /** - * @covers ::__construct - * @expectedException \InvalidArgumentException - */ - public function testExceptionIsThrownIfVariableNameIsNotString() - { - new PropertyRead([]); - } -} diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/PropertyTest.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/PropertyTest.php deleted file mode 100644 index 908dfb284..000000000 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/PropertyTest.php +++ /dev/null @@ -1,200 +0,0 @@ - - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection\DocBlock\Tags; - -use Mockery as m; -use phpDocumentor\Reflection\DocBlock\Description; -use phpDocumentor\Reflection\DocBlock\DescriptionFactory; -use phpDocumentor\Reflection\TypeResolver; -use phpDocumentor\Reflection\Types\Context; -use phpDocumentor\Reflection\Types\String_; - -/** - * @coversDefaultClass \phpDocumentor\Reflection\DocBlock\Tags\Property - * @covers :: - */ -class PropertyTest extends \PHPUnit_Framework_TestCase -{ - /** - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Property::__construct - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::getName - */ - public function testIfCorrectTagNameIsReturned() - { - $fixture = new Property('myProperty', null, new Description('Description')); - - $this->assertSame('property', $fixture->getName()); - } - - /** - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Property::__construct - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Property::__toString - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Formatter\PassthroughFormatter - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::render - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::getName - */ - public function testIfTagCanBeRenderedUsingDefaultFormatter() - { - $fixture = new Property('myProperty', new String_(), new Description('Description')); - $this->assertSame('@property string $myProperty Description', $fixture->render()); - - $fixture = new Property('myProperty', null, new Description('Description')); - $this->assertSame('@property $myProperty Description', $fixture->render()); - - $fixture = new Property('myProperty'); - $this->assertSame('@property $myProperty', $fixture->render()); - } - - /** - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Property::__construct - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::render - */ - public function testIfTagCanBeRenderedUsingSpecificFormatter() - { - $fixture = new Property('myProperty'); - - $formatter = m::mock(Formatter::class); - $formatter->shouldReceive('format')->with($fixture)->andReturn('Rendered output'); - - $this->assertSame('Rendered output', $fixture->render($formatter)); - } - - /** - * @covers ::__construct - * @covers ::getVariableName - */ - public function testHasVariableName() - { - $expected = 'myProperty'; - - $fixture = new Property($expected); - - $this->assertSame($expected, $fixture->getVariableName()); - } - - /** - * @covers ::__construct - * @covers ::getType - */ - public function testHasType() - { - $expected = new String_(); - - $fixture = new Property('myProperty', $expected); - - $this->assertSame($expected, $fixture->getType()); - } - - /** - * @covers ::__construct - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::getDescription - * @uses \phpDocumentor\Reflection\DocBlock\Description - */ - public function testHasDescription() - { - $expected = new Description('Description'); - - $fixture = new Property('1.0', null, $expected); - - $this->assertSame($expected, $fixture->getDescription()); - } - - /** - * @covers ::__construct - * @covers ::__toString - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @uses \phpDocumentor\Reflection\Types\String_ - */ - public function testStringRepresentationIsReturned() - { - $fixture = new Property('myProperty', new String_(), new Description('Description')); - - $this->assertSame('string $myProperty Description', (string)$fixture); - } - - /** - * @covers ::create - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Property:: - * @uses \phpDocumentor\Reflection\DocBlock\DescriptionFactory - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @uses \phpDocumentor\Reflection\Types\Context - */ - public function testFactoryMethod() - { - $typeResolver = new TypeResolver(); - $descriptionFactory = m::mock(DescriptionFactory::class); - $context = new Context(''); - - $description = new Description('My Description'); - $descriptionFactory->shouldReceive('create')->with('My Description', $context)->andReturn($description); - - $fixture = Property::create('string $myProperty My Description', $typeResolver, $descriptionFactory, $context); - - $this->assertSame('string $myProperty My Description', (string)$fixture); - $this->assertSame('myProperty', $fixture->getVariableName()); - $this->assertInstanceOf(String_::class, $fixture->getType()); - $this->assertSame($description, $fixture->getDescription()); - } - - /** - * @covers ::create - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Property:: - * @uses \phpDocumentor\Reflection\TypeResolver - * @uses \phpDocumentor\Reflection\DocBlock\DescriptionFactory - * @expectedException \InvalidArgumentException - */ - public function testFactoryMethodFailsIfEmptyBodyIsGiven() - { - $descriptionFactory = m::mock(DescriptionFactory::class); - Property::create('', new TypeResolver(), $descriptionFactory); - } - - /** - * @covers ::create - * @expectedException \InvalidArgumentException - */ - public function testFactoryMethodFailsIfBodyIsNotString() - { - Property::create([]); - } - - /** - * @covers ::create - * @expectedException \InvalidArgumentException - */ - public function testFactoryMethodFailsIfResolverIsNull() - { - Property::create('body'); - } - - /** - * @covers ::create - * @uses \phpDocumentor\Reflection\TypeResolver - * @expectedException \InvalidArgumentException - */ - public function testFactoryMethodFailsIfDescriptionFactoryIsNull() - { - Property::create('body', new TypeResolver()); - } - - /** - * @covers ::__construct - * @expectedException \InvalidArgumentException - */ - public function testExceptionIsThrownIfVariableNameIsNotString() - { - new Property([]); - } -} diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/PropertyWriteTest.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/PropertyWriteTest.php deleted file mode 100644 index 5ea6524ca..000000000 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/PropertyWriteTest.php +++ /dev/null @@ -1,201 +0,0 @@ - - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection\DocBlock\Tags; - -use Mockery as m; -use phpDocumentor\Reflection\DocBlock\Description; -use phpDocumentor\Reflection\DocBlock\DescriptionFactory; -use phpDocumentor\Reflection\TypeResolver; -use phpDocumentor\Reflection\Types\Context; -use phpDocumentor\Reflection\Types\String_; - -/** - * @coversDefaultClass \phpDocumentor\Reflection\DocBlock\Tags\PropertyWrite - * @covers :: - */ -class PropertyWriteTest extends \PHPUnit_Framework_TestCase -{ - /** - * @uses \phpDocumentor\Reflection\DocBlock\Tags\PropertyWrite::__construct - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::getName - */ - public function testIfCorrectTagNameIsReturned() - { - $fixture = new PropertyWrite('myProperty', null, new Description('Description')); - - $this->assertSame('property-write', $fixture->getName()); - } - - /** - * @uses \phpDocumentor\Reflection\DocBlock\Tags\PropertyWrite::__construct - * @uses \phpDocumentor\Reflection\DocBlock\Tags\PropertyWrite::__toString - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Formatter\PassthroughFormatter - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::render - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::getName - */ - public function testIfTagCanBeRenderedUsingDefaultFormatter() - { - $fixture = new PropertyWrite('myProperty', new String_(), new Description('Description')); - $this->assertSame('@property-write string $myProperty Description', $fixture->render()); - - $fixture = new PropertyWrite('myProperty', null, new Description('Description')); - $this->assertSame('@property-write $myProperty Description', $fixture->render()); - - $fixture = new PropertyWrite('myProperty'); - $this->assertSame('@property-write $myProperty', $fixture->render()); - } - - /** - * @uses \phpDocumentor\Reflection\DocBlock\Tags\PropertyWrite::__construct - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::render - */ - public function testIfTagCanBeRenderedUsingSpecificFormatter() - { - $fixture = new PropertyWrite('myProperty'); - - $formatter = m::mock(Formatter::class); - $formatter->shouldReceive('format')->with($fixture)->andReturn('Rendered output'); - - $this->assertSame('Rendered output', $fixture->render($formatter)); - } - - /** - * @covers ::__construct - * @covers ::getVariableName - */ - public function testHasVariableName() - { - $expected = 'myProperty'; - - $fixture = new PropertyWrite($expected); - - $this->assertSame($expected, $fixture->getVariableName()); - } - - /** - * @covers ::__construct - * @covers ::getType - */ - public function testHasType() - { - $expected = new String_(); - - $fixture = new PropertyWrite('myProperty', $expected); - - $this->assertSame($expected, $fixture->getType()); - } - - /** - * @covers ::__construct - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::getDescription - * @uses \phpDocumentor\Reflection\DocBlock\Description - */ - public function testHasDescription() - { - $expected = new Description('Description'); - - $fixture = new PropertyWrite('1.0', null, $expected); - - $this->assertSame($expected, $fixture->getDescription()); - } - - /** - * @covers ::__construct - * @covers ::__toString - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @uses \phpDocumentor\Reflection\Types\String_ - */ - public function testStringRepresentationIsReturned() - { - $fixture = new PropertyWrite('myProperty', new String_(), new Description('Description')); - - $this->assertSame('string $myProperty Description', (string)$fixture); - } - - /** - * @covers ::create - * @uses \phpDocumentor\Reflection\DocBlock\Tags\PropertyWrite:: - * @uses \phpDocumentor\Reflection\DocBlock\DescriptionFactory - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @uses \phpDocumentor\Reflection\Types\Context - */ - public function testFactoryMethod() - { - $typeResolver = new TypeResolver(); - $descriptionFactory = m::mock(DescriptionFactory::class); - $context = new Context(''); - - $description = new Description('My Description'); - $descriptionFactory->shouldReceive('create')->with('My Description', $context)->andReturn($description); - - $fixture = PropertyWrite::create('string $myProperty My Description', $typeResolver, $descriptionFactory, - $context); - - $this->assertSame('string $myProperty My Description', (string)$fixture); - $this->assertSame('myProperty', $fixture->getVariableName()); - $this->assertInstanceOf(String_::class, $fixture->getType()); - $this->assertSame($description, $fixture->getDescription()); - } - - /** - * @covers ::create - * @uses \phpDocumentor\Reflection\DocBlock\Tags\PropertyWrite:: - * @uses \phpDocumentor\Reflection\TypeResolver - * @uses \phpDocumentor\Reflection\DocBlock\DescriptionFactory - * @expectedException \InvalidArgumentException - */ - public function testFactoryMethodFailsIfEmptyBodyIsGiven() - { - $descriptionFactory = m::mock(DescriptionFactory::class); - PropertyWrite::create('', new TypeResolver(), $descriptionFactory); - } - - /** - * @covers ::create - * @expectedException \InvalidArgumentException - */ - public function testFactoryMethodFailsIfBodyIsNotString() - { - PropertyWrite::create([]); - } - - /** - * @covers ::create - * @expectedException \InvalidArgumentException - */ - public function testFactoryMethodFailsIfResolverIsNull() - { - PropertyWrite::create('body'); - } - - /** - * @covers ::create - * @uses \phpDocumentor\Reflection\TypeResolver - * @expectedException \InvalidArgumentException - */ - public function testFactoryMethodFailsIfDescriptionFactoryIsNull() - { - PropertyWrite::create('body', new TypeResolver()); - } - - /** - * @covers ::__construct - * @expectedException \InvalidArgumentException - */ - public function testExceptionIsThrownIfVariableNameIsNotString() - { - new PropertyWrite([]); - } -} diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/ReturnTest.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/ReturnTest.php deleted file mode 100644 index 2bc543919..000000000 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/ReturnTest.php +++ /dev/null @@ -1,170 +0,0 @@ - - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection\DocBlock\Tags; - -use Mockery as m; -use phpDocumentor\Reflection\DocBlock\Description; -use phpDocumentor\Reflection\DocBlock\DescriptionFactory; -use phpDocumentor\Reflection\TypeResolver; -use phpDocumentor\Reflection\Types\Context; -use phpDocumentor\Reflection\Types\String_; - -/** - * @coversDefaultClass \phpDocumentor\Reflection\DocBlock\Tags\Return_ - * @covers :: - */ -class ReturnTest extends \PHPUnit_Framework_TestCase -{ - /** - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Return_::__construct - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::getName - */ - public function testIfCorrectTagNameIsReturned() - { - $fixture = new Return_(new String_(), new Description('Description')); - - $this->assertSame('return', $fixture->getName()); - } - - /** - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Return_::__construct - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Return_::__toString - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Formatter\PassthroughFormatter - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::render - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::getName - */ - public function testIfTagCanBeRenderedUsingDefaultFormatter() - { - $fixture = new Return_(new String_(), new Description('Description')); - - $this->assertSame('@return string Description', $fixture->render()); - } - - /** - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Return_::__construct - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::render - */ - public function testIfTagCanBeRenderedUsingSpecificFormatter() - { - $fixture = new Return_(new String_(), new Description('Description')); - - $formatter = m::mock(Formatter::class); - $formatter->shouldReceive('format')->with($fixture)->andReturn('Rendered output'); - - $this->assertSame('Rendered output', $fixture->render($formatter)); - } - - /** - * @covers ::__construct - * @covers ::getType - */ - public function testHasType() - { - $expected = new String_(); - - $fixture = new Return_($expected); - - $this->assertSame($expected, $fixture->getType()); - } - - /** - * @covers ::__construct - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::getDescription - * @uses \phpDocumentor\Reflection\DocBlock\Description - */ - public function testHasDescription() - { - $expected = new Description('Description'); - - $fixture = new Return_(new String_(), $expected); - - $this->assertSame($expected, $fixture->getDescription()); - } - - /** - * @covers ::__construct - * @covers ::__toString - * @uses \phpDocumentor\Reflection\DocBlock\Description - */ - public function testStringRepresentationIsReturned() - { - $fixture = new Return_(new String_(), new Description('Description')); - - $this->assertSame('string Description', (string)$fixture); - } - - /** - * @covers ::create - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Return_:: - * @uses \phpDocumentor\Reflection\DocBlock\DescriptionFactory - * @uses \phpDocumentor\Reflection\TypeResolver - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @uses \phpDocumentor\Reflection\Types\String_ - * @uses \phpDocumentor\Reflection\Types\Context - */ - public function testFactoryMethod() - { - $descriptionFactory = m::mock(DescriptionFactory::class); - $resolver = new TypeResolver(); - $context = new Context(''); - - $type = new String_(); - $description = new Description('My Description'); - $descriptionFactory->shouldReceive('create')->with('My Description', $context)->andReturn($description); - - $fixture = Return_::create('string My Description', $resolver, $descriptionFactory, $context); - - $this->assertSame('string My Description', (string)$fixture); - $this->assertEquals($type, $fixture->getType()); - $this->assertSame($description, $fixture->getDescription()); - } - - /** - * @covers ::create - * @expectedException \InvalidArgumentException - */ - public function testFactoryMethodFailsIfBodyIsNotString() - { - $this->assertNull(Return_::create([])); - } - - /** - * @covers ::create - * @expectedException \InvalidArgumentException - */ - public function testFactoryMethodFailsIfBodyIsNotEmpty() - { - $this->assertNull(Return_::create('')); - } - - /** - * @covers ::create - * @expectedException \InvalidArgumentException - */ - public function testFactoryMethodFailsIfResolverIsNull() - { - Return_::create('body'); - } - - /** - * @covers ::create - * @expectedException \InvalidArgumentException - */ - public function testFactoryMethodFailsIfDescriptionFactoryIsNull() - { - Return_::create('body', new TypeResolver()); - } -} diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/SeeTest.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/SeeTest.php deleted file mode 100644 index 8d3e3e8c6..000000000 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/SeeTest.php +++ /dev/null @@ -1,173 +0,0 @@ - - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection\DocBlock\Tags; - -use Mockery as m; -use phpDocumentor\Reflection\DocBlock\Description; -use phpDocumentor\Reflection\DocBlock\DescriptionFactory; -use phpDocumentor\Reflection\Fqsen; -use phpDocumentor\Reflection\FqsenResolver; -use phpDocumentor\Reflection\Types\Context; - -/** - * @coversDefaultClass \phpDocumentor\Reflection\DocBlock\Tags\See - * @covers :: - */ -class SeeTest extends \PHPUnit_Framework_TestCase -{ - /** - * @uses \phpDocumentor\Reflection\DocBlock\Tags\See::__construct - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::getName - */ - public function testIfCorrectTagNameIsReturned() - { - $fixture = new See(new Fqsen('\DateTime'), new Description('Description')); - - $this->assertSame('see', $fixture->getName()); - } - - /** - * @uses \phpDocumentor\Reflection\DocBlock\Tags\See::__construct - * @uses \phpDocumentor\Reflection\DocBlock\Tags\See::__toString - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Formatter\PassthroughFormatter - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::render - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::getName - */ - public function testIfTagCanBeRenderedUsingDefaultFormatter() - { - $fixture = new See(new Fqsen('\DateTime'), new Description('Description')); - - $this->assertSame('@see \DateTime Description', $fixture->render()); - } - - /** - * @uses \phpDocumentor\Reflection\DocBlock\Tags\See::__construct - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::render - */ - public function testIfTagCanBeRenderedUsingSpecificFormatter() - { - $fixture = new See(new Fqsen('\DateTime'), new Description('Description')); - - $formatter = m::mock(Formatter::class); - $formatter->shouldReceive('format')->with($fixture)->andReturn('Rendered output'); - - $this->assertSame('Rendered output', $fixture->render($formatter)); - } - - /** - * @covers ::__construct - * @covers ::getReference - */ - public function testHasReferenceToFqsen() - { - $expected = new Fqsen('\DateTime'); - - $fixture = new See($expected); - - $this->assertSame($expected, $fixture->getReference()); - } - - /** - * @covers ::__construct - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::getDescription - * @uses \phpDocumentor\Reflection\DocBlock\Description - */ - public function testHasDescription() - { - $expected = new Description('Description'); - - $fixture = new See(new Fqsen('\DateTime'), $expected); - - $this->assertSame($expected, $fixture->getDescription()); - } - - /** - * @covers ::__construct - * @covers ::__toString - * @uses \phpDocumentor\Reflection\DocBlock\Description - */ - public function testStringRepresentationIsReturned() - { - $fixture = new See(new Fqsen('\DateTime'), new Description('Description')); - - $this->assertSame('\DateTime Description', (string)$fixture); - } - - /** - * @covers ::create - * @uses \phpDocumentor\Reflection\DocBlock\Tags\See:: - * @uses \phpDocumentor\Reflection\DocBlock\DescriptionFactory - * @uses \phpDocumentor\Reflection\FqsenResolver - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @uses \phpDocumentor\Reflection\Fqsen - * @uses \phpDocumentor\Reflection\Types\Context - */ - public function testFactoryMethod() - { - $descriptionFactory = m::mock(DescriptionFactory::class); - $resolver = m::mock(FqsenResolver::class); - $context = new Context(''); - - $fqsen = new Fqsen('\DateTime'); - $description = new Description('My Description'); - - $descriptionFactory - ->shouldReceive('create')->with('My Description', $context)->andReturn($description); - $resolver->shouldReceive('resolve')->with('DateTime', $context)->andReturn($fqsen); - - $fixture = See::create('DateTime My Description', $resolver, $descriptionFactory, $context); - - $this->assertSame('\DateTime My Description', (string)$fixture); - $this->assertSame($fqsen, $fixture->getReference()); - $this->assertSame($description, $fixture->getDescription()); - } - - /** - * @covers ::create - * @expectedException \InvalidArgumentException - */ - public function testFactoryMethodFailsIfBodyIsNotString() - { - $this->assertNull(See::create([])); - } - - /** - * @covers ::create - * @expectedException \InvalidArgumentException - */ - public function testFactoryMethodFailsIfBodyIsNotEmpty() - { - $this->assertNull(See::create('')); - } - - /** - * @covers ::create - * @expectedException \InvalidArgumentException - */ - public function testFactoryMethodFailsIfResolverIsNull() - { - See::create('body'); - } - - /** - * @covers ::create - * @expectedException \InvalidArgumentException - */ - public function testFactoryMethodFailsIfDescriptionFactoryIsNull() - { - See::create('body', new FqsenResolver()); - } -} diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/SinceTest.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/SinceTest.php deleted file mode 100644 index 3f42db5d2..000000000 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/SinceTest.php +++ /dev/null @@ -1,166 +0,0 @@ - - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection\DocBlock\Tags; - -use Mockery as m; -use phpDocumentor\Reflection\DocBlock\Description; -use phpDocumentor\Reflection\DocBlock\DescriptionFactory; -use phpDocumentor\Reflection\Types\Context; - -/** - * @coversDefaultClass \phpDocumentor\Reflection\DocBlock\Tags\Since - * @covers :: - */ -class SinceTest extends \PHPUnit_Framework_TestCase -{ - /** - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Since::__construct - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::getName - */ - public function testIfCorrectTagNameIsReturned() - { - $fixture = new Since('1.0', new Description('Description')); - - $this->assertSame('since', $fixture->getName()); - } - - /** - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Since::__construct - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Since::__toString - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Formatter\PassthroughFormatter - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::render - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::getName - */ - public function testIfTagCanBeRenderedUsingDefaultFormatter() - { - $fixture = new Since('1.0', new Description('Description')); - - $this->assertSame('@since 1.0 Description', $fixture->render()); - } - - /** - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Since::__construct - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::render - */ - public function testIfTagCanBeRenderedUsingSpecificFormatter() - { - $fixture = new Since('1.0', new Description('Description')); - - $formatter = m::mock(Formatter::class); - $formatter->shouldReceive('format')->with($fixture)->andReturn('Rendered output'); - - $this->assertSame('Rendered output', $fixture->render($formatter)); - } - - /** - * @covers ::__construct - * @covers ::getVersion - */ - public function testHasVersionNumber() - { - $expected = '1.0'; - - $fixture = new Since($expected); - - $this->assertSame($expected, $fixture->getVersion()); - } - - /** - * @covers ::__construct - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::getDescription - * @uses \phpDocumentor\Reflection\DocBlock\Description - */ - public function testHasDescription() - { - $expected = new Description('Description'); - - $fixture = new Since('1.0', $expected); - - $this->assertSame($expected, $fixture->getDescription()); - } - - /** - * @covers ::__construct - * @covers ::__toString - * @uses \phpDocumentor\Reflection\DocBlock\Description - */ - public function testStringRepresentationIsReturned() - { - $fixture = new Since('1.0', new Description('Description')); - - $this->assertSame('1.0 Description', (string)$fixture); - } - - /** - * @covers ::create - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Since:: - * @uses \phpDocumentor\Reflection\DocBlock\DescriptionFactory - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @uses \phpDocumentor\Reflection\Types\Context - */ - public function testFactoryMethod() - { - $descriptionFactory = m::mock(DescriptionFactory::class); - $context = new Context(''); - - $version = '1.0'; - $description = new Description('My Description'); - - $descriptionFactory->shouldReceive('create')->with('My Description', $context)->andReturn($description); - - $fixture = Since::create('1.0 My Description', $descriptionFactory, $context); - - $this->assertSame('1.0 My Description', (string)$fixture); - $this->assertSame($version, $fixture->getVersion()); - $this->assertSame($description, $fixture->getDescription()); - } - - /** - * @covers ::create - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Since:: - * @uses \phpDocumentor\Reflection\DocBlock\DescriptionFactory - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @uses \phpDocumentor\Reflection\Types\Context - */ - public function testFactoryMethodCreatesEmptySinceTag() - { - $descriptionFactory = m::mock(DescriptionFactory::class); - $descriptionFactory->shouldReceive('create')->never(); - - $fixture = Since::create('', $descriptionFactory, new Context('')); - - $this->assertSame('', (string)$fixture); - $this->assertSame(null, $fixture->getVersion()); - $this->assertSame(null, $fixture->getDescription()); - } - - /** - * @covers ::create - * @expectedException \InvalidArgumentException - */ - public function testFactoryMethodFailsIfSinceIsNotString() - { - $this->assertNull(Since::create([])); - } - - /** - * @covers ::create - */ - public function testFactoryMethodReturnsNullIfBodyDoesNotMatchRegex() - { - $this->assertNull(Since::create('dkhf<')); - } -} diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/SourceTest.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/SourceTest.php deleted file mode 100644 index cbf01f656..000000000 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/SourceTest.php +++ /dev/null @@ -1,199 +0,0 @@ - - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection\DocBlock\Tags; - -use Mockery as m; -use phpDocumentor\Reflection\DocBlock\Description; -use phpDocumentor\Reflection\DocBlock\DescriptionFactory; -use phpDocumentor\Reflection\TypeResolver; -use phpDocumentor\Reflection\Types\Context; -use phpDocumentor\Reflection\Types\String_; - -/** - * @coversDefaultClass \phpDocumentor\Reflection\DocBlock\Tags\Source - * @covers :: - */ -class SourceTest extends \PHPUnit_Framework_TestCase -{ - /** - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Source::__construct - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::getName - */ - public function testIfCorrectTagNameIsReturned() - { - $fixture = new Source(1, null, new Description('Description')); - - $this->assertSame('source', $fixture->getName()); - } - - /** - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Source::__construct - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Source::__toString - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Formatter\PassthroughFormatter - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::render - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::getName - */ - public function testIfTagCanBeRenderedUsingDefaultFormatter() - { - $fixture = new Source(1, 10, new Description('Description')); - $this->assertSame('@source 1 10 Description', $fixture->render()); - - $fixture = new Source(1, null, new Description('Description')); - $this->assertSame('@source 1 Description', $fixture->render()); - - $fixture = new Source(1); - $this->assertSame('@source 1', $fixture->render()); - } - - /** - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Source::__construct - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::render - */ - public function testIfTagCanBeRenderedUsingSpecificFormatter() - { - $fixture = new Source(1); - - $formatter = m::mock(Formatter::class); - $formatter->shouldReceive('format')->with($fixture)->andReturn('Rendered output'); - - $this->assertSame('Rendered output', $fixture->render($formatter)); - } - - /** - * @covers ::__construct - * @covers ::getStartingLine - */ - public function testHasStartingLine() - { - $expected = 1; - - $fixture = new Source($expected); - - $this->assertSame($expected, $fixture->getStartingLine()); - } - - /** - * @covers ::__construct - * @covers ::getLineCount - */ - public function testHasLineCount() - { - $expected = 2; - - $fixture = new Source(1, $expected); - - $this->assertSame($expected, $fixture->getLineCount()); - } - - /** - * @covers ::__construct - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::getDescription - * @uses \phpDocumentor\Reflection\DocBlock\Description - */ - public function testHasDescription() - { - $expected = new Description('Description'); - - $fixture = new Source('1', null, $expected); - - $this->assertSame($expected, $fixture->getDescription()); - } - - /** - * @covers ::__construct - * @covers ::__toString - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @uses \phpDocumentor\Reflection\Types\String_ - */ - public function testStringRepresentationIsReturned() - { - $fixture = new Source(1, 10, new Description('Description')); - - $this->assertSame('1 10 Description', (string)$fixture); - } - - /** - * @covers ::create - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Source:: - * @uses \phpDocumentor\Reflection\DocBlock\DescriptionFactory - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @uses \phpDocumentor\Reflection\Types\Context - */ - public function testFactoryMethod() - { - $descriptionFactory = m::mock(DescriptionFactory::class); - $context = new Context(''); - - $description = new Description('My Description'); - $descriptionFactory->shouldReceive('create')->with('My Description', $context)->andReturn($description); - - $fixture = Source::create('1 10 My Description', $descriptionFactory, $context); - - $this->assertSame('1 10 My Description', (string)$fixture); - $this->assertSame(1, $fixture->getStartingLine()); - $this->assertSame(10, $fixture->getLineCount()); - $this->assertSame($description, $fixture->getDescription()); - } - - /** - * @covers ::create - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Source:: - * @uses \phpDocumentor\Reflection\TypeResolver - * @uses \phpDocumentor\Reflection\DocBlock\DescriptionFactory - * @expectedException \InvalidArgumentException - */ - public function testFactoryMethodFailsIfEmptyBodyIsGiven() - { - $descriptionFactory = m::mock(DescriptionFactory::class); - Source::create('', $descriptionFactory); - } - - /** - * @covers ::create - * @expectedException \InvalidArgumentException - */ - public function testFactoryMethodFailsIfBodyIsNotString() - { - Source::create([]); - } - - /** - * @covers ::create - * @uses \phpDocumentor\Reflection\TypeResolver - * @expectedException \InvalidArgumentException - */ - public function testFactoryMethodFailsIfDescriptionFactoryIsNull() - { - Source::create('1'); - } - - /** - * @covers ::__construct - * @expectedException \InvalidArgumentException - */ - public function testExceptionIsThrownIfStartingLineIsNotInteger() - { - new Source('blabla'); - } - - /** - * @covers ::__construct - * @expectedException \InvalidArgumentException - */ - public function testExceptionIsThrownIfLineCountIsNotIntegerOrNull() - { - new Source('1', []); - } -} diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/ThrowsTest.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/ThrowsTest.php deleted file mode 100644 index 657d6ca51..000000000 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/ThrowsTest.php +++ /dev/null @@ -1,170 +0,0 @@ - - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection\DocBlock\Tags; - -use Mockery as m; -use phpDocumentor\Reflection\DocBlock\Description; -use phpDocumentor\Reflection\DocBlock\DescriptionFactory; -use phpDocumentor\Reflection\TypeResolver; -use phpDocumentor\Reflection\Types\Context; -use phpDocumentor\Reflection\Types\String_; - -/** - * @coversDefaultClass \phpDocumentor\Reflection\DocBlock\Tags\Throws - * @covers :: - */ -class ThrowsTest extends \PHPUnit_Framework_TestCase -{ - /** - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Throws::__construct - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::getName - */ - public function testIfCorrectTagNameIsReturned() - { - $fixture = new Throws(new String_(), new Description('Description')); - - $this->assertSame('throws', $fixture->getName()); - } - - /** - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Throws::__construct - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Throws::__toString - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Formatter\PassthroughFormatter - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::render - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::getName - */ - public function testIfTagCanBeRenderedUsingDefaultFormatter() - { - $fixture = new Throws(new String_(), new Description('Description')); - - $this->assertSame('@throws string Description', $fixture->render()); - } - - /** - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Throws::__construct - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::render - */ - public function testIfTagCanBeRenderedUsingSpecificFormatter() - { - $fixture = new Throws(new String_(), new Description('Description')); - - $formatter = m::mock(Formatter::class); - $formatter->shouldReceive('format')->with($fixture)->andReturn('Rendered output'); - - $this->assertSame('Rendered output', $fixture->render($formatter)); - } - - /** - * @covers ::__construct - * @covers ::getType - */ - public function testHasType() - { - $expected = new String_(); - - $fixture = new Throws($expected); - - $this->assertSame($expected, $fixture->getType()); - } - - /** - * @covers ::__construct - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::getDescription - * @uses \phpDocumentor\Reflection\DocBlock\Description - */ - public function testHasDescription() - { - $expected = new Description('Description'); - - $fixture = new Throws(new String_(), $expected); - - $this->assertSame($expected, $fixture->getDescription()); - } - - /** - * @covers ::__construct - * @covers ::__toString - * @uses \phpDocumentor\Reflection\DocBlock\Description - */ - public function testStringRepresentationIsReturned() - { - $fixture = new Throws(new String_(), new Description('Description')); - - $this->assertSame('string Description', (string)$fixture); - } - - /** - * @covers ::create - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Throws:: - * @uses \phpDocumentor\Reflection\DocBlock\DescriptionFactory - * @uses \phpDocumentor\Reflection\TypeResolver - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @uses \phpDocumentor\Reflection\Types\String_ - * @uses \phpDocumentor\Reflection\Types\Context - */ - public function testFactoryMethod() - { - $descriptionFactory = m::mock(DescriptionFactory::class); - $resolver = new TypeResolver(); - $context = new Context(''); - - $type = new String_(); - $description = new Description('My Description'); - $descriptionFactory->shouldReceive('create')->with('My Description', $context)->andReturn($description); - - $fixture = Throws::create('string My Description', $resolver, $descriptionFactory, $context); - - $this->assertSame('string My Description', (string)$fixture); - $this->assertEquals($type, $fixture->getType()); - $this->assertSame($description, $fixture->getDescription()); - } - - /** - * @covers ::create - * @expectedException \InvalidArgumentException - */ - public function testFactoryMethodFailsIfBodyIsNotString() - { - $this->assertNull(Throws::create([])); - } - - /** - * @covers ::create - * @expectedException \InvalidArgumentException - */ - public function testFactoryMethodFailsIfBodyIsNotEmpty() - { - $this->assertNull(Throws::create('')); - } - - /** - * @covers ::create - * @expectedException \InvalidArgumentException - */ - public function testFactoryMethodFailsIfResolverIsNull() - { - Throws::create('body'); - } - - /** - * @covers ::create - * @expectedException \InvalidArgumentException - */ - public function testFactoryMethodFailsIfDescriptionFactoryIsNull() - { - Throws::create('body', new TypeResolver()); - } -} diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/UsesTest.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/UsesTest.php deleted file mode 100644 index 419f7e368..000000000 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/UsesTest.php +++ /dev/null @@ -1,174 +0,0 @@ - - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection\DocBlock\Tags; - -use Mockery as m; -use phpDocumentor\Reflection\DocBlock\Description; -use phpDocumentor\Reflection\DocBlock\DescriptionFactory; -use phpDocumentor\Reflection\Fqsen; -use phpDocumentor\Reflection\FqsenResolver; -use phpDocumentor\Reflection\Types\Context; - -/** - * @coversDefaultClass \phpDocumentor\Reflection\DocBlock\Tags\Uses - * @covers :: - */ -class UsesTest extends \PHPUnit_Framework_TestCase -{ - /** - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Uses::__construct - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::getName - */ - public function testIfCorrectTagNameIsReturned() - { - $fixture = new Uses(new Fqsen('\DateTime'), new Description('Description')); - - $this->assertSame('uses', $fixture->getName()); - } - - /** - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Uses::__construct - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Uses::__toString - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Formatter\PassthroughFormatter - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::render - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::getName - */ - public function testIfTagCanBeRenderedUsingDefaultFormatter() - { - $fixture = new Uses(new Fqsen('\DateTime'), new Description('Description')); - - $this->assertSame('@uses \DateTime Description', $fixture->render()); - } - - /** - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Uses::__construct - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::render - */ - public function testIfTagCanBeRenderedUsingSpecificFormatter() - { - $fixture = new Uses(new Fqsen('\DateTime'), new Description('Description')); - - $formatter = m::mock(Formatter::class); - $formatter->shouldReceive('format')->with($fixture)->andReturn('Rendered output'); - - $this->assertSame('Rendered output', $fixture->render($formatter)); - } - - /** - * @covers ::__construct - * @covers ::getReference - */ - public function testHasReferenceToFqsen() - { - $expected = new Fqsen('\DateTime'); - - $fixture = new Uses($expected); - - $this->assertSame($expected, $fixture->getReference()); - } - - /** - * @covers ::__construct - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::getDescription - * @uses \phpDocumentor\Reflection\DocBlock\Description - */ - public function testHasDescription() - { - $expected = new Description('Description'); - - $fixture = new Uses(new Fqsen('\DateTime'), $expected); - - $this->assertSame($expected, $fixture->getDescription()); - } - - /** - * @covers ::__construct - * @covers ::__toString - * @uses \phpDocumentor\Reflection\DocBlock\Description - */ - public function testStringRepresentationIsReturned() - { - $fixture = new Uses(new Fqsen('\DateTime'), new Description('Description')); - - $this->assertSame('\DateTime Description', (string)$fixture); - } - - /** - * @covers ::create - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Uses:: - * @uses \phpDocumentor\Reflection\DocBlock\DescriptionFactory - * @uses \phpDocumentor\Reflection\FqsenResolver - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @uses \phpDocumentor\Reflection\Fqsen - * @uses \phpDocumentor\Reflection\Types\Context - */ - public function testFactoryMethod() - { - $descriptionFactory = m::mock(DescriptionFactory::class); - $resolver = m::mock(FqsenResolver::class); - $context = new Context(''); - - $fqsen = new Fqsen('\DateTime'); - $description = new Description('My Description'); - - $descriptionFactory - ->shouldReceive('create')->with('My Description', $context)->andReturn($description) - ; - $resolver->shouldReceive('resolve')->with('DateTime', $context)->andReturn($fqsen); - - $fixture = Uses::create('DateTime My Description', $resolver, $descriptionFactory, $context); - - $this->assertSame('\DateTime My Description', (string)$fixture); - $this->assertSame($fqsen, $fixture->getReference()); - $this->assertSame($description, $fixture->getDescription()); - } - - /** - * @covers ::create - * @expectedException \InvalidArgumentException - */ - public function testFactoryMethodFailsIfBodyIsNotString() - { - $this->assertNull(Uses::create([])); - } - - /** - * @covers ::create - * @expectedException \InvalidArgumentException - */ - public function testFactoryMethodFailsIfBodyIsNotEmpty() - { - $this->assertNull(Uses::create('')); - } - - /** - * @covers ::create - * @expectedException \InvalidArgumentException - */ - public function testFactoryMethodFailsIfResolverIsNull() - { - Uses::create('body'); - } - - /** - * @covers ::create - * @expectedException \InvalidArgumentException - */ - public function testFactoryMethodFailsIfDescriptionFactoryIsNull() - { - Uses::create('body', new FqsenResolver()); - } -} diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/VarTest.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/VarTest.php deleted file mode 100644 index 34f290adc..000000000 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/VarTest.php +++ /dev/null @@ -1,200 +0,0 @@ - - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection\DocBlock\Tags; - -use Mockery as m; -use phpDocumentor\Reflection\DocBlock\Description; -use phpDocumentor\Reflection\DocBlock\DescriptionFactory; -use phpDocumentor\Reflection\TypeResolver; -use phpDocumentor\Reflection\Types\Context; -use phpDocumentor\Reflection\Types\String_; - -/** - * @coversDefaultClass \phpDocumentor\Reflection\DocBlock\Tags\Var_ - * @covers :: - */ -class VarTest extends \PHPUnit_Framework_TestCase -{ - /** - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Var_::__construct - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::getName - */ - public function testIfCorrectTagNameIsReturned() - { - $fixture = new Var_('myVariable', null, new Description('Description')); - - $this->assertSame('var', $fixture->getName()); - } - - /** - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Var_::__construct - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Var_::__toString - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Formatter\PassthroughFormatter - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::render - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::getName - */ - public function testIfTagCanBeRenderedUsingDefaultFormatter() - { - $fixture = new Var_('myVariable', new String_(), new Description('Description')); - $this->assertSame('@var string $myVariable Description', $fixture->render()); - - $fixture = new Var_('myVariable', null, new Description('Description')); - $this->assertSame('@var $myVariable Description', $fixture->render()); - - $fixture = new Var_('myVariable'); - $this->assertSame('@var $myVariable', $fixture->render()); - } - - /** - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Var_::__construct - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::render - */ - public function testIfTagCanBeRenderedUsingSpecificFormatter() - { - $fixture = new Var_('myVariable'); - - $formatter = m::mock(Formatter::class); - $formatter->shouldReceive('format')->with($fixture)->andReturn('Rendered output'); - - $this->assertSame('Rendered output', $fixture->render($formatter)); - } - - /** - * @covers ::__construct - * @covers ::getVariableName - */ - public function testHasVariableName() - { - $expected = 'myVariable'; - - $fixture = new Var_($expected); - - $this->assertSame($expected, $fixture->getVariableName()); - } - - /** - * @covers ::__construct - * @covers ::getType - */ - public function testHasType() - { - $expected = new String_(); - - $fixture = new Var_('myVariable', $expected); - - $this->assertSame($expected, $fixture->getType()); - } - - /** - * @covers ::__construct - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::getDescription - * @uses \phpDocumentor\Reflection\DocBlock\Description - */ - public function testHasDescription() - { - $expected = new Description('Description'); - - $fixture = new Var_('1.0', null, $expected); - - $this->assertSame($expected, $fixture->getDescription()); - } - - /** - * @covers ::__construct - * @covers ::__toString - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @uses \phpDocumentor\Reflection\Types\String_ - */ - public function testStringRepresentationIsReturned() - { - $fixture = new Var_('myVariable', new String_(), new Description('Description')); - - $this->assertSame('string $myVariable Description', (string)$fixture); - } - - /** - * @covers ::create - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Var_:: - * @uses \phpDocumentor\Reflection\DocBlock\DescriptionFactory - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @uses \phpDocumentor\Reflection\Types\Context - */ - public function testFactoryMethod() - { - $typeResolver = new TypeResolver(); - $descriptionFactory = m::mock(DescriptionFactory::class); - $context = new Context(''); - - $description = new Description('My Description'); - $descriptionFactory->shouldReceive('create')->with('My Description', $context)->andReturn($description); - - $fixture = Var_::create('string $myVariable My Description', $typeResolver, $descriptionFactory, $context); - - $this->assertSame('string $myVariable My Description', (string)$fixture); - $this->assertSame('myVariable', $fixture->getVariableName()); - $this->assertInstanceOf(String_::class, $fixture->getType()); - $this->assertSame($description, $fixture->getDescription()); - } - - /** - * @covers ::create - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Var_:: - * @uses \phpDocumentor\Reflection\TypeResolver - * @uses \phpDocumentor\Reflection\DocBlock\DescriptionFactory - * @expectedException \InvalidArgumentException - */ - public function testFactoryMethodFailsIfEmptyBodyIsGiven() - { - $descriptionFactory = m::mock(DescriptionFactory::class); - Var_::create('', new TypeResolver(), $descriptionFactory); - } - - /** - * @covers ::create - * @expectedException \InvalidArgumentException - */ - public function testFactoryMethodFailsIfBodyIsNotString() - { - Var_::create([]); - } - - /** - * @covers ::create - * @expectedException \InvalidArgumentException - */ - public function testFactoryMethodFailsIfResolverIsNull() - { - Var_::create('body'); - } - - /** - * @covers ::create - * @uses \phpDocumentor\Reflection\TypeResolver - * @expectedException \InvalidArgumentException - */ - public function testFactoryMethodFailsIfDescriptionFactoryIsNull() - { - Var_::create('body', new TypeResolver()); - } - - /** - * @covers ::__construct - * @expectedException \InvalidArgumentException - */ - public function testExceptionIsThrownIfVariableNameIsNotString() - { - new Var_([]); - } -} diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/VersionTest.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/VersionTest.php deleted file mode 100644 index 5c487fd3d..000000000 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlock/Tags/VersionTest.php +++ /dev/null @@ -1,166 +0,0 @@ - - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection\DocBlock\Tags; - -use Mockery as m; -use phpDocumentor\Reflection\DocBlock\Description; -use phpDocumentor\Reflection\DocBlock\DescriptionFactory; -use phpDocumentor\Reflection\Types\Context; - -/** - * @coversDefaultClass \phpDocumentor\Reflection\DocBlock\Tags\Version - * @covers :: - */ -class VersionTest extends \PHPUnit_Framework_TestCase -{ - /** - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Version::__construct - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::getName - */ - public function testIfCorrectTagNameIsReturned() - { - $fixture = new Version('1.0', new Description('Description')); - - $this->assertSame('version', $fixture->getName()); - } - - /** - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Version::__construct - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Version::__toString - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Formatter\PassthroughFormatter - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::render - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::getName - */ - public function testIfTagCanBeRenderedUsingDefaultFormatter() - { - $fixture = new Version('1.0', new Description('Description')); - - $this->assertSame('@version 1.0 Description', $fixture->render()); - } - - /** - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Version::__construct - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::render - */ - public function testIfTagCanBeRenderedUsingSpecificFormatter() - { - $fixture = new Version('1.0', new Description('Description')); - - $formatter = m::mock(Formatter::class); - $formatter->shouldReceive('format')->with($fixture)->andReturn('Rendered output'); - - $this->assertSame('Rendered output', $fixture->render($formatter)); - } - - /** - * @covers ::__construct - * @covers ::getVersion - */ - public function testHasVersionNumber() - { - $expected = '1.0'; - - $fixture = new Version($expected); - - $this->assertSame($expected, $fixture->getVersion()); - } - - /** - * @covers ::__construct - * @covers \phpDocumentor\Reflection\DocBlock\Tags\BaseTag::getDescription - * @uses \phpDocumentor\Reflection\DocBlock\Description - */ - public function testHasDescription() - { - $expected = new Description('Description'); - - $fixture = new Version('1.0', $expected); - - $this->assertSame($expected, $fixture->getDescription()); - } - - /** - * @covers ::__construct - * @covers ::__toString - * @uses \phpDocumentor\Reflection\DocBlock\Description - */ - public function testStringRepresentationIsReturned() - { - $fixture = new Version('1.0', new Description('Description')); - - $this->assertSame('1.0 Description', (string)$fixture); - } - - /** - * @covers ::create - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Version:: - * @uses \phpDocumentor\Reflection\DocBlock\DescriptionFactory - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @uses \phpDocumentor\Reflection\Types\Context - */ - public function testFactoryMethod() - { - $descriptionFactory = m::mock(DescriptionFactory::class); - $context = new Context(''); - - $version = '1.0'; - $description = new Description('My Description'); - - $descriptionFactory->shouldReceive('create')->with('My Description', $context)->andReturn($description); - - $fixture = Version::create('1.0 My Description', $descriptionFactory, $context); - - $this->assertSame('1.0 My Description', (string)$fixture); - $this->assertSame($version, $fixture->getVersion()); - $this->assertSame($description, $fixture->getDescription()); - } - - /** - * @covers ::create - * @uses \phpDocumentor\Reflection\DocBlock\Tags\Version:: - * @uses \phpDocumentor\Reflection\DocBlock\DescriptionFactory - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @uses \phpDocumentor\Reflection\Types\Context - */ - public function testFactoryMethodCreatesEmptyVersionTag() - { - $descriptionFactory = m::mock(DescriptionFactory::class); - $descriptionFactory->shouldReceive('create')->never(); - - $fixture = Version::create('', $descriptionFactory, new Context('')); - - $this->assertSame('', (string)$fixture); - $this->assertSame(null, $fixture->getVersion()); - $this->assertSame(null, $fixture->getDescription()); - } - - /** - * @covers ::create - * @expectedException \InvalidArgumentException - */ - public function testFactoryMethodFailsIfVersionIsNotString() - { - $this->assertNull(Version::create([])); - } - - /** - * @covers ::create - */ - public function testFactoryMethodReturnsNullIfBodyDoesNotMatchRegex() - { - $this->assertNull(Version::create('dkhf<')); - } -} diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlockFactoryTest.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlockFactoryTest.php deleted file mode 100644 index f1261b65f..000000000 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlockFactoryTest.php +++ /dev/null @@ -1,290 +0,0 @@ - - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection; - -use Mockery as m; -use phpDocumentor\Reflection\DocBlock\Description; -use phpDocumentor\Reflection\DocBlock\DescriptionFactory; -use phpDocumentor\Reflection\DocBlock\Tag; -use phpDocumentor\Reflection\DocBlock\TagFactory; -use phpDocumentor\Reflection\DocBlock\Tags\Param; -use phpDocumentor\Reflection\Types\Context; - -/** - * @coversDefaultClass phpDocumentor\Reflection\DocBlockFactory - * @covers :: - * @uses \Webmozart\Assert\Assert - * @uses phpDocumentor\Reflection\DocBlock - */ -class DocBlockFactoryTest extends \PHPUnit_Framework_TestCase -{ - /** - * @covers ::__construct - * @covers ::createInstance - * @uses \phpDocumentor\Reflection\DocBlock\StandardTagFactory - * @uses \phpDocumentor\Reflection\DocBlock\DescriptionFactory - */ - public function testCreateFactoryUsingFactoryMethod() - { - $fixture = DocBlockFactory::createInstance(); - - $this->assertInstanceOf(DocBlockFactory::class, $fixture); - } - - /** - * @covers ::__construct - * @covers ::create - * @uses phpDocumentor\Reflection\DocBlock\Description - */ - public function testCreateDocBlockFromReflection() - { - $fixture = new DocBlockFactory(m::mock(DescriptionFactory::class), m::mock(TagFactory::class)); - - $docBlock = '/** This is a DocBlock */'; - $classReflector = m::mock(\ReflectionClass::class); - $classReflector->shouldReceive('getDocComment')->andReturn($docBlock); - $docblock = $fixture->create($classReflector); - - $this->assertInstanceOf(DocBlock::class, $docblock); - $this->assertSame('This is a DocBlock', $docblock->getSummary()); - $this->assertEquals(new Description(''), $docblock->getDescription()); - $this->assertSame([], $docblock->getTags()); - $this->assertEquals(new Context(''), $docblock->getContext()); - $this->assertNull($docblock->getLocation()); - } - - /** - * @covers ::__construct - * @covers ::create - * @uses phpDocumentor\Reflection\DocBlock\Description - */ - public function testCreateDocBlockFromStringWithDocComment() - { - $fixture = new DocBlockFactory(m::mock(DescriptionFactory::class), m::mock(TagFactory::class)); - - $docblock = $fixture->create('/** This is a DocBlock */'); - - $this->assertInstanceOf(DocBlock::class, $docblock); - $this->assertSame('This is a DocBlock', $docblock->getSummary()); - $this->assertEquals(new Description(''), $docblock->getDescription()); - $this->assertSame([], $docblock->getTags()); - $this->assertEquals(new Context(''), $docblock->getContext()); - $this->assertNull($docblock->getLocation()); - } - - /** - * @covers ::create - * @covers ::__construct - * @uses phpDocumentor\Reflection\DocBlock\Description - */ - public function testCreateDocBlockFromStringWithoutDocComment() - { - $fixture = new DocBlockFactory(m::mock(DescriptionFactory::class), m::mock(TagFactory::class)); - - $docblock = $fixture->create('This is a DocBlock'); - - $this->assertInstanceOf(DocBlock::class, $docblock); - $this->assertSame('This is a DocBlock', $docblock->getSummary()); - $this->assertEquals(new Description(''), $docblock->getDescription()); - $this->assertSame([], $docblock->getTags()); - $this->assertEquals(new Context(''), $docblock->getContext()); - $this->assertNull($docblock->getLocation()); - } - - /** - * @covers ::__construct - * @covers ::create - * @uses phpDocumentor\Reflection\DocBlock\DescriptionFactory - * @uses phpDocumentor\Reflection\DocBlock\Description - * @dataProvider provideSummaryAndDescriptions - */ - public function testSummaryAndDescriptionAreSeparated($given, $summary, $description) - { - $tagFactory = m::mock(TagFactory::class); - $fixture = new DocBlockFactory(new DescriptionFactory($tagFactory), $tagFactory); - - $docblock = $fixture->create($given); - - $this->assertSame($summary, $docblock->getSummary()); - $this->assertEquals(new Description($description), $docblock->getDescription()); - } - - /** - * @covers ::__construct - * @covers ::create - * @uses phpDocumentor\Reflection\DocBlock\DescriptionFactory - * @uses phpDocumentor\Reflection\DocBlock\Description - */ - public function testDescriptionsRetainFormatting() - { - $tagFactory = m::mock(TagFactory::class); - $fixture = new DocBlockFactory(new DescriptionFactory($tagFactory), $tagFactory); - - $given = <<create($given); - - $this->assertEquals(new Description($description), $docblock->getDescription()); - } - - /** - * @covers ::__construct - * @covers ::create - * @uses phpDocumentor\Reflection\DocBlock\DescriptionFactory - * @uses phpDocumentor\Reflection\DocBlock\Description - */ - public function testTagsAreInterpretedUsingFactory() - { - $tagString = << This is with - multiline description. -TAG; - - $tag = m::mock(Tag::class); - $tagFactory = m::mock(TagFactory::class); - $tagFactory->shouldReceive('create')->with($tagString, m::type(Context::class))->andReturn($tag); - - $fixture = new DocBlockFactory(new DescriptionFactory($tagFactory), $tagFactory); - - $given = << This is with - * multiline description. - */ -DOCBLOCK; - - $docblock = $fixture->create($given, new Context('')); - - $this->assertEquals([$tag], $docblock->getTags()); - } - - public function provideSummaryAndDescriptions() - { - return [ - ['This is a DocBlock', 'This is a DocBlock', ''], - [ - 'This is a DocBlock. This should still be summary.', - 'This is a DocBlock. This should still be summary.', - '' - ], - [ - <<shouldReceive('create')->with(m::any(), $context)->andReturn(new Param('param')); - $docblock = $fixture->create('/** @param MyType $param */', $context); - } - - /** - * @covers ::__construct - * @covers ::create - * - * @uses phpDocumentor\Reflection\DocBlock\DescriptionFactory - * @uses phpDocumentor\Reflection\DocBlock\Description - */ - public function testTagsAreFilteredForNullValues() - { - $tagString = << This is with - multiline description. -TAG; - - $tagFactory = m::mock(TagFactory::class); - $tagFactory->shouldReceive('create')->with($tagString, m::any())->andReturn(null); - - $fixture = new DocBlockFactory(new DescriptionFactory($tagFactory), $tagFactory); - - $given = << This is with - * multiline description. - */ -DOCBLOCK; - - $docblock = $fixture->create($given, new Context('')); - - $this->assertEquals([], $docblock->getTags()); - } -} diff --git a/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlockTest.php b/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlockTest.php deleted file mode 100644 index 4a8d4ded0..000000000 --- a/lib/composer/vendor/phpdocumentor/reflection-docblock/tests/unit/DocBlockTest.php +++ /dev/null @@ -1,252 +0,0 @@ - - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection; - -use Mockery as m; -use phpDocumentor\Reflection\Types\Context; - -/** - * @coversDefaultClass phpDocumentor\Reflection\DocBlock - * @covers :: - * @uses \Webmozart\Assert\Assert - */ -class DocBlockTest extends \PHPUnit_Framework_TestCase -{ - /** - * @covers ::__construct - * @covers ::getSummary - * - * @uses \phpDocumentor\Reflection\DocBlock\Description - */ - public function testDocBlockCanHaveASummary() - { - $summary = 'This is a summary'; - - $fixture = new DocBlock($summary); - - $this->assertSame($summary, $fixture->getSummary()); - } - - /** - * @covers ::__construct - * - * @expectedException \InvalidArgumentException - */ - public function testExceptionIsThrownIfSummaryIsNotAString() - { - new DocBlock([]); - } - - /** - * @covers ::__construct - * - * @expectedException \InvalidArgumentException - */ - public function testExceptionIsThrownIfTemplateStartIsNotABoolean() - { - new DocBlock('', null, [], null, null, ['is not boolean']); - } - - /** - * @covers ::__construct - * - * @expectedException \InvalidArgumentException - */ - public function testExceptionIsThrownIfTemplateEndIsNotABoolean() - { - new DocBlock('', null, [], null, null, false, ['is not boolean']); - } - - /** - * @covers ::__construct - * @covers ::getDescription - * - * @uses \phpDocumentor\Reflection\DocBlock\Description - */ - public function testDocBlockCanHaveADescription() - { - $description = new DocBlock\Description(''); - - $fixture = new DocBlock('', $description); - - $this->assertSame($description, $fixture->getDescription()); - } - - /** - * @covers ::__construct - * @covers ::getTags - * - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @uses \phpDocumentor\Reflection\DocBlock\Tag - */ - public function testDocBlockCanHaveTags() - { - $tags = [ - m::mock(DocBlock\Tag::class) - ]; - - $fixture = new DocBlock('', null, $tags); - - $this->assertSame($tags, $fixture->getTags()); - } - - /** - * @covers ::__construct - * @covers ::getTags - * - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @uses \phpDocumentor\Reflection\DocBlock\Tag - * - * @expectedException \InvalidArgumentException - */ - public function testDocBlockAllowsOnlyTags() - { - $tags = [ - null - ]; - - $fixture = new DocBlock('', null, $tags); - } - - /** - * @covers ::__construct - * @covers ::getTagsByName - * - * @uses \phpDocumentor\Reflection\DocBlock::getTags - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @uses \phpDocumentor\Reflection\DocBlock\Tag - */ - public function testFindTagsInDocBlockByName() - { - $tag1 = m::mock(DocBlock\Tag::class); - $tag2 = m::mock(DocBlock\Tag::class); - $tag3 = m::mock(DocBlock\Tag::class); - $tags = [$tag1, $tag2, $tag3]; - - $tag1->shouldReceive('getName')->andReturn('abc'); - $tag2->shouldReceive('getName')->andReturn('abcd'); - $tag3->shouldReceive('getName')->andReturn('ab'); - - $fixture = new DocBlock('', null, $tags); - - $this->assertSame([$tag2], $fixture->getTagsByName('abcd')); - $this->assertSame([], $fixture->getTagsByName('Ebcd')); - } - - /** - * @covers ::__construct - * @covers ::getTagsByName - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @expectedException \InvalidArgumentException - */ - public function testExceptionIsThrownIfNameForTagsIsNotString() - { - $fixture = new DocBlock(); - $fixture->getTagsByName([]); - } - - /** - * @covers ::__construct - * @covers ::hasTag - * - * @uses \phpDocumentor\Reflection\DocBlock::getTags - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @uses \phpDocumentor\Reflection\DocBlock\Tag - */ - public function testCheckIfThereAreTagsWithAGivenName() - { - $tag1 = m::mock(DocBlock\Tag::class); - $tag2 = m::mock(DocBlock\Tag::class); - $tag3 = m::mock(DocBlock\Tag::class); - $tags = [$tag1, $tag2, $tag3]; - - $tag1->shouldReceive('getName')->twice()->andReturn('abc'); - $tag2->shouldReceive('getName')->twice()->andReturn('abcd'); - $tag3->shouldReceive('getName')->once(); - - $fixture = new DocBlock('', null, $tags); - - $this->assertTrue($fixture->hasTag('abcd')); - $this->assertFalse($fixture->hasTag('Ebcd')); - } - - /** - * @covers ::__construct - * @covers ::hasTag - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @expectedException \InvalidArgumentException - */ - public function testExceptionIsThrownIfNameForCheckingTagsIsNotString() - { - $fixture = new DocBlock(); - $fixture->hasTag([]); - } - - /** - * @covers ::__construct - * @covers ::getContext - * - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @uses \phpDocumentor\Reflection\Types\Context - */ - public function testDocBlockKnowsInWhichNamespaceItIsAndWhichAliasesThereAre() - { - $context = new Context(''); - - $fixture = new DocBlock('', null, [], $context); - - $this->assertSame($context, $fixture->getContext()); - } - - /** - * @covers ::__construct - * @covers ::getLocation - * - * @uses \phpDocumentor\Reflection\DocBlock\Description - * @uses \phpDocumentor\Reflection\Location - */ - public function testDocBlockKnowsAtWhichLineItIs() - { - $location = new Location(10); - - $fixture = new DocBlock('', null, [], null, $location); - - $this->assertSame($location, $fixture->getLocation()); - } - - /** - * @covers ::__construct - * @covers ::isTemplateStart - * - * @uses \phpDocumentor\Reflection\DocBlock\Description - */ - public function testDocBlockKnowsIfItIsTheStartOfADocBlockTemplate() - { - $fixture = new DocBlock('', null, [], null, null, true); - - $this->assertTrue($fixture->isTemplateStart()); - } - - /** - * @covers ::__construct - * @covers ::isTemplateEnd - * - * @uses \phpDocumentor\Reflection\DocBlock\Description - */ - public function testDocBlockKnowsIfItIsTheEndOfADocBlockTemplate() - { - $fixture = new DocBlock('', null, [], null, null, false, true); - - $this->assertTrue($fixture->isTemplateEnd()); - } -} diff --git a/lib/composer/vendor/phpdocumentor/type-resolver/.gitignore b/lib/composer/vendor/phpdocumentor/type-resolver/.gitignore deleted file mode 100644 index 82cfc4e95..000000000 --- a/lib/composer/vendor/phpdocumentor/type-resolver/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -.idea -composer.lock -vendor diff --git a/lib/composer/vendor/phpdocumentor/type-resolver/.scrutinizer.yml b/lib/composer/vendor/phpdocumentor/type-resolver/.scrutinizer.yml deleted file mode 100644 index 7d7372a84..000000000 --- a/lib/composer/vendor/phpdocumentor/type-resolver/.scrutinizer.yml +++ /dev/null @@ -1,31 +0,0 @@ -before_commands: - - "composer install --no-dev --prefer-source" - -tools: - external_code_coverage: true - php_code_sniffer: - config: - standard: PSR2 - filter: - paths: ["src/*", "tests/*"] - php_cpd: - enabled: true - excluded_dirs: ["tests", "vendor"] - php_loc: - enabled: true - excluded_dirs: ["tests", "vendor"] - php_mess_detector: - enabled: true - config: - ruleset: phpmd.xml.dist - design_rules: { eval_expression: false } - filter: - paths: ["src/*"] - php_pdepend: - enabled: true - excluded_dirs: ["tests", "vendor"] - php_analyzer: - enabled: true - filter: - paths: ["src/*", "tests/*"] - sensiolabs_security_checker: true diff --git a/lib/composer/vendor/phpdocumentor/type-resolver/.travis.yml b/lib/composer/vendor/phpdocumentor/type-resolver/.travis.yml deleted file mode 100644 index c882b141b..000000000 --- a/lib/composer/vendor/phpdocumentor/type-resolver/.travis.yml +++ /dev/null @@ -1,34 +0,0 @@ -language: php -php: - - 5.5 - - 5.6 - - 7.0 - - hhvm - - nightly - -matrix: - allow_failures: - - php: - - hhvm - - nightly - -cache: - directories: - - $HOME/.composer/cache - -script: - - vendor/bin/phpunit --coverage-clover=coverage.clover -v - - composer update --no-interaction --prefer-source - - vendor/bin/phpunit -v - -before_script: - - composer install --no-interaction - -after_script: - - if [ $TRAVIS_PHP_VERSION = '5.6' ]; then wget https://scrutinizer-ci.com/ocular.phar; php ocular.phar code-coverage:upload --format=php-clover coverage.clover; fi - -notifications: - irc: "irc.freenode.org#phpdocumentor" - email: - - me@mikevanriel.com - - ashnazg@php.net diff --git a/lib/composer/vendor/phpdocumentor/type-resolver/README.md b/lib/composer/vendor/phpdocumentor/type-resolver/README.md index ca8147bc9..fad34006d 100644 --- a/lib/composer/vendor/phpdocumentor/type-resolver/README.md +++ b/lib/composer/vendor/phpdocumentor/type-resolver/README.md @@ -61,8 +61,10 @@ Where the FqsenResolver can resolve: In order to resolve a type you will have to instantiate the class `\phpDocumentor\Reflection\TypeResolver` and call its `resolve` method like this: - $typeResolver = new \phpDocumentor\Reflection\TypeResolver(); - $type = $typeResolver->resolve('string|integer'); +```php +$typeResolver = new \phpDocumentor\Reflection\TypeResolver(); +$type = $typeResolver->resolve('string|integer'); +``` In this example you will receive a Value Object of class `\phpDocumentor\Reflection\Types\Compound` that has two elements, one of type `\phpDocumentor\Reflection\Types\String_` and one of type @@ -77,8 +79,10 @@ in which namespace the given expression occurs and which namespace aliases (or i A Fully Qualified Structural Element Name is a reference to another element in your code bases and can be resolved using the `\phpDocumentor\Reflection\FqsenResolver` class' `resolve` method, like this: - $fqsenResolver = new \phpDocumentor\Reflection\FqsenResolver(); - $fqsen = $fqsenResolver->resolve('\phpDocumentor\Reflection\FqsenResolver::resolve()'); +```php +$fqsenResolver = new \phpDocumentor\Reflection\FqsenResolver(); +$fqsen = $fqsenResolver->resolve('\phpDocumentor\Reflection\FqsenResolver::resolve()'); +``` In this example we resolve a Fully Qualified Structural Element Name (meaning that it includes the full namespace, class name and element name) and receive a Value Object of type `\phpDocumentor\Reflection\Fqsen`. @@ -95,7 +99,6 @@ names. For example, you have this file: ```php - '\phpDocumentor\Reflection\Types'] - ); +```php +$context = new \phpDocumentor\Reflection\Types\Context( + '\My\Example', + [ 'Types' => '\phpDocumentor\Reflection\Types'] +); +``` Or by using the `\phpDocumentor\Reflection\Types\ContextFactory` to instantiate a new context based on a Reflector object or by providing the namespace that you'd like to extract and the source code of the file in which the given type expression occurs. - $contextFactory = new \phpDocumentor\Reflection\Types\ContextFactory(); - $context = $contextFactory->createFromReflector(new ReflectionMethod('\My\Example\Classy', '__construct')); +```php +$contextFactory = new \phpDocumentor\Reflection\Types\ContextFactory(); +$context = $contextFactory->createFromReflector(new ReflectionMethod('\My\Example\Classy', '__construct')); +``` or - $contextFactory = new \phpDocumentor\Reflection\Types\ContextFactory(); - $context = $contextFactory->createForNamespace('\My\Example', file_get_contents('My/Example/Classy.php')); +```php +$contextFactory = new \phpDocumentor\Reflection\Types\ContextFactory(); +$context = $contextFactory->createForNamespace('\My\Example', file_get_contents('My/Example/Classy.php')); +``` ### Using the Context @@ -145,8 +154,10 @@ class as second argument and the Resolvers will take this into account when reso To obtain the resolved class name for the `@var` tag in the example above you can do: - $typeResolver = new \phpDocumentor\Reflection\TypeResolver(); - $type = $typeResolver->resolve('Types\Context', $context); +```php +$typeResolver = new \phpDocumentor\Reflection\TypeResolver(); +$type = $typeResolver->resolve('Types\Context', $context); +``` When you do this you will receive an object of class `\phpDocumentor\Reflection\Types\Object_` for which you can call the `getFqsen` method to receive a Value Object that represents the complete FQSEN. So that would be @@ -161,8 +172,10 @@ the `getFqsen` method to receive a Value Object that represents the complete FQS Another example is on how to resolve the FQSEN of a method as can be seen with the `@see` tag in the example above. To resolve that you can do the following: - $fqsenResolver = new \phpDocumentor\Reflection\FqsenResolver(); - $type = $fqsenResolver->resolve('Classy::otherFunction()', $context); +```php +$fqsenResolver = new \phpDocumentor\Reflection\FqsenResolver(); +$type = $fqsenResolver->resolve('Classy::otherFunction()', $context); +``` Because Classy is a Class in the current namespace its FQSEN will have the `My\Example` namespace and by calling the `resolve` method of the FQSEN Resolver you will receive an `Fqsen` object that refers to diff --git a/lib/composer/vendor/phpdocumentor/type-resolver/composer.json b/lib/composer/vendor/phpdocumentor/type-resolver/composer.json index abaa965d0..82ead1564 100644 --- a/lib/composer/vendor/phpdocumentor/type-resolver/composer.json +++ b/lib/composer/vendor/phpdocumentor/type-resolver/composer.json @@ -6,7 +6,7 @@ {"name": "Mike van Riel", "email": "me@mikevanriel.com"} ], "require": { - "php": ">=5.5", + "php": "^5.5 || ^7.0", "phpdocumentor/reflection-common": "^1.0" }, "autoload": { diff --git a/lib/composer/vendor/phpdocumentor/type-resolver/examples/01-resolving-simple-types.php b/lib/composer/vendor/phpdocumentor/type-resolver/examples/01-resolving-simple-types.php deleted file mode 100644 index 682b1d3da..000000000 --- a/lib/composer/vendor/phpdocumentor/type-resolver/examples/01-resolving-simple-types.php +++ /dev/null @@ -1,13 +0,0 @@ -resolve('string|integer')); - -// Will return the string "string|int" -var_dump((string)$typeResolver->resolve('string|integer')); diff --git a/lib/composer/vendor/phpdocumentor/type-resolver/examples/02-resolving-classes.php b/lib/composer/vendor/phpdocumentor/type-resolver/examples/02-resolving-classes.php deleted file mode 100644 index 70aa5e422..000000000 --- a/lib/composer/vendor/phpdocumentor/type-resolver/examples/02-resolving-classes.php +++ /dev/null @@ -1,12 +0,0 @@ - 'Mockery' ]); -var_dump((string)$typeResolver->resolve('Types\Resolver|m\MockInterface', $context)); diff --git a/lib/composer/vendor/phpdocumentor/type-resolver/examples/03-resolving-all-elements.php b/lib/composer/vendor/phpdocumentor/type-resolver/examples/03-resolving-all-elements.php deleted file mode 100644 index 4f4282eb1..000000000 --- a/lib/composer/vendor/phpdocumentor/type-resolver/examples/03-resolving-all-elements.php +++ /dev/null @@ -1,17 +0,0 @@ -resolve('Types\Resolver::resolveFqsen()', $context)); - -// Property named: \phpDocumentor\Types\Types\Resolver::$keyWords -var_dump((string)$fqsenResolver->resolve('Types\Resolver::$keyWords', $context)); diff --git a/lib/composer/vendor/phpdocumentor/type-resolver/examples/04-discovering-the-context-using-class-reflection.php b/lib/composer/vendor/phpdocumentor/type-resolver/examples/04-discovering-the-context-using-class-reflection.php deleted file mode 100644 index 957c97dda..000000000 --- a/lib/composer/vendor/phpdocumentor/type-resolver/examples/04-discovering-the-context-using-class-reflection.php +++ /dev/null @@ -1,30 +0,0 @@ -createFromReflector(new ReflectionClass('My\\Example\\Classy')); - -// Class named: \phpDocumentor\Reflection\Types\Resolver -var_dump((string)$typeResolver->resolve('Types\Resolver', $context)); - -// String -var_dump((string)$typeResolver->resolve('string', $context)); - -// Property named: \phpDocumentor\Reflection\Types\Resolver::$keyWords -var_dump((string)$fqsenResolver->resolve('Types\Resolver::$keyWords', $context)); - -// Class named: \My\Example\string -// - Shows the difference between the FqsenResolver and TypeResolver; the FqsenResolver will assume -// that the given value is not a type but most definitely a reference to another element. This is -// because conflicts between type keywords and class names can exist and if you know a reference -// is not a type but an element you can force that keywords are resolved. -var_dump((string)$fqsenResolver->resolve('string', $context)); diff --git a/lib/composer/vendor/phpdocumentor/type-resolver/examples/05-discovering-the-context-using-method-reflection.php b/lib/composer/vendor/phpdocumentor/type-resolver/examples/05-discovering-the-context-using-method-reflection.php deleted file mode 100644 index 10c0c883d..000000000 --- a/lib/composer/vendor/phpdocumentor/type-resolver/examples/05-discovering-the-context-using-method-reflection.php +++ /dev/null @@ -1,30 +0,0 @@ -createFromReflector(new ReflectionMethod('My\\Example\\Classy', '__construct')); - -// Class named: \phpDocumentor\Reflection\Types\Resolver -var_dump((string)$typeResolver->resolve('Types\Resolver', $context)); - -// String -var_dump((string)$typeResolver->resolve('string', $context)); - -// Property named: \phpDocumentor\Reflection\Types\Resolver::$keyWords -var_dump((string)$fqsenResolver->resolve('Types\Resolver::$keyWords', $context)); - -// Class named: \My\Example\string -// - Shows the difference between the FqsenResolver and TypeResolver; the FqsenResolver will assume -// that the given value is not a type but most definitely a reference to another element. This is -// because conflicts between type keywords and class names can exist and if you know a reference -// is not a type but an element you can force that keywords are resolved. -var_dump((string)$fqsenResolver->resolve('string', $context)); diff --git a/lib/composer/vendor/phpdocumentor/type-resolver/examples/06-discovering-the-context-using-file-contents.php b/lib/composer/vendor/phpdocumentor/type-resolver/examples/06-discovering-the-context-using-file-contents.php deleted file mode 100644 index a93728c8e..000000000 --- a/lib/composer/vendor/phpdocumentor/type-resolver/examples/06-discovering-the-context-using-file-contents.php +++ /dev/null @@ -1,22 +0,0 @@ -createForNamespace('My\Example', file_get_contents('Classy.php')); - -// Class named: \phpDocumentor\Reflection\Types\Resolver -var_dump((string)$typeResolver->resolve('Types\Resolver', $context)); - -// String -var_dump((string)$typeResolver->resolve('string', $context)); - -// Property named: \phpDocumentor\Reflection\Types\Resolver::$keyWords -var_dump((string)$fqsenResolver->resolve('Types\Resolver::$keyWords', $context)); diff --git a/lib/composer/vendor/phpdocumentor/type-resolver/examples/Classy.php b/lib/composer/vendor/phpdocumentor/type-resolver/examples/Classy.php deleted file mode 100644 index 0705266f5..000000000 --- a/lib/composer/vendor/phpdocumentor/type-resolver/examples/Classy.php +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - - - 40 - - - diff --git a/lib/composer/vendor/phpdocumentor/type-resolver/phpunit.xml.dist b/lib/composer/vendor/phpdocumentor/type-resolver/phpunit.xml.dist deleted file mode 100644 index 3246bef45..000000000 --- a/lib/composer/vendor/phpdocumentor/type-resolver/phpunit.xml.dist +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - ./tests/unit - - - - - ./src/ - - - ./examples/ - ./vendor/ - - - - - - diff --git a/lib/composer/vendor/phpdocumentor/type-resolver/src/FqsenResolver.php b/lib/composer/vendor/phpdocumentor/type-resolver/src/FqsenResolver.php index a0e0041c3..9aa6ba305 100644 --- a/lib/composer/vendor/phpdocumentor/type-resolver/src/FqsenResolver.php +++ b/lib/composer/vendor/phpdocumentor/type-resolver/src/FqsenResolver.php @@ -52,6 +52,7 @@ private function isFqsen($type) * @param Context $context * * @return Fqsen + * @throws \InvalidArgumentException when type is not a valid FQSEN. */ private function resolvePartialStructuralElementName($type, Context $context) { diff --git a/lib/composer/vendor/phpdocumentor/type-resolver/src/TypeResolver.php b/lib/composer/vendor/phpdocumentor/type-resolver/src/TypeResolver.php index 3a68a4d37..08b2a5f8a 100644 --- a/lib/composer/vendor/phpdocumentor/type-resolver/src/TypeResolver.php +++ b/lib/composer/vendor/phpdocumentor/type-resolver/src/TypeResolver.php @@ -15,6 +15,8 @@ use phpDocumentor\Reflection\Types\Array_; use phpDocumentor\Reflection\Types\Compound; use phpDocumentor\Reflection\Types\Context; +use phpDocumentor\Reflection\Types\Iterable_; +use phpDocumentor\Reflection\Types\Nullable; use phpDocumentor\Reflection\Types\Object_; final class TypeResolver @@ -27,27 +29,29 @@ final class TypeResolver /** @var string[] List of recognized keywords and unto which Value Object they map */ private $keywords = array( - 'string' => 'phpDocumentor\Reflection\Types\String_', - 'int' => 'phpDocumentor\Reflection\Types\Integer', - 'integer' => 'phpDocumentor\Reflection\Types\Integer', - 'bool' => 'phpDocumentor\Reflection\Types\Boolean', - 'boolean' => 'phpDocumentor\Reflection\Types\Boolean', - 'float' => 'phpDocumentor\Reflection\Types\Float_', - 'double' => 'phpDocumentor\Reflection\Types\Float_', - 'object' => 'phpDocumentor\Reflection\Types\Object_', - 'mixed' => 'phpDocumentor\Reflection\Types\Mixed', - 'array' => 'phpDocumentor\Reflection\Types\Array_', - 'resource' => 'phpDocumentor\Reflection\Types\Resource', - 'void' => 'phpDocumentor\Reflection\Types\Void_', - 'null' => 'phpDocumentor\Reflection\Types\Null_', - 'scalar' => 'phpDocumentor\Reflection\Types\Scalar', - 'callback' => 'phpDocumentor\Reflection\Types\Callable_', - 'callable' => 'phpDocumentor\Reflection\Types\Callable_', - 'false' => 'phpDocumentor\Reflection\Types\Boolean', - 'true' => 'phpDocumentor\Reflection\Types\Boolean', - 'self' => 'phpDocumentor\Reflection\Types\Self_', - '$this' => 'phpDocumentor\Reflection\Types\This', - 'static' => 'phpDocumentor\Reflection\Types\Static_' + 'string' => Types\String_::class, + 'int' => Types\Integer::class, + 'integer' => Types\Integer::class, + 'bool' => Types\Boolean::class, + 'boolean' => Types\Boolean::class, + 'float' => Types\Float_::class, + 'double' => Types\Float_::class, + 'object' => Object_::class, + 'mixed' => Types\Mixed_::class, + 'array' => Array_::class, + 'resource' => Types\Resource_::class, + 'void' => Types\Void_::class, + 'null' => Types\Null_::class, + 'scalar' => Types\Scalar::class, + 'callback' => Types\Callable_::class, + 'callable' => Types\Callable_::class, + 'false' => Types\Boolean::class, + 'true' => Types\Boolean::class, + 'self' => Types\Self_::class, + '$this' => Types\This::class, + 'static' => Types\Static_::class, + 'parent' => Types\Parent_::class, + 'iterable' => Iterable_::class, ); /** @var FqsenResolver */ @@ -100,6 +104,8 @@ public function resolve($type, Context $context = null) } switch (true) { + case $this->isNullableType($type): + return $this->resolveNullableType($type, $context); case $this->isKeyword($type): return $this->resolveKeyword($type); case ($this->isCompoundType($type)): @@ -206,6 +212,18 @@ private function isCompoundType($type) return strpos($type, '|') !== false; } + /** + * Test whether the given type is a nullable type (i.e. `?string`) + * + * @param string $type + * + * @return bool + */ + private function isNullableType($type) + { + return $type[0] === '?'; + } + /** * Resolves the given typed array string (i.e. `string[]`) into an Array object with the right types set. * @@ -237,6 +255,7 @@ private function resolveKeyword($type) * Resolves the given FQSEN string into an FQSEN object. * * @param string $type + * @param Context|null $context * * @return Object_ */ @@ -263,4 +282,17 @@ private function resolveCompoundType($type, Context $context) return new Compound($types); } + + /** + * Resolve nullable types (i.e. `?string`) into a Nullable type wrapper + * + * @param string $type + * @param Context $context + * + * @return Nullable + */ + private function resolveNullableType($type, Context $context) + { + return new Nullable($this->resolve(ltrim($type, '?'), $context)); + } } diff --git a/lib/composer/vendor/phpdocumentor/type-resolver/src/Types/Array_.php b/lib/composer/vendor/phpdocumentor/type-resolver/src/Types/Array_.php index 45276c6bd..49b7c6ea0 100644 --- a/lib/composer/vendor/phpdocumentor/type-resolver/src/Types/Array_.php +++ b/lib/composer/vendor/phpdocumentor/type-resolver/src/Types/Array_.php @@ -12,7 +12,6 @@ namespace phpDocumentor\Reflection\Types; -use phpDocumentor\Reflection\Fqsen; use phpDocumentor\Reflection\Type; /** @@ -20,7 +19,7 @@ * * An array can be represented in two forms: * - * 1. Untyped (`array`), where the key and value type is unknown and hence classified as 'Mixed'. + * 1. Untyped (`array`), where the key and value type is unknown and hence classified as 'Mixed_'. * 2. Types (`string[]`), where the value type is provided by preceding an opening and closing square bracket with a * type name. */ @@ -44,7 +43,7 @@ public function __construct(Type $valueType = null, Type $keyType = null) $keyType = new Compound([ new String_(), new Integer() ]); } if ($valueType === null) { - $valueType = new Mixed(); + $valueType = new Mixed_(); } $this->valueType = $valueType; @@ -78,7 +77,7 @@ public function getValueType() */ public function __toString() { - if ($this->valueType instanceof Mixed) { + if ($this->valueType instanceof Mixed_) { return 'array'; } diff --git a/lib/composer/vendor/phpdocumentor/type-resolver/src/Types/Compound.php b/lib/composer/vendor/phpdocumentor/type-resolver/src/Types/Compound.php index 3e5ebb5c8..be986c317 100644 --- a/lib/composer/vendor/phpdocumentor/type-resolver/src/Types/Compound.php +++ b/lib/composer/vendor/phpdocumentor/type-resolver/src/Types/Compound.php @@ -12,6 +12,8 @@ namespace phpDocumentor\Reflection\Types; +use ArrayIterator; +use IteratorAggregate; use phpDocumentor\Reflection\Type; /** @@ -21,15 +23,16 @@ * using an OR operator (`|`). This combination of types signifies that whatever is associated with this compound type * may contain a value with any of the given types. */ -final class Compound implements Type +final class Compound implements Type, IteratorAggregate { /** @var Type[] */ - private $types = []; + private $types; /** * Initializes a compound type (i.e. `string|int`) and tests if the provided types all implement the Type interface. * * @param Type[] $types + * @throws \InvalidArgumentException when types are not all instance of Type */ public function __construct(array $types) { @@ -79,4 +82,12 @@ public function __toString() { return implode('|', $this->types); } + + /** + * {@inheritdoc} + */ + public function getIterator() + { + return new ArrayIterator($this->types); + } } diff --git a/lib/composer/vendor/phpdocumentor/type-resolver/src/Types/Context.php b/lib/composer/vendor/phpdocumentor/type-resolver/src/Types/Context.php index b4aa8f219..4e9ce5a03 100644 --- a/lib/composer/vendor/phpdocumentor/type-resolver/src/Types/Context.php +++ b/lib/composer/vendor/phpdocumentor/type-resolver/src/Types/Context.php @@ -29,10 +29,10 @@ final class Context { /** @var string The current namespace. */ - private $namespace = ''; + private $namespace; /** @var array List of namespace aliases => Fully Qualified Namespace. */ - private $namespaceAliases = []; + private $namespaceAliases; /** * Initializes the new context and normalizes all passed namespaces to be in Qualified Namespace Name (QNN) @@ -51,7 +51,7 @@ public function __construct($namespace, array $namespaceAliases = []) if ($fqnn[0] === '\\') { $fqnn = substr($fqnn, 1); } - if ($fqnn[count($fqnn)-1] === '\\') { + if ($fqnn[strlen($fqnn) - 1] === '\\') { $fqnn = substr($fqnn, 0, -1); } diff --git a/lib/composer/vendor/phpdocumentor/type-resolver/src/Types/ContextFactory.php b/lib/composer/vendor/phpdocumentor/type-resolver/src/Types/ContextFactory.php index 147df6946..30936a304 100644 --- a/lib/composer/vendor/phpdocumentor/type-resolver/src/Types/ContextFactory.php +++ b/lib/composer/vendor/phpdocumentor/type-resolver/src/Types/ContextFactory.php @@ -32,7 +32,7 @@ final class ContextFactory /** * Build a Context given a Class Reflection. * - * @param \ReflectionClass $reflector + * @param \Reflector $reflector * * @see Context for more information on Contexts. * diff --git a/lib/composer/vendor/phpdocumentor/type-resolver/src/Types/Iterable_.php b/lib/composer/vendor/phpdocumentor/type-resolver/src/Types/Iterable_.php new file mode 100644 index 000000000..0cbf48f7b --- /dev/null +++ b/lib/composer/vendor/phpdocumentor/type-resolver/src/Types/Iterable_.php @@ -0,0 +1,31 @@ + + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ + +namespace phpDocumentor\Reflection\Types; + +use phpDocumentor\Reflection\Type; + +/** + * Value Object representing iterable type + */ +final class Iterable_ implements Type +{ + /** + * Returns a rendered output of the Type as it would be used in a DocBlock. + * + * @return string + */ + public function __toString() + { + return 'iterable'; + } +} diff --git a/lib/composer/vendor/phpdocumentor/type-resolver/src/Types/Mixed.php b/lib/composer/vendor/phpdocumentor/type-resolver/src/Types/Mixed.php deleted file mode 100644 index 79695f454..000000000 --- a/lib/composer/vendor/phpdocumentor/type-resolver/src/Types/Mixed.php +++ /dev/null @@ -1,31 +0,0 @@ - - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection\Types; - -use phpDocumentor\Reflection\Type; - -/** - * Value Object representing an unknown, or mixed, type. - */ -final class Mixed implements Type -{ - /** - * Returns a rendered output of the Type as it would be used in a DocBlock. - * - * @return string - */ - public function __toString() - { - return 'mixed'; - } -} diff --git a/lib/composer/vendor/phpdocumentor/type-resolver/src/Types/Mixed_.php b/lib/composer/vendor/phpdocumentor/type-resolver/src/Types/Mixed_.php new file mode 100644 index 000000000..c1c165f47 --- /dev/null +++ b/lib/composer/vendor/phpdocumentor/type-resolver/src/Types/Mixed_.php @@ -0,0 +1,31 @@ + + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ + +namespace phpDocumentor\Reflection\Types; + +use phpDocumentor\Reflection\Type; + +/** + * Value Object representing an unknown, or mixed, type. + */ +final class Mixed_ implements Type +{ + /** + * Returns a rendered output of the Type as it would be used in a DocBlock. + * + * @return string + */ + public function __toString() + { + return 'mixed'; + } +} diff --git a/lib/composer/vendor/phpdocumentor/type-resolver/src/Types/Nullable.php b/lib/composer/vendor/phpdocumentor/type-resolver/src/Types/Nullable.php new file mode 100644 index 000000000..3c6d1b135 --- /dev/null +++ b/lib/composer/vendor/phpdocumentor/type-resolver/src/Types/Nullable.php @@ -0,0 +1,56 @@ + + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ + +namespace phpDocumentor\Reflection\Types; + +use phpDocumentor\Reflection\Type; + +/** + * Value Object representing a nullable type. The real type is wrapped. + */ +final class Nullable implements Type +{ + /** + * @var Type + */ + private $realType; + + /** + * Initialises this nullable type using the real type embedded + * + * @param Type $realType + */ + public function __construct(Type $realType) + { + $this->realType = $realType; + } + + /** + * Provide access to the actual type directly, if needed. + * + * @return Type + */ + public function getActualType() + { + return $this->realType; + } + + /** + * Returns a rendered output of the Type as it would be used in a DocBlock. + * + * @return string + */ + public function __toString() + { + return '?' . $this->realType->__toString(); + } +} diff --git a/lib/composer/vendor/phpdocumentor/type-resolver/src/Types/Object_.php b/lib/composer/vendor/phpdocumentor/type-resolver/src/Types/Object_.php index b337c7157..389f7c70f 100644 --- a/lib/composer/vendor/phpdocumentor/type-resolver/src/Types/Object_.php +++ b/lib/composer/vendor/phpdocumentor/type-resolver/src/Types/Object_.php @@ -31,6 +31,7 @@ final class Object_ implements Type * Initializes this object with an optional FQSEN, if not provided this object is considered 'untyped'. * * @param Fqsen $fqsen + * @throws \InvalidArgumentException when provided $fqsen is not a valid type. */ public function __construct(Fqsen $fqsen = null) { diff --git a/lib/composer/vendor/phpdocumentor/type-resolver/src/Types/Parent_.php b/lib/composer/vendor/phpdocumentor/type-resolver/src/Types/Parent_.php new file mode 100644 index 000000000..aabdbfb31 --- /dev/null +++ b/lib/composer/vendor/phpdocumentor/type-resolver/src/Types/Parent_.php @@ -0,0 +1,33 @@ + + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ + +namespace phpDocumentor\Reflection\Types; + +use phpDocumentor\Reflection\Type; + +/** + * Value Object representing the 'parent' type. + * + * Parent, as a Type, represents the parent class of class in which the associated element was defined. + */ +final class Parent_ implements Type +{ + /** + * Returns a rendered output of the Type as it would be used in a DocBlock. + * + * @return string + */ + public function __toString() + { + return 'parent'; + } +} diff --git a/lib/composer/vendor/phpdocumentor/type-resolver/src/Types/Resource.php b/lib/composer/vendor/phpdocumentor/type-resolver/src/Types/Resource.php deleted file mode 100644 index 2c2526b7b..000000000 --- a/lib/composer/vendor/phpdocumentor/type-resolver/src/Types/Resource.php +++ /dev/null @@ -1,31 +0,0 @@ - - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection\Types; - -use phpDocumentor\Reflection\Type; - -/** - * Value Object representing the 'resource' Type. - */ -final class Resource implements Type -{ - /** - * Returns a rendered output of the Type as it would be used in a DocBlock. - * - * @return string - */ - public function __toString() - { - return 'resource'; - } -} diff --git a/lib/composer/vendor/phpdocumentor/type-resolver/src/Types/Resource_.php b/lib/composer/vendor/phpdocumentor/type-resolver/src/Types/Resource_.php new file mode 100644 index 000000000..a1b613dc5 --- /dev/null +++ b/lib/composer/vendor/phpdocumentor/type-resolver/src/Types/Resource_.php @@ -0,0 +1,31 @@ + + * @license http://www.opensource.org/licenses/mit-license.php MIT + * @link http://phpdoc.org + */ + +namespace phpDocumentor\Reflection\Types; + +use phpDocumentor\Reflection\Type; + +/** + * Value Object representing the 'resource' Type. + */ +final class Resource_ implements Type +{ + /** + * Returns a rendered output of the Type as it would be used in a DocBlock. + * + * @return string + */ + public function __toString() + { + return 'resource'; + } +} diff --git a/lib/composer/vendor/phpdocumentor/type-resolver/tests/unit/TypeResolverTest.php b/lib/composer/vendor/phpdocumentor/type-resolver/tests/unit/TypeResolverTest.php deleted file mode 100644 index f226f8ed0..000000000 --- a/lib/composer/vendor/phpdocumentor/type-resolver/tests/unit/TypeResolverTest.php +++ /dev/null @@ -1,395 +0,0 @@ - - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection; - -use Mockery as m; -use phpDocumentor\Reflection\Types\Array_; -use phpDocumentor\Reflection\Types\Compound; -use phpDocumentor\Reflection\Types\Context; -use phpDocumentor\Reflection\Types\Object_; - -/** - * @coversDefaultClass phpDocumentor\Reflection\TypeResolver - */ -class TypeResolverTest extends \PHPUnit_Framework_TestCase -{ - /** - * @param string $keyword - * @param string $expectedClass - * - * @covers ::__construct - * @covers ::resolve - * @covers :: - * - * @uses phpDocumentor\Reflection\Types\Context - * @uses phpDocumentor\Reflection\Types\Array_ - * @uses phpDocumentor\Reflection\Types\Object_ - * - * @dataProvider provideKeywords - */ - public function testResolvingKeywords($keyword, $expectedClass) - { - $fixture = new TypeResolver(); - - $resolvedType = $fixture->resolve($keyword, new Context('')); - - $this->assertInstanceOf($expectedClass, $resolvedType); - } - - /** - * @param string $fqsen - * - * @covers ::__construct - * @covers ::resolve - * @covers :: - * - * @uses phpDocumentor\Reflection\Types\Context - * @uses phpDocumentor\Reflection\Types\Object_ - * @uses phpDocumentor\Reflection\Fqsen - * @uses phpDocumentor\Reflection\FqsenResolver - * - * @dataProvider provideFqcn - */ - public function testResolvingFQSENs($fqsen) - { - $fixture = new TypeResolver(); - - /** @var Object_ $resolvedType */ - $resolvedType = $fixture->resolve($fqsen, new Context('')); - - $this->assertInstanceOf('phpDocumentor\Reflection\Types\Object_', $resolvedType); - $this->assertInstanceOf('phpDocumentor\Reflection\Fqsen', $resolvedType->getFqsen()); - $this->assertSame($fqsen, (string)$resolvedType); - } - - /** - * @covers ::__construct - * @covers ::resolve - * @covers :: - * - * @uses phpDocumentor\Reflection\Types\Context - * @uses phpDocumentor\Reflection\Types\Object_ - * @uses phpDocumentor\Reflection\Fqsen - * @uses phpDocumentor\Reflection\FqsenResolver - */ - public function testResolvingRelativeQSENsBasedOnNamespace() - { - $fixture = new TypeResolver(); - - /** @var Object_ $resolvedType */ - $resolvedType = $fixture->resolve('DocBlock', new Context('phpDocumentor\Reflection')); - - $this->assertInstanceOf('phpDocumentor\Reflection\Types\Object_', $resolvedType); - $this->assertInstanceOf('phpDocumentor\Reflection\Fqsen', $resolvedType->getFqsen()); - $this->assertSame('\phpDocumentor\Reflection\DocBlock', (string)$resolvedType); - } - - /** - * @covers ::__construct - * @covers ::resolve - * @covers :: - * - * @uses phpDocumentor\Reflection\Types\Context - * @uses phpDocumentor\Reflection\Types\Object_ - * @uses phpDocumentor\Reflection\Fqsen - * @uses phpDocumentor\Reflection\FqsenResolver - */ - public function testResolvingRelativeQSENsBasedOnNamespaceAlias() - { - $fixture = new TypeResolver(); - - /** @var Object_ $resolvedType */ - $resolvedType = $fixture->resolve( - 'm\MockInterface', - new Context('phpDocumentor\Reflection', ['m' => '\Mockery']) - ); - - $this->assertInstanceOf('phpDocumentor\Reflection\Types\Object_', $resolvedType); - $this->assertInstanceOf('phpDocumentor\Reflection\Fqsen', $resolvedType->getFqsen()); - $this->assertSame('\Mockery\MockInterface', (string)$resolvedType); - } - - /** - * @covers ::__construct - * @covers ::resolve - * @covers :: - * - * @uses phpDocumentor\Reflection\Types\Context - * @uses phpDocumentor\Reflection\Types\Array_ - * @uses phpDocumentor\Reflection\Types\String_ - */ - public function testResolvingTypedArrays() - { - $fixture = new TypeResolver(); - - /** @var Array_ $resolvedType */ - $resolvedType = $fixture->resolve('string[]', new Context('')); - - $this->assertInstanceOf('phpDocumentor\Reflection\Types\Array_', $resolvedType); - $this->assertSame('string[]', (string)$resolvedType); - $this->assertInstanceOf('phpDocumentor\Reflection\Types\Compound', $resolvedType->getKeyType()); - $this->assertInstanceOf('phpDocumentor\Reflection\Types\String_', $resolvedType->getValueType()); - } - - /** - * @covers ::__construct - * @covers ::resolve - * @covers :: - * - * @uses phpDocumentor\Reflection\Types\Context - * @uses phpDocumentor\Reflection\Types\Array_ - * @uses phpDocumentor\Reflection\Types\String_ - */ - public function testResolvingNestedTypedArrays() - { - $fixture = new TypeResolver(); - - /** @var Array_ $resolvedType */ - $resolvedType = $fixture->resolve('string[][]', new Context('')); - - /** @var Array_ $childValueType */ - $childValueType = $resolvedType->getValueType(); - - $this->assertInstanceOf('phpDocumentor\Reflection\Types\Array_', $resolvedType); - - $this->assertSame('string[][]', (string)$resolvedType); - $this->assertInstanceOf('phpDocumentor\Reflection\Types\Compound', $resolvedType->getKeyType()); - $this->assertInstanceOf('phpDocumentor\Reflection\Types\Array_', $childValueType); - - $this->assertSame('string[]', (string)$childValueType); - $this->assertInstanceOf('phpDocumentor\Reflection\Types\Compound', $childValueType->getKeyType()); - $this->assertInstanceOf('phpDocumentor\Reflection\Types\String_', $childValueType->getValueType()); - } - - /** - * @covers ::__construct - * @covers ::resolve - * @covers :: - * - * @uses phpDocumentor\Reflection\Types\Context - * @uses phpDocumentor\Reflection\Types\Compound - * @uses phpDocumentor\Reflection\Types\String_ - * @uses phpDocumentor\Reflection\Types\Object_ - * @uses phpDocumentor\Reflection\Fqsen - * @uses phpDocumentor\Reflection\FqsenResolver - */ - public function testResolvingCompoundTypes() - { - $fixture = new TypeResolver(); - - /** @var Compound $resolvedType */ - $resolvedType = $fixture->resolve('string|Reflection\DocBlock', new Context('phpDocumentor')); - - $this->assertInstanceOf('phpDocumentor\Reflection\Types\Compound', $resolvedType); - $this->assertSame('string|\phpDocumentor\Reflection\DocBlock', (string)$resolvedType); - - /** @var String $secondType */ - $firstType = $resolvedType->get(0); - - /** @var Object_ $secondType */ - $secondType = $resolvedType->get(1); - - $this->assertInstanceOf('phpDocumentor\Reflection\Types\String_', $firstType); - $this->assertInstanceOf('phpDocumentor\Reflection\Types\Object_', $secondType); - $this->assertInstanceOf('phpDocumentor\Reflection\Fqsen', $secondType->getFqsen()); - } - - /** - * @covers ::__construct - * @covers ::resolve - * @covers :: - * - * @uses phpDocumentor\Reflection\Types\Context - * @uses phpDocumentor\Reflection\Types\Compound - * @uses phpDocumentor\Reflection\Types\Array_ - * @uses phpDocumentor\Reflection\Types\Object_ - * @uses phpDocumentor\Reflection\Fqsen - * @uses phpDocumentor\Reflection\FqsenResolver - */ - public function testResolvingCompoundTypedArrayTypes() - { - $fixture = new TypeResolver(); - - /** @var Compound $resolvedType */ - $resolvedType = $fixture->resolve('\stdClass[]|Reflection\DocBlock[]', new Context('phpDocumentor')); - - $this->assertInstanceOf('phpDocumentor\Reflection\Types\Compound', $resolvedType); - $this->assertSame('\stdClass[]|\phpDocumentor\Reflection\DocBlock[]', (string)$resolvedType); - - /** @var Array_ $secondType */ - $firstType = $resolvedType->get(0); - - /** @var Array_ $secondType */ - $secondType = $resolvedType->get(1); - - $this->assertInstanceOf('phpDocumentor\Reflection\Types\Array_', $firstType); - $this->assertInstanceOf('phpDocumentor\Reflection\Types\Array_', $secondType); - $this->assertInstanceOf('phpDocumentor\Reflection\Types\Object_', $firstType->getValueType()); - $this->assertInstanceOf('phpDocumentor\Reflection\Types\Object_', $secondType->getValueType()); - } - - /** - * This test asserts that the parameter order is correct. - * - * When you pass two arrays separated by the compound operator (i.e. 'integer[]|string[]') then we always split the - * expression in its compound parts and then we parse the types with the array operators. If we were to switch the - * order around then 'integer[]|string[]' would read as an array of string or integer array; which is something - * other than what we intend. - * - * @covers ::__construct - * @covers ::resolve - * @covers :: - * - * @uses phpDocumentor\Reflection\Types\Context - * @uses phpDocumentor\Reflection\Types\Compound - * @uses phpDocumentor\Reflection\Types\Array_ - * @uses phpDocumentor\Reflection\Types\Integer - * @uses phpDocumentor\Reflection\Types\String_ - */ - public function testResolvingCompoundTypesWithTwoArrays() - { - $fixture = new TypeResolver(); - - /** @var Compound $resolvedType */ - $resolvedType = $fixture->resolve('integer[]|string[]', new Context('')); - - $this->assertInstanceOf('phpDocumentor\Reflection\Types\Compound', $resolvedType); - $this->assertSame('int[]|string[]', (string)$resolvedType); - - /** @var Array_ $firstType */ - $firstType = $resolvedType->get(0); - - /** @var Array_ $secondType */ - $secondType = $resolvedType->get(1); - - $this->assertInstanceOf('phpDocumentor\Reflection\Types\Array_', $firstType); - $this->assertInstanceOf('phpDocumentor\Reflection\Types\Integer', $firstType->getValueType()); - $this->assertInstanceOf('phpDocumentor\Reflection\Types\Array_', $secondType); - $this->assertInstanceOf('phpDocumentor\Reflection\Types\String_', $secondType->getValueType()); - } - - /** - * @covers ::__construct - * @covers ::addKeyword - * @uses phpDocumentor\Reflection\TypeResolver::resolve - * @uses phpDocumentor\Reflection\TypeResolver:: - * @uses phpDocumentor\Reflection\Types\Context - */ - public function testAddingAKeyword() - { - // Assign - $typeMock = m::mock(Type::class); - - // Act - $fixture = new TypeResolver(); - $fixture->addKeyword('mock', get_class($typeMock)); - - // Assert - $result = $fixture->resolve('mock', new Context('')); - $this->assertInstanceOf(get_class($typeMock), $result); - $this->assertNotSame($typeMock, $result); - } - - /** - * @covers ::__construct - * @covers ::addKeyword - * @uses phpDocumentor\Reflection\Types\Context - * @expectedException \InvalidArgumentException - */ - public function testAddingAKeywordFailsIfTypeClassDoesNotExist() - { - $fixture = new TypeResolver(); - $fixture->addKeyword('mock', 'IDoNotExist'); - } - - /** - * @covers ::__construct - * @covers ::addKeyword - * @uses phpDocumentor\Reflection\Types\Context - * @expectedException \InvalidArgumentException - */ - public function testAddingAKeywordFailsIfTypeClassDoesNotImplementTypeInterface() - { - $fixture = new TypeResolver(); - $fixture->addKeyword('mock', 'stdClass'); - } - - /** - * @covers ::__construct - * @covers ::resolve - * @uses phpDocumentor\Reflection\Types\Context - * - * @expectedException \InvalidArgumentException - */ - public function testExceptionIsThrownIfTypeIsEmpty() - { - $fixture = new TypeResolver(); - $fixture->resolve(' ', new Context('')); - } - - /** - * @covers ::__construct - * @covers ::resolve - * @uses phpDocumentor\Reflection\Types\Context - * - * @expectedException \InvalidArgumentException - */ - public function testExceptionIsThrownIfTypeIsNotAString() - { - $fixture = new TypeResolver(); - $fixture->resolve(['a'], new Context('')); - } - - /** - * Returns a list of keywords and expected classes that are created from them. - * - * @return string[][] - */ - public function provideKeywords() - { - return [ - ['string', 'phpDocumentor\Reflection\Types\String_'], - ['int', 'phpDocumentor\Reflection\Types\Integer'], - ['integer', 'phpDocumentor\Reflection\Types\Integer'], - ['float', 'phpDocumentor\Reflection\Types\Float_'], - ['double', 'phpDocumentor\Reflection\Types\Float_'], - ['bool', 'phpDocumentor\Reflection\Types\Boolean'], - ['boolean', 'phpDocumentor\Reflection\Types\Boolean'], - ['resource', 'phpDocumentor\Reflection\Types\Resource'], - ['null', 'phpDocumentor\Reflection\Types\Null_'], - ['callable', 'phpDocumentor\Reflection\Types\Callable_'], - ['callback', 'phpDocumentor\Reflection\Types\Callable_'], - ['array', 'phpDocumentor\Reflection\Types\Array_'], - ['scalar', 'phpDocumentor\Reflection\Types\Scalar'], - ['object', 'phpDocumentor\Reflection\Types\Object_'], - ['mixed', 'phpDocumentor\Reflection\Types\Mixed'], - ['void', 'phpDocumentor\Reflection\Types\Void_'], - ['$this', 'phpDocumentor\Reflection\Types\This'], - ['static', 'phpDocumentor\Reflection\Types\Static_'], - ['self', 'phpDocumentor\Reflection\Types\Self_'], - ]; - } - - /** - * Provides a list of FQSENs to test the resolution patterns with. - * - * @return string[][] - */ - public function provideFqcn() - { - return [ - 'namespace' => ['\phpDocumentor\Reflection'], - 'class' => ['\phpDocumentor\Reflection\DocBlock'], - ]; - } -} diff --git a/lib/composer/vendor/phpdocumentor/type-resolver/tests/unit/Types/ContextFactoryTest.php b/lib/composer/vendor/phpdocumentor/type-resolver/tests/unit/Types/ContextFactoryTest.php deleted file mode 100644 index 20d63c959..000000000 --- a/lib/composer/vendor/phpdocumentor/type-resolver/tests/unit/Types/ContextFactoryTest.php +++ /dev/null @@ -1,188 +0,0 @@ - - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection\Types { - -// Added imports on purpose as mock for the unit tests, please do not remove. - use Mockery as m; - use phpDocumentor\Reflection\DocBlock, - phpDocumentor\Reflection\DocBlock\Tag; - use phpDocumentor; - use \ReflectionClass; // yes, the slash is part of the test - - /** - * @coversDefaultClass \phpDocumentor\Reflection\Types\ContextFactory - * @covers :: - */ - class ContextFactoryTest extends \PHPUnit_Framework_TestCase - { - /** - * @covers ::createFromReflector - * @covers ::createForNamespace - * @uses phpDocumentor\Reflection\Types\Context - */ - public function testReadsNamespaceFromClassReflection() - { - $fixture = new ContextFactory(); - $context = $fixture->createFromReflector(new ReflectionClass($this)); - - $this->assertSame(__NAMESPACE__, $context->getNamespace()); - } - - /** - * @covers ::createFromReflector - * @covers ::createForNamespace - * @uses phpDocumentor\Reflection\Types\Context - */ - public function testReadsAliasesFromClassReflection() - { - $fixture = new ContextFactory(); - $expected = [ - 'm' => 'Mockery', - 'DocBlock' => 'phpDocumentor\Reflection\DocBlock', - 'Tag' => 'phpDocumentor\Reflection\DocBlock\Tag', - 'phpDocumentor' => 'phpDocumentor', - 'ReflectionClass' => 'ReflectionClass' - ]; - $context = $fixture->createFromReflector(new ReflectionClass($this)); - - $this->assertSame($expected, $context->getNamespaceAliases()); - } - - /** - * @covers ::createForNamespace - * @uses phpDocumentor\Reflection\Types\Context - */ - public function testReadsNamespaceFromProvidedNamespaceAndContent() - { - $fixture = new ContextFactory(); - $context = $fixture->createForNamespace(__NAMESPACE__, file_get_contents(__FILE__)); - - $this->assertSame(__NAMESPACE__, $context->getNamespace()); - } - - /** - * @covers ::createForNamespace - * @uses phpDocumentor\Reflection\Types\Context - */ - public function testReadsAliasesFromProvidedNamespaceAndContent() - { - $fixture = new ContextFactory(); - $expected = [ - 'm' => 'Mockery', - 'DocBlock' => 'phpDocumentor\Reflection\DocBlock', - 'Tag' => 'phpDocumentor\Reflection\DocBlock\Tag', - 'phpDocumentor' => 'phpDocumentor', - 'ReflectionClass' => 'ReflectionClass' - ]; - $context = $fixture->createForNamespace(__NAMESPACE__, file_get_contents(__FILE__)); - - $this->assertSame($expected, $context->getNamespaceAliases()); - } - - /** - * @covers ::createForNamespace - * @uses phpDocumentor\Reflection\Types\Context - */ - public function testTraitUseIsNotDetectedAsNamespaceUse() - { - $php = "createForNamespace('Foo', $php); - - $this->assertSame([], $context->getNamespaceAliases()); - } - - /** - * @covers ::createForNamespace - * @uses phpDocumentor\Reflection\Types\Context - */ - public function testAllOpeningBracesAreCheckedWhenSearchingForEndOfClass() - { - $php = 'createForNamespace('Foo', $php); - - $this->assertSame([], $context->getNamespaceAliases()); - } - - /** - * @covers ::createFromReflector - */ - public function testEmptyFileName() - { - $fixture = new ContextFactory(); - $context = $fixture->createFromReflector(new \ReflectionClass('stdClass')); - - $this->assertSame([], $context->getNamespaceAliases()); - } - - /** - * @covers ::createFromReflector - */ - public function testEvalDClass() - { - eval(<<createFromReflector(new \ReflectionClass('Foo\Bar')); - - $this->assertSame([], $context->getNamespaceAliases()); - } - } -} - -namespace phpDocumentor\Reflection\Types\Mock { - // the following import should not show in the tests above - use phpDocumentor\Reflection\DocBlock\Description; -} diff --git a/lib/composer/vendor/phpdocumentor/type-resolver/tests/unit/Types/ContextTest.php b/lib/composer/vendor/phpdocumentor/type-resolver/tests/unit/Types/ContextTest.php deleted file mode 100644 index 165f415dd..000000000 --- a/lib/composer/vendor/phpdocumentor/type-resolver/tests/unit/Types/ContextTest.php +++ /dev/null @@ -1,61 +0,0 @@ - - * @license http://www.opensource.org/licenses/mit-license.php MIT - * @link http://phpdoc.org - */ - -namespace phpDocumentor\Reflection\Types; - -use Mockery as m; - -/** - * @coversDefaultClass \phpDocumentor\Reflection\Types\Context - */ -class ContextTest extends \PHPUnit_Framework_TestCase -{ - /** - * @covers ::__construct - * @covers ::getNamespace - */ - public function testProvidesANormalizedNamespace() - { - $fixture = new Context('\My\Space'); - $this->assertSame('My\Space', $fixture->getNamespace()); - } - - /** - * @covers ::__construct - * @covers ::getNamespace - */ - public function testInterpretsNamespaceNamedGlobalAsRootNamespace() - { - $fixture = new Context('global'); - $this->assertSame('', $fixture->getNamespace()); - } - - /** - * @covers ::__construct - * @covers ::getNamespace - */ - public function testInterpretsNamespaceNamedDefaultAsRootNamespace() - { - $fixture = new Context('default'); - $this->assertSame('', $fixture->getNamespace()); - } - - /** - * @covers ::__construct - * @covers ::getNamespaceAliases - */ - public function testProvidesNormalizedNamespaceAliases() - { - $fixture = new Context('', ['Space' => '\My\Space']); - $this->assertSame(['Space' => 'My\Space'], $fixture->getNamespaceAliases()); - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/.gitignore b/lib/composer/vendor/phpspec/prophecy/.gitignore deleted file mode 100644 index 0c93fcf37..000000000 --- a/lib/composer/vendor/phpspec/prophecy/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -*.tgz -*.phar -/composer.lock -/vendor diff --git a/lib/composer/vendor/phpspec/prophecy/.travis.yml b/lib/composer/vendor/phpspec/prophecy/.travis.yml deleted file mode 100644 index e75c39eff..000000000 --- a/lib/composer/vendor/phpspec/prophecy/.travis.yml +++ /dev/null @@ -1,29 +0,0 @@ -language: php - -php: [5.3, 5.4, 5.5, 5.6, 7.0, hhvm] - -sudo: false - -cache: - directories: - - $HOME/.composer/cache - -branches: - except: - - /^bugfix\/.*$/ - - /^feature\/.*$/ - - /^optimization\/.*$/ - -matrix: - fast_finish: true - include: - - php: '7.0' - env: PHPDOCUMENTOR_REFLECTION_DOCBLOCK="^2.0" - -before_script: - - if [ -n "$PHPDOCUMENTOR_REFLECTION_DOCBLOCK" ]; then - composer require "phpdocumentor/reflection-docblock:${PHPDOCUMENTOR_REFLECTION_DOCBLOCK}" --no-update; - fi; - - travis_retry composer update --no-interaction - -script: vendor/bin/phpspec run -fpretty -v diff --git a/lib/composer/vendor/phpspec/prophecy/CHANGES.md b/lib/composer/vendor/phpspec/prophecy/CHANGES.md index 444c1fa6c..6a3ad33ad 100644 --- a/lib/composer/vendor/phpspec/prophecy/CHANGES.md +++ b/lib/composer/vendor/phpspec/prophecy/CHANGES.md @@ -1,3 +1,34 @@ +1.7.2 / 2017-10-04 +================== + +* Reverted "check method predictions only once" due to it breaking Spies + +1.7.1 / 2017-10-03 +================== + +* Allow PHP5 keywords methods generation on PHP7 (thanks @bycosta) +* Allow reflection-docblock v4 (thanks @GrahamCampbell) +* Check method predictions only once (thanks @dontub) +* Escape file path sent to \SplFileObjectConstructor when running on Windows (thanks @danmartin-epiphany) + +1.7.0 / 2017-03-02 +================== + +* Add full PHP 7.1 Support (thanks @prolic) +* Allow `sebastian/comparator ^2.0` (thanks @sebastianbergmann) +* Allow `sebastian/recursion-context ^3.0` (thanks @sebastianbergmann) +* Allow `\Error` instances in `ThrowPromise` (thanks @jameshalsall) +* Support `phpspec/phpspect ^3.2` (thanks @Sam-Burns) +* Fix failing builds (thanks @Sam-Burns) + +1.6.2 / 2016-11-21 +================== + +* Added support for detecting @method on interfaces that the class itself implements, or when the stubbed class is an interface itself (thanks @Seldaek) +* Added support for sebastian/recursion-context 2 (thanks @sebastianbergmann) +* Added testing on PHP 7.1 on Travis (thanks @danizord) +* Fixed the usage of the phpunit comparator (thanks @Anyqax) + 1.6.1 / 2016-06-07 ================== diff --git a/lib/composer/vendor/phpspec/prophecy/CONTRIBUTING.md b/lib/composer/vendor/phpspec/prophecy/CONTRIBUTING.md deleted file mode 100644 index 72d8e9334..000000000 --- a/lib/composer/vendor/phpspec/prophecy/CONTRIBUTING.md +++ /dev/null @@ -1,21 +0,0 @@ -Contributing ------------- - -Prophecy is an open source, community-driven project. If you'd like to contribute, -feel free to do this, but remember to follow these few simple rules: - -- Make your feature addition or bug fix, -- Add either specs or examples for any changes you're making (bugfixes or additions) - (please look into `spec/` folder for some examples). This is important so we don't break - it in a future version unintentionally, -- Commit your code, but do not mess with `CHANGES.md`, - -Running tests -------------- - -Make sure that you don't break anything with your changes by running: - -```bash -$> composer install --prefer-dist -$> vendor/bin/phpspec run -``` diff --git a/lib/composer/vendor/phpspec/prophecy/README.md b/lib/composer/vendor/phpspec/prophecy/README.md index 65ec16c4f..b190d43e1 100644 --- a/lib/composer/vendor/phpspec/prophecy/README.md +++ b/lib/composer/vendor/phpspec/prophecy/README.md @@ -159,7 +159,7 @@ promise, there's plenty others you can use: - `ReturnPromise` or `->willReturn(1)` - returns a value from a method call - `ReturnArgumentPromise` or `->willReturnArgument($index)` - returns the nth method argument from call -- `ThrowPromise` or `->willThrow` - causes the method to throw specific exception +- `ThrowPromise` or `->willThrow($exception)` - causes the method to throw specific exception - `CallbackPromise` or `->will($callback)` - gives you a quick way to define your own custom logic Keep in mind, that you can always add even more promises by implementing diff --git a/lib/composer/vendor/phpspec/prophecy/composer.json b/lib/composer/vendor/phpspec/prophecy/composer.json index 23131b201..5bdbdb3e4 100644 --- a/lib/composer/vendor/phpspec/prophecy/composer.json +++ b/lib/composer/vendor/phpspec/prophecy/composer.json @@ -19,14 +19,15 @@ "require": { "php": "^5.3|^7.0", - "phpdocumentor/reflection-docblock": "^2.0|^3.0.2", - "sebastian/comparator": "^1.1", + "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0", + "sebastian/comparator": "^1.1|^2.0", "doctrine/instantiator": "^1.0.2", - "sebastian/recursion-context": "^1.0" + "sebastian/recursion-context": "^1.0|^2.0|^3.0" }, "require-dev": { - "phpspec/phpspec": "^2.0" + "phpspec/phpspec": "^2.5|^3.2", + "phpunit/phpunit": "^4.8.35 || ^5.7" }, "autoload": { @@ -35,9 +36,15 @@ } }, + "autoload-dev": { + "psr-4": { + "Fixtures\\Prophecy\\": "fixtures" + } + }, + "extra": { "branch-alias": { - "dev-master": "1.6.x-dev" + "dev-master": "1.7.x-dev" } } } diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Argument/ArgumentsWildcardSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Argument/ArgumentsWildcardSpec.php deleted file mode 100644 index 5d6a2da31..000000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Argument/ArgumentsWildcardSpec.php +++ /dev/null @@ -1,146 +0,0 @@ -beConstructedWith(array(42, 'zet', $object)); - - $class = get_class($object->getWrappedObject()); - $hash = spl_object_hash($object->getWrappedObject()); - - $this->__toString()->shouldReturn("exact(42), exact(\"zet\"), exact($class:$hash Object (\n 'objectProphecy' => Prophecy\Prophecy\ObjectProphecy Object (*Prophecy*)\n))"); - } - - /** - * @param \Prophecy\Argument\Token\TokenInterface $token1 - * @param \Prophecy\Argument\Token\TokenInterface $token2 - * @param \Prophecy\Argument\Token\TokenInterface $token3 - */ - function it_generates_string_representation_from_all_tokens_imploded($token1, $token2, $token3) - { - $token1->__toString()->willReturn('token_1'); - $token2->__toString()->willReturn('token_2'); - $token3->__toString()->willReturn('token_3'); - - $this->beConstructedWith(array($token1, $token2, $token3)); - $this->__toString()->shouldReturn('token_1, token_2, token_3'); - } - - /** - * @param \Prophecy\Argument\Token\TokenInterface $token - */ - function it_exposes_list_of_tokens($token) - { - $this->beConstructedWith(array($token)); - - $this->getTokens()->shouldReturn(array($token)); - } - - function it_returns_score_of_1_if_there_are_no_tokens_and_arguments() - { - $this->beConstructedWith(array()); - - $this->scoreArguments(array())->shouldReturn(1); - } - - /** - * @param \Prophecy\Argument\Token\TokenInterface $token1 - * @param \Prophecy\Argument\Token\TokenInterface $token2 - * @param \Prophecy\Argument\Token\TokenInterface $token3 - */ - function it_should_return_match_score_based_on_all_tokens_score($token1, $token2, $token3) - { - $token1->scoreArgument('one')->willReturn(3); - $token1->isLast()->willReturn(false); - $token2->scoreArgument(2)->willReturn(5); - $token2->isLast()->willReturn(false); - $token3->scoreArgument($obj = new \stdClass())->willReturn(10); - $token3->isLast()->willReturn(false); - - $this->beConstructedWith(array($token1, $token2, $token3)); - $this->scoreArguments(array('one', 2, $obj))->shouldReturn(18); - } - - /** - * @param \Prophecy\Argument\Token\TokenInterface $token1 - * @param \Prophecy\Argument\Token\TokenInterface $token2 - * @param \Prophecy\Argument\Token\TokenInterface $token3 - */ - function it_returns_false_if_there_is_less_arguments_than_tokens($token1, $token2, $token3) - { - $token1->scoreArgument('one')->willReturn(3); - $token1->isLast()->willReturn(false); - $token2->scoreArgument(2)->willReturn(5); - $token2->isLast()->willReturn(false); - $token3->scoreArgument(null)->willReturn(false); - $token3->isLast()->willReturn(false); - - $this->beConstructedWith(array($token1, $token2, $token3)); - $this->scoreArguments(array('one', 2))->shouldReturn(false); - } - - /** - * @param \Prophecy\Argument\Token\TokenInterface $token1 - * @param \Prophecy\Argument\Token\TokenInterface $token2 - * @param \Prophecy\Argument\Token\TokenInterface $token3 - */ - function it_returns_false_if_there_is_less_tokens_than_arguments($token1, $token2, $token3) - { - $token1->scoreArgument('one')->willReturn(3); - $token1->isLast()->willReturn(false); - $token2->scoreArgument(2)->willReturn(5); - $token2->isLast()->willReturn(false); - $token3->scoreArgument($obj = new \stdClass())->willReturn(10); - $token3->isLast()->willReturn(false); - - $this->beConstructedWith(array($token1, $token2, $token3)); - $this->scoreArguments(array('one', 2, $obj, 4))->shouldReturn(false); - } - - /** - * @param \Prophecy\Argument\Token\TokenInterface $token1 - * @param \Prophecy\Argument\Token\TokenInterface $token2 - * @param \Prophecy\Argument\Token\TokenInterface $token3 - */ - function it_should_return_false_if_one_of_the_tokens_returns_false($token1, $token2, $token3) - { - $token1->scoreArgument('one')->willReturn(3); - $token1->isLast()->willReturn(false); - $token2->scoreArgument(2)->willReturn(false); - $token2->isLast()->willReturn(false); - $token3->scoreArgument($obj = new \stdClass())->willReturn(10); - $token3->isLast()->willReturn(false); - - $this->beConstructedWith(array($token1, $token2, $token3)); - $this->scoreArguments(array('one', 2, $obj))->shouldReturn(false); - } - - /** - * @param \Prophecy\Argument\Token\TokenInterface $token1 - * @param \Prophecy\Argument\Token\TokenInterface $token2 - * @param \Prophecy\Argument\Token\TokenInterface $token3 - */ - function it_should_calculate_score_until_last_token($token1, $token2, $token3) - { - $token1->scoreArgument('one')->willReturn(3); - $token1->isLast()->willReturn(false); - - $token2->scoreArgument(2)->willReturn(7); - $token2->isLast()->willReturn(true); - - $token3->scoreArgument($obj = new \stdClass())->willReturn(10); - $token3->isLast()->willReturn(false); - - $this->beConstructedWith(array($token1, $token2, $token3)); - $this->scoreArguments(array('one', 2, $obj))->shouldReturn(10); - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Argument/Token/AnyValueTokenSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Argument/Token/AnyValueTokenSpec.php deleted file mode 100644 index a43e923cf..000000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Argument/Token/AnyValueTokenSpec.php +++ /dev/null @@ -1,28 +0,0 @@ -shouldBeAnInstanceOf('Prophecy\Argument\Token\TokenInterface'); - } - - function it_is_not_last() - { - $this->shouldNotBeLast(); - } - - function its_string_representation_is_star() - { - $this->__toString()->shouldReturn('*'); - } - - function it_scores_any_argument_as_3() - { - $this->scoreArgument(42)->shouldReturn(3); - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Argument/Token/AnyValuesTokenSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Argument/Token/AnyValuesTokenSpec.php deleted file mode 100644 index c29076f59..000000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Argument/Token/AnyValuesTokenSpec.php +++ /dev/null @@ -1,28 +0,0 @@ -shouldBeAnInstanceOf('Prophecy\Argument\Token\TokenInterface'); - } - - function it_is_last() - { - $this->shouldBeLast(); - } - - function its_string_representation_is_star_with_followup() - { - $this->__toString()->shouldReturn('* [, ...]'); - } - - function it_scores_any_argument_as_2() - { - $this->scoreArgument(42)->shouldReturn(2); - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Argument/Token/ApproximateValueTokenSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Argument/Token/ApproximateValueTokenSpec.php deleted file mode 100644 index 8799d6d51..000000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Argument/Token/ApproximateValueTokenSpec.php +++ /dev/null @@ -1,55 +0,0 @@ -beConstructedWith(10.12345678, 4); - } - - function it_is_initializable() - { - $this->shouldHaveType('Prophecy\Argument\Token\ApproximateValueToken'); - } - - function it_implements_TokenInterface() - { - $this->shouldBeAnInstanceOf('Prophecy\Argument\Token\TokenInterface'); - } - - function it_is_not_last() - { - $this->shouldNotBeLast(); - } - - function it_scores_10_if_rounded_argument_matches_rounded_value() - { - $this->scoreArgument(10.12345)->shouldReturn(10); - } - - function it_does_not_score_if_rounded_argument_does_not_match_rounded_value() - { - $this->scoreArgument(10.1234)->shouldReturn(false); - } - - function it_uses_a_default_precision_of_zero() - { - $this->beConstructedWith(10.7); - $this->scoreArgument(11.4)->shouldReturn(10); - } - - function it_does_not_score_if_rounded_argument_is_not_numeric() - { - $this->scoreArgument('hello')->shouldReturn(false); - } - - function it_has_simple_string_representation() - { - $this->__toString()->shouldBe('≅10.1235'); - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Argument/Token/ArrayCountTokenSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Argument/Token/ArrayCountTokenSpec.php deleted file mode 100644 index 5d040d59c..000000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Argument/Token/ArrayCountTokenSpec.php +++ /dev/null @@ -1,64 +0,0 @@ -beConstructedWith(2); - } - - function it_implements_TokenInterface() - { - $this->shouldBeAnInstanceOf('Prophecy\Argument\Token\TokenInterface'); - } - - function it_is_not_last() - { - $this->shouldNotBeLast(); - } - - function it_scores_6_if_argument_array_has_proper_count() - { - $this->scoreArgument(array(1,2))->shouldReturn(6); - } - - /** - * @param \Countable $countable - */ - function it_scores_6_if_argument_countable_object_has_proper_count($countable) - { - $countable->count()->willReturn(2); - $this->scoreArgument($countable)->shouldReturn(6); - } - - function it_does_not_score_if_argument_is_neither_array_nor_countable_object() - { - $this->scoreArgument('string')->shouldBe(false); - $this->scoreArgument(5)->shouldBe(false); - $this->scoreArgument(new \stdClass)->shouldBe(false); - } - - function it_does_not_score_if_argument_array_has_wrong_count() - { - $this->scoreArgument(array(1))->shouldReturn(false); - } - - /** - * @param \Countable $countable - */ - function it_does_not_score_if_argument_countable_object_has_wrong_count($countable) - { - $countable->count()->willReturn(3); - $this->scoreArgument($countable)->shouldReturn(false); - } - - function it_has_simple_string_representation() - { - $this->__toString()->shouldBe('count(2)'); - } - -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Argument/Token/ArrayEntryTokenSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Argument/Token/ArrayEntryTokenSpec.php deleted file mode 100644 index 8ff0f1584..000000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Argument/Token/ArrayEntryTokenSpec.php +++ /dev/null @@ -1,229 +0,0 @@ -beConstructedWith($key, $value); - } - - function it_implements_TokenInterface() - { - $this->shouldBeAnInstanceOf('Prophecy\Argument\Token\TokenInterface'); - } - - function it_is_not_last() - { - $this->shouldNotBeLast(); - } - - function it_holds_key_and_value($key, $value) - { - $this->getKey()->shouldBe($key); - $this->getValue()->shouldBe($value); - } - - function its_string_representation_tells_that_its_an_array_containing_the_key_value_pair($key, $value) - { - $key->__toString()->willReturn('key'); - $value->__toString()->willReturn('value'); - $this->__toString()->shouldBe('[..., key => value, ...]'); - } - - /** - * @param \Prophecy\Argument\Token\TokenInterface $key - * @param \stdClass $object - */ - function it_wraps_non_token_value_into_ExactValueToken($key, $object) - { - $this->beConstructedWith($key, $object); - $this->getValue()->shouldHaveType('\Prophecy\Argument\Token\ExactValueToken'); - } - - /** - * @param \stdClass $object - * @param \Prophecy\Argument\Token\TokenInterface $value - */ - function it_wraps_non_token_key_into_ExactValueToken($object, $value) - { - $this->beConstructedWith($object, $value); - $this->getKey()->shouldHaveType('\Prophecy\Argument\Token\ExactValueToken'); - } - - function it_scores_array_half_of_combined_scores_from_key_and_value_tokens($key, $value) - { - $key->scoreArgument('key')->willReturn(4); - $value->scoreArgument('value')->willReturn(6); - $this->scoreArgument(array('key'=>'value'))->shouldBe(5); - } - - /** - * @param \Prophecy\Argument\Token\TokenInterface $key - * @param \Prophecy\Argument\Token\TokenInterface $value - * @param \Iterator $object - */ - function it_scores_traversable_object_half_of_combined_scores_from_key_and_value_tokens($key, $value, $object) - { - $object->current()->will(function () use ($object) { - $object->valid()->willReturn(false); - - return 'value'; - }); - $object->key()->willReturn('key'); - $object->rewind()->willReturn(null); - $object->next()->willReturn(null); - $object->valid()->willReturn(true); - $key->scoreArgument('key')->willReturn(6); - $value->scoreArgument('value')->willReturn(2); - $this->scoreArgument($object)->shouldBe(4); - } - - /** - * @param \Prophecy\Argument\Token\AnyValuesToken $key - * @param \Prophecy\Argument\Token\TokenInterface $value - * @param \ArrayAccess $object - */ - function it_throws_exception_during_scoring_of_array_accessible_object_if_key_is_not_ExactValueToken($key, $value, $object) - { - $key->__toString()->willReturn('any_token'); - $this->beConstructedWith($key,$value); - $errorMessage = 'You can only use exact value tokens to match key of ArrayAccess object'.PHP_EOL. - 'But you used `any_token`.'; - $this->shouldThrow(new InvalidArgumentException($errorMessage))->duringScoreArgument($object); - } - - /** - * @param \Prophecy\Argument\Token\ExactValueToken $key - * @param \Prophecy\Argument\Token\TokenInterface $value - * @param \ArrayAccess $object - */ - function it_scores_array_accessible_object_half_of_combined_scores_from_key_and_value_tokens($key, $value, $object) - { - $object->offsetExists('key')->willReturn(true); - $object->offsetGet('key')->willReturn('value'); - $key->getValue()->willReturn('key'); - $key->scoreArgument('key')->willReturn(3); - $value->scoreArgument('value')->willReturn(1); - $this->scoreArgument($object)->shouldBe(2); - } - - /** - * @param \Prophecy\Argument\Token\AnyValuesToken $key - * @param \Prophecy\Argument\Token\TokenInterface $value - * @param \ArrayIterator $object - */ - function it_accepts_any_key_token_type_to_score_object_that_is_both_traversable_and_array_accessible($key, $value, $object) - { - $this->beConstructedWith($key, $value); - $object->current()->will(function () use ($object) { - $object->valid()->willReturn(false); - - return 'value'; - }); - $object->key()->willReturn('key'); - $object->rewind()->willReturn(null); - $object->next()->willReturn(null); - $object->valid()->willReturn(true); - $this->shouldNotThrow(new InvalidArgumentException)->duringScoreArgument($object); - } - - function it_does_not_score_if_argument_is_neither_array_nor_traversable_nor_array_accessible() - { - $this->scoreArgument('string')->shouldBe(false); - $this->scoreArgument(new \stdClass)->shouldBe(false); - } - - function it_does_not_score_empty_array() - { - $this->scoreArgument(array())->shouldBe(false); - } - - function it_does_not_score_array_if_key_and_value_tokens_do_not_score_same_entry($key, $value) - { - $argument = array(1 => 'foo', 2 => 'bar'); - $key->scoreArgument(1)->willReturn(true); - $key->scoreArgument(2)->willReturn(false); - $value->scoreArgument('foo')->willReturn(false); - $value->scoreArgument('bar')->willReturn(true); - $this->scoreArgument($argument)->shouldBe(false); - } - - /** - * @param \Iterator $object - */ - function it_does_not_score_traversable_object_without_entries($object) - { - $object->rewind()->willReturn(null); - $object->next()->willReturn(null); - $object->valid()->willReturn(false); - $this->scoreArgument($object)->shouldBe(false); - } - - /** - * @param \Prophecy\Argument\Token\TokenInterface $key - * @param \Prophecy\Argument\Token\TokenInterface $value - * @param \Iterator $object - */ - function it_does_not_score_traversable_object_if_key_and_value_tokens_do_not_score_same_entry($key, $value, $object) - { - $object->current()->willReturn('foo'); - $object->current()->will(function () use ($object) { - $object->valid()->willReturn(false); - - return 'bar'; - }); - $object->key()->willReturn(1); - $object->key()->willReturn(2); - $object->rewind()->willReturn(null); - $object->next()->willReturn(null); - $object->valid()->willReturn(true); - $key->scoreArgument(1)->willReturn(true); - $key->scoreArgument(2)->willReturn(false); - $value->scoreArgument('foo')->willReturn(false); - $value->scoreArgument('bar')->willReturn(true); - $this->scoreArgument($object)->shouldBe(false); - } - - /** - * @param \Prophecy\Argument\Token\ExactValueToken $key - * @param \ArrayAccess $object - */ - function it_does_not_score_array_accessible_object_if_it_has_no_offset_with_key_token_value($key, $object) - { - $object->offsetExists('key')->willReturn(false); - $key->getValue()->willReturn('key'); - $this->scoreArgument($object)->shouldBe(false); - } - - /** - * @param \Prophecy\Argument\Token\ExactValueToken $key - * @param \Prophecy\Argument\Token\TokenInterface $value - * @param \ArrayAccess $object - */ - function it_does_not_score_array_accessible_object_if_key_and_value_tokens_do_not_score_same_entry($key, $value, $object) - { - $object->offsetExists('key')->willReturn(true); - $object->offsetGet('key')->willReturn('value'); - $key->getValue()->willReturn('key'); - $value->scoreArgument('value')->willReturn(false); - $key->scoreArgument('key')->willReturn(true); - $this->scoreArgument($object)->shouldBe(false); - } - - function its_score_is_capped_at_8($key, $value) - { - $key->scoreArgument('key')->willReturn(10); - $value->scoreArgument('value')->willReturn(10); - $this->scoreArgument(array('key'=>'value'))->shouldBe(8); - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Argument/Token/ArrayEveryEntryTokenSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Argument/Token/ArrayEveryEntryTokenSpec.php deleted file mode 100644 index 8662e7d19..000000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Argument/Token/ArrayEveryEntryTokenSpec.php +++ /dev/null @@ -1,109 +0,0 @@ -beConstructedWith($value); - } - - function it_implements_TokenInterface() - { - $this->shouldBeAnInstanceOf('Prophecy\Argument\Token\TokenInterface'); - } - - function it_is_not_last() - { - $this->shouldNotBeLast(); - } - - function it_holds_value($value) - { - $this->getValue()->shouldBe($value); - } - - function its_string_representation_tells_that_its_an_array_containing_only_value($value) - { - $value->__toString()->willReturn('value'); - $this->__toString()->shouldBe('[value, ..., value]'); - } - - /** - * @param \stdClass $stdClass - */ - function it_wraps_non_token_value_into_ExactValueToken($stdClass) - { - $this->beConstructedWith($stdClass); - $this->getValue()->shouldHaveType('Prophecy\Argument\Token\ExactValueToken'); - } - - function it_does_not_score_if_argument_is_neither_array_nor_traversable() - { - $this->scoreArgument('string')->shouldBe(false); - $this->scoreArgument(new \stdClass)->shouldBe(false); - } - - function it_does_not_score_empty_array() - { - $this->scoreArgument(array())->shouldBe(false); - } - - /** - * @param \Iterator $object - */ - function it_does_not_score_traversable_object_without_entries($object) - { - $object->rewind()->willReturn(null); - $object->next()->willReturn(null); - $object->valid()->willReturn(false); - $this->scoreArgument($object)->shouldBe(false); - } - - function it_scores_avg_of_scores_from_value_tokens($value) - { - $value->scoreArgument('value1')->willReturn(6); - $value->scoreArgument('value2')->willReturn(3); - $this->scoreArgument(array('value1', 'value2'))->shouldBe(4.5); - } - - function it_scores_false_if_entry_scores_false($value) - { - $value->scoreArgument('value1')->willReturn(6); - $value->scoreArgument('value2')->willReturn(false); - $this->scoreArgument(array('value1', 'value2'))->shouldBe(false); - } - - function it_does_not_score_array_keys($value) - { - $value->scoreArgument('value')->willReturn(6); - $value->scoreArgument('key')->shouldNotBeCalled(0); - $this->scoreArgument(array('key' => 'value'))->shouldBe(6); - } - - /** - * @param \Prophecy\Argument\Token\TokenInterface $value - * @param \Iterator $object - */ - function it_scores_traversable_object_from_value_token($value, $object) - { - $object->current()->will(function ($args, $object) { - $object->valid()->willReturn(false); - - return 'value'; - }); - $object->key()->willReturn('key'); - $object->rewind()->willReturn(null); - $object->next()->willReturn(null); - $object->valid()->willReturn(true); - $value->scoreArgument('value')->willReturn(2); - $this->scoreArgument($object)->shouldBe(2); - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Argument/Token/CallbackTokenSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Argument/Token/CallbackTokenSpec.php deleted file mode 100644 index 4395bf097..000000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Argument/Token/CallbackTokenSpec.php +++ /dev/null @@ -1,42 +0,0 @@ -beConstructedWith('get_class'); - } - - function it_implements_TokenInterface() - { - $this->shouldBeAnInstanceOf('Prophecy\Argument\Token\TokenInterface'); - } - - function it_is_not_last() - { - $this->shouldNotBeLast(); - } - - function it_scores_7_if_argument_matches_callback() - { - $this->beConstructedWith(function ($argument) { return 2 === $argument; }); - - $this->scoreArgument(2)->shouldReturn(7); - } - - function it_does_not_scores_if_argument_does_not_match_callback() - { - $this->beConstructedWith(function ($argument) { return 2 === $argument; }); - - $this->scoreArgument(5)->shouldReturn(false); - } - - function its_string_representation_should_tell_that_its_callback() - { - $this->__toString()->shouldReturn('callback()'); - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Argument/Token/ExactValueTokenSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Argument/Token/ExactValueTokenSpec.php deleted file mode 100644 index 9e46e021f..000000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Argument/Token/ExactValueTokenSpec.php +++ /dev/null @@ -1,155 +0,0 @@ -beConstructedWith(42); - } - - function it_implements_TokenInterface() - { - $this->shouldBeAnInstanceOf('Prophecy\Argument\Token\TokenInterface'); - } - - function it_is_not_last() - { - $this->shouldNotBeLast(); - } - - function it_holds_value() - { - $this->getValue()->shouldReturn(42); - } - - function it_scores_10_if_value_is_equal_to_argument() - { - $this->scoreArgument(42)->shouldReturn(10); - $this->scoreArgument('42')->shouldReturn(10); - } - - function it_scores_10_if_value_is_an_object_and_equal_to_argument() - { - $value = new \DateTime(); - $value2 = clone $value; - - $this->beConstructedWith($value); - $this->scoreArgument($value2)->shouldReturn(10); - } - - function it_does_not_scores_if_value_is_not_equal_to_argument() - { - $this->scoreArgument(50)->shouldReturn(false); - $this->scoreArgument(new \stdClass())->shouldReturn(false); - } - - function it_does_not_scores_if_value_an_object_and_is_not_equal_to_argument() - { - $value = new ExactValueTokenFixtureB('ABC'); - $value2 = new ExactValueTokenFixtureB('CBA'); - - $this->beConstructedWith($value); - $this->scoreArgument($value2)->shouldReturn(false); - } - - function it_does_not_scores_if_value_type_and_is_not_equal_to_argument() - { - $this->beConstructedWith(false); - $this->scoreArgument(0)->shouldReturn(false); - } - - function it_generates_proper_string_representation_for_integer() - { - $this->beConstructedWith(42); - $this->__toString()->shouldReturn('exact(42)'); - } - - function it_generates_proper_string_representation_for_string() - { - $this->beConstructedWith('some string'); - $this->__toString()->shouldReturn('exact("some string")'); - } - - function it_generates_single_line_representation_for_multiline_string() - { - $this->beConstructedWith("some\nstring"); - $this->__toString()->shouldReturn('exact("some\\nstring")'); - } - - function it_generates_proper_string_representation_for_double() - { - $this->beConstructedWith(42.3); - $this->__toString()->shouldReturn('exact(42.3)'); - } - - function it_generates_proper_string_representation_for_boolean_true() - { - $this->beConstructedWith(true); - $this->__toString()->shouldReturn('exact(true)'); - } - - function it_generates_proper_string_representation_for_boolean_false() - { - $this->beConstructedWith(false); - $this->__toString()->shouldReturn('exact(false)'); - } - - function it_generates_proper_string_representation_for_null() - { - $this->beConstructedWith(null); - $this->__toString()->shouldReturn('exact(null)'); - } - - function it_generates_proper_string_representation_for_empty_array() - { - $this->beConstructedWith(array()); - $this->__toString()->shouldReturn('exact([])'); - } - - function it_generates_proper_string_representation_for_array() - { - $this->beConstructedWith(array('zet', 42)); - $this->__toString()->shouldReturn('exact(["zet", 42])'); - } - - function it_generates_proper_string_representation_for_resource() - { - $resource = fopen(__FILE__, 'r'); - $this->beConstructedWith($resource); - $this->__toString()->shouldReturn('exact(stream:'.$resource.')'); - } - - /** - * @param \stdClass $object - */ - function it_generates_proper_string_representation_for_object($object) - { - $objHash = sprintf('%s:%s', - get_class($object->getWrappedObject()), - spl_object_hash($object->getWrappedObject()) - ); - - $this->beConstructedWith($object); - $this->__toString()->shouldReturn("exact($objHash Object (\n 'objectProphecy' => Prophecy\Prophecy\ObjectProphecy Object (*Prophecy*)\n))"); - } -} - -class ExactValueTokenFixtureA -{ - public $errors; -} - -class ExactValueTokenFixtureB extends ExactValueTokenFixtureA -{ - public $errors; - public $value = null; - - public function __construct($value) - { - $this->value = $value; - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Argument/Token/IdenticalValueTokenSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Argument/Token/IdenticalValueTokenSpec.php deleted file mode 100644 index 00c3a2157..000000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Argument/Token/IdenticalValueTokenSpec.php +++ /dev/null @@ -1,152 +0,0 @@ -beConstructedWith(42); - } - - function it_is_initializable() - { - $this->shouldHaveType('Prophecy\Argument\Token\IdenticalValueToken'); - } - - function it_scores_11_if_string_value_is_identical_to_argument() - { - $this->beConstructedWith('foo'); - $this->scoreArgument('foo')->shouldReturn(11); - } - - function it_scores_11_if_boolean_value_is_identical_to_argument() - { - $this->beConstructedWith(false); - $this->scoreArgument(false)->shouldReturn(11); - } - - function it_scores_11_if_integer_value_is_identical_to_argument() - { - $this->beConstructedWith(31); - $this->scoreArgument(31)->shouldReturn(11); - } - - function it_scores_11_if_float_value_is_identical_to_argument() - { - $this->beConstructedWith(31.12); - $this->scoreArgument(31.12)->shouldReturn(11); - } - - function it_scores_11_if_array_value_is_identical_to_argument() - { - $this->beConstructedWith(array('foo' => 'bar')); - $this->scoreArgument(array('foo' => 'bar'))->shouldReturn(11); - } - - function it_scores_11_if_object_value_is_identical_to_argument() - { - $object = new \stdClass(); - - $this->beConstructedWith($object); - $this->scoreArgument($object)->shouldReturn(11); - } - - function it_scores_false_if_value_is_not_identical_to_argument() - { - $this->beConstructedWith(new \stdClass()); - $this->scoreArgument('foo')->shouldReturn(false); - } - - function it_scores_false_if_object_value_is_not_the_same_instance_than_argument() - { - $this->beConstructedWith(new \stdClass()); - $this->scoreArgument(new \stdClass())->shouldReturn(false); - } - - function it_scores_false_if_integer_value_is_not_identical_to_boolean_argument() - { - $this->beConstructedWith(1); - $this->scoreArgument(true)->shouldReturn(false); - } - - function it_is_not_last() - { - $this->shouldNotBeLast(); - } - - function it_generates_proper_string_representation_for_integer() - { - $this->beConstructedWith(42); - $this->__toString()->shouldReturn('identical(42)'); - } - - function it_generates_proper_string_representation_for_string() - { - $this->beConstructedWith('some string'); - $this->__toString()->shouldReturn('identical("some string")'); - } - - function it_generates_single_line_representation_for_multiline_string() - { - $this->beConstructedWith("some\nstring"); - $this->__toString()->shouldReturn('identical("some\\nstring")'); - } - - function it_generates_proper_string_representation_for_double() - { - $this->beConstructedWith(42.3); - $this->__toString()->shouldReturn('identical(42.3)'); - } - - function it_generates_proper_string_representation_for_boolean_true() - { - $this->beConstructedWith(true); - $this->__toString()->shouldReturn('identical(true)'); - } - - function it_generates_proper_string_representation_for_boolean_false() - { - $this->beConstructedWith(false); - $this->__toString()->shouldReturn('identical(false)'); - } - - function it_generates_proper_string_representation_for_null() - { - $this->beConstructedWith(null); - $this->__toString()->shouldReturn('identical(null)'); - } - - function it_generates_proper_string_representation_for_empty_array() - { - $this->beConstructedWith(array()); - $this->__toString()->shouldReturn('identical([])'); - } - - function it_generates_proper_string_representation_for_array() - { - $this->beConstructedWith(array('zet', 42)); - $this->__toString()->shouldReturn('identical(["zet", 42])'); - } - - function it_generates_proper_string_representation_for_resource() - { - $resource = fopen(__FILE__, 'r'); - $this->beConstructedWith($resource); - $this->__toString()->shouldReturn('identical(stream:'.$resource.')'); - } - - function it_generates_proper_string_representation_for_object($object) - { - $objHash = sprintf('%s:%s', - get_class($object->getWrappedObject()), - spl_object_hash($object->getWrappedObject()) - ); - - $this->beConstructedWith($object); - $this->__toString()->shouldReturn("identical($objHash Object (\n 'objectProphecy' => Prophecy\Prophecy\ObjectProphecy Object (*Prophecy*)\n))"); - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Argument/Token/LogicalAndTokenSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Argument/Token/LogicalAndTokenSpec.php deleted file mode 100644 index bb5e3840b..000000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Argument/Token/LogicalAndTokenSpec.php +++ /dev/null @@ -1,78 +0,0 @@ -beConstructedWith(array()); - $this->shouldBeAnInstanceOf('Prophecy\Argument\Token\TokenInterface'); - } - - function it_is_not_last() - { - $this->beConstructedWith(array()); - $this->shouldNotBeLast(); - } - - /** - * @param \Prophecy\Argument\Token\TokenInterface $token1 - * @param \Prophecy\Argument\Token\TokenInterface $token2 - * @param \Prophecy\Argument\Token\TokenInterface $token3 - */ - function it_generates_string_representation_from_all_tokens_imploded($token1, $token2, $token3) - { - $token1->__toString()->willReturn('token_1'); - $token2->__toString()->willReturn('token_2'); - $token3->__toString()->willReturn('token_3'); - - $this->beConstructedWith(array($token1, $token2, $token3)); - $this->__toString()->shouldReturn('bool(token_1 AND token_2 AND token_3)'); - } - - function it_wraps_non_token_arguments_into_ExactValueToken() - { - $this->beConstructedWith(array(15, '1985')); - $this->__toString()->shouldReturn("bool(exact(15) AND exact(\"1985\"))"); - } - - /** - * @param \Prophecy\Argument\Token\TokenInterface $token1 - * @param \Prophecy\Argument\Token\TokenInterface $token2 - */ - function it_scores_the_maximum_score_from_all_scores_returned_by_tokens($token1, $token2) - { - $token1->scoreArgument(1)->willReturn(10); - $token2->scoreArgument(1)->willReturn(5); - $this->beConstructedWith(array($token1, $token2)); - $this->scoreArgument(1)->shouldReturn(10); - } - - function it_does_not_score_if_there_are_no_arguments_or_tokens() - { - $this->beConstructedWith(array()); - $this->scoreArgument('any')->shouldReturn(false); - } - - /** - * @param \Prophecy\Argument\Token\TokenInterface $token1 - * @param \Prophecy\Argument\Token\TokenInterface $token2 - */ - function it_does_not_score_if_either_of_tokens_does_not_score($token1, $token2) - { - $token1->scoreArgument(1)->willReturn(10); - $token1->scoreArgument(2)->willReturn(false); - - $token2->scoreArgument(1)->willReturn(false); - $token2->scoreArgument(2)->willReturn(10); - - $this->beConstructedWith(array($token1, $token2)); - - $this->scoreArgument(1)->shouldReturn(false); - $this->scoreArgument(2)->shouldReturn(false); - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Argument/Token/LogicalNotTokenSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Argument/Token/LogicalNotTokenSpec.php deleted file mode 100644 index 7ce7f3d8f..000000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Argument/Token/LogicalNotTokenSpec.php +++ /dev/null @@ -1,65 +0,0 @@ -beConstructedWith($token); - } - - function it_implements_TokenInterface() - { - $this->shouldBeAnInstanceOf('Prophecy\Argument\Token\TokenInterface'); - } - - function it_holds_originating_token($token) - { - $this->getOriginatingToken()->shouldReturn($token); - } - - function it_has_simple_string_representation($token) - { - $token->__toString()->willReturn('value'); - $this->__toString()->shouldBe('not(value)'); - } - - function it_wraps_non_token_argument_into_ExactValueToken() - { - $this->beConstructedWith(5); - $token = $this->getOriginatingToken(); - $token->shouldhaveType('Prophecy\Argument\Token\ExactValueToken'); - $token->getValue()->shouldBe(5); - } - - function it_scores_4_if_preset_token_does_not_match_the_argument($token) - { - $token->scoreArgument('argument')->willReturn(false); - $this->scoreArgument('argument')->shouldBe(4); - } - - function it_does_not_score_if_preset_token_matches_argument($token) - { - $token->scoreArgument('argument')->willReturn(5); - $this->scoreArgument('argument')->shouldBe(false); - } - - function it_is_last_if_preset_token_is_last($token) - { - $token->isLast()->willReturn(true); - $this->shouldBeLast(); - } - - function it_is_not_last_if_preset_token_is_not_last($token) - { - $token->isLast()->willReturn(false); - $this->shouldNotBeLast(); - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Argument/Token/ObjectStateTokenSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Argument/Token/ObjectStateTokenSpec.php deleted file mode 100644 index a783a15fd..000000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Argument/Token/ObjectStateTokenSpec.php +++ /dev/null @@ -1,101 +0,0 @@ -beConstructedWith('getName', 'stdClass'); - } - - function it_implements_TokenInterface() - { - $this->shouldBeAnInstanceOf('Prophecy\Argument\Token\TokenInterface'); - } - - function it_is_not_last() - { - $this->shouldNotBeLast(); - } - - /** - * @param \ReflectionClass $reflection - */ - function it_scores_8_if_argument_object_has_specific_method_state($reflection) - { - $reflection->getName()->willReturn('stdClass'); - - $this->scoreArgument($reflection)->shouldReturn(8); - } - - /** - * @param \stdClass $class - */ - function it_scores_8_if_argument_object_has_specific_property_state($class) - { - $class->getName = 'stdClass'; - - $this->scoreArgument($class)->shouldReturn(8); - } - - function it_does_not_score_if_argument_method_state_does_not_match() - { - $value = new ObjectStateTokenFixtureB('ABC'); - $value2 = new ObjectStateTokenFixtureB('CBA'); - - $this->beConstructedWith('getSelf', $value); - $this->scoreArgument($value2)->shouldReturn(false); - } - - /** - * @param \stdClass $class - */ - function it_does_not_score_if_argument_property_state_does_not_match($class) - { - $class->getName = 'SplFileInfo'; - - $this->scoreArgument($class)->shouldReturn(false); - } - - /** - * @param \spec\Prophecy\Argument\Token\ObjectStateTokenFixtureA $class - */ - function it_does_not_score_if_argument_object_does_not_have_method_or_property($class) - { - $this->scoreArgument($class)->shouldReturn(false); - } - - function it_does_not_score_if_argument_is_not_object() - { - $this->scoreArgument(42)->shouldReturn(false); - } - - function it_has_simple_string_representation() - { - $this->__toString()->shouldReturn('state(getName(), "stdClass")'); - } -} - -class ObjectStateTokenFixtureA -{ - public $errors; -} - -class ObjectStateTokenFixtureB extends ObjectStateTokenFixtureA -{ - public $errors; - public $value = null; - - public function __construct($value) - { - $this->value = $value; - } - - public function getSelf() - { - return $this; - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Argument/Token/StringContainsTokenSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Argument/Token/StringContainsTokenSpec.php deleted file mode 100644 index c7fd26523..000000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Argument/Token/StringContainsTokenSpec.php +++ /dev/null @@ -1,49 +0,0 @@ -beConstructedWith('a substring'); - } - - function it_is_initializable() - { - $this->shouldHaveType('Prophecy\Argument\Token\StringContainsToken'); - } - - function it_implements_TokenInterface() - { - $this->shouldBeAnInstanceOf('Prophecy\Argument\Token\TokenInterface'); - } - - function it_holds_value() - { - $this->getValue()->shouldReturn('a substring'); - } - - function it_is_not_last() - { - $this->shouldNotBeLast(); - } - - function it_scores_6_if_the_argument_contains_the_value() - { - $this->scoreArgument('Argument containing a substring')->shouldReturn(6); - } - - function it_does_not_score_if_the_argument_does_not_contain_the_value() - { - $this->scoreArgument('Argument will not match')->shouldReturn(false); - } - - function its_string_representation_shows_substring() - { - $this->__toString()->shouldReturn('contains("a substring")'); - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Argument/Token/TypeTokenSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Argument/Token/TypeTokenSpec.php deleted file mode 100644 index ae3e26e4e..000000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Argument/Token/TypeTokenSpec.php +++ /dev/null @@ -1,62 +0,0 @@ -beConstructedWith('integer'); - } - - function it_implements_TokenInterface() - { - $this->shouldBeAnInstanceOf('Prophecy\Argument\Token\TokenInterface'); - } - - function it_is_not_last() - { - $this->shouldNotBeLast(); - } - - function it_scores_5_if_argument_matches_simple_type() - { - $this->beConstructedWith('integer'); - - $this->scoreArgument(42)->shouldReturn(5); - } - - function it_does_not_scores_if_argument_does_not_match_simple_type() - { - $this->beConstructedWith('integer'); - - $this->scoreArgument(42.0)->shouldReturn(false); - } - - /** - * @param \ReflectionObject $object - */ - function it_scores_5_if_argument_is_an_instance_of_specified_class($object) - { - $this->beConstructedWith('ReflectionClass'); - - $this->scoreArgument($object)->shouldReturn(5); - } - - function it_has_simple_string_representation() - { - $this->__toString()->shouldReturn('type(integer)'); - } - - /** - * @param \Prophecy\Argument\Token\TokenInterface $interface - */ - function it_scores_5_if_argument_is_an_instance_of_specified_interface($interface) - { - $this->beConstructedWith('Prophecy\Argument\Token\TokenInterface'); - - $this->scoreArgument($interface)->shouldReturn(5); - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/ArgumentSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/ArgumentSpec.php deleted file mode 100644 index 64232a4d2..000000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/ArgumentSpec.php +++ /dev/null @@ -1,107 +0,0 @@ -exact(42); - $token->shouldBeAnInstanceOf('Prophecy\Argument\Token\ExactValueToken'); - $token->getValue()->shouldReturn(42); - } - - function it_has_a_shortcut_for_any_argument_token() - { - $token = $this->any(); - $token->shouldBeAnInstanceOf('Prophecy\Argument\Token\AnyValueToken'); - } - - function it_has_a_shortcut_for_multiple_arguments_token() - { - $token = $this->cetera(); - $token->shouldBeAnInstanceOf('Prophecy\Argument\Token\AnyValuesToken'); - } - - function it_has_a_shortcut_for_type_token() - { - $token = $this->type('integer'); - $token->shouldBeAnInstanceOf('Prophecy\Argument\Token\TypeToken'); - } - - function it_has_a_shortcut_for_callback_token() - { - $token = $this->that('get_class'); - $token->shouldBeAnInstanceOf('Prophecy\Argument\Token\CallbackToken'); - } - - function it_has_a_shortcut_for_object_state_token() - { - $token = $this->which('getName', 'everzet'); - $token->shouldBeAnInstanceOf('Prophecy\Argument\Token\ObjectStateToken'); - } - - function it_has_a_shortcut_for_logical_and_token() - { - $token = $this->allOf('integer', 5); - $token->shouldBeAnInstanceOf('Prophecy\Argument\Token\LogicalAndToken'); - } - - function it_has_a_shortcut_for_array_count_token() - { - $token = $this->size(5); - $token->shouldBeAnInstanceOf('Prophecy\Argument\Token\ArrayCountToken'); - } - - function it_has_a_shortcut_for_array_entry_token() - { - $token = $this->withEntry('key', 'value'); - $token->shouldBeAnInstanceOf('Prophecy\Argument\Token\ArrayEntryToken'); - } - - function it_has_a_shortcut_for_array_every_entry_token() - { - $token = $this->withEveryEntry('value'); - $token->shouldBeAnInstanceOf('Prophecy\Argument\Token\ArrayEveryEntryToken'); - } - - function it_has_a_shortcut_for_identical_value_token() - { - $token = $this->is('value'); - $token->shouldBeAnInstanceOf('Prophecy\Argument\Token\IdenticalValueToken'); - } - - function it_has_a_shortcut_for_array_entry_token_matching_any_key() - { - $token = $this->containing('value'); - $token->shouldBeAnInstanceOf('Prophecy\Argument\Token\ArrayEntryToken'); - $token->getKey()->shouldHaveType('Prophecy\Argument\Token\AnyValueToken'); - } - - function it_has_a_shortcut_for_array_entry_token_matching_any_value() - { - $token = $this->withKey('key'); - $token->shouldBeAnInstanceOf('Prophecy\Argument\Token\ArrayEntryToken'); - $token->getValue()->shouldHaveType('Prophecy\Argument\Token\AnyValueToken'); - } - - function it_has_a_shortcut_for_logical_not_token() - { - $token = $this->not('kagux'); - $token->shouldBeAnInstanceOf('Prophecy\Argument\Token\LogicalNotToken'); - } - - function it_has_a_shortcut_for_string_contains_token() - { - $token = $this->containingString('string'); - $token->shouldBeAnInstanceOf('Prophecy\Argument\Token\StringContainsToken'); - } - - function it_has_a_shortcut_for_approximate_token() - { - $token = $this->approximate(10); - $token->shouldBeAnInstanceOf('Prophecy\Argument\Token\ApproximateValueToken'); - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Call/CallCenterSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Call/CallCenterSpec.php deleted file mode 100644 index acf8d783a..000000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Call/CallCenterSpec.php +++ /dev/null @@ -1,195 +0,0 @@ -scoreArguments(array(5, 2, 3))->willReturn(10); - $objectProphecy->getMethodProphecies()->willReturn(array()); - - $this->makeCall($objectProphecy, 'setValues', array(5, 2, 3)); - - $calls = $this->findCalls('setValues', $wildcard); - $calls->shouldHaveCount(1); - - $calls[0]->shouldBeAnInstanceOf('Prophecy\Call\Call'); - $calls[0]->getMethodName()->shouldReturn('setValues'); - $calls[0]->getArguments()->shouldReturn(array(5, 2, 3)); - $calls[0]->getReturnValue()->shouldReturn(null); - } - - function it_returns_null_for_any_call_through_makeCall_if_no_method_prophecies_added( - $objectProphecy - ) - { - $objectProphecy->getMethodProphecies()->willReturn(array()); - - $this->makeCall($objectProphecy, 'setValues', array(5, 2, 3))->shouldReturn(null); - } - - /** - * @param \Prophecy\Prophecy\MethodProphecy $method1 - * @param \Prophecy\Prophecy\MethodProphecy $method2 - * @param \Prophecy\Prophecy\MethodProphecy $method3 - * @param \Prophecy\Argument\ArgumentsWildcard $arguments1 - * @param \Prophecy\Argument\ArgumentsWildcard $arguments2 - * @param \Prophecy\Argument\ArgumentsWildcard $arguments3 - * @param \Prophecy\Promise\PromiseInterface $promise - */ - function it_executes_promise_of_method_prophecy_that_matches_signature_passed_to_makeCall( - $objectProphecy, $method1, $method2, $method3, $arguments1, $arguments2, $arguments3, - $promise - ) - { - $method1->getMethodName()->willReturn('getName'); - $method1->getArgumentsWildcard()->willReturn($arguments1); - $arguments1->scoreArguments(array('world', 'everything'))->willReturn(false); - - $method2->getMethodName()->willReturn('setTitle'); - $method2->getArgumentsWildcard()->willReturn($arguments2); - $arguments2->scoreArguments(array('world', 'everything'))->willReturn(false); - - $method3->getMethodName()->willReturn('getName'); - $method3->getArgumentsWildcard()->willReturn($arguments3); - $method3->getPromise()->willReturn($promise); - $arguments3->scoreArguments(array('world', 'everything'))->willReturn(200); - - $objectProphecy->getMethodProphecies()->willReturn(array( - 'method1' => array($method1), - 'method2' => array($method2, $method3) - )); - $objectProphecy->getMethodProphecies('getName')->willReturn(array($method1, $method3)); - $objectProphecy->reveal()->willReturn(new \stdClass()); - - $promise->execute(array('world', 'everything'), $objectProphecy->getWrappedObject(), $method3)->willReturn(42); - - $this->makeCall($objectProphecy, 'getName', array('world', 'everything'))->shouldReturn(42); - - $calls = $this->findCalls('getName', $arguments3); - $calls->shouldHaveCount(1); - $calls[0]->getReturnValue()->shouldReturn(42); - } - - /** - * @param \Prophecy\Prophecy\MethodProphecy $method1 - * @param \Prophecy\Prophecy\MethodProphecy $method2 - * @param \Prophecy\Prophecy\MethodProphecy $method3 - * @param \Prophecy\Argument\ArgumentsWildcard $arguments1 - * @param \Prophecy\Argument\ArgumentsWildcard $arguments2 - * @param \Prophecy\Argument\ArgumentsWildcard $arguments3 - * @param \Prophecy\Promise\PromiseInterface $promise - */ - function it_executes_promise_of_method_prophecy_that_matches_with_highest_score_to_makeCall( - $objectProphecy, $method1, $method2, $method3, $arguments1, $arguments2, $arguments3, - $promise - ) - { - $method1->getMethodName()->willReturn('getName'); - $method1->getArgumentsWildcard()->willReturn($arguments1); - $arguments1->scoreArguments(array('world', 'everything'))->willReturn(50); - - $method2->getMethodName()->willReturn('getName'); - $method2->getArgumentsWildcard()->willReturn($arguments2); - $method2->getPromise()->willReturn($promise); - $arguments2->scoreArguments(array('world', 'everything'))->willReturn(300); - - $method3->getMethodName()->willReturn('getName'); - $method3->getArgumentsWildcard()->willReturn($arguments3); - $arguments3->scoreArguments(array('world', 'everything'))->willReturn(200); - - $objectProphecy->getMethodProphecies()->willReturn(array( - 'method1' => array($method1), - 'method2' => array($method2, $method3) - )); - $objectProphecy->getMethodProphecies('getName')->willReturn(array( - $method1, $method2, $method3 - )); - $objectProphecy->reveal()->willReturn(new \stdClass()); - - $promise->execute(array('world', 'everything'), $objectProphecy->getWrappedObject(), $method2) - ->willReturn('second'); - - $this->makeCall($objectProphecy, 'getName', array('world', 'everything')) - ->shouldReturn('second'); - } - - /** - * @param \Prophecy\Prophecy\MethodProphecy $method - * @param \Prophecy\Argument\ArgumentsWildcard $arguments - */ - function it_throws_exception_if_call_does_not_match_any_of_defined_method_prophecies( - $objectProphecy, $method, $arguments - ) - { - $method->getMethodName()->willReturn('getName'); - $method->getArgumentsWildcard()->willReturn($arguments); - $arguments->scoreArguments(array('world', 'everything'))->willReturn(false); - $arguments->__toString()->willReturn('arg1, arg2'); - - $objectProphecy->getMethodProphecies()->willReturn(array('method1' => array($method))); - $objectProphecy->getMethodProphecies('getName')->willReturn(array($method)); - - $this->shouldThrow('Prophecy\Exception\Call\UnexpectedCallException') - ->duringMakeCall($objectProphecy, 'getName', array('world', 'everything')); - } - - /** - * @param \Prophecy\Prophecy\MethodProphecy $method - * @param \Prophecy\Argument\ArgumentsWildcard $arguments - */ - function it_returns_null_if_method_prophecy_that_matches_makeCall_arguments_has_no_promise( - $objectProphecy, $method, $arguments - ) - { - $method->getMethodName()->willReturn('getName'); - $method->getArgumentsWildcard()->willReturn($arguments); - $method->getPromise()->willReturn(null); - $arguments->scoreArguments(array('world', 'everything'))->willReturn(100); - - $objectProphecy->getMethodProphecies()->willReturn(array($method)); - $objectProphecy->getMethodProphecies('getName')->willReturn(array($method)); - - $this->makeCall($objectProphecy, 'getName', array('world', 'everything')) - ->shouldReturn(null); - } - - /** - * @param \Prophecy\Argument\ArgumentsWildcard $wildcard - */ - function it_finds_recorded_calls_by_a_method_name_and_arguments_wildcard( - $objectProphecy, $wildcard - ) - { - $objectProphecy->getMethodProphecies()->willReturn(array()); - - $this->makeCall($objectProphecy, 'getName', array('world')); - $this->makeCall($objectProphecy, 'getName', array('everything')); - $this->makeCall($objectProphecy, 'setName', array(42)); - - $wildcard->scoreArguments(array('world'))->willReturn(false); - $wildcard->scoreArguments(array('everything'))->willReturn(10); - - $calls = $this->findCalls('getName', $wildcard); - - $calls->shouldHaveCount(1); - $calls[0]->getMethodName()->shouldReturn('getName'); - $calls[0]->getArguments()->shouldReturn(array('everything')); - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Call/CallSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Call/CallSpec.php deleted file mode 100644 index d1a853919..000000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Call/CallSpec.php +++ /dev/null @@ -1,54 +0,0 @@ -beConstructedWith('setValues', array(5, 2), 42, $exception, 'some_file.php', 23); - } - - function it_exposes_method_name_through_getter() - { - $this->getMethodName()->shouldReturn('setValues'); - } - - function it_exposes_arguments_through_getter() - { - $this->getArguments()->shouldReturn(array(5, 2)); - } - - function it_exposes_return_value_through_getter() - { - $this->getReturnValue()->shouldReturn(42); - } - - function it_exposes_exception_through_getter($exception) - { - $this->getException()->shouldReturn($exception); - } - - function it_exposes_file_and_line_through_getter() - { - $this->getFile()->shouldReturn('some_file.php'); - $this->getLine()->shouldReturn(23); - } - - function it_returns_shortpath_to_callPlace() - { - $this->getCallPlace()->shouldReturn('some_file.php:23'); - } - - function it_returns_unknown_as_callPlace_if_no_file_or_line_provided() - { - $this->beConstructedWith('setValues', array(), 0, null, null, null); - - $this->getCallPlace()->shouldReturn('unknown'); - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Comparator/ClosureComparatorSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Comparator/ClosureComparatorSpec.php deleted file mode 100644 index c174e73c0..000000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Comparator/ClosureComparatorSpec.php +++ /dev/null @@ -1,39 +0,0 @@ -shouldHaveType('SebastianBergmann\Comparator\Comparator'); - } - - function it_accepts_only_closures() - { - $this->accepts(123, 321)->shouldReturn(false); - $this->accepts('string', 'string')->shouldReturn(false); - $this->accepts(false, true)->shouldReturn(false); - $this->accepts(true, false)->shouldReturn(false); - $this->accepts((object)array(), (object)array())->shouldReturn(false); - $this->accepts(function(){}, (object)array())->shouldReturn(false); - $this->accepts(function(){}, (object)array())->shouldReturn(false); - - $this->accepts(function(){}, function(){})->shouldReturn(true); - } - - function it_asserts_that_all_closures_are_different() - { - $this->shouldThrow()->duringAssertEquals(function(){}, function(){}); - } - - function it_asserts_that_all_closures_are_different_even_if_its_the_same_closure() - { - $closure = function(){}; - - $this->shouldThrow()->duringAssertEquals($closure, $closure); - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Comparator/FactorySpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Comparator/FactorySpec.php deleted file mode 100644 index 6b13336d2..000000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Comparator/FactorySpec.php +++ /dev/null @@ -1,20 +0,0 @@ -shouldHaveType('SebastianBergmann\Comparator\Factory'); - } - - function it_should_have_ClosureComparator_registered() - { - $comparator = $this->getInstance()->getComparatorFor(function(){}, function(){}); - $comparator->shouldHaveType('Prophecy\Comparator\ClosureComparator'); - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Comparator/ProphecyComparatorSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Comparator/ProphecyComparatorSpec.php deleted file mode 100644 index 06bf6f17d..000000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Comparator/ProphecyComparatorSpec.php +++ /dev/null @@ -1,39 +0,0 @@ -shouldHaveType('SebastianBergmann\Comparator\ObjectComparator'); - } - - function it_accepts_only_prophecy_objects() - { - $this->accepts(123, 321)->shouldReturn(false); - $this->accepts('string', 'string')->shouldReturn(false); - $this->accepts(false, true)->shouldReturn(false); - $this->accepts(true, false)->shouldReturn(false); - $this->accepts((object)array(), (object)array())->shouldReturn(false); - $this->accepts(function(){}, (object)array())->shouldReturn(false); - $this->accepts(function(){}, function(){})->shouldReturn(false); - - $prophet = new Prophet(); - $prophecy = $prophet->prophesize('Prophecy\Prophecy\ObjectProphecy'); - - $this->accepts($prophecy, $prophecy)->shouldReturn(true); - } - - function it_asserts_that_an_object_is_equal_to_its_revealed_prophecy() - { - $prophet = new Prophet(); - $prophecy = $prophet->prophesize('Prophecy\Prophecy\ObjectProphecy'); - - $this->shouldNotThrow()->duringAssertEquals($prophecy->reveal(), $prophecy); - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/ClassPatch/DisableConstructorPatchSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/ClassPatch/DisableConstructorPatchSpec.php deleted file mode 100644 index 2d7d934dc..000000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/ClassPatch/DisableConstructorPatchSpec.php +++ /dev/null @@ -1,59 +0,0 @@ -shouldBeAnInstanceOf('Prophecy\Doubler\ClassPatch\ClassPatchInterface'); - } - - function its_priority_is_100() - { - $this->getPriority()->shouldReturn(100); - } - - /** - * @param \Prophecy\Doubler\Generator\Node\ClassNode $node - */ - function it_supports_anything($node) - { - $this->supports($node)->shouldReturn(true); - } - - /** - * @param \Prophecy\Doubler\Generator\Node\ClassNode $class - * @param \Prophecy\Doubler\Generator\Node\MethodNode $method - * @param \Prophecy\Doubler\Generator\Node\ArgumentNode $arg1 - * @param \Prophecy\Doubler\Generator\Node\ArgumentNode $arg2 - */ - function it_makes_all_constructor_arguments_optional($class, $method, $arg1, $arg2) - { - $class->hasMethod('__construct')->willReturn(true); - $class->getMethod('__construct')->willReturn($method); - $method->getArguments()->willReturn(array($arg1, $arg2)); - - $arg1->setDefault(null)->shouldBeCalled(); - $arg2->setDefault(null)->shouldBeCalled(); - - $method->setCode(Argument::type('string'))->shouldBeCalled(); - - $this->apply($class); - } - - /** - * @param \Prophecy\Doubler\Generator\Node\ClassNode $class - */ - function it_creates_new_constructor_if_object_has_none($class) - { - $class->hasMethod('__construct')->willReturn(false); - $class->addMethod(Argument::type('Prophecy\Doubler\Generator\Node\MethodNode')) - ->shouldBeCalled(); - - $this->apply($class); - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/ClassPatch/HhvmExceptionPatchSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/ClassPatch/HhvmExceptionPatchSpec.php deleted file mode 100644 index 8c348b86f..000000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/ClassPatch/HhvmExceptionPatchSpec.php +++ /dev/null @@ -1,37 +0,0 @@ -shouldBeAnInstanceOf('Prophecy\Doubler\ClassPatch\ClassPatchInterface'); - } - - function its_priority_is_minus_50() - { - $this->getPriority()->shouldReturn(-50); - } - - /** - * @param \Prophecy\Doubler\Generator\Node\ClassNode $node - * @param \Prophecy\Doubler\Generator\Node\MethodNode $method - * @param \Prophecy\Doubler\Generator\Node\MethodNode $getterMethod - */ - function it_uses_parent_code_for_setTraceOptions($node, $method, $getterMethod) - { - $node->hasMethod('setTraceOptions')->willReturn(true); - $node->getMethod('setTraceOptions')->willReturn($method); - $node->hasMethod('getTraceOptions')->willReturn(true); - $node->getMethod('getTraceOptions')->willReturn($getterMethod); - - $method->useParentCode()->shouldBeCalled(); - $getterMethod->useParentCode()->shouldBeCalled(); - - $this->apply($node); - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/ClassPatch/KeywordPatchSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/ClassPatch/KeywordPatchSpec.php deleted file mode 100644 index 200d96192..000000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/ClassPatch/KeywordPatchSpec.php +++ /dev/null @@ -1,44 +0,0 @@ -shouldBeAnInstanceOf('Prophecy\Doubler\ClassPatch\ClassPatchInterface'); - } - - function its_priority_is_49() - { - $this->getPriority()->shouldReturn(49); - } - - /** - * @param \Prophecy\Doubler\Generator\Node\ClassNode $node - * @param \Prophecy\Doubler\Generator\Node\MethodNode $method1 - * @param \Prophecy\Doubler\Generator\Node\MethodNode $method2 - * @param \Prophecy\Doubler\Generator\Node\MethodNode $method3 - */ - function it_will_remove_echo_and_eval_methods($node, $method1, $method2, $method3) - { - $node->removeMethod('eval')->shouldBeCalled(); - $node->removeMethod('echo')->shouldBeCalled(); - - $method1->getName()->willReturn('echo'); - $method2->getName()->willReturn('eval'); - $method3->getName()->willReturn('notKeyword'); - - $node->getMethods()->willReturn(array( - 'echo' => $method1, - 'eval' => $method2, - 'notKeyword' => $method3, - )); - - $this->apply($node); - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/ClassPatch/MagicCallPatchSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/ClassPatch/MagicCallPatchSpec.php deleted file mode 100644 index edd8b80dd..000000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/ClassPatch/MagicCallPatchSpec.php +++ /dev/null @@ -1,125 +0,0 @@ -shouldBeAnInstanceOf('Prophecy\Doubler\ClassPatch\ClassPatchInterface'); - } - - /** - * @param \Prophecy\Doubler\Generator\Node\ClassNode $node - */ - function it_supports_anything($node) - { - $this->supports($node)->shouldReturn(true); - } - - /** - * @param \Prophecy\Doubler\Generator\Node\ClassNode $node - */ - function it_discovers_api_using_phpdoc($node) - { - $node->getParentClass()->willReturn('spec\Prophecy\Doubler\ClassPatch\MagicalApi'); - - $node->addMethod(new MethodNode('undefinedMethod'))->shouldBeCalled(); - - $this->apply($node); - } - - /** - * @param \Prophecy\Doubler\Generator\Node\ClassNode $node - */ - function it_ignores_existing_methods($node) - { - $node->getParentClass()->willReturn('spec\Prophecy\Doubler\ClassPatch\MagicalApiExtended'); - - $node->addMethod(new MethodNode('undefinedMethod'))->shouldBeCalled(); - $node->addMethod(new MethodNode('definedMethod'))->shouldNotBeCalled(); - - $this->apply($node); - } - - /** - * @param \Prophecy\Doubler\Generator\Node\ClassNode $node - */ - function it_ignores_empty_methods_from_phpdoc($node) - { - $node->getParentClass()->willReturn('spec\Prophecy\Doubler\ClassPatch\MagicalApiInvalidMethodDefinition'); - - $node->addMethod(new MethodNode(''))->shouldNotBeCalled(); - - $this->apply($node); - } - - /** - * @param \Prophecy\Doubler\Generator\Node\ClassNode $node - */ - function it_discovers_api_using_phpdoc_from_interface($node) - { - $node->getParentClass()->willReturn('spec\Prophecy\Doubler\ClassPatch\MagicalApiImplemented'); - - $node->addMethod(new MethodNode('implementedMethod'))->shouldBeCalled(); - - $this->apply($node); - } - - - function it_has_50_priority() - { - $this->getPriority()->shouldReturn(50); - } -} - -/** - * @method void undefinedMethod() - */ -class MagicalApi -{ - /** - * @return void - */ - public function definedMethod() - { - - } -} - -/** - * @method void invalidMethodDefinition - * @method void - * @method - */ -class MagicalApiInvalidMethodDefinition -{ -} - -/** - * @method void undefinedMethod() - * @method void definedMethod() - */ -class MagicalApiExtended extends MagicalApi -{ - -} - -/** - */ -class MagicalApiImplemented implements MagicalApiInterface -{ - -} - -/** - * @method void implementedMethod() - */ -interface MagicalApiInterface -{ - -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/ClassPatch/ProphecySubjectPatchSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/ClassPatch/ProphecySubjectPatchSpec.php deleted file mode 100644 index c460814cf..000000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/ClassPatch/ProphecySubjectPatchSpec.php +++ /dev/null @@ -1,83 +0,0 @@ -shouldBeAnInstanceOf('Prophecy\Doubler\ClassPatch\ClassPatchInterface'); - } - - function it_has_priority_of_0() - { - $this->getPriority()->shouldReturn(0); - } - - /** - * @param \Prophecy\Doubler\Generator\Node\ClassNode $node - */ - function it_supports_any_class($node) - { - $this->supports($node)->shouldReturn(true); - } - - /** - * @param \Prophecy\Doubler\Generator\Node\ClassNode $node - */ - function it_forces_class_to_implement_ProphecySubjectInterface($node) - { - $node->addInterface('Prophecy\Prophecy\ProphecySubjectInterface')->shouldBeCalled(); - - $node->addProperty('objectProphecy', 'private')->willReturn(null); - $node->getMethods()->willReturn(array()); - $node->hasMethod(Argument::any())->willReturn(false); - $node->addMethod(Argument::type('Prophecy\Doubler\Generator\Node\MethodNode'))->willReturn(null); - $node->addMethod(Argument::type('Prophecy\Doubler\Generator\Node\MethodNode'))->willReturn(null); - - $this->apply($node); - } - - /** - * @param \Prophecy\Doubler\Generator\Node\ClassNode $node - * @param \Prophecy\Doubler\Generator\Node\MethodNode $constructor - * @param \Prophecy\Doubler\Generator\Node\MethodNode $method1 - * @param \Prophecy\Doubler\Generator\Node\MethodNode $method2 - * @param \Prophecy\Doubler\Generator\Node\MethodNode $method3 - */ - function it_forces_all_class_methods_except_constructor_to_proxy_calls_into_prophecy_makeCall( - $node, $constructor, $method1, $method2, $method3 - ) - { - $node->addInterface('Prophecy\Prophecy\ProphecySubjectInterface')->willReturn(null); - $node->addProperty('objectProphecy', 'private')->willReturn(null); - $node->hasMethod(Argument::any())->willReturn(false); - $node->addMethod(Argument::type('Prophecy\Doubler\Generator\Node\MethodNode'))->willReturn(null); - $node->addMethod(Argument::type('Prophecy\Doubler\Generator\Node\MethodNode'))->willReturn(null); - - $constructor->getName()->willReturn('__construct'); - $method1->getName()->willReturn('method1'); - $method2->getName()->willReturn('method2'); - $method3->getName()->willReturn('method3'); - - $node->getMethods()->willReturn(array( - 'method1' => $method1, - 'method2' => $method2, - 'method3' => $method3, - )); - - $constructor->setCode(Argument::any())->shouldNotBeCalled(); - - $method1->setCode('return $this->getProphecy()->makeProphecyMethodCall(__FUNCTION__, func_get_args());') - ->shouldBeCalled(); - $method2->setCode('return $this->getProphecy()->makeProphecyMethodCall(__FUNCTION__, func_get_args());') - ->shouldBeCalled(); - $method3->setCode('return $this->getProphecy()->makeProphecyMethodCall(__FUNCTION__, func_get_args());') - ->shouldBeCalled(); - - $this->apply($node); - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/ClassPatch/ReflectionClassNewInstancePatchSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/ClassPatch/ReflectionClassNewInstancePatchSpec.php deleted file mode 100644 index 4116e4dff..000000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/ClassPatch/ReflectionClassNewInstancePatchSpec.php +++ /dev/null @@ -1,47 +0,0 @@ -shouldBeAnInstanceOf('Prophecy\Doubler\ClassPatch\ClassPatchInterface'); - } - - function its_priority_is_50() - { - $this->getPriority()->shouldReturn(50); - } - - /** - * @param \Prophecy\Doubler\Generator\Node\ClassNode $reflectionClassNode - * @param \Prophecy\Doubler\Generator\Node\ClassNode $anotherClassNode - */ - function it_supports_ReflectionClass_only($reflectionClassNode, $anotherClassNode) - { - $reflectionClassNode->getParentClass()->willReturn('ReflectionClass'); - $anotherClassNode->getParentClass()->willReturn('stdClass'); - - $this->supports($reflectionClassNode)->shouldReturn(true); - $this->supports($anotherClassNode)->shouldReturn(false); - } - - /** - * @param \Prophecy\Doubler\Generator\Node\ClassNode $class - * @param \Prophecy\Doubler\Generator\Node\MethodNode $method - * @param \Prophecy\Doubler\Generator\Node\ArgumentNode $arg1 - * @param \Prophecy\Doubler\Generator\Node\ArgumentNode $arg2 - */ - function it_makes_all_newInstance_arguments_optional($class, $method, $arg1, $arg2) - { - $class->getMethod('newInstance')->willReturn($method); - $method->getArguments()->willReturn(array($arg1)); - $arg1->setDefault(null)->shouldBeCalled(); - - $this->apply($class); - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/ClassPatch/SplFileInfoPatchSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/ClassPatch/SplFileInfoPatchSpec.php deleted file mode 100644 index 42e854ac2..000000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/ClassPatch/SplFileInfoPatchSpec.php +++ /dev/null @@ -1,107 +0,0 @@ -shouldBeAnInstanceOf('Prophecy\Doubler\ClassPatch\ClassPatchInterface'); - } - - function its_priority_is_50() - { - $this->getPriority()->shouldReturn(50); - } - - /** - * @param \Prophecy\Doubler\Generator\Node\ClassNode $node - */ - function it_does_not_support_nodes_without_parent_class($node) - { - $node->getParentClass()->willReturn('stdClass'); - $this->supports($node)->shouldReturn(false); - } - - /** - * @param \Prophecy\Doubler\Generator\Node\ClassNode $node - */ - function it_supports_nodes_with_SplFileInfo_as_parent_class($node) - { - $node->getParentClass()->willReturn('SplFileInfo'); - $this->supports($node)->shouldReturn(true); - } - - /** - * @param \Prophecy\Doubler\Generator\Node\ClassNode $node - */ - function it_supports_nodes_with_derivative_of_SplFileInfo_as_parent_class($node) - { - $node->getParentClass()->willReturn('SplFileInfo'); - $this->supports($node)->shouldReturn(true); - } - - /** - * @param \Prophecy\Doubler\Generator\Node\ClassNode $node - */ - function it_adds_a_method_to_node_if_not_exists($node) - { - $node->hasMethod('__construct')->willReturn(false); - $node->addMethod(Argument::any())->shouldBeCalled(); - $node->getParentClass()->shouldBeCalled(); - - $this->apply($node); - } - - /** - * @param \Prophecy\Doubler\Generator\Node\ClassNode $node - * @param \Prophecy\Doubler\Generator\Node\MethodNode $method - */ - function it_updates_existing_method_if_found($node, $method) - { - $node->hasMethod('__construct')->willReturn(true); - $node->getMethod('__construct')->willReturn($method); - $node->getParentClass()->shouldBeCalled(); - - $method->useParentCode()->shouldBeCalled(); - - $this->apply($node); - } - - /** - * @param \Prophecy\Doubler\Generator\Node\ClassNode $node - * @param \Prophecy\Doubler\Generator\Node\MethodNode $method - */ - function it_should_not_supply_a_file_for_a_directory_iterator($node, $method) - { - $node->hasMethod('__construct')->willReturn(true); - $node->getMethod('__construct')->willReturn($method); - $node->getParentClass()->willReturn('DirectoryIterator'); - - $method->setCode(Argument::that(function($value) { - return strpos($value, '.php') === false; - }))->shouldBeCalled(); - - $this->apply($node); - } - - /** - * @param \Prophecy\Doubler\Generator\Node\ClassNode $node - * @param \Prophecy\Doubler\Generator\Node\MethodNode $method - */ - function it_should_supply_a_file_for_a_spl_file_object($node, $method) - { - $node->hasMethod('__construct')->willReturn(true); - $node->getMethod('__construct')->willReturn($method); - $node->getParentClass()->willReturn('SplFileObject'); - - $method->setCode(Argument::that(function($value) { - return strpos($value, '.php') !== false; - }))->shouldBeCalled(); - - $this->apply($node); - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/ClassPatch/TraversablePatchSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/ClassPatch/TraversablePatchSpec.php deleted file mode 100644 index 2279b7202..000000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/ClassPatch/TraversablePatchSpec.php +++ /dev/null @@ -1,61 +0,0 @@ -shouldBeAnInstanceOf('Prophecy\Doubler\ClassPatch\ClassPatchInterface'); - } - - /** - * @param \Prophecy\Doubler\Generator\Node\ClassNode $node - */ - function it_supports_class_that_implements_only_Traversable($node) - { - $node->getInterfaces()->willReturn(array('Traversable')); - - $this->supports($node)->shouldReturn(true); - } - - /** - * @param \Prophecy\Doubler\Generator\Node\ClassNode $node - */ - function it_does_not_support_class_that_implements_Iterator($node) - { - $node->getInterfaces()->willReturn(array('Traversable', 'Iterator')); - - $this->supports($node)->shouldReturn(false); - } - - /** - * @param \Prophecy\Doubler\Generator\Node\ClassNode $node - */ - function it_does_not_support_class_that_implements_IteratorAggregate($node) - { - $node->getInterfaces()->willReturn(array('Traversable', 'IteratorAggregate')); - - $this->supports($node)->shouldReturn(false); - } - - function it_has_100_priority() - { - $this->getPriority()->shouldReturn(100); - } - - /** - * @param \Prophecy\Doubler\Generator\Node\ClassNode $node - */ - function it_forces_node_to_implement_IteratorAggregate($node) - { - $node->addInterface('Iterator')->shouldBeCalled(); - - $node->addMethod(Argument::type('Prophecy\Doubler\Generator\Node\MethodNode'))->willReturn(null); - - $this->apply($node); - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/DoublerSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/DoublerSpec.php deleted file mode 100644 index a39fa87f9..000000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/DoublerSpec.php +++ /dev/null @@ -1,122 +0,0 @@ -beConstructedWith($mirror, $creator, $namer); - } - - function it_does_not_have_patches_by_default() - { - $this->getClassPatches()->shouldHaveCount(0); - } - - /** - * @param \Prophecy\Doubler\ClassPatch\ClassPatchInterface $patch - */ - function its_registerClassPatch_adds_a_patch_to_the_doubler($patch) - { - $this->registerClassPatch($patch); - $this->getClassPatches()->shouldReturn(array($patch)); - } - - /** - * @param \Prophecy\Doubler\ClassPatch\ClassPatchInterface $alt1 - * @param \Prophecy\Doubler\ClassPatch\ClassPatchInterface $alt2 - * @param \Prophecy\Doubler\ClassPatch\ClassPatchInterface $alt3 - * @param \Prophecy\Doubler\ClassPatch\ClassPatchInterface $alt4 - */ - function its_getClassPatches_sorts_patches_by_priority($alt1, $alt2, $alt3, $alt4) - { - $alt1->getPriority()->willReturn(2); - $alt2->getPriority()->willReturn(50); - $alt3->getPriority()->willReturn(10); - $alt4->getPriority()->willReturn(0); - - $this->registerClassPatch($alt1); - $this->registerClassPatch($alt2); - $this->registerClassPatch($alt3); - $this->registerClassPatch($alt4); - - $this->getClassPatches()->shouldReturn(array($alt2, $alt3, $alt1, $alt4)); - } - - /** - * @param \Prophecy\Doubler\ClassPatch\ClassPatchInterface $alt1 - * @param \Prophecy\Doubler\ClassPatch\ClassPatchInterface $alt2 - * @param \ReflectionClass $class - * @param \ReflectionClass $interface1 - * @param \ReflectionClass $interface2 - * @param \Prophecy\Doubler\Generator\Node\ClassNode $node - */ - function its_double_mirrors_alterates_and_instantiates_provided_class( - $mirror, $creator, $namer, $alt1, $alt2, $class, $interface1, $interface2, $node - ) - { - $mirror->reflect($class, array($interface1, $interface2))->willReturn($node); - $alt1->supports($node)->willReturn(true); - $alt2->supports($node)->willReturn(false); - $alt1->getPriority()->willReturn(1); - $alt2->getPriority()->willReturn(2); - $namer->name($class, array($interface1, $interface2))->willReturn('SplStack'); - $class->getName()->willReturn('stdClass'); - $interface1->getName()->willReturn('ArrayAccess'); - $interface2->getName()->willReturn('Iterator'); - - $alt1->apply($node)->shouldBeCalled(); - $alt2->apply($node)->shouldNotBeCalled(); - $creator->create('SplStack', $node)->shouldBeCalled(); - - $this->registerClassPatch($alt1); - $this->registerClassPatch($alt2); - - $this->double($class, array($interface1, $interface2)) - ->shouldReturnAnInstanceOf('SplStack'); - } - - /** - * @param \ReflectionClass $class - * @param \Prophecy\Doubler\Generator\Node\ClassNode $node - */ - function it_double_instantiates_a_class_with_constructor_argument($mirror, $class, $node, $namer) - { - $class->getName()->willReturn('ReflectionClass'); - $mirror->reflect($class, array())->willReturn($node); - $namer->name($class, array())->willReturn('ReflectionClass'); - - $double = $this->double($class, array(), array('stdClass')); - $double->shouldBeAnInstanceOf('ReflectionClass'); - $double->getName()->shouldReturn('stdClass'); - } - - /** - * @param \ReflectionClass $class - * @param \Prophecy\Doubler\Generator\Node\ClassNode $node - */ - function it_can_instantiate_class_with_final_constructor($mirror, $class, $node, $namer) - { - $class->getName()->willReturn('spec\Prophecy\Doubler\WithFinalConstructor'); - $mirror->reflect($class, array())->willReturn($node); - $namer->name($class, array())->willReturn('spec\Prophecy\Doubler\WithFinalConstructor'); - - $double = $this->double($class, array()); - - $double->shouldBeAnInstanceOf('spec\Prophecy\Doubler\WithFinalConstructor'); - } -} - -class WithFinalConstructor -{ - final public function __construct() {} -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/Generator/ClassCodeGeneratorSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/Generator/ClassCodeGeneratorSpec.php deleted file mode 100644 index b08304825..000000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/Generator/ClassCodeGeneratorSpec.php +++ /dev/null @@ -1,323 +0,0 @@ -getParentClass()->willReturn('RuntimeException'); - $class->getInterfaces()->willReturn(array( - 'Prophecy\Doubler\Generator\MirroredInterface', 'ArrayAccess', 'ArrayIterator' - )); - $class->getProperties()->willReturn(array('name' => 'public', 'email' => 'private')); - $class->getMethods()->willReturn(array($method1, $method2, $method3)); - - $method1->getName()->willReturn('getName'); - $method1->getVisibility()->willReturn('public'); - $method1->returnsReference()->willReturn(false); - $method1->isStatic()->willReturn(true); - $method1->getArguments()->willReturn(array($argument11, $argument12)); - $method1->hasReturnType()->willReturn(true); - $method1->getReturnType()->willReturn('string'); - $method1->getCode()->willReturn('return $this->name;'); - - $method2->getName()->willReturn('getEmail'); - $method2->getVisibility()->willReturn('protected'); - $method2->returnsReference()->willReturn(false); - $method2->isStatic()->willReturn(false); - $method2->getArguments()->willReturn(array($argument21)); - $method2->hasReturnType()->willReturn(false); - $method2->getCode()->willReturn('return $this->email;'); - - $method3->getName()->willReturn('getRefValue'); - $method3->getVisibility()->willReturn('public'); - $method3->returnsReference()->willReturn(true); - $method3->isStatic()->willReturn(false); - $method3->getArguments()->willReturn(array($argument31)); - $method3->hasReturnType()->willReturn(false); - $method3->getCode()->willReturn('return $this->refValue;'); - - $argument11->getName()->willReturn('fullname'); - $argument11->getTypeHint()->willReturn('array'); - $argument11->isOptional()->willReturn(true); - $argument11->getDefault()->willReturn(null); - $argument11->isPassedByReference()->willReturn(false); - $argument11->isVariadic()->willReturn(false); - - $argument12->getName()->willReturn('class'); - $argument12->getTypeHint()->willReturn('ReflectionClass'); - $argument12->isOptional()->willReturn(false); - $argument12->isPassedByReference()->willReturn(false); - $argument12->isVariadic()->willReturn(false); - - $argument21->getName()->willReturn('default'); - $argument21->getTypeHint()->willReturn('string'); - $argument21->isOptional()->willReturn(true); - $argument21->getDefault()->willReturn('ever.zet@gmail.com'); - $argument21->isPassedByReference()->willReturn(false); - $argument21->isVariadic()->willReturn(false); - - $argument31->getName()->willReturn('refValue'); - $argument31->getTypeHint()->willReturn(null); - $argument31->isOptional()->willReturn(false); - $argument31->getDefault()->willReturn(); - $argument31->isPassedByReference()->willReturn(false); - $argument31->isVariadic()->willReturn(false); - - $code = $this->generate('CustomClass', $class); - - if (version_compare(PHP_VERSION, '7.0', '>=')) { - $expected = <<<'PHP' -namespace { -class CustomClass extends \RuntimeException implements \Prophecy\Doubler\Generator\MirroredInterface, \ArrayAccess, \ArrayIterator { -public $name; -private $email; - -public static function getName(array $fullname = NULL, \ReflectionClass $class): string { -return $this->name; -} -protected function getEmail(string $default = 'ever.zet@gmail.com') { -return $this->email; -} -public function &getRefValue( $refValue) { -return $this->refValue; -} - -} -} -PHP; - } else { - $expected = <<<'PHP' -namespace { -class CustomClass extends \RuntimeException implements \Prophecy\Doubler\Generator\MirroredInterface, \ArrayAccess, \ArrayIterator { -public $name; -private $email; - -public static function getName(array $fullname = NULL, \ReflectionClass $class) { -return $this->name; -} -protected function getEmail(\string $default = 'ever.zet@gmail.com') { -return $this->email; -} -public function &getRefValue( $refValue) { -return $this->refValue; -} - -} -} -PHP; - } - $expected = strtr($expected, array("\r\n" => "\n", "\r" => "\n")); - $code->shouldBe($expected); - } - - /** - * @param \Prophecy\Doubler\Generator\Node\ClassNode $class - * @param \Prophecy\Doubler\Generator\Node\MethodNode $method1 - * @param \Prophecy\Doubler\Generator\Node\MethodNode $method2 - * @param \Prophecy\Doubler\Generator\Node\MethodNode $method3 - * @param \Prophecy\Doubler\Generator\Node\MethodNode $method4 - * @param \Prophecy\Doubler\Generator\Node\ArgumentNode $argument1 - * @param \Prophecy\Doubler\Generator\Node\ArgumentNode $argument2 - * @param \Prophecy\Doubler\Generator\Node\ArgumentNode $argument3 - * @param \Prophecy\Doubler\Generator\Node\ArgumentNode $argument4 - */ - function it_generates_proper_php_code_for_variadics( - $class, $method1, $method2, $method3, $method4, $argument1, $argument2, - $argument3, $argument4 - ) - { - $class->getParentClass()->willReturn('stdClass'); - $class->getInterfaces()->willReturn(array('Prophecy\Doubler\Generator\MirroredInterface')); - $class->getProperties()->willReturn(array()); - $class->getMethods()->willReturn(array( - $method1, $method2, $method3, $method4 - )); - - $method1->getName()->willReturn('variadic'); - $method1->getVisibility()->willReturn('public'); - $method1->returnsReference()->willReturn(false); - $method1->isStatic()->willReturn(false); - $method1->getArguments()->willReturn(array($argument1)); - $method1->hasReturnType()->willReturn(false); - $method1->getCode()->willReturn(''); - - $method2->getName()->willReturn('variadicByRef'); - $method2->getVisibility()->willReturn('public'); - $method2->returnsReference()->willReturn(false); - $method2->isStatic()->willReturn(false); - $method2->getArguments()->willReturn(array($argument2)); - $method2->hasReturnType()->willReturn(false); - $method2->getCode()->willReturn(''); - - $method3->getName()->willReturn('variadicWithType'); - $method3->getVisibility()->willReturn('public'); - $method3->returnsReference()->willReturn(false); - $method3->isStatic()->willReturn(false); - $method3->getArguments()->willReturn(array($argument3)); - $method3->hasReturnType()->willReturn(false); - $method3->getCode()->willReturn(''); - - $method4->getName()->willReturn('variadicWithTypeByRef'); - $method4->getVisibility()->willReturn('public'); - $method4->returnsReference()->willReturn(false); - $method4->isStatic()->willReturn(false); - $method4->getArguments()->willReturn(array($argument4)); - $method4->hasReturnType()->willReturn(false); - $method4->getCode()->willReturn(''); - - $argument1->getName()->willReturn('args'); - $argument1->getTypeHint()->willReturn(null); - $argument1->isOptional()->willReturn(false); - $argument1->isPassedByReference()->willReturn(false); - $argument1->isVariadic()->willReturn(true); - - $argument2->getName()->willReturn('args'); - $argument2->getTypeHint()->willReturn(null); - $argument2->isOptional()->willReturn(false); - $argument2->isPassedByReference()->willReturn(true); - $argument2->isVariadic()->willReturn(true); - - $argument3->getName()->willReturn('args'); - $argument3->getTypeHint()->willReturn('\ReflectionClass'); - $argument3->isOptional()->willReturn(false); - $argument3->isPassedByReference()->willReturn(false); - $argument3->isVariadic()->willReturn(true); - - $argument4->getName()->willReturn('args'); - $argument4->getTypeHint()->willReturn('\ReflectionClass'); - $argument4->isOptional()->willReturn(false); - $argument4->isPassedByReference()->willReturn(true); - $argument4->isVariadic()->willReturn(true); - - $code = $this->generate('CustomClass', $class); - $expected = <<<'PHP' -namespace { -class CustomClass extends \stdClass implements \Prophecy\Doubler\Generator\MirroredInterface { - -public function variadic( ...$args) { - -} -public function variadicByRef( &...$args) { - -} -public function variadicWithType(\\ReflectionClass ...$args) { - -} -public function variadicWithTypeByRef(\\ReflectionClass &...$args) { - -} - -} -} -PHP; - $expected = strtr($expected, array("\r\n" => "\n", "\r" => "\n")); - $code->shouldBe($expected); - } - - /** - * @param \Prophecy\Doubler\Generator\Node\ClassNode $class - * @param \Prophecy\Doubler\Generator\Node\MethodNode $method - * @param \Prophecy\Doubler\Generator\Node\ArgumentNode $argument - */ - function it_overrides_properly_methods_with_args_passed_by_reference( - $class, $method, $argument - ) - { - $class->getParentClass()->willReturn('RuntimeException'); - $class->getInterfaces()->willReturn(array('Prophecy\Doubler\Generator\MirroredInterface')); - $class->getProperties()->willReturn(array()); - $class->getMethods()->willReturn(array($method)); - - $method->getName()->willReturn('getName'); - $method->getVisibility()->willReturn('public'); - $method->isStatic()->willReturn(false); - $method->getArguments()->willReturn(array($argument)); - $method->hasReturnType()->willReturn(false); - $method->returnsReference()->willReturn(false); - $method->getCode()->willReturn('return $this->name;'); - - $argument->getName()->willReturn('fullname'); - $argument->getTypeHint()->willReturn('array'); - $argument->isOptional()->willReturn(true); - $argument->getDefault()->willReturn(null); - $argument->isPassedByReference()->willReturn(true); - $argument->isVariadic()->willReturn(false); - - $code = $this->generate('CustomClass', $class); - $expected =<<<'PHP' -namespace { -class CustomClass extends \RuntimeException implements \Prophecy\Doubler\Generator\MirroredInterface { - -public function getName(array &$fullname = NULL) { -return $this->name; -} - -} -} -PHP; - $expected = strtr($expected, array("\r\n" => "\n", "\r" => "\n")); - $code->shouldBe($expected); - } - - /** - * @param \Prophecy\Doubler\Generator\Node\ClassNode $class - */ - function it_generates_empty_class_for_empty_ClassNode($class) - { - $class->getParentClass()->willReturn('stdClass'); - $class->getInterfaces()->willReturn(array('Prophecy\Doubler\Generator\MirroredInterface')); - $class->getProperties()->willReturn(array()); - $class->getMethods()->willReturn(array()); - - $code = $this->generate('CustomClass', $class); - $expected =<<<'PHP' -namespace { -class CustomClass extends \stdClass implements \Prophecy\Doubler\Generator\MirroredInterface { - - -} -} -PHP; - $expected = strtr($expected, array("\r\n" => "\n", "\r" => "\n")); - $code->shouldBe($expected); - } - - /** - * @param \Prophecy\Doubler\Generator\Node\ClassNode $class - */ - function it_wraps_class_in_namespace_if_it_is_namespaced($class) - { - $class->getParentClass()->willReturn('stdClass'); - $class->getInterfaces()->willReturn(array('Prophecy\Doubler\Generator\MirroredInterface')); - $class->getProperties()->willReturn(array()); - $class->getMethods()->willReturn(array()); - - $code = $this->generate('My\Awesome\CustomClass', $class); - $expected =<<<'PHP' -namespace My\Awesome { -class CustomClass extends \stdClass implements \Prophecy\Doubler\Generator\MirroredInterface { - - -} -} -PHP; - $expected = strtr($expected, array("\r\n" => "\n", "\r" => "\n")); - $code->shouldBe($expected); - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/Generator/ClassCreatorSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/Generator/ClassCreatorSpec.php deleted file mode 100644 index c7b570097..000000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/Generator/ClassCreatorSpec.php +++ /dev/null @@ -1,44 +0,0 @@ -beConstructedWith($generator); - } - - /** - * @param \Prophecy\Doubler\Generator\Node\ClassNode $class - */ - function it_evaluates_code_generated_by_ClassCodeGenerator($generator, $class) - { - $generator->generate('stdClass', $class)->shouldBeCalled()->willReturn( - 'return 42;' - ); - - $this->create('stdClass', $class)->shouldReturn(42); - } - - /** - * @param \Prophecy\Doubler\Generator\Node\ClassNode $class - */ - function it_throws_an_exception_if_class_does_not_exist_after_evaluation($generator, $class) - { - $generator->generate('CustomClass', $class)->shouldBeCalled()->willReturn( - 'return 42;' - ); - - $class->getParentClass()->willReturn('stdClass'); - $class->getInterfaces()->willReturn(array('Interface1', 'Interface2')); - - $this->shouldThrow('Prophecy\Exception\Doubler\ClassCreatorException') - ->duringCreate('CustomClass', $class); - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/Generator/ClassMirrorSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/Generator/ClassMirrorSpec.php deleted file mode 100644 index de8044807..000000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/Generator/ClassMirrorSpec.php +++ /dev/null @@ -1,784 +0,0 @@ -getName()->willReturn('Custom\ClassName'); - $class->getParentClass()->willReturn($parent); - $class->isInterface()->willReturn(false); - $class->isFinal()->willReturn(false); - $class->getMethods(ReflectionMethod::IS_ABSTRACT)->willReturn(array()); - $class->getMethods(ReflectionMethod::IS_PUBLIC)->willReturn(array( - $method1, $method2, $method3 - )); - - $parent->getName()->willReturn('Custom\ParentClassName'); - - $method1->getDeclaringClass()->willReturn($class); - $method2->getDeclaringClass()->willReturn($class); - $method3->getDeclaringClass()->willReturn($class); - - $method1->getName()->willReturn('getName'); - $method2->getName()->willReturn('getSelf'); - $method3->getName()->willReturn('getParent'); - - $method1->isFinal()->willReturn(false); - $method2->isFinal()->willReturn(false); - $method3->isFinal()->willReturn(false); - - $method1->isProtected()->willReturn(false); - $method2->isProtected()->willReturn(false); - $method3->isProtected()->willReturn(false); - - $method1->isStatic()->willReturn(false); - $method2->isStatic()->willReturn(false); - $method3->isStatic()->willReturn(false); - - $method1->returnsReference()->willReturn(false); - $method2->returnsReference()->willReturn(false); - $method3->returnsReference()->willReturn(false); - - $method1->getParameters()->willReturn(array()); - $method2->getParameters()->willReturn(array()); - $method3->getParameters()->willReturn(array()); - - if (version_compare(PHP_VERSION, '7.0', '>=')) { - $method1->hasReturnType()->willReturn(true); - $method1->getReturnType()->willReturn('string'); - $method2->hasReturnType()->willReturn(true); - $method2->getReturnType()->willReturn('self'); - $method3->hasReturnType()->willReturn(true); - $method3->getReturnType()->willReturn('parent'); - } - - $classNode = $this->reflect($class, array()); - $classNode->shouldBeAnInstanceOf('Prophecy\Doubler\Generator\Node\ClassNode'); - $classNode->getParentClass()->shouldReturn('Custom\ClassName'); - - $methodNodes = $classNode->getMethods(); - $methodNodes->shouldHaveCount(3); - - $classNode->hasMethod('getName')->shouldReturn(true); - $classNode->hasMethod('getSelf')->shouldReturn(true); - $classNode->hasMethod('getParent')->shouldReturn(true); - - if (version_compare(PHP_VERSION, '7.0', '>=')) { - $classNode->getMethod('getName')->getReturnType()->shouldReturn('string'); - $classNode->getMethod('getSelf')->getReturnType()->shouldReturn('\Custom\ClassName'); - $classNode->getMethod('getParent')->getReturnType()->shouldReturn('\Custom\ParentClassName'); - } - } - - /** - * @param ReflectionClass $class - * @param ReflectionMethod $method - * @param ReflectionParameter $parameter - */ - function it_changes_argument_names_if_they_are_varying($class, $method, $parameter) - { - - $class->getName()->willReturn('Custom\ClassName'); - $class->isInterface()->willReturn(false); - $class->isFinal()->willReturn(false); - $class->getMethods(ReflectionMethod::IS_PUBLIC)->willReturn(array($method)); - $class->getMethods(ReflectionMethod::IS_ABSTRACT)->willReturn(array()); - - $method->getParameters()->willReturn(array($parameter)); - $method->getName()->willReturn('methodName'); - $method->isFinal()->willReturn(false); - $method->isProtected()->willReturn(false); - $method->isStatic()->willReturn(false); - $method->returnsReference()->willReturn(false); - - if (version_compare(PHP_VERSION, '7.0', '>=')) { - $method->hasReturnType()->willReturn(false); - } - - $parameter->getName()->willReturn('...'); - $parameter->isDefaultValueAvailable()->willReturn(true); - $parameter->getDefaultValue()->willReturn(null); - $parameter->isPassedByReference()->willReturn(false); - $parameter->getClass()->willReturn($class); - if (version_compare(PHP_VERSION, '5.6', '>=')) { - $parameter->isVariadic()->willReturn(false); - } - - $classNode = $this->reflect($class, array()); - - $methodNodes = $classNode->getMethods(); - - $argumentNodes = $methodNodes['methodName']->getArguments(); - $argumentNode = $argumentNodes[0]; - - $argumentNode->getName()->shouldReturn('__dot_dot_dot__'); - } - - /** - * @param ReflectionClass $class - * @param ReflectionMethod $method - */ - function it_reflects_protected_abstract_methods($class, $method) - { - $class->getName()->willReturn('Custom\ClassName'); - $class->isInterface()->willReturn(false); - $class->isFinal()->willReturn(false); - $class->getMethods(ReflectionMethod::IS_ABSTRACT)->willReturn(array($method)); - $class->getMethods(ReflectionMethod::IS_PUBLIC)->willReturn(array()); - - $method->isProtected()->willReturn(true); - $method->isStatic()->willReturn(false); - $method->getParameters()->willReturn(array()); - $method->getName()->willReturn('innerDetail'); - $method->returnsReference()->willReturn(false); - - if (version_compare(PHP_VERSION, '7.0', '>=')) { - $method->hasReturnType()->willReturn(false); - } - - $classNode = $this->reflect($class, array()); - $classNode->shouldBeAnInstanceOf('Prophecy\Doubler\Generator\Node\ClassNode'); - $classNode->getParentClass()->shouldReturn('Custom\ClassName'); - - $methodNodes = $classNode->getMethods(); - $methodNodes->shouldHaveCount(1); - - $methodNodes['innerDetail']->getVisibility()->shouldReturn('protected'); - } - - /** - * @param ReflectionClass $class - * @param ReflectionMethod $method - */ - function it_reflects_public_static_methods($class, $method) - { - $class->getName()->willReturn('Custom\ClassName'); - $class->isInterface()->willReturn(false); - $class->isFinal()->willReturn(false); - $class->getMethods(ReflectionMethod::IS_ABSTRACT)->willReturn(array($method)); - $class->getMethods(ReflectionMethod::IS_PUBLIC)->willReturn(array()); - - $method->isProtected()->willReturn(true); - $method->isStatic()->willReturn(true); - $method->getParameters()->willReturn(array()); - $method->getName()->willReturn('innerDetail'); - $method->returnsReference()->willReturn(false); - - if (version_compare(PHP_VERSION, '7.0', '>=')) { - $method->hasReturnType()->willReturn(false); - } - - $classNode = $this->reflect($class, array()); - $classNode->shouldBeAnInstanceOf('Prophecy\Doubler\Generator\Node\ClassNode'); - $classNode->getParentClass()->shouldReturn('Custom\ClassName'); - - $methodNodes = $classNode->getMethods(); - $methodNodes->shouldHaveCount(1); - - $methodNodes['innerDetail']->getVisibility()->shouldReturn('protected'); - $methodNodes['innerDetail']->isStatic()->shouldReturn(true); - } - - /** - * @param ReflectionClass $class - * @param ReflectionMethod $constructMethod - * @param ReflectionMethod $destructMethod - * @param ReflectionMethod $sleepMethod - * @param ReflectionMethod $wakeupMethod - * @param ReflectionMethod $toStringMethod - * @param ReflectionMethod $callMethod - * @param ReflectionMethod $invokeMethod - */ - function it_reflects_allowed_magic_methods($class, $constructMethod, $destructMethod, $sleepMethod, $wakeupMethod, $toStringMethod, $callMethod, $invokeMethod) - { - $class->getName()->willReturn('Custom\ClassName'); - $class->isInterface()->willReturn(false); - $class->isFinal()->willReturn(false); - $class->getMethods(ReflectionMethod::IS_ABSTRACT)->willReturn(array()); - $class->getMethods(ReflectionMethod::IS_PUBLIC)->willReturn(array( - $constructMethod, $destructMethod, $sleepMethod, $wakeupMethod, $toStringMethod, $callMethod, $invokeMethod - )); - - $constructMethod->getName()->willReturn('__construct'); - $destructMethod->getName()->willReturn('__destruct'); - $sleepMethod->getName()->willReturn('__sleep'); - $wakeupMethod->getName()->willReturn('__wakeup'); - $toStringMethod->getName()->willReturn('__toString'); - $callMethod->getName()->willReturn('__call'); - $invokeMethod->getName()->willReturn('__invoke'); - - $constructMethod->isFinal()->willReturn(false); - $destructMethod->isFinal()->willReturn(false); - $sleepMethod->isFinal()->willReturn(false); - $wakeupMethod->isFinal()->willReturn(false); - $toStringMethod->isFinal()->willReturn(false); - $callMethod->isFinal()->willReturn(false); - $invokeMethod->isFinal()->willReturn(false); - - $constructMethod->isProtected()->willReturn(false); - $destructMethod->isProtected()->willReturn(false); - $sleepMethod->isProtected()->willReturn(false); - $wakeupMethod->isProtected()->willReturn(false); - $toStringMethod->isProtected()->willReturn(false); - $callMethod->isProtected()->willReturn(false); - $invokeMethod->isProtected()->willReturn(false); - - $constructMethod->isStatic()->willReturn(false); - $destructMethod->isStatic()->willReturn(false); - $sleepMethod->isStatic()->willReturn(false); - $wakeupMethod->isStatic()->willReturn(false); - $toStringMethod->isStatic()->willReturn(false); - $callMethod->isStatic()->willReturn(false); - $invokeMethod->isStatic()->willReturn(false); - - $constructMethod->returnsReference()->willReturn(false); - $destructMethod->returnsReference()->willReturn(false); - $sleepMethod->returnsReference()->willReturn(false); - $wakeupMethod->returnsReference()->willReturn(false); - $toStringMethod->returnsReference()->willReturn(false); - $callMethod->returnsReference()->willReturn(false); - $invokeMethod->returnsReference()->willReturn(false); - - $constructMethod->getParameters()->willReturn(array()); - $destructMethod->getParameters()->willReturn(array()); - $sleepMethod->getParameters()->willReturn(array()); - $wakeupMethod->getParameters()->willReturn(array()); - $toStringMethod->getParameters()->willReturn(array()); - $callMethod->getParameters()->willReturn(array()); - $invokeMethod->getParameters()->willReturn(array()); - - if (version_compare(PHP_VERSION, '7.0', '>=')) { - $constructMethod->hasReturnType()->willReturn(false); - $destructMethod->hasReturnType()->willReturn(false); - $sleepMethod->hasReturnType()->willReturn(false); - $wakeupMethod->hasReturnType()->willReturn(false); - $toStringMethod->hasReturnType()->willReturn(false); - $callMethod->hasReturnType()->willReturn(false); - $invokeMethod->hasReturnType()->willReturn(false); - } - - $classNode = $this->reflect($class, array()); - $classNode->shouldBeAnInstanceOf('Prophecy\Doubler\Generator\Node\ClassNode'); - $classNode->getParentClass()->shouldReturn('Custom\ClassName'); - - $methodNodes = $classNode->getMethods(); - $methodNodes->shouldHaveCount(7); - } - - /** - * @param ReflectionClass $class - * @param ReflectionMethod $method - * @param ReflectionParameter $param1 - * @param ReflectionParameter $param2 - * @param ReflectionClass $typeHint - * @param ReflectionParameter $param3 - * @param ReflectionParameter $param4 - */ - function it_properly_reads_methods_arguments_with_types( - $class, $method, $param1, $param2, $typeHint, $param3, $param4 - ) - { - $class->getName()->willReturn('Custom\ClassName'); - $class->isInterface()->willReturn(false); - $class->isFinal()->willReturn(false); - $class->getMethods(ReflectionMethod::IS_ABSTRACT)->willReturn(array()); - $class->getMethods(ReflectionMethod::IS_PUBLIC)->willReturn(array($method)); - - $method->getName()->willReturn('methodWithArgs'); - $method->isFinal()->willReturn(false); - $method->isProtected()->willReturn(true); - $method->isStatic()->willReturn(false); - $method->returnsReference()->willReturn(false); - $method->getParameters()->willReturn(array($param1, $param2, $param3, $param4)); - - if (version_compare(PHP_VERSION, '7.0', '>=')) { - $method->hasReturnType()->willReturn(false); - } - - $param1->getName()->willReturn('arg_1'); - $param1->isArray()->willReturn(true); - $param1->getClass()->willReturn(null); - $param1->isDefaultValueAvailable()->willReturn(true); - $param1->isPassedByReference()->willReturn(false); - $param1->allowsNull()->willReturn(false); - $param1->getDefaultValue()->willReturn(array()); - - $param2->getName()->willReturn('arg2'); - $param2->isArray()->willReturn(false); - $param2->getClass()->willReturn($typeHint); - $param2->isDefaultValueAvailable()->willReturn(false); - $param2->isOptional()->willReturn(false); - $param2->isPassedByReference()->willReturn(false); - $param2->allowsNull()->willReturn(false); - $typeHint->getName()->willReturn('ArrayAccess'); - - $param3->getName()->willReturn('arg_3'); - $param3->isArray()->willReturn(false); - if (version_compare(PHP_VERSION, '5.4', '>=')) { - $param3->isCallable()->willReturn(true); - } - $param3->getClass()->willReturn(null); - $param3->isOptional()->willReturn(false); - $param3->isDefaultValueAvailable()->willReturn(false); - $param3->isPassedByReference()->willReturn(false); - $param3->allowsNull()->willReturn(true); - - $param4->getName()->willReturn('arg_4'); - $param4->isArray()->willReturn(false); - $param4->getClass()->willReturn($typeHint); - $param4->isPassedByReference()->willReturn(false); - $param4->allowsNull()->willReturn(true); - - if (version_compare(PHP_VERSION, '5.6', '>=')) { - $param1->isVariadic()->willReturn(false); - $param2->isVariadic()->willReturn(false); - $param3->isVariadic()->willReturn(false); - $param4->isVariadic()->willReturn(true); - } else { - $param4->isOptional()->willReturn(true); - $param4->isDefaultValueAvailable()->willReturn(false); - } - - $classNode = $this->reflect($class, array()); - $methodNodes = $classNode->getMethods(); - $argNodes = $methodNodes['methodWithArgs']->getArguments(); - - $argNodes[0]->getName()->shouldReturn('arg_1'); - $argNodes[0]->getTypeHint()->shouldReturn('array'); - $argNodes[0]->isOptional()->shouldReturn(true); - $argNodes[0]->getDefault()->shouldReturn(array()); - - $argNodes[1]->getName()->shouldReturn('arg2'); - $argNodes[1]->getTypeHint()->shouldReturn('ArrayAccess'); - $argNodes[1]->isOptional()->shouldReturn(false); - - $argNodes[2]->getName()->shouldReturn('arg_3'); - if (version_compare(PHP_VERSION, '5.4', '>=')) { - $argNodes[2]->getTypeHint()->shouldReturn('callable'); - $argNodes[2]->isOptional()->shouldReturn(true); - $argNodes[2]->getDefault()->shouldReturn(null); - } else { - $argNodes[2]->isOptional()->shouldReturn(false); - } - - $argNodes[3]->getName()->shouldReturn('arg_4'); - $argNodes[3]->getTypeHint()->shouldReturn('ArrayAccess'); - if (version_compare(PHP_VERSION, '5.6', '>=')) { - $argNodes[3]->isVariadic()->shouldReturn(true); - } else { - $argNodes[3]->isOptional()->shouldReturn(true); - $argNodes[3]->getDefault()->shouldReturn(null); - } - } - - /** - * @param ReflectionClass $class - * @param ReflectionMethod $method - * @param ReflectionParameter $param1 - */ - function it_marks_required_args_without_types_as_not_optional( - $class, $method, $param1 - ) - { - $class->getName()->willReturn('Custom\ClassName'); - $class->isInterface()->willReturn(false); - $class->isFinal()->willReturn(false); - $class->getMethods(ReflectionMethod::IS_ABSTRACT)->willReturn(array()); - $class->getMethods(ReflectionMethod::IS_PUBLIC)->willReturn(array($method)); - - $method->getName()->willReturn('methodWithArgs'); - $method->isFinal()->willReturn(false); - $method->isProtected()->willReturn(false); - $method->isStatic()->willReturn(false); - $method->returnsReference()->willReturn(false); - $method->getParameters()->willReturn(array($param1)); - - if (version_compare(PHP_VERSION, '7.0', '>=')) { - $method->hasReturnType()->willReturn(false); - } - - $param1->getName()->willReturn('arg_1'); - $param1->isArray()->willReturn(false); - if (version_compare(PHP_VERSION, '5.4', '>=')) { - $param1->isCallable()->willReturn(false); - } - $param1->getClass()->willReturn(null); - - if (version_compare(PHP_VERSION, '7.0', '>=')) { - $param1->hasType()->willReturn(false); - } - - if (version_compare(PHP_VERSION, '5.6', '>=')) { - $param1->isVariadic()->willReturn(false); - } - $param1->isDefaultValueAvailable()->willReturn(false); - $param1->isOptional()->willReturn(false); - $param1->isPassedByReference()->willReturn(false); - $param1->allowsNull()->willReturn(true); - if (defined('HHVM_VERSION')) { - $param1->getTypehintText()->willReturn(null); - } - - $classNode = $this->reflect($class, array()); - $methodNodes = $classNode->getMethods(); - $argNodes = $methodNodes['methodWithArgs']->getArguments(); - - $argNodes[0]->isOptional()->shouldReturn(false); - } - - /** - * @param ReflectionClass $class - * @param ReflectionMethod $method - * @param ReflectionParameter $param1 - * @param ReflectionParameter $param2 - * @param ReflectionParameter $param3 - * @param ReflectionClass $typeHint - */ - function it_marks_passed_by_reference_args_as_passed_by_reference( - $class, $method, $param1, $param2, $param3, $typeHint - ) - { - $class->getName()->willReturn('Custom\ClassName'); - $class->isInterface()->willReturn(false); - $class->isFinal()->willReturn(false); - $class->getMethods(ReflectionMethod::IS_ABSTRACT)->willReturn(array()); - $class->getMethods(ReflectionMethod::IS_PUBLIC)->willReturn(array($method)); - - $method->getName()->willReturn('methodWithArgs'); - $method->isFinal()->willReturn(false); - $method->isProtected()->willReturn(false); - $method->isStatic()->willReturn(false); - $method->returnsReference()->willReturn(false); - $method->getParameters()->willReturn(array($param1, $param2, $param3)); - - if (version_compare(PHP_VERSION, '7.0', '>=')) { - $method->hasReturnType()->willReturn(false); - } - - $param1->getName()->willReturn('arg_1'); - $param1->isArray()->willReturn(false); - if (version_compare(PHP_VERSION, '5.4', '>=')) { - $param1->isCallable()->willReturn(false); - } - $param1->getClass()->willReturn(null); - if (version_compare(PHP_VERSION, '5.6', '>=')) { - $param1->isVariadic()->willReturn(false); - } - $param1->isDefaultValueAvailable()->willReturn(false); - $param1->isOptional()->willReturn(true); - $param1->isPassedByReference()->willReturn(true); - - if (version_compare(PHP_VERSION, '7.0', '>=')) { - $param1->hasType()->willReturn(false); - } - - $param1->allowsNull()->willReturn(false); - if (defined('HHVM_VERSION')) { - $param1->getTypehintText()->willReturn(null); - } - - $param2->getName()->willReturn('arg2'); - $param2->isArray()->willReturn(false); - $param2->getClass()->willReturn($typeHint); - if (version_compare(PHP_VERSION, '5.6', '>=')) { - $param2->isVariadic()->willReturn(false); - } - $param2->isDefaultValueAvailable()->willReturn(false); - $param2->isOptional()->willReturn(false); - $param2->isPassedByReference()->willReturn(false); - - if (version_compare(PHP_VERSION, '7.0', '>=')) { - $param2->hasType()->willReturn(false); - } - - $param2->allowsNull()->willReturn(false); - $typeHint->getName()->willReturn('ArrayAccess'); - - $param3->getName()->willReturn('arg2'); - $param3->isArray()->willReturn(false); - $param3->getClass()->willReturn($typeHint); - if (version_compare(PHP_VERSION, '5.6', '>=')) { - $param3->isVariadic()->willReturn(true); - } else { - $param3->isOptional()->willReturn(true); - $param3->isDefaultValueAvailable()->willReturn(false); - } - $param3->isPassedByReference()->willReturn(true); - $param3->allowsNull()->willReturn(true); - - $classNode = $this->reflect($class, array()); - $methodNodes = $classNode->getMethods(); - $argNodes = $methodNodes['methodWithArgs']->getArguments(); - - $argNodes[0]->isPassedByReference()->shouldReturn(true); - $argNodes[1]->isPassedByReference()->shouldReturn(false); - $argNodes[2]->isPassedByReference()->shouldReturn(true); - } - - /** - * @param ReflectionClass $class - */ - function it_throws_an_exception_if_class_is_final($class) - { - $class->isInterface()->willReturn(false); - $class->isFinal()->willReturn(true); - $class->getName()->willReturn('Custom\ClassName'); - - $this->shouldThrow('Prophecy\Exception\Doubler\ClassMirrorException') - ->duringReflect($class, array()); - } - - /** - * @param ReflectionClass $class - * @param ReflectionMethod $method - */ - function it_ignores_final_methods($class, $method) - { - $class->getName()->willReturn('Custom\ClassName'); - $class->isInterface()->willReturn(false); - $class->isFinal()->willReturn(false); - $class->getMethods(ReflectionMethod::IS_ABSTRACT)->willReturn(array()); - $class->getMethods(ReflectionMethod::IS_PUBLIC)->willReturn(array($method)); - - $method->isFinal()->willReturn(true); - $method->getName()->willReturn('finalImplementation'); - - $classNode = $this->reflect($class, array()); - $classNode->getMethods()->shouldHaveCount(0); - } - - /** - * @param ReflectionClass $class - * @param ReflectionMethod $method - */ - function it_marks_final_methods_as_unextendable($class, $method) - { - $class->getName()->willReturn('Custom\ClassName'); - $class->isInterface()->willReturn(false); - $class->isFinal()->willReturn(false); - $class->getMethods(ReflectionMethod::IS_ABSTRACT)->willReturn(array()); - $class->getMethods(ReflectionMethod::IS_PUBLIC)->willReturn(array($method)); - - $method->isFinal()->willReturn(true); - $method->getName()->willReturn('finalImplementation'); - - $classNode = $this->reflect($class, array()); - $classNode->getUnextendableMethods()->shouldHaveCount(1); - $classNode->isExtendable('finalImplementation')->shouldReturn(false); - } - - /** - * @param ReflectionClass $interface - */ - function it_throws_an_exception_if_interface_provided_instead_of_class($interface) - { - $interface->isInterface()->willReturn(true); - $interface->getName()->willReturn('Custom\ClassName'); - - $this->shouldThrow('Prophecy\Exception\InvalidArgumentException') - ->duringReflect($interface, array()); - } - - /** - * @param ReflectionClass $interface1 - * @param ReflectionClass $interface2 - * @param ReflectionMethod $method1 - * @param ReflectionMethod $method2 - * @param ReflectionMethod $method3 - */ - function it_reflects_all_interfaces_methods( - $interface1, $interface2, $method1, $method2, $method3 - ) - { - $interface1->getName()->willReturn('MyInterface1'); - $interface2->getName()->willReturn('MyInterface2'); - - $interface1->isInterface()->willReturn(true); - $interface2->isInterface()->willReturn(true); - - $interface1->getMethods()->willReturn(array($method1)); - $interface2->getMethods()->willReturn(array($method2, $method3)); - - $method1->getName()->willReturn('getName'); - $method2->getName()->willReturn('isPublic'); - $method3->getName()->willReturn('isAbstract'); - - $method1->isProtected()->willReturn(false); - $method2->isProtected()->willReturn(false); - $method3->isProtected()->willReturn(false); - - $method1->returnsReference()->willReturn(false); - $method2->returnsReference()->willReturn(false); - $method3->returnsReference()->willReturn(false); - - $method1->isStatic()->willReturn(false); - $method2->isStatic()->willReturn(false); - $method3->isStatic()->willReturn(false); - - $method1->getParameters()->willReturn(array()); - $method2->getParameters()->willReturn(array()); - $method3->getParameters()->willReturn(array()); - - if (version_compare(PHP_VERSION, '7.0', '>=')) { - $method1->hasReturnType()->willReturn(false); - $method2->hasReturnType()->willReturn(false); - $method3->hasReturnType()->willReturn(false); - } - - $classNode = $this->reflect(null, array($interface1, $interface2)); - - $classNode->shouldBeAnInstanceOf('Prophecy\Doubler\Generator\Node\ClassNode'); - $classNode->getParentClass()->shouldReturn('stdClass'); - $classNode->getInterfaces()->shouldReturn(array( - 'Prophecy\Doubler\Generator\ReflectionInterface', 'MyInterface2', 'MyInterface1', - )); - - $methodNodes = $classNode->getMethods(); - $methodNodes->shouldHaveCount(3); - - $classNode->hasMethod('getName')->shouldReturn(true); - $classNode->hasMethod('isPublic')->shouldReturn(true); - $classNode->hasMethod('isAbstract')->shouldReturn(true); - } - - /** - * @param ReflectionClass $class - * @param ReflectionMethod $method1 - * @param ReflectionMethod $method2 - * @param ReflectionMethod $method3 - */ - function it_ignores_virtually_private_methods($class, $method1, $method2, $method3) - { - $class->getName()->willReturn('SomeClass'); - $class->isInterface()->willReturn(false); - $class->isFinal()->willReturn(false); - $class->getMethods(ReflectionMethod::IS_ABSTRACT)->willReturn(array()); - $class->getMethods(ReflectionMethod::IS_PUBLIC)->willReturn(array($method1, $method2, $method3)); - - $method1->getName()->willReturn('_getName'); - $method2->getName()->willReturn('__toString'); - $method3->getName()->willReturn('isAbstract'); - - $method1->isFinal()->willReturn(false); - $method2->isFinal()->willReturn(false); - $method3->isFinal()->willReturn(false); - - $method1->isProtected()->willReturn(false); - $method2->isProtected()->willReturn(false); - $method3->isProtected()->willReturn(false); - - $method1->isStatic()->willReturn(false); - $method2->isStatic()->willReturn(false); - $method3->isStatic()->willReturn(false); - - $method1->returnsReference()->willReturn(false); - $method2->returnsReference()->willReturn(false); - $method3->returnsReference()->willReturn(false); - - $method1->getParameters()->willReturn(array()); - $method2->getParameters()->willReturn(array()); - $method3->getParameters()->willReturn(array()); - - if (version_compare(PHP_VERSION, '7.0', '>=')) { - $method1->hasReturnType()->willReturn(false); - $method2->hasReturnType()->willReturn(false); - $method3->hasReturnType()->willReturn(false); - } - - $classNode = $this->reflect($class, array()); - $methodNodes = $classNode->getMethods(); - $methodNodes->shouldHaveCount(2); - - $classNode->hasMethod('isAbstract')->shouldReturn(true); - } - - /** - * @param ReflectionClass $class - * @param ReflectionMethod $method - */ - function it_does_not_throw_exception_for_virtually_private_finals($class, $method) - { - $class->getName()->willReturn('SomeClass'); - $class->isInterface()->willReturn(false); - $class->isFinal()->willReturn(false); - $class->getMethods(ReflectionMethod::IS_ABSTRACT)->willReturn(array()); - $class->getMethods(ReflectionMethod::IS_PUBLIC)->willReturn(array($method)); - - $method->getName()->willReturn('__toString'); - $method->isFinal()->willReturn(true); - - $this->shouldNotThrow()->duringReflect($class, array()); - } - - /** - * @param ReflectionClass $class - */ - function it_throws_an_exception_if_class_provided_in_interfaces_list($class) - { - $class->getName()->willReturn('MyClass'); - $class->isInterface()->willReturn(false); - - $this->shouldThrow('InvalidArgumentException') - ->duringReflect(null, array($class)); - } - - function it_throws_an_exception_if_not_reflection_provided_as_interface() - { - $this->shouldThrow('InvalidArgumentException') - ->duringReflect(null, array(null)); - } - - function it_doesnt_fail_to_typehint_nonexistent_FQCN() - { - $classNode = $this->reflect(new ReflectionClass('spec\Prophecy\Doubler\Generator\OptionalDepsClass'), array()); - $method = $classNode->getMethod('iHaveAStrangeTypeHintedArg'); - $arguments = $method->getArguments(); - $arguments[0]->getTypeHint()->shouldBe('I\Simply\Am\Nonexistent'); - } - - function it_doesnt_fail_to_typehint_nonexistent_RQCN() - { - $classNode = $this->reflect(new ReflectionClass('spec\Prophecy\Doubler\Generator\OptionalDepsClass'), array()); - $method = $classNode->getMethod('iHaveAnEvenStrangerTypeHintedArg'); - $arguments = $method->getArguments(); - $arguments[0]->getTypeHint()->shouldBe('I\Simply\Am\Not'); - } - - function it_doesnt_use_scalar_typehints() - { - $classNode = $this->reflect(new ReflectionClass('ReflectionMethod'), array()); - $method = $classNode->getMethod('export'); - $arguments = $method->getArguments(); - $arguments[0]->getTypeHint()->shouldReturn(null); - $arguments[1]->getTypeHint()->shouldReturn(null); - $arguments[2]->getTypeHint()->shouldReturn(null); - } -} - -class OptionalDepsClass -{ - public function iHaveAStrangeTypeHintedArg(\I\Simply\Am\Nonexistent $class) - { - } - - public function iHaveAnEvenStrangerTypeHintedArg(Simply\Am\Not $class) - { - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/Generator/Node/ArgumentNodeSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/Generator/Node/ArgumentNodeSpec.php deleted file mode 100644 index 2c8d1886a..000000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/Generator/Node/ArgumentNodeSpec.php +++ /dev/null @@ -1,92 +0,0 @@ -beConstructedWith('name'); - } - - function it_is_not_be_passed_by_reference_by_default() - { - $this->shouldNotBePassedByReference(); - } - - function it_is_passed_by_reference_if_marked() - { - $this->setAsPassedByReference(); - $this->shouldBePassedByReference(); - } - - function it_is_not_variadic_by_default() - { - $this->shouldNotBeVariadic(); - } - - function it_is_variadic_if_marked() - { - $this->setAsVariadic(); - $this->shouldBeVariadic(); - } - - function it_does_not_have_default_by_default() - { - $this->shouldNotHaveDefault(); - } - - function it_does_not_have_default_if_variadic() - { - $this->setDefault(null); - $this->setAsVariadic(); - $this->shouldNotHaveDefault(); - } - - function it_does_have_default_if_not_variadic() - { - $this->setDefault(null); - $this->setAsVariadic(false); - $this->hasDefault()->shouldReturn(true); - } - - function it_has_name_with_which_it_was_been_constructed() - { - $this->getName()->shouldReturn('name'); - } - - function it_has_no_typehint_by_default() - { - $this->getTypeHint()->shouldReturn(null); - } - - function its_typeHint_is_mutable() - { - $this->setTypeHint('array'); - $this->getTypeHint()->shouldReturn('array'); - } - - function it_does_not_have_default_value_by_default() - { - $this->getDefault()->shouldReturn(null); - } - - function it_is_not_optional_by_default() - { - $this->isOptional()->shouldReturn(false); - } - - function its_default_is_mutable() - { - $this->setDefault(array()); - $this->getDefault()->shouldReturn(array()); - } - - function it_is_marked_as_optional_when_default_is_set() - { - $this->setDefault(null); - $this->isOptional()->shouldReturn(true); - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/Generator/Node/ClassNodeSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/Generator/Node/ClassNodeSpec.php deleted file mode 100644 index be7e1026e..000000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/Generator/Node/ClassNodeSpec.php +++ /dev/null @@ -1,200 +0,0 @@ -getParentClass()->shouldReturn('stdClass'); - } - - function its_parentClass_is_mutable() - { - $this->setParentClass('Exception'); - $this->getParentClass()->shouldReturn('Exception'); - } - - function its_parentClass_is_set_to_stdClass_if_user_set_null() - { - $this->setParentClass(null); - $this->getParentClass()->shouldReturn('stdClass'); - } - - function it_does_not_implement_any_interface_by_default() - { - $this->getInterfaces()->shouldHaveCount(0); - } - - function its_addInterface_adds_item_to_the_list_of_implemented_interfaces() - { - $this->addInterface('MyInterface'); - $this->getInterfaces()->shouldHaveCount(1); - } - - function its_hasInterface_returns_true_if_class_implements_interface() - { - $this->addInterface('MyInterface'); - $this->hasInterface('MyInterface')->shouldReturn(true); - } - - function its_hasInterface_returns_false_if_class_does_not_implements_interface() - { - $this->hasInterface('MyInterface')->shouldReturn(false); - } - - function it_supports_implementation_of_multiple_interfaces() - { - $this->addInterface('MyInterface'); - $this->addInterface('MySecondInterface'); - $this->getInterfaces()->shouldHaveCount(2); - } - - function it_ignores_same_interfaces_added_twice() - { - $this->addInterface('MyInterface'); - $this->addInterface('MyInterface'); - - $this->getInterfaces()->shouldHaveCount(1); - $this->getInterfaces()->shouldReturn(array('MyInterface')); - } - - function it_does_not_have_methods_by_default() - { - $this->getMethods()->shouldHaveCount(0); - } - - /** - * @param \Prophecy\Doubler\Generator\Node\MethodNode $method1 - * @param \Prophecy\Doubler\Generator\Node\MethodNode $method2 - */ - function it_can_has_methods($method1, $method2) - { - $method1->getName()->willReturn('__construct'); - $method2->getName()->willReturn('getName'); - - $this->addMethod($method1); - $this->addMethod($method2); - - $this->getMethods()->shouldReturn(array( - '__construct' => $method1, - 'getName' => $method2 - )); - } - - /** - * @param \Prophecy\Doubler\Generator\Node\MethodNode $method - */ - function its_hasMethod_returns_true_if_method_exists($method) - { - $method->getName()->willReturn('getName'); - - $this->addMethod($method); - - $this->hasMethod('getName')->shouldReturn(true); - } - - /** - * @param \Prophecy\Doubler\Generator\Node\MethodNode $method - */ - function its_getMethod_returns_method_by_name($method) - { - $method->getName()->willReturn('getName'); - - $this->addMethod($method); - - $this->getMethod('getName')->shouldReturn($method); - } - - function its_hasMethod_returns_false_if_method_does_not_exists() - { - $this->hasMethod('getName')->shouldReturn(false); - } - - /** - * @param \Prophecy\Doubler\Generator\Node\MethodNode $method - */ - function its_hasMethod_returns_false_if_method_has_been_removed($method) - { - $method->getName()->willReturn('getName'); - $this->addMethod($method); - $this->removeMethod('getName'); - - $this->hasMethod('getName')->shouldReturn(false); - } - - - function it_does_not_have_properties_by_default() - { - $this->getProperties()->shouldHaveCount(0); - } - - function it_is_able_to_have_properties() - { - $this->addProperty('title'); - $this->addProperty('text', 'private'); - $this->getProperties()->shouldReturn(array( - 'title' => 'public', - 'text' => 'private' - )); - } - - function its_addProperty_does_not_accept_unsupported_visibility() - { - $this->shouldThrow('InvalidArgumentException')->duringAddProperty('title', 'town'); - } - - function its_addProperty_lowercases_visibility_before_setting() - { - $this->addProperty('text', 'PRIVATE'); - $this->getProperties()->shouldReturn(array('text' => 'private')); - } - - function its_has_no_unextendable_methods_by_default() - { - $this->getUnextendableMethods()->shouldHaveCount(0); - } - - function its_addUnextendableMethods_adds_an_unextendable_method() - { - $this->addUnextendableMethod('testMethod'); - $this->getUnextendableMethods()->shouldHaveCount(1); - } - - function its_methods_are_extendable_by_default() - { - $this->isExtendable('testMethod')->shouldReturn(true); - } - - function its_unextendable_methods_are_not_extendable() - { - $this->addUnextendableMethod('testMethod'); - $this->isExtendable('testMethod')->shouldReturn(false); - } - - function its_addUnextendableMethods_doesnt_create_duplicates() - { - $this->addUnextendableMethod('testMethod'); - $this->addUnextendableMethod('testMethod'); - $this->getUnextendableMethods()->shouldHaveCount(1); - } - - /** - * @param \Prophecy\Doubler\Generator\Node\MethodNode $method - */ - function it_throws_an_exception_when_adding_a_method_that_isnt_extendable($method) - { - $this->addUnextendableMethod('testMethod'); - $method->getName()->willReturn('testMethod'); - - $expectedException = new MethodNotExtendableException( - "Method `testMethod` is not extendable, so can not be added.", - "stdClass", - "testMethod" - ); - $this->shouldThrow($expectedException)->duringAddMethod($method); - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/Generator/Node/MethodNodeSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/Generator/Node/MethodNodeSpec.php deleted file mode 100644 index 49bd9f591..000000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/Generator/Node/MethodNodeSpec.php +++ /dev/null @@ -1,141 +0,0 @@ -beConstructedWith('getTitle'); - } - - function it_has_a_name() - { - $this->getName()->shouldReturn('getTitle'); - } - - function it_has_public_visibility_by_default() - { - $this->getVisibility()->shouldReturn('public'); - } - - function its_visibility_is_mutable() - { - $this->setVisibility('private'); - $this->getVisibility()->shouldReturn('private'); - } - - function it_is_not_static_by_default() - { - $this->shouldNotBeStatic(); - } - - function it_does_not_return_a_reference_by_default() - { - $this->returnsReference()->shouldReturn(false); - } - - function it_should_be_settable_as_returning_a_reference_through_setter() - { - $this->setReturnsReference(); - $this->returnsReference()->shouldReturn(true); - } - - function it_should_be_settable_as_static_through_setter() - { - $this->setStatic(); - $this->shouldBeStatic(); - } - - function it_accepts_only_supported_visibilities() - { - $this->shouldThrow('InvalidArgumentException')->duringSetVisibility('stealth'); - } - - function it_lowercases_visibility_before_setting_it() - { - $this->setVisibility('Public'); - $this->getVisibility()->shouldReturn('public'); - } - - /** - * @param \Prophecy\Doubler\Generator\Node\ArgumentNode $argument1 - * @param \Prophecy\Doubler\Generator\Node\ArgumentNode $argument2 - */ - function its_useParentCode_causes_method_to_call_parent($argument1, $argument2) - { - $argument1->getName()->willReturn('objectName'); - $argument2->getName()->willReturn('default'); - - $argument1->isVariadic()->willReturn(false); - $argument2->isVariadic()->willReturn(true); - - $this->addArgument($argument1); - $this->addArgument($argument2); - - $this->useParentCode(); - - $this->getCode()->shouldReturn( - 'return parent::getTitle($objectName, ...$default);' - ); - } - - function its_code_is_mutable() - { - $this->setCode('echo "code";'); - $this->getCode()->shouldReturn('echo "code";'); - } - - function its_reference_returning_methods_will_generate_exceptions() - { - $this->setCode('echo "code";'); - $this->setReturnsReference(); - $this->getCode()->shouldReturn("throw new \Prophecy\Exception\Doubler\ReturnByReferenceException('Returning by reference not supported', get_class(\$this), 'getTitle');"); - } - - function its_setCode_provided_with_null_cleans_method_body() - { - $this->setCode(null); - $this->getCode()->shouldReturn(''); - } - - function it_is_constructable_with_code() - { - $this->beConstructedWith('getTitle', 'die();'); - $this->getCode()->shouldReturn('die();'); - } - - function it_does_not_have_arguments_by_default() - { - $this->getArguments()->shouldHaveCount(0); - } - - /** - * @param \Prophecy\Doubler\Generator\Node\ArgumentNode $argument1 - * @param \Prophecy\Doubler\Generator\Node\ArgumentNode $argument2 - */ - function it_supports_adding_arguments($argument1, $argument2) - { - $this->addArgument($argument1); - $this->addArgument($argument2); - - $this->getArguments()->shouldReturn(array($argument1, $argument2)); - } - - function it_does_not_have_return_type_by_default() - { - $this->hasReturnType()->shouldReturn(false); - } - - function it_setReturnType_sets_return_type() - { - $returnType = 'string'; - - $this->setReturnType($returnType); - - $this->hasReturnType()->shouldReturn(true); - $this->getReturnType()->shouldReturn($returnType); - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/LazyDoubleSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/LazyDoubleSpec.php deleted file mode 100644 index 7026126ff..000000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/LazyDoubleSpec.php +++ /dev/null @@ -1,96 +0,0 @@ -beConstructedWith($doubler); - } - - /** - * @param \Prophecy\Prophecy\ProphecySubjectInterface $double - */ - function it_returns_anonymous_double_instance_by_default($doubler, $double) - { - $doubler->double(null, array())->willReturn($double); - - $this->getInstance()->shouldReturn($double); - } - - /** - * @param \Prophecy\Prophecy\ProphecySubjectInterface $double - * @param \ReflectionClass $class - */ - function it_returns_class_double_instance_if_set($doubler, $double, $class) - { - $doubler->double($class, array())->willReturn($double); - - $this->setParentClass($class); - - $this->getInstance()->shouldReturn($double); - } - - /** - * @param \Prophecy\Prophecy\ProphecySubjectInterface $double1 - * @param \Prophecy\Prophecy\ProphecySubjectInterface $double2 - */ - function it_returns_same_double_instance_if_called_2_times( - $doubler, $double1, $double2 - ) - { - $doubler->double(null, array())->willReturn($double1); - $doubler->double(null, array())->willReturn($double2); - - $this->getInstance()->shouldReturn($double2); - $this->getInstance()->shouldReturn($double2); - } - - function its_setParentClass_throws_ClassNotFoundException_if_class_not_found() - { - $this->shouldThrow('Prophecy\Exception\Doubler\ClassNotFoundException') - ->duringSetParentClass('SomeUnexistingClass'); - } - - /** - * @param \Prophecy\Prophecy\ProphecySubjectInterface $double - */ - function its_setParentClass_throws_exception_if_prophecy_is_already_created( - $doubler, $double - ) - { - $doubler->double(null, array())->willReturn($double); - - $this->getInstance(); - - $this->shouldThrow('Prophecy\Exception\Doubler\DoubleException') - ->duringSetParentClass('stdClass'); - } - - function its_addInterface_throws_InterfaceNotFoundException_if_no_interface_found() - { - $this->shouldThrow('Prophecy\Exception\Doubler\InterfaceNotFoundException') - ->duringAddInterface('SomeUnexistingInterface'); - } - - /** - * @param \Prophecy\Prophecy\ProphecySubjectInterface $double - */ - function its_addInterface_throws_exception_if_prophecy_is_already_created( - $doubler, $double - ) - { - $doubler->double(null, array())->willReturn($double); - - $this->getInstance(); - - $this->shouldThrow('Prophecy\Exception\Doubler\DoubleException') - ->duringAddInterface('ArrayAccess'); - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/NameGeneratorSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/NameGeneratorSpec.php deleted file mode 100644 index a3e749197..000000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Doubler/NameGeneratorSpec.php +++ /dev/null @@ -1,72 +0,0 @@ -getName()->willReturn('stdClass'); - $this->name($class, array())->shouldStartWith('Double\stdClass\\'); - } - - /** - * @param \ReflectionClass $class - */ - function its_name_generates_name_based_on_namespaced_class_reflection($class) - { - $class->getName()->willReturn('Some\Custom\Class'); - $this->name($class, array())->shouldStartWith('Double\Some\Custom\Class\P'); - } - - /** - * @param \ReflectionClass $interface1 - * @param \ReflectionClass $interface2 - */ - function its_name_generates_name_based_on_interface_shortnames($interface1, $interface2) - { - $interface1->getShortName()->willReturn('HandlerInterface'); - $interface2->getShortName()->willReturn('LoaderInterface'); - - $this->name(null, array($interface1, $interface2))->shouldStartWith( - 'Double\HandlerInterface\LoaderInterface\P' - ); - } - - function it_generates_proper_name_for_no_class_and_interfaces_list() - { - $this->name(null, array())->shouldStartWith('Double\stdClass\P'); - } - - /** - * @param \ReflectionClass $class - * @param \ReflectionClass $interface1 - * @param \ReflectionClass $interface2 - */ - function its_name_generates_name_based_only_on_class_if_its_available( - $class, $interface1, $interface2 - ) - { - $class->getName()->willReturn('Some\Custom\Class'); - $interface1->getShortName()->willReturn('HandlerInterface'); - $interface2->getShortName()->willReturn('LoaderInterface'); - - $this->name($class, array($interface1, $interface2))->shouldStartWith( - 'Double\Some\Custom\Class\P' - ); - } - - public function getMatchers() - { - return array( - 'startWith' => function ($subject, $string) { - return 0 === strpos($subject, $string); - }, - ); - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Exception/Call/UnexpectedCallExceptionSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Exception/Call/UnexpectedCallExceptionSpec.php deleted file mode 100644 index 6fd1a5c3f..000000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Exception/Call/UnexpectedCallExceptionSpec.php +++ /dev/null @@ -1,32 +0,0 @@ -beConstructedWith('msg', $objectProphecy, 'getName', array('arg1', 'arg2')); - } - - function it_is_prophecy_exception() - { - $this->shouldBeAnInstanceOf('Prophecy\Exception\Prophecy\ObjectProphecyException'); - } - - function it_exposes_method_name_through_getter() - { - $this->getMethodName()->shouldReturn('getName'); - } - - function it_exposes_arguments_through_getter() - { - $this->getArguments()->shouldReturn(array('arg1', 'arg2')); - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Exception/Doubler/ClassCreatorExceptionSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Exception/Doubler/ClassCreatorExceptionSpec.php deleted file mode 100644 index 58241385e..000000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Exception/Doubler/ClassCreatorExceptionSpec.php +++ /dev/null @@ -1,28 +0,0 @@ -beConstructedWith('', $node); - } - - function it_is_a_prophecy_exception() - { - $this->shouldBeAnInstanceOf('Prophecy\Exception\Exception'); - $this->shouldBeAnInstanceOf('Prophecy\Exception\Doubler\DoublerException'); - } - - function it_contains_a_reflected_node($node) - { - $this->getClassNode()->shouldReturn($node); - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Exception/Doubler/ClassMirrorExceptionSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Exception/Doubler/ClassMirrorExceptionSpec.php deleted file mode 100644 index 21e31a344..000000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Exception/Doubler/ClassMirrorExceptionSpec.php +++ /dev/null @@ -1,27 +0,0 @@ -beConstructedWith('', $class); - } - - function it_is_a_prophecy_exception() - { - $this->shouldBeAnInstanceOf('Prophecy\Exception\Exception'); - $this->shouldBeAnInstanceOf('Prophecy\Exception\Doubler\DoublerException'); - } - - function it_contains_a_reflected_class_link($class) - { - $this->getReflectedClass()->shouldReturn($class); - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Exception/Doubler/ClassNotFoundExceptionSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Exception/Doubler/ClassNotFoundExceptionSpec.php deleted file mode 100644 index 251512b9b..000000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Exception/Doubler/ClassNotFoundExceptionSpec.php +++ /dev/null @@ -1,25 +0,0 @@ -beConstructedWith('msg', 'CustomClass'); - } - - function it_is_a_prophecy_exception() - { - $this->shouldBeAnInstanceOf('Prophecy\Exception\Exception'); - $this->shouldBeAnInstanceOf('Prophecy\Exception\Doubler\DoubleException'); - } - - function its_getClassname_returns_classname() - { - $this->getClassname()->shouldReturn('CustomClass'); - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Exception/Doubler/DoubleExceptionSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Exception/Doubler/DoubleExceptionSpec.php deleted file mode 100644 index 6fe5a19ae..000000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Exception/Doubler/DoubleExceptionSpec.php +++ /dev/null @@ -1,14 +0,0 @@ -shouldBeAnInstanceOf('RuntimeException'); - $this->shouldBeAnInstanceOf('Prophecy\Exception\Doubler\DoublerException'); - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Exception/Doubler/InterfaceNotFoundExceptionSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Exception/Doubler/InterfaceNotFoundExceptionSpec.php deleted file mode 100644 index ad1a439e7..000000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Exception/Doubler/InterfaceNotFoundExceptionSpec.php +++ /dev/null @@ -1,24 +0,0 @@ -beConstructedWith('msg', 'CustomInterface'); - } - - function it_extends_ClassNotFoundException() - { - $this->shouldBeAnInstanceOf('Prophecy\Exception\Doubler\ClassNotFoundException'); - } - - function its_getClassname_returns_classname() - { - $this->getClassname()->shouldReturn('CustomInterface'); - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Exception/Doubler/MethodNotExtendableExceptionSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Exception/Doubler/MethodNotExtendableExceptionSpec.php deleted file mode 100644 index 5028b0263..000000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Exception/Doubler/MethodNotExtendableExceptionSpec.php +++ /dev/null @@ -1,29 +0,0 @@ -beConstructedWith('', 'User', 'getName'); - } - - function it_is_DoubleException() - { - $this->shouldHaveType('Prophecy\Exception\Doubler\DoubleException'); - } - - function it_has_MethodName() - { - $this->getMethodName()->shouldReturn('getName'); - } - - function it_has_classname() - { - $this->getClassName()->shouldReturn('User'); - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Exception/Doubler/MethodNotFoundExceptionSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Exception/Doubler/MethodNotFoundExceptionSpec.php deleted file mode 100644 index a889dd7ef..000000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Exception/Doubler/MethodNotFoundExceptionSpec.php +++ /dev/null @@ -1,40 +0,0 @@ -beConstructedWith('', 'User', 'getName', array(1, 2, 3)); - } - - function it_is_DoubleException() - { - $this->shouldHaveType('Prophecy\Exception\Doubler\DoubleException'); - } - - function it_has_MethodName() - { - $this->getMethodName()->shouldReturn('getName'); - } - - function it_has_classnamej() - { - $this->getClassname()->shouldReturn('User'); - } - - function it_has_an_arguments_list() - { - $this->getArguments()->shouldReturn(array(1, 2, 3)); - } - - function it_has_a_default_null_argument_list() - { - $this->beConstructedWith('', 'User', 'getName'); - $this->getArguments()->shouldReturn(null); - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Exception/Prediction/AggregateExceptionSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Exception/Prediction/AggregateExceptionSpec.php deleted file mode 100644 index 22a5ebdbf..000000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Exception/Prediction/AggregateExceptionSpec.php +++ /dev/null @@ -1,57 +0,0 @@ -beConstructedWith(null); - } - - function it_is_prediction_exception() - { - $this->shouldBeAnInstanceOf('RuntimeException'); - $this->shouldBeAnInstanceOf('Prophecy\Exception\Prediction\PredictionException'); - } - - /** - * @param \Prophecy\Prophecy\ObjectProphecy $object - */ - function it_can_store_objectProphecy_link($object) - { - $this->setObjectProphecy($object); - $this->getObjectProphecy()->shouldReturn($object); - } - - function it_should_not_have_exceptions_at_the_beginning() - { - $this->getExceptions()->shouldHaveCount(0); - } - - /** - * @param \Prophecy\Exception\Prediction\PredictionException $exception - */ - function it_should_append_exception_through_append_method($exception) - { - $exception->getMessage()->willReturn('Exception #1'); - - $this->append($exception); - - $this->getExceptions()->shouldReturn(array($exception)); - } - - /** - * @param \Prophecy\Exception\Prediction\PredictionException $exception - */ - function it_should_update_message_during_append($exception) - { - $exception->getMessage()->willReturn('Exception #1'); - - $this->append($exception); - - $this->getMessage()->shouldReturn(" Exception #1"); - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Exception/Prediction/NoCallsExceptionSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Exception/Prediction/NoCallsExceptionSpec.php deleted file mode 100644 index 473f1a2da..000000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Exception/Prediction/NoCallsExceptionSpec.php +++ /dev/null @@ -1,29 +0,0 @@ -getObjectProphecy()->willReturn($objectProphecy); - - $this->beConstructedWith('message', $methodProphecy); - } - - function it_is_PredictionException() - { - $this->shouldHaveType('Prophecy\Exception\Prediction\PredictionException'); - } - - function it_extends_MethodProphecyException() - { - $this->shouldHaveType('Prophecy\Exception\Prophecy\MethodProphecyException'); - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Exception/Prediction/UnexpectedCallsCountExceptionSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Exception/Prediction/UnexpectedCallsCountExceptionSpec.php deleted file mode 100644 index adad975ba..000000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Exception/Prediction/UnexpectedCallsCountExceptionSpec.php +++ /dev/null @@ -1,31 +0,0 @@ -getObjectProphecy()->willReturn($objectProphecy); - - $this->beConstructedWith('message', $methodProphecy, 5, array($call1, $call2)); - } - - function it_extends_UnexpectedCallsException() - { - $this->shouldBeAnInstanceOf('Prophecy\Exception\Prediction\UnexpectedCallsException'); - } - - function it_should_expose_expectedCount_through_getter() - { - $this->getExpectedCount()->shouldReturn(5); - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Exception/Prediction/UnexpectedCallsExceptionSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Exception/Prediction/UnexpectedCallsExceptionSpec.php deleted file mode 100644 index c0fe24d77..000000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Exception/Prediction/UnexpectedCallsExceptionSpec.php +++ /dev/null @@ -1,36 +0,0 @@ -getObjectProphecy()->willReturn($objectProphecy); - - $this->beConstructedWith('message', $methodProphecy, array($call1, $call2)); - } - - function it_is_PredictionException() - { - $this->shouldHaveType('Prophecy\Exception\Prediction\PredictionException'); - } - - function it_extends_MethodProphecyException() - { - $this->shouldHaveType('Prophecy\Exception\Prophecy\MethodProphecyException'); - } - - function it_should_expose_calls_list_through_getter($call1, $call2) - { - $this->getCalls()->shouldReturn(array($call1, $call2)); - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Exception/Prophecy/MethodProphecyExceptionSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Exception/Prophecy/MethodProphecyExceptionSpec.php deleted file mode 100644 index 97cf9e109..000000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Exception/Prophecy/MethodProphecyExceptionSpec.php +++ /dev/null @@ -1,30 +0,0 @@ -getObjectProphecy()->willReturn($objectProphecy); - - $this->beConstructedWith('message', $methodProphecy); - } - - function it_extends_DoubleException() - { - $this->shouldBeAnInstanceOf('Prophecy\Exception\Prophecy\ObjectProphecyException'); - } - - function it_holds_a_stub_reference($methodProphecy) - { - $this->getMethodProphecy()->shouldReturn($methodProphecy); - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Exception/Prophecy/ObjectProphecyExceptionSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Exception/Prophecy/ObjectProphecyExceptionSpec.php deleted file mode 100644 index bcacfedcb..000000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Exception/Prophecy/ObjectProphecyExceptionSpec.php +++ /dev/null @@ -1,27 +0,0 @@ -beConstructedWith('message', $objectProphecy); - } - - function it_should_be_a_prophecy_exception() - { - $this->shouldBeAnInstanceOf('Prophecy\Exception\Prophecy\ProphecyException'); - } - - function it_holds_double_reference($objectProphecy) - { - $this->getObjectProphecy()->shouldReturn($objectProphecy); - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Prediction/CallPredictionSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Prediction/CallPredictionSpec.php deleted file mode 100644 index 3da8c5990..000000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Prediction/CallPredictionSpec.php +++ /dev/null @@ -1,42 +0,0 @@ -shouldHaveType('Prophecy\Prediction\PredictionInterface'); - } - - /** - * @param \Prophecy\Prophecy\ObjectProphecy $object - * @param \Prophecy\Prophecy\MethodProphecy $method - * @param \Prophecy\Call\Call $call - */ - function it_does_nothing_if_there_is_more_than_one_call_been_made($object, $method, $call) - { - $this->check(array($call), $object, $method)->shouldReturn(null); - } - - /** - * @param \Prophecy\Prophecy\ObjectProphecy $object - * @param \Prophecy\Prophecy\MethodProphecy $method - * @param \Prophecy\Argument\ArgumentsWildcard $arguments - */ - function it_throws_NoCallsException_if_no_calls_found($object, $method, $arguments) - { - $method->getObjectProphecy()->willReturn($object); - $method->getMethodName()->willReturn('getName'); - $method->getArgumentsWildcard()->willReturn($arguments); - $arguments->__toString()->willReturn('123'); - $object->reveal()->willReturn(new \stdClass()); - $object->findProphecyMethodCalls('getName', Argument::any())->willReturn(array()); - - $this->shouldThrow('Prophecy\Exception\Prediction\NoCallsException') - ->duringCheck(array(), $object, $method); - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Prediction/CallTimesPredictionSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Prediction/CallTimesPredictionSpec.php deleted file mode 100644 index c6708927f..000000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Prediction/CallTimesPredictionSpec.php +++ /dev/null @@ -1,54 +0,0 @@ -beConstructedWith(2); - } - - function it_is_prediction() - { - $this->shouldHaveType('Prophecy\Prediction\PredictionInterface'); - } - - /** - * @param \Prophecy\Prophecy\ObjectProphecy $object - * @param \Prophecy\Prophecy\MethodProphecy $method - * @param \Prophecy\Call\Call $call1 - * @param \Prophecy\Call\Call $call2 - */ - function it_does_nothing_if_there_were_exact_amount_of_calls_being_made( - $object, $method, $call1, $call2 - ) - { - $this->check(array($call1, $call2), $object, $method)->shouldReturn(null); - } - - /** - * @param \Prophecy\Prophecy\ObjectProphecy $object - * @param \Prophecy\Prophecy\MethodProphecy $method - * @param \Prophecy\Call\Call $call - * @param \Prophecy\Argument\ArgumentsWildcard $arguments - */ - function it_throws_UnexpectedCallsCountException_if_calls_found( - $object, $method, $call, $arguments - ) - { - $method->getObjectProphecy()->willReturn($object); - $method->getMethodName()->willReturn('getName'); - $method->getArgumentsWildcard()->willReturn($arguments); - $arguments->__toString()->willReturn('123'); - - $call->getMethodName()->willReturn('getName'); - $call->getArguments()->willReturn(array(5, 4, 'three')); - $call->getCallPlace()->willReturn('unknown'); - - $this->shouldThrow('Prophecy\Exception\Prediction\UnexpectedCallsCountException') - ->duringCheck(array($call), $object, $method); - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Prediction/CallbackPredictionSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Prediction/CallbackPredictionSpec.php deleted file mode 100644 index 7fe475ef1..000000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Prediction/CallbackPredictionSpec.php +++ /dev/null @@ -1,36 +0,0 @@ -beConstructedWith('get_class'); - } - - function it_is_prediction() - { - $this->shouldHaveType('Prophecy\Prediction\PredictionInterface'); - } - - /** - * @param \Prophecy\Prophecy\ObjectProphecy $object - * @param \Prophecy\Prophecy\MethodProphecy $method - * @param \Prophecy\Call\Call $call - */ - function it_proxies_call_to_callback($object, $method, $call) - { - $returnFirstCallCallback = function ($calls, $object, $method) { - throw new RuntimeException; - }; - - $this->beConstructedWith($returnFirstCallCallback); - - $this->shouldThrow('RuntimeException')->duringCheck(array($call), $object, $method); - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Prediction/NoCallsPredictionSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Prediction/NoCallsPredictionSpec.php deleted file mode 100644 index a3ef9bcb3..000000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Prediction/NoCallsPredictionSpec.php +++ /dev/null @@ -1,43 +0,0 @@ -shouldHaveType('Prophecy\Prediction\PredictionInterface'); - } - - /** - * @param \Prophecy\Prophecy\ObjectProphecy $object - * @param \Prophecy\Prophecy\MethodProphecy $method - */ - function it_does_nothing_if_there_is_no_calls_made($object, $method) - { - $this->check(array(), $object, $method)->shouldReturn(null); - } - - /** - * @param \Prophecy\Prophecy\ObjectProphecy $object - * @param \Prophecy\Prophecy\MethodProphecy $method - * @param \Prophecy\Call\Call $call - * @param \Prophecy\Argument\ArgumentsWildcard $arguments - */ - function it_throws_UnexpectedCallsException_if_calls_found($object, $method, $call, $arguments) - { - $method->getObjectProphecy()->willReturn($object); - $method->getMethodName()->willReturn('getName'); - $method->getArgumentsWildcard()->willReturn($arguments); - $arguments->__toString()->willReturn('123'); - - $call->getMethodName()->willReturn('getName'); - $call->getArguments()->willReturn(array(5, 4, 'three')); - $call->getCallPlace()->willReturn('unknown'); - - $this->shouldThrow('Prophecy\Exception\Prediction\UnexpectedCallsException') - ->duringCheck(array($call), $object, $method); - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Promise/CallbackPromiseSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Promise/CallbackPromiseSpec.php deleted file mode 100644 index 5d99b1b1c..000000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Promise/CallbackPromiseSpec.php +++ /dev/null @@ -1,110 +0,0 @@ -beConstructedWith('get_class'); - } - - function it_is_promise() - { - $this->shouldBeAnInstanceOf('Prophecy\Promise\PromiseInterface'); - } - - /** - * @param \Prophecy\Prophecy\ObjectProphecy $object - * @param \Prophecy\Prophecy\MethodProphecy $method - */ - function it_should_execute_closure_callback($object, $method) - { - $firstArgumentCallback = function ($args) { - return $args[0]; - }; - - $this->beConstructedWith($firstArgumentCallback); - - $this->execute(array('one', 'two'), $object, $method)->shouldReturn('one'); - } - - /** - * @param \Prophecy\Prophecy\ObjectProphecy $object - * @param \Prophecy\Prophecy\MethodProphecy $method - */ - function it_should_execute_static_array_callback($object, $method) - { - $firstArgumentCallback = array('spec\Prophecy\Promise\ClassCallback', 'staticCallbackMethod'); - - $this->beConstructedWith($firstArgumentCallback); - - $this->execute(array('one', 'two'), $object, $method)->shouldReturn('one'); - } - - /** - * @param \Prophecy\Prophecy\ObjectProphecy $object - * @param \Prophecy\Prophecy\MethodProphecy $method - */ - function it_should_execute_instance_array_callback($object, $method) - { - $class = new ClassCallback(); - $firstArgumentCallback = array($class, 'callbackMethod'); - - $this->beConstructedWith($firstArgumentCallback); - - $this->execute(array('one', 'two'), $object, $method)->shouldReturn('one'); - } - - /** - * @param \Prophecy\Prophecy\ObjectProphecy $object - * @param \Prophecy\Prophecy\MethodProphecy $method - */ - function it_should_execute_string_function_callback($object, $method) - { - $firstArgumentCallback = 'spec\Prophecy\Promise\functionCallbackFirstArgument'; - - $this->beConstructedWith($firstArgumentCallback); - - $this->execute(array('one', 'two'), $object, $method)->shouldReturn('one'); - } - -} - -/** - * Class used to test callbackpromise - * - * @param array - * @return string - */ -class ClassCallback -{ - /** - * @param array $args - */ - function callbackMethod($args) - { - return $args[0]; - } - - /** - * @param array $args - */ - static function staticCallbackMethod($args) - { - return $args[0]; - } -} - -/** - * Callback function used to test callbackpromise - * - * @param array - * @return string - */ -function functionCallbackFirstArgument($args) -{ - return $args[0]; -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Promise/ReturnArgumentPromiseSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Promise/ReturnArgumentPromiseSpec.php deleted file mode 100644 index 4acb7bb0a..000000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Promise/ReturnArgumentPromiseSpec.php +++ /dev/null @@ -1,41 +0,0 @@ -shouldBeAnInstanceOf('Prophecy\Promise\PromiseInterface'); - } - - /** - * @param \Prophecy\Prophecy\ObjectProphecy $object - * @param \Prophecy\Prophecy\MethodProphecy $method - */ - function it_should_return_first_argument_if_provided($object, $method) - { - $this->execute(array('one', 'two'), $object, $method)->shouldReturn('one'); - } - - /** - * @param \Prophecy\Prophecy\ObjectProphecy $object - * @param \Prophecy\Prophecy\MethodProphecy $method - */ - function it_should_return_null_if_no_arguments_provided($object, $method) - { - $this->execute(array(), $object, $method)->shouldReturn(null); - } - - /** - * @param \Prophecy\Prophecy\ObjectProphecy $object - * @param \Prophecy\Prophecy\MethodProphecy $method - */ - function it_should_return_nth_argument_if_provided($object, $method) - { - $this->beConstructedWith(1); - $this->execute(array('one', 'two'), $object, $method)->shouldReturn('two'); - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Promise/ReturnPromiseSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Promise/ReturnPromiseSpec.php deleted file mode 100644 index 18bfd87aa..000000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Promise/ReturnPromiseSpec.php +++ /dev/null @@ -1,61 +0,0 @@ -beConstructedWith(array(42)); - } - - function it_is_promise() - { - $this->shouldBeAnInstanceOf('Prophecy\Promise\PromiseInterface'); - } - - /** - * @param \Prophecy\Prophecy\ObjectProphecy $object - * @param \Prophecy\Prophecy\MethodProphecy $method - */ - function it_returns_value_it_was_constructed_with($object, $method) - { - $this->execute(array(), $object, $method)->shouldReturn(42); - } - - /** - * @param \Prophecy\Prophecy\ObjectProphecy $object - * @param \Prophecy\Prophecy\MethodProphecy $method - */ - function it_always_returns_last_value_left_in_the_return_values($object, $method) - { - $this->execute(array(), $object, $method)->shouldReturn(42); - $this->execute(array(), $object, $method)->shouldReturn(42); - } - - /** - * @param \Prophecy\Prophecy\ObjectProphecy $object - * @param \Prophecy\Prophecy\MethodProphecy $method - */ - function it_consequently_returns_multiple_values_it_was_constructed_with($object, $method) - { - $this->beConstructedWith(array(42, 24, 12)); - - $this->execute(array(), $object, $method)->shouldReturn(42); - $this->execute(array(), $object, $method)->shouldReturn(24); - $this->execute(array(), $object, $method)->shouldReturn(12); - } - - /** - * @param \Prophecy\Prophecy\ObjectProphecy $object - * @param \Prophecy\Prophecy\MethodProphecy $method - */ - function it_returns_null_if_constructed_with_empty_array($object, $method) - { - $this->beConstructedWith(array()); - - $this->execute(array(), $object, $method)->shouldReturn(null); - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Promise/ThrowPromiseSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Promise/ThrowPromiseSpec.php deleted file mode 100644 index 5f448979a..000000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Promise/ThrowPromiseSpec.php +++ /dev/null @@ -1,58 +0,0 @@ -beConstructedWith('RuntimeException'); - } - - function it_is_promise() - { - $this->shouldBeAnInstanceOf('Prophecy\Promise\PromiseInterface'); - } - - /** - * @param \Prophecy\Prophecy\ObjectProphecy $object - * @param \Prophecy\Prophecy\MethodProphecy $method - */ - function it_instantiates_and_throws_exception_from_provided_classname($object, $method) - { - $this->beConstructedWith('InvalidArgumentException'); - - $this->shouldThrow('InvalidArgumentException') - ->duringExecute(array(), $object, $method); - } - - /** - * @param \Prophecy\Prophecy\ObjectProphecy $object - * @param \Prophecy\Prophecy\MethodProphecy $method - */ - function it_instantiates_exceptions_with_required_arguments($object, $method) - { - $this->beConstructedWith('spec\Prophecy\Promise\RequiredArgumentException'); - - $this->shouldThrow('spec\Prophecy\Promise\RequiredArgumentException') - ->duringExecute(array(), $object, $method); - } - - /** - * @param \Prophecy\Prophecy\ObjectProphecy $object - * @param \Prophecy\Prophecy\MethodProphecy $method - */ - function it_throws_provided_exception($object, $method) - { - $this->beConstructedWith($exc = new \RuntimeException('Some exception')); - - $this->shouldThrow($exc)->duringExecute(array(), $object, $method); - } -} - -class RequiredArgumentException extends \Exception -{ - final public function __construct($message, $code) {} -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Prophecy/MethodProphecySpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Prophecy/MethodProphecySpec.php deleted file mode 100644 index 41ee8cde6..000000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Prophecy/MethodProphecySpec.php +++ /dev/null @@ -1,384 +0,0 @@ -reveal()->willReturn($reflection); - - $this->beConstructedWith($objectProphecy, 'getName', null); - } - - function it_is_initializable() - { - $this->shouldHaveType('Prophecy\Prophecy\MethodProphecy'); - } - - function its_constructor_throws_MethodNotFoundException_for_unexisting_method($objectProphecy) - { - $this->shouldThrow('Prophecy\Exception\Doubler\MethodNotFoundException')->during( - '__construct', array($objectProphecy, 'getUnexisting', null) - ); - } - - /** - * @param ClassWithFinalMethod $subject - */ - function its_constructor_throws_MethodProphecyException_for_final_methods($objectProphecy, $subject) - { - $objectProphecy->reveal()->willReturn($subject); - - $this->shouldThrow('Prophecy\Exception\Prophecy\MethodProphecyException')->during( - '__construct', array($objectProphecy, 'finalMethod', null) - ); - } - - function its_constructor_transforms_array_passed_as_3rd_argument_to_ArgumentsWildcard( - $objectProphecy - ) - { - $this->beConstructedWith($objectProphecy, 'getName', array(42, 33)); - - $wildcard = $this->getArgumentsWildcard(); - $wildcard->shouldNotBe(null); - $wildcard->__toString()->shouldReturn('exact(42), exact(33)'); - } - - function its_constructor_does_not_touch_third_argument_if_it_is_null($objectProphecy) - { - $this->beConstructedWith($objectProphecy, 'getName', null); - - $wildcard = $this->getArgumentsWildcard(); - $wildcard->shouldBe(null); - } - - /** - * @param \Prophecy\Promise\PromiseInterface $promise - */ - function it_records_promise_through_will_method($promise, $objectProphecy) - { - $objectProphecy->addMethodProphecy($this)->willReturn(null); - - $this->will($promise); - $this->getPromise()->shouldReturn($promise); - } - - /** - * @param \Prophecy\Promise\PromiseInterface $promise - */ - function it_adds_itself_to_ObjectProphecy_during_call_to_will($objectProphecy, $promise) - { - $objectProphecy->addMethodProphecy($this)->shouldBeCalled(); - - $this->will($promise); - } - - function it_adds_ReturnPromise_during_willReturn_call($objectProphecy) - { - $objectProphecy->addMethodProphecy($this)->willReturn(null); - - $this->willReturn(42); - $this->getPromise()->shouldBeAnInstanceOf('Prophecy\Promise\ReturnPromise'); - } - - function it_adds_ThrowPromise_during_willThrow_call($objectProphecy) - { - $objectProphecy->addMethodProphecy($this)->willReturn(null); - - $this->willThrow('RuntimeException'); - $this->getPromise()->shouldBeAnInstanceOf('Prophecy\Promise\ThrowPromise'); - } - - function it_adds_ReturnArgumentPromise_during_willReturnArgument_call($objectProphecy) - { - $objectProphecy->addMethodProphecy($this)->willReturn(null); - - $this->willReturnArgument(); - $this->getPromise()->shouldBeAnInstanceOf('Prophecy\Promise\ReturnArgumentPromise'); - } - - function it_adds_ReturnArgumentPromise_during_willReturnArgument_call_with_index_argument($objectProphecy) - { - $objectProphecy->addMethodProphecy($this)->willReturn(null); - - $this->willReturnArgument(1); - $promise = $this->getPromise(); - $promise->shouldBeAnInstanceOf('Prophecy\Promise\ReturnArgumentPromise'); - $promise->execute(array('one', 'two'), $objectProphecy, $this)->shouldReturn('two'); - } - - function it_adds_CallbackPromise_during_will_call_with_callback_argument($objectProphecy) - { - $objectProphecy->addMethodProphecy($this)->willReturn(null); - - $callback = function () {}; - - $this->will($callback); - $this->getPromise()->shouldBeAnInstanceOf('Prophecy\Promise\CallbackPromise'); - } - - /** - * @param \Prophecy\Prediction\PredictionInterface $prediction - */ - function it_records_prediction_through_should_method($prediction, $objectProphecy) - { - $objectProphecy->addMethodProphecy($this)->willReturn(null); - - $this->callOnWrappedObject('should', array($prediction)); - $this->getPrediction()->shouldReturn($prediction); - } - - function it_adds_CallbackPrediction_during_should_call_with_callback_argument($objectProphecy) - { - $objectProphecy->addMethodProphecy($this)->willReturn(null); - - $callback = function () {}; - - $this->callOnWrappedObject('should', array($callback)); - $this->getPrediction()->shouldBeAnInstanceOf('Prophecy\Prediction\CallbackPrediction'); - } - - /** - * @param \Prophecy\Prediction\PredictionInterface $prediction - */ - function it_adds_itself_to_ObjectProphecy_during_call_to_should($objectProphecy, $prediction) - { - $objectProphecy->addMethodProphecy($this)->shouldBeCalled(); - - $this->callOnWrappedObject('should', array($prediction)); - } - - function it_adds_CallPrediction_during_shouldBeCalled_call($objectProphecy) - { - $objectProphecy->addMethodProphecy($this)->willReturn(null); - - $this->callOnWrappedObject('shouldBeCalled', array()); - $this->getPrediction()->shouldBeAnInstanceOf('Prophecy\Prediction\CallPrediction'); - } - - function it_adds_NoCallsPrediction_during_shouldNotBeCalled_call($objectProphecy) - { - $objectProphecy->addMethodProphecy($this)->willReturn(null); - - $this->callOnWrappedObject('shouldNotBeCalled', array()); - $this->getPrediction()->shouldBeAnInstanceOf('Prophecy\Prediction\NoCallsPrediction'); - } - - function it_adds_CallTimesPrediction_during_shouldBeCalledTimes_call($objectProphecy) - { - $objectProphecy->addMethodProphecy($this)->willReturn(null); - - $this->callOnWrappedObject('shouldBeCalledTimes', array(5)); - $this->getPrediction()->shouldBeAnInstanceOf('Prophecy\Prediction\CallTimesPrediction'); - } - - /** - * @param \Prophecy\Argument\ArgumentsWildcard $arguments - * @param \Prophecy\Prediction\PredictionInterface $prediction - * @param \Prophecy\Call\Call $call1 - * @param \Prophecy\Call\Call $call2 - */ - function it_checks_prediction_via_shouldHave_method_call( - $objectProphecy, $arguments, $prediction, $call1, $call2 - ) - { - $objectProphecy->addMethodProphecy($this)->willReturn(null); - $prediction->check(array($call1, $call2), $objectProphecy->getWrappedObject(), $this)->shouldBeCalled(); - $objectProphecy->findProphecyMethodCalls('getName', $arguments)->willReturn(array($call1, $call2)); - - $this->withArguments($arguments); - $this->callOnWrappedObject('shouldHave', array($prediction)); - } - - /** - * @param \Prophecy\Argument\ArgumentsWildcard $arguments - * @param \Prophecy\Prediction\PredictionInterface $prediction - * @param \Prophecy\Call\Call $call1 - * @param \Prophecy\Call\Call $call2 - */ - function it_sets_return_promise_during_shouldHave_call_if_none_was_set_before( - $objectProphecy, $arguments, $prediction, $call1, $call2 - ) - { - $objectProphecy->addMethodProphecy($this)->willReturn(null); - $prediction->check(array($call1, $call2), $objectProphecy->getWrappedObject(), $this)->shouldBeCalled(); - $objectProphecy->findProphecyMethodCalls('getName', $arguments)->willReturn(array($call1, $call2)); - - $this->withArguments($arguments); - $this->callOnWrappedObject('shouldHave', array($prediction)); - - $this->getPromise()->shouldReturnAnInstanceOf('Prophecy\Promise\ReturnPromise'); - } - - /** - * @param \Prophecy\Argument\ArgumentsWildcard $arguments - * @param \Prophecy\Prediction\PredictionInterface $prediction - * @param \Prophecy\Call\Call $call1 - * @param \Prophecy\Call\Call $call2 - * @param \Prophecy\Promise\PromiseInterface $promise - */ - function it_does_not_set_return_promise_during_shouldHave_call_if_it_was_set_before( - $objectProphecy, $arguments, $prediction, $call1, $call2, $promise - ) - { - $objectProphecy->addMethodProphecy($this)->willReturn(null); - $prediction->check(array($call1, $call2), $objectProphecy->getWrappedObject(), $this)->shouldBeCalled(); - $objectProphecy->findProphecyMethodCalls('getName', $arguments)->willReturn(array($call1, $call2)); - - $this->will($promise); - $this->withArguments($arguments); - $this->callOnWrappedObject('shouldHave', array($prediction)); - - $this->getPromise()->shouldReturn($promise); - } - - /** - * @param \Prophecy\Argument\ArgumentsWildcard $arguments - * @param \Prophecy\Prediction\PredictionInterface $prediction1 - * @param \Prophecy\Prediction\PredictionInterface $prediction2 - * @param \Prophecy\Call\Call $call1 - * @param \Prophecy\Call\Call $call2 - * @param \Prophecy\Promise\PromiseInterface $promise - */ - function it_records_checked_predictions( - $objectProphecy, $arguments, $prediction1, $prediction2, $call1, $call2, $promise - ) - { - $objectProphecy->addMethodProphecy($this)->willReturn(null); - $prediction1->check(array($call1, $call2), $objectProphecy->getWrappedObject(), $this)->willReturn(); - $prediction2->check(array($call1, $call2), $objectProphecy->getWrappedObject(), $this)->willReturn(); - $objectProphecy->findProphecyMethodCalls('getName', $arguments)->willReturn(array($call1, $call2)); - - $this->will($promise); - $this->withArguments($arguments); - $this->callOnWrappedObject('shouldHave', array($prediction1)); - $this->callOnWrappedObject('shouldHave', array($prediction2)); - - $this->getCheckedPredictions()->shouldReturn(array($prediction1, $prediction2)); - } - - /** - * @param \Prophecy\Argument\ArgumentsWildcard $arguments - * @param \Prophecy\Prediction\PredictionInterface $prediction - * @param \Prophecy\Call\Call $call1 - * @param \Prophecy\Call\Call $call2 - * @param \Prophecy\Promise\PromiseInterface $promise - */ - function it_records_even_failed_checked_predictions( - $objectProphecy, $arguments, $prediction, $call1, $call2, $promise - ) - { - $objectProphecy->addMethodProphecy($this)->willReturn(null); - $prediction->check(array($call1, $call2), $objectProphecy->getWrappedObject(), $this)->willThrow(new \RuntimeException()); - $objectProphecy->findProphecyMethodCalls('getName', $arguments)->willReturn(array($call1, $call2)); - - $this->will($promise); - $this->withArguments($arguments); - - try { - $this->callOnWrappedObject('shouldHave', array($prediction)); - } catch (\Exception $e) {} - - $this->getCheckedPredictions()->shouldReturn(array($prediction)); - } - - /** - * @param \Prophecy\Argument\ArgumentsWildcard $arguments - * @param \Prophecy\Prediction\PredictionInterface $prediction - * @param \Prophecy\Call\Call $call1 - * @param \Prophecy\Call\Call $call2 - */ - function it_checks_prediction_via_shouldHave_method_call_with_callback( - $objectProphecy, $arguments, $prediction, $call1, $call2 - ) - { - $callback = function ($calls, $object, $method) { - throw new \RuntimeException; - }; - $objectProphecy->findProphecyMethodCalls('getName', $arguments)->willReturn(array($call1, $call2)); - - $this->withArguments($arguments); - $this->shouldThrow('RuntimeException')->duringShouldHave($callback); - } - - function it_does_nothing_during_checkPrediction_if_no_prediction_set() - { - $this->checkPrediction()->shouldReturn(null); - } - - /** - * @param \Prophecy\Argument\ArgumentsWildcard $arguments - * @param \Prophecy\Prediction\PredictionInterface $prediction - * @param \Prophecy\Call\Call $call1 - * @param \Prophecy\Call\Call $call2 - */ - function it_checks_set_prediction_during_checkPrediction( - $objectProphecy, $arguments, $prediction, $call1, $call2 - ) - { - $prediction->check(array($call1, $call2), $objectProphecy->getWrappedObject(), $this)->shouldBeCalled(); - $objectProphecy->findProphecyMethodCalls('getName', $arguments)->willReturn(array($call1, $call2)); - $objectProphecy->addMethodProphecy($this)->willReturn(null); - - $this->withArguments($arguments); - $this->callOnWrappedObject('should', array($prediction)); - $this->checkPrediction(); - } - - function it_links_back_to_ObjectProphecy_through_getter($objectProphecy) - { - $this->getObjectProphecy()->shouldReturn($objectProphecy); - } - - function it_has_MethodName() - { - $this->getMethodName()->shouldReturn('getName'); - } - - /** - * @param \Prophecy\Argument\ArgumentsWildcard $wildcard - */ - function it_contains_ArgumentsWildcard_it_was_constructed_with($objectProphecy, $wildcard) - { - $this->beConstructedWith($objectProphecy, 'getName', $wildcard); - - $this->getArgumentsWildcard()->shouldReturn($wildcard); - } - - /** - * @param \Prophecy\Argument\ArgumentsWildcard $wildcard - */ - function its_ArgumentWildcard_is_mutable_through_setter($wildcard) - { - $this->withArguments($wildcard); - - $this->getArgumentsWildcard()->shouldReturn($wildcard); - } - - function its_withArguments_transforms_passed_array_into_ArgumentsWildcard() - { - $this->withArguments(array(42, 33)); - - $wildcard = $this->getArgumentsWildcard(); - $wildcard->shouldNotBe(null); - $wildcard->__toString()->shouldReturn('exact(42), exact(33)'); - } - - function its_withArguments_throws_exception_if_wrong_arguments_provided() - { - $this->shouldThrow('Prophecy\Exception\InvalidArgumentException')->duringWithArguments(42); - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Prophecy/ObjectProphecySpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Prophecy/ObjectProphecySpec.php deleted file mode 100644 index 7e249d9be..000000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Prophecy/ObjectProphecySpec.php +++ /dev/null @@ -1,319 +0,0 @@ -beConstructedWith($lazyDouble); - - $lazyDouble->getInstance()->willReturn($double); - } - - function it_implements_ProphecyInterface() - { - $this->shouldBeAnInstanceOf('Prophecy\Prophecy\ProphecyInterface'); - } - - function it_sets_parentClass_during_willExtend_call($lazyDouble) - { - $lazyDouble->setParentClass('123')->shouldBeCalled(); - - $this->willExtend('123'); - } - - function it_adds_interface_during_willImplement_call($lazyDouble) - { - $lazyDouble->addInterface('222')->shouldBeCalled(); - - $this->willImplement('222'); - } - - function it_sets_constructor_arguments_during_willBeConstructedWith_call($lazyDouble) - { - $lazyDouble->setArguments(array(1, 2, 5))->shouldBeCalled(); - - $this->willBeConstructedWith(array(1, 2, 5)); - } - - function it_does_not_have_method_prophecies_by_default() - { - $this->getMethodProphecies()->shouldHaveCount(0); - } - - /** - * @param \Prophecy\Prophecy\MethodProphecy $method1 - * @param \Prophecy\Prophecy\MethodProphecy $method2 - * @param \Prophecy\Argument\ArgumentsWildcard $arguments - */ - function it_should_get_method_prophecies_by_method_name($method1, $method2, $arguments) - { - $method1->getMethodName()->willReturn('getName'); - $method1->getArgumentsWildcard()->willReturn($arguments); - $method2->getMethodName()->willReturn('setName'); - $method2->getArgumentsWildcard()->willReturn($arguments); - - $this->addMethodProphecy($method1); - $this->addMethodProphecy($method2); - - $methods = $this->getMethodProphecies('setName'); - $methods->shouldHaveCount(1); - $methods[0]->getMethodName()->shouldReturn('setName'); - } - - function it_should_return_empty_array_if_no_method_prophecies_found() - { - $methods = $this->getMethodProphecies('setName'); - $methods->shouldHaveCount(0); - } - - /** - * @param \Prophecy\Call\CallCenter $callCenter - */ - function it_should_proxy_makeProphecyMethodCall_to_CallCenter($lazyDouble, $callCenter) - { - $this->beConstructedWith($lazyDouble, $callCenter); - - $callCenter->makeCall($this->getWrappedObject(), 'setName', array('everzet'))->willReturn(42); - - $this->makeProphecyMethodCall('setName', array('everzet'))->shouldReturn(42); - } - - /** - * @param \Prophecy\Call\CallCenter $callCenter - * @param \Prophecy\Prophecy\RevealerInterface $revealer - */ - function it_should_reveal_arguments_and_return_values_from_callCenter( - $lazyDouble, $callCenter, $revealer - ) - { - $this->beConstructedWith($lazyDouble, $callCenter, $revealer); - - $revealer->reveal(array('question'))->willReturn(array('life')); - $revealer->reveal('answer')->willReturn(42); - - $callCenter->makeCall($this->getWrappedObject(), 'setName', array('life'))->willReturn('answer'); - - $this->makeProphecyMethodCall('setName', array('question'))->shouldReturn(42); - } - - /** - * @param \Prophecy\Call\CallCenter $callCenter - * @param \Prophecy\Argument\ArgumentsWildcard $wildcard - * @param \Prophecy\Call\Call $call - */ - function it_should_proxy_getProphecyMethodCalls_to_CallCenter( - $lazyDouble, $callCenter, $wildcard, $call - ) - { - $this->beConstructedWith($lazyDouble, $callCenter); - - $callCenter->findCalls('setName', $wildcard)->willReturn(array($call)); - - $this->findProphecyMethodCalls('setName', $wildcard)->shouldReturn(array($call)); - } - - /** - * @param \Prophecy\Prophecy\MethodProphecy $methodProphecy - * @param \Prophecy\Argument\ArgumentsWildcard $argumentsWildcard - */ - function its_addMethodProphecy_adds_method_prophecy( - $methodProphecy, $argumentsWildcard - ) - { - $methodProphecy->getArgumentsWildcard()->willReturn($argumentsWildcard); - $methodProphecy->getMethodName()->willReturn('getUsername'); - - $this->addMethodProphecy($methodProphecy); - - $this->getMethodProphecies()->shouldReturn(array( - 'getUsername' => array($methodProphecy) - )); - } - - /** - * @param \Prophecy\Prophecy\MethodProphecy $methodProphecy1 - * @param \Prophecy\Prophecy\MethodProphecy $methodProphecy2 - * @param \Prophecy\Argument\ArgumentsWildcard $argumentsWildcard1 - * @param \Prophecy\Argument\ArgumentsWildcard $argumentsWildcard2 - */ - function its_addMethodProphecy_handles_prophecies_with_different_arguments( - $methodProphecy1, $methodProphecy2, $argumentsWildcard1, $argumentsWildcard2 - ) - { - $methodProphecy1->getArgumentsWildcard()->willReturn($argumentsWildcard1); - $methodProphecy1->getMethodName()->willReturn('getUsername'); - - $methodProphecy2->getArgumentsWildcard()->willReturn($argumentsWildcard2); - $methodProphecy2->getMethodName()->willReturn('getUsername'); - - $this->addMethodProphecy($methodProphecy1); - $this->addMethodProphecy($methodProphecy2); - - $this->getMethodProphecies()->shouldReturn(array( - 'getUsername' => array( - $methodProphecy1, - $methodProphecy2, - ) - )); - } - - /** - * @param \Prophecy\Prophecy\MethodProphecy $methodProphecy1 - * @param \Prophecy\Prophecy\MethodProphecy $methodProphecy2 - * @param \Prophecy\Argument\ArgumentsWildcard $argumentsWildcard1 - * @param \Prophecy\Argument\ArgumentsWildcard $argumentsWildcard2 - */ - function its_addMethodProphecy_handles_prophecies_for_different_methods( - $methodProphecy1, $methodProphecy2, $argumentsWildcard1, $argumentsWildcard2 - ) - { - $methodProphecy1->getArgumentsWildcard()->willReturn($argumentsWildcard1); - $methodProphecy1->getMethodName()->willReturn('getUsername'); - - $methodProphecy2->getArgumentsWildcard()->willReturn($argumentsWildcard2); - $methodProphecy2->getMethodName()->willReturn('isUsername'); - - $this->addMethodProphecy($methodProphecy1); - $this->addMethodProphecy($methodProphecy2); - - $this->getMethodProphecies()->shouldReturn(array( - 'getUsername' => array( - $methodProphecy1 - ), - 'isUsername' => array( - $methodProphecy2 - ) - )); - } - - /** - * @param \Prophecy\Prophecy\MethodProphecy $methodProphecy - */ - function its_addMethodProphecy_throws_exception_when_method_has_no_ArgumentsWildcard( - $methodProphecy - ) - { - $methodProphecy->getArgumentsWildcard()->willReturn(null); - $methodProphecy->getObjectProphecy()->willReturn($this); - $methodProphecy->getMethodName()->willReturn('getTitle'); - - $this->shouldThrow('Prophecy\Exception\Prophecy\MethodProphecyException')->duringAddMethodProphecy( - $methodProphecy - ); - } - - function it_returns_null_after_checkPredictions_call_if_there_is_no_method_prophecies() - { - $this->checkProphecyMethodsPredictions()->shouldReturn(null); - } - - /** - * @param \Prophecy\Prophecy\MethodProphecy $methodProphecy1 - * @param \Prophecy\Prophecy\MethodProphecy $methodProphecy2 - * @param \Prophecy\Argument\ArgumentsWildcard $argumentsWildcard1 - * @param \Prophecy\Argument\ArgumentsWildcard $argumentsWildcard2 - */ - function it_throws_AggregateException_during_checkPredictions_if_predictions_fail( - $methodProphecy1, $methodProphecy2, $argumentsWildcard1, $argumentsWildcard2 - ) - { - $methodProphecy1->getMethodName()->willReturn('getName'); - $methodProphecy1->getArgumentsWildcard()->willReturn($argumentsWildcard1); - $methodProphecy1->checkPrediction() - ->willThrow('Prophecy\Exception\Prediction\AggregateException'); - - $methodProphecy2->getMethodName()->willReturn('setName'); - $methodProphecy2->getArgumentsWildcard()->willReturn($argumentsWildcard2); - $methodProphecy2->checkPrediction() - ->willThrow('Prophecy\Exception\Prediction\AggregateException'); - - $this->addMethodProphecy($methodProphecy1); - $this->addMethodProphecy($methodProphecy2); - - $this->shouldThrow('Prophecy\Exception\Prediction\AggregateException') - ->duringCheckProphecyMethodsPredictions(); - } - - /** - * @param \Prophecy\Doubler\Doubler $doubler - * @param \Prophecy\Prophecy\ProphecySubjectInterface $reflection - */ - function it_returns_new_MethodProphecy_instance_for_arbitrary_call($doubler, $reflection) - { - $doubler->double(Argument::any())->willReturn($reflection); - - $return = $this->getProphecy(); - $return->shouldBeAnInstanceOf('Prophecy\Prophecy\MethodProphecy'); - $return->getMethodName()->shouldReturn('getProphecy'); - } - - /** - * @param \Prophecy\Doubler\Doubler $doubler - * @param \Prophecy\Prophecy\ProphecySubjectInterface $reflection - */ - function it_returns_same_MethodProphecy_for_same_registered_signature($doubler, $reflection) - { - $doubler->double(Argument::any())->willReturn($reflection); - - $this->addMethodProphecy($methodProphecy1 = $this->getProphecy(1, 2, 3)); - $methodProphecy2 = $this->getProphecy(1, 2, 3); - - $methodProphecy2->shouldBe($methodProphecy1); - } - - /** - * @param \Prophecy\Doubler\Doubler $doubler - * @param \Prophecy\Prophecy\ProphecySubjectInterface $reflection - */ - function it_returns_new_MethodProphecy_for_different_signatures($doubler, $reflection) - { - $doubler->double(Argument::any())->willReturn($reflection); - - $value = new ObjectProphecySpecFixtureB('ABC'); - $value2 = new ObjectProphecySpecFixtureB('CBA'); - - $this->addMethodProphecy($methodProphecy1 = $this->getProphecy(1, 2, 3, $value)); - $methodProphecy2 = $this->getProphecy(1, 2, 3, $value2); - - $methodProphecy2->shouldNotBe($methodProphecy1); - } - - /** - * @param \Prophecy\Doubler\Doubler $doubler - * @param \Prophecy\Prophecy\ProphecySubjectInterface $reflection - */ - function it_returns_new_MethodProphecy_for_all_callback_signatures($doubler, $reflection) - { - $doubler->double(Argument::any())->willReturn($reflection); - - $this->addMethodProphecy($methodProphecy1 = $this->getProphecy(function(){})); - $methodProphecy2 = $this->getProphecy(function(){}); - - $methodProphecy2->shouldNotBe($methodProphecy1); - } -} - -class ObjectProphecySpecFixtureA -{ - public $errors; -} - -class ObjectProphecySpecFixtureB extends ObjectProphecySpecFixtureA -{ - public $errors; - public $value = null; - - public function __construct($value) - { - $this->value = $value; - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Prophecy/RevealerSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Prophecy/RevealerSpec.php deleted file mode 100644 index 4d83d7396..000000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Prophecy/RevealerSpec.php +++ /dev/null @@ -1,51 +0,0 @@ -shouldBeAnInstanceOf('Prophecy\Prophecy\RevealerInterface'); - } - - /** - * @param \Prophecy\Prophecy\ProphecyInterface $prophecy - * @param \stdClass $object - */ - function it_reveals_single_instance_of_ProphecyInterface($prophecy, $object) - { - $prophecy->reveal()->willReturn($object); - - $this->reveal($prophecy)->shouldReturn($object); - } - - /** - * @param \Prophecy\Prophecy\ProphecyInterface $prophecy1 - * @param \Prophecy\Prophecy\ProphecyInterface $prophecy2 - * @param \stdClass $object1 - * @param \stdClass $object2 - */ - function it_reveals_instances_of_ProphecyInterface_inside_array( - $prophecy1, $prophecy2, $object1, $object2 - ) - { - $prophecy1->reveal()->willReturn($object1); - $prophecy2->reveal()->willReturn($object2); - - $this->reveal(array( - array('item' => $prophecy2), - $prophecy1 - ))->shouldReturn(array( - array('item' => $object2), - $object1 - )); - } - - function it_does_not_touch_non_prophecy_interface() - { - $this->reveal(42)->shouldReturn(42); - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/ProphetSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/ProphetSpec.php deleted file mode 100644 index 74d5976a6..000000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/ProphetSpec.php +++ /dev/null @@ -1,91 +0,0 @@ -double(null, array())->willReturn($double); - - $this->beConstructedWith($doubler); - } - - function it_constructs_new_prophecy_on_prophesize_call() - { - $prophecy = $this->prophesize(); - $prophecy->shouldBeAnInstanceOf('Prophecy\Prophecy\ObjectProphecy'); - } - - /** - * @param \Prophecy\Prophecy\ProphecySubjectInterface $newDouble - */ - function it_constructs_new_prophecy_with_parent_class_if_specified($doubler, $newDouble) - { - $doubler->double(Argument::any(), array())->willReturn($newDouble); - - $this->prophesize('Prophecy\Prophet')->reveal()->shouldReturn($newDouble); - } - - /** - * @param \Prophecy\Prophecy\ProphecySubjectInterface $newDouble - */ - function it_constructs_new_prophecy_with_interface_if_specified($doubler, $newDouble) - { - $doubler->double(null, Argument::any())->willReturn($newDouble); - - $this->prophesize('ArrayAccess')->reveal()->shouldReturn($newDouble); - } - - function it_exposes_all_created_prophecies_through_getter() - { - $prophecy1 = $this->prophesize(); - $prophecy2 = $this->prophesize(); - - $this->getProphecies()->shouldReturn(array($prophecy1, $prophecy2)); - } - - function it_does_nothing_during_checkPredictions_call_if_no_predictions_defined() - { - $this->checkPredictions()->shouldReturn(null); - } - - /** - * @param \Prophecy\Prophecy\MethodProphecy $method1 - * @param \Prophecy\Prophecy\MethodProphecy $method2 - * @param \Prophecy\Argument\ArgumentsWildcard $arguments1 - * @param \Prophecy\Argument\ArgumentsWildcard $arguments2 - */ - function it_throws_AggregateException_if_defined_predictions_fail( - $method1, $method2, $arguments1, $arguments2 - ) - { - $method1->getMethodName()->willReturn('getName'); - $method1->getArgumentsWildcard()->willReturn($arguments1); - $method1->checkPrediction()->willReturn(null); - - $method2->getMethodName()->willReturn('isSet'); - $method2->getArgumentsWildcard()->willReturn($arguments2); - $method2->checkPrediction()->willThrow( - 'Prophecy\Exception\Prediction\AggregateException' - ); - - $this->prophesize()->addMethodProphecy($method1); - $this->prophesize()->addMethodProphecy($method2); - - $this->shouldThrow('Prophecy\Exception\Prediction\AggregateException') - ->duringCheckPredictions(); - } - - function it_exposes_doubler_through_getter($doubler) - { - $this->getDoubler()->shouldReturn($doubler); - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Util/StringUtilSpec.php b/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Util/StringUtilSpec.php deleted file mode 100644 index a4eef59f9..000000000 --- a/lib/composer/vendor/phpspec/prophecy/spec/Prophecy/Util/StringUtilSpec.php +++ /dev/null @@ -1,97 +0,0 @@ -stringify(42)->shouldReturn('42'); - } - - function it_generates_proper_string_representation_for_string() - { - $this->stringify('some string')->shouldReturn('"some string"'); - } - - function it_generates_single_line_representation_for_multiline_string() - { - $this->stringify("some\nstring")->shouldReturn('"some\\nstring"'); - } - - function it_generates_proper_string_representation_for_double() - { - $this->stringify(42.3)->shouldReturn('42.3'); - } - - function it_generates_proper_string_representation_for_boolean_true() - { - $this->stringify(true)->shouldReturn('true'); - } - - function it_generates_proper_string_representation_for_boolean_false() - { - $this->stringify(false)->shouldReturn('false'); - } - - function it_generates_proper_string_representation_for_null() - { - $this->stringify(null)->shouldReturn('null'); - } - - function it_generates_proper_string_representation_for_empty_array() - { - $this->stringify(array())->shouldReturn('[]'); - } - - function it_generates_proper_string_representation_for_array() - { - $this->stringify(array('zet', 42))->shouldReturn('["zet", 42]'); - } - - function it_generates_proper_string_representation_for_hash_containing_one_value() - { - $this->stringify(array('ever' => 'zet'))->shouldReturn('["ever" => "zet"]'); - } - - function it_generates_proper_string_representation_for_hash() - { - $this->stringify(array('ever' => 'zet', 52 => 'hey', 'num' => 42))->shouldReturn( - '["ever" => "zet", 52 => "hey", "num" => 42]' - ); - } - - function it_generates_proper_string_representation_for_resource() - { - $resource = fopen(__FILE__, 'r'); - $this->stringify($resource)->shouldReturn('stream:'.$resource); - } - - /** - * @param \stdClass $object - */ - function it_generates_proper_string_representation_for_object($object) - { - $objHash = sprintf('%s:%s', - get_class($object->getWrappedObject()), - spl_object_hash($object->getWrappedObject()) - ) . " Object (\n 'objectProphecy' => Prophecy\Prophecy\ObjectProphecy Object (*Prophecy*)\n)"; - - $this->stringify($object)->shouldReturn("$objHash"); - } - - /** - * @param stdClass $object - */ - function it_generates_proper_string_representation_for_object_without_exporting($object) - { - $objHash = sprintf('%s:%s', - get_class($object->getWrappedObject()), - spl_object_hash($object->getWrappedObject()) - ); - - $this->stringify($object, false)->shouldReturn("$objHash"); - } -} diff --git a/lib/composer/vendor/phpspec/prophecy/src/Prophecy/Argument/Token/ObjectStateToken.php b/lib/composer/vendor/phpspec/prophecy/src/Prophecy/Argument/Token/ObjectStateToken.php index 8d93bfd6d..d77107767 100644 --- a/lib/composer/vendor/phpspec/prophecy/src/Prophecy/Argument/Token/ObjectStateToken.php +++ b/lib/composer/vendor/phpspec/prophecy/src/Prophecy/Argument/Token/ObjectStateToken.php @@ -61,11 +61,11 @@ public function scoreArgument($argument) $actual = call_user_func(array($argument, $this->name)); $comparator = $this->comparatorFactory->getComparatorFor( - $actual, $this->value + $this->value, $actual ); try { - $comparator->assertEquals($actual, $this->value); + $comparator->assertEquals($this->value, $actual); return 8; } catch (ComparisonFailure $failure) { return false; diff --git a/lib/composer/vendor/phpspec/prophecy/src/Prophecy/Call/CallCenter.php b/lib/composer/vendor/phpspec/prophecy/src/Prophecy/Call/CallCenter.php index a1f8c618d..53b80f058 100644 --- a/lib/composer/vendor/phpspec/prophecy/src/Prophecy/Call/CallCenter.php +++ b/lib/composer/vendor/phpspec/prophecy/src/Prophecy/Call/CallCenter.php @@ -11,6 +11,7 @@ namespace Prophecy\Call; +use Prophecy\Exception\Prophecy\MethodProphecyException; use Prophecy\Prophecy\MethodProphecy; use Prophecy\Prophecy\ObjectProphecy; use Prophecy\Argument\ArgumentsWildcard; @@ -96,16 +97,24 @@ public function makeCall(ObjectProphecy $prophecy, $methodName, array $arguments @usort($matches, function ($match1, $match2) { return $match2[0] - $match1[0]; }); // If Highest rated method prophecy has a promise - execute it or return null instead + $methodProphecy = $matches[0][1]; $returnValue = null; $exception = null; - if ($promise = $matches[0][1]->getPromise()) { + if ($promise = $methodProphecy->getPromise()) { try { - $returnValue = $promise->execute($arguments, $prophecy, $matches[0][1]); + $returnValue = $promise->execute($arguments, $prophecy, $methodProphecy); } catch (\Exception $e) { $exception = $e; } } + if ($methodProphecy->hasReturnVoid() && $returnValue !== null) { + throw new MethodProphecyException( + "The method \"$methodName\" has a void return type, but the promise returned a value", + $methodProphecy + ); + } + $this->recordedCalls[] = new Call( $methodName, $arguments, $returnValue, $exception, $file, $line ); diff --git a/lib/composer/vendor/phpspec/prophecy/src/Prophecy/Doubler/ClassPatch/KeywordPatch.php b/lib/composer/vendor/phpspec/prophecy/src/Prophecy/Doubler/ClassPatch/KeywordPatch.php index b0d9793aa..41ea2fc1c 100644 --- a/lib/composer/vendor/phpspec/prophecy/src/Prophecy/Doubler/ClassPatch/KeywordPatch.php +++ b/lib/composer/vendor/phpspec/prophecy/src/Prophecy/Doubler/ClassPatch/KeywordPatch.php @@ -51,7 +51,8 @@ public function apply(ClassNode $node) * * @return int Priority number (higher - earlier) */ - public function getPriority() { + public function getPriority() + { return 49; } @@ -60,7 +61,11 @@ public function getPriority() { * * @return array */ - private function getKeywords() { + private function getKeywords() + { + if (\PHP_VERSION_ID >= 70000) { + return array('__halt_compiler'); + } return array( '__halt_compiler', diff --git a/lib/composer/vendor/phpspec/prophecy/src/Prophecy/Doubler/ClassPatch/MagicCallPatch.php b/lib/composer/vendor/phpspec/prophecy/src/Prophecy/Doubler/ClassPatch/MagicCallPatch.php index 23891c098..5f2c60771 100644 --- a/lib/composer/vendor/phpspec/prophecy/src/Prophecy/Doubler/ClassPatch/MagicCallPatch.php +++ b/lib/composer/vendor/phpspec/prophecy/src/Prophecy/Doubler/ClassPatch/MagicCallPatch.php @@ -51,23 +51,27 @@ public function supports(ClassNode $node) */ public function apply(ClassNode $node) { - $parentClass = $node->getParentClass(); - $reflectionClass = new \ReflectionClass($parentClass); + $types = array_filter($node->getInterfaces(), function ($interface) { + return 0 !== strpos($interface, 'Prophecy\\'); + }); + $types[] = $node->getParentClass(); - $tagList = $this->tagRetriever->getTagList($reflectionClass); + foreach ($types as $type) { + $reflectionClass = new \ReflectionClass($type); + $tagList = $this->tagRetriever->getTagList($reflectionClass); - foreach($tagList as $tag) { - $methodName = $tag->getMethodName(); + foreach($tagList as $tag) { + $methodName = $tag->getMethodName(); - if (empty($methodName)) { - continue; - } - - if (!$reflectionClass->hasMethod($methodName)) { - $methodNode = new MethodNode($methodName); - $methodNode->setStatic($tag->isStatic()); + if (empty($methodName)) { + continue; + } - $node->addMethod($methodNode); + if (!$reflectionClass->hasMethod($methodName)) { + $methodNode = new MethodNode($methodName); + $methodNode->setStatic($tag->isStatic()); + $node->addMethod($methodNode); + } } } } diff --git a/lib/composer/vendor/phpspec/prophecy/src/Prophecy/Doubler/ClassPatch/ProphecySubjectPatch.php b/lib/composer/vendor/phpspec/prophecy/src/Prophecy/Doubler/ClassPatch/ProphecySubjectPatch.php index ab0bb7c78..fc2cc4de4 100644 --- a/lib/composer/vendor/phpspec/prophecy/src/Prophecy/Doubler/ClassPatch/ProphecySubjectPatch.php +++ b/lib/composer/vendor/phpspec/prophecy/src/Prophecy/Doubler/ClassPatch/ProphecySubjectPatch.php @@ -50,9 +50,15 @@ public function apply(ClassNode $node) continue; } - $method->setCode( - 'return $this->getProphecy()->makeProphecyMethodCall(__FUNCTION__, func_get_args());' - ); + if ($method->getReturnType() === 'void') { + $method->setCode( + '$this->getProphecy()->makeProphecyMethodCall(__FUNCTION__, func_get_args());' + ); + } else { + $method->setCode( + 'return $this->getProphecy()->makeProphecyMethodCall(__FUNCTION__, func_get_args());' + ); + } } $prophecySetter = new MethodNode('setProphecy'); diff --git a/lib/composer/vendor/phpspec/prophecy/src/Prophecy/Doubler/ClassPatch/SplFileInfoPatch.php b/lib/composer/vendor/phpspec/prophecy/src/Prophecy/Doubler/ClassPatch/SplFileInfoPatch.php index eba82980d..ceee94a2e 100644 --- a/lib/composer/vendor/phpspec/prophecy/src/Prophecy/Doubler/ClassPatch/SplFileInfoPatch.php +++ b/lib/composer/vendor/phpspec/prophecy/src/Prophecy/Doubler/ClassPatch/SplFileInfoPatch.php @@ -34,7 +34,6 @@ public function supports(ClassNode $node) if (null === $node->getParentClass()) { return false; } - return 'SplFileInfo' === $node->getParentClass() || is_subclass_of($node->getParentClass(), 'SplFileInfo') ; @@ -61,7 +60,15 @@ public function apply(ClassNode $node) } if ($this->nodeIsSplFileObject($node)) { - $constructor->setCode('return parent::__construct("' . __FILE__ .'");'); + $filePath = str_replace('\\','\\\\',__FILE__); + $constructor->setCode('return parent::__construct("' . $filePath .'");'); + + return; + } + + if ($this->nodeIsSymfonySplFileInfo($node)) { + $filePath = str_replace('\\','\\\\',__FILE__); + $constructor->setCode('return parent::__construct("' . $filePath .'", "", "");'); return; } @@ -102,4 +109,15 @@ private function nodeIsSplFileObject(ClassNode $node) return 'SplFileObject' === $parent || is_subclass_of($parent, 'SplFileObject'); } + + /** + * @param ClassNode $node + * @return boolean + */ + private function nodeIsSymfonySplFileInfo(ClassNode $node) + { + $parent = $node->getParentClass(); + + return 'Symfony\\Component\\Finder\\SplFileInfo' === $parent; + } } diff --git a/lib/composer/vendor/phpspec/prophecy/src/Prophecy/Doubler/Generator/ClassCodeGenerator.php b/lib/composer/vendor/phpspec/prophecy/src/Prophecy/Doubler/Generator/ClassCodeGenerator.php index dc03f4299..fc1079c5a 100644 --- a/lib/composer/vendor/phpspec/prophecy/src/Prophecy/Doubler/Generator/ClassCodeGenerator.php +++ b/lib/composer/vendor/phpspec/prophecy/src/Prophecy/Doubler/Generator/ClassCodeGenerator.php @@ -60,20 +60,44 @@ private function generateMethod(Node\MethodNode $method) $method->returnsReference() ? '&':'', $method->getName(), implode(', ', $this->generateArguments($method->getArguments())), - version_compare(PHP_VERSION, '7.0', '>=') && $method->hasReturnType() - ? sprintf(': %s', $method->getReturnType()) - : '' + $this->getReturnType($method) ); $php .= $method->getCode()."\n"; return $php.'}'; } + /** + * @return string + */ + private function getReturnType(Node\MethodNode $method) + { + if (version_compare(PHP_VERSION, '7.1', '>=')) { + if ($method->hasReturnType()) { + return $method->hasNullableReturnType() + ? sprintf(': ?%s', $method->getReturnType()) + : sprintf(': %s', $method->getReturnType()); + } + } + + if (version_compare(PHP_VERSION, '7.0', '>=')) { + return $method->hasReturnType() && $method->getReturnType() !== 'void' + ? sprintf(': %s', $method->getReturnType()) + : ''; + } + + return ''; + } + private function generateArguments(array $arguments) { return array_map(function (Node\ArgumentNode $argument) { $php = ''; + if (version_compare(PHP_VERSION, '7.1', '>=')) { + $php .= $argument->isNullable() ? '?' : ''; + } + if ($hint = $argument->getTypeHint()) { switch ($hint) { case 'array': @@ -81,6 +105,15 @@ private function generateArguments(array $arguments) $php .= $hint; break; + case 'iterable': + if (version_compare(PHP_VERSION, '7.1', '>=')) { + $php .= $hint; + break; + } + + $php .= '\\'.$hint; + break; + case 'string': case 'int': case 'float': diff --git a/lib/composer/vendor/phpspec/prophecy/src/Prophecy/Doubler/Generator/ClassMirror.php b/lib/composer/vendor/phpspec/prophecy/src/Prophecy/Doubler/Generator/ClassMirror.php index acdb2c15b..9f99239f6 100644 --- a/lib/composer/vendor/phpspec/prophecy/src/Prophecy/Doubler/Generator/ClassMirror.php +++ b/lib/composer/vendor/phpspec/prophecy/src/Prophecy/Doubler/Generator/ClassMirror.php @@ -143,7 +143,7 @@ private function reflectMethodToNode(ReflectionMethod $method, Node\ClassNode $c $node->setReturnsReference(); } - if (version_compare(PHP_VERSION, '7.0', '>=') && true === $method->hasReturnType()) { + if (version_compare(PHP_VERSION, '7.0', '>=') && $method->hasReturnType()) { $returnType = (string) $method->getReturnType(); $returnTypeLower = strtolower($returnType); @@ -155,6 +155,10 @@ private function reflectMethodToNode(ReflectionMethod $method, Node\ClassNode $c } $node->setReturnType($returnType); + + if (version_compare(PHP_VERSION, '7.1', '>=') && $method->getReturnType()->allowsNull()) { + $node->setNullableReturnType(true); + } } if (is_array($params = $method->getParameters()) && count($params)) { diff --git a/lib/composer/vendor/phpspec/prophecy/src/Prophecy/Doubler/Generator/Node/ArgumentNode.php b/lib/composer/vendor/phpspec/prophecy/src/Prophecy/Doubler/Generator/Node/ArgumentNode.php index cf6fd7352..dd29b68fc 100644 --- a/lib/composer/vendor/phpspec/prophecy/src/Prophecy/Doubler/Generator/Node/ArgumentNode.php +++ b/lib/composer/vendor/phpspec/prophecy/src/Prophecy/Doubler/Generator/Node/ArgumentNode.php @@ -24,6 +24,7 @@ class ArgumentNode private $optional = false; private $byReference = false; private $isVariadic = false; + private $isNullable = false; /** * @param string $name @@ -88,4 +89,14 @@ public function isVariadic() { return $this->isVariadic; } + + public function isNullable() + { + return $this->isNullable; + } + + public function setAsNullable($isNullable = true) + { + $this->isNullable = $isNullable; + } } diff --git a/lib/composer/vendor/phpspec/prophecy/src/Prophecy/Doubler/Generator/Node/MethodNode.php b/lib/composer/vendor/phpspec/prophecy/src/Prophecy/Doubler/Generator/Node/MethodNode.php index 8402ab8f1..ee363ab3f 100644 --- a/lib/composer/vendor/phpspec/prophecy/src/Prophecy/Doubler/Generator/Node/MethodNode.php +++ b/lib/composer/vendor/phpspec/prophecy/src/Prophecy/Doubler/Generator/Node/MethodNode.php @@ -26,6 +26,7 @@ class MethodNode private $static = false; private $returnsReference = false; private $returnType; + private $nullableReturnType = false; /** * @var ArgumentNode[] @@ -116,12 +117,14 @@ public function setReturnType($type = null) $this->returnType = null; break; - case 'string'; + case 'string': case 'float': case 'int': case 'bool': case 'array': case 'callable': + case 'iterable': + case 'void': $this->returnType = $type; break; @@ -148,6 +151,22 @@ public function getReturnType() return $this->returnType; } + /** + * @param bool $bool + */ + public function setNullableReturnType($bool = true) + { + $this->nullableReturnType = (bool) $bool; + } + + /** + * @return bool + */ + public function hasNullableReturnType() + { + return $this->nullableReturnType; + } + /** * @param string $code */ diff --git a/lib/composer/vendor/phpspec/prophecy/src/Prophecy/Promise/ThrowPromise.php b/lib/composer/vendor/phpspec/prophecy/src/Prophecy/Promise/ThrowPromise.php index 68a8b471b..7250fa3c6 100644 --- a/lib/composer/vendor/phpspec/prophecy/src/Prophecy/Promise/ThrowPromise.php +++ b/lib/composer/vendor/phpspec/prophecy/src/Prophecy/Promise/ThrowPromise.php @@ -34,24 +34,22 @@ class ThrowPromise implements PromiseInterface /** * Initializes promise. * - * @param string|\Exception $exception Exception class name or instance + * @param string|\Exception|\Throwable $exception Exception class name or instance * * @throws \Prophecy\Exception\InvalidArgumentException */ public function __construct($exception) { if (is_string($exception)) { - if (!class_exists($exception) - && 'Exception' !== $exception - && !is_subclass_of($exception, 'Exception')) { + if (!class_exists($exception) || !$this->isAValidThrowable($exception)) { throw new InvalidArgumentException(sprintf( - 'Exception class or instance expected as argument to ThrowPromise, but got %s.', + 'Exception / Throwable class or instance expected as argument to ThrowPromise, but got %s.', $exception )); } - } elseif (!$exception instanceof \Exception) { + } elseif (!$exception instanceof \Exception && !$exception instanceof \Throwable) { throw new InvalidArgumentException(sprintf( - 'Exception class or instance expected as argument to ThrowPromise, but got %s.', + 'Exception / Throwable class or instance expected as argument to ThrowPromise, but got %s.', is_object($exception) ? get_class($exception) : gettype($exception) )); } @@ -88,4 +86,14 @@ public function execute(array $args, ObjectProphecy $object, MethodProphecy $met throw $this->exception; } + + /** + * @param string $exception + * + * @return bool + */ + private function isAValidThrowable($exception) + { + return is_a($exception, 'Exception', true) || is_subclass_of($exception, 'Throwable', true); + } } diff --git a/lib/composer/vendor/phpspec/prophecy/src/Prophecy/Prophecy/MethodProphecy.php b/lib/composer/vendor/phpspec/prophecy/src/Prophecy/Prophecy/MethodProphecy.php index 27e80f5b1..90df1efc8 100644 --- a/lib/composer/vendor/phpspec/prophecy/src/Prophecy/Prophecy/MethodProphecy.php +++ b/lib/composer/vendor/phpspec/prophecy/src/Prophecy/Prophecy/MethodProphecy.php @@ -33,6 +33,7 @@ class MethodProphecy private $prediction; private $checkedPredictions = array(); private $bound = false; + private $voidReturnType = false; /** * Initializes method prophecy. @@ -71,6 +72,12 @@ public function __construct(ObjectProphecy $objectProphecy, $methodName, $argume if (version_compare(PHP_VERSION, '7.0', '>=') && true === $reflectedMethod->hasReturnType()) { $type = (string) $reflectedMethod->getReturnType(); + + if ('void' === $type) { + $this->voidReturnType = true; + return; + } + $this->will(function () use ($type) { switch ($type) { case 'string': return ''; @@ -157,12 +164,19 @@ public function will($promise) /** * Sets return promise to the prophecy. * - * @see Prophecy\Promise\ReturnPromise + * @see \Prophecy\Promise\ReturnPromise * * @return $this */ public function willReturn() { + if ($this->voidReturnType) { + throw new MethodProphecyException( + "The method \"$this->methodName\" has a void return type, and so cannot return anything", + $this + ); + } + return $this->will(new Promise\ReturnPromise(func_get_args())); } @@ -171,19 +185,23 @@ public function willReturn() * * @param int $index The zero-indexed number of the argument to return * - * @see Prophecy\Promise\ReturnArgumentPromise + * @see \Prophecy\Promise\ReturnArgumentPromise * * @return $this */ public function willReturnArgument($index = 0) { + if ($this->voidReturnType) { + throw new MethodProphecyException("The method \"$this->methodName\" has a void return type", $this); + } + return $this->will(new Promise\ReturnArgumentPromise($index)); } /** * Sets throw promise to the prophecy. * - * @see Prophecy\Promise\ThrowPromise + * @see \Prophecy\Promise\ThrowPromise * * @param string|\Exception $exception Exception class or instance * @@ -225,7 +243,7 @@ public function should($prediction) /** * Sets call prediction to the prophecy. * - * @see Prophecy\Prediction\CallPrediction + * @see \Prophecy\Prediction\CallPrediction * * @return $this */ @@ -237,7 +255,7 @@ public function shouldBeCalled() /** * Sets no calls prediction to the prophecy. * - * @see Prophecy\Prediction\NoCallsPrediction + * @see \Prophecy\Prediction\NoCallsPrediction * * @return $this */ @@ -249,7 +267,7 @@ public function shouldNotBeCalled() /** * Sets call times prediction to the prophecy. * - * @see Prophecy\Prediction\CallTimesPrediction + * @see \Prophecy\Prediction\CallTimesPrediction * * @param $count * @@ -282,7 +300,7 @@ public function shouldHave($prediction) )); } - if (null === $this->promise) { + if (null === $this->promise && !$this->voidReturnType) { $this->willReturn(); } @@ -306,7 +324,7 @@ public function shouldHave($prediction) /** * Checks call prediction. * - * @see Prophecy\Prediction\CallPrediction + * @see \Prophecy\Prediction\CallPrediction * * @return $this */ @@ -318,7 +336,7 @@ public function shouldHaveBeenCalled() /** * Checks no calls prediction. * - * @see Prophecy\Prediction\NoCallsPrediction + * @see \Prophecy\Prediction\NoCallsPrediction * * @return $this */ @@ -330,7 +348,7 @@ public function shouldNotHaveBeenCalled() /** * Checks no calls prediction. * - * @see Prophecy\Prediction\NoCallsPrediction + * @see \Prophecy\Prediction\NoCallsPrediction * @deprecated * * @return $this @@ -343,7 +361,7 @@ public function shouldNotBeenCalled() /** * Checks call times prediction. * - * @see Prophecy\Prediction\CallTimesPrediction + * @see \Prophecy\Prediction\CallTimesPrediction * * @param int $count * @@ -426,6 +444,14 @@ public function getArgumentsWildcard() return $this->argumentsWildcard; } + /** + * @return bool + */ + public function hasReturnVoid() + { + return $this->voidReturnType; + } + private function bindToObjectProphecy() { if ($this->bound) { diff --git a/lib/composer/vendor/phpspec/prophecy/src/Prophecy/Util/ExportUtil.php b/lib/composer/vendor/phpspec/prophecy/src/Prophecy/Util/ExportUtil.php index 49ed6a3f4..50dd3f325 100644 --- a/lib/composer/vendor/phpspec/prophecy/src/Prophecy/Util/ExportUtil.php +++ b/lib/composer/vendor/phpspec/prophecy/src/Prophecy/Util/ExportUtil.php @@ -158,11 +158,12 @@ protected static function recursiveExport(&$value, $indentation, $processed = nu return 'Array &' . $key; } + $array = $value; $key = $processed->add($value); $values = ''; - if (count($value) > 0) { - foreach ($value as $k => $v) { + if (count($array) > 0) { + foreach ($array as $k => $v) { $values .= sprintf( '%s %s => %s' . "\n", $whitespace, diff --git a/lib/composer/vendor/phpunit/php-code-coverage/CONTRIBUTING.md b/lib/composer/vendor/phpunit/php-code-coverage/.github/CONTRIBUTING.md similarity index 100% rename from lib/composer/vendor/phpunit/php-code-coverage/CONTRIBUTING.md rename to lib/composer/vendor/phpunit/php-code-coverage/.github/CONTRIBUTING.md diff --git a/lib/composer/vendor/phpunit/php-code-coverage/.github/ISSUE_TEMPLATE.md b/lib/composer/vendor/phpunit/php-code-coverage/.github/ISSUE_TEMPLATE.md new file mode 100644 index 000000000..dc8e3b02f --- /dev/null +++ b/lib/composer/vendor/phpunit/php-code-coverage/.github/ISSUE_TEMPLATE.md @@ -0,0 +1,18 @@ +| Q | A +| --------------------------| --------------- +| php-code-coverage version | x.y.z +| PHP version | x.y.z +| Driver | Xdebug / PHPDBG +| Xdebug version (if used) | x.y.z +| Installation Method | Composer / PHPUnit PHAR +| Usage Method | PHPUnit / other +| PHPUnit version (if used) | x.y.z + + + diff --git a/lib/composer/vendor/phpunit/php-code-coverage/.gitignore b/lib/composer/vendor/phpunit/php-code-coverage/.gitignore index 1f3de0e3a..603bc9e86 100644 --- a/lib/composer/vendor/phpunit/php-code-coverage/.gitignore +++ b/lib/composer/vendor/phpunit/php-code-coverage/.gitignore @@ -1,12 +1,6 @@ -build/api -build/code-browser -build/coverage -build/logs -build/pdepend -cache.properties /tests/_files/tmp /vendor /composer.lock -/composer.phar /.idea /.php_cs.cache + diff --git a/lib/composer/vendor/phpunit/php-code-coverage/.php_cs b/lib/composer/vendor/phpunit/php-code-coverage/.php_cs index de5cde180..cb77f99f2 100644 --- a/lib/composer/vendor/phpunit/php-code-coverage/.php_cs +++ b/lib/composer/vendor/phpunit/php-code-coverage/.php_cs @@ -1,69 +1,87 @@ files() - ->in('src') - ->in('tests') - ->exclude('_files') - ->name('*.php'); +$header = <<<'EOF' +This file is part of the php-code-coverage package. -return Symfony\CS\Config\Config::create() - ->setUsingCache(true) - ->level(\Symfony\CS\FixerInterface::NONE_LEVEL) - ->fixers( - array( - 'align_double_arrow', - 'align_equals', - 'braces', - 'concat_with_spaces', - 'duplicate_semicolon', - 'elseif', - 'empty_return', - 'encoding', - 'eof_ending', - 'extra_empty_lines', - 'function_call_space', - 'function_declaration', - 'indentation', - 'join_function', - 'line_after_namespace', - 'linefeed', - 'list_commas', - 'lowercase_constants', - 'lowercase_keywords', - 'method_argument_space', - 'multiple_use', - 'namespace_no_leading_whitespace', - 'no_blank_lines_after_class_opening', - 'no_empty_lines_after_phpdocs', - 'parenthesis', - 'php_closing_tag', - 'phpdoc_indent', - 'phpdoc_no_access', - 'phpdoc_no_empty_return', - 'phpdoc_no_package', - 'phpdoc_params', - 'phpdoc_scalar', - 'phpdoc_separation', - 'phpdoc_to_comment', - 'phpdoc_trim', - 'phpdoc_types', - 'phpdoc_var_without_name', - 'remove_lines_between_uses', - 'return', - 'self_accessor', - 'short_array_syntax', - 'short_tag', - 'single_line_after_imports', - 'single_quote', - 'spaces_before_semicolon', - 'spaces_cast', - 'ternary_spaces', - 'trailing_spaces', - 'trim_array_spaces', - 'unused_use', - 'visibility', - 'whitespacy_lines' - ) - ) - ->finder($finder); +(c) Sebastian Bergmann + +For the full copyright and license information, please view the LICENSE +file that was distributed with this source code. +EOF; +return PhpCsFixer\Config::create() + ->setRiskyAllowed(true) + ->setRules( + [ + 'array_syntax' => ['syntax' => 'short'], + 'binary_operator_spaces' => [ + 'align_double_arrow' => true, + 'align_equals' => true + ], + 'blank_line_after_namespace' => true, + 'blank_line_before_statement' => [ + 'statements' => [ + 'break', + 'continue', + 'return', + 'throw', + 'try', + ], + ], + 'braces' => true, + 'cast_spaces' => true, + 'concat_space' => ['spacing' => 'one'], + 'elseif' => true, + 'encoding' => true, + 'full_opening_tag' => true, + 'function_declaration' => true, + 'header_comment' => ['header' => $header, 'separate' => 'none'], + 'indentation_type' => true, + 'line_ending' => true, + 'lowercase_constants' => true, + 'lowercase_keywords' => true, + 'method_argument_space' => true, + 'native_function_invocation' => true, + 'no_alias_functions' => true, + 'no_blank_lines_after_class_opening' => true, + 'no_blank_lines_after_phpdoc' => true, + 'no_closing_tag' => true, + 'no_empty_phpdoc' => true, + 'no_empty_statement' => true, + 'no_extra_consecutive_blank_lines' => true, + 'no_leading_namespace_whitespace' => true, + 'no_singleline_whitespace_before_semicolons' => true, + 'no_spaces_after_function_name' => true, + 'no_spaces_inside_parenthesis' => true, + 'no_trailing_comma_in_list_call' => true, + 'no_trailing_whitespace' => true, + 'no_unused_imports' => true, + 'no_whitespace_in_blank_line' => true, + 'ordered_imports' => true, + 'phpdoc_align' => true, + 'phpdoc_indent' => true, + 'phpdoc_no_access' => true, + 'phpdoc_no_empty_return' => true, + 'phpdoc_no_package' => true, + 'phpdoc_scalar' => true, + 'phpdoc_separation' => true, + 'phpdoc_to_comment' => true, + 'phpdoc_trim' => true, + 'phpdoc_types' => true, + 'phpdoc_var_without_name' => true, + 'self_accessor' => true, + 'simplified_null_return' => true, + 'single_blank_line_at_eof' => true, + 'single_import_per_statement' => true, + 'single_line_after_imports' => true, + 'single_quote' => true, + 'ternary_operator_spaces' => true, + 'trim_array_spaces' => true, + 'visibility_required' => true, + ] + ) + ->setFinder( + PhpCsFixer\Finder::create() + ->files() + ->in(__DIR__ . '/src') + ->name('*.php') + ); diff --git a/lib/composer/vendor/phpunit/php-code-coverage/.travis.yml b/lib/composer/vendor/phpunit/php-code-coverage/.travis.yml index be89e1948..b6dfe62d4 100644 --- a/lib/composer/vendor/phpunit/php-code-coverage/.travis.yml +++ b/lib/composer/vendor/phpunit/php-code-coverage/.travis.yml @@ -1,21 +1,39 @@ language: php -php: - - 5.6 - - 7.0 - - nightly - sudo: false +php: + - 7.0 + - 7.1 + - 7.2 + - master + +matrix: + allow_failures: + - php: master + fast_finish: true + +env: + matrix: + - DEPENDENCIES="high" + - DEPENDENCIES="low" + global: + - DEFAULT_COMPOSER_FLAGS="--no-interaction --no-ansi --no-progress --no-suggest" + before_install: - - composer self-update + - composer self-update + - composer clear-cache install: - - travis_retry composer install --no-interaction --prefer-source + - if [[ "$DEPENDENCIES" = 'high' ]]; then travis_retry composer update $DEFAULT_COMPOSER_FLAGS; fi + - if [[ "$DEPENDENCIES" = 'low' ]]; then travis_retry composer update $DEFAULT_COMPOSER_FLAGS --prefer-lowest; fi script: + - if [[ "$DRIVER" = 'phpdbg' ]]; then phpdbg -qrr vendor/bin/phpunit --coverage-clover=coverage.xml; fi + - if [[ "$DRIVER" = 'xdebug' ]]; then vendor/bin/phpunit --coverage-clover=coverage.xml; fi - - vendor/bin/phpunit --configuration build +after_success: + - bash <(curl -s https://codecov.io/bash) notifications: email: false diff --git a/lib/composer/vendor/phpunit/php-code-coverage/ChangeLog-4.0.md b/lib/composer/vendor/phpunit/php-code-coverage/ChangeLog-4.0.md index b085d46b5..30df01027 100644 --- a/lib/composer/vendor/phpunit/php-code-coverage/ChangeLog-4.0.md +++ b/lib/composer/vendor/phpunit/php-code-coverage/ChangeLog-4.0.md @@ -2,6 +2,41 @@ All notable changes of the PHP_CodeCoverage 4.0 release series are documented in this file using the [Keep a CHANGELOG](http://keepachangelog.com/) principles. +## [4.0.8] - 2017-04-02 + +* Fixed [#515](https://github.com/sebastianbergmann/php-code-coverage/pull/515): Wrong use of recursive iterator causing duplicate entries in XML coverage report + +## [4.0.7] - 2017-03-01 + +### Changed + +* Cleaned up requirements in `composer.json` + +## [4.0.6] - 2017-02-23 + +### Changed + +* Added support for `phpunit/php-token-stream` 2.0 +* Updated HTML report assets + +## [4.0.5] - 2017-01-20 + +### Fixed + +* Fixed formatting of executed lines percentage for classes in file view + +## [4.0.4] - 2016-12-20 + +### Changed + +* Implemented [#432](https://github.com/sebastianbergmann/php-code-coverage/issues/432): Change how files with no executable lines are displayed in the HTML report + +## [4.0.3] - 2016-11-28 + +### Changed + +* The check for unintentionally covered code is no longer performed for `@medium` and `@large` tests + ## [4.0.2] - 2016-11-01 ### Fixed @@ -20,6 +55,12 @@ All notable changes of the PHP_CodeCoverage 4.0 release series are documented in * This component now uses namespaces +[4.0.8]: https://github.com/sebastianbergmann/php-code-coverage/compare/4.0.7...4.0.8 +[4.0.7]: https://github.com/sebastianbergmann/php-code-coverage/compare/4.0.6...4.0.7 +[4.0.6]: https://github.com/sebastianbergmann/php-code-coverage/compare/4.0.5...4.0.6 +[4.0.5]: https://github.com/sebastianbergmann/php-code-coverage/compare/4.0.4...4.0.5 +[4.0.4]: https://github.com/sebastianbergmann/php-code-coverage/compare/4.0.3...4.0.4 +[4.0.3]: https://github.com/sebastianbergmann/php-code-coverage/compare/4.0.2...4.0.3 [4.0.2]: https://github.com/sebastianbergmann/php-code-coverage/compare/4.0.1...4.0.2 [4.0.1]: https://github.com/sebastianbergmann/php-code-coverage/compare/4.0.0...4.0.1 [4.0.0]: https://github.com/sebastianbergmann/php-code-coverage/compare/3.3...4.0.0 diff --git a/lib/composer/vendor/phpunit/php-code-coverage/ChangeLog-5.0.md b/lib/composer/vendor/phpunit/php-code-coverage/ChangeLog-5.0.md new file mode 100644 index 000000000..a1f915292 --- /dev/null +++ b/lib/composer/vendor/phpunit/php-code-coverage/ChangeLog-5.0.md @@ -0,0 +1,45 @@ +# Changes in PHP_CodeCoverage 5.0 + +All notable changes of the PHP_CodeCoverage 5.0 release series are documented in this file using the [Keep a CHANGELOG](http://keepachangelog.com/) principles. + +## [5.0.4] - 2017-04-02 + +### Added + +* Added `SebastianBergmann\CodeCoverage\Version::id()` method + +### Fixed + +* Fixed [#515](https://github.com/sebastianbergmann/php-code-coverage/pull/515): Wrong use of recursive iterator causing duplicate entries in XML coverage report + +## [5.0.3] - 2017-03-06 + +### Fixed + +* Fixed [#451](https://github.com/sebastianbergmann/php-code-coverage/pull/451): Conflict between HTML report assets and directories named `css`, `fonts`, or `js` +* Fixed [#485](https://github.com/sebastianbergmann/php-code-coverage/issues/485): Large popover contents cannot be viewed + +## [5.0.2] - 2017-03-01 + +### Changed + +* Cleaned up requirements in `composer.json` + +## [5.0.1] - 2017-02-23 + +### Added + +* Implemented [#508](https://github.com/sebastianbergmann/php-code-coverage/pull/508): Support for HackLang's `ENUM` declaration + +## [5.0.0] - 2017-02-03 + +### Removed + +* This component is no longer supported on PHP 5 + +[5.0.4]: https://github.com/sebastianbergmann/php-code-coverage/compare/5.0.3...5.0.4 +[5.0.3]: https://github.com/sebastianbergmann/php-code-coverage/compare/5.0.2...5.0.3 +[5.0.2]: https://github.com/sebastianbergmann/php-code-coverage/compare/5.0.1...5.0.2 +[5.0.1]: https://github.com/sebastianbergmann/php-code-coverage/compare/5.0.0...5.0.1 +[5.0.0]: https://github.com/sebastianbergmann/php-code-coverage/compare/4.0...5.0.0 + diff --git a/lib/composer/vendor/phpunit/php-code-coverage/ChangeLog-5.1.md b/lib/composer/vendor/phpunit/php-code-coverage/ChangeLog-5.1.md new file mode 100644 index 000000000..7cf702305 --- /dev/null +++ b/lib/composer/vendor/phpunit/php-code-coverage/ChangeLog-5.1.md @@ -0,0 +1,19 @@ +# Changes in PHP_CodeCoverage 5.1 + +All notable changes of the PHP_CodeCoverage 5.1 release series are documented in this file using the [Keep a CHANGELOG](http://keepachangelog.com/) principles. + +## [5.1.1] - 2017-04-12 + +## Fixed + +* Fixed [#420](https://github.com/sebastianbergmann/php-code-coverage/issues/420): Check for unexecuted covered or used code is too strict + +## [5.1.0] - 2017-04-07 + +## Changed + +* Implemented [#516](https://github.com/sebastianbergmann/php-code-coverage/pull/516): Add more information to XML code coverage report + +[5.1.1]: https://github.com/sebastianbergmann/php-code-coverage/compare/5.1.0...5.1.1 +[5.1.0]: https://github.com/sebastianbergmann/php-code-coverage/compare/5.0...5.1.0 + diff --git a/lib/composer/vendor/phpunit/php-code-coverage/ChangeLog-5.2.md b/lib/composer/vendor/phpunit/php-code-coverage/ChangeLog-5.2.md new file mode 100644 index 000000000..caf101351 --- /dev/null +++ b/lib/composer/vendor/phpunit/php-code-coverage/ChangeLog-5.2.md @@ -0,0 +1,44 @@ +# Changes in PHP_CodeCoverage 5.2 + +All notable changes of the PHP_CodeCoverage 5.2 release series are documented in this file using the [Keep a CHANGELOG](http://keepachangelog.com/) principles. + +## [5.2.4] - 2017-11-27 + +### Fixed + +* Fixed [#424](https://github.com/sebastianbergmann/php-code-coverage/issues/424): Rest of a function or method is ignored after an anonymous function +* Fixed [#455](https://github.com/sebastianbergmann/php-code-coverage/issues/455): Dashboard does not handle namespaced classes properly +* Fixed [#468](https://github.com/sebastianbergmann/php-code-coverage/issues/468): Global functions are not properly counted +* Fixed [#560](https://github.com/sebastianbergmann/php-code-coverage/issues/560): Uncovered whitelisted files are missing from the report + +## [5.2.3] - 2017-11-03 + +### Fixed + +* Fixed [#540](https://github.com/sebastianbergmann/php-code-coverage/issues/540): Missing attribute `type` in the CSS `` elements +* Fixed [#554](https://github.com/sebastianbergmann/php-code-coverage/pull/554): `Parameter must be an array or an object that implements Countable` + +## [5.2.2] - 2017-08-03 + +## Changed + +* Bumped required versions of dependencies + +## [5.2.1] - 2017-04-21 + +## Changed + +* Version 3 of `sebastian/environment` is now required + +## [5.2.0] - 2017-04-20 + +## Changed + +* Implemented [#518](https://github.com/sebastianbergmann/php-code-coverage/pull/518): Add more information to XML code coverage report + +[5.2.4]: https://github.com/sebastianbergmann/php-code-coverage/compare/5.2.3...5.2.4 +[5.2.3]: https://github.com/sebastianbergmann/php-code-coverage/compare/5.2.2...5.2.3 +[5.2.2]: https://github.com/sebastianbergmann/php-code-coverage/compare/5.2.1...5.2.2 +[5.2.1]: https://github.com/sebastianbergmann/php-code-coverage/compare/5.2.0...5.2.1 +[5.2.0]: https://github.com/sebastianbergmann/php-code-coverage/compare/5.1...5.2.0 + diff --git a/lib/composer/vendor/phpunit/php-code-coverage/ChangeLog-5.3.md b/lib/composer/vendor/phpunit/php-code-coverage/ChangeLog-5.3.md new file mode 100644 index 000000000..00b5fe2c8 --- /dev/null +++ b/lib/composer/vendor/phpunit/php-code-coverage/ChangeLog-5.3.md @@ -0,0 +1,16 @@ +# Changes in PHP_CodeCoverage 5.3 + +All notable changes of the PHP_CodeCoverage 5.3 release series are documented in this file using the [Keep a CHANGELOG](http://keepachangelog.com/) principles. + +## [5.3.0] - 2017-12-06 + +### Added + +* Added option to ignore the `forceCoversAnnotation="true"` setting for a single test + +### Fixed + +* Fixed [#564](https://github.com/sebastianbergmann/php-code-coverage/issues/564): `setDisableIgnoredLines(true)` disables more than it should + +[5.3.0]: https://github.com/sebastianbergmann/php-code-coverage/compare/5.2...5.3.0 + diff --git a/lib/composer/vendor/phpunit/php-code-coverage/LICENSE b/lib/composer/vendor/phpunit/php-code-coverage/LICENSE index fcfa37e80..9b9787d39 100644 --- a/lib/composer/vendor/phpunit/php-code-coverage/LICENSE +++ b/lib/composer/vendor/phpunit/php-code-coverage/LICENSE @@ -1,6 +1,6 @@ PHP_CodeCoverage -Copyright (c) 2009-2015, Sebastian Bergmann . +Copyright (c) 2009-2017, Sebastian Bergmann . All rights reserved. Redistribution and use in source and binary forms, with or without diff --git a/lib/composer/vendor/phpunit/php-code-coverage/README.md b/lib/composer/vendor/phpunit/php-code-coverage/README.md index c01384b8b..6c401ef4b 100644 --- a/lib/composer/vendor/phpunit/php-code-coverage/README.md +++ b/lib/composer/vendor/phpunit/php-code-coverage/README.md @@ -1,25 +1,9 @@ [![Latest Stable Version](https://poser.pugx.org/phpunit/php-code-coverage/v/stable.png)](https://packagist.org/packages/phpunit/php-code-coverage) -[![Build Status](https://travis-ci.org/sebastianbergmann/php-code-coverage.svg?branch=master)](https://travis-ci.org/sebastianbergmann/php-code-coverage) +[![Build Status](https://travis-ci.org/sebastianbergmann/php-code-coverage.svg?branch=5.3)](https://travis-ci.org/sebastianbergmann/php-code-coverage) -# PHP_CodeCoverage +# SebastianBergmann\CodeCoverage -**PHP_CodeCoverage** is a library that provides collection, processing, and rendering functionality for PHP code coverage information. - -## Requirements - -PHP 5.6 is required but using the latest version of PHP is highly recommended. - -### PHP 5 - -[Xdebug](http://xdebug.org/) is the only source of raw code coverage data supported for PHP 5. Version 2.2.1 of Xdebug is required but using the latest version is highly recommended. - -### PHP 7 - -Version 2.4.0 (or later) of [Xdebug](http://xdebug.org/) as well as [phpdbg](http://phpdbg.com/docs) are supported sources of raw code coverage data for PHP 7. - -### HHVM - -A version of HHVM that implements the Xdebug API for code coverage (`xdebug_*_code_coverage()`) is required. +**SebastianBergmann\CodeCoverage** is a library that provides collection, processing, and rendering functionality for PHP code coverage information. ## Installation @@ -31,11 +15,16 @@ If you only need this library during development, for instance to run your proje composer require --dev phpunit/php-code-coverage -## Using the PHP_CodeCoverage API +## Using the SebastianBergmann\CodeCoverage API ```php filter()->addDirectoryToWhitelist('/path/to/src'); + $coverage->start(''); // ... diff --git a/lib/composer/vendor/phpunit/php-code-coverage/build.xml b/lib/composer/vendor/phpunit/php-code-coverage/build.xml index c335d1587..40eeeec4b 100644 --- a/lib/composer/vendor/phpunit/php-code-coverage/build.xml +++ b/lib/composer/vendor/phpunit/php-code-coverage/build.xml @@ -1,41 +1,19 @@ - - - - + + - - - - - - + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + diff --git a/lib/composer/vendor/phpunit/php-code-coverage/build/phpunit.xml b/lib/composer/vendor/phpunit/php-code-coverage/build/phpunit.xml deleted file mode 100644 index fa15d5d4c..000000000 --- a/lib/composer/vendor/phpunit/php-code-coverage/build/phpunit.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - ../tests/tests - - - - - ../src - - - diff --git a/lib/composer/vendor/phpunit/php-code-coverage/composer.json b/lib/composer/vendor/phpunit/php-code-coverage/composer.json index 2dc52d827..ed87651f0 100644 --- a/lib/composer/vendor/phpunit/php-code-coverage/composer.json +++ b/lib/composer/vendor/phpunit/php-code-coverage/composer.json @@ -12,31 +12,35 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", + "email": "sebastian@phpunit.de", "role": "lead" } ], "support": { - "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "irc": "irc://irc.freenode.net/phpunit" + "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues" }, + "config": { + "optimize-autoloader": true, + "sort-packages": true + }, + "prefer-stable": true, "require": { - "php": "^5.6 || ^7.0", - "phpunit/php-file-iterator": "~1.3", - "phpunit/php-token-stream": "^1.4.2", - "phpunit/php-text-template": "~1.2", - "sebastian/code-unit-reverse-lookup": "~1.0", - "sebastian/environment": "^1.3.2 || ^2.0", - "sebastian/version": "~1.0|~2.0" + "php": "^7.0", + "ext-dom": "*", + "ext-xmlwriter": "*", + "phpunit/php-file-iterator": "^1.4.2", + "phpunit/php-token-stream": "^2.0.1", + "phpunit/php-text-template": "^1.2.1", + "sebastian/code-unit-reverse-lookup": "^1.0.1", + "sebastian/environment": "^3.0", + "sebastian/version": "^2.0.1", + "theseer/tokenizer": "^1.1" }, "require-dev": { - "phpunit/phpunit": "^5.4", - "ext-xdebug": ">=2.1.4" + "phpunit/phpunit": "^6.0" }, "suggest": { - "ext-dom": "*", - "ext-xdebug": ">=2.4.0", - "ext-xmlwriter": "*" + "ext-xdebug": "^2.5.5" }, "autoload": { "classmap": [ @@ -45,7 +49,7 @@ }, "extra": { "branch-alias": { - "dev-master": "4.0.x-dev" + "dev-master": "5.3.x-dev" } } } diff --git a/lib/composer/vendor/phpunit/php-code-coverage/phpunit.xml b/lib/composer/vendor/phpunit/php-code-coverage/phpunit.xml new file mode 100644 index 000000000..37e22199f --- /dev/null +++ b/lib/composer/vendor/phpunit/php-code-coverage/phpunit.xml @@ -0,0 +1,21 @@ + + + + tests/tests + + + + + src + + + + + + + + diff --git a/lib/composer/vendor/phpunit/php-code-coverage/src/CodeCoverage.php b/lib/composer/vendor/phpunit/php-code-coverage/src/CodeCoverage.php index 49332e34e..f3e9eaafc 100644 --- a/lib/composer/vendor/phpunit/php-code-coverage/src/CodeCoverage.php +++ b/lib/composer/vendor/phpunit/php-code-coverage/src/CodeCoverage.php @@ -10,10 +10,12 @@ namespace SebastianBergmann\CodeCoverage; +use PHPUnit\Framework\TestCase; +use PHPUnit\Runner\PhptTestCase; use SebastianBergmann\CodeCoverage\Driver\Driver; -use SebastianBergmann\CodeCoverage\Driver\Xdebug; use SebastianBergmann\CodeCoverage\Driver\HHVM; use SebastianBergmann\CodeCoverage\Driver\PHPDBG; +use SebastianBergmann\CodeCoverage\Driver\Xdebug; use SebastianBergmann\CodeCoverage\Node\Builder; use SebastianBergmann\CodeCoverage\Node\Directory; use SebastianBergmann\CodeUnitReverseLookup\Wizard; @@ -127,6 +129,11 @@ class CodeCoverage */ private $shouldCheckForDeadAndUnused = true; + /** + * @var Directory + */ + private $report; + /** * Constructor. * @@ -158,9 +165,13 @@ public function __construct(Driver $driver = null, Filter $filter = null) */ public function getReport() { - $builder = new Builder; + if ($this->report === null) { + $builder = new Builder; + + $this->report = $builder->build($this); + } - return $builder->build($this); + return $this->report; } /** @@ -172,6 +183,7 @@ public function clear() $this->currentId = null; $this->data = []; $this->tests = []; + $this->report = null; } /** @@ -208,7 +220,8 @@ public function getData($raw = false) */ public function setData(array $data) { - $this->data = $data; + $this->data = $data; + $this->report = null; } /** @@ -241,7 +254,7 @@ public function setTests(array $tests) */ public function start($id, $clear = false) { - if (!is_bool($clear)) { + if (!\is_bool($clear)) { throw InvalidArgumentException::create( 1, 'boolean' @@ -267,21 +280,23 @@ public function start($id, $clear = false) * @param bool $append * @param mixed $linesToBeCovered * @param array $linesToBeUsed + * @param bool $ignoreForceCoversAnnotation * * @return array * + * @throws \SebastianBergmann\CodeCoverage\RuntimeException * @throws InvalidArgumentException */ - public function stop($append = true, $linesToBeCovered = [], array $linesToBeUsed = []) + public function stop($append = true, $linesToBeCovered = [], array $linesToBeUsed = [], $ignoreForceCoversAnnotation = false) { - if (!is_bool($append)) { + if (!\is_bool($append)) { throw InvalidArgumentException::create( 1, 'boolean' ); } - if (!is_array($linesToBeCovered) && $linesToBeCovered !== false) { + if (!\is_array($linesToBeCovered) && $linesToBeCovered !== false) { throw InvalidArgumentException::create( 2, 'array or false' @@ -289,7 +304,7 @@ public function stop($append = true, $linesToBeCovered = [], array $linesToBeUse } $data = $this->driver->stop(); - $this->append($data, null, $append, $linesToBeCovered, $linesToBeUsed); + $this->append($data, null, $append, $linesToBeCovered, $linesToBeUsed, $ignoreForceCoversAnnotation); $this->currentId = null; @@ -304,10 +319,16 @@ public function stop($append = true, $linesToBeCovered = [], array $linesToBeUse * @param bool $append * @param mixed $linesToBeCovered * @param array $linesToBeUsed + * @param bool $ignoreForceCoversAnnotation * + * @throws \SebastianBergmann\CodeCoverage\UnintentionallyCoveredCodeException + * @throws \SebastianBergmann\CodeCoverage\MissingCoversAnnotationException + * @throws \SebastianBergmann\CodeCoverage\CoveredCodeNotExecutedException + * @throws \ReflectionException + * @throws \SebastianBergmann\CodeCoverage\InvalidArgumentException * @throws RuntimeException */ - public function append(array $data, $id = null, $append = true, $linesToBeCovered = [], array $linesToBeUsed = []) + public function append(array $data, $id = null, $append = true, $linesToBeCovered = [], array $linesToBeUsed = [], $ignoreForceCoversAnnotation = false) { if ($id === null) { $id = $this->currentId; @@ -325,11 +346,12 @@ public function append(array $data, $id = null, $append = true, $linesToBeCovere return; } - if ($id != 'UNCOVERED_FILES_FROM_WHITELIST') { + if ($id !== 'UNCOVERED_FILES_FROM_WHITELIST') { $this->applyCoversAnnotationFilter( $data, $linesToBeCovered, - $linesToBeUsed + $linesToBeUsed, + $ignoreForceCoversAnnotation ); } @@ -340,20 +362,20 @@ public function append(array $data, $id = null, $append = true, $linesToBeCovere $size = 'unknown'; $status = null; - if ($id instanceof \PHPUnit_Framework_TestCase) { + if ($id instanceof TestCase) { $_size = $id->getSize(); - if ($_size == \PHPUnit_Util_Test::SMALL) { + if ($_size === \PHPUnit\Util\Test::SMALL) { $size = 'small'; - } elseif ($_size == \PHPUnit_Util_Test::MEDIUM) { + } elseif ($_size === \PHPUnit\Util\Test::MEDIUM) { $size = 'medium'; - } elseif ($_size == \PHPUnit_Util_Test::LARGE) { + } elseif ($_size === \PHPUnit\Util\Test::LARGE) { $size = 'large'; } $status = $id->getStatus(); - $id = get_class($id) . '::' . $id->getName(); - } elseif ($id instanceof \PHPUnit_Extensions_PhptTestCase) { + $id = \get_class($id) . '::' . $id->getName(); + } elseif ($id instanceof PhptTestCase) { $size = 'large'; $id = $id->getName(); } @@ -366,13 +388,15 @@ public function append(array $data, $id = null, $append = true, $linesToBeCovere } foreach ($lines as $k => $v) { - if ($v == Driver::LINE_EXECUTED) { - if (empty($this->data[$file][$k]) || !in_array($id, $this->data[$file][$k])) { + if ($v === Driver::LINE_EXECUTED) { + if (empty($this->data[$file][$k]) || !\in_array($id, $this->data[$file][$k])) { $this->data[$file][$k][] = $id; } } } } + + $this->report = null; } /** @@ -380,10 +404,10 @@ public function append(array $data, $id = null, $append = true, $linesToBeCovere * * @param CodeCoverage $that */ - public function merge(CodeCoverage $that) + public function merge(self $that) { $this->filter->setWhitelistedFiles( - array_merge($this->filter->getWhitelistedFiles(), $that->filter()->getWhitelistedFiles()) + \array_merge($this->filter->getWhitelistedFiles(), $that->filter()->getWhitelistedFiles()) ); foreach ($that->data as $file => $lines) { @@ -400,15 +424,16 @@ public function merge(CodeCoverage $that) if (!isset($this->data[$file][$line])) { $this->data[$file][$line] = $data; } else { - $this->data[$file][$line] = array_unique( - array_merge($this->data[$file][$line], $data) + $this->data[$file][$line] = \array_unique( + \array_merge($this->data[$file][$line], $data) ); } } } } - $this->tests = array_merge($this->tests, $that->getTests()); + $this->tests = \array_merge($this->tests, $that->getTests()); + $this->report = null; } /** @@ -418,7 +443,7 @@ public function merge(CodeCoverage $that) */ public function setCacheTokens($flag) { - if (!is_bool($flag)) { + if (!\is_bool($flag)) { throw InvalidArgumentException::create( 1, 'boolean' @@ -443,7 +468,7 @@ public function getCacheTokens() */ public function setCheckForUnintentionallyCoveredCode($flag) { - if (!is_bool($flag)) { + if (!\is_bool($flag)) { throw InvalidArgumentException::create( 1, 'boolean' @@ -460,7 +485,7 @@ public function setCheckForUnintentionallyCoveredCode($flag) */ public function setForceCoversAnnotation($flag) { - if (!is_bool($flag)) { + if (!\is_bool($flag)) { throw InvalidArgumentException::create( 1, 'boolean' @@ -477,7 +502,7 @@ public function setForceCoversAnnotation($flag) */ public function setCheckForMissingCoversAnnotation($flag) { - if (!is_bool($flag)) { + if (!\is_bool($flag)) { throw InvalidArgumentException::create( 1, 'boolean' @@ -494,7 +519,7 @@ public function setCheckForMissingCoversAnnotation($flag) */ public function setCheckForUnexecutedCoveredCode($flag) { - if (!is_bool($flag)) { + if (!\is_bool($flag)) { throw InvalidArgumentException::create( 1, 'boolean' @@ -522,7 +547,7 @@ public function setMapTestClassNameToCoveredClassName($flag) */ public function setAddUncoveredFilesFromWhitelist($flag) { - if (!is_bool($flag)) { + if (!\is_bool($flag)) { throw InvalidArgumentException::create( 1, 'boolean' @@ -539,7 +564,7 @@ public function setAddUncoveredFilesFromWhitelist($flag) */ public function setProcessUncoveredFilesFromWhitelist($flag) { - if (!is_bool($flag)) { + if (!\is_bool($flag)) { throw InvalidArgumentException::create( 1, 'boolean' @@ -556,7 +581,7 @@ public function setProcessUncoveredFilesFromWhitelist($flag) */ public function setDisableIgnoredLines($flag) { - if (!is_bool($flag)) { + if (!\is_bool($flag)) { throw InvalidArgumentException::create( 1, 'boolean' @@ -573,7 +598,7 @@ public function setDisableIgnoredLines($flag) */ public function setIgnoreDeprecatedCode($flag) { - if (!is_bool($flag)) { + if (!\is_bool($flag)) { throw InvalidArgumentException::create( 1, 'boolean' @@ -597,14 +622,17 @@ public function setUnintentionallyCoveredSubclassesWhitelist(array $whitelist) * @param array $data * @param mixed $linesToBeCovered * @param array $linesToBeUsed + * @param bool $ignoreForceCoversAnnotation * + * @throws \SebastianBergmann\CodeCoverage\CoveredCodeNotExecutedException + * @throws \ReflectionException * @throws MissingCoversAnnotationException * @throws UnintentionallyCoveredCodeException */ - private function applyCoversAnnotationFilter(array &$data, $linesToBeCovered, array $linesToBeUsed) + private function applyCoversAnnotationFilter(array &$data, $linesToBeCovered, array $linesToBeUsed, $ignoreForceCoversAnnotation) { if ($linesToBeCovered === false || - ($this->forceCoversAnnotation && empty($linesToBeCovered))) { + ($this->forceCoversAnnotation && empty($linesToBeCovered) && !$ignoreForceCoversAnnotation)) { if ($this->checkForMissingCoversAnnotation) { throw new MissingCoversAnnotationException; } @@ -618,27 +646,21 @@ private function applyCoversAnnotationFilter(array &$data, $linesToBeCovered, ar return; } - if ($this->checkForUnintentionallyCoveredCode) { - $this->performUnintentionallyCoveredCodeCheck( - $data, - $linesToBeCovered, - $linesToBeUsed - ); + if ($this->checkForUnintentionallyCoveredCode && + (!$this->currentId instanceof TestCase || + (!$this->currentId->isMedium() && !$this->currentId->isLarge()))) { + $this->performUnintentionallyCoveredCodeCheck($data, $linesToBeCovered, $linesToBeUsed); } if ($this->checkForUnexecutedCoveredCode) { $this->performUnexecutedCoveredCodeCheck($data, $linesToBeCovered, $linesToBeUsed); } - $data = array_intersect_key($data, $linesToBeCovered); + $data = \array_intersect_key($data, $linesToBeCovered); - foreach (array_keys($data) as $filename) { - $_linesToBeCovered = array_flip($linesToBeCovered[$filename]); - - $data[$filename] = array_intersect_key( - $data[$filename], - $_linesToBeCovered - ); + foreach (\array_keys($data) as $filename) { + $_linesToBeCovered = \array_flip($linesToBeCovered[$filename]); + $data[$filename] = \array_intersect_key($data[$filename], $_linesToBeCovered); } } @@ -649,7 +671,7 @@ private function applyCoversAnnotationFilter(array &$data, $linesToBeCovered, ar */ private function applyListsFilter(array &$data) { - foreach (array_keys($data) as $filename) { + foreach (\array_keys($data) as $filename) { if ($this->filter->isFiltered($filename)) { unset($data[$filename]); } @@ -660,10 +682,12 @@ private function applyListsFilter(array &$data) * Applies the "ignored lines" filtering. * * @param array $data + * + * @throws \SebastianBergmann\CodeCoverage\InvalidArgumentException */ private function applyIgnoredLinesFilter(array &$data) { - foreach (array_keys($data) as $filename) { + foreach (\array_keys($data) as $filename) { if (!$this->filter->isFile($filename)) { continue; } @@ -680,11 +704,11 @@ private function applyIgnoredLinesFilter(array &$data) private function initializeFilesThatAreSeenTheFirstTime(array $data) { foreach ($data as $file => $lines) { - if ($this->filter->isFile($file) && !isset($this->data[$file])) { + if (!isset($this->data[$file]) && $this->filter->isFile($file)) { $this->data[$file] = []; foreach ($lines as $k => $v) { - $this->data[$file][$k] = $v == -2 ? null : []; + $this->data[$file][$k] = $v === -2 ? null : []; } } } @@ -696,24 +720,22 @@ private function initializeFilesThatAreSeenTheFirstTime(array $data) private function addUncoveredFilesFromWhitelist() { $data = []; - $uncoveredFiles = array_diff( + $uncoveredFiles = \array_diff( $this->filter->getWhitelist(), - array_keys($this->data) + \array_keys($this->data) ); foreach ($uncoveredFiles as $uncoveredFile) { - if (!file_exists($uncoveredFile)) { + if (!\file_exists($uncoveredFile)) { continue; } - if (!$this->processUncoveredFilesFromWhitelist) { - $data[$uncoveredFile] = []; + $data[$uncoveredFile] = []; - $lines = count(file($uncoveredFile)); + $lines = \count(\file($uncoveredFile)); - for ($i = 1; $i <= $lines; $i++) { - $data[$uncoveredFile][$i] = Driver::LINE_NOT_EXECUTED; - } + for ($i = 1; $i <= $lines; $i++) { + $data[$uncoveredFile][$i] = Driver::LINE_NOT_EXECUTED; } } @@ -731,167 +753,184 @@ private function addUncoveredFilesFromWhitelist() */ private function getLinesToBeIgnored($filename) { - if (!is_string($filename)) { + if (!\is_string($filename)) { throw InvalidArgumentException::create( 1, 'string' ); } - if (!isset($this->ignoredLines[$filename])) { - $this->ignoredLines[$filename] = []; + if (isset($this->ignoredLines[$filename])) { + return $this->ignoredLines[$filename]; + } + + $this->ignoredLines[$filename] = []; + + $lines = \file($filename); + + foreach ($lines as $index => $line) { + if (!\trim($line)) { + $this->ignoredLines[$filename][] = $index + 1; + } + } + + if ($this->cacheTokens) { + $tokens = \PHP_Token_Stream_CachingFactory::get($filename); + } else { + $tokens = new \PHP_Token_Stream($filename); + } + + foreach ($tokens->getInterfaces() as $interface) { + $interfaceStartLine = $interface['startLine']; + $interfaceEndLine = $interface['endLine']; - if ($this->disableIgnoredLines) { - return $this->ignoredLines[$filename]; + foreach (\range($interfaceStartLine, $interfaceEndLine) as $line) { + $this->ignoredLines[$filename][] = $line; } + } - $ignore = false; - $stop = false; - $lines = file($filename); - $numLines = count($lines); + foreach (\array_merge($tokens->getClasses(), $tokens->getTraits()) as $classOrTrait) { + $classOrTraitStartLine = $classOrTrait['startLine']; + $classOrTraitEndLine = $classOrTrait['endLine']; - foreach ($lines as $index => $line) { - if (!trim($line)) { - $this->ignoredLines[$filename][] = $index + 1; + if (empty($classOrTrait['methods'])) { + foreach (\range($classOrTraitStartLine, $classOrTraitEndLine) as $line) { + $this->ignoredLines[$filename][] = $line; } + + continue; } - if ($this->cacheTokens) { - $tokens = \PHP_Token_Stream_CachingFactory::get($filename); - } else { - $tokens = new \PHP_Token_Stream($filename); + $firstMethod = \array_shift($classOrTrait['methods']); + $firstMethodStartLine = $firstMethod['startLine']; + $firstMethodEndLine = $firstMethod['endLine']; + $lastMethodEndLine = $firstMethodEndLine; + + do { + $lastMethod = \array_pop($classOrTrait['methods']); + } while ($lastMethod !== null && 0 === \strpos($lastMethod['signature'], 'anonymousFunction')); + + if ($lastMethod !== null) { + $lastMethodEndLine = $lastMethod['endLine']; + } + + foreach (\range($classOrTraitStartLine, $firstMethodStartLine) as $line) { + $this->ignoredLines[$filename][] = $line; } - $classes = array_merge($tokens->getClasses(), $tokens->getTraits()); - $tokens = $tokens->tokens(); - - foreach ($tokens as $token) { - switch (get_class($token)) { - case 'PHP_Token_COMMENT': - case 'PHP_Token_DOC_COMMENT': - $_token = trim($token); - $_line = trim($lines[$token->getLine() - 1]); - - if ($_token == '// @codeCoverageIgnore' || - $_token == '//@codeCoverageIgnore') { - $ignore = true; - $stop = true; - } elseif ($_token == '// @codeCoverageIgnoreStart' || - $_token == '//@codeCoverageIgnoreStart') { - $ignore = true; - } elseif ($_token == '// @codeCoverageIgnoreEnd' || - $_token == '//@codeCoverageIgnoreEnd') { - $stop = true; + foreach (\range($lastMethodEndLine + 1, $classOrTraitEndLine) as $line) { + $this->ignoredLines[$filename][] = $line; + } + } + + if ($this->disableIgnoredLines) { + $this->ignoredLines[$filename] = array_unique($this->ignoredLines[$filename]); + \sort($this->ignoredLines[$filename]); + + return $this->ignoredLines[$filename]; + } + + $ignore = false; + $stop = false; + + foreach ($tokens->tokens() as $token) { + switch (\get_class($token)) { + case \PHP_Token_COMMENT::class: + case \PHP_Token_DOC_COMMENT::class: + $_token = \trim($token); + $_line = \trim($lines[$token->getLine() - 1]); + + if ($_token === '// @codeCoverageIgnore' || + $_token === '//@codeCoverageIgnore') { + $ignore = true; + $stop = true; + } elseif ($_token === '// @codeCoverageIgnoreStart' || + $_token === '//@codeCoverageIgnoreStart') { + $ignore = true; + } elseif ($_token === '// @codeCoverageIgnoreEnd' || + $_token === '//@codeCoverageIgnoreEnd') { + $stop = true; + } + + if (!$ignore) { + $start = $token->getLine(); + $end = $start + \substr_count($token, "\n"); + + // Do not ignore the first line when there is a token + // before the comment + if (0 !== \strpos($_token, $_line)) { + $start++; } - if (!$ignore) { - $start = $token->getLine(); - $end = $start + substr_count($token, "\n"); - - // Do not ignore the first line when there is a token - // before the comment - if (0 !== strpos($_token, $_line)) { - $start++; - } - - for ($i = $start; $i < $end; $i++) { - $this->ignoredLines[$filename][] = $i; - } - - // A DOC_COMMENT token or a COMMENT token starting with "/*" - // does not contain the final \n character in its text - if (isset($lines[$i-1]) && 0 === strpos($_token, '/*') && '*/' === substr(trim($lines[$i-1]), -2)) { - $this->ignoredLines[$filename][] = $i; - } + for ($i = $start; $i < $end; $i++) { + $this->ignoredLines[$filename][] = $i; } - break; - - case 'PHP_Token_INTERFACE': - case 'PHP_Token_TRAIT': - case 'PHP_Token_CLASS': - case 'PHP_Token_FUNCTION': - /* @var \PHP_Token_Interface $token */ - - $docblock = $token->getDocblock(); - - $this->ignoredLines[$filename][] = $token->getLine(); - - if (strpos($docblock, '@codeCoverageIgnore') || ($this->ignoreDeprecatedCode && strpos($docblock, '@deprecated'))) { - $endLine = $token->getEndLine(); - - for ($i = $token->getLine(); $i <= $endLine; $i++) { - $this->ignoredLines[$filename][] = $i; - } - } elseif ($token instanceof \PHP_Token_INTERFACE || - $token instanceof \PHP_Token_TRAIT || - $token instanceof \PHP_Token_CLASS) { - if (empty($classes[$token->getName()]['methods'])) { - for ($i = $token->getLine(); - $i <= $token->getEndLine(); - $i++) { - $this->ignoredLines[$filename][] = $i; - } - } else { - $firstMethod = array_shift( - $classes[$token->getName()]['methods'] - ); - - do { - $lastMethod = array_pop( - $classes[$token->getName()]['methods'] - ); - } while ($lastMethod !== null && - substr($lastMethod['signature'], 0, 18) == 'anonymous function'); - - if ($lastMethod === null) { - $lastMethod = $firstMethod; - } - - for ($i = $token->getLine(); - $i < $firstMethod['startLine']; - $i++) { - $this->ignoredLines[$filename][] = $i; - } - - for ($i = $token->getEndLine(); - $i > $lastMethod['endLine']; - $i--) { - $this->ignoredLines[$filename][] = $i; - } - } + + // A DOC_COMMENT token or a COMMENT token starting with "/*" + // does not contain the final \n character in its text + if (isset($lines[$i - 1]) && 0 === \strpos($_token, '/*') && '*/' === \substr(\trim($lines[$i - 1]), -2)) { + $this->ignoredLines[$filename][] = $i; } - break; - - case 'PHP_Token_NAMESPACE': - $this->ignoredLines[$filename][] = $token->getEndLine(); - - // Intentional fallthrough - case 'PHP_Token_DECLARE': - case 'PHP_Token_OPEN_TAG': - case 'PHP_Token_CLOSE_TAG': - case 'PHP_Token_USE': - $this->ignoredLines[$filename][] = $token->getLine(); - break; - } + } + + break; + + case \PHP_Token_INTERFACE::class: + case \PHP_Token_TRAIT::class: + case \PHP_Token_CLASS::class: + case \PHP_Token_FUNCTION::class: + /* @var \PHP_Token_Interface $token */ + + $docblock = $token->getDocblock(); - if ($ignore) { $this->ignoredLines[$filename][] = $token->getLine(); - if ($stop) { - $ignore = false; - $stop = false; + if (\strpos($docblock, '@codeCoverageIgnore') || ($this->ignoreDeprecatedCode && \strpos($docblock, '@deprecated'))) { + $endLine = $token->getEndLine(); + + for ($i = $token->getLine(); $i <= $endLine; $i++) { + $this->ignoredLines[$filename][] = $i; + } } + + break; + + case \PHP_Token_ENUM::class: + $this->ignoredLines[$filename][] = $token->getLine(); + + break; + + case \PHP_Token_NAMESPACE::class: + $this->ignoredLines[$filename][] = $token->getEndLine(); + + // Intentional fallthrough + case \PHP_Token_DECLARE::class: + case \PHP_Token_OPEN_TAG::class: + case \PHP_Token_CLOSE_TAG::class: + case \PHP_Token_USE::class: + $this->ignoredLines[$filename][] = $token->getLine(); + + break; + } + + if ($ignore) { + $this->ignoredLines[$filename][] = $token->getLine(); + + if ($stop) { + $ignore = false; + $stop = false; } } + } - $this->ignoredLines[$filename][] = $numLines + 1; + $this->ignoredLines[$filename][] = \count($lines) + 1; - $this->ignoredLines[$filename] = array_unique( - $this->ignoredLines[$filename] - ); + $this->ignoredLines[$filename] = \array_unique( + $this->ignoredLines[$filename] + ); - sort($this->ignoredLines[$filename]); - } + $this->ignoredLines[$filename] = array_unique($this->ignoredLines[$filename]); + \sort($this->ignoredLines[$filename]); return $this->ignoredLines[$filename]; } @@ -901,6 +940,7 @@ private function getLinesToBeIgnored($filename) * @param array $linesToBeCovered * @param array $linesToBeUsed * + * @throws \ReflectionException * @throws UnintentionallyCoveredCodeException */ private function performUnintentionallyCoveredCodeCheck(array &$data, array $linesToBeCovered, array $linesToBeUsed) @@ -914,7 +954,7 @@ private function performUnintentionallyCoveredCodeCheck(array &$data, array $lin foreach ($data as $file => $_data) { foreach ($_data as $line => $flag) { - if ($flag == 1 && !isset($allowedLines[$file][$line])) { + if ($flag === 1 && !isset($allowedLines[$file][$line])) { $unintentionallyCoveredUnits[] = $this->wizard->lookup($file, $line); } } @@ -938,30 +978,24 @@ private function performUnintentionallyCoveredCodeCheck(array &$data, array $lin */ private function performUnexecutedCoveredCodeCheck(array &$data, array $linesToBeCovered, array $linesToBeUsed) { - $expectedLines = $this->getAllowedLines( - $linesToBeCovered, - $linesToBeUsed - ); - - foreach ($data as $file => $_data) { - foreach (array_keys($_data) as $line) { - if (!isset($expectedLines[$file][$line])) { - continue; - } - - unset($expectedLines[$file][$line]); + $executedCodeUnits = $this->coverageToCodeUnits($data); + $message = ''; + + foreach ($this->linesToCodeUnits($linesToBeCovered) as $codeUnit) { + if (!\in_array($codeUnit, $executedCodeUnits)) { + $message .= \sprintf( + '- %s is expected to be executed (@covers) but was not executed' . "\n", + $codeUnit + ); } } - $message = ''; - - foreach ($expectedLines as $file => $lines) { - if (empty($lines)) { - continue; - } - - foreach (array_keys($lines) as $line) { - $message .= sprintf('- %s:%d' . PHP_EOL, $file, $line); + foreach ($this->linesToCodeUnits($linesToBeUsed) as $codeUnit) { + if (!\in_array($codeUnit, $executedCodeUnits)) { + $message .= \sprintf( + '- %s is expected to be executed (@uses) but was not executed' . "\n", + $codeUnit + ); } } @@ -980,31 +1014,31 @@ private function getAllowedLines(array $linesToBeCovered, array $linesToBeUsed) { $allowedLines = []; - foreach (array_keys($linesToBeCovered) as $file) { + foreach (\array_keys($linesToBeCovered) as $file) { if (!isset($allowedLines[$file])) { $allowedLines[$file] = []; } - $allowedLines[$file] = array_merge( + $allowedLines[$file] = \array_merge( $allowedLines[$file], $linesToBeCovered[$file] ); } - foreach (array_keys($linesToBeUsed) as $file) { + foreach (\array_keys($linesToBeUsed) as $file) { if (!isset($allowedLines[$file])) { $allowedLines[$file] = []; } - $allowedLines[$file] = array_merge( + $allowedLines[$file] = \array_merge( $allowedLines[$file], $linesToBeUsed[$file] ); } - foreach (array_keys($allowedLines) as $file) { - $allowedLines[$file] = array_flip( - array_unique($allowedLines[$file]) + foreach (\array_keys($allowedLines) as $file) { + $allowedLines[$file] = \array_flip( + \array_unique($allowedLines[$file]) ); } @@ -1026,27 +1060,31 @@ private function selectDriver() if ($runtime->isHHVM()) { return new HHVM; - } elseif ($runtime->isPHPDBG()) { + } + + if ($runtime->isPHPDBG()) { return new PHPDBG; - } else { - return new Xdebug; } + + return new Xdebug; } /** * @param array $unintentionallyCoveredUnits * * @return array + * + * @throws \ReflectionException */ private function processUnintentionallyCoveredUnits(array $unintentionallyCoveredUnits) { - $unintentionallyCoveredUnits = array_unique($unintentionallyCoveredUnits); - sort($unintentionallyCoveredUnits); + $unintentionallyCoveredUnits = \array_unique($unintentionallyCoveredUnits); + \sort($unintentionallyCoveredUnits); - foreach (array_keys($unintentionallyCoveredUnits) as $k => $v) { - $unit = explode('::', $unintentionallyCoveredUnits[$k]); + foreach (\array_keys($unintentionallyCoveredUnits) as $k => $v) { + $unit = \explode('::', $unintentionallyCoveredUnits[$k]); - if (count($unit) != 2) { + if (\count($unit) !== 2) { continue; } @@ -1055,17 +1093,20 @@ private function processUnintentionallyCoveredUnits(array $unintentionallyCovere foreach ($this->unintentionallyCoveredSubclassesWhitelist as $whitelisted) { if ($class->isSubclassOf($whitelisted)) { unset($unintentionallyCoveredUnits[$k]); + break; } } } - return array_values($unintentionallyCoveredUnits); + return \array_values($unintentionallyCoveredUnits); } /** * If we are processing uncovered files from whitelist, * we can initialize the data before we start to speed up the tests + * + * @throws \SebastianBergmann\CodeCoverage\RuntimeException */ protected function initializeData() { @@ -1090,8 +1131,8 @@ protected function initializeData() continue; } - foreach (array_keys($fileCoverage) as $key) { - if ($fileCoverage[$key] == Driver::LINE_EXECUTED) { + foreach (\array_keys($fileCoverage) as $key) { + if ($fileCoverage[$key] === Driver::LINE_EXECUTED) { $fileCoverage[$key] = Driver::LINE_NOT_EXECUTED; } } @@ -1102,4 +1143,42 @@ protected function initializeData() $this->append($data, 'UNCOVERED_FILES_FROM_WHITELIST'); } } + + /** + * @param array $data + * + * @return array + */ + private function coverageToCodeUnits(array $data) + { + $codeUnits = []; + + foreach ($data as $filename => $lines) { + foreach ($lines as $line => $flag) { + if ($flag === 1) { + $codeUnits[] = $this->wizard->lookup($filename, $line); + } + } + } + + return \array_unique($codeUnits); + } + + /** + * @param array $data + * + * @return array + */ + private function linesToCodeUnits(array $data) + { + $codeUnits = []; + + foreach ($data as $filename => $lines) { + foreach ($lines as $line) { + $codeUnits[] = $this->wizard->lookup($filename, $line); + } + } + + return \array_unique($codeUnits); + } } diff --git a/lib/composer/vendor/phpunit/php-code-coverage/src/Driver/HHVM.php b/lib/composer/vendor/phpunit/php-code-coverage/src/Driver/HHVM.php index b35ea81bb..e8cdc2a41 100644 --- a/lib/composer/vendor/phpunit/php-code-coverage/src/Driver/HHVM.php +++ b/lib/composer/vendor/phpunit/php-code-coverage/src/Driver/HHVM.php @@ -24,6 +24,6 @@ class HHVM extends Xdebug */ public function start($determineUnusedAndDead = true) { - xdebug_start_code_coverage(); + \xdebug_start_code_coverage(); } } diff --git a/lib/composer/vendor/phpunit/php-code-coverage/src/Driver/PHPDBG.php b/lib/composer/vendor/phpunit/php-code-coverage/src/Driver/PHPDBG.php index 86cc8444c..71b9559ca 100644 --- a/lib/composer/vendor/phpunit/php-code-coverage/src/Driver/PHPDBG.php +++ b/lib/composer/vendor/phpunit/php-code-coverage/src/Driver/PHPDBG.php @@ -30,7 +30,7 @@ public function __construct() ); } - if (!function_exists('phpdbg_start_oplog')) { + if (!\function_exists('phpdbg_start_oplog')) { throw new RuntimeException( 'This build of PHPDBG does not support code coverage' ); @@ -61,9 +61,9 @@ public function stop() if ($fetchedLines == []) { $sourceLines = phpdbg_get_executable(); } else { - $newFiles = array_diff( - get_included_files(), - array_keys($fetchedLines) + $newFiles = \array_diff( + \get_included_files(), + \array_keys($fetchedLines) ); if ($newFiles) { @@ -81,7 +81,7 @@ public function stop() } } - $fetchedLines = array_merge($fetchedLines, $sourceLines); + $fetchedLines = \array_merge($fetchedLines, $sourceLines); return $this->detectExecutedLines($fetchedLines, $dbgData); } diff --git a/lib/composer/vendor/phpunit/php-code-coverage/src/Driver/Xdebug.php b/lib/composer/vendor/phpunit/php-code-coverage/src/Driver/Xdebug.php index 30099e057..208ae2bef 100644 --- a/lib/composer/vendor/phpunit/php-code-coverage/src/Driver/Xdebug.php +++ b/lib/composer/vendor/phpunit/php-code-coverage/src/Driver/Xdebug.php @@ -31,12 +31,12 @@ class Xdebug implements Driver */ public function __construct() { - if (!extension_loaded('xdebug')) { + if (!\extension_loaded('xdebug')) { throw new RuntimeException('This driver requires Xdebug'); } - if (version_compare(phpversion('xdebug'), '2.2.1', '>=') && - !ini_get('xdebug.coverage_enable')) { + if (\version_compare(\phpversion('xdebug'), '2.2.1', '>=') && + !\ini_get('xdebug.coverage_enable')) { throw new RuntimeException( 'xdebug.coverage_enable=On has to be set in php.ini' ); @@ -51,9 +51,9 @@ public function __construct() public function start($determineUnusedAndDead = true) { if ($determineUnusedAndDead) { - xdebug_start_code_coverage(XDEBUG_CC_UNUSED | XDEBUG_CC_DEAD_CODE); + \xdebug_start_code_coverage(XDEBUG_CC_UNUSED | XDEBUG_CC_DEAD_CODE); } else { - xdebug_start_code_coverage(); + \xdebug_start_code_coverage(); } } @@ -64,8 +64,8 @@ public function start($determineUnusedAndDead = true) */ public function stop() { - $data = xdebug_get_code_coverage(); - xdebug_stop_code_coverage(); + $data = \xdebug_get_code_coverage(); + \xdebug_stop_code_coverage(); return $this->cleanup($data); } @@ -77,13 +77,13 @@ public function stop() */ private function cleanup(array $data) { - foreach (array_keys($data) as $file) { + foreach (\array_keys($data) as $file) { unset($data[$file][0]); - if (strpos($file, 'xdebug://debug-eval') !== 0 && file_exists($file)) { + if (\strpos($file, 'xdebug://debug-eval') !== 0 && \file_exists($file)) { $numLines = $this->getNumberOfLinesInFile($file); - foreach (array_keys($data[$file]) as $line) { + foreach (\array_keys($data[$file]) as $line) { if ($line > $numLines) { unset($data[$file][$line]); } @@ -102,10 +102,10 @@ private function cleanup(array $data) private function getNumberOfLinesInFile($file) { if (!isset($this->cacheNumLines[$file])) { - $buffer = file_get_contents($file); - $lines = substr_count($buffer, "\n"); + $buffer = \file_get_contents($file); + $lines = \substr_count($buffer, "\n"); - if (substr($buffer, -1) !== "\n") { + if (\substr($buffer, -1) !== "\n") { $lines++; } diff --git a/lib/composer/vendor/phpunit/php-code-coverage/src/Exception/InvalidArgumentException.php b/lib/composer/vendor/phpunit/php-code-coverage/src/Exception/InvalidArgumentException.php index 1733f6cb5..1c632613b 100644 --- a/lib/composer/vendor/phpunit/php-code-coverage/src/Exception/InvalidArgumentException.php +++ b/lib/composer/vendor/phpunit/php-code-coverage/src/Exception/InvalidArgumentException.php @@ -21,13 +21,13 @@ class InvalidArgumentException extends \InvalidArgumentException implements Exce */ public static function create($argument, $type, $value = null) { - $stack = debug_backtrace(0); + $stack = \debug_backtrace(0); return new self( - sprintf( + \sprintf( 'Argument #%d%sof %s::%s() must be a %s', $argument, - $value !== null ? ' (' . gettype($value) . '#' . $value . ')' : ' (No Value) ', + $value !== null ? ' (' . \gettype($value) . '#' . $value . ')' : ' (No Value) ', $stack[1]['class'], $stack[1]['function'], $type diff --git a/lib/composer/vendor/phpunit/php-code-coverage/src/Filter.php b/lib/composer/vendor/phpunit/php-code-coverage/src/Filter.php index 771a657ae..3d99abb50 100644 --- a/lib/composer/vendor/phpunit/php-code-coverage/src/Filter.php +++ b/lib/composer/vendor/phpunit/php-code-coverage/src/Filter.php @@ -46,7 +46,7 @@ public function addDirectoryToWhitelist($directory, $suffix = '.php', $prefix = */ public function addFileToWhitelist($filename) { - $this->whitelistedFiles[realpath($filename)] = true; + $this->whitelistedFiles[\realpath($filename)] = true; } /** @@ -85,7 +85,7 @@ public function removeDirectoryFromWhitelist($directory, $suffix = '.php', $pref */ public function removeFileFromWhitelist($filename) { - $filename = realpath($filename); + $filename = \realpath($filename); unset($this->whitelistedFiles[$filename]); } @@ -100,17 +100,17 @@ public function removeFileFromWhitelist($filename) public function isFile($filename) { if ($filename == '-' || - strpos($filename, 'vfs://') === 0 || - strpos($filename, 'xdebug://debug-eval') !== false || - strpos($filename, 'eval()\'d code') !== false || - strpos($filename, 'runtime-created function') !== false || - strpos($filename, 'runkit created function') !== false || - strpos($filename, 'assert code') !== false || - strpos($filename, 'regexp code') !== false) { + \strpos($filename, 'vfs://') === 0 || + \strpos($filename, 'xdebug://debug-eval') !== false || + \strpos($filename, 'eval()\'d code') !== false || + \strpos($filename, 'runtime-created function') !== false || + \strpos($filename, 'runkit created function') !== false || + \strpos($filename, 'assert code') !== false || + \strpos($filename, 'regexp code') !== false) { return false; } - return file_exists($filename); + return \file_exists($filename); } /** @@ -126,7 +126,7 @@ public function isFiltered($filename) return true; } - $filename = realpath($filename); + $filename = \realpath($filename); return !isset($this->whitelistedFiles[$filename]); } @@ -138,7 +138,7 @@ public function isFiltered($filename) */ public function getWhitelist() { - return array_keys($this->whitelistedFiles); + return \array_keys($this->whitelistedFiles); } /** diff --git a/lib/composer/vendor/phpunit/php-code-coverage/src/Node/AbstractNode.php b/lib/composer/vendor/phpunit/php-code-coverage/src/Node/AbstractNode.php index f3608058e..e8f08cba4 100644 --- a/lib/composer/vendor/phpunit/php-code-coverage/src/Node/AbstractNode.php +++ b/lib/composer/vendor/phpunit/php-code-coverage/src/Node/AbstractNode.php @@ -48,10 +48,10 @@ abstract class AbstractNode implements \Countable * @param string $name * @param AbstractNode $parent */ - public function __construct($name, AbstractNode $parent = null) + public function __construct($name, self $parent = null) { - if (substr($name, -1) == '/') { - $name = substr($name, 0, -1); + if (\substr($name, -1) == '/') { + $name = \substr($name, 0, -1); } $this->name = $name; @@ -80,7 +80,7 @@ public function getId() $parentId = $parent->getId(); if ($parentId == 'index') { - $this->id = str_replace(':', '_', $this->name); + $this->id = \str_replace(':', '_', $this->name); } else { $this->id = $parentId . '/' . $this->name; } @@ -165,7 +165,7 @@ public function getTestedTraitsPercent($asString = true) } /** - * Returns the percentage of traits that has been tested. + * Returns the percentage of classes and traits that has been tested. * * @param bool $asString * @@ -180,6 +180,22 @@ public function getTestedClassesAndTraitsPercent($asString = true) ); } + /** + * Returns the percentage of functions that has been tested. + * + * @param bool $asString + * + * @return int + */ + public function getTestedFunctionsPercent($asString = true) + { + return Util::percent( + $this->getNumTestedFunctions(), + $this->getNumFunctions(), + $asString + ); + } + /** * Returns the percentage of methods that has been tested. * @@ -196,6 +212,22 @@ public function getTestedMethodsPercent($asString = true) ); } + /** + * Returns the percentage of functions and methods that has been tested. + * + * @param bool $asString + * + * @return int + */ + public function getTestedFunctionsAndMethodsPercent($asString = true) + { + return Util::percent( + $this->getNumTestedFunctionsAndMethods(), + $this->getNumFunctionsAndMethods(), + $asString + ); + } + /** * Returns the percentage of executed lines. * @@ -239,7 +271,37 @@ public function getNumTestedClassesAndTraits() */ public function getClassesAndTraits() { - return array_merge($this->getClasses(), $this->getTraits()); + return \array_merge($this->getClasses(), $this->getTraits()); + } + + /** + * Returns the number of functions and methods. + * + * @return int + */ + public function getNumFunctionsAndMethods() + { + return $this->getNumFunctions() + $this->getNumMethods(); + } + + /** + * Returns the number of tested functions and methods. + * + * @return int + */ + public function getNumTestedFunctionsAndMethods() + { + return $this->getNumTestedFunctions() + $this->getNumTestedMethods(); + } + + /** + * Returns the functions and methods of this node. + * + * @return array + */ + public function getFunctionsAndMethods() + { + return \array_merge($this->getFunctions(), $this->getMethods()); } /** diff --git a/lib/composer/vendor/phpunit/php-code-coverage/src/Node/Builder.php b/lib/composer/vendor/phpunit/php-code-coverage/src/Node/Builder.php index 8a6a65c1b..56541d57f 100644 --- a/lib/composer/vendor/phpunit/php-code-coverage/src/Node/Builder.php +++ b/lib/composer/vendor/phpunit/php-code-coverage/src/Node/Builder.php @@ -47,10 +47,10 @@ public function build(CodeCoverage $coverage) private function addItems(Directory $root, array $items, array $tests, $cacheTokens) { foreach ($items as $key => $value) { - if (substr($key, -2) == '/f') { - $key = substr($key, 0, -2); + if (\substr($key, -2) == '/f') { + $key = \substr($key, 0, -2); - if (file_exists($root->getPath() . DIRECTORY_SEPARATOR . $key)) { + if (\file_exists($root->getPath() . DIRECTORY_SEPARATOR . $key)) { $root->addFile($key, $value, $tests, $cacheTokens); } } else { @@ -109,9 +109,9 @@ private function buildDirectoryStructure($files) $result = []; foreach ($files as $path => $file) { - $path = explode('/', $path); + $path = \explode('/', $path); $pointer = &$result; - $max = count($path); + $max = \count($path); for ($i = 0; $i < $max; $i++) { if ($i == ($max - 1)) { @@ -177,26 +177,26 @@ private function reducePaths(&$files) } $commonPath = ''; - $paths = array_keys($files); + $paths = \array_keys($files); - if (count($files) == 1) { - $commonPath = dirname($paths[0]) . '/'; - $files[basename($paths[0])] = $files[$paths[0]]; + if (\count($files) == 1) { + $commonPath = \dirname($paths[0]) . '/'; + $files[\basename($paths[0])] = $files[$paths[0]]; unset($files[$paths[0]]); return $commonPath; } - $max = count($paths); + $max = \count($paths); for ($i = 0; $i < $max; $i++) { // strip phar:// prefixes - if (strpos($paths[$i], 'phar://') === 0) { - $paths[$i] = substr($paths[$i], 7); - $paths[$i] = strtr($paths[$i], '/', DIRECTORY_SEPARATOR); + if (\strpos($paths[$i], 'phar://') === 0) { + $paths[$i] = \substr($paths[$i], 7); + $paths[$i] = \strtr($paths[$i], '/', DIRECTORY_SEPARATOR); } - $paths[$i] = explode(DIRECTORY_SEPARATOR, $paths[$i]); + $paths[$i] = \explode(DIRECTORY_SEPARATOR, $paths[$i]); if (empty($paths[$i][0])) { $paths[$i][0] = DIRECTORY_SEPARATOR; @@ -204,14 +204,15 @@ private function reducePaths(&$files) } $done = false; - $max = count($paths); + $max = \count($paths); while (!$done) { for ($i = 0; $i < $max - 1; $i++) { if (!isset($paths[$i][0]) || - !isset($paths[$i+1][0]) || - $paths[$i][0] != $paths[$i+1][0]) { + !isset($paths[$i + 1][0]) || + $paths[$i][0] != $paths[$i + 1][0]) { $done = true; + break; } } @@ -224,21 +225,21 @@ private function reducePaths(&$files) } for ($i = 0; $i < $max; $i++) { - array_shift($paths[$i]); + \array_shift($paths[$i]); } } } - $original = array_keys($files); - $max = count($original); + $original = \array_keys($files); + $max = \count($original); for ($i = 0; $i < $max; $i++) { - $files[implode('/', $paths[$i])] = $files[$original[$i]]; + $files[\implode('/', $paths[$i])] = $files[$original[$i]]; unset($files[$original[$i]]); } - ksort($files); + \ksort($files); - return substr($commonPath, 0, -1); + return \substr($commonPath, 0, -1); } } diff --git a/lib/composer/vendor/phpunit/php-code-coverage/src/Node/Directory.php b/lib/composer/vendor/phpunit/php-code-coverage/src/Node/Directory.php index 6a9f28db5..3c95d2893 100644 --- a/lib/composer/vendor/phpunit/php-code-coverage/src/Node/Directory.php +++ b/lib/composer/vendor/phpunit/php-code-coverage/src/Node/Directory.php @@ -118,7 +118,7 @@ public function count() $this->numFiles = 0; foreach ($this->children as $child) { - $this->numFiles += count($child); + $this->numFiles += \count($child); } } @@ -150,7 +150,7 @@ public function addDirectory($name) $directory = new self($name, $this); $this->children[] = $directory; - $this->directories[] = &$this->children[count($this->children) - 1]; + $this->directories[] = &$this->children[\count($this->children) - 1]; return $directory; } @@ -178,7 +178,7 @@ public function addFile($name, array $coverageData, array $testData, $cacheToken ); $this->children[] = $file; - $this->files[] = &$this->children[count($this->children) - 1]; + $this->files[] = &$this->children[\count($this->children) - 1]; $this->numExecutableLines = -1; $this->numExecutedLines = -1; @@ -227,7 +227,7 @@ public function getClasses() $this->classes = []; foreach ($this->children as $child) { - $this->classes = array_merge( + $this->classes = \array_merge( $this->classes, $child->getClasses() ); @@ -248,7 +248,7 @@ public function getTraits() $this->traits = []; foreach ($this->children as $child) { - $this->traits = array_merge( + $this->traits = \array_merge( $this->traits, $child->getTraits() ); @@ -269,7 +269,7 @@ public function getFunctions() $this->functions = []; foreach ($this->children as $child) { - $this->functions = array_merge( + $this->functions = \array_merge( $this->functions, $child->getFunctions() ); @@ -292,8 +292,8 @@ public function getLinesOfCode() foreach ($this->children as $child) { $linesOfCode = $child->getLinesOfCode(); - $this->linesOfCode['loc'] += $linesOfCode['loc']; - $this->linesOfCode['cloc'] += $linesOfCode['cloc']; + $this->linesOfCode['loc'] += $linesOfCode['loc']; + $this->linesOfCode['cloc'] += $linesOfCode['cloc']; $this->linesOfCode['ncloc'] += $linesOfCode['ncloc']; } } diff --git a/lib/composer/vendor/phpunit/php-code-coverage/src/Node/File.php b/lib/composer/vendor/phpunit/php-code-coverage/src/Node/File.php index b94f20765..7a8587f07 100644 --- a/lib/composer/vendor/phpunit/php-code-coverage/src/Node/File.php +++ b/lib/composer/vendor/phpunit/php-code-coverage/src/Node/File.php @@ -60,13 +60,23 @@ class File extends AbstractNode /** * @var int */ - private $numTestedTraits = 0; + private $numClasses = null; /** * @var int */ private $numTestedClasses = 0; + /** + * @var int + */ + private $numTraits = null; + + /** + * @var int + */ + private $numTestedTraits = 0; + /** * @var int */ @@ -110,7 +120,7 @@ class File extends AbstractNode */ public function __construct($name, AbstractNode $parent, array $coverageData, array $testData, $cacheTokens) { - if (!is_bool($cacheTokens)) { + if (!\is_bool($cacheTokens)) { throw InvalidArgumentException::create( 1, 'boolean' @@ -223,7 +233,21 @@ public function getNumExecutedLines() */ public function getNumClasses() { - return count($this->classes); + if ($this->numClasses === null) { + $this->numClasses = 0; + + foreach ($this->classes as $class) { + foreach ($class['methods'] as $method) { + if ($method['executableLines'] > 0) { + $this->numClasses++; + + continue 2; + } + } + } + } + + return $this->numClasses; } /** @@ -243,7 +267,21 @@ public function getNumTestedClasses() */ public function getNumTraits() { - return count($this->traits); + if ($this->numTraits === null) { + $this->numTraits = 0; + + foreach ($this->traits as $trait) { + foreach ($trait['methods'] as $method) { + if ($method['executableLines'] > 0) { + $this->numTraits++; + + continue 2; + } + } + } + } + + return $this->numTraits; } /** @@ -325,7 +363,7 @@ public function getNumTestedMethods() */ public function getNumFunctions() { - return count($this->functions); + return \count($this->functions); } /** @@ -412,7 +450,7 @@ protected function calculateStatistics() $this->numExecutableLines++; - if (count($this->coverageData[$lineNumber]) > 0) { + if (\count($this->coverageData[$lineNumber]) > 0) { if (isset($currentClass)) { $currentClass['executedLines']++; } @@ -439,8 +477,8 @@ protected function calculateStatistics() unset($currentClass); if ($classStack) { - end($classStack); - $key = key($classStack); + \end($classStack); + $key = \key($classStack); $currentClass = &$classStack[$key]; unset($classStack[$key]); } @@ -455,8 +493,8 @@ protected function calculateStatistics() unset($currentFunction); if ($functionStack) { - end($functionStack); - $key = key($functionStack); + \end($functionStack); + $key = \key($functionStack); $currentFunction = &$functionStack[$key]; unset($functionStack[$key]); } @@ -484,14 +522,14 @@ protected function calculateStatistics() if ($trait['executableLines'] > 0) { $trait['coverage'] = ($trait['executedLines'] / $trait['executableLines']) * 100; + + if ($trait['coverage'] == 100) { + $this->numTestedClasses++; + } } else { $trait['coverage'] = 100; } - if ($trait['coverage'] == 100) { - $this->numTestedClasses++; - } - $trait['crap'] = $this->crap( $trait['ccn'], $trait['coverage'] @@ -518,19 +556,37 @@ protected function calculateStatistics() if ($class['executableLines'] > 0) { $class['coverage'] = ($class['executedLines'] / $class['executableLines']) * 100; + + if ($class['coverage'] == 100) { + $this->numTestedClasses++; + } } else { $class['coverage'] = 100; } - if ($class['coverage'] == 100) { - $this->numTestedClasses++; - } - $class['crap'] = $this->crap( $class['ccn'], $class['coverage'] ); } + + foreach ($this->functions as &$function) { + if ($function['executableLines'] > 0) { + $function['coverage'] = ($function['executedLines'] / + $function['executableLines']) * 100; + } else { + $function['coverage'] = 100; + } + + if ($function['coverage'] == 100) { + $this->numTestedFunctions++; + } + + $function['crap'] = $this->crap( + $function['ccn'], + $function['coverage'] + ); + } } /** @@ -544,6 +600,10 @@ protected function processClasses(\PHP_Token_Stream $tokens) $link = $this->getId() . '.html#'; foreach ($classes as $className => $class) { + if (!empty($class['package']['namespace'])) { + $className = $class['package']['namespace'] . '\\' . $className; + } + $this->classes[$className] = [ 'className' => $className, 'methods' => [], @@ -645,16 +705,16 @@ protected function processFunctions(\PHP_Token_Stream $tokens) protected function crap($ccn, $coverage) { if ($coverage == 0) { - return (string) (pow($ccn, 2) + $ccn); + return (string) (\pow($ccn, 2) + $ccn); } if ($coverage >= 95) { return (string) $ccn; } - return sprintf( + return \sprintf( '%01.2F', - pow($ccn, 2) * pow(1 - $coverage/100, 3) + $ccn + \pow($ccn, 2) * \pow(1 - $coverage / 100, 3) + $ccn ); } diff --git a/lib/composer/vendor/phpunit/php-code-coverage/src/Node/Iterator.php b/lib/composer/vendor/phpunit/php-code-coverage/src/Node/Iterator.php index e24638059..2a2aa6b06 100644 --- a/lib/composer/vendor/phpunit/php-code-coverage/src/Node/Iterator.php +++ b/lib/composer/vendor/phpunit/php-code-coverage/src/Node/Iterator.php @@ -48,7 +48,7 @@ public function rewind() */ public function valid() { - return $this->position < count($this->nodes); + return $this->position < \count($this->nodes); } /** diff --git a/lib/composer/vendor/phpunit/php-code-coverage/src/Report/Clover.php b/lib/composer/vendor/phpunit/php-code-coverage/src/Report/Clover.php index 054b1dfde..358d0ddd8 100644 --- a/lib/composer/vendor/phpunit/php-code-coverage/src/Report/Clover.php +++ b/lib/composer/vendor/phpunit/php-code-coverage/src/Report/Clover.php @@ -37,7 +37,7 @@ public function process(CodeCoverage $coverage, $target = null, $name = null) $xmlProject = $xmlDocument->createElement('project'); $xmlProject->setAttribute('timestamp', (int) $_SERVER['REQUEST_TIME']); - if (is_string($name)) { + if (\is_string($name)) { $xmlProject->setAttribute('name', $name); } @@ -69,12 +69,12 @@ public function process(CodeCoverage $coverage, $target = null, $name = null) $classMethods = 0; foreach ($class['methods'] as $methodName => $method) { - if ($method['executableLines'] == 0) { + if ($method['executableLines'] == 0) { continue; } $classMethods++; - $classStatements += $method['executableLines']; + $classStatements += $method['executableLines']; $coveredClassStatements += $method['executedLines']; if ($method['coverage'] == 100) { @@ -83,9 +83,9 @@ public function process(CodeCoverage $coverage, $target = null, $name = null) $methodCount = 0; - foreach (range($method['startLine'], $method['endLine']) as $line) { + foreach (\range($method['startLine'], $method['endLine']) as $line) { if (isset($coverage[$line]) && ($coverage[$line] !== null)) { - $methodCount = max($methodCount, count($coverage[$line])); + $methodCount = \max($methodCount, \count($coverage[$line])); } } @@ -156,11 +156,11 @@ public function process(CodeCoverage $coverage, $target = null, $name = null) } $lines[$line] = [ - 'count' => count($data), 'type' => 'stmt' + 'count' => \count($data), 'type' => 'stmt' ]; } - ksort($lines); + \ksort($lines); foreach ($lines as $line => $data) { $xmlLine = $xmlDocument->createElement('line'); @@ -222,7 +222,7 @@ public function process(CodeCoverage $coverage, $target = null, $name = null) $linesOfCode = $report->getLinesOfCode(); $xmlMetrics = $xmlDocument->createElement('metrics'); - $xmlMetrics->setAttribute('files', count($report)); + $xmlMetrics->setAttribute('files', \count($report)); $xmlMetrics->setAttribute('loc', $linesOfCode['loc']); $xmlMetrics->setAttribute('ncloc', $linesOfCode['ncloc']); $xmlMetrics->setAttribute('classes', $report->getNumClassesAndTraits()); @@ -239,11 +239,11 @@ public function process(CodeCoverage $coverage, $target = null, $name = null) $buffer = $xmlDocument->saveXML(); if ($target !== null) { - if (!is_dir(dirname($target))) { - mkdir(dirname($target), 0777, true); + if (!\is_dir(\dirname($target))) { + \mkdir(\dirname($target), 0777, true); } - file_put_contents($target, $buffer); + \file_put_contents($target, $buffer); } return $buffer; diff --git a/lib/composer/vendor/phpunit/php-code-coverage/src/Report/Crap4j.php b/lib/composer/vendor/phpunit/php-code-coverage/src/Report/Crap4j.php index 7adf78fe3..3851a27d0 100644 --- a/lib/composer/vendor/phpunit/php-code-coverage/src/Report/Crap4j.php +++ b/lib/composer/vendor/phpunit/php-code-coverage/src/Report/Crap4j.php @@ -11,8 +11,8 @@ namespace SebastianBergmann\CodeCoverage\Report; use SebastianBergmann\CodeCoverage\CodeCoverage; -use SebastianBergmann\CodeCoverage\Node\File; use SebastianBergmann\CodeCoverage\InvalidArgumentException; +use SebastianBergmann\CodeCoverage\Node\File; class Crap4j { @@ -26,7 +26,7 @@ class Crap4j */ public function __construct($threshold = 30) { - if (!is_int($threshold)) { + if (!\is_int($threshold)) { throw InvalidArgumentException::create( 1, 'integer' @@ -51,9 +51,9 @@ public function process(CodeCoverage $coverage, $target = null, $name = null) $root = $document->createElement('crap_result'); $document->appendChild($root); - $project = $document->createElement('project', is_string($name) ? $name : ''); + $project = $document->createElement('project', \is_string($name) ? $name : ''); $root->appendChild($project); - $root->appendChild($document->createElement('timestamp', date('Y-m-d H:i:s', (int) $_SERVER['REQUEST_TIME']))); + $root->appendChild($document->createElement('timestamp', \date('Y-m-d H:i:s', (int) $_SERVER['REQUEST_TIME']))); $stats = $document->createElement('stats'); $methodsNode = $document->createElement('methods'); @@ -82,7 +82,7 @@ public function process(CodeCoverage $coverage, $target = null, $name = null) foreach ($class['methods'] as $methodName => $method) { $crapLoad = $this->getCrapLoad($method['crap'], $method['ccn'], $method['coverage']); - $fullCrap += $method['crap']; + $fullCrap += $method['crap']; $fullCrapLoad += $crapLoad; $fullMethodCount++; @@ -99,12 +99,12 @@ public function process(CodeCoverage $coverage, $target = null, $name = null) $methodNode->appendChild($document->createElement('package', $namespace)); $methodNode->appendChild($document->createElement('className', $className)); $methodNode->appendChild($document->createElement('methodName', $methodName)); - $methodNode->appendChild($document->createElement('methodSignature', htmlspecialchars($method['signature']))); - $methodNode->appendChild($document->createElement('fullMethod', htmlspecialchars($method['signature']))); + $methodNode->appendChild($document->createElement('methodSignature', \htmlspecialchars($method['signature']))); + $methodNode->appendChild($document->createElement('fullMethod', \htmlspecialchars($method['signature']))); $methodNode->appendChild($document->createElement('crap', $this->roundValue($method['crap']))); $methodNode->appendChild($document->createElement('complexity', $method['ccn'])); $methodNode->appendChild($document->createElement('coverage', $this->roundValue($method['coverage']))); - $methodNode->appendChild($document->createElement('crapLoad', round($crapLoad))); + $methodNode->appendChild($document->createElement('crapLoad', \round($crapLoad))); $methodsNode->appendChild($methodNode); } @@ -114,7 +114,7 @@ public function process(CodeCoverage $coverage, $target = null, $name = null) $stats->appendChild($document->createElement('name', 'Method Crap Stats')); $stats->appendChild($document->createElement('methodCount', $fullMethodCount)); $stats->appendChild($document->createElement('crapMethodCount', $fullCrapMethodCount)); - $stats->appendChild($document->createElement('crapLoad', round($fullCrapLoad))); + $stats->appendChild($document->createElement('crapLoad', \round($fullCrapLoad))); $stats->appendChild($document->createElement('totalCrap', $fullCrap)); if ($fullMethodCount > 0) { @@ -131,11 +131,11 @@ public function process(CodeCoverage $coverage, $target = null, $name = null) $buffer = $document->saveXML(); if ($target !== null) { - if (!is_dir(dirname($target))) { - mkdir(dirname($target), 0777, true); + if (!\is_dir(\dirname($target))) { + \mkdir(\dirname($target), 0777, true); } - file_put_contents($target, $buffer); + \file_put_contents($target, $buffer); } return $buffer; @@ -167,6 +167,6 @@ private function getCrapLoad($crapValue, $cyclomaticComplexity, $coveragePercent */ private function roundValue($value) { - return round($value, 2); + return \round($value, 2); } } diff --git a/lib/composer/vendor/phpunit/php-code-coverage/src/Report/Html/Facade.php b/lib/composer/vendor/phpunit/php-code-coverage/src/Report/Html/Facade.php index adcfe4247..ef88041f4 100644 --- a/lib/composer/vendor/phpunit/php-code-coverage/src/Report/Html/Facade.php +++ b/lib/composer/vendor/phpunit/php-code-coverage/src/Report/Html/Facade.php @@ -65,10 +65,10 @@ public function process(CodeCoverage $coverage, $target) unset($coverage); if (!isset($_SERVER['REQUEST_TIME'])) { - $_SERVER['REQUEST_TIME'] = time(); + $_SERVER['REQUEST_TIME'] = \time(); } - $date = date('D M j G:i:s T Y', $_SERVER['REQUEST_TIME']); + $date = \date('D M j G:i:s T Y', $_SERVER['REQUEST_TIME']); $dashboard = new Dashboard( $this->templatePath, @@ -101,17 +101,17 @@ public function process(CodeCoverage $coverage, $target) $id = $node->getId(); if ($node instanceof DirectoryNode) { - if (!file_exists($target . $id)) { - mkdir($target . $id, 0777, true); + if (!\file_exists($target . $id)) { + \mkdir($target . $id, 0777, true); } $directory->render($node, $target . $id . '/index.html'); $dashboard->render($node, $target . $id . '/dashboard.html'); } else { - $dir = dirname($target . $id); + $dir = \dirname($target . $id); - if (!file_exists($dir)) { - mkdir($dir, 0777, true); + if (!\file_exists($dir)) { + \mkdir($dir, 0777, true); } $file->render($node, $target . $id . '.html'); @@ -126,26 +126,37 @@ public function process(CodeCoverage $coverage, $target) */ private function copyFiles($target) { - $dir = $this->getDirectory($target . 'css'); - copy($this->templatePath . 'css/bootstrap.min.css', $dir . 'bootstrap.min.css'); - copy($this->templatePath . 'css/nv.d3.min.css', $dir . 'nv.d3.min.css'); - copy($this->templatePath . 'css/style.css', $dir . 'style.css'); - - $dir = $this->getDirectory($target . 'fonts'); - copy($this->templatePath . 'fonts/glyphicons-halflings-regular.eot', $dir . 'glyphicons-halflings-regular.eot'); - copy($this->templatePath . 'fonts/glyphicons-halflings-regular.svg', $dir . 'glyphicons-halflings-regular.svg'); - copy($this->templatePath . 'fonts/glyphicons-halflings-regular.ttf', $dir . 'glyphicons-halflings-regular.ttf'); - copy($this->templatePath . 'fonts/glyphicons-halflings-regular.woff', $dir . 'glyphicons-halflings-regular.woff'); - copy($this->templatePath . 'fonts/glyphicons-halflings-regular.woff2', $dir . 'glyphicons-halflings-regular.woff2'); - - $dir = $this->getDirectory($target . 'js'); - copy($this->templatePath . 'js/bootstrap.min.js', $dir . 'bootstrap.min.js'); - copy($this->templatePath . 'js/d3.min.js', $dir . 'd3.min.js'); - copy($this->templatePath . 'js/holder.min.js', $dir . 'holder.min.js'); - copy($this->templatePath . 'js/html5shiv.min.js', $dir . 'html5shiv.min.js'); - copy($this->templatePath . 'js/jquery.min.js', $dir . 'jquery.min.js'); - copy($this->templatePath . 'js/nv.d3.min.js', $dir . 'nv.d3.min.js'); - copy($this->templatePath . 'js/respond.min.js', $dir . 'respond.min.js'); + $dir = $this->getDirectory($target . '.css'); + + \file_put_contents( + $dir . 'bootstrap.min.css', + \str_replace( + 'url(../fonts/', + 'url(../.fonts/', + \file_get_contents($this->templatePath . 'css/bootstrap.min.css') + ) + + ); + + \copy($this->templatePath . 'css/nv.d3.min.css', $dir . 'nv.d3.min.css'); + \copy($this->templatePath . 'css/style.css', $dir . 'style.css'); + + $dir = $this->getDirectory($target . '.fonts'); + \copy($this->templatePath . 'fonts/glyphicons-halflings-regular.eot', $dir . 'glyphicons-halflings-regular.eot'); + \copy($this->templatePath . 'fonts/glyphicons-halflings-regular.svg', $dir . 'glyphicons-halflings-regular.svg'); + \copy($this->templatePath . 'fonts/glyphicons-halflings-regular.ttf', $dir . 'glyphicons-halflings-regular.ttf'); + \copy($this->templatePath . 'fonts/glyphicons-halflings-regular.woff', $dir . 'glyphicons-halflings-regular.woff'); + \copy($this->templatePath . 'fonts/glyphicons-halflings-regular.woff2', $dir . 'glyphicons-halflings-regular.woff2'); + + $dir = $this->getDirectory($target . '.js'); + \copy($this->templatePath . 'js/bootstrap.min.js', $dir . 'bootstrap.min.js'); + \copy($this->templatePath . 'js/d3.min.js', $dir . 'd3.min.js'); + \copy($this->templatePath . 'js/holder.min.js', $dir . 'holder.min.js'); + \copy($this->templatePath . 'js/html5shiv.min.js', $dir . 'html5shiv.min.js'); + \copy($this->templatePath . 'js/jquery.min.js', $dir . 'jquery.min.js'); + \copy($this->templatePath . 'js/nv.d3.min.js', $dir . 'nv.d3.min.js'); + \copy($this->templatePath . 'js/respond.min.js', $dir . 'respond.min.js'); + \copy($this->templatePath . 'js/file.js', $dir . 'file.js'); } /** @@ -157,20 +168,20 @@ private function copyFiles($target) */ private function getDirectory($directory) { - if (substr($directory, -1, 1) != DIRECTORY_SEPARATOR) { + if (\substr($directory, -1, 1) != DIRECTORY_SEPARATOR) { $directory .= DIRECTORY_SEPARATOR; } - if (is_dir($directory)) { + if (\is_dir($directory)) { return $directory; } - if (@mkdir($directory, 0777, true)) { + if (@\mkdir($directory, 0777, true)) { return $directory; } throw new RuntimeException( - sprintf( + \sprintf( 'Directory "%s" does not exist.', $directory ) diff --git a/lib/composer/vendor/phpunit/php-code-coverage/src/Report/Html/Renderer.php b/lib/composer/vendor/phpunit/php-code-coverage/src/Report/Html/Renderer.php index 7f5af8bb8..1732161f0 100644 --- a/lib/composer/vendor/phpunit/php-code-coverage/src/Report/Html/Renderer.php +++ b/lib/composer/vendor/phpunit/php-code-coverage/src/Report/Html/Renderer.php @@ -11,10 +11,10 @@ namespace SebastianBergmann\CodeCoverage\Report\Html; use SebastianBergmann\CodeCoverage\Node\AbstractNode; -use SebastianBergmann\CodeCoverage\Node\File as FileNode; use SebastianBergmann\CodeCoverage\Node\Directory as DirectoryNode; +use SebastianBergmann\CodeCoverage\Node\File as FileNode; +use SebastianBergmann\CodeCoverage\Version; use SebastianBergmann\Environment\Runtime; -use SebastianBergmann\Version; /** * Base class for node renderers. @@ -62,14 +62,12 @@ abstract class Renderer */ public function __construct($templatePath, $generator, $date, $lowUpperBound, $highLowerBound) { - $version = new Version('4.0.2', dirname(dirname(dirname(dirname(__DIR__))))); - $this->templatePath = $templatePath; $this->generator = $generator; $this->date = $date; $this->lowUpperBound = $lowUpperBound; $this->highLowerBound = $highLowerBound; - $this->version = $version->getVersion(); + $this->version = Version::id(); } /** @@ -92,9 +90,10 @@ protected function renderItemTemplate(\Text_Template $template, array $data) $data['testedClassesPercent'] ); } else { - $classesLevel = 'success'; - $classesNumber = '0' . $numSeparator . '0'; - $classesBar = $this->getCoverageBar(100); + $classesLevel = ''; + $classesNumber = '0' . $numSeparator . '0'; + $classesBar = ''; + $data['testedClassesPercentAsString'] = 'n/a'; } if ($data['numMethods'] > 0) { @@ -107,10 +106,10 @@ protected function renderItemTemplate(\Text_Template $template, array $data) $data['testedMethodsPercent'] ); } else { - $methodsLevel = 'success'; + $methodsLevel = ''; $methodsNumber = '0' . $numSeparator . '0'; - $methodsBar = $this->getCoverageBar(100); - $data['testedMethodsPercentAsString'] = '100.00%'; + $methodsBar = ''; + $data['testedMethodsPercentAsString'] = 'n/a'; } if ($data['numExecutableLines'] > 0) { @@ -123,10 +122,10 @@ protected function renderItemTemplate(\Text_Template $template, array $data) $data['linesExecutedPercent'] ); } else { - $linesLevel = 'success'; + $linesLevel = ''; $linesNumber = '0' . $numSeparator . '0'; - $linesBar = $this->getCoverageBar(100); - $data['linesExecutedPercentAsString'] = '100.00%'; + $linesBar = ''; + $data['linesExecutedPercentAsString'] = 'n/a'; } $template->setVar( @@ -179,21 +178,21 @@ protected function getBreadcrumbs(AbstractNode $node) $breadcrumbs = ''; $path = $node->getPathAsArray(); $pathToRoot = []; - $max = count($path); + $max = \count($path); if ($node instanceof FileNode) { $max--; } for ($i = 0; $i < $max; $i++) { - $pathToRoot[] = str_repeat('../', $i); + $pathToRoot[] = \str_repeat('../', $i); } foreach ($path as $step) { if ($step !== $node) { $breadcrumbs .= $this->getInactiveBreadcrumb( $step, - array_pop($pathToRoot) + \array_pop($pathToRoot) ); } else { $breadcrumbs .= $this->getActiveBreadcrumb($step); @@ -205,7 +204,7 @@ protected function getBreadcrumbs(AbstractNode $node) protected function getActiveBreadcrumb(AbstractNode $node) { - $buffer = sprintf( + $buffer = \sprintf( '
  • %s
  • ' . "\n", $node->getName() ); @@ -219,7 +218,7 @@ protected function getActiveBreadcrumb(AbstractNode $node) protected function getInactiveBreadcrumb(AbstractNode $node, $pathToRoot) { - return sprintf( + return \sprintf( '
  • %s
  • ' . "\n", $pathToRoot, $node->getName() @@ -229,14 +228,14 @@ protected function getInactiveBreadcrumb(AbstractNode $node, $pathToRoot) protected function getPathToRoot(AbstractNode $node) { $id = $node->getId(); - $depth = substr_count($id, '/'); + $depth = \substr_count($id, '/'); if ($id != 'index' && $node instanceof DirectoryNode) { $depth++; } - return str_repeat('../', $depth); + return \str_repeat('../', $depth); } protected function getCoverageBar($percent) @@ -249,7 +248,7 @@ protected function getCoverageBar($percent) '}}' ); - $template->setVar(['level' => $level, 'percent' => sprintf('%.2F', $percent)]); + $template->setVar(['level' => $level, 'percent' => \sprintf('%.2F', $percent)]); return $template->render(); } @@ -264,7 +263,7 @@ protected function getColorLevel($percent) if ($percent <= $this->lowUpperBound) { return 'danger'; } elseif ($percent > $this->lowUpperBound && - $percent < $this->highLowerBound) { + $percent < $this->highLowerBound) { return 'warning'; } else { return 'success'; @@ -278,7 +277,7 @@ private function getRuntimeString() { $runtime = new Runtime; - $buffer = sprintf( + $buffer = \sprintf( '%s %s', $runtime->getVendorUrl(), $runtime->getName(), @@ -286,9 +285,9 @@ private function getRuntimeString() ); if ($runtime->hasXdebug() && !$runtime->hasPHPDBGCodeCoverage()) { - $buffer .= sprintf( + $buffer .= \sprintf( ' with Xdebug %s', - phpversion('xdebug') + \phpversion('xdebug') ); } diff --git a/lib/composer/vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Dashboard.php b/lib/composer/vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Dashboard.php index 7cde17559..0ca7b4203 100644 --- a/lib/composer/vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Dashboard.php +++ b/lib/composer/vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Dashboard.php @@ -21,6 +21,8 @@ class Dashboard extends Renderer /** * @param DirectoryNode $node * @param string $file + * + * @throws \InvalidArgumentException */ public function render(DirectoryNode $node, $file) { @@ -69,16 +71,16 @@ protected function complexity(array $classes, $baseLink) foreach ($classes as $className => $class) { foreach ($class['methods'] as $methodName => $method) { - if ($className != '*') { + if ($className !== '*') { $methodName = $className . '::' . $methodName; } $result['method'][] = [ $method['coverage'], $method['ccn'], - sprintf( + \sprintf( '%s', - str_replace($baseLink, '', $method['link']), + \str_replace($baseLink, '', $method['link']), $methodName ) ]; @@ -87,17 +89,17 @@ protected function complexity(array $classes, $baseLink) $result['class'][] = [ $class['coverage'], $class['ccn'], - sprintf( + \sprintf( '%s', - str_replace($baseLink, '', $class['link']), + \str_replace($baseLink, '', $class['link']), $className ) ]; } return [ - 'class' => json_encode($result['class']), - 'method' => json_encode($result['method']) + 'class' => \json_encode($result['class']), + 'method' => \json_encode($result['method']) ]; } @@ -143,31 +145,31 @@ protected function coverageDistribution(array $classes) foreach ($classes as $class) { foreach ($class['methods'] as $methodName => $method) { - if ($method['coverage'] == 0) { + if ($method['coverage'] === 0) { $result['method']['0%']++; - } elseif ($method['coverage'] == 100) { + } elseif ($method['coverage'] === 100) { $result['method']['100%']++; } else { - $key = floor($method['coverage'] / 10) * 10; + $key = \floor($method['coverage'] / 10) * 10; $key = $key . '-' . ($key + 10) . '%'; $result['method'][$key]++; } } - if ($class['coverage'] == 0) { + if ($class['coverage'] === 0) { $result['class']['0%']++; - } elseif ($class['coverage'] == 100) { + } elseif ($class['coverage'] === 100) { $result['class']['100%']++; } else { - $key = floor($class['coverage'] / 10) * 10; + $key = \floor($class['coverage'] / 10) * 10; $key = $key . '-' . ($key + 10) . '%'; $result['class'][$key]++; } } return [ - 'class' => json_encode(array_values($result['class'])), - 'method' => json_encode(array_values($result['method'])) + 'class' => \json_encode(\array_values($result['class'])), + 'method' => \json_encode(\array_values($result['method'])) ]; } @@ -188,10 +190,10 @@ protected function insufficientCoverage(array $classes, $baseLink) foreach ($classes as $className => $class) { foreach ($class['methods'] as $methodName => $method) { if ($method['coverage'] < $this->highLowerBound) { - if ($className != '*') { + $key = $methodName; + + if ($className !== '*') { $key = $className . '::' . $methodName; - } else { - $key = $methodName; } $leastTestedMethods[$key] = $method['coverage']; @@ -203,24 +205,24 @@ protected function insufficientCoverage(array $classes, $baseLink) } } - asort($leastTestedClasses); - asort($leastTestedMethods); + \asort($leastTestedClasses); + \asort($leastTestedMethods); foreach ($leastTestedClasses as $className => $coverage) { - $result['class'] .= sprintf( + $result['class'] .= \sprintf( ' %s%d%%' . "\n", - str_replace($baseLink, '', $classes[$className]['link']), + \str_replace($baseLink, '', $classes[$className]['link']), $className, $coverage ); } foreach ($leastTestedMethods as $methodName => $coverage) { - list($class, $method) = explode('::', $methodName); + list($class, $method) = \explode('::', $methodName); - $result['method'] .= sprintf( + $result['method'] .= \sprintf( ' %s%d%%' . "\n", - str_replace($baseLink, '', $classes[$class]['methods'][$method]['link']), + \str_replace($baseLink, '', $classes[$class]['methods'][$method]['link']), $methodName, $method, $coverage @@ -248,7 +250,7 @@ protected function projectRisks(array $classes, $baseLink) foreach ($class['methods'] as $methodName => $method) { if ($method['coverage'] < $this->highLowerBound && $method['ccn'] > 1) { - if ($className != '*') { + if ($className !== '*') { $key = $className . '::' . $methodName; } else { $key = $methodName; @@ -259,29 +261,29 @@ protected function projectRisks(array $classes, $baseLink) } if ($class['coverage'] < $this->highLowerBound && - $class['ccn'] > count($class['methods'])) { + $class['ccn'] > \count($class['methods'])) { $classRisks[$className] = $class['crap']; } } - arsort($classRisks); - arsort($methodRisks); + \arsort($classRisks); + \arsort($methodRisks); foreach ($classRisks as $className => $crap) { - $result['class'] .= sprintf( + $result['class'] .= \sprintf( ' %s%d' . "\n", - str_replace($baseLink, '', $classes[$className]['link']), + \str_replace($baseLink, '', $classes[$className]['link']), $className, $crap ); } foreach ($methodRisks as $methodName => $crap) { - list($class, $method) = explode('::', $methodName); + list($class, $method) = \explode('::', $methodName); - $result['method'] .= sprintf( + $result['method'] .= \sprintf( ' %s%d' . "\n", - str_replace($baseLink, '', $classes[$class]['methods'][$method]['link']), + \str_replace($baseLink, '', $classes[$class]['methods'][$method]['link']), $methodName, $method, $crap @@ -293,7 +295,7 @@ protected function projectRisks(array $classes, $baseLink) protected function getActiveBreadcrumb(AbstractNode $node) { - return sprintf( + return \sprintf( '
  • %s
  • ' . "\n" . '
  • (Dashboard)
  • ' . "\n", $node->getName() diff --git a/lib/composer/vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Directory.php b/lib/composer/vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Directory.php index a4b1b96f4..59e5a3b3f 100644 --- a/lib/composer/vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Directory.php +++ b/lib/composer/vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Directory.php @@ -59,14 +59,14 @@ protected function renderItem(Node $node, $total = false) $data = [ 'numClasses' => $node->getNumClassesAndTraits(), 'numTestedClasses' => $node->getNumTestedClassesAndTraits(), - 'numMethods' => $node->getNumMethods(), - 'numTestedMethods' => $node->getNumTestedMethods(), + 'numMethods' => $node->getNumFunctionsAndMethods(), + 'numTestedMethods' => $node->getNumTestedFunctionsAndMethods(), 'linesExecutedPercent' => $node->getLineExecutedPercent(false), 'linesExecutedPercentAsString' => $node->getLineExecutedPercent(), 'numExecutedLines' => $node->getNumExecutedLines(), 'numExecutableLines' => $node->getNumExecutableLines(), - 'testedMethodsPercent' => $node->getTestedMethodsPercent(false), - 'testedMethodsPercentAsString' => $node->getTestedMethodsPercent(), + 'testedMethodsPercent' => $node->getTestedFunctionsAndMethodsPercent(false), + 'testedMethodsPercentAsString' => $node->getTestedFunctionsAndMethodsPercent(), 'testedClassesPercent' => $node->getTestedClassesAndTraitsPercent(false), 'testedClassesPercentAsString' => $node->getTestedClassesAndTraitsPercent() ]; @@ -75,7 +75,7 @@ protected function renderItem(Node $node, $total = false) $data['name'] = 'Total'; } else { if ($node instanceof DirectoryNode) { - $data['name'] = sprintf( + $data['name'] = \sprintf( '%s', $node->getName(), $node->getName() @@ -83,7 +83,7 @@ protected function renderItem(Node $node, $total = false) $data['icon'] = ' '; } else { - $data['name'] = sprintf( + $data['name'] = \sprintf( '%s', $node->getName(), $node->getName() diff --git a/lib/composer/vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/File.php b/lib/composer/vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/File.php index e6b11ef03..8e8bacde6 100644 --- a/lib/composer/vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/File.php +++ b/lib/composer/vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/File.php @@ -88,14 +88,14 @@ protected function renderItems(FileNode $node) 'name' => 'Total', 'numClasses' => $node->getNumClassesAndTraits(), 'numTestedClasses' => $node->getNumTestedClassesAndTraits(), - 'numMethods' => $node->getNumMethods(), - 'numTestedMethods' => $node->getNumTestedMethods(), + 'numMethods' => $node->getNumFunctionsAndMethods(), + 'numTestedMethods' => $node->getNumTestedFunctionsAndMethods(), 'linesExecutedPercent' => $node->getLineExecutedPercent(false), 'linesExecutedPercentAsString' => $node->getLineExecutedPercent(), 'numExecutedLines' => $node->getNumExecutedLines(), 'numExecutableLines' => $node->getNumExecutableLines(), - 'testedMethodsPercent' => $node->getTestedMethodsPercent(false), - 'testedMethodsPercentAsString' => $node->getTestedMethodsPercent(), + 'testedMethodsPercent' => $node->getTestedFunctionsAndMethodsPercent(false), + 'testedMethodsPercentAsString' => $node->getTestedFunctionsAndMethodsPercent(), 'testedClassesPercent' => $node->getTestedClassesAndTraitsPercent(false), 'testedClassesPercentAsString' => $node->getTestedClassesAndTraitsPercent(), 'crap' => 'CRAP' @@ -138,7 +138,7 @@ protected function renderTraitOrClassItems(array $items, \Text_Template $templat $buffer = ''; foreach ($items as $name => $item) { - $numMethods = count($item['methods']); + $numMethods = \count($item['methods']); $numTestedMethods = 0; foreach ($item['methods'] as $method) { @@ -147,12 +147,26 @@ protected function renderTraitOrClassItems(array $items, \Text_Template $templat } } + if ($item['executableLines'] > 0) { + $numClasses = 1; + $numTestedClasses = $numTestedMethods == $numMethods ? 1 : 0; + $linesExecutedPercentAsString = Util::percent( + $item['executedLines'], + $item['executableLines'], + true + ); + } else { + $numClasses = 'n/a'; + $numTestedClasses = 'n/a'; + $linesExecutedPercentAsString = 'n/a'; + } + $buffer .= $this->renderItemTemplate( $template, [ 'name' => $name, - 'numClasses' => 1, - 'numTestedClasses' => $numTestedMethods == $numMethods ? 1 : 0, + 'numClasses' => $numClasses, + 'numTestedClasses' => $numTestedClasses, 'numMethods' => $numMethods, 'numTestedMethods' => $numTestedMethods, 'linesExecutedPercent' => Util::percent( @@ -160,11 +174,7 @@ protected function renderTraitOrClassItems(array $items, \Text_Template $templat $item['executableLines'], false ), - 'linesExecutedPercentAsString' => Util::percent( - $item['executedLines'], - $item['executableLines'], - true - ), + 'linesExecutedPercentAsString' => $linesExecutedPercentAsString, 'numExecutedLines' => $item['executedLines'], 'numExecutableLines' => $item['executableLines'], 'testedMethodsPercent' => Util::percent( @@ -239,11 +249,11 @@ protected function renderFunctionOrMethodItem(\Text_Template $template, array $i return $this->renderItemTemplate( $template, [ - 'name' => sprintf( + 'name' => \sprintf( '%s%s', $indent, $item['startLine'], - htmlspecialchars($item['signature']), + \htmlspecialchars($item['signature']), isset($item['functionName']) ? $item['functionName'] : $item['methodName'] ), 'numMethods' => 1, @@ -293,8 +303,8 @@ protected function renderSource(FileNode $node) $popoverContent = ''; $popoverTitle = ''; - if (array_key_exists($i, $coverageData)) { - $numTests = count($coverageData[$i]); + if (\array_key_exists($i, $coverageData)) { + $numTests = ($coverageData[$i] ? \count($coverageData[$i]) : 0); if ($coverageData[$i] === null) { $trClass = ' class="warning"'; @@ -322,39 +332,46 @@ protected function renderSource(FileNode $node) switch ($testData[$test]['size']) { case 'small': $testCSS = ' class="covered-by-small-tests"'; + break; case 'medium': $testCSS = ' class="covered-by-medium-tests"'; + break; default: $testCSS = ' class="covered-by-large-tests"'; + break; } + break; case 1: case 2: $testCSS = ' class="warning"'; + break; case 3: $testCSS = ' class="danger"'; + break; case 4: $testCSS = ' class="danger"'; + break; default: $testCSS = ''; } - $popoverContent .= sprintf( + $popoverContent .= \sprintf( '%s', $testCSS, - htmlspecialchars($test) + \htmlspecialchars($test) ); } @@ -364,16 +381,16 @@ protected function renderSource(FileNode $node) } if (!empty($popoverTitle)) { - $popover = sprintf( + $popover = \sprintf( ' data-title="%s" data-content="%s" data-placement="bottom" data-html="true"', $popoverTitle, - htmlspecialchars($popoverContent) + \htmlspecialchars($popoverContent) ); } else { $popover = ''; } - $lines .= sprintf( + $lines .= \sprintf( ' %s' . "\n", $trClass, $popover, @@ -396,28 +413,28 @@ protected function renderSource(FileNode $node) */ protected function loadFile($file) { - $buffer = file_get_contents($file); - $tokens = token_get_all($buffer); + $buffer = \file_get_contents($file); + $tokens = \token_get_all($buffer); $result = ['']; $i = 0; $stringFlag = false; - $fileEndsWithNewLine = substr($buffer, -1) == "\n"; + $fileEndsWithNewLine = \substr($buffer, -1) == "\n"; unset($buffer); foreach ($tokens as $j => $token) { - if (is_string($token)) { + if (\is_string($token)) { if ($token === '"' && $tokens[$j - 1] !== '\\') { - $result[$i] .= sprintf( + $result[$i] .= \sprintf( '%s', - htmlspecialchars($token) + \htmlspecialchars($token) ); $stringFlag = !$stringFlag; } else { - $result[$i] .= sprintf( + $result[$i] .= \sprintf( '%s', - htmlspecialchars($token) + \htmlspecialchars($token) ); } @@ -426,19 +443,19 @@ protected function loadFile($file) list($token, $value) = $token; - $value = str_replace( + $value = \str_replace( ["\t", ' '], ['    ', ' '], - htmlspecialchars($value, $this->htmlspecialcharsFlags) + \htmlspecialchars($value, $this->htmlspecialcharsFlags) ); if ($value === "\n") { $result[++$i] = ''; } else { - $lines = explode("\n", $value); + $lines = \explode("\n", $value); foreach ($lines as $jj => $line) { - $line = trim($line); + $line = \trim($line); if ($line !== '') { if ($stringFlag) { @@ -447,11 +464,13 @@ protected function loadFile($file) switch ($token) { case T_INLINE_HTML: $colour = 'html'; + break; case T_COMMENT: case T_DOC_COMMENT: $colour = 'comment'; + break; case T_ABSTRACT: @@ -511,6 +530,7 @@ protected function loadFile($file) case T_WHILE: case T_YIELD: $colour = 'keyword'; + break; default: @@ -518,7 +538,7 @@ protected function loadFile($file) } } - $result[$i] .= sprintf( + $result[$i] .= \sprintf( '%s', $colour, $line @@ -533,7 +553,7 @@ protected function loadFile($file) } if ($fileEndsWithNewLine) { - unset($result[count($result)-1]); + unset($result[\count($result) - 1]); } return $result; diff --git a/lib/composer/vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/css/bootstrap.min.css b/lib/composer/vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/css/bootstrap.min.css index 4cf729e43..ed3905e0e 100644 --- a/lib/composer/vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/css/bootstrap.min.css +++ b/lib/composer/vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/css/bootstrap.min.css @@ -1,6 +1,6 @@ /*! - * Bootstrap v3.3.6 (http://getbootstrap.com) - * Copyright 2011-2015 Twitter, Inc. + * Bootstrap v3.3.7 (http://getbootstrap.com) + * Copyright 2011-2016 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - *//*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0;font-size:2em}mark{color:#000;background:#ff0}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid silver}legend{padding:0;border:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,:after,:before{color:#000!important;text-shadow:none!important;background:0 0!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.woff2) format('woff2'),url(../fonts/glyphicons-halflings-regular.woff) format('woff'),url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\002a"}.glyphicon-plus:before{content:"\002b"}.glyphicon-eur:before,.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-cd:before{content:"\e201"}.glyphicon-save-file:before{content:"\e202"}.glyphicon-open-file:before{content:"\e203"}.glyphicon-level-up:before{content:"\e204"}.glyphicon-copy:before{content:"\e205"}.glyphicon-paste:before{content:"\e206"}.glyphicon-alert:before{content:"\e209"}.glyphicon-equalizer:before{content:"\e210"}.glyphicon-king:before{content:"\e211"}.glyphicon-queen:before{content:"\e212"}.glyphicon-pawn:before{content:"\e213"}.glyphicon-bishop:before{content:"\e214"}.glyphicon-knight:before{content:"\e215"}.glyphicon-baby-formula:before{content:"\e216"}.glyphicon-tent:before{content:"\26fa"}.glyphicon-blackboard:before{content:"\e218"}.glyphicon-bed:before{content:"\e219"}.glyphicon-apple:before{content:"\f8ff"}.glyphicon-erase:before{content:"\e221"}.glyphicon-hourglass:before{content:"\231b"}.glyphicon-lamp:before{content:"\e223"}.glyphicon-duplicate:before{content:"\e224"}.glyphicon-piggy-bank:before{content:"\e225"}.glyphicon-scissors:before{content:"\e226"}.glyphicon-bitcoin:before{content:"\e227"}.glyphicon-btc:before{content:"\e227"}.glyphicon-xbt:before{content:"\e227"}.glyphicon-yen:before{content:"\00a5"}.glyphicon-jpy:before{content:"\00a5"}.glyphicon-ruble:before{content:"\20bd"}.glyphicon-rub:before{content:"\20bd"}.glyphicon-scale:before{content:"\e230"}.glyphicon-ice-lolly:before{content:"\e231"}.glyphicon-ice-lolly-tasted:before{content:"\e232"}.glyphicon-education:before{content:"\e233"}.glyphicon-option-horizontal:before{content:"\e234"}.glyphicon-option-vertical:before{content:"\e235"}.glyphicon-menu-hamburger:before{content:"\e236"}.glyphicon-modal-window:before{content:"\e237"}.glyphicon-oil:before{content:"\e238"}.glyphicon-grain:before{content:"\e239"}.glyphicon-sunglasses:before{content:"\e240"}.glyphicon-text-size:before{content:"\e241"}.glyphicon-text-color:before{content:"\e242"}.glyphicon-text-background:before{content:"\e243"}.glyphicon-object-align-top:before{content:"\e244"}.glyphicon-object-align-bottom:before{content:"\e245"}.glyphicon-object-align-horizontal:before{content:"\e246"}.glyphicon-object-align-left:before{content:"\e247"}.glyphicon-object-align-vertical:before{content:"\e248"}.glyphicon-object-align-right:before{content:"\e249"}.glyphicon-triangle-right:before{content:"\e250"}.glyphicon-triangle-left:before{content:"\e251"}.glyphicon-triangle-bottom:before{content:"\e252"}.glyphicon-triangle-top:before{content:"\e253"}.glyphicon-console:before{content:"\e254"}.glyphicon-superscript:before{content:"\e255"}.glyphicon-subscript:before{content:"\e256"}.glyphicon-menu-left:before{content:"\e257"}.glyphicon-menu-right:before{content:"\e258"}.glyphicon-menu-down:before{content:"\e259"}.glyphicon-menu-up:before{content:"\e260"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:focus,a:hover{color:#23527c;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.carousel-inner>.item>a>img,.carousel-inner>.item>img,.img-responsive,.thumbnail a>img,.thumbnail>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;max-width:100%;height:auto;padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role=button]{cursor:pointer}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#777}.h1,.h2,.h3,h1,h2,h3{margin-top:20px;margin-bottom:10px}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{font-size:65%}.h4,.h5,.h6,h4,h5,h6{margin-top:10px;margin-bottom:10px}.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-size:75%}.h1,h1{font-size:36px}.h2,h2{font-size:30px}.h3,h3{font-size:24px}.h4,h4{font-size:18px}.h5,h5{font-size:14px}.h6,h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}.small,small{font-size:85%}.mark,mark{padding:.2em;background-color:#fcf8e3}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:focus,a.text-primary:hover{color:#286090}.text-success{color:#3c763d}a.text-success:focus,a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:focus,a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:focus,a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:focus,a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:focus,a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:focus,a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:focus,a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:focus,a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:focus,a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ol,ul{margin-top:0;margin-bottom:10px}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;margin-left:-5px;list-style:none}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-top:0;margin-bottom:20px}dd,dt{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[data-original-title],abbr[title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child{margin-bottom:0}blockquote .small,blockquote footer,blockquote small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote .small:before,blockquote footer:before,blockquote small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{content:''}.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{content:'\00A0 \2014'}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;font-weight:700;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{margin-right:-15px;margin-left:-15px}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ddd}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#f5f5f5}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#f5f5f5}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#e8e8e8}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#dff0d8}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#d0e9c6}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#d9edf7}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#c4e3f3}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fcf8e3}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#faf2cc}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#f2dede}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ebcccc}.table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=checkbox],input[type=radio]{margin:4px 0 0;margin-top:1px\9;line-height:normal}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=checkbox]:focus,input[type=radio]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control::-ms-expand{background-color:transparent;border:0}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date].form-control,input[type=time].form-control,input[type=datetime-local].form-control,input[type=month].form-control{line-height:34px}.input-group-sm input[type=date],.input-group-sm input[type=time],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px}.input-group-lg input[type=date],.input-group-lg input[type=time],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:46px}}.form-group{margin-bottom:15px}.checkbox,.radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.checkbox label,.radio label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;margin-top:4px\9;margin-left:-20px}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}.checkbox-inline.disabled,.radio-inline.disabled,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio-inline{cursor:not-allowed}.checkbox.disabled label,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .radio label{cursor:not-allowed}.form-control-static{min-height:34px;padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}select[multiple].input-sm,textarea.input-sm{height:auto}.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.form-group-sm select.form-control{height:30px;line-height:30px}.form-group-sm select[multiple].form-control,.form-group-sm textarea.form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:6px 10px;font-size:12px;line-height:1.5}.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-lg{height:46px;line-height:46px}select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.form-group-lg select.form-control{height:46px;line-height:46px}.form-group-lg select[multiple].form-control,.form-group-lg textarea.form-control{height:auto}.form-group-lg .form-control-static{height:46px;min-height:38px;padding:11px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.form-group-lg .form-control+.form-control-feedback,.input-group-lg+.form-control-feedback,.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.form-group-sm .form-control+.form-control-feedback,.input-group-sm+.form-control-feedback,.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-success .form-control-feedback{color:#3c763d}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .checkbox,.form-horizontal .radio{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:11px;font-size:18px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:12px}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:none;border:1px solid transparent;border-radius:4px}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.focus,.btn:focus,.btn:hover{color:#333;text-decoration:none}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none;opacity:.65}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default.focus,.btn-default:focus{color:#333;background-color:#e6e6e6;border-color:#8c8c8c}.btn-default:hover{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active.focus,.btn-default.active:focus,.btn-default.active:hover,.btn-default:active.focus,.btn-default:active:focus,.btn-default:active:hover,.open>.dropdown-toggle.btn-default.focus,.open>.dropdown-toggle.btn-default:focus,.open>.dropdown-toggle.btn-default:hover{color:#333;background-color:#d4d4d4;border-color:#8c8c8c}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled.focus,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled].focus,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#286090;border-color:#122b40}.btn-primary:hover{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active.focus,.btn-primary.active:focus,.btn-primary.active:hover,.btn-primary:active.focus,.btn-primary:active:focus,.btn-primary:active:hover,.open>.dropdown-toggle.btn-primary.focus,.open>.dropdown-toggle.btn-primary:focus,.open>.dropdown-toggle.btn-primary:hover{color:#fff;background-color:#204d74;border-color:#122b40}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled.focus,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled].focus,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#449d44;border-color:#255625}.btn-success:hover{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active.focus,.btn-success.active:focus,.btn-success.active:hover,.btn-success:active.focus,.btn-success:active:focus,.btn-success:active:hover,.open>.dropdown-toggle.btn-success.focus,.open>.dropdown-toggle.btn-success:focus,.open>.dropdown-toggle.btn-success:hover{color:#fff;background-color:#398439;border-color:#255625}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled.focus,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled].focus,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#31b0d5;border-color:#1b6d85}.btn-info:hover{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active.focus,.btn-info.active:focus,.btn-info.active:hover,.btn-info:active.focus,.btn-info:active:focus,.btn-info:active:hover,.open>.dropdown-toggle.btn-info.focus,.open>.dropdown-toggle.btn-info:focus,.open>.dropdown-toggle.btn-info:hover{color:#fff;background-color:#269abc;border-color:#1b6d85}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled.focus,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled].focus,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning.focus,.btn-warning:focus{color:#fff;background-color:#ec971f;border-color:#985f0d}.btn-warning:hover{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active.focus,.btn-warning.active:focus,.btn-warning.active:hover,.btn-warning:active.focus,.btn-warning:active:focus,.btn-warning:active:hover,.open>.dropdown-toggle.btn-warning.focus,.open>.dropdown-toggle.btn-warning:focus,.open>.dropdown-toggle.btn-warning:hover{color:#fff;background-color:#d58512;border-color:#985f0d}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled.focus,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled].focus,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#c9302c;border-color:#761c19}.btn-danger:hover{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active.focus,.btn-danger.active:focus,.btn-danger.active:hover,.btn-danger:active.focus,.btn-danger:active:focus,.btn-danger:active:hover,.open>.dropdown-toggle.btn-danger.focus,.open>.dropdown-toggle.btn-danger:focus,.open>.dropdown-toggle.btn-danger:hover{color:#fff;background-color:#ac2925;border-color:#761c19}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled.focus,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled].focus,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#337ab7;border-radius:0}.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#777;text-decoration:none}.btn-group-lg>.btn,.btn-lg{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-group-sm>.btn,.btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-xs>.btn,.btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;-webkit-transition-property:height,visibility;-o-transition-property:height,visibility;transition-property:height,visibility}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid\9;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown,.dropup{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;background-color:#337ab7;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#777}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px dashed;border-bottom:4px solid\9}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;float:left}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group .form-control:focus{z-index:3}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn,textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn,textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{z-index:2;margin-left:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#eee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#337ab7}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1)}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-right:0;padding-left:0}}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-bottom,.navbar-fixed-top{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;height:50px;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1)}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .checkbox label,.navbar-form .radio label{padding-left:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{color:#333}.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover{color:#fff}.navbar-inverse .btn-link[disabled]:focus,.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-inverse .btn-link:hover{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#337ab7;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{z-index:2;color:#23527c;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{z-index:3;color:#fff;cursor:default;background-color:#337ab7;border-color:#337ab7}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px;line-height:1.3333333}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px;line-height:1.5}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:focus,.pager li>a:hover{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{color:#777;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:focus,a.label:hover{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:focus,.label-default[href]:hover{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:focus,.label-success[href]:hover{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:focus,.label-info[href]:hover{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-group-xs>.btn .badge,.btn-xs .badge{top:0;padding:1px 5px}a.badge:focus,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding-top:30px;padding-bottom:30px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron .h1,.jumbotron h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{padding-right:15px;padding-left:15px;border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron,.container-fluid .jumbotron{padding-right:60px;padding-left:60px}.jumbotron .h1,.jumbotron h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail a>img,.thumbnail>img{margin-right:auto;margin-left:auto}a.thumbnail.active,a.thumbnail:focus,a.thumbnail:hover{border-color:#337ab7}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-bar-striped,.progress-striped .progress-bar{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress-bar.active,.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{overflow:hidden;zoom:1}.media-body{width:10000px}.media-object{display:block}.media-object.img-thumbnail{max-width:none}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-body,.media-left,.media-right{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item,button.list-group-item{color:#555}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover,button.list-group-item:focus,button.list-group-item:hover{color:#555;text-decoration:none;background-color:#f5f5f5}button.list-group-item{width:100%;text-align:left}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{color:#777;cursor:not-allowed;background-color:#eee}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#c7ddef}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success,button.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover,button.list-group-item-success:focus,button.list-group-item-success:hover{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover,button.list-group-item-success.active,button.list-group-item-success.active:focus,button.list-group-item-success.active:hover{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info,button.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover,button.list-group-item-info:focus,button.list-group-item-info:hover{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover,button.list-group-item-info.active,button.list-group-item-info.active:focus,button.list-group-item-info.active:hover{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning,button.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover,button.list-group-item-warning:focus,button.list-group-item-warning:hover{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover,button.list-group-item-warning.active,button.list-group-item-warning.active:focus,button.list-group-item-warning.active:hover{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger,button.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover,button.list-group-item-danger:focus,button.list-group-item-danger:hover{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover,button.list-group-item-danger.active,button.list-group-item-danger.active:focus,button.list-group-item-danger.active:hover{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-left-radius:0;border-top-right-radius:0}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{padding-right:15px;padding-left:15px}.panel>.table-responsive:first-child>.table:first-child,.panel>.table:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table-responsive:last-child>.table:last-child,.panel>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%)}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5)}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:12px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;filter:alpha(opacity=0);opacity:0;line-break:auto}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{right:5px;bottom:0;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2);line-break:auto}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right>.arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>a>img,.carousel-inner>.item>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-inner>.item.active.right,.carousel-inner>.item.next{left:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.carousel-inner>.item.active.left,.carousel-inner>.item.prev{left:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.carousel-inner>.item.active,.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right{left:0;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);background-color:rgba(0,0,0,0);filter:alpha(opacity=50);opacity:.5}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);background-repeat:repeat-x}.carousel-control:focus,.carousel-control:hover{color:#fff;text-decoration:none;filter:alpha(opacity=90);outline:0;opacity:.9}.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{position:absolute;top:50%;z-index:5;display:inline-block;margin-top:-10px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{left:50%;margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{right:50%;margin-right:-10px}.carousel-control .icon-next,.carousel-control .icon-prev{width:20px;height:20px;font-family:serif;line-height:1}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000\9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{width:30px;height:30px;margin-top:-10px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-10px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before,.btn-toolbar:after,.btn-toolbar:before,.clearfix:after,.clearfix:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.modal-header:after,.modal-header:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.pager:after,.pager:before,.panel-body:after,.panel-body:before,.row:after,.row:before{display:table;content:" "}.btn-group-vertical>.btn-group:after,.btn-toolbar:after,.clearfix:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.form-horizontal .form-group:after,.modal-footer:after,.modal-header:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager:after,.panel-body:after,.row:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-lg,.visible-md,.visible-sm,.visible-xs{display:none!important}.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table!important}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}}@media (max-width:767px){.visible-xs-block{display:block!important}}@media (max-width:767px){.visible-xs-inline{display:inline!important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table!important}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table!important}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table!important}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}}@media (min-width:1200px){.visible-lg-block{display:block!important}}@media (min-width:1200px){.visible-lg-inline{display:inline!important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table!important}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}}@media print{.hidden-print{display:none!important}} + *//*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0;font-size:2em}mark{color:#000;background:#ff0}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid silver}legend{padding:0;border:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,:after,:before{color:#000!important;text-shadow:none!important;background:0 0!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.woff2) format('woff2'),url(../fonts/glyphicons-halflings-regular.woff) format('woff'),url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\002a"}.glyphicon-plus:before{content:"\002b"}.glyphicon-eur:before,.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-cd:before{content:"\e201"}.glyphicon-save-file:before{content:"\e202"}.glyphicon-open-file:before{content:"\e203"}.glyphicon-level-up:before{content:"\e204"}.glyphicon-copy:before{content:"\e205"}.glyphicon-paste:before{content:"\e206"}.glyphicon-alert:before{content:"\e209"}.glyphicon-equalizer:before{content:"\e210"}.glyphicon-king:before{content:"\e211"}.glyphicon-queen:before{content:"\e212"}.glyphicon-pawn:before{content:"\e213"}.glyphicon-bishop:before{content:"\e214"}.glyphicon-knight:before{content:"\e215"}.glyphicon-baby-formula:before{content:"\e216"}.glyphicon-tent:before{content:"\26fa"}.glyphicon-blackboard:before{content:"\e218"}.glyphicon-bed:before{content:"\e219"}.glyphicon-apple:before{content:"\f8ff"}.glyphicon-erase:before{content:"\e221"}.glyphicon-hourglass:before{content:"\231b"}.glyphicon-lamp:before{content:"\e223"}.glyphicon-duplicate:before{content:"\e224"}.glyphicon-piggy-bank:before{content:"\e225"}.glyphicon-scissors:before{content:"\e226"}.glyphicon-bitcoin:before{content:"\e227"}.glyphicon-btc:before{content:"\e227"}.glyphicon-xbt:before{content:"\e227"}.glyphicon-yen:before{content:"\00a5"}.glyphicon-jpy:before{content:"\00a5"}.glyphicon-ruble:before{content:"\20bd"}.glyphicon-rub:before{content:"\20bd"}.glyphicon-scale:before{content:"\e230"}.glyphicon-ice-lolly:before{content:"\e231"}.glyphicon-ice-lolly-tasted:before{content:"\e232"}.glyphicon-education:before{content:"\e233"}.glyphicon-option-horizontal:before{content:"\e234"}.glyphicon-option-vertical:before{content:"\e235"}.glyphicon-menu-hamburger:before{content:"\e236"}.glyphicon-modal-window:before{content:"\e237"}.glyphicon-oil:before{content:"\e238"}.glyphicon-grain:before{content:"\e239"}.glyphicon-sunglasses:before{content:"\e240"}.glyphicon-text-size:before{content:"\e241"}.glyphicon-text-color:before{content:"\e242"}.glyphicon-text-background:before{content:"\e243"}.glyphicon-object-align-top:before{content:"\e244"}.glyphicon-object-align-bottom:before{content:"\e245"}.glyphicon-object-align-horizontal:before{content:"\e246"}.glyphicon-object-align-left:before{content:"\e247"}.glyphicon-object-align-vertical:before{content:"\e248"}.glyphicon-object-align-right:before{content:"\e249"}.glyphicon-triangle-right:before{content:"\e250"}.glyphicon-triangle-left:before{content:"\e251"}.glyphicon-triangle-bottom:before{content:"\e252"}.glyphicon-triangle-top:before{content:"\e253"}.glyphicon-console:before{content:"\e254"}.glyphicon-superscript:before{content:"\e255"}.glyphicon-subscript:before{content:"\e256"}.glyphicon-menu-left:before{content:"\e257"}.glyphicon-menu-right:before{content:"\e258"}.glyphicon-menu-down:before{content:"\e259"}.glyphicon-menu-up:before{content:"\e260"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:focus,a:hover{color:#23527c;text-decoration:underline}a:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.carousel-inner>.item>a>img,.carousel-inner>.item>img,.img-responsive,.thumbnail a>img,.thumbnail>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;max-width:100%;height:auto;padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role=button]{cursor:pointer}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#777}.h1,.h2,.h3,h1,h2,h3{margin-top:20px;margin-bottom:10px}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{font-size:65%}.h4,.h5,.h6,h4,h5,h6{margin-top:10px;margin-bottom:10px}.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-size:75%}.h1,h1{font-size:36px}.h2,h2{font-size:30px}.h3,h3{font-size:24px}.h4,h4{font-size:18px}.h5,h5{font-size:14px}.h6,h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}.small,small{font-size:85%}.mark,mark{padding:.2em;background-color:#fcf8e3}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:focus,a.text-primary:hover{color:#286090}.text-success{color:#3c763d}a.text-success:focus,a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:focus,a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:focus,a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:focus,a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:focus,a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:focus,a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:focus,a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:focus,a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:focus,a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ol,ul{margin-top:0;margin-bottom:10px}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;margin-left:-5px;list-style:none}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-top:0;margin-bottom:20px}dd,dt{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[data-original-title],abbr[title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child{margin-bottom:0}blockquote .small,blockquote footer,blockquote small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote .small:before,blockquote footer:before,blockquote small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{content:''}.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{content:'\00A0 \2014'}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;font-weight:700;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{margin-right:-15px;margin-left:-15px}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ddd}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#f5f5f5}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#f5f5f5}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#e8e8e8}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#dff0d8}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#d0e9c6}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#d9edf7}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#c4e3f3}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fcf8e3}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#faf2cc}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#f2dede}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ebcccc}.table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=checkbox],input[type=radio]{margin:4px 0 0;margin-top:1px\9;line-height:normal}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=checkbox]:focus,input[type=radio]:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control::-ms-expand{background-color:transparent;border:0}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date].form-control,input[type=time].form-control,input[type=datetime-local].form-control,input[type=month].form-control{line-height:34px}.input-group-sm input[type=date],.input-group-sm input[type=time],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px}.input-group-lg input[type=date],.input-group-lg input[type=time],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:46px}}.form-group{margin-bottom:15px}.checkbox,.radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.checkbox label,.radio label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;margin-top:4px\9;margin-left:-20px}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}.checkbox-inline.disabled,.radio-inline.disabled,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio-inline{cursor:not-allowed}.checkbox.disabled label,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .radio label{cursor:not-allowed}.form-control-static{min-height:34px;padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}select[multiple].input-sm,textarea.input-sm{height:auto}.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.form-group-sm select.form-control{height:30px;line-height:30px}.form-group-sm select[multiple].form-control,.form-group-sm textarea.form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:6px 10px;font-size:12px;line-height:1.5}.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-lg{height:46px;line-height:46px}select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.form-group-lg select.form-control{height:46px;line-height:46px}.form-group-lg select[multiple].form-control,.form-group-lg textarea.form-control{height:auto}.form-group-lg .form-control-static{height:46px;min-height:38px;padding:11px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.form-group-lg .form-control+.form-control-feedback,.input-group-lg+.form-control-feedback,.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.form-group-sm .form-control+.form-control-feedback,.input-group-sm+.form-control-feedback,.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-success .form-control-feedback{color:#3c763d}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .checkbox,.form-horizontal .radio{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:11px;font-size:18px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:12px}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:none;border:1px solid transparent;border-radius:4px}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.focus,.btn:focus,.btn:hover{color:#333;text-decoration:none}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none;opacity:.65}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default.focus,.btn-default:focus{color:#333;background-color:#e6e6e6;border-color:#8c8c8c}.btn-default:hover{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active.focus,.btn-default.active:focus,.btn-default.active:hover,.btn-default:active.focus,.btn-default:active:focus,.btn-default:active:hover,.open>.dropdown-toggle.btn-default.focus,.open>.dropdown-toggle.btn-default:focus,.open>.dropdown-toggle.btn-default:hover{color:#333;background-color:#d4d4d4;border-color:#8c8c8c}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled.focus,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled].focus,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#286090;border-color:#122b40}.btn-primary:hover{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active.focus,.btn-primary.active:focus,.btn-primary.active:hover,.btn-primary:active.focus,.btn-primary:active:focus,.btn-primary:active:hover,.open>.dropdown-toggle.btn-primary.focus,.open>.dropdown-toggle.btn-primary:focus,.open>.dropdown-toggle.btn-primary:hover{color:#fff;background-color:#204d74;border-color:#122b40}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled.focus,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled].focus,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#449d44;border-color:#255625}.btn-success:hover{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active.focus,.btn-success.active:focus,.btn-success.active:hover,.btn-success:active.focus,.btn-success:active:focus,.btn-success:active:hover,.open>.dropdown-toggle.btn-success.focus,.open>.dropdown-toggle.btn-success:focus,.open>.dropdown-toggle.btn-success:hover{color:#fff;background-color:#398439;border-color:#255625}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled.focus,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled].focus,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#31b0d5;border-color:#1b6d85}.btn-info:hover{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active.focus,.btn-info.active:focus,.btn-info.active:hover,.btn-info:active.focus,.btn-info:active:focus,.btn-info:active:hover,.open>.dropdown-toggle.btn-info.focus,.open>.dropdown-toggle.btn-info:focus,.open>.dropdown-toggle.btn-info:hover{color:#fff;background-color:#269abc;border-color:#1b6d85}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled.focus,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled].focus,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning.focus,.btn-warning:focus{color:#fff;background-color:#ec971f;border-color:#985f0d}.btn-warning:hover{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active.focus,.btn-warning.active:focus,.btn-warning.active:hover,.btn-warning:active.focus,.btn-warning:active:focus,.btn-warning:active:hover,.open>.dropdown-toggle.btn-warning.focus,.open>.dropdown-toggle.btn-warning:focus,.open>.dropdown-toggle.btn-warning:hover{color:#fff;background-color:#d58512;border-color:#985f0d}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled.focus,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled].focus,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#c9302c;border-color:#761c19}.btn-danger:hover{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active.focus,.btn-danger.active:focus,.btn-danger.active:hover,.btn-danger:active.focus,.btn-danger:active:focus,.btn-danger:active:hover,.open>.dropdown-toggle.btn-danger.focus,.open>.dropdown-toggle.btn-danger:focus,.open>.dropdown-toggle.btn-danger:hover{color:#fff;background-color:#ac2925;border-color:#761c19}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled.focus,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled].focus,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#337ab7;border-radius:0}.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#777;text-decoration:none}.btn-group-lg>.btn,.btn-lg{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-group-sm>.btn,.btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-xs>.btn,.btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;-webkit-transition-property:height,visibility;-o-transition-property:height,visibility;transition-property:height,visibility}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid\9;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown,.dropup{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;background-color:#337ab7;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#777}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px dashed;border-bottom:4px solid\9}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;float:left}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group .form-control:focus{z-index:3}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn,textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn,textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{z-index:2;margin-left:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#eee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#337ab7}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1)}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-right:0;padding-left:0}}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-bottom,.navbar-fixed-top{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;height:50px;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1)}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .checkbox label,.navbar-form .radio label{padding-left:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{color:#333}.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover{color:#fff}.navbar-inverse .btn-link[disabled]:focus,.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-inverse .btn-link:hover{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#337ab7;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{z-index:2;color:#23527c;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{z-index:3;color:#fff;cursor:default;background-color:#337ab7;border-color:#337ab7}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px;line-height:1.3333333}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px;line-height:1.5}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:focus,.pager li>a:hover{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{color:#777;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:focus,a.label:hover{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:focus,.label-default[href]:hover{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:focus,.label-success[href]:hover{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:focus,.label-info[href]:hover{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-group-xs>.btn .badge,.btn-xs .badge{top:0;padding:1px 5px}a.badge:focus,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding-top:30px;padding-bottom:30px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron .h1,.jumbotron h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{padding-right:15px;padding-left:15px;border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron,.container-fluid .jumbotron{padding-right:60px;padding-left:60px}.jumbotron .h1,.jumbotron h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail a>img,.thumbnail>img{margin-right:auto;margin-left:auto}a.thumbnail.active,a.thumbnail:focus,a.thumbnail:hover{border-color:#337ab7}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-bar-striped,.progress-striped .progress-bar{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress-bar.active,.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{overflow:hidden;zoom:1}.media-body{width:10000px}.media-object{display:block}.media-object.img-thumbnail{max-width:none}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-body,.media-left,.media-right{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item,button.list-group-item{color:#555}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover,button.list-group-item:focus,button.list-group-item:hover{color:#555;text-decoration:none;background-color:#f5f5f5}button.list-group-item{width:100%;text-align:left}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{color:#777;cursor:not-allowed;background-color:#eee}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#c7ddef}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success,button.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover,button.list-group-item-success:focus,button.list-group-item-success:hover{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover,button.list-group-item-success.active,button.list-group-item-success.active:focus,button.list-group-item-success.active:hover{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info,button.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover,button.list-group-item-info:focus,button.list-group-item-info:hover{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover,button.list-group-item-info.active,button.list-group-item-info.active:focus,button.list-group-item-info.active:hover{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning,button.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover,button.list-group-item-warning:focus,button.list-group-item-warning:hover{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover,button.list-group-item-warning.active,button.list-group-item-warning.active:focus,button.list-group-item-warning.active:hover{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger,button.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover,button.list-group-item-danger:focus,button.list-group-item-danger:hover{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover,button.list-group-item-danger.active,button.list-group-item-danger.active:focus,button.list-group-item-danger.active:hover{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-left-radius:0;border-top-right-radius:0}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{padding-right:15px;padding-left:15px}.panel>.table-responsive:first-child>.table:first-child,.panel>.table:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table-responsive:last-child>.table:last-child,.panel>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%)}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5)}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:12px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;filter:alpha(opacity=0);opacity:0;line-break:auto}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{right:5px;bottom:0;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2);line-break:auto}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right>.arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>a>img,.carousel-inner>.item>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-inner>.item.active.right,.carousel-inner>.item.next{left:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.carousel-inner>.item.active.left,.carousel-inner>.item.prev{left:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.carousel-inner>.item.active,.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right{left:0;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);background-color:rgba(0,0,0,0);filter:alpha(opacity=50);opacity:.5}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);background-repeat:repeat-x}.carousel-control:focus,.carousel-control:hover{color:#fff;text-decoration:none;filter:alpha(opacity=90);outline:0;opacity:.9}.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{position:absolute;top:50%;z-index:5;display:inline-block;margin-top:-10px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{left:50%;margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{right:50%;margin-right:-10px}.carousel-control .icon-next,.carousel-control .icon-prev{width:20px;height:20px;font-family:serif;line-height:1}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000\9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{width:30px;height:30px;margin-top:-10px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-10px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before,.btn-toolbar:after,.btn-toolbar:before,.clearfix:after,.clearfix:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.modal-header:after,.modal-header:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.pager:after,.pager:before,.panel-body:after,.panel-body:before,.row:after,.row:before{display:table;content:" "}.btn-group-vertical>.btn-group:after,.btn-toolbar:after,.clearfix:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.form-horizontal .form-group:after,.modal-footer:after,.modal-header:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager:after,.panel-body:after,.row:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-lg,.visible-md,.visible-sm,.visible-xs{display:none!important}.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table!important}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}}@media (max-width:767px){.visible-xs-block{display:block!important}}@media (max-width:767px){.visible-xs-inline{display:inline!important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table!important}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table!important}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table!important}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}}@media (min-width:1200px){.visible-lg-block{display:block!important}}@media (min-width:1200px){.visible-lg-inline{display:inline!important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table!important}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}}@media print{.hidden-print{display:none!important}} /*# sourceMappingURL=bootstrap.min.css.map */ \ No newline at end of file diff --git a/lib/composer/vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/dashboard.html.dist b/lib/composer/vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/dashboard.html.dist index 8bdf04d83..f45eb575c 100644 --- a/lib/composer/vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/dashboard.html.dist +++ b/lib/composer/vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/dashboard.html.dist @@ -4,12 +4,12 @@ Dashboard for {{full_path}} - - - + + + @@ -138,11 +138,11 @@

    - - - - - + + + + + - - + + + diff --git a/lib/composer/vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/file.html.dist b/lib/composer/vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/file.html.dist index 8c42d4e81..ba03f0e56 100644 --- a/lib/composer/vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/file.html.dist +++ b/lib/composer/vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/file.html.dist @@ -4,11 +4,11 @@ Code Coverage for {{full_path}} - - + + @@ -60,31 +60,9 @@ - - - - + + + + diff --git a/lib/composer/vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/js/bootstrap.min.js b/lib/composer/vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/js/bootstrap.min.js index 48554cad6..9bcd2fcca 100644 --- a/lib/composer/vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/js/bootstrap.min.js +++ b/lib/composer/vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/js/bootstrap.min.js @@ -1,7 +1,7 @@ /*! - * Bootstrap v3.3.6 (http://getbootstrap.com) - * Copyright 2011-2015 Twitter, Inc. + * Bootstrap v3.3.7 (http://getbootstrap.com) + * Copyright 2011-2016 Twitter, Inc. * Licensed under the MIT license */ -if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){"use strict";var b=a.fn.jquery.split(" ")[0].split(".");if(b[0]<2&&b[1]<9||1==b[0]&&9==b[1]&&b[2]<1||b[0]>2)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher, but lower than version 3")}(jQuery),+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one("bsTransitionEnd",function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){return a(b.target).is(this)?b.handleObj.handler.apply(this,arguments):void 0}})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var c=a(this),e=c.data("bs.alert");e||c.data("bs.alert",e=new d(this)),"string"==typeof b&&e[b].call(c)})}var c='[data-dismiss="alert"]',d=function(b){a(b).on("click",c,this.close)};d.VERSION="3.3.6",d.TRANSITION_DURATION=150,d.prototype.close=function(b){function c(){g.detach().trigger("closed.bs.alert").remove()}var e=a(this),f=e.attr("data-target");f||(f=e.attr("href"),f=f&&f.replace(/.*(?=#[^\s]*$)/,""));var g=a(f);b&&b.preventDefault(),g.length||(g=e.closest(".alert")),g.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(g.removeClass("in"),a.support.transition&&g.hasClass("fade")?g.one("bsTransitionEnd",c).emulateTransitionEnd(d.TRANSITION_DURATION):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on("click.bs.alert.data-api",c,d.prototype.close)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof b&&b;e||d.data("bs.button",e=new c(this,f)),"toggle"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!1};c.VERSION="3.3.6",c.DEFAULTS={loadingText:"loading..."},c.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",null==f.resetText&&d.data("resetText",d[e]()),setTimeout(a.proxy(function(){d[e](null==f[b]?this.options[b]:f[b]),"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c))},this),0)},c.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")?(c.prop("checked")&&(a=!1),b.find(".active").removeClass("active"),this.$element.addClass("active")):"checkbox"==c.prop("type")&&(c.prop("checked")!==this.$element.hasClass("active")&&(a=!1),this.$element.toggleClass("active")),c.prop("checked",this.$element.hasClass("active")),a&&c.trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active")),this.$element.toggleClass("active")};var d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return a.fn.button=d,this},a(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(c){var d=a(c.target);d.hasClass("btn")||(d=d.closest(".btn")),b.call(d,"toggle"),a(c.target).is('input[type="radio"]')||a(c.target).is('input[type="checkbox"]')||c.preventDefault()}).on("focus.bs.button.data-Api blur.bs.button.data-Api",'[data-toggle^="button"]',function(b){a(b.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(b.type))})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b),g="string"==typeof b?b:f.slide;e||d.data("bs.carousel",e=new c(this,f)),"number"==typeof b?e.to(b):g?e[g]():f.interval&&e.pause().cycle()})}var c=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",a.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",a.proxy(this.pause,this)).on("mouseleave.bs.carousel",a.proxy(this.cycle,this))};c.VERSION="3.3.6",c.TRANSITION_DURATION=600,c.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},c.prototype.keydown=function(a){if(!/input|textarea/i.test(a.target.tagName)){switch(a.which){case 37:this.prev();break;case 39:this.next();break;default:return}a.preventDefault()}},c.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(a){return this.$items=a.parent().children(".item"),this.$items.index(a||this.$active)},c.prototype.getItemForDirection=function(a,b){var c=this.getItemIndex(b),d="prev"==a&&0===c||"next"==a&&c==this.$items.length-1;if(d&&!this.options.wrap)return b;var e="prev"==a?-1:1,f=(c+e)%this.$items.length;return this.$items.eq(f)},c.prototype.to=function(a){var b=this,c=this.getItemIndex(this.$active=this.$element.find(".item.active"));return a>this.$items.length-1||0>a?void 0:this.sliding?this.$element.one("slid.bs.carousel",function(){b.to(a)}):c==a?this.pause().cycle():this.slide(a>c?"next":"prev",this.$items.eq(a))},c.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){return this.sliding?void 0:this.slide("next")},c.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},c.prototype.slide=function(b,d){var e=this.$element.find(".item.active"),f=d||this.getItemForDirection(b,e),g=this.interval,h="next"==b?"left":"right",i=this;if(f.hasClass("active"))return this.sliding=!1;var j=f[0],k=a.Event("slide.bs.carousel",{relatedTarget:j,direction:h});if(this.$element.trigger(k),!k.isDefaultPrevented()){if(this.sliding=!0,g&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var l=a(this.$indicators.children()[this.getItemIndex(f)]);l&&l.addClass("active")}var m=a.Event("slid.bs.carousel",{relatedTarget:j,direction:h});return a.support.transition&&this.$element.hasClass("slide")?(f.addClass(b),f[0].offsetWidth,e.addClass(h),f.addClass(h),e.one("bsTransitionEnd",function(){f.removeClass([b,h].join(" ")).addClass("active"),e.removeClass(["active",h].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger(m)},0)}).emulateTransitionEnd(c.TRANSITION_DURATION)):(e.removeClass("active"),f.addClass("active"),this.sliding=!1,this.$element.trigger(m)),g&&this.cycle(),this}};var d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return a.fn.carousel=d,this};var e=function(c){var d,e=a(this),f=a(e.attr("data-target")||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""));if(f.hasClass("carousel")){var g=a.extend({},f.data(),e.data()),h=e.attr("data-slide-to");h&&(g.interval=!1),b.call(f,g),h&&f.data("bs.carousel").to(h),c.preventDefault()}};a(document).on("click.bs.carousel.data-api","[data-slide]",e).on("click.bs.carousel.data-api","[data-slide-to]",e),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var c=a(this);b.call(c,c.data())})})}(jQuery),+function(a){"use strict";function b(b){var c,d=b.attr("data-target")||(c=b.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"");return a(d)}function c(b){return this.each(function(){var c=a(this),e=c.data("bs.collapse"),f=a.extend({},d.DEFAULTS,c.data(),"object"==typeof b&&b);!e&&f.toggle&&/show|hide/.test(b)&&(f.toggle=!1),e||c.data("bs.collapse",e=new d(this,f)),"string"==typeof b&&e[b]()})}var d=function(b,c){this.$element=a(b),this.options=a.extend({},d.DEFAULTS,c),this.$trigger=a('[data-toggle="collapse"][href="#'+b.id+'"],[data-toggle="collapse"][data-target="#'+b.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};d.VERSION="3.3.6",d.TRANSITION_DURATION=350,d.DEFAULTS={toggle:!0},d.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},d.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b,e=this.$parent&&this.$parent.children(".panel").children(".in, .collapsing");if(!(e&&e.length&&(b=e.data("bs.collapse"),b&&b.transitioning))){var f=a.Event("show.bs.collapse");if(this.$element.trigger(f),!f.isDefaultPrevented()){e&&e.length&&(c.call(e,"hide"),b||e.data("bs.collapse",null));var g=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[g](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var h=function(){this.$element.removeClass("collapsing").addClass("collapse in")[g](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return h.call(this);var i=a.camelCase(["scroll",g].join("-"));this.$element.one("bsTransitionEnd",a.proxy(h,this)).emulateTransitionEnd(d.TRANSITION_DURATION)[g](this.$element[0][i])}}}},d.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var e=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};return a.support.transition?void this.$element[c](0).one("bsTransitionEnd",a.proxy(e,this)).emulateTransitionEnd(d.TRANSITION_DURATION):e.call(this)}}},d.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},d.prototype.getParent=function(){return a(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(a.proxy(function(c,d){var e=a(d);this.addAriaAndCollapsedClass(b(e),e)},this)).end()},d.prototype.addAriaAndCollapsedClass=function(a,b){var c=a.hasClass("in");a.attr("aria-expanded",c),b.toggleClass("collapsed",!c).attr("aria-expanded",c)};var e=a.fn.collapse;a.fn.collapse=c,a.fn.collapse.Constructor=d,a.fn.collapse.noConflict=function(){return a.fn.collapse=e,this},a(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(d){var e=a(this);e.attr("data-target")||d.preventDefault();var f=b(e),g=f.data("bs.collapse"),h=g?"toggle":e.data();c.call(f,h)})}(jQuery),+function(a){"use strict";function b(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}function c(c){c&&3===c.which||(a(e).remove(),a(f).each(function(){var d=a(this),e=b(d),f={relatedTarget:this};e.hasClass("open")&&(c&&"click"==c.type&&/input|textarea/i.test(c.target.tagName)&&a.contains(e[0],c.target)||(e.trigger(c=a.Event("hide.bs.dropdown",f)),c.isDefaultPrevented()||(d.attr("aria-expanded","false"),e.removeClass("open").trigger(a.Event("hidden.bs.dropdown",f)))))}))}function d(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new g(this)),"string"==typeof b&&d[b].call(c)})}var e=".dropdown-backdrop",f='[data-toggle="dropdown"]',g=function(b){a(b).on("click.bs.dropdown",this.toggle)};g.VERSION="3.3.6",g.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=b(e),g=f.hasClass("open");if(c(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a(document.createElement("div")).addClass("dropdown-backdrop").insertAfter(a(this)).on("click",c);var h={relatedTarget:this};if(f.trigger(d=a.Event("show.bs.dropdown",h)),d.isDefaultPrevented())return;e.trigger("focus").attr("aria-expanded","true"),f.toggleClass("open").trigger(a.Event("shown.bs.dropdown",h))}return!1}},g.prototype.keydown=function(c){if(/(38|40|27|32)/.test(c.which)&&!/input|textarea/i.test(c.target.tagName)){var d=a(this);if(c.preventDefault(),c.stopPropagation(),!d.is(".disabled, :disabled")){var e=b(d),g=e.hasClass("open");if(!g&&27!=c.which||g&&27==c.which)return 27==c.which&&e.find(f).trigger("focus"),d.trigger("click");var h=" li:not(.disabled):visible a",i=e.find(".dropdown-menu"+h);if(i.length){var j=i.index(c.target);38==c.which&&j>0&&j--,40==c.which&&jdocument.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&a?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!a?this.scrollbarWidth:""})},c.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})},c.prototype.checkScrollbar=function(){var a=window.innerWidth;if(!a){var b=document.documentElement.getBoundingClientRect();a=b.right-Math.abs(b.left)}this.bodyIsOverflowing=document.body.clientWidth
    ',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},c.prototype.init=function(b,c,d){if(this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport&&a(a.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focusin",i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},c.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},c.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b instanceof a.Event&&(c.inState["focusin"==b.type?"focus":"hover"]=!0),c.tip().hasClass("in")||"in"==c.hoverState?void(c.hoverState="in"):(clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show())},c.prototype.isInStateTrue=function(){for(var a in this.inState)if(this.inState[a])return!0;return!1},c.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b instanceof a.Event&&(c.inState["focusout"==b.type?"focus":"hover"]=!1),c.isInStateTrue()?void 0:(clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide())},c.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);var d=a.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(b.isDefaultPrevented()||!d)return;var e=this,f=this.tip(),g=this.getUID(this.type);this.setContent(),f.attr("id",g),this.$element.attr("aria-describedby",g),this.options.animation&&f.addClass("fade");var h="function"==typeof this.options.placement?this.options.placement.call(this,f[0],this.$element[0]):this.options.placement,i=/\s?auto?\s?/i,j=i.test(h);j&&(h=h.replace(i,"")||"top"),f.detach().css({top:0,left:0,display:"block"}).addClass(h).data("bs."+this.type,this),this.options.container?f.appendTo(this.options.container):f.insertAfter(this.$element),this.$element.trigger("inserted.bs."+this.type);var k=this.getPosition(),l=f[0].offsetWidth,m=f[0].offsetHeight;if(j){var n=h,o=this.getPosition(this.$viewport);h="bottom"==h&&k.bottom+m>o.bottom?"top":"top"==h&&k.top-mo.width?"left":"left"==h&&k.left-lg.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;jg.right&&(e.left=g.left+g.width-k)}return e},c.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},c.prototype.getUID=function(a){do a+=~~(1e6*Math.random());while(document.getElementById(a));return a},c.prototype.tip=function(){if(!this.$tip&&(this.$tip=a(this.options.template),1!=this.$tip.length))throw new Error(this.type+" `template` option must consist of exactly 1 top-level element!");return this.$tip},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},c.prototype.enable=function(){this.enabled=!0},c.prototype.disable=function(){this.enabled=!1},c.prototype.toggleEnabled=function(){this.enabled=!this.enabled},c.prototype.toggle=function(b){var c=this;b&&(c=a(b.currentTarget).data("bs."+this.type),c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c))),b?(c.inState.click=!c.inState.click,c.isInStateTrue()?c.enter(c):c.leave(c)):c.tip().hasClass("in")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){var a=this;clearTimeout(this.timeout),this.hide(function(){a.$element.off("."+a.type).removeData("bs."+a.type),a.$tip&&a.$tip.detach(),a.$tip=null,a.$arrow=null,a.$viewport=null})};var d=a.fn.tooltip;a.fn.tooltip=b,a.fn.tooltip.Constructor=c,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=d,this}}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof b&&b;(e||!/destroy|hide/.test(b))&&(e||d.data("bs.popover",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");c.VERSION="3.3.6",c.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:''}),c.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),c.prototype.constructor=c,c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content").children().detach().end()[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},c.prototype.hasContent=function(){return this.getTitle()||this.getContent()},c.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};var d=a.fn.popover;a.fn.popover=b,a.fn.popover.Constructor=c,a.fn.popover.noConflict=function(){return a.fn.popover=d,this}}(jQuery),+function(a){"use strict";function b(c,d){this.$body=a(document.body),this.$scrollElement=a(a(c).is(document.body)?window:c),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",a.proxy(this.process,this)),this.refresh(),this.process()}function c(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})}b.VERSION="3.3.6",b.DEFAULTS={offset:10},b.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},b.prototype.refresh=function(){var b=this,c="offset",d=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),a.isWindow(this.$scrollElement[0])||(c="position",d=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var b=a(this),e=b.data("target")||b.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[c]().top+d,e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){b.offsets.push(this[0]),b.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.getScrollHeight(),d=this.options.offset+c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(this.scrollHeight!=c&&this.refresh(),b>=d)return g!=(a=f[f.length-1])&&this.activate(a);if(g&&b=e[a]&&(void 0===e[a+1]||b .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),b.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),h?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu").length&&b.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),e&&e()}var g=d.find("> .active"),h=e&&a.support.transition&&(g.length&&g.hasClass("fade")||!!d.find("> .fade").length);g.length&&h?g.one("bsTransitionEnd",f).emulateTransitionEnd(c.TRANSITION_DURATION):f(),g.removeClass("in")};var d=a.fn.tab;a.fn.tab=b,a.fn.tab.Constructor=c,a.fn.tab.noConflict=function(){return a.fn.tab=d,this};var e=function(c){c.preventDefault(),b.call(a(this),"show")};a(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',e).on("click.bs.tab.data-api",'[data-toggle="pill"]',e)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof b&&b;e||d.data("bs.affix",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.options=a.extend({},c.DEFAULTS,d),this.$target=a(this.options.target).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(b),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};c.VERSION="3.3.6",c.RESET="affix affix-top affix-bottom",c.DEFAULTS={offset:0,target:window},c.prototype.getState=function(a,b,c,d){var e=this.$target.scrollTop(),f=this.$element.offset(),g=this.$target.height();if(null!=c&&"top"==this.affixed)return c>e?"top":!1;if("bottom"==this.affixed)return null!=c?e+this.unpin<=f.top?!1:"bottom":a-d>=e+g?!1:"bottom";var h=null==this.affixed,i=h?e:f.top,j=h?g:b;return null!=c&&c>=e?"top":null!=d&&i+j>=a-d?"bottom":!1},c.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(c.RESET).addClass("affix");var a=this.$target.scrollTop(),b=this.$element.offset();return this.pinnedOffset=b.top-a},c.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},c.prototype.checkPosition=function(){if(this.$element.is(":visible")){var b=this.$element.height(),d=this.options.offset,e=d.top,f=d.bottom,g=Math.max(a(document).height(),a(document.body).height());"object"!=typeof d&&(f=e=d),"function"==typeof e&&(e=d.top(this.$element)),"function"==typeof f&&(f=d.bottom(this.$element));var h=this.getState(g,b,e,f);if(this.affixed!=h){null!=this.unpin&&this.$element.css("top","");var i="affix"+(h?"-"+h:""),j=a.Event(i+".bs.affix");if(this.$element.trigger(j),j.isDefaultPrevented())return;this.affixed=h,this.unpin="bottom"==h?this.getPinnedOffset():null,this.$element.removeClass(c.RESET).addClass(i).trigger(i.replace("affix","affixed")+".bs.affix")}"bottom"==h&&this.$element.offset({top:g-b-f})}};var d=a.fn.affix;a.fn.affix=b,a.fn.affix.Constructor=c,a.fn.affix.noConflict=function(){return a.fn.affix=d,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var c=a(this),d=c.data();d.offset=d.offset||{},null!=d.offsetBottom&&(d.offset.bottom=d.offsetBottom),null!=d.offsetTop&&(d.offset.top=d.offsetTop),b.call(c,d)})})}(jQuery); +if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){"use strict";var b=a.fn.jquery.split(" ")[0].split(".");if(b[0]<2&&b[1]<9||1==b[0]&&9==b[1]&&b[2]<1||b[0]>3)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4")}(jQuery),+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one("bsTransitionEnd",function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){if(a(b.target).is(this))return b.handleObj.handler.apply(this,arguments)}})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var c=a(this),e=c.data("bs.alert");e||c.data("bs.alert",e=new d(this)),"string"==typeof b&&e[b].call(c)})}var c='[data-dismiss="alert"]',d=function(b){a(b).on("click",c,this.close)};d.VERSION="3.3.7",d.TRANSITION_DURATION=150,d.prototype.close=function(b){function c(){g.detach().trigger("closed.bs.alert").remove()}var e=a(this),f=e.attr("data-target");f||(f=e.attr("href"),f=f&&f.replace(/.*(?=#[^\s]*$)/,""));var g=a("#"===f?[]:f);b&&b.preventDefault(),g.length||(g=e.closest(".alert")),g.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(g.removeClass("in"),a.support.transition&&g.hasClass("fade")?g.one("bsTransitionEnd",c).emulateTransitionEnd(d.TRANSITION_DURATION):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on("click.bs.alert.data-api",c,d.prototype.close)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof b&&b;e||d.data("bs.button",e=new c(this,f)),"toggle"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!1};c.VERSION="3.3.7",c.DEFAULTS={loadingText:"loading..."},c.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",null==f.resetText&&d.data("resetText",d[e]()),setTimeout(a.proxy(function(){d[e](null==f[b]?this.options[b]:f[b]),"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c).prop(c,!0)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c).prop(c,!1))},this),0)},c.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")?(c.prop("checked")&&(a=!1),b.find(".active").removeClass("active"),this.$element.addClass("active")):"checkbox"==c.prop("type")&&(c.prop("checked")!==this.$element.hasClass("active")&&(a=!1),this.$element.toggleClass("active")),c.prop("checked",this.$element.hasClass("active")),a&&c.trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active")),this.$element.toggleClass("active")};var d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return a.fn.button=d,this},a(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(c){var d=a(c.target).closest(".btn");b.call(d,"toggle"),a(c.target).is('input[type="radio"], input[type="checkbox"]')||(c.preventDefault(),d.is("input,button")?d.trigger("focus"):d.find("input:visible,button:visible").first().trigger("focus"))}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(b){a(b.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(b.type))})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b),g="string"==typeof b?b:f.slide;e||d.data("bs.carousel",e=new c(this,f)),"number"==typeof b?e.to(b):g?e[g]():f.interval&&e.pause().cycle()})}var c=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",a.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",a.proxy(this.pause,this)).on("mouseleave.bs.carousel",a.proxy(this.cycle,this))};c.VERSION="3.3.7",c.TRANSITION_DURATION=600,c.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},c.prototype.keydown=function(a){if(!/input|textarea/i.test(a.target.tagName)){switch(a.which){case 37:this.prev();break;case 39:this.next();break;default:return}a.preventDefault()}},c.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(a){return this.$items=a.parent().children(".item"),this.$items.index(a||this.$active)},c.prototype.getItemForDirection=function(a,b){var c=this.getItemIndex(b),d="prev"==a&&0===c||"next"==a&&c==this.$items.length-1;if(d&&!this.options.wrap)return b;var e="prev"==a?-1:1,f=(c+e)%this.$items.length;return this.$items.eq(f)},c.prototype.to=function(a){var b=this,c=this.getItemIndex(this.$active=this.$element.find(".item.active"));if(!(a>this.$items.length-1||a<0))return this.sliding?this.$element.one("slid.bs.carousel",function(){b.to(a)}):c==a?this.pause().cycle():this.slide(a>c?"next":"prev",this.$items.eq(a))},c.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){if(!this.sliding)return this.slide("next")},c.prototype.prev=function(){if(!this.sliding)return this.slide("prev")},c.prototype.slide=function(b,d){var e=this.$element.find(".item.active"),f=d||this.getItemForDirection(b,e),g=this.interval,h="next"==b?"left":"right",i=this;if(f.hasClass("active"))return this.sliding=!1;var j=f[0],k=a.Event("slide.bs.carousel",{relatedTarget:j,direction:h});if(this.$element.trigger(k),!k.isDefaultPrevented()){if(this.sliding=!0,g&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var l=a(this.$indicators.children()[this.getItemIndex(f)]);l&&l.addClass("active")}var m=a.Event("slid.bs.carousel",{relatedTarget:j,direction:h});return a.support.transition&&this.$element.hasClass("slide")?(f.addClass(b),f[0].offsetWidth,e.addClass(h),f.addClass(h),e.one("bsTransitionEnd",function(){f.removeClass([b,h].join(" ")).addClass("active"),e.removeClass(["active",h].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger(m)},0)}).emulateTransitionEnd(c.TRANSITION_DURATION)):(e.removeClass("active"),f.addClass("active"),this.sliding=!1,this.$element.trigger(m)),g&&this.cycle(),this}};var d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return a.fn.carousel=d,this};var e=function(c){var d,e=a(this),f=a(e.attr("data-target")||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""));if(f.hasClass("carousel")){var g=a.extend({},f.data(),e.data()),h=e.attr("data-slide-to");h&&(g.interval=!1),b.call(f,g),h&&f.data("bs.carousel").to(h),c.preventDefault()}};a(document).on("click.bs.carousel.data-api","[data-slide]",e).on("click.bs.carousel.data-api","[data-slide-to]",e),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var c=a(this);b.call(c,c.data())})})}(jQuery),+function(a){"use strict";function b(b){var c,d=b.attr("data-target")||(c=b.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"");return a(d)}function c(b){return this.each(function(){var c=a(this),e=c.data("bs.collapse"),f=a.extend({},d.DEFAULTS,c.data(),"object"==typeof b&&b);!e&&f.toggle&&/show|hide/.test(b)&&(f.toggle=!1),e||c.data("bs.collapse",e=new d(this,f)),"string"==typeof b&&e[b]()})}var d=function(b,c){this.$element=a(b),this.options=a.extend({},d.DEFAULTS,c),this.$trigger=a('[data-toggle="collapse"][href="#'+b.id+'"],[data-toggle="collapse"][data-target="#'+b.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};d.VERSION="3.3.7",d.TRANSITION_DURATION=350,d.DEFAULTS={toggle:!0},d.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},d.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b,e=this.$parent&&this.$parent.children(".panel").children(".in, .collapsing");if(!(e&&e.length&&(b=e.data("bs.collapse"),b&&b.transitioning))){var f=a.Event("show.bs.collapse");if(this.$element.trigger(f),!f.isDefaultPrevented()){e&&e.length&&(c.call(e,"hide"),b||e.data("bs.collapse",null));var g=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[g](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var h=function(){this.$element.removeClass("collapsing").addClass("collapse in")[g](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return h.call(this);var i=a.camelCase(["scroll",g].join("-"));this.$element.one("bsTransitionEnd",a.proxy(h,this)).emulateTransitionEnd(d.TRANSITION_DURATION)[g](this.$element[0][i])}}}},d.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var e=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};return a.support.transition?void this.$element[c](0).one("bsTransitionEnd",a.proxy(e,this)).emulateTransitionEnd(d.TRANSITION_DURATION):e.call(this)}}},d.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},d.prototype.getParent=function(){return a(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(a.proxy(function(c,d){var e=a(d);this.addAriaAndCollapsedClass(b(e),e)},this)).end()},d.prototype.addAriaAndCollapsedClass=function(a,b){var c=a.hasClass("in");a.attr("aria-expanded",c),b.toggleClass("collapsed",!c).attr("aria-expanded",c)};var e=a.fn.collapse;a.fn.collapse=c,a.fn.collapse.Constructor=d,a.fn.collapse.noConflict=function(){return a.fn.collapse=e,this},a(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(d){var e=a(this);e.attr("data-target")||d.preventDefault();var f=b(e),g=f.data("bs.collapse"),h=g?"toggle":e.data();c.call(f,h)})}(jQuery),+function(a){"use strict";function b(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}function c(c){c&&3===c.which||(a(e).remove(),a(f).each(function(){var d=a(this),e=b(d),f={relatedTarget:this};e.hasClass("open")&&(c&&"click"==c.type&&/input|textarea/i.test(c.target.tagName)&&a.contains(e[0],c.target)||(e.trigger(c=a.Event("hide.bs.dropdown",f)),c.isDefaultPrevented()||(d.attr("aria-expanded","false"),e.removeClass("open").trigger(a.Event("hidden.bs.dropdown",f)))))}))}function d(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new g(this)),"string"==typeof b&&d[b].call(c)})}var e=".dropdown-backdrop",f='[data-toggle="dropdown"]',g=function(b){a(b).on("click.bs.dropdown",this.toggle)};g.VERSION="3.3.7",g.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=b(e),g=f.hasClass("open");if(c(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a(document.createElement("div")).addClass("dropdown-backdrop").insertAfter(a(this)).on("click",c);var h={relatedTarget:this};if(f.trigger(d=a.Event("show.bs.dropdown",h)),d.isDefaultPrevented())return;e.trigger("focus").attr("aria-expanded","true"),f.toggleClass("open").trigger(a.Event("shown.bs.dropdown",h))}return!1}},g.prototype.keydown=function(c){if(/(38|40|27|32)/.test(c.which)&&!/input|textarea/i.test(c.target.tagName)){var d=a(this);if(c.preventDefault(),c.stopPropagation(),!d.is(".disabled, :disabled")){var e=b(d),g=e.hasClass("open");if(!g&&27!=c.which||g&&27==c.which)return 27==c.which&&e.find(f).trigger("focus"),d.trigger("click");var h=" li:not(.disabled):visible a",i=e.find(".dropdown-menu"+h);if(i.length){var j=i.index(c.target);38==c.which&&j>0&&j--,40==c.which&&jdocument.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&a?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!a?this.scrollbarWidth:""})},c.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})},c.prototype.checkScrollbar=function(){var a=window.innerWidth;if(!a){var b=document.documentElement.getBoundingClientRect();a=b.right-Math.abs(b.left)}this.bodyIsOverflowing=document.body.clientWidth
    ',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},c.prototype.init=function(b,c,d){if(this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport&&a(a.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focusin",i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},c.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},c.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b instanceof a.Event&&(c.inState["focusin"==b.type?"focus":"hover"]=!0),c.tip().hasClass("in")||"in"==c.hoverState?void(c.hoverState="in"):(clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show())},c.prototype.isInStateTrue=function(){for(var a in this.inState)if(this.inState[a])return!0;return!1},c.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);if(c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b instanceof a.Event&&(c.inState["focusout"==b.type?"focus":"hover"]=!1),!c.isInStateTrue())return clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide()},c.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);var d=a.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(b.isDefaultPrevented()||!d)return;var e=this,f=this.tip(),g=this.getUID(this.type);this.setContent(),f.attr("id",g),this.$element.attr("aria-describedby",g),this.options.animation&&f.addClass("fade");var h="function"==typeof this.options.placement?this.options.placement.call(this,f[0],this.$element[0]):this.options.placement,i=/\s?auto?\s?/i,j=i.test(h);j&&(h=h.replace(i,"")||"top"),f.detach().css({top:0,left:0,display:"block"}).addClass(h).data("bs."+this.type,this),this.options.container?f.appendTo(this.options.container):f.insertAfter(this.$element),this.$element.trigger("inserted.bs."+this.type);var k=this.getPosition(),l=f[0].offsetWidth,m=f[0].offsetHeight;if(j){var n=h,o=this.getPosition(this.$viewport);h="bottom"==h&&k.bottom+m>o.bottom?"top":"top"==h&&k.top-mo.width?"left":"left"==h&&k.left-lg.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;jg.right&&(e.left=g.left+g.width-k)}return e},c.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},c.prototype.getUID=function(a){do a+=~~(1e6*Math.random());while(document.getElementById(a));return a},c.prototype.tip=function(){if(!this.$tip&&(this.$tip=a(this.options.template),1!=this.$tip.length))throw new Error(this.type+" `template` option must consist of exactly 1 top-level element!");return this.$tip},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},c.prototype.enable=function(){this.enabled=!0},c.prototype.disable=function(){this.enabled=!1},c.prototype.toggleEnabled=function(){this.enabled=!this.enabled},c.prototype.toggle=function(b){var c=this;b&&(c=a(b.currentTarget).data("bs."+this.type),c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c))),b?(c.inState.click=!c.inState.click,c.isInStateTrue()?c.enter(c):c.leave(c)):c.tip().hasClass("in")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){var a=this;clearTimeout(this.timeout),this.hide(function(){a.$element.off("."+a.type).removeData("bs."+a.type),a.$tip&&a.$tip.detach(),a.$tip=null,a.$arrow=null,a.$viewport=null,a.$element=null})};var d=a.fn.tooltip;a.fn.tooltip=b,a.fn.tooltip.Constructor=c,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=d,this}}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof b&&b;!e&&/destroy|hide/.test(b)||(e||d.data("bs.popover",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");c.VERSION="3.3.7",c.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:''}),c.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),c.prototype.constructor=c,c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content").children().detach().end()[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},c.prototype.hasContent=function(){return this.getTitle()||this.getContent()},c.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};var d=a.fn.popover;a.fn.popover=b,a.fn.popover.Constructor=c,a.fn.popover.noConflict=function(){return a.fn.popover=d,this}}(jQuery),+function(a){"use strict";function b(c,d){this.$body=a(document.body),this.$scrollElement=a(a(c).is(document.body)?window:c),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",a.proxy(this.process,this)),this.refresh(),this.process()}function c(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})}b.VERSION="3.3.7",b.DEFAULTS={offset:10},b.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},b.prototype.refresh=function(){var b=this,c="offset",d=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),a.isWindow(this.$scrollElement[0])||(c="position",d=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var b=a(this),e=b.data("target")||b.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[c]().top+d,e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){b.offsets.push(this[0]),b.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.getScrollHeight(),d=this.options.offset+c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(this.scrollHeight!=c&&this.refresh(),b>=d)return g!=(a=f[f.length-1])&&this.activate(a);if(g&&b=e[a]&&(void 0===e[a+1]||b .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),b.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),h?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu").length&&b.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),e&&e()}var g=d.find("> .active"),h=e&&a.support.transition&&(g.length&&g.hasClass("fade")||!!d.find("> .fade").length);g.length&&h?g.one("bsTransitionEnd",f).emulateTransitionEnd(c.TRANSITION_DURATION):f(),g.removeClass("in")};var d=a.fn.tab;a.fn.tab=b,a.fn.tab.Constructor=c,a.fn.tab.noConflict=function(){return a.fn.tab=d,this};var e=function(c){c.preventDefault(),b.call(a(this),"show")};a(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',e).on("click.bs.tab.data-api",'[data-toggle="pill"]',e)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof b&&b;e||d.data("bs.affix",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.options=a.extend({},c.DEFAULTS,d),this.$target=a(this.options.target).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(b),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};c.VERSION="3.3.7",c.RESET="affix affix-top affix-bottom",c.DEFAULTS={offset:0,target:window},c.prototype.getState=function(a,b,c,d){var e=this.$target.scrollTop(),f=this.$element.offset(),g=this.$target.height();if(null!=c&&"top"==this.affixed)return e=a-d&&"bottom"},c.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(c.RESET).addClass("affix");var a=this.$target.scrollTop(),b=this.$element.offset();return this.pinnedOffset=b.top-a},c.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},c.prototype.checkPosition=function(){if(this.$element.is(":visible")){var b=this.$element.height(),d=this.options.offset,e=d.top,f=d.bottom,g=Math.max(a(document).height(),a(document.body).height());"object"!=typeof d&&(f=e=d),"function"==typeof e&&(e=d.top(this.$element)),"function"==typeof f&&(f=d.bottom(this.$element));var h=this.getState(g,b,e,f);if(this.affixed!=h){null!=this.unpin&&this.$element.css("top","");var i="affix"+(h?"-"+h:""),j=a.Event(i+".bs.affix");if(this.$element.trigger(j),j.isDefaultPrevented())return;this.affixed=h,this.unpin="bottom"==h?this.getPinnedOffset():null,this.$element.removeClass(c.RESET).addClass(i).trigger(i.replace("affix","affixed")+".bs.affix")}"bottom"==h&&this.$element.offset({top:g-b-f})}};var d=a.fn.affix;a.fn.affix=b,a.fn.affix.Constructor=c,a.fn.affix.noConflict=function(){return a.fn.affix=d,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var c=a(this),d=c.data();d.offset=d.offset||{},null!=d.offsetBottom&&(d.offset.bottom=d.offsetBottom),null!=d.offsetTop&&(d.offset.top=d.offsetTop),b.call(c,d)})})}(jQuery); \ No newline at end of file diff --git a/lib/composer/vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/js/file.js b/lib/composer/vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/js/file.js new file mode 100644 index 000000000..756cc08af --- /dev/null +++ b/lib/composer/vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/js/file.js @@ -0,0 +1,61 @@ + $(function() { + var $window = $(window) + , $top_link = $('#toplink') + , $body = $('body, html') + , offset = $('#code').offset().top + , hidePopover = function ($target) { + $target.data('popover-hover', false); + + setTimeout(function () { + if (!$target.data('popover-hover')) { + $target.popover('hide'); + } + }, 300); + }; + + $top_link.hide().click(function(event) { + event.preventDefault(); + $body.animate({scrollTop:0}, 800); + }); + + $window.scroll(function() { + if($window.scrollTop() > offset) { + $top_link.fadeIn(); + } else { + $top_link.fadeOut(); + } + }).scroll(); + + $('.popin') + .popover({trigger: 'manual'}) + .on({ + 'mouseenter.popover': function () { + var $target = $(this); + + $target.data('popover-hover', true); + + // popover already displayed + if ($target.next('.popover').length) { + return; + } + + // show the popover + $target.popover('show'); + + // register mouse events on the popover + $target.next('.popover:not(.popover-initialized)') + .on({ + 'mouseenter': function () { + $target.data('popover-hover', true); + }, + 'mouseleave': function () { + hidePopover($target); + } + }) + .addClass('popover-initialized'); + }, + 'mouseleave.popover': function () { + hidePopover($(this)); + } + }); + }); diff --git a/lib/composer/vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/js/jquery.min.js b/lib/composer/vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/js/jquery.min.js index dad4f0aff..4c5be4c0f 100644 --- a/lib/composer/vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/js/jquery.min.js +++ b/lib/composer/vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/js/jquery.min.js @@ -1,5 +1,4 @@ -/*! jQuery v1.12.3 | (c) jQuery Foundation | jquery.org/license */ -!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=a.document,e=c.slice,f=c.concat,g=c.push,h=c.indexOf,i={},j=i.toString,k=i.hasOwnProperty,l={},m="1.12.3",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return e.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:e.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a){return n.each(this,a)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(e.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor()},push:g,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(n.isPlainObject(c)||(b=n.isArray(c)))?(b?(b=!1,f=a&&n.isArray(a)?a:[]):f=a&&n.isPlainObject(a)?a:{},g[d]=n.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray||function(a){return"array"===n.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){var b=a&&a.toString();return!n.isArray(a)&&b-parseFloat(b)+1>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==n.type(a)||a.nodeType||n.isWindow(a))return!1;try{if(a.constructor&&!k.call(a,"constructor")&&!k.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(!l.ownFirst)for(b in a)return k.call(a,b);for(b in a);return void 0===b||k.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?i[j.call(a)]||"object":typeof a},globalEval:function(b){b&&n.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b){var c,d=0;if(s(a)){for(c=a.length;c>d;d++)if(b.call(a[d],d,a[d])===!1)break}else for(d in a)if(b.call(a[d],d,a[d])===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):g.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(h)return h.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,e,g=0,h=[];if(s(a))for(d=a.length;d>g;g++)e=b(a[g],g,c),null!=e&&h.push(e);else for(g in a)e=b(a[g],g,c),null!=e&&h.push(e);return f.apply([],h)},guid:1,proxy:function(a,b){var c,d,f;return"string"==typeof b&&(f=a[b],b=a,a=f),n.isFunction(a)?(c=e.call(arguments,2),d=function(){return a.apply(b||this,c.concat(e.call(arguments)))},d.guid=a.guid=a.guid||n.guid++,d):void 0},now:function(){return+new Date},support:l}),"function"==typeof Symbol&&(n.fn[Symbol.iterator]=c[Symbol.iterator]),n.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(a,b){i["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=!!a&&"length"in a&&a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ga(),z=ga(),A=ga(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+M+"))|)"+L+"*\\]",O=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+N+")*)|.*)\\)|)",P=new RegExp(L+"+","g"),Q=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),R=new RegExp("^"+L+"*,"+L+"*"),S=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),T=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),U=new RegExp(O),V=new RegExp("^"+M+"$"),W={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M+"|[*])"),ATTR:new RegExp("^"+N),PSEUDO:new RegExp("^"+O),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},X=/^(?:input|select|textarea|button)$/i,Y=/^h\d$/i,Z=/^[^{]+\{\s*\[native \w/,$=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,_=/[+~]/,aa=/'|\\/g,ba=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),ca=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},da=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(ea){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function fa(a,b,d,e){var f,h,j,k,l,o,r,s,w=b&&b.ownerDocument,x=b?b.nodeType:9;if(d=d||[],"string"!=typeof a||!a||1!==x&&9!==x&&11!==x)return d;if(!e&&((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,p)){if(11!==x&&(o=$.exec(a)))if(f=o[1]){if(9===x){if(!(j=b.getElementById(f)))return d;if(j.id===f)return d.push(j),d}else if(w&&(j=w.getElementById(f))&&t(b,j)&&j.id===f)return d.push(j),d}else{if(o[2])return H.apply(d,b.getElementsByTagName(a)),d;if((f=o[3])&&c.getElementsByClassName&&b.getElementsByClassName)return H.apply(d,b.getElementsByClassName(f)),d}if(c.qsa&&!A[a+" "]&&(!q||!q.test(a))){if(1!==x)w=b,s=a;else if("object"!==b.nodeName.toLowerCase()){(k=b.getAttribute("id"))?k=k.replace(aa,"\\$&"):b.setAttribute("id",k=u),r=g(a),h=r.length,l=V.test(k)?"#"+k:"[id='"+k+"']";while(h--)r[h]=l+" "+qa(r[h]);s=r.join(","),w=_.test(a)&&oa(b.parentNode)||b}if(s)try{return H.apply(d,w.querySelectorAll(s)),d}catch(y){}finally{k===u&&b.removeAttribute("id")}}}return i(a.replace(Q,"$1"),b,d,e)}function ga(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ha(a){return a[u]=!0,a}function ia(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ja(a,b){var c=a.split("|"),e=c.length;while(e--)d.attrHandle[c[e]]=b}function ka(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function la(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function na(a){return ha(function(b){return b=+b,ha(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function oa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=fa.support={},f=fa.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=fa.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=n.documentElement,p=!f(n),(e=n.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",da,!1):e.attachEvent&&e.attachEvent("onunload",da)),c.attributes=ia(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ia(function(a){return a.appendChild(n.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Z.test(n.getElementsByClassName),c.getById=ia(function(a){return o.appendChild(a).id=u,!n.getElementsByName||!n.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ba,ca);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ba,ca);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return"undefined"!=typeof b.getElementsByClassName&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=Z.test(n.querySelectorAll))&&(ia(function(a){o.appendChild(a).innerHTML="",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ia(function(a){var b=n.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=Z.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ia(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",O)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=Z.test(o.compareDocumentPosition),t=b||Z.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===n||a.ownerDocument===v&&t(v,a)?-1:b===n||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,g=[a],h=[b];if(!e||!f)return a===n?-1:b===n?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return ka(a,b);c=a;while(c=c.parentNode)g.unshift(c);c=b;while(c=c.parentNode)h.unshift(c);while(g[d]===h[d])d++;return d?ka(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):n},fa.matches=function(a,b){return fa(a,null,null,b)},fa.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(T,"='$1']"),c.matchesSelector&&p&&!A[b+" "]&&(!r||!r.test(b))&&(!q||!q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return fa(b,n,null,[a]).length>0},fa.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},fa.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},fa.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},fa.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=fa.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=fa.selectors={cacheLength:50,createPseudo:ha,match:W,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ba,ca),a[3]=(a[3]||a[4]||a[5]||"").replace(ba,ca),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||fa.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&fa.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return W.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&U.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ba,ca).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=fa.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(P," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h,t=!1;if(q){if(f){while(p){m=b;while(m=m[p])if(h?m.nodeName.toLowerCase()===r:1===m.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){m=q,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n&&j[2],m=n&&q.childNodes[n];while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if(1===m.nodeType&&++t&&m===b){k[a]=[w,n,t];break}}else if(s&&(m=b,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n),t===!1)while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if((h?m.nodeName.toLowerCase()===r:1===m.nodeType)&&++t&&(s&&(l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),k[a]=[w,t]),m===b))break;return t-=e,t===d||t%d===0&&t/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fa.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ha(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ha(function(a){var b=[],c=[],d=h(a.replace(Q,"$1"));return d[u]?ha(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ha(function(a){return function(b){return fa(a,b).length>0}}),contains:ha(function(a){return a=a.replace(ba,ca),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ha(function(a){return V.test(a||"")||fa.error("unsupported lang: "+a),a=a.replace(ba,ca).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Y.test(a.nodeName)},input:function(a){return X.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:na(function(){return[0]}),last:na(function(a,b){return[b-1]}),eq:na(function(a,b,c){return[0>c?c+b:c]}),even:na(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:na(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:na(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:na(function(a,b,c){for(var d=0>c?c+b:c;++db;b++)d+=a[b].value;return d}function ra(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j,k=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(j=b[u]||(b[u]={}),i=j[b.uniqueID]||(j[b.uniqueID]={}),(h=i[d])&&h[0]===w&&h[1]===f)return k[2]=h[2];if(i[d]=k,k[2]=a(b,c,g))return!0}}}function sa(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ta(a,b,c){for(var d=0,e=b.length;e>d;d++)fa(a,b[d],c);return c}function ua(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(c&&!c(f,d,e)||(g.push(f),j&&b.push(h)));return g}function va(a,b,c,d,e,f){return d&&!d[u]&&(d=va(d)),e&&!e[u]&&(e=va(e,f)),ha(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ta(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ua(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ua(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=ua(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function wa(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=ra(function(a){return a===b},h,!0),l=ra(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[ra(sa(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return va(i>1&&sa(m),i>1&&qa(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(Q,"$1"),c,e>i&&wa(a.slice(i,e)),f>e&&wa(a=a.slice(e)),f>e&&qa(a))}m.push(c)}return sa(m)}function xa(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,o,q,r=0,s="0",t=f&&[],u=[],v=j,x=f||e&&d.find.TAG("*",k),y=w+=null==v?1:Math.random()||.1,z=x.length;for(k&&(j=g===n||g||k);s!==z&&null!=(l=x[s]);s++){if(e&&l){o=0,g||l.ownerDocument===n||(m(l),h=!p);while(q=a[o++])if(q(l,g||n,h)){i.push(l);break}k&&(w=y)}c&&((l=!q&&l)&&r--,f&&t.push(l))}if(r+=s,c&&s!==r){o=0;while(q=b[o++])q(t,u,g,h);if(f){if(r>0)while(s--)t[s]||u[s]||(u[s]=F.call(i));u=ua(u)}H.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&fa.uniqueSort(i)}return k&&(w=y,j=v),t};return c?ha(f):f}return h=fa.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=wa(b[c]),f[u]?d.push(f):e.push(f);f=A(a,xa(e,d)),f.selector=a}return f},i=fa.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(ba,ca),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=W.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(ba,ca),_.test(j[0].type)&&oa(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qa(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,!b||_.test(a)&&oa(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ia(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ia(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||ja("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ia(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ja("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ia(function(a){return null==a.getAttribute("disabled")})||ja(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),fa}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.uniqueSort=n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&n(a).is(c))break;d.push(a)}return d},v=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},w=n.expr.match.needsContext,x=/^<([\w-]+)\s*\/?>(?:<\/\1>|)$/,y=/^.[^:#\[\.,]*$/;function z(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(y.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return n.inArray(a,b)>-1!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;e>b;b++)if(n.contains(d[b],this))return!0}));for(b=0;e>b;b++)n.find(a,d[b],c);return c=this.pushStack(e>1?n.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(z(this,a||[],!1))},not:function(a){return this.pushStack(z(this,a||[],!0))},is:function(a){return!!z(this,"string"==typeof a&&w.test(a)?n(a):a||[],!1).length}});var A,B=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,C=n.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||A,"string"==typeof a){if(e="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:B.exec(a),!e||!e[1]&&b)return!b||b.jquery?(b||c).find(a):this.constructor(b).find(a);if(e[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:d,!0)),x.test(e[1])&&n.isPlainObject(b))for(e in b)n.isFunction(this[e])?this[e](b[e]):this.attr(e,b[e]);return this}if(f=d.getElementById(e[2]),f&&f.parentNode){if(f.id!==e[2])return A.find(a);this.length=1,this[0]=f}return this.context=d,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?"undefined"!=typeof c.ready?c.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};C.prototype=n.fn,A=n(d);var D=/^(?:parents|prev(?:Until|All))/,E={children:!0,contents:!0,next:!0,prev:!0};n.fn.extend({has:function(a){var b,c=n(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(n.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=w.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.uniqueSort(f):f)},index:function(a){return a?"string"==typeof a?n.inArray(this[0],n(a)):n.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.uniqueSort(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function F(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return u(a,"parentNode")},parentsUntil:function(a,b,c){return u(a,"parentNode",c)},next:function(a){return F(a,"nextSibling")},prev:function(a){return F(a,"previousSibling")},nextAll:function(a){return u(a,"nextSibling")},prevAll:function(a){return u(a,"previousSibling")},nextUntil:function(a,b,c){return u(a,"nextSibling",c)},prevUntil:function(a,b,c){return u(a,"previousSibling",c)},siblings:function(a){return v((a.parentNode||{}).firstChild,a)},children:function(a){return v(a.firstChild)},contents:function(a){return n.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(E[a]||(e=n.uniqueSort(e)),D.test(a)&&(e=e.reverse())),this.pushStack(e)}});var G=/\S+/g;function H(a){var b={};return n.each(a.match(G)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?H(a):n.extend({},a);var b,c,d,e,f=[],g=[],h=-1,i=function(){for(e=a.once,d=b=!0;g.length;h=-1){c=g.shift();while(++h-1)f.splice(c,1),h>=c&&h--}),this},has:function(a){return a?n.inArray(a,f)>-1:f.length>0},empty:function(){return f&&(f=[]),this},disable:function(){return e=g=[],f=c="",this},disabled:function(){return!f},lock:function(){return e=!0,c||j.disable(),this},locked:function(){return!!e},fireWith:function(a,c){return e||(c=c||[],c=[a,c.slice?c.slice():c],g.push(c),b||i()),this},fire:function(){return j.fireWith(this,arguments),this},fired:function(){return!!d}};return j},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().progress(c.notify).done(c.resolve).fail(c.reject):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=e.call(arguments),d=c.length,f=1!==d||a&&n.isFunction(a.promise)?d:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(d){b[a]=this,c[a]=arguments.length>1?e.call(arguments):d,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(d>1)for(i=new Array(d),j=new Array(d),k=new Array(d);d>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().progress(h(b,j,i)).done(h(b,k,c)).fail(g.reject):--f;return f||g.resolveWith(k,c),g.promise()}});var I;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){(a===!0?--n.readyWait:n.isReady)||(n.isReady=!0,a!==!0&&--n.readyWait>0||(I.resolveWith(d,[n]),n.fn.triggerHandler&&(n(d).triggerHandler("ready"),n(d).off("ready"))))}});function J(){d.addEventListener?(d.removeEventListener("DOMContentLoaded",K),a.removeEventListener("load",K)):(d.detachEvent("onreadystatechange",K),a.detachEvent("onload",K))}function K(){(d.addEventListener||"load"===a.event.type||"complete"===d.readyState)&&(J(),n.ready())}n.ready.promise=function(b){if(!I)if(I=n.Deferred(),"complete"===d.readyState||"loading"!==d.readyState&&!d.documentElement.doScroll)a.setTimeout(n.ready);else if(d.addEventListener)d.addEventListener("DOMContentLoaded",K),a.addEventListener("load",K);else{d.attachEvent("onreadystatechange",K),a.attachEvent("onload",K);var c=!1;try{c=null==a.frameElement&&d.documentElement}catch(e){}c&&c.doScroll&&!function f(){if(!n.isReady){try{c.doScroll("left")}catch(b){return a.setTimeout(f,50)}J(),n.ready()}}()}return I.promise(b)},n.ready.promise();var L;for(L in n(l))break;l.ownFirst="0"===L,l.inlineBlockNeedsLayout=!1,n(function(){var a,b,c,e;c=d.getElementsByTagName("body")[0],c&&c.style&&(b=d.createElement("div"),e=d.createElement("div"),e.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(e).appendChild(b),"undefined"!=typeof b.style.zoom&&(b.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",l.inlineBlockNeedsLayout=a=3===b.offsetWidth,a&&(c.style.zoom=1)),c.removeChild(e))}),function(){var a=d.createElement("div");l.deleteExpando=!0;try{delete a.test}catch(b){l.deleteExpando=!1}a=null}();var M=function(a){var b=n.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b},N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(O,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:N.test(c)?n.parseJSON(c):c}catch(e){}n.data(a,b,c)}else c=void 0; -}return c}function Q(a){var b;for(b in a)if(("data"!==b||!n.isEmptyObject(a[b]))&&"toJSON"!==b)return!1;return!0}function R(a,b,d,e){if(M(a)){var f,g,h=n.expando,i=a.nodeType,j=i?n.cache:a,k=i?a[h]:a[h]&&h;if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||n.guid++:h),j[k]||(j[k]=i?{}:{toJSON:n.noop}),"object"!=typeof b&&"function"!=typeof b||(e?j[k]=n.extend(j[k],b):j[k].data=n.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[n.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[n.camelCase(b)])):f=g,f}}function S(a,b,c){if(M(a)){var d,e,f=a.nodeType,g=f?n.cache:a,h=f?a[n.expando]:n.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){n.isArray(b)?b=b.concat(n.map(b,n.camelCase)):b in d?b=[b]:(b=n.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!Q(d):!n.isEmptyObject(d))return}(c||(delete g[h].data,Q(g[h])))&&(f?n.cleanData([a],!0):l.deleteExpando||g!=g.window?delete g[h]:g[h]=void 0)}}}n.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?n.cache[a[n.expando]]:a[n.expando],!!a&&!Q(a)},data:function(a,b,c){return R(a,b,c)},removeData:function(a,b){return S(a,b)},_data:function(a,b,c){return R(a,b,c,!0)},_removeData:function(a,b){return S(a,b,!0)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=n.data(f),1===f.nodeType&&!n._data(f,"parsedAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),P(f,d,e[d])));n._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){n.data(this,a)}):arguments.length>1?this.each(function(){n.data(this,a,b)}):f?P(f,a,n.data(f,a)):void 0},removeData:function(a){return this.each(function(){n.removeData(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=n._data(a,b),c&&(!d||n.isArray(c)?d=n._data(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return n._data(a,c)||n._data(a,c,{empty:n.Callbacks("once memory").add(function(){n._removeData(a,b+"queue"),n._removeData(a,c)})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.lengthh;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},Z=/^(?:checkbox|radio)$/i,$=/<([\w:-]+)/,_=/^$|\/(?:java|ecma)script/i,aa=/^\s+/,ba="abbr|article|aside|audio|bdi|canvas|data|datalist|details|dialog|figcaption|figure|footer|header|hgroup|main|mark|meter|nav|output|picture|progress|section|summary|template|time|video";function ca(a){var b=ba.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}!function(){var a=d.createElement("div"),b=d.createDocumentFragment(),c=d.createElement("input");a.innerHTML="
    a",l.leadingWhitespace=3===a.firstChild.nodeType,l.tbody=!a.getElementsByTagName("tbody").length,l.htmlSerialize=!!a.getElementsByTagName("link").length,l.html5Clone="<:nav>"!==d.createElement("nav").cloneNode(!0).outerHTML,c.type="checkbox",c.checked=!0,b.appendChild(c),l.appendChecked=c.checked,a.innerHTML="",l.noCloneChecked=!!a.cloneNode(!0).lastChild.defaultValue,b.appendChild(a),c=d.createElement("input"),c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),a.appendChild(c),l.checkClone=a.cloneNode(!0).cloneNode(!0).lastChild.checked,l.noCloneEvent=!!a.addEventListener,a[n.expando]=1,l.attributes=!a.getAttribute(n.expando)}();var da={option:[1,""],legend:[1,"
    ","
    "],area:[1,"",""],param:[1,"",""],thead:[1,"","
    "],tr:[2,"","
    "],col:[2,"","
    "],td:[3,"","
    "],_default:l.htmlSerialize?[0,"",""]:[1,"X
    ","
    "]};da.optgroup=da.option,da.tbody=da.tfoot=da.colgroup=da.caption=da.thead,da.th=da.td;function ea(a,b){var c,d,e=0,f="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||n.nodeName(d,b)?f.push(d):n.merge(f,ea(d,b));return void 0===b||b&&n.nodeName(a,b)?n.merge([a],f):f}function fa(a,b){for(var c,d=0;null!=(c=a[d]);d++)n._data(c,"globalEval",!b||n._data(b[d],"globalEval"))}var ga=/<|&#?\w+;/,ha=/r;r++)if(g=a[r],g||0===g)if("object"===n.type(g))n.merge(q,g.nodeType?[g]:g);else if(ga.test(g)){i=i||p.appendChild(b.createElement("div")),j=($.exec(g)||["",""])[1].toLowerCase(),m=da[j]||da._default,i.innerHTML=m[1]+n.htmlPrefilter(g)+m[2],f=m[0];while(f--)i=i.lastChild;if(!l.leadingWhitespace&&aa.test(g)&&q.push(b.createTextNode(aa.exec(g)[0])),!l.tbody){g="table"!==j||ha.test(g)?""!==m[1]||ha.test(g)?0:i:i.firstChild,f=g&&g.childNodes.length;while(f--)n.nodeName(k=g.childNodes[f],"tbody")&&!k.childNodes.length&&g.removeChild(k)}n.merge(q,i.childNodes),i.textContent="";while(i.firstChild)i.removeChild(i.firstChild);i=p.lastChild}else q.push(b.createTextNode(g));i&&p.removeChild(i),l.appendChecked||n.grep(ea(q,"input"),ia),r=0;while(g=q[r++])if(d&&n.inArray(g,d)>-1)e&&e.push(g);else if(h=n.contains(g.ownerDocument,g),i=ea(p.appendChild(g),"script"),h&&fa(i),c){f=0;while(g=i[f++])_.test(g.type||"")&&c.push(g)}return i=null,p}!function(){var b,c,e=d.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(l[b]=c in a)||(e.setAttribute(c,"t"),l[b]=e.attributes[c].expando===!1);e=null}();var ka=/^(?:input|select|textarea)$/i,la=/^key/,ma=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,na=/^(?:focusinfocus|focusoutblur)$/,oa=/^([^.]*)(?:\.(.+)|)/;function pa(){return!0}function qa(){return!1}function ra(){try{return d.activeElement}catch(a){}}function sa(a,b,c,d,e,f){var g,h;if("object"==typeof b){"string"!=typeof c&&(d=d||c,c=void 0);for(h in b)sa(a,h,c,d,b[h],f);return a}if(null==d&&null==e?(e=c,d=c=void 0):null==e&&("string"==typeof c?(e=d,d=void 0):(e=d,d=c,c=void 0)),e===!1)e=qa;else if(!e)return a;return 1===f&&(g=e,e=function(a){return n().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=n.guid++)),a.each(function(){n.event.add(this,b,e,d,c)})}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=n._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=n.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return"undefined"==typeof n||a&&n.event.triggered===a.type?void 0:n.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(G)||[""],h=b.length;while(h--)f=oa.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=n.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=n.event.special[o]||{},l=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},i),(m=g[o])||(m=g[o]=[],m.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,l):m.push(l),n.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=n.hasData(a)&&n._data(a);if(r&&(k=r.events)){b=(b||"").match(G)||[""],j=b.length;while(j--)if(h=oa.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=m.length;while(f--)g=m[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(m.splice(f,1),g.selector&&m.delegateCount--,l.remove&&l.remove.call(a,g));i&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(k)&&(delete r.handle,n._removeData(a,"events"))}},trigger:function(b,c,e,f){var g,h,i,j,l,m,o,p=[e||d],q=k.call(b,"type")?b.type:b,r=k.call(b,"namespace")?b.namespace.split("."):[];if(i=m=e=e||d,3!==e.nodeType&&8!==e.nodeType&&!na.test(q+n.event.triggered)&&(q.indexOf(".")>-1&&(r=q.split("."),q=r.shift(),r.sort()),h=q.indexOf(":")<0&&"on"+q,b=b[n.expando]?b:new n.Event(q,"object"==typeof b&&b),b.isTrigger=f?2:3,b.namespace=r.join("."),b.rnamespace=b.namespace?new RegExp("(^|\\.)"+r.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=e),c=null==c?[b]:n.makeArray(c,[b]),l=n.event.special[q]||{},f||!l.trigger||l.trigger.apply(e,c)!==!1)){if(!f&&!l.noBubble&&!n.isWindow(e)){for(j=l.delegateType||q,na.test(j+q)||(i=i.parentNode);i;i=i.parentNode)p.push(i),m=i;m===(e.ownerDocument||d)&&p.push(m.defaultView||m.parentWindow||a)}o=0;while((i=p[o++])&&!b.isPropagationStopped())b.type=o>1?j:l.bindType||q,g=(n._data(i,"events")||{})[b.type]&&n._data(i,"handle"),g&&g.apply(i,c),g=h&&i[h],g&&g.apply&&M(i)&&(b.result=g.apply(i,c),b.result===!1&&b.preventDefault());if(b.type=q,!f&&!b.isDefaultPrevented()&&(!l._default||l._default.apply(p.pop(),c)===!1)&&M(e)&&h&&e[q]&&!n.isWindow(e)){m=e[h],m&&(e[h]=null),n.event.triggered=q;try{e[q]()}catch(s){}n.event.triggered=void 0,m&&(e[h]=m)}return b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,d,f,g,h=[],i=e.call(arguments),j=(n._data(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())a.rnamespace&&!a.rnamespace.test(g.namespace)||(a.handleObj=g,a.data=g.data,d=((n.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==d&&(a.result=d)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&("click"!==a.type||isNaN(a.button)||a.button<1))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?n(e,this).index(i)>-1:n.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h]","i"),va=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi,wa=/\s*$/g,Aa=ca(d),Ba=Aa.appendChild(d.createElement("div"));function Ca(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function Da(a){return a.type=(null!==n.find.attr(a,"type"))+"/"+a.type,a}function Ea(a){var b=ya.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function Fa(a,b){if(1===b.nodeType&&n.hasData(a)){var c,d,e,f=n._data(a),g=n._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)n.event.add(b,c,h[c][d])}g.data&&(g.data=n.extend({},g.data))}}function Ga(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!l.noCloneEvent&&b[n.expando]){e=n._data(b);for(d in e.events)n.removeEvent(b,d,e.handle);b.removeAttribute(n.expando)}"script"===c&&b.text!==a.text?(Da(b).text=a.text,Ea(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),l.html5Clone&&a.innerHTML&&!n.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&Z.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:"input"!==c&&"textarea"!==c||(b.defaultValue=a.defaultValue)}}function Ha(a,b,c,d){b=f.apply([],b);var e,g,h,i,j,k,m=0,o=a.length,p=o-1,q=b[0],r=n.isFunction(q);if(r||o>1&&"string"==typeof q&&!l.checkClone&&xa.test(q))return a.each(function(e){var f=a.eq(e);r&&(b[0]=q.call(this,e,f.html())),Ha(f,b,c,d)});if(o&&(k=ja(b,a[0].ownerDocument,!1,a,d),e=k.firstChild,1===k.childNodes.length&&(k=e),e||d)){for(i=n.map(ea(k,"script"),Da),h=i.length;o>m;m++)g=k,m!==p&&(g=n.clone(g,!0,!0),h&&n.merge(i,ea(g,"script"))),c.call(a[m],g,m);if(h)for(j=i[i.length-1].ownerDocument,n.map(i,Ea),m=0;h>m;m++)g=i[m],_.test(g.type||"")&&!n._data(g,"globalEval")&&n.contains(j,g)&&(g.src?n._evalUrl&&n._evalUrl(g.src):n.globalEval((g.text||g.textContent||g.innerHTML||"").replace(za,"")));k=e=null}return a}function Ia(a,b,c){for(var d,e=b?n.filter(b,a):a,f=0;null!=(d=e[f]);f++)c||1!==d.nodeType||n.cleanData(ea(d)),d.parentNode&&(c&&n.contains(d.ownerDocument,d)&&fa(ea(d,"script")),d.parentNode.removeChild(d));return a}n.extend({htmlPrefilter:function(a){return a.replace(va,"<$1>")},clone:function(a,b,c){var d,e,f,g,h,i=n.contains(a.ownerDocument,a);if(l.html5Clone||n.isXMLDoc(a)||!ua.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(Ba.innerHTML=a.outerHTML,Ba.removeChild(f=Ba.firstChild)),!(l.noCloneEvent&&l.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(d=ea(f),h=ea(a),g=0;null!=(e=h[g]);++g)d[g]&&Ga(e,d[g]);if(b)if(c)for(h=h||ea(a),d=d||ea(f),g=0;null!=(e=h[g]);g++)Fa(e,d[g]);else Fa(a,f);return d=ea(f,"script"),d.length>0&&fa(d,!i&&ea(a,"script")),d=h=e=null,f},cleanData:function(a,b){for(var d,e,f,g,h=0,i=n.expando,j=n.cache,k=l.attributes,m=n.event.special;null!=(d=a[h]);h++)if((b||M(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)m[e]?n.event.remove(d,e):n.removeEvent(d,e,g.handle);j[f]&&(delete j[f],k||"undefined"==typeof d.removeAttribute?d[i]=void 0:d.removeAttribute(i),c.push(f))}}}),n.fn.extend({domManip:Ha,detach:function(a){return Ia(this,a,!0)},remove:function(a){return Ia(this,a)},text:function(a){return Y(this,function(a){return void 0===a?n.text(this):this.empty().append((this[0]&&this[0].ownerDocument||d).createTextNode(a))},null,a,arguments.length)},append:function(){return Ha(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ca(this,a);b.appendChild(a)}})},prepend:function(){return Ha(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ca(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return Ha(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return Ha(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&n.cleanData(ea(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&n.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return Y(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(ta,""):void 0;if("string"==typeof a&&!wa.test(a)&&(l.htmlSerialize||!ua.test(a))&&(l.leadingWhitespace||!aa.test(a))&&!da[($.exec(a)||["",""])[1].toLowerCase()]){a=n.htmlPrefilter(a);try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(ea(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=[];return Ha(this,arguments,function(b){var c=this.parentNode;n.inArray(this,a)<0&&(n.cleanData(ea(this)),c&&c.replaceChild(b,this))},a)}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=0,e=[],f=n(a),h=f.length-1;h>=d;d++)c=d===h?this:this.clone(!0),n(f[d])[b](c),g.apply(e,c.get());return this.pushStack(e)}});var Ja,Ka={HTML:"block",BODY:"block"};function La(a,b){var c=n(b.createElement(a)).appendTo(b.body),d=n.css(c[0],"display");return c.detach(),d}function Ma(a){var b=d,c=Ka[a];return c||(c=La(a,b),"none"!==c&&c||(Ja=(Ja||n("