diff --git a/.gitignore b/.gitignore index 61e6bce..1e2f021 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,7 @@ vendor cov.xml -.vscode \ No newline at end of file +.vscode +.idea +.php-cs-fixer.cache +.phpunit.result.cache +.phpunit.cache diff --git a/.php-cs-fixer.php b/.php-cs-fixer.php new file mode 100644 index 0000000..3dbc9a8 --- /dev/null +++ b/.php-cs-fixer.php @@ -0,0 +1,15 @@ +path('src') + ->files() + ->name('*.php') + ->in(__DIR__); + +$config = (new PhpCsFixer\Config())->setFinder($finder); + +return $config; + diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..25fbd24 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,4 @@ +FROM php:8.1-cli AS php-81-dev +RUN apt-get update && apt-get install -y git zip +COPY --from=composer:2.5 /usr/bin/composer /usr/local/bin/composer +RUN docker-php-ext-install bcmath diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..045b284 --- /dev/null +++ b/Makefile @@ -0,0 +1,17 @@ +build: + docker build --target php-81-dev -t php-81-dev . + +ssh: + docker run --rm -it -v $(PWD):/app -w /app php-81-dev bash + +composer_install: + docker run --rm -v $(PWD):/app -w /app php-81-dev composer install + +phpunit: + docker run --rm -v $(PWD):/app -w /app php-81-dev vendor/bin/phpunit + +phpstan: + docker run --rm -v $(PWD):/app -w /app php-81-dev vendor/bin/phpstan analyze + +phpcsfixer: + docker run --rm -v $(PWD):/app -w /app php-81-dev vendor/bin/php-cs-fixer fix --dry-run --diff --verbose diff --git a/composer.json b/composer.json index 50a448c..7452f94 100644 --- a/composer.json +++ b/composer.json @@ -3,12 +3,14 @@ "description": "Teltonika FMXXXX parser library", "type": "library", "require": { - "php": ">=7.0", - "mdurrant/php-binary-reader": "^1.0", - "mockery/mockery": "^1.2" + "php": ">=8.1", + "mdurrant/php-binary-reader": "^1.0" }, "require-dev": { - "phpunit/phpunit": "^5.7" + "phpunit/phpunit": "^10.0", + "mockery/mockery": "^1.5", + "phpstan/phpstan": "^1.10", + "friendsofphp/php-cs-fixer": "^3.15" }, "autoload":{ "psr-4": { @@ -21,7 +23,7 @@ } }, "scripts": { - "test": "vendor/bin/phpunit tests --coverage-clover cov.xml --coverage-text" + "test": "vendor/bin/phpunit tests" }, "license": "MIT", "authors": [ diff --git a/composer.lock b/composer.lock index c520e5c..9157a7d 100644 --- a/composer.lock +++ b/composer.lock @@ -1,59 +1,11 @@ { "_readme": [ "This file locks the dependencies of your project to a known state", - "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "789b7dff34e2cbafdafe52ff08094f5d", + "content-hash": "e5bd35b41b238bdd45c19ac299b8bc25", "packages": [ - { - "name": "hamcrest/hamcrest-php", - "version": "v2.0.0", - "source": { - "type": "git", - "url": "https://github.com/hamcrest/hamcrest-php.git", - "reference": "776503d3a8e85d4f9a1148614f95b7a608b046ad" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/776503d3a8e85d4f9a1148614f95b7a608b046ad", - "reference": "776503d3a8e85d4f9a1148614f95b7a608b046ad", - "shasum": "" - }, - "require": { - "php": "^5.3|^7.0" - }, - "replace": { - "cordoval/hamcrest-php": "*", - "davedevelopment/hamcrest-php": "*", - "kodova/hamcrest-php": "*" - }, - "require-dev": { - "phpunit/php-file-iterator": "1.3.3", - "phpunit/phpunit": "~4.0", - "satooshi/php-coveralls": "^1.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "autoload": { - "classmap": [ - "hamcrest" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD" - ], - "description": "This is the PHP port of Hamcrest Matchers", - "keywords": [ - "test" - ], - "time": "2016-01-20T08:20:44+00:00" - }, { "name": "mdurrant/php-binary-reader", "version": "1.0.9", @@ -100,108 +52,115 @@ } ], "description": "Lightweight binary reader for PHP", + "support": { + "issues": "https://github.com/mdurrant/php-binary-reader/issues", + "source": "https://github.com/mdurrant/php-binary-reader/tree/master" + }, "time": "2016-12-08T01:24:19+00:00" - }, + } + ], + "packages-dev": [ { - "name": "mockery/mockery", - "version": "1.2.2", + "name": "composer/pcre", + "version": "3.1.0", "source": { "type": "git", - "url": "https://github.com/mockery/mockery.git", - "reference": "0eb0b48c3f07b3b89f5169ce005b7d05b18cf1d2" + "url": "https://github.com/composer/pcre.git", + "reference": "4bff79ddd77851fe3cdd11616ed3f92841ba5bd2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/mockery/mockery/zipball/0eb0b48c3f07b3b89f5169ce005b7d05b18cf1d2", - "reference": "0eb0b48c3f07b3b89f5169ce005b7d05b18cf1d2", + "url": "https://api.github.com/repos/composer/pcre/zipball/4bff79ddd77851fe3cdd11616ed3f92841ba5bd2", + "reference": "4bff79ddd77851fe3cdd11616ed3f92841ba5bd2", "shasum": "" }, "require": { - "hamcrest/hamcrest-php": "~2.0", - "lib-pcre": ">=7.0", - "php": ">=5.6.0" + "php": "^7.4 || ^8.0" }, "require-dev": { - "phpunit/phpunit": "~5.7.10|~6.5|~7.0|~8.0" + "phpstan/phpstan": "^1.3", + "phpstan/phpstan-strict-rules": "^1.1", + "symfony/phpunit-bridge": "^5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-main": "3.x-dev" } }, "autoload": { - "psr-0": { - "Mockery": "library/" + "psr-4": { + "Composer\\Pcre\\": "src" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Pádraic Brady", - "email": "padraic.brady@gmail.com", - "homepage": "http://blog.astrumfutura.com" - }, - { - "name": "Dave Marshall", - "email": "dave.marshall@atstsolutions.co.uk", - "homepage": "http://davedevelopment.co.uk" + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" } ], - "description": "Mockery is a simple yet flexible PHP mock object framework", - "homepage": "https://github.com/mockery/mockery", + "description": "PCRE wrapping library that offers type-safe preg_* replacements.", "keywords": [ - "BDD", - "TDD", - "library", - "mock", - "mock objects", - "mockery", - "stub", - "test", - "test double", - "testing" + "PCRE", + "preg", + "regex", + "regular expression" ], - "time": "2019-02-13T09:37:52+00:00" - } - ], - "packages-dev": [ + "support": { + "issues": "https://github.com/composer/pcre/issues", + "source": "https://github.com/composer/pcre/tree/3.1.0" + }, + "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": "2022-11-17T09:50:14+00:00" + }, { - "name": "doctrine/instantiator", - "version": "1.0.5", + "name": "composer/semver", + "version": "3.3.2", "source": { "type": "git", - "url": "https://github.com/doctrine/instantiator.git", - "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d" + "url": "https://github.com/composer/semver.git", + "reference": "3953f23262f2bff1919fc82183ad9acb13ff62c9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d", - "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d", + "url": "https://api.github.com/repos/composer/semver/zipball/3953f23262f2bff1919fc82183ad9acb13ff62c9", + "reference": "3953f23262f2bff1919fc82183ad9acb13ff62c9", "shasum": "" }, "require": { - "php": ">=5.3,<8.0-DEV" + "php": "^5.3.2 || ^7.0 || ^8.0" }, "require-dev": { - "athletic/athletic": "~0.1.8", - "ext-pdo": "*", - "ext-phar": "*", - "phpunit/phpunit": "~4.0", - "squizlabs/php_codesniffer": "~2.0" + "phpstan/phpstan": "^1.4", + "symfony/phpunit-bridge": "^4.2 || ^5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-main": "3.x-dev" } }, "autoload": { "psr-4": { - "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" + "Composer\\Semver\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -210,95 +169,77 @@ ], "authors": [ { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com", - "homepage": "http://ocramius.github.com/" + "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": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", - "homepage": "https://github.com/doctrine/instantiator", + "description": "Semver library that offers utilities, version constraint parsing and validation.", "keywords": [ - "constructor", - "instantiate" + "semantic", + "semver", + "validation", + "versioning" ], - "time": "2015-06-14T21:17:01+00:00" - }, - { - "name": "myclabs/deep-copy", - "version": "1.7.0", - "source": { - "type": "git", - "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e", - "reference": "3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e", - "shasum": "" - }, - "require": { - "php": "^5.6 || ^7.0" - }, - "require-dev": { - "doctrine/collections": "^1.0", - "doctrine/common": "^2.6", - "phpunit/phpunit": "^4.1" + "support": { + "irc": "irc://irc.freenode.org/composer", + "issues": "https://github.com/composer/semver/issues", + "source": "https://github.com/composer/semver/tree/3.3.2" }, - "type": "library", - "autoload": { - "psr-4": { - "DeepCopy\\": "src/DeepCopy/" + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" }, - "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" + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } ], - "time": "2017-10-19T19:58:43+00:00" + "time": "2022-04-01T19:23:25+00:00" }, { - "name": "phpdocumentor/reflection-common", - "version": "1.0.1", + "name": "composer/xdebug-handler", + "version": "3.0.3", "source": { "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionCommon.git", - "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6" + "url": "https://github.com/composer/xdebug-handler.git", + "reference": "ced299686f41dce890debac69273b47ffe98a40c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", - "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", + "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/ced299686f41dce890debac69273b47ffe98a40c", + "reference": "ced299686f41dce890debac69273b47ffe98a40c", "shasum": "" }, "require": { - "php": ">=5.5" + "composer/pcre": "^1 || ^2 || ^3", + "php": "^7.2.5 || ^8.0", + "psr/log": "^1 || ^2 || ^3" }, "require-dev": { - "phpunit/phpunit": "^4.6" + "phpstan/phpstan": "^1.0", + "phpstan/phpstan-strict-rules": "^1.1", + "symfony/phpunit-bridge": "^6.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, "autoload": { "psr-4": { - "phpDocumentor\\Reflection\\": [ - "src" - ] + "Composer\\XdebugHandler\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -307,57 +248,71 @@ ], "authors": [ { - "name": "Jaap van Otterdijk", - "email": "opensource@ijaap.nl" + "name": "John Stevenson", + "email": "john-stevenson@blueyonder.co.uk" } ], - "description": "Common reflection classes used by phpdocumentor to reflect the code structure", - "homepage": "http://www.phpdoc.org", + "description": "Restarts a process without Xdebug.", "keywords": [ - "FQSEN", - "phpDocumentor", - "phpdoc", - "reflection", - "static analysis" + "Xdebug", + "performance" + ], + "support": { + "irc": "irc://irc.freenode.org/composer", + "issues": "https://github.com/composer/xdebug-handler/issues", + "source": "https://github.com/composer/xdebug-handler/tree/3.0.3" + }, + "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": "2017-09-11T18:02:19+00:00" + "time": "2022-02-25T21:32:43+00:00" }, { - "name": "phpdocumentor/reflection-docblock", - "version": "4.3.0", + "name": "doctrine/annotations", + "version": "2.0.1", "source": { "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "94fd0001232e47129dd3504189fa1c7225010d08" + "url": "https://github.com/doctrine/annotations.git", + "reference": "e157ef3f3124bbf6fe7ce0ffd109e8a8ef284e7f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/94fd0001232e47129dd3504189fa1c7225010d08", - "reference": "94fd0001232e47129dd3504189fa1c7225010d08", + "url": "https://api.github.com/repos/doctrine/annotations/zipball/e157ef3f3124bbf6fe7ce0ffd109e8a8ef284e7f", + "reference": "e157ef3f3124bbf6fe7ce0ffd109e8a8ef284e7f", "shasum": "" }, "require": { - "php": "^7.0", - "phpdocumentor/reflection-common": "^1.0.0", - "phpdocumentor/type-resolver": "^0.4.0", - "webmozart/assert": "^1.0" + "doctrine/lexer": "^2 || ^3", + "ext-tokenizer": "*", + "php": "^7.2 || ^8.0", + "psr/cache": "^1 || ^2 || ^3" }, "require-dev": { - "doctrine/instantiator": "~1.0.5", - "mockery/mockery": "^1.0", - "phpunit/phpunit": "^6.4" + "doctrine/cache": "^2.0", + "doctrine/coding-standard": "^10", + "phpstan/phpstan": "^1.8.0", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "symfony/cache": "^5.4 || ^6", + "vimeo/psalm": "^4.10" }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.x-dev" - } + "suggest": { + "php": "PHP 8.0 or higher comes with attributes, a native replacement for annotations" }, + "type": "library", "autoload": { "psr-4": { - "phpDocumentor\\Reflection\\": [ - "src/" - ] + "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations" } }, "notification-url": "https://packagist.org/downloads/", @@ -366,46 +321,67 @@ ], "authors": [ { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" + "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": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", - "time": "2017-11-30T07:14:17+00:00" + "description": "Docblock Annotations Parser", + "homepage": "https://www.doctrine-project.org/projects/annotations.html", + "keywords": [ + "annotations", + "docblock", + "parser" + ], + "support": { + "issues": "https://github.com/doctrine/annotations/issues", + "source": "https://github.com/doctrine/annotations/tree/2.0.1" + }, + "time": "2023-02-02T22:02:53+00:00" }, { - "name": "phpdocumentor/type-resolver", - "version": "0.4.0", + "name": "doctrine/lexer", + "version": "3.0.0", "source": { "type": "git", - "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7" + "url": "https://github.com/doctrine/lexer.git", + "reference": "84a527db05647743d50373e0ec53a152f2cde568" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/9c977708995954784726e25d0cd1dddf4e65b0f7", - "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/84a527db05647743d50373e0ec53a152f2cde568", + "reference": "84a527db05647743d50373e0ec53a152f2cde568", "shasum": "" }, "require": { - "php": "^5.5 || ^7.0", - "phpdocumentor/reflection-common": "^1.0" + "php": "^8.1" }, "require-dev": { - "mockery/mockery": "^0.9.4", - "phpunit/phpunit": "^5.2||^4.8.24" + "doctrine/coding-standard": "^10", + "phpstan/phpstan": "^1.9", + "phpunit/phpunit": "^9.5", + "psalm/plugin-phpunit": "^0.18.3", + "vimeo/psalm": "^5.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, "autoload": { "psr-4": { - "phpDocumentor\\Reflection\\": [ - "src/" - ] + "Doctrine\\Common\\Lexer\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -414,46 +390,108 @@ ], "authors": [ { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" + "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" + ], + "support": { + "issues": "https://github.com/doctrine/lexer/issues", + "source": "https://github.com/doctrine/lexer/tree/3.0.0" + }, + "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": "2017-07-14T14:27:02+00:00" + "time": "2022-12-15T16:57:16+00:00" }, { - "name": "phpspec/prophecy", - "version": "1.7.6", + "name": "friendsofphp/php-cs-fixer", + "version": "v3.15.1", "source": { "type": "git", - "url": "https://github.com/phpspec/prophecy.git", - "reference": "33a7e3c4fda54e912ff6338c48823bd5c0f0b712" + "url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git", + "reference": "d48755372a113bddb99f749e34805d83f3acfe04" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/33a7e3c4fda54e912ff6338c48823bd5c0f0b712", - "reference": "33a7e3c4fda54e912ff6338c48823bd5c0f0b712", + "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/d48755372a113bddb99f749e34805d83f3acfe04", + "reference": "d48755372a113bddb99f749e34805d83f3acfe04", "shasum": "" }, "require": { - "doctrine/instantiator": "^1.0.2", - "php": "^5.3|^7.0", - "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0", - "sebastian/comparator": "^1.1|^2.0|^3.0", - "sebastian/recursion-context": "^1.0|^2.0|^3.0" + "composer/semver": "^3.3", + "composer/xdebug-handler": "^3.0.3", + "doctrine/annotations": "^2", + "doctrine/lexer": "^2 || ^3", + "ext-json": "*", + "ext-tokenizer": "*", + "php": "^7.4 || ^8.0", + "sebastian/diff": "^4.0 || ^5.0", + "symfony/console": "^5.4 || ^6.0", + "symfony/event-dispatcher": "^5.4 || ^6.0", + "symfony/filesystem": "^5.4 || ^6.0", + "symfony/finder": "^5.4 || ^6.0", + "symfony/options-resolver": "^5.4 || ^6.0", + "symfony/polyfill-mbstring": "^1.27", + "symfony/polyfill-php80": "^1.27", + "symfony/polyfill-php81": "^1.27", + "symfony/process": "^5.4 || ^6.0", + "symfony/stopwatch": "^5.4 || ^6.0" }, "require-dev": { - "phpspec/phpspec": "^2.5|^3.2", - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5" + "justinrainbow/json-schema": "^5.2", + "keradus/cli-executor": "^2.0", + "mikey179/vfsstream": "^1.6.11", + "php-coveralls/php-coveralls": "^2.5.3", + "php-cs-fixer/accessible-object": "^1.1", + "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.2", + "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.2.1", + "phpspec/prophecy": "^1.16", + "phpspec/prophecy-phpunit": "^2.0", + "phpunit/phpunit": "^9.5", + "phpunitgoodpractices/polyfill": "^1.6", + "phpunitgoodpractices/traits": "^1.9.2", + "symfony/phpunit-bridge": "^6.2.3", + "symfony/yaml": "^5.4 || ^6.0" }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.7.x-dev" - } + "suggest": { + "ext-dom": "For handling output formats in XML", + "ext-mbstring": "For handling non-UTF8 characters." }, + "bin": [ + "php-cs-fixer" + ], + "type": "application", "autoload": { - "psr-0": { - "Prophecy\\": "src/" + "psr-4": { + "PhpCsFixer\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -462,106 +500,108 @@ ], "authors": [ { - "name": "Konstantin Kudryashov", - "email": "ever.zet@gmail.com", - "homepage": "http://everzet.com" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" }, { - "name": "Marcello Duarte", - "email": "marcello.duarte@gmail.com" + "name": "Dariusz Rumiński", + "email": "dariusz.ruminski@gmail.com" } ], - "description": "Highly opinionated mocking framework for PHP 5.3+", - "homepage": "https://github.com/phpspec/prophecy", + "description": "A tool to automatically fix PHP code style", "keywords": [ - "Double", - "Dummy", - "fake", - "mock", - "spy", - "stub" + "Static code analysis", + "fixer", + "standards", + "static analysis" ], - "time": "2018-04-18T13:57:24+00:00" + "support": { + "issues": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues", + "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.15.1" + }, + "funding": [ + { + "url": "https://github.com/keradus", + "type": "github" + } + ], + "time": "2023-03-13T23:26:30+00:00" }, { - "name": "phpunit/php-code-coverage", - "version": "4.0.8", + "name": "hamcrest/hamcrest-php", + "version": "v2.0.1", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "ef7b2f56815df854e66ceaee8ebe9393ae36a40d" + "url": "https://github.com/hamcrest/hamcrest-php.git", + "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/ef7b2f56815df854e66ceaee8ebe9393ae36a40d", - "reference": "ef7b2f56815df854e66ceaee8ebe9393ae36a40d", + "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", + "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", "shasum": "" }, "require": { - "ext-dom": "*", - "ext-xmlwriter": "*", - "php": "^5.6 || ^7.0", - "phpunit/php-file-iterator": "^1.3", - "phpunit/php-text-template": "^1.2", - "phpunit/php-token-stream": "^1.4.2 || ^2.0", - "sebastian/code-unit-reverse-lookup": "^1.0", - "sebastian/environment": "^1.3.2 || ^2.0", - "sebastian/version": "^1.0 || ^2.0" + "php": "^5.3|^7.0|^8.0" }, - "require-dev": { - "ext-xdebug": "^2.1.4", - "phpunit/phpunit": "^5.7" + "replace": { + "cordoval/hamcrest-php": "*", + "davedevelopment/hamcrest-php": "*", + "kodova/hamcrest-php": "*" }, - "suggest": { - "ext-xdebug": "^2.5.1" + "require-dev": { + "phpunit/php-file-iterator": "^1.4 || ^2.0", + "phpunit/phpunit": "^4.8.36 || ^5.7 || ^6.5 || ^7.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0.x-dev" + "dev-master": "2.1-dev" } }, "autoload": { "classmap": [ - "src/" + "hamcrest" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", - "role": "lead" - } - ], - "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", - "homepage": "https://github.com/sebastianbergmann/php-code-coverage", + "description": "This is the PHP port of Hamcrest Matchers", "keywords": [ - "coverage", - "testing", - "xunit" + "test" ], - "time": "2017-04-02T07:44:40+00:00" + "support": { + "issues": "https://github.com/hamcrest/hamcrest-php/issues", + "source": "https://github.com/hamcrest/hamcrest-php/tree/v2.0.1" + }, + "time": "2020-07-09T08:09:16+00:00" }, { - "name": "phpunit/php-file-iterator", - "version": "1.4.5", + "name": "mockery/mockery", + "version": "1.5.1", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4" + "url": "https://github.com/mockery/mockery.git", + "reference": "e92dcc83d5a51851baf5f5591d32cb2b16e3684e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/730b01bc3e867237eaac355e06a36b85dd93a8b4", - "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4", + "url": "https://api.github.com/repos/mockery/mockery/zipball/e92dcc83d5a51851baf5f5591d32cb2b16e3684e", + "reference": "e92dcc83d5a51851baf5f5591d32cb2b16e3684e", "shasum": "" }, "require": { - "php": ">=5.3.3" + "hamcrest/hamcrest-php": "^2.0.1", + "lib-pcre": ">=7.0", + "php": "^7.3 || ^8.0" + }, + "conflict": { + "phpunit/phpunit": "<8.0" + }, + "require-dev": { + "phpunit/phpunit": "^8.5 || ^9.3" }, "type": "library", "extra": { @@ -570,9 +610,9 @@ } }, "autoload": { - "classmap": [ - "src/" - ] + "psr-0": { + "Mockery": "library/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -580,90 +620,130 @@ ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", - "role": "lead" - } - ], - "description": "FilterIterator implementation that filters files based on a list of suffixes.", - "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", - "keywords": [ - "filesystem", - "iterator" + "name": "Pádraic Brady", + "email": "padraic.brady@gmail.com", + "homepage": "http://blog.astrumfutura.com" + }, + { + "name": "Dave Marshall", + "email": "dave.marshall@atstsolutions.co.uk", + "homepage": "http://davedevelopment.co.uk" + } + ], + "description": "Mockery is a simple yet flexible PHP mock object framework", + "homepage": "https://github.com/mockery/mockery", + "keywords": [ + "BDD", + "TDD", + "library", + "mock", + "mock objects", + "mockery", + "stub", + "test", + "test double", + "testing" ], - "time": "2017-11-27T13:52:08+00:00" + "support": { + "issues": "https://github.com/mockery/mockery/issues", + "source": "https://github.com/mockery/mockery/tree/1.5.1" + }, + "time": "2022-09-07T15:32:08+00:00" }, { - "name": "phpunit/php-text-template", - "version": "1.2.1", + "name": "myclabs/deep-copy", + "version": "1.11.1", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", - "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", + "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": "^7.1 || ^8.0" + }, + "conflict": { + "doctrine/collections": "<1.6.8", + "doctrine/common": "<2.13.3 || >=3,<3.2.2" + }, + "require-dev": { + "doctrine/collections": "^1.6.8", + "doctrine/common": "^2.13.3 || ^3.2.2", + "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" }, "type": "library", "autoload": { - "classmap": [ - "src/" - ] + "files": [ + "src/DeepCopy/deep_copy.php" + ], + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], - "authors": [ + "description": "Create deep copies (clones) of your objects", + "keywords": [ + "clone", + "copy", + "duplicate", + "object", + "object graph" + ], + "support": { + "issues": "https://github.com/myclabs/DeepCopy/issues", + "source": "https://github.com/myclabs/DeepCopy/tree/1.11.1" + }, + "funding": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", + "type": "tidelift" } ], - "description": "Simple template engine.", - "homepage": "https://github.com/sebastianbergmann/php-text-template/", - "keywords": [ - "template" - ], - "time": "2015-06-21T13:50:34+00:00" + "time": "2023-03-08T13:26:56+00:00" }, { - "name": "phpunit/php-timer", - "version": "1.0.9", + "name": "nikic/php-parser", + "version": "v4.15.4", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f" + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "6bb5176bc4af8bcb7d926f88718db9b96a2d4290" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", - "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/6bb5176bc4af8bcb7d926f88718db9b96a2d4290", + "reference": "6bb5176bc4af8bcb7d926f88718db9b96a2d4290", "shasum": "" }, "require": { - "php": "^5.3.3 || ^7.0" + "ext-tokenizer": "*", + "php": ">=7.0" }, "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" + "ircmaxell/php-yacc": "^0.0.7", + "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" }, + "bin": [ + "bin/php-parse" + ], "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-master": "4.9-dev" } }, "autoload": { - "classmap": [ - "src/" - ] + "psr-4": { + "PhpParser\\": "lib/PhpParser" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -671,43 +751,45 @@ ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", - "role": "lead" + "name": "Nikita Popov" } ], - "description": "Utility class for timing", - "homepage": "https://github.com/sebastianbergmann/php-timer/", + "description": "A PHP parser written in PHP", "keywords": [ - "timer" + "parser", + "php" ], - "time": "2017-02-26T11:10:40+00:00" + "support": { + "issues": "https://github.com/nikic/PHP-Parser/issues", + "source": "https://github.com/nikic/PHP-Parser/tree/v4.15.4" + }, + "time": "2023-03-05T19:49:14+00:00" }, { - "name": "phpunit/php-token-stream", - "version": "2.0.2", + "name": "phar-io/manifest", + "version": "2.0.3", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-token-stream.git", - "reference": "791198a2c6254db10131eecfe8c06670700904db" + "url": "https://github.com/phar-io/manifest.git", + "reference": "97803eca37d319dfa7826cc2437fc020857acb53" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/791198a2c6254db10131eecfe8c06670700904db", - "reference": "791198a2c6254db10131eecfe8c06670700904db", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/97803eca37d319dfa7826cc2437fc020857acb53", + "reference": "97803eca37d319dfa7826cc2437fc020857acb53", "shasum": "" }, "require": { - "ext-tokenizer": "*", - "php": "^7.0" - }, - "require-dev": { - "phpunit/phpunit": "^6.2.4" + "ext-dom": "*", + "ext-phar": "*", + "ext-xmlwriter": "*", + "phar-io/version": "^3.0.1", + "php": "^7.2 || ^8.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { @@ -720,75 +802,47 @@ "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" + "email": "sebastian@phpunit.de", + "role": "Developer" } ], - "description": "Wrapper around PHP's tokenizer extension.", - "homepage": "https://github.com/sebastianbergmann/php-token-stream/", - "keywords": [ - "tokenizer" - ], - "time": "2017-11-27T05:48:46+00:00" + "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", + "support": { + "issues": "https://github.com/phar-io/manifest/issues", + "source": "https://github.com/phar-io/manifest/tree/2.0.3" + }, + "time": "2021-07-20T11:28:43+00:00" }, { - "name": "phpunit/phpunit", - "version": "5.7.27", + "name": "phar-io/version", + "version": "3.2.1", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "b7803aeca3ccb99ad0a506fa80b64cd6a56bbc0c" + "url": "https://github.com/phar-io/version.git", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/b7803aeca3ccb99ad0a506fa80b64cd6a56bbc0c", - "reference": "b7803aeca3ccb99ad0a506fa80b64cd6a56bbc0c", + "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", "shasum": "" }, "require": { - "ext-dom": "*", - "ext-json": "*", - "ext-libxml": "*", - "ext-mbstring": "*", - "ext-xml": "*", - "myclabs/deep-copy": "~1.3", - "php": "^5.6 || ^7.0", - "phpspec/prophecy": "^1.6.2", - "phpunit/php-code-coverage": "^4.0.4", - "phpunit/php-file-iterator": "~1.4", - "phpunit/php-text-template": "~1.2", - "phpunit/php-timer": "^1.0.6", - "phpunit/phpunit-mock-objects": "^3.2", - "sebastian/comparator": "^1.2.4", - "sebastian/diff": "^1.4.3", - "sebastian/environment": "^1.3.4 || ^2.0", - "sebastian/exporter": "~2.0", - "sebastian/global-state": "^1.1", - "sebastian/object-enumerator": "~2.0", - "sebastian/resource-operations": "~1.0", - "sebastian/version": "^1.0.6|^2.0.1", - "symfony/yaml": "~2.1|~3.0|~4.0" - }, - "conflict": { - "phpdocumentor/reflection-docblock": "3.0.2" - }, - "require-dev": { - "ext-pdo": "*" - }, - "suggest": { - "ext-xdebug": "*", - "phpunit/php-invoker": "~1.1" + "php": "^7.2 || ^8.0" }, - "bin": [ - "phpunit" - ], "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.7.x-dev" - } - }, "autoload": { "classmap": [ "src/" @@ -799,54 +853,131 @@ "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": "lead" + "role": "Developer" } ], - "description": "The PHP Unit Testing framework.", - "homepage": "https://phpunit.de/", - "keywords": [ - "phpunit", - "testing", - "xunit" - ], - "time": "2018-02-01T05:50:59+00:00" + "description": "Library for handling version information and constraints", + "support": { + "issues": "https://github.com/phar-io/version/issues", + "source": "https://github.com/phar-io/version/tree/3.2.1" + }, + "time": "2022-02-21T01:04:05+00:00" }, { - "name": "phpunit/phpunit-mock-objects", - "version": "3.4.4", + "name": "phpstan/phpstan", + "version": "1.10.9", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", - "reference": "a23b761686d50a560cc56233b9ecf49597cc9118" + "url": "https://github.com/phpstan/phpstan.git", + "reference": "9b13dafe3d66693d20fe5729c3dde1d31bb64703" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/a23b761686d50a560cc56233b9ecf49597cc9118", - "reference": "a23b761686d50a560cc56233b9ecf49597cc9118", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/9b13dafe3d66693d20fe5729c3dde1d31bb64703", + "reference": "9b13dafe3d66693d20fe5729c3dde1d31bb64703", "shasum": "" }, "require": { - "doctrine/instantiator": "^1.0.2", - "php": "^5.6 || ^7.0", - "phpunit/php-text-template": "^1.2", - "sebastian/exporter": "^1.2 || ^2.0" + "php": "^7.2|^8.0" }, "conflict": { - "phpunit/phpunit": "<5.4.0" + "phpstan/phpstan-shim": "*" + }, + "bin": [ + "phpstan", + "phpstan.phar" + ], + "type": "library", + "autoload": { + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "PHPStan - PHP Static Analysis Tool", + "keywords": [ + "dev", + "static analysis" + ], + "support": { + "docs": "https://phpstan.org/user-guide/getting-started", + "forum": "https://github.com/phpstan/phpstan/discussions", + "issues": "https://github.com/phpstan/phpstan/issues", + "security": "https://github.com/phpstan/phpstan/security/policy", + "source": "https://github.com/phpstan/phpstan-src" + }, + "funding": [ + { + "url": "https://github.com/ondrejmirtes", + "type": "github" + }, + { + "url": "https://github.com/phpstan", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpstan/phpstan", + "type": "tidelift" + } + ], + "time": "2023-03-30T08:58:01+00:00" + }, + { + "name": "phpunit/php-code-coverage", + "version": "10.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "20800e84296ea4732f9a125e08ce86b4004ae3e4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/20800e84296ea4732f9a125e08ce86b4004ae3e4", + "reference": "20800e84296ea4732f9a125e08ce86b4004ae3e4", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "ext-xmlwriter": "*", + "nikic/php-parser": "^4.15", + "php": ">=8.1", + "phpunit/php-file-iterator": "^4.0", + "phpunit/php-text-template": "^3.0", + "sebastian/code-unit-reverse-lookup": "^3.0", + "sebastian/complexity": "^3.0", + "sebastian/environment": "^6.0", + "sebastian/lines-of-code": "^2.0", + "sebastian/version": "^4.0", + "theseer/tokenizer": "^1.2.0" }, "require-dev": { - "phpunit/phpunit": "^5.4" + "phpunit/phpunit": "^10.0" }, "suggest": { - "ext-soap": "*" + "ext-pcov": "PHP extension that provides line coverage", + "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.2.x-dev" + "dev-main": "10.0-dev" } }, "autoload": { @@ -861,43 +992,53 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", + "email": "sebastian@phpunit.de", "role": "lead" } ], - "description": "Mock Object library for PHPUnit", - "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/", + "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", + "homepage": "https://github.com/sebastianbergmann/php-code-coverage", "keywords": [ - "mock", + "coverage", + "testing", "xunit" ], - "abandoned": true, - "time": "2017-06-30T09:13:00+00:00" + "support": { + "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/10.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-03-06T13:00:19+00:00" }, { - "name": "sebastian/code-unit-reverse-lookup", - "version": "1.0.1", + "name": "phpunit/php-file-iterator", + "version": "4.0.1", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", - "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18" + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "fd9329ab3368f59fe1fe808a189c51086bd4b6bd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", - "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/fd9329ab3368f59fe1fe808a189c51086bd4b6bd", + "reference": "fd9329ab3368f59fe1fe808a189c51086bd4b6bd", "shasum": "" }, "require": { - "php": "^5.6 || ^7.0" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^5.7 || ^6.0" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-main": "4.0-dev" } }, "autoload": { @@ -912,39 +1053,56 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Looks up which function or method a line of code belongs to", - "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", - "time": "2017-03-04T06:30:41+00:00" + "description": "FilterIterator implementation that filters files based on a list of suffixes.", + "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", + "keywords": [ + "filesystem", + "iterator" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/4.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-10T16:53:14+00:00" }, { - "name": "sebastian/comparator", - "version": "1.2.4", + "name": "phpunit/php-invoker", + "version": "4.0.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be" + "url": "https://github.com/sebastianbergmann/php-invoker.git", + "reference": "f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2b7424b55f5047b47ac6e5ccb20b2aea4011d9be", - "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be", + "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7", + "reference": "f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7", "shasum": "" }, "require": { - "php": ">=5.3.3", - "sebastian/diff": "~1.2", - "sebastian/exporter": "~1.2 || ~2.0" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "~4.4" + "ext-pcntl": "*", + "phpunit/phpunit": "^10.0" + }, + "suggest": { + "ext-pcntl": "*" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.2.x-dev" + "dev-main": "4.0-dev" } }, "autoload": { @@ -957,56 +1115,53 @@ "BSD-3-Clause" ], "authors": [ - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@2bepublished.at" - }, { "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Provides the functionality to compare PHP values for equality", - "homepage": "http://www.github.com/sebastianbergmann/comparator", + "description": "Invoke callables with a timeout", + "homepage": "https://github.com/sebastianbergmann/php-invoker/", "keywords": [ - "comparator", - "compare", - "equality" + "process" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-invoker/issues", + "source": "https://github.com/sebastianbergmann/php-invoker/tree/4.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } ], - "time": "2017-01-29T09:50:25+00:00" + "time": "2023-02-03T06:56:09+00:00" }, { - "name": "sebastian/diff", - "version": "1.4.3", + "name": "phpunit/php-text-template", + "version": "3.0.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4" + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "9f3d3709577a527025f55bcf0f7ab8052c8bb37d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/7f066a26a962dbe58ddea9f72a4e82874a3975a4", - "reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/9f3d3709577a527025f55bcf0f7ab8052c8bb37d", + "reference": "9f3d3709577a527025f55bcf0f7ab8052c8bb37d", "shasum": "" }, "require": { - "php": "^5.3.3 || ^7.0" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.4-dev" + "dev-main": "3.0-dev" } }, "autoload": { @@ -1019,46 +1174,53 @@ "BSD-3-Clause" ], "authors": [ - { - "name": "Kore Nordmann", - "email": "mail@kore-nordmann.de" - }, { "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Diff implementation", - "homepage": "https://github.com/sebastianbergmann/diff", + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", "keywords": [ - "diff" + "template" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-text-template/issues", + "source": "https://github.com/sebastianbergmann/php-text-template/tree/3.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } ], - "time": "2017-05-22T07:24:03+00:00" + "time": "2023-02-03T06:56:46+00:00" }, { - "name": "sebastian/environment", - "version": "2.0.0", + "name": "phpunit/php-timer", + "version": "6.0.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "5795ffe5dc5b02460c3e34222fee8cbe245d8fac" + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "e2a2d67966e740530f4a3343fe2e030ffdc1161d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/5795ffe5dc5b02460c3e34222fee8cbe245d8fac", - "reference": "5795ffe5dc5b02460c3e34222fee8cbe245d8fac", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/e2a2d67966e740530f4a3343fe2e030ffdc1161d", + "reference": "e2a2d67966e740530f4a3343fe2e030ffdc1161d", "shasum": "" }, "require": { - "php": "^5.6 || ^7.0" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^5.0" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0.x-dev" + "dev-main": "6.0-dev" } }, "autoload": { @@ -1073,47 +1235,85 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Provides functionality to handle HHVM/PHP environments", - "homepage": "http://www.github.com/sebastianbergmann/environment", - "keywords": [ - "Xdebug", - "environment", - "hhvm" + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", + "keywords": [ + "timer" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-timer/issues", + "source": "https://github.com/sebastianbergmann/php-timer/tree/6.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } ], - "time": "2016-11-26T07:53:53+00:00" + "time": "2023-02-03T06:57:52+00:00" }, { - "name": "sebastian/exporter", - "version": "2.0.0", + "name": "phpunit/phpunit", + "version": "10.0.19", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "ce474bdd1a34744d7ac5d6aad3a46d48d9bac4c4" + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "20c23e85c86e5c06d63538ba464e8054f4744e62" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/ce474bdd1a34744d7ac5d6aad3a46d48d9bac4c4", - "reference": "ce474bdd1a34744d7ac5d6aad3a46d48d9bac4c4", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/20c23e85c86e5c06d63538ba464e8054f4744e62", + "reference": "20c23e85c86e5c06d63538ba464e8054f4744e62", "shasum": "" }, "require": { - "php": ">=5.3.3", - "sebastian/recursion-context": "~2.0" - }, - "require-dev": { + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", "ext-mbstring": "*", - "phpunit/phpunit": "~4.4" + "ext-xml": "*", + "ext-xmlwriter": "*", + "myclabs/deep-copy": "^1.10.1", + "phar-io/manifest": "^2.0.3", + "phar-io/version": "^3.0.2", + "php": ">=8.1", + "phpunit/php-code-coverage": "^10.0", + "phpunit/php-file-iterator": "^4.0", + "phpunit/php-invoker": "^4.0", + "phpunit/php-text-template": "^3.0", + "phpunit/php-timer": "^6.0", + "sebastian/cli-parser": "^2.0", + "sebastian/code-unit": "^2.0", + "sebastian/comparator": "^5.0", + "sebastian/diff": "^5.0", + "sebastian/environment": "^6.0", + "sebastian/exporter": "^5.0", + "sebastian/global-state": "^6.0", + "sebastian/object-enumerator": "^5.0", + "sebastian/recursion-context": "^5.0", + "sebastian/type": "^4.0", + "sebastian/version": "^4.0" + }, + "suggest": { + "ext-soap": "To be able to generate mocks based on WSDL files" }, + "bin": [ + "phpunit" + ], "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0.x-dev" + "dev-main": "10.0-dev" } }, "autoload": { + "files": [ + "src/Framework/Assert/Functions.php" + ], "classmap": [ "src/" ] @@ -1124,105 +1324,104 @@ ], "authors": [ { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "The PHP Unit Testing framework.", + "homepage": "https://phpunit.de/", + "keywords": [ + "phpunit", + "testing", + "xunit" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/phpunit/issues", + "security": "https://github.com/sebastianbergmann/phpunit/security/policy", + "source": "https://github.com/sebastianbergmann/phpunit/tree/10.0.19" + }, + "funding": [ { - "name": "Bernhard Schussek", - "email": "bschussek@2bepublished.at" + "url": "https://phpunit.de/sponsors.html", + "type": "custom" }, { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "url": "https://github.com/sebastianbergmann", + "type": "github" }, { - "name": "Adam Harvey", - "email": "aharvey@php.net" + "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", + "type": "tidelift" } ], - "description": "Provides the functionality to export PHP variables for visualization", - "homepage": "http://www.github.com/sebastianbergmann/exporter", - "keywords": [ - "export", - "exporter" - ], - "time": "2016-11-19T08:54:04+00:00" + "time": "2023-03-27T11:46:33+00:00" }, { - "name": "sebastian/global-state", - "version": "1.1.1", + "name": "psr/cache", + "version": "3.0.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4" + "url": "https://github.com/php-fig/cache.git", + "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bc37d50fea7d017d3d340f230811c9f1d7280af4", - "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4", + "url": "https://api.github.com/repos/php-fig/cache/zipball/aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", + "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", "shasum": "" }, "require": { - "php": ">=5.3.3" - }, - "require-dev": { - "phpunit/phpunit": "~4.2" - }, - "suggest": { - "ext-uopz": "*" + "php": ">=8.0.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-master": "1.0.x-dev" } }, "autoload": { - "classmap": [ - "src/" - ] + "psr-4": { + "Psr\\Cache\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" } ], - "description": "Snapshotting of global state", - "homepage": "http://www.github.com/sebastianbergmann/global-state", + "description": "Common interface for caching libraries", "keywords": [ - "global state" + "cache", + "psr", + "psr-6" ], - "time": "2015-10-12T03:26:01+00:00" + "support": { + "source": "https://github.com/php-fig/cache/tree/3.0.0" + }, + "time": "2021-02-03T23:26:27+00:00" }, { - "name": "sebastian/object-enumerator", - "version": "2.0.1", + "name": "psr/container", + "version": "2.0.2", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "1311872ac850040a79c3c058bea3e22d0f09cbb7" + "url": "https://github.com/php-fig/container.git", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/1311872ac850040a79c3c058bea3e22d0f09cbb7", - "reference": "1311872ac850040a79c3c058bea3e22d0f09cbb7", + "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963", "shasum": "" }, "require": { - "php": ">=5.6", - "sebastian/recursion-context": "~2.0" - }, - "require-dev": { - "phpunit/phpunit": "~5" + "php": ">=7.4.0" }, "type": "library", "extra": { @@ -1231,140 +1430,159 @@ } }, "autoload": { - "classmap": [ - "src/" - ] + "psr-4": { + "Psr\\Container\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" } ], - "description": "Traverses array structures and object graphs to enumerate all referenced objects", - "homepage": "https://github.com/sebastianbergmann/object-enumerator/", - "time": "2017-02-18T15:18:39+00:00" + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", + "keywords": [ + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" + ], + "support": { + "issues": "https://github.com/php-fig/container/issues", + "source": "https://github.com/php-fig/container/tree/2.0.2" + }, + "time": "2021-11-05T16:47:00+00:00" }, { - "name": "sebastian/recursion-context", - "version": "2.0.0", + "name": "psr/event-dispatcher", + "version": "1.0.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "2c3ba150cbec723aa057506e73a8d33bdb286c9a" + "url": "https://github.com/php-fig/event-dispatcher.git", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/2c3ba150cbec723aa057506e73a8d33bdb286c9a", - "reference": "2c3ba150cbec723aa057506e73a8d33bdb286c9a", + "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", "shasum": "" }, "require": { - "php": ">=5.3.3" - }, - "require-dev": { - "phpunit/phpunit": "~4.4" + "php": ">=7.2.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0.x-dev" + "dev-master": "1.0.x-dev" } }, "autoload": { - "classmap": [ - "src/" - ] + "psr-4": { + "Psr\\EventDispatcher\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Adam Harvey", - "email": "aharvey@php.net" + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" } ], - "description": "Provides functionality to recursively process PHP variables", - "homepage": "http://www.github.com/sebastianbergmann/recursion-context", - "time": "2016-11-19T07:33:16+00:00" + "description": "Standard interfaces for event handling.", + "keywords": [ + "events", + "psr", + "psr-14" + ], + "support": { + "issues": "https://github.com/php-fig/event-dispatcher/issues", + "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0" + }, + "time": "2019-01-08T18:20:26+00:00" }, { - "name": "sebastian/resource-operations", - "version": "1.0.0", + "name": "psr/log", + "version": "3.0.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/resource-operations.git", - "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52" + "url": "https://github.com/php-fig/log.git", + "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/ce990bb21759f94aeafd30209e8cfcdfa8bc3f52", - "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52", + "url": "https://api.github.com/repos/php-fig/log/zipball/fe5ea303b0887d5caefd3d431c3e61ad47037001", + "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001", "shasum": "" }, "require": { - "php": ">=5.6.0" + "php": ">=8.0.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "3.x-dev" } }, "autoload": { - "classmap": [ - "src/" - ] + "psr-4": { + "Psr\\Log\\": "src" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" } ], - "description": "Provides a list of PHP built-in functions that operate on resources", - "homepage": "https://www.github.com/sebastianbergmann/resource-operations", - "time": "2015-07-28T20:34:47+00:00" + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "support": { + "source": "https://github.com/php-fig/log/tree/3.0.0" + }, + "time": "2021-07-14T16:46:02+00:00" }, { - "name": "sebastian/version", - "version": "2.0.1", + "name": "sebastian/cli-parser", + "version": "2.0.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/version.git", - "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019" + "url": "https://github.com/sebastianbergmann/cli-parser.git", + "reference": "efdc130dbbbb8ef0b545a994fd811725c5282cae" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019", - "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/efdc130dbbbb8ef0b545a994fd811725c5282cae", + "reference": "efdc130dbbbb8ef0b545a994fd811725c5282cae", "shasum": "" }, "require": { - "php": ">=5.6" + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0.x-dev" + "dev-main": "2.0-dev" } }, "autoload": { @@ -1383,173 +1601,2227 @@ "role": "lead" } ], - "description": "Library that helps with managing the version number of Git-hosted PHP projects", - "homepage": "https://github.com/sebastianbergmann/version", - "time": "2016-10-03T07:35:21+00:00" + "description": "Library for parsing CLI options", + "homepage": "https://github.com/sebastianbergmann/cli-parser", + "support": { + "issues": "https://github.com/sebastianbergmann/cli-parser/issues", + "source": "https://github.com/sebastianbergmann/cli-parser/tree/2.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:58:15+00:00" }, { - "name": "symfony/polyfill-ctype", - "version": "v1.8.0", + "name": "sebastian/code-unit", + "version": "2.0.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "7cc359f1b7b80fc25ed7796be7d96adc9b354bae" + "url": "https://github.com/sebastianbergmann/code-unit.git", + "reference": "a81fee9eef0b7a76af11d121767abc44c104e503" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/7cc359f1b7b80fc25ed7796be7d96adc9b354bae", - "reference": "7cc359f1b7b80fc25ed7796be7d96adc9b354bae", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/a81fee9eef0b7a76af11d121767abc44c104e503", + "reference": "a81fee9eef0b7a76af11d121767abc44c104e503", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.8-dev" + "dev-main": "2.0-dev" } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Ctype\\": "" - }, - "files": [ - "bootstrap.php" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - }, - { - "name": "Gert de Pagter", - "email": "BackEndTea@gmail.com" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Symfony polyfill for ctype functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "ctype", - "polyfill", - "portable" + "description": "Collection of value objects that represent the PHP code units", + "homepage": "https://github.com/sebastianbergmann/code-unit", + "support": { + "issues": "https://github.com/sebastianbergmann/code-unit/issues", + "source": "https://github.com/sebastianbergmann/code-unit/tree/2.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } ], - "time": "2018-04-30T19:57:29+00:00" + "time": "2023-02-03T06:58:43+00:00" }, { - "name": "symfony/yaml", - "version": "v3.4.14", + "name": "sebastian/code-unit-reverse-lookup", + "version": "3.0.0", "source": { "type": "git", - "url": "https://github.com/symfony/yaml.git", - "reference": "810af2d35fc72b6cf5c01116806d2b65ccaaf2e2" + "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", + "reference": "5e3a687f7d8ae33fb362c5c0743794bbb2420a1d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/810af2d35fc72b6cf5c01116806d2b65ccaaf2e2", - "reference": "810af2d35fc72b6cf5c01116806d2b65ccaaf2e2", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/5e3a687f7d8ae33fb362c5c0743794bbb2420a1d", + "reference": "5e3a687f7d8ae33fb362c5c0743794bbb2420a1d", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8", - "symfony/polyfill-ctype": "~1.8" - }, - "conflict": { - "symfony/console": "<3.4" + "php": ">=8.1" }, "require-dev": { - "symfony/console": "~3.4|~4.0" - }, - "suggest": { - "symfony/console": "For validating YAML files using the lint command" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-main": "3.0-dev" } }, "autoload": { - "psr-4": { - "Symfony\\Component\\Yaml\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, + "name": "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/", + "support": { + "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", + "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/3.0.0" + }, + "funding": [ { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "url": "https://github.com/sebastianbergmann", + "type": "github" } ], - "description": "Symfony Yaml Component", - "homepage": "https://symfony.com", - "time": "2018-07-26T11:19:56+00:00" + "time": "2023-02-03T06:59:15+00:00" }, { - "name": "webmozart/assert", - "version": "1.3.0", + "name": "sebastian/comparator", + "version": "5.0.0", "source": { "type": "git", - "url": "https://github.com/webmozart/assert.git", - "reference": "0df1908962e7a3071564e857d86874dad1ef204a" + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "72f01e6586e0caf6af81297897bd112eb7e9627c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozart/assert/zipball/0df1908962e7a3071564e857d86874dad1ef204a", - "reference": "0df1908962e7a3071564e857d86874dad1ef204a", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/72f01e6586e0caf6af81297897bd112eb7e9627c", + "reference": "72f01e6586e0caf6af81297897bd112eb7e9627c", "shasum": "" }, "require": { - "php": "^5.3.3 || ^7.0" + "ext-dom": "*", + "ext-mbstring": "*", + "php": ">=8.1", + "sebastian/diff": "^5.0", + "sebastian/exporter": "^5.0" }, "require-dev": { - "phpunit/phpunit": "^4.6", - "sebastian/version": "^1.0.1" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.3-dev" + "dev-main": "5.0-dev" } }, "autoload": { - "psr-4": { - "Webmozart\\Assert\\": "src/" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "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@gmail.com" + "email": "bschussek@2bepublished.at" } ], - "description": "Assertions to validate method input/output with nice error messages.", + "description": "Provides the functionality to compare PHP values for equality", + "homepage": "https://github.com/sebastianbergmann/comparator", "keywords": [ - "assert", - "check", - "validate" + "comparator", + "compare", + "equality" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/comparator/issues", + "source": "https://github.com/sebastianbergmann/comparator/tree/5.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T07:07:16+00:00" + }, + { + "name": "sebastian/complexity", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/complexity.git", + "reference": "e67d240970c9dc7ea7b2123a6d520e334dd61dc6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/e67d240970c9dc7ea7b2123a6d520e334dd61dc6", + "reference": "e67d240970c9dc7ea7b2123a6d520e334dd61dc6", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^4.10", + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "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 for calculating the complexity of PHP code units", + "homepage": "https://github.com/sebastianbergmann/complexity", + "support": { + "issues": "https://github.com/sebastianbergmann/complexity/issues", + "source": "https://github.com/sebastianbergmann/complexity/tree/3.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:59:47+00:00" + }, + { + "name": "sebastian/diff", + "version": "5.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "aae9a0a43bff37bd5d8d0311426c87bf36153f02" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/aae9a0a43bff37bd5d8d0311426c87bf36153f02", + "reference": "aae9a0a43bff37bd5d8d0311426c87bf36153f02", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0", + "symfony/process": "^4.2 || ^5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "5.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" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/diff/issues", + "security": "https://github.com/sebastianbergmann/diff/security/policy", + "source": "https://github.com/sebastianbergmann/diff/tree/5.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-03-23T05:12:41+00:00" + }, + { + "name": "sebastian/environment", + "version": "6.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "b6f3694c6386c7959915a0037652e0c40f6f69cc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/b6f3694c6386c7959915a0037652e0c40f6f69cc", + "reference": "b6f3694c6386c7959915a0037652e0c40f6f69cc", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "suggest": { + "ext-posix": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "6.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": "https://github.com/sebastianbergmann/environment", + "keywords": [ + "Xdebug", + "environment", + "hhvm" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/environment/issues", + "source": "https://github.com/sebastianbergmann/environment/tree/6.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T07:03:04+00:00" + }, + { + "name": "sebastian/exporter", + "version": "5.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "f3ec4bf931c0b31e5b413f5b4fc970a7d03338c0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/f3ec4bf931c0b31e5b413f5b4fc970a7d03338c0", + "reference": "f3ec4bf931c0b31e5b413f5b4fc970a7d03338c0", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": ">=8.1", + "sebastian/recursion-context": "^5.0" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "5.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": "https://www.github.com/sebastianbergmann/exporter", + "keywords": [ + "export", + "exporter" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/exporter/issues", + "source": "https://github.com/sebastianbergmann/exporter/tree/5.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T07:06:49+00:00" + }, + { + "name": "sebastian/global-state", + "version": "6.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "aab257c712de87b90194febd52e4d184551c2d44" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/aab257c712de87b90194febd52e4d184551c2d44", + "reference": "aab257c712de87b90194febd52e4d184551c2d44", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "sebastian/object-reflector": "^3.0", + "sebastian/recursion-context": "^5.0" + }, + "require-dev": { + "ext-dom": "*", + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "6.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" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/global-state/issues", + "source": "https://github.com/sebastianbergmann/global-state/tree/6.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T07:07:38+00:00" + }, + { + "name": "sebastian/lines-of-code", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/lines-of-code.git", + "reference": "17c4d940ecafb3d15d2cf916f4108f664e28b130" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/17c4d940ecafb3d15d2cf916f4108f664e28b130", + "reference": "17c4d940ecafb3d15d2cf916f4108f664e28b130", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^4.10", + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "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": "Library for counting the lines of code in PHP source code", + "homepage": "https://github.com/sebastianbergmann/lines-of-code", + "support": { + "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/2.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T07:08:02+00:00" + }, + { + "name": "sebastian/object-enumerator", + "version": "5.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-enumerator.git", + "reference": "202d0e344a580d7f7d04b3fafce6933e59dae906" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/202d0e344a580d7f7d04b3fafce6933e59dae906", + "reference": "202d0e344a580d7f7d04b3fafce6933e59dae906", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "sebastian/object-reflector": "^3.0", + "sebastian/recursion-context": "^5.0" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "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": "Traverses array structures and object graphs to enumerate all referenced objects", + "homepage": "https://github.com/sebastianbergmann/object-enumerator/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", + "source": "https://github.com/sebastianbergmann/object-enumerator/tree/5.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T07:08:32+00:00" + }, + { + "name": "sebastian/object-reflector", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-reflector.git", + "reference": "24ed13d98130f0e7122df55d06c5c4942a577957" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/24ed13d98130f0e7122df55d06c5c4942a577957", + "reference": "24ed13d98130f0e7122df55d06c5c4942a577957", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "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": "Allows reflection of object attributes, including inherited and non-public ones", + "homepage": "https://github.com/sebastianbergmann/object-reflector/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-reflector/issues", + "source": "https://github.com/sebastianbergmann/object-reflector/tree/3.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T07:06:18+00:00" + }, + { + "name": "sebastian/recursion-context", + "version": "5.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "05909fb5bc7df4c52992396d0116aed689f93712" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/05909fb5bc7df4c52992396d0116aed689f93712", + "reference": "05909fb5bc7df4c52992396d0116aed689f93712", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "5.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": "https://github.com/sebastianbergmann/recursion-context", + "support": { + "issues": "https://github.com/sebastianbergmann/recursion-context/issues", + "source": "https://github.com/sebastianbergmann/recursion-context/tree/5.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T07:05:40+00:00" + }, + { + "name": "sebastian/type", + "version": "4.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/type.git", + "reference": "462699a16464c3944eefc02ebdd77882bd3925bf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/462699a16464c3944eefc02ebdd77882bd3925bf", + "reference": "462699a16464c3944eefc02ebdd77882bd3925bf", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "4.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 types of the PHP type system", + "homepage": "https://github.com/sebastianbergmann/type", + "support": { + "issues": "https://github.com/sebastianbergmann/type/issues", + "source": "https://github.com/sebastianbergmann/type/tree/4.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T07:10:45+00:00" + }, + { + "name": "sebastian/version", + "version": "4.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "c51fa83a5d8f43f1402e3f32a005e6262244ef17" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c51fa83a5d8f43f1402e3f32a005e6262244ef17", + "reference": "c51fa83a5d8f43f1402e3f32a005e6262244ef17", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "4.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", + "support": { + "issues": "https://github.com/sebastianbergmann/version/issues", + "source": "https://github.com/sebastianbergmann/version/tree/4.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-07T11:34:05+00:00" + }, + { + "name": "symfony/console", + "version": "v6.2.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "3582d68a64a86ec25240aaa521ec8bc2342b369b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/3582d68a64a86ec25240aaa521ec8bc2342b369b", + "reference": "3582d68a64a86ec25240aaa521ec8bc2342b369b", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/service-contracts": "^1.1|^2|^3", + "symfony/string": "^5.4|^6.0" + }, + "conflict": { + "symfony/dependency-injection": "<5.4", + "symfony/dotenv": "<5.4", + "symfony/event-dispatcher": "<5.4", + "symfony/lock": "<5.4", + "symfony/process": "<5.4" + }, + "provide": { + "psr/log-implementation": "1.0|2.0|3.0" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/event-dispatcher": "^5.4|^6.0", + "symfony/lock": "^5.4|^6.0", + "symfony/process": "^5.4|^6.0", + "symfony/var-dumper": "^5.4|^6.0" + }, + "suggest": { + "psr/log": "For using the console logger", + "symfony/event-dispatcher": "", + "symfony/lock": "", + "symfony/process": "" + }, + "type": "library", + "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": "Eases the creation of beautiful and testable command line interfaces", + "homepage": "https://symfony.com", + "keywords": [ + "cli", + "command-line", + "console", + "terminal" + ], + "support": { + "source": "https://github.com/symfony/console/tree/v6.2.8" + }, + "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": "2023-03-29T21:42:15+00:00" + }, + { + "name": "symfony/deprecation-contracts", + "version": "v3.2.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "e2d1534420bd723d0ef5aec58a22c5fe60ce6f5e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/e2d1534420bd723d0ef5aec58a22c5fe60ce6f5e", + "reference": "e2d1534420bd723d0ef5aec58a22c5fe60ce6f5e", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.3-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "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", + "support": { + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.2.1" + }, + "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": "2023-03-01T10:25:55+00:00" + }, + { + "name": "symfony/event-dispatcher", + "version": "v6.2.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "04046f35fd7d72f9646e721fc2ecb8f9c67d3339" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/04046f35fd7d72f9646e721fc2ecb8f9c67d3339", + "reference": "04046f35fd7d72f9646e721fc2ecb8f9c67d3339", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/event-dispatcher-contracts": "^2|^3" + }, + "conflict": { + "symfony/dependency-injection": "<5.4" + }, + "provide": { + "psr/event-dispatcher-implementation": "1.0", + "symfony/event-dispatcher-implementation": "2.0|3.0" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/error-handler": "^5.4|^6.0", + "symfony/expression-language": "^5.4|^6.0", + "symfony/http-foundation": "^5.4|^6.0", + "symfony/service-contracts": "^1.1|^2|^3", + "symfony/stopwatch": "^5.4|^6.0" + }, + "suggest": { + "symfony/dependency-injection": "", + "symfony/http-kernel": "" + }, + "type": "library", + "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": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/event-dispatcher/tree/v6.2.8" + }, + "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": "2023-03-20T16:06:02+00:00" + }, + { + "name": "symfony/event-dispatcher-contracts", + "version": "v3.2.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher-contracts.git", + "reference": "0ad3b6f1e4e2da5690fefe075cd53a238646d8dd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/0ad3b6f1e4e2da5690fefe075cd53a238646d8dd", + "reference": "0ad3b6f1e4e2da5690fefe075cd53a238646d8dd", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/event-dispatcher": "^1" + }, + "suggest": { + "symfony/event-dispatcher-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.3-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "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" + ], + "support": { + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.2.1" + }, + "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": "2023-03-01T10:32:47+00:00" + }, + { + "name": "symfony/filesystem", + "version": "v6.2.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/filesystem.git", + "reference": "82b6c62b959f642d000456f08c6d219d749215b3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/82b6c62b959f642d000456f08c6d219d749215b3", + "reference": "82b6c62b959f642d000456f08c6d219d749215b3", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-mbstring": "~1.8" + }, + "type": "library", + "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": "Provides basic utilities for the filesystem", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/filesystem/tree/v6.2.7" + }, + "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": "2023-02-14T08:44:56+00:00" + }, + { + "name": "symfony/finder", + "version": "v6.2.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "20808dc6631aecafbe67c186af5dcb370be3a0eb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/20808dc6631aecafbe67c186af5dcb370be3a0eb", + "reference": "20808dc6631aecafbe67c186af5dcb370be3a0eb", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "symfony/filesystem": "^6.0" + }, + "type": "library", + "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": "Finds files and directories via an intuitive fluent interface", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/finder/tree/v6.2.7" + }, + "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": "2023-02-16T09:57:23+00:00" + }, + { + "name": "symfony/options-resolver", + "version": "v6.2.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/options-resolver.git", + "reference": "aa0e85b53bbb2b4951960efd61d295907eacd629" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/aa0e85b53bbb2b4951960efd61d295907eacd629", + "reference": "aa0e85b53bbb2b4951960efd61d295907eacd629", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.1|^3" + }, + "type": "library", + "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": "Provides an improved replacement for the array_replace PHP function", + "homepage": "https://symfony.com", + "keywords": [ + "config", + "configuration", + "options" + ], + "support": { + "source": "https://github.com/symfony/options-resolver/tree/v6.2.7" + }, + "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": "2023-02-14T08:44:56+00:00" + }, + { + "name": "symfony/polyfill-ctype", + "version": "v1.27.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "5bbc823adecdae860bb64756d639ecfec17b050a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/5bbc823adecdae860bb64756d639ecfec17b050a", + "reference": "5bbc823adecdae860bb64756d639ecfec17b050a", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "provide": { + "ext-ctype": "*" + }, + "suggest": { + "ext-ctype": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.27-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + } + }, + "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" + ], + "support": { + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.27.0" + }, + "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": "2022-11-03T14:55:06+00:00" + }, + { + "name": "symfony/polyfill-intl-grapheme", + "version": "v1.27.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-grapheme.git", + "reference": "511a08c03c1960e08a883f4cffcacd219b758354" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/511a08c03c1960e08a883f4cffcacd219b758354", + "reference": "511a08c03c1960e08a883f4cffcacd219b758354", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.27-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Grapheme\\": "" + } + }, + "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" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.27.0" + }, + "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": "2022-11-03T14:55:06+00:00" + }, + { + "name": "symfony/polyfill-intl-normalizer", + "version": "v1.27.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-normalizer.git", + "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/19bd1e4fcd5b91116f14d8533c57831ed00571b6", + "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.27-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Normalizer\\": "" + }, + "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" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.27.0" + }, + "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": "2022-11-03T14:55:06+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.27.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/8ad114f6b39e2c98a8b0e3bd907732c207c2b534", + "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "provide": { + "ext-mbstring": "*" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.27-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + } + }, + "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" + ], + "support": { + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.27.0" + }, + "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": "2022-11-03T14:55:06+00:00" + }, + { + "name": "symfony/polyfill-php80", + "version": "v1.27.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", + "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.27-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php80\\": "" + }, + "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" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php80/tree/v1.27.0" + }, + "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": "2022-11-03T14:55:06+00:00" + }, + { + "name": "symfony/polyfill-php81", + "version": "v1.27.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php81.git", + "reference": "707403074c8ea6e2edaf8794b0157a0bfa52157a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/707403074c8ea6e2edaf8794b0157a0bfa52157a", + "reference": "707403074c8ea6e2edaf8794b0157a0bfa52157a", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.27-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php81\\": "" + }, + "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 8.1+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php81/tree/v1.27.0" + }, + "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": "2022-11-03T14:55:06+00:00" + }, + { + "name": "symfony/process", + "version": "v6.2.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/process.git", + "reference": "75ed64103df4f6615e15a7fe38b8111099f47416" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/process/zipball/75ed64103df4f6615e15a7fe38b8111099f47416", + "reference": "75ed64103df4f6615e15a7fe38b8111099f47416", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "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": "Executes commands in sub-processes", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/process/tree/v6.2.8" + }, + "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": "2023-03-09T16:20:02+00:00" + }, + { + "name": "symfony/service-contracts", + "version": "v3.2.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/service-contracts.git", + "reference": "a8c9cedf55f314f3a186041d19537303766df09a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/a8c9cedf55f314f3a186041d19537303766df09a", + "reference": "a8c9cedf55f314f3a186041d19537303766df09a", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/container": "^2.0" + }, + "conflict": { + "ext-psr": "<1.1|>=2" + }, + "suggest": { + "symfony/service-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.3-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Service\\": "" + }, + "exclude-from-classmap": [ + "/Test/" + ] + }, + "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" + ], + "support": { + "source": "https://github.com/symfony/service-contracts/tree/v3.2.1" + }, + "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": "2023-03-01T10:32:47+00:00" + }, + { + "name": "symfony/stopwatch", + "version": "v6.2.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/stopwatch.git", + "reference": "f3adc98c1061875dd2edcd45e5b04e63d0e29f8f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/f3adc98c1061875dd2edcd45e5b04e63d0e29f8f", + "reference": "f3adc98c1061875dd2edcd45e5b04e63d0e29f8f", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/service-contracts": "^1|^2|^3" + }, + "type": "library", + "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": "Provides a way to profile code", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/stopwatch/tree/v6.2.7" + }, + "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": "2023-02-14T08:44:56+00:00" + }, + { + "name": "symfony/string", + "version": "v6.2.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/string.git", + "reference": "193e83bbd6617d6b2151c37fff10fa7168ebddef" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/string/zipball/193e83bbd6617d6b2151c37fff10fa7168ebddef", + "reference": "193e83bbd6617d6b2151c37fff10fa7168ebddef", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-intl-grapheme": "~1.0", + "symfony/polyfill-intl-normalizer": "~1.0", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "symfony/translation-contracts": "<2.0" + }, + "require-dev": { + "symfony/error-handler": "^5.4|^6.0", + "symfony/http-client": "^5.4|^6.0", + "symfony/intl": "^6.2", + "symfony/translation-contracts": "^2.0|^3.0", + "symfony/var-exporter": "^5.4|^6.0" + }, + "type": "library", + "autoload": { + "files": [ + "Resources/functions.php" + ], + "psr-4": { + "Symfony\\Component\\String\\": "" + }, + "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": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", + "homepage": "https://symfony.com", + "keywords": [ + "grapheme", + "i18n", + "string", + "unicode", + "utf-8", + "utf8" + ], + "support": { + "source": "https://github.com/symfony/string/tree/v6.2.8" + }, + "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": "2023-03-20T16:06:02+00:00" + }, + { + "name": "theseer/tokenizer", + "version": "1.2.1", + "source": { + "type": "git", + "url": "https://github.com/theseer/tokenizer.git", + "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/34a41e998c2183e22995f158c581e7b5e755ab9e", + "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": "^7.2 || ^8.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", + "support": { + "issues": "https://github.com/theseer/tokenizer/issues", + "source": "https://github.com/theseer/tokenizer/tree/1.2.1" + }, + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } ], - "time": "2018-01-29T19:49:41+00:00" + "time": "2021-07-28T10:34:58+00:00" } ], "aliases": [], @@ -1558,7 +3830,8 @@ "prefer-stable": false, "prefer-lowest": false, "platform": { - "php": ">=7.0" + "php": ">=8.1" }, - "platform-dev": [] + "platform-dev": [], + "plugin-api-version": "2.3.0" } diff --git a/phpstan.neon b/phpstan.neon new file mode 100644 index 0000000..a370bb5 --- /dev/null +++ b/phpstan.neon @@ -0,0 +1,8 @@ +parameters: + level: max + paths: + - src + ignoreErrors: + - '#Method .* return type has no value type specified in iterable type array.*#' + - '#Property .* type has no value type specified in iterable type array.*#' + - '#Method .* has parameter .* with no value type specified in iterable type array.*#' diff --git a/phpunit.xml.dist b/phpunit.xml.dist index 47fa317..fc580cf 100644 --- a/phpunit.xml.dist +++ b/phpunit.xml.dist @@ -1,19 +1,17 @@ - - - - - ./tests - - - - - - ./ - - ./tests - ./vendor - - - - \ No newline at end of file + + + + ./ + + + ./tests + ./vendor + + + + + ./tests + + + diff --git a/src/Codec/BaseCodec.php b/src/Codec/BaseCodec.php index f27ccb0..1e39fc3 100644 --- a/src/Codec/BaseCodec.php +++ b/src/Codec/BaseCodec.php @@ -1,22 +1,24 @@ -reader = $reader; } + /** + * @throws NumberOfDataMismatchException + */ public function decodeAvlDataCollection(): AvlDataCollection { $avlDataCollection = new AvlDataCollection( @@ -25,22 +27,25 @@ public function decodeAvlDataCollection(): AvlDataCollection ); $avlData = []; - for($i = 0; $i < $avlDataCollection->getNumberOfData(); $i++) { + for ($i = 0; $i < $avlDataCollection->getNumberOfData(); $i++) { $avlData[] = $this->decodeAvlData(); } $avlDataCollection->setAvlData($avlData); $this->checkNumberOfData($avlDataCollection->getNumberOfData()); - + return $avlDataCollection; } - private function checkNumberOfData($expected) + /** + * @throws NumberOfDataMismatchException + */ + private function checkNumberOfData(int $expected): void { $lastNumberOfData = $this->reader->readUInt8(); - if($expected != $lastNumberOfData) { + if ($expected !== $lastNumberOfData) { throw new NumberOfDataMismatchException( - $expected, + $expected, $lastNumberOfData ); } @@ -49,8 +54,8 @@ private function checkNumberOfData($expected) public function decodeAvlData(): AvlData { return new AvlData( - $this->reader->readUInt64(), // Timestamp - $this->reader->readUInt8(), // Priority + (int)$this->reader->readUInt64(), // Timestamp + (int)$this->reader->readUInt8(), // Priority $this->decodeGpsElement(), // GPS Element $this->decodeIoElement() // IO Element ); @@ -61,15 +66,17 @@ public function decodeGpsElement(): GpsElement return new GpsElement( $this->decodeCoordinate(), // Longitude $this->decodeCoordinate(), // Latitude - $this->reader->readUInt16(), // Altitude - $this->reader->readUInt16(), // Angle - $this->reader->readUInt8(), // Satellites - $this->reader->readUInt16() // Speed + (int)$this->reader->readUInt16(), // Altitude + (int)$this->reader->readUInt16(), // Angle + (int)$this->reader->readUInt8(), // Satellites + (int)$this->reader->readUInt16() // Speed ); } protected function decodeCoordinate(): float { - return unpack('l', pack('l', $this->reader->readUInt32()))[1] / 10000000; + $raw = (array)unpack('l', pack('l', $this->reader->readUInt32())); + + return $raw[1] / 10000000; } -} \ No newline at end of file +} diff --git a/src/Codec/Codec.php b/src/Codec/Codec.php index 4fee699..e1b0f31 100644 --- a/src/Codec/Codec.php +++ b/src/Codec/Codec.php @@ -1,10 +1,15 @@ -addProperties($this->decodeIoProperties()); } - private function decodeIoProperties() + /** + * @return IoProperty[] + */ + private function decodeIoProperties(): array { $properties = []; - for($bytes = 1; $bytes <= 8; $bytes *= 2) { + for ($bytes = 1; $bytes <= 8; $bytes *= 2) { $numberOfProperties = $this->reader->readUInt8(); - for($i = 1; $i <= $numberOfProperties; $i++) { + for ($i = 1; $i <= $numberOfProperties; $i++) { $properties[] = new IoProperty( $this->reader->readUInt8(), - new IoValue($this->reader->readBytes($bytes)) + new IoValue((string)$this->reader->readBytes($bytes)) ); } } return $properties; } -} \ No newline at end of file +} diff --git a/src/Codec/Codec8Extended.php b/src/Codec/Codec8Extended.php index dfc4fdc..431a293 100644 --- a/src/Codec/Codec8Extended.php +++ b/src/Codec/Codec8Extended.php @@ -1,30 +1,32 @@ -reader->readUInt16(), // Event ID - $this->reader->readUInt16() // Number of elements + (int)$this->reader->readUInt16(), // Event ID + (int)$this->reader->readUInt16() // Number of elements ))->addProperties($this->decodeIoProperties()); } private function decodeIoProperties(): array { $properties = []; - for($bytes = 1; $bytes <= 8; $bytes *= 2) { + for ($bytes = 1; $bytes <= 8; $bytes *= 2) { $numberOfProperties = $this->reader->readUInt16(); - for($i = 0; $i < $numberOfProperties; $i++) { + for ($i = 0; $i < $numberOfProperties; $i++) { $properties[] = new IoProperty( - $this->reader->readUInt16(), - new IoValue($this->reader->readBytes($bytes)) + (int)$this->reader->readUInt16(), + new IoValue((string)$this->reader->readBytes($bytes)) ); } } @@ -32,18 +34,25 @@ private function decodeIoProperties(): array return array_merge($properties, $this->decodeVariableLengthProperties()); } - private function decodeVariableLengthProperties() + /** + * @return IoProperty[] + */ + private function decodeVariableLengthProperties(): array { $properties = []; $numberOfProperties = $this->reader->readUInt16(); - for($i = 0; $i < $numberOfProperties; $i++) { - $properties[] = new IoProperty( - $this->reader->readUInt16(), - new IoValue($this->reader->readBytes($this->reader->readUInt16())) - ); + for ($i = 0; $i < $numberOfProperties; $i++) { + $id = (int)$this->reader->readUInt16(); + $length = (int)$this->reader->readUInt16(); + if ($length === 0) { + $value = new IoValue(''); + } else { + $value = new IoValue((string)$this->reader->readBytes($length)); + } + $properties[] = new IoProperty($id, $value); } return $properties; } -} \ No newline at end of file +} diff --git a/src/Decoder.php b/src/Decoder.php deleted file mode 100644 index 420a60d..0000000 --- a/src/Decoder.php +++ /dev/null @@ -1,12 +0,0 @@ -decoder = new $decoder; - - $encoder = $namespace . 'Encoder'; - $this->encoder = new $encoder; + /** @var DecoderInterface $decoder */ + $decoder = new ($namespace . 'Decoder'); + $this->decoder = $decoder; + + /** @var EncoderInterface $encoder */ + $encoder = new ($namespace . 'Encoder'); + $this->encoder = new $encoder(); } - public function decodeImei($data) + public function decodeImei(string $data): Imei { return $this->decoder->decodeImei($data); } - public function decodeData($data) + public function decodeData(string $data): Packet { return $this->decoder->decodeData($data); } - public function encodeAcknowledge(Acknowledgeable $acknowledgeable) + public function encodeAcknowledge(Acknowledgeable $acknowledgeable): string { return $this->encoder->encodeAcknowledge($acknowledgeable); } -} \ No newline at end of file +} diff --git a/src/Io/Reader.php b/src/Io/Reader.php index 06f6a16..c7a4c65 100644 --- a/src/Io/Reader.php +++ b/src/Io/Reader.php @@ -1,4 +1,6 @@ -timestamp = $timestamp; - $this->priotiry = $priority; - $this->gpsElement = $gpsElement; - $this->ioElement = $ioElement; + public function __construct( + private readonly int $timestamp, + private readonly int $priority, + private readonly GpsElement $gpsElement, + private readonly IoElement $ioElement + ) { } - /** - * Get timestamp - * - * @return int - */ public function getTimestamp(): int { return $this->timestamp; } - /** - * Get priority - * - * @return int - */ public function getPriority(): int { - return $this->priotiry; + return $this->priority; } - /** - * Get GPS Element - * - * @return GpsElement - */ - public function getGpsElement() + public function getGpsElement(): GpsElement { return $this->gpsElement; } - /** - * Get IO Element - * - * @return IoElement - */ - public function getIoElement() + public function getIoElement(): IoElement { return $this->ioElement; } -} \ No newline at end of file +} diff --git a/src/Model/AvlDataCollection.php b/src/Model/AvlDataCollection.php index aafadb8..5bde609 100644 --- a/src/Model/AvlDataCollection.php +++ b/src/Model/AvlDataCollection.php @@ -1,77 +1,36 @@ -codecId = $codecId; - $this->numberOfData = $numberOfData; } - /** - * Get Codec ID - * - * @return int - */ public function getCodecId(): int { return $this->codecId; } - /** - * Get number of data - * - * @return int - */ public function getNumberOfData(): int { return $this->numberOfData; } - /** - * Get AVL data - * - * @return array - */ public function getAvlData(): array { return $this->avlData; } - /** - * Set AVL data - * - * @param array $avlData - * @return AvlDataCollection - */ public function setAvlData(array $avlData): AvlDataCollection { $this->avlData = $avlData; return $this; } - -} \ No newline at end of file +} diff --git a/src/Model/GpsElement.php b/src/Model/GpsElement.php index 559853e..c266023 100644 --- a/src/Model/GpsElement.php +++ b/src/Model/GpsElement.php @@ -1,125 +1,48 @@ -longitude = $longitude; - $this->latitude = $latitude; - $this->altitude = $altitude; - $this->angle = $angle; - $this->satellites = $satellites; - $this->speed = $speed; + private readonly float $longitude, + private readonly float $latitude, + private readonly int $altitude, + private readonly int $angle, + private readonly int $satellites, + private readonly int $speed + ) { } - /** - * Get Longitude - * - * @return float - */ public function getLongitude(): float { return $this->longitude; } - /** - * Get Latitude - * - * @return float - */ public function getLatitude(): float { return $this->latitude; } - /** - * Get Altitude - * - * @return int - */ - public function getAltitude(): int + public function getAltitude(): int { return $this->altitude; } - /** - * Get angle - * - * @return int - */ - public function getAngle(): int + public function getAngle(): int { return $this->angle; } - /** - * Get Number of satellites - * - * @return integer - */ - public function getSatellites(): int + public function getSatellites(): int { return $this->satellites; } - /** - * Get Speed - * - * @return int - */ - public function getSpeed(): int + public function getSpeed(): int { return $this->speed; } -} \ No newline at end of file +} diff --git a/src/Model/Imei.php b/src/Model/Imei.php index 439c317..fe5be95 100644 --- a/src/Model/Imei.php +++ b/src/Model/Imei.php @@ -1,35 +1,25 @@ imei = $imei; - - if (!$this->isLuhn($imei) || strlen($imei) !== self::IMEI_LENGTH) { + if (!$this->isLuhn() || strlen($this->imei) !== self::IMEI_LENGTH) { throw new InvalidArgumentException("IMEI number is not valid."); } } - /** - * @return string - */ public function getImei(): string { return $this->imei; @@ -40,16 +30,11 @@ public function __toString(): string return $this->getImei(); } - /** - * @param string $imei - * - * @return bool - */ public function isLuhn(): bool { $str = ''; foreach (str_split(strrev($this->imei)) as $i => $d) { - $str .= $i % 2 !== 0 ? $d * 2 : $d; + $str .= $i % 2 !== 0 ? (int) $d * 2 : $d; } return array_sum(str_split($str)) % 10 === 0; diff --git a/src/Model/IoElement.php b/src/Model/IoElement.php index 6c8b0ac..a96dbc2 100644 --- a/src/Model/IoElement.php +++ b/src/Model/IoElement.php @@ -1,90 +1,56 @@ -eventId = $eventId; - $this->numberOfElements = $numberOfElements; } - /** - * Get event ID - * - * @return int - */ public function getEventId(): int { return $this->eventId; } - /** - * Get number of elements - * - * @return int - */ public function getNumberOfElements(): int { return $this->numberOfElements; } - /** - * Get properties - * - * @return array - */ - public function getProperties(): array + public function getProperties(): array { return $this->properties; } - /** - * Get IO property by ID - * - * @param integer $id - * @param mixed $default - * @return IoProperty - */ - public function getPropertyById($id, $default = null) + public function getPropertyById(int $id): ?IoProperty { - return $this->properties[$id] ?? $default; + return $this->properties[$id]; } /** - * Add properties to element - * - * @param array $properties - * @return void + * @param IoProperty[] $properties */ public function addProperties(array $properties): IoElement { - foreach($properties as $property) { - $this->properties[$property->getId()] = $property; + foreach ($properties as $property) { + $this->addProperty($property); } return $this; } -} \ No newline at end of file + + public function addProperty(IoProperty $property): IoElement + { + $this->properties[$property->getId()] = $property; + + return $this; + } +} diff --git a/src/Model/IoProperty.php b/src/Model/IoProperty.php index ac67bc1..3658645 100644 --- a/src/Model/IoProperty.php +++ b/src/Model/IoProperty.php @@ -1,54 +1,22 @@ -id = $id; - $this->value = $value; } - /** - * Get property ID - * - * @return integer - */ - public function getId() + public function getId(): int { return $this->id; } - /** - * Get property value - * - * @return IoValue - */ - public function getValue() + public function getValue(): IoValue { return $this->value; } -} \ No newline at end of file +} diff --git a/src/Model/IoValue.php b/src/Model/IoValue.php index be5b8d0..24052eb 100644 --- a/src/Model/IoValue.php +++ b/src/Model/IoValue.php @@ -1,4 +1,6 @@ -binary = $binary; } - public function toHex() + public function toHex(): string { return bin2hex($this->binary); } - public function toUnsigned() + /** + * @throws IoValueLengthException + */ + public function toUnsigned(): int { - switch(strlen($this->binary)) { - case 1: - $format = 'C'; - break; - case 2: - $format = 'S'; - break; - case 4: - $format = 'L'; - break; - - default: - throw new IoValueLengthException(strlen($this->binary)); - } + $format = match (strlen($this->binary)) { + 1 => 'C', + 2 => 'S', + 4 => 'L', + default => throw new IoValueLengthException(strlen($this->binary)), + }; - return $this->format($format); + return (int)$this->format($format); } - public function toSigned() + /** + * @throws IoValueLengthException + */ + public function toSigned(): int { - switch(strlen($this->binary)) { - case 1: - $format = 'c'; - break; - case 2: - $format = 's'; - break; - case 4: - $format = 'l'; - break; - - default: - throw new IoValueLengthException(strlen($this->binary)); - } + $format = match (strlen($this->binary)) { + 1 => 'c', + 2 => 's', + 4 => 'l', + default => throw new IoValueLengthException(strlen($this->binary)), + }; return $this->format($format); } - private function format(string $format) + private function format(string $format): int { - return unpack($format, pack($format, hexdec($this->toHex())))[1]; + $raw = (array)unpack($format, pack($format, hexdec($this->toHex()))); + + return $raw[1]; } - public function jsonSerialize() + public function jsonSerialize(): array { return [ - 'value' => $this->toHex() + 'value' => $this->toHex(), ]; } - public function __toString() + public function __toString(): string { return $this->toHex(); } -} \ No newline at end of file +} diff --git a/src/Model/Model.php b/src/Model/Model.php index 1628480..2552598 100644 --- a/src/Model/Model.php +++ b/src/Model/Model.php @@ -1,11 +1,15 @@ Codec8::class, 0x8E => Codec8Extended::class, ]; - public function decodeImei($data) + /** + * @throws InvalidArgumentException + */ + public function decodeImei(string $payload): Imei { - $this->reader = new Reader($data); - - $numberOfBytes = $this->reader->readUInt16(); + $this->reader = new Reader($payload); + $numberOfBytes = (int)$this->reader->readUInt16(); - return new Imei($this->reader->readBytes($numberOfBytes)); + return new Imei((string)$this->reader->readBytes($numberOfBytes)); } - public function decodeData($data) + /** + * @throws UnsupportedCodecException|NumberOfDataMismatchException|CrcMismatchException + */ + public function decodeData(string $payload): Packet { - $this->reader = new Reader($data); + $this->reader = new Reader($payload); $packet = new Packet( $this->reader->readUInt32(), // Preamble @@ -38,39 +52,51 @@ public function decodeData($data) $this->reader->readUInt32() // CRC ); - if(! $packet->checkCrc($this->crcInput())) { - throw new CrcMismatchException; + if (!$packet->checkCrc($this->crcInput())) { + throw new CrcMismatchException(); } return $packet; } - private function crcInput() + /** + * @throws CrcMismatchException + */ + private function crcInput(): string { $this->reader->setPosition(0); $packetString = bin2hex($this->reader->getInputString()); $crcInput = substr( - $packetString, + $packetString, 16, - strlen($packetString) - 24 + strlen($packetString) - 24 ); - return hex2bin($crcInput); + $result = hex2bin($crcInput); + if ($result === false) { + throw new CrcMismatchException(); + } + + return $result; } - private function codec() + /** + * @throws UnsupportedCodecException + */ + private function codec(): BaseCodec { $position = $this->reader->getPosition(); $codecId = $this->reader->readUInt8(); - if(! array_key_exists($codecId, $this->codecs)) { - throw new UnsupportedCodecException($codecId); + if (!array_key_exists($codecId, $this->codecs)) { + throw new UnsupportedCodecException((int) $codecId); } + /** @var BaseCodec $codec */ $codec = new $this->codecs[$codecId]($this->reader); $this->reader->setPosition($position); return $codec; } -} \ No newline at end of file +} diff --git a/src/Protocol/Tcp/Encoder.php b/src/Protocol/Tcp/Encoder.php index 1664035..773bf24 100644 --- a/src/Protocol/Tcp/Encoder.php +++ b/src/Protocol/Tcp/Encoder.php @@ -1,14 +1,16 @@ -getNumberOfAcceptedData()); + return pack('N', $acknowledgeable->getNumberOfAcceptedData()); } -} \ No newline at end of file +} diff --git a/src/Protocol/Tcp/Packet.php b/src/Protocol/Tcp/Packet.php index cb3c278..8727cd3 100644 --- a/src/Protocol/Tcp/Packet.php +++ b/src/Protocol/Tcp/Packet.php @@ -1,91 +1,50 @@ -preamble = $preamble; - $this->avlDataArrayLength = $avlDataArrayLength; - $this->avlDataCollection = $avlDataCollection; - $this->crc = $crc; + public function __construct( + private readonly int $preamble, + private readonly int $avlDataArrayLength, + private readonly AvlDataCollection $avlDataCollection, + private readonly int $crc + ) { } - /** - * Get preamble - * - * @return int - */ public function getPreamble(): int { return $this->preamble; } - /** - * Get AVL data array length - * - * @return int - */ - public function getAvlDataArrayLength(): int + public function getAvlDataArrayLength(): int { return $this->avlDataArrayLength; } - /** - * Get AVL data collection - * - * @return AvlDataCollection - */ - public function getAvlDataCollection(): AvlDataCollection + public function getAvlDataCollection(): AvlDataCollection { return $this->avlDataCollection; } - /** - * Get number of accepted data - * - * @return int - */ public function getNumberOfAcceptedData(): int { return $this->avlDataCollection->getNumberOfData(); } - /** - * Get CRC - * - * @return int - */ public function getCrc(): int { return $this->crc; } - /** - * Check if packet CRC equals calculated CRC - * - * @return boolean - */ public function checkCrc(string $input): bool { - return $this->crc == (new Crc16)->calc($input); + return $this->crc == (new Crc16())->calculate($input); } -} \ No newline at end of file +} diff --git a/src/Protocol/Tcp/Reply.php b/src/Protocol/Tcp/Reply.php index 3c9a2f1..2d08fe1 100644 --- a/src/Protocol/Tcp/Reply.php +++ b/src/Protocol/Tcp/Reply.php @@ -1,26 +1,18 @@ -getEofPosition(); - + $polynom = 0xA001; $crc = 0; - for ($i = 0; $i < $length; $i++) - { - $crc ^= $reader->readUInt8(1); - for($j = 0; $j < 8; $j++) - { + for ($i = 0; $i < $length; $i++) { + $crc ^= $reader->readUInt8(); + for ($j = 0; $j < 8; $j++) { $crc = ($crc & 0x0001) != 0 ? ($crc >> 1) ^ $polynom : $crc >> 1; } } return $crc; } -} \ No newline at end of file +} diff --git a/src/Support/Testing/Test15BytesGpsElement.php b/src/Support/Testing/Test15BytesGpsElement.php index d3ecb27..8cdb4e5 100644 --- a/src/Support/Testing/Test15BytesGpsElement.php +++ b/src/Support/Testing/Test15BytesGpsElement.php @@ -1,15 +1,19 @@ -validGpsElement()); $codec = $this->codecClass(); @@ -19,7 +23,7 @@ public function can_decode_gps_element() $this->assertGpsElement($gpsElement); } - protected function assertGpsElement($gpsElement) + protected function assertGpsElement($gpsElement): void { $this->assertNotNull($gpsElement); $this->assertEquals(25.3032016, $gpsElement->getLongitude()); @@ -30,9 +34,9 @@ protected function assertGpsElement($gpsElement) $this->assertEquals(6, $gpsElement->getSpeed()); } - protected function validGpsElement() + protected function validGpsElement(): string { - return + return '0f14f650'. // Longitude 253032016 = 25,3032016o N '209cca80'. // Latitude 547146368 = 54,7146368 o E '006f'. // Altitude 111 meters @@ -40,4 +44,4 @@ protected function validGpsElement() '04'. // 4 Visible sattelites '0006'; // 6 km/h speed } -} \ No newline at end of file +} diff --git a/src/Support/Testing/TestAvlData.php b/src/Support/Testing/TestAvlData.php index 5ab3e1b..32df749 100644 --- a/src/Support/Testing/TestAvlData.php +++ b/src/Support/Testing/TestAvlData.php @@ -1,35 +1,40 @@ -expectException(NumberOfDataMismatchException::class); $reader = new Reader( '08'. // Codec ID '00'. // Number of data '01' // Different number of data - ); - $codec = $this->codecClass(); - + ); + $codec = $this->codecClass(); + (new $codec($reader))->decodeAvlDataCollection(); } - /** @test */ - public function can_decode_avl_data_collection() + /** + * @test + */ + public function can_decode_avl_data_collection(): void { $reader = new Reader($this->validAvlCollectionData()); $codec = $this->codecClass(); @@ -44,8 +49,10 @@ public function can_decode_avl_data_collection() $this->assertTrue($reader->isEof(), 'The codec did not read all avl collection bytes'); } - /** @test */ - public function can_decode_avl_data() + /** + * @test + */ + public function can_decode_avl_data(): void { $reader = new Reader($this->validAvlData()); $codec = $this->codecClass(); @@ -55,30 +62,30 @@ public function can_decode_avl_data() $this->assertAvlData($avlData); } - private function assertAvlData($avlData) + private function assertAvlData($avlData): void { $this->assertNotNull($avlData); - $this->assertEquals(1185345998335 , $avlData->getTimestamp()); - $this->assertEquals(0 , $avlData->getPriority()); + $this->assertEquals(1185345998335, $avlData->getTimestamp()); + $this->assertEquals(0, $avlData->getPriority()); $this->assertGpsElement($avlData->getGpsElement()); $this->assertIoElement($avlData->getIoElement()); } - private function validAvlCollectionData() + private function validAvlCollectionData(): string { - return + return '08'. // Codec ID '01'. // Number of data $this->validAvlData(). // AVL Data '01'; // Number of data } - private function validAvlData() + private function validAvlData(): string { - return + return '00000113fc208dff'. // Timestamp in milliseconds 1185345998335 (25 Jul 2007 06:46:38 UTC) '00'. // Priority $this->validGpsElement(). // Gps Element $this->validIoElement(); // IO Element } -} \ No newline at end of file +} diff --git a/tests/Functional/TcpDecodeTest.php b/tests/Functional/TcpDecodeTest.php index 5a9a3aa..c6ed680 100644 --- a/tests/Functional/TcpDecodeTest.php +++ b/tests/Functional/TcpDecodeTest.php @@ -1,11 +1,12 @@ -assertEquals(0x00002b60, $packet->getCrc()); } - /** - * @test - * @expectedException Uro\TeltonikaFmParser\Exception\CrcMismatchException + /** + * @test */ public function invalid_crc_throws_crc_mismatch_exception() { + $this->expectException(CrcMismatchException::class); (new FmParser('tcp'))->decodeData( '0000000000000003'. // AVL Packet header '8E'. // Codec 8 ID @@ -45,4 +46,4 @@ public function invalid_crc_throws_crc_mismatch_exception() '00002b61' // CRC ); } -} \ No newline at end of file +} diff --git a/tests/Functional/TpcEncodeTest.php b/tests/Functional/TcpEncodeTest.php similarity index 88% rename from tests/Functional/TpcEncodeTest.php rename to tests/Functional/TcpEncodeTest.php index 69d6738..37f63e9 100644 --- a/tests/Functional/TpcEncodeTest.php +++ b/tests/Functional/TcpEncodeTest.php @@ -1,4 +1,4 @@ -assertEquals(4, strlen($ack)); $this->assertEquals(00000002, bin2hex($ack)); } -} \ No newline at end of file +} diff --git a/tests/Unit/Codec/Codec8ExtendedTest.php b/tests/Unit/Codec/Codec8ExtendedTest.php index 610f243..4e8909e 100644 --- a/tests/Unit/Codec/Codec8ExtendedTest.php +++ b/tests/Unit/Codec/Codec8ExtendedTest.php @@ -1,24 +1,28 @@ -validIoElement()); @@ -27,7 +31,7 @@ public function can_decode_io_element() $this->assertIoElement($ioElement); } - private function assertIoElement($ioElement) + private function assertIoElement($ioElement): void { $this->assertNotNull($ioElement); $this->assertEquals(0, $ioElement->getEventId()); @@ -40,28 +44,28 @@ private function assertIoElement($ioElement) $this->assertEquals('f00000000000000000000000000000001a', $ioElement->getPropertyById(256)->getValue()->toHex()); } - private function validIoElement() + private function validIoElement(): string { return - '0000'. // IO element ID of Event generated - '0006'. // 6 IO elements in record (total) - '0001'. // 1 IO elements which length is 1 byte - '00EF'. // IO element ID 239 - '0F'. // IO element value 15 - '0001'. // 1 IO elements which length is 2 byte - '0011'. // IO element ID 17 - '001E'. // IO element value - '0001'. // 1 IO elements which length is 4 Byte - '0010'. // IO element ID 16 - '0000CBDF'. // IO element value - '0002'. // 2 IO elements, which length is 8 Byte - '000B'. // IO element ID 11 - '000000003544C875'. // IO element value - '000E'. // IO element ID 14 - '0000000029BFE4D1'. // IO element value - '0001'. // 1 IO elements witch length is variable - '0100'. // IO element ID 256 - '0011'. // IO element length 17 + '0000' . // IO element ID of Event generated + '0006' . // 6 IO elements in record (total) + '0001' . // 1 IO elements which length is 1 byte + '00EF' . // IO element ID 239 + '0F' . // IO element value 15 + '0001' . // 1 IO elements which length is 2 byte + '0011' . // IO element ID 17 + '001E' . // IO element value + '0001' . // 1 IO elements which length is 4 Byte + '0010' . // IO element ID 16 + '0000CBDF' . // IO element value + '0002' . // 2 IO elements, which length is 8 Byte + '000B' . // IO element ID 11 + '000000003544C875' . // IO element value + '000E' . // IO element ID 14 + '0000000029BFE4D1' . // IO element value + '0001' . // 1 IO elements witch length is variable + '0100' . // IO element ID 256 + '0011' . // IO element length 17 'F00000000000000000000000000000001A'; // Variable length element value } -} \ No newline at end of file +} diff --git a/tests/Unit/Codec/Codec8Test.php b/tests/Unit/Codec/Codec8Test.php index 90d2fb7..2667790 100644 --- a/tests/Unit/Codec/Codec8Test.php +++ b/tests/Unit/Codec/Codec8Test.php @@ -1,24 +1,28 @@ -validIoElement()); @@ -27,7 +31,7 @@ public function can_decode_io_element() $this->assertIoElement($ioElement); } - private function assertIoElement($ioElement) + private function assertIoElement($ioElement): void { $this->assertNotNull($ioElement); $this->assertEquals(0, $ioElement->getEventId()); @@ -38,23 +42,23 @@ private function assertIoElement($ioElement) $this->assertEquals(349, $ioElement->getPropertyById(70)->getValue()->toUnsigned()); } - private function validIoElement() + private function validIoElement(): string { - return - '00'. // IO element ID of Event generated (in this case when 00 – data generated not on event) - '04'. // 4 IO elements in record - '03'. // 3 IO elements, which length is 1 Byte - '01'. // IO element ID = 01 - '01'. // 1’st IO element’s value = 1 - '15'. // IO element ID = 21 - '03'. // 21’st IO element’s value = 3 - '16'. // IO element ID = 22 - '03'. // 22’nd IO element’s value = 3 - '00'. // 0 IO elements, which value length is 2 Bytes - '01'. // 1 IO element, which value length is 4 Bytes - '46'. // IO element ID = 70 - '0000015d'. // 70’th IO element’s value = 349 + return + '00' . // IO element ID of Event generated (in this case when 00 – data generated not on event) + '04' . // 4 IO elements in record + '03' . // 3 IO elements, which length is 1 Byte + '01' . // IO element ID = 01 + '01' . // 1’st IO element’s value = 1 + '15' . // IO element ID = 21 + '03' . // 21’st IO element’s value = 3 + '16' . // IO element ID = 22 + '03' . // 22’nd IO element’s value = 3 + '00' . // 0 IO elements, which value length is 2 Bytes + '01' . // 1 IO element, which value length is 4 Bytes + '46' . // IO element ID = 70 + '0000015d' . // 70’th IO element’s value = 349 '00'; // 0 IO elements, which value length is 8 Bytes } -} \ No newline at end of file +} diff --git a/tests/Unit/Io/ReaderTest.php b/tests/Unit/Io/ReaderTest.php index ab7918f..54902f8 100644 --- a/tests/Unit/Io/ReaderTest.php +++ b/tests/Unit/Io/ReaderTest.php @@ -1,4 +1,6 @@ -assertEquals(15, (new Reader('0f'))->readUInt8()); } - /** @test */ - public function can_read_binary_input() + /** + * @test + */ + public function can_read_binary_input(): void { $this->assertEquals(15, (new Reader(hex2bin('0f')))->readUInt8()); } -} \ No newline at end of file +} diff --git a/tests/Unit/Model/AvlDataCollectionTest.php b/tests/Unit/Model/AvlDataCollectionTest.php index 5772433..174535b 100644 --- a/tests/Unit/Model/AvlDataCollectionTest.php +++ b/tests/Unit/Model/AvlDataCollectionTest.php @@ -1,5 +1,7 @@ assertEquals(8, (new AvlDataCollection(8, 1))->getCodecId()); } - /** @test */ - public function can_get_number_of_data() + /** + * @test + */ + public function can_get_number_of_data(): void { $this->assertEquals(1, (new AvlDataCollection(8, 1))->getNumberOfData()); } - /** @test */ - public function can_get_avl_data() + /** + * @test + */ + public function can_get_avl_data(): void { $avlDataCollection = (new AvlDataCollection(8, 1))->setAvlData(['fake-avldata']); $this->assertEquals(['fake-avldata'], $avlDataCollection->getAvlData()); } -} \ No newline at end of file +} diff --git a/tests/Unit/Model/ImeiTest.php b/tests/Unit/Model/ImeiTest.php index fbd1649..bad3a7a 100644 --- a/tests/Unit/Model/ImeiTest.php +++ b/tests/Unit/Model/ImeiTest.php @@ -1,36 +1,43 @@ assertEquals('862259588834290', $this->validImei()->getImei()); } /** * @test - * - * @expectedException \Uro\TeltonikaFmParser\Exception\InvalidArgumentException - * @expectedExceptionMessage IMEI number is not valid. */ - public function is_validating_wrong_imei() + public function is_validating_wrong_imei(): void { + $this->expectException(InvalidArgumentException::class); + $this->expectExceptionMessage('IMEI number is not valid.'); new Imei('123456789012345'); } - /** @test */ - public function is_json_serializable() + /** + * @test + * @throws InvalidArgumentException + */ + public function is_json_serializable(): void { $imeiStr = "862259588834290"; @@ -39,9 +46,11 @@ public function is_json_serializable() $this->assertJson('{"imei":"862259588834290"}', $imei); } - /** @test */ - public function can_convert_to_string() + /** + * @test + */ + public function can_convert_to_string(): void { - $this->assertEquals('862259588834290', (string) $this->validImei()); + $this->assertEquals('862259588834290', (string)$this->validImei()); } } diff --git a/tests/Unit/Model/IoElementTest.php b/tests/Unit/Model/IoElementTest.php index 151cc0b..de630ce 100644 --- a/tests/Unit/Model/IoElementTest.php +++ b/tests/Unit/Model/IoElementTest.php @@ -1,4 +1,6 @@ -getEventId(); $this->assertEquals(0, $eventId); } - /** @test */ - public function can_get_number_of_elements() + /** + * @test + */ + public function can_get_number_of_elements(): void { $numberOfElements = (new IoElement(0, 2))->getNumberOfElements(); $this->assertEquals(2, $numberOfElements); } -} \ No newline at end of file +} diff --git a/tests/Unit/Model/IoPropertyTest.php b/tests/Unit/Model/IoPropertyTest.php index aae5193..8e6ce2a 100644 --- a/tests/Unit/Model/IoPropertyTest.php +++ b/tests/Unit/Model/IoPropertyTest.php @@ -1,4 +1,6 @@ -getId(); + $id = (new IoProperty(1, new IoValue('0')))->getId(); $this->assertNotNull($id); $this->assertEquals(1, $id); } - /** @test */ - public function can_get_property_value() + /** + * @test + */ + public function can_get_property_value(): void { - $original = new IoValue(0); + $original = new IoValue('0'); $value = (new IoProperty(1, $original))->getValue(); $this->assertNotNull($value); $this->assertEquals($original, $value); } -} \ No newline at end of file +} diff --git a/tests/Unit/Model/IoValueTest.php b/tests/Unit/Model/IoValueTest.php index 21c68c7..adb9e10 100644 --- a/tests/Unit/Model/IoValueTest.php +++ b/tests/Unit/Model/IoValueTest.php @@ -1,83 +1,93 @@ -assertEquals('02', (new IoValue(hex2bin('02')))->toHex()); } - /** - * @test + /** + * @test * @dataProvider unsignedProvider + * @throws IoValueLengthException */ - public function can_convert_to_unsigned($expected, $hex) + public function can_convert_to_unsigned($expected, $hex): void { $this->assertEquals($expected, (new IoValue(hex2bin($hex)))->toUnsigned()); } - public function unsignedProvider() + public static function unsignedProvider(): array { return [ [255, 'ff'], [65535, 'ffff'], - [4294967295, 'ffffffff'] + [4294967295, 'ffffffff'], ]; } - /** - * @test + /** + * @test * @dataProvider signedProvider + * @throws IoValueLengthException */ - public function can_convert_to_signed($hex) + public function can_convert_to_signed(string $hex): void { $this->assertEquals(-1, (new IoValue(hex2bin($hex)))->toSigned()); } - public function signedProvider() + public static function signedProvider(): array { return [ ['ff'], ['ffff'], - ['ffffffff'] + ['ffffffff'], ]; } - /** - * @test - * @expectedException Uro\TeltonikaFmParser\Exception\IoValueLengthException + /** + * @test */ - public function to_unsigned_invalid_length_throw_exception() + public function to_unsigned_invalid_length_throw_exception(): void { + $this->expectException(IoValueLengthException::class); (new IoValue(hex2bin('000001')))->toUnsigned(); } - /** - * @test - * @expectedException Uro\TeltonikaFmParser\Exception\IoValueLengthException + /** + * @test */ - public function to_signed_invalid_length_throw_exception() + public function to_signed_invalid_length_throw_exception(): void { + $this->expectException(IoValueLengthException::class); (new IoValue(hex2bin('000001')))->toSigned(); } - /** @test */ - public function can_convert_to_string() + /** + * @test + */ + public function can_convert_to_string(): void { - $this->assertEquals('0001', (string) new IoValue(hex2bin('0001'))); + $this->assertEquals('0001', (string)new IoValue(hex2bin('0001'))); } - /** @test */ - public function can_serialize_json() + /** + * @test + */ + public function can_serialize_json(): void { $this->assertJson('{"value":"0001"}', json_encode(new IoValue(hex2bin('0001')))); } -} \ No newline at end of file +} diff --git a/tests/Unit/Support/Crc16Test.php b/tests/Unit/Support/Crc16Test.php index 36cc9c6..7d0b690 100644 --- a/tests/Unit/Support/Crc16Test.php +++ b/tests/Unit/Support/Crc16Test.php @@ -1,5 +1,7 @@ assertEquals($crc, (new Crc16)->calc(hex2bin($input))); + $this->assertEquals($crc, (new Crc16)->calculate(hex2bin($input))); } - public function crcInputProvider() + public static function crcInputProvider() { return [ [ '08020000016b1e03ccf001014b2e1818b0992d00880000080000f00906f0015000150445010100b30003180000430fce44000000000000016b1e1228b801014b31ad18b09bc800000000000000f00906f0015000150445020100b30003180000430fcf440000000002', - 0x00006513 + 0x00006513, ], [ '8e040000016b2e22974f0000000000000000000000000000000000000017000a00160100470100f00000150400c80000ef0100cc8000d38000d58000d780000d004300000044000000b5000000b600000042411b0018000000480bb800490bb8004a0bb8004b0bb800060bb800080bb800e0ffd80000000000000000016b2e21acef0000000000000000000000000000000000000017000a00160100470100f00000150400c80000ef0100cc8000d38000d58000d780000d004300000044000000b5000000b600000042411c0018000000480bb800490bb8004a0bb8004b0bb800060bb800080bb800e0ffd80000000000000000016b2e20c2930000000000000000000000000000000000000017000a00160100470100f00000150400c80000ef0100cc8000d38000d58000d780000d004300000044000000b5000000b60000004241910018000000480bb800490bb8004a0bb8004b0bb800060bb800080bb800e0ffd80000000000000000016b2e1fd8330000000000000000000000000000000000000017000a00160100470100f00000150400c80000ef0100cc8000d38000d58000d780000d004300000044000000b5000000b60000004241db0018000000480bb800490bb8004a0bb8004b0bb800060bb800080bb800e0ffd800000000000004', - 0x0000abb5 + 0x0000abb5, ], [ '8e0000', - 0x00002b60 + 0x00002b60, ], [ '080000', - 0x0000c281 - ] + 0x0000c281, + ], ]; } -} \ No newline at end of file +} diff --git a/tests/Unit/Tcp/DecoderTest.php b/tests/Unit/Tcp/DecoderTest.php index 06a6677..ba9fd57 100644 --- a/tests/Unit/Tcp/DecoderTest.php +++ b/tests/Unit/Tcp/DecoderTest.php @@ -1,25 +1,37 @@ -decodeImei('000F383632323539353838383334323930'); + $imei = (new Decoder())->decodeImei('000F383632323539353838383334323930'); $this->assertNotNull($imei); $this->assertEquals('862259588834290', $imei->getImei()); } - /** @test */ + /** + * @test + * @throws NumberOfDataMismatchException + * @throws UnsupportedCodecException + * @throws CrcMismatchException + */ public function can_decode_codec8_data() { - $packet = (new Decoder)->decodeData( + $packet = (new Decoder())->decodeData( '0000000000000003'. // AVL Packet header '08'. // Codec 8 ID '0000'. // Empty AVL collection @@ -33,10 +45,15 @@ public function can_decode_codec8_data() $this->assertEquals(0x0000c281, $packet->getCrc()); } - /** @test */ - public function can_decode_codec8extended_data() + /** + * @test + * @throws NumberOfDataMismatchException + * @throws UnsupportedCodecException + * @throws CrcMismatchException + */ + public function can_decode_codec8extended_data(): void { - $packet = (new Decoder)->decodeData( + $packet = (new Decoder())->decodeData( '0000000000000003'. // AVL Packet header '8E'. // Codec 8 ID '0000'. // Empty AVL collection @@ -50,17 +67,20 @@ public function can_decode_codec8extended_data() $this->assertEquals(0x00002b60, $packet->getCrc()); } - /** + /** * @test - * @expectedException Uro\TeltonikaFmParser\Exception\UnsupportedCodecException + * @throws NumberOfDataMismatchException + * @throws CrcMismatchException */ - public function unsuported_codec_throw_exception() + public function unsupported_codec_throw_exception(): void { - (new Decoder)->decodeData( + $this->expectException(UnsupportedCodecException::class); + + (new Decoder())->decodeData( '0000000000000003'. // AVL Packet header 'FF'. // Unsupported Codec ID '0000'. // Empty AVL collection '00008612' // CRC ); } -} \ No newline at end of file +} diff --git a/tests/Unit/Tcp/EncoderTest.php b/tests/Unit/Tcp/EncoderTest.php index 6f77f9f..6e8b7b2 100644 --- a/tests/Unit/Tcp/EncoderTest.php +++ b/tests/Unit/Tcp/EncoderTest.php @@ -1,4 +1,6 @@ -shouldReceive('getNumberOfAcceptedData') @@ -22,4 +26,4 @@ public function can_encode_acknowledge() $this->assertEquals(4, strlen($ack)); $this->assertEquals(00000002, bin2hex($ack)); } -} \ No newline at end of file +} diff --git a/tests/Unit/Tcp/PacketTest.php b/tests/Unit/Tcp/PacketTest.php index 899a3aa..d5531ca 100644 --- a/tests/Unit/Tcp/PacketTest.php +++ b/tests/Unit/Tcp/PacketTest.php @@ -1,62 +1,78 @@ -avlDataCollection = new AvlDataCollection(8, 2, []); $this->packet = new Packet(0, 2, $this->avlDataCollection, 0x2b60); } - /** @test */ - public function can_get_number_of_accepted_data() + /** + * @test + */ + public function can_get_number_of_accepted_data(): void { $this->assertEquals(2, $this->packet->getNumberOfAcceptedData()); } - /** @test */ - public function can_get_preamble() + /** + * @test + */ + public function can_get_preamble(): void { $this->assertEquals(0, $this->packet->getPreamble()); } - /** @test */ - public function can_get_avl_data_array_length() + /** + * @test + */ + public function can_get_avl_data_array_length(): void { $this->assertEquals(2, $this->packet->getAvlDataArrayLength()); } - /** @test */ - public function can_get_avl_data_collection() + /** + * @test + */ + public function can_get_avl_data_collection(): void { $this->assertEquals($this->avlDataCollection, $this->packet->getAvlDataCollection()); } - /** @test */ - public function can_get_crc() + /** + * @test + */ + public function can_get_crc(): void { $this->assertEquals(0x2b60, $this->packet->getCrc()); } - /** @test */ - public function can_check_crc_valid_data() + /** + * @test + */ + public function can_check_crc_valid_data(): void { $this->assertTrue($this->packet->checkCrc(hex2bin('8e0000'))); } - /** @test */ - public function can_check_crc_invalid_data() + /** + * @test + */ + public function can_check_crc_invalid_data(): void { $this->assertFalse($this->packet->checkCrc(hex2bin('8f0000'))); } -} \ No newline at end of file +} diff --git a/tests/Unit/Tcp/ReplyTest.php b/tests/Unit/Tcp/ReplyTest.php index fb123e8..b6fedbe 100644 --- a/tests/Unit/Tcp/ReplyTest.php +++ b/tests/Unit/Tcp/ReplyTest.php @@ -1,4 +1,6 @@ -assertEquals('01', bin2hex($reply)); } - /** @test */ - public function can_get_reject_reply() + /** + * @test + */ + public function can_get_reject_reply(): void { $reply = Reply::reject(); $this->assertEquals(1, strlen($reply)); $this->assertEquals('00', bin2hex($reply)); } -} \ No newline at end of file +}