diff --git a/.github/workflows/phpcs.yml b/.github/workflows/phpcs.yml index 9712328..26697d7 100644 --- a/.github/workflows/phpcs.yml +++ b/.github/workflows/phpcs.yml @@ -13,7 +13,7 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v5 - name: Set up PHP ${{ matrix.php-versions }} uses: shivammathur/setup-php@v2 @@ -30,7 +30,7 @@ jobs: run: echo "::set-output name=dir::$(composer config cache-files-dir)" - name: Cache dependencies - uses: actions/cache@v2 + uses: actions/cache@v4 with: path: ${{ steps.composer-cache.outputs.dir }} key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} diff --git a/.github/workflows/phpstan.yml b/.github/workflows/phpstan.yml index fe67687..40994bd 100644 --- a/.github/workflows/phpstan.yml +++ b/.github/workflows/phpstan.yml @@ -12,7 +12,7 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v5 - name: Set up PHP 7.4 uses: shivammathur/setup-php@v2 @@ -29,7 +29,7 @@ jobs: run: echo "::set-output name=dir::$(composer config cache-files-dir)" - name: Cache dependencies - uses: actions/cache@v2 + uses: actions/cache@v4 with: path: ${{ steps.composer-cache.outputs.dir }} key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} diff --git a/.github/workflows/runTests.yml b/.github/workflows/runTests.yml index dd093e9..887ba21 100644 --- a/.github/workflows/runTests.yml +++ b/.github/workflows/runTests.yml @@ -25,7 +25,7 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v5 - name: Set up PHP ${{ matrix.php-versions }} uses: shivammathur/setup-php@v2 @@ -48,7 +48,7 @@ jobs: run: echo "::set-output name=dir::$(composer config cache-files-dir)" - name: Cache dependencies - uses: actions/cache@v2 + uses: actions/cache@v4 with: path: ${{ steps.composer-cache.outputs.dir }} key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} diff --git a/composer.json b/composer.json index 138145a..c873736 100644 --- a/composer.json +++ b/composer.json @@ -22,9 +22,9 @@ "require-dev": { "squizlabs/php_codesniffer": "^3.6.0", "doctrine/coding-standard": "^8.2.1", - "bovigo/callmap": "^6.2.1", - "bovigo/assert": "^6.2", - "phpunit/phpunit": "^9.5.8", + "bovigo/callmap": "^6.2.1 || ^7.0 || ^8.0", + "bovigo/assert": "^6.2 || ^7.0 || ^8.0", + "phpunit/phpunit": "^9.6.29 || ^10.5.58 || ^11.5.44", "phpstan/phpstan": "^0.12.94", "phpstan/phpstan-phpunit": "^0.12.21", "phpstan/phpstan-deprecation-rules": "^0.12.6", @@ -49,5 +49,10 @@ "scripts": { "test": "phpunit", "php-coveralls": "php-coveralls" + }, + "config": { + "allow-plugins": { + "dealerdirect/phpcodesniffer-composer-installer": true + } } -} +} \ No newline at end of file diff --git a/composer.lock b/composer.lock index 0a01a70..3db399d 100644 --- a/composer.lock +++ b/composer.lock @@ -1,2681 +1,2378 @@ { - "_readme": [ - "This file locks the dependencies of your project to a known state", - "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", - "This file is @generated automatically" - ], - "content-hash": "a00bfcfa232b2e546eba594e9eedfa15", - "packages": [], - "packages-dev": [ - { - "name": "bovigo/assert", - "version": "v6.2.0", - "source": { - "type": "git", - "url": "https://github.com/bovigo/assert.git", - "reference": "2a70d7b8e2671630fdc4176b01d9ab64a5227156" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/bovigo/assert/zipball/2a70d7b8e2671630fdc4176b01d9ab64a5227156", - "reference": "2a70d7b8e2671630fdc4176b01d9ab64a5227156", - "shasum": "" - }, - "require": { - "php": "^7.3||^8.0", - "phpstan/phpstan": "^0.12.57", - "sebastian/comparator": "^4.0", - "sebastian/exporter": "^4.0" - }, - "require-dev": { - "mikey179/vfsstream": "^1.6.8", - "phpunit/phpunit": "^9.4" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "6.2.x-dev" - } - }, - "autoload": { - "psr-4": { - "bovigo\\assert\\": "src/main/php" - }, - "files": [ - "src/main/php/assert.php", - "src/main/php/predicate/predicates.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "description": "Provides assertions for unit tests.", - "support": { - "issues": "https://github.com/bovigo/assert/issues", - "source": "https://github.com/bovigo/assert/tree/v6.2.0" - }, - "time": "2021-03-07T15:04:49+00:00" + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", + "This file is @generated automatically" + ], + "content-hash": "361da97a319be03e0ecb7f38613cfdcd", + "packages": [], + "packages-dev": [ + { + "name": "bovigo/assert", + "version": "v8.1.0", + "source": { + "type": "git", + "url": "https://github.com/bovigo/assert.git", + "reference": "6d6d6389fc73e926718fb7cf83d2f22807bf5ba4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/bovigo/assert/zipball/6d6d6389fc73e926718fb7cf83d2f22807bf5ba4", + "reference": "6d6d6389fc73e926718fb7cf83d2f22807bf5ba4", + "shasum": "" + }, + "require": { + "php": "^8.3", + "sebastian/comparator": "^6.2", + "sebastian/exporter": "^6.3" + }, + "require-dev": { + "mikey179/vfsstream": "^1.6.12", + "phpunit/phpunit": "^11.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "8.1.x-dev" + } + }, + "autoload": { + "files": [ + "src/main/php/assert.php", + "src/main/php/predicate/predicates.php" + ], + "psr-4": { + "bovigo\\assert\\": "src/main/php" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Provides assertions for unit tests.", + "support": { + "issues": "https://github.com/bovigo/assert/issues", + "source": "https://github.com/bovigo/assert/tree/v8.1.0" + }, + "time": "2024-12-28T18:39:54+00:00" + }, + { + "name": "bovigo/callmap", + "version": "v8.1.0", + "source": { + "type": "git", + "url": "https://github.com/bovigo/callmap.git", + "reference": "8c4c7a2f0451df2c0480520d37c8370fafb464be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/bovigo/callmap/zipball/8c4c7a2f0451df2c0480520d37c8370fafb464be", + "reference": "8c4c7a2f0451df2c0480520d37c8370fafb464be", + "shasum": "" + }, + "require": { + "bovigo/assert": "^8.1", + "php": "^8.3" + }, + "require-dev": { + "phpunit/phpunit": "^11.5", + "xp-framework/core": "^11.6", + "xp-framework/unittest": "^11.1" + }, + "suggest": { + "bovigo/assert": "To use argument verification", + "phpunit/phpunit": "Alternative option for argument verification" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "8.1.x-dev" + } + }, + "autoload": { + "files": [ + "src/main/php/functions.php" + ], + "psr-4": { + "bovigo\\callmap\\": "src/main/php" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Allows to stub and mock method calls by applying a callmap.", + "support": { + "issues": "https://github.com/bovigo/callmap/issues", + "source": "https://github.com/bovigo/callmap/tree/v8.1.0" + }, + "time": "2025-01-01T08:37:52+00:00" + }, + { + "name": "dealerdirect/phpcodesniffer-composer-installer", + "version": "v0.7.2", + "source": { + "type": "git", + "url": "https://github.com/Dealerdirect/phpcodesniffer-composer-installer.git", + "reference": "1c968e542d8843d7cd71de3c5c9c3ff3ad71a1db" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Dealerdirect/phpcodesniffer-composer-installer/zipball/1c968e542d8843d7cd71de3c5c9c3ff3ad71a1db", + "reference": "1c968e542d8843d7cd71de3c5c9c3ff3ad71a1db", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^1.0 || ^2.0", + "php": ">=5.3", + "squizlabs/php_codesniffer": "^2.0 || ^3.1.0 || ^4.0" + }, + "require-dev": { + "composer/composer": "*", + "php-parallel-lint/php-parallel-lint": "^1.3.1", + "phpcompatibility/php-compatibility": "^9.0" + }, + "type": "composer-plugin", + "extra": { + "class": "Dealerdirect\\Composer\\Plugin\\Installers\\PHPCodeSniffer\\Plugin" + }, + "autoload": { + "psr-4": { + "Dealerdirect\\Composer\\Plugin\\Installers\\PHPCodeSniffer\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Franck Nijhof", + "email": "franck.nijhof@dealerdirect.com", + "homepage": "http://www.frenck.nl", + "role": "Developer / IT Manager" }, { - "name": "bovigo/callmap", - "version": "v6.2.1", - "source": { - "type": "git", - "url": "https://github.com/bovigo/callmap.git", - "reference": "5fe2246b9a46308e16c3bfdfb23cfa854835399b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/bovigo/callmap/zipball/5fe2246b9a46308e16c3bfdfb23cfa854835399b", - "reference": "5fe2246b9a46308e16c3bfdfb23cfa854835399b", - "shasum": "" - }, - "require": { - "bovigo/assert": "^6.1", - "php": "^7.3||^8.0" - }, - "require-dev": { - "phpstan/phpstan": "^0.12.57", - "phpunit/phpunit": "^9.4", - "xp-framework/core": "^10.3 | ^9.9", - "xp-framework/unittest": "^11.1 | ^10.1 | ^9.7.1" - }, - "suggest": { - "bovigo/assert": "To use argument verification", - "phpunit/phpunit": "Alternative option for argument verification", - "xp-framework/unittest": "Alternative option for argument verification" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "6.2.x-dev" - } - }, - "autoload": { - "psr-4": { - "bovigo\\callmap\\": "src/main/php" - }, - "files": [ - "src/main/php/functions.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "description": "Allows to stub and mock method calls by applying a callmap.", - "support": { - "issues": "https://github.com/bovigo/callmap/issues", - "source": "https://github.com/bovigo/callmap/tree/v6.2.1" - }, - "time": "2020-12-19T09:00:24+00:00" + "name": "Contributors", + "homepage": "https://github.com/Dealerdirect/phpcodesniffer-composer-installer/graphs/contributors" + } + ], + "description": "PHP_CodeSniffer Standards Composer Installer Plugin", + "homepage": "http://www.dealerdirect.com", + "keywords": [ + "PHPCodeSniffer", + "PHP_CodeSniffer", + "code quality", + "codesniffer", + "composer", + "installer", + "phpcbf", + "phpcs", + "plugin", + "qa", + "quality", + "standard", + "standards", + "style guide", + "stylecheck", + "tests" + ], + "support": { + "issues": "https://github.com/dealerdirect/phpcodesniffer-composer-installer/issues", + "source": "https://github.com/dealerdirect/phpcodesniffer-composer-installer" + }, + "time": "2022-02-04T12:51:07+00:00" + }, + { + "name": "doctrine/coding-standard", + "version": "8.2.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/coding-standard.git", + "reference": "f595b060799c1a0d76ead16981804eaa0bbcd8d6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/coding-standard/zipball/f595b060799c1a0d76ead16981804eaa0bbcd8d6", + "reference": "f595b060799c1a0d76ead16981804eaa0bbcd8d6", + "shasum": "" + }, + "require": { + "dealerdirect/phpcodesniffer-composer-installer": "^0.6.2 || ^0.7", + "php": "^7.1 || ^8.0", + "slevomat/coding-standard": "^6.4.1", + "squizlabs/php_codesniffer": "^3.5.8" + }, + "type": "phpcodesniffer-standard", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" }, { - "name": "dealerdirect/phpcodesniffer-composer-installer", - "version": "v0.7.1", - "source": { - "type": "git", - "url": "https://github.com/Dealerdirect/phpcodesniffer-composer-installer.git", - "reference": "fe390591e0241955f22eb9ba327d137e501c771c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Dealerdirect/phpcodesniffer-composer-installer/zipball/fe390591e0241955f22eb9ba327d137e501c771c", - "reference": "fe390591e0241955f22eb9ba327d137e501c771c", - "shasum": "" - }, - "require": { - "composer-plugin-api": "^1.0 || ^2.0", - "php": ">=5.3", - "squizlabs/php_codesniffer": "^2.0 || ^3.0 || ^4.0" - }, - "require-dev": { - "composer/composer": "*", - "phpcompatibility/php-compatibility": "^9.0", - "sensiolabs/security-checker": "^4.1.0" - }, - "type": "composer-plugin", - "extra": { - "class": "Dealerdirect\\Composer\\Plugin\\Installers\\PHPCodeSniffer\\Plugin" - }, - "autoload": { - "psr-4": { - "Dealerdirect\\Composer\\Plugin\\Installers\\PHPCodeSniffer\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Franck Nijhof", - "email": "franck.nijhof@dealerdirect.com", - "homepage": "http://www.frenck.nl", - "role": "Developer / IT Manager" - } - ], - "description": "PHP_CodeSniffer Standards Composer Installer Plugin", - "homepage": "http://www.dealerdirect.com", - "keywords": [ - "PHPCodeSniffer", - "PHP_CodeSniffer", - "code quality", - "codesniffer", - "composer", - "installer", - "phpcs", - "plugin", - "qa", - "quality", - "standard", - "standards", - "style guide", - "stylecheck", - "tests" - ], - "support": { - "issues": "https://github.com/dealerdirect/phpcodesniffer-composer-installer/issues", - "source": "https://github.com/dealerdirect/phpcodesniffer-composer-installer" - }, - "time": "2020-12-07T18:04:37+00:00" + "name": "Steve Müller", + "email": "st.mueller@dzh-online.de" + } + ], + "description": "The Doctrine Coding Standard is a set of PHPCS rules applied to all Doctrine projects.", + "homepage": "https://www.doctrine-project.org/projects/coding-standard.html", + "keywords": [ + "checks", + "code", + "coding", + "cs", + "doctrine", + "rules", + "sniffer", + "sniffs", + "standard", + "style" + ], + "support": { + "issues": "https://github.com/doctrine/coding-standard/issues", + "source": "https://github.com/doctrine/coding-standard/tree/8.2.1" + }, + "time": "2021-04-03T10:54:55+00:00" + }, + { + "name": "myclabs/deep-copy", + "version": "1.13.4", + "source": { + "type": "git", + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/07d290f0c47959fd5eed98c95ee5602db07e0b6a", + "reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "conflict": { + "doctrine/collections": "<1.6.8", + "doctrine/common": "<2.13.3 || >=3 <3.2.2" + }, + "require-dev": { + "doctrine/collections": "^1.6.8", + "doctrine/common": "^2.13.3 || ^3.2.2", + "phpspec/prophecy": "^1.10", + "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" + }, + "type": "library", + "autoload": { + "files": [ + "src/DeepCopy/deep_copy.php" + ], + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Create deep copies (clones) of your objects", + "keywords": [ + "clone", + "copy", + "duplicate", + "object", + "object graph" + ], + "support": { + "issues": "https://github.com/myclabs/DeepCopy/issues", + "source": "https://github.com/myclabs/DeepCopy/tree/1.13.4" + }, + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", + "type": "tidelift" + } + ], + "time": "2025-08-01T08:46:24+00:00" + }, + { + "name": "nikic/php-parser", + "version": "v5.6.2", + "source": { + "type": "git", + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "3a454ca033b9e06b63282ce19562e892747449bb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/3a454ca033b9e06b63282ce19562e892747449bb", + "reference": "3a454ca033b9e06b63282ce19562e892747449bb", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "ext-json": "*", + "ext-tokenizer": "*", + "php": ">=7.4" + }, + "require-dev": { + "ircmaxell/php-yacc": "^0.0.7", + "phpunit/phpunit": "^9.0" + }, + "bin": [ + "bin/php-parse" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.x-dev" + } + }, + "autoload": { + "psr-4": { + "PhpParser\\": "lib/PhpParser" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Nikita Popov" + } + ], + "description": "A PHP parser written in PHP", + "keywords": [ + "parser", + "php" + ], + "support": { + "issues": "https://github.com/nikic/PHP-Parser/issues", + "source": "https://github.com/nikic/PHP-Parser/tree/v5.6.2" + }, + "time": "2025-10-21T19:32:17+00:00" + }, + { + "name": "phar-io/manifest", + "version": "2.0.4", + "source": { + "type": "git", + "url": "https://github.com/phar-io/manifest.git", + "reference": "54750ef60c58e43759730615a392c31c80e23176" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/54750ef60c58e43759730615a392c31c80e23176", + "reference": "54750ef60c58e43759730615a392c31c80e23176", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "ext-phar": "*", + "ext-xmlwriter": "*", + "phar-io/version": "^3.0.1", + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" }, { - "name": "doctrine/coding-standard", - "version": "8.2.1", - "source": { - "type": "git", - "url": "https://github.com/doctrine/coding-standard.git", - "reference": "f595b060799c1a0d76ead16981804eaa0bbcd8d6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/coding-standard/zipball/f595b060799c1a0d76ead16981804eaa0bbcd8d6", - "reference": "f595b060799c1a0d76ead16981804eaa0bbcd8d6", - "shasum": "" - }, - "require": { - "dealerdirect/phpcodesniffer-composer-installer": "^0.6.2 || ^0.7", - "php": "^7.1 || ^8.0", - "slevomat/coding-standard": "^6.4.1", - "squizlabs/php_codesniffer": "^3.5.8" - }, - "type": "phpcodesniffer-standard", - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Steve Müller", - "email": "st.mueller@dzh-online.de" - } - ], - "description": "The Doctrine Coding Standard is a set of PHPCS rules applied to all Doctrine projects.", - "homepage": "https://www.doctrine-project.org/projects/coding-standard.html", - "keywords": [ - "checks", - "code", - "coding", - "cs", - "doctrine", - "rules", - "sniffer", - "sniffs", - "standard", - "style" - ], - "support": { - "issues": "https://github.com/doctrine/coding-standard/issues", - "source": "https://github.com/doctrine/coding-standard/tree/8.2.1" - }, - "time": "2021-04-03T10:54:55+00:00" + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" }, { - "name": "doctrine/instantiator", - "version": "1.4.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/instantiator.git", - "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/d56bf6102915de5702778fe20f2de3b2fe570b5b", - "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0" - }, - "require-dev": { - "doctrine/coding-standard": "^8.0", - "ext-pdo": "*", - "ext-phar": "*", - "phpbench/phpbench": "^0.13 || 1.0.0-alpha2", - "phpstan/phpstan": "^0.12", - "phpstan/phpstan-phpunit": "^0.12", - "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com", - "homepage": "https://ocramius.github.io/" - } - ], - "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", - "homepage": "https://www.doctrine-project.org/projects/instantiator.html", - "keywords": [ - "constructor", - "instantiate" - ], - "support": { - "issues": "https://github.com/doctrine/instantiator/issues", - "source": "https://github.com/doctrine/instantiator/tree/1.4.0" - }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", - "type": "tidelift" - } - ], - "time": "2020-11-10T18:47:58+00:00" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", + "support": { + "issues": "https://github.com/phar-io/manifest/issues", + "source": "https://github.com/phar-io/manifest/tree/2.0.4" + }, + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2024-03-03T12:33:53+00:00" + }, + { + "name": "phar-io/version", + "version": "3.2.1", + "source": { + "type": "git", + "url": "https://github.com/phar-io/version.git", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" }, { - "name": "myclabs/deep-copy", - "version": "1.10.2", - "source": { - "type": "git", - "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/776f831124e9c62e1a2c601ecc52e776d8bb7220", - "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0" - }, - "replace": { - "myclabs/deep-copy": "self.version" - }, - "require-dev": { - "doctrine/collections": "^1.0", - "doctrine/common": "^2.6", - "phpunit/phpunit": "^7.1" - }, - "type": "library", - "autoload": { - "psr-4": { - "DeepCopy\\": "src/DeepCopy/" - }, - "files": [ - "src/DeepCopy/deep_copy.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Create deep copies (clones) of your objects", - "keywords": [ - "clone", - "copy", - "duplicate", - "object", - "object graph" - ], - "support": { - "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.10.2" - }, - "funding": [ - { - "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", - "type": "tidelift" - } - ], - "time": "2020-11-13T09:40:50+00:00" + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" }, { - "name": "nikic/php-parser", - "version": "v4.12.0", - "source": { - "type": "git", - "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "6608f01670c3cc5079e18c1dab1104e002579143" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/6608f01670c3cc5079e18c1dab1104e002579143", - "reference": "6608f01670c3cc5079e18c1dab1104e002579143", - "shasum": "" - }, - "require": { - "ext-tokenizer": "*", - "php": ">=7.0" - }, - "require-dev": { - "ircmaxell/php-yacc": "^0.0.7", - "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" - }, - "bin": [ - "bin/php-parse" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.9-dev" - } - }, - "autoload": { - "psr-4": { - "PhpParser\\": "lib/PhpParser" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Nikita Popov" - } - ], - "description": "A PHP parser written in PHP", - "keywords": [ - "parser", - "php" - ], - "support": { - "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.12.0" - }, - "time": "2021-07-21T10:44:31+00:00" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Library for handling version information and constraints", + "support": { + "issues": "https://github.com/phar-io/version/issues", + "source": "https://github.com/phar-io/version/tree/3.2.1" + }, + "time": "2022-02-21T01:04:05+00:00" + }, + { + "name": "phpstan/phpdoc-parser", + "version": "0.4.9", + "source": { + "type": "git", + "url": "https://github.com/phpstan/phpdoc-parser.git", + "reference": "98a088b17966bdf6ee25c8a4b634df313d8aa531" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/98a088b17966bdf6ee25c8a4b634df313d8aa531", + "reference": "98a088b17966bdf6ee25c8a4b634df313d8aa531", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "consistence/coding-standard": "^3.5", + "ergebnis/composer-normalize": "^2.0.2", + "jakub-onderka/php-parallel-lint": "^0.9.2", + "phing/phing": "^2.16.0", + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^0.12.26", + "phpstan/phpstan-strict-rules": "^0.12", + "phpunit/phpunit": "^6.3", + "slevomat/coding-standard": "^4.7.2", + "symfony/process": "^4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "0.4-dev" + } + }, + "autoload": { + "psr-4": { + "PHPStan\\PhpDocParser\\": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "PHPDoc parser with support for nullable, intersection and generic types", + "support": { + "issues": "https://github.com/phpstan/phpdoc-parser/issues", + "source": "https://github.com/phpstan/phpdoc-parser/tree/master" + }, + "time": "2020-08-03T20:32:43+00:00" + }, + { + "name": "phpstan/phpstan", + "version": "0.12.100", + "source": { + "type": "git", + "url": "https://github.com/phpstan/phpstan.git", + "reference": "48236ddf823547081b2b153d1cd2994b784328c3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/48236ddf823547081b2b153d1cd2994b784328c3", + "reference": "48236ddf823547081b2b153d1cd2994b784328c3", + "shasum": "" + }, + "require": { + "php": "^7.1|^8.0" + }, + "conflict": { + "phpstan/phpstan-shim": "*" + }, + "bin": [ + "phpstan", + "phpstan.phar" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "0.12-dev" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "PHPStan - PHP Static Analysis Tool", + "support": { + "issues": "https://github.com/phpstan/phpstan/issues", + "source": "https://github.com/phpstan/phpstan/tree/0.12.100" + }, + "funding": [ + { + "url": "https://github.com/ondrejmirtes", + "type": "github" }, { - "name": "phar-io/manifest", - "version": "2.0.3", - "source": { - "type": "git", - "url": "https://github.com/phar-io/manifest.git", - "reference": "97803eca37d319dfa7826cc2437fc020857acb53" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phar-io/manifest/zipball/97803eca37d319dfa7826cc2437fc020857acb53", - "reference": "97803eca37d319dfa7826cc2437fc020857acb53", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-phar": "*", - "ext-xmlwriter": "*", - "phar-io/version": "^3.0.1", - "php": "^7.2 || ^8.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - }, - { - "name": "Sebastian Heuer", - "email": "sebastian@phpeople.de", - "role": "Developer" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "Developer" - } - ], - "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", - "support": { - "issues": "https://github.com/phar-io/manifest/issues", - "source": "https://github.com/phar-io/manifest/tree/2.0.3" - }, - "time": "2021-07-20T11:28:43+00:00" + "url": "https://github.com/phpstan", + "type": "github" }, { - "name": "phar-io/version", - "version": "3.1.0", - "source": { - "type": "git", - "url": "https://github.com/phar-io/version.git", - "reference": "bae7c545bef187884426f042434e561ab1ddb182" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phar-io/version/zipball/bae7c545bef187884426f042434e561ab1ddb182", - "reference": "bae7c545bef187884426f042434e561ab1ddb182", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - }, - { - "name": "Sebastian Heuer", - "email": "sebastian@phpeople.de", - "role": "Developer" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "Developer" - } - ], - "description": "Library for handling version information and constraints", - "support": { - "issues": "https://github.com/phar-io/version/issues", - "source": "https://github.com/phar-io/version/tree/3.1.0" - }, - "time": "2021-02-23T14:00:09+00:00" + "url": "https://tidelift.com/funding/github/packagist/phpstan/phpstan", + "type": "tidelift" + } + ], + "time": "2022-11-01T09:52:08+00:00" + }, + { + "name": "phpstan/phpstan-deprecation-rules", + "version": "0.12.6", + "source": { + "type": "git", + "url": "https://github.com/phpstan/phpstan-deprecation-rules.git", + "reference": "46dbd43c2db973d2876d6653e53f5c2cc3a01fbb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpstan/phpstan-deprecation-rules/zipball/46dbd43c2db973d2876d6653e53f5c2cc3a01fbb", + "reference": "46dbd43c2db973d2876d6653e53f5c2cc3a01fbb", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0", + "phpstan/phpstan": "^0.12.60" + }, + "require-dev": { + "phing/phing": "^2.16.3", + "php-parallel-lint/php-parallel-lint": "^1.2", + "phpstan/phpstan-phpunit": "^0.12", + "phpunit/phpunit": "^7.5.20" + }, + "type": "phpstan-extension", + "extra": { + "phpstan": { + "includes": [ + "rules.neon" + ] + }, + "branch-alias": { + "dev-master": "0.12-dev" + } + }, + "autoload": { + "psr-4": { + "PHPStan\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "PHPStan rules for detecting usage of deprecated classes, methods, properties, constants and traits.", + "support": { + "issues": "https://github.com/phpstan/phpstan-deprecation-rules/issues", + "source": "https://github.com/phpstan/phpstan-deprecation-rules/tree/0.12.6" + }, + "time": "2020-12-13T10:20:54+00:00" + }, + { + "name": "phpstan/phpstan-phpunit", + "version": "0.12.22", + "source": { + "type": "git", + "url": "https://github.com/phpstan/phpstan-phpunit.git", + "reference": "7c01ef93bf128b4ac8bdad38c54b2a4fd6b0b3cc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpstan/phpstan-phpunit/zipball/7c01ef93bf128b4ac8bdad38c54b2a4fd6b0b3cc", + "reference": "7c01ef93bf128b4ac8bdad38c54b2a4fd6b0b3cc", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0", + "phpstan/phpstan": "^0.12.92" + }, + "conflict": { + "phpunit/phpunit": "<7.0" + }, + "require-dev": { + "php-parallel-lint/php-parallel-lint": "^1.2", + "phpstan/phpstan-strict-rules": "^0.12.6", + "phpunit/phpunit": "^9.5" + }, + "type": "phpstan-extension", + "extra": { + "phpstan": { + "includes": [ + "extension.neon", + "rules.neon" + ] }, + "branch-alias": { + "dev-master": "0.12-dev" + } + }, + "autoload": { + "psr-4": { + "PHPStan\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "PHPUnit extensions and rules for PHPStan", + "support": { + "issues": "https://github.com/phpstan/phpstan-phpunit/issues", + "source": "https://github.com/phpstan/phpstan-phpunit/tree/0.12.22" + }, + "time": "2021-08-12T10:53:43+00:00" + }, + { + "name": "phpunit/php-code-coverage", + "version": "11.0.11", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "4f7722aa9a7b76aa775e2d9d4e95d1ea16eeeef4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/4f7722aa9a7b76aa775e2d9d4e95d1ea16eeeef4", + "reference": "4f7722aa9a7b76aa775e2d9d4e95d1ea16eeeef4", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "ext-xmlwriter": "*", + "nikic/php-parser": "^5.4.0", + "php": ">=8.2", + "phpunit/php-file-iterator": "^5.1.0", + "phpunit/php-text-template": "^4.0.1", + "sebastian/code-unit-reverse-lookup": "^4.0.1", + "sebastian/complexity": "^4.0.1", + "sebastian/environment": "^7.2.0", + "sebastian/lines-of-code": "^3.0.1", + "sebastian/version": "^5.0.2", + "theseer/tokenizer": "^1.2.3" + }, + "require-dev": { + "phpunit/phpunit": "^11.5.2" + }, + "suggest": { + "ext-pcov": "PHP extension that provides line coverage", + "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "11.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ { - "name": "phpdocumentor/reflection-common", - "version": "2.2.0", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionCommon.git", - "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", - "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-2.x": "2.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jaap van Otterdijk", - "email": "opensource@ijaap.nl" - } - ], - "description": "Common reflection classes used by phpdocumentor to reflect the code structure", - "homepage": "http://www.phpdoc.org", - "keywords": [ - "FQSEN", - "phpDocumentor", - "phpdoc", - "reflection", - "static analysis" - ], - "support": { - "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues", - "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x" - }, - "time": "2020-06-27T09:03:43+00:00" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", + "homepage": "https://github.com/sebastianbergmann/php-code-coverage", + "keywords": [ + "coverage", + "testing", + "xunit" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", + "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/11.0.11" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" }, { - "name": "phpdocumentor/reflection-docblock", - "version": "5.2.2", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/069a785b2141f5bcf49f3e353548dc1cce6df556", - "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556", - "shasum": "" - }, - "require": { - "ext-filter": "*", - "php": "^7.2 || ^8.0", - "phpdocumentor/reflection-common": "^2.2", - "phpdocumentor/type-resolver": "^1.3", - "webmozart/assert": "^1.9.1" - }, - "require-dev": { - "mockery/mockery": "~1.3.2" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" - }, - { - "name": "Jaap van Otterdijk", - "email": "account@ijaap.nl" - } - ], - "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", - "support": { - "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", - "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/master" - }, - "time": "2020-09-03T19:13:55+00:00" + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" }, { - "name": "phpdocumentor/type-resolver", - "version": "1.4.0", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0", - "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0", - "phpdocumentor/reflection-common": "^2.0" - }, - "require-dev": { - "ext-tokenizer": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-1.x": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" - } - ], - "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", - "support": { - "issues": "https://github.com/phpDocumentor/TypeResolver/issues", - "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.4.0" - }, - "time": "2020-09-17T18:55:26+00:00" + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" }, { - "name": "phpspec/prophecy", - "version": "1.13.0", - "source": { - "type": "git", - "url": "https://github.com/phpspec/prophecy.git", - "reference": "be1996ed8adc35c3fd795488a653f4b518be70ea" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/be1996ed8adc35c3fd795488a653f4b518be70ea", - "reference": "be1996ed8adc35c3fd795488a653f4b518be70ea", - "shasum": "" - }, - "require": { - "doctrine/instantiator": "^1.2", - "php": "^7.2 || ~8.0, <8.1", - "phpdocumentor/reflection-docblock": "^5.2", - "sebastian/comparator": "^3.0 || ^4.0", - "sebastian/recursion-context": "^3.0 || ^4.0" - }, - "require-dev": { - "phpspec/phpspec": "^6.0", - "phpunit/phpunit": "^8.0 || ^9.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.11.x-dev" - } - }, - "autoload": { - "psr-4": { - "Prophecy\\": "src/Prophecy" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Konstantin Kudryashov", - "email": "ever.zet@gmail.com", - "homepage": "http://everzet.com" - }, - { - "name": "Marcello Duarte", - "email": "marcello.duarte@gmail.com" - } - ], - "description": "Highly opinionated mocking framework for PHP 5.3+", - "homepage": "https://github.com/phpspec/prophecy", - "keywords": [ - "Double", - "Dummy", - "fake", - "mock", - "spy", - "stub" - ], - "support": { - "issues": "https://github.com/phpspec/prophecy/issues", - "source": "https://github.com/phpspec/prophecy/tree/1.13.0" - }, - "time": "2021-03-17T13:42:18+00:00" + "url": "https://tidelift.com/funding/github/packagist/phpunit/php-code-coverage", + "type": "tidelift" + } + ], + "time": "2025-08-27T14:37:49+00:00" + }, + { + "name": "phpunit/php-file-iterator", + "version": "5.1.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "118cfaaa8bc5aef3287bf315b6060b1174754af6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/118cfaaa8bc5aef3287bf315b6060b1174754af6", + "reference": "118cfaaa8bc5aef3287bf315b6060b1174754af6", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "FilterIterator implementation that filters files based on a list of suffixes.", + "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", + "keywords": [ + "filesystem", + "iterator" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", + "security": "https://github.com/sebastianbergmann/php-file-iterator/security/policy", + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/5.1.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-08-27T05:02:59+00:00" + }, + { + "name": "phpunit/php-invoker", + "version": "5.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-invoker.git", + "reference": "c1ca3814734c07492b3d4c5f794f4b0995333da2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/c1ca3814734c07492b3d4c5f794f4b0995333da2", + "reference": "c1ca3814734c07492b3d4c5f794f4b0995333da2", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "ext-pcntl": "*", + "phpunit/phpunit": "^11.0" + }, + "suggest": { + "ext-pcntl": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Invoke callables with a timeout", + "homepage": "https://github.com/sebastianbergmann/php-invoker/", + "keywords": [ + "process" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-invoker/issues", + "security": "https://github.com/sebastianbergmann/php-invoker/security/policy", + "source": "https://github.com/sebastianbergmann/php-invoker/tree/5.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-07-03T05:07:44+00:00" + }, + { + "name": "phpunit/php-text-template", + "version": "4.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "3e0404dc6b300e6bf56415467ebcb3fe4f33e964" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/3e0404dc6b300e6bf56415467ebcb3fe4f33e964", + "reference": "3e0404dc6b300e6bf56415467ebcb3fe4f33e964", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "keywords": [ + "template" + ], + "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/4.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-07-03T05:08:43+00:00" + }, + { + "name": "phpunit/php-timer", + "version": "7.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "3b415def83fbcb41f991d9ebf16ae4ad8b7837b3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3b415def83fbcb41f991d9ebf16ae4ad8b7837b3", + "reference": "3b415def83fbcb41f991d9ebf16ae4ad8b7837b3", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "7.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", + "keywords": [ + "timer" + ], + "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/7.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-07-03T05:09:35+00:00" + }, + { + "name": "phpunit/phpunit", + "version": "11.5.44", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "c346885c95423eda3f65d85a194aaa24873cda82" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/c346885c95423eda3f65d85a194aaa24873cda82", + "reference": "c346885c95423eda3f65d85a194aaa24873cda82", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-xml": "*", + "ext-xmlwriter": "*", + "myclabs/deep-copy": "^1.13.4", + "phar-io/manifest": "^2.0.4", + "phar-io/version": "^3.2.1", + "php": ">=8.2", + "phpunit/php-code-coverage": "^11.0.11", + "phpunit/php-file-iterator": "^5.1.0", + "phpunit/php-invoker": "^5.0.1", + "phpunit/php-text-template": "^4.0.1", + "phpunit/php-timer": "^7.0.1", + "sebastian/cli-parser": "^3.0.2", + "sebastian/code-unit": "^3.0.3", + "sebastian/comparator": "^6.3.2", + "sebastian/diff": "^6.0.2", + "sebastian/environment": "^7.2.1", + "sebastian/exporter": "^6.3.2", + "sebastian/global-state": "^7.0.2", + "sebastian/object-enumerator": "^6.0.1", + "sebastian/type": "^5.1.3", + "sebastian/version": "^5.0.2", + "staabm/side-effects-detector": "^1.0.5" + }, + "suggest": { + "ext-soap": "To be able to generate mocks based on WSDL files" + }, + "bin": [ + "phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "11.5-dev" + } + }, + "autoload": { + "files": [ + "src/Framework/Assert/Functions.php" + ], + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "The PHP Unit Testing framework.", + "homepage": "https://phpunit.de/", + "keywords": [ + "phpunit", + "testing", + "xunit" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/phpunit/issues", + "security": "https://github.com/sebastianbergmann/phpunit/security/policy", + "source": "https://github.com/sebastianbergmann/phpunit/tree/11.5.44" + }, + "funding": [ + { + "url": "https://phpunit.de/sponsors.html", + "type": "custom" + }, + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", + "type": "tidelift" + } + ], + "time": "2025-11-13T07:17:35+00:00" + }, + { + "name": "sebastian/cli-parser", + "version": "3.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/cli-parser.git", + "reference": "15c5dd40dc4f38794d383bb95465193f5e0ae180" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/15c5dd40dc4f38794d383bb95465193f5e0ae180", + "reference": "15c5dd40dc4f38794d383bb95465193f5e0ae180", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for parsing CLI options", + "homepage": "https://github.com/sebastianbergmann/cli-parser", + "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/3.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-07-03T04:41:36+00:00" + }, + { + "name": "sebastian/code-unit", + "version": "3.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit.git", + "reference": "54391c61e4af8078e5b276ab082b6d3c54c9ad64" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/54391c61e4af8078e5b276ab082b6d3c54c9ad64", + "reference": "54391c61e4af8078e5b276ab082b6d3c54c9ad64", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Collection of value objects that represent the PHP code units", + "homepage": "https://github.com/sebastianbergmann/code-unit", + "support": { + "issues": "https://github.com/sebastianbergmann/code-unit/issues", + "security": "https://github.com/sebastianbergmann/code-unit/security/policy", + "source": "https://github.com/sebastianbergmann/code-unit/tree/3.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2025-03-19T07:56:08+00:00" + }, + { + "name": "sebastian/code-unit-reverse-lookup", + "version": "4.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", + "reference": "183a9b2632194febd219bb9246eee421dad8d45e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/183a9b2632194febd219bb9246eee421dad8d45e", + "reference": "183a9b2632194febd219bb9246eee421dad8d45e", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Looks up which function or method a line of code belongs to", + "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", + "support": { + "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", + "security": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/security/policy", + "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/4.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-07-03T04:45:54+00:00" + }, + { + "name": "sebastian/comparator", + "version": "6.3.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "85c77556683e6eee4323e4c5468641ca0237e2e8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/85c77556683e6eee4323e4c5468641ca0237e2e8", + "reference": "85c77556683e6eee4323e4c5468641ca0237e2e8", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-mbstring": "*", + "php": ">=8.2", + "sebastian/diff": "^6.0", + "sebastian/exporter": "^6.0" + }, + "require-dev": { + "phpunit/phpunit": "^11.4" + }, + "suggest": { + "ext-bcmath": "For comparing BcMath\\Number objects" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "6.3-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" }, { - "name": "phpstan/phpdoc-parser", - "version": "0.4.9", - "source": { - "type": "git", - "url": "https://github.com/phpstan/phpdoc-parser.git", - "reference": "98a088b17966bdf6ee25c8a4b634df313d8aa531" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/98a088b17966bdf6ee25c8a4b634df313d8aa531", - "reference": "98a088b17966bdf6ee25c8a4b634df313d8aa531", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0" - }, - "require-dev": { - "consistence/coding-standard": "^3.5", - "ergebnis/composer-normalize": "^2.0.2", - "jakub-onderka/php-parallel-lint": "^0.9.2", - "phing/phing": "^2.16.0", - "phpstan/extension-installer": "^1.0", - "phpstan/phpstan": "^0.12.26", - "phpstan/phpstan-strict-rules": "^0.12", - "phpunit/phpunit": "^6.3", - "slevomat/coding-standard": "^4.7.2", - "symfony/process": "^4.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "0.4-dev" - } - }, - "autoload": { - "psr-4": { - "PHPStan\\PhpDocParser\\": [ - "src/" - ] - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "PHPDoc parser with support for nullable, intersection and generic types", - "support": { - "issues": "https://github.com/phpstan/phpdoc-parser/issues", - "source": "https://github.com/phpstan/phpdoc-parser/tree/master" - }, - "time": "2020-08-03T20:32:43+00:00" + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" }, { - "name": "phpstan/phpstan", - "version": "0.12.94", - "source": { - "type": "git", - "url": "https://github.com/phpstan/phpstan.git", - "reference": "3d0ba4c198a24e3c3fc489f3ec6ac9612c4be5d6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/3d0ba4c198a24e3c3fc489f3ec6ac9612c4be5d6", - "reference": "3d0ba4c198a24e3c3fc489f3ec6ac9612c4be5d6", - "shasum": "" - }, - "require": { - "php": "^7.1|^8.0" - }, - "conflict": { - "phpstan/phpstan-shim": "*" - }, - "bin": [ - "phpstan", - "phpstan.phar" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "0.12-dev" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "PHPStan - PHP Static Analysis Tool", - "support": { - "issues": "https://github.com/phpstan/phpstan/issues", - "source": "https://github.com/phpstan/phpstan/tree/0.12.94" - }, - "funding": [ - { - "url": "https://github.com/ondrejmirtes", - "type": "github" - }, - { - "url": "https://github.com/phpstan", - "type": "github" - }, - { - "url": "https://www.patreon.com/phpstan", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/phpstan/phpstan", - "type": "tidelift" - } - ], - "time": "2021-07-30T09:05:27+00:00" + "name": "Volker Dusch", + "email": "github@wallbash.com" }, { - "name": "phpstan/phpstan-deprecation-rules", - "version": "0.12.6", - "source": { - "type": "git", - "url": "https://github.com/phpstan/phpstan-deprecation-rules.git", - "reference": "46dbd43c2db973d2876d6653e53f5c2cc3a01fbb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan-deprecation-rules/zipball/46dbd43c2db973d2876d6653e53f5c2cc3a01fbb", - "reference": "46dbd43c2db973d2876d6653e53f5c2cc3a01fbb", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0", - "phpstan/phpstan": "^0.12.60" - }, - "require-dev": { - "phing/phing": "^2.16.3", - "php-parallel-lint/php-parallel-lint": "^1.2", - "phpstan/phpstan-phpunit": "^0.12", - "phpunit/phpunit": "^7.5.20" - }, - "type": "phpstan-extension", - "extra": { - "branch-alias": { - "dev-master": "0.12-dev" - }, - "phpstan": { - "includes": [ - "rules.neon" - ] - } - }, - "autoload": { - "psr-4": { - "PHPStan\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "PHPStan rules for detecting usage of deprecated classes, methods, properties, constants and traits.", - "support": { - "issues": "https://github.com/phpstan/phpstan-deprecation-rules/issues", - "source": "https://github.com/phpstan/phpstan-deprecation-rules/tree/0.12.6" - }, - "time": "2020-12-13T10:20:54+00:00" + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + } + ], + "description": "Provides the functionality to compare PHP values for equality", + "homepage": "https://github.com/sebastianbergmann/comparator", + "keywords": [ + "comparator", + "compare", + "equality" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/comparator/issues", + "security": "https://github.com/sebastianbergmann/comparator/security/policy", + "source": "https://github.com/sebastianbergmann/comparator/tree/6.3.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" }, { - "name": "phpstan/phpstan-phpunit", - "version": "0.12.21", - "source": { - "type": "git", - "url": "https://github.com/phpstan/phpstan-phpunit.git", - "reference": "6aaff1196c4f808769774b49a94a60e5fdf18de7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan-phpunit/zipball/6aaff1196c4f808769774b49a94a60e5fdf18de7", - "reference": "6aaff1196c4f808769774b49a94a60e5fdf18de7", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0", - "phpstan/phpstan": "^0.12.86" - }, - "conflict": { - "phpunit/phpunit": "<7.0" - }, - "require-dev": { - "php-parallel-lint/php-parallel-lint": "^1.2", - "phpstan/phpstan-strict-rules": "^0.12.6", - "phpunit/phpunit": "^9.5" - }, - "type": "phpstan-extension", - "extra": { - "branch-alias": { - "dev-master": "0.12-dev" - }, - "phpstan": { - "includes": [ - "extension.neon", - "rules.neon" - ] - } - }, - "autoload": { - "psr-4": { - "PHPStan\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "PHPUnit extensions and rules for PHPStan", - "support": { - "issues": "https://github.com/phpstan/phpstan-phpunit/issues", - "source": "https://github.com/phpstan/phpstan-phpunit/tree/0.12.21" - }, - "time": "2021-07-14T10:48:30+00:00" + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" }, { - "name": "phpunit/php-code-coverage", - "version": "9.2.6", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "f6293e1b30a2354e8428e004689671b83871edde" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/f6293e1b30a2354e8428e004689671b83871edde", - "reference": "f6293e1b30a2354e8428e004689671b83871edde", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-libxml": "*", - "ext-xmlwriter": "*", - "nikic/php-parser": "^4.10.2", - "php": ">=7.3", - "phpunit/php-file-iterator": "^3.0.3", - "phpunit/php-text-template": "^2.0.2", - "sebastian/code-unit-reverse-lookup": "^2.0.2", - "sebastian/complexity": "^2.0", - "sebastian/environment": "^5.1.2", - "sebastian/lines-of-code": "^1.0.3", - "sebastian/version": "^3.0.1", - "theseer/tokenizer": "^1.2.0" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-pcov": "*", - "ext-xdebug": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "9.2-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", - "homepage": "https://github.com/sebastianbergmann/php-code-coverage", - "keywords": [ - "coverage", - "testing", - "xunit" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.6" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2021-03-28T07:26:59+00:00" + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" }, { - "name": "phpunit/php-file-iterator", - "version": "3.0.5", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "aa4be8575f26070b100fccb67faabb28f21f66f8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/aa4be8575f26070b100fccb67faabb28f21f66f8", - "reference": "aa4be8575f26070b100fccb67faabb28f21f66f8", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "FilterIterator implementation that filters files based on a list of suffixes.", - "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", - "keywords": [ - "filesystem", - "iterator" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", - "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.5" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T05:57:25+00:00" + "url": "https://tidelift.com/funding/github/packagist/sebastian/comparator", + "type": "tidelift" + } + ], + "time": "2025-08-10T08:07:46+00:00" + }, + { + "name": "sebastian/complexity", + "version": "4.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/complexity.git", + "reference": "ee41d384ab1906c68852636b6de493846e13e5a0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/ee41d384ab1906c68852636b6de493846e13e5a0", + "reference": "ee41d384ab1906c68852636b6de493846e13e5a0", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^5.0", + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for calculating the complexity of PHP code units", + "homepage": "https://github.com/sebastianbergmann/complexity", + "support": { + "issues": "https://github.com/sebastianbergmann/complexity/issues", + "security": "https://github.com/sebastianbergmann/complexity/security/policy", + "source": "https://github.com/sebastianbergmann/complexity/tree/4.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-07-03T04:49:50+00:00" + }, + { + "name": "sebastian/diff", + "version": "6.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "b4ccd857127db5d41a5b676f24b51371d76d8544" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/b4ccd857127db5d41a5b676f24b51371d76d8544", + "reference": "b4ccd857127db5d41a5b676f24b51371d76d8544", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.0", + "symfony/process": "^4.2 || ^5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "6.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" }, { - "name": "phpunit/php-invoker", - "version": "3.1.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-invoker.git", - "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67", - "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "ext-pcntl": "*", - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-pcntl": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.1-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Invoke callables with a timeout", - "homepage": "https://github.com/sebastianbergmann/php-invoker/", - "keywords": [ - "process" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-invoker/issues", - "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T05:58:55+00:00" + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" + } + ], + "description": "Diff implementation", + "homepage": "https://github.com/sebastianbergmann/diff", + "keywords": [ + "diff", + "udiff", + "unidiff", + "unified diff" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/diff/issues", + "security": "https://github.com/sebastianbergmann/diff/security/policy", + "source": "https://github.com/sebastianbergmann/diff/tree/6.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-07-03T04:53:05+00:00" + }, + { + "name": "sebastian/environment", + "version": "7.2.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "a5c75038693ad2e8d4b6c15ba2403532647830c4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/a5c75038693ad2e8d4b6c15ba2403532647830c4", + "reference": "a5c75038693ad2e8d4b6c15ba2403532647830c4", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.3" + }, + "suggest": { + "ext-posix": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "7.2-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides functionality to handle HHVM/PHP environments", + "homepage": "https://github.com/sebastianbergmann/environment", + "keywords": [ + "Xdebug", + "environment", + "hhvm" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/environment/issues", + "security": "https://github.com/sebastianbergmann/environment/security/policy", + "source": "https://github.com/sebastianbergmann/environment/tree/7.2.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" }, { - "name": "phpunit/php-text-template", - "version": "2.0.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", - "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Simple template engine.", - "homepage": "https://github.com/sebastianbergmann/php-text-template/", - "keywords": [ - "template" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-text-template/issues", - "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T05:33:50+00:00" + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" }, { - "name": "phpunit/php-timer", - "version": "5.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", - "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Utility class for timing", - "homepage": "https://github.com/sebastianbergmann/php-timer/", - "keywords": [ - "timer" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-timer/issues", - "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:16:10+00:00" + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" }, { - "name": "phpunit/phpunit", - "version": "9.5.8", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "191768ccd5c85513b4068bdbe99bb6390c7d54fb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/191768ccd5c85513b4068bdbe99bb6390c7d54fb", - "reference": "191768ccd5c85513b4068bdbe99bb6390c7d54fb", - "shasum": "" - }, - "require": { - "doctrine/instantiator": "^1.3.1", - "ext-dom": "*", - "ext-json": "*", - "ext-libxml": "*", - "ext-mbstring": "*", - "ext-xml": "*", - "ext-xmlwriter": "*", - "myclabs/deep-copy": "^1.10.1", - "phar-io/manifest": "^2.0.3", - "phar-io/version": "^3.0.2", - "php": ">=7.3", - "phpspec/prophecy": "^1.12.1", - "phpunit/php-code-coverage": "^9.2.3", - "phpunit/php-file-iterator": "^3.0.5", - "phpunit/php-invoker": "^3.1.1", - "phpunit/php-text-template": "^2.0.3", - "phpunit/php-timer": "^5.0.2", - "sebastian/cli-parser": "^1.0.1", - "sebastian/code-unit": "^1.0.6", - "sebastian/comparator": "^4.0.5", - "sebastian/diff": "^4.0.3", - "sebastian/environment": "^5.1.3", - "sebastian/exporter": "^4.0.3", - "sebastian/global-state": "^5.0.1", - "sebastian/object-enumerator": "^4.0.3", - "sebastian/resource-operations": "^3.0.3", - "sebastian/type": "^2.3.4", - "sebastian/version": "^3.0.2" - }, - "require-dev": { - "ext-pdo": "*", - "phpspec/prophecy-phpunit": "^2.0.1" - }, - "suggest": { - "ext-soap": "*", - "ext-xdebug": "*" - }, - "bin": [ - "phpunit" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "9.5-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ], - "files": [ - "src/Framework/Assert/Functions.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "The PHP Unit Testing framework.", - "homepage": "https://phpunit.de/", - "keywords": [ - "phpunit", - "testing", - "xunit" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.8" - }, - "funding": [ - { - "url": "https://phpunit.de/donate.html", - "type": "custom" - }, - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2021-07-31T15:17:34+00:00" + "url": "https://tidelift.com/funding/github/packagist/sebastian/environment", + "type": "tidelift" + } + ], + "time": "2025-05-21T11:55:47+00:00" + }, + { + "name": "sebastian/exporter", + "version": "6.3.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "70a298763b40b213ec087c51c739efcaa90bcd74" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/70a298763b40b213ec087c51c739efcaa90bcd74", + "reference": "70a298763b40b213ec087c51c739efcaa90bcd74", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": ">=8.2", + "sebastian/recursion-context": "^6.0" + }, + "require-dev": { + "phpunit/phpunit": "^11.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "6.3-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" }, { - "name": "sebastian/cli-parser", - "version": "1.0.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/cli-parser.git", - "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/442e7c7e687e42adc03470c7b668bc4b2402c0b2", - "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library for parsing CLI options", - "homepage": "https://github.com/sebastianbergmann/cli-parser", - "support": { - "issues": "https://github.com/sebastianbergmann/cli-parser/issues", - "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T06:08:49+00:00" + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" }, { - "name": "sebastian/code-unit", - "version": "1.0.8", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/code-unit.git", - "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120", - "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Collection of value objects that represent the PHP code units", - "homepage": "https://github.com/sebastianbergmann/code-unit", - "support": { - "issues": "https://github.com/sebastianbergmann/code-unit/issues", - "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:08:54+00:00" + "name": "Volker Dusch", + "email": "github@wallbash.com" }, { - "name": "sebastian/code-unit-reverse-lookup", - "version": "2.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", - "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", - "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Looks up which function or method a line of code belongs to", - "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", - "support": { - "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", - "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T05:30:19+00:00" + "name": "Adam Harvey", + "email": "aharvey@php.net" }, { - "name": "sebastian/comparator", - "version": "4.0.6", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "55f4261989e546dc112258c7a75935a81a7ce382" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/55f4261989e546dc112258c7a75935a81a7ce382", - "reference": "55f4261989e546dc112258c7a75935a81a7ce382", - "shasum": "" - }, - "require": { - "php": ">=7.3", - "sebastian/diff": "^4.0", - "sebastian/exporter": "^4.0" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@2bepublished.at" - } - ], - "description": "Provides the functionality to compare PHP values for equality", - "homepage": "https://github.com/sebastianbergmann/comparator", - "keywords": [ - "comparator", - "compare", - "equality" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/comparator/issues", - "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.6" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T15:49:45+00:00" + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Provides the functionality to export PHP variables for visualization", + "homepage": "https://www.github.com/sebastianbergmann/exporter", + "keywords": [ + "export", + "exporter" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/exporter/issues", + "security": "https://github.com/sebastianbergmann/exporter/security/policy", + "source": "https://github.com/sebastianbergmann/exporter/tree/6.3.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" }, { - "name": "sebastian/complexity", - "version": "2.0.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/complexity.git", - "reference": "739b35e53379900cc9ac327b2147867b8b6efd88" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/739b35e53379900cc9ac327b2147867b8b6efd88", - "reference": "739b35e53379900cc9ac327b2147867b8b6efd88", - "shasum": "" - }, - "require": { - "nikic/php-parser": "^4.7", - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library for calculating the complexity of PHP code units", - "homepage": "https://github.com/sebastianbergmann/complexity", - "support": { - "issues": "https://github.com/sebastianbergmann/complexity/issues", - "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.2" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T15:52:27+00:00" + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" }, { - "name": "sebastian/diff", - "version": "4.0.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/3461e3fccc7cfdfc2720be910d3bd73c69be590d", - "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3", - "symfony/process": "^4.2 || ^5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Kore Nordmann", - "email": "mail@kore-nordmann.de" - } - ], - "description": "Diff implementation", - "homepage": "https://github.com/sebastianbergmann/diff", - "keywords": [ - "diff", - "udiff", - "unidiff", - "unified diff" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/diff/issues", - "source": "https://github.com/sebastianbergmann/diff/tree/4.0.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:10:38+00:00" + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" }, { - "name": "sebastian/environment", - "version": "5.1.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "388b6ced16caa751030f6a69e588299fa09200ac" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/388b6ced16caa751030f6a69e588299fa09200ac", - "reference": "388b6ced16caa751030f6a69e588299fa09200ac", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-posix": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.1-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Provides functionality to handle HHVM/PHP environments", - "homepage": "http://www.github.com/sebastianbergmann/environment", - "keywords": [ - "Xdebug", - "environment", - "hhvm" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/environment/issues", - "source": "https://github.com/sebastianbergmann/environment/tree/5.1.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T05:52:38+00:00" + "url": "https://tidelift.com/funding/github/packagist/sebastian/exporter", + "type": "tidelift" + } + ], + "time": "2025-09-24T06:12:51+00:00" + }, + { + "name": "sebastian/global-state", + "version": "7.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "3be331570a721f9a4b5917f4209773de17f747d7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/3be331570a721f9a4b5917f4209773de17f747d7", + "reference": "3be331570a721f9a4b5917f4209773de17f747d7", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "sebastian/object-reflector": "^4.0", + "sebastian/recursion-context": "^6.0" + }, + "require-dev": { + "ext-dom": "*", + "phpunit/phpunit": "^11.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "7.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Snapshotting of global state", + "homepage": "https://www.github.com/sebastianbergmann/global-state", + "keywords": [ + "global state" + ], + "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/7.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-07-03T04:57:36+00:00" + }, + { + "name": "sebastian/lines-of-code", + "version": "3.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/lines-of-code.git", + "reference": "d36ad0d782e5756913e42ad87cb2890f4ffe467a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/d36ad0d782e5756913e42ad87cb2890f4ffe467a", + "reference": "d36ad0d782e5756913e42ad87cb2890f4ffe467a", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^5.0", + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for counting the lines of code in PHP source code", + "homepage": "https://github.com/sebastianbergmann/lines-of-code", + "support": { + "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", + "security": "https://github.com/sebastianbergmann/lines-of-code/security/policy", + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/3.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-07-03T04:58:38+00:00" + }, + { + "name": "sebastian/object-enumerator", + "version": "6.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-enumerator.git", + "reference": "f5b498e631a74204185071eb41f33f38d64608aa" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/f5b498e631a74204185071eb41f33f38d64608aa", + "reference": "f5b498e631a74204185071eb41f33f38d64608aa", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "sebastian/object-reflector": "^4.0", + "sebastian/recursion-context": "^6.0" + }, + "require-dev": { + "phpunit/phpunit": "^11.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "6.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Traverses array structures and object graphs to enumerate all referenced objects", + "homepage": "https://github.com/sebastianbergmann/object-enumerator/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", + "security": "https://github.com/sebastianbergmann/object-enumerator/security/policy", + "source": "https://github.com/sebastianbergmann/object-enumerator/tree/6.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-07-03T05:00:13+00:00" + }, + { + "name": "sebastian/object-reflector", + "version": "4.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-reflector.git", + "reference": "6e1a43b411b2ad34146dee7524cb13a068bb35f9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/6e1a43b411b2ad34146dee7524cb13a068bb35f9", + "reference": "6e1a43b411b2ad34146dee7524cb13a068bb35f9", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Allows reflection of object attributes, including inherited and non-public ones", + "homepage": "https://github.com/sebastianbergmann/object-reflector/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-reflector/issues", + "security": "https://github.com/sebastianbergmann/object-reflector/security/policy", + "source": "https://github.com/sebastianbergmann/object-reflector/tree/4.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-07-03T05:01:32+00:00" + }, + { + "name": "sebastian/recursion-context", + "version": "6.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "f6458abbf32a6c8174f8f26261475dc133b3d9dc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/f6458abbf32a6c8174f8f26261475dc133b3d9dc", + "reference": "f6458abbf32a6c8174f8f26261475dc133b3d9dc", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "6.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" }, { - "name": "sebastian/exporter", - "version": "4.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "d89cc98761b8cb5a1a235a6b703ae50d34080e65" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/d89cc98761b8cb5a1a235a6b703ae50d34080e65", - "reference": "d89cc98761b8cb5a1a235a6b703ae50d34080e65", - "shasum": "" - }, - "require": { - "php": ">=7.3", - "sebastian/recursion-context": "^4.0" - }, - "require-dev": { - "ext-mbstring": "*", - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Adam Harvey", - "email": "aharvey@php.net" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" - } - ], - "description": "Provides the functionality to export PHP variables for visualization", - "homepage": "http://www.github.com/sebastianbergmann/exporter", - "keywords": [ - "export", - "exporter" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/exporter/issues", - "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T05:24:23+00:00" + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" }, { - "name": "sebastian/global-state", - "version": "5.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "23bd5951f7ff26f12d4e3242864df3e08dec4e49" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/23bd5951f7ff26f12d4e3242864df3e08dec4e49", - "reference": "23bd5951f7ff26f12d4e3242864df3e08dec4e49", - "shasum": "" - }, - "require": { - "php": ">=7.3", - "sebastian/object-reflector": "^2.0", - "sebastian/recursion-context": "^4.0" - }, - "require-dev": { - "ext-dom": "*", - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-uopz": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Snapshotting of global state", - "homepage": "http://www.github.com/sebastianbergmann/global-state", - "keywords": [ - "global state" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/global-state/issues", - "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2021-06-11T13:31:12+00:00" + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides functionality to recursively process PHP variables", + "homepage": "https://github.com/sebastianbergmann/recursion-context", + "support": { + "issues": "https://github.com/sebastianbergmann/recursion-context/issues", + "security": "https://github.com/sebastianbergmann/recursion-context/security/policy", + "source": "https://github.com/sebastianbergmann/recursion-context/tree/6.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" }, { - "name": "sebastian/lines-of-code", - "version": "1.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/lines-of-code.git", - "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/c1c2e997aa3146983ed888ad08b15470a2e22ecc", - "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc", - "shasum": "" - }, - "require": { - "nikic/php-parser": "^4.6", - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library for counting the lines of code in PHP source code", - "homepage": "https://github.com/sebastianbergmann/lines-of-code", - "support": { - "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", - "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-11-28T06:42:11+00:00" + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" }, { - "name": "sebastian/object-enumerator", - "version": "4.0.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "5c9eeac41b290a3712d88851518825ad78f45c71" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71", - "reference": "5c9eeac41b290a3712d88851518825ad78f45c71", - "shasum": "" - }, - "require": { - "php": ">=7.3", - "sebastian/object-reflector": "^2.0", - "sebastian/recursion-context": "^4.0" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Traverses array structures and object graphs to enumerate all referenced objects", - "homepage": "https://github.com/sebastianbergmann/object-enumerator/", - "support": { - "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", - "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:12:34+00:00" + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" }, { - "name": "sebastian/object-reflector", - "version": "2.0.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/object-reflector.git", - "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", - "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Allows reflection of object attributes, including inherited and non-public ones", - "homepage": "https://github.com/sebastianbergmann/object-reflector/", - "support": { - "issues": "https://github.com/sebastianbergmann/object-reflector/issues", - "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:14:26+00:00" + "url": "https://tidelift.com/funding/github/packagist/sebastian/recursion-context", + "type": "tidelift" + } + ], + "time": "2025-08-13T04:42:22+00:00" + }, + { + "name": "sebastian/type", + "version": "5.1.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/type.git", + "reference": "f77d2d4e78738c98d9a68d2596fe5e8fa380f449" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/f77d2d4e78738c98d9a68d2596fe5e8fa380f449", + "reference": "f77d2d4e78738c98d9a68d2596fe5e8fa380f449", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "5.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Collection of value objects that represent the types of the PHP type system", + "homepage": "https://github.com/sebastianbergmann/type", + "support": { + "issues": "https://github.com/sebastianbergmann/type/issues", + "security": "https://github.com/sebastianbergmann/type/security/policy", + "source": "https://github.com/sebastianbergmann/type/tree/5.1.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" }, { - "name": "sebastian/recursion-context", - "version": "4.0.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/cd9d8cf3c5804de4341c283ed787f099f5506172", - "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Adam Harvey", - "email": "aharvey@php.net" - } - ], - "description": "Provides functionality to recursively process PHP variables", - "homepage": "http://www.github.com/sebastianbergmann/recursion-context", - "support": { - "issues": "https://github.com/sebastianbergmann/recursion-context/issues", - "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:17:30+00:00" + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" }, { - "name": "sebastian/resource-operations", - "version": "3.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/resource-operations.git", - "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", - "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Provides a list of PHP built-in functions that operate on resources", - "homepage": "https://www.github.com/sebastianbergmann/resource-operations", - "support": { - "issues": "https://github.com/sebastianbergmann/resource-operations/issues", - "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "abandoned": true, - "time": "2020-09-28T06:45:17+00:00" + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" }, { - "name": "sebastian/type", - "version": "2.3.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/type.git", - "reference": "b8cd8a1c753c90bc1a0f5372170e3e489136f914" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/b8cd8a1c753c90bc1a0f5372170e3e489136f914", - "reference": "b8cd8a1c753c90bc1a0f5372170e3e489136f914", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.3-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Collection of value objects that represent the types of the PHP type system", - "homepage": "https://github.com/sebastianbergmann/type", - "support": { - "issues": "https://github.com/sebastianbergmann/type/issues", - "source": "https://github.com/sebastianbergmann/type/tree/2.3.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2021-06-15T12:49:02+00:00" + "url": "https://tidelift.com/funding/github/packagist/sebastian/type", + "type": "tidelift" + } + ], + "time": "2025-08-09T06:55:48+00:00" + }, + { + "name": "sebastian/version", + "version": "5.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "c687e3387b99f5b03b6caa64c74b63e2936ff874" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c687e3387b99f5b03b6caa64c74b63e2936ff874", + "reference": "c687e3387b99f5b03b6caa64c74b63e2936ff874", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", + "support": { + "issues": "https://github.com/sebastianbergmann/version/issues", + "security": "https://github.com/sebastianbergmann/version/security/policy", + "source": "https://github.com/sebastianbergmann/version/tree/5.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-10-09T05:16:32+00:00" + }, + { + "name": "slevomat/coding-standard", + "version": "6.4.1", + "source": { + "type": "git", + "url": "https://github.com/slevomat/coding-standard.git", + "reference": "696dcca217d0c9da2c40d02731526c1e25b65346" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/slevomat/coding-standard/zipball/696dcca217d0c9da2c40d02731526c1e25b65346", + "reference": "696dcca217d0c9da2c40d02731526c1e25b65346", + "shasum": "" + }, + "require": { + "dealerdirect/phpcodesniffer-composer-installer": "^0.6.2 || ^0.7", + "php": "^7.1 || ^8.0", + "phpstan/phpdoc-parser": "0.4.5 - 0.4.9", + "squizlabs/php_codesniffer": "^3.5.6" + }, + "require-dev": { + "phing/phing": "2.16.3", + "php-parallel-lint/php-parallel-lint": "1.2.0", + "phpstan/phpstan": "0.12.48", + "phpstan/phpstan-deprecation-rules": "0.12.5", + "phpstan/phpstan-phpunit": "0.12.16", + "phpstan/phpstan-strict-rules": "0.12.5", + "phpunit/phpunit": "7.5.20|8.5.5|9.4.0" + }, + "type": "phpcodesniffer-standard", + "extra": { + "branch-alias": { + "dev-master": "6.x-dev" + } + }, + "autoload": { + "psr-4": { + "SlevomatCodingStandard\\": "SlevomatCodingStandard" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Slevomat Coding Standard for PHP_CodeSniffer complements Consistence Coding Standard by providing sniffs with additional checks.", + "support": { + "issues": "https://github.com/slevomat/coding-standard/issues", + "source": "https://github.com/slevomat/coding-standard/tree/6.4.1" + }, + "funding": [ + { + "url": "https://github.com/kukulich", + "type": "github" }, { - "name": "sebastian/version", - "version": "3.0.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/version.git", - "reference": "c6c1022351a901512170118436c764e473f6de8c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c", - "reference": "c6c1022351a901512170118436c764e473f6de8c", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library that helps with managing the version number of Git-hosted PHP projects", - "homepage": "https://github.com/sebastianbergmann/version", - "support": { - "issues": "https://github.com/sebastianbergmann/version/issues", - "source": "https://github.com/sebastianbergmann/version/tree/3.0.2" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T06:39:44+00:00" + "url": "https://tidelift.com/funding/github/packagist/slevomat/coding-standard", + "type": "tidelift" + } + ], + "time": "2020-10-05T12:39:37+00:00" + }, + { + "name": "squizlabs/php_codesniffer", + "version": "3.13.5", + "source": { + "type": "git", + "url": "https://github.com/PHPCSStandards/PHP_CodeSniffer.git", + "reference": "0ca86845ce43291e8f5692c7356fccf3bcf02bf4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/0ca86845ce43291e8f5692c7356fccf3bcf02bf4", + "reference": "0ca86845ce43291e8f5692c7356fccf3bcf02bf4", + "shasum": "" + }, + "require": { + "ext-simplexml": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": ">=5.4.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.3.4" + }, + "bin": [ + "bin/phpcbf", + "bin/phpcs" + ], + "type": "library", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Greg Sherwood", + "role": "Former lead" }, { - "name": "slevomat/coding-standard", - "version": "6.4.1", - "source": { - "type": "git", - "url": "https://github.com/slevomat/coding-standard.git", - "reference": "696dcca217d0c9da2c40d02731526c1e25b65346" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/slevomat/coding-standard/zipball/696dcca217d0c9da2c40d02731526c1e25b65346", - "reference": "696dcca217d0c9da2c40d02731526c1e25b65346", - "shasum": "" - }, - "require": { - "dealerdirect/phpcodesniffer-composer-installer": "^0.6.2 || ^0.7", - "php": "^7.1 || ^8.0", - "phpstan/phpdoc-parser": "0.4.5 - 0.4.9", - "squizlabs/php_codesniffer": "^3.5.6" - }, - "require-dev": { - "phing/phing": "2.16.3", - "php-parallel-lint/php-parallel-lint": "1.2.0", - "phpstan/phpstan": "0.12.48", - "phpstan/phpstan-deprecation-rules": "0.12.5", - "phpstan/phpstan-phpunit": "0.12.16", - "phpstan/phpstan-strict-rules": "0.12.5", - "phpunit/phpunit": "7.5.20|8.5.5|9.4.0" - }, - "type": "phpcodesniffer-standard", - "extra": { - "branch-alias": { - "dev-master": "6.x-dev" - } - }, - "autoload": { - "psr-4": { - "SlevomatCodingStandard\\": "SlevomatCodingStandard" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Slevomat Coding Standard for PHP_CodeSniffer complements Consistence Coding Standard by providing sniffs with additional checks.", - "support": { - "issues": "https://github.com/slevomat/coding-standard/issues", - "source": "https://github.com/slevomat/coding-standard/tree/6.4.1" - }, - "funding": [ - { - "url": "https://github.com/kukulich", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/slevomat/coding-standard", - "type": "tidelift" - } - ], - "time": "2020-10-05T12:39:37+00:00" + "name": "Juliette Reinders Folmer", + "role": "Current lead" }, { - "name": "squizlabs/php_codesniffer", - "version": "3.6.0", - "source": { - "type": "git", - "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", - "reference": "ffced0d2c8fa8e6cdc4d695a743271fab6c38625" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/ffced0d2c8fa8e6cdc4d695a743271fab6c38625", - "reference": "ffced0d2c8fa8e6cdc4d695a743271fab6c38625", - "shasum": "" - }, - "require": { - "ext-simplexml": "*", - "ext-tokenizer": "*", - "ext-xmlwriter": "*", - "php": ">=5.4.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0" - }, - "bin": [ - "bin/phpcs", - "bin/phpcbf" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.x-dev" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Greg Sherwood", - "role": "lead" - } - ], - "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", - "homepage": "https://github.com/squizlabs/PHP_CodeSniffer", - "keywords": [ - "phpcs", - "standards" - ], - "support": { - "issues": "https://github.com/squizlabs/PHP_CodeSniffer/issues", - "source": "https://github.com/squizlabs/PHP_CodeSniffer", - "wiki": "https://github.com/squizlabs/PHP_CodeSniffer/wiki" - }, - "time": "2021-04-09T00:54:41+00:00" + "name": "Contributors", + "homepage": "https://github.com/PHPCSStandards/PHP_CodeSniffer/graphs/contributors" + } + ], + "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", + "homepage": "https://github.com/PHPCSStandards/PHP_CodeSniffer", + "keywords": [ + "phpcs", + "standards", + "static analysis" + ], + "support": { + "issues": "https://github.com/PHPCSStandards/PHP_CodeSniffer/issues", + "security": "https://github.com/PHPCSStandards/PHP_CodeSniffer/security/policy", + "source": "https://github.com/PHPCSStandards/PHP_CodeSniffer", + "wiki": "https://github.com/PHPCSStandards/PHP_CodeSniffer/wiki" + }, + "funding": [ + { + "url": "https://github.com/PHPCSStandards", + "type": "github" }, { - "name": "symfony/polyfill-ctype", - "version": "v1.23.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "46cd95797e9df938fdd2b03693b5fca5e64b01ce" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/46cd95797e9df938fdd2b03693b5fca5e64b01ce", - "reference": "46cd95797e9df938fdd2b03693b5fca5e64b01ce", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "suggest": { - "ext-ctype": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.23-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Ctype\\": "" - }, - "files": [ - "bootstrap.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Gert de Pagter", - "email": "BackEndTea@gmail.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for ctype functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "ctype", - "polyfill", - "portable" - ], - "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.23.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2021-02-19T12:13:01+00:00" + "url": "https://github.com/jrfnl", + "type": "github" }, { - "name": "theseer/tokenizer", - "version": "1.2.1", - "source": { - "type": "git", - "url": "https://github.com/theseer/tokenizer.git", - "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/34a41e998c2183e22995f158c581e7b5e755ab9e", - "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-tokenizer": "*", - "ext-xmlwriter": "*", - "php": "^7.2 || ^8.0" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - } - ], - "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", - "support": { - "issues": "https://github.com/theseer/tokenizer/issues", - "source": "https://github.com/theseer/tokenizer/tree/1.2.1" - }, - "funding": [ - { - "url": "https://github.com/theseer", - "type": "github" - } - ], - "time": "2021-07-28T10:34:58+00:00" + "url": "https://opencollective.com/php_codesniffer", + "type": "open_collective" }, { - "name": "webmozart/assert", - "version": "1.10.0", - "source": { - "type": "git", - "url": "https://github.com/webmozarts/assert.git", - "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/webmozarts/assert/zipball/6964c76c7804814a842473e0c8fd15bab0f18e25", - "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0", - "symfony/polyfill-ctype": "^1.8" - }, - "conflict": { - "phpstan/phpstan": "<0.12.20", - "vimeo/psalm": "<4.6.1 || 4.6.2" - }, - "require-dev": { - "phpunit/phpunit": "^8.5.13" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.10-dev" - } - }, - "autoload": { - "psr-4": { - "Webmozart\\Assert\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" - } - ], - "description": "Assertions to validate method input/output with nice error messages.", - "keywords": [ - "assert", - "check", - "validate" - ], - "support": { - "issues": "https://github.com/webmozarts/assert/issues", - "source": "https://github.com/webmozarts/assert/tree/1.10.0" - }, - "time": "2021-03-09T10:59:23+00:00" - } - ], - "aliases": [], - "minimum-stability": "stable", - "stability-flags": [], - "prefer-stable": false, - "prefer-lowest": false, - "platform": { - "php": "^7.2|^8.0" + "url": "https://thanks.dev/u/gh/phpcsstandards", + "type": "thanks_dev" + } + ], + "time": "2025-11-04T16:30:35+00:00" + }, + { + "name": "staabm/side-effects-detector", + "version": "1.0.5", + "source": { + "type": "git", + "url": "https://github.com/staabm/side-effects-detector.git", + "reference": "d8334211a140ce329c13726d4a715adbddd0a163" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/staabm/side-effects-detector/zipball/d8334211a140ce329c13726d4a715adbddd0a163", + "reference": "d8334211a140ce329c13726d4a715adbddd0a163", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "phpstan/extension-installer": "^1.4.3", + "phpstan/phpstan": "^1.12.6", + "phpunit/phpunit": "^9.6.21", + "symfony/var-dumper": "^5.4.43", + "tomasvotruba/type-coverage": "1.0.0", + "tomasvotruba/unused-public": "1.0.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "lib/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A static analysis tool to detect side effects in PHP code", + "keywords": [ + "static analysis" + ], + "support": { + "issues": "https://github.com/staabm/side-effects-detector/issues", + "source": "https://github.com/staabm/side-effects-detector/tree/1.0.5" + }, + "funding": [ + { + "url": "https://github.com/staabm", + "type": "github" + } + ], + "time": "2024-10-20T05:08:20+00:00" }, - "platform-dev": [], - "plugin-api-version": "2.1.0" + { + "name": "theseer/tokenizer", + "version": "1.3.1", + "source": { + "type": "git", + "url": "https://github.com/theseer/tokenizer.git", + "reference": "b7489ce515e168639d17feec34b8847c326b0b3c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/b7489ce515e168639d17feec34b8847c326b0b3c", + "reference": "b7489ce515e168639d17feec34b8847c326b0b3c", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": "^7.2 || ^8.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + } + ], + "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", + "support": { + "issues": "https://github.com/theseer/tokenizer/issues", + "source": "https://github.com/theseer/tokenizer/tree/1.3.1" + }, + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2025-11-17T20:03:58+00:00" + } + ], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": {}, + "prefer-stable": false, + "prefer-lowest": false, + "platform": { + "php": "^7.2|^8.0" + }, + "platform-dev": {}, + "plugin-api-version": "2.9.0" } diff --git a/phpstan-baseline.neon b/phpstan-baseline.neon new file mode 100644 index 0000000..6d416d4 --- /dev/null +++ b/phpstan-baseline.neon @@ -0,0 +1,19 @@ +parameters: + ignoreErrors: + - + message: '#^PHPDoc tag @var with type string\|false is not subtype of native type string\.$#' + identifier: varTag.nativeType + count: 1 + path: src/content/SeekableFileContent.php + + - + message: '#^PHPDoc tag @var with type string\|false is not subtype of native type string\.$#' + identifier: varTag.nativeType + count: 1 + path: src/content/StringBasedFileContent.php + + - + message: '#^Call to function is_string\(\) with string will always evaluate to true\.$#' + identifier: function.alreadyNarrowedType + count: 1 + path: src/vfsStream.php diff --git a/tests/phpunit/DirectoryIterationTestCase.php b/tests/phpunit/DirectoryIterationTestCase.php index e46e344..adff58e 100644 --- a/tests/phpunit/DirectoryIterationTestCase.php +++ b/tests/phpunit/DirectoryIterationTestCase.php @@ -12,6 +12,9 @@ namespace bovigo\vfs\tests; use bovigo\vfs\vfsStream; +use PHPUnit\Framework\Attributes\DataProvider; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\Test; use RecursiveDirectoryIterator; use RecursiveIteratorIterator; @@ -37,6 +40,8 @@ * @group dir * @group iteration */ +#[Group('dir')] +#[Group('iteration')] class DirectoryIterationTestCase extends vfsStreamWrapperBaseTestCase { /** @@ -50,7 +55,7 @@ protected function tearDown(): void /** * @return string[][] */ - public function provideSwitchWithExpectations(): array + public static function provideSwitchWithExpectations(): array { return [ [[vfsStream::class, 'disableDotfiles'], ['subdir', 'file2']], @@ -74,6 +79,8 @@ private function assertDirectoryCount(int $expectedCount, int $actualCount): voi * @test * @dataProvider provideSwitchWithExpectations */ + #[Test] + #[DataProvider('provideSwitchWithExpectations')] public function directoryIteration(callable $switchDotFiles, array $expectedDirectories): void { $switchDotFiles(); @@ -132,6 +139,10 @@ public function directoryIterationWithDot(callable $switchDotFiles, array $expec * @group regression * @group bug_2 */ + #[Test] + #[DataProvider('provideSwitchWithExpectations')] + #[Group('regression')] + #[Group('bug_2')] public function directoryIterationWithOpenDir_Bug_2(callable $switchDotFiles, array $expectedDirectories): void { $switchDotFiles(); @@ -163,6 +174,10 @@ public function directoryIterationWithOpenDir_Bug_2(callable $switchDotFiles, ar * @group regression * @group bug_4 */ + #[Test] + #[DataProvider('provideSwitchWithExpectations')] + #[Group('regression')] + #[Group('bug_4')] public function directoryIteration_Bug_4(callable $switchDotFiles, array $expectedDirectories): void { $switchDotFiles(); @@ -250,6 +265,8 @@ public function directoryIterationShouldBeIndependent(callable $switchDotFiles, * @test * @group issue_50 */ + #[Test] + #[Group('issue_50')] public function recursiveDirectoryIterationWithDotsEnabled(): void { vfsStream::enableDotfiles(); @@ -301,6 +318,8 @@ public function recursiveDirectoryIterationWithDotsEnabled(): void * @test * @group issue_50 */ + #[Test] + #[Group('issue_50')] public function recursiveDirectoryIterationWithDotsDisabled(): void { vfsStream::disableDotfiles(); diff --git a/tests/phpunit/FilenameTestCase.php b/tests/phpunit/FilenameTestCase.php index a5c438e..d612414 100644 --- a/tests/phpunit/FilenameTestCase.php +++ b/tests/phpunit/FilenameTestCase.php @@ -12,6 +12,8 @@ namespace bovigo\vfs\tests; use bovigo\vfs\vfsStream; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase; use RecursiveDirectoryIterator; use UnexpectedValueException; @@ -31,6 +33,8 @@ * @group issue_128 * @since 1.6.2 */ +#[Group('issue_104')] +#[Group('issue_128')] class FilenameTestCase extends TestCase { /** @var string */ @@ -53,6 +57,7 @@ protected function setUp(): void /** * @test */ + #[Test] public function worksWithCorrectName(): void { $results = []; @@ -70,6 +75,7 @@ public function worksWithCorrectName(): void /** * @test */ + #[Test] public function doesNotWorkWithInvalidName(): void { expect(function (): void { @@ -82,6 +88,7 @@ public function doesNotWorkWithInvalidName(): void /** * @test */ + #[Test] public function returnsCorrectNames(): void { $results = []; diff --git a/tests/phpunit/OpenedFileTestCase.php b/tests/phpunit/OpenedFileTestCase.php index d97b477..3b1444c 100644 --- a/tests/phpunit/OpenedFileTestCase.php +++ b/tests/phpunit/OpenedFileTestCase.php @@ -16,6 +16,7 @@ use bovigo\vfs\OpenedFile; use bovigo\vfs\vfsStreamFile; use bovigo\vfs\vfsStreamWrapper; +use PHPUnit\Framework\Attributes\DoesNotPerformAssertions; use PHPUnit\Framework\TestCase; use function bovigo\assert\assertThat; @@ -62,9 +63,6 @@ public function testGetBaseFile(): void assertThat($actual, isSameAs($this->base)); } - /** - * @doesNotPerformAssertions - */ public function testOpenCallsBase(): void { $this->fixture->open(); @@ -73,9 +71,6 @@ public function testOpenCallsBase(): void verify($this->base, 'open')->receivedNothing(); } - /** - * @doesNotPerformAssertions - */ public function testOpenForAppendCallsBase(): void { $this->fixture->openForAppend(); @@ -84,9 +79,6 @@ public function testOpenForAppendCallsBase(): void verify($this->base, 'openForAppend')->receivedNothing(); } - /** - * @doesNotPerformAssertions - */ public function testOpenForAppendChecksPosition(): void { $this->fixture->openForAppend(); @@ -95,9 +87,6 @@ public function testOpenForAppendChecksPosition(): void verify($this->content, 'bytesRead')->receivedNothing(); } - /** - * @doesNotPerformAssertions - */ public function testOpenWithTruncateCallsBase(): void { $this->fixture->openWithTruncate(); @@ -106,9 +95,6 @@ public function testOpenWithTruncateCallsBase(): void verify($this->base, 'openWithTruncate')->receivedNothing(); } - /** - * @doesNotPerformAssertions - */ public function testOpenWithTruncateChecksPosition(): void { $this->fixture->openWithTruncate(); @@ -137,9 +123,6 @@ public function testReadRestoresPreviousPosition(): void verify($this->content, 'seek')->receivedOn(2, 3, SEEK_SET); } - /** - * @doesNotPerformAssertions - */ public function testReadChecksPosition(): void { $this->fixture->read(rand(1, 10)); @@ -158,9 +141,6 @@ public function testReadResponse(): void assertThat($actual, equals($data)); } - /** - * @doesNotPerformAssertions - */ public function testReadUntilEndCallsBase(): void { $this->fixture->readUntilEnd(); @@ -179,9 +159,6 @@ public function testReadUntilEndRestoresPreviousPosition(): void verify($this->content, 'seek')->receivedOn(2, 3, SEEK_SET); } - /** - * @doesNotPerformAssertions - */ public function testReadUntilEndChecksPosition(): void { $this->fixture->readUntilEnd(); @@ -220,9 +197,6 @@ public function testWriteRestoresPreviousPosition(): void verify($this->content, 'seek')->receivedOn(2, 6, SEEK_SET); } - /** - * @doesNotPerformAssertions - */ public function testWriteChecksPosition(): void { $this->fixture->write(uniqid()); @@ -261,9 +235,6 @@ public function testTruncateRestoresPreviousPosition(): void verify($this->content, 'seek')->receivedOn(2, 3, SEEK_SET); } - /** - * @doesNotPerformAssertions - */ public function testTruncateDoesNotCheckPosition(): void { $this->fixture->truncate(rand(1, 10)); @@ -282,9 +253,6 @@ public function testTruncateResponse(): void assertThat($actual, equals($response)); } - /** - * @doesNotPerformAssertions - */ public function testEofCallsBase(): void { $this->fixture->eof(); @@ -303,9 +271,6 @@ public function testEofRestoresPreviousPosition(): void verify($this->content, 'seek')->receivedOn(2, 3, SEEK_SET); } - /** - * @doesNotPerformAssertions - */ public function testEofDoesNotCheckPosition(): void { $this->fixture->eof(); @@ -324,9 +289,6 @@ public function testEofResponse(): void assertThat($actual, equals($response)); } - /** - * @doesNotPerformAssertions - */ public function testGetBytesReadCallsBase(): void { $this->fixture->getBytesRead(); @@ -384,7 +346,7 @@ public function testSeekCallsContentSeek(int $offset, int $whence, array $expect /** * @return mixed[] */ - public function sampleSeeks(): array + public static function sampleSeeks(): array { $offset = rand(); @@ -402,9 +364,6 @@ public function sampleSeeks(): array ]; } - /** - * @doesNotPerformAssertions - */ public function testSeekDoesNotCallContentSeek(): void { $this->base->returns(['seek' => (bool) rand(0, 1)]); @@ -414,9 +373,6 @@ public function testSeekDoesNotCallContentSeek(): void verify($this->content, 'seek')->wasNeverCalled(); } - /** - * @doesNotPerformAssertions - */ public function testSeekChecksPosition(): void { $this->fixture->seek(rand(1, 10), SEEK_SET); @@ -435,9 +391,6 @@ public function testSeekResponse(): void assertThat($actual, equals($response)); } - /** - * @doesNotPerformAssertions - */ public function testSizeCallsBase(): void { $this->fixture->size(); @@ -478,9 +431,6 @@ public function testLockResponse(): void assertThat($actual, equals($response)); } - /** - * @doesNotPerformAssertions - */ public function testGetTypeCallsBase(): void { $this->fixture->getType(); @@ -499,9 +449,6 @@ public function testGetTypeResponse(): void assertThat($actual, equals($type)); } - /** - * @doesNotPerformAssertions - */ public function testFilemtimeCallsBase(): void { $this->fixture->filemtime(); @@ -520,9 +467,6 @@ public function testFilemtimeResponse(): void assertThat($actual, equals($time)); } - /** - * @doesNotPerformAssertions - */ public function testFileatimeCallsBase(): void { $this->fixture->fileatime(); @@ -541,9 +485,6 @@ public function testFileatimeResponse(): void assertThat($actual, equals($time)); } - /** - * @doesNotPerformAssertions - */ public function testFilectimeCallsBase(): void { $this->fixture->filectime(); @@ -562,9 +503,6 @@ public function testFilectimeResponse(): void assertThat($actual, equals($time)); } - /** - * @doesNotPerformAssertions - */ public function testGetPermissionsCallsBase(): void { $this->fixture->getPermissions(); @@ -583,9 +521,6 @@ public function testGetPermissionsResponse(): void assertThat($actual, equals($response)); } - /** - * @doesNotPerformAssertions - */ public function testGetUserCallsBase(): void { $this->fixture->getUser(); @@ -604,9 +539,6 @@ public function testGetUserResponse(): void assertThat($actual, equals($response)); } - /** - * @doesNotPerformAssertions - */ public function testGetGroupCallsBase(): void { $this->fixture->getGroup(); diff --git a/tests/phpunit/UnlinkTestCase.php b/tests/phpunit/UnlinkTestCase.php index 6bbde57..3a9b41e 100644 --- a/tests/phpunit/UnlinkTestCase.php +++ b/tests/phpunit/UnlinkTestCase.php @@ -12,6 +12,8 @@ namespace bovigo\vfs\tests; use bovigo\vfs\vfsStream; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase; use function bovigo\assert\assertFalse; @@ -31,12 +33,15 @@ * * @group unlink */ +#[Group('unlink')] class UnlinkTestCase extends TestCase { /** * @test * @group issue_51 */ + #[Test] + #[Group('isse_51')] public function canUnlinkNonWritableFileFromWritableDirectory(): void { $structure = ['test_directory' => ['test.file' => '']]; @@ -50,6 +55,8 @@ public function canUnlinkNonWritableFileFromWritableDirectory(): void * @test * @group issue_51 */ + #[Test] + #[Group('issue_51')] public function canNotUnlinkWritableFileFromNonWritableDirectory(): void { $structure = ['test_directory' => ['test.file' => '']]; @@ -64,6 +71,8 @@ public function canNotUnlinkWritableFileFromNonWritableDirectory(): void * @since 1.4.0 * @group issue_68 */ + #[Test] + #[Grop('issue_68')] public function unlinkNonExistingFileTriggersError(): void { vfsStream::setup(); @@ -78,6 +87,8 @@ public function unlinkNonExistingFileTriggersError(): void * @test * @group issue_119 */ + #[Test] + #[Group('issue_119')] public function unlinkMaintainsInode(): void { $root = vfsStream::setup('root'); diff --git a/tests/phpunit/vfsStreamAbstractContentTestCase.php b/tests/phpunit/vfsStreamAbstractContentTestCase.php index 67bccc6..8723524 100644 --- a/tests/phpunit/vfsStreamAbstractContentTestCase.php +++ b/tests/phpunit/vfsStreamAbstractContentTestCase.php @@ -16,6 +16,8 @@ use bovigo\vfs\vfsStreamAbstractContent; use bovigo\vfs\vfsStreamContent; use bovigo\vfs\vfsStreamException; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase; use function bovigo\assert\assertFalse; @@ -43,6 +45,7 @@ private function createContent(int $permissions): vfsStreamContent /** * @test */ + #[Test] public function invalidCharacterInNameThrowsException(): void { expect(static function (): void { @@ -55,6 +58,9 @@ public function invalidCharacterInNameThrowsException(): void * @group permissions * @group bug_15 */ + #[Test] + #[Group('permissions')] + #[Group('bug_15')] public function noPermissionsForEveryone(): void { $content = $this->createContent(0000); @@ -85,6 +91,9 @@ public function noPermissionsForEveryone(): void * @group permissions * @group bug_15 */ + #[Test] + #[Group('permissions')] + #[Group('bug_15')] public function executePermissionsForUser(): void { $content = $this->createContent(0100); @@ -115,6 +124,9 @@ public function executePermissionsForUser(): void * @group permissions * @group bug_15 */ + #[Test] + #[Group('permissions')] + #[Group('bug_15')] public function executePermissionsForGroup(): void { $content = $this->createContent(0010); @@ -145,6 +157,9 @@ public function executePermissionsForGroup(): void * @group permissions * @group bug_15 */ + #[Test] + #[Group('permissions')] + #[Group('bug_15')] public function executePermissionsForOther(): void { $content = $this->createContent(0001); @@ -175,6 +190,9 @@ public function executePermissionsForOther(): void * @group permissions * @group bug_15 */ + #[Test] + #[Group('permissions')] + #[Group('bug_15')] public function writePermissionsForUser(): void { $content = $this->createContent(0200); @@ -205,6 +223,9 @@ public function writePermissionsForUser(): void * @group permissions * @group bug_15 */ + #[Test] + #[Group('permissions')] + #[Group('bug_15')] public function writePermissionsForGroup(): void { $content = $this->createContent(0020); @@ -235,6 +256,9 @@ public function writePermissionsForGroup(): void * @group permissions * @group bug_15 */ + #[Test] + #[Group('permissions')] + #[Group('bug_15')] public function writePermissionsForOther(): void { $content = $this->createContent(0002); @@ -265,6 +289,9 @@ public function writePermissionsForOther(): void * @group permissions * @group bug_15 */ + #[Test] + #[Group('permissions')] + #[Group('bug_15')] public function executeAndWritePermissionsForUser(): void { $content = $this->createContent(0300); @@ -295,6 +322,9 @@ public function executeAndWritePermissionsForUser(): void * @group permissions * @group bug_15 */ + #[Test] + #[Group('permissions')] + #[Group('bug_15')] public function executeAndWritePermissionsForGroup(): void { $content = $this->createContent(0030); @@ -325,6 +355,9 @@ public function executeAndWritePermissionsForGroup(): void * @group permissions * @group bug_15 */ + #[Test] + #[Group('permissions')] + #[Group('bug_15')] public function executeAndWritePermissionsForOther(): void { $content = $this->createContent(0003); @@ -355,6 +388,9 @@ public function executeAndWritePermissionsForOther(): void * @group permissions * @group bug_15 */ + #[Test] + #[Group('permissions')] + #[Group('bug_15')] public function readPermissionsForUser(): void { $content = $this->createContent(0400); @@ -385,6 +421,9 @@ public function readPermissionsForUser(): void * @group permissions * @group bug_15 */ + #[Test] + #[Group('permissions')] + #[Group('bug_15')] public function readPermissionsForGroup(): void { $content = $this->createContent(0040); @@ -415,6 +454,9 @@ public function readPermissionsForGroup(): void * @group permissions * @group bug_15 */ + #[Test] + #[Group('permissions')] + #[Group('bug_15')] public function readPermissionsForOther(): void { $content = $this->createContent(0004); @@ -445,6 +487,9 @@ public function readPermissionsForOther(): void * @group permissions * @group bug_15 */ + #[Test] + #[Group('permissions')] + #[Group('bug_15')] public function readAndExecutePermissionsForUser(): void { $content = $this->createContent(0500); @@ -475,6 +520,9 @@ public function readAndExecutePermissionsForUser(): void * @group permissions * @group bug_15 */ + #[Test] + #[Group('permissions')] + #[Group('bug_15')] public function readAndExecutePermissionsForGroup(): void { $content = $this->createContent(0050); @@ -505,6 +553,9 @@ public function readAndExecutePermissionsForGroup(): void * @group permissions * @group bug_15 */ + #[Test] + #[Group('permissions')] + #[Group('bug_15')] public function readAndExecutePermissionsForOther(): void { $content = $this->createContent(0005); @@ -535,6 +586,9 @@ public function readAndExecutePermissionsForOther(): void * @group permissions * @group bug_15 */ + #[Test] + #[Group('permissions')] + #[Group('bug_15')] public function readAndWritePermissionsForUser(): void { $content = $this->createContent(0600); @@ -565,6 +619,9 @@ public function readAndWritePermissionsForUser(): void * @group permissions * @group bug_15 */ + #[Test] + #[Group('permissions')] + #[Group('bug_15')] public function readAndWritePermissionsForGroup(): void { $content = $this->createContent(0060); @@ -595,6 +652,9 @@ public function readAndWritePermissionsForGroup(): void * @group permissions * @group bug_15 */ + #[Test] + #[Group('permissions')] + #[Group('bug_15')] public function readAndWritePermissionsForOther(): void { $content = $this->createContent(0006); @@ -625,6 +685,9 @@ public function readAndWritePermissionsForOther(): void * @group permissions * @group bug_15 */ + #[Test] + #[Group('permissions')] + #[Group('bug_15')] public function allPermissionsForUser(): void { $content = $this->createContent(0700); @@ -655,6 +718,9 @@ public function allPermissionsForUser(): void * @group permissions * @group bug_15 */ + #[Test] + #[Group('permissions')] + #[Group('bug_15')] public function allPermissionsForGroup(): void { $content = $this->createContent(0070); @@ -685,6 +751,9 @@ public function allPermissionsForGroup(): void * @group permissions * @group bug_15 */ + #[Test] + #[Group('permissions')] + #[Group('bug_15')] public function allPermissionsForOther(): void { $content = $this->createContent(0007); @@ -713,6 +782,9 @@ public function allPermissionsForOther(): void /** * @test */ + #[Test] + #[Group('permissions')] + #[Group('bug_15')] public function canBeRenamed(): void { $content = $this->createContent(0600); diff --git a/tests/phpunit/vfsStreamBlockTestCase.php b/tests/phpunit/vfsStreamBlockTestCase.php index c2c7bfc..04f6610 100644 --- a/tests/phpunit/vfsStreamBlockTestCase.php +++ b/tests/phpunit/vfsStreamBlockTestCase.php @@ -15,6 +15,7 @@ use bovigo\vfs\vfsStreamBlock; use bovigo\vfs\vfsStreamContent; use bovigo\vfs\vfsStreamException; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase; use function bovigo\assert\assertFalse; @@ -32,6 +33,7 @@ class vfsStreamBlockTestCase extends TestCase /** * @test */ + #[Test] public function isOfTypeBlock(): void { assertThat((new vfsStreamBlock('foo'))->getType(), equals(vfsStreamContent::TYPE_BLOCK)); @@ -40,6 +42,7 @@ public function isOfTypeBlock(): void /** * @test */ + #[Test] public function appliesForSelf(): void { assertTrue((new vfsStreamBlock('foo'))->appliesTo('foo')); @@ -48,6 +51,7 @@ public function appliesForSelf(): void /** * @test */ + #[Test] public function doesNotApplyForSubDirectories(): void { assertFalse((new vfsStreamBlock('foo'))->appliesTo('foo/bar')); @@ -56,6 +60,7 @@ public function doesNotApplyForSubDirectories(): void /** * @test */ + #[Test] public function doesNotApplyForOtherNames(): void { assertFalse((new vfsStreamBlock('foo'))->appliesTo('bar')); @@ -64,6 +69,7 @@ public function doesNotApplyForOtherNames(): void /** * @test */ + #[Test] public function hasGivenName(): void { assertThat((new vfsStreamBlock('foo'))->getName(), equals('foo')); @@ -74,6 +80,7 @@ public function hasGivenName(): void * * @test */ + #[Test] public function external(): void { $root = vfsStream::setup('root'); @@ -86,6 +93,7 @@ public function external(): void * * @test */ + #[Test] public function addStructure(): void { vfsStream::create([ @@ -103,6 +111,7 @@ public function addStructure(): void /** * @test */ + #[Test] public function createWithEmptyNameThrowsException(): void { expect(static function (): void { diff --git a/tests/phpunit/vfsStreamContainerIteratorTestCase.php b/tests/phpunit/vfsStreamContainerIteratorTestCase.php index 0c75eb6..5b40b04 100644 --- a/tests/phpunit/vfsStreamContainerIteratorTestCase.php +++ b/tests/phpunit/vfsStreamContainerIteratorTestCase.php @@ -73,7 +73,7 @@ protected function tearDown(): void /** * @return string[][] */ - public function provideSwitchWithExpectations(): array + public static function provideSwitchWithExpectations(): array { return [ [[vfsStream::class, 'disableDotfiles'], []], diff --git a/tests/phpunit/vfsStreamDirectoryIssue134TestCase.php b/tests/phpunit/vfsStreamDirectoryIssue134TestCase.php index 126882c..753015c 100644 --- a/tests/phpunit/vfsStreamDirectoryIssue134TestCase.php +++ b/tests/phpunit/vfsStreamDirectoryIssue134TestCase.php @@ -12,6 +12,9 @@ use bovigo\vfs\vfsStream; use bovigo\vfs\vfsStreamDirectory; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\Small; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase; use function bovigo\assert\assertNotNull; @@ -21,6 +24,8 @@ * * @group issue_134 */ +#[Group('issue_134')] +#[Small] class vfsStreamDirectoryIssue134TestCase extends TestCase { /** @@ -43,6 +48,7 @@ protected function setUp(): void * @test * @small */ + #[Test] public function shouldSaveDirectoryNameAsStringInternal(): void { $dir = $this->rootDirectory->getChild('var/log/app'); @@ -54,6 +60,7 @@ public function shouldSaveDirectoryNameAsStringInternal(): void * @test * @small */ + #[Test] public function shouldRenameDirectoryNameAsStringInternal(): void { $dir = $this->rootDirectory->getChild('var/log/app'); diff --git a/tests/phpunit/vfsStreamDirectoryIssue18TestCase.php b/tests/phpunit/vfsStreamDirectoryIssue18TestCase.php index 6515e69..89b5dfe 100644 --- a/tests/phpunit/vfsStreamDirectoryIssue18TestCase.php +++ b/tests/phpunit/vfsStreamDirectoryIssue18TestCase.php @@ -13,6 +13,8 @@ use bovigo\vfs\vfsStream; use bovigo\vfs\vfsStreamDirectory; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase; use function bovigo\assert\assertThat; @@ -25,6 +27,7 @@ * * @group bug_18 */ +#[Group('bug_18')] class vfsStreamDirectoryIssue18TestCase extends TestCase { /** @@ -50,6 +53,7 @@ protected function setUp(): void /** * @test */ + #[Test] public function shouldContainThreeSubdirectories(): void { assertThat( @@ -61,6 +65,7 @@ public function shouldContainThreeSubdirectories(): void /** * @test */ + #[Test] public function shouldContainSubdirectoryFoo(): void { assertTrue($this->rootDirectory->getChild('var/log/app')->hasChild('foo')); @@ -73,6 +78,7 @@ public function shouldContainSubdirectoryFoo(): void /** * @test */ + #[Test] public function shouldContainSubdirectoryApp1(): void { assertTrue($this->rootDirectory->getChild('var/log/app')->hasChild('app1')); @@ -85,6 +91,7 @@ public function shouldContainSubdirectoryApp1(): void /** * @test */ + #[Test] public function shouldContainSubdirectoryApp2(): void { assertTrue($this->rootDirectory->getChild('var/log/app')->hasChild('app2')); diff --git a/tests/phpunit/vfsStreamDirectoryTestCase.php b/tests/phpunit/vfsStreamDirectoryTestCase.php index 301b3d9..c2347a5 100644 --- a/tests/phpunit/vfsStreamDirectoryTestCase.php +++ b/tests/phpunit/vfsStreamDirectoryTestCase.php @@ -16,6 +16,8 @@ use bovigo\vfs\vfsStreamContent; use bovigo\vfs\vfsStreamDirectory; use bovigo\vfs\vfsStreamException; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase; use function bovigo\assert\assertEmptyArray; @@ -50,6 +52,7 @@ protected function setUp(): void /** * @test */ + #[Test] public function invalidCharacterInNameThrowsException(): void { expect(static function (): void { @@ -61,6 +64,7 @@ public function invalidCharacterInNameThrowsException(): void /** * @test */ + #[Test] public function isOfTypeDir(): void { assertThat($this->dir->getType(), equals(vfsStreamContent::TYPE_DIR)); @@ -69,6 +73,7 @@ public function isOfTypeDir(): void /** * @test */ + #[Test] public function appliesForSelf(): void { assertTrue($this->dir->appliesTo('foo')); @@ -77,6 +82,7 @@ public function appliesForSelf(): void /** * @test */ + #[Test] public function appliesForSubDirectories(): void { assertTrue($this->dir->appliesTo('foo/bar')); @@ -85,6 +91,7 @@ public function appliesForSubDirectories(): void /** * @test */ + #[Test] public function doesNotApplyForOtherNames(): void { assertFalse($this->dir->appliesTo('bar')); @@ -93,6 +100,7 @@ public function doesNotApplyForOtherNames(): void /** * @test */ + #[Test] public function hasGivenName(): void { assertThat($this->dir->getName(), equals('foo')); @@ -101,6 +109,7 @@ public function hasGivenName(): void /** * @test */ + #[Test] public function canBeRenamed(): void { $this->dir->rename('bar'); @@ -113,6 +122,7 @@ public function canBeRenamed(): void /** * @test */ + #[Test] public function renameToInvalidNameThrowsvfsStreamException(): void { expect(function (): void { @@ -125,6 +135,7 @@ public function renameToInvalidNameThrowsvfsStreamException(): void * @test * @since 0.10.0 */ + #[Test] public function hasNoChildrenByDefault(): void { assertFalse($this->dir->hasChildren()); @@ -134,6 +145,7 @@ public function hasNoChildrenByDefault(): void * @test * @since 0.10.0 */ + #[Test] public function hasChildrenReturnsTrueIfAtLeastOneChildPresent(): void { $content = NewInstance::of(vfsStreamContent::class)->returns([ @@ -147,6 +159,7 @@ public function hasChildrenReturnsTrueIfAtLeastOneChildPresent(): void /** * @test */ + #[Test] public function hasChildReturnsFalseForNonExistingChild(): void { assertFalse($this->dir->hasChild('bar')); @@ -155,6 +168,7 @@ public function hasChildReturnsFalseForNonExistingChild(): void /** * @test */ + #[Test] public function getChildReturnsNullForNonExistingChild(): void { assertNull($this->dir->getChild('bar')); @@ -163,6 +177,7 @@ public function getChildReturnsNullForNonExistingChild(): void /** * @test */ + #[Test] public function removeChildReturnsFalseForNonExistingChild(): void { assertFalse($this->dir->removeChild('bar')); @@ -269,6 +284,9 @@ public function childCanBeRemoved(): void * @group regression * @group bug_5 */ + #[Test] + #[Group('regression')] + #[Group('bug_5')] public function addChildReplacesChildWithSameName_Bug_5(): void { $content2 = $this->createChild(); @@ -286,6 +304,9 @@ public function addChildReplacesChildWithSameName_Bug_5(): void * @group bug_24 * @group regression */ + #[Test] + #[Group('bug_24')] + #[Group('regression')] public function explicitTestForSeparatorWithNestedPaths_Bug_24(): void { $subdir1 = vfsStream::newDirectory('subdir1'); @@ -305,6 +326,8 @@ public function explicitTestForSeparatorWithNestedPaths_Bug_24(): void * @test * @group permissions */ + #[Test] + #[Group('permissions')] public function defaultPermissions(): void { assertThat($this->dir->getPermissions(), equals(0777)); @@ -314,6 +337,8 @@ public function defaultPermissions(): void * @test * @group permissions */ + #[Test] + #[Group('permissions')] public function permissionsCanBeChanged(): void { assertThat($this->dir->chmod(0755)->getPermissions(), equals(0755)); @@ -323,6 +348,8 @@ public function permissionsCanBeChanged(): void * @test * @group permissions */ + #[Test] + #[Group('permissions')] public function permissionsCanBeSetOnCreation(): void { assertThat(vfsStream::newDirectory('foo', 0755)->getPermissions(), equals(0755)); @@ -332,6 +359,8 @@ public function permissionsCanBeSetOnCreation(): void * @test * @group permissions */ + #[Test] + #[Group('permissions')] public function currentUserIsDefaultOwner(): void { assertThat($this->dir->getUser(), equals(vfsStream::getCurrentUser())); @@ -342,6 +371,8 @@ public function currentUserIsDefaultOwner(): void * @test * @group permissions */ + #[Test] + #[Group('permissions')] public function ownerCanBeChanged(): void { $this->dir->chown(vfsStream::OWNER_USER_1); diff --git a/tests/phpunit/vfsStreamExLockTestCase.php b/tests/phpunit/vfsStreamExLockTestCase.php index 3e9255b..de2448a 100644 --- a/tests/phpunit/vfsStreamExLockTestCase.php +++ b/tests/phpunit/vfsStreamExLockTestCase.php @@ -12,6 +12,8 @@ namespace bovigo\vfs\tests; use bovigo\vfs\vfsStream; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase; use function bovigo\assert\assertThat; @@ -32,6 +34,7 @@ * * @group lock_fpc */ +#[Group('lock_fpc')] class vfsStreamExLockTestCase extends TestCase { /** @@ -50,6 +53,7 @@ protected function setUp(): void * * @test */ + #[Test] public function filePutContentsWithLockShouldReportError(): void { expect(static function (): void { @@ -61,6 +65,7 @@ public function filePutContentsWithLockShouldReportError(): void /** * @test */ + #[Test] public function flockShouldPass(): void { $fp = fopen(vfsStream::url('root/testfile'), 'w'); diff --git a/tests/phpunit/vfsStreamFileTestCase.php b/tests/phpunit/vfsStreamFileTestCase.php index c82aa7f..0135b46 100644 --- a/tests/phpunit/vfsStreamFileTestCase.php +++ b/tests/phpunit/vfsStreamFileTestCase.php @@ -19,6 +19,9 @@ use bovigo\vfs\vfsStreamException; use bovigo\vfs\vfsStreamFile; use InvalidArgumentException; +use PHPUnit\Framework\Attributes\DataProvider; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase; use function bovigo\assert\assertEmptyString; @@ -56,6 +59,7 @@ protected function setUp(): void /** * @test */ + #[Test] public function invalidCharacterInNameThrowsException(): void { expect(static function (): void { @@ -67,6 +71,7 @@ public function invalidCharacterInNameThrowsException(): void /** * @test */ + #[Test] public function isOfTypeFile(): void { assertThat($this->file->getType(), equals(vfsStreamContent::TYPE_FILE)); @@ -75,6 +80,7 @@ public function isOfTypeFile(): void /** * @test */ + #[Test] public function appliesForSelf(): void { assertTrue($this->file->appliesTo('foo')); @@ -83,6 +89,7 @@ public function appliesForSelf(): void /** * @test */ + #[Test] public function doesNotApplyForSubDirectories(): void { assertFalse($this->file->appliesTo('foo/bar')); @@ -91,6 +98,7 @@ public function doesNotApplyForSubDirectories(): void /** * @test */ + #[Test] public function doesNotApplyForOtherNames(): void { assertFalse($this->file->appliesTo('bar')); @@ -99,6 +107,7 @@ public function doesNotApplyForOtherNames(): void /** * @test */ + #[Test] public function hasGivenName(): void { assertThat($this->file->getName(), equals('foo')); @@ -107,6 +116,7 @@ public function hasGivenName(): void /** * @test */ + #[Test] public function canBeRenamed(): void { $this->file->rename('bar'); @@ -119,6 +129,7 @@ public function canBeRenamed(): void /** * @test */ + #[Test] public function renameToInvalidNameThrowsException(): void { expect(function (): void { @@ -130,6 +141,7 @@ public function renameToInvalidNameThrowsException(): void /** * @test */ + #[Test] public function hasNoContentByDefault(): void { assertEmptyString($this->file->getContent()); @@ -138,6 +150,7 @@ public function hasNoContentByDefault(): void /** * @test */ + #[Test] public function contentCanBeChanged(): void { $this->file->setContent('bar'); @@ -147,6 +160,7 @@ public function contentCanBeChanged(): void /** * @test */ + #[Test] public function isAtEofWhenEmpty(): void { assertTrue($this->file->eof()); @@ -155,6 +169,7 @@ public function isAtEofWhenEmpty(): void /** * @test */ + #[Test] public function fileSizeIs0WhenEmpty(): void { assertThat($this->file->size(), equals(0)); @@ -163,6 +178,7 @@ public function fileSizeIs0WhenEmpty(): void /** * @test */ + #[Test] public function readFromEmptyFileReturnsEmptyString(): void { assertEmptyString($this->file->read(5)); @@ -171,6 +187,7 @@ public function readFromEmptyFileReturnsEmptyString(): void /** * @test */ + #[Test] public function readFromEmptyFileMovesPointer(): void { $this->file->read(5); @@ -180,6 +197,7 @@ public function readFromEmptyFileMovesPointer(): void /** * @test */ + #[Test] public function reportsAmountOfBytesReadEvenWhenEmpty(): void { $this->file->read(5); @@ -189,6 +207,7 @@ public function reportsAmountOfBytesReadEvenWhenEmpty(): void /** * @test */ + #[Test] public function isNotAtEofWhenNotAllContentRead(): void { $this->file->setContent('foobarbaz'); @@ -198,6 +217,7 @@ public function isNotAtEofWhenNotAllContentRead(): void /** * @test */ + #[Test] public function fileSizeEqualsSizeOfContent(): void { $this->file->setContent('foobarbaz'); @@ -207,6 +227,7 @@ public function fileSizeEqualsSizeOfContent(): void /** * @test */ + #[Test] public function readDoesNotChangeFileSize(): void { $this->file->setContent('foobarbaz'); @@ -217,6 +238,7 @@ public function readDoesNotChangeFileSize(): void /** * @test */ + #[Test] public function partialReads(): void { $this->file->setContent('foobarbaz'); @@ -236,6 +258,7 @@ public function partialReads(): void /** * @test */ + #[Test] public function readAfterEofReturnsEmptyString(): void { $this->file->setContent('foobarbaz'); @@ -246,6 +269,7 @@ public function readAfterEofReturnsEmptyString(): void /** * @test */ + #[Test] public function seekWithInvalidSeekCommandReturnsFalse(): void { assertFalse($this->file->seek(0, 55)); @@ -254,7 +278,7 @@ public function seekWithInvalidSeekCommandReturnsFalse(): void /** * @return mixed[][] */ - public function seeks(): array + public static function seeks(): array { return [ [0, SEEK_SET, 0, 'foobarbaz'], @@ -268,6 +292,8 @@ public function seeks(): array * @test * @dataProvider seeks */ + #[Test] + #[DataProvider('seeks')] public function seekEmptyFile(int $offset, int $whence, int $expected): void { assertTrue($this->file->seek($offset, $whence)); @@ -277,6 +303,7 @@ public function seekEmptyFile(int $offset, int $whence, int $expected): void /** * @test */ + #[Test] public function seekEmptyFileWithSEEK_CUR(): void { $this->file->seek(5, SEEK_SET); @@ -290,6 +317,7 @@ public function seekEmptyFileWithSEEK_CUR(): void * @test * @since 1.6.5 */ + #[Test] public function seekEmptyFileBeforeBeginningDoesNotChangeOffset(): void { assertFalse($this->file->seek(-5, SEEK_SET), 'Seek before beginning of file'); @@ -300,6 +328,8 @@ public function seekEmptyFileBeforeBeginningDoesNotChangeOffset(): void * @test * @dataProvider seeks */ + #[Test] + #[DataProvider('seeks')] public function seekRead(int $offset, int $whence, int $expected, string $remaining): void { $this->file->setContent('foobarbaz'); @@ -315,6 +345,7 @@ public function seekRead(int $offset, int $whence, int $expected, string $remain /** * @test */ + #[Test] public function seekFileWithSEEK_CUR(): void { $this->file->setContent('foobarbaz'); @@ -373,6 +404,8 @@ public function write(): void * @test * @group permissions */ + #[Test] + #[Group('permissions')] public function defaultPermissions(): void { assertThat($this->file->getPermissions(), equals(0666)); @@ -382,6 +415,8 @@ public function defaultPermissions(): void * @test * @group permissions */ + #[Test] + #[Group('permissions')] public function permissionsCanBeChanged(): void { assertThat($this->file->chmod(0600)->getPermissions(), equals(0600)); @@ -391,6 +426,8 @@ public function permissionsCanBeChanged(): void * @test * @group permissions */ + #[Test] + #[Group('permissions')] public function permissionsCanBeSetOnCreation(): void { assertThat(vfsStream::newFile('foo', 0644)->getPermissions(), equals(0644)); @@ -400,6 +437,8 @@ public function permissionsCanBeSetOnCreation(): void * @test * @group permissions */ + #[Test] + #[Group('permissions')] public function currentUserIsDefaultOwner(): void { assertThat($this->file->getUser(), equals(vfsStream::getCurrentUser())); @@ -410,6 +449,8 @@ public function currentUserIsDefaultOwner(): void * @test * @group permissions */ + #[Test] + #[Group('permissions')] public function ownerCanBeChanged(): void { $this->file->chown(vfsStream::OWNER_USER_1); @@ -421,6 +462,8 @@ public function ownerCanBeChanged(): void * @test * @group permissions */ + #[Test] + #[Group('permissions')] public function currentGroupIsDefaultGroup(): void { assertThat($this->file->getGroup(), equals(vfsStream::getCurrentGroup())); @@ -431,6 +474,8 @@ public function currentGroupIsDefaultGroup(): void * @test * @group permissions */ + #[Test] + #[Group('permissions')] public function groupCanBeChanged(): void { $this->file->chgrp(vfsStream::GROUP_USER_1); @@ -443,6 +488,8 @@ public function groupCanBeChanged(): void * @group issue_33 * @since 1.1.0 */ + #[Test] + #[Group('issue_33')] public function truncateRemovesSuperflouosContent(): void { $this->file->write('lorem ipsum'); @@ -455,6 +502,8 @@ public function truncateRemovesSuperflouosContent(): void * @group issue_33 * @since 1.1.0 */ + #[Test] + #[Group('issue_33')] public function truncateToGreaterSizeAddsZeroBytes(): void { $this->file->write('lorem ipsum'); @@ -470,6 +519,8 @@ public function truncateToGreaterSizeAddsZeroBytes(): void * @group issue_79 * @since 1.3.0 */ + #[Test] + #[Group('issue_79')] public function withContentAcceptsAnyFileContentInstance(): void { $fileContent = NewInstance::of(FileContent::class)->returns(['content' => 'foobarbaz']); @@ -484,6 +535,8 @@ public function withContentAcceptsAnyFileContentInstance(): void * @group issue_79 * @since 1.3.0 */ + #[Test] + #[Group('issue_79')] public function withContentThrowsInvalidArgumentExceptionWhenContentIsNoStringAndNoFileContent(): void { expect(function (): void { diff --git a/tests/phpunit/vfsStreamGlobTestCase.php b/tests/phpunit/vfsStreamGlobTestCase.php index 66f42e3..3081f4d 100644 --- a/tests/phpunit/vfsStreamGlobTestCase.php +++ b/tests/phpunit/vfsStreamGlobTestCase.php @@ -12,6 +12,8 @@ namespace bovigo\vfs\tests; use bovigo\vfs\vfsStream; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase; use function bovigo\assert\assertEmpty; @@ -26,6 +28,7 @@ * @since 0.9.0 * @group issue_2 */ +#[Group('issue_2')] class vfsStreamGlobTestCase extends TestCase { /** diff --git a/tests/phpunit/vfsStreamTestCase.php b/tests/phpunit/vfsStreamTestCase.php index f0c50af..1971d5d 100644 --- a/tests/phpunit/vfsStreamTestCase.php +++ b/tests/phpunit/vfsStreamTestCase.php @@ -19,6 +19,9 @@ use bovigo\vfs\vfsStreamWrapper; use bovigo\vfs\visitor\vfsStreamVisitor; use InvalidArgumentException; +use PHPUnit\Framework\Attributes\DataProvider; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase; use function bovigo\assert\assertFalse; @@ -52,7 +55,7 @@ protected function setUp(): void /** * @return string[][] */ - public function pathes(): array + public static function pathes(): array { return [ ['foo', 'vfs://foo'], @@ -65,6 +68,8 @@ public function pathes(): array * @test * @dataProvider pathes */ + #[Test] + #[DataProvider('pathes')] public function pathToUrlConversion(string $path, string $url): void { assertThat(vfsStream::url($path), equals($url)); @@ -73,7 +78,7 @@ public function pathToUrlConversion(string $path, string $url): void /** * @return string[][] */ - public function urls(): array + public static function urls(): array { return [ ['vfs://foo', 'foo'], @@ -91,6 +96,8 @@ public function urls(): array * @test * @dataProvider urls */ + #[Test] + #[DataProvider('urls')] public function urlToPathConversion(string $url, string $path): void { assertThat(vfsStream::path($url), equals($path)); @@ -99,7 +106,7 @@ public function urlToPathConversion(string $url, string $path): void /** * @return mixed[][] */ - public function createDirectories(): array + public static function createDirectories(): array { return [ [vfsStream::newDirectory('foo/bar/baz'), 0777], @@ -111,6 +118,8 @@ public function createDirectories(): array * @test * @dataProvider createDirectories */ + #[Test] + #[DataProvider('createDirectories')] public function newDirectoryCreatesStructureWhenNameContainsSlashes( vfsStreamDirectory $root, int $permissions @@ -136,6 +145,8 @@ public function newDirectoryCreatesStructureWhenNameContainsSlashes( * @group setup * @since 0.7.0 */ + #[Test] + #[Group('setup')] public function setupRegistersStreamWrapper(): void { $root = vfsStream::setup(); @@ -147,6 +158,8 @@ public function setupRegistersStreamWrapper(): void * @group setup * @since 0.7.0 */ + #[Test] + #[Group('setup')] public function setupCreatesRootDirectoryWithDefaultName(): void { $root = vfsStream::setup(); @@ -158,6 +171,8 @@ public function setupCreatesRootDirectoryWithDefaultName(): void * @group setup * @since 0.7.0 */ + #[Test] + #[Group('setup')] public function setupCreatesRootDirectoryWithDefaultPermissions(): void { $root = vfsStream::setup(); @@ -169,6 +184,8 @@ public function setupCreatesRootDirectoryWithDefaultPermissions(): void * @group setup * @since 0.7.0 */ + #[Test] + #[Group('setup')] public function setupCreatesRootDirectoryWithGivenNameAn(): void { $root = vfsStream::setup('foo'); @@ -180,6 +197,8 @@ public function setupCreatesRootDirectoryWithGivenNameAn(): void * @group setup * @since 0.7.0 */ + #[Test] + #[Group('setup')] public function setupCreatesRootDirectoryWithPermissions(): void { $root = vfsStream::setup('foo', 0444); diff --git a/tests/phpunit/vfsStreamWrapperDirTestCase.php b/tests/phpunit/vfsStreamWrapperDirTestCase.php index 4ad874c..9c27bad 100644 --- a/tests/phpunit/vfsStreamWrapperDirTestCase.php +++ b/tests/phpunit/vfsStreamWrapperDirTestCase.php @@ -14,6 +14,9 @@ use bovigo\vfs\vfsStream; use bovigo\vfs\vfsStreamWrapper; +use PHPUnit\Framework\Attributes\DataProvider; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\Test; use function bovigo\assert\assertFalse; use function bovigo\assert\assertNotNull; use function bovigo\assert\assertNull; @@ -43,7 +46,7 @@ class vfsStreamWrapperDirTestCase extends vfsStreamWrapperBaseTestCase /** * @return string[][] */ - public function newRoots(): array + public static function newRoots(): array { return [ ['another'], @@ -55,6 +58,8 @@ public function newRoots(): array * @test * @dataProvider newRoots */ + #[Test] + #[DataProvider('newRoots')] public function mkdirDoesNotOverwriteExistingRoot(string $newRoot): void { assertFalse(mkdir(vfsStream::url($newRoot), 0777, true)); @@ -65,6 +70,8 @@ public function mkdirDoesNotOverwriteExistingRoot(string $newRoot): void * @test * @group permissions */ + #[Test] + #[Group('permissions')] public function mkdirNonRecursivelyIsRejectedWhenNotSpecified(): void { assertFalse(mkdir($this->subdir->url() . '/another/more')); @@ -75,6 +82,8 @@ public function mkdirNonRecursivelyIsRejectedWhenNotSpecified(): void * @test * @group permissions */ + #[Test] + #[Group('permissions')] public function mkdirNonRecursivelyForSingleDirectory(): void { assertTrue(mkdir($this->root->url() . '/another')); @@ -85,6 +94,8 @@ public function mkdirNonRecursivelyForSingleDirectory(): void * @test * @group permissions */ + #[Test] + #[Group('permissions')] public function mkdirNonRecursivelyWithDefaultPermissions(): void { assertTrue(mkdir($this->root->url() . '/another')); @@ -94,7 +105,7 @@ public function mkdirNonRecursivelyWithDefaultPermissions(): void /** * @return string[][] */ - public function mkdirChildren(): array + public static function mkdirChildren(): array { return [['another'], ['another/more']]; } @@ -104,6 +115,9 @@ public function mkdirChildren(): array * @dataProvider mkdirChildren * @group permissions */ + #[Test] + #[DataProvider('mkdirChildren')] + #[Group('permissions')] public function mkdirRecursively(string $child): void { assertTrue(mkdir($this->root->url() . '/another/more', 0775, true)); @@ -116,6 +130,8 @@ public function mkdirRecursively(string $child): void * @group issue_9 * @since 0.9.0 */ + #[Test] + #[Group('issue_9')] public function mkdirWithDots(): void { assertTrue(mkdir($this->root->url() . '/another/../more/.', 0777, true)); @@ -126,6 +142,8 @@ public function mkdirWithDots(): void * @test * @group permissions */ + #[Test] + #[Group('permissions')] public function mkdirWithoutRootCreatesNewRoot(): void { vfsStreamWrapper::register(); @@ -139,6 +157,8 @@ public function mkdirWithoutRootCreatesNewRoot(): void * @test * @group permissions */ + #[Test] + #[Group('permissions')] public function mkdirWithoutRootCreatesNewRootDifferentPermissions(): void { vfsStreamWrapper::register(); @@ -151,6 +171,7 @@ public function mkdirWithoutRootCreatesNewRootDifferentPermissions(): void /** * @test */ + #[Test] public function mkdirOnExistingFileReturnsFalse(): void { assertFalse(mkdir($this->fileInSubdir->url() . '/another/more', 0777, true)); @@ -161,6 +182,9 @@ public function mkdirOnExistingFileReturnsFalse(): void * @group permissions * @group bug_15 */ + #[Test] + #[Group('permissions')] + #[Group('bug_15')] public function mkdirDirCanNotCreateNewDirInNonWritingDirectory(): void { vfsStream::newDirectory('restrictedFolder', 0000)->at($this->root); @@ -172,6 +196,8 @@ public function mkdirDirCanNotCreateNewDirInNonWritingDirectory(): void * @test * @group issue_28 */ + #[Test] + #[Group('issue_28')] public function mkDirShouldNotOverwriteExistingDirectories(): void { $dir = vfsStream::url('root/dir'); @@ -183,6 +209,8 @@ public function mkDirShouldNotOverwriteExistingDirectories(): void * @test * @group issue_28 */ + #[Test] + #[Group('issue_28')] public function mkDirShouldNotOverwriteExistingDirectoriesAndTriggerE_USER_WARNING(): void { $dir = vfsStream::url('root/dir'); @@ -198,6 +226,8 @@ public function mkDirShouldNotOverwriteExistingDirectoriesAndTriggerE_USER_WARNI * @test * @group issue_28 */ + #[Test] + #[Group('issue_28')] public function mkDirShouldNotOverwriteExistingFiles(): void { assertFalse(@mkdir($this->fileInRoot->url())); @@ -207,6 +237,8 @@ public function mkDirShouldNotOverwriteExistingFiles(): void * @test * @group issue_28 */ + #[Test] + #[Group('issue_28')] public function mkDirShouldNotOverwriteExistingFilesAndTriggerE_USER_WARNING(): void { expect(function (): void { @@ -221,6 +253,8 @@ public function mkDirShouldNotOverwriteExistingFilesAndTriggerE_USER_WARNING(): * @group issue_131 * @since 1.6.3 */ + #[Test] + #[Group('issue_131')] public function allowsRecursiveMkDirWithDirectoryName0(): void { $subdir = vfsStream::url('root/a/0'); @@ -233,6 +267,9 @@ public function allowsRecursiveMkDirWithDirectoryName0(): void * @group permissions * @group bug_15 */ + #[Test] + #[Group('permissions')] + #[Group('bug_15')] public function canNotIterateOverNonReadableDirectory(): void { $restricted = vfsStream::newDirectory('restrictedFolder', 0000)->at($this->root); @@ -243,7 +280,7 @@ public function canNotIterateOverNonReadableDirectory(): void /** * @return string[][] */ - public function directories(): array + public static function directories(): array { return [ [vfsStream::url('root')], @@ -257,6 +294,8 @@ public function directories(): array * @test * @dataProvider directories */ + #[Test] + #[DataProvider('directories')] public function is_dirReturnsTrueForDirectories(string $directory): void { assertTrue(is_dir($directory)); @@ -265,7 +304,7 @@ public function is_dirReturnsTrueForDirectories(string $directory): void /** * @return string[][] */ - public function nonDirectories(): array + public static function nonDirectories(): array { return [ [vfsStream::url('root/subdir/file1.txt')], @@ -278,6 +317,8 @@ public function nonDirectories(): array * @test * @dataProvider nonDirectories */ + #[Test] + #[DataProvider('nonDirectories')] public function is_dirReturnsFalseForFilesAndNonExistingDirectories(string $file): void { assertFalse(is_dir($file)); @@ -286,6 +327,7 @@ public function is_dirReturnsFalseForFilesAndNonExistingDirectories(string $file /** * @test */ + #[Test] public function canNotUnlinkDirectoryWithoutRoot(): void { vfsStreamWrapper::register(); @@ -295,6 +337,7 @@ public function canNotUnlinkDirectoryWithoutRoot(): void /** * @test */ + #[Test] public function rmdirCanNotRemoveFiles(): void { assertFalse(rmdir($this->fileInSubdir->url())); @@ -303,6 +346,7 @@ public function rmdirCanNotRemoveFiles(): void /** * @test */ + #[Test] public function rmdirCanNotRemoveNonExistingDirectory(): void { assertFalse(rmdir($this->root->url() . '/another')); @@ -311,6 +355,7 @@ public function rmdirCanNotRemoveNonExistingDirectory(): void /** * @test */ + #[Test] public function rmdirCanNotRemoveNonEmptyDirectory(): void { assertFalse(rmdir($this->root->url())); @@ -319,6 +364,7 @@ public function rmdirCanNotRemoveNonEmptyDirectory(): void /** * @test */ + #[Test] public function rmdirCanRemoveEmptyDirectory(): void { vfsStream::newDirectory('empty')->at($this->root); @@ -329,6 +375,7 @@ public function rmdirCanRemoveEmptyDirectory(): void /** * @test */ + #[Test] public function rmdirCanRemoveEmptyDirectoryWithDot(): void { vfsStream::newDirectory('empty')->at($this->root); @@ -339,6 +386,7 @@ public function rmdirCanRemoveEmptyDirectoryWithDot(): void /** * @test */ + #[Test] public function rmdirCanRemoveEmptyRoot(): void { $this->root->removeChild('subdir'); @@ -353,6 +401,9 @@ public function rmdirCanRemoveEmptyRoot(): void * @group permissions * @group bug_15 */ + #[Test] + #[Group('permissions')] + #[Group('bug_15')] public function rmdirDirCanNotRemoveDirFromNonWritingDirectory(): void { $nonRemovable = vfsStream::newDirectory('nonRemovableFolder')->at($this->root); @@ -366,6 +417,9 @@ public function rmdirDirCanNotRemoveDirFromNonWritingDirectory(): void * @group permissions * @group bug_17 */ + #[Test] + #[Group('permissions')] + #[Group('bug_17')] public function issue17(): void { $this->root->chmod(0770) @@ -379,6 +433,8 @@ public function issue17(): void * @test * @group bug_19 */ + #[Test] + #[Group('bug_19')] public function accessWithDoubleDotReturnsCorrectContent(): void { assertThat( @@ -391,6 +447,8 @@ public function accessWithDoubleDotReturnsCorrectContent(): void * @test * @group bug_115 */ + #[Test] + #[Group('bug_115')] public function accessWithExcessDoubleDotsReturnsCorrectContent(): void { assertThat( @@ -403,6 +461,8 @@ public function accessWithExcessDoubleDotsReturnsCorrectContent(): void * @test * @group bug_115 */ + #[Test] + #[Group('bug_115')] public function alwaysResolvesRootDirectoryAsOwnParentWithDoubleDot(): void { $this->root->chown(vfsStream::OWNER_USER_1); @@ -416,6 +476,8 @@ public function alwaysResolvesRootDirectoryAsOwnParentWithDoubleDot(): void * @since 0.11.0 * @group issue_23 */ + #[Test] + #[Group('bug_23')] public function unlinkCanNotRemoveNonEmptyDirectory(): void { expect(function (): void { @@ -431,6 +493,8 @@ public function unlinkCanNotRemoveNonEmptyDirectory(): void * @since 0.11.0 * @group issue_23 */ + #[Test] + #[Group('bug_23')] public function unlinkCanNotRemoveEmptyDirectory(): void { $url = vfsStream::newDirectory('empty')->at($this->root)->url(); @@ -446,6 +510,8 @@ public function unlinkCanNotRemoveEmptyDirectory(): void * @test * @group issue_32 */ + #[Test] + #[Group('bug_32')] public function canCreateFolderOfSameNameAsParentFolder(): void { $root = vfsStream::setup('testFolder'); @@ -457,6 +523,8 @@ public function canCreateFolderOfSameNameAsParentFolder(): void * @test * @group issue_32 */ + #[Test] + #[Group('bug_32')] public function canRetrieveFolderOfSameNameAsParentFolder(): void { $root = vfsStream::setup('testFolder'); diff --git a/tests/phpunit/vfsStreamWrapperErroneousFileTestCase.php b/tests/phpunit/vfsStreamWrapperErroneousFileTestCase.php index 2d15fe6..5d020d8 100644 --- a/tests/phpunit/vfsStreamWrapperErroneousFileTestCase.php +++ b/tests/phpunit/vfsStreamWrapperErroneousFileTestCase.php @@ -13,6 +13,8 @@ use bovigo\vfs\vfsStream; +use PHPUnit\Framework\Attributes\DataProvider; +use PHPUnit\Framework\Attributes\Test; use function bovigo\assert\assertEmptyString; use function bovigo\assert\assertFalse; use function bovigo\assert\assertThat; @@ -49,6 +51,7 @@ class vfsStreamWrapperErroneousFileTestCase extends vfsStreamWrapperBaseTestCase /** * @dataProvider sampleModes */ + #[DataProvider('sampleModes')] public function testOpenWithErrorMessageTriggersError(string $mode): void { $message = uniqid(); @@ -62,7 +65,7 @@ public function testOpenWithErrorMessageTriggersError(string $mode): void /** * @return array */ - public function sampleModes(): array + public static function sampleModes(): array { return [ 'read' => ['r'], diff --git a/tests/phpunit/vfsStreamWrapperFileTestCase.php b/tests/phpunit/vfsStreamWrapperFileTestCase.php index bfc94e7..e6725e9 100644 --- a/tests/phpunit/vfsStreamWrapperFileTestCase.php +++ b/tests/phpunit/vfsStreamWrapperFileTestCase.php @@ -146,7 +146,7 @@ public function filePointerKnowsPositionInFile(): void /** * @return int[][] */ - public function seekArgs(): array + public static function seekArgs(): array { return [ [2, SEEK_SET, 2], diff --git a/tests/phpunit/vfsStreamWrapperFlockTestCase.php b/tests/phpunit/vfsStreamWrapperFlockTestCase.php index 5c9dec2..e693dd8 100644 --- a/tests/phpunit/vfsStreamWrapperFlockTestCase.php +++ b/tests/phpunit/vfsStreamWrapperFlockTestCase.php @@ -13,6 +13,8 @@ use bovigo\vfs\vfsStream; use bovigo\vfs\vfsStreamContainer; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase; use function bovigo\assert\assertFalse; @@ -35,6 +37,7 @@ * @since 0.10.0 * @group issue_6 */ +#[Group('issue_6')] class vfsStreamWrapperFlockTestCase extends TestCase { /** @@ -55,6 +58,7 @@ protected function setUp(): void /** * @test */ + #[Test] public function fileIsNotLockedByDefault(): void { assertFalse(vfsStream::newFile('foo.txt')->isLocked()); @@ -63,6 +67,7 @@ public function fileIsNotLockedByDefault(): void /** * @test */ + #[Test] public function streamIsNotLockedByDefault(): void { file_put_contents(vfsStream::url('root/foo.txt'), 'content'); @@ -72,6 +77,7 @@ public function streamIsNotLockedByDefault(): void /** * @test */ + #[Test] public function canAquireSharedLock(): void { $file = vfsStream::newFile('foo.txt')->at($this->root); @@ -86,6 +92,7 @@ public function canAquireSharedLock(): void /** * @test */ + #[Test] public function canAquireSharedLockWithNonBlockingFlockCall(): void { $file = vfsStream::newFile('foo.txt')->at($this->root); @@ -100,6 +107,7 @@ public function canAquireSharedLockWithNonBlockingFlockCall(): void /** * @test */ + #[Test] public function canAquireEclusiveLock(): void { $file = vfsStream::newFile('foo.txt')->at($this->root); @@ -114,6 +122,7 @@ public function canAquireEclusiveLock(): void /** * @test */ + #[Test] public function canAquireEclusiveLockWithNonBlockingFlockCall(): void { $file = vfsStream::newFile('foo.txt')->at($this->root); @@ -128,6 +137,7 @@ public function canAquireEclusiveLockWithNonBlockingFlockCall(): void /** * @test */ + #[Test] public function canRemoveLock(): void { $file = vfsStream::newFile('foo.txt')->at($this->root); @@ -146,6 +156,8 @@ public function canRemoveLock(): void * @test * @group issue_40 */ + #[Test] + #[Group('issue_40')] public function canRemoveLockWhenNotLocked(): void { $file = vfsStream::newFile('foo.txt')->at($this->root); @@ -165,6 +177,8 @@ public function canRemoveLockWhenNotLocked(): void * @test * @group issue_40 */ + #[Test] + #[Group('issue_40')] public function canRemoveSharedLockWithoutRemovingSharedLockOnOtherFileHandler(): void { $file = vfsStream::newFile('foo.txt')->at($this->root); @@ -186,6 +200,8 @@ public function canRemoveSharedLockWithoutRemovingSharedLockOnOtherFileHandler() * @test * @group issue_40 */ + #[Test] + #[Group('issue_40')] public function canNotRemoveSharedLockAcquiredOnOtherFileHandler(): void { $file = vfsStream::newFile('foo.txt')->at($this->root); @@ -206,6 +222,8 @@ public function canNotRemoveSharedLockAcquiredOnOtherFileHandler(): void * @test * @group issue_40 */ + #[Test] + #[Group('issue_40')] public function canNotRemoveExlusiveLockAcquiredOnOtherFileHandler(): void { $file = vfsStream::newFile('foo.txt')->at($this->root); @@ -223,6 +241,7 @@ public function canNotRemoveExlusiveLockAcquiredOnOtherFileHandler(): void /** * @test */ + #[Test] public function canRemoveLockWithNonBlockingFlockCall(): void { $file = vfsStream::newFile('foo.txt')->at($this->root); @@ -241,6 +260,8 @@ public function canRemoveLockWithNonBlockingFlockCall(): void * @test * @group issue_40 */ + #[Test] + #[Group('issue_40')] public function canNotAquireExclusiveLockIfAlreadyExclusivelyLockedOnOtherFileHandler(): void { $file = vfsStream::newFile('foo.txt')->at($this->root); @@ -263,6 +284,8 @@ public function canNotAquireExclusiveLockIfAlreadyExclusivelyLockedOnOtherFileHa * @test * @group issue_40 */ + #[Test] + #[Group('issue_40')] public function canAquireExclusiveLockIfAlreadySelfExclusivelyLocked(): void { $file = vfsStream::newFile('foo.txt')->at($this->root); @@ -281,6 +304,8 @@ public function canAquireExclusiveLockIfAlreadySelfExclusivelyLocked(): void * @test * @group issue_40 */ + #[Test] + #[Group('issue_40')] public function canNotAquireExclusiveLockIfAlreadySharedLockedOnOtherFileHandler(): void { $file = vfsStream::newFile('foo.txt')->at($this->root); @@ -301,6 +326,8 @@ public function canNotAquireExclusiveLockIfAlreadySharedLockedOnOtherFileHandler * @test * @group issue_40 */ + #[Test] + #[Group('issue_40')] public function canAquireExclusiveLockIfAlreadySelfSharedLocked(): void { $file = vfsStream::newFile('foo.txt')->at($this->root); @@ -319,6 +346,8 @@ public function canAquireExclusiveLockIfAlreadySelfSharedLocked(): void * @test * @group issue_40 */ + #[Test] + #[Group('issue_40')] public function canNotAquireSharedLockIfAlreadyExclusivelyLockedOnOtherFileHandler(): void { $file = vfsStream::newFile('foo.txt')->at($this->root); @@ -339,6 +368,8 @@ public function canNotAquireSharedLockIfAlreadyExclusivelyLockedOnOtherFileHandl * @test * @group issue_40 */ + #[Test] + #[Group('issue_40')] public function canAquireSharedLockIfAlreadySelfExclusivelyLocked(): void { $file = vfsStream::newFile('foo.txt')->at($this->root); @@ -357,6 +388,8 @@ public function canAquireSharedLockIfAlreadySelfExclusivelyLocked(): void * @test * @group issue_40 */ + #[Test] + #[Group('issue_40')] public function canAquireSharedLockIfAlreadySelfSharedLocked(): void { $file = vfsStream::newFile('foo.txt')->at($this->root); @@ -375,6 +408,8 @@ public function canAquireSharedLockIfAlreadySelfSharedLocked(): void * @test * @group issue_40 */ + #[Test] + #[Group('issue_40')] public function canAquireSharedLockIfAlreadySharedLockedOnOtherFileHandler(): void { $file = vfsStream::newFile('foo.txt')->at($this->root); @@ -399,6 +434,9 @@ public function canAquireSharedLockIfAlreadySharedLockedOnOtherFileHandler(): vo * @group issue_31 * @group issue_40 */ + #[Test] + #[Group('issue_31')] + #[Group('issue_40')] public function removesExclusiveLockOnStreamClose(): void { $file = vfsStream::newFile('foo.txt')->at($this->root); @@ -418,6 +456,9 @@ public function removesExclusiveLockOnStreamClose(): void * @group issue_31 * @group issue_40 */ + #[Test] + #[Group('issue_31')] + #[Group('issue_40')] public function removesSharedLockOnStreamClose(): void { $file = vfsStream::newFile('foo.txt')->at($this->root); @@ -435,6 +476,8 @@ public function removesSharedLockOnStreamClose(): void * @test * @group issue_40 */ + #[Test] + #[Group('issue_40')] public function notRemovesExclusiveLockOnStreamCloseIfExclusiveLockAcquiredOnOtherFileHandler(): void { $file = vfsStream::newFile('foo.txt')->at($this->root); @@ -455,6 +498,8 @@ public function notRemovesExclusiveLockOnStreamCloseIfExclusiveLockAcquiredOnOth * @test * @group issue_40 */ + #[Test] + #[Group('issue_40')] public function notRemovesSharedLockOnStreamCloseIfSharedLockAcquiredOnOtherFileHandler(): void { $file = vfsStream::newFile('foo.txt')->at($this->root); diff --git a/tests/phpunit/vfsStreamWrapperLargeFileTestCase.php b/tests/phpunit/vfsStreamWrapperLargeFileTestCase.php index 7200393..71a68ea 100644 --- a/tests/phpunit/vfsStreamWrapperLargeFileTestCase.php +++ b/tests/phpunit/vfsStreamWrapperLargeFileTestCase.php @@ -14,6 +14,8 @@ use bovigo\vfs\content\LargeFileContent; use bovigo\vfs\vfsStream; use bovigo\vfs\vfsStreamFile; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase; use function bovigo\assert\assertThat; @@ -35,6 +37,7 @@ * @since 1.3.0 * @group issue_79 */ +#[Group('issue_79')] class vfsStreamWrapperLargeFileTestCase extends TestCase { /** @@ -58,6 +61,7 @@ protected function setUp(): void /** * @test */ + #[Test] public function hasLargeFileSize(): void { if (PHP_INT_MAX === 2147483647) { @@ -70,6 +74,7 @@ public function hasLargeFileSize(): void /** * @test */ + #[Test] public function canReadFromLargeFile(): void { $fp = fopen($this->largeFile->url(), 'rb'); @@ -81,6 +86,7 @@ public function canReadFromLargeFile(): void /** * @test */ + #[Test] public function canWriteIntoLargeFile(): void { $fp = fopen($this->largeFile->url(), 'rb+'); diff --git a/tests/phpunit/vfsStreamWrapperQuotaTestCase.php b/tests/phpunit/vfsStreamWrapperQuotaTestCase.php index 537091f..c6fb53b 100644 --- a/tests/phpunit/vfsStreamWrapperQuotaTestCase.php +++ b/tests/phpunit/vfsStreamWrapperQuotaTestCase.php @@ -13,6 +13,8 @@ use bovigo\vfs\vfsStream; use bovigo\vfs\vfsStreamDirectory; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase; use function bovigo\assert\assertFalse; @@ -30,6 +32,7 @@ * * @group issue_35 */ +#[Group('issue_35')] class vfsStreamWrapperQuotaTestCase extends TestCase { /** @@ -51,6 +54,7 @@ protected function setUp(): void /** * @test */ + #[Test] public function writeLessThanQuotaWritesEverything(): void { assertThat(file_put_contents(vfsStream::url('root/file.txt'), '123456789'), equals(9)); @@ -60,6 +64,7 @@ public function writeLessThanQuotaWritesEverything(): void /** * @test */ + #[Test] public function writeUpToQotaWritesEverything(): void { assertThat(file_put_contents(vfsStream::url('root/file.txt'), '1234567890'), equals(10)); @@ -69,6 +74,7 @@ public function writeUpToQotaWritesEverything(): void /** * @test */ + #[Test] public function writeMoreThanQotaWritesOnlyUpToQuota(): void { expect(static function (): void { @@ -82,6 +88,7 @@ public function writeMoreThanQotaWritesOnlyUpToQuota(): void /** * @test */ + #[Test] public function considersAllFilesForQuota(): void { vfsStream::newFile('foo.txt') @@ -99,6 +106,8 @@ public function considersAllFilesForQuota(): void * @test * @group issue_33 */ + #[Test] + #[Group('issue_33')] public function truncateToLessThanQuotaWritesEverything(): void { $fp = fopen(vfsStream::url('root/file.txt'), 'w+'); @@ -115,6 +124,8 @@ public function truncateToLessThanQuotaWritesEverything(): void * @test * @group issue_33 */ + #[Test] + #[Group('issue_33')] public function truncateUpToQotaWritesEverything(): void { $fp = fopen(vfsStream::url('root/file.txt'), 'w+'); @@ -131,6 +142,8 @@ public function truncateUpToQotaWritesEverything(): void * @test * @group issue_33 */ + #[Test] + #[Group('issue_33')] public function truncateToMoreThanQotaWritesOnlyUpToQuota(): void { $fp = fopen(vfsStream::url('root/file.txt'), 'w+'); @@ -147,6 +160,8 @@ public function truncateToMoreThanQotaWritesOnlyUpToQuota(): void * @test * @group issue_33 */ + #[Test] + #[Group('issue_33')] public function truncateConsidersAllFilesForQuota(): void { vfsStream::newFile('bar.txt') @@ -167,6 +182,8 @@ public function truncateConsidersAllFilesForQuota(): void * @test * @group issue_33 */ + #[Test] + #[Group('issue_33')] public function canNotTruncateToGreaterLengthWhenDiscQuotaReached(): void { vfsStream::newFile('bar.txt') diff --git a/tests/phpunit/vfsStreamWrapperSetOptionTestCase.php b/tests/phpunit/vfsStreamWrapperSetOptionTestCase.php index 5c668a2..1faf26d 100644 --- a/tests/phpunit/vfsStreamWrapperSetOptionTestCase.php +++ b/tests/phpunit/vfsStreamWrapperSetOptionTestCase.php @@ -13,6 +13,8 @@ use bovigo\vfs\vfsStream; use bovigo\vfs\vfsStreamContainer; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase; use function bovigo\assert\assertFalse; @@ -32,6 +34,7 @@ * @since 0.10.0 * @group issue_15 */ +#[Group('issue_15')] class vfsStreamWrapperSetOptionTestCase extends TestCase { /** @@ -53,6 +56,7 @@ protected function setUp(): void /** * @test */ + #[Test] public function setBlockingDoesNotWork(): void { $fp = fopen(vfsStream::url('root/foo.txt'), 'rb'); @@ -63,6 +67,7 @@ public function setBlockingDoesNotWork(): void /** * @test */ + #[Test] public function removeBlockingDoesNotWork(): void { $fp = fopen(vfsStream::url('root/foo.txt'), 'rb'); @@ -73,6 +78,7 @@ public function removeBlockingDoesNotWork(): void /** * @test */ + #[Test] public function setTimeoutDoesNotWork(): void { $fp = fopen(vfsStream::url('root/foo.txt'), 'rb'); @@ -83,6 +89,7 @@ public function setTimeoutDoesNotWork(): void /** * @test */ + #[Test] public function setWriteBufferDoesNotWork(): void { $fp = fopen(vfsStream::url('root/foo.txt'), 'rb'); diff --git a/tests/phpunit/vfsStreamWrapperStreamSelectTestCase.php b/tests/phpunit/vfsStreamWrapperStreamSelectTestCase.php index 6ec2466..f408a89 100644 --- a/tests/phpunit/vfsStreamWrapperStreamSelectTestCase.php +++ b/tests/phpunit/vfsStreamWrapperStreamSelectTestCase.php @@ -12,6 +12,9 @@ namespace bovigo\vfs\tests; use bovigo\vfs\vfsStream; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\RequiresPhp; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase; use function bovigo\assert\expect; @@ -26,12 +29,15 @@ * @since 0.9.0 * @group issue_3 */ +#[Group('issue_3')] class vfsStreamWrapperStreamSelectTestCase extends TestCase { /** * @test * @requires PHP < 8 */ + #[Test] + #[RequiresPhp('< 8')] public function selectStreamDoesNotWorkPHP7(): void { $root = vfsStream::setup(); @@ -49,6 +55,8 @@ public function selectStreamDoesNotWorkPHP7(): void * @test * @requires PHP >= 8 */ + #[Test] + #[RequiresPhp('>= 8')] public function selectStreamDoesNotWork(): void { $root = vfsStream::setup(); diff --git a/tests/phpunit/vfsStreamWrapperTestCase.php b/tests/phpunit/vfsStreamWrapperTestCase.php index 0ac43fc..5cde1b3 100644 --- a/tests/phpunit/vfsStreamWrapperTestCase.php +++ b/tests/phpunit/vfsStreamWrapperTestCase.php @@ -14,6 +14,9 @@ use bovigo\vfs\vfsStream; use bovigo\vfs\vfsStreamWrapper; +use PHPUnit\Framework\Attributes\DataProvider; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\Test; use function basename; use function bovigo\assert\assertEmptyString; use function bovigo\assert\assertFalse; @@ -142,6 +145,8 @@ public function filemtime(): void * @test * @group issue_23 */ + #[Test] + #[Group('issue_23')] public function unlinkRemovesFiles(): void { assertTrue(unlink($this->fileInRoot->url())); @@ -153,6 +158,8 @@ public function unlinkRemovesFiles(): void * @test * @group issue_49 */ + #[Test] + #[Group('issue_49')] public function unlinkReturnsFalseWhenFileDoesNotExist(): void { assertFalse(@unlink(vfsStream::url('root.blubb2'))); @@ -162,6 +169,8 @@ public function unlinkReturnsFalseWhenFileDoesNotExist(): void * @test * @group issue_49 */ + #[Test] + #[Group('issue_49')] public function unlinkReturnsFalseWhenFileDoesNotExistAndFileWithSameNameExistsInRoot(): void { vfsStream::setup()->addChild(vfsStream::newFile('foo.blubb')); @@ -195,7 +204,7 @@ public function dirnameForNonExistingPathDoesNotWork(): void /** * @return string[][] */ - public function basenames(): array + public static function basenames(): array { return [ [vfsStream::url('root/subdir'), 'subdir'], @@ -208,6 +217,8 @@ public function basenames(): array * @test * @dataProvider basenames */ + #[Test] + #[DataProvider('basenames')] public function basename(string $path, string $basename): void { assertThat(basename($path), equals($basename)); @@ -217,6 +228,8 @@ public function basename(string $path, string $basename): void * @test * @dataProvider elements */ + #[Test] + #[DataProvider('elements')] public function is_readable(string $element): void { assertTrue(is_readable($this->$element->url())); @@ -227,6 +240,8 @@ public function is_readable(string $element): void * @test * @dataProvider elements */ + #[Test] + #[DataProvider('elements')] public function isNotReadableWithoutReadPermissions(string $element): void { $this->$element->chmod(0222); @@ -245,6 +260,8 @@ public function nonExistingIsNotReadable(): void * @test * @group issue_167 */ + #[Test] + #[Group('issue_167')] public function fileNotOwnedByUserOrGroupIsNotReadable(): void { $this->root->chown(vfsStream::getCurrentUser()); @@ -268,6 +285,8 @@ public function fileNotOwnedByUserOrGroupIsNotReadable(): void * @test * @group issue_167 */ + #[Test] + #[Group('issue_167')] public function fileNotOwnedByUserOrGroupIsReadable(): void { $this->root->chown(vfsStream::getCurrentUser()); @@ -493,7 +512,7 @@ public function chgrpChangesGroup(): void /** * @return string[][] */ - public function targets(): array + public static function targets(): array { return [ [vfsStream::url('root/subdir'), vfsStream::url('root/baz3')], @@ -507,6 +526,9 @@ public function targets(): array * @dataProvider targets * @group issue_9 */ + #[Test] + #[DataProvider('targets')] + #[Group('issue_9')] public function renameDirectory(string $source, string $target): void { assertTrue(rename($source, $target)); @@ -517,6 +539,7 @@ public function renameDirectory(string $source, string $target): void /** * @test */ + #[Test] public function renameDirectoryOverwritingExistingFile(): void { // move root/subdir to root/file2 @@ -529,6 +552,7 @@ public function renameDirectoryOverwritingExistingFile(): void /** * @test */ + #[Test] public function renameFileIntoFileTriggersWarningAndDoesNotChangeFiles(): void { // root/file2 is a file, so it can not be turned into a directory @@ -544,6 +568,7 @@ public function renameFileIntoFileTriggersWarningAndDoesNotChangeFiles(): void /** * @test */ + #[Test] public function moveFileToAnotherDirectoryDirectory(): void { // move root/subdir/file1 to root/baz3 @@ -557,6 +582,7 @@ public function moveFileToAnotherDirectoryDirectory(): void /** * @test */ + #[Test] public function moveFileToAnotherDirectoryDoesNotChangeExistingDirectory(): void { // move root/subdir/file1 to root/baz3 @@ -567,6 +593,7 @@ public function moveFileToAnotherDirectoryDoesNotChangeExistingDirectory(): void /** * @test */ + #[Test] public function renameNonExistingFileTriggersWarning(): void { expect(function (): void { @@ -577,6 +604,7 @@ public function renameNonExistingFileTriggersWarning(): void /** * @test */ + #[Test] public function renameIntoNonExistingDirectoryTriggersWarning(): void { expect(function (): void { @@ -587,6 +615,7 @@ public function renameIntoNonExistingDirectoryTriggersWarning(): void /** * @test */ + #[Test] public function statAndFstatReturnSameResult(): void { $fp = fopen($this->fileInRoot->url(), 'r'); @@ -597,6 +626,7 @@ public function statAndFstatReturnSameResult(): void /** * @test */ + #[Test] public function statReturnsFullDataForFiles(): void { $this->fileInRoot->lastModified(400) @@ -638,6 +668,7 @@ public function statReturnsFullDataForFiles(): void /** * @test */ + #[Test] public function statReturnsFullDataForDirectories(): void { $this->root->lastModified(100) @@ -679,6 +710,7 @@ public function statReturnsFullDataForDirectories(): void /** * @test */ + #[Test] public function statReturnsFullDataForDirectoriesWithDot(): void { $this->root->lastModified(100) @@ -720,6 +752,7 @@ public function statReturnsFullDataForDirectoriesWithDot(): void /** * @test */ + #[Test] public function openFileWithoutDirectory(): void { vfsStreamWrapper::register(); @@ -732,6 +765,8 @@ public function openFileWithoutDirectory(): void * @test * @group issue_33 */ + #[Test] + #[Group('issue_33')] public function truncateRemovesSuperflouosContent(): void { $handle = fopen($this->fileInSubdir->url(), 'r+'); @@ -744,6 +779,8 @@ public function truncateRemovesSuperflouosContent(): void * @test * @group issue_33 */ + #[Test] + #[Group('issue_33')] public function truncateToGreaterSizeAddsZeroBytes(): void { $handle = fopen($this->fileInSubdir->url(), 'r+'); @@ -759,6 +796,8 @@ public function truncateToGreaterSizeAddsZeroBytes(): void * @test * @group issue_11 */ + #[Test] + #[Group('issue_11')] public function touchCreatesNonExistingFile(): void { assertTrue(touch($this->root->url() . '/new.txt')); @@ -769,6 +808,8 @@ public function touchCreatesNonExistingFile(): void * @test * @group issue_11 */ + #[Test] + #[Group('issue_11')] public function touchChangesAccessAndModificationTimeForFile(): void { assertTrue(touch($this->fileInSubdir->url(), 303, 313)); @@ -781,6 +822,9 @@ public function touchChangesAccessAndModificationTimeForFile(): void * @group issue_11 * @group issue_80 */ + #[Test] + #[Group('issue_11')] + #[Group('issue_80')] public function touchChangesTimesToCurrentTimestampWhenNoTimesGiven(): void { assertTrue(touch($this->fileInSubdir->url())); @@ -792,6 +836,8 @@ public function touchChangesTimesToCurrentTimestampWhenNoTimesGiven(): void * @test * @group issue_11 */ + #[Test] + #[Group('issue_11')] public function touchWithModifiedTimeChangesAccessAndModifiedTime(): void { assertTrue(touch($this->fileInSubdir->url(), 303)); @@ -803,6 +849,8 @@ public function touchWithModifiedTimeChangesAccessAndModifiedTime(): void * @test * @group issue_11 */ + #[Test] + #[Group('issue_11')] public function touchChangesAccessAndModificationTimeForDirectory(): void { assertTrue(touch($this->root->url(), 303, 313)); @@ -813,7 +861,7 @@ public function touchChangesAccessAndModificationTimeForDirectory(): void /** * @return mixed[][] */ - public function elements(): array + public static function elements(): array { return [ ['root', 40777], @@ -828,6 +876,8 @@ public function elements(): array * @dataProvider elements * @group issue_34 */ + #[Test] + #[DataProvider('elements')] public function pathesAreCorrectlySet(string $element): void { assertThat($this->$element->path(), equals(vfsStream::path($this->$element->url()))); @@ -837,6 +887,8 @@ public function pathesAreCorrectlySet(string $element): void * @test * @group issue_34 */ + #[Test] + #[Group('issue_34')] public function pathIsUpdatedAfterMove(): void { $baz3URL = vfsStream::url('root/baz3'); @@ -849,6 +901,8 @@ public function pathIsUpdatedAfterMove(): void * @test * @group issue_34 */ + #[Test] + #[Group('issue_34')] public function urlIsUpdatedAfterMove(): void { $baz3URL = vfsStream::url('root/baz3'); @@ -860,6 +914,7 @@ public function urlIsUpdatedAfterMove(): void /** * @test */ + #[Test] public function fileCopy(): void { $baz3URL = vfsStream::url('root/baz3'); @@ -871,6 +926,7 @@ public function fileCopy(): void /** * @test */ + #[Test] public function multipleReadsOnSameFileHaveDifferentPointers(): void { $content = uniqid(); @@ -889,6 +945,7 @@ public function multipleReadsOnSameFileHaveDifferentPointers(): void /** * @test */ + #[Test] public function multipleWritesOnSameFileHaveDifferentPointers(): void { $contentA = uniqid('a'); diff --git a/tests/phpunit/vfsStreamZipTestCase.php b/tests/phpunit/vfsStreamZipTestCase.php index aade60f..941c67d 100644 --- a/tests/phpunit/vfsStreamZipTestCase.php +++ b/tests/phpunit/vfsStreamZipTestCase.php @@ -12,6 +12,8 @@ namespace bovigo\vfs\tests; use bovigo\vfs\vfsStream; +use PHPUnit\Framework\Attributes\Group; +use PHPUnit\Framework\Attributes\Test; use PHPUnit\Framework\TestCase; use ZipArchive; @@ -27,6 +29,7 @@ * * @group zip */ +#[Group('zip')] class vfsStreamZipTestCase extends TestCase { /**