diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS new file mode 100644 index 0000000..b10f4cd --- /dev/null +++ b/.github/CODEOWNERS @@ -0,0 +1 @@ +* @rancoud \ No newline at end of file diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 0000000..a8ce69f --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,91 @@ +name: test + +on: + push: + pull_request: + +jobs: + test: + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + os: + - ubuntu-latest + + services: + mysql: + image: mysql:5.7 + env: + MYSQL_ALLOW_EMPTY_PASSWORD: yes + MYSQL_USER: root + MYSQL_PASSWORD: '' + MYSQL_DATABASE: test_database + ports: + - 3306:3306 + options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3 + + redis: + image: redis + options: >- + --health-cmd "redis-cli ping" + --health-interval 10s + --health-timeout 5s + --health-retries 5 + ports: + - 6379:6379 + + steps: + - name: Verify MySQL connection from host + run: | + sudo apt-get install -y mysql-client + mysql --host 127.0.0.1 --port 3306 -uroot --password="" -e "SHOW DATABASES" + + - uses: actions/checkout@v2 + + - uses: shivammathur/setup-php@v2 + with: + php-version: '7.4' + coverage: xdebug + + - name: Set files permission + run: | + sudo chown -R www-data:www-data /var/lib/php/sessions/ + sudo chmod -R 777 /var/lib/php/sessions/ + + - name: Validate composer.json and composer.lock + run: composer validate + + - name: Cache Composer packages + id: composer-cache + uses: actions/cache@v2 + with: + path: vendor + key: ${{ runner.os }}-node-${{ hashFiles('**/composer.lock') }} + restore-keys: | + ${{ runner.os }}-node- + + - name: Install dependencies + if: steps.composer-cache.outputs.cache-hit != 'true' + run: composer install --prefer-dist --no-progress --no-suggest + + - name: PHPCS + if: ${{ runner.os != 'Windows' }} + run: | + vendor/bin/php-cs-fixer fix --diff --dry-run + + - name: PHPUnit + run: | + vendor/bin/phpunit --colors --coverage-text --coverage-clover coverage/clover.xml + env: + MYSQL_HOST: 127.0.0.1 + MYSQL_PORT: ${{ job.services.mysql.ports[3306] }} + MYSQL_USER: root + MYSQL_PASSWORD: + + - name: Upload coverage + uses: codecov/codecov-action@v1.0.7 + if: success() + with: + token: ${{ secrets.CODECOV_TOKEN }} + file: ./coverage/clover.xml \ No newline at end of file diff --git a/.gitignore b/.gitignore index 7e5d1bc..6bb5f43 100644 --- a/.gitignore +++ b/.gitignore @@ -4,15 +4,14 @@ # Composer vendor/ -composer.lock # PHP code sniffer .php_cs.cache # PHP Unit build/ +.phpunit.result.cache # Dev / Testing test.php -coverage/* -!coverage/.gitkeep \ No newline at end of file +coverage/ \ No newline at end of file diff --git a/.php_cs b/.php_cs index 8706f16..f25e5bb 100644 --- a/.php_cs +++ b/.php_cs @@ -24,11 +24,14 @@ return PhpCsFixer\Config::create() 'php_unit_strict' => true, 'phpdoc_order' => true, 'semicolon_after_instruction' => true, + 'single_import_per_statement' => false, 'strict_comparison' => true, 'strict_param' => true, 'concat_space' => ['spacing' => 'one'], 'trailing_comma_in_multiline_array' => false, - 'yoda_style' => null + 'yoda_style' => null, + 'single_line_throw' => false, + 'no_superfluous_phpdoc_tags' => false ]) ->setFinder($finder) ->setCacheFile(__DIR__.'/.php_cs.cache'); \ No newline at end of file diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 148baad..0000000 --- a/.travis.yml +++ /dev/null @@ -1,24 +0,0 @@ -language: php - -php: - - 7.2 - -services: - - redis-server - -env: - - DB=mysql - -install: - - composer selfupdate - - composer install - -before_script: - - if [[ "$DB" == "mysql" ]]; then mysql -e "create database IF NOT EXISTS test_database;" -uroot; fi - -script: - - ./vendor/bin/php-cs-fixer fix --diff --dry-run - - ./vendor/bin/phpunit --colors --coverage-text --coverage-clover build/logs/clover.xml - -after_success: - - travis_retry php vendor/bin/coveralls \ No newline at end of file diff --git a/README.md b/README.md index 9713167..c8c1b87 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,12 @@ # Session Package -[![Build Status](https://travis-ci.org/rancoud/Session.svg?branch=master)](https://travis-ci.org/rancoud/Session) [![Coverage Status](https://coveralls.io/repos/github/rancoud/Session/badge.svg?branch=master)](https://coveralls.io/github/rancoud/Session?branch=master) +![Packagist PHP Version Support](https://img.shields.io/packagist/php-v/rancoud/session) +[![Packagist Version](https://img.shields.io/packagist/v/rancoud/session)](https://packagist.org/packages/rancoud/session) +[![Packagist Downloads](https://img.shields.io/packagist/dt/rancoud/session)](https://packagist.org/packages/rancoud/session) +[![Composer dependencies](https://img.shields.io/badge/dependencies-0-brightgreen)](https://github.com/rancoud/session/blob/master/composer.json) +[![Test workflow](https://img.shields.io/github/workflow/status/rancoud/session/test?label=test&logo=github)](https://github.com/rancoud/session/actions?workflow=test) +[![Codecov](https://img.shields.io/codecov/c/github/rancoud/session?logo=codecov)](https://codecov.io/gh/rancoud/session) +[![composer.lock](https://poser.pugx.org/rancoud/session/composerlock)](https://packagist.org/packages/rancoud/session) Session. @@ -190,5 +196,6 @@ composer require predis/predis ``` ## How to Dev -`./run_all_commands.sh` for php-cs-fixer and phpunit and coverage -`./run_php_unit_coverage.sh` for phpunit and coverage \ No newline at end of file +`composer ci` for php-cs-fixer and phpunit and coverage +`composer lint` for php-cs-fixer +`composer test` for phpunit and coverage \ No newline at end of file diff --git a/composer.json b/composer.json index 80b513e..c6de6c1 100644 --- a/composer.json +++ b/composer.json @@ -16,15 +16,27 @@ } }, "require": { - "php": ">=7.2.0", - "ext-openssl": ">=7.2.0" + "php": ">=7.4.0", + "ext-openssl": ">=7.4.0" }, "require-dev": { - "phpunit/phpunit": "~6.2.0", - "squizlabs/php_codesniffer": "^3.0", - "friendsofphp/php-cs-fixer": "^2.5", - "satooshi/php-coveralls": "^1.0", - "rancoud/database": "^3.0", - "predis/predis": "^1.1" + "friendsofphp/php-cs-fixer": "^2.16", + "phpunit/phpunit": "^9.1", + "predis/predis": "^1.1", + "rancoud/database": "^4.0", + "squizlabs/php_codesniffer": "^3.5" + }, + "scripts": { + "ci": [ + "@lint", + "@test" + ], + "lint": [ + "phpcbf", + "php-cs-fixer fix" + ], + "test": [ + "phpunit --colors --coverage-html ./coverage" + ] } } diff --git a/composer.lock b/composer.lock new file mode 100644 index 0000000..e7353ec --- /dev/null +++ b/composer.lock @@ -0,0 +1,3880 @@ +{ + "_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#installing-dependencies", + "This file is @generated automatically" + ], + "content-hash": "7204fb14ec0ef8f966236c6d2b3aa6e0", + "packages": [], + "packages-dev": [ + { + "name": "composer/semver", + "version": "1.5.1", + "source": { + "type": "git", + "url": "https://github.com/composer/semver.git", + "reference": "c6bea70230ef4dd483e6bbcab6005f682ed3a8de" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/semver/zipball/c6bea70230ef4dd483e6bbcab6005f682ed3a8de", + "reference": "c6bea70230ef4dd483e6bbcab6005f682ed3a8de", + "shasum": "" + }, + "require": { + "php": "^5.3.2 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.5 || ^5.0.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Composer\\Semver\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nils Adermann", + "email": "naderman@naderman.de", + "homepage": "http://www.naderman.de" + }, + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + }, + { + "name": "Rob Bast", + "email": "rob.bast@gmail.com", + "homepage": "http://robbast.nl" + } + ], + "description": "Semver library that offers utilities, version constraint parsing and validation.", + "keywords": [ + "semantic", + "semver", + "validation", + "versioning" + ], + "time": "2020-01-13T12:06:48+00:00" + }, + { + "name": "composer/xdebug-handler", + "version": "1.4.2", + "source": { + "type": "git", + "url": "https://github.com/composer/xdebug-handler.git", + "reference": "fa2aaf99e2087f013a14f7432c1cd2dd7d8f1f51" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/fa2aaf99e2087f013a14f7432c1cd2dd7d8f1f51", + "reference": "fa2aaf99e2087f013a14f7432c1cd2dd7d8f1f51", + "shasum": "" + }, + "require": { + "php": "^5.3.2 || ^7.0 || ^8.0", + "psr/log": "^1.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7 || 6.5 - 8" + }, + "type": "library", + "autoload": { + "psr-4": { + "Composer\\XdebugHandler\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "John Stevenson", + "email": "john-stevenson@blueyonder.co.uk" + } + ], + "description": "Restarts a process without Xdebug.", + "keywords": [ + "Xdebug", + "performance" + ], + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "time": "2020-06-04T11:16:35+00:00" + }, + { + "name": "doctrine/annotations", + "version": "1.10.3", + "source": { + "type": "git", + "url": "https://github.com/doctrine/annotations.git", + "reference": "5db60a4969eba0e0c197a19c077780aadbc43c5d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/annotations/zipball/5db60a4969eba0e0c197a19c077780aadbc43c5d", + "reference": "5db60a4969eba0e0c197a19c077780aadbc43c5d", + "shasum": "" + }, + "require": { + "doctrine/lexer": "1.*", + "ext-tokenizer": "*", + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "doctrine/cache": "1.*", + "phpunit/phpunit": "^7.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.9.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "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": "2020-05-25T17:24:27+00:00" + }, + { + "name": "doctrine/instantiator", + "version": "1.3.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/instantiator.git", + "reference": "f350df0268e904597e3bd9c4685c53e0e333feea" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/f350df0268e904597e3bd9c4685c53e0e333feea", + "reference": "f350df0268e904597e3bd9c4685c53e0e333feea", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^6.0", + "ext-pdo": "*", + "ext-phar": "*", + "phpbench/phpbench": "^0.13", + "phpstan/phpstan-phpunit": "^0.11", + "phpstan/phpstan-shim": "^0.11", + "phpunit/phpunit": "^7.0" + }, + "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://www.doctrine-project.org/projects/instantiator.html", + "keywords": [ + "constructor", + "instantiate" + ], + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", + "type": "tidelift" + } + ], + "time": "2020-05-29T17:27:14+00:00" + }, + { + "name": "doctrine/lexer", + "version": "1.2.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/lexer.git", + "reference": "e864bbf5904cb8f5bb334f99209b48018522f042" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/e864bbf5904cb8f5bb334f99209b48018522f042", + "reference": "e864bbf5904cb8f5bb334f99209b48018522f042", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^6.0", + "phpstan/phpstan": "^0.11.8", + "phpunit/phpunit": "^8.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", + "homepage": "https://www.doctrine-project.org/projects/lexer.html", + "keywords": [ + "annotations", + "docblock", + "lexer", + "parser", + "php" + ], + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer", + "type": "tidelift" + } + ], + "time": "2020-05-25T17:44:05+00:00" + }, + { + "name": "friendsofphp/php-cs-fixer", + "version": "v2.16.4", + "source": { + "type": "git", + "url": "https://github.com/FriendsOfPHP/PHP-CS-Fixer.git", + "reference": "1023c3458137ab052f6ff1e09621a721bfdeca13" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/FriendsOfPHP/PHP-CS-Fixer/zipball/1023c3458137ab052f6ff1e09621a721bfdeca13", + "reference": "1023c3458137ab052f6ff1e09621a721bfdeca13", + "shasum": "" + }, + "require": { + "composer/semver": "^1.4", + "composer/xdebug-handler": "^1.2", + "doctrine/annotations": "^1.2", + "ext-json": "*", + "ext-tokenizer": "*", + "php": "^5.6 || ^7.0", + "php-cs-fixer/diff": "^1.3", + "symfony/console": "^3.4.17 || ^4.1.6 || ^5.0", + "symfony/event-dispatcher": "^3.0 || ^4.0 || ^5.0", + "symfony/filesystem": "^3.0 || ^4.0 || ^5.0", + "symfony/finder": "^3.0 || ^4.0 || ^5.0", + "symfony/options-resolver": "^3.0 || ^4.0 || ^5.0", + "symfony/polyfill-php70": "^1.0", + "symfony/polyfill-php72": "^1.4", + "symfony/process": "^3.0 || ^4.0 || ^5.0", + "symfony/stopwatch": "^3.0 || ^4.0 || ^5.0" + }, + "require-dev": { + "johnkary/phpunit-speedtrap": "^1.1 || ^2.0 || ^3.0", + "justinrainbow/json-schema": "^5.0", + "keradus/cli-executor": "^1.2", + "mikey179/vfsstream": "^1.6", + "php-coveralls/php-coveralls": "^2.1", + "php-cs-fixer/accessible-object": "^1.0", + "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.1", + "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.1", + "phpunit/phpunit": "^5.7.27 || ^6.5.14 || ^7.1", + "phpunitgoodpractices/traits": "^1.8", + "symfony/phpunit-bridge": "^5.1", + "symfony/yaml": "^3.0 || ^4.0 || ^5.0" + }, + "suggest": { + "ext-dom": "For handling output formats in XML", + "ext-mbstring": "For handling non-UTF8 characters.", + "php-cs-fixer/phpunit-constraint-isidenticalstring": "For IsIdenticalString constraint.", + "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "For XmlMatchesXsd constraint.", + "symfony/polyfill-mbstring": "When enabling `ext-mbstring` is not possible." + }, + "bin": [ + "php-cs-fixer" + ], + "type": "application", + "autoload": { + "psr-4": { + "PhpCsFixer\\": "src/" + }, + "classmap": [ + "tests/Test/AbstractFixerTestCase.php", + "tests/Test/AbstractIntegrationCaseFactory.php", + "tests/Test/AbstractIntegrationTestCase.php", + "tests/Test/Assert/AssertTokensTrait.php", + "tests/Test/IntegrationCase.php", + "tests/Test/IntegrationCaseFactory.php", + "tests/Test/IntegrationCaseFactoryInterface.php", + "tests/Test/InternalIntegrationCaseFactory.php", + "tests/Test/IsIdenticalConstraint.php", + "tests/TestCase.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Dariusz RumiƄski", + "email": "dariusz.ruminski@gmail.com" + } + ], + "description": "A tool to automatically fix PHP code style", + "funding": [ + { + "url": "https://github.com/keradus", + "type": "github" + } + ], + "time": "2020-06-27T23:57:46+00:00" + }, + { + "name": "myclabs/deep-copy", + "version": "1.10.1", + "source": { + "type": "git", + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "969b211f9a51aa1f6c01d1d2aef56d3bd91598e5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/969b211f9a51aa1f6c01d1d2aef56d3bd91598e5", + "reference": "969b211f9a51aa1f6c01d1d2aef56d3bd91598e5", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "replace": { + "myclabs/deep-copy": "self.version" + }, + "require-dev": { + "doctrine/collections": "^1.0", + "doctrine/common": "^2.6", + "phpunit/phpunit": "^7.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" + ], + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", + "type": "tidelift" + } + ], + "time": "2020-06-29T13:22:24+00:00" + }, + { + "name": "paragonie/random_compat", + "version": "v9.99.99", + "source": { + "type": "git", + "url": "https://github.com/paragonie/random_compat.git", + "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/paragonie/random_compat/zipball/84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95", + "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95", + "shasum": "" + }, + "require": { + "php": "^7" + }, + "require-dev": { + "phpunit/phpunit": "4.*|5.*", + "vimeo/psalm": "^1" + }, + "suggest": { + "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes." + }, + "type": "library", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Paragon Initiative Enterprises", + "email": "security@paragonie.com", + "homepage": "https://paragonie.com" + } + ], + "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7", + "keywords": [ + "csprng", + "polyfill", + "pseudorandom", + "random" + ], + "time": "2018-07-02T15:55:56+00:00" + }, + { + "name": "phar-io/manifest", + "version": "1.0.3", + "source": { + "type": "git", + "url": "https://github.com/phar-io/manifest.git", + "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/7761fcacf03b4d4f16e7ccb606d4879ca431fcf4", + "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-phar": "*", + "phar-io/version": "^2.0", + "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": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", + "time": "2018-07-08T19:23:20+00:00" + }, + { + "name": "phar-io/version", + "version": "2.0.1", + "source": { + "type": "git", + "url": "https://github.com/phar-io/version.git", + "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/version/zipball/45a2ec53a73c70ce41d55cedef9063630abaf1b6", + "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^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" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Library for handling version information and constraints", + "time": "2018-07-08T19:19:57+00:00" + }, + { + "name": "php-cs-fixer/diff", + "version": "v1.3.0", + "source": { + "type": "git", + "url": "https://github.com/PHP-CS-Fixer/diff.git", + "reference": "78bb099e9c16361126c86ce82ec4405ebab8e756" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PHP-CS-Fixer/diff/zipball/78bb099e9c16361126c86ce82ec4405ebab8e756", + "reference": "78bb099e9c16361126c86ce82ec4405ebab8e756", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^5.7.23 || ^6.4.3", + "symfony/process": "^3.3" + }, + "type": "library", + "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" + }, + { + "name": "SpacePossum" + } + ], + "description": "sebastian/diff v2 backport support for PHP5.6", + "homepage": "https://github.com/PHP-CS-Fixer", + "keywords": [ + "diff" + ], + "time": "2018-02-15T16:58:55+00:00" + }, + { + "name": "phpdocumentor/reflection-common", + "version": "2.2.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionCommon.git", + "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", + "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-2.x": "2.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": "2020-06-27T09:03:43+00:00" + }, + { + "name": "phpdocumentor/reflection-docblock", + "version": "5.1.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "cd72d394ca794d3466a3b2fc09d5a6c1dc86b47e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/cd72d394ca794d3466a3b2fc09d5a6c1dc86b47e", + "reference": "cd72d394ca794d3466a3b2fc09d5a6c1dc86b47e", + "shasum": "" + }, + "require": { + "ext-filter": "^7.1", + "php": "^7.2", + "phpdocumentor/reflection-common": "^2.0", + "phpdocumentor/type-resolver": "^1.0", + "webmozart/assert": "^1" + }, + "require-dev": { + "doctrine/instantiator": "^1", + "mockery/mockery": "^1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.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" + }, + { + "name": "Jaap van Otterdijk", + "email": "account@ijaap.nl" + } + ], + "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", + "time": "2020-02-22T12:28:44+00:00" + }, + { + "name": "phpdocumentor/type-resolver", + "version": "1.3.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/TypeResolver.git", + "reference": "e878a14a65245fbe78f8080eba03b47c3b705651" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/e878a14a65245fbe78f8080eba03b47c3b705651", + "reference": "e878a14a65245fbe78f8080eba03b47c3b705651", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0", + "phpdocumentor/reflection-common": "^2.0" + }, + "require-dev": { + "ext-tokenizer": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-1.x": "1.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": "A PSR-5 based resolver of Class names, Types and Structural Element Names", + "time": "2020-06-27T10:12:23+00:00" + }, + { + "name": "phpspec/prophecy", + "version": "v1.10.3", + "source": { + "type": "git", + "url": "https://github.com/phpspec/prophecy.git", + "reference": "451c3cd1418cf640de218914901e51b064abb093" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/451c3cd1418cf640de218914901e51b064abb093", + "reference": "451c3cd1418cf640de218914901e51b064abb093", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.0.2", + "php": "^5.3|^7.0", + "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0|^5.0", + "sebastian/comparator": "^1.2.3|^2.0|^3.0|^4.0", + "sebastian/recursion-context": "^1.0|^2.0|^3.0|^4.0" + }, + "require-dev": { + "phpspec/phpspec": "^2.5 || ^3.2", + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.10.x-dev" + } + }, + "autoload": { + "psr-4": { + "Prophecy\\": "src/Prophecy" + } + }, + "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": "2020-03-05T15:02:03+00:00" + }, + { + "name": "phpunit/php-code-coverage", + "version": "8.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "ca6647ffddd2add025ab3f21644a441d7c146cdc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/ca6647ffddd2add025ab3f21644a441d7c146cdc", + "reference": "ca6647ffddd2add025ab3f21644a441d7c146cdc", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-xmlwriter": "*", + "php": "^7.3", + "phpunit/php-file-iterator": "^3.0", + "phpunit/php-text-template": "^2.0", + "phpunit/php-token-stream": "^4.0", + "sebastian/code-unit-reverse-lookup": "^2.0", + "sebastian/environment": "^5.0", + "sebastian/version": "^3.0", + "theseer/tokenizer": "^1.1.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.0" + }, + "suggest": { + "ext-pcov": "*", + "ext-xdebug": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "8.0-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 provides collection, processing, and rendering functionality for PHP code coverage information.", + "homepage": "https://github.com/sebastianbergmann/php-code-coverage", + "keywords": [ + "coverage", + "testing", + "xunit" + ], + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-05-23T08:02:54+00:00" + }, + { + "name": "phpunit/php-file-iterator", + "version": "3.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "8e282e5f5e2db5fb2271b3962ad69875c34a6f41" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/8e282e5f5e2db5fb2271b3962ad69875c34a6f41", + "reference": "8e282e5f5e2db5fb2271b3962ad69875c34a6f41", + "shasum": "" + }, + "require": { + "php": "^7.3 || ^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-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": "FilterIterator implementation that filters files based on a list of suffixes.", + "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", + "keywords": [ + "filesystem", + "iterator" + ], + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-06-26T11:50:37+00:00" + }, + { + "name": "phpunit/php-invoker", + "version": "3.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-invoker.git", + "reference": "f6eedfed1085dd1f4c599629459a0277d25f9a66" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/f6eedfed1085dd1f4c599629459a0277d25f9a66", + "reference": "f6eedfed1085dd1f4c599629459a0277d25f9a66", + "shasum": "" + }, + "require": { + "php": "^7.3 || ^8.0" + }, + "require-dev": { + "ext-pcntl": "*", + "phpunit/phpunit": "^9.0" + }, + "suggest": { + "ext-pcntl": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-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": "Invoke callables with a timeout", + "homepage": "https://github.com/sebastianbergmann/php-invoker/", + "keywords": [ + "process" + ], + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-06-26T11:53:53+00:00" + }, + { + "name": "phpunit/php-text-template", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "6ff9c8ea4d3212b88fcf74e25e516e2c51c99324" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/6ff9c8ea4d3212b88fcf74e25e516e2c51c99324", + "reference": "6ff9c8ea4d3212b88fcf74e25e516e2c51c99324", + "shasum": "" + }, + "require": { + "php": "^7.3 || ^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.0" + }, + "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", + "role": "lead" + } + ], + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "keywords": [ + "template" + ], + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-06-26T11:55:37+00:00" + }, + { + "name": "phpunit/php-timer", + "version": "5.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "cc49734779cbb302bf51a44297dab8c4bbf941e7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/cc49734779cbb302bf51a44297dab8c4bbf941e7", + "reference": "cc49734779cbb302bf51a44297dab8c4bbf941e7", + "shasum": "" + }, + "require": { + "php": "^7.3 || ^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-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": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", + "keywords": [ + "timer" + ], + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-06-26T11:58:13+00:00" + }, + { + "name": "phpunit/php-token-stream", + "version": "4.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-token-stream.git", + "reference": "5672711b6b07b14d5ab694e700c62eeb82fcf374" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/5672711b6b07b14d5ab694e700c62eeb82fcf374", + "reference": "5672711b6b07b14d5ab694e700c62eeb82fcf374", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": "^7.3 || ^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.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" + ], + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-06-27T06:36:25+00:00" + }, + { + "name": "phpunit/phpunit", + "version": "9.2.5", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "ad7cc5ec3ab2597b329880e30442d9054526023b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/ad7cc5ec3ab2597b329880e30442d9054526023b", + "reference": "ad7cc5ec3ab2597b329880e30442d9054526023b", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.2.0", + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-xml": "*", + "ext-xmlwriter": "*", + "myclabs/deep-copy": "^1.9.1", + "phar-io/manifest": "^1.0.3", + "phar-io/version": "^2.0.1", + "php": "^7.3", + "phpspec/prophecy": "^1.8.1", + "phpunit/php-code-coverage": "^8.0.1", + "phpunit/php-file-iterator": "^3.0", + "phpunit/php-invoker": "^3.0", + "phpunit/php-text-template": "^2.0", + "phpunit/php-timer": "^5.0", + "sebastian/code-unit": "^1.0.2", + "sebastian/comparator": "^4.0", + "sebastian/diff": "^4.0", + "sebastian/environment": "^5.0.1", + "sebastian/exporter": "^4.0", + "sebastian/global-state": "^4.0", + "sebastian/object-enumerator": "^4.0", + "sebastian/resource-operations": "^3.0", + "sebastian/type": "^2.1", + "sebastian/version": "^3.0" + }, + "require-dev": { + "ext-pdo": "*", + "phpspec/prophecy-phpunit": "^2.0" + }, + "suggest": { + "ext-soap": "*", + "ext-xdebug": "*" + }, + "bin": [ + "phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "9.2-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ], + "files": [ + "src/Framework/Assert/Functions.php" + ] + }, + "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" + ], + "funding": [ + { + "url": "https://phpunit.de/donate.html", + "type": "custom" + }, + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-06-22T07:10:55+00:00" + }, + { + "name": "predis/predis", + "version": "v1.1.1", + "source": { + "type": "git", + "url": "https://github.com/nrk/predis.git", + "reference": "f0210e38881631afeafb56ab43405a92cafd9fd1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nrk/predis/zipball/f0210e38881631afeafb56ab43405a92cafd9fd1", + "reference": "f0210e38881631afeafb56ab43405a92cafd9fd1", + "shasum": "" + }, + "require": { + "php": ">=5.3.9" + }, + "require-dev": { + "phpunit/phpunit": "~4.8" + }, + "suggest": { + "ext-curl": "Allows access to Webdis when paired with phpiredis", + "ext-phpiredis": "Allows faster serialization and deserialization of the Redis protocol" + }, + "type": "library", + "autoload": { + "psr-4": { + "Predis\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Daniele Alessandri", + "email": "suppakilla@gmail.com", + "homepage": "http://clorophilla.net" + } + ], + "description": "Flexible and feature-complete Redis client for PHP and HHVM", + "homepage": "http://github.com/nrk/predis", + "keywords": [ + "nosql", + "predis", + "redis" + ], + "time": "2016-06-16T16:22:20+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/event-dispatcher", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/event-dispatcher.git", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", + "shasum": "" + }, + "require": { + "php": ">=7.2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\EventDispatcher\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Standard interfaces for event handling.", + "keywords": [ + "events", + "psr", + "psr-14" + ], + "time": "2019-01-08T18:20:26+00:00" + }, + { + "name": "psr/log", + "version": "1.1.3", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/0f73288fd15629204f9d42b7055f72dacbe811fc", + "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1.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": "2020-03-23T09:12:05+00:00" + }, + { + "name": "rancoud/database", + "version": "4.0.1", + "source": { + "type": "git", + "url": "https://github.com/rancoud/Database.git", + "reference": "1c2aa2e8b7554950f4eed765d23ec240b61d2248" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/rancoud/Database/zipball/1c2aa2e8b7554950f4eed765d23ec240b61d2248", + "reference": "1c2aa2e8b7554950f4eed765d23ec240b61d2248", + "shasum": "" + }, + "require": { + "ext-pdo": ">=7.4.0", + "php": ">=7.4.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^2.16", + "phpunit/phpunit": "^9.1", + "squizlabs/php_codesniffer": "^3.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "Rancoud\\Database\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Sebastien Rancoud", + "email": "contact@rancoud.com" + } + ], + "description": "Database package", + "time": "2020-07-01T20:03:41+00:00" + }, + { + "name": "sebastian/code-unit", + "version": "1.0.5", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit.git", + "reference": "c1e2df332c905079980b119c4db103117e5e5c90" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/c1e2df332c905079980b119c4db103117e5e5c90", + "reference": "c1e2df332c905079980b119c4db103117e5e5c90", + "shasum": "" + }, + "require": { + "php": "^7.3 || ^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.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": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Collection of value objects that represent the PHP code units", + "homepage": "https://github.com/sebastianbergmann/code-unit", + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-06-26T12:50:45+00:00" + }, + { + "name": "sebastian/code-unit-reverse-lookup", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", + "reference": "ee51f9bb0c6d8a43337055db3120829fa14da819" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ee51f9bb0c6d8a43337055db3120829fa14da819", + "reference": "ee51f9bb0c6d8a43337055db3120829fa14da819", + "shasum": "" + }, + "require": { + "php": "^7.3 || ^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.0" + }, + "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": "Looks up which function or method a line of code belongs to", + "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-06-26T12:04:00+00:00" + }, + { + "name": "sebastian/comparator", + "version": "4.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "dcc580eadfaa4e7f9d2cf9ae1922134ea962e14f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/dcc580eadfaa4e7f9d2cf9ae1922134ea962e14f", + "reference": "dcc580eadfaa4e7f9d2cf9ae1922134ea962e14f", + "shasum": "" + }, + "require": { + "php": "^7.3 || ^8.0", + "sebastian/diff": "^4.0", + "sebastian/exporter": "^4.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + } + ], + "description": "Provides the functionality to compare PHP values for equality", + "homepage": "https://github.com/sebastianbergmann/comparator", + "keywords": [ + "comparator", + "compare", + "equality" + ], + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-06-26T12:05:46+00:00" + }, + { + "name": "sebastian/diff", + "version": "4.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "1e90b4cf905a7d06c420b1d2e9d11a4dc8a13113" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/1e90b4cf905a7d06c420b1d2e9d11a4dc8a13113", + "reference": "1e90b4cf905a7d06c420b1d2e9d11a4dc8a13113", + "shasum": "" + }, + "require": { + "php": "^7.3 || ^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.0", + "symfony/process": "^4.2 || ^5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" + } + ], + "description": "Diff implementation", + "homepage": "https://github.com/sebastianbergmann/diff", + "keywords": [ + "diff", + "udiff", + "unidiff", + "unified diff" + ], + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-06-30T04:46:02+00:00" + }, + { + "name": "sebastian/environment", + "version": "5.1.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "0a757cab9d5b7ef49a619f1143e6c9c1bc0fe9d2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/0a757cab9d5b7ef49a619f1143e6c9c1bc0fe9d2", + "reference": "0a757cab9d5b7ef49a619f1143e6c9c1bc0fe9d2", + "shasum": "" + }, + "require": { + "php": "^7.3 || ^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.0" + }, + "suggest": { + "ext-posix": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-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" + ], + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-06-26T12:07:24+00:00" + }, + { + "name": "sebastian/exporter", + "version": "4.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "571d721db4aec847a0e59690b954af33ebf9f023" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/571d721db4aec847a0e59690b954af33ebf9f023", + "reference": "571d721db4aec847a0e59690b954af33ebf9f023", + "shasum": "" + }, + "require": { + "php": "^7.3 || ^8.0", + "sebastian/recursion-context": "^4.0" + }, + "require-dev": { + "ext-mbstring": "*", + "phpunit/phpunit": "^9.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Provides the functionality to export PHP variables for visualization", + "homepage": "http://www.github.com/sebastianbergmann/exporter", + "keywords": [ + "export", + "exporter" + ], + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-06-26T12:08:55+00:00" + }, + { + "name": "sebastian/global-state", + "version": "4.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "bdb1e7c79e592b8c82cb1699be3c8743119b8a72" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bdb1e7c79e592b8c82cb1699be3c8743119b8a72", + "reference": "bdb1e7c79e592b8c82cb1699be3c8743119b8a72", + "shasum": "" + }, + "require": { + "php": "^7.3", + "sebastian/object-reflector": "^2.0", + "sebastian/recursion-context": "^4.0" + }, + "require-dev": { + "ext-dom": "*", + "phpunit/phpunit": "^9.0" + }, + "suggest": { + "ext-uopz": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.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": "2020-02-07T06:11:37+00:00" + }, + { + "name": "sebastian/object-enumerator", + "version": "4.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-enumerator.git", + "reference": "074fed2d0a6d08e1677dd8ce9d32aecb384917b8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/074fed2d0a6d08e1677dd8ce9d32aecb384917b8", + "reference": "074fed2d0a6d08e1677dd8ce9d32aecb384917b8", + "shasum": "" + }, + "require": { + "php": "^7.3 || ^8.0", + "sebastian/object-reflector": "^2.0", + "sebastian/recursion-context": "^4.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-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/", + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-06-26T12:11:32+00:00" + }, + { + "name": "sebastian/object-reflector", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-reflector.git", + "reference": "127a46f6b057441b201253526f81d5406d6c7840" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/127a46f6b057441b201253526f81d5406d6c7840", + "reference": "127a46f6b057441b201253526f81d5406d6c7840", + "shasum": "" + }, + "require": { + "php": "^7.3 || ^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.0" + }, + "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": "Allows reflection of object attributes, including inherited and non-public ones", + "homepage": "https://github.com/sebastianbergmann/object-reflector/", + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-06-26T12:12:55+00:00" + }, + { + "name": "sebastian/recursion-context", + "version": "4.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "062231bf61d2b9448c4fa5a7643b5e1829c11d63" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/062231bf61d2b9448c4fa5a7643b5e1829c11d63", + "reference": "062231bf61d2b9448c4fa5a7643b5e1829c11d63", + "shasum": "" + }, + "require": { + "php": "^7.3 || ^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides functionality to recursively process PHP variables", + "homepage": "http://www.github.com/sebastianbergmann/recursion-context", + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-06-26T12:14:17+00:00" + }, + { + "name": "sebastian/resource-operations", + "version": "3.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/resource-operations.git", + "reference": "0653718a5a629b065e91f774595267f8dc32e213" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0653718a5a629b065e91f774595267f8dc32e213", + "reference": "0653718a5a629b065e91f774595267f8dc32e213", + "shasum": "" + }, + "require": { + "php": "^7.3 || ^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-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", + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-06-26T12:16:22+00:00" + }, + { + "name": "sebastian/type", + "version": "2.1.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/type.git", + "reference": "56b3ba194e0cbaaf3de7ccd353c289d7a84ed022" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/56b3ba194e0cbaaf3de7ccd353c289d7a84ed022", + "reference": "56b3ba194e0cbaaf3de7ccd353c289d7a84ed022", + "shasum": "" + }, + "require": { + "php": "^7.3 || ^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.1-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": "Collection of value objects that represent the types of the PHP type system", + "homepage": "https://github.com/sebastianbergmann/type", + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-06-26T12:17:54+00:00" + }, + { + "name": "sebastian/version", + "version": "3.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "626586115d0ed31cb71483be55beb759b5af5a3c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/626586115d0ed31cb71483be55beb759b5af5a3c", + "reference": "626586115d0ed31cb71483be55beb759b5af5a3c", + "shasum": "" + }, + "require": { + "php": "^7.3 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-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", + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-06-26T12:18:43+00:00" + }, + { + "name": "squizlabs/php_codesniffer", + "version": "3.5.5", + "source": { + "type": "git", + "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", + "reference": "73e2e7f57d958e7228fce50dc0c61f58f017f9f6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/73e2e7f57d958e7228fce50dc0c61f58f017f9f6", + "reference": "73e2e7f57d958e7228fce50dc0c61f58f017f9f6", + "shasum": "" + }, + "require": { + "ext-simplexml": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": ">=5.4.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0" + }, + "bin": [ + "bin/phpcs", + "bin/phpcbf" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "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": "https://github.com/squizlabs/PHP_CodeSniffer", + "keywords": [ + "phpcs", + "standards" + ], + "time": "2020-04-17T01:09:41+00:00" + }, + { + "name": "symfony/console", + "version": "v5.1.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "34ac555a3627e324b660e318daa07572e1140123" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/34ac555a3627e324b660e318daa07572e1140123", + "reference": "34ac555a3627e324b660e318daa07572e1140123", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php73": "^1.8", + "symfony/polyfill-php80": "^1.15", + "symfony/service-contracts": "^1.1|^2", + "symfony/string": "^5.1" + }, + "conflict": { + "symfony/dependency-injection": "<4.4", + "symfony/dotenv": "<5.1", + "symfony/event-dispatcher": "<4.4", + "symfony/lock": "<4.4", + "symfony/process": "<4.4" + }, + "provide": { + "psr/log-implementation": "1.0" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/config": "^4.4|^5.0", + "symfony/dependency-injection": "^4.4|^5.0", + "symfony/event-dispatcher": "^4.4|^5.0", + "symfony/lock": "^4.4|^5.0", + "symfony/process": "^4.4|^5.0", + "symfony/var-dumper": "^4.4|^5.0" + }, + "suggest": { + "psr/log": "For using the console logger", + "symfony/event-dispatcher": "", + "symfony/lock": "", + "symfony/process": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.1-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", + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-06-15T12:59:21+00:00" + }, + { + "name": "symfony/deprecation-contracts", + "version": "v2.1.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "dd99cb3a0aff6cadd2a8d7d7ed72c2161e218337" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/dd99cb3a0aff6cadd2a8d7d7ed72c2161e218337", + "reference": "dd99cb3a0aff6cadd2a8d7d7ed72c2161e218337", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.1-dev" + } + }, + "autoload": { + "files": [ + "function.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": "A generic function and convention to trigger deprecation notices", + "homepage": "https://symfony.com", + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-05-27T08:34:37+00:00" + }, + { + "name": "symfony/event-dispatcher", + "version": "v5.1.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "cc0d059e2e997e79ca34125a52f3e33de4424ac7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/cc0d059e2e997e79ca34125a52f3e33de4424ac7", + "reference": "cc0d059e2e997e79ca34125a52f3e33de4424ac7", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1", + "symfony/event-dispatcher-contracts": "^2", + "symfony/polyfill-php80": "^1.15" + }, + "conflict": { + "symfony/dependency-injection": "<4.4" + }, + "provide": { + "psr/event-dispatcher-implementation": "1.0", + "symfony/event-dispatcher-implementation": "2.0" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/config": "^4.4|^5.0", + "symfony/dependency-injection": "^4.4|^5.0", + "symfony/expression-language": "^4.4|^5.0", + "symfony/http-foundation": "^4.4|^5.0", + "symfony/service-contracts": "^1.1|^2", + "symfony/stopwatch": "^4.4|^5.0" + }, + "suggest": { + "symfony/dependency-injection": "", + "symfony/http-kernel": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.1-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", + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-05-20T17:43:50+00:00" + }, + { + "name": "symfony/event-dispatcher-contracts", + "version": "v2.1.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher-contracts.git", + "reference": "405952c4e90941a17e52ef7489a2bd94870bb290" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/405952c4e90941a17e52ef7489a2bd94870bb290", + "reference": "405952c4e90941a17e52ef7489a2bd94870bb290", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "psr/event-dispatcher": "^1" + }, + "suggest": { + "symfony/event-dispatcher-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.1-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\EventDispatcher\\": "" + } + }, + "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": "Generic abstractions related to dispatching event", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-05-20T17:43:50+00:00" + }, + { + "name": "symfony/filesystem", + "version": "v5.1.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/filesystem.git", + "reference": "6e4320f06d5f2cce0d96530162491f4465179157" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/6e4320f06d5f2cce0d96530162491f4465179157", + "reference": "6e4320f06d5f2cce0d96530162491f4465179157", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-ctype": "~1.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.1-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", + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-05-30T20:35:19+00:00" + }, + { + "name": "symfony/finder", + "version": "v5.1.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "4298870062bfc667cb78d2b379be4bf5dec5f187" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/4298870062bfc667cb78d2b379be4bf5dec5f187", + "reference": "4298870062bfc667cb78d2b379be4bf5dec5f187", + "shasum": "" + }, + "require": { + "php": ">=7.2.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.1-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", + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-05-20T17:43:50+00:00" + }, + { + "name": "symfony/options-resolver", + "version": "v5.1.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/options-resolver.git", + "reference": "663f5dd5e14057d1954fe721f9709d35837f2447" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/663f5dd5e14057d1954fe721f9709d35837f2447", + "reference": "663f5dd5e14057d1954fe721f9709d35837f2447", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1", + "symfony/polyfill-php80": "^1.15" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.1-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\OptionsResolver\\": "" + }, + "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 OptionsResolver Component", + "homepage": "https://symfony.com", + "keywords": [ + "config", + "configuration", + "options" + ], + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-05-23T13:08:13+00:00" + }, + { + "name": "symfony/polyfill-ctype", + "version": "v1.17.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "2edd75b8b35d62fd3eeabba73b26b8f1f60ce13d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/2edd75b8b35d62fd3eeabba73b26b8f1f60ce13d", + "reference": "2edd75b8b35d62fd3eeabba73b26b8f1f60ce13d", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "suggest": { + "ext-ctype": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.17-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for ctype functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "ctype", + "polyfill", + "portable" + ], + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-06-06T08:46:27+00:00" + }, + { + "name": "symfony/polyfill-intl-grapheme", + "version": "v1.17.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-grapheme.git", + "reference": "6e4dbcf5e81eba86e36731f94fe56b1726835846" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/6e4dbcf5e81eba86e36731f94fe56b1726835846", + "reference": "6e4dbcf5e81eba86e36731f94fe56b1726835846", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.17-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Intl\\Grapheme\\": "" + }, + "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 intl's grapheme_* functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "grapheme", + "intl", + "polyfill", + "portable", + "shim" + ], + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-06-06T08:46:27+00:00" + }, + { + "name": "symfony/polyfill-intl-normalizer", + "version": "v1.17.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-normalizer.git", + "reference": "40309d1700e8f72447bb9e7b54af756eeea35620" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/40309d1700e8f72447bb9e7b54af756eeea35620", + "reference": "40309d1700e8f72447bb9e7b54af756eeea35620", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.17-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Intl\\Normalizer\\": "" + }, + "files": [ + "bootstrap.php" + ], + "classmap": [ + "Resources/stubs" + ] + }, + "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 intl's Normalizer class and related functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "intl", + "normalizer", + "polyfill", + "portable", + "shim" + ], + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-06-14T14:40:37+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.17.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "7110338d81ce1cbc3e273136e4574663627037a7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/7110338d81ce1cbc3e273136e4574663627037a7", + "reference": "7110338d81ce1cbc3e273136e4574663627037a7", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.17-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "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" + ], + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-06-06T08:46:27+00:00" + }, + { + "name": "symfony/polyfill-php70", + "version": "v1.17.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php70.git", + "reference": "471b096aede7025bace8eb356b9ac801aaba7e2d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/471b096aede7025bace8eb356b9ac801aaba7e2d", + "reference": "471b096aede7025bace8eb356b9ac801aaba7e2d", + "shasum": "" + }, + "require": { + "paragonie/random_compat": "~1.0|~2.0|~9.99", + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.17-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php70\\": "" + }, + "files": [ + "bootstrap.php" + ], + "classmap": [ + "Resources/stubs" + ] + }, + "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 backporting some PHP 7.0+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-06-06T08:46:27+00:00" + }, + { + "name": "symfony/polyfill-php72", + "version": "v1.17.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php72.git", + "reference": "f048e612a3905f34931127360bdd2def19a5e582" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/f048e612a3905f34931127360bdd2def19a5e582", + "reference": "f048e612a3905f34931127360bdd2def19a5e582", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.17-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php72\\": "" + }, + "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 backporting some PHP 7.2+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-05-12T16:47:27+00:00" + }, + { + "name": "symfony/polyfill-php73", + "version": "v1.17.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php73.git", + "reference": "fa0837fe02d617d31fbb25f990655861bb27bd1a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/fa0837fe02d617d31fbb25f990655861bb27bd1a", + "reference": "fa0837fe02d617d31fbb25f990655861bb27bd1a", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.17-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php73\\": "" + }, + "files": [ + "bootstrap.php" + ], + "classmap": [ + "Resources/stubs" + ] + }, + "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 backporting some PHP 7.3+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-06-06T08:46:27+00:00" + }, + { + "name": "symfony/polyfill-php80", + "version": "v1.17.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "4a5b6bba3259902e386eb80dd1956181ee90b5b2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/4a5b6bba3259902e386eb80dd1956181ee90b5b2", + "reference": "4a5b6bba3259902e386eb80dd1956181ee90b5b2", + "shasum": "" + }, + "require": { + "php": ">=7.0.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.17-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php80\\": "" + }, + "files": [ + "bootstrap.php" + ], + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-06-06T08:46:27+00:00" + }, + { + "name": "symfony/process", + "version": "v5.1.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/process.git", + "reference": "7f6378c1fa2147eeb1b4c385856ce9de0d46ebd1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/process/zipball/7f6378c1fa2147eeb1b4c385856ce9de0d46ebd1", + "reference": "7f6378c1fa2147eeb1b4c385856ce9de0d46ebd1", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-php80": "^1.15" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.1-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", + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-05-30T20:35:19+00:00" + }, + { + "name": "symfony/service-contracts", + "version": "v2.1.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/service-contracts.git", + "reference": "66a8f0957a3ca54e4f724e49028ab19d75a8918b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/66a8f0957a3ca54e4f724e49028ab19d75a8918b", + "reference": "66a8f0957a3ca54e4f724e49028ab19d75a8918b", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "psr/container": "^1.0" + }, + "suggest": { + "symfony/service-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.1-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Service\\": "" + } + }, + "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": "Generic abstractions related to writing services", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-05-20T17:43:50+00:00" + }, + { + "name": "symfony/stopwatch", + "version": "v5.1.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/stopwatch.git", + "reference": "0f7c58cf81dbb5dd67d423a89d577524a2ec0323" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/0f7c58cf81dbb5dd67d423a89d577524a2ec0323", + "reference": "0f7c58cf81dbb5dd67d423a89d577524a2ec0323", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/service-contracts": "^1.0|^2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.1-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", + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-05-20T17:43:50+00:00" + }, + { + "name": "symfony/string", + "version": "v5.1.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/string.git", + "reference": "ac70459db781108db7c6d8981dd31ce0e29e3298" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/string/zipball/ac70459db781108db7c6d8981dd31ce0e29e3298", + "reference": "ac70459db781108db7c6d8981dd31ce0e29e3298", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-intl-grapheme": "~1.0", + "symfony/polyfill-intl-normalizer": "~1.0", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php80": "~1.15" + }, + "require-dev": { + "symfony/error-handler": "^4.4|^5.0", + "symfony/http-client": "^4.4|^5.0", + "symfony/translation-contracts": "^1.1|^2", + "symfony/var-exporter": "^4.4|^5.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.1-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\String\\": "" + }, + "files": [ + "Resources/functions.php" + ], + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "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 String component", + "homepage": "https://symfony.com", + "keywords": [ + "grapheme", + "i18n", + "string", + "unicode", + "utf-8", + "utf8" + ], + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-06-11T12:16:36+00:00" + }, + { + "name": "theseer/tokenizer", + "version": "1.1.3", + "source": { + "type": "git", + "url": "https://github.com/theseer/tokenizer.git", + "reference": "11336f6f84e16a720dae9d8e6ed5019efa85a0f9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/11336f6f84e16a720dae9d8e6ed5019efa85a0f9", + "reference": "11336f6f84e16a720dae9d8e6ed5019efa85a0f9", + "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": "2019-06-13T22:48:21+00:00" + }, + { + "name": "webmozart/assert", + "version": "1.9.0", + "source": { + "type": "git", + "url": "https://github.com/webmozart/assert.git", + "reference": "9dc4f203e36f2b486149058bade43c851dd97451" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozart/assert/zipball/9dc4f203e36f2b486149058bade43c851dd97451", + "reference": "9dc4f203e36f2b486149058bade43c851dd97451", + "shasum": "" + }, + "require": { + "php": "^5.3.3 || ^7.0", + "symfony/polyfill-ctype": "^1.8" + }, + "conflict": { + "phpstan/phpstan": "<0.12.20", + "vimeo/psalm": "<3.9.1" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.36 || ^7.5.13" + }, + "type": "library", + "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": "2020-06-16T10:16:42+00:00" + } + ], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": [], + "prefer-stable": false, + "prefer-lowest": false, + "platform": { + "php": ">=7.4.0", + "ext-openssl": ">=7.4.0" + }, + "platform-dev": [], + "plugin-api-version": "1.1.0" +} diff --git a/coverage/.gitkeep b/coverage/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/phpunit.xml b/phpunit.xml index 8c782f6..aa208dd 100644 --- a/phpunit.xml +++ b/phpunit.xml @@ -1,6 +1,6 @@ - + tests diff --git a/run_all_commands.sh b/run_all_commands.sh deleted file mode 100644 index 24b5336..0000000 --- a/run_all_commands.sh +++ /dev/null @@ -1,2 +0,0 @@ -./vendor/bin/php-cs-fixer fix -./vendor/bin/phpunit --colors --coverage-html ./coverage \ No newline at end of file diff --git a/run_phpunit_coverage.sh b/run_phpunit_coverage.sh deleted file mode 100644 index 38815da..0000000 --- a/run_phpunit_coverage.sh +++ /dev/null @@ -1 +0,0 @@ -./vendor/bin/phpunit --colors --coverage-html ./coverage \ No newline at end of file diff --git a/src/ArrayManager.php b/src/ArrayManager.php index ebdb9e8..cee61d3 100644 --- a/src/ArrayManager.php +++ b/src/ArrayManager.php @@ -10,7 +10,7 @@ trait ArrayManager { /** @var array */ - protected static $flashData = []; + protected static array $flashData = []; abstract protected static function startSessionIfNotHasStarted(); diff --git a/src/Database.php b/src/Database.php index 2d269ce..da44307 100644 --- a/src/Database.php +++ b/src/Database.php @@ -1,5 +1,7 @@ $sessionId, 'id_user' => $this->userId, 'content' => $data]; - return $this->db->exec($sql, $params); + $this->db->exec($sql, $params); + + return true; } /** @@ -171,6 +175,7 @@ public function updateTimestamp($sessionId, $sessionData): bool } /** + * @throws \Exception * @throws DatabaseException * * @return string @@ -182,7 +187,7 @@ public function create_sid(): string $countCaracters = 62; for ($i = 0; $i < 127; ++$i) { - $string .= $caracters[\rand(0, $countCaracters)]; + $string .= $caracters[\random_int(0, $countCaracters)]; } $sql = 'SELECT COUNT(id) FROM sessions WHERE id=:id'; diff --git a/src/DriverManager.php b/src/DriverManager.php index 4e50c03..c90ca7a 100644 --- a/src/DriverManager.php +++ b/src/DriverManager.php @@ -13,7 +13,7 @@ abstract class DriverManager { /** @var SessionHandlerInterface */ - protected static $driver = null; + protected static ?SessionHandlerInterface $driver = null; abstract protected static function throwExceptionIfHasStarted(); @@ -218,9 +218,9 @@ public static function useCurrentRedisEncryptionDriver($redisInstance, string $k } /** - * @param \Rancoud\Session\Encryption $driver - * @param $key - * @param $method + * @param Encryption $driver + * @param $key + * @param $method * * @throws \Exception */ diff --git a/src/File.php b/src/File.php index 7b47734..0b1dd80 100644 --- a/src/File.php +++ b/src/File.php @@ -12,11 +12,11 @@ */ class File implements SessionHandlerInterface, SessionUpdateTimestampHandlerInterface { - /** @var string */ - protected $savePath; + /** @var string|null */ + protected ?string $savePath = null; /** @var string */ - protected $prefix = 'sess_'; + protected string $prefix = 'sess_'; /** * @param string $prefix @@ -36,8 +36,8 @@ public function open($savePath, $sessionName): bool { $this->savePath = $savePath; - if (!\is_dir($this->savePath)) { - \mkdir($this->savePath, 0777); + if (!\is_dir($this->savePath) && !\mkdir($this->savePath, 0750) && !\is_dir($this->savePath)) { + throw new \RuntimeException(\sprintf('Directory "%s" was not created', $this->savePath)); } return true; @@ -143,6 +143,8 @@ public function updateTimestamp($sessionId, $sessionData): bool } /** + * @throws \Exception + * * @return string */ public function create_sid(): string @@ -152,7 +154,7 @@ public function create_sid(): string $countCaracters = 62; for ($i = 0; $i < 127; ++$i) { - $string .= $caracters[\rand(0, $countCaracters)]; + $string .= $caracters[\random_int(0, $countCaracters)]; } $filename = $this->savePath . \DIRECTORY_SEPARATOR . $this->prefix . $string; diff --git a/src/Redis.php b/src/Redis.php index 175941e..13f3d6f 100644 --- a/src/Redis.php +++ b/src/Redis.php @@ -14,10 +14,10 @@ class Redis implements SessionHandlerInterface, SessionUpdateTimestampHandlerInterface { /** @var Predis */ - protected $redis; + protected Predis $redis; /** @var int */ - protected $lifetime = 1440; + protected int $lifetime = 1440; /** * @param string|array $configuration @@ -140,6 +140,8 @@ public function updateTimestamp($sessionId, $sessionData): bool } /** + * @throws \Exception + * * @return string */ public function create_sid(): string @@ -149,7 +151,7 @@ public function create_sid(): string $countCaracters = 62; for ($i = 0; $i < 127; ++$i) { - $string .= $caracters[\rand(0, $countCaracters)]; + $string .= $caracters[\random_int(0, $countCaracters)]; } $exist = $this->redis->exists($string); diff --git a/src/Session.php b/src/Session.php index dd4b1c7..d3445f4 100644 --- a/src/Session.php +++ b/src/Session.php @@ -14,10 +14,10 @@ class Session extends DriverManager use ArrayManager; /** @var bool */ - protected static $hasStarted = false; + protected static bool $hasStarted = false; /** @var array */ - protected static $options = [ + protected static array $options = [ 'read_and_close' => true, 'cookie_httponly' => '1', 'use_only_cookies' => '1', @@ -167,6 +167,7 @@ protected static function validateOptions(array $options = []): void */ protected static function setupCookieParams(): void { + // https://www.php.net/manual/fr/function.session-set-cookie-params.php new signature \session_set_cookie_params( static::getOption('cookie_lifetime'), static::getOption('cookie_path'), @@ -200,7 +201,7 @@ public static function commit(): void { static::$hasStarted = false; - \session_commit(); + \session_write_close(); } /** @@ -293,7 +294,7 @@ public static function setReadWrite(): void * * @return int */ - protected static function getLifetimeForRedis() + protected static function getLifetimeForRedis(): int { return (int) static::getOption('cookie_lifetime'); } diff --git a/tests/DatabaseEncryptionTest.php b/tests/DatabaseEncryptionTest.php index 21f96f7..2eace80 100644 --- a/tests/DatabaseEncryptionTest.php +++ b/tests/DatabaseEncryptionTest.php @@ -1,5 +1,7 @@ 'mysql', 'host' => '127.0.0.1', 'user' => 'root', @@ -39,7 +44,7 @@ public static function setUpBeforeClass() '; try { static::$db->exec($sql); - static::$db->truncateTable('sessions'); + static::$db->truncateTables('sessions'); } catch (DatabaseException $e) { var_dump(static::$db->getErrors()); @@ -47,10 +52,10 @@ public static function setUpBeforeClass() } } - protected function setUp() + protected function setUp(): void { try { - static::$db->truncateTable('sessions'); + static::$db->truncateTables('sessions'); } catch (DatabaseException $e) { var_dump(static::$db->getErrors()); @@ -58,7 +63,7 @@ protected function setUp() } } - public function testOpen() + public function testOpen(): void { $database = new DatabaseEncryption(); $database->setKey('randomKey'); @@ -71,7 +76,7 @@ public function testOpen() static::assertTrue($success); } - public function testClose() + public function testClose(): void { $database = new DatabaseEncryption(); $database->setKey('randomKey'); @@ -82,7 +87,11 @@ public function testClose() static::assertTrue($success); } - public function testWrite() + /** + * @throws DatabaseException + * @throws \Rancoud\Session\SessionException + */ + public function testWrite(): void { $database = new DatabaseEncryption(); $database->setKey('randomKey'); @@ -112,7 +121,10 @@ public function testWrite() static::assertEquals($data, $dataInDatabaseDecrypted); } - public function testRead() + /** + * @throws \Rancoud\Session\SessionException + */ + public function testRead(): void { $database = new DatabaseEncryption(); $database->setKey('randomKey'); @@ -129,8 +141,8 @@ public function testRead() return; } - static::assertTrue(!empty($dataOutput)); - static::assertTrue(is_string($dataOutput)); + static::assertNotEmpty($dataOutput); + static::assertIsString($dataOutput); static::assertEquals($data, $dataOutput); $sessionId = ''; @@ -141,11 +153,15 @@ public function testRead() return; } - static::assertTrue(empty($dataOutput)); - static::assertTrue(is_string($dataOutput)); + static::assertEmpty($dataOutput); + static::assertIsString($dataOutput); } - public function testDestroy() + /** + * @throws DatabaseException + * @throws \Rancoud\Session\SessionException + */ + public function testDestroy(): void { $database = new DatabaseEncryption(); $database->setKey('randomKey'); @@ -189,7 +205,11 @@ public function testDestroy() static::assertTrue($isRowNotExist); } - public function testGc() + /** + * @throws DatabaseException + * @throws \Rancoud\Session\SessionException + */ + public function testGc(): void { $database = new DatabaseEncryption(); $database->setKey('randomKey'); @@ -227,7 +247,10 @@ public function testGc() static::assertTrue($isRowNotExist); } - public function testSetUserId() + /** + * @throws \Rancoud\Session\SessionException + */ + public function testSetUserId(): void { $database = new DatabaseEncryption(); $database->setKey('randomKey'); @@ -285,7 +308,11 @@ public function testSetUserId() static::assertEquals($userId, $userIdInDatabase); } - public function testSetNewDatabaseWithArray() + /** + * @throws DatabaseException + * @throws \Rancoud\Session\SessionException + */ + public function testSetNewDatabaseWithArray(): void { $database = new DatabaseEncryption(); $database->setKey('randomKey'); @@ -312,7 +339,11 @@ public function testSetNewDatabaseWithArray() static::assertTrue($success); } - public function testSetNewDatabaseWithConfigurator() + /** + * @throws DatabaseException + * @throws \Rancoud\Session\SessionException + */ + public function testSetNewDatabaseWithConfigurator(): void { $database = new DatabaseEncryption(); $database->setKey('randomKey'); @@ -340,7 +371,11 @@ public function testSetNewDatabaseWithConfigurator() static::assertTrue($success); } - public function testValidateId() + /** + * @throws DatabaseException + * @throws \Rancoud\Session\SessionException + */ + public function testValidateId(): void { $database = new DatabaseEncryption(); $database->setKey('randomKey'); @@ -363,7 +398,10 @@ public function testValidateId() static::assertFalse($database->validateId('kjlfez/fez')); } - public function testUpdateTimestamp() + /** + * @throws \Rancoud\Session\SessionException + */ + public function testUpdateTimestamp(): void { $database = new DatabaseEncryption(); $database->setKey('randomKey'); @@ -434,7 +472,10 @@ public function testUpdateTimestamp() static::assertTrue($row1['last_access'] < $row2['last_access']); } - public function testCreateId() + /** + * @throws DatabaseException + */ + public function testCreateId(): void { $database = new DatabaseEncryption(); $database->setKey('randomKey'); @@ -442,6 +483,6 @@ public function testCreateId() $string = $database->create_sid(); - static::assertTrue(preg_match('/^[a-zA-Z0-9-]{127}+$/', $string) === 1); + static::assertSame(preg_match('/^[a-zA-Z0-9-]{127}+$/', $string), 1); } } diff --git a/tests/DatabaseTest.php b/tests/DatabaseTest.php index b1279f8..90ad1d5 100644 --- a/tests/DatabaseTest.php +++ b/tests/DatabaseTest.php @@ -1,5 +1,7 @@ 'mysql', 'host' => '127.0.0.1', 'user' => 'root', @@ -39,7 +44,7 @@ public static function setUpBeforeClass() '; try { static::$db->exec($sql); - static::$db->truncateTable('sessions'); + static::$db->truncateTables('sessions'); } catch (DatabaseException $e) { var_dump(static::$db->getErrors()); @@ -47,10 +52,10 @@ public static function setUpBeforeClass() } } - protected function setUp() + protected function setUp(): void { try { - static::$db->truncateTable('sessions'); + static::$db->truncateTables('sessions'); } catch (DatabaseException $e) { var_dump(static::$db->getErrors()); @@ -58,7 +63,7 @@ protected function setUp() } } - public function testOpen() + public function testOpen(): void { $database = new Database(); $database->setCurrentDatabase(static::$db); @@ -69,7 +74,7 @@ public function testOpen() static::assertTrue($success); } - public function testClose() + public function testClose(): void { $database = new Database(); $database->setCurrentDatabase(static::$db); @@ -78,7 +83,10 @@ public function testClose() static::assertTrue($success); } - public function testWrite() + /** + * @throws DatabaseException + */ + public function testWrite(): void { $database = new Database(); $database->setCurrentDatabase(static::$db); @@ -101,7 +109,7 @@ public function testWrite() static::assertEquals($data, $row['content']); } - public function testRead() + public function testRead(): void { $database = new Database(); $database->setCurrentDatabase(static::$db); @@ -116,8 +124,8 @@ public function testRead() return; } - static::assertTrue(!empty($dataOutput)); - static::assertTrue(is_string($dataOutput)); + static::assertNotEmpty($dataOutput); + static::assertIsString($dataOutput); static::assertEquals($data, $dataOutput); $sessionId = ''; @@ -128,11 +136,14 @@ public function testRead() return; } - static::assertTrue(empty($dataOutput)); - static::assertTrue(is_string($dataOutput)); + static::assertEmpty($dataOutput); + static::assertIsString($dataOutput); } - public function testDestroy() + /** + * @throws DatabaseException + */ + public function testDestroy(): void { $database = new Database(); $database->setCurrentDatabase(static::$db); @@ -174,7 +185,10 @@ public function testDestroy() static::assertTrue($isRowNotExist); } - public function testGc() + /** + * @throws DatabaseException + */ + public function testGc(): void { $database = new Database(); $database->setCurrentDatabase(static::$db); @@ -210,7 +224,7 @@ public function testGc() static::assertTrue($isRowNotExist); } - public function testSetUserId() + public function testSetUserId(): void { $database = new Database(); $database->setCurrentDatabase(static::$db); @@ -266,7 +280,10 @@ public function testSetUserId() static::assertEquals($userId, $userIdInDatabase); } - public function testSetNewDatabaseWithArray() + /** + * @throws DatabaseException + */ + public function testSetNewDatabaseWithArray(): void { $database = new Database(); $params = [ @@ -291,7 +308,10 @@ public function testSetNewDatabaseWithArray() static::assertTrue($success); } - public function testSetNewDatabaseWithConfigurator() + /** + * @throws DatabaseException + */ + public function testSetNewDatabaseWithConfigurator(): void { $database = new Database(); $params = [ @@ -317,7 +337,10 @@ public function testSetNewDatabaseWithConfigurator() static::assertTrue($success); } - public function testValidateId() + /** + * @throws DatabaseException + */ + public function testValidateId(): void { $database = new Database(); $database->setCurrentDatabase(static::$db); @@ -339,7 +362,7 @@ public function testValidateId() static::assertFalse($database->validateId('kjlfez/fez')); } - public function testUpdateTimestamp() + public function testUpdateTimestamp(): void { $database = new Database(); $database->setCurrentDatabase(static::$db); @@ -400,13 +423,16 @@ public function testUpdateTimestamp() static::assertTrue($row1['last_access'] < $row2['last_access']); } - public function testCreateId() + /** + * @throws DatabaseException + */ + public function testCreateId(): void { $database = new Database(); $database->setCurrentDatabase(static::$db); $string = $database->create_sid(); - static::assertTrue(preg_match('/^[a-zA-Z0-9-]{127}+$/', $string) === 1); + static::assertSame(preg_match('/^[a-zA-Z0-9-]{127}+$/', $string), 1); } } diff --git a/tests/DefaultEncryptionTest.php b/tests/DefaultEncryptionTest.php index 088896c..d0308f6 100644 --- a/tests/DefaultEncryptionTest.php +++ b/tests/DefaultEncryptionTest.php @@ -1,5 +1,7 @@ foundSessionFile(); static::assertNotFalse($data); diff --git a/tests/EncryptionTest.php b/tests/EncryptionTest.php index 5ba14b8..6094095 100644 --- a/tests/EncryptionTest.php +++ b/tests/EncryptionTest.php @@ -1,4 +1,5 @@ getObjectForTrait('Rancoud\Session\Encryption'); @@ -25,7 +26,7 @@ public function testDefaultEncryption() static::assertEquals($dataToEncrypt, $finalData); } - public function testAllEncryptionMethods() + public function testAllEncryptionMethods(): void { $encryptionTrait = $this->getObjectForTrait('Rancoud\Session\Encryption'); @@ -42,19 +43,19 @@ public function testAllEncryptionMethods() } } - public function testExceptionMethod() + public function testExceptionMethod(): void { - static::expectException(SessionException::class); - static::expectExceptionMessage('Method unknowed: method'); + $this->expectException(SessionException::class); + $this->expectExceptionMessage('Method unknowed: method'); $encryptionTrait = $this->getObjectForTrait('Rancoud\Session\Encryption'); $encryptionTrait->setMethod('method'); } - public function testExceptionEmptyKey() + public function testExceptionEmptyKey(): void { - static::expectException(SessionException::class); - static::expectExceptionMessage('Key has to be a non-empty string'); + $this->expectException(SessionException::class); + $this->expectExceptionMessage('Key has to be a non-empty string'); $encryptionTrait = $this->getObjectForTrait('Rancoud\Session\Encryption'); $dataToEncrypt = 'this is something to encrypt'; diff --git a/tests/FileEncryptionTest.php b/tests/FileEncryptionTest.php index 72141c2..4acc2df 100644 --- a/tests/FileEncryptionTest.php +++ b/tests/FileEncryptionTest.php @@ -1,4 +1,5 @@ open($this->getPath(), ''); static::assertTrue($success); } - public function testOpen() + public function testOpen(): void { $fileEncryption = new FileEncryption(); $fileEncryption->setKey('randomKey'); @@ -64,7 +65,7 @@ public function testOpen() static::assertTrue($success); } - public function testClose() + public function testClose(): void { $fileEncryption = new FileEncryption(); $fileEncryption->setKey('randomKey'); @@ -72,7 +73,10 @@ public function testClose() static::assertTrue($success); } - public function testWrite() + /** + * @throws \Rancoud\Session\SessionException + */ + public function testWrite(): void { $fileEncryption = new FileEncryption(); $fileEncryption->setKey('randomKey'); @@ -93,7 +97,10 @@ public function testWrite() static::assertEquals($data, $dataInFileDecrypted); } - public function testRead() + /** + * @throws \Rancoud\Session\SessionException + */ + public function testRead(): void { $fileEncryption = new FileEncryption(); $fileEncryption->setKey('randomKey'); @@ -106,17 +113,20 @@ public function testRead() static::assertTrue($success); $dataOutput = $fileEncryption->read($sessionId); - static::assertTrue(!empty($dataOutput)); - static::assertTrue(is_string($dataOutput)); + static::assertNotEmpty($dataOutput); + static::assertIsString($dataOutput); static::assertEquals($data, $dataOutput); $sessionId = ''; $dataOutput = $fileEncryption->read($sessionId); - static::assertTrue(empty($dataOutput)); - static::assertTrue(is_string($dataOutput)); + static::assertEmpty($dataOutput); + static::assertIsString($dataOutput); } - public function testDestroy() + /** + * @throws \Rancoud\Session\SessionException + */ + public function testDestroy(): void { $fileEncryption = new FileEncryption(); $fileEncryption->setKey('randomKey'); @@ -140,7 +150,10 @@ public function testDestroy() static::assertTrue($isFileNotExist); } - public function testGc() + /** + * @throws \Rancoud\Session\SessionException + */ + public function testGc(): void { $fileEncryption = new FileEncryption(); $fileEncryption->setKey('randomKey'); @@ -163,7 +176,10 @@ public function testGc() static::assertTrue($isFileNotExist); } - public function testValidateId() + /** + * @throws \Rancoud\Session\SessionException + */ + public function testValidateId(): void { $fileEncryption = new FileEncryption(); $fileEncryption->setKey('randomKey'); @@ -181,7 +197,10 @@ public function testValidateId() static::assertFalse($fileEncryption->validateId('kjlfez/fez')); } - public function testUpdateTimestamp() + /** + * @throws \Rancoud\Session\SessionException + */ + public function testUpdateTimestamp(): void { $fileEncryption = new FileEncryption(); $fileEncryption->setKey('randomKey'); @@ -222,13 +241,16 @@ public function testUpdateTimestamp() static::assertTrue($oldFileModifiedTime < $newFileModifiedTime); } - public function testCreateId() + /** + * @throws \Exception + */ + public function testCreateId(): void { $fileEncryption = new FileEncryption(); $fileEncryption->setKey('randomKey'); $string = $fileEncryption->create_sid(); - static::assertTrue(preg_match('/^[a-zA-Z0-9-]{127}+$/', $string) === 1); + static::assertSame(preg_match('/^[a-zA-Z0-9-]{127}+$/', $string), 1); } } diff --git a/tests/FileTest.php b/tests/FileTest.php index a46d589..f0e08a7 100644 --- a/tests/FileTest.php +++ b/tests/FileTest.php @@ -1,4 +1,5 @@ open($this->getPath(), ''); static::assertTrue($success); } - public function testOpen() + public function testOpen(): void { $file = new File(); $savePath = $this->getPath(); @@ -70,14 +71,14 @@ public function testOpen() static::assertTrue($success); } - public function testClose() + public function testClose(): void { $file = new File(); $success = $file->close(); static::assertTrue($success); } - public function testWrite() + public function testWrite(): void { $file = new File(); @@ -92,7 +93,7 @@ public function testWrite() static::assertEquals($data, $dataInFile); } - public function testRead() + public function testRead(): void { $file = new File(); @@ -104,17 +105,17 @@ public function testRead() static::assertTrue($success); $dataOutput = $file->read($sessionId); - static::assertTrue(!empty($dataOutput)); - static::assertTrue(is_string($dataOutput)); + static::assertNotEmpty($dataOutput); + static::assertIsString($dataOutput); static::assertEquals($data, $dataOutput); $sessionId = ''; $dataOutput = $file->read($sessionId); - static::assertTrue(empty($dataOutput)); - static::assertTrue(is_string($dataOutput)); + static::assertEmpty($dataOutput); + static::assertIsString($dataOutput); } - public function testDestroy() + public function testDestroy(): void { $file = new File(); @@ -137,7 +138,7 @@ public function testDestroy() static::assertTrue($isFileNotExist); } - public function testGc() + public function testGc(): void { $file = new File(); @@ -159,7 +160,7 @@ public function testGc() static::assertTrue($isFileNotExist); } - public function testValidateId() + public function testValidateId(): void { $file = new File(); @@ -176,7 +177,7 @@ public function testValidateId() static::assertFalse($file->validateId('kjlfez/fez')); } - public function testUpdateTimestamp() + public function testUpdateTimestamp(): void { $file = new File(); @@ -205,12 +206,15 @@ public function testUpdateTimestamp() static::assertTrue($oldFileModifiedTime < $newFileModifiedTime); } - public function testCreateId() + /** + * @throws \Exception + */ + public function testCreateId(): void { $file = new File(); $string = $file->create_sid(); - static::assertTrue(preg_match('/^[a-zA-Z0-9-]{127}+$/', $string) === 1); + static::assertSame(preg_match('/^[a-zA-Z0-9-]{127}+$/', $string), 1); } } diff --git a/tests/FileWithNewPrefixTest.php b/tests/FileWithNewPrefixTest.php index 35312a9..762ab30 100644 --- a/tests/FileWithNewPrefixTest.php +++ b/tests/FileWithNewPrefixTest.php @@ -1,5 +1,7 @@ open($this->getPath(), ''); static::assertTrue($success); } - public function testOpen() + public function testOpen(): void { $file = new File(); $file->setPrefix('myprefix_'); @@ -71,7 +73,7 @@ public function testOpen() static::assertTrue($success); } - public function testClose() + public function testClose(): void { $file = new File(); $file->setPrefix('myprefix_'); @@ -79,7 +81,7 @@ public function testClose() static::assertTrue($success); } - public function testWrite() + public function testWrite(): void { $file = new File(); $file->setPrefix('myprefix_'); @@ -95,7 +97,7 @@ public function testWrite() static::assertEquals($data, $dataInFile); } - public function testRead() + public function testRead(): void { $file = new File(); $file->setPrefix('myprefix_'); @@ -108,17 +110,17 @@ public function testRead() static::assertTrue($success); $dataOutput = $file->read($sessionId); - static::assertTrue(!empty($dataOutput)); - static::assertTrue(is_string($dataOutput)); + static::assertNotEmpty($dataOutput); + static::assertIsString($dataOutput); static::assertEquals($data, $dataOutput); $sessionId = ''; $dataOutput = $file->read($sessionId); - static::assertTrue(empty($dataOutput)); - static::assertTrue(is_string($dataOutput)); + static::assertEmpty($dataOutput); + static::assertIsString($dataOutput); } - public function testDestroy() + public function testDestroy(): void { $file = new File(); $file->setPrefix('myprefix_'); @@ -142,7 +144,7 @@ public function testDestroy() static::assertTrue($isFileNotExist); } - public function testGc() + public function testGc(): void { $file = new File(); $file->setPrefix('myprefix_'); @@ -165,7 +167,7 @@ public function testGc() static::assertTrue($isFileNotExist); } - public function testValidateId() + public function testValidateId(): void { $file = new File(); $file->setPrefix('myprefix_'); @@ -183,7 +185,7 @@ public function testValidateId() static::assertFalse($file->validateId('kjlfez/fez')); } - public function testUpdateTimestamp() + public function testUpdateTimestamp(): void { $file = new File(); $file->setPrefix('myprefix_'); @@ -213,13 +215,16 @@ public function testUpdateTimestamp() static::assertTrue($oldFileModifiedTime < $newFileModifiedTime); } - public function testCreateId() + /** + * @throws \Exception + */ + public function testCreateId(): void { $file = new File(); $file->setPrefix('myprefix_'); $string = $file->create_sid(); - static::assertTrue(preg_match('/^[a-zA-Z0-9-]{127}+$/', $string) === 1); + static::assertSame(preg_match('/^[a-zA-Z0-9-]{127}+$/', $string), 1); } } diff --git a/tests/RedisEncryptionTest.php b/tests/RedisEncryptionTest.php index 20dedb8..3be1dc1 100644 --- a/tests/RedisEncryptionTest.php +++ b/tests/RedisEncryptionTest.php @@ -1,5 +1,7 @@ 'tcp', @@ -27,12 +29,12 @@ public static function setUpBeforeClass() static::$redis->flushdb(); } - protected function setUp() + protected function setUp(): void { static::$redis->flushdb(); } - public function testOpen() + public function testOpen(): void { $redis = new RedisEncryption(); $redis->setKey('randomKey'); @@ -45,7 +47,7 @@ public function testOpen() static::assertTrue($success); } - public function testClose() + public function testClose(): void { $redis = new RedisEncryption(); $redis->setKey('randomKey'); @@ -55,7 +57,10 @@ public function testClose() static::assertTrue($success); } - public function testWrite() + /** + * @throws \Rancoud\Session\SessionException + */ + public function testWrite(): void { $redis = new RedisEncryption(); $redis->setKey('randomKey'); @@ -76,7 +81,10 @@ public function testWrite() static::assertEquals($data, $dataInRedisDecrypted); } - public function testRead() + /** + * @throws \Rancoud\Session\SessionException + */ + public function testRead(): void { $redis = new RedisEncryption(); $redis->setKey('randomKey'); @@ -89,17 +97,20 @@ public function testRead() static::assertTrue($success); $dataOutput = $redis->read($sessionId); - static::assertTrue(!empty($dataOutput)); - static::assertTrue(is_string($dataOutput)); + static::assertNotEmpty($dataOutput); + static::assertIsString($dataOutput); static::assertEquals($data, $dataOutput); $sessionId = ''; $dataOutput = $redis->read($sessionId); - static::assertTrue(empty($dataOutput)); - static::assertTrue(is_string($dataOutput)); + static::assertEmpty($dataOutput); + static::assertIsString($dataOutput); } - public function testDestroy() + /** + * @throws \Rancoud\Session\SessionException + */ + public function testDestroy(): void { $redis = new RedisEncryption(); $redis->setKey('randomKey'); @@ -123,7 +134,10 @@ public function testDestroy() static::assertTrue($isKeyNotExist); } - public function testGc() + /** + * @throws \Rancoud\Session\SessionException + */ + public function testGc(): void { $redis = new RedisEncryption(); $redis->setKey('randomKey'); @@ -149,7 +163,10 @@ public function testGc() static::assertTrue($isKeyNotExist); } - public function testSetNewRedis() + /** + * @throws \Rancoud\Session\SessionException + */ + public function testSetNewRedis(): void { $redis = new RedisEncryption(); $redis->setKey('randomKey'); @@ -168,7 +185,10 @@ public function testSetNewRedis() static::assertTrue($success); } - public function testValidateId() + /** + * @throws \Rancoud\Session\SessionException + */ + public function testValidateId(): void { $redis = new RedisEncryption(); $redis->setKey('randomKey'); @@ -186,7 +206,10 @@ public function testValidateId() static::assertFalse($redis->validateId('kjlfez/fez')); } - public function testUpdateTimestamp() + /** + * @throws \Rancoud\Session\SessionException + */ + public function testUpdateTimestamp(): void { $redis = new RedisEncryption(); $redis->setKey('randomKey'); @@ -228,7 +251,10 @@ public function testUpdateTimestamp() static::assertTrue($ttl3 > $ttl2); } - public function testCreateId() + /** + * @throws \Exception + */ + public function testCreateId(): void { $redis = new RedisEncryption(); $redis->setKey('randomKey'); @@ -237,6 +263,6 @@ public function testCreateId() $string = $redis->create_sid(); - static::assertTrue(preg_match('/^[a-zA-Z0-9-]{127}+$/', $string) === 1); + static::assertSame(preg_match('/^[a-zA-Z0-9-]{127}+$/', $string), 1); } } diff --git a/tests/RedisTest.php b/tests/RedisTest.php index e739c76..b4155f2 100644 --- a/tests/RedisTest.php +++ b/tests/RedisTest.php @@ -1,5 +1,7 @@ 'tcp', @@ -27,12 +29,12 @@ public static function setUpBeforeClass() static::$redis->flushdb(); } - protected function setUp() + protected function setUp(): void { static::$redis->flushdb(); } - public function testOpen() + public function testOpen(): void { $redis = new Redis(); $redis->setCurrentRedis(static::$redis); @@ -43,7 +45,7 @@ public function testOpen() static::assertTrue($success); } - public function testClose() + public function testClose(): void { $redis = new Redis(); $redis->setCurrentRedis(static::$redis); @@ -51,7 +53,7 @@ public function testClose() static::assertTrue($success); } - public function testWrite() + public function testWrite(): void { $redis = new Redis(); $redis->setCurrentRedis(static::$redis); @@ -65,7 +67,7 @@ public function testWrite() static::assertEquals($data, $dataInRedis); } - public function testRead() + public function testRead(): void { $redis = new Redis(); $redis->setCurrentRedis(static::$redis); @@ -76,17 +78,17 @@ public function testRead() static::assertTrue($success); $dataOutput = $redis->read($sessionId); - static::assertTrue(!empty($dataOutput)); - static::assertTrue(is_string($dataOutput)); + static::assertNotEmpty($dataOutput); + static::assertIsString($dataOutput); static::assertEquals($data, $dataOutput); $sessionId = ''; $dataOutput = $redis->read($sessionId); - static::assertTrue(empty($dataOutput)); - static::assertTrue(is_string($dataOutput)); + static::assertEmpty($dataOutput); + static::assertIsString($dataOutput); } - public function testDestroy() + public function testDestroy(): void { $redis = new Redis(); $redis->setCurrentRedis(static::$redis); @@ -108,7 +110,7 @@ public function testDestroy() static::assertTrue($isKeyNotExist); } - public function testGc() + public function testGc(): void { $redis = new Redis(); $redis->setCurrentRedis(static::$redis); @@ -132,7 +134,7 @@ public function testGc() static::assertTrue($isKeyNotExist); } - public function testSetNewRedis() + public function testSetNewRedis(): void { $redis = new Redis(); $params = [ @@ -149,7 +151,7 @@ public function testSetNewRedis() static::assertTrue($success); } - public function testValidateId() + public function testValidateId(): void { $redis = new Redis(); $redis->setCurrentRedis(static::$redis); @@ -165,7 +167,7 @@ public function testValidateId() static::assertFalse($redis->validateId('kjlfez/fez')); } - public function testUpdateTimestamp() + public function testUpdateTimestamp(): void { $redis = new Redis(); $redis->setCurrentRedis(static::$redis); @@ -195,13 +197,16 @@ public function testUpdateTimestamp() static::assertTrue($ttl3 > $ttl2); } - public function testCreateId() + /** + * @throws \Exception + */ + public function testCreateId(): void { $redis = new Redis(); $redis->setCurrentRedis(static::$redis); $string = $redis->create_sid(); - static::assertTrue(preg_match('/^[a-zA-Z0-9-]{127}+$/', $string) === 1); + static::assertSame(preg_match('/^[a-zA-Z0-9-]{127}+$/', $string), 1); } } diff --git a/tests/SessionTest.php b/tests/SessionTest.php index e365274..22e419c 100644 --- a/tests/SessionTest.php +++ b/tests/SessionTest.php @@ -1,5 +1,7 @@ expectException(SessionException::class); + $this->expectExceptionMessage('Session already started'); Session::setReadWrite(); Session::start(); @@ -110,11 +118,12 @@ public function testStartException() /** * @runInSeparateProcess + * @throws \Exception */ - public function testUseDefaultDriverWhenAlreadyStartedException() + public function testUseDefaultDriverWhenAlreadyStartedException(): void { - static::expectException(SessionException::class); - static::expectExceptionMessage('Session already started'); + $this->expectException(SessionException::class); + $this->expectExceptionMessage('Session already started'); Session::setReadWrite(); Session::start(); @@ -123,11 +132,12 @@ public function testUseDefaultDriverWhenAlreadyStartedException() /** * @runInSeparateProcess + * @throws \Exception */ - public function testUseFileDriverWhenAlreadyStartedException() + public function testUseFileDriverWhenAlreadyStartedException(): void { - static::expectException(SessionException::class); - static::expectExceptionMessage('Session already started'); + $this->expectException(SessionException::class); + $this->expectExceptionMessage('Session already started'); Session::setReadWrite(); Session::start(); @@ -136,11 +146,12 @@ public function testUseFileDriverWhenAlreadyStartedException() /** * @runInSeparateProcess + * @throws \Exception */ - public function testUseCustomDriverWhenAlreadyStartedException() + public function testUseCustomDriverWhenAlreadyStartedException(): void { - static::expectException(SessionException::class); - static::expectExceptionMessage('Session already started'); + $this->expectException(SessionException::class); + $this->expectExceptionMessage('Session already started'); Session::setReadWrite(); Session::start(); @@ -149,41 +160,45 @@ public function testUseCustomDriverWhenAlreadyStartedException() /** * @runInSeparateProcess + * @throws \Exception */ - public function testUseDefaultDriver() + public function testUseDefaultDriver(): void { Session::useDefaultDriver(); Session::start(); - static::assertEquals('SessionHandler', get_class(Session::getDriver())); + static::assertInstanceOf(\SessionHandler::class, Session::getDriver()); } /** * @runInSeparateProcess + * @throws \Exception */ - public function testUseDefaultEncryptionDriver() + public function testUseDefaultEncryptionDriver(): void { Session::useDefaultEncryptionDriver('randomKey'); Session::start(); - static::assertEquals('Rancoud\Session\DefaultEncryption', get_class(Session::getDriver())); + static::assertInstanceOf(\Rancoud\Session\DefaultEncryption::class, Session::getDriver()); } /** * @runInSeparateProcess + * @throws \Exception */ - public function testUseFileDriver() + public function testUseFileDriver(): void { Session::useFileDriver(); Session::start(); - static::assertEquals('Rancoud\Session\File', get_class(Session::getDriver())); + static::assertInstanceOf(File::class, Session::getDriver()); } /** * @runInSeparateProcess + * @throws \Exception */ - public function testUseFileDriverWithPrefix() + public function testUseFileDriverWithPrefix(): void { $prefix = 'youhou_'; Session::useFileDriver(); @@ -194,8 +209,8 @@ public function testUseFileDriverWithPrefix() $path = Session::getOption('save_path'); Session::commit(); - static::assertEquals('Rancoud\Session\File', get_class(Session::getDriver())); - static::assertTrue(file_exists($path . DIRECTORY_SEPARATOR . $prefix . $sessionId)); + static::assertInstanceOf(File::class, Session::getDriver()); + static::assertFileExists($path . DIRECTORY_SEPARATOR . $prefix . $sessionId); $pattern = $path . DIRECTORY_SEPARATOR . 'youhou_*'; foreach (glob($pattern) as $file) { @@ -207,19 +222,21 @@ public function testUseFileDriverWithPrefix() /** * @runInSeparateProcess + * @throws \Exception */ - public function testUseFileEncryptionDriver() + public function testUseFileEncryptionDriver(): void { Session::useFileEncryptionDriver('randomKey'); Session::start(); - static::assertEquals('Rancoud\Session\FileEncryption', get_class(Session::getDriver())); + static::assertInstanceOf(\Rancoud\Session\FileEncryption::class, Session::getDriver()); } /** * @runInSeparateProcess + * @throws \Exception */ - public function testUseNewDatabaseDriver() + public function testUseNewDatabaseDriver(): void { $params = [ 'engine' => 'mysql', @@ -231,13 +248,14 @@ public function testUseNewDatabaseDriver() Session::useNewDatabaseDriver($params); Session::start(); - static::assertEquals('Rancoud\Session\Database', get_class(Session::getDriver())); + static::assertInstanceOf(\Rancoud\Session\Database::class, Session::getDriver()); } /** * @runInSeparateProcess + * @throws \Exception */ - public function testUseNewDatabaseEncryptionDriver() + public function testUseNewDatabaseEncryptionDriver(): void { $params = [ 'engine' => 'mysql', @@ -249,13 +267,15 @@ public function testUseNewDatabaseEncryptionDriver() Session::useNewDatabaseEncryptionDriver($params, 'randomKey'); Session::start(); - static::assertEquals('Rancoud\Session\DatabaseEncryption', get_class(Session::getDriver())); + static::assertInstanceOf(\Rancoud\Session\DatabaseEncryption::class, Session::getDriver()); } /** * @runInSeparateProcess + * @throws \Rancoud\Database\DatabaseException + * @throws \Exception */ - public function testUseCurrentDatabaseDriver() + public function testUseCurrentDatabaseDriver(): void { $conf = new \Rancoud\Database\Configurator([ 'engine' => 'mysql', @@ -268,13 +288,15 @@ public function testUseCurrentDatabaseDriver() Session::useCurrentDatabaseDriver($db); Session::start(); - static::assertEquals('Rancoud\Session\Database', get_class(Session::getDriver())); + static::assertInstanceOf(\Rancoud\Session\Database::class, Session::getDriver()); } /** * @runInSeparateProcess + * @throws \Rancoud\Database\DatabaseException + * @throws \Exception */ - public function testUseCurrentDatabaseEncryptionDriver() + public function testUseCurrentDatabaseEncryptionDriver(): void { $userId = 50; $conf = new \Rancoud\Database\Configurator([ @@ -286,7 +308,7 @@ public function testUseCurrentDatabaseEncryptionDriver() ]); $db = new \Rancoud\Database\Database($conf); Session::useCurrentDatabaseEncryptionDriver($db, 'randomKey'); - static::assertEquals('Rancoud\Session\DatabaseEncryption', get_class(Session::getDriver())); + static::assertInstanceOf(\Rancoud\Session\DatabaseEncryption::class, Session::getDriver()); Session::setUserIdForDatabase($userId); Session::setOption('lazy_write', '0'); @@ -300,8 +322,9 @@ public function testUseCurrentDatabaseEncryptionDriver() /** * @runInSeparateProcess + * @throws \Exception */ - public function testUseNewRedisDriver() + public function testUseNewRedisDriver(): void { $params = [ 'scheme' => 'tcp', @@ -311,13 +334,14 @@ public function testUseNewRedisDriver() Session::useNewRedisDriver($params); Session::start(); - static::assertEquals('Rancoud\Session\Redis', get_class(Session::getDriver())); + static::assertInstanceOf(\Rancoud\Session\Redis::class, Session::getDriver()); } /** * @runInSeparateProcess + * @throws \Exception */ - public function testUseNewRedisEncryptionDriver() + public function testUseNewRedisEncryptionDriver(): void { $params = [ 'scheme' => 'tcp', @@ -327,13 +351,14 @@ public function testUseNewRedisEncryptionDriver() Session::useNewRedisEncryptionDriver($params, 'randomKey'); Session::start(); - static::assertEquals('Rancoud\Session\RedisEncryption', get_class(Session::getDriver())); + static::assertInstanceOf(\Rancoud\Session\RedisEncryption::class, Session::getDriver()); } /** * @runInSeparateProcess + * @throws \Exception */ - public function testUseCurrentRedisDriver() + public function testUseCurrentRedisDriver(): void { $params = [ 'scheme' => 'tcp', @@ -344,13 +369,14 @@ public function testUseCurrentRedisDriver() Session::useCurrentRedisDriver($redis); Session::start(); - static::assertEquals('Rancoud\Session\Redis', get_class(Session::getDriver())); + static::assertInstanceOf(\Rancoud\Session\Redis::class, Session::getDriver()); } /** * @runInSeparateProcess + * @throws \Exception */ - public function testUseCurrentRedisEncryptionDriver() + public function testUseCurrentRedisEncryptionDriver(): void { $params = [ 'scheme' => 'tcp', @@ -361,27 +387,29 @@ public function testUseCurrentRedisEncryptionDriver() Session::useCurrentRedisEncryptionDriver($redis, 'randomKey'); Session::start(); - static::assertEquals('Rancoud\Session\RedisEncryption', get_class(Session::getDriver())); + static::assertInstanceOf(\Rancoud\Session\RedisEncryption::class, Session::getDriver()); } /** * @runInSeparateProcess + * @throws \Exception */ - public function testUseCustomDriver() + public function testUseCustomDriver(): void { Session::useCustomDriver(new File()); Session::start(); - static::assertEquals('Rancoud\Session\File', get_class(Session::getDriver())); + static::assertInstanceOf(File::class, Session::getDriver()); } /** * @runInSeparateProcess + * @throws \Exception */ - public function testUseEncryptionDriverThrowExceptionWhenMethodIncrorrect() + public function testUseEncryptionDriverThrowExceptionWhenMethodIncrorrect(): void { - static::expectException(SessionException::class); - static::expectExceptionMessage('Method unknowed: incorrect'); + $this->expectException(SessionException::class); + $this->expectExceptionMessage('Method unknowed: incorrect'); Session::useFileEncryptionDriver('randomKey', 'incorrect'); } @@ -390,8 +418,10 @@ public function testUseEncryptionDriverThrowExceptionWhenMethodIncrorrect() /** * @runInSeparateProcess + * @throws SessionException + * @throws \Exception */ - public function testSetOption() + public function testSetOption(): void { $defaultOption = Session::getOption('name'); static::assertEquals($defaultOption, ini_get('session.name')); @@ -410,21 +440,22 @@ public function testSetOption() /** * @runInSeparateProcess */ - public function testSetOptionThrowException() + public function testSetOptionThrowException(): void { - static::expectException(SessionException::class); - static::expectExceptionMessage('Incorrect option: azerty'); + $this->expectException(SessionException::class); + $this->expectExceptionMessage('Incorrect option: azerty'); Session::getOption('azerty'); } /** * @runInSeparateProcess + * @throws \Exception */ - public function testGetAll() + public function testGetAll(): void { $sessionValues = Session::getAll(); - static::assertTrue(empty($sessionValues)); + static::assertEmpty($sessionValues); Session::set('a', 'b'); @@ -434,8 +465,9 @@ public function testGetAll() /** * @runInSeparateProcess + * @throws \Exception */ - public function testFlash() + public function testFlash(): void { $flaKey1 = 'a'; $flaValue1 = 'b'; @@ -483,8 +515,9 @@ public function testFlash() /** * @runInSeparateProcess + * @throws \Exception */ - public function testRollback() + public function testRollback(): void { Session::set('a', 'b'); Session::commit(); @@ -498,8 +531,9 @@ public function testRollback() /** * @runInSeparateProcess + * @throws \Exception */ - public function testUnsaved() + public function testUnsaved(): void { Session::set('a', 'b'); Session::commit(); @@ -514,8 +548,9 @@ public function testUnsaved() /** * @runInSeparateProcess + * @throws \Exception */ - public function testRegenerate() + public function testRegenerate(): void { Session::set('a', 'v'); $sessionId = Session::getId(); @@ -526,8 +561,9 @@ public function testRegenerate() /** * @runInSeparateProcess + * @throws \Exception */ - public function testDestroy() + public function testDestroy(): void { Session::set('a', 'v'); $sessionId = Session::getId(); @@ -539,8 +575,9 @@ public function testDestroy() /** * @runInSeparateProcess + * @throws \Exception */ - public function testSetReadOnly() + public function testSetReadOnly(): void { Session::setReadOnly(); Session::start(); @@ -549,8 +586,10 @@ public function testSetReadOnly() /** * @runInSeparateProcess + * @throws \Rancoud\Database\DatabaseException + * @throws \Exception */ - public function testGc() + public function testGc(): void { $conf = new \Rancoud\Database\Configurator([ 'engine' => 'mysql', @@ -560,7 +599,7 @@ public function testGc() 'database' => 'test_database' ]); $db = new \Rancoud\Database\Database($conf); - $db->truncateTable('sessions'); + $db->truncateTables('sessions'); Session::useCurrentDatabaseDriver($db); Session::setReadWrite();