From 25e938bdae2ff0136879d8800069df05dcd00266 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 15 May 2026 09:44:32 +0000 Subject: [PATCH 1/6] Update dependency phpunit/phpunit to v13 | datasource | package | from | to | | ---------- | --------------- | ------- | ------- | | packagist | phpunit/phpunit | 12.5.23 | 13.1.10 | --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index dba03410..4cc8a835 100644 --- a/composer.json +++ b/composer.json @@ -44,7 +44,7 @@ "php-standard-library/hash": "^6.0", "php-standard-library/secure-random": "^6.0", "php-standard-library/psalm-plugin": "^2.3.0", - "phpunit/phpunit": "^12.5.12", + "phpunit/phpunit": "^13.1.10", "psalm/plugin-phpunit": "^0.19.5", "roave/infection-static-analysis-plugin": "^1.43.0", "roave/security-advisories": "dev-master", From 420937506524b604244995416d467c8a65768733 Mon Sep 17 00:00:00 2001 From: Marco Pivetta Date: Fri, 15 May 2026 15:06:53 +0200 Subject: [PATCH 2/6] Upgraded dependencies to latest lockable version --- composer.json | 46 +-- composer.lock | 908 +++++++++++++++++++++++++++++++------------------- 2 files changed, 580 insertions(+), 374 deletions(-) diff --git a/composer.json b/composer.json index 4cc8a835..91aacc3b 100644 --- a/composer.json +++ b/composer.json @@ -7,25 +7,25 @@ "ext-json": "*", "ext-libxml": "*", "ext-simplexml": "*", - "php-standard-library/iter": "^6.0", - "php-standard-library/async": "^6.0", - "php-standard-library/str": "^6.0", - "php-standard-library/env": "^6.0", - "php-standard-library/filesystem": "^6.0", - "php-standard-library/json": "^6.0", - "php-standard-library/type": "^6.0", - "php-standard-library/regex": "^6.0", - "php-standard-library/foundation": "^6.0", - "php-standard-library/dict": "^6.0", - "php-standard-library/file": "^6.0", - "php-standard-library/vec": "^6.0", - "php-standard-library/shell": "^6.0", - "composer/composer": "^2.9.5", + "php-standard-library/iter": "^6.1.1", + "php-standard-library/async": "^6.1.1", + "php-standard-library/str": "^6.1.1", + "php-standard-library/env": "^6.1.1", + "php-standard-library/filesystem": "^6.1.1", + "php-standard-library/json": "^6.1.1", + "php-standard-library/type": "^6.1.1", + "php-standard-library/regex": "^6.1.1", + "php-standard-library/foundation": "^6.1.1", + "php-standard-library/dict": "^6.1.1", + "php-standard-library/file": "^6.1.1", + "php-standard-library/vec": "^6.1.1", + "php-standard-library/shell": "^6.1.1", + "composer/composer": "^2.9.8", "nikic/php-parser": "^5.7.0", "nikolaposa/version": "^4.2.1", "ocramius/package-versions": "^2.11.0", - "roave/better-reflection": "^6.69.0", - "symfony/console": "^7.4.4" + "roave/better-reflection": "^6.71.0", + "symfony/console": "^7.4.11" }, "license": "MIT", "authors": [ @@ -40,16 +40,16 @@ ], "require-dev": { "doctrine/coding-standard": "^14.0.0", - "justinrainbow/json-schema": "^6.7.2", - "php-standard-library/hash": "^6.0", - "php-standard-library/secure-random": "^6.0", - "php-standard-library/psalm-plugin": "^2.3.0", + "justinrainbow/json-schema": "^6.8.2", + "php-standard-library/hash": "^6.1.1", + "php-standard-library/secure-random": "^6.1.1", + "php-standard-library/psalm-plugin": "^2.4.0", "phpunit/phpunit": "^13.1.10", - "psalm/plugin-phpunit": "^0.19.5", - "roave/infection-static-analysis-plugin": "^1.43.0", + "psalm/plugin-phpunit": "^0.19.7", + "roave/infection-static-analysis-plugin": "^1.44.0", "roave/security-advisories": "dev-master", "squizlabs/php_codesniffer": "^4.0.1", - "vimeo/psalm": "^6.15.1" + "vimeo/psalm": "^6.16.1" }, "conflict": { "revolt/event-loop": "<0.2.5", diff --git a/composer.lock b/composer.lock index 8dcae7b9..4339acbd 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "5e59cd63cbaf2ad978640859d09ca188", + "content-hash": "31c5137ad469f71807b355e7d7c5f71d", "packages": [ { "name": "beberlei/assert", @@ -147,16 +147,16 @@ }, { "name": "composer/class-map-generator", - "version": "1.7.2", + "version": "1.7.3", "source": { "type": "git", "url": "https://github.com/composer/class-map-generator.git", - "reference": "6a9c2f0970022ab00dc58c07d0685dd712f2231b" + "reference": "86d8208fc3c649a3a999daf1a63c25201be2990f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/class-map-generator/zipball/6a9c2f0970022ab00dc58c07d0685dd712f2231b", - "reference": "6a9c2f0970022ab00dc58c07d0685dd712f2231b", + "url": "https://api.github.com/repos/composer/class-map-generator/zipball/86d8208fc3c649a3a999daf1a63c25201be2990f", + "reference": "86d8208fc3c649a3a999daf1a63c25201be2990f", "shasum": "" }, "require": { @@ -200,7 +200,7 @@ ], "support": { "issues": "https://github.com/composer/class-map-generator/issues", - "source": "https://github.com/composer/class-map-generator/tree/1.7.2" + "source": "https://github.com/composer/class-map-generator/tree/1.7.3" }, "funding": [ { @@ -212,20 +212,20 @@ "type": "github" } ], - "time": "2026-03-30T15:36:56+00:00" + "time": "2026-05-05T09:17:07+00:00" }, { "name": "composer/composer", - "version": "2.9.7", + "version": "2.9.8", "source": { "type": "git", "url": "https://github.com/composer/composer.git", - "reference": "82a2fbd1372a98d7915cfb092acf05207d9b4113" + "reference": "39ee8baff8e97a1b657bbfcd6a236ff93a5efbb2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/composer/zipball/82a2fbd1372a98d7915cfb092acf05207d9b4113", - "reference": "82a2fbd1372a98d7915cfb092acf05207d9b4113", + "url": "https://api.github.com/repos/composer/composer/zipball/39ee8baff8e97a1b657bbfcd6a236ff93a5efbb2", + "reference": "39ee8baff8e97a1b657bbfcd6a236ff93a5efbb2", "shasum": "" }, "require": { @@ -313,7 +313,7 @@ "irc": "ircs://irc.libera.chat:6697/composer", "issues": "https://github.com/composer/composer/issues", "security": "https://github.com/composer/composer/security/policy", - "source": "https://github.com/composer/composer/tree/2.9.7" + "source": "https://github.com/composer/composer/tree/2.9.8" }, "funding": [ { @@ -325,7 +325,7 @@ "type": "github" } ], - "time": "2026-04-14T11:31:52+00:00" + "time": "2026-05-13T07:28:38+00:00" }, { "name": "composer/metadata-minifier", @@ -696,16 +696,16 @@ }, { "name": "jetbrains/phpstorm-stubs", - "version": "v2025.3", + "version": "v2026.1", "source": { "type": "git", "url": "https://github.com/JetBrains/phpstorm-stubs", - "reference": "d1ee5e570343bd4276a3d5959e6e1c2530b006d0" + "reference": "2cdd054c4109dfb76667c9198bf9427606354243" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/JetBrains/phpstorm-stubs/zipball/d1ee5e570343bd4276a3d5959e6e1c2530b006d0", - "reference": "d1ee5e570343bd4276a3d5959e6e1c2530b006d0", + "url": "https://api.github.com/repos/JetBrains/phpstorm-stubs/zipball/2cdd054c4109dfb76667c9198bf9427606354243", + "reference": "2cdd054c4109dfb76667c9198bf9427606354243", "shasum": "" }, "require-dev": { @@ -736,20 +736,20 @@ "stubs", "type" ], - "time": "2025-09-18T15:47:24+00:00" + "time": "2026-02-19T20:12:01+00:00" }, { "name": "justinrainbow/json-schema", - "version": "6.8.0", + "version": "6.8.2", "source": { "type": "git", "url": "https://github.com/jsonrainbow/json-schema.git", - "reference": "89ac92bcfe5d0a8a4433c7b89d394553ae7250cc" + "reference": "2c89ebb95ca9cedc9347f780333f7b25792dcb76" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/jsonrainbow/json-schema/zipball/89ac92bcfe5d0a8a4433c7b89d394553ae7250cc", - "reference": "89ac92bcfe5d0a8a4433c7b89d394553ae7250cc", + "url": "https://api.github.com/repos/jsonrainbow/json-schema/zipball/2c89ebb95ca9cedc9347f780333f7b25792dcb76", + "reference": "2c89ebb95ca9cedc9347f780333f7b25792dcb76", "shasum": "" }, "require": { @@ -759,7 +759,7 @@ }, "require-dev": { "friendsofphp/php-cs-fixer": "3.3.0", - "json-schema/json-schema-test-suite": "^23.2", + "json-schema/json-schema-test-suite": "dev-main", "marc-mabe/php-enum-phpstan": "^2.0", "phpspec/prophecy": "^1.19", "phpstan/phpstan": "^1.12", @@ -809,9 +809,9 @@ ], "support": { "issues": "https://github.com/jsonrainbow/json-schema/issues", - "source": "https://github.com/jsonrainbow/json-schema/tree/6.8.0" + "source": "https://github.com/jsonrainbow/json-schema/tree/6.8.2" }, - "time": "2026-04-02T12:43:11+00:00" + "time": "2026-05-05T05:39:01+00:00" }, { "name": "marc-mabe/php-enum", @@ -3059,30 +3059,30 @@ }, { "name": "roave/better-reflection", - "version": "6.69.0", + "version": "6.71.0", "source": { "type": "git", "url": "https://github.com/Roave/BetterReflection.git", - "reference": "dccbd10b5b3da8718f2945ad50faf90a1cb2db55" + "reference": "3ec176d4a161b4e8764edc625d69ff624ca390b1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Roave/BetterReflection/zipball/dccbd10b5b3da8718f2945ad50faf90a1cb2db55", - "reference": "dccbd10b5b3da8718f2945ad50faf90a1cb2db55", + "url": "https://api.github.com/repos/Roave/BetterReflection/zipball/3ec176d4a161b4e8764edc625d69ff624ca390b1", + "reference": "3ec176d4a161b4e8764edc625d69ff624ca390b1", "shasum": "" }, "require": { "ext-json": "*", - "jetbrains/phpstorm-stubs": "2025.3", + "jetbrains/phpstorm-stubs": "2026.1", "nikic/php-parser": "^5.7.0", - "php": "~8.3.2 || ~8.4.1 || ~8.5.0" + "php": "~8.4.1 || ~8.5.0" }, "conflict": { "thecodingmachine/safe": "<1.1.3" }, "require-dev": { - "phpbench/phpbench": "^1.4.3", - "phpunit/phpunit": "^12.5.8" + "phpbench/phpbench": "^1.6.1", + "phpunit/phpunit": "^13.1.8" }, "suggest": { "composer/composer": "Required to use the ComposerSourceLocator" @@ -3122,9 +3122,9 @@ "description": "Better Reflection - an improved code reflection API", "support": { "issues": "https://github.com/Roave/BetterReflection/issues", - "source": "https://github.com/Roave/BetterReflection/tree/6.69.0" + "source": "https://github.com/Roave/BetterReflection/tree/6.71.0" }, - "time": "2026-02-01T13:20:30+00:00" + "time": "2026-05-02T10:56:00+00:00" }, { "name": "seld/jsonlint", @@ -3301,16 +3301,16 @@ }, { "name": "symfony/console", - "version": "v7.4.8", + "version": "v7.4.11", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "1e92e39c51f95b88e3d66fa2d9f06d1fb45dd707" + "reference": "ed0107e43ab452aa77ae99e005b95e56b556e075" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/1e92e39c51f95b88e3d66fa2d9f06d1fb45dd707", - "reference": "1e92e39c51f95b88e3d66fa2d9f06d1fb45dd707", + "url": "https://api.github.com/repos/symfony/console/zipball/ed0107e43ab452aa77ae99e005b95e56b556e075", + "reference": "ed0107e43ab452aa77ae99e005b95e56b556e075", "shasum": "" }, "require": { @@ -3375,7 +3375,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v7.4.8" + "source": "https://github.com/symfony/console/tree/v7.4.11" }, "funding": [ { @@ -3395,20 +3395,20 @@ "type": "tidelift" } ], - "time": "2026-03-30T13:54:39+00:00" + "time": "2026-05-13T12:04:42+00:00" }, { "name": "symfony/deprecation-contracts", - "version": "v3.6.0", + "version": "v3.7.0", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62" + "reference": "50f59d1f3ca46d41ac911f97a78626b6756af35b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/63afe740e99a13ba87ec199bb07bbdee937a5b62", - "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/50f59d1f3ca46d41ac911f97a78626b6756af35b", + "reference": "50f59d1f3ca46d41ac911f97a78626b6756af35b", "shasum": "" }, "require": { @@ -3421,7 +3421,7 @@ "name": "symfony/contracts" }, "branch-alias": { - "dev-main": "3.6-dev" + "dev-main": "3.7-dev" } }, "autoload": { @@ -3446,7 +3446,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.6.0" + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.7.0" }, "funding": [ { @@ -3457,25 +3457,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-09-25T14:21:43+00:00" + "time": "2026-04-13T15:52:40+00:00" }, { "name": "symfony/filesystem", - "version": "v8.0.8", + "version": "v8.0.11", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "66b769ae743ce2d13e435528fbef4af03d623e5a" + "reference": "224db910898ce1317b892a9a1338f1f8f17eb7c7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/66b769ae743ce2d13e435528fbef4af03d623e5a", - "reference": "66b769ae743ce2d13e435528fbef4af03d623e5a", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/224db910898ce1317b892a9a1338f1f8f17eb7c7", + "reference": "224db910898ce1317b892a9a1338f1f8f17eb7c7", "shasum": "" }, "require": { @@ -3512,7 +3516,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v8.0.8" + "source": "https://github.com/symfony/filesystem/tree/v8.0.11" }, "funding": [ { @@ -3532,7 +3536,7 @@ "type": "tidelift" } ], - "time": "2026-03-30T15:14:47+00:00" + "time": "2026-05-11T16:39:47+00:00" }, { "name": "symfony/finder", @@ -4263,16 +4267,16 @@ }, { "name": "symfony/process", - "version": "v8.0.8", + "version": "v8.0.11", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "cb8939aff03470d1a9d1d1b66d08c6fa71b3bbdc" + "reference": "26d89e459f037d2873300605d0a07e7a8ef84db0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/cb8939aff03470d1a9d1d1b66d08c6fa71b3bbdc", - "reference": "cb8939aff03470d1a9d1d1b66d08c6fa71b3bbdc", + "url": "https://api.github.com/repos/symfony/process/zipball/26d89e459f037d2873300605d0a07e7a8ef84db0", + "reference": "26d89e459f037d2873300605d0a07e7a8ef84db0", "shasum": "" }, "require": { @@ -4304,7 +4308,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v8.0.8" + "source": "https://github.com/symfony/process/tree/v8.0.11" }, "funding": [ { @@ -4324,20 +4328,20 @@ "type": "tidelift" } ], - "time": "2026-03-30T15:14:47+00:00" + "time": "2026-05-11T16:56:32+00:00" }, { "name": "symfony/service-contracts", - "version": "v3.6.1", + "version": "v3.7.0", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "45112560a3ba2d715666a509a0bc9521d10b6c43" + "reference": "d25d82433a80eba6aa0e6c24b61d7370d99e444a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/45112560a3ba2d715666a509a0bc9521d10b6c43", - "reference": "45112560a3ba2d715666a509a0bc9521d10b6c43", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/d25d82433a80eba6aa0e6c24b61d7370d99e444a", + "reference": "d25d82433a80eba6aa0e6c24b61d7370d99e444a", "shasum": "" }, "require": { @@ -4355,7 +4359,7 @@ "name": "symfony/contracts" }, "branch-alias": { - "dev-main": "3.6-dev" + "dev-main": "3.7-dev" } }, "autoload": { @@ -4391,7 +4395,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v3.6.1" + "source": "https://github.com/symfony/service-contracts/tree/v3.7.0" }, "funding": [ { @@ -4411,20 +4415,20 @@ "type": "tidelift" } ], - "time": "2025-07-15T11:30:57+00:00" + "time": "2026-03-28T09:44:51+00:00" }, { "name": "symfony/string", - "version": "v8.0.8", + "version": "v8.0.11", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "ae9488f874d7603f9d2dfbf120203882b645d963" + "reference": "39be2ad058a3c0bd558edca23e65f009865d75ff" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/ae9488f874d7603f9d2dfbf120203882b645d963", - "reference": "ae9488f874d7603f9d2dfbf120203882b645d963", + "url": "https://api.github.com/repos/symfony/string/zipball/39be2ad058a3c0bd558edca23e65f009865d75ff", + "reference": "39be2ad058a3c0bd558edca23e65f009865d75ff", "shasum": "" }, "require": { @@ -4481,7 +4485,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v8.0.8" + "source": "https://github.com/symfony/string/tree/v8.0.11" }, "funding": [ { @@ -4501,7 +4505,7 @@ "type": "tidelift" } ], - "time": "2026-03-30T15:14:47+00:00" + "time": "2026-05-13T12:07:53+00:00" } ], "packages-dev": [ @@ -4817,16 +4821,16 @@ }, { "name": "amphp/parallel", - "version": "v2.3.3", + "version": "v2.3.4", "source": { "type": "git", "url": "https://github.com/amphp/parallel.git", - "reference": "296b521137a54d3a02425b464e5aee4c93db2c60" + "reference": "3ad45d1cff1bfbfe832c79671e6a4a1017dd9921" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/amphp/parallel/zipball/296b521137a54d3a02425b464e5aee4c93db2c60", - "reference": "296b521137a54d3a02425b464e5aee4c93db2c60", + "url": "https://api.github.com/repos/amphp/parallel/zipball/3ad45d1cff1bfbfe832c79671e6a4a1017dd9921", + "reference": "3ad45d1cff1bfbfe832c79671e6a4a1017dd9921", "shasum": "" }, "require": { @@ -4846,7 +4850,7 @@ "amphp/php-cs-fixer-config": "^2", "amphp/phpunit-util": "^3", "phpunit/phpunit": "^9", - "psalm/phar": "^5.18" + "psalm/phar": "6.16.1" }, "type": "library", "autoload": { @@ -4889,7 +4893,7 @@ ], "support": { "issues": "https://github.com/amphp/parallel/issues", - "source": "https://github.com/amphp/parallel/tree/v2.3.3" + "source": "https://github.com/amphp/parallel/tree/v2.3.4" }, "funding": [ { @@ -4897,7 +4901,7 @@ "type": "github" } ], - "time": "2025-11-15T06:23:42+00:00" + "time": "2026-05-06T19:26:51+00:00" }, { "name": "amphp/parser", @@ -4963,16 +4967,16 @@ }, { "name": "amphp/pipeline", - "version": "v1.2.3", + "version": "v1.2.4", "source": { "type": "git", "url": "https://github.com/amphp/pipeline.git", - "reference": "7b52598c2e9105ebcddf247fc523161581930367" + "reference": "a044733e080940d1483f56caff0c412ad6982776" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/amphp/pipeline/zipball/7b52598c2e9105ebcddf247fc523161581930367", - "reference": "7b52598c2e9105ebcddf247fc523161581930367", + "url": "https://api.github.com/repos/amphp/pipeline/zipball/a044733e080940d1483f56caff0c412ad6982776", + "reference": "a044733e080940d1483f56caff0c412ad6982776", "shasum": "" }, "require": { @@ -4984,7 +4988,7 @@ "amphp/php-cs-fixer-config": "^2", "amphp/phpunit-util": "^3", "phpunit/phpunit": "^9", - "psalm/phar": "^5.18" + "psalm/phar": "6.16.1" }, "type": "library", "autoload": { @@ -5018,7 +5022,7 @@ ], "support": { "issues": "https://github.com/amphp/pipeline/issues", - "source": "https://github.com/amphp/pipeline/tree/v1.2.3" + "source": "https://github.com/amphp/pipeline/tree/v1.2.4" }, "funding": [ { @@ -5026,7 +5030,7 @@ "type": "github" } ], - "time": "2025-03-16T16:33:53+00:00" + "time": "2026-05-06T05:37:57+00:00" }, { "name": "amphp/process", @@ -5508,16 +5512,16 @@ }, { "name": "dealerdirect/phpcodesniffer-composer-installer", - "version": "v1.2.0", + "version": "v1.2.1", "source": { "type": "git", "url": "https://github.com/PHPCSStandards/composer-installer.git", - "reference": "845eb62303d2ca9b289ef216356568ccc075ffd1" + "reference": "963f0c67bffde0eac41b56be71ac0e8ba132f0bd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHPCSStandards/composer-installer/zipball/845eb62303d2ca9b289ef216356568ccc075ffd1", - "reference": "845eb62303d2ca9b289ef216356568ccc075ffd1", + "url": "https://api.github.com/repos/PHPCSStandards/composer-installer/zipball/963f0c67bffde0eac41b56be71ac0e8ba132f0bd", + "reference": "963f0c67bffde0eac41b56be71ac0e8ba132f0bd", "shasum": "" }, "require": { @@ -5600,7 +5604,7 @@ "type": "thanks_dev" } ], - "time": "2025-11-11T04:32:07+00:00" + "time": "2026-05-06T08:26:05+00:00" }, { "name": "dnoegel/php-xdg-base-dir", @@ -6039,16 +6043,16 @@ }, { "name": "infection/infection", - "version": "0.32.0", + "version": "0.32.7", "source": { "type": "git", - "url": "https://github.com/infection/infection", - "reference": "71d4a12cbe62d79c06dce628b8a5fe234636424c" + "url": "https://github.com/infection/infection.git", + "reference": "066ee69f1e8e6dec8965a79d5ba020656c590b5e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/infection/infection/zipball/71d4a12cbe62d79c06dce628b8a5fe234636424c", - "reference": "71d4a12cbe62d79c06dce628b8a5fe234636424c", + "url": "https://api.github.com/repos/infection/infection/zipball/066ee69f1e8e6dec8965a79d5ba020656c590b5e", + "reference": "066ee69f1e8e6dec8965a79d5ba020656c590b5e", "shasum": "" }, "require": { @@ -6067,13 +6071,13 @@ "justinrainbow/json-schema": "^6.0", "nikic/php-parser": "^5.6.2", "ondram/ci-detector": "^4.1.0", - "php": "^8.2", + "php": "^8.3", "psr/log": "^2.0 || ^3.0", - "sanmai/di-container": "^0.1.4", + "sanmai/di-container": "^0.1.12", "sanmai/duoclock": "^0.1.0", "sanmai/later": "^0.1.7", - "sanmai/pipeline": "^7.0", - "sebastian/diff": "^4.0 || ^5.0 || ^6.0 || ^7.0", + "sanmai/pipeline": "^7.2", + "sebastian/diff": "^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0", "symfony/console": "^6.4 || ^7.0 || ^8.0", "symfony/filesystem": "^6.4 || ^7.0 || ^8.0", "symfony/finder": "^6.4 || ^7.0 || ^8.0", @@ -6087,9 +6091,11 @@ "dg/bypass-finals": "<1.4.1" }, "require-dev": { + "carthage-software/mago": "^1.20", "ext-simplexml": "*", "fidry/makefile": "^1.0", "fig/log-test": "^1.2", + "phpat/phpat": "^0.12.4", "phpbench/phpbench": "^1.4", "phpstan/extension-installer": "^1.4", "phpstan/phpstan": "^2.1", @@ -6098,7 +6104,7 @@ "phpstan/phpstan-webmozart-assert": "^2.0", "phpunit/phpunit": "^11.5.27", "rector/rector": "^2.2.4", - "shipmonk/dead-code-detector": "^0.14.0", + "shipmonk/dead-code-detector": "^0.15", "shipmonk/name-collision-detector": "^2.1", "sidz/phpstan-rules": "^0.5.1", "symfony/yaml": "^6.4 || ^7.0 || ^8.0", @@ -6158,9 +6164,20 @@ "unit testing" ], "support": { - "issues": "https://github.com/infection/infection/issues" + "issues": "https://github.com/infection/infection/issues", + "source": "https://github.com/infection/infection/tree/0.32.7" }, - "time": "2025-12-24T13:55:03+00:00" + "funding": [ + { + "url": "https://github.com/infection", + "type": "github" + }, + { + "url": "https://opencollective.com/infection", + "type": "open_collective" + } + ], + "time": "2026-04-23T21:11:41+00:00" }, { "name": "infection/mutator", @@ -7171,33 +7188,35 @@ }, { "name": "phpunit/php-code-coverage", - "version": "12.5.6", + "version": "14.1.8", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "876099a072646c7745f673d7aeab5382c4439691" + "reference": "031856c28c060e1c1d1fc94d256e3ffbe4230c91" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/876099a072646c7745f673d7aeab5382c4439691", - "reference": "876099a072646c7745f673d7aeab5382c4439691", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/031856c28c060e1c1d1fc94d256e3ffbe4230c91", + "reference": "031856c28c060e1c1d1fc94d256e3ffbe4230c91", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", + "ext-mbstring": "*", "ext-xmlwriter": "*", "nikic/php-parser": "^5.7.0", - "php": ">=8.3", - "phpunit/php-text-template": "^5.0", - "sebastian/complexity": "^5.0", - "sebastian/environment": "^8.0.3", - "sebastian/lines-of-code": "^4.0", - "sebastian/version": "^6.0", + "php": ">=8.4", + "phpunit/php-text-template": "^6.0", + "sebastian/complexity": "^6.0", + "sebastian/environment": "^9.2", + "sebastian/git-state": "^1.0", + "sebastian/lines-of-code": "^5.0", + "sebastian/version": "^7.0", "theseer/tokenizer": "^2.0.1" }, "require-dev": { - "phpunit/phpunit": "^12.5.1" + "phpunit/phpunit": "^13.1" }, "suggest": { "ext-pcov": "PHP extension that provides line coverage", @@ -7206,7 +7225,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "12.5.x-dev" + "dev-main": "14.1.x-dev" } }, "autoload": { @@ -7235,7 +7254,7 @@ "support": { "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/12.5.6" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/14.1.8" }, "funding": [ { @@ -7255,32 +7274,32 @@ "type": "tidelift" } ], - "time": "2026-04-15T08:23:17+00:00" + "time": "2026-05-09T12:06:52+00:00" }, { "name": "phpunit/php-file-iterator", - "version": "6.0.1", + "version": "7.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "3d1cd096ef6bea4bf2762ba586e35dbd317cbfd5" + "reference": "6e5aa1fb0a95b1703d83e721299ee18bb4e2de50" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/3d1cd096ef6bea4bf2762ba586e35dbd317cbfd5", - "reference": "3d1cd096ef6bea4bf2762ba586e35dbd317cbfd5", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/6e5aa1fb0a95b1703d83e721299ee18bb4e2de50", + "reference": "6e5aa1fb0a95b1703d83e721299ee18bb4e2de50", "shasum": "" }, "require": { - "php": ">=8.3" + "php": ">=8.4" }, "require-dev": { - "phpunit/phpunit": "^12.0" + "phpunit/phpunit": "^13.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "6.0-dev" + "dev-main": "7.0-dev" } }, "autoload": { @@ -7308,7 +7327,7 @@ "support": { "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/6.0.1" + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/7.0.0" }, "funding": [ { @@ -7328,28 +7347,28 @@ "type": "tidelift" } ], - "time": "2026-02-02T14:04:18+00:00" + "time": "2026-02-06T04:33:26+00:00" }, { "name": "phpunit/php-invoker", - "version": "6.0.0", + "version": "7.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-invoker.git", - "reference": "12b54e689b07a25a9b41e57736dfab6ec9ae5406" + "reference": "42e5c5cae0c65df12d1b1a3ab52bf3f50f244d88" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/12b54e689b07a25a9b41e57736dfab6ec9ae5406", - "reference": "12b54e689b07a25a9b41e57736dfab6ec9ae5406", + "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/42e5c5cae0c65df12d1b1a3ab52bf3f50f244d88", + "reference": "42e5c5cae0c65df12d1b1a3ab52bf3f50f244d88", "shasum": "" }, "require": { - "php": ">=8.3" + "php": ">=8.4" }, "require-dev": { "ext-pcntl": "*", - "phpunit/phpunit": "^12.0" + "phpunit/phpunit": "^13.0" }, "suggest": { "ext-pcntl": "*" @@ -7357,7 +7376,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "6.0-dev" + "dev-main": "7.0-dev" } }, "autoload": { @@ -7384,40 +7403,52 @@ "support": { "issues": "https://github.com/sebastianbergmann/php-invoker/issues", "security": "https://github.com/sebastianbergmann/php-invoker/security/policy", - "source": "https://github.com/sebastianbergmann/php-invoker/tree/6.0.0" + "source": "https://github.com/sebastianbergmann/php-invoker/tree/7.0.0" }, "funding": [ { "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/php-invoker", + "type": "tidelift" } ], - "time": "2025-02-07T04:58:58+00:00" + "time": "2026-02-06T04:34:47+00:00" }, { "name": "phpunit/php-text-template", - "version": "5.0.0", + "version": "6.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "e1367a453f0eda562eedb4f659e13aa900d66c53" + "reference": "a47af19f93f76aa3368303d752aa5272ca3299f4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/e1367a453f0eda562eedb4f659e13aa900d66c53", - "reference": "e1367a453f0eda562eedb4f659e13aa900d66c53", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/a47af19f93f76aa3368303d752aa5272ca3299f4", + "reference": "a47af19f93f76aa3368303d752aa5272ca3299f4", "shasum": "" }, "require": { - "php": ">=8.3" + "php": ">=8.4" }, "require-dev": { - "phpunit/phpunit": "^12.0" + "phpunit/phpunit": "^13.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "5.0-dev" + "dev-main": "6.0-dev" } }, "autoload": { @@ -7444,40 +7475,52 @@ "support": { "issues": "https://github.com/sebastianbergmann/php-text-template/issues", "security": "https://github.com/sebastianbergmann/php-text-template/security/policy", - "source": "https://github.com/sebastianbergmann/php-text-template/tree/5.0.0" + "source": "https://github.com/sebastianbergmann/php-text-template/tree/6.0.0" }, "funding": [ { "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/php-text-template", + "type": "tidelift" } ], - "time": "2025-02-07T04:59:16+00:00" + "time": "2026-02-06T04:36:37+00:00" }, { "name": "phpunit/php-timer", - "version": "8.0.0", + "version": "9.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "f258ce36aa457f3aa3339f9ed4c81fc66dc8c2cc" + "reference": "a0e12065831f6ab0d83120dc61513eb8d9a966f6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/f258ce36aa457f3aa3339f9ed4c81fc66dc8c2cc", - "reference": "f258ce36aa457f3aa3339f9ed4c81fc66dc8c2cc", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/a0e12065831f6ab0d83120dc61513eb8d9a966f6", + "reference": "a0e12065831f6ab0d83120dc61513eb8d9a966f6", "shasum": "" }, "require": { - "php": ">=8.3" + "php": ">=8.4" }, "require-dev": { - "phpunit/phpunit": "^12.0" + "phpunit/phpunit": "^13.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "8.0-dev" + "dev-main": "9.0-dev" } }, "autoload": { @@ -7504,28 +7547,40 @@ "support": { "issues": "https://github.com/sebastianbergmann/php-timer/issues", "security": "https://github.com/sebastianbergmann/php-timer/security/policy", - "source": "https://github.com/sebastianbergmann/php-timer/tree/8.0.0" + "source": "https://github.com/sebastianbergmann/php-timer/tree/9.0.0" }, "funding": [ { "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/php-timer", + "type": "tidelift" } ], - "time": "2025-02-07T04:59:38+00:00" + "time": "2026-02-06T04:37:53+00:00" }, { "name": "phpunit/phpunit", - "version": "12.5.23", + "version": "13.1.10", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "c54fcf3d6bcb6e96ac2f7e40097dc37b5f139969" + "reference": "38959098d3c10660a189afaa35a94290c1de67bb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/c54fcf3d6bcb6e96ac2f7e40097dc37b5f139969", - "reference": "c54fcf3d6bcb6e96ac2f7e40097dc37b5f139969", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/38959098d3c10660a189afaa35a94290c1de67bb", + "reference": "38959098d3c10660a189afaa35a94290c1de67bb", "shasum": "" }, "require": { @@ -7538,22 +7593,23 @@ "myclabs/deep-copy": "^1.13.4", "phar-io/manifest": "^2.0.4", "phar-io/version": "^3.2.1", - "php": ">=8.3", - "phpunit/php-code-coverage": "^12.5.6", - "phpunit/php-file-iterator": "^6.0.1", - "phpunit/php-invoker": "^6.0.0", - "phpunit/php-text-template": "^5.0.0", - "phpunit/php-timer": "^8.0.0", - "sebastian/cli-parser": "^4.2.0", - "sebastian/comparator": "^7.1.6", - "sebastian/diff": "^7.0.0", - "sebastian/environment": "^8.1.0", - "sebastian/exporter": "^7.0.2", - "sebastian/global-state": "^8.0.2", - "sebastian/object-enumerator": "^7.0.0", - "sebastian/recursion-context": "^7.0.1", - "sebastian/type": "^6.0.3", - "sebastian/version": "^6.0.0", + "php": ">=8.4.1", + "phpunit/php-code-coverage": "^14.1.8", + "phpunit/php-file-iterator": "^7.0.0", + "phpunit/php-invoker": "^7.0.0", + "phpunit/php-text-template": "^6.0.0", + "phpunit/php-timer": "^9.0.0", + "sebastian/cli-parser": "^5.0.0", + "sebastian/comparator": "^8.1.3", + "sebastian/diff": "^8.3.0", + "sebastian/environment": "^9.3.0", + "sebastian/exporter": "^8.0.2", + "sebastian/git-state": "^1.0", + "sebastian/global-state": "^9.0.0", + "sebastian/object-enumerator": "^8.0.0", + "sebastian/recursion-context": "^8.0.0", + "sebastian/type": "^7.0.0", + "sebastian/version": "^7.0.0", "staabm/side-effects-detector": "^1.0.5" }, "bin": [ @@ -7562,7 +7618,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "12.5-dev" + "dev-main": "13.1-dev" } }, "autoload": { @@ -7594,7 +7650,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/12.5.23" + "source": "https://github.com/sebastianbergmann/phpunit/tree/13.1.10" }, "funding": [ { @@ -7602,7 +7658,7 @@ "type": "other" } ], - "time": "2026-04-18T06:12:49+00:00" + "time": "2026-05-15T08:03:56+00:00" }, { "name": "psalm/plugin-phpunit", @@ -7820,33 +7876,34 @@ }, { "name": "roave/infection-static-analysis-plugin", - "version": "1.43.0", + "version": "1.44.0", "source": { "type": "git", "url": "https://github.com/Roave/infection-static-analysis-plugin.git", - "reference": "bcbbfae6f8856a342f08f645e64e7a141bb60f69" + "reference": "8fec5a18a68e692093a2aa5b68316ac874a43fa9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Roave/infection-static-analysis-plugin/zipball/bcbbfae6f8856a342f08f645e64e7a141bb60f69", - "reference": "bcbbfae6f8856a342f08f645e64e7a141bb60f69", + "url": "https://api.github.com/repos/Roave/infection-static-analysis-plugin/zipball/8fec5a18a68e692093a2aa5b68316ac874a43fa9", + "reference": "8fec5a18a68e692093a2aa5b68316ac874a43fa9", "shasum": "" }, "require": { "composer-runtime-api": "^2.2", - "infection/infection": "0.32.0", - "php": "~8.3.0 || ~8.4.0 || ~8.5.0", + "infection/infection": "0.32.7", + "php": "~8.4.0 || ~8.5.0", "sanmai/later": "^0.1.7", - "vimeo/psalm": "^6.14.3" + "vimeo/psalm": "^6.16.1" }, "conflict": { "symfony/polyfill-php84": "<1.30.0" }, "require-dev": { - "azjezz/psl": "^4.2.0", "doctrine/coding-standard": "^14.0.0", - "phpunit/phpunit": "^12.5.4", - "psalm/plugin-phpunit": "^0.19.5" + "php-standard-library/filesystem": "^6.1.1", + "php-standard-library/type": "^6.1.1", + "phpunit/phpunit": "^13.1.10", + "psalm/plugin-phpunit": "^0.19.7" }, "bin": [ "bin/roave-infection-static-analysis-plugin" @@ -7870,9 +7927,9 @@ "description": "Static analysis on top of mutation testing - prevents escaped mutants from being invalid according to static analysis", "support": { "issues": "https://github.com/Roave/infection-static-analysis-plugin/issues", - "source": "https://github.com/Roave/infection-static-analysis-plugin/tree/1.43.0" + "source": "https://github.com/Roave/infection-static-analysis-plugin/tree/1.44.0" }, - "time": "2025-12-29T09:46:14+00:00" + "time": "2026-05-15T12:33:01+00:00" }, { "name": "roave/security-advisories", @@ -7880,12 +7937,12 @@ "source": { "type": "git", "url": "https://github.com/Roave/SecurityAdvisories.git", - "reference": "2221f6ef09e87784e78e188aadd8f7e3a50e679a" + "reference": "16706d82a6f250e56047a9e95791a92a8a29f791" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/2221f6ef09e87784e78e188aadd8f7e3a50e679a", - "reference": "2221f6ef09e87784e78e188aadd8f7e3a50e679a", + "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/16706d82a6f250e56047a9e95791a92a8a29f791", + "reference": "16706d82a6f250e56047a9e95791a92a8a29f791", "shasum": "" }, "conflict": { @@ -7945,14 +8002,14 @@ "awesome-support/awesome-support": "<=6.0.7", "aws/aws-sdk-php": "<=3.371.3", "ayacoo/redirect-tab": "<2.1.2|>=3,<3.1.7|>=4,<4.0.5", - "azuracast/azuracast": "<=0.23.3", + "azuracast/azuracast": "<=0.23.5", "b13/seo_basics": "<0.8.2", "backdrop/backdrop": "<=1.32", "backpack/crud": "<3.4.9", "backpack/filemanager": "<2.0.2|>=3,<3.0.9", "bacula-web/bacula-web": "<9.7.1", "badaso/core": "<=2.9.11", - "bagisto/bagisto": "<2.3.10", + "bagisto/bagisto": "<=2.3.15", "barrelstrength/sprout-base-email": "<1.2.7", "barrelstrength/sprout-forms": "<3.9", "barryvdh/laravel-translation-manager": "<0.6.8", @@ -8000,7 +8057,7 @@ "cesnet/simplesamlphp-module-proxystatistics": "<3.1", "chriskacerguis/codeigniter-restserver": "<=2.7.1", "chrome-php/chrome": "<1.14", - "ci4-cms-erp/ci4ms": "<=0.31.6", + "ci4-cms-erp/ci4ms": "<=0.31.7", "civicrm/civicrm-core": ">=4.2,<4.2.9|>=4.3,<4.3.3", "ckeditor/ckeditor": "<4.25", "clickstorm/cs-seo": ">=6,<6.8|>=7,<7.5|>=8,<8.4|>=9,<9.3", @@ -8016,7 +8073,7 @@ "codingms/modules": "<4.3.11|>=5,<5.7.4|>=6,<6.4.2|>=7,<7.5.5", "commerceteam/commerce": ">=0.9.6,<0.9.9", "components/jquery": ">=1.0.3,<3.5", - "composer/composer": "<2.2.27|>=2.3,<2.9.6", + "composer/composer": "<2.2.28|>=2.3,<2.9.8", "concrete5/concrete5": "<9.4.8", "concrete5/core": "<8.5.8|>=9,<9.1", "contao-components/mediaelement": ">=2.14.2,<2.21.1", @@ -8026,14 +8083,14 @@ "contao/core-bundle": "<4.13.57|>=5,<5.3.42|>=5.4,<5.6.5", "contao/listing-bundle": ">=3,<=3.5.30|>=4,<4.4.8", "contao/managed-edition": "<=1.5", - "coreshop/core-shop": "<4.1.9", + "coreshop/core-shop": "<4.1.9|==5", "corveda/phpsandbox": "<1.3.5", "cosenary/instagram": "<=2.3", "couleurcitron/tarteaucitron-wp": "<0.3", "cpsit/typo3-mailqueue": "<0.4.5|>=0.5,<0.5.2", "craftcms/aws-s3": ">=2.0.2,<=2.2.4", "craftcms/azure-blob": ">=2.0.0.0-beta1,<=2.1", - "craftcms/cms": "<=4.17.8|>=5,<5.9.15", + "craftcms/cms": "<4.17.12|>=5,<5.9.18", "craftcms/commerce": ">=4,<4.11|>=5,<5.6", "craftcms/composer": ">=4.0.0.0-RC1-dev,<=4.10|>=5.0.0.0-RC1-dev,<=5.5.1", "craftcms/craft": ">=3.5,<=4.16.17|>=5.0.0.0-RC1-dev,<=5.8.21", @@ -8052,6 +8109,7 @@ "david-garcia/phpwhois": "<=4.3.1", "dbrisinajumi/d2files": "<1", "dcat/laravel-admin": "<=2.1.3|==2.2.0.0-beta|==2.2.2.0-beta", + "dedoc/scramble": ">=0.13.2,<0.13.22", "derhansen/fe_change_pwd": "<2.0.5|>=3,<3.0.3", "derhansen/sf_event_mgt": "<4.3.1|>=5,<5.1.1|>=7,<7.4", "desperado/xml-bundle": "<=0.1.7", @@ -8073,7 +8131,7 @@ "doctrine/mongodb-odm": "<1.0.2", "doctrine/mongodb-odm-bundle": "<3.0.1", "doctrine/orm": ">=1,<1.2.4|>=2,<2.4.8|>=2.5,<2.5.1|>=2.8.3,<2.8.4", - "dolibarr/dolibarr": "<=22.0.4", + "dolibarr/dolibarr": "<=23.0.2", "dompdf/dompdf": "<2.0.4", "doublethreedigital/guest-entries": "<3.1.2", "dreamfactory/df-core": "<1.0.4", @@ -8152,7 +8210,7 @@ "ezsystems/repository-forms": ">=2.3,<2.3.2.1-dev|>=2.5,<2.5.15", "ezyang/htmlpurifier": "<=4.2", "facade/ignition": "<1.16.15|>=2,<2.4.2|>=2.5,<2.5.2", - "facturascripts/facturascripts": "<2025.81", + "facturascripts/facturascripts": "<=2025.92|>=2026,<=2026.1", "fastly/magento2": "<1.2.26", "feehi/cms": "<=2.1.1", "feehi/feehicms": "<=2.1.1", @@ -8175,6 +8233,7 @@ "flarum/nicknames": "<1.8.3", "flarum/sticky": ">=0.1.0.0-beta14,<=0.1.0.0-beta15", "flarum/tags": "<=0.1.0.0-beta13", + "flightphp/core": "<3.18.1", "floriangaerber/magnesium": "<0.3.1", "fluidtypo3/vhs": "<5.1.1", "fof/byobu": ">=0.3.0.0-beta2,<1.1.7", @@ -8198,13 +8257,15 @@ "froxlor/froxlor": "<2.3.6", "frozennode/administrator": "<=5.0.12", "fuel/core": "<1.8.1", - "funadmin/funadmin": "<=7.1.0.0-RC4", + "funadmin/funadmin": "<=7.1.0.0-RC6", "gaoming13/wechat-php-sdk": "<=1.10.2", "genix/cms": "<=1.1.11", "georgringer/news": "<1.3.3", "geshi/geshi": "<=1.0.9.1", "getformwork/formwork": "<=2.3.3", - "getgrav/grav": "<1.11.0.0-beta1", + "getgrav/grav": "<=2.0.0.0-RC1", + "getgrav/grav-plugin-api": "<1.0.0.0-beta15", + "getgrav/grav-plugin-form": "<9.1", "getkirby/cms": "<4.9|>=5,<5.4", "getkirby/kirby": "<3.9.8.3-dev|>=3.10,<3.10.1.2-dev|>=4,<4.7.1", "getkirby/panel": "<2.5.14", @@ -8264,6 +8325,7 @@ "innologi/typo3-appointments": "<2.0.6", "intelliants/subrion": "<4.2.2", "inter-mediator/inter-mediator": "==5.5", + "intercom/intercom-php": "==5.0.2", "invoiceninja/invoiceninja": "<5.13.4", "ipl/web": "<=0.13", "islandora/crayfish": "<4.1", @@ -8303,7 +8365,7 @@ "kelvinmo/simplexrd": "<3.1.1", "kevinpapst/kimai2": "<1.16.7", "khodakhah/nodcms": "<=3.4.1", - "kimai/kimai": "<2.54", + "kimai/kimai": "<=2.55", "kitodo/presentation": "<3.2.3|>=3.3,<3.3.4", "klaviyo/magento2-extension": ">=1,<3", "knplabs/knp-snappy": "<=1.4.2", @@ -8361,7 +8423,7 @@ "maikuolan/phpmussel": ">=1,<1.6", "mainwp/mainwp": "<=4.4.3.3", "manogi/nova-tiptap": "<=3.2.6", - "mantisbt/mantisbt": "<2.28.1", + "mantisbt/mantisbt": "<2.28.2", "marcwillmann/turn": "<0.3.3", "markhuot/craftql": "<=1.3.7", "marshmallow/nova-tiptap": "<5.7", @@ -8371,6 +8433,7 @@ "mautic/core-lib": ">=1.0.0.0-beta,<4.4.13|>=5.0.0.0-alpha,<5.1.1", "mautic/grapes-js-builder-bundle": ">=4,<4.4.18|>=5,<5.2.9|>=6,<6.0.7", "maximebf/debugbar": "<1.19", + "mckenziearts/livewire-markdown-editor": "<1.3", "mdanter/ecc": "<2", "mediawiki/abuse-filter": "<1.39.9|>=1.40,<1.41.3|>=1.42,<1.42.2", "mediawiki/cargo": "<3.8.3", @@ -8395,6 +8458,7 @@ "miniorange/miniorange-saml": "<1.4.3", "miraheze/ts-portal": "<=33", "mittwald/typo3_forum": "<1.2.1", + "mix/mix": ">=2,<=2.2.17", "mobiledetect/mobiledetectlib": "<2.8.32", "modx/revolution": "<=3.1", "mojo42/jirafeau": "<4.4", @@ -8414,6 +8478,7 @@ "munkireport/softwareupdate": "<1.6", "mustache/mustache": ">=2,<2.14.1", "mwdelaney/wp-enable-svg": "<=0.2", + "nabeel/phpvms": "<7.0.6", "namshi/jose": "<2.2", "nasirkhan/laravel-starter": "<11.11", "nategood/httpful": "<1", @@ -8454,7 +8519,7 @@ "open-web-analytics/open-web-analytics": "<1.8.1", "opencart/opencart": ">=0", "openid/php-openid": "<2.3", - "openmage/magento-lts": "<20.17", + "openmage/magento-lts": "<=20.17", "opensolutions/vimbadmin": "<=3.0.15", "opensource-workshop/connect-cms": "<1.41.1|>=2,<2.41.1", "orchid/platform": ">=8,<14.43", @@ -8497,13 +8562,13 @@ "phpmailer/phpmailer": "<6.5", "phpmussel/phpmussel": ">=1,<1.6", "phpmyadmin/phpmyadmin": "<5.2.2", - "phpmyfaq/phpmyfaq": "<=4.1", + "phpmyfaq/phpmyfaq": "<=4.1.1", "phpoffice/common": "<0.2.9", "phpoffice/math": "<=0.2", "phpoffice/phpexcel": "<=1.8.2", "phpoffice/phpspreadsheet": "<=1.30.3|>=2,<=2.1.15|>=2.2,<=2.4.4|>=3,<=3.10.4|>=4,<=5.6", "phppgadmin/phppgadmin": "<=7.13", - "phpseclib/phpseclib": "<2.0.53|>=3,<3.0.51", + "phpseclib/phpseclib": "<=2.0.53|>=3,<=3.0.51", "phpservermon/phpservermon": "<3.6", "phpsysinfo/phpsysinfo": "<3.4.3", "phpunit/phpunit": "<8.5.52|>=9,<9.6.33|>=10,<10.5.62|>=11,<11.5.50|>=12,<12.5.8|>=12.5.21,<12.5.22|>=13.1.5,<13.1.6", @@ -8519,7 +8584,7 @@ "pimcore/demo": "<10.3", "pimcore/ecommerce-framework-bundle": "<1.0.10", "pimcore/perspective-editor": "<1.5.1", - "pimcore/pimcore": "<=11.5.14.1|>=12,<12.3.3", + "pimcore/pimcore": "<=11.5.14.1|>=12,<12.3.3|==12.3.3", "pimcore/web2print-tools-bundle": "<=5.2.1|>=6.0.0.0-RC1-dev,<=6.1", "piwik/piwik": "<1.11", "pixelfed/pixelfed": "<0.12.5", @@ -8533,7 +8598,7 @@ "prestashop/blockwishlist": ">=2,<2.1.1", "prestashop/contactform": ">=1.0.1,<4.3", "prestashop/gamification": "<2.3.2", - "prestashop/prestashop": "<8.2.5|>=9.0.0.0-alpha1,<9.1", + "prestashop/prestashop": "<8.2.6|>=9,<9.1.1", "prestashop/productcomments": "<5.0.2", "prestashop/ps_checkout": "<5.3", "prestashop/ps_contactinfo": "<=3.3.2", @@ -8597,7 +8662,7 @@ "shopware/shopware": "<=5.7.17|>=6.4.6,<6.6.10.10-dev|>=6.7,<6.7.6.1-dev", "shopware/storefront": "<6.6.10.10-dev|>=6.7,<6.7.5.1-dev", "shopxo/shopxo": "<=6.4", - "showdoc/showdoc": "<2.10.4", + "showdoc/showdoc": "<3.8.1", "shuchkin/simplexlsx": ">=1.0.12,<1.1.13", "silverstripe-australia/advancedreports": ">=1,<=2", "silverstripe/admin": "<1.13.19|>=2,<2.1.8", @@ -8636,7 +8701,7 @@ "slim/slim": "<2.6", "slub/slub-events": "<3.0.3", "smarty/smarty": "<4.5.3|>=5,<5.1.1", - "snipe/snipe-it": "<8.3.7", + "snipe/snipe-it": "<8.4.1", "socalnick/scn-social-auth": "<1.15.2", "socialiteproviders/steam": "<1.1", "solspace/craft-freeform": "<4.1.29|>=5,<=5.14.6", @@ -8654,9 +8719,9 @@ "starcitizentools/short-description": ">=4,<4.0.1", "starcitizentools/tabber-neue": ">=1.9.1,<2.7.2|>=3,<3.1.1", "starcitizenwiki/embedvideo": "<=4", - "statamic/cms": "<5.73.20|>=6,<6.13", + "statamic/cms": "<5.73.21|>=6,<6.15", "stormpath/sdk": "<9.9.99", - "studio-42/elfinder": "<2.1.67", + "studio-42/elfinder": "<=2.1.67", "studiomitte/friendlycaptcha": "<0.1.4", "subhh/libconnect": "<7.0.8|>=8,<8.1", "sukohi/surpass": "<1", @@ -8728,7 +8793,7 @@ "thelia/thelia": ">=2.1,<2.1.3", "theonedemon/phpwhois": "<=4.2.5", "thinkcmf/thinkcmf": "<6.0.8", - "thorsten/phpmyfaq": "<4.1.1", + "thorsten/phpmyfaq": "<=4.1.1", "tikiwiki/tiki-manager": "<=17.1", "timber/timber": ">=0.16.6,<1.23.1|>=1.24,<1.24.1|>=2,<2.1", "tinymce/tinymce": "<7.2", @@ -8801,7 +8866,7 @@ "wallabag/wallabag": "<2.6.11", "wanglelecc/laracms": "<=1.0.3", "wapplersystems/a21glossary": "<=0.4.10", - "web-auth/webauthn-framework": ">=3.3,<3.3.4|>=4.5,<4.9|>=5.2,<5.2.4", + "web-auth/webauthn-framework": ">=3.3,<3.3.4|>=4.5,<4.9|>=5.2,<5.2.4|>=5.3,<5.3.1", "web-auth/webauthn-lib": ">=4.5,<4.9|>=5.2,<5.2.4", "web-auth/webauthn-symfony-bundle": ">=5.2,<5.2.4", "web-feet/coastercms": "==5.5", @@ -8810,7 +8875,7 @@ "webcoast/deferred-image-processing": "<1.0.2", "webklex/laravel-imap": "<5.3", "webklex/php-imap": "<5.3", - "webonyx/graphql-php": "<=15.31.4", + "webonyx/graphql-php": "<=15.32.2", "webpa/webpa": "<3.1.2", "webreinvent/vaahcms": "<=2.3.1", "wikibase/wikibase": "<=1.39.3", @@ -8840,7 +8905,7 @@ "yidashi/yii2cmf": "<=2", "yii2mod/yii2-cms": "<1.9.2", "yiisoft/yii": "<1.1.31", - "yiisoft/yii2": "<2.0.52", + "yiisoft/yii2": "<2.0.55", "yiisoft/yii2-authclient": "<2.2.15", "yiisoft/yii2-bootstrap": "<2.0.4", "yiisoft/yii2-dev": "<=2.0.45", @@ -8929,7 +8994,7 @@ "type": "tidelift" } ], - "time": "2026-04-30T21:24:12+00:00" + "time": "2026-05-14T13:38:25+00:00" }, { "name": "sanmai/di-container", @@ -9207,28 +9272,28 @@ }, { "name": "sebastian/cli-parser", - "version": "4.2.0", + "version": "5.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/cli-parser.git", - "reference": "90f41072d220e5c40df6e8635f5dafba2d9d4d04" + "reference": "48a4654fa5e48c1c81214e9930048a572d4b23ca" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/90f41072d220e5c40df6e8635f5dafba2d9d4d04", - "reference": "90f41072d220e5c40df6e8635f5dafba2d9d4d04", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/48a4654fa5e48c1c81214e9930048a572d4b23ca", + "reference": "48a4654fa5e48c1c81214e9930048a572d4b23ca", "shasum": "" }, "require": { - "php": ">=8.3" + "php": ">=8.4" }, "require-dev": { - "phpunit/phpunit": "^12.0" + "phpunit/phpunit": "^13.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "4.2-dev" + "dev-main": "5.0-dev" } }, "autoload": { @@ -9252,7 +9317,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/cli-parser/issues", "security": "https://github.com/sebastianbergmann/cli-parser/security/policy", - "source": "https://github.com/sebastianbergmann/cli-parser/tree/4.2.0" + "source": "https://github.com/sebastianbergmann/cli-parser/tree/5.0.0" }, "funding": [ { @@ -9272,31 +9337,31 @@ "type": "tidelift" } ], - "time": "2025-09-14T09:36:45+00:00" + "time": "2026-02-06T04:39:44+00:00" }, { "name": "sebastian/comparator", - "version": "7.1.6", + "version": "8.1.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "c769009dee98f494e0edc3fd4f4087501688f11e" + "reference": "1edd557042bf4ff9978ec125d8131b147d5c8224" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/c769009dee98f494e0edc3fd4f4087501688f11e", - "reference": "c769009dee98f494e0edc3fd4f4087501688f11e", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/1edd557042bf4ff9978ec125d8131b147d5c8224", + "reference": "1edd557042bf4ff9978ec125d8131b147d5c8224", "shasum": "" }, "require": { "ext-dom": "*", "ext-mbstring": "*", - "php": ">=8.3", - "sebastian/diff": "^7.0", - "sebastian/exporter": "^7.0" + "php": ">=8.4", + "sebastian/diff": "^8.3", + "sebastian/exporter": "^8.0" }, "require-dev": { - "phpunit/phpunit": "^12.2" + "phpunit/phpunit": "^13.0" }, "suggest": { "ext-bcmath": "For comparing BcMath\\Number objects" @@ -9304,7 +9369,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "7.1-dev" + "dev-main": "8.1-dev" } }, "autoload": { @@ -9344,7 +9409,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/comparator/issues", "security": "https://github.com/sebastianbergmann/comparator/security/policy", - "source": "https://github.com/sebastianbergmann/comparator/tree/7.1.6" + "source": "https://github.com/sebastianbergmann/comparator/tree/8.1.4" }, "funding": [ { @@ -9364,33 +9429,33 @@ "type": "tidelift" } ], - "time": "2026-04-14T08:23:15+00:00" + "time": "2026-05-15T08:30:51+00:00" }, { "name": "sebastian/complexity", - "version": "5.0.0", + "version": "6.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/complexity.git", - "reference": "bad4316aba5303d0221f43f8cee37eb58d384bbb" + "reference": "c5651c795c98093480df79350cb050813fc7a2f3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/bad4316aba5303d0221f43f8cee37eb58d384bbb", - "reference": "bad4316aba5303d0221f43f8cee37eb58d384bbb", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/c5651c795c98093480df79350cb050813fc7a2f3", + "reference": "c5651c795c98093480df79350cb050813fc7a2f3", "shasum": "" }, "require": { "nikic/php-parser": "^5.0", - "php": ">=8.3" + "php": ">=8.4" }, "require-dev": { - "phpunit/phpunit": "^12.0" + "phpunit/phpunit": "^13.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "5.0-dev" + "dev-main": "6.0-dev" } }, "autoload": { @@ -9414,41 +9479,53 @@ "support": { "issues": "https://github.com/sebastianbergmann/complexity/issues", "security": "https://github.com/sebastianbergmann/complexity/security/policy", - "source": "https://github.com/sebastianbergmann/complexity/tree/5.0.0" + "source": "https://github.com/sebastianbergmann/complexity/tree/6.0.0" }, "funding": [ { "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/sebastian/complexity", + "type": "tidelift" } ], - "time": "2025-02-07T04:55:25+00:00" + "time": "2026-02-06T04:41:32+00:00" }, { "name": "sebastian/diff", - "version": "7.0.0", + "version": "8.3.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "7ab1ea946c012266ca32390913653d844ecd085f" + "reference": "b36d33b6e796513de7cb7df053afb3f55eefcd47" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/7ab1ea946c012266ca32390913653d844ecd085f", - "reference": "7ab1ea946c012266ca32390913653d844ecd085f", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/b36d33b6e796513de7cb7df053afb3f55eefcd47", + "reference": "b36d33b6e796513de7cb7df053afb3f55eefcd47", "shasum": "" }, "require": { - "php": ">=8.3" + "php": ">=8.4" }, "require-dev": { - "phpunit/phpunit": "^12.0", + "phpunit/phpunit": "^13.0", "symfony/process": "^7.2" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "7.0-dev" + "dev-main": "8.3-dev" } }, "autoload": { @@ -9481,35 +9558,47 @@ "support": { "issues": "https://github.com/sebastianbergmann/diff/issues", "security": "https://github.com/sebastianbergmann/diff/security/policy", - "source": "https://github.com/sebastianbergmann/diff/tree/7.0.0" + "source": "https://github.com/sebastianbergmann/diff/tree/8.3.0" }, "funding": [ { "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/sebastian/diff", + "type": "tidelift" } ], - "time": "2025-02-07T04:55:46+00:00" + "time": "2026-05-15T04:58:09+00:00" }, { "name": "sebastian/environment", - "version": "8.1.0", + "version": "9.3.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "b121608b28a13f721e76ffbbd386d08eff58f3f6" + "reference": "6767059a30e4277ac95ee034809e793528464768" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/b121608b28a13f721e76ffbbd386d08eff58f3f6", - "reference": "b121608b28a13f721e76ffbbd386d08eff58f3f6", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/6767059a30e4277ac95ee034809e793528464768", + "reference": "6767059a30e4277ac95ee034809e793528464768", "shasum": "" }, "require": { - "php": ">=8.3" + "php": ">=8.4" }, "require-dev": { - "phpunit/phpunit": "^12.0" + "phpunit/phpunit": "^13.0" }, "suggest": { "ext-posix": "*" @@ -9517,7 +9606,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "8.1-dev" + "dev-main": "9.3-dev" } }, "autoload": { @@ -9545,7 +9634,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/environment/issues", "security": "https://github.com/sebastianbergmann/environment/security/policy", - "source": "https://github.com/sebastianbergmann/environment/tree/8.1.0" + "source": "https://github.com/sebastianbergmann/environment/tree/9.3.0" }, "funding": [ { @@ -9565,34 +9654,34 @@ "type": "tidelift" } ], - "time": "2026-04-15T12:13:01+00:00" + "time": "2026-04-15T12:14:03+00:00" }, { "name": "sebastian/exporter", - "version": "7.0.2", + "version": "8.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "016951ae10980765e4e7aee491eb288c64e505b7" + "reference": "9cee180ebe62259e3ed48df2212d1fc8cfd971bb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/016951ae10980765e4e7aee491eb288c64e505b7", - "reference": "016951ae10980765e4e7aee491eb288c64e505b7", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/9cee180ebe62259e3ed48df2212d1fc8cfd971bb", + "reference": "9cee180ebe62259e3ed48df2212d1fc8cfd971bb", "shasum": "" }, "require": { "ext-mbstring": "*", - "php": ">=8.3", - "sebastian/recursion-context": "^7.0" + "php": ">=8.4", + "sebastian/recursion-context": "^8.0" }, "require-dev": { - "phpunit/phpunit": "^12.0" + "phpunit/phpunit": "^13.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "7.0-dev" + "dev-main": "8.0-dev" } }, "autoload": { @@ -9635,7 +9724,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/exporter/issues", "security": "https://github.com/sebastianbergmann/exporter/security/policy", - "source": "https://github.com/sebastianbergmann/exporter/tree/7.0.2" + "source": "https://github.com/sebastianbergmann/exporter/tree/8.0.2" }, "funding": [ { @@ -9655,35 +9744,104 @@ "type": "tidelift" } ], - "time": "2025-09-24T06:16:11+00:00" + "time": "2026-04-15T12:38:05+00:00" + }, + { + "name": "sebastian/git-state", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/git-state.git", + "reference": "792a952e0eba55b6960a48aeceb9f371aad1f76b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/git-state/zipball/792a952e0eba55b6960a48aeceb9f371aad1f76b", + "reference": "792a952e0eba55b6960a48aeceb9f371aad1f76b", + "shasum": "" + }, + "require": { + "php": ">=8.4" + }, + "require-dev": { + "phpunit/phpunit": "^13.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for describing the state of a Git checkout", + "homepage": "https://github.com/sebastianbergmann/git-state", + "support": { + "issues": "https://github.com/sebastianbergmann/git-state/issues", + "security": "https://github.com/sebastianbergmann/git-state/security/policy", + "source": "https://github.com/sebastianbergmann/git-state/tree/1.0.0" + }, + "funding": [ + { + "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/sebastian/git-state", + "type": "tidelift" + } + ], + "time": "2026-03-21T12:54:28+00:00" }, { "name": "sebastian/global-state", - "version": "8.0.2", + "version": "9.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "ef1377171613d09edd25b7816f05be8313f9115d" + "reference": "e52e3dc22441e6218c710afe72c3042f8fc41ea7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/ef1377171613d09edd25b7816f05be8313f9115d", - "reference": "ef1377171613d09edd25b7816f05be8313f9115d", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/e52e3dc22441e6218c710afe72c3042f8fc41ea7", + "reference": "e52e3dc22441e6218c710afe72c3042f8fc41ea7", "shasum": "" }, "require": { - "php": ">=8.3", - "sebastian/object-reflector": "^5.0", - "sebastian/recursion-context": "^7.0" + "php": ">=8.4", + "sebastian/object-reflector": "^6.0", + "sebastian/recursion-context": "^8.0" }, "require-dev": { "ext-dom": "*", - "phpunit/phpunit": "^12.0" + "phpunit/phpunit": "^13.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "8.0-dev" + "dev-main": "9.0-dev" } }, "autoload": { @@ -9709,7 +9867,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/global-state/issues", "security": "https://github.com/sebastianbergmann/global-state/security/policy", - "source": "https://github.com/sebastianbergmann/global-state/tree/8.0.2" + "source": "https://github.com/sebastianbergmann/global-state/tree/9.0.0" }, "funding": [ { @@ -9729,33 +9887,33 @@ "type": "tidelift" } ], - "time": "2025-08-29T11:29:25+00:00" + "time": "2026-02-06T04:45:13+00:00" }, { "name": "sebastian/lines-of-code", - "version": "4.0.0", + "version": "5.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/lines-of-code.git", - "reference": "97ffee3bcfb5805568d6af7f0f893678fc076d2f" + "reference": "4f21bb7768e1c997722ccc7efb1d6b5c11bfd471" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/97ffee3bcfb5805568d6af7f0f893678fc076d2f", - "reference": "97ffee3bcfb5805568d6af7f0f893678fc076d2f", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/4f21bb7768e1c997722ccc7efb1d6b5c11bfd471", + "reference": "4f21bb7768e1c997722ccc7efb1d6b5c11bfd471", "shasum": "" }, "require": { "nikic/php-parser": "^5.0", - "php": ">=8.3" + "php": ">=8.4" }, "require-dev": { - "phpunit/phpunit": "^12.0" + "phpunit/phpunit": "^13.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "4.0-dev" + "dev-main": "5.0-dev" } }, "autoload": { @@ -9779,42 +9937,54 @@ "support": { "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", "security": "https://github.com/sebastianbergmann/lines-of-code/security/policy", - "source": "https://github.com/sebastianbergmann/lines-of-code/tree/4.0.0" + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/5.0.0" }, "funding": [ { "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/sebastian/lines-of-code", + "type": "tidelift" } ], - "time": "2025-02-07T04:57:28+00:00" + "time": "2026-02-06T04:45:54+00:00" }, { "name": "sebastian/object-enumerator", - "version": "7.0.0", + "version": "8.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "1effe8e9b8e068e9ae228e542d5d11b5d16db894" + "reference": "b39ab125fd9a7434b0ecbc4202eebce11a98cfc5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/1effe8e9b8e068e9ae228e542d5d11b5d16db894", - "reference": "1effe8e9b8e068e9ae228e542d5d11b5d16db894", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/b39ab125fd9a7434b0ecbc4202eebce11a98cfc5", + "reference": "b39ab125fd9a7434b0ecbc4202eebce11a98cfc5", "shasum": "" }, "require": { - "php": ">=8.3", - "sebastian/object-reflector": "^5.0", - "sebastian/recursion-context": "^7.0" + "php": ">=8.4", + "sebastian/object-reflector": "^6.0", + "sebastian/recursion-context": "^8.0" }, "require-dev": { - "phpunit/phpunit": "^12.0" + "phpunit/phpunit": "^13.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "7.0-dev" + "dev-main": "8.0-dev" } }, "autoload": { @@ -9837,40 +10007,52 @@ "support": { "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", "security": "https://github.com/sebastianbergmann/object-enumerator/security/policy", - "source": "https://github.com/sebastianbergmann/object-enumerator/tree/7.0.0" + "source": "https://github.com/sebastianbergmann/object-enumerator/tree/8.0.0" }, "funding": [ { "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/sebastian/object-enumerator", + "type": "tidelift" } ], - "time": "2025-02-07T04:57:48+00:00" + "time": "2026-02-06T04:46:36+00:00" }, { "name": "sebastian/object-reflector", - "version": "5.0.0", + "version": "6.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-reflector.git", - "reference": "4bfa827c969c98be1e527abd576533293c634f6a" + "reference": "3ca042c2c60b0eab094f8a1b6a7093f4d4c72200" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/4bfa827c969c98be1e527abd576533293c634f6a", - "reference": "4bfa827c969c98be1e527abd576533293c634f6a", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/3ca042c2c60b0eab094f8a1b6a7093f4d4c72200", + "reference": "3ca042c2c60b0eab094f8a1b6a7093f4d4c72200", "shasum": "" }, "require": { - "php": ">=8.3" + "php": ">=8.4" }, "require-dev": { - "phpunit/phpunit": "^12.0" + "phpunit/phpunit": "^13.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "5.0-dev" + "dev-main": "6.0-dev" } }, "autoload": { @@ -9893,40 +10075,52 @@ "support": { "issues": "https://github.com/sebastianbergmann/object-reflector/issues", "security": "https://github.com/sebastianbergmann/object-reflector/security/policy", - "source": "https://github.com/sebastianbergmann/object-reflector/tree/5.0.0" + "source": "https://github.com/sebastianbergmann/object-reflector/tree/6.0.0" }, "funding": [ { "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/sebastian/object-reflector", + "type": "tidelift" } ], - "time": "2025-02-07T04:58:17+00:00" + "time": "2026-02-06T04:47:13+00:00" }, { "name": "sebastian/recursion-context", - "version": "7.0.1", + "version": "8.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "0b01998a7d5b1f122911a66bebcb8d46f0c82d8c" + "reference": "74c5af21f6a5833e91767ca068c4d3dfec15317e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/0b01998a7d5b1f122911a66bebcb8d46f0c82d8c", - "reference": "0b01998a7d5b1f122911a66bebcb8d46f0c82d8c", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/74c5af21f6a5833e91767ca068c4d3dfec15317e", + "reference": "74c5af21f6a5833e91767ca068c4d3dfec15317e", "shasum": "" }, "require": { - "php": ">=8.3" + "php": ">=8.4" }, "require-dev": { - "phpunit/phpunit": "^12.0" + "phpunit/phpunit": "^13.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "7.0-dev" + "dev-main": "8.0-dev" } }, "autoload": { @@ -9957,7 +10151,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/recursion-context/issues", "security": "https://github.com/sebastianbergmann/recursion-context/security/policy", - "source": "https://github.com/sebastianbergmann/recursion-context/tree/7.0.1" + "source": "https://github.com/sebastianbergmann/recursion-context/tree/8.0.0" }, "funding": [ { @@ -9977,32 +10171,32 @@ "type": "tidelift" } ], - "time": "2025-08-13T04:44:59+00:00" + "time": "2026-02-06T04:51:28+00:00" }, { "name": "sebastian/type", - "version": "6.0.3", + "version": "7.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/type.git", - "reference": "e549163b9760b8f71f191651d22acf32d56d6d4d" + "reference": "42412224607bd3931241bbd17f38e0f972f5a916" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/e549163b9760b8f71f191651d22acf32d56d6d4d", - "reference": "e549163b9760b8f71f191651d22acf32d56d6d4d", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/42412224607bd3931241bbd17f38e0f972f5a916", + "reference": "42412224607bd3931241bbd17f38e0f972f5a916", "shasum": "" }, "require": { - "php": ">=8.3" + "php": ">=8.4" }, "require-dev": { - "phpunit/phpunit": "^12.0" + "phpunit/phpunit": "^13.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "6.0-dev" + "dev-main": "7.0-dev" } }, "autoload": { @@ -10026,7 +10220,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/type/issues", "security": "https://github.com/sebastianbergmann/type/security/policy", - "source": "https://github.com/sebastianbergmann/type/tree/6.0.3" + "source": "https://github.com/sebastianbergmann/type/tree/7.0.0" }, "funding": [ { @@ -10046,29 +10240,29 @@ "type": "tidelift" } ], - "time": "2025-08-09T06:57:12+00:00" + "time": "2026-02-06T04:52:09+00:00" }, { "name": "sebastian/version", - "version": "6.0.0", + "version": "7.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/version.git", - "reference": "3e6ccf7657d4f0a59200564b08cead899313b53c" + "reference": "ad37a5552c8e2b88572249fdc19b6da7792e021b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/3e6ccf7657d4f0a59200564b08cead899313b53c", - "reference": "3e6ccf7657d4f0a59200564b08cead899313b53c", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/ad37a5552c8e2b88572249fdc19b6da7792e021b", + "reference": "ad37a5552c8e2b88572249fdc19b6da7792e021b", "shasum": "" }, "require": { - "php": ">=8.3" + "php": ">=8.4" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "6.0-dev" + "dev-main": "7.0-dev" } }, "autoload": { @@ -10092,32 +10286,44 @@ "support": { "issues": "https://github.com/sebastianbergmann/version/issues", "security": "https://github.com/sebastianbergmann/version/security/policy", - "source": "https://github.com/sebastianbergmann/version/tree/6.0.0" + "source": "https://github.com/sebastianbergmann/version/tree/7.0.0" }, "funding": [ { "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/sebastian/version", + "type": "tidelift" } ], - "time": "2025-02-07T05:00:38+00:00" + "time": "2026-02-06T04:52:52+00:00" }, { "name": "slevomat/coding-standard", - "version": "8.28.1", + "version": "8.29.0", "source": { "type": "git", "url": "https://github.com/slevomat/coding-standard.git", - "reference": "66151cfbd25b50e8becd9f809fb704f01fd4d6f2" + "reference": "81fce13c4ef4b53a03e5cfa6ce36afc191c1598e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/slevomat/coding-standard/zipball/66151cfbd25b50e8becd9f809fb704f01fd4d6f2", - "reference": "66151cfbd25b50e8becd9f809fb704f01fd4d6f2", + "url": "https://api.github.com/repos/slevomat/coding-standard/zipball/81fce13c4ef4b53a03e5cfa6ce36afc191c1598e", + "reference": "81fce13c4ef4b53a03e5cfa6ce36afc191c1598e", "shasum": "" }, "require": { - "dealerdirect/phpcodesniffer-composer-installer": "^0.7 || ^1.2.0", + "dealerdirect/phpcodesniffer-composer-installer": "^0.7 || ^1.2.1", "php": "^7.4 || ^8.0", "phpstan/phpdoc-parser": "^2.3.2", "squizlabs/php_codesniffer": "^4.0.1" @@ -10125,11 +10331,11 @@ "require-dev": { "phing/phing": "3.0.1|3.1.2", "php-parallel-lint/php-parallel-lint": "1.4.0", - "phpstan/phpstan": "2.1.42", + "phpstan/phpstan": "2.1.54", "phpstan/phpstan-deprecation-rules": "2.0.4", "phpstan/phpstan-phpunit": "2.0.16", - "phpstan/phpstan-strict-rules": "2.0.10", - "phpunit/phpunit": "9.6.34|10.5.63|11.4.4|11.5.50|12.5.14" + "phpstan/phpstan-strict-rules": "2.0.11", + "phpunit/phpunit": "9.6.34|10.5.63|11.4.4|11.5.55|12.5.24" }, "type": "phpcodesniffer-standard", "extra": { @@ -10153,7 +10359,7 @@ ], "support": { "issues": "https://github.com/slevomat/coding-standard/issues", - "source": "https://github.com/slevomat/coding-standard/tree/8.28.1" + "source": "https://github.com/slevomat/coding-standard/tree/8.29.0" }, "funding": [ { @@ -10165,7 +10371,7 @@ "type": "tidelift" } ], - "time": "2026-03-22T17:22:38+00:00" + "time": "2026-05-07T05:48:08+00:00" }, { "name": "spatie/array-to-xml", From dc98c25b339ded1fb2281e5e606a8edb23fab147 Mon Sep 17 00:00:00 2001 From: Marco Pivetta Date: Fri, 15 May 2026 16:02:07 +0200 Subject: [PATCH 3/6] Upgraded test suite to new PHPUnit 13 stricter semantics on mock/stub expectations --- phpunit.xml.dist | 1 + .../Command/AssertBackwardsCompatibleTest.php | 132 +++++++++++++++++- test/unit/CompareClassesTest.php | 2 + .../ExcludeAnonymousClassesTest.php | 3 +- .../ClassBased/ExcludeInternalClassTest.php | 9 +- .../ClassBased/FinalClassChangedTest.php | 9 +- .../ClassBased/MultipleChecksOnAClassTest.php | 4 +- .../ClassBased/OpenClassChangedTest.php | 9 +- .../ClassBased/SkipClassBasedErrorsTest.php | 8 +- .../MultipleChecksOnAClassConstantTest.php | 6 +- .../OnlyProtectedClassConstantChangedTest.php | 9 +- .../OnlyPublicClassConstantChangedTest.php | 9 +- .../SkipClassConstantBasedErrorsTest.php | 8 +- .../MultipleChecksOnAFunctionTest.php | 4 +- .../SkipFunctionBasedErrorsTest.php | 8 +- .../MultipleChecksOnAnInterfaceTest.php | 4 +- .../SkipInterfaceBasedErrorsTest.php | 8 +- .../UseClassBasedChecksOnAnInterfaceTest.php | 4 +- .../AccessibleMethodChangeTest.php | 9 +- .../MethodFunctionDefinitionChangedTest.php | 5 +- .../MethodBased/MethodParameterAddedTest.php | 12 +- .../MultipleChecksOnAMethodTest.php | 4 +- .../OnlyProtectedMethodChangedTest.php | 9 +- .../OnlyPublicMethodChangedTest.php | 9 +- .../MethodBased/SkipMethodBasedErrorsTest.php | 8 +- .../AccessiblePropertyChangedTest.php | 9 +- .../MultipleChecksOnAPropertyTest.php | 6 +- .../OnlyProtectedPropertyChangedTest.php | 9 +- .../OnlyPublicPropertyChangedTest.php | 9 +- .../SkipPropertyBasedErrorsTest.php | 8 +- .../TraitBased/MultipleChecksOnATraitTest.php | 4 +- .../TraitBased/SkipTraitBasedErrorsTest.php | 8 +- .../UseClassBasedChecksOnATraitTest.php | 4 +- ...mposerInstallationReflectorFactoryTest.php | 2 +- .../LocateDependenciesViaComposerTest.php | 5 + ...SourceWithStrippedSourcesDirectoryTest.php | 14 +- .../ReplaceSourcePathOfLocatedSourcesTest.php | 12 +- .../StaticClassMapSourceLocatorTest.php | 22 ++- 38 files changed, 283 insertions(+), 122 deletions(-) diff --git a/phpunit.xml.dist b/phpunit.xml.dist index 712ed3ed..a804964f 100644 --- a/phpunit.xml.dist +++ b/phpunit.xml.dist @@ -10,6 +10,7 @@ failOnPhpunitDeprecation="true" failOnNotice="true" failOnEmptyTestSuite="true" + failOnPhpunitNotice="true" cacheDirectory=".phpunit.cache" > diff --git a/test/unit/Command/AssertBackwardsCompatibleTest.php b/test/unit/Command/AssertBackwardsCompatibleTest.php index befa8979..b9c01ee2 100644 --- a/test/unit/Command/AssertBackwardsCompatibleTest.php +++ b/test/unit/Command/AssertBackwardsCompatibleTest.php @@ -8,6 +8,7 @@ use PHPUnit\Framework\Attributes\CoversClass; use PHPUnit\Framework\Attributes\DataProvider; use PHPUnit\Framework\MockObject\MockObject; +use PHPUnit\Framework\MockObject\Stub; use PHPUnit\Framework\TestCase; use Psl\Env; use Psl\Exception\InvariantViolationException; @@ -42,7 +43,7 @@ final class AssertBackwardsCompatibleTest extends TestCase { private CheckedOutRepository $sourceRepository; - /** @var InputInterface&MockObject */ + /** @var InputInterface&Stub */ private InputInterface $input; /** @var ConsoleOutputInterface&MockObject */ private ConsoleOutputInterface $output; @@ -71,7 +72,7 @@ public function setUp(): void Env\set_current_dir($this->sourceRepository->__toString()); - $this->input = $this->createMock(InputInterface::class); + $this->input = $this->createStub(InputInterface::class); $this->output = $this->createMock(ConsoleOutputInterface::class); $this->stdErr = $this->createMock(OutputInterface::class); $this->performCheckout = new PerformCheckoutOfRevisionForTests(); @@ -99,6 +100,36 @@ public function setUp(): void public function testDefinition(): void { + $this->parseRevision + ->expects(self::never()) + ->method('fromStringForRepository'); + + $this->locateDependencies + ->expects(self::never()) + ->method('__invoke'); + + $this->compareApi + ->expects(self::never()) + ->method('__invoke'); + + $this->stdErr + ->expects(self::never()) + ->method('writeln'); + + $this->output + ->expects(self::never()) + ->method('writeln'); + + $this + ->getVersions + ->expects(self::never()) + ->method('fromRepository'); + + $this + ->pickVersion + ->expects(self::never()) + ->method('forVersions'); + self::assertSame( 'roave-backwards-compatibility-check:assert-backwards-compatible', $this->compare->getName(), @@ -144,12 +175,31 @@ public function testExecuteWhenRevisionsAreProvidedAsOptions(): void $this ->locateDependencies + ->expects(self::atLeastOnce()) ->method('__invoke') ->with((string) $this->sourceRepository, false) ->willReturn($this->dependencies); $this->compareApi->expects(self::once())->method('__invoke')->willReturn(Changes::empty()); + $this->stdErr + ->expects(self::atLeastOnce()) + ->method('writeln'); + + $this->output + ->expects(self::never()) + ->method('writeln'); + + $this + ->getVersions + ->expects(self::never()) + ->method('fromRepository'); + + $this + ->pickVersion + ->expects(self::never()) + ->method('forVersions'); + self::assertSame(0, $this->compare->execute($this->input, $this->output)); self::assertSame(0, $this->performCheckout->nonRemovedRepositoryCount()); } @@ -174,12 +224,31 @@ public function testExecuteWhenDevelopmentDependenciesAreRequested(): void $this ->locateDependencies + ->expects(self::atLeastOnce()) ->method('__invoke') ->with((string) $this->sourceRepository, true) ->willReturn($this->dependencies); $this->compareApi->expects(self::once())->method('__invoke')->willReturn(Changes::empty()); + $this->stdErr + ->expects(self::atLeastOnce()) + ->method('writeln'); + + $this->output + ->expects(self::never()) + ->method('writeln'); + + $this + ->getVersions + ->expects(self::never()) + ->method('fromRepository'); + + $this + ->pickVersion + ->expects(self::never()) + ->method('forVersions'); + self::assertSame(0, $this->compare->execute($this->input, $this->output)); self::assertSame(0, $this->performCheckout->nonRemovedRepositoryCount()); } @@ -205,6 +274,7 @@ public function testExecuteReturnsNonZeroExitCodeWhenChangesAreDetected(): void $this ->locateDependencies + ->expects(self::atLeastOnce()) ->method('__invoke') ->with((string) $this->sourceRepository, false) ->willReturn($this->dependencies); @@ -223,6 +293,20 @@ public function testExecuteReturnsNonZeroExitCodeWhenChangesAreDetected(): void self::matches('1 backwards-incompatible changes detected'), )); + $this->output + ->expects(self::never()) + ->method('writeln'); + + $this + ->getVersions + ->expects(self::never()) + ->method('fromRepository'); + + $this + ->pickVersion + ->expects(self::never()) + ->method('forVersions'); + self::assertSame(3, $this->compare->execute($this->input, $this->output)); self::assertSame(0, $this->performCheckout->nonRemovedRepositoryCount()); } @@ -248,6 +332,7 @@ public function testProvidingMarkdownOptionWritesMarkdownOutput(): void $this ->locateDependencies + ->expects(self::atLeastOnce()) ->method('__invoke') ->with((string) $this->sourceRepository, false) ->willReturn($this->dependencies); @@ -264,6 +349,20 @@ public function testProvidingMarkdownOptionWritesMarkdownOutput(): void self::assertStringContainsString(' [BC] ' . $changeToExpect, $output); }); + $this->stdErr + ->expects(self::atLeastOnce()) + ->method('writeln'); + + $this + ->getVersions + ->expects(self::never()) + ->method('fromRepository'); + + $this + ->pickVersion + ->expects(self::never()) + ->method('forVersions'); + $this->compare->execute($this->input, $this->output); self::assertSame(0, $this->performCheckout->nonRemovedRepositoryCount()); } @@ -288,15 +387,29 @@ public function testExecuteWithDefaultRevisionsNotProvidedAndNoDetectedTags(): v ->expects(self::once()) ->method('fromRepository') ->willReturn(new VersionCollection()); + $this ->pickVersion ->expects(self::never()) ->method('forVersions'); + $this ->compareApi ->expects(self::never()) ->method('__invoke'); + $this->output + ->expects(self::never()) + ->method('writeln'); + + $this->stdErr + ->expects(self::never()) + ->method('writeln'); + + $this->locateDependencies + ->expects(self::never()) + ->method('__invoke'); + $this->expectException(InvariantViolationException::class); $this->compare->execute($this->input, $this->output); @@ -327,7 +440,8 @@ public function testExecuteWithDefaultRevisionsNotProvided(VersionCollection $ve default => throw new LogicException(), }); - $this->getVersions->expects(self::once()) + $this->getVersions + ->expects(self::once()) ->method('fromRepository') ->with(self::callback(function (CheckedOutRepository $checkedOutRepository): bool { self::assertEquals($this->sourceRepository, $checkedOutRepository); @@ -335,10 +449,20 @@ public function testExecuteWithDefaultRevisionsNotProvided(VersionCollection $ve return true; })) ->willReturn($versions); - $this->pickVersion->expects(self::once()) + + $this->pickVersion + ->expects(self::once()) ->method('forVersions') ->with($versions) ->willReturn($pickedVersion); + + $this->output + ->expects(self::never()) + ->method('writeln'); + + $this->locateDependencies + ->expects(self::atLeastOnce()) + ->method('__invoke'); $this ->stdErr diff --git a/test/unit/CompareClassesTest.php b/test/unit/CompareClassesTest.php index b709d495..47e3a6c6 100644 --- a/test/unit/CompareClassesTest.php +++ b/test/unit/CompareClassesTest.php @@ -167,6 +167,8 @@ public function testAnonymousClassesAreFilteredOut(): void public function testSkipsReflectingUndefinedApi(): void { + $this->traitBasedComparatorWillNotBeCalled(); + $this->interfaceBasedComparatorWillNotBeCalled(); $this->classBasedComparatorWillNotBeCalled(); Assertion::assertChangesEqual( diff --git a/test/unit/DetectChanges/BCBreak/ClassBased/ExcludeAnonymousClassesTest.php b/test/unit/DetectChanges/BCBreak/ClassBased/ExcludeAnonymousClassesTest.php index ea96ccaf..160f486f 100644 --- a/test/unit/DetectChanges/BCBreak/ClassBased/ExcludeAnonymousClassesTest.php +++ b/test/unit/DetectChanges/BCBreak/ClassBased/ExcludeAnonymousClassesTest.php @@ -39,7 +39,8 @@ class ANormalClass {} ); $check = $this->createMock(ClassBased::class); - $check->expects(self::once()) + $check + ->expects(self::once()) ->method('__invoke') ->with($fromReflection, $toReflection) ->willReturn($changes); diff --git a/test/unit/DetectChanges/BCBreak/ClassBased/ExcludeInternalClassTest.php b/test/unit/DetectChanges/BCBreak/ClassBased/ExcludeInternalClassTest.php index b3536754..e695d55a 100644 --- a/test/unit/DetectChanges/BCBreak/ClassBased/ExcludeInternalClassTest.php +++ b/test/unit/DetectChanges/BCBreak/ClassBased/ExcludeInternalClassTest.php @@ -33,10 +33,11 @@ class ANormalClass {} $toReflection = $reflector->reflectClass('ANormalClass'); $check = $this->createMock(ClassBased::class); - $check->expects(self::once()) - ->method('__invoke') - ->with($fromReflection, $toReflection) - ->willReturn(Changes::fromList(Change::removed('foo', true))); + $check + ->expects(self::atLeastOnce()) + ->method('__invoke') + ->with($fromReflection, $toReflection) + ->willReturn(Changes::fromList(Change::removed('foo', true))); self::assertEquals( Changes::fromList(Change::removed('foo', true)), diff --git a/test/unit/DetectChanges/BCBreak/ClassBased/FinalClassChangedTest.php b/test/unit/DetectChanges/BCBreak/ClassBased/FinalClassChangedTest.php index 3badf376..6d67e222 100644 --- a/test/unit/DetectChanges/BCBreak/ClassBased/FinalClassChangedTest.php +++ b/test/unit/DetectChanges/BCBreak/ClassBased/FinalClassChangedTest.php @@ -6,6 +6,7 @@ use PHPUnit\Framework\Attributes\CoversClass; use PHPUnit\Framework\MockObject\MockObject; +use PHPUnit\Framework\MockObject\Stub; use PHPUnit\Framework\TestCase; use Roave\BackwardCompatibility\Change; use Roave\BackwardCompatibility\Changes; @@ -23,10 +24,10 @@ final class FinalClassChangedTest extends TestCase private FinalClassChanged $finalClassChanged; - /** @var ReflectionClass&MockObject */ + /** @var ReflectionClass&Stub */ private ReflectionClass $fromClass; - /** @var ReflectionClass&MockObject */ + /** @var ReflectionClass&Stub */ private ReflectionClass $toClass; protected function setUp(): void @@ -35,8 +36,8 @@ protected function setUp(): void $this->check = $this->createMock(ClassBased::class); $this->finalClassChanged = new FinalClassChanged($this->check); - $this->fromClass = $this->createMock(ReflectionClass::class); - $this->toClass = $this->createMock(ReflectionClass::class); + $this->fromClass = $this->createStub(ReflectionClass::class); + $this->toClass = $this->createStub(ReflectionClass::class); } public function testWillCheckFinalClass(): void diff --git a/test/unit/DetectChanges/BCBreak/ClassBased/MultipleChecksOnAClassTest.php b/test/unit/DetectChanges/BCBreak/ClassBased/MultipleChecksOnAClassTest.php index 1d296a7a..c5733a99 100644 --- a/test/unit/DetectChanges/BCBreak/ClassBased/MultipleChecksOnAClassTest.php +++ b/test/unit/DetectChanges/BCBreak/ClassBased/MultipleChecksOnAClassTest.php @@ -24,8 +24,8 @@ public function testChecksAllGivenCheckers(): void $multiCheck = new MultipleChecksOnAClass($checker1, $checker2, $checker3); - $from = $this->createMock(ReflectionClass::class); - $to = $this->createMock(ReflectionClass::class); + $from = $this->createStub(ReflectionClass::class); + $to = $this->createStub(ReflectionClass::class); $to->method('getFileName') ->willReturn('foo.php'); diff --git a/test/unit/DetectChanges/BCBreak/ClassBased/OpenClassChangedTest.php b/test/unit/DetectChanges/BCBreak/ClassBased/OpenClassChangedTest.php index ffc5d4f6..80123870 100644 --- a/test/unit/DetectChanges/BCBreak/ClassBased/OpenClassChangedTest.php +++ b/test/unit/DetectChanges/BCBreak/ClassBased/OpenClassChangedTest.php @@ -6,6 +6,7 @@ use PHPUnit\Framework\Attributes\CoversClass; use PHPUnit\Framework\MockObject\MockObject; +use PHPUnit\Framework\MockObject\Stub; use PHPUnit\Framework\TestCase; use Roave\BackwardCompatibility\Change; use Roave\BackwardCompatibility\Changes; @@ -23,10 +24,10 @@ final class OpenClassChangedTest extends TestCase private OpenClassChanged $openClassChanged; - /** @var ReflectionClass&MockObject */ + /** @var ReflectionClass&Stub */ private ReflectionClass $fromClass; - /** @var ReflectionClass&MockObject */ + /** @var ReflectionClass&Stub */ private ReflectionClass $toClass; protected function setUp(): void @@ -35,8 +36,8 @@ protected function setUp(): void $this->check = $this->createMock(ClassBased::class); $this->openClassChanged = new OpenClassChanged($this->check); - $this->fromClass = $this->createMock(ReflectionClass::class); - $this->toClass = $this->createMock(ReflectionClass::class); + $this->fromClass = $this->createStub(ReflectionClass::class); + $this->toClass = $this->createStub(ReflectionClass::class); } public function testWillCheckFinalClass(): void diff --git a/test/unit/DetectChanges/BCBreak/ClassBased/SkipClassBasedErrorsTest.php b/test/unit/DetectChanges/BCBreak/ClassBased/SkipClassBasedErrorsTest.php index 21835907..1db2f1a7 100644 --- a/test/unit/DetectChanges/BCBreak/ClassBased/SkipClassBasedErrorsTest.php +++ b/test/unit/DetectChanges/BCBreak/ClassBased/SkipClassBasedErrorsTest.php @@ -32,8 +32,8 @@ protected function setUp(): void public function testWillForwardChecks(): void { - $fromClass = $this->createMock(ReflectionClass::class); - $toClass = $this->createMock(ReflectionClass::class); + $fromClass = $this->createStub(ReflectionClass::class); + $toClass = $this->createStub(ReflectionClass::class); $expectedChanges = Changes::fromList(Change::added( uniqid('foo', true), true, @@ -51,8 +51,8 @@ public function testWillForwardChecks(): void public function testWillCollectFailures(): void { - $fromClass = $this->createMock(ReflectionClass::class); - $toClass = $this->createMock(ReflectionClass::class); + $fromClass = $this->createStub(ReflectionClass::class); + $toClass = $this->createStub(ReflectionClass::class); $exception = new Exception(); $this diff --git a/test/unit/DetectChanges/BCBreak/ClassConstantBased/MultipleChecksOnAClassConstantTest.php b/test/unit/DetectChanges/BCBreak/ClassConstantBased/MultipleChecksOnAClassConstantTest.php index e4c41bd9..b82500bb 100644 --- a/test/unit/DetectChanges/BCBreak/ClassConstantBased/MultipleChecksOnAClassConstantTest.php +++ b/test/unit/DetectChanges/BCBreak/ClassConstantBased/MultipleChecksOnAClassConstantTest.php @@ -25,9 +25,9 @@ public function testChecksAllGivenCheckers(): void $multiCheck = new MultipleChecksOnAClassConstant($checker1, $checker2, $checker3); - $from = $this->createMock(ReflectionClassConstant::class); - $to = $this->createMock(ReflectionClassConstant::class); - $toClass = $this->createMock(ReflectionClass::class); + $from = $this->createStub(ReflectionClassConstant::class); + $to = $this->createStub(ReflectionClassConstant::class); + $toClass = $this->createStub(ReflectionClass::class); $to->method('getStartLine') ->willReturn(10); diff --git a/test/unit/DetectChanges/BCBreak/ClassConstantBased/OnlyProtectedClassConstantChangedTest.php b/test/unit/DetectChanges/BCBreak/ClassConstantBased/OnlyProtectedClassConstantChangedTest.php index 76cb5d47..e085905a 100644 --- a/test/unit/DetectChanges/BCBreak/ClassConstantBased/OnlyProtectedClassConstantChangedTest.php +++ b/test/unit/DetectChanges/BCBreak/ClassConstantBased/OnlyProtectedClassConstantChangedTest.php @@ -6,6 +6,7 @@ use PHPUnit\Framework\Attributes\CoversClass; use PHPUnit\Framework\MockObject\MockObject; +use PHPUnit\Framework\MockObject\Stub; use PHPUnit\Framework\TestCase; use Roave\BackwardCompatibility\Change; use Roave\BackwardCompatibility\Changes; @@ -21,10 +22,10 @@ final class OnlyProtectedClassConstantChangedTest extends TestCase /** @var ClassConstantBased&MockObject */ private ClassConstantBased $check; - /** @var ReflectionClassConstant&MockObject */ + /** @var ReflectionClassConstant&Stub */ private ReflectionClassConstant $fromConstant; - /** @var ReflectionClassConstant&MockObject */ + /** @var ReflectionClassConstant&Stub */ private ReflectionClassConstant $toConstant; private OnlyProtectedClassConstantChanged $changed; @@ -35,8 +36,8 @@ protected function setUp(): void $this->check = $this->createMock(ClassConstantBased::class); $this->changed = new OnlyProtectedClassConstantChanged($this->check); - $this->fromConstant = $this->createMock(ReflectionClassConstant::class); - $this->toConstant = $this->createMock(ReflectionClassConstant::class); + $this->fromConstant = $this->createStub(ReflectionClassConstant::class); + $this->toConstant = $this->createStub(ReflectionClassConstant::class); } public function testSkipsNonProtectedConstant(): void diff --git a/test/unit/DetectChanges/BCBreak/ClassConstantBased/OnlyPublicClassConstantChangedTest.php b/test/unit/DetectChanges/BCBreak/ClassConstantBased/OnlyPublicClassConstantChangedTest.php index 11590a22..509273bc 100644 --- a/test/unit/DetectChanges/BCBreak/ClassConstantBased/OnlyPublicClassConstantChangedTest.php +++ b/test/unit/DetectChanges/BCBreak/ClassConstantBased/OnlyPublicClassConstantChangedTest.php @@ -6,6 +6,7 @@ use PHPUnit\Framework\Attributes\CoversClass; use PHPUnit\Framework\MockObject\MockObject; +use PHPUnit\Framework\MockObject\Stub; use PHPUnit\Framework\TestCase; use Roave\BackwardCompatibility\Change; use Roave\BackwardCompatibility\Changes; @@ -21,10 +22,10 @@ final class OnlyPublicClassConstantChangedTest extends TestCase /** @var ClassConstantBased&MockObject */ private ClassConstantBased $check; - /** @var ReflectionClassConstant&MockObject */ + /** @var ReflectionClassConstant&Stub */ private ReflectionClassConstant $fromConstant; - /** @var ReflectionClassConstant&MockObject */ + /** @var ReflectionClassConstant&Stub */ private ReflectionClassConstant $toConstant; private OnlyPublicClassConstantChanged $changed; @@ -35,8 +36,8 @@ protected function setUp(): void $this->check = $this->createMock(ClassConstantBased::class); $this->changed = new OnlyPublicClassConstantChanged($this->check); - $this->fromConstant = $this->createMock(ReflectionClassConstant::class); - $this->toConstant = $this->createMock(ReflectionClassConstant::class); + $this->fromConstant = $this->createStub(ReflectionClassConstant::class); + $this->toConstant = $this->createStub(ReflectionClassConstant::class); } public function testSkipsNonPublicConstant(): void diff --git a/test/unit/DetectChanges/BCBreak/ClassConstantBased/SkipClassConstantBasedErrorsTest.php b/test/unit/DetectChanges/BCBreak/ClassConstantBased/SkipClassConstantBasedErrorsTest.php index 359a529d..88173358 100644 --- a/test/unit/DetectChanges/BCBreak/ClassConstantBased/SkipClassConstantBasedErrorsTest.php +++ b/test/unit/DetectChanges/BCBreak/ClassConstantBased/SkipClassConstantBasedErrorsTest.php @@ -32,8 +32,8 @@ protected function setUp(): void public function testWillForwardChecks(): void { - $fromConstant = $this->createMock(ReflectionClassConstant::class); - $toConstant = $this->createMock(ReflectionClassConstant::class); + $fromConstant = $this->createStub(ReflectionClassConstant::class); + $toConstant = $this->createStub(ReflectionClassConstant::class); $expectedChanges = Changes::fromList(Change::added( uniqid('foo', true), true, @@ -51,8 +51,8 @@ public function testWillForwardChecks(): void public function testWillCollectFailures(): void { - $fromConstant = $this->createMock(ReflectionClassConstant::class); - $toConstant = $this->createMock(ReflectionClassConstant::class); + $fromConstant = $this->createStub(ReflectionClassConstant::class); + $toConstant = $this->createStub(ReflectionClassConstant::class); $exception = new Exception(); $this diff --git a/test/unit/DetectChanges/BCBreak/FunctionBased/MultipleChecksOnAFunctionTest.php b/test/unit/DetectChanges/BCBreak/FunctionBased/MultipleChecksOnAFunctionTest.php index f993923f..5fbff677 100644 --- a/test/unit/DetectChanges/BCBreak/FunctionBased/MultipleChecksOnAFunctionTest.php +++ b/test/unit/DetectChanges/BCBreak/FunctionBased/MultipleChecksOnAFunctionTest.php @@ -24,8 +24,8 @@ public function testChecksAllGivenCheckers(): void $multiCheck = new MultipleChecksOnAFunction($checker1, $checker2, $checker3); - $from = $this->createMock(ReflectionFunction::class); - $to = $this->createMock(ReflectionFunction::class); + $from = $this->createStub(ReflectionFunction::class); + $to = $this->createStub(ReflectionFunction::class); $to->method('getFileName') ->willReturn('foo.php'); diff --git a/test/unit/DetectChanges/BCBreak/FunctionBased/SkipFunctionBasedErrorsTest.php b/test/unit/DetectChanges/BCBreak/FunctionBased/SkipFunctionBasedErrorsTest.php index a457abf5..b56da28f 100644 --- a/test/unit/DetectChanges/BCBreak/FunctionBased/SkipFunctionBasedErrorsTest.php +++ b/test/unit/DetectChanges/BCBreak/FunctionBased/SkipFunctionBasedErrorsTest.php @@ -32,8 +32,8 @@ protected function setUp(): void public function testWillForwardChecks(): void { - $fromFunction = $this->createMock(ReflectionFunction::class); - $toFunction = $this->createMock(ReflectionFunction::class); + $fromFunction = $this->createStub(ReflectionFunction::class); + $toFunction = $this->createStub(ReflectionFunction::class); $expectedChanges = Changes::fromList(Change::added( uniqid('foo', true), true, @@ -51,8 +51,8 @@ public function testWillForwardChecks(): void public function testWillCollectFailures(): void { - $fromFunction = $this->createMock(ReflectionFunction::class); - $toFunction = $this->createMock(ReflectionFunction::class); + $fromFunction = $this->createStub(ReflectionFunction::class); + $toFunction = $this->createStub(ReflectionFunction::class); $exception = new Exception(); $this diff --git a/test/unit/DetectChanges/BCBreak/InterfaceBased/MultipleChecksOnAnInterfaceTest.php b/test/unit/DetectChanges/BCBreak/InterfaceBased/MultipleChecksOnAnInterfaceTest.php index e56a27c0..4260d2f8 100644 --- a/test/unit/DetectChanges/BCBreak/InterfaceBased/MultipleChecksOnAnInterfaceTest.php +++ b/test/unit/DetectChanges/BCBreak/InterfaceBased/MultipleChecksOnAnInterfaceTest.php @@ -24,8 +24,8 @@ public function testChecksAllGivenCheckers(): void $multiCheck = new MultipleChecksOnAnInterface($checker1, $checker2, $checker3); - $from = $this->createMock(ReflectionClass::class); - $to = $this->createMock(ReflectionClass::class); + $from = $this->createStub(ReflectionClass::class); + $to = $this->createStub(ReflectionClass::class); $to->method('getFileName') ->willReturn('foo.php'); diff --git a/test/unit/DetectChanges/BCBreak/InterfaceBased/SkipInterfaceBasedErrorsTest.php b/test/unit/DetectChanges/BCBreak/InterfaceBased/SkipInterfaceBasedErrorsTest.php index 96413b3d..02bcfc4e 100644 --- a/test/unit/DetectChanges/BCBreak/InterfaceBased/SkipInterfaceBasedErrorsTest.php +++ b/test/unit/DetectChanges/BCBreak/InterfaceBased/SkipInterfaceBasedErrorsTest.php @@ -32,8 +32,8 @@ protected function setUp(): void public function testWillForwardChecks(): void { - $fromInterface = $this->createMock(ReflectionClass::class); - $toInterface = $this->createMock(ReflectionClass::class); + $fromInterface = $this->createStub(ReflectionClass::class); + $toInterface = $this->createStub(ReflectionClass::class); $expectedChanges = Changes::fromList(Change::added( uniqid('foo', true), true, @@ -51,8 +51,8 @@ public function testWillForwardChecks(): void public function testWillCollectFailures(): void { - $fromInterface = $this->createMock(ReflectionClass::class); - $toInterface = $this->createMock(ReflectionClass::class); + $fromInterface = $this->createStub(ReflectionClass::class); + $toInterface = $this->createStub(ReflectionClass::class); $exception = new Exception(); $this diff --git a/test/unit/DetectChanges/BCBreak/InterfaceBased/UseClassBasedChecksOnAnInterfaceTest.php b/test/unit/DetectChanges/BCBreak/InterfaceBased/UseClassBasedChecksOnAnInterfaceTest.php index ffae7448..ac176e19 100644 --- a/test/unit/DetectChanges/BCBreak/InterfaceBased/UseClassBasedChecksOnAnInterfaceTest.php +++ b/test/unit/DetectChanges/BCBreak/InterfaceBased/UseClassBasedChecksOnAnInterfaceTest.php @@ -22,8 +22,8 @@ public function testCompare(): void $changes = Changes::fromList(Change::added(uniqid('foo', true), true)); $classBased = $this->createMock(ClassBased::class); - $fromInterface = $this->createMock(ReflectionClass::class); - $toInterface = $this->createMock(ReflectionClass::class); + $fromInterface = $this->createStub(ReflectionClass::class); + $toInterface = $this->createStub(ReflectionClass::class); $classBased ->expects(self::once()) diff --git a/test/unit/DetectChanges/BCBreak/MethodBased/AccessibleMethodChangeTest.php b/test/unit/DetectChanges/BCBreak/MethodBased/AccessibleMethodChangeTest.php index 7c3208c2..19b46b0d 100644 --- a/test/unit/DetectChanges/BCBreak/MethodBased/AccessibleMethodChangeTest.php +++ b/test/unit/DetectChanges/BCBreak/MethodBased/AccessibleMethodChangeTest.php @@ -33,8 +33,8 @@ protected function setUp(): void public function testWillSkipCheckingPrivateMethods(): void { - $from = $this->createMock(ReflectionMethod::class); - $to = $this->createMock(ReflectionMethod::class); + $from = $this->createStub(ReflectionMethod::class); + $to = $this->createStub(ReflectionMethod::class); $from ->method('isPrivate') @@ -50,8 +50,8 @@ public function testWillSkipCheckingPrivateMethods(): void public function testWillCheckVisibleMethods(): void { - $from = $this->createMock(ReflectionMethod::class); - $to = $this->createMock(ReflectionMethod::class); + $from = $this->createStub(ReflectionMethod::class); + $to = $this->createStub(ReflectionMethod::class); $from ->method('isPrivate') @@ -61,6 +61,7 @@ public function testWillCheckVisibleMethods(): void $this ->check + ->expects(self::atLeastOnce()) ->method('__invoke') ->with($from, $to) ->willReturn($result); diff --git a/test/unit/DetectChanges/BCBreak/MethodBased/MethodFunctionDefinitionChangedTest.php b/test/unit/DetectChanges/BCBreak/MethodBased/MethodFunctionDefinitionChangedTest.php index 808cd9c6..00dde75d 100644 --- a/test/unit/DetectChanges/BCBreak/MethodBased/MethodFunctionDefinitionChangedTest.php +++ b/test/unit/DetectChanges/BCBreak/MethodBased/MethodFunctionDefinitionChangedTest.php @@ -34,13 +34,14 @@ protected function setUp(): void public function testWillCheckVisibleMethods(): void { - $from = $this->createMock(ReflectionMethod::class); - $to = $this->createMock(ReflectionMethod::class); + $from = $this->createStub(ReflectionMethod::class); + $to = $this->createStub(ReflectionMethod::class); $result = Changes::fromList(Change::changed(uniqid('foo', true), true)); $this ->functionCheck + ->expects(self::atLeastOnce()) ->method('__invoke') ->with($from, $to) ->willReturn($result); diff --git a/test/unit/DetectChanges/BCBreak/MethodBased/MethodParameterAddedTest.php b/test/unit/DetectChanges/BCBreak/MethodBased/MethodParameterAddedTest.php index 93aaf250..60de3fe2 100644 --- a/test/unit/DetectChanges/BCBreak/MethodBased/MethodParameterAddedTest.php +++ b/test/unit/DetectChanges/BCBreak/MethodBased/MethodParameterAddedTest.php @@ -37,8 +37,8 @@ protected function setUp(): void public function testWillSkipCheckingPrivateMethods(): void { - $from = $this->createMock(ReflectionMethod::class); - $to = $this->createMock(ReflectionMethod::class); + $from = $this->createStub(ReflectionMethod::class); + $to = $this->createStub(ReflectionMethod::class); $from ->method('isPrivate') @@ -49,8 +49,8 @@ public function testWillSkipCheckingPrivateMethods(): void public function testWillSkipCheckingMethodsOnFinalClasses(): void { - $from = $this->createMock(ReflectionMethod::class); - $to = $this->createMock(ReflectionMethod::class); + $from = $this->createStub(ReflectionMethod::class); + $to = $this->createStub(ReflectionMethod::class); $from ->method('isPrivate') @@ -61,8 +61,8 @@ public function testWillSkipCheckingMethodsOnFinalClasses(): void public function testWillSkipCheckingPrivateMethodsOnFinalClasses(): void { - $from = $this->createMock(ReflectionMethod::class); - $to = $this->createMock(ReflectionMethod::class); + $from = $this->createStub(ReflectionMethod::class); + $to = $this->createStub(ReflectionMethod::class); $from ->method('isPrivate') diff --git a/test/unit/DetectChanges/BCBreak/MethodBased/MultipleChecksOnAMethodTest.php b/test/unit/DetectChanges/BCBreak/MethodBased/MultipleChecksOnAMethodTest.php index a74ef142..5ada00c8 100644 --- a/test/unit/DetectChanges/BCBreak/MethodBased/MultipleChecksOnAMethodTest.php +++ b/test/unit/DetectChanges/BCBreak/MethodBased/MultipleChecksOnAMethodTest.php @@ -24,8 +24,8 @@ public function testChecksAllGivenCheckers(): void $multiCheck = new MultipleChecksOnAMethod($checker1, $checker2, $checker3); - $from = $this->createMock(ReflectionMethod::class); - $to = $this->createMock(ReflectionMethod::class); + $from = $this->createStub(ReflectionMethod::class); + $to = $this->createStub(ReflectionMethod::class); $to->method('getFileName') ->willReturn('foo.php'); diff --git a/test/unit/DetectChanges/BCBreak/MethodBased/OnlyProtectedMethodChangedTest.php b/test/unit/DetectChanges/BCBreak/MethodBased/OnlyProtectedMethodChangedTest.php index 8f717d55..d9009d61 100644 --- a/test/unit/DetectChanges/BCBreak/MethodBased/OnlyProtectedMethodChangedTest.php +++ b/test/unit/DetectChanges/BCBreak/MethodBased/OnlyProtectedMethodChangedTest.php @@ -33,8 +33,8 @@ protected function setUp(): void public function testWillSkipCheckingNonProtectedMethods(): void { - $from = $this->createMock(ReflectionMethod::class); - $to = $this->createMock(ReflectionMethod::class); + $from = $this->createStub(ReflectionMethod::class); + $to = $this->createStub(ReflectionMethod::class); $from ->method('isProtected') @@ -50,8 +50,8 @@ public function testWillSkipCheckingNonProtectedMethods(): void public function testWillCheckProtectedMethods(): void { - $from = $this->createMock(ReflectionMethod::class); - $to = $this->createMock(ReflectionMethod::class); + $from = $this->createStub(ReflectionMethod::class); + $to = $this->createStub(ReflectionMethod::class); $from ->method('isProtected') @@ -61,6 +61,7 @@ public function testWillCheckProtectedMethods(): void $this ->check + ->expects(self::atLeastOnce()) ->method('__invoke') ->with($from, $to) ->willReturn($result); diff --git a/test/unit/DetectChanges/BCBreak/MethodBased/OnlyPublicMethodChangedTest.php b/test/unit/DetectChanges/BCBreak/MethodBased/OnlyPublicMethodChangedTest.php index baf3420c..eba640ef 100644 --- a/test/unit/DetectChanges/BCBreak/MethodBased/OnlyPublicMethodChangedTest.php +++ b/test/unit/DetectChanges/BCBreak/MethodBased/OnlyPublicMethodChangedTest.php @@ -33,8 +33,8 @@ protected function setUp(): void public function testWillSkipCheckingNonPublicMethods(): void { - $from = $this->createMock(ReflectionMethod::class); - $to = $this->createMock(ReflectionMethod::class); + $from = $this->createStub(ReflectionMethod::class); + $to = $this->createStub(ReflectionMethod::class); $from ->method('isPublic') @@ -50,8 +50,8 @@ public function testWillSkipCheckingNonPublicMethods(): void public function testWillCheckPublicMethods(): void { - $from = $this->createMock(ReflectionMethod::class); - $to = $this->createMock(ReflectionMethod::class); + $from = $this->createStub(ReflectionMethod::class); + $to = $this->createStub(ReflectionMethod::class); $from ->method('isPublic') @@ -61,6 +61,7 @@ public function testWillCheckPublicMethods(): void $this ->check + ->expects(self::atLeastOnce()) ->method('__invoke') ->with($from, $to) ->willReturn($result); diff --git a/test/unit/DetectChanges/BCBreak/MethodBased/SkipMethodBasedErrorsTest.php b/test/unit/DetectChanges/BCBreak/MethodBased/SkipMethodBasedErrorsTest.php index c246088a..bbe5beff 100644 --- a/test/unit/DetectChanges/BCBreak/MethodBased/SkipMethodBasedErrorsTest.php +++ b/test/unit/DetectChanges/BCBreak/MethodBased/SkipMethodBasedErrorsTest.php @@ -32,8 +32,8 @@ protected function setUp(): void public function testWillForwardChecks(): void { - $fromMethod = $this->createMock(ReflectionMethod::class); - $toMethod = $this->createMock(ReflectionMethod::class); + $fromMethod = $this->createStub(ReflectionMethod::class); + $toMethod = $this->createStub(ReflectionMethod::class); $expectedChanges = Changes::fromList(Change::added( uniqid('foo', true), true, @@ -51,8 +51,8 @@ public function testWillForwardChecks(): void public function testWillCollectFailures(): void { - $fromMethod = $this->createMock(ReflectionMethod::class); - $toMethod = $this->createMock(ReflectionMethod::class); + $fromMethod = $this->createStub(ReflectionMethod::class); + $toMethod = $this->createStub(ReflectionMethod::class); $exception = new Exception(); $this diff --git a/test/unit/DetectChanges/BCBreak/PropertyBased/AccessiblePropertyChangedTest.php b/test/unit/DetectChanges/BCBreak/PropertyBased/AccessiblePropertyChangedTest.php index dc537612..2a5950de 100644 --- a/test/unit/DetectChanges/BCBreak/PropertyBased/AccessiblePropertyChangedTest.php +++ b/test/unit/DetectChanges/BCBreak/PropertyBased/AccessiblePropertyChangedTest.php @@ -6,6 +6,7 @@ use PHPUnit\Framework\Attributes\CoversClass; use PHPUnit\Framework\MockObject\MockObject; +use PHPUnit\Framework\MockObject\Stub; use PHPUnit\Framework\TestCase; use Roave\BackwardCompatibility\Change; use Roave\BackwardCompatibility\Changes; @@ -21,10 +22,10 @@ final class AccessiblePropertyChangedTest extends TestCase /** @var PropertyBased&MockObject */ private PropertyBased $check; - /** @var ReflectionProperty&MockObject */ + /** @var ReflectionProperty&Stub */ private ReflectionProperty $fromProperty; - /** @var ReflectionProperty&MockObject */ + /** @var ReflectionProperty&Stub */ private ReflectionProperty $toProperty; private AccessiblePropertyChanged $accessiblePropertyChanged; @@ -35,8 +36,8 @@ protected function setUp(): void $this->check = $this->createMock(PropertyBased::class); $this->accessiblePropertyChanged = new AccessiblePropertyChanged($this->check); - $this->fromProperty = $this->createMock(ReflectionProperty::class); - $this->toProperty = $this->createMock(ReflectionProperty::class); + $this->fromProperty = $this->createStub(ReflectionProperty::class); + $this->toProperty = $this->createStub(ReflectionProperty::class); } public function testSkipsPrivateProperty(): void diff --git a/test/unit/DetectChanges/BCBreak/PropertyBased/MultipleChecksOnAPropertyTest.php b/test/unit/DetectChanges/BCBreak/PropertyBased/MultipleChecksOnAPropertyTest.php index 081ee1b8..823e7bf9 100644 --- a/test/unit/DetectChanges/BCBreak/PropertyBased/MultipleChecksOnAPropertyTest.php +++ b/test/unit/DetectChanges/BCBreak/PropertyBased/MultipleChecksOnAPropertyTest.php @@ -25,9 +25,9 @@ public function testChecksAllGivenCheckers(): void $multiCheck = new MultipleChecksOnAProperty($checker1, $checker2, $checker3); - $from = $this->createMock(ReflectionProperty::class); - $to = $this->createMock(ReflectionProperty::class); - $toClass = $this->createMock(ReflectionClass::class); + $from = $this->createStub(ReflectionProperty::class); + $to = $this->createStub(ReflectionProperty::class); + $toClass = $this->createStub(ReflectionClass::class); $to->method('getStartLine') ->willReturn(10); diff --git a/test/unit/DetectChanges/BCBreak/PropertyBased/OnlyProtectedPropertyChangedTest.php b/test/unit/DetectChanges/BCBreak/PropertyBased/OnlyProtectedPropertyChangedTest.php index 03bbfc43..6d07d22b 100644 --- a/test/unit/DetectChanges/BCBreak/PropertyBased/OnlyProtectedPropertyChangedTest.php +++ b/test/unit/DetectChanges/BCBreak/PropertyBased/OnlyProtectedPropertyChangedTest.php @@ -6,6 +6,7 @@ use PHPUnit\Framework\Attributes\CoversClass; use PHPUnit\Framework\MockObject\MockObject; +use PHPUnit\Framework\MockObject\Stub; use PHPUnit\Framework\TestCase; use Roave\BackwardCompatibility\Change; use Roave\BackwardCompatibility\Changes; @@ -21,10 +22,10 @@ final class OnlyProtectedPropertyChangedTest extends TestCase /** @var PropertyBased&MockObject */ private PropertyBased $check; - /** @var ReflectionProperty&MockObject */ + /** @var ReflectionProperty&Stub */ private ReflectionProperty $fromProperty; - /** @var ReflectionProperty&MockObject */ + /** @var ReflectionProperty&Stub */ private ReflectionProperty $toProperty; private OnlyProtectedPropertyChanged $changed; @@ -35,8 +36,8 @@ protected function setUp(): void $this->check = $this->createMock(PropertyBased::class); $this->changed = new OnlyProtectedPropertyChanged($this->check); - $this->fromProperty = $this->createMock(ReflectionProperty::class); - $this->toProperty = $this->createMock(ReflectionProperty::class); + $this->fromProperty = $this->createStub(ReflectionProperty::class); + $this->toProperty = $this->createStub(ReflectionProperty::class); } public function testSkipsNonProtectedProperty(): void diff --git a/test/unit/DetectChanges/BCBreak/PropertyBased/OnlyPublicPropertyChangedTest.php b/test/unit/DetectChanges/BCBreak/PropertyBased/OnlyPublicPropertyChangedTest.php index f064655b..3143ef3e 100644 --- a/test/unit/DetectChanges/BCBreak/PropertyBased/OnlyPublicPropertyChangedTest.php +++ b/test/unit/DetectChanges/BCBreak/PropertyBased/OnlyPublicPropertyChangedTest.php @@ -6,6 +6,7 @@ use PHPUnit\Framework\Attributes\CoversClass; use PHPUnit\Framework\MockObject\MockObject; +use PHPUnit\Framework\MockObject\Stub; use PHPUnit\Framework\TestCase; use Roave\BackwardCompatibility\Change; use Roave\BackwardCompatibility\Changes; @@ -21,10 +22,10 @@ final class OnlyPublicPropertyChangedTest extends TestCase /** @var PropertyBased&MockObject */ private PropertyBased $check; - /** @var ReflectionProperty&MockObject */ + /** @var ReflectionProperty&Stub */ private ReflectionProperty $fromProperty; - /** @var ReflectionProperty&MockObject */ + /** @var ReflectionProperty&Stub */ private ReflectionProperty $toProperty; private OnlyPublicPropertyChanged $changed; @@ -35,8 +36,8 @@ protected function setUp(): void $this->check = $this->createMock(PropertyBased::class); $this->changed = new OnlyPublicPropertyChanged($this->check); - $this->fromProperty = $this->createMock(ReflectionProperty::class); - $this->toProperty = $this->createMock(ReflectionProperty::class); + $this->fromProperty = $this->createStub(ReflectionProperty::class); + $this->toProperty = $this->createStub(ReflectionProperty::class); } public function testSkipsNonPublicProperty(): void diff --git a/test/unit/DetectChanges/BCBreak/PropertyBased/SkipPropertyBasedErrorsTest.php b/test/unit/DetectChanges/BCBreak/PropertyBased/SkipPropertyBasedErrorsTest.php index bd670b70..1335d2c2 100644 --- a/test/unit/DetectChanges/BCBreak/PropertyBased/SkipPropertyBasedErrorsTest.php +++ b/test/unit/DetectChanges/BCBreak/PropertyBased/SkipPropertyBasedErrorsTest.php @@ -32,8 +32,8 @@ protected function setUp(): void public function testWillForwardChecks(): void { - $fromProperty = $this->createMock(ReflectionProperty::class); - $toProperty = $this->createMock(ReflectionProperty::class); + $fromProperty = $this->createStub(ReflectionProperty::class); + $toProperty = $this->createStub(ReflectionProperty::class); $expectedChanges = Changes::fromList(Change::added( uniqid('foo', true), true, @@ -51,8 +51,8 @@ public function testWillForwardChecks(): void public function testWillCollectFailures(): void { - $fromProperty = $this->createMock(ReflectionProperty::class); - $toProperty = $this->createMock(ReflectionProperty::class); + $fromProperty = $this->createStub(ReflectionProperty::class); + $toProperty = $this->createStub(ReflectionProperty::class); $exception = new Exception(); $this diff --git a/test/unit/DetectChanges/BCBreak/TraitBased/MultipleChecksOnATraitTest.php b/test/unit/DetectChanges/BCBreak/TraitBased/MultipleChecksOnATraitTest.php index d5f2ebb0..3910ed94 100644 --- a/test/unit/DetectChanges/BCBreak/TraitBased/MultipleChecksOnATraitTest.php +++ b/test/unit/DetectChanges/BCBreak/TraitBased/MultipleChecksOnATraitTest.php @@ -24,8 +24,8 @@ public function testChecksAllGivenCheckers(): void $multiCheck = new MultipleChecksOnATrait($checker1, $checker2, $checker3); - $from = $this->createMock(ReflectionClass::class); - $to = $this->createMock(ReflectionClass::class); + $from = $this->createStub(ReflectionClass::class); + $to = $this->createStub(ReflectionClass::class); $to->method('getFileName') ->willReturn('foo.php'); diff --git a/test/unit/DetectChanges/BCBreak/TraitBased/SkipTraitBasedErrorsTest.php b/test/unit/DetectChanges/BCBreak/TraitBased/SkipTraitBasedErrorsTest.php index ce180abb..76524d05 100644 --- a/test/unit/DetectChanges/BCBreak/TraitBased/SkipTraitBasedErrorsTest.php +++ b/test/unit/DetectChanges/BCBreak/TraitBased/SkipTraitBasedErrorsTest.php @@ -32,8 +32,8 @@ protected function setUp(): void public function testWillForwardChecks(): void { - $fromTrait = $this->createMock(ReflectionClass::class); - $toTrait = $this->createMock(ReflectionClass::class); + $fromTrait = $this->createStub(ReflectionClass::class); + $toTrait = $this->createStub(ReflectionClass::class); $expectedChanges = Changes::fromList(Change::added( uniqid('foo', true), true, @@ -51,8 +51,8 @@ public function testWillForwardChecks(): void public function testWillCollectFailures(): void { - $fromTrait = $this->createMock(ReflectionClass::class); - $toTrait = $this->createMock(ReflectionClass::class); + $fromTrait = $this->createStub(ReflectionClass::class); + $toTrait = $this->createStub(ReflectionClass::class); $exception = new Exception(); $this diff --git a/test/unit/DetectChanges/BCBreak/TraitBased/UseClassBasedChecksOnATraitTest.php b/test/unit/DetectChanges/BCBreak/TraitBased/UseClassBasedChecksOnATraitTest.php index 73fd2b39..055feb50 100644 --- a/test/unit/DetectChanges/BCBreak/TraitBased/UseClassBasedChecksOnATraitTest.php +++ b/test/unit/DetectChanges/BCBreak/TraitBased/UseClassBasedChecksOnATraitTest.php @@ -22,8 +22,8 @@ public function testCompare(): void $changes = Changes::fromList(Change::added(uniqid('foo', true), true)); $classBased = $this->createMock(ClassBased::class); - $fromTrait = $this->createMock(ReflectionClass::class); - $toTrait = $this->createMock(ReflectionClass::class); + $fromTrait = $this->createStub(ReflectionClass::class); + $toTrait = $this->createStub(ReflectionClass::class); $classBased ->expects(self::once()) diff --git a/test/unit/Factory/ComposerInstallationReflectorFactoryTest.php b/test/unit/Factory/ComposerInstallationReflectorFactoryTest.php index b543c701..ce2dae87 100644 --- a/test/unit/Factory/ComposerInstallationReflectorFactoryTest.php +++ b/test/unit/Factory/ComposerInstallationReflectorFactoryTest.php @@ -46,7 +46,7 @@ class Dummy {} '/** an example */', (new ComposerInstallationReflectorFactory($locateSources))( $path, - $this->createMock(SourceLocator::class), + $this->createStub(SourceLocator::class), ) ->reflectClass('Dummy') ->getDocComment(), diff --git a/test/unit/LocateDependencies/LocateDependenciesViaComposerTest.php b/test/unit/LocateDependencies/LocateDependenciesViaComposerTest.php index 198b5845..4f279288 100644 --- a/test/unit/LocateDependencies/LocateDependenciesViaComposerTest.php +++ b/test/unit/LocateDependencies/LocateDependenciesViaComposerTest.php @@ -121,6 +121,11 @@ public function testWillLocateDependencies(): void public function testInternalReflectionStubsTakePriorityOverInstalledPolyfills(): void { + $this + ->composerInstaller + ->expects(self::atLeastOnce()) + ->method('run'); + $this->expectedInstallationPath = Type\string() ->assert(Filesystem\canonicalize(__DIR__ . '/../../asset/composer-installation-with-vendor-overriding-internal-sources')); diff --git a/test/unit/SourceLocator/LocatedSourceWithStrippedSourcesDirectoryTest.php b/test/unit/SourceLocator/LocatedSourceWithStrippedSourcesDirectoryTest.php index 481260ea..e0dc5b94 100644 --- a/test/unit/SourceLocator/LocatedSourceWithStrippedSourcesDirectoryTest.php +++ b/test/unit/SourceLocator/LocatedSourceWithStrippedSourcesDirectoryTest.php @@ -25,7 +25,7 @@ public function testWillStripPrefixFilePathWhenLocatedSourceInConfiguredPath( string $strippedSourcesPath, string $expectedPath, ): void { - $source = $this->createMock(LocatedSource::class); + $source = $this->createStub(LocatedSource::class); $source ->method('getFileName') @@ -73,8 +73,8 @@ public function testWillGetSourceNameFromGivenLocatedSource(): void public function testWillReportInternalSourceFromGivenLocatedSource(): void { - $nonInternalSource = $this->createMock(LocatedSource::class); - $internalSource = $this->createMock(LocatedSource::class); + $nonInternalSource = $this->createStub(LocatedSource::class); + $internalSource = $this->createStub(LocatedSource::class); $nonInternalSource ->method('isInternal') @@ -100,7 +100,7 @@ public function testWillReportInternalSourceFromGivenLocatedSource(): void public function testWillGetExtensionNameFromGivenLocatedSource(): void { - $extensionSource = $this->createMock(LocatedSource::class); + $extensionSource = $this->createStub(LocatedSource::class); $extensionSource ->method('getExtensionName') @@ -115,8 +115,8 @@ public function testWillGetExtensionNameFromGivenLocatedSource(): void public function testWillReportEvaledSourceFromGivenLocatedSource(): void { - $nonEvaledSource = $this->createMock(LocatedSource::class); - $evaledSource = $this->createMock(LocatedSource::class); + $nonEvaledSource = $this->createStub(LocatedSource::class); + $evaledSource = $this->createStub(LocatedSource::class); $nonEvaledSource ->method('isEvaled') @@ -142,7 +142,7 @@ public function testWillReportEvaledSourceFromGivenLocatedSource(): void public function testWillGetAliasNameFromGivenLocatedSource(): void { - $aliasedSource = $this->createMock(LocatedSource::class); + $aliasedSource = $this->createStub(LocatedSource::class); $aliasedSource ->method('getAliasName') diff --git a/test/unit/SourceLocator/ReplaceSourcePathOfLocatedSourcesTest.php b/test/unit/SourceLocator/ReplaceSourcePathOfLocatedSourcesTest.php index e25427ac..7bc93b1d 100644 --- a/test/unit/SourceLocator/ReplaceSourcePathOfLocatedSourcesTest.php +++ b/test/unit/SourceLocator/ReplaceSourcePathOfLocatedSourcesTest.php @@ -27,10 +27,10 @@ final class ReplaceSourcePathOfLocatedSourcesTest extends TestCase { public function testWillWrapFoundReflection(): void { - $reflection = $this->createMock(Reflection::class); + $reflection = $this->createStub(Reflection::class); $next = $this->createMock(Locator::class); - $reflector = $this->createMock(Reflector::class); - $source = $this->createMock(LocatedSource::class); + $reflector = $this->createStub(Reflector::class); + $source = $this->createStub(LocatedSource::class); $identifier = new Identifier('find-me', new IdentifierType(IdentifierType::IDENTIFIER_CLASS)); $next->expects(self::once()) @@ -51,10 +51,10 @@ public function testWillWrapFoundReflection(): void public function testWillWrapFoundReflectionsOfType(): void { - $reflection = $this->createMock(Reflection::class); + $reflection = $this->createStub(Reflection::class); $next = $this->createMock(Locator::class); - $reflector = $this->createMock(Reflector::class); - $source = $this->createMock(LocatedSource::class); + $reflector = $this->createStub(Reflector::class); + $source = $this->createStub(LocatedSource::class); $identifierType = new IdentifierType(IdentifierType::IDENTIFIER_CLASS); $next->expects(self::once()) diff --git a/test/unit/SourceLocator/StaticClassMapSourceLocatorTest.php b/test/unit/SourceLocator/StaticClassMapSourceLocatorTest.php index d82820a8..9aae74e9 100644 --- a/test/unit/SourceLocator/StaticClassMapSourceLocatorTest.php +++ b/test/unit/SourceLocator/StaticClassMapSourceLocatorTest.php @@ -7,6 +7,7 @@ use PHPUnit\Framework\Attributes\CoversClass; use PHPUnit\Framework\Attributes\DataProvider; use PHPUnit\Framework\MockObject\MockObject; +use PHPUnit\Framework\MockObject\Stub; use PHPUnit\Framework\TestCase; use Psl\Exception\InvariantViolationException; use Psl\File; @@ -25,7 +26,7 @@ final class StaticClassMapSourceLocatorTest extends TestCase /** @var Locator&MockObject */ private Locator $astLocator; - /** @var Reflector&MockObject */ + /** @var Reflector&Stub */ private Reflector $reflector; protected function setUp(): void @@ -33,11 +34,16 @@ protected function setUp(): void parent::setUp(); $this->astLocator = $this->createMock(Locator::class); - $this->reflector = $this->createMock(Reflector::class); + $this->reflector = $this->createStub(Reflector::class); } public function testRejectsEmptyKeys(): void { + $this + ->astLocator + ->expects(self::never()) + ->method('findReflection'); + $this->expectException(CoercionException::class); $this->expectExceptionMessage('Could not coerce "string" to type "dict" at path "key()".'); @@ -49,6 +55,11 @@ public function testRejectsEmptyKeys(): void public function testRejectsNonFileInputs(): void { + $this + ->astLocator + ->expects(self::never()) + ->method('findReflection'); + $this->expectException(InvariantViolationException::class); new StaticClassMapSourceLocator( @@ -59,6 +70,11 @@ public function testRejectsNonFileInputs(): void public function testAcceptsEmptySet(): void { + $this + ->astLocator + ->expects(self::never()) + ->method('findReflection'); + $locator = new StaticClassMapSourceLocator([], $this->astLocator); self::assertNull($locator->locateIdentifier( @@ -72,7 +88,7 @@ public function testAcceptsEmptySet(): void public function testWillLocateThisClass(string $thisClassFilePath): void { $locator = new StaticClassMapSourceLocator([self::class => $thisClassFilePath], $this->astLocator); - $reflection = $this->createMock(Reflection::class); + $reflection = $this->createStub(Reflection::class); $this ->astLocator From 86430876a4cd4e985ca1ff8df9787f8526d24f82 Mon Sep 17 00:00:00 2001 From: Marco Pivetta Date: Fri, 15 May 2026 16:12:06 +0200 Subject: [PATCH 4/6] Correcting testing around `Change` constructors, to catch mutations around default value behaviors --- test/unit/ChangeTest.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/unit/ChangeTest.php b/test/unit/ChangeTest.php index fe55cf73..bd95e800 100644 --- a/test/unit/ChangeTest.php +++ b/test/unit/ChangeTest.php @@ -28,7 +28,7 @@ public function testAdded(): void public function testBcAdded(): void { $changeText = uniqid('changeText', true); - $change = Change::added($changeText, true); + $change = Change::added($changeText); self::assertSame('[BC] ADDED: ' . $changeText, (string) $change); self::assertTrue($change->isAdded()); self::assertFalse($change->isChanged()); @@ -77,7 +77,7 @@ public function testWillNotOverrideFilePositionsIfAlreadySet(): void public function testBcChanged(): void { $changeText = uniqid('changeText', true); - $change = Change::changed($changeText, true); + $change = Change::changed($changeText); self::assertSame('[BC] CHANGED: ' . $changeText, (string) $change); self::assertFalse($change->isAdded()); self::assertTrue($change->isChanged()); @@ -99,7 +99,7 @@ public function testRemoved(): void public function testBcRemoved(): void { $changeText = uniqid('changeText', true); - $change = Change::removed($changeText, true); + $change = Change::removed($changeText); self::assertSame('[BC] REMOVED: ' . $changeText, (string) $change); self::assertFalse($change->isAdded()); self::assertFalse($change->isChanged()); From e653eee8bc52cec906d727e66f3406edde0d5f3d Mon Sep 17 00:00:00 2001 From: Marco Pivetta Date: Fri, 15 May 2026 16:14:30 +0200 Subject: [PATCH 5/6] Removed redundant `TypeIsCovariant` block --- src/DetectChanges/Variance/TypeIsCovariant.php | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/DetectChanges/Variance/TypeIsCovariant.php b/src/DetectChanges/Variance/TypeIsCovariant.php index 0f67d8e8..93d47fb2 100644 --- a/src/DetectChanges/Variance/TypeIsCovariant.php +++ b/src/DetectChanges/Variance/TypeIsCovariant.php @@ -78,11 +78,6 @@ private function compareNamedTypes(ReflectionNamedType $type, ReflectionNamedTyp return true; } - if ($typeAsString === 'void') { - // nothing is covariant to `void` - return false; - } - if ($typeAsString === 'object' && ! $comparedType->isBuiltin()) { // `object` is not covariant to a defined class type return true; From 1268e95991957a18b91039493f68dca131749e14 Mon Sep 17 00:00:00 2001 From: Marco Pivetta Date: Fri, 15 May 2026 16:15:06 +0200 Subject: [PATCH 6/6] Requiring full mutation test score --- infection.json.dist | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/infection.json.dist b/infection.json.dist index 482dc935..b6fd33e4 100644 --- a/infection.json.dist +++ b/infection.json.dist @@ -15,6 +15,6 @@ "@default": true, "NotIdenticalNotEqual": false }, - "minMsi": 96, - "minCoveredMsi": 99 + "minMsi": 100, + "minCoveredMsi": 100 }