diff --git a/.github/.metadata.json b/.github/.metadata.json index f07606072..f1f6926ab 100644 --- a/.github/.metadata.json +++ b/.github/.metadata.json @@ -1,19 +1,19 @@ { - "templateVersion": "0.1", + "templateVersion": "0.2", "product": { "name": "Magento2 Functional Testing Framework (MFTF)", "description": "MFTF is a framework to write and execute UI Functional tests for Magento 2 projects" }, "contacts": { "team": { - "name": "Magento Quality Engineering / Pangolin", + "name": "Adobe Commerce Quality Engineering / Pangolin", "DL": "GRP-Pangolin", "slackChannel": "mftf" } }, "ticketTracker": { "functionalJiraQueue": { - "projectKey": "MQE", + "projectKey": "ACQE", "component": "Framework - MFTF" }, "securityJiraQueue": { @@ -21,6 +21,7 @@ "component": "Test Infrastructure" } }, + "productionCodeBranches": ["master"], "staticScan": { "enable": true, "frequency": "monthly", diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 0225f58bc..a9570ebee 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -12,7 +12,7 @@ jobs: strategy: fail-fast: false matrix: - php-versions: ['8.1', '8.2'] + php-versions: ['8.2', '8.3', '8.4'] steps: - uses: actions/checkout@v2 @@ -25,7 +25,7 @@ jobs: - name: Cache Composer packages id: composer-cache - uses: actions/cache@v2 + uses: actions/cache@v4 with: path: vendor key: ${{ runner.os }}-php-${{ hashFiles('**/composer.lock') }} @@ -54,7 +54,7 @@ jobs: strategy: fail-fast: false matrix: - php-versions: ['8.1', '8.2'] + php-versions: ['8.2', '8.3', '8.4'] steps: - uses: actions/checkout@v2 @@ -66,7 +66,7 @@ jobs: - name: Cache Composer packages id: composer-cache - uses: actions/cache@v2 + uses: actions/cache@v4 with: path: vendor key: ${{ runner.os }}-php-${{ hashFiles('**/composer.lock') }} @@ -86,7 +86,7 @@ jobs: strategy: fail-fast: false matrix: - php-versions: ['8.1', '8.2'] + php-versions: ['8.2', '8.3', '8.4'] steps: - uses: actions/checkout@v2 @@ -98,7 +98,7 @@ jobs: - name: Cache Composer packages id: composer-cache - uses: actions/cache@v2 + uses: actions/cache@v4 with: path: vendor key: ${{ runner.os }}-php-${{ hashFiles('**/composer.lock') }} @@ -118,7 +118,7 @@ jobs: strategy: fail-fast: false matrix: - php-versions: ['8.1', '8.2'] + php-versions: ['8.2', '8.3', '8.4'] services: chrome: @@ -136,7 +136,7 @@ jobs: - name: Cache Composer packages id: composer-cache - uses: actions/cache@v2 + uses: actions/cache@v4 with: path: vendor key: ${{ runner.os }}-php-${{ hashFiles('**/composer.lock') }} diff --git a/CHANGELOG.md b/CHANGELOG.md index dc0566cd5..d61b915a8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,136 @@ Magento Functional Testing Framework Changelog ================================================ +5.0.4 +--------- +### Enhancements +* Bumped aws/aws-sdk-php package to 3.342.28 +* Bumped composer/composer to 2.8.8 +* Bumped codeception/codeception to 5.2.1 +* Bumped codeception/module-webdriver to 4.0.3 +* Bumped guzzlehttp/guzzle to 7.9.3 +* Bumped monolog/monolog to 3.9.0 +* Updated cache package version to @v4 + +5.0.3 +--------- +### Fixes +* Allowed additional actions to read from credentials file to fix page builder failures. +* Added support for chrome 131 + +5.0.2 +--------- +### Fixes +* Removed support for chrome 131 + +5.0.1 +--------- +### Enhancement +* Provided support for chrome 131 + +5.0.0 +--------- +### Enhancements +* Provided support for PHP 8.4 +* Dropped the support for PHP 8.1 +* Removed unwanted dependent packages +* Removed the dependency of codeception/module-sequence and implemented internal adjustments to address PHP 8.4 deprecations. + +4.8.3 +--------- +### Enhancements +* Bumped aws/aws-sdk-php package to 3.323.4 +* Bumped composer/composer to 2.8.1 +* Bumped laminas/laminas-diactoros to 3.4.1 +* Bumped nikic/php-parser to 5.3.1 +* Bumped squizlabs/php_codesniffer to 3.10.3 +* Remove any unused files remaining after upgrading Codeception. + +4.8.2 +--------- +### Enhancements +* Bumped brainmaestro/composer-git-hook to ^3.0 +* Bumped nikic/php-parser to 5.1.0 +* Bumped monolog/monolog to 3.7.0 +* Bumped guzzlehttp/guzzle to 7.9.2 + +4.8.1 +--------- +### Enhancements +* Bumped allure-codeception to ^2.4 +* Bumped squizlabs/php_codesniffer to 3.10.1 +* Bumped composer/composer to 2.7.7 +* Bumped monolog/monolog to 3.6.0 +* Bumped spomky-labs/otphp to 11.3.0 +* Bumped aws-sdk-php to 3.314.1 + +### Fixes +* Unneeded reports are shown when MFTF Static tests fail. + +4.8.0 +--------- +### Enhancements +* Bumped phpunit/phpunit to ^10.0 +* Bumped allure-framework/allure-phpunit to ^3 +* Bumped codeception/module-webdriver ^4.0 + +### Fixes +* Fixed Class "Magento\FunctionalTestingFramework\StaticCheck\ActionGroupArgumentsCheck" not found on running vendor/bin/mftf build:project --upgrade. + +4.7.2 +--------- +### Enhancements +* Fail static test when introduced filename does not equal the MFTF object name + contained within. + +4.7.1 +--------- +### Enhancements +* Bumped all symfony dependencies to `^6.0 +* Removed abandoned package codacy/coverage +* Removed abandoned package sebastian/phpcpd +* Bumped monolog/monolog to ^3.0 +* Bumped nikic/php-parser to ^5.0 + +4.7.0 +--------- +### Enhancements +* Bumped all symfony dependencies to `^6.0 +* Unit Test for PTS enabled doesn't apply filter fix + +4.6.1 +--------- +### Enhancements +* Supported setting custom timeout value for `magentoCLI` command via an environment variable `MAGENTO_CLI_WAIT_TIMEOUT`. + +4.6.0 +--------- +### Enhancements +* Added Support for PHP 8.3 and enabled PR checks for PHP 8.3. +* Bumped `symfony/console` dependency to `^6.0`. +* Bumped `laminas/laminas-diactoros` dependency to `^3.0`. +* Added no-ansi option to bin/mftf command. + +### Fixes +* Fixed 8.3 deprecation errors. +* Fixed The build with PTS enabled doesn't apply filter issue. +* Change MFTF command to maintain Magento CLI output. + +4.5.0 +--------- +### Enhancements +* Increase browser resolution to 1920x1080. +* Add metadata to ACQE Repositories. +* Add magento admin password to credentials example. + +### Fixes +* Fixed test failure while running any test suite with an argument. + +4.4.2 +--------- +### Fixes +* Fixed PHP 8.2 deprecation warnings. + 4.4.1 --------- * Same as previous release diff --git a/bin/static-checks b/bin/static-checks index c711726e4..b6733ba25 100755 --- a/bin/static-checks +++ b/bin/static-checks @@ -16,8 +16,6 @@ echo "" echo "===============================" echo " COPY PASTE DETECTOR" echo "===============================" -vendor/bin/phpcpd ./src -echo "" echo "===============================" echo " MESS DETECTOR" diff --git a/composer.json b/composer.json index 7fd729ef7..643d60984 100755 --- a/composer.json +++ b/composer.json @@ -2,54 +2,47 @@ "name": "magento/magento2-functional-testing-framework", "description": "Magento2 Functional Testing Framework", "type": "library", - "version": "4.4.1", + "version": "5.0.4", "license": "AGPL-3.0", "keywords": ["magento", "automation", "functional", "testing"], "config": { "sort-packages": true }, "require": { - "php": ">=8.1", + "allure-framework/allure-codeception": "^2.1", + "aws/aws-sdk-php": "^3.132", + "codeception/codeception": "^5.0", + "codeception/module-asserts": "^3.0", + "codeception/module-webdriver": "^4.0", + "composer/composer": "^1.9||^2.0,!=2.2.16", + "csharpru/vault-php": "^4.2.1", "ext-curl": "*", "ext-dom": "*", "ext-iconv": "*", "ext-intl": "*", "ext-json": "*", "ext-openssl": "*", - "allure-framework/allure-codeception": "^2.1", - "allure-framework/allure-phpunit": "^2", - "aws/aws-sdk-php": "^3.132", - "codeception/codeception": "^5.0", - "codeception/module-asserts": "^3.0", - "codeception/module-sequence": "^3.0", - "codeception/module-webdriver": "^3.0", - "composer/composer": "^1.9 || ^2.0, !=2.2.16", - "csharpru/vault-php": "^4.2.1", "guzzlehttp/guzzle": "^7.3.0", - "laminas/laminas-diactoros": "^2.8", - "monolog/monolog": "^2.3", + "laminas/laminas-diactoros": "^3.0", + "monolog/monolog": "^2.3||^3.0", "mustache/mustache": "~2.5", - "nikic/php-parser": "^4.4", + "nikic/php-parser": "^4.4||^5.0", + "php": ">=8.2", "php-webdriver/webdriver": "^1.14.0", - "spomky-labs/otphp": "^10.0", - "symfony/console": "^4.4||^5.4", - "symfony/string": "^5.4||^6.3", - "symfony/dotenv": "^5.3||^6.3", - "symfony/finder": "^5.0||^6.3", - "symfony/http-foundation": "^5.0||^6.3", - "symfony/mime": "^5.0||^6.3", - "symfony/process": "<=5.4.23", - "weew/helpers-array": "^1.3", - "doctrine/annotations": "^2.0" + "spomky-labs/otphp": "^10.0||^11.0", + "symfony/console": "^6.4", + "symfony/dotenv": "^6.4", + "symfony/finder": "^6.4", + "symfony/mime": "^6.4", + "symfony/process": "^6.4", + "weew/helpers-array": "^1.3" }, "require-dev": { - "brainmaestro/composer-git-hooks": "^2.3.1", - "codacy/coverage": "^1.4", + "brainmaestro/composer-git-hooks": "^3.0", "php-coveralls/php-coveralls": "^1.0||^2.2", "phpmd/phpmd": "^2.8.0", - "phpunit/phpunit": "<=9.5.20", - "sebastian/phpcpd": "~6.0.0", - "squizlabs/php_codesniffer": "~3.7.0" + "phpunit/phpunit": "^10.0", + "squizlabs/php_codesniffer": "~3.10.1" }, "suggest": { "hoa/console": "Enables action and interactive console functionality" @@ -58,7 +51,8 @@ "files": ["src/Magento/FunctionalTestingFramework/_bootstrap.php"], "psr-4": { "Magento\\FunctionalTestingFramework\\": "src/Magento/FunctionalTestingFramework", - "MFTF\\": "dev/tests/functional/tests/MFTF" + "MFTF\\": "dev/tests/functional/tests/MFTF", + "Magento\\FunctionalTestingFramework\\Tests\\Verification\\": "dev/tests/verification/Tests" } }, "autoload-dev": { diff --git a/composer.lock b/composer.lock index 20b3bd5e6..8adfd5085 100644 --- a/composer.lock +++ b/composer.lock @@ -4,35 +4,34 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "ed9a0f6b303c7381d59f64ba18a27446", + "content-hash": "321fa6ea41d9fbba05f0597ee9cb7f7f", "packages": [ { "name": "allure-framework/allure-codeception", - "version": "v2.1.0", + "version": "v2.4.0", "source": { "type": "git", "url": "https://github.com/allure-framework/allure-codeception.git", - "reference": "1d3b80bce18ea130e2c34a3ec1f57138a77b6fa8" + "reference": "854320894b5e65952eb0cafd1555e9efb4543350" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/allure-framework/allure-codeception/zipball/1d3b80bce18ea130e2c34a3ec1f57138a77b6fa8", - "reference": "1d3b80bce18ea130e2c34a3ec1f57138a77b6fa8", + "url": "https://api.github.com/repos/allure-framework/allure-codeception/zipball/854320894b5e65952eb0cafd1555e9efb4543350", + "reference": "854320894b5e65952eb0cafd1555e9efb4543350", "shasum": "" }, "require": { - "allure-framework/allure-php-commons": "^2", - "codeception/codeception": "^5", + "allure-framework/allure-php-commons": "^2.3.1", + "codeception/codeception": "^5.0.3", "ext-json": "*", "php": "^8" }, "require-dev": { - "phpunit/phpunit": "^9", - "psalm/plugin-phpunit": "^0.18.4", + "psalm/plugin-phpunit": "^0.19.0", "remorhaz/php-json-data": "^0.5.3", "remorhaz/php-json-path": "^0.7.7", - "squizlabs/php_codesniffer": "^3.7.1", - "vimeo/psalm": "^5.2" + "squizlabs/php_codesniffer": "^3.7.2", + "vimeo/psalm": "^5.12" }, "type": "library", "autoload": { @@ -57,7 +56,7 @@ } ], "description": "Allure Codeception integration", - "homepage": "http://allure.qatools.ru/", + "homepage": "https://allurereport.org/", "keywords": [ "allure", "attachments", @@ -72,20 +71,20 @@ "issues": "https://github.com/allure-framework/allure-codeception/issues", "source": "https://github.com/allure-framework/allure-codeception" }, - "time": "2023-01-09T08:09:01+00:00" + "time": "2024-05-28T09:54:01+00:00" }, { "name": "allure-framework/allure-php-commons", - "version": "v2.2.0", + "version": "v2.3.1", "source": { "type": "git", "url": "https://github.com/allure-framework/allure-php-commons2.git", - "reference": "c2b222c1f999c851e029290c09a3fe4933390bda" + "reference": "5d7ed5ab510339652163ca1473eb499d4b7ec488" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/allure-framework/allure-php-commons2/zipball/c2b222c1f999c851e029290c09a3fe4933390bda", - "reference": "c2b222c1f999c851e029290c09a3fe4933390bda", + "url": "https://api.github.com/repos/allure-framework/allure-php-commons2/zipball/5d7ed5ab510339652163ca1473eb499d4b7ec488", + "reference": "5d7ed5ab510339652163ca1473eb499d4b7ec488", "shasum": "" }, "require": { @@ -100,10 +99,10 @@ }, "require-dev": { "jetbrains/phpstorm-attributes": "^1", - "phpunit/phpunit": "^9.5.10", + "phpunit/phpunit": "^9.6.8", "psalm/plugin-phpunit": "^0.18.4", - "squizlabs/php_codesniffer": "^3.7.1", - "vimeo/psalm": "^5.4" + "squizlabs/php_codesniffer": "^3.7.2", + "vimeo/psalm": "^5.12" }, "type": "library", "autoload": { @@ -142,88 +141,20 @@ "issues": "https://github.com/allure-framework/allure-php-commons2/issues", "source": "https://github.com/allure-framework/allure-php-commons" }, - "time": "2023-01-12T14:28:21+00:00" - }, - { - "name": "allure-framework/allure-phpunit", - "version": "v2.1.0", - "source": { - "type": "git", - "url": "https://github.com/allure-framework/allure-phpunit.git", - "reference": "a08e0092cdddfc8ead1953cf5bddf80b48595109" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/allure-framework/allure-phpunit/zipball/a08e0092cdddfc8ead1953cf5bddf80b48595109", - "reference": "a08e0092cdddfc8ead1953cf5bddf80b48595109", - "shasum": "" - }, - "require": { - "allure-framework/allure-php-commons": "^2", - "php": "^8", - "phpunit/phpunit": "^9" - }, - "conflict": { - "amphp/byte-stream": "<1.5.1" - }, - "require-dev": { - "brianium/paratest": "^6.8", - "psalm/plugin-phpunit": "^0.18.4", - "squizlabs/php_codesniffer": "^3.7.1", - "vimeo/psalm": "^5.4" - }, - "type": "library", - "autoload": { - "psr-4": { - "Qameta\\Allure\\PHPUnit\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "Apache-2.0" - ], - "authors": [ - { - "name": "Ivan Krutov", - "email": "vania-pooh@yandex-team.ru", - "role": "Developer" - }, - { - "name": "Edward Surov", - "email": "zoohie@gmail.com", - "role": "Developer" - } - ], - "description": "Allure PHPUnit integration", - "homepage": "http://allure.qatools.ru/", - "keywords": [ - "allure", - "attachments", - "cases", - "phpunit", - "report", - "steps", - "testing" - ], - "support": { - "email": "allure@qameta.io", - "issues": "https://github.com/allure-framework/allure-phpunit/issues", - "source": "https://github.com/allure-framework/allure-phpunit" - }, - "time": "2023-01-12T14:27:20+00:00" + "time": "2023-05-30T10:55:43+00:00" }, { "name": "aws/aws-crt-php", - "version": "v1.2.1", + "version": "v1.2.7", "source": { "type": "git", "url": "https://github.com/awslabs/aws-crt-php.git", - "reference": "1926277fc71d253dfa820271ac5987bdb193ccf5" + "reference": "d71d9906c7bb63a28295447ba12e74723bd3730e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/awslabs/aws-crt-php/zipball/1926277fc71d253dfa820271ac5987bdb193ccf5", - "reference": "1926277fc71d253dfa820271ac5987bdb193ccf5", + "url": "https://api.github.com/repos/awslabs/aws-crt-php/zipball/d71d9906c7bb63a28295447ba12e74723bd3730e", + "reference": "d71d9906c7bb63a28295447ba12e74723bd3730e", "shasum": "" }, "require": { @@ -262,54 +193,53 @@ ], "support": { "issues": "https://github.com/awslabs/aws-crt-php/issues", - "source": "https://github.com/awslabs/aws-crt-php/tree/v1.2.1" + "source": "https://github.com/awslabs/aws-crt-php/tree/v1.2.7" }, - "time": "2023-03-24T20:22:19+00:00" + "time": "2024-10-18T22:15:13+00:00" }, { "name": "aws/aws-sdk-php", - "version": "3.268.16", + "version": "3.344.6", "source": { "type": "git", "url": "https://github.com/aws/aws-sdk-php.git", - "reference": "b59134c9ca64dcb9de6f7dbbcb9d5a75ed665a98" + "reference": "eb0bc621472592545539329499961a15a3f9f6dc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/b59134c9ca64dcb9de6f7dbbcb9d5a75ed665a98", - "reference": "b59134c9ca64dcb9de6f7dbbcb9d5a75ed665a98", + "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/eb0bc621472592545539329499961a15a3f9f6dc", + "reference": "eb0bc621472592545539329499961a15a3f9f6dc", "shasum": "" }, "require": { - "aws/aws-crt-php": "^1.0.4", + "aws/aws-crt-php": "^1.2.3", "ext-json": "*", "ext-pcre": "*", "ext-simplexml": "*", - "guzzlehttp/guzzle": "^6.5.8 || ^7.4.5", - "guzzlehttp/promises": "^1.4.0", - "guzzlehttp/psr7": "^1.9.1 || ^2.4.5", - "mtdowling/jmespath.php": "^2.6", - "php": ">=5.5" + "guzzlehttp/guzzle": "^7.4.5", + "guzzlehttp/promises": "^2.0", + "guzzlehttp/psr7": "^2.4.5", + "mtdowling/jmespath.php": "^2.8.0", + "php": ">=8.1", + "psr/http-message": "^2.0" }, "require-dev": { "andrewsville/php-token-reflection": "^1.4", "aws/aws-php-sns-message-validator": "~1.0", "behat/behat": "~3.0", - "composer/composer": "^1.10.22", + "composer/composer": "^2.7.8", "dms/phpunit-arraysubset-asserts": "^0.4.0", "doctrine/cache": "~1.4", "ext-dom": "*", "ext-openssl": "*", "ext-pcntl": "*", "ext-sockets": "*", - "nette/neon": "^2.3", - "paragonie/random_compat": ">= 2", - "phpunit/phpunit": "^4.8.35 || ^5.6.3 || ^9.5", - "psr/cache": "^1.0", - "psr/http-message": "^1.0", - "psr/simple-cache": "^1.0", - "sebastian/comparator": "^1.2.3 || ^4.0", - "yoast/phpunit-polyfills": "^1.0" + "phpunit/phpunit": "^5.6.3 || ^8.5 || ^9.5", + "psr/cache": "^2.0 || ^3.0", + "psr/simple-cache": "^2.0 || ^3.0", + "sebastian/comparator": "^1.2.3 || ^4.0 || ^5.0", + "symfony/filesystem": "^v6.4.0 || ^v7.1.0", + "yoast/phpunit-polyfills": "^2.0" }, "suggest": { "aws/aws-php-sns-message-validator": "To validate incoming SNS notifications", @@ -330,7 +260,10 @@ ], "psr-4": { "Aws\\": "src/" - } + }, + "exclude-from-classmap": [ + "src/data/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -355,100 +288,39 @@ "sdk" ], "support": { - "forum": "https://forums.aws.amazon.com/forum.jspa?forumID=80", + "forum": "https://github.com/aws/aws-sdk-php/discussions", "issues": "https://github.com/aws/aws-sdk-php/issues", - "source": "https://github.com/aws/aws-sdk-php/tree/3.268.16" - }, - "time": "2023-04-21T21:37:05+00:00" - }, - { - "name": "beberlei/assert", - "version": "v3.3.2", - "source": { - "type": "git", - "url": "https://github.com/beberlei/assert.git", - "reference": "cb70015c04be1baee6f5f5c953703347c0ac1655" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/beberlei/assert/zipball/cb70015c04be1baee6f5f5c953703347c0ac1655", - "reference": "cb70015c04be1baee6f5f5c953703347c0ac1655", - "shasum": "" - }, - "require": { - "ext-ctype": "*", - "ext-json": "*", - "ext-mbstring": "*", - "ext-simplexml": "*", - "php": "^7.0 || ^8.0" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "*", - "phpstan/phpstan": "*", - "phpunit/phpunit": ">=6.0.0", - "yoast/phpunit-polyfills": "^0.1.0" - }, - "suggest": { - "ext-intl": "Needed to allow Assertion::count(), Assertion::isCountable(), Assertion::minCount(), and Assertion::maxCount() to operate on ResourceBundles" - }, - "type": "library", - "autoload": { - "files": [ - "lib/Assert/functions.php" - ], - "psr-4": { - "Assert\\": "lib/Assert" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-2-Clause" - ], - "authors": [ - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de", - "role": "Lead Developer" - }, - { - "name": "Richard Quadling", - "email": "rquadling@gmail.com", - "role": "Collaborator" - } - ], - "description": "Thin assertion library for input validation in business models.", - "keywords": [ - "assert", - "assertion", - "validation" - ], - "support": { - "issues": "https://github.com/beberlei/assert/issues", - "source": "https://github.com/beberlei/assert/tree/v3.3.2" + "source": "https://github.com/aws/aws-sdk-php/tree/3.344.6" }, - "time": "2021-12-16T21:41:27+00:00" + "time": "2025-06-12T18:03:59+00:00" }, { "name": "behat/gherkin", - "version": "v4.9.0", + "version": "v4.14.0", "source": { "type": "git", "url": "https://github.com/Behat/Gherkin.git", - "reference": "0bc8d1e30e96183e4f36db9dc79caead300beff4" + "reference": "34c9b59c59355a7b4c53b9f041c8dbd1c8acc3b4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Behat/Gherkin/zipball/0bc8d1e30e96183e4f36db9dc79caead300beff4", - "reference": "0bc8d1e30e96183e4f36db9dc79caead300beff4", + "url": "https://api.github.com/repos/Behat/Gherkin/zipball/34c9b59c59355a7b4c53b9f041c8dbd1c8acc3b4", + "reference": "34c9b59c59355a7b4c53b9f041c8dbd1c8acc3b4", "shasum": "" }, "require": { - "php": "~7.2|~8.0" + "composer-runtime-api": "^2.2", + "php": "8.1.* || 8.2.* || 8.3.* || 8.4.*" }, "require-dev": { - "cucumber/cucumber": "dev-gherkin-22.0.0", - "phpunit/phpunit": "~8|~9", - "symfony/yaml": "~3|~4|~5" + "cucumber/gherkin-monorepo": "dev-gherkin-v32.1.1", + "friendsofphp/php-cs-fixer": "^3.65", + "mikey179/vfsstream": "^1.6", + "phpstan/extension-installer": "^1", + "phpstan/phpstan": "^2", + "phpstan/phpstan-phpunit": "^2", + "phpunit/phpunit": "^10.5", + "symfony/yaml": "^5.4 || ^6.4 || ^7.0" }, "suggest": { "symfony/yaml": "If you want to parse features, represented in YAML files" @@ -460,8 +332,8 @@ } }, "autoload": { - "psr-0": { - "Behat\\Gherkin": "src/" + "psr-4": { + "Behat\\Gherkin\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -472,11 +344,11 @@ { "name": "Konstantin Kudryashov", "email": "ever.zet@gmail.com", - "homepage": "http://everzet.com" + "homepage": "https://everzet.com" } ], "description": "Gherkin DSL parser for PHP", - "homepage": "http://behat.org/", + "homepage": "https://behat.org/", "keywords": [ "BDD", "Behat", @@ -487,31 +359,31 @@ ], "support": { "issues": "https://github.com/Behat/Gherkin/issues", - "source": "https://github.com/Behat/Gherkin/tree/v4.9.0" + "source": "https://github.com/Behat/Gherkin/tree/v4.14.0" }, - "time": "2021-10-12T13:05:09+00:00" + "time": "2025-05-23T15:06:40+00:00" }, { "name": "brick/math", - "version": "0.11.0", + "version": "0.13.1", "source": { "type": "git", "url": "https://github.com/brick/math.git", - "reference": "0ad82ce168c82ba30d1c01ec86116ab52f589478" + "reference": "fc7ed316430118cc7836bf45faff18d5dfc8de04" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/brick/math/zipball/0ad82ce168c82ba30d1c01ec86116ab52f589478", - "reference": "0ad82ce168c82ba30d1c01ec86116ab52f589478", + "url": "https://api.github.com/repos/brick/math/zipball/fc7ed316430118cc7836bf45faff18d5dfc8de04", + "reference": "fc7ed316430118cc7836bf45faff18d5dfc8de04", "shasum": "" }, "require": { - "php": "^8.0" + "php": "^8.1" }, "require-dev": { "php-coveralls/php-coveralls": "^2.2", - "phpunit/phpunit": "^9.0", - "vimeo/psalm": "5.0.0" + "phpunit/phpunit": "^10.1", + "vimeo/psalm": "6.8.8" }, "type": "library", "autoload": { @@ -531,12 +403,17 @@ "arithmetic", "bigdecimal", "bignum", + "bignumber", "brick", - "math" + "decimal", + "integer", + "math", + "mathematics", + "rational" ], "support": { "issues": "https://github.com/brick/math/issues", - "source": "https://github.com/brick/math/tree/0.11.0" + "source": "https://github.com/brick/math/tree/0.13.1" }, "funding": [ { @@ -544,43 +421,43 @@ "type": "github" } ], - "time": "2023-01-15T23:15:59+00:00" + "time": "2025-03-29T13:50:30+00:00" }, { "name": "codeception/codeception", - "version": "5.0.10", + "version": "5.3.2", "source": { "type": "git", "url": "https://github.com/Codeception/Codeception.git", - "reference": "ed4af7fd4103cdd035916fbb8f35124edd2d018b" + "reference": "582112d7a603d575e41638df1e96900b10ae91b8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Codeception/Codeception/zipball/ed4af7fd4103cdd035916fbb8f35124edd2d018b", - "reference": "ed4af7fd4103cdd035916fbb8f35124edd2d018b", + "url": "https://api.github.com/repos/Codeception/Codeception/zipball/582112d7a603d575e41638df1e96900b10ae91b8", + "reference": "582112d7a603d575e41638df1e96900b10ae91b8", "shasum": "" }, "require": { - "behat/gherkin": "^4.6.2", - "codeception/lib-asserts": "^2.0", + "behat/gherkin": "^4.12", + "codeception/lib-asserts": "^2.2", "codeception/stub": "^4.1", "ext-curl": "*", "ext-json": "*", "ext-mbstring": "*", - "php": "^8.0", - "phpunit/php-code-coverage": "^9.2 || ^10.0", - "phpunit/php-text-template": "^2.0 || ^3.0", - "phpunit/php-timer": "^5.0.3 || ^6.0", - "phpunit/phpunit": "^9.5.20 || ^10.0", - "psy/psysh": "^0.11.2", - "sebastian/comparator": "^4.0.5 || ^5.0", - "sebastian/diff": "^4.0.3 || ^5.0", - "symfony/console": ">=4.4.24 <7.0", - "symfony/css-selector": ">=4.4.24 <7.0", - "symfony/event-dispatcher": ">=4.4.24 <7.0", - "symfony/finder": ">=4.4.24 <7.0", - "symfony/var-dumper": ">=4.4.24 < 7.0", - "symfony/yaml": ">=4.4.24 <7.0" + "php": "^8.2", + "phpunit/php-code-coverage": "^9.2 | ^10.0 | ^11.0 | ^12.0", + "phpunit/php-text-template": "^2.0 | ^3.0 | ^4.0 | ^5.0", + "phpunit/php-timer": "^5.0.3 | ^6.0 | ^7.0 | ^8.0", + "phpunit/phpunit": "^9.5.20 | ^10.0 | ^11.0 | ^12.0", + "psy/psysh": "^0.11.2 | ^0.12", + "sebastian/comparator": "^4.0.5 | ^5.0 | ^6.0 | ^7.0", + "sebastian/diff": "^4.0.3 | ^5.0 | ^6.0 | ^7.0", + "symfony/console": ">=5.4.24 <8.0", + "symfony/css-selector": ">=5.4.24 <8.0", + "symfony/event-dispatcher": ">=5.4.24 <8.0", + "symfony/finder": ">=5.4.24 <8.0", + "symfony/var-dumper": ">=5.4.24 <8.0", + "symfony/yaml": ">=5.4.24 <8.0" }, "conflict": { "codeception/lib-innerbrowser": "<3.1.3", @@ -592,17 +469,23 @@ }, "require-dev": { "codeception/lib-innerbrowser": "*@dev", - "codeception/lib-web": "^1.0", + "codeception/lib-web": "*@dev", "codeception/module-asserts": "*@dev", "codeception/module-cli": "*@dev", "codeception/module-db": "*@dev", "codeception/module-filesystem": "*@dev", "codeception/module-phpbrowser": "*@dev", + "codeception/module-webdriver": "*@dev", "codeception/util-universalframework": "*@dev", + "doctrine/orm": "^3.3", "ext-simplexml": "*", "jetbrains/phpstorm-attributes": "^1.0", - "symfony/dotenv": ">=4.4.24 <7.0", - "symfony/process": ">=4.4.24 <7.0", + "laravel-zero/phar-updater": "^1.4", + "php-webdriver/webdriver": "^1.15", + "stecman/symfony-console-completion": "^0.14", + "symfony/dotenv": ">=5.4.24 <8.0", + "symfony/error-handler": ">=5.4.24 <8.0", + "symfony/process": ">=5.4.24 <8.0", "vlucas/phpdotenv": "^5.1" }, "suggest": { @@ -618,6 +501,11 @@ "codecept" ], "type": "library", + "extra": { + "branch-alias": { + "dev-main": "5.2.x-dev" + } + }, "autoload": { "files": [ "functions.php" @@ -652,7 +540,7 @@ ], "support": { "issues": "https://github.com/Codeception/Codeception/issues", - "source": "https://github.com/Codeception/Codeception/tree/5.0.10" + "source": "https://github.com/Codeception/Codeception/tree/5.3.2" }, "funding": [ { @@ -660,20 +548,20 @@ "type": "open_collective" } ], - "time": "2023-03-14T07:21:10+00:00" + "time": "2025-05-26T07:47:39+00:00" }, { "name": "codeception/lib-asserts", - "version": "2.1.0", + "version": "2.2.0", "source": { "type": "git", "url": "https://github.com/Codeception/lib-asserts.git", - "reference": "b8c7dff552249e560879c682ba44a4b963af91bc" + "reference": "06750a60af3ebc66faab4313981accec1be4eefc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Codeception/lib-asserts/zipball/b8c7dff552249e560879c682ba44a4b963af91bc", - "reference": "b8c7dff552249e560879c682ba44a4b963af91bc", + "url": "https://api.github.com/repos/Codeception/lib-asserts/zipball/06750a60af3ebc66faab4313981accec1be4eefc", + "reference": "06750a60af3ebc66faab4313981accec1be4eefc", "shasum": "" }, "require": { @@ -712,36 +600,36 @@ ], "support": { "issues": "https://github.com/Codeception/lib-asserts/issues", - "source": "https://github.com/Codeception/lib-asserts/tree/2.1.0" + "source": "https://github.com/Codeception/lib-asserts/tree/2.2.0" }, - "time": "2023-02-10T18:36:23+00:00" + "time": "2025-03-10T20:41:33+00:00" }, { "name": "codeception/lib-web", - "version": "1.0.2", + "version": "1.0.7", "source": { "type": "git", "url": "https://github.com/Codeception/lib-web.git", - "reference": "f488ff9bc08c8985d43796db28da0bd18813bcae" + "reference": "1444ccc9b1d6721f3ced8703c8f4a9041b80df93" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Codeception/lib-web/zipball/f488ff9bc08c8985d43796db28da0bd18813bcae", - "reference": "f488ff9bc08c8985d43796db28da0bd18813bcae", + "url": "https://api.github.com/repos/Codeception/lib-web/zipball/1444ccc9b1d6721f3ced8703c8f4a9041b80df93", + "reference": "1444ccc9b1d6721f3ced8703c8f4a9041b80df93", "shasum": "" }, "require": { "ext-mbstring": "*", "guzzlehttp/psr7": "^2.0", - "php": "^8.0", - "symfony/css-selector": ">=4.4.24 <7.0" + "php": "^8.1", + "phpunit/phpunit": "^9.5 | ^10.0 | ^11.0 | ^12", + "symfony/css-selector": ">=4.4.24 <8.0" }, "conflict": { "codeception/codeception": "<5.0.0-alpha3" }, "require-dev": { - "php-webdriver/webdriver": "^1.12", - "phpunit/phpunit": "^9.5 | ^10.0" + "php-webdriver/webdriver": "^1.12" }, "type": "library", "autoload": { @@ -765,28 +653,28 @@ ], "support": { "issues": "https://github.com/Codeception/lib-web/issues", - "source": "https://github.com/Codeception/lib-web/tree/1.0.2" + "source": "https://github.com/Codeception/lib-web/tree/1.0.7" }, - "time": "2023-04-18T20:32:51+00:00" + "time": "2025-02-09T12:05:55+00:00" }, { "name": "codeception/module-asserts", - "version": "3.0.0", + "version": "3.2.0", "source": { "type": "git", "url": "https://github.com/Codeception/module-asserts.git", - "reference": "1b6b150b30586c3614e7e5761b31834ed7968603" + "reference": "eb1f7c980423888f3def5116635754ae4a75bd47" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Codeception/module-asserts/zipball/1b6b150b30586c3614e7e5761b31834ed7968603", - "reference": "1b6b150b30586c3614e7e5761b31834ed7968603", + "url": "https://api.github.com/repos/Codeception/module-asserts/zipball/eb1f7c980423888f3def5116635754ae4a75bd47", + "reference": "eb1f7c980423888f3def5116635754ae4a75bd47", "shasum": "" }, "require": { "codeception/codeception": "*@dev", - "codeception/lib-asserts": "^2.0", - "php": "^8.0" + "codeception/lib-asserts": "^2.2", + "php": "^8.2" }, "conflict": { "codeception/codeception": "<5.0" @@ -822,80 +710,33 @@ ], "support": { "issues": "https://github.com/Codeception/module-asserts/issues", - "source": "https://github.com/Codeception/module-asserts/tree/3.0.0" - }, - "time": "2022-02-16T19:48:08+00:00" - }, - { - "name": "codeception/module-sequence", - "version": "3.0.0", - "source": { - "type": "git", - "url": "https://github.com/Codeception/module-sequence.git", - "reference": "9738e2eb06035a0975171a0aa3fce00d284b4dfb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Codeception/module-sequence/zipball/9738e2eb06035a0975171a0aa3fce00d284b4dfb", - "reference": "9738e2eb06035a0975171a0aa3fce00d284b4dfb", - "shasum": "" - }, - "require": { - "codeception/codeception": "^5.0", - "php": "^8.0" - }, - "type": "library", - "autoload": { - "files": [ - "src/Codeception/Util/sq.php" - ], - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Bodnarchuk" - } - ], - "description": "Sequence module for Codeception", - "homepage": "https://codeception.com/", - "keywords": [ - "codeception" - ], - "support": { - "issues": "https://github.com/Codeception/module-sequence/issues", - "source": "https://github.com/Codeception/module-sequence/tree/3.0.0" + "source": "https://github.com/Codeception/module-asserts/tree/3.2.0" }, - "time": "2022-05-31T05:45:36+00:00" + "time": "2025-05-02T02:33:11+00:00" }, { "name": "codeception/module-webdriver", - "version": "3.2.1", + "version": "4.0.3", "source": { "type": "git", "url": "https://github.com/Codeception/module-webdriver.git", - "reference": "59b6fe426dddbe889c23593f8698c52e08bba6e9" + "reference": "551d214ddd57a9539acf1123d7c56ec82b1004df" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Codeception/module-webdriver/zipball/59b6fe426dddbe889c23593f8698c52e08bba6e9", - "reference": "59b6fe426dddbe889c23593f8698c52e08bba6e9", + "url": "https://api.github.com/repos/Codeception/module-webdriver/zipball/551d214ddd57a9539acf1123d7c56ec82b1004df", + "reference": "551d214ddd57a9539acf1123d7c56ec82b1004df", "shasum": "" }, "require": { - "codeception/codeception": "^5.0.0-RC2", + "codeception/codeception": "^5.0.8", "codeception/lib-web": "^1.0.1", "codeception/stub": "^4.0", "ext-json": "*", "ext-mbstring": "*", - "php": "^8.0", - "php-webdriver/webdriver": "^1.8.0", - "phpunit/phpunit": "^9.5" + "php": "^8.1", + "php-webdriver/webdriver": "^1.14.0", + "phpunit/phpunit": "^10.0 || ^11.0 || ^12.0" }, "suggest": { "codeception/phpbuiltinserver": "Start and stop PHP built-in web server for your tests" @@ -930,27 +771,27 @@ ], "support": { "issues": "https://github.com/Codeception/module-webdriver/issues", - "source": "https://github.com/Codeception/module-webdriver/tree/3.2.1" + "source": "https://github.com/Codeception/module-webdriver/tree/4.0.3" }, - "time": "2023-02-03T21:46:32+00:00" + "time": "2025-02-14T07:10:05+00:00" }, { "name": "codeception/stub", - "version": "4.1.0", + "version": "4.1.4", "source": { "type": "git", "url": "https://github.com/Codeception/Stub.git", - "reference": "58751aed08a68ae960a952fd3fe74ee9a56cdb1b" + "reference": "6ce453073a0c220b254dd7f4383645615e4071c3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Codeception/Stub/zipball/58751aed08a68ae960a952fd3fe74ee9a56cdb1b", - "reference": "58751aed08a68ae960a952fd3fe74ee9a56cdb1b", + "url": "https://api.github.com/repos/Codeception/Stub/zipball/6ce453073a0c220b254dd7f4383645615e4071c3", + "reference": "6ce453073a0c220b254dd7f4383645615e4071c3", "shasum": "" }, "require": { "php": "^7.4 | ^8.0", - "phpunit/phpunit": "^8.4 | ^9.0 | ^10.0 | 10.0.x-dev" + "phpunit/phpunit": "^8.4 | ^9.0 | ^10.0 | ^11 | ^12" }, "conflict": { "codeception/codeception": "<5.0.6" @@ -971,34 +812,34 @@ "description": "Flexible Stub wrapper for PHPUnit's Mock Builder", "support": { "issues": "https://github.com/Codeception/Stub/issues", - "source": "https://github.com/Codeception/Stub/tree/4.1.0" + "source": "https://github.com/Codeception/Stub/tree/4.1.4" }, - "time": "2022-12-27T18:41:43+00:00" + "time": "2025-02-14T06:56:33+00:00" }, { "name": "composer/ca-bundle", - "version": "1.3.5", + "version": "1.5.7", "source": { "type": "git", "url": "https://github.com/composer/ca-bundle.git", - "reference": "74780ccf8c19d6acb8d65c5f39cd72110e132bbd" + "reference": "d665d22c417056996c59019579f1967dfe5c1e82" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/ca-bundle/zipball/74780ccf8c19d6acb8d65c5f39cd72110e132bbd", - "reference": "74780ccf8c19d6acb8d65c5f39cd72110e132bbd", + "url": "https://api.github.com/repos/composer/ca-bundle/zipball/d665d22c417056996c59019579f1967dfe5c1e82", + "reference": "d665d22c417056996c59019579f1967dfe5c1e82", "shasum": "" }, "require": { "ext-openssl": "*", "ext-pcre": "*", - "php": "^5.3.2 || ^7.0 || ^8.0" + "php": "^7.2 || ^8.0" }, "require-dev": { - "phpstan/phpstan": "^0.12.55", - "psr/log": "^1.0", - "symfony/phpunit-bridge": "^4.2 || ^5", - "symfony/process": "^2.5 || ^3.0 || ^4.0 || ^5.0 || ^6.0" + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^8 || ^9", + "psr/log": "^1.0 || ^2.0 || ^3.0", + "symfony/process": "^4.0 || ^5.0 || ^6.0 || ^7.0" }, "type": "library", "extra": { @@ -1033,7 +874,7 @@ "support": { "irc": "irc://irc.freenode.org/composer", "issues": "https://github.com/composer/ca-bundle/issues", - "source": "https://github.com/composer/ca-bundle/tree/1.3.5" + "source": "https://github.com/composer/ca-bundle/tree/1.5.7" }, "funding": [ { @@ -1049,34 +890,34 @@ "type": "tidelift" } ], - "time": "2023-01-11T08:27:00+00:00" + "time": "2025-05-26T15:08:54+00:00" }, { "name": "composer/class-map-generator", - "version": "1.0.0", + "version": "1.6.1", "source": { "type": "git", "url": "https://github.com/composer/class-map-generator.git", - "reference": "1e1cb2b791facb2dfe32932a7718cf2571187513" + "reference": "134b705ddb0025d397d8318a75825fe3c9d1da34" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/class-map-generator/zipball/1e1cb2b791facb2dfe32932a7718cf2571187513", - "reference": "1e1cb2b791facb2dfe32932a7718cf2571187513", + "url": "https://api.github.com/repos/composer/class-map-generator/zipball/134b705ddb0025d397d8318a75825fe3c9d1da34", + "reference": "134b705ddb0025d397d8318a75825fe3c9d1da34", "shasum": "" }, "require": { - "composer/pcre": "^2 || ^3", + "composer/pcre": "^2.1 || ^3.1", "php": "^7.2 || ^8.0", - "symfony/finder": "^4.4 || ^5.3 || ^6" + "symfony/finder": "^4.4 || ^5.3 || ^6 || ^7" }, "require-dev": { - "phpstan/phpstan": "^1.6", - "phpstan/phpstan-deprecation-rules": "^1", - "phpstan/phpstan-phpunit": "^1", - "phpstan/phpstan-strict-rules": "^1.1", - "symfony/filesystem": "^5.4 || ^6", - "symfony/phpunit-bridge": "^5" + "phpstan/phpstan": "^1.12 || ^2", + "phpstan/phpstan-deprecation-rules": "^1 || ^2", + "phpstan/phpstan-phpunit": "^1 || ^2", + "phpstan/phpstan-strict-rules": "^1.1 || ^2", + "phpunit/phpunit": "^8", + "symfony/filesystem": "^5.4 || ^6" }, "type": "library", "extra": { @@ -1106,7 +947,7 @@ ], "support": { "issues": "https://github.com/composer/class-map-generator/issues", - "source": "https://github.com/composer/class-map-generator/tree/1.0.0" + "source": "https://github.com/composer/class-map-generator/tree/1.6.1" }, "funding": [ { @@ -1122,52 +963,52 @@ "type": "tidelift" } ], - "time": "2022-06-19T11:31:27+00:00" + "time": "2025-03-24T13:50:44+00:00" }, { "name": "composer/composer", - "version": "2.5.5", + "version": "2.8.9", "source": { "type": "git", "url": "https://github.com/composer/composer.git", - "reference": "c7cffaad16a60636a776017eac5bd8cd0095c32f" + "reference": "b4e6bff2db7ce756ddb77ecee958a0f41f42bd9d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/composer/zipball/c7cffaad16a60636a776017eac5bd8cd0095c32f", - "reference": "c7cffaad16a60636a776017eac5bd8cd0095c32f", + "url": "https://api.github.com/repos/composer/composer/zipball/b4e6bff2db7ce756ddb77ecee958a0f41f42bd9d", + "reference": "b4e6bff2db7ce756ddb77ecee958a0f41f42bd9d", "shasum": "" }, "require": { - "composer/ca-bundle": "^1.0", - "composer/class-map-generator": "^1.0", + "composer/ca-bundle": "^1.5", + "composer/class-map-generator": "^1.4.0", "composer/metadata-minifier": "^1.0", - "composer/pcre": "^2.1 || ^3.1", - "composer/semver": "^3.0", + "composer/pcre": "^2.2 || ^3.2", + "composer/semver": "^3.3", "composer/spdx-licenses": "^1.5.7", "composer/xdebug-handler": "^2.0.2 || ^3.0.3", - "justinrainbow/json-schema": "^5.2.11", + "justinrainbow/json-schema": "^6.3.1", "php": "^7.2.5 || ^8.0", "psr/log": "^1.0 || ^2.0 || ^3.0", - "react/promise": "^2.8", + "react/promise": "^2.11 || ^3.2", "seld/jsonlint": "^1.4", "seld/phar-utils": "^1.2", "seld/signal-handler": "^2.0", - "symfony/console": "^5.4.11 || ^6.0.11", - "symfony/filesystem": "^5.4 || ^6.0", - "symfony/finder": "^5.4 || ^6.0", + "symfony/console": "^5.4.35 || ^6.3.12 || ^7.0.3", + "symfony/filesystem": "^5.4.35 || ^6.3.12 || ^7.0.3", + "symfony/finder": "^5.4.35 || ^6.3.12 || ^7.0.3", "symfony/polyfill-php73": "^1.24", "symfony/polyfill-php80": "^1.24", "symfony/polyfill-php81": "^1.24", - "symfony/process": "^5.4 || ^6.0" + "symfony/process": "^5.4.35 || ^6.3.12 || ^7.0.3" }, "require-dev": { - "phpstan/phpstan": "^1.9.3", - "phpstan/phpstan-deprecation-rules": "^1", - "phpstan/phpstan-phpunit": "^1.0", - "phpstan/phpstan-strict-rules": "^1", - "phpstan/phpstan-symfony": "^1.2.10", - "symfony/phpunit-bridge": "^6.0" + "phpstan/phpstan": "^1.11.8", + "phpstan/phpstan-deprecation-rules": "^1.2.0", + "phpstan/phpstan-phpunit": "^1.4.0", + "phpstan/phpstan-strict-rules": "^1.6.0", + "phpstan/phpstan-symfony": "^1.4.0", + "symfony/phpunit-bridge": "^6.4.3 || ^7.0.1" }, "suggest": { "ext-openssl": "Enabling the openssl extension allows you to access https URLs for repositories and packages", @@ -1179,18 +1020,18 @@ ], "type": "library", "extra": { - "branch-alias": { - "dev-main": "2.5-dev" - }, "phpstan": { "includes": [ "phpstan/rules.neon" ] + }, + "branch-alias": { + "dev-main": "2.8-dev" } }, "autoload": { "psr-4": { - "Composer\\": "src/Composer" + "Composer\\": "src/Composer/" } }, "notification-url": "https://packagist.org/downloads/", @@ -1219,7 +1060,8 @@ "support": { "irc": "ircs://irc.libera.chat:6697/composer", "issues": "https://github.com/composer/composer/issues", - "source": "https://github.com/composer/composer/tree/2.5.5" + "security": "https://github.com/composer/composer/security/policy", + "source": "https://github.com/composer/composer/tree/2.8.9" }, "funding": [ { @@ -1235,7 +1077,7 @@ "type": "tidelift" } ], - "time": "2023-03-21T10:50:05+00:00" + "time": "2025-05-13T12:01:37+00:00" }, { "name": "composer/metadata-minifier", @@ -1308,28 +1150,36 @@ }, { "name": "composer/pcre", - "version": "3.1.0", + "version": "3.3.2", "source": { "type": "git", "url": "https://github.com/composer/pcre.git", - "reference": "4bff79ddd77851fe3cdd11616ed3f92841ba5bd2" + "reference": "b2bed4734f0cc156ee1fe9c0da2550420d99a21e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/pcre/zipball/4bff79ddd77851fe3cdd11616ed3f92841ba5bd2", - "reference": "4bff79ddd77851fe3cdd11616ed3f92841ba5bd2", + "url": "https://api.github.com/repos/composer/pcre/zipball/b2bed4734f0cc156ee1fe9c0da2550420d99a21e", + "reference": "b2bed4734f0cc156ee1fe9c0da2550420d99a21e", "shasum": "" }, "require": { "php": "^7.4 || ^8.0" }, + "conflict": { + "phpstan/phpstan": "<1.11.10" + }, "require-dev": { - "phpstan/phpstan": "^1.3", - "phpstan/phpstan-strict-rules": "^1.1", - "symfony/phpunit-bridge": "^5" + "phpstan/phpstan": "^1.12 || ^2", + "phpstan/phpstan-strict-rules": "^1 || ^2", + "phpunit/phpunit": "^8 || ^9" }, "type": "library", "extra": { + "phpstan": { + "includes": [ + "extension.neon" + ] + }, "branch-alias": { "dev-main": "3.x-dev" } @@ -1359,7 +1209,7 @@ ], "support": { "issues": "https://github.com/composer/pcre/issues", - "source": "https://github.com/composer/pcre/tree/3.1.0" + "source": "https://github.com/composer/pcre/tree/3.3.2" }, "funding": [ { @@ -1375,28 +1225,28 @@ "type": "tidelift" } ], - "time": "2022-11-17T09:50:14+00:00" + "time": "2024-11-12T16:29:46+00:00" }, { "name": "composer/semver", - "version": "3.3.2", + "version": "3.4.3", "source": { "type": "git", "url": "https://github.com/composer/semver.git", - "reference": "3953f23262f2bff1919fc82183ad9acb13ff62c9" + "reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/semver/zipball/3953f23262f2bff1919fc82183ad9acb13ff62c9", - "reference": "3953f23262f2bff1919fc82183ad9acb13ff62c9", + "url": "https://api.github.com/repos/composer/semver/zipball/4313d26ada5e0c4edfbd1dc481a92ff7bff91f12", + "reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12", "shasum": "" }, "require": { "php": "^5.3.2 || ^7.0 || ^8.0" }, "require-dev": { - "phpstan/phpstan": "^1.4", - "symfony/phpunit-bridge": "^4.2 || ^5" + "phpstan/phpstan": "^1.11", + "symfony/phpunit-bridge": "^3 || ^7" }, "type": "library", "extra": { @@ -1438,9 +1288,9 @@ "versioning" ], "support": { - "irc": "irc://irc.freenode.org/composer", + "irc": "ircs://irc.libera.chat:6697/composer", "issues": "https://github.com/composer/semver/issues", - "source": "https://github.com/composer/semver/tree/3.3.2" + "source": "https://github.com/composer/semver/tree/3.4.3" }, "funding": [ { @@ -1456,28 +1306,28 @@ "type": "tidelift" } ], - "time": "2022-04-01T19:23:25+00:00" + "time": "2024-09-19T14:15:21+00:00" }, { "name": "composer/spdx-licenses", - "version": "1.5.7", + "version": "1.5.9", "source": { "type": "git", "url": "https://github.com/composer/spdx-licenses.git", - "reference": "c848241796da2abf65837d51dce1fae55a960149" + "reference": "edf364cefe8c43501e21e88110aac10b284c3c9f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/spdx-licenses/zipball/c848241796da2abf65837d51dce1fae55a960149", - "reference": "c848241796da2abf65837d51dce1fae55a960149", + "url": "https://api.github.com/repos/composer/spdx-licenses/zipball/edf364cefe8c43501e21e88110aac10b284c3c9f", + "reference": "edf364cefe8c43501e21e88110aac10b284c3c9f", "shasum": "" }, "require": { "php": "^5.3.2 || ^7.0 || ^8.0" }, "require-dev": { - "phpstan/phpstan": "^0.12.55", - "symfony/phpunit-bridge": "^4.2 || ^5" + "phpstan/phpstan": "^1.11", + "symfony/phpunit-bridge": "^3 || ^7" }, "type": "library", "extra": { @@ -1518,9 +1368,9 @@ "validator" ], "support": { - "irc": "irc://irc.freenode.org/composer", + "irc": "ircs://irc.libera.chat:6697/composer", "issues": "https://github.com/composer/spdx-licenses/issues", - "source": "https://github.com/composer/spdx-licenses/tree/1.5.7" + "source": "https://github.com/composer/spdx-licenses/tree/1.5.9" }, "funding": [ { @@ -1536,20 +1386,20 @@ "type": "tidelift" } ], - "time": "2022-05-23T07:37:50+00:00" + "time": "2025-05-12T21:07:07+00:00" }, { "name": "composer/xdebug-handler", - "version": "3.0.3", + "version": "3.0.5", "source": { "type": "git", "url": "https://github.com/composer/xdebug-handler.git", - "reference": "ced299686f41dce890debac69273b47ffe98a40c" + "reference": "6c1925561632e83d60a44492e0b344cf48ab85ef" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/ced299686f41dce890debac69273b47ffe98a40c", - "reference": "ced299686f41dce890debac69273b47ffe98a40c", + "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/6c1925561632e83d60a44492e0b344cf48ab85ef", + "reference": "6c1925561632e83d60a44492e0b344cf48ab85ef", "shasum": "" }, "require": { @@ -1560,7 +1410,7 @@ "require-dev": { "phpstan/phpstan": "^1.0", "phpstan/phpstan-strict-rules": "^1.1", - "symfony/phpunit-bridge": "^6.0" + "phpunit/phpunit": "^8.5 || ^9.6 || ^10.5" }, "type": "library", "autoload": { @@ -1584,9 +1434,9 @@ "performance" ], "support": { - "irc": "irc://irc.freenode.org/composer", + "irc": "ircs://irc.libera.chat:6697/composer", "issues": "https://github.com/composer/xdebug-handler/issues", - "source": "https://github.com/composer/xdebug-handler/tree/3.0.3" + "source": "https://github.com/composer/xdebug-handler/tree/3.0.5" }, "funding": [ { @@ -1602,23 +1452,24 @@ "type": "tidelift" } ], - "time": "2022-02-25T21:32:43+00:00" + "time": "2024-05-06T16:37:16+00:00" }, { "name": "csharpru/vault-php", - "version": "4.3.1", + "version": "4.4.1", "source": { "type": "git", "url": "https://github.com/CSharpRU/vault-php.git", - "reference": "918bfffe85d3b290e1bf667b5f14e521fdc0063c" + "reference": "2064cd7a377b066c6d256eef1d7f4f4ecbb927f1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/CSharpRU/vault-php/zipball/918bfffe85d3b290e1bf667b5f14e521fdc0063c", - "reference": "918bfffe85d3b290e1bf667b5f14e521fdc0063c", + "url": "https://api.github.com/repos/CSharpRU/vault-php/zipball/2064cd7a377b066c6d256eef1d7f4f4ecbb927f1", + "reference": "2064cd7a377b066c6d256eef1d7f4f4ecbb927f1", "shasum": "" }, "require": { + "aws/aws-sdk-php": "^3.0", "ext-json": "*", "php": "^7.2 || ^8.0", "psr/cache": "^1.0|^2.0|^3.0", @@ -1631,7 +1482,7 @@ "cache/array-adapter": "^1.0", "codeception/codeception": "^4.1", "codeception/module-asserts": "^1.3", - "laminas/laminas-diactoros": "^2.3", + "laminas/laminas-diactoros": "^2.3 || ^3.0", "php-vcr/php-vcr": "^1.5", "symfony/event-dispatcher": "<5.0" }, @@ -1662,22 +1513,22 @@ ], "support": { "issues": "https://github.com/CSharpRU/vault-php/issues", - "source": "https://github.com/CSharpRU/vault-php/tree/4.3.1" + "source": "https://github.com/CSharpRU/vault-php/tree/4.4.1" }, - "time": "2022-04-04T08:31:44+00:00" + "time": "2025-04-23T08:42:13+00:00" }, { "name": "doctrine/annotations", - "version": "2.0.1", + "version": "2.0.2", "source": { "type": "git", "url": "https://github.com/doctrine/annotations.git", - "reference": "e157ef3f3124bbf6fe7ce0ffd109e8a8ef284e7f" + "reference": "901c2ee5d26eb64ff43c47976e114bf00843acf7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/annotations/zipball/e157ef3f3124bbf6fe7ce0ffd109e8a8ef284e7f", - "reference": "e157ef3f3124bbf6fe7ce0ffd109e8a8ef284e7f", + "url": "https://api.github.com/repos/doctrine/annotations/zipball/901c2ee5d26eb64ff43c47976e114bf00843acf7", + "reference": "901c2ee5d26eb64ff43c47976e114bf00843acf7", "shasum": "" }, "require": { @@ -1689,10 +1540,10 @@ "require-dev": { "doctrine/cache": "^2.0", "doctrine/coding-standard": "^10", - "phpstan/phpstan": "^1.8.0", + "phpstan/phpstan": "^1.10.28", "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "symfony/cache": "^5.4 || ^6", - "vimeo/psalm": "^4.10" + "symfony/cache": "^5.4 || ^6.4 || ^7", + "vimeo/psalm": "^4.30 || ^5.14" }, "suggest": { "php": "PHP 8.0 or higher comes with attributes, a native replacement for annotations" @@ -1738,84 +1589,38 @@ ], "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": "doctrine/deprecations", - "version": "v1.0.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/deprecations.git", - "reference": "0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/deprecations/zipball/0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de", - "reference": "0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de", - "shasum": "" - }, - "require": { - "php": "^7.1|^8.0" - }, - "require-dev": { - "doctrine/coding-standard": "^9", - "phpunit/phpunit": "^7.5|^8.5|^9.5", - "psr/log": "^1|^2|^3" - }, - "suggest": { - "psr/log": "Allows logging deprecations via PSR-3 logger implementation" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Deprecations\\": "lib/Doctrine/Deprecations" - } + "source": "https://github.com/doctrine/annotations/tree/2.0.2" }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.", - "homepage": "https://www.doctrine-project.org/", - "support": { - "issues": "https://github.com/doctrine/deprecations/issues", - "source": "https://github.com/doctrine/deprecations/tree/v1.0.0" - }, - "time": "2022-05-02T15:47:09+00:00" + "time": "2024-09-05T10:17:24+00:00" }, { - "name": "doctrine/instantiator", - "version": "1.5.0", + "name": "doctrine/lexer", + "version": "3.0.1", "source": { "type": "git", - "url": "https://github.com/doctrine/instantiator.git", - "reference": "0a0fa9780f5d4e507415a065172d26a98d02047b" + "url": "https://github.com/doctrine/lexer.git", + "reference": "31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/0a0fa9780f5d4e507415a065172d26a98d02047b", - "reference": "0a0fa9780f5d4e507415a065172d26a98d02047b", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd", + "reference": "31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd", "shasum": "" }, "require": { - "php": "^7.1 || ^8.0" + "php": "^8.1" }, "require-dev": { - "doctrine/coding-standard": "^9 || ^11", - "ext-pdo": "*", - "ext-phar": "*", - "phpbench/phpbench": "^0.16 || ^1", - "phpstan/phpstan": "^1.4", - "phpstan/phpstan-phpunit": "^1", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "vimeo/psalm": "^4.30 || ^5.4" + "doctrine/coding-standard": "^12", + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^10.5", + "psalm/plugin-phpunit": "^0.18.3", + "vimeo/psalm": "^5.21" }, "type": "library", "autoload": { "psr-4": { - "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" + "Doctrine\\Common\\Lexer\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -1824,20 +1629,30 @@ ], "authors": [ { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com", - "homepage": "https://ocramius.github.io/" + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" } ], - "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", - "homepage": "https://www.doctrine-project.org/projects/instantiator.html", + "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": [ - "constructor", - "instantiate" + "annotations", + "docblock", + "lexer", + "parser", + "php" ], "support": { - "issues": "https://github.com/doctrine/instantiator/issues", - "source": "https://github.com/doctrine/instantiator/tree/1.5.0" + "issues": "https://github.com/doctrine/lexer/issues", + "source": "https://github.com/doctrine/lexer/tree/3.0.1" }, "funding": [ { @@ -1849,120 +1664,43 @@ "type": "patreon" }, { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer", "type": "tidelift" } ], - "time": "2022-12-30T00:15:36+00:00" + "time": "2024-02-05T11:56:58+00:00" }, { - "name": "doctrine/lexer", - "version": "2.1.0", + "name": "guzzlehttp/guzzle", + "version": "7.9.3", "source": { "type": "git", - "url": "https://github.com/doctrine/lexer.git", - "reference": "39ab8fcf5a51ce4b85ca97c7a7d033eb12831124" + "url": "https://github.com/guzzle/guzzle.git", + "reference": "7b2f29fe81dc4da0ca0ea7d42107a0845946ea77" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/lexer/zipball/39ab8fcf5a51ce4b85ca97c7a7d033eb12831124", - "reference": "39ab8fcf5a51ce4b85ca97c7a7d033eb12831124", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/7b2f29fe81dc4da0ca0ea7d42107a0845946ea77", + "reference": "7b2f29fe81dc4da0ca0ea7d42107a0845946ea77", "shasum": "" }, "require": { - "doctrine/deprecations": "^1.0", - "php": "^7.1 || ^8.0" + "ext-json": "*", + "guzzlehttp/promises": "^1.5.3 || ^2.0.3", + "guzzlehttp/psr7": "^2.7.0", + "php": "^7.2.5 || ^8.0", + "psr/http-client": "^1.0", + "symfony/deprecation-contracts": "^2.2 || ^3.0" }, - "require-dev": { - "doctrine/coding-standard": "^9 || ^10", - "phpstan/phpstan": "^1.3", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "psalm/plugin-phpunit": "^0.18.3", - "vimeo/psalm": "^4.11 || ^5.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Common\\Lexer\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - } - ], - "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", - "homepage": "https://www.doctrine-project.org/projects/lexer.html", - "keywords": [ - "annotations", - "docblock", - "lexer", - "parser", - "php" - ], - "support": { - "issues": "https://github.com/doctrine/lexer/issues", - "source": "https://github.com/doctrine/lexer/tree/2.1.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": "2022-12-14T08:49:07+00:00" - }, - { - "name": "guzzlehttp/guzzle", - "version": "7.5.1", - "source": { - "type": "git", - "url": "https://github.com/guzzle/guzzle.git", - "reference": "b964ca597e86b752cd994f27293e9fa6b6a95ed9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/b964ca597e86b752cd994f27293e9fa6b6a95ed9", - "reference": "b964ca597e86b752cd994f27293e9fa6b6a95ed9", - "shasum": "" - }, - "require": { - "ext-json": "*", - "guzzlehttp/promises": "^1.5", - "guzzlehttp/psr7": "^1.9.1 || ^2.4.5", - "php": "^7.2.5 || ^8.0", - "psr/http-client": "^1.0", - "symfony/deprecation-contracts": "^2.2 || ^3.0" - }, - "provide": { - "psr/http-client-implementation": "1.0" + "provide": { + "psr/http-client-implementation": "1.0" }, "require-dev": { - "bamarni/composer-bin-plugin": "^1.8.1", + "bamarni/composer-bin-plugin": "^1.8.2", "ext-curl": "*", - "php-http/client-integration-tests": "^3.0", - "phpunit/phpunit": "^8.5.29 || ^9.5.23", + "guzzle/client-integration-tests": "3.0.2", + "php-http/message-factory": "^1.1", + "phpunit/phpunit": "^8.5.39 || ^9.6.20", "psr/log": "^1.1 || ^2.0 || ^3.0" }, "suggest": { @@ -1975,9 +1713,6 @@ "bamarni-bin": { "bin-links": true, "forward-command": false - }, - "branch-alias": { - "dev-master": "7.5-dev" } }, "autoload": { @@ -2043,7 +1778,7 @@ ], "support": { "issues": "https://github.com/guzzle/guzzle/issues", - "source": "https://github.com/guzzle/guzzle/tree/7.5.1" + "source": "https://github.com/guzzle/guzzle/tree/7.9.3" }, "funding": [ { @@ -2059,38 +1794,37 @@ "type": "tidelift" } ], - "time": "2023-04-17T16:30:08+00:00" + "time": "2025-03-27T13:37:11+00:00" }, { "name": "guzzlehttp/promises", - "version": "1.5.2", + "version": "2.2.0", "source": { "type": "git", "url": "https://github.com/guzzle/promises.git", - "reference": "b94b2807d85443f9719887892882d0329d1e2598" + "reference": "7c69f28996b0a6920945dd20b3857e499d9ca96c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/b94b2807d85443f9719887892882d0329d1e2598", - "reference": "b94b2807d85443f9719887892882d0329d1e2598", + "url": "https://api.github.com/repos/guzzle/promises/zipball/7c69f28996b0a6920945dd20b3857e499d9ca96c", + "reference": "7c69f28996b0a6920945dd20b3857e499d9ca96c", "shasum": "" }, "require": { - "php": ">=5.5" + "php": "^7.2.5 || ^8.0" }, "require-dev": { - "symfony/phpunit-bridge": "^4.4 || ^5.1" + "bamarni/composer-bin-plugin": "^1.8.2", + "phpunit/phpunit": "^8.5.39 || ^9.6.20" }, "type": "library", "extra": { - "branch-alias": { - "dev-master": "1.5-dev" + "bamarni-bin": { + "bin-links": true, + "forward-command": false } }, "autoload": { - "files": [ - "src/functions_include.php" - ], "psr-4": { "GuzzleHttp\\Promise\\": "src/" } @@ -2127,7 +1861,7 @@ ], "support": { "issues": "https://github.com/guzzle/promises/issues", - "source": "https://github.com/guzzle/promises/tree/1.5.2" + "source": "https://github.com/guzzle/promises/tree/2.0.4" }, "funding": [ { @@ -2143,20 +1877,20 @@ "type": "tidelift" } ], - "time": "2022-08-28T14:55:35+00:00" + "time": "2025-03-27T13:27:01+00:00" }, { "name": "guzzlehttp/psr7", - "version": "2.5.0", + "version": "2.7.1", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "b635f279edd83fc275f822a1188157ffea568ff6" + "reference": "c2270caaabe631b3b44c85f99e5a04bbb8060d16" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/b635f279edd83fc275f822a1188157ffea568ff6", - "reference": "b635f279edd83fc275f822a1188157ffea568ff6", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/c2270caaabe631b3b44c85f99e5a04bbb8060d16", + "reference": "c2270caaabe631b3b44c85f99e5a04bbb8060d16", "shasum": "" }, "require": { @@ -2170,9 +1904,9 @@ "psr/http-message-implementation": "1.0" }, "require-dev": { - "bamarni/composer-bin-plugin": "^1.8.1", - "http-interop/http-factory-tests": "^0.9", - "phpunit/phpunit": "^8.5.29 || ^9.5.23" + "bamarni/composer-bin-plugin": "^1.8.2", + "http-interop/http-factory-tests": "0.9.0", + "phpunit/phpunit": "^8.5.39 || ^9.6.20" }, "suggest": { "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" @@ -2243,7 +1977,7 @@ ], "support": { "issues": "https://github.com/guzzle/psr7/issues", - "source": "https://github.com/guzzle/psr7/tree/2.5.0" + "source": "https://github.com/guzzle/psr7/tree/2.7.1" }, "funding": [ { @@ -2259,29 +1993,34 @@ "type": "tidelift" } ], - "time": "2023-04-17T16:11:26+00:00" + "time": "2025-03-27T12:30:47+00:00" }, { "name": "justinrainbow/json-schema", - "version": "5.2.12", + "version": "6.4.2", "source": { "type": "git", - "url": "https://github.com/justinrainbow/json-schema.git", - "reference": "ad87d5a5ca981228e0e205c2bc7dfb8e24559b60" + "url": "https://github.com/jsonrainbow/json-schema.git", + "reference": "ce1fd2d47799bb60668643bc6220f6278a4c1d02" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/ad87d5a5ca981228e0e205c2bc7dfb8e24559b60", - "reference": "ad87d5a5ca981228e0e205c2bc7dfb8e24559b60", + "url": "https://api.github.com/repos/jsonrainbow/json-schema/zipball/ce1fd2d47799bb60668643bc6220f6278a4c1d02", + "reference": "ce1fd2d47799bb60668643bc6220f6278a4c1d02", "shasum": "" }, "require": { - "php": ">=5.3.3" + "ext-json": "*", + "marc-mabe/php-enum": "^4.0", + "php": "^7.2 || ^8.0" }, "require-dev": { - "friendsofphp/php-cs-fixer": "~2.2.20||~2.15.1", + "friendsofphp/php-cs-fixer": "3.3.0", "json-schema/json-schema-test-suite": "1.2.0", - "phpunit/phpunit": "^4.8.35" + "marc-mabe/php-enum-phpstan": "^2.0", + "phpspec/prophecy": "^1.19", + "phpstan/phpstan": "^1.12", + "phpunit/phpunit": "^8.5" }, "bin": [ "bin/validate-json" @@ -2289,7 +2028,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0.x-dev" + "dev-master": "6.x-dev" } }, "autoload": { @@ -2320,60 +2059,60 @@ } ], "description": "A library to validate a json schema.", - "homepage": "https://github.com/justinrainbow/json-schema", + "homepage": "https://github.com/jsonrainbow/json-schema", "keywords": [ "json", "schema" ], "support": { - "issues": "https://github.com/justinrainbow/json-schema/issues", - "source": "https://github.com/justinrainbow/json-schema/tree/5.2.12" + "issues": "https://github.com/jsonrainbow/json-schema/issues", + "source": "https://github.com/jsonrainbow/json-schema/tree/6.4.2" }, - "time": "2022-04-13T08:02:27+00:00" + "time": "2025-06-03T18:27:04+00:00" }, { "name": "laminas/laminas-diactoros", - "version": "2.25.2", + "version": "3.6.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-diactoros.git", - "reference": "9f3f4bf5b99c9538b6f1dbcc20f6fec357914f9e" + "reference": "b068eac123f21c0e592de41deeb7403b88e0a89f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-diactoros/zipball/9f3f4bf5b99c9538b6f1dbcc20f6fec357914f9e", - "reference": "9f3f4bf5b99c9538b6f1dbcc20f6fec357914f9e", + "url": "https://api.github.com/repos/laminas/laminas-diactoros/zipball/b068eac123f21c0e592de41deeb7403b88e0a89f", + "reference": "b068eac123f21c0e592de41deeb7403b88e0a89f", "shasum": "" }, "require": { - "php": "~8.0.0 || ~8.1.0 || ~8.2.0", - "psr/http-factory": "^1.0", - "psr/http-message": "^1.1" + "php": "~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0", + "psr/http-factory": "^1.1", + "psr/http-message": "^1.1 || ^2.0" }, "conflict": { - "zendframework/zend-diactoros": "*" + "amphp/amp": "<2.6.4" }, "provide": { - "psr/http-factory-implementation": "1.0", - "psr/http-message-implementation": "1.0" + "psr/http-factory-implementation": "^1.0", + "psr/http-message-implementation": "^1.1 || ^2.0" }, "require-dev": { "ext-curl": "*", "ext-dom": "*", "ext-gd": "*", "ext-libxml": "*", - "http-interop/http-factory-tests": "^0.9.0", - "laminas/laminas-coding-standard": "^2.5", - "php-http/psr7-integration-tests": "^1.2", - "phpunit/phpunit": "^9.5.28", - "psalm/plugin-phpunit": "^0.18.4", - "vimeo/psalm": "^5.6" + "http-interop/http-factory-tests": "^2.2.0", + "laminas/laminas-coding-standard": "~3.0.0", + "php-http/psr7-integration-tests": "^1.4.0", + "phpunit/phpunit": "^10.5.36", + "psalm/plugin-phpunit": "^0.19.0", + "vimeo/psalm": "^5.26.1" }, "type": "library", "extra": { "laminas": { - "config-provider": "Laminas\\Diactoros\\ConfigProvider", - "module": "Laminas\\Diactoros" + "module": "Laminas\\Diactoros", + "config-provider": "Laminas\\Diactoros\\ConfigProvider" } }, "autoload": { @@ -2382,18 +2121,9 @@ "src/functions/marshal_headers_from_sapi.php", "src/functions/marshal_method_from_sapi.php", "src/functions/marshal_protocol_version_from_sapi.php", - "src/functions/marshal_uri_from_sapi.php", "src/functions/normalize_server.php", "src/functions/normalize_uploaded_files.php", - "src/functions/parse_cookie_header.php", - "src/functions/create_uploaded_file.legacy.php", - "src/functions/marshal_headers_from_sapi.legacy.php", - "src/functions/marshal_method_from_sapi.legacy.php", - "src/functions/marshal_protocol_version_from_sapi.legacy.php", - "src/functions/marshal_uri_from_sapi.legacy.php", - "src/functions/normalize_server.legacy.php", - "src/functions/normalize_uploaded_files.legacy.php", - "src/functions/parse_cookie_header.legacy.php" + "src/functions/parse_cookie_header.php" ], "psr-4": { "Laminas\\Diactoros\\": "src/" @@ -2426,46 +2156,120 @@ "type": "community_bridge" } ], - "time": "2023-04-17T15:44:17+00:00" + "time": "2025-05-05T16:03:34+00:00" + }, + { + "name": "marc-mabe/php-enum", + "version": "v4.7.1", + "source": { + "type": "git", + "url": "https://github.com/marc-mabe/php-enum.git", + "reference": "7159809e5cfa041dca28e61f7f7ae58063aae8ed" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/marc-mabe/php-enum/zipball/7159809e5cfa041dca28e61f7f7ae58063aae8ed", + "reference": "7159809e5cfa041dca28e61f7f7ae58063aae8ed", + "shasum": "" + }, + "require": { + "ext-reflection": "*", + "php": "^7.1 | ^8.0" + }, + "require-dev": { + "phpbench/phpbench": "^0.16.10 || ^1.0.4", + "phpstan/phpstan": "^1.3.1", + "phpunit/phpunit": "^7.5.20 | ^8.5.22 | ^9.5.11", + "vimeo/psalm": "^4.17.0 | ^5.26.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-3.x": "3.2-dev", + "dev-master": "4.7-dev" + } + }, + "autoload": { + "psr-4": { + "MabeEnum\\": "src/" + }, + "classmap": [ + "stubs/Stringable.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Marc Bennewitz", + "email": "dev@mabe.berlin", + "homepage": "https://mabe.berlin/", + "role": "Lead" + } + ], + "description": "Simple and fast implementation of enumerations with native PHP", + "homepage": "https://github.com/marc-mabe/php-enum", + "keywords": [ + "enum", + "enum-map", + "enum-set", + "enumeration", + "enumerator", + "enummap", + "enumset", + "map", + "set", + "type", + "type-hint", + "typehint" + ], + "support": { + "issues": "https://github.com/marc-mabe/php-enum/issues", + "source": "https://github.com/marc-mabe/php-enum/tree/v4.7.1" + }, + "time": "2024-11-28T04:54:44+00:00" }, { "name": "monolog/monolog", - "version": "2.9.1", + "version": "3.9.0", "source": { "type": "git", "url": "https://github.com/Seldaek/monolog.git", - "reference": "f259e2b15fb95494c83f52d3caad003bbf5ffaa1" + "reference": "10d85740180ecba7896c87e06a166e0c95a0e3b6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/f259e2b15fb95494c83f52d3caad003bbf5ffaa1", - "reference": "f259e2b15fb95494c83f52d3caad003bbf5ffaa1", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/10d85740180ecba7896c87e06a166e0c95a0e3b6", + "reference": "10d85740180ecba7896c87e06a166e0c95a0e3b6", "shasum": "" }, "require": { - "php": ">=7.2", - "psr/log": "^1.0.1 || ^2.0 || ^3.0" + "php": ">=8.1", + "psr/log": "^2.0 || ^3.0" }, "provide": { - "psr/log-implementation": "1.0.0 || 2.0.0 || 3.0.0" + "psr/log-implementation": "3.0.0" }, "require-dev": { - "aws/aws-sdk-php": "^2.4.9 || ^3.0", + "aws/aws-sdk-php": "^3.0", "doctrine/couchdb": "~1.0@dev", "elasticsearch/elasticsearch": "^7 || ^8", "ext-json": "*", - "graylog2/gelf-php": "^1.4.2 || ^2@dev", - "guzzlehttp/guzzle": "^7.4", + "graylog2/gelf-php": "^1.4.2 || ^2.0", + "guzzlehttp/guzzle": "^7.4.5", "guzzlehttp/psr7": "^2.2", "mongodb/mongodb": "^1.8", "php-amqplib/php-amqplib": "~2.4 || ^3", - "phpspec/prophecy": "^1.15", - "phpstan/phpstan": "^0.12.91", - "phpunit/phpunit": "^8.5.14", - "predis/predis": "^1.1 || ^2.0", - "rollbar/rollbar": "^1.3 || ^2 || ^3", - "ruflin/elastica": "^7", - "swiftmailer/swiftmailer": "^5.3|^6.0", + "php-console/php-console": "^3.1.8", + "phpstan/phpstan": "^2", + "phpstan/phpstan-deprecation-rules": "^2", + "phpstan/phpstan-strict-rules": "^2", + "phpunit/phpunit": "^10.5.17 || ^11.0.7", + "predis/predis": "^1.1 || ^2", + "rollbar/rollbar": "^4.0", + "ruflin/elastica": "^7 || ^8", "symfony/mailer": "^5.4 || ^6", "symfony/mime": "^5.4 || ^6" }, @@ -2488,7 +2292,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "2.x-dev" + "dev-main": "3.x-dev" } }, "autoload": { @@ -2516,7 +2320,7 @@ ], "support": { "issues": "https://github.com/Seldaek/monolog/issues", - "source": "https://github.com/Seldaek/monolog/tree/2.9.1" + "source": "https://github.com/Seldaek/monolog/tree/3.9.0" }, "funding": [ { @@ -2528,29 +2332,29 @@ "type": "tidelift" } ], - "time": "2023-02-06T13:44:46+00:00" + "time": "2025-03-24T10:02:05+00:00" }, { "name": "mtdowling/jmespath.php", - "version": "2.6.1", + "version": "2.8.0", "source": { "type": "git", "url": "https://github.com/jmespath/jmespath.php.git", - "reference": "9b87907a81b87bc76d19a7fb2d61e61486ee9edb" + "reference": "a2a865e05d5f420b50cc2f85bb78d565db12a6bc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/jmespath/jmespath.php/zipball/9b87907a81b87bc76d19a7fb2d61e61486ee9edb", - "reference": "9b87907a81b87bc76d19a7fb2d61e61486ee9edb", + "url": "https://api.github.com/repos/jmespath/jmespath.php/zipball/a2a865e05d5f420b50cc2f85bb78d565db12a6bc", + "reference": "a2a865e05d5f420b50cc2f85bb78d565db12a6bc", "shasum": "" }, "require": { - "php": "^5.4 || ^7.0 || ^8.0", + "php": "^7.2.5 || ^8.0", "symfony/polyfill-mbstring": "^1.17" }, "require-dev": { - "composer/xdebug-handler": "^1.4 || ^2.0", - "phpunit/phpunit": "^4.8.36 || ^7.5.15" + "composer/xdebug-handler": "^3.0.3", + "phpunit/phpunit": "^8.5.33" }, "bin": [ "bin/jp.php" @@ -2558,7 +2362,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.6-dev" + "dev-master": "2.8-dev" } }, "autoload": { @@ -2574,6 +2378,11 @@ "MIT" ], "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, { "name": "Michael Dowling", "email": "mtdowling@gmail.com", @@ -2587,9 +2396,9 @@ ], "support": { "issues": "https://github.com/jmespath/jmespath.php/issues", - "source": "https://github.com/jmespath/jmespath.php/tree/2.6.1" + "source": "https://github.com/jmespath/jmespath.php/tree/2.8.0" }, - "time": "2021-06-14T00:11:39+00:00" + "time": "2024-09-04T18:46:31+00:00" }, { "name": "mustache/mustache", @@ -2643,16 +2452,16 @@ }, { "name": "myclabs/deep-copy", - "version": "1.11.1", + "version": "1.13.1", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c" + "reference": "1720ddd719e16cf0db4eb1c6eca108031636d46c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", - "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/1720ddd719e16cf0db4eb1c6eca108031636d46c", + "reference": "1720ddd719e16cf0db4eb1c6eca108031636d46c", "shasum": "" }, "require": { @@ -2660,11 +2469,12 @@ }, "conflict": { "doctrine/collections": "<1.6.8", - "doctrine/common": "<2.13.3 || >=3,<3.2.2" + "doctrine/common": "<2.13.3 || >=3 <3.2.2" }, "require-dev": { "doctrine/collections": "^1.6.8", "doctrine/common": "^2.13.3 || ^3.2.2", + "phpspec/prophecy": "^1.10", "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" }, "type": "library", @@ -2690,7 +2500,7 @@ ], "support": { "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.11.1" + "source": "https://github.com/myclabs/DeepCopy/tree/1.13.1" }, "funding": [ { @@ -2698,29 +2508,31 @@ "type": "tidelift" } ], - "time": "2023-03-08T13:26:56+00:00" + "time": "2025-04-29T12:36:36+00:00" }, { "name": "nikic/php-parser", - "version": "v4.15.4", + "version": "v5.5.0", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "6bb5176bc4af8bcb7d926f88718db9b96a2d4290" + "reference": "ae59794362fe85e051a58ad36b289443f57be7a9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/6bb5176bc4af8bcb7d926f88718db9b96a2d4290", - "reference": "6bb5176bc4af8bcb7d926f88718db9b96a2d4290", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/ae59794362fe85e051a58ad36b289443f57be7a9", + "reference": "ae59794362fe85e051a58ad36b289443f57be7a9", "shasum": "" }, "require": { + "ext-ctype": "*", + "ext-json": "*", "ext-tokenizer": "*", - "php": ">=7.0" + "php": ">=7.4" }, "require-dev": { "ircmaxell/php-yacc": "^0.0.7", - "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" + "phpunit/phpunit": "^9.0" }, "bin": [ "bin/php-parse" @@ -2728,7 +2540,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.9-dev" + "dev-master": "5.0-dev" } }, "autoload": { @@ -2752,30 +2564,30 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.15.4" + "source": "https://github.com/nikic/PHP-Parser/tree/v5.5.0" }, - "time": "2023-03-05T19:49:14+00:00" + "time": "2025-05-31T08:24:38+00:00" }, { "name": "paragonie/constant_time_encoding", - "version": "v2.6.3", + "version": "v3.0.0", "source": { "type": "git", "url": "https://github.com/paragonie/constant_time_encoding.git", - "reference": "58c3f47f650c94ec05a151692652a868995d2938" + "reference": "df1e7fde177501eee2037dd159cf04f5f301a512" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/58c3f47f650c94ec05a151692652a868995d2938", - "reference": "58c3f47f650c94ec05a151692652a868995d2938", + "url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/df1e7fde177501eee2037dd159cf04f5f301a512", + "reference": "df1e7fde177501eee2037dd159cf04f5f301a512", "shasum": "" }, "require": { - "php": "^7|^8" + "php": "^8" }, "require-dev": { - "phpunit/phpunit": "^6|^7|^8|^9", - "vimeo/psalm": "^1|^2|^3|^4" + "phpunit/phpunit": "^9", + "vimeo/psalm": "^4|^5" }, "type": "library", "autoload": { @@ -2821,24 +2633,25 @@ "issues": "https://github.com/paragonie/constant_time_encoding/issues", "source": "https://github.com/paragonie/constant_time_encoding" }, - "time": "2022-06-14T06:56:20+00:00" + "time": "2024-05-08T12:36:18+00:00" }, { "name": "phar-io/manifest", - "version": "2.0.3", + "version": "2.0.4", "source": { "type": "git", "url": "https://github.com/phar-io/manifest.git", - "reference": "97803eca37d319dfa7826cc2437fc020857acb53" + "reference": "54750ef60c58e43759730615a392c31c80e23176" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/manifest/zipball/97803eca37d319dfa7826cc2437fc020857acb53", - "reference": "97803eca37d319dfa7826cc2437fc020857acb53", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/54750ef60c58e43759730615a392c31c80e23176", + "reference": "54750ef60c58e43759730615a392c31c80e23176", "shasum": "" }, "require": { "ext-dom": "*", + "ext-libxml": "*", "ext-phar": "*", "ext-xmlwriter": "*", "phar-io/version": "^3.0.1", @@ -2879,9 +2692,15 @@ "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" + "source": "https://github.com/phar-io/manifest/tree/2.0.4" }, - "time": "2021-07-20T11:28:43+00:00" + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2024-03-03T12:33:53+00:00" }, { "name": "phar-io/version", @@ -2936,16 +2755,16 @@ }, { "name": "php-webdriver/webdriver", - "version": "1.14.0", + "version": "1.15.2", "source": { "type": "git", "url": "https://github.com/php-webdriver/php-webdriver.git", - "reference": "3ea4f924afb43056bf9c630509e657d951608563" + "reference": "998e499b786805568deaf8cbf06f4044f05d91bf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-webdriver/php-webdriver/zipball/3ea4f924afb43056bf9c630509e657d951608563", - "reference": "3ea4f924afb43056bf9c630509e657d951608563", + "url": "https://api.github.com/repos/php-webdriver/php-webdriver/zipball/998e499b786805568deaf8cbf06f4044f05d91bf", + "reference": "998e499b786805568deaf8cbf06f4044f05d91bf", "shasum": "" }, "require": { @@ -2954,7 +2773,7 @@ "ext-zip": "*", "php": "^7.3 || ^8.0", "symfony/polyfill-mbstring": "^1.12", - "symfony/process": "^5.0 || ^6.0" + "symfony/process": "^5.0 || ^6.0 || ^7.0" }, "replace": { "facebook/webdriver": "*" @@ -2967,7 +2786,7 @@ "php-parallel-lint/php-parallel-lint": "^1.2", "phpunit/phpunit": "^9.3", "squizlabs/php_codesniffer": "^3.5", - "symfony/var-dumper": "^5.0 || ^6.0" + "symfony/var-dumper": "^5.0 || ^6.0 || ^7.0" }, "suggest": { "ext-SimpleXML": "For Firefox profile creation" @@ -2996,525 +2815,246 @@ ], "support": { "issues": "https://github.com/php-webdriver/php-webdriver/issues", - "source": "https://github.com/php-webdriver/php-webdriver/tree/1.14.0" + "source": "https://github.com/php-webdriver/php-webdriver/tree/1.15.2" }, - "time": "2023-02-09T12:12:19+00:00" + "time": "2024-11-21T15:12:59+00:00" }, { - "name": "phpdocumentor/reflection-common", - "version": "2.2.0", + "name": "phpunit/php-code-coverage", + "version": "10.1.16", "source": { "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionCommon.git", - "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "7e308268858ed6baedc8704a304727d20bc07c77" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", - "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/7e308268858ed6baedc8704a304727d20bc07c77", + "reference": "7e308268858ed6baedc8704a304727d20bc07c77", "shasum": "" }, "require": { - "php": "^7.2 || ^8.0" + "ext-dom": "*", + "ext-libxml": "*", + "ext-xmlwriter": "*", + "nikic/php-parser": "^4.19.1 || ^5.1.0", + "php": ">=8.1", + "phpunit/php-file-iterator": "^4.1.0", + "phpunit/php-text-template": "^3.0.1", + "sebastian/code-unit-reverse-lookup": "^3.0.0", + "sebastian/complexity": "^3.2.0", + "sebastian/environment": "^6.1.0", + "sebastian/lines-of-code": "^2.0.2", + "sebastian/version": "^4.0.1", + "theseer/tokenizer": "^1.2.3" + }, + "require-dev": { + "phpunit/phpunit": "^10.1" + }, + "suggest": { + "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-2.x": "2.x-dev" + "dev-main": "10.1.x-dev" } }, "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src/" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Jaap van Otterdijk", - "email": "opensource@ijaap.nl" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Common reflection classes used by phpdocumentor to reflect the code structure", - "homepage": "http://www.phpdoc.org", + "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", + "homepage": "https://github.com/sebastianbergmann/php-code-coverage", "keywords": [ - "FQSEN", - "phpDocumentor", - "phpdoc", - "reflection", - "static analysis" + "coverage", + "testing", + "xunit" ], "support": { - "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues", - "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x" + "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", + "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/10.1.16" }, - "time": "2020-06-27T09:03:43+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-08-22T04:31:57+00:00" }, { - "name": "phpdocumentor/reflection-docblock", - "version": "5.3.0", + "name": "phpunit/php-file-iterator", + "version": "4.1.0", "source": { "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "622548b623e81ca6d78b721c5e029f4ce664f170" + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "a95037b6d9e608ba092da1b23931e537cadc3c3c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/622548b623e81ca6d78b721c5e029f4ce664f170", - "reference": "622548b623e81ca6d78b721c5e029f4ce664f170", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/a95037b6d9e608ba092da1b23931e537cadc3c3c", + "reference": "a95037b6d9e608ba092da1b23931e537cadc3c3c", "shasum": "" }, "require": { - "ext-filter": "*", - "php": "^7.2 || ^8.0", - "phpdocumentor/reflection-common": "^2.2", - "phpdocumentor/type-resolver": "^1.3", - "webmozart/assert": "^1.9.1" + "php": ">=8.1" }, "require-dev": { - "mockery/mockery": "~1.3.2", - "psalm/phar": "^4.8" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.x-dev" + "dev-main": "4.0-dev" } }, "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" - }, - { - "name": "Jaap van Otterdijk", - "email": "account@ijaap.nl" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", + "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/phpDocumentor/ReflectionDocBlock/issues", - "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.3.0" + "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", + "security": "https://github.com/sebastianbergmann/php-file-iterator/security/policy", + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/4.1.0" }, - "time": "2021-10-19T17:43:47+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-08-31T06:24:48+00:00" }, { - "name": "phpdocumentor/type-resolver", - "version": "1.7.1", + "name": "phpunit/php-invoker", + "version": "4.0.0", "source": { "type": "git", - "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "dfc078e8af9c99210337325ff5aa152872c98714" + "url": "https://github.com/sebastianbergmann/php-invoker.git", + "reference": "f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/dfc078e8af9c99210337325ff5aa152872c98714", - "reference": "dfc078e8af9c99210337325ff5aa152872c98714", + "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7", + "reference": "f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7", "shasum": "" }, "require": { - "doctrine/deprecations": "^1.0", - "php": "^7.4 || ^8.0", - "phpdocumentor/reflection-common": "^2.0", - "phpstan/phpdoc-parser": "^1.13" + "php": ">=8.1" }, "require-dev": { - "ext-tokenizer": "*", - "phpbench/phpbench": "^1.2", - "phpstan/extension-installer": "^1.1", - "phpstan/phpstan": "^1.8", - "phpstan/phpstan-phpunit": "^1.1", - "phpunit/phpunit": "^9.5", - "rector/rector": "^0.13.9", - "vimeo/psalm": "^4.25" + "ext-pcntl": "*", + "phpunit/phpunit": "^10.0" + }, + "suggest": { + "ext-pcntl": "*" }, "type": "library", "extra": { "branch-alias": { - "dev-1.x": "1.x-dev" + "dev-main": "4.0-dev" } }, "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", + "description": "Invoke callables with a timeout", + "homepage": "https://github.com/sebastianbergmann/php-invoker/", + "keywords": [ + "process" + ], "support": { - "issues": "https://github.com/phpDocumentor/TypeResolver/issues", - "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.7.1" + "issues": "https://github.com/sebastianbergmann/php-invoker/issues", + "source": "https://github.com/sebastianbergmann/php-invoker/tree/4.0.0" }, - "time": "2023-03-27T19:02:04+00:00" + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:56:09+00:00" }, { - "name": "phpspec/prophecy", - "version": "v1.17.0", + "name": "phpunit/php-text-template", + "version": "3.0.1", "source": { "type": "git", - "url": "https://github.com/phpspec/prophecy.git", - "reference": "15873c65b207b07765dbc3c95d20fdf4a320cbe2" + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "0c7b06ff49e3d5072f057eb1fa59258bf287a748" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/15873c65b207b07765dbc3c95d20fdf4a320cbe2", - "reference": "15873c65b207b07765dbc3c95d20fdf4a320cbe2", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/0c7b06ff49e3d5072f057eb1fa59258bf287a748", + "reference": "0c7b06ff49e3d5072f057eb1fa59258bf287a748", "shasum": "" }, "require": { - "doctrine/instantiator": "^1.2 || ^2.0", - "php": "^7.2 || 8.0.* || 8.1.* || 8.2.*", - "phpdocumentor/reflection-docblock": "^5.2", - "sebastian/comparator": "^3.0 || ^4.0", - "sebastian/recursion-context": "^3.0 || ^4.0" + "php": ">=8.1" }, "require-dev": { - "phpspec/phpspec": "^6.0 || ^7.0", - "phpstan/phpstan": "^1.9", - "phpunit/phpunit": "^8.0 || ^9.0" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.x-dev" + "dev-main": "3.0-dev" } }, "autoload": { - "psr-4": { - "Prophecy\\": "src/Prophecy" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" - ], - "authors": [ - { - "name": "Konstantin Kudryashov", - "email": "ever.zet@gmail.com", - "homepage": "http://everzet.com" - }, - { - "name": "Marcello Duarte", - "email": "marcello.duarte@gmail.com" - } - ], - "description": "Highly opinionated mocking framework for PHP 5.3+", - "homepage": "https://github.com/phpspec/prophecy", - "keywords": [ - "Double", - "Dummy", - "fake", - "mock", - "spy", - "stub" - ], - "support": { - "issues": "https://github.com/phpspec/prophecy/issues", - "source": "https://github.com/phpspec/prophecy/tree/v1.17.0" - }, - "time": "2023-02-02T15:41:36+00:00" - }, - { - "name": "phpstan/phpdoc-parser", - "version": "1.20.1", - "source": { - "type": "git", - "url": "https://github.com/phpstan/phpdoc-parser.git", - "reference": "57f6787f0bb6431905a18aa7caea25dcd2bd59e0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/57f6787f0bb6431905a18aa7caea25dcd2bd59e0", - "reference": "57f6787f0bb6431905a18aa7caea25dcd2bd59e0", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "require-dev": { - "php-parallel-lint/php-parallel-lint": "^1.2", - "phpstan/extension-installer": "^1.0", - "phpstan/phpstan": "^1.5", - "phpstan/phpstan-phpunit": "^1.1", - "phpstan/phpstan-strict-rules": "^1.0", - "phpunit/phpunit": "^9.5", - "symfony/process": "^5.2" - }, - "type": "library", - "autoload": { - "psr-4": { - "PHPStan\\PhpDocParser\\": [ - "src/" - ] - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "PHPDoc parser with support for nullable, intersection and generic types", - "support": { - "issues": "https://github.com/phpstan/phpdoc-parser/issues", - "source": "https://github.com/phpstan/phpdoc-parser/tree/1.20.1" - }, - "time": "2023-04-22T09:05:52+00:00" - }, - { - "name": "phpunit/php-code-coverage", - "version": "9.2.26", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "443bc6912c9bd5b409254a40f4b0f4ced7c80ea1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/443bc6912c9bd5b409254a40f4b0f4ced7c80ea1", - "reference": "443bc6912c9bd5b409254a40f4b0f4ced7c80ea1", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-libxml": "*", - "ext-xmlwriter": "*", - "nikic/php-parser": "^4.15", - "php": ">=7.3", - "phpunit/php-file-iterator": "^3.0.3", - "phpunit/php-text-template": "^2.0.2", - "sebastian/code-unit-reverse-lookup": "^2.0.2", - "sebastian/complexity": "^2.0", - "sebastian/environment": "^5.1.2", - "sebastian/lines-of-code": "^1.0.3", - "sebastian/version": "^3.0.1", - "theseer/tokenizer": "^1.2.0" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "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": "9.2-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", - "homepage": "https://github.com/sebastianbergmann/php-code-coverage", - "keywords": [ - "coverage", - "testing", - "xunit" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.26" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-03-06T12:58:08+00:00" - }, - { - "name": "phpunit/php-file-iterator", - "version": "3.0.6", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", - "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "FilterIterator implementation that filters files based on a list of suffixes.", - "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", - "keywords": [ - "filesystem", - "iterator" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", - "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.6" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2021-12-02T12:48:52+00:00" - }, - { - "name": "phpunit/php-invoker", - "version": "3.1.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-invoker.git", - "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67", - "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "ext-pcntl": "*", - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-pcntl": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.1-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Invoke callables with a timeout", - "homepage": "https://github.com/sebastianbergmann/php-invoker/", - "keywords": [ - "process" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-invoker/issues", - "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T05:58:55+00:00" - }, - { - "name": "phpunit/php-text-template", - "version": "2.0.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", - "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" + "BSD-3-Clause" ], "authors": [ { @@ -3530,7 +3070,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-text-template/issues", - "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4" + "security": "https://github.com/sebastianbergmann/php-text-template/security/policy", + "source": "https://github.com/sebastianbergmann/php-text-template/tree/3.0.1" }, "funding": [ { @@ -3538,32 +3079,32 @@ "type": "github" } ], - "time": "2020-10-26T05:33:50+00:00" + "time": "2023-08-31T14:07:24+00:00" }, { "name": "phpunit/php-timer", - "version": "5.0.3", + "version": "6.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2" + "reference": "e2a2d67966e740530f4a3343fe2e030ffdc1161d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", - "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/e2a2d67966e740530f4a3343fe2e030ffdc1161d", + "reference": "e2a2d67966e740530f4a3343fe2e030ffdc1161d", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-main": "6.0-dev" } }, "autoload": { @@ -3589,7 +3130,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-timer/issues", - "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3" + "source": "https://github.com/sebastianbergmann/php-timer/tree/6.0.0" }, "funding": [ { @@ -3597,59 +3138,52 @@ "type": "github" } ], - "time": "2020-10-26T13:16:10+00:00" + "time": "2023-02-03T06:57:52+00:00" }, { "name": "phpunit/phpunit", - "version": "9.5.20", + "version": "10.5.46", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "12bc8879fb65aef2138b26fc633cb1e3620cffba" + "reference": "8080be387a5be380dda48c6f41cee4a13aadab3d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/12bc8879fb65aef2138b26fc633cb1e3620cffba", - "reference": "12bc8879fb65aef2138b26fc633cb1e3620cffba", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/8080be387a5be380dda48c6f41cee4a13aadab3d", + "reference": "8080be387a5be380dda48c6f41cee4a13aadab3d", "shasum": "" }, "require": { - "doctrine/instantiator": "^1.3.1", "ext-dom": "*", "ext-json": "*", "ext-libxml": "*", "ext-mbstring": "*", "ext-xml": "*", "ext-xmlwriter": "*", - "myclabs/deep-copy": "^1.10.1", - "phar-io/manifest": "^2.0.3", - "phar-io/version": "^3.0.2", - "php": ">=7.3", - "phpspec/prophecy": "^1.12.1", - "phpunit/php-code-coverage": "^9.2.13", - "phpunit/php-file-iterator": "^3.0.5", - "phpunit/php-invoker": "^3.1.1", - "phpunit/php-text-template": "^2.0.3", - "phpunit/php-timer": "^5.0.2", - "sebastian/cli-parser": "^1.0.1", - "sebastian/code-unit": "^1.0.6", - "sebastian/comparator": "^4.0.5", - "sebastian/diff": "^4.0.3", - "sebastian/environment": "^5.1.3", - "sebastian/exporter": "^4.0.3", - "sebastian/global-state": "^5.0.1", - "sebastian/object-enumerator": "^4.0.3", - "sebastian/resource-operations": "^3.0.3", - "sebastian/type": "^3.0", - "sebastian/version": "^3.0.2" - }, - "require-dev": { - "ext-pdo": "*", - "phpspec/prophecy-phpunit": "^2.0.1" + "myclabs/deep-copy": "^1.13.1", + "phar-io/manifest": "^2.0.4", + "phar-io/version": "^3.2.1", + "php": ">=8.1", + "phpunit/php-code-coverage": "^10.1.16", + "phpunit/php-file-iterator": "^4.1.0", + "phpunit/php-invoker": "^4.0.0", + "phpunit/php-text-template": "^3.0.1", + "phpunit/php-timer": "^6.0.0", + "sebastian/cli-parser": "^2.0.1", + "sebastian/code-unit": "^2.0.0", + "sebastian/comparator": "^5.0.3", + "sebastian/diff": "^5.1.1", + "sebastian/environment": "^6.1.0", + "sebastian/exporter": "^5.1.2", + "sebastian/global-state": "^6.0.2", + "sebastian/object-enumerator": "^5.0.0", + "sebastian/recursion-context": "^5.0.0", + "sebastian/type": "^4.0.0", + "sebastian/version": "^4.0.1" }, "suggest": { - "ext-soap": "*", - "ext-xdebug": "*" + "ext-soap": "To be able to generate mocks based on WSDL files" }, "bin": [ "phpunit" @@ -3657,7 +3191,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "9.5-dev" + "dev-main": "10.5-dev" } }, "autoload": { @@ -3688,7 +3222,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.20" + "security": "https://github.com/sebastianbergmann/phpunit/security/policy", + "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.46" }, "funding": [ { @@ -3698,9 +3233,21 @@ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", + "type": "tidelift" } ], - "time": "2022-04-01T12:37:26+00:00" + "time": "2025-05-02T06:46:24+00:00" }, { "name": "psr/cache", @@ -3751,6 +3298,54 @@ }, "time": "2021-02-03T23:26:27+00:00" }, + { + "name": "psr/clock", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/clock.git", + "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/clock/zipball/e41a24703d4560fd0acb709162f73b8adfc3aa0d", + "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d", + "shasum": "" + }, + "require": { + "php": "^7.0 || ^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Psr\\Clock\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for reading the clock.", + "homepage": "https://github.com/php-fig/clock", + "keywords": [ + "clock", + "now", + "psr", + "psr-20", + "time" + ], + "support": { + "issues": "https://github.com/php-fig/clock/issues", + "source": "https://github.com/php-fig/clock/tree/1.0.0" + }, + "time": "2022-11-25T14:36:26+00:00" + }, { "name": "psr/container", "version": "2.0.2", @@ -3856,16 +3451,16 @@ }, { "name": "psr/http-client", - "version": "1.0.2", + "version": "1.0.3", "source": { "type": "git", "url": "https://github.com/php-fig/http-client.git", - "reference": "0955afe48220520692d2d09f7ab7e0f93ffd6a31" + "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-client/zipball/0955afe48220520692d2d09f7ab7e0f93ffd6a31", - "reference": "0955afe48220520692d2d09f7ab7e0f93ffd6a31", + "url": "https://api.github.com/repos/php-fig/http-client/zipball/bb5906edc1c324c9a05aa0873d40117941e5fa90", + "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90", "shasum": "" }, "require": { @@ -3902,26 +3497,26 @@ "psr-18" ], "support": { - "source": "https://github.com/php-fig/http-client/tree/1.0.2" + "source": "https://github.com/php-fig/http-client" }, - "time": "2023-04-10T20:12:12+00:00" + "time": "2023-09-23T14:17:50+00:00" }, { "name": "psr/http-factory", - "version": "1.0.2", + "version": "1.1.0", "source": { "type": "git", "url": "https://github.com/php-fig/http-factory.git", - "reference": "e616d01114759c4c489f93b099585439f795fe35" + "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-factory/zipball/e616d01114759c4c489f93b099585439f795fe35", - "reference": "e616d01114759c4c489f93b099585439f795fe35", + "url": "https://api.github.com/repos/php-fig/http-factory/zipball/2b4765fddfe3b508ac62f829e852b1501d3f6e8a", + "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a", "shasum": "" }, "require": { - "php": ">=7.0.0", + "php": ">=7.1", "psr/http-message": "^1.0 || ^2.0" }, "type": "library", @@ -3945,7 +3540,7 @@ "homepage": "https://www.php-fig.org/" } ], - "description": "Common interfaces for PSR-7 HTTP message factories", + "description": "PSR-17: Common interfaces for PSR-7 HTTP message factories", "keywords": [ "factory", "http", @@ -3957,22 +3552,22 @@ "response" ], "support": { - "source": "https://github.com/php-fig/http-factory/tree/1.0.2" + "source": "https://github.com/php-fig/http-factory" }, - "time": "2023-04-10T20:10:41+00:00" + "time": "2024-04-15T12:06:14+00:00" }, { "name": "psr/http-message", - "version": "1.1", + "version": "2.0", "source": { "type": "git", "url": "https://github.com/php-fig/http-message.git", - "reference": "cb6ce4845ce34a8ad9e68117c10ee90a29919eba" + "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-message/zipball/cb6ce4845ce34a8ad9e68117c10ee90a29919eba", - "reference": "cb6ce4845ce34a8ad9e68117c10ee90a29919eba", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/402d35bcb92c70c026d1a6a9883f06b2ead23d71", + "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71", "shasum": "" }, "require": { @@ -3981,7 +3576,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.1.x-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { @@ -3996,7 +3591,7 @@ "authors": [ { "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "homepage": "https://www.php-fig.org/" } ], "description": "Common interface for HTTP messages", @@ -4010,9 +3605,9 @@ "response" ], "support": { - "source": "https://github.com/php-fig/http-message/tree/1.1" + "source": "https://github.com/php-fig/http-message/tree/2.0" }, - "time": "2023-04-04T09:50:52+00:00" + "time": "2023-04-04T09:54:51+00:00" }, { "name": "psr/log", @@ -4066,25 +3661,25 @@ }, { "name": "psy/psysh", - "version": "v0.11.15", + "version": "v0.12.8", "source": { "type": "git", "url": "https://github.com/bobthecow/psysh.git", - "reference": "5350ce0ec8ecf2c5b5cf554cd2496f97b444af85" + "reference": "85057ceedee50c49d4f6ecaff73ee96adb3b3625" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/bobthecow/psysh/zipball/5350ce0ec8ecf2c5b5cf554cd2496f97b444af85", - "reference": "5350ce0ec8ecf2c5b5cf554cd2496f97b444af85", + "url": "https://api.github.com/repos/bobthecow/psysh/zipball/85057ceedee50c49d4f6ecaff73ee96adb3b3625", + "reference": "85057ceedee50c49d4f6ecaff73ee96adb3b3625", "shasum": "" }, "require": { "ext-json": "*", "ext-tokenizer": "*", - "nikic/php-parser": "^4.0 || ^3.1", - "php": "^8.0 || ^7.0.8", - "symfony/console": "^6.0 || ^5.0 || ^4.0 || ^3.4", - "symfony/var-dumper": "^6.0 || ^5.0 || ^4.0 || ^3.4" + "nikic/php-parser": "^5.0 || ^4.0", + "php": "^8.0 || ^7.4", + "symfony/console": "^7.0 || ^6.0 || ^5.0 || ^4.0 || ^3.4", + "symfony/var-dumper": "^7.0 || ^6.0 || ^5.0 || ^4.0 || ^3.4" }, "conflict": { "symfony/console": "4.4.37 || 5.3.14 || 5.3.15 || 5.4.3 || 5.4.4 || 6.0.3 || 6.0.4" @@ -4095,16 +3690,19 @@ "suggest": { "ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)", "ext-pdo-sqlite": "The doc command requires SQLite to work.", - "ext-posix": "If you have PCNTL, you'll want the POSIX extension as well.", - "ext-readline": "Enables support for arrow-key history navigation, and showing and manipulating command history." + "ext-posix": "If you have PCNTL, you'll want the POSIX extension as well." }, "bin": [ "bin/psysh" ], "type": "library", "extra": { + "bamarni-bin": { + "bin-links": false, + "forward-command": false + }, "branch-alias": { - "dev-main": "0.11.x-dev" + "dev-main": "0.12.x-dev" } }, "autoload": { @@ -4136,9 +3734,9 @@ ], "support": { "issues": "https://github.com/bobthecow/psysh/issues", - "source": "https://github.com/bobthecow/psysh/tree/v0.11.15" + "source": "https://github.com/bobthecow/psysh/tree/v0.12.8" }, - "time": "2023-04-07T21:57:09+00:00" + "time": "2025-03-16T03:05:19+00:00" }, { "name": "ralouphie/getallheaders", @@ -4186,16 +3784,16 @@ }, { "name": "ramsey/collection", - "version": "2.0.0", + "version": "2.1.1", "source": { "type": "git", "url": "https://github.com/ramsey/collection.git", - "reference": "a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5" + "reference": "344572933ad0181accbf4ba763e85a0306a8c5e2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ramsey/collection/zipball/a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5", - "reference": "a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5", + "url": "https://api.github.com/repos/ramsey/collection/zipball/344572933ad0181accbf4ba763e85a0306a8c5e2", + "reference": "344572933ad0181accbf4ba763e85a0306a8c5e2", "shasum": "" }, "require": { @@ -4203,25 +3801,22 @@ }, "require-dev": { "captainhook/plugin-composer": "^5.3", - "ergebnis/composer-normalize": "^2.28.3", - "fakerphp/faker": "^1.21", + "ergebnis/composer-normalize": "^2.45", + "fakerphp/faker": "^1.24", "hamcrest/hamcrest-php": "^2.0", - "jangregor/phpstan-prophecy": "^1.0", - "mockery/mockery": "^1.5", + "jangregor/phpstan-prophecy": "^2.1", + "mockery/mockery": "^1.6", "php-parallel-lint/php-console-highlighter": "^1.0", - "php-parallel-lint/php-parallel-lint": "^1.3", - "phpcsstandards/phpcsutils": "^1.0.0-rc1", - "phpspec/prophecy-phpunit": "^2.0", - "phpstan/extension-installer": "^1.2", - "phpstan/phpstan": "^1.9", - "phpstan/phpstan-mockery": "^1.1", - "phpstan/phpstan-phpunit": "^1.3", - "phpunit/phpunit": "^9.5", - "psalm/plugin-mockery": "^1.1", - "psalm/plugin-phpunit": "^0.18.4", - "ramsey/coding-standard": "^2.0.3", - "ramsey/conventional-commits": "^1.3", - "vimeo/psalm": "^5.4" + "php-parallel-lint/php-parallel-lint": "^1.4", + "phpspec/prophecy-phpunit": "^2.3", + "phpstan/extension-installer": "^1.4", + "phpstan/phpstan": "^2.1", + "phpstan/phpstan-mockery": "^2.0", + "phpstan/phpstan-phpunit": "^2.0", + "phpunit/phpunit": "^10.5", + "ramsey/coding-standard": "^2.3", + "ramsey/conventional-commits": "^1.6", + "roave/security-advisories": "dev-latest" }, "type": "library", "extra": { @@ -4259,36 +3854,26 @@ ], "support": { "issues": "https://github.com/ramsey/collection/issues", - "source": "https://github.com/ramsey/collection/tree/2.0.0" + "source": "https://github.com/ramsey/collection/tree/2.1.1" }, - "funding": [ - { - "url": "https://github.com/ramsey", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/ramsey/collection", - "type": "tidelift" - } - ], - "time": "2022-12-31T21:50:55+00:00" + "time": "2025-03-22T05:38:12+00:00" }, { "name": "ramsey/uuid", - "version": "4.7.4", + "version": "4.8.1", "source": { "type": "git", "url": "https://github.com/ramsey/uuid.git", - "reference": "60a4c63ab724854332900504274f6150ff26d286" + "reference": "fdf4dd4e2ff1813111bd0ad58d7a1ddbb5b56c28" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ramsey/uuid/zipball/60a4c63ab724854332900504274f6150ff26d286", - "reference": "60a4c63ab724854332900504274f6150ff26d286", + "url": "https://api.github.com/repos/ramsey/uuid/zipball/fdf4dd4e2ff1813111bd0ad58d7a1ddbb5b56c28", + "reference": "fdf4dd4e2ff1813111bd0ad58d7a1ddbb5b56c28", "shasum": "" }, "require": { - "brick/math": "^0.8.8 || ^0.9 || ^0.10 || ^0.11", + "brick/math": "^0.8.8 || ^0.9 || ^0.10 || ^0.11 || ^0.12 || ^0.13", "ext-json": "*", "php": "^8.0", "ramsey/collection": "^1.2 || ^2.0" @@ -4297,26 +3882,23 @@ "rhumsaa/uuid": "self.version" }, "require-dev": { - "captainhook/captainhook": "^5.10", + "captainhook/captainhook": "^5.25", "captainhook/plugin-composer": "^5.3", - "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0", - "doctrine/annotations": "^1.8", - "ergebnis/composer-normalize": "^2.15", - "mockery/mockery": "^1.3", + "dealerdirect/phpcodesniffer-composer-installer": "^1.0", + "ergebnis/composer-normalize": "^2.47", + "mockery/mockery": "^1.6", "paragonie/random-lib": "^2", - "php-mock/php-mock": "^2.2", - "php-mock/php-mock-mockery": "^1.3", - "php-parallel-lint/php-parallel-lint": "^1.1", - "phpbench/phpbench": "^1.0", - "phpstan/extension-installer": "^1.1", - "phpstan/phpstan": "^1.8", - "phpstan/phpstan-mockery": "^1.1", - "phpstan/phpstan-phpunit": "^1.1", - "phpunit/phpunit": "^8.5 || ^9", - "ramsey/composer-repl": "^1.4", - "slevomat/coding-standard": "^8.4", - "squizlabs/php_codesniffer": "^3.5", - "vimeo/psalm": "^4.9" + "php-mock/php-mock": "^2.6", + "php-mock/php-mock-mockery": "^1.5", + "php-parallel-lint/php-parallel-lint": "^1.4.0", + "phpbench/phpbench": "^1.2.14", + "phpstan/extension-installer": "^1.4", + "phpstan/phpstan": "^2.1", + "phpstan/phpstan-mockery": "^2.0", + "phpstan/phpstan-phpunit": "^2.0", + "phpunit/phpunit": "^9.6", + "slevomat/coding-standard": "^8.18", + "squizlabs/php_codesniffer": "^3.13" }, "suggest": { "ext-bcmath": "Enables faster math with arbitrary-precision integers using BCMath.", @@ -4351,39 +3933,30 @@ ], "support": { "issues": "https://github.com/ramsey/uuid/issues", - "source": "https://github.com/ramsey/uuid/tree/4.7.4" + "source": "https://github.com/ramsey/uuid/tree/4.8.1" }, - "funding": [ - { - "url": "https://github.com/ramsey", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/ramsey/uuid", - "type": "tidelift" - } - ], - "time": "2023-04-15T23:01:58+00:00" + "time": "2025-06-01T06:28:46+00:00" }, { "name": "react/promise", - "version": "v2.9.0", + "version": "v3.2.0", "source": { "type": "git", "url": "https://github.com/reactphp/promise.git", - "reference": "234f8fd1023c9158e2314fa9d7d0e6a83db42910" + "reference": "8a164643313c71354582dc850b42b33fa12a4b63" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/reactphp/promise/zipball/234f8fd1023c9158e2314fa9d7d0e6a83db42910", - "reference": "234f8fd1023c9158e2314fa9d7d0e6a83db42910", + "url": "https://api.github.com/repos/reactphp/promise/zipball/8a164643313c71354582dc850b42b33fa12a4b63", + "reference": "8a164643313c71354582dc850b42b33fa12a4b63", "shasum": "" }, "require": { - "php": ">=5.4.0" + "php": ">=7.1.0" }, "require-dev": { - "phpunit/phpunit": "^9.3 || ^5.7 || ^4.8.36" + "phpstan/phpstan": "1.10.39 || 1.4.10", + "phpunit/phpunit": "^9.6 || ^7.5" }, "type": "library", "autoload": { @@ -4427,44 +4000,40 @@ ], "support": { "issues": "https://github.com/reactphp/promise/issues", - "source": "https://github.com/reactphp/promise/tree/v2.9.0" + "source": "https://github.com/reactphp/promise/tree/v3.2.0" }, "funding": [ { - "url": "https://github.com/WyriHaximus", - "type": "github" - }, - { - "url": "https://github.com/clue", - "type": "github" + "url": "https://opencollective.com/reactphp", + "type": "open_collective" } ], - "time": "2022-02-11T10:27:51+00:00" + "time": "2024-05-24T10:39:05+00:00" }, { "name": "sebastian/cli-parser", - "version": "1.0.1", + "version": "2.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/cli-parser.git", - "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2" + "reference": "c34583b87e7b7a8055bf6c450c2c77ce32a24084" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/442e7c7e687e42adc03470c7b668bc4b2402c0b2", - "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/c34583b87e7b7a8055bf6c450c2c77ce32a24084", + "reference": "c34583b87e7b7a8055bf6c450c2c77ce32a24084", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-main": "2.0-dev" } }, "autoload": { @@ -4487,7 +4056,8 @@ "homepage": "https://github.com/sebastianbergmann/cli-parser", "support": { "issues": "https://github.com/sebastianbergmann/cli-parser/issues", - "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.1" + "security": "https://github.com/sebastianbergmann/cli-parser/security/policy", + "source": "https://github.com/sebastianbergmann/cli-parser/tree/2.0.1" }, "funding": [ { @@ -4495,32 +4065,32 @@ "type": "github" } ], - "time": "2020-09-28T06:08:49+00:00" + "time": "2024-03-02T07:12:49+00:00" }, { "name": "sebastian/code-unit", - "version": "1.0.8", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/code-unit.git", - "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120" + "reference": "a81fee9eef0b7a76af11d121767abc44c104e503" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120", - "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/a81fee9eef0b7a76af11d121767abc44c104e503", + "reference": "a81fee9eef0b7a76af11d121767abc44c104e503", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-main": "2.0-dev" } }, "autoload": { @@ -4543,7 +4113,7 @@ "homepage": "https://github.com/sebastianbergmann/code-unit", "support": { "issues": "https://github.com/sebastianbergmann/code-unit/issues", - "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8" + "source": "https://github.com/sebastianbergmann/code-unit/tree/2.0.0" }, "funding": [ { @@ -4551,32 +4121,32 @@ "type": "github" } ], - "time": "2020-10-26T13:08:54+00:00" + "time": "2023-02-03T06:58:43+00:00" }, { "name": "sebastian/code-unit-reverse-lookup", - "version": "2.0.3", + "version": "3.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", - "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5" + "reference": "5e3a687f7d8ae33fb362c5c0743794bbb2420a1d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", - "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/5e3a687f7d8ae33fb362c5c0743794bbb2420a1d", + "reference": "5e3a687f7d8ae33fb362c5c0743794bbb2420a1d", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-main": "3.0-dev" } }, "autoload": { @@ -4598,7 +4168,7 @@ "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/2.0.3" + "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/3.0.0" }, "funding": [ { @@ -4606,34 +4176,36 @@ "type": "github" } ], - "time": "2020-09-28T05:30:19+00:00" + "time": "2023-02-03T06:59:15+00:00" }, { "name": "sebastian/comparator", - "version": "4.0.8", + "version": "5.0.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "fa0f136dd2334583309d32b62544682ee972b51a" + "reference": "a18251eb0b7a2dcd2f7aa3d6078b18545ef0558e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/fa0f136dd2334583309d32b62544682ee972b51a", - "reference": "fa0f136dd2334583309d32b62544682ee972b51a", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/a18251eb0b7a2dcd2f7aa3d6078b18545ef0558e", + "reference": "a18251eb0b7a2dcd2f7aa3d6078b18545ef0558e", "shasum": "" }, "require": { - "php": ">=7.3", - "sebastian/diff": "^4.0", - "sebastian/exporter": "^4.0" + "ext-dom": "*", + "ext-mbstring": "*", + "php": ">=8.1", + "sebastian/diff": "^5.0", + "sebastian/exporter": "^5.0" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0-dev" + "dev-main": "5.0-dev" } }, "autoload": { @@ -4672,7 +4244,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/comparator/issues", - "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.8" + "security": "https://github.com/sebastianbergmann/comparator/security/policy", + "source": "https://github.com/sebastianbergmann/comparator/tree/5.0.3" }, "funding": [ { @@ -4680,33 +4253,33 @@ "type": "github" } ], - "time": "2022-09-14T12:41:17+00:00" + "time": "2024-10-18T14:56:07+00:00" }, { "name": "sebastian/complexity", - "version": "2.0.2", + "version": "3.2.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/complexity.git", - "reference": "739b35e53379900cc9ac327b2147867b8b6efd88" + "reference": "68ff824baeae169ec9f2137158ee529584553799" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/739b35e53379900cc9ac327b2147867b8b6efd88", - "reference": "739b35e53379900cc9ac327b2147867b8b6efd88", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/68ff824baeae169ec9f2137158ee529584553799", + "reference": "68ff824baeae169ec9f2137158ee529584553799", "shasum": "" }, "require": { - "nikic/php-parser": "^4.7", - "php": ">=7.3" + "nikic/php-parser": "^4.18 || ^5.0", + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-main": "3.2-dev" } }, "autoload": { @@ -4729,7 +4302,8 @@ "homepage": "https://github.com/sebastianbergmann/complexity", "support": { "issues": "https://github.com/sebastianbergmann/complexity/issues", - "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.2" + "security": "https://github.com/sebastianbergmann/complexity/security/policy", + "source": "https://github.com/sebastianbergmann/complexity/tree/3.2.0" }, "funding": [ { @@ -4737,33 +4311,33 @@ "type": "github" } ], - "time": "2020-10-26T15:52:27+00:00" + "time": "2023-12-21T08:37:17+00:00" }, { "name": "sebastian/diff", - "version": "4.0.4", + "version": "5.1.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d" + "reference": "c41e007b4b62af48218231d6c2275e4c9b975b2e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/3461e3fccc7cfdfc2720be910d3bd73c69be590d", - "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/c41e007b4b62af48218231d6c2275e4c9b975b2e", + "reference": "c41e007b4b62af48218231d6c2275e4c9b975b2e", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3", - "symfony/process": "^4.2 || ^5" + "phpunit/phpunit": "^10.0", + "symfony/process": "^6.4" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0-dev" + "dev-main": "5.1-dev" } }, "autoload": { @@ -4795,7 +4369,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/diff/issues", - "source": "https://github.com/sebastianbergmann/diff/tree/4.0.4" + "security": "https://github.com/sebastianbergmann/diff/security/policy", + "source": "https://github.com/sebastianbergmann/diff/tree/5.1.1" }, "funding": [ { @@ -4803,27 +4378,27 @@ "type": "github" } ], - "time": "2020-10-26T13:10:38+00:00" + "time": "2024-03-02T07:15:17+00:00" }, { "name": "sebastian/environment", - "version": "5.1.5", + "version": "6.1.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed" + "reference": "8074dbcd93529b357029f5cc5058fd3e43666984" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", - "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/8074dbcd93529b357029f5cc5058fd3e43666984", + "reference": "8074dbcd93529b357029f5cc5058fd3e43666984", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "suggest": { "ext-posix": "*" @@ -4831,7 +4406,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "5.1-dev" + "dev-main": "6.1-dev" } }, "autoload": { @@ -4850,7 +4425,7 @@ } ], "description": "Provides functionality to handle HHVM/PHP environments", - "homepage": "http://www.github.com/sebastianbergmann/environment", + "homepage": "https://github.com/sebastianbergmann/environment", "keywords": [ "Xdebug", "environment", @@ -4858,7 +4433,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/environment/issues", - "source": "https://github.com/sebastianbergmann/environment/tree/5.1.5" + "security": "https://github.com/sebastianbergmann/environment/security/policy", + "source": "https://github.com/sebastianbergmann/environment/tree/6.1.0" }, "funding": [ { @@ -4866,34 +4442,34 @@ "type": "github" } ], - "time": "2023-02-03T06:03:51+00:00" + "time": "2024-03-23T08:47:14+00:00" }, { "name": "sebastian/exporter", - "version": "4.0.5", + "version": "5.1.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d" + "reference": "955288482d97c19a372d3f31006ab3f37da47adf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d", - "reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/955288482d97c19a372d3f31006ab3f37da47adf", + "reference": "955288482d97c19a372d3f31006ab3f37da47adf", "shasum": "" }, "require": { - "php": ">=7.3", - "sebastian/recursion-context": "^4.0" + "ext-mbstring": "*", + "php": ">=8.1", + "sebastian/recursion-context": "^5.0" }, "require-dev": { - "ext-mbstring": "*", - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0-dev" + "dev-main": "5.1-dev" } }, "autoload": { @@ -4935,7 +4511,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/exporter/issues", - "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.5" + "security": "https://github.com/sebastianbergmann/exporter/security/policy", + "source": "https://github.com/sebastianbergmann/exporter/tree/5.1.2" }, "funding": [ { @@ -4943,38 +4520,35 @@ "type": "github" } ], - "time": "2022-09-14T06:03:37+00:00" + "time": "2024-03-02T07:17:12+00:00" }, { "name": "sebastian/global-state", - "version": "5.0.5", + "version": "6.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2" + "reference": "987bafff24ecc4c9ac418cab1145b96dd6e9cbd9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/0ca8db5a5fc9c8646244e629625ac486fa286bf2", - "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/987bafff24ecc4c9ac418cab1145b96dd6e9cbd9", + "reference": "987bafff24ecc4c9ac418cab1145b96dd6e9cbd9", "shasum": "" }, "require": { - "php": ">=7.3", - "sebastian/object-reflector": "^2.0", - "sebastian/recursion-context": "^4.0" + "php": ">=8.1", + "sebastian/object-reflector": "^3.0", + "sebastian/recursion-context": "^5.0" }, "require-dev": { "ext-dom": "*", - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-uopz": "*" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-main": "6.0-dev" } }, "autoload": { @@ -4993,13 +4567,14 @@ } ], "description": "Snapshotting of global state", - "homepage": "http://www.github.com/sebastianbergmann/global-state", + "homepage": "https://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/5.0.5" + "security": "https://github.com/sebastianbergmann/global-state/security/policy", + "source": "https://github.com/sebastianbergmann/global-state/tree/6.0.2" }, "funding": [ { @@ -5007,33 +4582,33 @@ "type": "github" } ], - "time": "2022-02-14T08:28:10+00:00" + "time": "2024-03-02T07:19:19+00:00" }, { "name": "sebastian/lines-of-code", - "version": "1.0.3", + "version": "2.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/lines-of-code.git", - "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc" + "reference": "856e7f6a75a84e339195d48c556f23be2ebf75d0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/c1c2e997aa3146983ed888ad08b15470a2e22ecc", - "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/856e7f6a75a84e339195d48c556f23be2ebf75d0", + "reference": "856e7f6a75a84e339195d48c556f23be2ebf75d0", "shasum": "" }, "require": { - "nikic/php-parser": "^4.6", - "php": ">=7.3" + "nikic/php-parser": "^4.18 || ^5.0", + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-main": "2.0-dev" } }, "autoload": { @@ -5056,7 +4631,8 @@ "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/1.0.3" + "security": "https://github.com/sebastianbergmann/lines-of-code/security/policy", + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/2.0.2" }, "funding": [ { @@ -5064,34 +4640,34 @@ "type": "github" } ], - "time": "2020-11-28T06:42:11+00:00" + "time": "2023-12-21T08:38:20+00:00" }, { "name": "sebastian/object-enumerator", - "version": "4.0.4", + "version": "5.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "5c9eeac41b290a3712d88851518825ad78f45c71" + "reference": "202d0e344a580d7f7d04b3fafce6933e59dae906" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71", - "reference": "5c9eeac41b290a3712d88851518825ad78f45c71", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/202d0e344a580d7f7d04b3fafce6933e59dae906", + "reference": "202d0e344a580d7f7d04b3fafce6933e59dae906", "shasum": "" }, "require": { - "php": ">=7.3", - "sebastian/object-reflector": "^2.0", - "sebastian/recursion-context": "^4.0" + "php": ">=8.1", + "sebastian/object-reflector": "^3.0", + "sebastian/recursion-context": "^5.0" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0-dev" + "dev-main": "5.0-dev" } }, "autoload": { @@ -5113,7 +4689,7 @@ "homepage": "https://github.com/sebastianbergmann/object-enumerator/", "support": { "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", - "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4" + "source": "https://github.com/sebastianbergmann/object-enumerator/tree/5.0.0" }, "funding": [ { @@ -5121,32 +4697,32 @@ "type": "github" } ], - "time": "2020-10-26T13:12:34+00:00" + "time": "2023-02-03T07:08:32+00:00" }, { "name": "sebastian/object-reflector", - "version": "2.0.4", + "version": "3.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-reflector.git", - "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7" + "reference": "24ed13d98130f0e7122df55d06c5c4942a577957" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", - "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/24ed13d98130f0e7122df55d06c5c4942a577957", + "reference": "24ed13d98130f0e7122df55d06c5c4942a577957", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-main": "3.0-dev" } }, "autoload": { @@ -5168,7 +4744,7 @@ "homepage": "https://github.com/sebastianbergmann/object-reflector/", "support": { "issues": "https://github.com/sebastianbergmann/object-reflector/issues", - "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4" + "source": "https://github.com/sebastianbergmann/object-reflector/tree/3.0.0" }, "funding": [ { @@ -5176,32 +4752,32 @@ "type": "github" } ], - "time": "2020-10-26T13:14:26+00:00" + "time": "2023-02-03T07:06:18+00:00" }, { "name": "sebastian/recursion-context", - "version": "4.0.5", + "version": "5.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1" + "reference": "05909fb5bc7df4c52992396d0116aed689f93712" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", - "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/05909fb5bc7df4c52992396d0116aed689f93712", + "reference": "05909fb5bc7df4c52992396d0116aed689f93712", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0-dev" + "dev-main": "5.0-dev" } }, "autoload": { @@ -5231,62 +4807,7 @@ "homepage": "https://github.com/sebastianbergmann/recursion-context", "support": { "issues": "https://github.com/sebastianbergmann/recursion-context/issues", - "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.5" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-02-03T06:07:39+00:00" - }, - { - "name": "sebastian/resource-operations", - "version": "3.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/resource-operations.git", - "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", - "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Provides a list of PHP built-in functions that operate on resources", - "homepage": "https://www.github.com/sebastianbergmann/resource-operations", - "support": { - "issues": "https://github.com/sebastianbergmann/resource-operations/issues", - "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.3" + "source": "https://github.com/sebastianbergmann/recursion-context/tree/5.0.0" }, "funding": [ { @@ -5294,32 +4815,32 @@ "type": "github" } ], - "time": "2020-09-28T06:45:17+00:00" + "time": "2023-02-03T07:05:40+00:00" }, { "name": "sebastian/type", - "version": "3.2.1", + "version": "4.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/type.git", - "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7" + "reference": "462699a16464c3944eefc02ebdd77882bd3925bf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", - "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/462699a16464c3944eefc02ebdd77882bd3925bf", + "reference": "462699a16464c3944eefc02ebdd77882bd3925bf", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.5" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.2-dev" + "dev-main": "4.0-dev" } }, "autoload": { @@ -5342,7 +4863,7 @@ "homepage": "https://github.com/sebastianbergmann/type", "support": { "issues": "https://github.com/sebastianbergmann/type/issues", - "source": "https://github.com/sebastianbergmann/type/tree/3.2.1" + "source": "https://github.com/sebastianbergmann/type/tree/4.0.0" }, "funding": [ { @@ -5350,29 +4871,29 @@ "type": "github" } ], - "time": "2023-02-03T06:13:03+00:00" + "time": "2023-02-03T07:10:45+00:00" }, { "name": "sebastian/version", - "version": "3.0.2", + "version": "4.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/version.git", - "reference": "c6c1022351a901512170118436c764e473f6de8c" + "reference": "c51fa83a5d8f43f1402e3f32a005e6262244ef17" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c", - "reference": "c6c1022351a901512170118436c764e473f6de8c", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c51fa83a5d8f43f1402e3f32a005e6262244ef17", + "reference": "c51fa83a5d8f43f1402e3f32a005e6262244ef17", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-main": "4.0-dev" } }, "autoload": { @@ -5395,7 +4916,7 @@ "homepage": "https://github.com/sebastianbergmann/version", "support": { "issues": "https://github.com/sebastianbergmann/version/issues", - "source": "https://github.com/sebastianbergmann/version/tree/3.0.2" + "source": "https://github.com/sebastianbergmann/version/tree/4.0.1" }, "funding": [ { @@ -5403,27 +4924,27 @@ "type": "github" } ], - "time": "2020-09-28T06:39:44+00:00" + "time": "2023-02-07T11:34:05+00:00" }, { "name": "seld/jsonlint", - "version": "1.9.0", + "version": "1.11.0", "source": { "type": "git", "url": "https://github.com/Seldaek/jsonlint.git", - "reference": "4211420d25eba80712bff236a98960ef68b866b7" + "reference": "1748aaf847fc731cfad7725aec413ee46f0cc3a2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/4211420d25eba80712bff236a98960ef68b866b7", - "reference": "4211420d25eba80712bff236a98960ef68b866b7", + "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/1748aaf847fc731cfad7725aec413ee46f0cc3a2", + "reference": "1748aaf847fc731cfad7725aec413ee46f0cc3a2", "shasum": "" }, "require": { "php": "^5.3 || ^7.0 || ^8.0" }, "require-dev": { - "phpstan/phpstan": "^1.5", + "phpstan/phpstan": "^1.11", "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0 || ^8.5.13" }, "bin": [ @@ -5443,7 +4964,7 @@ { "name": "Jordi Boggiano", "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" + "homepage": "https://seld.be" } ], "description": "JSON Linter", @@ -5455,7 +4976,7 @@ ], "support": { "issues": "https://github.com/Seldaek/jsonlint/issues", - "source": "https://github.com/Seldaek/jsonlint/tree/1.9.0" + "source": "https://github.com/Seldaek/jsonlint/tree/1.11.0" }, "funding": [ { @@ -5467,7 +4988,7 @@ "type": "tidelift" } ], - "time": "2022-04-01T13:37:23+00:00" + "time": "2024-07-11T14:55:45+00:00" }, { "name": "seld/phar-utils", @@ -5519,16 +5040,16 @@ }, { "name": "seld/signal-handler", - "version": "2.0.1", + "version": "2.0.2", "source": { "type": "git", "url": "https://github.com/Seldaek/signal-handler.git", - "reference": "f69d119511dc0360440cdbdaa71829c149b7be75" + "reference": "04a6112e883ad76c0ada8e4a9f7520bbfdb6bb98" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/signal-handler/zipball/f69d119511dc0360440cdbdaa71829c149b7be75", - "reference": "f69d119511dc0360440cdbdaa71829c149b7be75", + "url": "https://api.github.com/repos/Seldaek/signal-handler/zipball/04a6112e883ad76c0ada8e4a9f7520bbfdb6bb98", + "reference": "04a6112e883ad76c0ada8e4a9f7520bbfdb6bb98", "shasum": "" }, "require": { @@ -5574,49 +5095,46 @@ ], "support": { "issues": "https://github.com/Seldaek/signal-handler/issues", - "source": "https://github.com/Seldaek/signal-handler/tree/2.0.1" + "source": "https://github.com/Seldaek/signal-handler/tree/2.0.2" }, - "time": "2022-07-20T18:31:45+00:00" + "time": "2023-09-03T09:24:00+00:00" }, { "name": "spomky-labs/otphp", - "version": "v10.0.3", + "version": "11.3.0", "source": { "type": "git", "url": "https://github.com/Spomky-Labs/otphp.git", - "reference": "9784d9f7c790eed26e102d6c78f12c754036c366" + "reference": "2d8ccb5fc992b9cc65ef321fa4f00fefdb3f4b33" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Spomky-Labs/otphp/zipball/9784d9f7c790eed26e102d6c78f12c754036c366", - "reference": "9784d9f7c790eed26e102d6c78f12c754036c366", + "url": "https://api.github.com/repos/Spomky-Labs/otphp/zipball/2d8ccb5fc992b9cc65ef321fa4f00fefdb3f4b33", + "reference": "2d8ccb5fc992b9cc65ef321fa4f00fefdb3f4b33", "shasum": "" }, "require": { - "beberlei/assert": "^3.0", "ext-mbstring": "*", - "paragonie/constant_time_encoding": "^2.0", - "php": "^7.2|^8.0", - "thecodingmachine/safe": "^0.1.14|^1.0|^2.0" + "paragonie/constant_time_encoding": "^2.0 || ^3.0", + "php": ">=8.1", + "psr/clock": "^1.0", + "symfony/deprecation-contracts": "^3.2" }, "require-dev": { - "php-coveralls/php-coveralls": "^2.0", - "phpstan/phpstan": "^0.12", - "phpstan/phpstan-beberlei-assert": "^0.12", - "phpstan/phpstan-deprecation-rules": "^0.12", - "phpstan/phpstan-phpunit": "^0.12", - "phpstan/phpstan-strict-rules": "^0.12", - "phpunit/phpunit": "^8.0", - "thecodingmachine/phpstan-safe-rule": "^1.0 || ^2.0" + "ekino/phpstan-banned-code": "^1.0", + "infection/infection": "^0.26|^0.27|^0.28|^0.29", + "php-parallel-lint/php-parallel-lint": "^1.3", + "phpstan/phpstan": "^1.0", + "phpstan/phpstan-deprecation-rules": "^1.0", + "phpstan/phpstan-phpunit": "^1.0", + "phpstan/phpstan-strict-rules": "^1.0", + "phpunit/phpunit": "^9.5.26|^10.0|^11.0", + "qossmic/deptrac-shim": "^1.0", + "rector/rector": "^1.0", + "symfony/phpunit-bridge": "^6.1|^7.0", + "symplify/easy-coding-standard": "^12.0" }, "type": "library", - "extra": { - "branch-alias": { - "v10.0": "10.0.x-dev", - "v9.0": "9.0.x-dev", - "v8.3": "8.3.x-dev" - } - }, "autoload": { "psr-4": { "OTPHP\\": "src/" @@ -5649,58 +5167,63 @@ ], "support": { "issues": "https://github.com/Spomky-Labs/otphp/issues", - "source": "https://github.com/Spomky-Labs/otphp/tree/v10.0.3" + "source": "https://github.com/Spomky-Labs/otphp/tree/11.3.0" }, - "time": "2022-03-17T08:00:35+00:00" + "funding": [ + { + "url": "https://github.com/Spomky", + "type": "github" + }, + { + "url": "https://www.patreon.com/FlorentMorselli", + "type": "patreon" + } + ], + "time": "2024-06-12T11:22:32+00:00" }, { "name": "symfony/console", - "version": "v5.4.22", + "version": "v6.4.22", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "3cd51fd2e6c461ca678f84d419461281bd87a0a8" + "reference": "7d29659bc3c9d8e9a34e2c3414ef9e9e003e6cf3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/3cd51fd2e6c461ca678f84d419461281bd87a0a8", - "reference": "3cd51fd2e6c461ca678f84d419461281bd87a0a8", + "url": "https://api.github.com/repos/symfony/console/zipball/7d29659bc3c9d8e9a34e2c3414ef9e9e003e6cf3", + "reference": "7d29659bc3c9d8e9a34e2c3414ef9e9e003e6cf3", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php73": "^1.9", - "symfony/polyfill-php80": "^1.16", - "symfony/service-contracts": "^1.1|^2|^3", - "symfony/string": "^5.1|^6.0" + "symfony/service-contracts": "^2.5|^3", + "symfony/string": "^5.4|^6.0|^7.0" }, "conflict": { - "psr/log": ">=3", - "symfony/dependency-injection": "<4.4", - "symfony/dotenv": "<5.1", - "symfony/event-dispatcher": "<4.4", - "symfony/lock": "<4.4", - "symfony/process": "<4.4" + "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" + "psr/log-implementation": "1.0|2.0|3.0" }, "require-dev": { - "psr/log": "^1|^2", - "symfony/config": "^4.4|^5.0|^6.0", - "symfony/dependency-injection": "^4.4|^5.0|^6.0", - "symfony/event-dispatcher": "^4.4|^5.0|^6.0", - "symfony/lock": "^4.4|^5.0|^6.0", - "symfony/process": "^4.4|^5.0|^6.0", - "symfony/var-dumper": "^4.4|^5.0|^6.0" - }, - "suggest": { - "psr/log": "For using the console logger", - "symfony/event-dispatcher": "", - "symfony/lock": "", - "symfony/process": "" + "psr/log": "^1|^2|^3", + "symfony/config": "^5.4|^6.0|^7.0", + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/event-dispatcher": "^5.4|^6.0|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/lock": "^5.4|^6.0|^7.0", + "symfony/messenger": "^5.4|^6.0|^7.0", + "symfony/process": "^5.4|^6.0|^7.0", + "symfony/stopwatch": "^5.4|^6.0|^7.0", + "symfony/var-dumper": "^5.4|^6.0|^7.0" }, "type": "library", "autoload": { @@ -5734,7 +5257,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v5.4.22" + "source": "https://github.com/symfony/console/tree/v6.4.22" }, "funding": [ { @@ -5750,24 +5273,24 @@ "type": "tidelift" } ], - "time": "2023-03-25T09:27:28+00:00" + "time": "2025-05-07T07:05:04+00:00" }, { "name": "symfony/css-selector", - "version": "v6.2.7", + "version": "v7.3.0", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "aedf3cb0f5b929ec255d96bbb4909e9932c769e0" + "reference": "601a5ce9aaad7bf10797e3663faefce9e26c24e2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/aedf3cb0f5b929ec255d96bbb4909e9932c769e0", - "reference": "aedf3cb0f5b929ec255d96bbb4909e9932c769e0", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/601a5ce9aaad7bf10797e3663faefce9e26c24e2", + "reference": "601a5ce9aaad7bf10797e3663faefce9e26c24e2", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "type": "library", "autoload": { @@ -5799,7 +5322,7 @@ "description": "Converts CSS selectors to XPath expressions", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/css-selector/tree/v6.2.7" + "source": "https://github.com/symfony/css-selector/tree/v7.3.0" }, "funding": [ { @@ -5815,20 +5338,20 @@ "type": "tidelift" } ], - "time": "2023-02-14T08:44:56+00:00" + "time": "2024-09-25T14:21:43+00:00" }, { "name": "symfony/deprecation-contracts", - "version": "v3.3.0", + "version": "v3.6.0", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "7c3aff79d10325257a001fcf92d991f24fc967cf" + "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/7c3aff79d10325257a001fcf92d991f24fc967cf", - "reference": "7c3aff79d10325257a001fcf92d991f24fc967cf", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/63afe740e99a13ba87ec199bb07bbdee937a5b62", + "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62", "shasum": "" }, "require": { @@ -5836,12 +5359,12 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "3.4-dev" - }, "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.6-dev" } }, "autoload": { @@ -5866,7 +5389,7 @@ "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v3.3.0" + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.6.0" }, "funding": [ { @@ -5882,20 +5405,20 @@ "type": "tidelift" } ], - "time": "2023-05-23T14:45:45+00:00" + "time": "2024-09-25T14:21:43+00:00" }, { "name": "symfony/dotenv", - "version": "v6.3.0", + "version": "v6.4.16", "source": { "type": "git", "url": "https://github.com/symfony/dotenv.git", - "reference": "ceadb434fe2a6763a03d2d110441745834f3dd1e" + "reference": "1ac5e7e7e862d4d574258daf08bd569ba926e4a5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dotenv/zipball/ceadb434fe2a6763a03d2d110441745834f3dd1e", - "reference": "ceadb434fe2a6763a03d2d110441745834f3dd1e", + "url": "https://api.github.com/repos/symfony/dotenv/zipball/1ac5e7e7e862d4d574258daf08bd569ba926e4a5", + "reference": "1ac5e7e7e862d4d574258daf08bd569ba926e4a5", "shasum": "" }, "require": { @@ -5906,8 +5429,8 @@ "symfony/process": "<5.4" }, "require-dev": { - "symfony/console": "^5.4|^6.0", - "symfony/process": "^5.4|^6.0" + "symfony/console": "^5.4|^6.0|^7.0", + "symfony/process": "^5.4|^6.0|^7.0" }, "type": "library", "autoload": { @@ -5940,7 +5463,7 @@ "environment" ], "support": { - "source": "https://github.com/symfony/dotenv/tree/v6.3.0" + "source": "https://github.com/symfony/dotenv/tree/v6.4.16" }, "funding": [ { @@ -5956,28 +5479,29 @@ "type": "tidelift" } ], - "time": "2023-04-21T14:41:17+00:00" + "time": "2024-11-27T11:08:19+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v6.2.8", + "version": "v7.3.0", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "04046f35fd7d72f9646e721fc2ecb8f9c67d3339" + "reference": "497f73ac996a598c92409b44ac43b6690c4f666d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/04046f35fd7d72f9646e721fc2ecb8f9c67d3339", - "reference": "04046f35fd7d72f9646e721fc2ecb8f9c67d3339", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/497f73ac996a598c92409b44ac43b6690c4f666d", + "reference": "497f73ac996a598c92409b44ac43b6690c4f666d", "shasum": "" }, "require": { - "php": ">=8.1", - "symfony/event-dispatcher-contracts": "^2|^3" + "php": ">=8.2", + "symfony/event-dispatcher-contracts": "^2.5|^3" }, "conflict": { - "symfony/dependency-injection": "<5.4" + "symfony/dependency-injection": "<6.4", + "symfony/service-contracts": "<2.5" }, "provide": { "psr/event-dispatcher-implementation": "1.0", @@ -5985,17 +5509,13 @@ }, "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": "" + "symfony/config": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/error-handler": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/stopwatch": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -6023,7 +5543,7 @@ "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" + "source": "https://github.com/symfony/event-dispatcher/tree/v7.3.0" }, "funding": [ { @@ -6039,37 +5559,34 @@ "type": "tidelift" } ], - "time": "2023-03-20T16:06:02+00:00" + "time": "2025-04-22T09:11:45+00:00" }, { "name": "symfony/event-dispatcher-contracts", - "version": "v3.2.1", + "version": "v3.6.0", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "0ad3b6f1e4e2da5690fefe075cd53a238646d8dd" + "reference": "59eb412e93815df44f05f342958efa9f46b1e586" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/0ad3b6f1e4e2da5690fefe075cd53a238646d8dd", - "reference": "0ad3b6f1e4e2da5690fefe075cd53a238646d8dd", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/59eb412e93815df44f05f342958efa9f46b1e586", + "reference": "59eb412e93815df44f05f342958efa9f46b1e586", "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" + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.6-dev" } }, "autoload": { @@ -6102,7 +5619,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.2.1" + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.6.0" }, "funding": [ { @@ -6118,27 +5635,30 @@ "type": "tidelift" } ], - "time": "2023-03-01T10:32:47+00:00" + "time": "2024-09-25T14:21:43+00:00" }, { "name": "symfony/filesystem", - "version": "v6.2.7", + "version": "v7.3.0", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "82b6c62b959f642d000456f08c6d219d749215b3" + "reference": "b8dce482de9d7c9fe2891155035a7248ab5c7fdb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/82b6c62b959f642d000456f08c6d219d749215b3", - "reference": "82b6c62b959f642d000456f08c6d219d749215b3", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/b8dce482de9d7c9fe2891155035a7248ab5c7fdb", + "reference": "b8dce482de9d7c9fe2891155035a7248ab5c7fdb", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-mbstring": "~1.8" }, + "require-dev": { + "symfony/process": "^6.4|^7.0" + }, "type": "library", "autoload": { "psr-4": { @@ -6165,7 +5685,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v6.2.7" + "source": "https://github.com/symfony/filesystem/tree/v7.3.0" }, "funding": [ { @@ -6181,27 +5701,27 @@ "type": "tidelift" } ], - "time": "2023-02-14T08:44:56+00:00" + "time": "2024-10-25T15:15:23+00:00" }, { "name": "symfony/finder", - "version": "v6.3.0", + "version": "v6.4.17", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "d9b01ba073c44cef617c7907ce2419f8d00d75e2" + "reference": "1d0e8266248c5d9ab6a87e3789e6dc482af3c9c7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/d9b01ba073c44cef617c7907ce2419f8d00d75e2", - "reference": "d9b01ba073c44cef617c7907ce2419f8d00d75e2", + "url": "https://api.github.com/repos/symfony/finder/zipball/1d0e8266248c5d9ab6a87e3789e6dc482af3c9c7", + "reference": "1d0e8266248c5d9ab6a87e3789e6dc482af3c9c7", "shasum": "" }, "require": { "php": ">=8.1" }, "require-dev": { - "symfony/filesystem": "^6.0" + "symfony/filesystem": "^6.0|^7.0" }, "type": "library", "autoload": { @@ -6229,84 +5749,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v6.3.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": "2023-04-02T01:25:41+00:00" - }, - { - "name": "symfony/http-foundation", - "version": "v6.3.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/http-foundation.git", - "reference": "718a97ed430d34e5c568ea2c44eab708c6efbefb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/718a97ed430d34e5c568ea2c44eab708c6efbefb", - "reference": "718a97ed430d34e5c568ea2c44eab708c6efbefb", - "shasum": "" - }, - "require": { - "php": ">=8.1", - "symfony/deprecation-contracts": "^2.5|^3", - "symfony/polyfill-mbstring": "~1.1", - "symfony/polyfill-php83": "^1.27" - }, - "conflict": { - "symfony/cache": "<6.2" - }, - "require-dev": { - "doctrine/dbal": "^2.13.1|^3.0", - "predis/predis": "^1.1|^2.0", - "symfony/cache": "^5.4|^6.0", - "symfony/dependency-injection": "^5.4|^6.0", - "symfony/expression-language": "^5.4|^6.0", - "symfony/http-kernel": "^5.4.12|^6.0.12|^6.1.4", - "symfony/mime": "^5.4|^6.0", - "symfony/rate-limiter": "^5.2|^6.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\HttpFoundation\\": "" - }, - "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": "Defines an object-oriented layer for the HTTP specification", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/http-foundation/tree/v6.3.0" + "source": "https://github.com/symfony/finder/tree/v6.4.17" }, "funding": [ { @@ -6322,24 +5765,25 @@ "type": "tidelift" } ], - "time": "2023-05-19T12:46:45+00:00" + "time": "2024-12-29T13:51:37+00:00" }, { "name": "symfony/mime", - "version": "v6.3.0", + "version": "v6.4.21", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "7b5d2121858cd6efbed778abce9cfdd7ab1f62ad" + "reference": "fec8aa5231f3904754955fad33c2db50594d22d1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/7b5d2121858cd6efbed778abce9cfdd7ab1f62ad", - "reference": "7b5d2121858cd6efbed778abce9cfdd7ab1f62ad", + "url": "https://api.github.com/repos/symfony/mime/zipball/fec8aa5231f3904754955fad33c2db50594d22d1", + "reference": "fec8aa5231f3904754955fad33c2db50594d22d1", "shasum": "" }, "require": { "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-intl-idn": "^1.10", "symfony/polyfill-mbstring": "^1.0" }, @@ -6348,16 +5792,17 @@ "phpdocumentor/reflection-docblock": "<3.2.2", "phpdocumentor/type-resolver": "<1.4.0", "symfony/mailer": "<5.4", - "symfony/serializer": "<6.2" + "symfony/serializer": "<6.4.3|>7.0,<7.0.3" }, "require-dev": { "egulias/email-validator": "^2.1.10|^3.1|^4", "league/html-to-markdown": "^5.0", "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", - "symfony/dependency-injection": "^5.4|^6.0", - "symfony/property-access": "^5.4|^6.0", - "symfony/property-info": "^5.4|^6.0", - "symfony/serializer": "^6.2" + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/process": "^5.4|^6.4|^7.0", + "symfony/property-access": "^5.4|^6.0|^7.0", + "symfony/property-info": "^5.4|^6.0|^7.0", + "symfony/serializer": "^6.4.3|^7.0.3" }, "type": "library", "autoload": { @@ -6389,7 +5834,7 @@ "mime-type" ], "support": { - "source": "https://github.com/symfony/mime/tree/v6.3.0" + "source": "https://github.com/symfony/mime/tree/v6.4.21" }, "funding": [ { @@ -6405,24 +5850,24 @@ "type": "tidelift" } ], - "time": "2023-04-28T15:57:00+00:00" + "time": "2025-04-27T13:27:38+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.27.0", + "version": "v1.32.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "5bbc823adecdae860bb64756d639ecfec17b050a" + "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/5bbc823adecdae860bb64756d639ecfec17b050a", - "reference": "5bbc823adecdae860bb64756d639ecfec17b050a", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/a3cc8b044a6ea513310cbd48ef7333b384945638", + "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "provide": { "ext-ctype": "*" @@ -6432,12 +5877,9 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.27-dev" - }, "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -6471,7 +5913,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.27.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.32.0" }, "funding": [ { @@ -6487,36 +5929,33 @@ "type": "tidelift" } ], - "time": "2022-11-03T14:55:06+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.27.0", + "version": "v1.32.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "511a08c03c1960e08a883f4cffcacd219b758354" + "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/511a08c03c1960e08a883f4cffcacd219b758354", - "reference": "511a08c03c1960e08a883f4cffcacd219b758354", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe", + "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "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" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -6552,7 +5991,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.27.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.32.0" }, "funding": [ { @@ -6568,38 +6007,34 @@ "type": "tidelift" } ], - "time": "2022-11-03T14:55:06+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-intl-idn", - "version": "v1.27.0", + "version": "v1.32.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "639084e360537a19f9ee352433b84ce831f3d2da" + "reference": "9614ac4d8061dc257ecc64cba1b140873dce8ad3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/639084e360537a19f9ee352433b84ce831f3d2da", - "reference": "639084e360537a19f9ee352433b84ce831f3d2da", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/9614ac4d8061dc257ecc64cba1b140873dce8ad3", + "reference": "9614ac4d8061dc257ecc64cba1b140873dce8ad3", "shasum": "" }, "require": { - "php": ">=7.1", - "symfony/polyfill-intl-normalizer": "^1.10", - "symfony/polyfill-php72": "^1.10" + "php": ">=7.2", + "symfony/polyfill-intl-normalizer": "^1.10" }, "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" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -6639,7 +6074,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.27.0" + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.32.0" }, "funding": [ { @@ -6655,36 +6090,33 @@ "type": "tidelift" } ], - "time": "2022-11-03T14:55:06+00:00" + "time": "2024-09-10T14:38:51+00:00" }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.27.0", + "version": "v1.32.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6" + "reference": "3833d7255cc303546435cb650316bff708a1c75c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/19bd1e4fcd5b91116f14d8533c57831ed00571b6", - "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/3833d7255cc303546435cb650316bff708a1c75c", + "reference": "3833d7255cc303546435cb650316bff708a1c75c", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "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" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -6723,7 +6155,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.27.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.32.0" }, "funding": [ { @@ -6739,24 +6171,25 @@ "type": "tidelift" } ], - "time": "2022-11-03T14:55:06+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.27.0", + "version": "v1.32.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534" + "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/8ad114f6b39e2c98a8b0e3bd907732c207c2b534", - "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/6d857f4d76bd4b343eac26d6b539585d2bc56493", + "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493", "shasum": "" }, "require": { - "php": ">=7.1" + "ext-iconv": "*", + "php": ">=7.2" }, "provide": { "ext-mbstring": "*" @@ -6766,12 +6199,9 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.27-dev" - }, "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -6806,83 +6236,7 @@ "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-php72", - "version": "v1.27.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "869329b1e9894268a8a61dabb69153029b7a8c97" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/869329b1e9894268a8a61dabb69153029b7a8c97", - "reference": "869329b1e9894268a8a61dabb69153029b7a8c97", - "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\\Php72\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php72/tree/v1.27.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.32.0" }, "funding": [ { @@ -6898,33 +6252,30 @@ "type": "tidelift" } ], - "time": "2022-11-03T14:55:06+00:00" + "time": "2024-12-23T08:48:59+00:00" }, { "name": "symfony/polyfill-php73", - "version": "v1.27.0", + "version": "v1.32.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php73.git", - "reference": "9e8ecb5f92152187c4799efd3c96b78ccab18ff9" + "reference": "0f68c03565dcaaf25a890667542e8bd75fe7e5bb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/9e8ecb5f92152187c4799efd3c96b78ccab18ff9", - "reference": "9e8ecb5f92152187c4799efd3c96b78ccab18ff9", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/0f68c03565dcaaf25a890667542e8bd75fe7e5bb", + "reference": "0f68c03565dcaaf25a890667542e8bd75fe7e5bb", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.27-dev" - }, "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -6961,7 +6312,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php73/tree/v1.27.0" + "source": "https://github.com/symfony/polyfill-php73/tree/v1.32.0" }, "funding": [ { @@ -6977,33 +6328,30 @@ "type": "tidelift" } ], - "time": "2022-11-03T14:55:06+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-php80", - "version": "v1.27.0", + "version": "v1.32.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936" + "reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", - "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/0cc9dd0f17f61d8131e7df6b84bd344899fe2608", + "reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.27-dev" - }, "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -7025,86 +6373,7 @@ { "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" @@ -7114,7 +6383,7 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions", + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", "homepage": "https://symfony.com", "keywords": [ "compatibility", @@ -7123,7 +6392,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php81/tree/v1.27.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.32.0" }, "funding": [ { @@ -7139,34 +6408,30 @@ "type": "tidelift" } ], - "time": "2022-11-03T14:55:06+00:00" + "time": "2025-01-02T08:10:11+00:00" }, { - "name": "symfony/polyfill-php83", - "version": "v1.27.0", + "name": "symfony/polyfill-php81", + "version": "v1.32.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php83.git", - "reference": "508c652ba3ccf69f8c97f251534f229791b52a57" + "url": "https://github.com/symfony/polyfill-php81.git", + "reference": "4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/508c652ba3ccf69f8c97f251534f229791b52a57", - "reference": "508c652ba3ccf69f8c97f251534f229791b52a57", + "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c", + "reference": "4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c", "shasum": "" }, "require": { - "php": ">=7.1", - "symfony/polyfill-php80": "^1.14" + "php": ">=7.2" }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.27-dev" - }, "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -7174,8 +6439,11 @@ "bootstrap.php" ], "psr-4": { - "Symfony\\Polyfill\\Php83\\": "" - } + "Symfony\\Polyfill\\Php81\\": "" + }, + "classmap": [ + "Resources/stubs" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -7191,7 +6459,7 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill backporting some PHP 8.3+ features to lower PHP versions", + "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions", "homepage": "https://symfony.com", "keywords": [ "compatibility", @@ -7200,7 +6468,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php83/tree/v1.27.0" + "source": "https://github.com/symfony/polyfill-php81/tree/v1.32.0" }, "funding": [ { @@ -7216,25 +6484,24 @@ "type": "tidelift" } ], - "time": "2022-11-03T14:55:06+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/process", - "version": "v5.4.23", + "version": "v6.4.20", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "4b842fc4b61609e0a155a114082bd94e31e98287" + "reference": "e2a61c16af36c9a07e5c9906498b73e091949a20" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/4b842fc4b61609e0a155a114082bd94e31e98287", - "reference": "4b842fc4b61609e0a155a114082bd94e31e98287", + "url": "https://api.github.com/repos/symfony/process/zipball/e2a61c16af36c9a07e5c9906498b73e091949a20", + "reference": "e2a61c16af36c9a07e5c9906498b73e091949a20", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/polyfill-php80": "^1.16" + "php": ">=8.1" }, "type": "library", "autoload": { @@ -7262,7 +6529,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v5.4.23" + "source": "https://github.com/symfony/process/tree/v6.4.20" }, "funding": [ { @@ -7278,40 +6545,38 @@ "type": "tidelift" } ], - "time": "2023-04-18T13:50:24+00:00" + "time": "2025-03-10T17:11:00+00:00" }, { "name": "symfony/service-contracts", - "version": "v3.2.1", + "version": "v3.6.0", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "a8c9cedf55f314f3a186041d19537303766df09a" + "reference": "f021b05a130d35510bd6b25fe9053c2a8a15d5d4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/a8c9cedf55f314f3a186041d19537303766df09a", - "reference": "a8c9cedf55f314f3a186041d19537303766df09a", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/f021b05a130d35510bd6b25fe9053c2a8a15d5d4", + "reference": "f021b05a130d35510bd6b25fe9053c2a8a15d5d4", "shasum": "" }, "require": { "php": ">=8.1", - "psr/container": "^2.0" + "psr/container": "^1.1|^2.0", + "symfony/deprecation-contracts": "^2.5|^3" }, "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" + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.6-dev" } }, "autoload": { @@ -7347,7 +6612,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v3.2.1" + "source": "https://github.com/symfony/service-contracts/tree/v3.6.0" }, "funding": [ { @@ -7363,24 +6628,24 @@ "type": "tidelift" } ], - "time": "2023-03-01T10:32:47+00:00" + "time": "2025-04-25T09:37:31+00:00" }, { "name": "symfony/string", - "version": "v6.3.0", + "version": "v7.3.0", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "f2e190ee75ff0f5eced645ec0be5c66fac81f51f" + "reference": "f3570b8c61ca887a9e2938e85cb6458515d2b125" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/f2e190ee75ff0f5eced645ec0be5c66fac81f51f", - "reference": "f2e190ee75ff0f5eced645ec0be5c66fac81f51f", + "url": "https://api.github.com/repos/symfony/string/zipball/f3570b8c61ca887a9e2938e85cb6458515d2b125", + "reference": "f3570b8c61ca887a9e2938e85cb6458515d2b125", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-intl-grapheme": "~1.0", "symfony/polyfill-intl-normalizer": "~1.0", @@ -7390,11 +6655,12 @@ "symfony/translation-contracts": "<2.5" }, "require-dev": { - "symfony/error-handler": "^5.4|^6.0", - "symfony/http-client": "^5.4|^6.0", - "symfony/intl": "^6.2", + "symfony/emoji": "^7.1", + "symfony/error-handler": "^6.4|^7.0", + "symfony/http-client": "^6.4|^7.0", + "symfony/intl": "^6.4|^7.0", "symfony/translation-contracts": "^2.5|^3.0", - "symfony/var-exporter": "^5.4|^6.0" + "symfony/var-exporter": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -7433,7 +6699,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v6.3.0" + "source": "https://github.com/symfony/string/tree/v7.3.0" }, "funding": [ { @@ -7449,41 +6715,37 @@ "type": "tidelift" } ], - "time": "2023-03-21T21:06:29+00:00" + "time": "2025-04-20T20:19:01+00:00" }, { "name": "symfony/var-dumper", - "version": "v6.2.8", + "version": "v7.3.0", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "d37ab6787be2db993747b6218fcc96e8e3bb4bd0" + "reference": "548f6760c54197b1084e1e5c71f6d9d523f2f78e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/d37ab6787be2db993747b6218fcc96e8e3bb4bd0", - "reference": "d37ab6787be2db993747b6218fcc96e8e3bb4bd0", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/548f6760c54197b1084e1e5c71f6d9d523f2f78e", + "reference": "548f6760c54197b1084e1e5c71f6d9d523f2f78e", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-mbstring": "~1.0" }, "conflict": { - "phpunit/phpunit": "<5.4.3", - "symfony/console": "<5.4" + "symfony/console": "<6.4" }, "require-dev": { "ext-iconv": "*", - "symfony/console": "^5.4|^6.0", - "symfony/process": "^5.4|^6.0", - "symfony/uid": "^5.4|^6.0", - "twig/twig": "^2.13|^3.0.4" - }, - "suggest": { - "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).", - "ext-intl": "To show region name in time zone dump", - "symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script" + "symfony/console": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/process": "^6.4|^7.0", + "symfony/uid": "^6.4|^7.0", + "twig/twig": "^3.12" }, "bin": [ "Resources/bin/var-dump-server" @@ -7521,7 +6783,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v6.2.8" + "source": "https://github.com/symfony/var-dumper/tree/v7.3.0" }, "funding": [ { @@ -7537,34 +6799,32 @@ "type": "tidelift" } ], - "time": "2023-03-29T21:42:15+00:00" + "time": "2025-04-27T18:39:23+00:00" }, { "name": "symfony/yaml", - "version": "v6.2.7", + "version": "v7.3.0", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "e8e6a1d59e050525f27a1f530aa9703423cb7f57" + "reference": "cea40a48279d58dc3efee8112634cb90141156c2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/e8e6a1d59e050525f27a1f530aa9703423cb7f57", - "reference": "e8e6a1d59e050525f27a1f530aa9703423cb7f57", + "url": "https://api.github.com/repos/symfony/yaml/zipball/cea40a48279d58dc3efee8112634cb90141156c2", + "reference": "cea40a48279d58dc3efee8112634cb90141156c2", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3.0", "symfony/polyfill-ctype": "^1.8" }, "conflict": { - "symfony/console": "<5.4" + "symfony/console": "<6.4" }, "require-dev": { - "symfony/console": "^5.4|^6.0" - }, - "suggest": { - "symfony/console": "For validating YAML files using the lint command" + "symfony/console": "^6.4|^7.0" }, "bin": [ "Resources/bin/yaml-lint" @@ -7595,7 +6855,7 @@ "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/yaml/tree/v6.2.7" + "source": "https://github.com/symfony/yaml/tree/v7.3.0" }, "funding": [ { @@ -7611,159 +6871,20 @@ "type": "tidelift" } ], - "time": "2023-02-16T09:57:23+00:00" - }, - { - "name": "thecodingmachine/safe", - "version": "v2.5.0", - "source": { - "type": "git", - "url": "https://github.com/thecodingmachine/safe.git", - "reference": "3115ecd6b4391662b4931daac4eba6b07a2ac1f0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/thecodingmachine/safe/zipball/3115ecd6b4391662b4931daac4eba6b07a2ac1f0", - "reference": "3115ecd6b4391662b4931daac4eba6b07a2ac1f0", - "shasum": "" - }, - "require": { - "php": "^8.0" - }, - "require-dev": { - "phpstan/phpstan": "^1.5", - "phpunit/phpunit": "^9.5", - "squizlabs/php_codesniffer": "^3.2", - "thecodingmachine/phpstan-strict-rules": "^1.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.2.x-dev" - } - }, - "autoload": { - "files": [ - "deprecated/apc.php", - "deprecated/array.php", - "deprecated/datetime.php", - "deprecated/libevent.php", - "deprecated/misc.php", - "deprecated/password.php", - "deprecated/mssql.php", - "deprecated/stats.php", - "deprecated/strings.php", - "lib/special_cases.php", - "deprecated/mysqli.php", - "generated/apache.php", - "generated/apcu.php", - "generated/array.php", - "generated/bzip2.php", - "generated/calendar.php", - "generated/classobj.php", - "generated/com.php", - "generated/cubrid.php", - "generated/curl.php", - "generated/datetime.php", - "generated/dir.php", - "generated/eio.php", - "generated/errorfunc.php", - "generated/exec.php", - "generated/fileinfo.php", - "generated/filesystem.php", - "generated/filter.php", - "generated/fpm.php", - "generated/ftp.php", - "generated/funchand.php", - "generated/gettext.php", - "generated/gmp.php", - "generated/gnupg.php", - "generated/hash.php", - "generated/ibase.php", - "generated/ibmDb2.php", - "generated/iconv.php", - "generated/image.php", - "generated/imap.php", - "generated/info.php", - "generated/inotify.php", - "generated/json.php", - "generated/ldap.php", - "generated/libxml.php", - "generated/lzf.php", - "generated/mailparse.php", - "generated/mbstring.php", - "generated/misc.php", - "generated/mysql.php", - "generated/network.php", - "generated/oci8.php", - "generated/opcache.php", - "generated/openssl.php", - "generated/outcontrol.php", - "generated/pcntl.php", - "generated/pcre.php", - "generated/pgsql.php", - "generated/posix.php", - "generated/ps.php", - "generated/pspell.php", - "generated/readline.php", - "generated/rpminfo.php", - "generated/rrd.php", - "generated/sem.php", - "generated/session.php", - "generated/shmop.php", - "generated/sockets.php", - "generated/sodium.php", - "generated/solr.php", - "generated/spl.php", - "generated/sqlsrv.php", - "generated/ssdeep.php", - "generated/ssh2.php", - "generated/stream.php", - "generated/strings.php", - "generated/swoole.php", - "generated/uodbc.php", - "generated/uopz.php", - "generated/url.php", - "generated/var.php", - "generated/xdiff.php", - "generated/xml.php", - "generated/xmlrpc.php", - "generated/yaml.php", - "generated/yaz.php", - "generated/zip.php", - "generated/zlib.php" - ], - "classmap": [ - "lib/DateTime.php", - "lib/DateTimeImmutable.php", - "lib/Exceptions/", - "deprecated/Exceptions/", - "generated/Exceptions/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "PHP core functions that throw exceptions instead of returning FALSE on error", - "support": { - "issues": "https://github.com/thecodingmachine/safe/issues", - "source": "https://github.com/thecodingmachine/safe/tree/v2.5.0" - }, - "time": "2023-04-05T11:54:14+00:00" + "time": "2025-04-04T10:10:33+00:00" }, { "name": "theseer/tokenizer", - "version": "1.2.1", + "version": "1.2.3", "source": { "type": "git", "url": "https://github.com/theseer/tokenizer.git", - "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e" + "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/34a41e998c2183e22995f158c581e7b5e755ab9e", - "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", + "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", "shasum": "" }, "require": { @@ -7792,7 +6913,7 @@ "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" + "source": "https://github.com/theseer/tokenizer/tree/1.2.3" }, "funding": [ { @@ -7800,65 +6921,7 @@ "type": "github" } ], - "time": "2021-07-28T10:34:58+00:00" - }, - { - "name": "webmozart/assert", - "version": "1.11.0", - "source": { - "type": "git", - "url": "https://github.com/webmozarts/assert.git", - "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991", - "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991", - "shasum": "" - }, - "require": { - "ext-ctype": "*", - "php": "^7.2 || ^8.0" - }, - "conflict": { - "phpstan/phpstan": "<0.12.20", - "vimeo/psalm": "<4.6.1 || 4.6.2" - }, - "require-dev": { - "phpunit/phpunit": "^8.5.13" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.10-dev" - } - }, - "autoload": { - "psr-4": { - "Webmozart\\Assert\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" - } - ], - "description": "Assertions to validate method input/output with nice error messages.", - "keywords": [ - "assert", - "check", - "validate" - ], - "support": { - "issues": "https://github.com/webmozarts/assert/issues", - "source": "https://github.com/webmozarts/assert/tree/1.11.0" - }, - "time": "2022-06-03T18:03:27+00:00" + "time": "2024-03-03T12:36:25+00:00" }, { "name": "weew/helpers-array", @@ -7905,26 +6968,26 @@ "packages-dev": [ { "name": "brainmaestro/composer-git-hooks", - "version": "v2.8.5", + "version": "v3.0.0", "source": { "type": "git", "url": "https://github.com/BrainMaestro/composer-git-hooks.git", - "reference": "ffed8803690ac12214082120eee3441b00aa390e" + "reference": "684dc85f480268baf5e13f39a3cc494eeb2536e8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/BrainMaestro/composer-git-hooks/zipball/ffed8803690ac12214082120eee3441b00aa390e", - "reference": "ffed8803690ac12214082120eee3441b00aa390e", + "url": "https://api.github.com/repos/BrainMaestro/composer-git-hooks/zipball/684dc85f480268baf5e13f39a3cc494eeb2536e8", + "reference": "684dc85f480268baf5e13f39a3cc494eeb2536e8", "shasum": "" }, "require": { - "php": "^5.6 || >=7.0", - "symfony/console": "^3.2 || ^4.0 || ^5.0" + "php": "^8.0", + "symfony/console": "^5.0|^6.0|^7.0" }, "require-dev": { "ext-json": "*", - "friendsofphp/php-cs-fixer": "^2.9", - "phpunit/phpunit": "^5.7 || ^7.0" + "friendsofphp/php-cs-fixer": "^3.0", + "phpunit/phpunit": "^9|^10|^11" }, "bin": [ "cghooks" @@ -7932,18 +6995,18 @@ "type": "library", "extra": { "hooks": { - "pre-commit": "composer check-style", "pre-push": [ "composer test", - "appver=$(grep -o -E '\\d.\\d.\\d' cghooks)", - "tag=$(git describe --tags --abbrev=0)", - "if [ \"$tag\" != \"v$appver\" ]; then", - "echo \"The most recent tag $tag does not match the application version $appver\\n\"", + "appver=$(grep -o -E '[0-9]+\\.[0-9]+\\.[0-9]+(-alpha\\.[0-9]+)?' cghooks)", + "tag=$(git tag | tail -n 1)", "tag=${tag#v}", + "if [ \"$tag\" != \"$appver\" ]; then", + "echo \"The most recent tag $tag does not match the application version $appver\\n\"", "sed -i -E \"s/$appver/$tag/\" cghooks", "exit 1", "fi" - ] + ], + "pre-commit": "composer check-style" } }, "autoload": { @@ -7972,160 +7035,34 @@ ], "support": { "issues": "https://github.com/BrainMaestro/composer-git-hooks/issues", - "source": "https://github.com/BrainMaestro/composer-git-hooks/tree/v2.8.5" - }, - "time": "2021-02-08T15:59:11+00:00" - }, - { - "name": "codacy/coverage", - "version": "1.4.3", - "source": { - "type": "git", - "url": "https://github.com/codacy/php-codacy-coverage.git", - "reference": "1852ca987c91ef466ebcfdbdd4e1788b653eaf1d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/codacy/php-codacy-coverage/zipball/1852ca987c91ef466ebcfdbdd4e1788b653eaf1d", - "reference": "1852ca987c91ef466ebcfdbdd4e1788b653eaf1d", - "shasum": "" - }, - "require": { - "gitonomy/gitlib": ">=1.0", - "php": ">=5.3.3", - "symfony/console": "~2.5|~3.0|~4.0|~5.0" - }, - "require-dev": { - "clue/phar-composer": "^1.1", - "phpunit/phpunit": "~6.5" - }, - "bin": [ - "bin/codacycoverage" - ], - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] + "source": "https://github.com/BrainMaestro/composer-git-hooks/tree/v3.0.0" }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jakob Pupke", - "email": "jakob.pupke@gmail.com" - } - ], - "description": "Sends PHP test coverage information to Codacy.", - "homepage": "https://github.com/codacy/php-codacy-coverage", - "support": { - "issues": "https://github.com/codacy/php-codacy-coverage/issues", - "source": "https://github.com/codacy/php-codacy-coverage/tree/master" - }, - "abandoned": true, - "time": "2020-01-10T10:52:12+00:00" - }, - { - "name": "gitonomy/gitlib", - "version": "v1.3.7", - "source": { - "type": "git", - "url": "https://github.com/gitonomy/gitlib.git", - "reference": "00b57b79f02396aa4c7c163f76fe2bc48faebbb7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/gitonomy/gitlib/zipball/00b57b79f02396aa4c7c163f76fe2bc48faebbb7", - "reference": "00b57b79f02396aa4c7c163f76fe2bc48faebbb7", - "shasum": "" - }, - "require": { - "ext-pcre": "*", - "php": "^5.6 || ^7.0 || ^8.0", - "symfony/polyfill-mbstring": "^1.7", - "symfony/process": "^3.4 || ^4.4 || ^5.0 || ^6.0" - }, - "require-dev": { - "ext-fileinfo": "*", - "phpspec/prophecy": "^1.10.2", - "phpunit/phpunit": "^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.20 || ^9.5.9", - "psr/log": "^1.0" - }, - "suggest": { - "ext-fileinfo": "Required to determine the mimetype of a blob", - "psr/log": "Required to use loggers for reporting of execution" - }, - "type": "library", - "autoload": { - "psr-4": { - "Gitonomy\\Git\\": "src/Gitonomy/Git/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Graham Campbell", - "email": "hello@gjcampbell.co.uk", - "homepage": "https://github.com/GrahamCampbell" - }, - { - "name": "Julien Didier", - "email": "genzo.wm@gmail.com", - "homepage": "https://github.com/juliendidier" - }, - { - "name": "Grégoire Pineau", - "email": "lyrixx@lyrixx.info", - "homepage": "https://github.com/lyrixx" - }, - { - "name": "Alexandre Salomé", - "email": "alexandre.salome@gmail.com", - "homepage": "https://github.com/alexandresalome" - } - ], - "description": "Library for accessing git", - "support": { - "issues": "https://github.com/gitonomy/gitlib/issues", - "source": "https://github.com/gitonomy/gitlib/tree/v1.3.7" - }, - "funding": [ - { - "url": "https://tidelift.com/funding/github/packagist/gitonomy/gitlib", - "type": "tidelift" - } - ], - "time": "2022-10-04T14:20:15+00:00" + "time": "2024-06-22T09:17:59+00:00" }, { "name": "pdepend/pdepend", - "version": "2.13.0", + "version": "2.16.2", "source": { "type": "git", "url": "https://github.com/pdepend/pdepend.git", - "reference": "31be7cd4f305f3f7b52af99c1cb13fc938d1cfad" + "reference": "f942b208dc2a0868454d01b29f0c75bbcfc6ed58" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/pdepend/pdepend/zipball/31be7cd4f305f3f7b52af99c1cb13fc938d1cfad", - "reference": "31be7cd4f305f3f7b52af99c1cb13fc938d1cfad", + "url": "https://api.github.com/repos/pdepend/pdepend/zipball/f942b208dc2a0868454d01b29f0c75bbcfc6ed58", + "reference": "f942b208dc2a0868454d01b29f0c75bbcfc6ed58", "shasum": "" }, "require": { "php": ">=5.3.7", - "symfony/config": "^2.3.0|^3|^4|^5|^6.0", - "symfony/dependency-injection": "^2.3.0|^3|^4|^5|^6.0", - "symfony/filesystem": "^2.3.0|^3|^4|^5|^6.0" + "symfony/config": "^2.3.0|^3|^4|^5|^6.0|^7.0", + "symfony/dependency-injection": "^2.3.0|^3|^4|^5|^6.0|^7.0", + "symfony/filesystem": "^2.3.0|^3|^4|^5|^6.0|^7.0", + "symfony/polyfill-mbstring": "^1.19" }, "require-dev": { "easy-doc/easy-doc": "0.0.0|^1.2.3", "gregwar/rst": "^1.0", - "phpunit/phpunit": "^4.8.36|^5.7.27", "squizlabs/php_codesniffer": "^2.0.0" }, "bin": [ @@ -8147,9 +7084,15 @@ "BSD-3-Clause" ], "description": "Official version of pdepend to be handled with Composer", + "keywords": [ + "PHP Depend", + "PHP_Depend", + "dev", + "pdepend" + ], "support": { "issues": "https://github.com/pdepend/pdepend/issues", - "source": "https://github.com/pdepend/pdepend/tree/2.13.0" + "source": "https://github.com/pdepend/pdepend/tree/2.16.2" }, "funding": [ { @@ -8157,34 +7100,35 @@ "type": "tidelift" } ], - "time": "2023-02-28T20:56:15+00:00" + "time": "2023-12-17T18:09:59+00:00" }, { "name": "php-coveralls/php-coveralls", - "version": "v2.5.3", + "version": "v2.8.0", "source": { "type": "git", "url": "https://github.com/php-coveralls/php-coveralls.git", - "reference": "9d8243bbf0e053333692857c98fab7cfba0d60a9" + "reference": "00b9fce4d785a98760ca02f305c197f5fcfb6004" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-coveralls/php-coveralls/zipball/9d8243bbf0e053333692857c98fab7cfba0d60a9", - "reference": "9d8243bbf0e053333692857c98fab7cfba0d60a9", + "url": "https://api.github.com/repos/php-coveralls/php-coveralls/zipball/00b9fce4d785a98760ca02f305c197f5fcfb6004", + "reference": "00b9fce4d785a98760ca02f305c197f5fcfb6004", "shasum": "" }, "require": { "ext-json": "*", "ext-simplexml": "*", "guzzlehttp/guzzle": "^6.0 || ^7.0", - "php": "^5.5 || ^7.0 || ^8.0", + "php": "^7.0 || ^8.0", "psr/log": "^1.0 || ^2.0", - "symfony/config": "^2.1 || ^3.0 || ^4.0 || ^5.0 || ^6.0", - "symfony/console": "^2.1 || ^3.0 || ^4.0 || ^5.0 || ^6.0", - "symfony/stopwatch": "^2.0 || ^3.0 || ^4.0 || ^5.0 || ^6.0", - "symfony/yaml": "^2.0.5 || ^3.0 || ^4.0 || ^5.0 || ^6.0" + "symfony/config": "^2.1 || ^3.0 || ^4.0 || ^5.0 || ^6.0 || ^7.0", + "symfony/console": "^2.1 || ^3.0 || ^4.0 || ^5.0 || ^6.0 || ^7.0", + "symfony/stopwatch": "^2.0 || ^3.0 || ^4.0 || ^5.0 || ^6.0 || ^7.0", + "symfony/yaml": "^2.0.5 || ^3.0 || ^4.0 || ^5.0 || ^6.0 || ^7.0" }, "require-dev": { + "phpspec/prophecy-phpunit": "^1.1 || ^2.3", "phpunit/phpunit": "^4.8.35 || ^5.4.3 || ^6.0 || ^7.0 || >=8.0 <8.5.29 || >=9.0 <9.5.23", "sanmai/phpunit-legacy-adapter": "^6.1 || ^8.0" }, @@ -8238,28 +7182,28 @@ ], "support": { "issues": "https://github.com/php-coveralls/php-coveralls/issues", - "source": "https://github.com/php-coveralls/php-coveralls/tree/v2.5.3" + "source": "https://github.com/php-coveralls/php-coveralls/tree/v2.8.0" }, - "time": "2022-09-12T20:47:09+00:00" + "time": "2025-05-12T08:35:27+00:00" }, { "name": "phpmd/phpmd", - "version": "2.13.0", + "version": "2.15.0", "source": { "type": "git", "url": "https://github.com/phpmd/phpmd.git", - "reference": "dad0228156856b3ad959992f9748514fa943f3e3" + "reference": "74a1f56e33afad4128b886e334093e98e1b5e7c0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpmd/phpmd/zipball/dad0228156856b3ad959992f9748514fa943f3e3", - "reference": "dad0228156856b3ad959992f9748514fa943f3e3", + "url": "https://api.github.com/repos/phpmd/phpmd/zipball/74a1f56e33afad4128b886e334093e98e1b5e7c0", + "reference": "74a1f56e33afad4128b886e334093e98e1b5e7c0", "shasum": "" }, "require": { "composer/xdebug-handler": "^1.0 || ^2.0 || ^3.0", "ext-xml": "*", - "pdepend/pdepend": "^2.12.1", + "pdepend/pdepend": "^2.16.1", "php": ">=5.3.9" }, "require-dev": { @@ -8268,8 +7212,7 @@ "ext-simplexml": "*", "gregwar/rst": "^1.0", "mikey179/vfsstream": "^1.6.8", - "phpunit/phpunit": "^4.8.36 || ^5.7.27", - "squizlabs/php_codesniffer": "^2.0" + "squizlabs/php_codesniffer": "^2.9.2 || ^3.7.2" }, "bin": [ "src/bin/phpmd" @@ -8306,6 +7249,7 @@ "description": "PHPMD is a spin-off project of PHP Depend and aims to be a PHP equivalent of the well known Java tool PMD.", "homepage": "https://phpmd.org/", "keywords": [ + "dev", "mess detection", "mess detector", "pdepend", @@ -8315,7 +7259,7 @@ "support": { "irc": "irc://irc.freenode.org/phpmd", "issues": "https://github.com/phpmd/phpmd/issues", - "source": "https://github.com/phpmd/phpmd/tree/2.13.0" + "source": "https://github.com/phpmd/phpmd/tree/2.15.0" }, "funding": [ { @@ -8323,82 +7267,20 @@ "type": "tidelift" } ], - "time": "2022-09-10T08:44:15+00:00" - }, - { - "name": "sebastian/phpcpd", - "version": "6.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/phpcpd.git", - "reference": "f3683aa0db2e8e09287c2bb33a595b2873ea9176" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpcpd/zipball/f3683aa0db2e8e09287c2bb33a595b2873ea9176", - "reference": "f3683aa0db2e8e09287c2bb33a595b2873ea9176", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "php": ">=7.3", - "phpunit/php-file-iterator": "^3.0", - "phpunit/php-timer": "^5.0", - "sebastian/cli-parser": "^1.0", - "sebastian/version": "^3.0" - }, - "bin": [ - "phpcpd" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "6.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": "Copy/Paste Detector (CPD) for PHP code.", - "homepage": "https://github.com/sebastianbergmann/phpcpd", - "support": { - "issues": "https://github.com/sebastianbergmann/phpcpd/issues", - "source": "https://github.com/sebastianbergmann/phpcpd/tree/6.0.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "abandoned": true, - "time": "2020-12-07T05:39:23+00:00" + "time": "2023-12-11T08:22:20+00:00" }, { "name": "squizlabs/php_codesniffer", - "version": "3.7.2", + "version": "3.10.3", "source": { "type": "git", - "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", - "reference": "ed8e00df0a83aa96acf703f8c2979ff33341f879" + "url": "https://github.com/PHPCSStandards/PHP_CodeSniffer.git", + "reference": "62d32998e820bddc40f99f8251958aed187a5c9c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/ed8e00df0a83aa96acf703f8c2979ff33341f879", - "reference": "ed8e00df0a83aa96acf703f8c2979ff33341f879", + "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/62d32998e820bddc40f99f8251958aed187a5c9c", + "reference": "62d32998e820bddc40f99f8251958aed187a5c9c", "shasum": "" }, "require": { @@ -8408,11 +7290,11 @@ "php": ">=5.4.0" }, "require-dev": { - "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0" + "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.3.4" }, "bin": [ - "bin/phpcs", - "bin/phpcbf" + "bin/phpcbf", + "bin/phpcs" ], "type": "library", "extra": { @@ -8427,55 +7309,76 @@ "authors": [ { "name": "Greg Sherwood", - "role": "lead" + "role": "Former lead" + }, + { + "name": "Juliette Reinders Folmer", + "role": "Current lead" + }, + { + "name": "Contributors", + "homepage": "https://github.com/PHPCSStandards/PHP_CodeSniffer/graphs/contributors" } ], "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", - "homepage": "https://github.com/squizlabs/PHP_CodeSniffer", + "homepage": "https://github.com/PHPCSStandards/PHP_CodeSniffer", "keywords": [ "phpcs", "standards", "static analysis" ], "support": { - "issues": "https://github.com/squizlabs/PHP_CodeSniffer/issues", - "source": "https://github.com/squizlabs/PHP_CodeSniffer", - "wiki": "https://github.com/squizlabs/PHP_CodeSniffer/wiki" + "issues": "https://github.com/PHPCSStandards/PHP_CodeSniffer/issues", + "security": "https://github.com/PHPCSStandards/PHP_CodeSniffer/security/policy", + "source": "https://github.com/PHPCSStandards/PHP_CodeSniffer", + "wiki": "https://github.com/PHPCSStandards/PHP_CodeSniffer/wiki" }, - "time": "2023-02-22T23:07:41+00:00" + "funding": [ + { + "url": "https://github.com/PHPCSStandards", + "type": "github" + }, + { + "url": "https://github.com/jrfnl", + "type": "github" + }, + { + "url": "https://opencollective.com/php_codesniffer", + "type": "open_collective" + } + ], + "time": "2024-09-18T10:38:58+00:00" }, { "name": "symfony/config", - "version": "v6.2.7", + "version": "v7.3.0", "source": { "type": "git", "url": "https://github.com/symfony/config.git", - "reference": "249271da6f545d6579e0663374f8249a80be2893" + "reference": "ba62ae565f1327c2f6366726312ed828c85853bc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/249271da6f545d6579e0663374f8249a80be2893", - "reference": "249271da6f545d6579e0663374f8249a80be2893", + "url": "https://api.github.com/repos/symfony/config/zipball/ba62ae565f1327c2f6366726312ed828c85853bc", + "reference": "ba62ae565f1327c2f6366726312ed828c85853bc", "shasum": "" }, "require": { - "php": ">=8.1", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/filesystem": "^5.4|^6.0", + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/filesystem": "^7.1", "symfony/polyfill-ctype": "~1.8" }, "conflict": { - "symfony/finder": "<5.4" + "symfony/finder": "<6.4", + "symfony/service-contracts": "<2.5" }, "require-dev": { - "symfony/event-dispatcher": "^5.4|^6.0", - "symfony/finder": "^5.4|^6.0", - "symfony/messenger": "^5.4|^6.0", - "symfony/service-contracts": "^1.1|^2|^3", - "symfony/yaml": "^5.4|^6.0" - }, - "suggest": { - "symfony/yaml": "To use the yaml reference dumper" + "symfony/event-dispatcher": "^6.4|^7.0", + "symfony/finder": "^6.4|^7.0", + "symfony/messenger": "^6.4|^7.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/yaml": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -8503,7 +7406,7 @@ "description": "Helps you find, load, combine, autofill and validate configuration values of any kind", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/config/tree/v6.2.7" + "source": "https://github.com/symfony/config/tree/v7.3.0" }, "funding": [ { @@ -8519,50 +7422,43 @@ "type": "tidelift" } ], - "time": "2023-02-14T08:44:56+00:00" + "time": "2025-05-15T09:04:05+00:00" }, { "name": "symfony/dependency-injection", - "version": "v6.2.8", + "version": "v7.3.0", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "b6195feacceb88fc58a02b69522b569e4c6188ac" + "reference": "f64a8f3fa7d4ad5e85de1b128a0e03faed02b732" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/b6195feacceb88fc58a02b69522b569e4c6188ac", - "reference": "b6195feacceb88fc58a02b69522b569e4c6188ac", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/f64a8f3fa7d4ad5e85de1b128a0e03faed02b732", + "reference": "f64a8f3fa7d4ad5e85de1b128a0e03faed02b732", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "psr/container": "^1.1|^2.0", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/service-contracts": "^1.1.6|^2.0|^3.0", - "symfony/var-exporter": "^6.2.7" + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/service-contracts": "^3.5", + "symfony/var-exporter": "^6.4.20|^7.2.5" }, "conflict": { "ext-psr": "<1.1|>=2", - "symfony/config": "<6.1", - "symfony/finder": "<5.4", - "symfony/proxy-manager-bridge": "<6.2", - "symfony/yaml": "<5.4" + "symfony/config": "<6.4", + "symfony/finder": "<6.4", + "symfony/yaml": "<6.4" }, "provide": { "psr/container-implementation": "1.1|2.0", "symfony/service-implementation": "1.1|2.0|3.0" }, "require-dev": { - "symfony/config": "^6.1", - "symfony/expression-language": "^5.4|^6.0", - "symfony/yaml": "^5.4|^6.0" - }, - "suggest": { - "symfony/config": "", - "symfony/expression-language": "For using expressions in service container configuration", - "symfony/finder": "For using double-star glob patterns or when GLOB_BRACE portability is required", - "symfony/yaml": "" + "symfony/config": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/yaml": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -8590,7 +7486,7 @@ "description": "Allows you to standardize and centralize the way objects are constructed in your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/dependency-injection/tree/v6.2.8" + "source": "https://github.com/symfony/dependency-injection/tree/v7.3.0" }, "funding": [ { @@ -8606,25 +7502,25 @@ "type": "tidelift" } ], - "time": "2023-03-30T13:35:57+00:00" + "time": "2025-05-19T13:28:56+00:00" }, { "name": "symfony/stopwatch", - "version": "v6.2.7", + "version": "v7.3.0", "source": { "type": "git", "url": "https://github.com/symfony/stopwatch.git", - "reference": "f3adc98c1061875dd2edcd45e5b04e63d0e29f8f" + "reference": "5a49289e2b308214c8b9c2fda4ea454d8b8ad7cd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/f3adc98c1061875dd2edcd45e5b04e63d0e29f8f", - "reference": "f3adc98c1061875dd2edcd45e5b04e63d0e29f8f", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/5a49289e2b308214c8b9c2fda4ea454d8b8ad7cd", + "reference": "5a49289e2b308214c8b9c2fda4ea454d8b8ad7cd", "shasum": "" }, "require": { - "php": ">=8.1", - "symfony/service-contracts": "^1|^2|^3" + "php": ">=8.2", + "symfony/service-contracts": "^2.5|^3" }, "type": "library", "autoload": { @@ -8652,7 +7548,7 @@ "description": "Provides a way to profile code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/stopwatch/tree/v6.2.7" + "source": "https://github.com/symfony/stopwatch/tree/v7.3.0" }, "funding": [ { @@ -8668,27 +7564,30 @@ "type": "tidelift" } ], - "time": "2023-02-14T08:44:56+00:00" + "time": "2025-02-24T10:49:57+00:00" }, { "name": "symfony/var-exporter", - "version": "v6.2.8", + "version": "v7.3.0", "source": { "type": "git", "url": "https://github.com/symfony/var-exporter.git", - "reference": "8302bb670204500d492c6b8c595ee9a27da62cd6" + "reference": "c9a1168891b5aaadfd6332ef44393330b3498c4c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-exporter/zipball/8302bb670204500d492c6b8c595ee9a27da62cd6", - "reference": "8302bb670204500d492c6b8c595ee9a27da62cd6", + "url": "https://api.github.com/repos/symfony/var-exporter/zipball/c9a1168891b5aaadfd6332ef44393330b3498c4c", + "reference": "c9a1168891b5aaadfd6332ef44393330b3498c4c", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3" }, "require-dev": { - "symfony/var-dumper": "^5.4|^6.0" + "symfony/property-access": "^6.4|^7.0", + "symfony/serializer": "^6.4|^7.0", + "symfony/var-dumper": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -8726,7 +7625,7 @@ "serialize" ], "support": { - "source": "https://github.com/symfony/var-exporter/tree/v6.2.8" + "source": "https://github.com/symfony/var-exporter/tree/v7.3.0" }, "funding": [ { @@ -8742,7 +7641,7 @@ "type": "tidelift" } ], - "time": "2023-03-14T15:48:45+00:00" + "time": "2025-05-15T09:04:05+00:00" } ], "aliases": [], @@ -8751,14 +7650,14 @@ "prefer-stable": false, "prefer-lowest": false, "platform": { - "php": ">=8.1", "ext-curl": "*", "ext-dom": "*", "ext-iconv": "*", "ext-intl": "*", "ext-json": "*", - "ext-openssl": "*" + "ext-openssl": "*", + "php": ">=8.2" }, "platform-dev": [], - "plugin-api-version": "2.3.0" + "plugin-api-version": "2.2.0" } diff --git a/dev/tests/_bootstrap.php b/dev/tests/_bootstrap.php index 3b31c6e4a..7da6cffa7 100644 --- a/dev/tests/_bootstrap.php +++ b/dev/tests/_bootstrap.php @@ -36,7 +36,7 @@ foreach ($TEST_ENVS as $key => $value) { $_ENV[$key] = $value; - putenv("{$key}=${value}"); + putenv("{$key}={$value}"); } // Add our test module to the allowlist diff --git a/dev/tests/phpunit.xml b/dev/tests/phpunit.xml index 049977650..7512be49d 100644 --- a/dev/tests/phpunit.xml +++ b/dev/tests/phpunit.xml @@ -5,28 +5,28 @@ * See COPYING.txt for license details. */ --> - - - - ../../src/Magento/FunctionalTestingFramework/DataGenerator - ../../src/Magento/FunctionalTestingFramework/Page - ../../src/Magento/FunctionalTestingFramework/Suite - ../../src/Magento/FunctionalTestingFramework/Test - ../../src/Magento/FunctionalTestingFramework/Util - - - - - - - - verification - - - unit - - - + + + + + + + + + verification + + + unit + + + + + + ../../src/Magento/FunctionalTestingFramework/DataGenerator + ../../src/Magento/FunctionalTestingFramework/Page + ../../src/Magento/FunctionalTestingFramework/Suite + ../../src/Magento/FunctionalTestingFramework/Test + ../../src/Magento/FunctionalTestingFramework/Util + + diff --git a/dev/tests/static/Magento/Sniffs/Commenting/FunctionCommentSniff.php b/dev/tests/static/Magento/Sniffs/Commenting/FunctionCommentSniff.php index 8985f2407..5e539aeaf 100644 --- a/dev/tests/static/Magento/Sniffs/Commenting/FunctionCommentSniff.php +++ b/dev/tests/static/Magento/Sniffs/Commenting/FunctionCommentSniff.php @@ -422,7 +422,9 @@ protected function processParams(File $phpcsFile, $stackPtr, $commentStart) $typeHint, $param['var'], ); - $phpcsFile->addError($error, $stackPtr, 'IncorrectTypeHint', $data); + if ($suggestedTypeHint != "null" && (ltrim($typeHint, '?') !== $suggestedTypeHint)) { + $phpcsFile->addError($error, $stackPtr, 'IncorrectTypeHint', $data); + } }//end if } else if ($suggestedTypeHint === '' && isset($realParams[$pos]) === true) { $typeHint = $realParams[$pos]['type_hint']; diff --git a/dev/tests/unit/Magento/FunctionalTestFramework/Console/BaseGenerateCommandTest.php b/dev/tests/unit/Magento/FunctionalTestFramework/Console/BaseGenerateCommandTest.php index fe486b615..6ce83ca9a 100644 --- a/dev/tests/unit/Magento/FunctionalTestFramework/Console/BaseGenerateCommandTest.php +++ b/dev/tests/unit/Magento/FunctionalTestFramework/Console/BaseGenerateCommandTest.php @@ -31,7 +31,7 @@ protected function tearDown(): void $testsProperty->setValue($handler, []); $testObjectHandlerProperty = new ReflectionProperty(TestObjectHandler::class, 'testObjectHandler'); $testObjectHandlerProperty->setAccessible(true); - $testObjectHandlerProperty->setValue($handler); + $testObjectHandlerProperty->setValue(null, $handler); $handler = SuiteObjectHandler::getInstance(); $suiteObjectsProperty = new ReflectionProperty(SuiteObjectHandler::class, 'suiteObjects'); @@ -39,7 +39,7 @@ protected function tearDown(): void $suiteObjectsProperty->setValue($handler, []); $suiteObjectHandlerProperty = new ReflectionProperty(SuiteObjectHandler::class, 'instance'); $suiteObjectHandlerProperty->setAccessible(true); - $suiteObjectHandlerProperty->setValue($handler); + $suiteObjectHandlerProperty->setValue(null, $handler); } public function testOneTestOneSuiteConfig(): void @@ -218,7 +218,7 @@ public function mockHandlers(array $testArray, array $suiteArray): void $testObjectHandlerProperty = new ReflectionProperty(TestObjectHandler::class, 'testObjectHandler'); $testObjectHandlerProperty->setAccessible(true); - $testObjectHandlerProperty->setValue($testObjectHandlerObject); + $testObjectHandlerProperty->setValue(null, $testObjectHandlerObject); $handler = TestObjectHandler::getInstance(); $property = new ReflectionProperty(TestObjectHandler::class, 'tests'); @@ -234,7 +234,7 @@ public function mockHandlers(array $testArray, array $suiteArray): void $suiteObjectHandlerProperty = new ReflectionProperty(SuiteObjectHandler::class, 'instance'); $suiteObjectHandlerProperty->setAccessible(true); - $suiteObjectHandlerProperty->setValue($suiteObjectHandlerObject); + $suiteObjectHandlerProperty->setValue(null, $suiteObjectHandlerObject); $handler = SuiteObjectHandler::getInstance(); $property = new ReflectionProperty(SuiteObjectHandler::class, 'suiteObjects'); diff --git a/dev/tests/unit/Magento/FunctionalTestFramework/Console/GenerateTestsCommandTest.php b/dev/tests/unit/Magento/FunctionalTestFramework/Console/GenerateTestsCommandTest.php index 715031c53..3e00c34a5 100644 --- a/dev/tests/unit/Magento/FunctionalTestFramework/Console/GenerateTestsCommandTest.php +++ b/dev/tests/unit/Magento/FunctionalTestFramework/Console/GenerateTestsCommandTest.php @@ -41,7 +41,7 @@ public function testParseConfigParallelOptions($time, $groups, $expected): void * * @return array */ - public function configParallelOptions(): array + public static function configParallelOptions(): array { return [ [null, null, ['parallelByTime', 600000]], /* #0 */ diff --git a/dev/tests/unit/Magento/FunctionalTestFramework/DataGenerator/Handlers/DataObjectHandlerTest.php b/dev/tests/unit/Magento/FunctionalTestFramework/DataGenerator/Handlers/DataObjectHandlerTest.php index 7ef84a53d..059a94057 100644 --- a/dev/tests/unit/Magento/FunctionalTestFramework/DataGenerator/Handlers/DataObjectHandlerTest.php +++ b/dev/tests/unit/Magento/FunctionalTestFramework/DataGenerator/Handlers/DataObjectHandlerTest.php @@ -324,7 +324,7 @@ private function mockDataObjectHandlerWithData(array $mockData): void { $dataObjectHandlerProperty = new ReflectionProperty(DataObjectHandler::class, "INSTANCE"); $dataObjectHandlerProperty->setAccessible(true); - $dataObjectHandlerProperty->setValue(null); + $dataObjectHandlerProperty->setValue(null, null); $mockDataProfileSchemaParser = $this->createMock(DataProfileSchemaParser::class); $mockDataProfileSchemaParser @@ -355,7 +355,7 @@ function ( $property = new ReflectionProperty(ObjectManager::class, 'instance'); $property->setAccessible(true); - $property->setValue($mockObjectManagerInstance); + $property->setValue(null, $mockObjectManagerInstance); } /** @@ -367,11 +367,11 @@ public static function tearDownAfterClass(): void $dataObjectHandlerProperty = new ReflectionProperty(DataObjectHandler::class, "INSTANCE"); $dataObjectHandlerProperty->setAccessible(true); - $dataObjectHandlerProperty->setValue(null); + $dataObjectHandlerProperty->setValue(null, null); $objectManagerProperty = new ReflectionProperty(ObjectManager::class, 'instance'); $objectManagerProperty->setAccessible(true); - $objectManagerProperty->setValue(null); + $objectManagerProperty->setValue(null, null); TestLoggingUtil::getInstance()->clearMockLoggingUtil(); } diff --git a/dev/tests/unit/Magento/FunctionalTestFramework/DataGenerator/Handlers/OperationDefinitionObjectHandlerTest.php b/dev/tests/unit/Magento/FunctionalTestFramework/DataGenerator/Handlers/OperationDefinitionObjectHandlerTest.php index 33079b6cd..23dbcacc1 100644 --- a/dev/tests/unit/Magento/FunctionalTestFramework/DataGenerator/Handlers/OperationDefinitionObjectHandlerTest.php +++ b/dev/tests/unit/Magento/FunctionalTestFramework/DataGenerator/Handlers/OperationDefinitionObjectHandlerTest.php @@ -506,7 +506,7 @@ private function mockOperationHandlerWithData(array $mockData): void 'INSTANCE' ); $operationDefinitionObjectHandlerProperty->setAccessible(true); - $operationDefinitionObjectHandlerProperty->setValue(null); + $operationDefinitionObjectHandlerProperty->setValue(null, null); $mockOperationParser = $this->createMock(OperationDefinitionParser::class); $mockOperationParser @@ -537,7 +537,7 @@ function ( $property = new ReflectionProperty(ObjectManager::class, 'instance'); $property->setAccessible(true); - $property->setValue($mockObjectManagerInstance); + $property->setValue(null, $mockObjectManagerInstance); } /** @@ -552,11 +552,11 @@ public static function tearDownAfterClass(): void 'INSTANCE' ); $operationDefinitionObjectHandlerProperty->setAccessible(true); - $operationDefinitionObjectHandlerProperty->setValue(null); + $operationDefinitionObjectHandlerProperty->setValue(null, null); $objectManagerProperty = new ReflectionProperty(ObjectManager::class, 'instance'); $objectManagerProperty->setAccessible(true); - $objectManagerProperty->setValue(null); + $objectManagerProperty->setValue(null, null); TestLoggingUtil::getInstance()->clearMockLoggingUtil(); } diff --git a/dev/tests/unit/Magento/FunctionalTestFramework/DataGenerator/Handlers/PersistedObjectHandlerTest.php b/dev/tests/unit/Magento/FunctionalTestFramework/DataGenerator/Handlers/PersistedObjectHandlerTest.php index f4b798ec5..19237247b 100644 --- a/dev/tests/unit/Magento/FunctionalTestFramework/DataGenerator/Handlers/PersistedObjectHandlerTest.php +++ b/dev/tests/unit/Magento/FunctionalTestFramework/DataGenerator/Handlers/PersistedObjectHandlerTest.php @@ -534,7 +534,7 @@ public function mockCurlHandler(string $response, array $parserOutput): void { $dataObjectHandler = new ReflectionProperty(DataObjectHandler::class, 'INSTANCE'); $dataObjectHandler->setAccessible(true); - $dataObjectHandler->setValue(null); + $dataObjectHandler->setValue(null, null); $dataProfileSchemaParser = $this->createMock(DataProfileSchemaParser::class); $dataProfileSchemaParser @@ -574,7 +574,7 @@ function ($class, $arguments = []) use ($curlHandler, $objectManager, $dataProfi $objectManagerProperty = new ReflectionProperty(ObjectManager::class, 'instance'); $objectManagerProperty->setAccessible(true); - $objectManagerProperty->setValue($objectManagerMockInstance); + $objectManagerProperty->setValue(null, $objectManagerMockInstance); } /** @@ -589,11 +589,11 @@ public static function tearDownAfterClass(): void // Clear out Singleton between tests $persistedObjectHandlerProperty = new ReflectionProperty(PersistedObjectHandler::class, "INSTANCE"); $persistedObjectHandlerProperty->setAccessible(true); - $persistedObjectHandlerProperty->setValue(null); + $persistedObjectHandlerProperty->setValue(null, null); $objectManagerProperty = new ReflectionProperty(ObjectManager::class, 'instance'); $objectManagerProperty->setAccessible(true); - $objectManagerProperty->setValue(null); + $objectManagerProperty->setValue(null, null); TestLoggingUtil::getInstance()->clearMockLoggingUtil(); } diff --git a/dev/tests/unit/Magento/FunctionalTestFramework/DataGenerator/Handlers/SecretStorage/AwsSecretsManagerStorageTest.php b/dev/tests/unit/Magento/FunctionalTestFramework/DataGenerator/Handlers/SecretStorage/AwsSecretsManagerStorageTest.php index 3112529c2..b37e22bd0 100644 --- a/dev/tests/unit/Magento/FunctionalTestFramework/DataGenerator/Handlers/SecretStorage/AwsSecretsManagerStorageTest.php +++ b/dev/tests/unit/Magento/FunctionalTestFramework/DataGenerator/Handlers/SecretStorage/AwsSecretsManagerStorageTest.php @@ -34,7 +34,7 @@ public function testEncryptAndDecrypt() $mockClient = $this->getMockBuilder(SecretsManagerClient::class) ->disableOriginalConstructor() - ->setMethods(['__call']) + ->onlyMethods(['__call']) ->getMock(); $mockClient->expects($this->once()) diff --git a/dev/tests/unit/Magento/FunctionalTestFramework/DataGenerator/Objects/EntityDataObjectTest.php b/dev/tests/unit/Magento/FunctionalTestFramework/DataGenerator/Objects/EntityDataObjectTest.php index 3fc2aaacb..20c16428c 100644 --- a/dev/tests/unit/Magento/FunctionalTestFramework/DataGenerator/Objects/EntityDataObjectTest.php +++ b/dev/tests/unit/Magento/FunctionalTestFramework/DataGenerator/Objects/EntityDataObjectTest.php @@ -20,12 +20,12 @@ function function_exists($val) return true; } -function msq($id = null) +function msq(?string $id = null) { return "msqUnique"; } -function msqs($id = null) +function msqs(?string $id = null) { return "msqsUnique"; } diff --git a/dev/tests/unit/Magento/FunctionalTestFramework/DataGenerator/Persist/OperationDataArrayResolverTest.php b/dev/tests/unit/Magento/FunctionalTestFramework/DataGenerator/Persist/OperationDataArrayResolverTest.php index ce1911fd0..b4152901e 100644 --- a/dev/tests/unit/Magento/FunctionalTestFramework/DataGenerator/Persist/OperationDataArrayResolverTest.php +++ b/dev/tests/unit/Magento/FunctionalTestFramework/DataGenerator/Persist/OperationDataArrayResolverTest.php @@ -553,7 +553,7 @@ private function mockDataObjectHandler($childDataObject): void $property = new ReflectionProperty(DataObjectHandler::class, 'INSTANCE'); $property->setAccessible(true); - $property->setValue($instance); + $property->setValue(null, $instance); } /** @@ -578,6 +578,6 @@ private function mockOperationDefinitionObjectHandler($childOperationDefinition) $property = new ReflectionProperty(OperationDefinitionObjectHandler::class, 'INSTANCE'); $property->setAccessible(true); - $property->setValue($instance); + $property->setValue(null, $instance); } } diff --git a/dev/tests/unit/Magento/FunctionalTestFramework/DataGenerator/Util/DataExtensionUtilTest.php b/dev/tests/unit/Magento/FunctionalTestFramework/DataGenerator/Util/DataExtensionUtilTest.php index 513715cc1..529af6e44 100644 --- a/dev/tests/unit/Magento/FunctionalTestFramework/DataGenerator/Util/DataExtensionUtilTest.php +++ b/dev/tests/unit/Magento/FunctionalTestFramework/DataGenerator/Util/DataExtensionUtilTest.php @@ -136,7 +136,7 @@ private function setMockEntities($mockEntityData): void { $property = new ReflectionProperty(DataObjectHandler::class, 'INSTANCE'); $property->setAccessible(true); - $property->setValue(null); + $property->setValue(null, null); $mockDataProfileSchemaParser = $this->createMock(DataProfileSchemaParser::class); $mockDataProfileSchemaParser->expects($this->any()) @@ -150,6 +150,6 @@ private function setMockEntities($mockEntityData): void $property = new ReflectionProperty(ObjectManager::class, 'instance'); $property->setAccessible(true); - $property->setValue($mockObjectManager); + $property->setValue(null, $mockObjectManager); } } diff --git a/dev/tests/unit/Magento/FunctionalTestFramework/Module/Util/ModuleUtilTest.php b/dev/tests/unit/Magento/FunctionalTestFramework/Module/Util/ModuleUtilTest.php index dabf46fd0..6c2fdf322 100644 --- a/dev/tests/unit/Magento/FunctionalTestFramework/Module/Util/ModuleUtilTest.php +++ b/dev/tests/unit/Magento/FunctionalTestFramework/Module/Util/ModuleUtilTest.php @@ -34,7 +34,7 @@ public function testUtf8SafeControlCharacterTrim(string $input, string $output, * * @return array */ - public function inDataProvider(): array + public static function inDataProvider(): array { $ctr1 = '‹'; $ctr2 = 'Œ'; diff --git a/dev/tests/unit/Magento/FunctionalTestFramework/Page/Handlers/PageObjectHandlerTest.php b/dev/tests/unit/Magento/FunctionalTestFramework/Page/Handlers/PageObjectHandlerTest.php index c611cc6a7..1f84f4b14 100644 --- a/dev/tests/unit/Magento/FunctionalTestFramework/Page/Handlers/PageObjectHandlerTest.php +++ b/dev/tests/unit/Magento/FunctionalTestFramework/Page/Handlers/PageObjectHandlerTest.php @@ -134,7 +134,7 @@ private function mockPageObjectHandlerWithData(array $mockData): void { $pageObjectHandlerProperty = new ReflectionProperty(PageObjectHandler::class, 'INSTANCE'); $pageObjectHandlerProperty->setAccessible(true); - $pageObjectHandlerProperty->setValue(null); + $pageObjectHandlerProperty->setValue(null, null); $mockSectionParser = $this->createMock(PageParser::class); $mockSectionParser @@ -165,7 +165,7 @@ function ( $property = new ReflectionProperty(ObjectManager::class, 'instance'); $property->setAccessible(true); - $property->setValue($mockObjectManagerInstance); + $property->setValue(null, $mockObjectManagerInstance); } /** @@ -177,11 +177,11 @@ public static function tearDownAfterClass(): void $pageObjectHandlerProperty = new ReflectionProperty(PageObjectHandler::class, 'INSTANCE'); $pageObjectHandlerProperty->setAccessible(true); - $pageObjectHandlerProperty->setValue(null); + $pageObjectHandlerProperty->setValue(null, null); $objectManagerProperty = new ReflectionProperty(ObjectManager::class, 'instance'); $objectManagerProperty->setAccessible(true); - $objectManagerProperty->setValue(null); + $objectManagerProperty->setValue(null, null); TestLoggingUtil::getInstance()->clearMockLoggingUtil(); } diff --git a/dev/tests/unit/Magento/FunctionalTestFramework/Page/Handlers/SectionObjectHandlerTest.php b/dev/tests/unit/Magento/FunctionalTestFramework/Page/Handlers/SectionObjectHandlerTest.php index b0ce0a4b8..6ef16096a 100644 --- a/dev/tests/unit/Magento/FunctionalTestFramework/Page/Handlers/SectionObjectHandlerTest.php +++ b/dev/tests/unit/Magento/FunctionalTestFramework/Page/Handlers/SectionObjectHandlerTest.php @@ -119,7 +119,7 @@ private function mockSectionObjectHandlerWithData(array $mockData): void { $sectionObjectHandlerProperty = new ReflectionProperty(SectionObjectHandler::class, "INSTANCE"); $sectionObjectHandlerProperty->setAccessible(true); - $sectionObjectHandlerProperty->setValue(null); + $sectionObjectHandlerProperty->setValue(null, null); $mockSectionParser = $this->createMock(SectionParser::class); $mockSectionParser @@ -150,7 +150,7 @@ function ( $property = new ReflectionProperty(ObjectManager::class, 'instance'); $property->setAccessible(true); - $property->setValue($mockObjectManagerInstance); + $property->setValue(null, $mockObjectManagerInstance); } /** @@ -162,11 +162,11 @@ public static function tearDownAfterClass(): void $sectionObjectHandlerProperty = new ReflectionProperty(SectionObjectHandler::class, "INSTANCE"); $sectionObjectHandlerProperty->setAccessible(true); - $sectionObjectHandlerProperty->setValue(null); + $sectionObjectHandlerProperty->setValue(null, null); $objectManagerProperty = new ReflectionProperty(ObjectManager::class, 'instance'); $objectManagerProperty->setAccessible(true); - $objectManagerProperty->setValue(null); + $objectManagerProperty->setValue(null, null); TestLoggingUtil::getInstance()->clearMockLoggingUtil(); } diff --git a/dev/tests/unit/Magento/FunctionalTestFramework/StaticCheck/DeprecatedEntityUsageCheckTest.php b/dev/tests/unit/Magento/FunctionalTestFramework/StaticCheck/DeprecatedEntityUsageCheckTest.php index d4286060f..57044f123 100644 --- a/dev/tests/unit/Magento/FunctionalTestFramework/StaticCheck/DeprecatedEntityUsageCheckTest.php +++ b/dev/tests/unit/Magento/FunctionalTestFramework/StaticCheck/DeprecatedEntityUsageCheckTest.php @@ -297,7 +297,7 @@ private function mockOperationHandlerWithData(array $mockData): void 'INSTANCE' ); $operationDefinitionObjectHandlerProperty->setAccessible(true); - $operationDefinitionObjectHandlerProperty->setValue(null); + $operationDefinitionObjectHandlerProperty->setValue(null, null); $mockOperationParser = $this->createMock(OperationDefinitionParser::class); $mockOperationParser @@ -328,7 +328,7 @@ function ( $property = new ReflectionProperty(ObjectManager::class, 'instance'); $property->setAccessible(true); - $property->setValue($mockObjectManagerInstance); + $property->setValue(null, $mockObjectManagerInstance); } /** @@ -343,11 +343,11 @@ public static function tearDownAfterClass(): void 'INSTANCE' ); $operationDefinitionObjectHandlerProperty->setAccessible(true); - $operationDefinitionObjectHandlerProperty->setValue(null); + $operationDefinitionObjectHandlerProperty->setValue(null, null); $objectManagerProperty = new ReflectionProperty(ObjectManager::class, 'instance'); $objectManagerProperty->setAccessible(true); - $objectManagerProperty->setValue(null); + $objectManagerProperty->setValue(null, null); } /** diff --git a/dev/tests/unit/Magento/FunctionalTestFramework/Suite/Handlers/SuiteObjectHandlerTest.php b/dev/tests/unit/Magento/FunctionalTestFramework/Suite/Handlers/SuiteObjectHandlerTest.php index 373e0d6c1..7d1dd46bb 100644 --- a/dev/tests/unit/Magento/FunctionalTestFramework/Suite/Handlers/SuiteObjectHandlerTest.php +++ b/dev/tests/unit/Magento/FunctionalTestFramework/Suite/Handlers/SuiteObjectHandlerTest.php @@ -90,12 +90,12 @@ private function setMockTestAndSuiteParserOutput(array $testData, array $suiteDa // clear test object handler value to inject parsed content $property = new ReflectionProperty(TestObjectHandler::class, 'testObjectHandler'); $property->setAccessible(true); - $property->setValue(null); + $property->setValue(null, null); // clear suite object handler value to inject parsed content $property = new ReflectionProperty(SuiteObjectHandler::class, 'instance'); $property->setAccessible(true); - $property->setValue(null); + $property->setValue(null, null); $mockDataParser = $this->createMock(TestDataParser::class); $mockDataParser @@ -128,6 +128,6 @@ function ($clazz) use ($mockDataParser, $mockSuiteDataParser) { $property = new ReflectionProperty(ObjectManager::class, 'instance'); $property->setAccessible(true); - $property->setValue($instance); + $property->setValue(null, $instance); } } diff --git a/dev/tests/unit/Magento/FunctionalTestFramework/Suite/SuiteGeneratorTest.php b/dev/tests/unit/Magento/FunctionalTestFramework/Suite/SuiteGeneratorTest.php index 13c797509..e6acefca9 100644 --- a/dev/tests/unit/Magento/FunctionalTestFramework/Suite/SuiteGeneratorTest.php +++ b/dev/tests/unit/Magento/FunctionalTestFramework/Suite/SuiteGeneratorTest.php @@ -369,7 +369,7 @@ private function setMockTestAndSuiteParserOutput(array $testData, array $suiteDa $suiteGeneratorServiceProperty = new ReflectionProperty(SuiteGeneratorService::class, 'INSTANCE'); $suiteGeneratorServiceProperty->setAccessible(true); - $suiteGeneratorServiceProperty->setValue($mockSuiteGeneratorService); + $suiteGeneratorServiceProperty->setValue(null, $mockSuiteGeneratorService); $mockDataParser = $this->createMock(TestDataParser::class); $mockDataParser @@ -418,7 +418,7 @@ function ( $objectManagerProperty = new ReflectionProperty(ObjectManager::class, 'instance'); $objectManagerProperty->setAccessible(true); - $objectManagerProperty->setValue($objectManagerMockInstance); + $objectManagerProperty->setValue(null, $objectManagerMockInstance); } /** @@ -430,17 +430,17 @@ private function clearMockResolverProperties(): void { $property = new ReflectionProperty(SuiteGenerator::class, 'instance'); $property->setAccessible(true); - $property->setValue(null); + $property->setValue(null, null); // clear test object handler value to inject parsed content $property = new ReflectionProperty(TestObjectHandler::class, 'testObjectHandler'); $property->setAccessible(true); - $property->setValue(null); + $property->setValue(null, null); // clear suite object handler value to inject parsed content $property = new ReflectionProperty(SuiteObjectHandler::class, 'instance'); $property->setAccessible(true); - $property->setValue(null); + $property->setValue(null, null); } /** @@ -460,11 +460,11 @@ public static function tearDownAfterClass(): void $objectManagerProperty = new ReflectionProperty(ObjectManager::class, 'instance'); $objectManagerProperty->setAccessible(true); - $objectManagerProperty->setValue(null); + $objectManagerProperty->setValue(null, null); $suiteGeneratorServiceProperty = new ReflectionProperty(SuiteGeneratorService::class, 'INSTANCE'); $suiteGeneratorServiceProperty->setAccessible(true); - $suiteGeneratorServiceProperty->setValue(null); + $suiteGeneratorServiceProperty->setValue(null, null); TestLoggingUtil::getInstance()->clearMockLoggingUtil(); } diff --git a/dev/tests/unit/Magento/FunctionalTestFramework/Test/Handlers/ActionGroupObjectHandlerTest.php b/dev/tests/unit/Magento/FunctionalTestFramework/Test/Handlers/ActionGroupObjectHandlerTest.php index c91d12a29..ce5983f62 100644 --- a/dev/tests/unit/Magento/FunctionalTestFramework/Test/Handlers/ActionGroupObjectHandlerTest.php +++ b/dev/tests/unit/Magento/FunctionalTestFramework/Test/Handlers/ActionGroupObjectHandlerTest.php @@ -101,7 +101,7 @@ private function mockActionGroupObjectHandlerWithData(array $mockData): void { $actionGroupObjectHandlerProperty = new ReflectionProperty(ActionGroupObjectHandler::class, 'instance'); $actionGroupObjectHandlerProperty->setAccessible(true); - $actionGroupObjectHandlerProperty->setValue(null); + $actionGroupObjectHandlerProperty->setValue(null, null); $mockOperationParser = $this->createMock(ActionGroupDataParser::class); $mockOperationParser @@ -131,7 +131,7 @@ function ( $property = new ReflectionProperty(ObjectManager::class, 'instance'); $property->setAccessible(true); - $property->setValue($mockObjectManagerInstance); + $property->setValue(null, $mockObjectManagerInstance); } /** @@ -143,10 +143,10 @@ public static function tearDownAfterClass(): void $actionGroupObjectHandlerProperty = new ReflectionProperty(ActionGroupObjectHandler::class, 'instance'); $actionGroupObjectHandlerProperty->setAccessible(true); - $actionGroupObjectHandlerProperty->setValue(null); + $actionGroupObjectHandlerProperty->setValue(null, null); $objectManagerProperty = new ReflectionProperty(ObjectManager::class, 'instance'); $objectManagerProperty->setAccessible(true); - $objectManagerProperty->setValue(null); + $objectManagerProperty->setValue(null, null); } } diff --git a/dev/tests/unit/Magento/FunctionalTestFramework/Test/Handlers/TestObjectHandlerTest.php b/dev/tests/unit/Magento/FunctionalTestFramework/Test/Handlers/TestObjectHandlerTest.php index a2779bdd1..05c293e7d 100644 --- a/dev/tests/unit/Magento/FunctionalTestFramework/Test/Handlers/TestObjectHandlerTest.php +++ b/dev/tests/unit/Magento/FunctionalTestFramework/Test/Handlers/TestObjectHandlerTest.php @@ -24,6 +24,8 @@ use tests\unit\Util\MagentoTestCase; use tests\unit\Util\TestDataArrayBuilder; use tests\unit\Util\TestLoggingUtil; +use Magento\FunctionalTestingFramework\Filter\FilterList; +use Magento\FunctionalTestingFramework\Util\Script\TestDependencyUtil; class TestObjectHandlerTest extends MagentoTestCase { @@ -391,7 +393,7 @@ private function mockTestObjectHandler(array $data, ?array $paths = null): void // clear test object handler value to inject parsed content $property = new ReflectionProperty(TestObjectHandler::class, 'testObjectHandler'); $property->setAccessible(true); - $property->setValue(null); + $property->setValue(null, null); $mockDataParser = $this->createMock(TestDataParser::class); $mockDataParser @@ -440,11 +442,62 @@ function ( $objectManagerProperty = new ReflectionProperty(ObjectManager::class, 'instance'); $objectManagerProperty->setAccessible(true); - $objectManagerProperty->setValue($objectManagerMockInstance); + $objectManagerProperty->setValue(null, $objectManagerMockInstance); $resolver = ModuleResolver::getInstance(); $property = new ReflectionProperty(ModuleResolver::class, 'enabledModuleNameAndPaths'); $property->setAccessible(true); $property->setValue($resolver, $paths); } + + /** + * Basic test for exclude group Filter + * + * @return void + * @throws Exception + */ + public function testGetFilteredTestNamesWhenExcludeGroupFilterIsApplied() + { + $fileList = new FilterList(['excludeGroup' => ['test']]); + $toh = TestObjectHandler::getInstance()->getAllObjects(); + $testDependencyUtil = new TestDependencyUtil(); + $result = $testDependencyUtil->getFilteredTestNames($toh, $fileList->getFilters()); + $this->assertIsArray($result); + $this->assertEquals(count($result), 0); + } + + /** + * Basic test for include group Filter + * + * @return void + * @throws Exception + */ + public function testGetFilteredTestNamesWhenIncludeGroupFilterIsApplied() + { + $fileList = new FilterList(['includeGroup' => ['test']]); + $toh = TestObjectHandler::getInstance()->getAllObjects(); + $testDependencyUtil = new TestDependencyUtil(); + $result = $testDependencyUtil->getFilteredTestNames($toh, $fileList->getFilters()); + $this->assertIsArray($result); + $this->assertEquals(count($result), 1); + $this->assertEquals($result['testTest'], 'testTest'); + } + + /** + * Basic test when no filter applied + * + * @return void + * @throws Exception + */ + public function testGetFilteredTestNamesWhenNoFilterIsApplied() + { + $fileList = new FilterList(); + $toh = TestObjectHandler::getInstance()->getAllObjects(); + $testDependencyUtil = new TestDependencyUtil(); + $result = $testDependencyUtil->getFilteredTestNames($toh, $fileList->getFilters()); + $this->assertIsArray($result); + $this->assertEquals(count($result), 1); + //returns all test Names + $this->assertEquals($result['testTest'], 'testTest'); + } } diff --git a/dev/tests/unit/Magento/FunctionalTestFramework/Test/Objects/ActionGroupObjectTest.php b/dev/tests/unit/Magento/FunctionalTestFramework/Test/Objects/ActionGroupObjectTest.php index c66303ba6..1389c0254 100644 --- a/dev/tests/unit/Magento/FunctionalTestFramework/Test/Objects/ActionGroupObjectTest.php +++ b/dev/tests/unit/Magento/FunctionalTestFramework/Test/Objects/ActionGroupObjectTest.php @@ -229,7 +229,7 @@ public function testGetStepsWithParameterizedArg(): void // bypass the private constructor $property = new ReflectionProperty(SectionObjectHandler::class, 'INSTANCE'); $property->setAccessible(true); - $property->setValue($sectionInstance); + $property->setValue(null, $sectionInstance); $actionGroupUnderTest = (new ActionGroupObjectBuilder()) ->withActionObjects( @@ -283,7 +283,7 @@ public function testGetStepsWithParameterizedSimpleArg(): void // bypass the private constructor $property = new ReflectionProperty(SectionObjectHandler::class, 'INSTANCE'); $property->setAccessible(true); - $property->setValue($sectionInstance); + $property->setValue(null, $sectionInstance); $actionGroupUnderTest = (new ActionGroupObjectBuilder()) ->withActionObjects( @@ -456,7 +456,7 @@ private function setEntityObjectHandlerReturn($return): void // bypass the private constructor $property = new ReflectionProperty(DataObjectHandler::class, 'INSTANCE'); $property->setAccessible(true); - $property->setValue($instance); + $property->setValue(null, $instance); } /** diff --git a/dev/tests/unit/Magento/FunctionalTestFramework/Test/Objects/ActionObjectTest.php b/dev/tests/unit/Magento/FunctionalTestFramework/Test/Objects/ActionObjectTest.php index d64de1cac..76a0272e8 100644 --- a/dev/tests/unit/Magento/FunctionalTestFramework/Test/Objects/ActionObjectTest.php +++ b/dev/tests/unit/Magento/FunctionalTestFramework/Test/Objects/ActionObjectTest.php @@ -262,7 +262,7 @@ public function testResolveUrl(): void // bypass the private constructor $property = new ReflectionProperty(PageObjectHandler::class, 'INSTANCE'); $property->setAccessible(true); - $property->setValue($instance); + $property->setValue(null, $instance); // Call the method under test $actionObject->resolveReferences(); @@ -301,7 +301,7 @@ public function testResolveUrlWithNoAttribute(): void // bypass the private constructor $property = new ReflectionProperty(PageObjectHandler::class, 'INSTANCE'); $property->setAccessible(true); - $property->setValue($instance); + $property->setValue(null, $instance); // Call the method under test $actionObject->resolveReferences(); @@ -478,7 +478,7 @@ private function mockSectionHandlerWithElement(ElementObject $elementObject): vo // bypass the private constructor $property = new ReflectionProperty(SectionObjectHandler::class, 'INSTANCE'); $property->setAccessible(true); - $property->setValue($instance); + $property->setValue(null, $instance); } /** @@ -498,7 +498,7 @@ private function mockDataHandlerWithData(EntityDataObject $dataObject): void // bypass the private constructor $property = new ReflectionProperty(DataObjectHandler::class, 'INSTANCE'); $property->setAccessible(true); - $property->setValue($dataInstance); + $property->setValue(null, $dataInstance); } /** diff --git a/dev/tests/unit/Magento/FunctionalTestFramework/Test/Util/ActionMergeUtilTest.php b/dev/tests/unit/Magento/FunctionalTestFramework/Test/Util/ActionMergeUtilTest.php index 99152b8f0..8604db683 100644 --- a/dev/tests/unit/Magento/FunctionalTestFramework/Test/Util/ActionMergeUtilTest.php +++ b/dev/tests/unit/Magento/FunctionalTestFramework/Test/Util/ActionMergeUtilTest.php @@ -107,7 +107,7 @@ public function testResolveActionStepEntityData(): void $dataFieldName = 'myfield'; $dataFieldValue = 'myValue'; $userInputKey = "userInput"; - $userInputValue = "{{" . "${dataObjectName}.${dataFieldName}}}"; + $userInputValue = "{{" . "{$dataObjectName}.{$dataFieldName}}}"; $actionName = "myAction"; $actionType = "myCustomType"; @@ -284,7 +284,7 @@ public function testInvalidSecretFunctions(): void { $this->expectException(TestReferenceException::class); $this->expectExceptionMessage( - 'You cannot reference secret data outside of the fillField, magentoCLI and createData actions' + 'You cannot reference secret data outside of the fillField, magentoCLI, seeInField and createData actions' ); $actionObjectOne = new ActionObject( @@ -307,4 +307,31 @@ public static function tearDownAfterClass(): void { TestLoggingUtil::getInstance()->clearMockLoggingUtil(); } + + /** + * Verify that a action is replaced by when secret _CREDS are referenced. + * + * @return void + * @throws TestReferenceException + * @throws XmlException + */ + public function testValidSeeInSecretFieldFunction(): void + { + $actionObjectOne = new ActionObject( + 'actionKey1', + 'seeInField', + ['userInput' => '{{_CREDS.username}}', 'requiredCredentials' => 'username'] + ); + $actionObject = [$actionObjectOne]; + + $actionMergeUtil = new ActionMergeUtil('actionMergeUtilTest', 'TestCase'); + $result = $actionMergeUtil->resolveActionSteps($actionObject); + + $expectedValue = new ActionObject( + 'actionKey1', + 'seeInSecretField', + ['userInput' => '{{_CREDS.username}}','requiredCredentials' => 'username'] + ); + $this->assertEquals($expectedValue, $result['actionKey1']); + } } diff --git a/dev/tests/unit/Magento/FunctionalTestFramework/Test/Util/ObjectExtensionUtilTest.php b/dev/tests/unit/Magento/FunctionalTestFramework/Test/Util/ObjectExtensionUtilTest.php index b30e4b50e..466edc322 100644 --- a/dev/tests/unit/Magento/FunctionalTestFramework/Test/Util/ObjectExtensionUtilTest.php +++ b/dev/tests/unit/Magento/FunctionalTestFramework/Test/Util/ObjectExtensionUtilTest.php @@ -402,17 +402,17 @@ public function testExtendedTestSkippedParent(): void * @return void * @throws Exception */ - private function setMockTestOutput(array $testData = null, array $actionGroupData = null): void + private function setMockTestOutput(?array $testData = null, ?array $actionGroupData = null): void { // clear test object handler value to inject parsed content $property = new ReflectionProperty(TestObjectHandler::class, 'testObjectHandler'); $property->setAccessible(true); - $property->setValue(null); + $property->setValue(null, null); // clear test object handler value to inject parsed content $property = new ReflectionProperty(ActionGroupObjectHandler::class, 'instance'); $property->setAccessible(true); - $property->setValue(null); + $property->setValue(null, null); $mockDataParser = $this->createMock(TestDataParser::class); $mockDataParser @@ -445,6 +445,6 @@ function ($className) use ($mockDataParser, $mockActionGroupParser) { // clear object manager value to inject expected instance $property = new ReflectionProperty(ObjectManager::class, 'instance'); $property->setAccessible(true); - $property->setValue($instance); + $property->setValue(null, $instance); } } diff --git a/dev/tests/unit/Magento/FunctionalTestFramework/Util/ClassFileNameCheckTest.php b/dev/tests/unit/Magento/FunctionalTestFramework/Util/ClassFileNameCheckTest.php new file mode 100644 index 000000000..4c830ca82 --- /dev/null +++ b/dev/tests/unit/Magento/FunctionalTestFramework/Util/ClassFileNameCheckTest.php @@ -0,0 +1,42 @@ +getAllModulePaths(); + $testXmlFiles = $scriptUtil->getModuleXmlFilesByScope($modulePaths, "Test"); + $classFileNameCheck = new ClassFileNamingCheck(); + $result = $classFileNameCheck->findErrorsInFileSet($testXmlFiles, "test"); + $this->assertMatchesRegularExpression('/does not match with file name/', $result[array_keys($result)[0]][0]); + } + + /** + * This Test checks if the file name is renamed to match the class name if + * mismatch not found in class and file name + */ + public function testClassAndFileMismatchStaticCheckWhenViolationsNotFound() + { + $scriptUtil = new ScriptUtil(); + $modulePaths = $scriptUtil->getAllModulePaths(); + $testXmlFiles = $scriptUtil->getModuleXmlFilesByScope($modulePaths, "Page"); + $classFileNameCheck = new ClassFileNamingCheck(); + $result = $classFileNameCheck->findErrorsInFileSet($testXmlFiles, "page"); + $this->assertEquals(count($result), 0); + } +} diff --git a/dev/tests/unit/Magento/FunctionalTestFramework/Util/ComposerModuleResolverTest.php b/dev/tests/unit/Magento/FunctionalTestFramework/Util/ComposerModuleResolverTest.php index cec5f097e..39f8c555d 100644 --- a/dev/tests/unit/Magento/FunctionalTestFramework/Util/ComposerModuleResolverTest.php +++ b/dev/tests/unit/Magento/FunctionalTestFramework/Util/ComposerModuleResolverTest.php @@ -98,7 +98,7 @@ public function testFindAllComposerJsonFiles($dir, $expected) * * @return array */ - public function findComposerJsonFilesAtDepthDataProvider() + public static function findComposerJsonFilesAtDepthDataProvider() { $baseDir = dirname(__DIR__) . DIRECTORY_SEPARATOR . 'Composer' . DIRECTORY_SEPARATOR . '_files' . DIRECTORY_SEPARATOR . 'dir1' . DIRECTORY_SEPARATOR . 'dir2'; @@ -138,7 +138,7 @@ public function findComposerJsonFilesAtDepthDataProvider() * * @return array */ - public function findAllComposerJsonFilesDataProvider() + public static function findAllComposerJsonFilesDataProvider() { $baseDir = dirname(__DIR__) . DIRECTORY_SEPARATOR . 'Composer' . DIRECTORY_SEPARATOR . '_files' . DIRECTORY_SEPARATOR . 'dir1' . DIRECTORY_SEPARATOR . 'dir2'; diff --git a/dev/tests/unit/Magento/FunctionalTestFramework/Util/GenerationErrorHandlerTest.php b/dev/tests/unit/Magento/FunctionalTestFramework/Util/GenerationErrorHandlerTest.php index 35ffd6d3b..33cc78eee 100644 --- a/dev/tests/unit/Magento/FunctionalTestFramework/Util/GenerationErrorHandlerTest.php +++ b/dev/tests/unit/Magento/FunctionalTestFramework/Util/GenerationErrorHandlerTest.php @@ -254,7 +254,7 @@ public function testGetAllErrorMessages(string $expectedErrMessages, array $erro * * @return array */ - public function getAllErrorMessagesDataProvider(): array + public static function getAllErrorMessagesDataProvider(): array { return [ ['', []], @@ -340,6 +340,6 @@ public function tearDown(): void { $property = new ReflectionProperty(GenerationErrorHandler::class, 'instance'); $property->setAccessible(true); - $property->setValue(null); + $property->setValue(null, null); } } diff --git a/dev/tests/unit/Magento/FunctionalTestFramework/Util/ModulePathExtractorTest.php b/dev/tests/unit/Magento/FunctionalTestFramework/Util/ModulePathExtractorTest.php index 00be96582..6ee4a8cdd 100644 --- a/dev/tests/unit/Magento/FunctionalTestFramework/Util/ModulePathExtractorTest.php +++ b/dev/tests/unit/Magento/FunctionalTestFramework/Util/ModulePathExtractorTest.php @@ -159,7 +159,7 @@ function ($class) use ($mockResolver) { $objectManagerProperty = new ReflectionProperty(ObjectManager::class, 'instance'); $objectManagerProperty->setAccessible(true); - $objectManagerProperty->setValue($objectManagerMockInstance); + $objectManagerProperty->setValue(null, $objectManagerMockInstance); $resolver = ModuleResolver::getInstance(); $property = new ReflectionProperty(ModuleResolver::class, 'enabledModuleNameAndPaths'); diff --git a/dev/tests/unit/Magento/FunctionalTestFramework/Util/ModuleResolverTest.php b/dev/tests/unit/Magento/FunctionalTestFramework/Util/ModuleResolverTest.php index 25fd20d73..9809e50ff 100644 --- a/dev/tests/unit/Magento/FunctionalTestFramework/Util/ModuleResolverTest.php +++ b/dev/tests/unit/Magento/FunctionalTestFramework/Util/ModuleResolverTest.php @@ -39,11 +39,11 @@ public static function tearDownAfterClass(): void $moduleResolverServiceInstance = new ReflectionProperty(ModuleResolverService::class, 'INSTANCE'); $moduleResolverServiceInstance->setAccessible(true); - $moduleResolverServiceInstance->setValue(null); + $moduleResolverServiceInstance->setValue(null, null); $mftfAppConfigInstance = new ReflectionProperty(MftfApplicationConfig::class, 'MFTF_APPLICATION_CONTEXT'); $mftfAppConfigInstance->setAccessible(true); - $mftfAppConfigInstance->setValue(null); + $mftfAppConfigInstance->setValue(null, null); } /** @@ -151,7 +151,7 @@ public function testGetModulePathsLocations(): void // clear test object handler value to inject parsed content $property = new ReflectionProperty(ModuleResolver::class, 'instance'); $property->setAccessible(true); - $property->setValue(null); + $property->setValue(null, null); $this->mockForceGenerate(false); // Define the Module paths from default TESTS_MODULE_PATH @@ -923,7 +923,7 @@ private function setMockResolverCreatorProperties(?MockObject $moduleResolverSer { $property = new ReflectionProperty(ModuleResolverService::class, 'INSTANCE'); $property->setAccessible(true); - $property->setValue($moduleResolverService); + $property->setValue(null, $moduleResolverService); } /** @@ -942,7 +942,7 @@ private function mockForceGenerate(bool $forceGenerate): void $property = new ReflectionProperty(MftfApplicationConfig::class, 'MFTF_APPLICATION_CONTEXT'); $property->setAccessible(true); - $property->setValue($mockConfig); + $property->setValue(null, $mockConfig); } /** diff --git a/dev/tests/unit/Magento/FunctionalTestFramework/Util/Path/FilePathFormatterTest.php b/dev/tests/unit/Magento/FunctionalTestFramework/Util/Path/FilePathFormatterTest.php index c833fc6be..9aee9759e 100644 --- a/dev/tests/unit/Magento/FunctionalTestFramework/Util/Path/FilePathFormatterTest.php +++ b/dev/tests/unit/Magento/FunctionalTestFramework/Util/Path/FilePathFormatterTest.php @@ -70,7 +70,7 @@ public function testFormatWithException(string $path, ?bool $withTrailingSeparat * * @return array */ - public function formatDataProvider(): array + public static function formatDataProvider(): array { $path1 = rtrim(TESTS_BP, '/'); $path2 = $path1 . DIRECTORY_SEPARATOR; @@ -92,7 +92,7 @@ public function formatDataProvider(): array * * @return array */ - public function formatExceptionDataProvider(): array + public static function formatExceptionDataProvider(): array { return [ ['abc', null], diff --git a/dev/tests/unit/Magento/FunctionalTestFramework/Util/Path/UrlFormatterTest.php b/dev/tests/unit/Magento/FunctionalTestFramework/Util/Path/UrlFormatterTest.php index 21cfa9daa..e444812ce 100644 --- a/dev/tests/unit/Magento/FunctionalTestFramework/Util/Path/UrlFormatterTest.php +++ b/dev/tests/unit/Magento/FunctionalTestFramework/Util/Path/UrlFormatterTest.php @@ -58,7 +58,7 @@ public function testFormatWithException(string $path, ?bool $withTrailingSeparat * * @return array */ - public function formatDataProvider(): array + public static function formatDataProvider(): array { $url1 = 'http://magento.local/index.php'; $url2 = $url1 . '/'; @@ -97,7 +97,7 @@ public function formatDataProvider(): array * * @return array */ - public function formatExceptionDataProvider(): array + public static function formatExceptionDataProvider(): array { return [ ['', null] diff --git a/dev/tests/unit/Magento/FunctionalTestFramework/Util/Sorter/ParallelGroupSorterTest.php b/dev/tests/unit/Magento/FunctionalTestFramework/Util/Sorter/ParallelGroupSorterTest.php index 3d64e1346..7bd29acab 100644 --- a/dev/tests/unit/Magento/FunctionalTestFramework/Util/Sorter/ParallelGroupSorterTest.php +++ b/dev/tests/unit/Magento/FunctionalTestFramework/Util/Sorter/ParallelGroupSorterTest.php @@ -496,7 +496,7 @@ public static function tearDownAfterClass(): void { $instanceProperty = new ReflectionProperty(TestObjectHandler::class, 'testObjectHandler'); $instanceProperty->setAccessible(true); - $instanceProperty->setValue(null); + $instanceProperty->setValue(null, null); } /** diff --git a/dev/tests/unit/Magento/FunctionalTestFramework/Util/TestGeneratorTest.php b/dev/tests/unit/Magento/FunctionalTestFramework/Util/TestGeneratorTest.php index e8e3a4338..781e69584 100644 --- a/dev/tests/unit/Magento/FunctionalTestFramework/Util/TestGeneratorTest.php +++ b/dev/tests/unit/Magento/FunctionalTestFramework/Util/TestGeneratorTest.php @@ -37,11 +37,11 @@ public static function setUpBeforeClass(): void $property = new ReflectionProperty(ObjectManager::class, 'instance'); $property->setAccessible(true); - $property->setValue(null); + $property->setValue(null, null); $property = new ReflectionProperty(ModuleResolver::class, 'instance'); $property->setAccessible(true); - $property->setValue(null); + $property->setValue(null, null); } /** @@ -206,7 +206,7 @@ public function testAllowSkipped(): void $property = new ReflectionProperty(MftfApplicationConfig::class, 'MFTF_APPLICATION_CONTEXT'); $property->setAccessible(true); - $property->setValue($mockConfig); + $property->setValue(null, $mockConfig); $actionInput = 'fakeInput'; $actionObject = new ActionObject('fakeAction', 'comment', [ @@ -251,7 +251,7 @@ public function testSeverityFilter(): void $property = new ReflectionProperty(MftfApplicationConfig::class, 'MFTF_APPLICATION_CONTEXT'); $property->setAccessible(true); - $property->setValue($mockConfig); + $property->setValue(null, $mockConfig); $actionInput = 'fakeInput'; $actionObject = new ActionObject('fakeAction', 'comment', [ @@ -290,7 +290,7 @@ function ($filename) use (&$generatedTests) { $property = new ReflectionProperty(CestFileCreatorUtil::class, 'INSTANCE'); $property->setAccessible(true); - $property->setValue($cestFileCreatorUtil); + $property->setValue(null, $cestFileCreatorUtil); $testGeneratorObject = TestGenerator::getInstance('', ['sampleTest' => $test1, 'test2' => $test2]); $testGeneratorObject->createAllTestFiles(); @@ -414,7 +414,7 @@ public function testIncludeGroupFilter(): void $property = new ReflectionProperty(MftfApplicationConfig::class, 'MFTF_APPLICATION_CONTEXT'); $property->setAccessible(true); - $property->setValue($mockConfig); + $property->setValue(null, $mockConfig); $actionInput = 'fakeInput'; $actionObject = new ActionObject('fakeAction', 'comment', [ @@ -453,7 +453,7 @@ function ($filename) use (&$generatedTests) { $property = new ReflectionProperty(CestFileCreatorUtil::class, 'INSTANCE'); $property->setAccessible(true); - $property->setValue($cestFileCreatorUtil); + $property->setValue(null, $cestFileCreatorUtil); $testGeneratorObject = TestGenerator::getInstance('', ['sampleTest' => $test1, 'test2' => $test2]); $testGeneratorObject->createAllTestFiles(); @@ -479,7 +479,7 @@ public function testExcludeGroupFilter(): void $property = new ReflectionProperty(MftfApplicationConfig::class, 'MFTF_APPLICATION_CONTEXT'); $property->setAccessible(true); - $property->setValue($mockConfig); + $property->setValue(null, $mockConfig); $actionInput = 'fakeInput'; $actionObject = new ActionObject('fakeAction', 'comment', [ @@ -518,7 +518,7 @@ function ($filename) use (&$generatedTests) { $property = new ReflectionProperty(CestFileCreatorUtil::class, 'INSTANCE'); $property->setAccessible(true); - $property->setValue($cestFileCreatorUtil); + $property->setValue(null, $cestFileCreatorUtil); $testGeneratorObject = TestGenerator::getInstance('', ['sampleTest' => $test1, 'test2' => $test2]); $testGeneratorObject->createAllTestFiles(); @@ -537,15 +537,15 @@ public static function tearDownAfterClass(): void $cestFileCreatorUtilInstance = new ReflectionProperty(CestFileCreatorUtil::class, 'INSTANCE'); $cestFileCreatorUtilInstance->setAccessible(true); - $cestFileCreatorUtilInstance->setValue(null); + $cestFileCreatorUtilInstance->setValue(null, null); $mftfAppConfigInstance = new ReflectionProperty(MftfApplicationConfig::class, 'MFTF_APPLICATION_CONTEXT'); $mftfAppConfigInstance->setAccessible(true); - $mftfAppConfigInstance->setValue(null); + $mftfAppConfigInstance->setValue(null, null); $property = new ReflectionProperty(TestObjectHandler::class, 'testObjectHandler'); $property->setAccessible(true); - $property->setValue(null); + $property->setValue(null, null); } /** @@ -561,6 +561,6 @@ private function mockTestObjectHandler(): void $property = new ReflectionProperty(TestObjectHandler::class, 'testObjectHandler'); $property->setAccessible(true); - $property->setValue($testObjectHandler); + $property->setValue(null, $testObjectHandler); } } diff --git a/dev/tests/unit/Util/ActionGroupArrayBuilder.php b/dev/tests/unit/Util/ActionGroupArrayBuilder.php index 14877f4dd..49f9076e1 100644 --- a/dev/tests/unit/Util/ActionGroupArrayBuilder.php +++ b/dev/tests/unit/Util/ActionGroupArrayBuilder.php @@ -111,7 +111,7 @@ public function withActionObjects($actionObjs = []) * @param string $extendedActionGroup * @return $this */ - public function withExtendedAction($extendedActionGroup = null) + public function withExtendedAction(?string $extendedActionGroup = null) { $this->extends = $extendedActionGroup; return $this; diff --git a/dev/tests/unit/Util/SuiteDataArrayBuilder.php b/dev/tests/unit/Util/SuiteDataArrayBuilder.php index 9f937707a..fefc535df 100644 --- a/dev/tests/unit/Util/SuiteDataArrayBuilder.php +++ b/dev/tests/unit/Util/SuiteDataArrayBuilder.php @@ -179,7 +179,7 @@ private function appendEntriesToSuiteContents($currentContents, $type, $contents * @param null $afterHook * @return $this */ - public function withAfterHook($afterHook = null) + public function withAfterHook(?array $afterHook = null) { if ($afterHook === null) { $this->afterHook = [$this->testActionAfterName => [ @@ -200,7 +200,7 @@ public function withAfterHook($afterHook = null) * @param null $beforeHook * @return $this */ - public function withBeforeHook($beforeHook = null) + public function withBeforeHook(?array $beforeHook = null) { if ($beforeHook === null) { $this->beforeHook = [$this->testActionBeforeName => [ diff --git a/dev/tests/unit/Util/TestDataArrayBuilder.php b/dev/tests/unit/Util/TestDataArrayBuilder.php index 0a9672dd7..b2569111b 100644 --- a/dev/tests/unit/Util/TestDataArrayBuilder.php +++ b/dev/tests/unit/Util/TestDataArrayBuilder.php @@ -107,7 +107,7 @@ public function withName($name) * @param array $annotations * @return $this */ - public function withAnnotations($annotations = null) + public function withAnnotations(?array $annotations = null) { if ($annotations === null) { $this->annotations = ['group' => [['value' => 'test']]]; @@ -124,7 +124,7 @@ public function withAnnotations($annotations = null) * @param null $beforeHook * @return $this */ - public function withBeforeHook($beforeHook = null) + public function withBeforeHook(?array $beforeHook = null) { if ($beforeHook === null) { $this->beforeHook = [$this->testActionBeforeName => [ @@ -144,7 +144,7 @@ public function withBeforeHook($beforeHook = null) * @param null $afterHook * @return $this */ - public function withAfterHook($afterHook = null) + public function withAfterHook(?array $afterHook = null) { if ($afterHook === null) { $this->afterHook = [$this->testActionAfterName => [ @@ -165,7 +165,7 @@ public function withAfterHook($afterHook = null) * @param null $failedHook * @return $this */ - public function withFailedHook($failedHook = null) + public function withFailedHook(?array $failedHook = null) { if ($failedHook === null) { $this->failedHook = [$this->testActionFailedName => [ @@ -186,7 +186,7 @@ public function withFailedHook($failedHook = null) * @param array $actions * @return $this */ - public function withTestActions($actions = null) + public function withTestActions(?array $actions = null) { if ($actions === null) { $this->testActions = [$this->testTestActionName => [ @@ -205,7 +205,7 @@ public function withTestActions($actions = null) * @param string $filename * @return $this */ - public function withFileName($filename = null) + public function withFileName(?string $filename = null) { if ($filename === null) { $this->filename = @@ -223,7 +223,7 @@ public function withFileName($filename = null) * @param string $reference * @return $this */ - public function withTestReference($reference = null) + public function withTestReference(?string $reference = null) { if ($reference !== null) { $this->testReference = $reference; diff --git a/dev/tests/unit/Util/TestLoggingUtil.php b/dev/tests/unit/Util/TestLoggingUtil.php index ed29f091c..b225a4874 100644 --- a/dev/tests/unit/Util/TestLoggingUtil.php +++ b/dev/tests/unit/Util/TestLoggingUtil.php @@ -12,6 +12,7 @@ use Monolog\Handler\TestHandler; use PHPUnit\Framework\TestCase; use ReflectionProperty; +use ReflectionClass; class TestLoggingUtil extends TestCase { @@ -30,7 +31,7 @@ class TestLoggingUtil extends TestCase */ private function __construct() { - parent::__construct(null, [], ''); + parent::__construct('', [], ''); } /** @@ -64,7 +65,7 @@ public function setMockLoggingUtil(): void $property = new ReflectionProperty(LoggingUtil::class, 'instance'); $property->setAccessible(true); - $property->setValue($mockLoggingUtil); + $property->setValue(null, $mockLoggingUtil); } /** @@ -122,8 +123,7 @@ public function validateMockLogStatmentRegex(string $type, string $regex, array */ public function clearMockLoggingUtil(): void { - $property = new ReflectionProperty(LoggingUtil::class, 'instance'); - $property->setAccessible(true); - $property->setValue(null); + $reflectionClass = new ReflectionClass(LoggingUtil::class); + $reflectionClass->setStaticPropertyValue('instance', null); } } diff --git a/dev/tests/util/MftfTestCase.php b/dev/tests/util/MftfTestCase.php index a563186b3..365a8351f 100644 --- a/dev/tests/util/MftfTestCase.php +++ b/dev/tests/util/MftfTestCase.php @@ -9,8 +9,10 @@ use Magento\FunctionalTestingFramework\Suite\Handlers\SuiteObjectHandler; use Magento\FunctionalTestingFramework\Suite\SuiteGenerator; use Magento\FunctionalTestingFramework\Test\Handlers\TestObjectHandler; +use Magento\FunctionalTestingFramework\Util\Logger\LoggingUtil; use Magento\FunctionalTestingFramework\Util\TestGenerator; use PHPUnit\Framework\TestCase; +use ReflectionClass; abstract class MftfTestCase extends TestCase { @@ -112,23 +114,19 @@ protected function assertExceptionRegex(string $expectClass, array $expectedMess private function clearHandler() { // clear test object handler to force recollection of test data - $property = new \ReflectionProperty(TestObjectHandler::class, 'testObjectHandler'); - $property->setAccessible(true); - $property->setValue(null); + $reflectionClass = new ReflectionClass(TestObjectHandler::class); + $reflectionClass->setStaticPropertyValue('testObjectHandler', null); // clear test object handler to force recollection of test data - $property = new \ReflectionProperty(ObjectManager::class, 'instance'); - $property->setAccessible(true); - $property->setValue(null); + $reflectionClass = new ReflectionClass(ObjectManager::class); + $reflectionClass->setStaticPropertyValue('instance', null); // clear suite generator to force recollection of test data - $property = new \ReflectionProperty(SuiteGenerator::class, 'instance'); - $property->setAccessible(true); - $property->setValue(null); + $reflectionClass = new ReflectionClass(SuiteGenerator::class); + $reflectionClass->setStaticPropertyValue('instance', null); // clear suite object handler to force recollection of test data - $property = new \ReflectionProperty(SuiteObjectHandler::class, 'instance'); - $property->setAccessible(true); - $property->setValue(null); + $reflectionClass = new ReflectionClass(SuiteObjectHandler::class); + $reflectionClass->setStaticPropertyValue('instance', null); } } diff --git a/dev/tests/verification/Resources/BasicFunctionalTest.txt b/dev/tests/verification/Resources/BasicFunctionalTest.txt index d4631b706..5016fba93 100644 --- a/dev/tests/verification/Resources/BasicFunctionalTest.txt +++ b/dev/tests/verification/Resources/BasicFunctionalTest.txt @@ -170,6 +170,7 @@ class BasicFunctionalTestCest $I->seeElementInDOM(".functionalTestSelector"); // stepKey: seeElementInDOMKey1 $I->seeInCurrentUrl("/functionalUrl"); // stepKey: seeInCurrentUrlKey1 $I->seeInField(".functionalTestSelector", "someInput"); // stepKey: seeInFieldKey1 + $I->seeInSecretField(".functionalTestSelector", $I->getSecret("someKey")); // stepKey: seeInFieldKey2 $I->seeInPageSource("Home Page"); // stepKey: seeInPageSourceKey1 $I->seeInPageSource("

"); // stepKey: seeInPageSourceKey2 $I->seeInPopup("someInput"); // stepKey: seeInPopupKey1 diff --git a/dev/tests/verification/Resources/MagentoCliTest.txt b/dev/tests/verification/Resources/MagentoCliTest.txt new file mode 100644 index 000000000..3efc73c01 --- /dev/null +++ b/dev/tests/verification/Resources/MagentoCliTest.txt @@ -0,0 +1,59 @@ +Test files

verification/TestModule/Test/BasicFunctionalTest/MagentoCliTest.xml
") + */ +class MagentoCliTestCest +{ + /** + * @var bool + */ + private $isSuccess = false; + + /** + * @param AcceptanceTester $I + * @throws \Exception + */ + public function _after(AcceptanceTester $I) + { + if ($this->isSuccess) { + unlink(__FILE__); + } + } + + /** + * @Features({"TestModule"}) + * @param AcceptanceTester $I + * @return void + * @throws \Exception + */ + public function MagentoCliTest(AcceptanceTester $I) + { + $magentoCli1 = $I->magentoCLI("maintenance:enable", 45, "\"stuffHere\""); // stepKey: magentoCli1 + $I->comment($magentoCli1); + $magentoCli2 = $I->magentoCLI("maintenance:enable", 120, "\"stuffHere\""); // stepKey: magentoCli2 + $I->comment($magentoCli2); + $magentoCli3 = $I->magentoCLISecret("config:set somePath " . $I->getSecret("someKey"), 45); // stepKey: magentoCli3 + $I->comment($magentoCli3); // stepKey: magentoCli3 + $magentoCli4 = $I->magentoCLISecret("config:set somePath " . $I->getSecret("someKey"), 120); // stepKey: magentoCli4 + $I->comment($magentoCli4); // stepKey: magentoCli4 + } + + public function _passed(AcceptanceTester $I) + { + // Test passed successfully. + $this->isSuccess = true; + } +} diff --git a/dev/tests/verification/TestModule/Test/BasicFunctionalTest/BasicFunctionalTest.xml b/dev/tests/verification/TestModule/Test/BasicFunctionalTest/BasicFunctionalTest.xml index fa2b5e247..e0196f3ab 100644 --- a/dev/tests/verification/TestModule/Test/BasicFunctionalTest/BasicFunctionalTest.xml +++ b/dev/tests/verification/TestModule/Test/BasicFunctionalTest/BasicFunctionalTest.xml @@ -108,6 +108,7 @@ + diff --git a/dev/tests/verification/TestModule/Test/BasicFunctionalTest/MagentoCliTest.xml b/dev/tests/verification/TestModule/Test/BasicFunctionalTest/MagentoCliTest.xml new file mode 100644 index 000000000..23914943a --- /dev/null +++ b/dev/tests/verification/TestModule/Test/BasicFunctionalTest/MagentoCliTest.xml @@ -0,0 +1,16 @@ + + + + + + + + + + diff --git a/dev/tests/verification/Tests/BasicCestGenerationTest.php b/dev/tests/verification/Tests/BasicCestGenerationTest.php index 39802c50d..a900edbd3 100644 --- a/dev/tests/verification/Tests/BasicCestGenerationTest.php +++ b/dev/tests/verification/Tests/BasicCestGenerationTest.php @@ -59,4 +59,17 @@ public function testWithXmlComments() { $this->generateAndCompareTest('XmlCommentedTest'); } + + /** + * Tests magentoCLI and magentoCLISecret commands with env 'MAGENTO_CLI_WAIT_TIMEOUT' set + * + * @throws \Exception + * @throws \Magento\FunctionalTestingFramework\Exceptions\TestReferenceException + */ + public function testMagentoCli() + { + putenv("MAGENTO_CLI_WAIT_TIMEOUT=45"); + $this->generateAndCompareTest('MagentoCliTest'); + putenv("MAGENTO_CLI_WAIT_TIMEOUT"); + } } diff --git a/dev/tests/verification/Tests/ResilientGenerationTest.php b/dev/tests/verification/Tests/ResilientGenerationTest.php index cbd032ed2..9bb2b9479 100644 --- a/dev/tests/verification/Tests/ResilientGenerationTest.php +++ b/dev/tests/verification/Tests/ResilientGenerationTest.php @@ -76,19 +76,19 @@ public function setUp(): void $property = new \ReflectionProperty(SuiteGenerator::class, "instance"); $property->setAccessible(true); - $property->setValue(null); + $property->setValue(null, null); $property = new \ReflectionProperty(DirSetupUtil::class, "DIR_CONTEXT"); $property->setAccessible(true); - $property->setValue([]); + $property->setValue(null, []); $property = new \ReflectionProperty(SuiteObjectHandler::class, "instance"); $property->setAccessible(true); - $property->setValue(null); + $property->setValue(null, null); $property = new \ReflectionProperty(TestObjectHandler::class, "testObjectHandler"); $property->setAccessible(true); - $property->setValue(null); + $property->setValue(null, null); } /** @@ -261,19 +261,19 @@ public function tearDown(): void $property = new \ReflectionProperty(SuiteGenerator::class, "instance"); $property->setAccessible(true); - $property->setValue(null); + $property->setValue(null, null); $property = new \ReflectionProperty(DirSetupUtil::class, "DIR_CONTEXT"); $property->setAccessible(true); - $property->setValue([]); + $property->setValue(null, []); $property = new \ReflectionProperty(SuiteObjectHandler::class, "instance"); $property->setAccessible(true); - $property->setValue(null); + $property->setValue(null, null); $property = new \ReflectionProperty(TestObjectHandler::class, "testObjectHandler"); $property->setAccessible(true); - $property->setValue(null); + $property->setValue(null, null); } /** diff --git a/dev/tests/verification/Tests/SecretCredentialDataTest.php b/dev/tests/verification/Tests/SecretCredentialDataTestCest.php similarity index 72% rename from dev/tests/verification/Tests/SecretCredentialDataTest.php rename to dev/tests/verification/Tests/SecretCredentialDataTestCest.php index 351a3d800..acbcd1488 100644 --- a/dev/tests/verification/Tests/SecretCredentialDataTest.php +++ b/dev/tests/verification/Tests/SecretCredentialDataTestCest.php @@ -4,20 +4,9 @@ * See COPYING.txt for license details. */ -namespace Magento\AcceptanceTest\_default\Backend; +namespace Magento\FunctionalTestingFramework\Tests\Verification; use Magento\FunctionalTestingFramework\AcceptanceTester; -use Magento\FunctionalTestingFramework\DataGenerator\Handlers\CredentialStore; -use Magento\FunctionalTestingFramework\DataGenerator\Handlers\PersistedObjectHandler; -use \Codeception\Util\Locator; -use Yandex\Allure\Adapter\Annotation\Features; -use Yandex\Allure\Adapter\Annotation\Stories; -use Yandex\Allure\Adapter\Annotation\Title; -use Yandex\Allure\Adapter\Annotation\Description; -use Yandex\Allure\Adapter\Annotation\Parameter; -use Yandex\Allure\Adapter\Annotation\Severity; -use Yandex\Allure\Adapter\Model\SeverityLevel; -use Yandex\Allure\Adapter\Annotation\TestCaseId; /** */ @@ -61,14 +50,14 @@ public function secretCredentialDataTest(AcceptanceTester $I) $I->fillField("#username", "Hardcoded"); // stepKey: fillFieldUsingHardCodedData1 $I->fillSecretField("#username", $I->getSecret("carriers_dhl_id_eu")); - // stepKey: fillFieldUsingSecretCredData1 + // stepKey: fillFieldUsingSecretCredData1 $magentoCliUsingHardcodedData1 = $I->magentoCLI("config:set cms/wysiwyg/enabled 0"); - // stepKey: magentoCliUsingHardcodedData1 + // stepKey: magentoCliUsingHardcodedData1 $I->comment($magentoCliUsingHardcodedData1); $magentoCliUsingSecretCredData1 = $I->magentoCLI("config:set cms/wysiwyg/enabled " . $I->getSecret("payment_authorizenet_login")); - // stepKey: magentoCliUsingSecretCredData1 + // stepKey: magentoCliUsingSecretCredData1 $I->comment($magentoCliUsingSecretCredData1); } } diff --git a/dev/tests/verification/Tests/StaticCheck/DeprecationStaticCheckTest.php b/dev/tests/verification/Tests/StaticCheck/DeprecationStaticCheckTest.php index 58875d660..6b034adb1 100644 --- a/dev/tests/verification/Tests/StaticCheck/DeprecationStaticCheckTest.php +++ b/dev/tests/verification/Tests/StaticCheck/DeprecationStaticCheckTest.php @@ -10,6 +10,7 @@ use ReflectionProperty; use Symfony\Component\Console\Input\InputInterface; use tests\util\MftfStaticTestCase; +use ReflectionClass; class DeprecationStaticCheckTest extends MftfStaticTestCase { @@ -33,10 +34,8 @@ public function testDeprecatedEntityUsageCheck() $staticCheck = new DeprecatedEntityUsageCheck(); $input = $this->mockInputInterface(self::TEST_MODULE_PATH); - $property = new ReflectionProperty(StaticChecksList::class, 'errorFilesPath'); - $property->setAccessible(true); - $property->setValue(self::STATIC_RESULTS_DIR); - + $reflectionClass = new ReflectionClass(StaticChecksList::class); + $reflectionClass->setStaticPropertyValue('errorFilesPath', self::STATIC_RESULTS_DIR); /** @var InputInterface $input */ $staticCheck->execute($input); @@ -55,8 +54,7 @@ public function testDeprecatedEntityUsageCheck() */ public function tearDown(): void { - $property = new ReflectionProperty(StaticChecksList::class, 'errorFilesPath'); - $property->setAccessible(true); - $property->setValue(null); + $reflectionClass = new ReflectionClass(StaticChecksList::class); + $reflectionClass->setStaticPropertyValue('errorFilesPath', null); } } diff --git a/dev/tests/verification/Tests/StaticCheck/PauseActionStaticCheckTest.php b/dev/tests/verification/Tests/StaticCheck/PauseActionStaticCheckTest.php index 4c579b6c0..70ab480c4 100644 --- a/dev/tests/verification/Tests/StaticCheck/PauseActionStaticCheckTest.php +++ b/dev/tests/verification/Tests/StaticCheck/PauseActionStaticCheckTest.php @@ -8,9 +8,11 @@ use Exception; use Magento\FunctionalTestingFramework\StaticCheck\PauseActionUsageCheck; use Magento\FunctionalTestingFramework\StaticCheck\StaticChecksList; +use Magento\FunctionalTestingFramework\Suite\Handlers\SuiteObjectHandler; use ReflectionProperty; use Symfony\Component\Console\Input\InputInterface; use tests\util\MftfStaticTestCase; +use ReflectionClass; class PauseActionStaticCheckTest extends MftfStaticTestCase { @@ -34,10 +36,8 @@ public function testPauseActionUsageCheck() $staticCheck = new PauseActionUsageCheck(); $input = $this->mockInputInterface(self::TEST_MODULE_PATH); - - $property = new ReflectionProperty(StaticChecksList::class, 'errorFilesPath'); - $property->setAccessible(true); - $property->setValue(self::STATIC_RESULTS_DIR); + $reflectionClass = new ReflectionClass(StaticChecksList::class); + $reflectionClass->setStaticPropertyValue('errorFilesPath', self::STATIC_RESULTS_DIR); /** @var InputInterface $input */ $staticCheck->execute($input); @@ -57,8 +57,7 @@ public function testPauseActionUsageCheck() */ public static function tearDownAfterClass(): void { - $property = new ReflectionProperty(StaticChecksList::class, 'errorFilesPath'); - $property->setAccessible(true); - $property->setValue(null); + $reflectionClass = new ReflectionClass(StaticChecksList::class); + $reflectionClass->setStaticPropertyValue('errorFilesPath', null); } } diff --git a/dev/tests/verification/Tests/SuiteGenerationTest.php b/dev/tests/verification/Tests/SuiteGenerationTest.php index 85fbbacc9..ea25048b4 100644 --- a/dev/tests/verification/Tests/SuiteGenerationTest.php +++ b/dev/tests/verification/Tests/SuiteGenerationTest.php @@ -493,7 +493,7 @@ public function tearDown(): void $property = new \ReflectionProperty(DirSetupUtil::class, "DIR_CONTEXT"); $property->setAccessible(true); - $property->setValue([]); + $property->setValue(null, []); } /** diff --git a/dev/tests/verification/Tests/XmlDuplicateGenerationTest.php b/dev/tests/verification/Tests/XmlDuplicateGenerationTest.php index e9f65b9aa..5dc71cb8c 100644 --- a/dev/tests/verification/Tests/XmlDuplicateGenerationTest.php +++ b/dev/tests/verification/Tests/XmlDuplicateGenerationTest.php @@ -9,7 +9,7 @@ use Magento\FunctionalTestingFramework\Test\Handlers\TestObjectHandler; use tests\util\MftfTestCase; -class XmlDuplicateGerationTest extends MftfTestCase +class XmlDuplicateGenerationTest extends MftfTestCase { const XML_DUPLICATE_TEST = 'XmlDuplicateTest'; const XML_DUPLICATE_ACTIONGROUP = 'xmlDuplicateActionGroup'; diff --git a/etc/config/.env.example b/etc/config/.env.example index 3291d1082..b3ec2ad41 100644 --- a/etc/config/.env.example +++ b/etc/config/.env.example @@ -61,6 +61,9 @@ MODULE_ALLOWLIST=Magento_Framework,ConfigurableProductWishlist,ConfigurableProdu #*** Default timeout for wait actions WAIT_TIMEOUT=60 +#*** Default timeout for 'magentoCLI' and 'magentoCLISecret' command +MAGENTO_CLI_WAIT_TIMEOUT=60 + #*** Uncomment and set to enable all tests, regardless of passing status, to have all their Allure artifacts. #VERBOSE_ARTIFACTS=true diff --git a/etc/config/command.php b/etc/config/command.php index 0d8fc7997..861d016e8 100644 --- a/etc/config/command.php +++ b/etc/config/command.php @@ -46,10 +46,6 @@ $idleTimeout = true; } - if (checkForFilePath($output)) { - $output = "CLI output suppressed, filepath detected in output."; - } - $exitCode = $process->getExitCode(); if ($process->isSuccessful() || $idleTimeout) { @@ -57,7 +53,9 @@ } else { http_response_code(500); } - echo $output; + + // Suppress file paths from output + echo suppressFilePaths($output); } else { http_response_code(403); echo "Given command not found valid in Magento CLI Command list."; @@ -115,11 +113,21 @@ function trimAfterWhitespace($string) } /** - * Detects file path in string. + * Suppress file paths in string. * @param string $string - * @return boolean + * @return string */ -function checkForFilePath($string) +function suppressFilePaths(string $string): string { - return preg_match('/\/[\S]+\//', $string); + // Match file paths on both *nix and Windows system + $filePathPattern = '~(?:[A-Za-z]:[\\\/]|\\\\|\/)\S+~'; + $replacement = '[suppressed_path]'; + + preg_match_all($filePathPattern, $string, $matches); + if (!empty($matches)) { + foreach ($matches[0] as $match) { + $string = str_replace($match, $replacement, $string); + } + } + return $string; } diff --git a/etc/config/functional.suite.dist.yml b/etc/config/functional.suite.dist.yml index cacc6836f..25cad8342 100644 --- a/etc/config/functional.suite.dist.yml +++ b/etc/config/functional.suite.dist.yml @@ -38,4 +38,4 @@ modules: capabilities: unhandledPromptBehavior: "ignore" chromeOptions: - args: ["--no-sandbox", "--window-size=1920,1080", "--disable-extensions", "--enable-automation", "--disable-gpu", "--enable-Passthrough", "--disable-dev-shm-usage", "--ignore-certificate-errors", "--disable-component-update", "--disable-features=OptimizationHints","--disable-background-networking","--disable-domain-reliability","--disable-breakpad"] + args: ["--no-sandbox", "--window-size=1920,1080", "--disable-extensions", "--enable-automation", "--disable-gpu", "--enable-Passthrough", "--disable-dev-shm-usage", "--disable-component-update", "--disable-features=OptimizationHints","--disable-background-networking","--disable-domain-reliability","--disable-breakpad"] diff --git a/src/Magento/FunctionalTestingFramework/Allure/Adapter/MagentoAllureAdapter.php b/src/Magento/FunctionalTestingFramework/Allure/Adapter/MagentoAllureAdapter.php deleted file mode 100644 index 485a86fe1..000000000 --- a/src/Magento/FunctionalTestingFramework/Allure/Adapter/MagentoAllureAdapter.php +++ /dev/null @@ -1,452 +0,0 @@ -options['groups'] !== null) { - return $this->options['groups'][0]; - } - return null; - } - - /** - * Override of parent method to set suitename as suitename and group name concatenated - * - * @param SuiteEvent $suiteEvent - * @return void - */ - public function suiteBefore(SuiteEvent $suiteEvent) - { - $changeSuiteEvent = $suiteEvent; - - if ($this->getGroup() !== null) { - $suite = $suiteEvent->getSuite(); - $suiteName = ($suite->getName()) . "\\" . $this->sanitizeGroupName($this->getGroup()); - - call_user_func(\Closure::bind( - function () use ($suite, $suiteName) { - $suite->name = $suiteName; - }, - null, - $suite - )); - - //change suiteEvent - $changeSuiteEvent = new SuiteEvent( - $suiteEvent->getSuite(), - $suiteEvent->getResult(), - $suiteEvent->getSettings() - ); - } - // call parent function - parent::suiteBefore($changeSuiteEvent); - } - - /** - * Function which santizes any group names changed by the framework for execution in order to consolidate reporting. - * - * @param string $group - * @return string - */ - private function sanitizeGroupName($group) - { - $suiteNames = array_keys(SuiteObjectHandler::getInstance()->getAllObjects()); - $exactMatch = in_array($group, $suiteNames); - - // if this is an existing suite name we dont' need to worry about changing it - if ($exactMatch || strpos($group, "_") === false) { - return $group; - } - - // if we can't find this group in the generated suites we have to assume that the group was split for generation - $groupNameSplit = explode("_", $group); - array_pop($groupNameSplit); - array_pop($groupNameSplit); - $originalName = implode("_", $groupNameSplit); - - // confirm our original name is one of the existing suite names otherwise just return the original group name - $originalName = in_array($originalName, $suiteNames) ? $originalName : $group; - return $originalName; - } - - /** - * Override of parent method: - * prevent replacing of . to • - * strips control characters - * inserts stepKey into step name - * - * @param StepEvent $stepEvent - * @return void - * @throws \Yandex\Allure\Adapter\AllureException - */ - public function stepBefore(StepEvent $stepEvent) - { - $stepAction = $stepEvent->getStep()->getAction(); - - // Set atInvisibleSteps flag and return if step is in INVISIBLE_STEP_ACTIONS - if (in_array($stepAction, ActionObject::INVISIBLE_STEP_ACTIONS)) { - $this->atInvisibleSteps = true; - return; - } - - // Set back atInvisibleSteps flag - if ($this->atInvisibleSteps && !in_array($stepAction, ActionObject::INVISIBLE_STEP_ACTIONS)) { - $this->atInvisibleSteps = false; - } - - //Hard set to 200; we don't expose this config in MFTF - $argumentsLength = 200; - $stepKey = null; - - if (!($stepEvent->getStep() instanceof Comment)) { - $stepKey = $this->retrieveStepKey($stepEvent->getStep()->getLine()); - } - - // DO NOT alter action if actionGroup is starting, need the exact actionGroup name for good logging - if (strpos($stepAction, ActionGroupObject::ACTION_GROUP_CONTEXT_START) === false - && !($stepEvent->getStep() instanceof Comment) - ) { - $stepAction = $stepEvent->getStep()->getHumanizedActionWithoutArguments(); - } - $stepArgs = $stepEvent->getStep()->getArgumentsAsString($argumentsLength); - - if (!trim($stepAction)) { - $stepAction = $stepEvent->getStep()->getMetaStep()->getHumanizedActionWithoutArguments(); - $stepArgs = $stepEvent->getStep()->getMetaStep()->getArgumentsAsString($argumentsLength); - } - - $stepName = ''; - if ($stepKey !== null) { - $stepName .= '[' . $stepKey . '] '; - } - $stepName .= $stepAction . ' ' . $stepArgs; - - // Strip control characters so that report generation does not fail - $stepName = preg_replace('/[[:cntrl:]]/', '', $stepName); - - $this->getLifecycle()->fire(new StepStartedEvent($stepName)); - } - - /** - * Override of parent method, fires StepFailedEvent if step has failed (for xml output) - * @param StepEvent $stepEvent - * @throws \Yandex\Allure\Adapter\AllureException - * @return void - */ - public function stepAfter(StepEvent $stepEvent = null) - { - // Simply return if step is INVISIBLE_STEP_ACTIONS - if ($this->atInvisibleSteps) { - if ($stepEvent->getStep()->hasFailed()) { - $this->atInvisibleSteps = false; - } - return; - } - - if ($stepEvent->getStep()->hasFailed()) { - $this->getLifecycle()->fire(new StepFailedEvent()); - } - - $this->getLifecycle()->fire(new StepFinishedEvent()); - } - - /** - * Override of parent method, fires a TestCaseFailedEvent if a test is marked as incomplete. - * - * @param FailEvent $failEvent - * @return void - */ - public function testIncomplete(FailEvent $failEvent) - { - $event = new TestCaseFailedEvent(); - $e = $failEvent->getFail(); - $message = $e->getMessage(); - $this->getLifecycle()->fire($event->withException($e)->withMessage($message)); - } - - /** - * Override of parent method. Adds in steps for hard PHP Errors if they arrise. - * - * @param FailEvent $failEvent - * @return void - */ - public function testError(FailEvent $failEvent) - { - $event = new TestCaseBrokenEvent(); - $e = $failEvent->getFail(); - $message = $e->getMessage(); - - // Create new step with an error for Allure - $failStep = new Step(); - $failStep->setName("ERROR"); - $failStep->setTitle($message); - $failStep->setStatus(Status::BROKEN); - - // Retrieve Allure Steps and add in the new BROKEN step - $rootStep = $this->getLifecycle()->getStepStorage()->pollLast(); - $rootStep->addStep($failStep); - $this->getLifecycle()->getStepStorage()->put($rootStep); - - $this->getLifecycle()->fire($event->withException($e)->withMessage($message)); - } - - /** - * Override of parent method, polls stepStorage for testcase and formats it according to actionGroup nesting. - * @param TestEvent $testEvent - * @throws \Yandex\Allure\Adapter\AllureException - * @return void - */ - public function testEnd(TestEvent $testEvent) - { - $test = $this->getLifecycle()->getTestCaseStorage()->get(); - // update testClass label to consolidate re-try reporting - $this->formatAllureTestClassName($test); - // Peek top of testCaseStorage to check of failure - $testFailed = $test->getFailure(); - // Pops top of stepStorage, need to add it back in after processing - $rootStep = $this->getLifecycle()->getStepStorage()->pollLast(); - $formattedSteps = []; - $actionGroupStepContainer = null; - - $actionGroupStepKey = null; - foreach ($rootStep->getSteps() as $step) { - $this->removeAttachments($step, $testFailed); - $stepKey = str_replace($actionGroupStepKey, '', $step->getName()); - if ($stepKey !== '[]' && $stepKey !== null) { - $step->setName($stepKey); - } - // if actionGroup flag, start nesting - if (strpos($step->getName(), ActionGroupObject::ACTION_GROUP_CONTEXT_START) !== false) { - if ($actionGroupStepContainer !== null) { - //actionGroup still being nested, need to close out and finish it. - $formattedSteps[] = $actionGroupStepContainer; - $actionGroupStepContainer = null; - $actionGroupStepKey = null; - } - - $step->setName(str_replace(ActionGroupObject::ACTION_GROUP_CONTEXT_START, '', $step->getName())); - $actionGroupStepContainer = $step; - $actionGroupStepKey = $this->retrieveActionGroupStepKey($step); - continue; - } - - // if actionGroup ended, add stack to steps - if (stripos($step->getName(), ActionGroupObject::ACTION_GROUP_CONTEXT_END) !== false) { - $formattedSteps[] = $actionGroupStepContainer; - $actionGroupStepContainer = null; - $actionGroupStepKey = null; - continue; - } - - if ($actionGroupStepContainer !== null) { - $actionGroupStepContainer->addStep($step); - if ($step->getStatus() !== self::STEP_PASSED) { - // If step didn't pass, need to end action group nesting and set overall step status - $actionGroupStepContainer->setStatus($step->getStatus()); - $formattedSteps[] = $actionGroupStepContainer; - $actionGroupStepContainer = null; - } - } else { - // Add step as normal - $formattedSteps[] = $step; - } - } - - // No public function for setting the step's steps - call_user_func(\Closure::bind( - function () use ($rootStep, $formattedSteps) { - $rootStep->steps = $formattedSteps; - }, - null, - $rootStep - )); - - $this->getLifecycle()->getStepStorage()->put($rootStep); - - $this->addAttachmentEvent($testEvent); - - $this->getLifecycle()->fire(new TestCaseFinishedEvent()); - } - - /** - * Fire add attachment event - * @param TestEvent $testEvent - * @throws \Yandex\Allure\Adapter\AllureException - * @return void - */ - private function addAttachmentEvent(TestEvent $testEvent) - { - // attachments supported since Codeception 3.0 - if (version_compare(Codecept::VERSION, '3.0.0') > -1 && $testEvent->getTest() instanceof Cest) { - $artifacts = $testEvent->getTest()->getMetadata()->getReports(); - foreach ($artifacts as $name => $artifact) { - Allure::lifecycle()->fire(new AddAttachmentEvent($artifact, $name, null)); - } - } - } - - /** - * Reads action group stepKey from step. - * - * @param Step $step - * @return string|null - */ - private function retrieveActionGroupStepKey($step) - { - $actionGroupStepKey = null; - - preg_match(TestGenerator::ACTION_GROUP_STEP_KEY_REGEX, $step->getName(), $matches); - - if (!empty($matches['actionGroupStepKey'])) { - $actionGroupStepKey = ucfirst($matches['actionGroupStepKey']); - } - - return $actionGroupStepKey; - } - - /** - * Reading stepKey from file. - * - * @param string $stepLine - * @return string|null - */ - private function retrieveStepKey($stepLine) - { - $stepKey = null; - list($filePath, $stepLine) = explode(":", $stepLine); - $stepLine = $stepLine - 1; - - if (!array_key_exists($filePath, $this->testFiles)) { - $this->testFiles[$filePath] = explode(PHP_EOL, file_get_contents($filePath)); - } - - preg_match(TestGenerator::ACTION_STEP_KEY_REGEX, $this->testFiles[$filePath][$stepLine], $matches); - if (!empty($matches['stepKey'])) { - $stepKey = $matches['stepKey']; - } - - return $stepKey; - } - - /** - * Removes attachments from step depending on MFTF configuration - * @param Step $step - * @param Failure $testFailed - * @return void - */ - private function removeAttachments($step, $testFailed) - { - //Remove Attachments if verbose flag is not true AND test did not fail - if (getenv('VERBOSE_ARTIFACTS') !== "true" && $testFailed === null) { - foreach ($step->getAttachments() as $index => $attachment) { - $step->removeAttachment($index); - unlink(Provider::getOutputDirectory() . DIRECTORY_SEPARATOR . $attachment->getSource()); - } - } - } - - /** - * Format testClass label to consolidate re-try reporting for groups split for parallel execution - * @param TestCase $test - * @return void - */ - private function formatAllureTestClassName($test) - { - if ($this->getGroup() !== null) { - foreach ($test->getLabels() as $label) { - if ($label->getName() === 'testClass') { - $originalTestClass = $this->sanitizeTestClassLabel($label->getValue()); - call_user_func(\Closure::bind( - function () use ($label, $originalTestClass) { - $label->value = $originalTestClass; - }, - null, - $label - )); - break; - } - } - } - } - - /** - * Function which sanitizes testClass label for split group runs - * @param string $testClass - * @return string - */ - private function sanitizeTestClassLabel($testClass) - { - $originalTestClass = $testClass; - $originalGroupName = $this->sanitizeGroupName($this->getGroup()); - if ($originalGroupName !== $this->getGroup()) { - $originalTestClass = str_replace($this->getGroup(), $originalGroupName, $testClass); - } - return $originalTestClass; - } -} diff --git a/src/Magento/FunctionalTestingFramework/Codeception/Module/Sequence.php b/src/Magento/FunctionalTestingFramework/Codeception/Module/Sequence.php new file mode 100644 index 000000000..a7d763cfc --- /dev/null +++ b/src/Magento/FunctionalTestingFramework/Codeception/Module/Sequence.php @@ -0,0 +1,69 @@ + + */ + public static array $hash = [];// phpcs:ignore + + /** + * @var array + */ + public static array $suiteHash = [];// phpcs:ignore + + /** + * @var string + */ + public static string $prefix = '';// phpcs:ignore + + /** + * @var array + */ + protected array $config = ['prefix' => '{id}_'];// phpcs:ignore + + /** + * Initialise method + * @return void + */ + public function _initialize(): void + { + static::$prefix = $this->config['prefix']; + } + + /** + * @SuppressWarnings(PHPMD.UnusedFormalParameter) + * after method + * @return void + */ + public function _after(TestInterface $test): void + { + self::$hash = []; + } + + /** + * after suite method + * @return void + */ + public function _afterSuite(): void + { + self::$suiteHash = []; + } +} diff --git a/src/Magento/FunctionalTestingFramework/Config/Data.php b/src/Magento/FunctionalTestingFramework/Config/Data.php index a34ec1bf3..e9b9c377d 100644 --- a/src/Magento/FunctionalTestingFramework/Config/Data.php +++ b/src/Magento/FunctionalTestingFramework/Config/Data.php @@ -56,7 +56,7 @@ public function merge(array $config) * @param null|mixed $default * @return array|mixed|null */ - public function get($path = null, $default = null) + public function get(mixed $path = null, mixed $default = null) { if ($path === null) { return $this->data; @@ -94,7 +94,7 @@ public function setFileName($fileName) * @param string|null $scope * @return void */ - public function load($scope = null) + public function load(?string $scope = null) { $this->merge( $this->reader->read($scope) diff --git a/src/Magento/FunctionalTestingFramework/Config/DataInterface.php b/src/Magento/FunctionalTestingFramework/Config/DataInterface.php index 6af873001..80636c2e4 100644 --- a/src/Magento/FunctionalTestingFramework/Config/DataInterface.php +++ b/src/Magento/FunctionalTestingFramework/Config/DataInterface.php @@ -26,7 +26,7 @@ public function merge(array $config); * @param mixed|null $default * @return mixed|null */ - public function get($key = null, $default = null); + public function get(mixed $key = null, mixed $default = null); // @codingStandardsIgnoreEnd /** @@ -35,7 +35,7 @@ public function get($key = null, $default = null); * @param string|null $scope * @return void */ - public function load($scope = null); + public function load(?string $scope = null); /** * Set name of the config file diff --git a/src/Magento/FunctionalTestingFramework/Config/FileResolver/Mask.php b/src/Magento/FunctionalTestingFramework/Config/FileResolver/Mask.php index e3f29f954..7db1514af 100644 --- a/src/Magento/FunctionalTestingFramework/Config/FileResolver/Mask.php +++ b/src/Magento/FunctionalTestingFramework/Config/FileResolver/Mask.php @@ -28,7 +28,7 @@ class Mask implements FileResolverInterface * * @param ModuleResolver|null $moduleResolver */ - public function __construct(ModuleResolver $moduleResolver = null) + public function __construct(?ModuleResolver $moduleResolver = null) { if ($moduleResolver) { $this->moduleResolver = $moduleResolver; diff --git a/src/Magento/FunctionalTestingFramework/Config/FileResolver/Module.php b/src/Magento/FunctionalTestingFramework/Config/FileResolver/Module.php index 7cff19c87..18432c876 100644 --- a/src/Magento/FunctionalTestingFramework/Config/FileResolver/Module.php +++ b/src/Magento/FunctionalTestingFramework/Config/FileResolver/Module.php @@ -27,7 +27,7 @@ class Module implements FileResolverInterface * @param ModuleResolver|null $moduleResolver * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ - public function __construct(ModuleResolver $moduleResolver = null) + public function __construct(?ModuleResolver $moduleResolver = null) { $this->moduleResolver = ModuleResolver::getInstance(); } diff --git a/src/Magento/FunctionalTestingFramework/Config/Reader/Filesystem.php b/src/Magento/FunctionalTestingFramework/Config/Reader/Filesystem.php index 8e36a63d7..a9dc6785c 100644 --- a/src/Magento/FunctionalTestingFramework/Config/Reader/Filesystem.php +++ b/src/Magento/FunctionalTestingFramework/Config/Reader/Filesystem.php @@ -124,7 +124,7 @@ public function __construct( * @param string|null $scope * @return array */ - public function read($scope = null) + public function read(?string $scope = null) { $scope = $scope ?: $this->defaultScope; $fileList = $this->fileResolver->get($this->fileName, $scope); @@ -228,7 +228,7 @@ protected function verifyFileEmpty($content, $fileName) * @throws \Exception * @return void */ - protected function validateSchema($configMerger, $filename = null) + protected function validateSchema($configMerger, ?string $filename = null) { if ($this->validationState->isValidationRequired()) { $errors = []; diff --git a/src/Magento/FunctionalTestingFramework/Config/ReaderInterface.php b/src/Magento/FunctionalTestingFramework/Config/ReaderInterface.php index 9e64a6715..9fc374f7b 100644 --- a/src/Magento/FunctionalTestingFramework/Config/ReaderInterface.php +++ b/src/Magento/FunctionalTestingFramework/Config/ReaderInterface.php @@ -19,5 +19,5 @@ interface ReaderInterface * @param string|null $scope * @return array */ - public function read($scope = null); + public function read(?string $scope = null); } diff --git a/src/Magento/FunctionalTestingFramework/Console/GenerateTestsCommand.php b/src/Magento/FunctionalTestingFramework/Console/GenerateTestsCommand.php index 05e286c88..c1ac3aa6e 100644 --- a/src/Magento/FunctionalTestingFramework/Console/GenerateTestsCommand.php +++ b/src/Magento/FunctionalTestingFramework/Console/GenerateTestsCommand.php @@ -231,9 +231,11 @@ protected function execute(InputInterface $input, OutputInterface $output) $testManifest->createTestGroups($configNumber); } + SuiteGenerator::getInstance()->generateAllSuites($testManifest); + $testManifest->generate(); - SuiteGenerator::getInstance()->generateAllSuites($testManifest); + SuiteGenerator::getInstance()->generateTestgroupmembership($testManifest); } catch (\Exception $e) { if (!empty(GenerationErrorHandler::getInstance()->getAllErrors())) { GenerationErrorHandler::getInstance()->printErrorSummary(); @@ -250,7 +252,7 @@ protected function execute(InputInterface $input, OutputInterface $output) // check test dependencies log command if (!empty($log)) { if ($log === "testEntityJson") { - $this->getTestEntityJson($tests); + $this->getTestEntityJson($filterList ??[], $tests); $testDependencyFileLocation = self::TEST_DEPENDENCY_FILE_LOCATION_EMBEDDED; if (isset($_ENV['MAGENTO_BP'])) { $testDependencyFileLocation = self::TEST_DEPENDENCY_FILE_LOCATION_STANDALONE; @@ -393,21 +395,22 @@ private function parseConfigParallelOptions($time, $groups) * @throws TestFrameworkException * @throws XmlException|FastFailException */ - private function getTestEntityJson(array $tests = []) + private function getTestEntityJson(array $filterList, array $tests = []) { - $testDependencies = $this->getTestDependencies($tests); + $testDependencies = $this->getTestDependencies($filterList, $tests); $this->array2Json($testDependencies); } /** * Function responsible for getting test dependencies in array + * @param array $filterList * @param array $tests * @return array * @throws FastFailException * @throws TestFrameworkException * @throws XmlException */ - public function getTestDependencies(array $tests = []): array + public function getTestDependencies(array $filterList, array $tests = []): array { $this->scriptUtil = new ScriptUtil(); $this->testDependencyUtil = new TestDependencyUtil(); @@ -440,7 +443,11 @@ public function getTestDependencies(array $tests = []): array } list($testDependencies, $extendedTestMapping) = $this->findTestDependentModule($testXmlFiles); - return $this->testDependencyUtil->mergeDependenciesForExtendingTests($testDependencies, $extendedTestMapping); + return $this->testDependencyUtil->mergeDependenciesForExtendingTests( + $testDependencies, + $filterList, + $extendedTestMapping + ); } /** diff --git a/src/Magento/FunctionalTestingFramework/Console/RunTestCommand.php b/src/Magento/FunctionalTestingFramework/Console/RunTestCommand.php index 02e721ae3..31ca307d5 100644 --- a/src/Magento/FunctionalTestingFramework/Console/RunTestCommand.php +++ b/src/Magento/FunctionalTestingFramework/Console/RunTestCommand.php @@ -46,8 +46,7 @@ protected function configure() 'xml', InputOption::VALUE_NONE, "creates xml report for executed test" - ) - ->addArgument( + )->addArgument( 'name', InputArgument::OPTIONAL | InputArgument::IS_ARRAY, "name of tests to generate and execute" @@ -128,7 +127,7 @@ protected function execute(InputInterface $input, OutputInterface $output): int '--debug' => $debug, '--allow-skipped' => $allowSkipped, '-v' => $verbose, - '' + '' ]; $command->run(new ArrayInput($args), $output); @@ -165,9 +164,8 @@ protected function execute(InputInterface $input, OutputInterface $output): int */ private function runTests(array $tests, OutputInterface $output, InputInterface $input) { - $xml = ($input->getOption('xml')) - ? '--xml' - : ""; + $xml = ($input->getOption('xml')) ? '--xml' : ""; + $noAnsi = ($input->getOption('no-ansi')) ? '--no-ansi' : ""; if ($this->pauseEnabled()) { $codeceptionCommand = self::CODECEPT_RUN_FUNCTIONAL; } else { @@ -196,7 +194,7 @@ private function runTests(array $tests, OutputInterface $output, InputInterface $this->returnCode = max($this->returnCode, $this->codeceptRunTest($fullCommand, $output)); } else { $fullCommand = $codeceptionCommand . $testsDirectory . $testName . ' --verbose --steps '.$xml; - $this->returnCode = max($this->returnCode, $this->executeTestCommand($fullCommand, $output)); + $this->returnCode = max($this->returnCode, $this->executeTestCommand($fullCommand, $output, $noAnsi)); } if (!empty($xml)) { $this->movingXMLFileFromSourceToDestination($xml, $testName, $output); @@ -217,9 +215,8 @@ private function runTests(array $tests, OutputInterface $output, InputInterface */ private function runTestsInSuite(array $suitesConfig, OutputInterface $output, InputInterface $input) { - $xml = ($input->getOption('xml')) - ? '--xml' - : ""; + $xml = ($input->getOption('xml')) ? '--xml' : ""; + $noAnsi = ($input->getOption('no-ansi')) ? '--no-ansi' : ""; if ($this->pauseEnabled()) { $codeceptionCommand = self::CODECEPT_RUN_FUNCTIONAL . '--verbose --steps --debug '.$xml; } else { @@ -240,7 +237,7 @@ private function runTestsInSuite(array $suitesConfig, OutputInterface $output, I } $this->returnCode = max($this->returnCode, $this->codeceptRunTest($fullCommand, $output)); } else { - $this->returnCode = max($this->returnCode, $this->executeTestCommand($fullCommand, $output)); + $this->returnCode = max($this->returnCode, $this->executeTestCommand($fullCommand, $output, $noAnsi)); } if (!empty($xml)) { $this->movingXMLFileFromSourceToDestination($xml, $suite, $output); @@ -259,15 +256,31 @@ private function runTestsInSuite(array $suitesConfig, OutputInterface $output, I * * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ - private function executeTestCommand(string $command, OutputInterface $output) + private function executeTestCommand(string $command, OutputInterface $output, $noAnsi) { $process = Process::fromShellCommandline($command); $process->setWorkingDirectory(TESTS_BP); $process->setIdleTimeout(600); $process->setTimeout(0); - return $process->run(function ($type, $buffer) use ($output) { + return $process->run(function ($type, $buffer) use ($output, $noAnsi) { + $buffer = $this->disableAnsiColorCodes($buffer, $noAnsi); $output->write($buffer); }); } + + /** + * @param string $buffer + * @param string $noAnsi + * @return string + */ + private function disableAnsiColorCodes($buffer, $noAnsi) :string + { + if (empty($noAnsi)) { + return $buffer; + } + $pattern = "/\x1B\[([0-9]{1,2}(;[0-9]{1,2})*)?[m|K]/"; + // Use preg_replace to remove ANSI escape codes from the string + return preg_replace($pattern, '', $buffer); + } } diff --git a/src/Magento/FunctionalTestingFramework/Console/StaticChecksCommand.php b/src/Magento/FunctionalTestingFramework/Console/StaticChecksCommand.php index 806508ef8..e8d67e04b 100644 --- a/src/Magento/FunctionalTestingFramework/Console/StaticChecksCommand.php +++ b/src/Magento/FunctionalTestingFramework/Console/StaticChecksCommand.php @@ -117,7 +117,7 @@ protected function execute(InputInterface $input, OutputInterface $output) $staticOutput = $staticCheck->getOutput(); LoggingUtil::getInstance()->getLogger(get_class($staticCheck))->info($staticOutput); - $this->ioStyle->text($staticOutput); + $this->ioStyle->text($staticOutput??""); $this->ioStyle->text('Total execution time is ' . (string)($end - $start) . ' seconds.' . PHP_EOL); } diff --git a/src/Magento/FunctionalTestingFramework/DataGenerator/Persist/DataPersistenceHandler.php b/src/Magento/FunctionalTestingFramework/DataGenerator/Persist/DataPersistenceHandler.php index fe4a10186..55197a211 100644 --- a/src/Magento/FunctionalTestingFramework/DataGenerator/Persist/DataPersistenceHandler.php +++ b/src/Magento/FunctionalTestingFramework/DataGenerator/Persist/DataPersistenceHandler.php @@ -82,7 +82,7 @@ public function __construct($entityObject, $dependentObjects = [], $customFields * @return void * @throws TestFrameworkException */ - public function createEntity($storeCode = null) + public function createEntity(?string $storeCode = null) { if (!empty($storeCode)) { $this->storeCode = $storeCode; @@ -136,7 +136,7 @@ public function updateEntity($updateDataName, $updateDependentObjects = []) * @return void * @throws TestFrameworkException */ - public function getEntity($index = null, $storeCode = null) + public function getEntity(?string $index = null, ?string $storeCode = null) { if (!empty($storeCode)) { $this->storeCode = $storeCode; diff --git a/src/Magento/FunctionalTestingFramework/DataGenerator/Persist/OperationDataArrayResolver.php b/src/Magento/FunctionalTestingFramework/DataGenerator/Persist/OperationDataArrayResolver.php index 3266f5a24..8ff1f72c9 100644 --- a/src/Magento/FunctionalTestingFramework/DataGenerator/Persist/OperationDataArrayResolver.php +++ b/src/Magento/FunctionalTestingFramework/DataGenerator/Persist/OperationDataArrayResolver.php @@ -46,7 +46,7 @@ class OperationDataArrayResolver * * @param array $dependentEntities */ - public function __construct($dependentEntities = null) + public function __construct(?array $dependentEntities = null) { if ($dependentEntities !== null) { foreach ($dependentEntities as $entity) { diff --git a/src/Magento/FunctionalTestingFramework/DataTransport/AdminFormExecutor.php b/src/Magento/FunctionalTestingFramework/DataTransport/AdminFormExecutor.php index 0573f48ce..105cce7e7 100644 --- a/src/Magento/FunctionalTestingFramework/DataTransport/AdminFormExecutor.php +++ b/src/Magento/FunctionalTestingFramework/DataTransport/AdminFormExecutor.php @@ -157,7 +157,7 @@ public function write($url, $data = [], $method = CurlInterface::POST, $headers * @return string|array * @throws TestFrameworkException */ - public function read($successRegex = null, $returnRegex = null, $returnIndex = null) + public function read(?string $successRegex = null, ?string $returnRegex = null, ?string $returnIndex = null) { $this->response = $this->transport->read(); $this->setFormKey(); diff --git a/src/Magento/FunctionalTestingFramework/DataTransport/Auth/Tfa/OTP.php b/src/Magento/FunctionalTestingFramework/DataTransport/Auth/Tfa/OTP.php index 32c1f6b81..b12733b33 100644 --- a/src/Magento/FunctionalTestingFramework/DataTransport/Auth/Tfa/OTP.php +++ b/src/Magento/FunctionalTestingFramework/DataTransport/Auth/Tfa/OTP.php @@ -31,7 +31,7 @@ class OTP * @return string * @throws TestFrameworkException */ - public static function getOTP($path = null) + public static function getOTP(?string $path = null) { if ($path === null) { $path = self::OTP_SHARED_SECRET_PATH; diff --git a/src/Magento/FunctionalTestingFramework/DataTransport/Auth/WebApiAuth.php b/src/Magento/FunctionalTestingFramework/DataTransport/Auth/WebApiAuth.php index 775dcc6e9..ac2d3ae99 100644 --- a/src/Magento/FunctionalTestingFramework/DataTransport/Auth/WebApiAuth.php +++ b/src/Magento/FunctionalTestingFramework/DataTransport/Auth/WebApiAuth.php @@ -56,7 +56,7 @@ class WebApiAuth * @SuppressWarnings(PHPMD.CyclomaticComplexity) * @SuppressWarnings(PHPMD.NPathComplexity) */ - public static function getAdminToken($username = null, $password = null) + public static function getAdminToken(?string $username = null, ?string $password = null) { $login = $username ?? getenv('MAGENTO_ADMIN_USERNAME'); try { diff --git a/src/Magento/FunctionalTestingFramework/DataTransport/FrontendFormExecutor.php b/src/Magento/FunctionalTestingFramework/DataTransport/FrontendFormExecutor.php index 0cf69ec94..c167c79b6 100644 --- a/src/Magento/FunctionalTestingFramework/DataTransport/FrontendFormExecutor.php +++ b/src/Magento/FunctionalTestingFramework/DataTransport/FrontendFormExecutor.php @@ -165,7 +165,7 @@ public function write($url, $data = [], $method = CurlInterface::POST, $headers * @return string|array * @throws TestFrameworkException */ - public function read($successRegex = null, $returnRegex = null, $returnIndex = null) + public function read(?string $successRegex = null, ?string $returnRegex = null, ?string $returnIndex = null) { $this->response = $this->transport->read(); $this->setCookies(); diff --git a/src/Magento/FunctionalTestingFramework/DataTransport/Protocol/CurlInterface.php b/src/Magento/FunctionalTestingFramework/DataTransport/Protocol/CurlInterface.php index d15dbb18b..31d931819 100644 --- a/src/Magento/FunctionalTestingFramework/DataTransport/Protocol/CurlInterface.php +++ b/src/Magento/FunctionalTestingFramework/DataTransport/Protocol/CurlInterface.php @@ -47,7 +47,7 @@ public function write($url, $body = [], $method = CurlInterface::POST, $headers * @param string|null $returnIndex * @return string|array */ - public function read($successRegex = null, $returnRegex = null, $returnIndex = null); + public function read(?string $successRegex = null, ?string $returnRegex = null, ?string $returnIndex = null); /** * Close the connection to the server. diff --git a/src/Magento/FunctionalTestingFramework/DataTransport/Protocol/CurlTransport.php b/src/Magento/FunctionalTestingFramework/DataTransport/Protocol/CurlTransport.php index 6d064feb5..fc35da08e 100644 --- a/src/Magento/FunctionalTestingFramework/DataTransport/Protocol/CurlTransport.php +++ b/src/Magento/FunctionalTestingFramework/DataTransport/Protocol/CurlTransport.php @@ -167,7 +167,7 @@ public function write($url, $body = [], $method = CurlInterface::POST, $headers * @return string * @throws TestFrameworkException */ - public function read($successRegex = null, $returnRegex = null, $returnIndex = null) + public function read(?string $successRegex = null, ?string $returnRegex = null, ?string $returnIndex = null) { $response = curl_exec($this->getResource()); diff --git a/src/Magento/FunctionalTestingFramework/DataTransport/WebApiExecutor.php b/src/Magento/FunctionalTestingFramework/DataTransport/WebApiExecutor.php index 3a4b627bd..52b7cdb65 100644 --- a/src/Magento/FunctionalTestingFramework/DataTransport/WebApiExecutor.php +++ b/src/Magento/FunctionalTestingFramework/DataTransport/WebApiExecutor.php @@ -48,7 +48,7 @@ class WebApiExecutor implements CurlInterface * @param string $storeCode * @throws FastFailException */ - public function __construct($storeCode = null) + public function __construct(?string $storeCode = null) { $this->storeCode = $storeCode; $this->transport = new CurlTransport(); @@ -98,7 +98,7 @@ public function write($url, $data = [], $method = CurlInterface::POST, $headers * @return string * @throws TestFrameworkException */ - public function read($successRegex = null, $returnRegex = null, $returnIndex = null) + public function read(?string $successRegex = null, ?string $returnRegex = null, ?string $returnIndex = null) { return $this->transport->read(); } diff --git a/src/Magento/FunctionalTestingFramework/Module/MagentoSequence.php b/src/Magento/FunctionalTestingFramework/Module/MagentoSequence.php index 36c76ab27..02f60c736 100644 --- a/src/Magento/FunctionalTestingFramework/Module/MagentoSequence.php +++ b/src/Magento/FunctionalTestingFramework/Module/MagentoSequence.php @@ -7,7 +7,7 @@ // @codingStandardsIgnoreFile namespace Magento\FunctionalTestingFramework\Module; -use Codeception\Module\Sequence; +use Magento\FunctionalTestingFramework\Codeception\Module\Sequence; use Codeception\Exception\ModuleException; /** diff --git a/src/Magento/FunctionalTestingFramework/Module/MagentoWebDriver.php b/src/Magento/FunctionalTestingFramework/Module/MagentoWebDriver.php index f2580deaf..e7350f5b9 100644 --- a/src/Magento/FunctionalTestingFramework/Module/MagentoWebDriver.php +++ b/src/Magento/FunctionalTestingFramework/Module/MagentoWebDriver.php @@ -530,9 +530,9 @@ public function scrollToTopOfPage() /** * Takes given $command and executes it against bin/magento or custom exposed entrypoint. Returns command output. * - * @param string $command - * @param integer $timeout - * @param string $arguments + * @param string $command + * @param integer|null $timeout + * @param string|null $arguments * @return string * * @throws TestFrameworkException @@ -846,9 +846,9 @@ public function fillSecretField($field, $value) * Function used to create data that contains sensitive credentials in a override. * The data is decrypted immediately prior to data creation to avoid exposure in console or log. * - * @param string $command - * @param null $timeout - * @param null $arguments + * @param string $command + * @param integer|null $timeout + * @param string|null $arguments * @throws TestFrameworkException * @return string */ @@ -864,6 +864,27 @@ public function magentoCLISecret($command, $timeout = null, $arguments = null) return $this->magentoCLI($decryptedCommand, $timeout, $arguments); } + /** + * Function used to verify sensitive credentials in the data, data is decrypted immediately prior to see to avoid + * exposure in console or log. + * + * @param string $field + * @param string $value + * @return void + * @throws TestFrameworkException + */ + public function seeInSecretField(string $field, string $value):void + { + // to protect any secrets from being printed to console the values are executed only at the webdriver level as a + // decrypted value + + $decryptedValue = CredentialStore::getInstance()->decryptSecretValue($value); + if ($decryptedValue === false) { + throw new TestFrameworkException("\nFailed to decrypt value {$value} for field {$field}\n"); + } + $this->seeInField($field, $decryptedValue); + } + /** * Override for _failed method in Codeception method. Adds png and html attachments to allure report * following parent execution of test failure processing. diff --git a/src/Magento/FunctionalTestingFramework/ObjectManager.php b/src/Magento/FunctionalTestingFramework/ObjectManager.php index 8b0f34537..ed07a0d9f 100644 --- a/src/Magento/FunctionalTestingFramework/ObjectManager.php +++ b/src/Magento/FunctionalTestingFramework/ObjectManager.php @@ -39,8 +39,8 @@ class ObjectManager extends \Magento\FunctionalTestingFramework\ObjectManager\Ob * @param array $sharedInstances */ public function __construct( - \Magento\FunctionalTestingFramework\ObjectManager\Factory $factory = null, - \Magento\FunctionalTestingFramework\ObjectManager\ConfigInterface $config = null, + ?\Magento\FunctionalTestingFramework\ObjectManager\Factory $factory = null, + ?\Magento\FunctionalTestingFramework\ObjectManager\ConfigInterface $config = null, array $sharedInstances = [] ) { parent::__construct($factory, $config, $sharedInstances); diff --git a/src/Magento/FunctionalTestingFramework/ObjectManager/Config/Config.php b/src/Magento/FunctionalTestingFramework/ObjectManager/Config/Config.php index 3b2c827d5..435b29818 100644 --- a/src/Magento/FunctionalTestingFramework/ObjectManager/Config/Config.php +++ b/src/Magento/FunctionalTestingFramework/ObjectManager/Config/Config.php @@ -76,7 +76,7 @@ class Config implements \Magento\FunctionalTestingFramework\ObjectManager\Config * @param RelationsInterface|null $relations * @param DefinitionInterface|null $definitions */ - public function __construct(RelationsInterface $relations = null, DefinitionInterface $definitions = null) + public function __construct(?RelationsInterface $relations = null, ?DefinitionInterface $definitions = null) { $this->relations = $relations ? : new RelationsRuntime(); $this->definitions = $definitions ? : new DefinitionRuntime(); diff --git a/src/Magento/FunctionalTestingFramework/ObjectManager/Config/Mapper/Dom.php b/src/Magento/FunctionalTestingFramework/ObjectManager/Config/Mapper/Dom.php index 99912355d..ee1ef6045 100644 --- a/src/Magento/FunctionalTestingFramework/ObjectManager/Config/Mapper/Dom.php +++ b/src/Magento/FunctionalTestingFramework/ObjectManager/Config/Mapper/Dom.php @@ -33,8 +33,8 @@ class Dom implements \Magento\FunctionalTestingFramework\Config\ConverterInterfa */ public function __construct( InterpreterInterface $argumentInterpreter, - BooleanUtils $booleanUtils = null, - ArgumentParser $argumentParser = null + ?BooleanUtils $booleanUtils = null, + ?ArgumentParser $argumentParser = null ) { $this->argumentInterpreter = $argumentInterpreter; $this->booleanUtils = $booleanUtils ?: new BooleanUtils(); diff --git a/src/Magento/FunctionalTestingFramework/ObjectManager/Definition/Runtime.php b/src/Magento/FunctionalTestingFramework/ObjectManager/Definition/Runtime.php index f77e7d110..095bf17eb 100644 --- a/src/Magento/FunctionalTestingFramework/ObjectManager/Definition/Runtime.php +++ b/src/Magento/FunctionalTestingFramework/ObjectManager/Definition/Runtime.php @@ -29,7 +29,7 @@ class Runtime implements \Magento\FunctionalTestingFramework\ObjectManager\Defin * Runtime constructor. * @param \Magento\FunctionalTestingFramework\Code\Reader\ClassReader|null $reader */ - public function __construct(\Magento\FunctionalTestingFramework\Code\Reader\ClassReader $reader = null) + public function __construct(?\Magento\FunctionalTestingFramework\Code\Reader\ClassReader $reader = null) { $this->reader = $reader ? : new \Magento\FunctionalTestingFramework\Code\Reader\ClassReader(); } diff --git a/src/Magento/FunctionalTestingFramework/ObjectManager/Factory.php b/src/Magento/FunctionalTestingFramework/ObjectManager/Factory.php index 922235011..31b6c4f50 100644 --- a/src/Magento/FunctionalTestingFramework/ObjectManager/Factory.php +++ b/src/Magento/FunctionalTestingFramework/ObjectManager/Factory.php @@ -31,8 +31,8 @@ class Factory extends \Magento\FunctionalTestingFramework\ObjectManager\Factory\ */ public function __construct( ConfigInterface $config, - \Magento\FunctionalTestingFramework\ObjectManagerInterface $objectManager = null, - DefinitionInterface $definitions = null, + ?\Magento\FunctionalTestingFramework\ObjectManagerInterface $objectManager = null, + ?DefinitionInterface $definitions = null, $globalArguments = [] ) { parent::__construct($config, $objectManager, $definitions, $globalArguments); diff --git a/src/Magento/FunctionalTestingFramework/ObjectManager/Factory/Dynamic/Developer.php b/src/Magento/FunctionalTestingFramework/ObjectManager/Factory/Dynamic/Developer.php index 0d6623d09..17c7fd972 100644 --- a/src/Magento/FunctionalTestingFramework/ObjectManager/Factory/Dynamic/Developer.php +++ b/src/Magento/FunctionalTestingFramework/ObjectManager/Factory/Dynamic/Developer.php @@ -54,8 +54,8 @@ class Developer implements \Magento\FunctionalTestingFramework\ObjectManager\Fac */ public function __construct( \Magento\FunctionalTestingFramework\ObjectManager\ConfigInterface $config, - \Magento\FunctionalTestingFramework\ObjectManagerInterface $objectManager = null, - \Magento\FunctionalTestingFramework\ObjectManager\DefinitionInterface $definitions = null, + ?\Magento\FunctionalTestingFramework\ObjectManagerInterface $objectManager = null, + ?\Magento\FunctionalTestingFramework\ObjectManager\DefinitionInterface $definitions = null, $globalArguments = [] ) { $this->config = $config; diff --git a/src/Magento/FunctionalTestingFramework/ObjectManager/Relations/Runtime.php b/src/Magento/FunctionalTestingFramework/ObjectManager/Relations/Runtime.php index 192758220..1a49a120d 100644 --- a/src/Magento/FunctionalTestingFramework/ObjectManager/Relations/Runtime.php +++ b/src/Magento/FunctionalTestingFramework/ObjectManager/Relations/Runtime.php @@ -28,7 +28,7 @@ class Runtime implements \Magento\FunctionalTestingFramework\ObjectManager\Relat * Runtime constructor. * @param \Magento\FunctionalTestingFramework\Code\Reader\ClassReader|null $classReader */ - public function __construct(\Magento\FunctionalTestingFramework\Code\Reader\ClassReader $classReader = null) + public function __construct(?\Magento\FunctionalTestingFramework\Code\Reader\ClassReader $classReader = null) { $this->classReader = $classReader ? : new \Magento\FunctionalTestingFramework\Code\Reader\ClassReader(); } diff --git a/src/Magento/FunctionalTestingFramework/StaticCheck/ClassFileNamingCheck.php b/src/Magento/FunctionalTestingFramework/StaticCheck/ClassFileNamingCheck.php new file mode 100644 index 000000000..4ce3c83d3 --- /dev/null +++ b/src/Magento/FunctionalTestingFramework/StaticCheck/ClassFileNamingCheck.php @@ -0,0 +1,184 @@ +scriptUtil = new ScriptUtil(); + $modulePaths = []; + $path = $input->getOption('path'); + if ($path) { + if (!realpath($path)) { + throw new \InvalidArgumentException('Invalid --path option: ' . $path); + } + $modulePaths[] = realpath($path); + } else { + $modulePaths = $this->scriptUtil->getAllModulePaths(); + } + foreach ($modulePaths as $modulePath) { + if (file_exists($modulePath . DIRECTORY_SEPARATOR . self::ALLOW_LIST_FILENAME)) { + $contents = file_get_contents($modulePath . DIRECTORY_SEPARATOR . self::ALLOW_LIST_FILENAME); + foreach (explode("\n", $contents) as $entity) { + $this->allowFailureEntities[$entity] = true; + } + } + } + $testXmlFiles = $this->scriptUtil->getModuleXmlFilesByScope($modulePaths, "Test"); + $actionGroupXmlFiles = $this->scriptUtil->getModuleXmlFilesByScope($modulePaths, "ActionGroup"); + $pageXmlFiles = $this->scriptUtil->getModuleXmlFilesByScope($modulePaths, "Page"); + $sectionXmlFiles = $this->scriptUtil->getModuleXmlFilesByScope($modulePaths, "Section"); + $suiteXmlFiles = $this->scriptUtil->getModuleXmlFilesByScope($modulePaths, 'Suite'); + $this->errors = []; + $this->errors += $this->findErrorsInFileSet($testXmlFiles, 'test'); + $this->errors += $this->findErrorsInFileSet($actionGroupXmlFiles, 'actionGroup'); + $this->errors += $this->findErrorsInFileSet($pageXmlFiles, 'page'); + $this->errors += $this->findErrorsInFileSet($sectionXmlFiles, 'section'); + $this->errors += $this->findErrorsInFileSet($suiteXmlFiles, 'suite'); + + // hold on to the output and print any errors to a file + $this->output = $this->scriptUtil->printErrorsToFile( + $this->errors, + StaticChecksList::getErrorFilesPath() . DIRECTORY_SEPARATOR . self::ERROR_LOG_FILENAME . '.txt', + self::ERROR_LOG_MESSAGE + ); + if (!empty($this->warnings) && !empty($this->errors)) { + $this->output .= "\n " . $this->scriptUtil->printWarningsToFile( + $this->warnings, + StaticChecksList::getErrorFilesPath() . DIRECTORY_SEPARATOR . self::WARNING_LOG_FILENAME . '.txt', + self::ERROR_LOG_MESSAGE + ); + } + } + + /** + * Return array containing all errors found after running the execute() function. + * @return array + */ + public function getErrors() + { + return $this->errors; + } + + /** + * Return string of a short human readable result of the check. For example: "No errors found." + * @return string + */ + public function getOutput() + { + return $this->output; + } + + /** + * Returns Violations if found + * @param SplFileInfo $files + * @param string $fileType + * @return array + */ + public function findErrorsInFileSet($files, $fileType) + { + $errors = []; + /** @var SplFileInfo $filePath */ + + foreach ($files as $filePath) { + $fileNameWithoutExtension = pathinfo($filePath->getFilename(), PATHINFO_FILENAME); + $domDocument = new \DOMDocument(); + $domDocument->load($filePath); + $testResult = $this->getAttributesFromDOMNodeList( + $domDocument->getElementsByTagName($fileType), + ["type" => 'name'] + ); + if ($fileNameWithoutExtension != array_values($testResult[0])[0]) { + $isInAllowList = array_key_exists(array_values($testResult[0])[0], $this->allowFailureEntities); + if ($isInAllowList) { + $errorOutput = ucfirst($fileType). " name does not match with file name + {$filePath->getRealPath()}. ".ucfirst($fileType)." ".array_values($testResult[0])[0]; + $this->warnings[$filePath->getFilename()][] = $errorOutput; + continue; + } + $errorOutput = ucfirst($fileType). " name does not match with file name + {$filePath->getRealPath()}. ".ucfirst($fileType)." ".array_values($testResult[0])[0]; + $errors[$filePath->getFilename()][] = $errorOutput; + } + } + return $errors; + } + + /** + * Return attribute value for each node in DOMNodeList as an array + * + * @param DOMNodeList $nodes + * @param string $attributeName + * @return array + */ + public function getAttributesFromDOMNodeList($nodes, $attributeName) + { + $attributes = []; + foreach ($nodes as $node) { + if (is_string($attributeName)) { + $attributeValue = $node->getAttribute($attributeName); + } else { + $attributeValue = [$node->getAttribute(key($attributeName)) => + $node->getAttribute($attributeName[key($attributeName)])]; + } + if (!empty($attributeValue)) { + $attributes[] = $attributeValue; + } + } + return $attributes; + } +} diff --git a/src/Magento/FunctionalTestingFramework/StaticCheck/StaticChecksList.php b/src/Magento/FunctionalTestingFramework/StaticCheck/StaticChecksList.php index 15afec527..0cb6b4a73 100644 --- a/src/Magento/FunctionalTestingFramework/StaticCheck/StaticChecksList.php +++ b/src/Magento/FunctionalTestingFramework/StaticCheck/StaticChecksList.php @@ -20,6 +20,9 @@ class StaticChecksList implements StaticCheckListInterface const PAUSE_ACTION_USAGE_CHECK_NAME = 'pauseActionUsage'; const CREATED_DATA_FROM_OUTSIDE_ACTIONGROUP = 'createdDataFromOutsideActionGroup'; const UNUSED_ENTITY_CHECK = 'unusedEntityCheck'; + + const CLASS_FILE_NAMING_CHECK = 'classFileNamingCheck'; + const STATIC_RESULTS = 'tests' . DIRECTORY_SEPARATOR .'_output' . DIRECTORY_SEPARATOR . 'static-results'; /** @@ -51,8 +54,10 @@ public function __construct(array $checks = []) 'annotations' => new AnnotationsCheck(), self::PAUSE_ACTION_USAGE_CHECK_NAME => new PauseActionUsageCheck(), self::UNUSED_ENTITY_CHECK => new UnusedEntityCheck(), - self::CREATED_DATA_FROM_OUTSIDE_ACTIONGROUP => new CreatedDataFromOutsideActionGroupCheck(), - ] + $checks; + self::CREATED_DATA_FROM_OUTSIDE_ACTIONGROUP => new CreatedDataFromOutsideActionGroupCheck(), + self::CLASS_FILE_NAMING_CHECK => new ClassFileNamingCheck(), + + ] + $checks; // Static checks error files directory if (null === self::$errorFilesPath) { diff --git a/src/Magento/FunctionalTestingFramework/StaticCheck/TestDependencyCheck.php b/src/Magento/FunctionalTestingFramework/StaticCheck/TestDependencyCheck.php index 486fe8cdb..01660c427 100644 --- a/src/Magento/FunctionalTestingFramework/StaticCheck/TestDependencyCheck.php +++ b/src/Magento/FunctionalTestingFramework/StaticCheck/TestDependencyCheck.php @@ -155,7 +155,7 @@ public function execute(InputInterface $input) StaticChecksList::getErrorFilesPath() . DIRECTORY_SEPARATOR . self::ERROR_LOG_FILENAME . '.txt', self::ERROR_LOG_MESSAGE ); - if (!empty($this->warnings)) { + if (!empty($this->warnings) && !empty($this->errors)) { $this->output .= "\n " . $this->scriptUtil->printWarningsToFile( $this->warnings, StaticChecksList::getErrorFilesPath() . DIRECTORY_SEPARATOR . self::WARNING_LOG_FILENAME . '.txt', @@ -179,7 +179,7 @@ public function getErrors(): array */ public function getOutput(): string { - return $this->output; + return $this->output??""; } /** diff --git a/src/Magento/FunctionalTestingFramework/Suite/SuiteGenerator.php b/src/Magento/FunctionalTestingFramework/Suite/SuiteGenerator.php index 0fda94e82..4c007ed95 100644 --- a/src/Magento/FunctionalTestingFramework/Suite/SuiteGenerator.php +++ b/src/Magento/FunctionalTestingFramework/Suite/SuiteGenerator.php @@ -95,7 +95,6 @@ public static function getInstance(): SuiteGenerator */ public function generateAllSuites($testManifest) { - $this->generateTestgroupmembership($testManifest); $suites = $testManifest->getSuiteConfig(); foreach ($suites as $suiteName => $suiteContent) { diff --git a/src/Magento/FunctionalTestingFramework/Test/Objects/ActionObject.php b/src/Magento/FunctionalTestingFramework/Test/Objects/ActionObject.php index 451b58aa0..d8ed23098 100644 --- a/src/Magento/FunctionalTestingFramework/Test/Objects/ActionObject.php +++ b/src/Magento/FunctionalTestingFramework/Test/Objects/ActionObject.php @@ -184,6 +184,17 @@ public static function getDefaultWaitTimeout() return getenv('WAIT_TIMEOUT'); } + /** + * Retrieve default timeout for 'magentoCLI' or 'magentoCLISecret' in seconds + * + * @return integer + */ + public static function getDefaultMagentoCLIWaitTimeout() + { + $timeout = getenv('MAGENTO_CLI_WAIT_TIMEOUT'); + return !empty($timeout) ? $timeout : self::DEFAULT_COMMAND_WAIT_TIMEOUT; + } + /** * This function returns the string property stepKey. * diff --git a/src/Magento/FunctionalTestingFramework/Test/Util/ActionMergeUtil.php b/src/Magento/FunctionalTestingFramework/Test/Util/ActionMergeUtil.php index a601deb24..acc1cce16 100644 --- a/src/Magento/FunctionalTestingFramework/Test/Util/ActionMergeUtil.php +++ b/src/Magento/FunctionalTestingFramework/Test/Util/ActionMergeUtil.php @@ -26,8 +26,9 @@ class ActionMergeUtil const DEFAULT_SKIP_ON_ORDER = 'before'; const DEFAULT_SKIP_OFF_ORDER = 'after'; const DEFAULT_WAIT_ORDER = 'after'; - const APPROVED_ACTIONS = ['fillField', 'magentoCLI', 'field']; - const SECRET_MAPPING = ['fillField' => 'fillSecretField', 'magentoCLI' => 'magentoCLISecret']; + const APPROVED_ACTIONS = ['fillField', 'magentoCLI', 'field', 'seeInField']; + const SECRET_MAPPING = ['fillField' => 'fillSecretField', 'magentoCLI' => 'magentoCLISecret', + 'seeInField' => 'seeInSecretField']; const CREDS_REGEX = "/{{_CREDS\.([\w|\/]+)}}/"; /** @@ -110,7 +111,7 @@ private function resolveSecretFieldAccess($resolvedActions) if ($actionHasSecretRef && !(in_array($actionType, self::APPROVED_ACTIONS))) { throw new TestReferenceException("You cannot reference secret data outside " . - "of the fillField, magentoCLI and createData actions"); + "of the fillField, magentoCLI, seeInField and createData actions"); } // Do NOT remap actions that don't need it. diff --git a/src/Magento/FunctionalTestingFramework/Upgrade/RemoveUnusedArguments.php b/src/Magento/FunctionalTestingFramework/Upgrade/RemoveUnusedArguments.php index ced1042ad..87586c181 100644 --- a/src/Magento/FunctionalTestingFramework/Upgrade/RemoveUnusedArguments.php +++ b/src/Magento/FunctionalTestingFramework/Upgrade/RemoveUnusedArguments.php @@ -6,7 +6,7 @@ namespace Magento\FunctionalTestingFramework\Upgrade; -use Magento\FunctionalTestingFramework\StaticCheck\ActionGroupArgumentsCheck; +use Magento\FunctionalTestingFramework\StaticCheck\ActionGroupStandardsCheck; use Magento\FunctionalTestingFramework\Util\Script\ScriptUtil; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; @@ -40,7 +40,7 @@ public function execute(InputInterface $input, OutputInterface $output) $fileSystem = new Filesystem(); foreach ($xmlFiles as $file) { $contents = $file->getContents(); - $argumentsCheck = new ActionGroupArgumentsCheck(); + $argumentsCheck = new ActionGroupStandardsCheck(); /** @var DOMElement $actionGroup */ $actionGroup = $argumentsCheck->getActionGroupDomElement($contents); $allArguments = $argumentsCheck->extractActionGroupArguments($actionGroup); diff --git a/src/Magento/FunctionalTestingFramework/Util/Logger/LoggingUtil.php b/src/Magento/FunctionalTestingFramework/Util/Logger/LoggingUtil.php index c32348bcc..51d707305 100644 --- a/src/Magento/FunctionalTestingFramework/Util/Logger/LoggingUtil.php +++ b/src/Magento/FunctionalTestingFramework/Util/Logger/LoggingUtil.php @@ -36,7 +36,6 @@ public static function getInstance(): LoggingUtil if (self::$instance === null) { self::$instance = new LoggingUtil(); } - return self::$instance; } diff --git a/src/Magento/FunctionalTestingFramework/Util/Script/TestDependencyUtil.php b/src/Magento/FunctionalTestingFramework/Util/Script/TestDependencyUtil.php index 0fbf566a7..bef8725e9 100644 --- a/src/Magento/FunctionalTestingFramework/Util/Script/TestDependencyUtil.php +++ b/src/Magento/FunctionalTestingFramework/Util/Script/TestDependencyUtil.php @@ -5,6 +5,10 @@ */ namespace Magento\FunctionalTestingFramework\Util\Script; +use Magento\FunctionalTestingFramework\Test\Handlers\TestObjectHandler; +use Magento\FunctionalTestingFramework\Filter\FilterList; +use Magento\FunctionalTestingFramework\Config\MftfApplicationConfig; + /** * TestDependencyUtil class that contains helper functions for static and upgrade scripts * @@ -144,11 +148,18 @@ public function getModuleName(string $filePath, array $moduleNameToPath): ?strin /** * Return array of merge test modules and file path with same test name. * @param array $testDependencies + * @param array $filterList * @param array $extendedTestMapping * @return array */ - public function mergeDependenciesForExtendingTests(array $testDependencies, array $extendedTestMapping = []): array - { + public function mergeDependenciesForExtendingTests( + array $testDependencies, + array $filterList, + array $extendedTestMapping = [] + ): array { + $testObjects = TestObjectHandler::getInstance()->getAllObjects(); + $filters = MftfApplicationConfig::getConfig()->getFilterList()->getFilters(); + $filteredTestNames = (count($filterList)>0)?$this->getFilteredTestNames($testObjects, $filters):[]; $temp_array = array_reverse(array_column($testDependencies, "test_name"), true); if (!empty($extendedTestMapping)) { foreach ($extendedTestMapping as $value) { @@ -165,20 +176,42 @@ public function mergeDependenciesForExtendingTests(array $testDependencies, arra } $testDependencies = []; foreach ($temp_array as $testDependencyArray) { - $testDependencies[] = [ - "file_path" => array_column($testDependencyArray, 'file_path'), - "full_name" => $testDependencyArray[0]["full_name"], - "test_name" => $testDependencyArray[0]["test_name"], - "test_modules" =>array_values( - array_unique( - call_user_func_array( - 'array_merge', - array_column($testDependencyArray, 'test_modules') + if (( + empty($filterList)) || + isset($filteredTestNames[$testDependencyArray[0]["test_name"]]) + ) { + $testDependencies[] = [ + "file_path" => array_column($testDependencyArray, 'file_path'), + "full_name" => $testDependencyArray[0]["full_name"], + "test_name" => $testDependencyArray[0]["test_name"], + "test_modules" => array_values( + array_unique( + call_user_func_array( + 'array_merge', + array_column($testDependencyArray, 'test_modules') + ) ) - ) - ), - ]; + ), + ]; + } } return $testDependencies; } + + /** + * Return array of merge test modules and file path with same test name. + * @param array $testObjects + * @param array $filters + * @return array + */ + public function getFilteredTestNames(array $testObjects, array $filters) : array + { + foreach ($filters as $filter) { + $filter->filter($testObjects); + } + $testValues = array_map(function ($testObjects) { + return $testObjects->getName(); + }, $testObjects); + return $testValues; + } } diff --git a/src/Magento/FunctionalTestingFramework/Util/Sorter/ParallelGroupSorter.php b/src/Magento/FunctionalTestingFramework/Util/Sorter/ParallelGroupSorter.php index 0049ed81a..479471f96 100644 --- a/src/Magento/FunctionalTestingFramework/Util/Sorter/ParallelGroupSorter.php +++ b/src/Magento/FunctionalTestingFramework/Util/Sorter/ParallelGroupSorter.php @@ -487,8 +487,8 @@ private function splitTestSuite($suiteName, $tests, $maxTime) } $group = $this->createTestGroup($maxTime, $test, $size, $availableTests); - $splitSuites["{$suiteName}_${splitCount}_G"] = $group; - $this->addSuiteToConfig($suiteName, "{$suiteName}_${splitCount}_G", $group); + $splitSuites["{$suiteName}_{$splitCount}_G"] = $group; + $this->addSuiteToConfig($suiteName, "{$suiteName}_{$splitCount}_G", $group); $availableTests = array_diff_key($availableTests, $group); $splitCount++; diff --git a/src/Magento/FunctionalTestingFramework/Util/TestGenerator.php b/src/Magento/FunctionalTestingFramework/Util/TestGenerator.php index 0dfb0f8ee..78ca97152 100644 --- a/src/Magento/FunctionalTestingFramework/Util/TestGenerator.php +++ b/src/Magento/FunctionalTestingFramework/Util/TestGenerator.php @@ -158,7 +158,7 @@ private function __construct($exportDir, $tests, $debug = false) * @param boolean $debug * @return TestGenerator */ - public static function getInstance($dir = null, $tests = [], $debug = false) + public static function getInstance(?string $dir = null, $tests = [], $debug = false) { return new TestGenerator($dir, $tests, $debug); } @@ -230,7 +230,7 @@ private function createCestFile(string $testPhp, string $filename) * @throws FastFailException * @throws TestReferenceException */ - public function createAllTestFiles($testManifest = null, $testsToIgnore = null) + public function createAllTestFiles(?BaseTestManifest $testManifest = null, ?array $testsToIgnore = null) { if ($this->tests === null) { // no-op if the test configuration is null @@ -563,7 +563,7 @@ private function generateAnnotationsPhp($testObject, $isMethod = false) * @param string|null $annotationName * @return null|string */ - private function generateMethodAnnotations($annotationType = null, $annotationName = null) + private function generateMethodAnnotations(?string $annotationType = null, mixed $annotationName = null) { $annotationToAppend = null; $indent = "\t"; @@ -842,7 +842,7 @@ public function generateStepsPhp($actionObjects, $generationScope = TestGenerato } if (in_array($actionObject->getType(), ActionObject::COMMAND_ACTION_ATTRIBUTES)) { - $time = $time ?? ActionObject::DEFAULT_COMMAND_WAIT_TIMEOUT; + $time = $time ?? ActionObject::getDefaultMagentoCLIWaitTimeout(); } else { $time = $time ?? ActionObject::getDefaultWaitTimeout(); } @@ -1413,6 +1413,7 @@ public function generateStepsPhp($actionObjects, $generationScope = TestGenerato case "loadSessionSnapshot": case "seeInField": case "seeOptionIsSelected": + case "seeInSecretField": $testSteps .= $this->wrapFunctionCall($actor, $actionObject, $selector, $input); break; case "seeInPageSource": @@ -2342,7 +2343,7 @@ private function isWrappedArray(string $paramArray) * @return string|null * @throws TestReferenceException */ - private function resolveValueByType($value = null, $type = null) + private function resolveValueByType(?string $value = null, ?string $type = null) { if (null === $value) { return null; diff --git a/src/Magento/FunctionalTestingFramework/Util/msq.php b/src/Magento/FunctionalTestingFramework/Util/msq.php index 3968e3c82..b6f03ae6c 100644 --- a/src/Magento/FunctionalTestingFramework/Util/msq.php +++ b/src/Magento/FunctionalTestingFramework/Util/msq.php @@ -13,7 +13,7 @@ * @param null $id * @return string */ - function msq($id = null) + function msq(?string $id = null) { if ($id and isset(MagentoSequence::$hash[$id])) { return MagentoSequence::$hash[$id]; @@ -34,7 +34,7 @@ function msq($id = null) * @param null $id * @return string */ - function msqs($id = null) + function msqs(?string $id = null) { if ($id and isset(MagentoSequence::$suiteHash[$id])) { return MagentoSequence::$suiteHash[$id];