diff --git a/.phive/phars.xml b/.phive/phars.xml index a2b6dff..0cce285 100644 --- a/.phive/phars.xml +++ b/.phive/phars.xml @@ -1,8 +1,8 @@ - - - + + + diff --git a/tools/composer b/tools/composer index 03c724b..e766506 100755 Binary files a/tools/composer and b/tools/composer differ diff --git a/tools/php-cs-fixer b/tools/php-cs-fixer index a17ed7a..e246d40 100755 Binary files a/tools/php-cs-fixer and b/tools/php-cs-fixer differ diff --git a/tools/phpunit b/tools/phpunit index fa00bd1..3d85e70 100755 --- a/tools/phpunit +++ b/tools/phpunit @@ -19,7 +19,7 @@ if (version_compare('8.1.0', PHP_VERSION, '>')) { fwrite( STDERR, sprintf( - 'PHPUnit 10.3.5 by Sebastian Bergmann and contributors.' . PHP_EOL . PHP_EOL . + 'PHPUnit 10.4.0 by Sebastian Bergmann and contributors.' . PHP_EOL . PHP_EOL . 'This version of PHPUnit requires PHP >= 8.1.' . PHP_EOL . 'You are using PHP %s (%s).' . PHP_EOL, PHP_VERSION, @@ -72,9 +72,9 @@ if (isset($options['manifest'])) { unset($options); define('__PHPUNIT_PHAR__', str_replace(DIRECTORY_SEPARATOR, '/', __FILE__)); -define('__PHPUNIT_PHAR_ROOT__', 'phar://phpunit-10.3.5.phar'); +define('__PHPUNIT_PHAR_ROOT__', 'phar://phpunit-10.4.0.phar'); -Phar::mapPhar('phpunit-10.3.5.phar'); +Phar::mapPhar('phpunit-10.4.0.phar'); spl_autoload_register( function ($class) { @@ -298,6 +298,8 @@ spl_autoload_register( 'PHPUnit\\Event\\Test\\PreConditionCalledSubscriber' => '/phpunit/Event/Events/Test/HookMethod/PreConditionCalledSubscriber.php', 'PHPUnit\\Event\\Test\\PreConditionFinished' => '/phpunit/Event/Events/Test/HookMethod/PreConditionFinished.php', 'PHPUnit\\Event\\Test\\PreConditionFinishedSubscriber' => '/phpunit/Event/Events/Test/HookMethod/PreConditionFinishedSubscriber.php', + 'PHPUnit\\Event\\Test\\PreparationFailed' => '/phpunit/Event/Events/Test/Lifecycle/PreparationFailed.php', + 'PHPUnit\\Event\\Test\\PreparationFailedSubscriber' => '/phpunit/Event/Events/Test/Lifecycle/PreparationFailedSubscriber.php', 'PHPUnit\\Event\\Test\\PreparationStarted' => '/phpunit/Event/Events/Test/Lifecycle/PreparationStarted.php', 'PHPUnit\\Event\\Test\\PreparationStartedSubscriber' => '/phpunit/Event/Events/Test/Lifecycle/PreparationStartedSubscriber.php', 'PHPUnit\\Event\\Test\\Prepared' => '/phpunit/Event/Events/Test/Lifecycle/Prepared.php', @@ -457,6 +459,7 @@ spl_autoload_register( 'PHPUnit\\Framework\\MockObject\\CannotUseAddMethodsException' => '/phpunit/Framework/MockObject/Exception/CannotUseAddMethodsException.php', 'PHPUnit\\Framework\\MockObject\\CannotUseOnlyMethodsException' => '/phpunit/Framework/MockObject/Exception/CannotUseOnlyMethodsException.php', 'PHPUnit\\Framework\\MockObject\\ConfigurableMethod' => '/phpunit/Framework/MockObject/ConfigurableMethod.php', + 'PHPUnit\\Framework\\MockObject\\DoubledCloneMethod' => '/phpunit/Framework/MockObject/Runtime/Api/DoubledCloneMethod.php', 'PHPUnit\\Framework\\MockObject\\Exception' => '/phpunit/Framework/MockObject/Exception/Exception.php', 'PHPUnit\\Framework\\MockObject\\Generator\\ClassAlreadyExistsException' => '/phpunit/Framework/MockObject/Generator/Exception/ClassAlreadyExistsException.php', 'PHPUnit\\Framework\\MockObject\\Generator\\ClassIsEnumerationException' => '/phpunit/Framework/MockObject/Generator/Exception/ClassIsEnumerationException.php', @@ -495,7 +498,7 @@ spl_autoload_register( 'PHPUnit\\Framework\\MockObject\\MockObject' => '/phpunit/Framework/MockObject/Runtime/Interface/MockObject.php', 'PHPUnit\\Framework\\MockObject\\MockObjectApi' => '/phpunit/Framework/MockObject/Runtime/Api/MockObjectApi.php', 'PHPUnit\\Framework\\MockObject\\MockObjectInternal' => '/phpunit/Framework/MockObject/Runtime/Interface/MockObjectInternal.php', - 'PHPUnit\\Framework\\MockObject\\MockedCloneMethod' => '/phpunit/Framework/MockObject/Runtime/Api/MockedCloneMethod.php', + 'PHPUnit\\Framework\\MockObject\\ProxiedCloneMethod' => '/phpunit/Framework/MockObject/Runtime/Api/ProxiedCloneMethod.php', 'PHPUnit\\Framework\\MockObject\\ReflectionException' => '/phpunit/Framework/MockObject/Exception/ReflectionException.php', 'PHPUnit\\Framework\\MockObject\\ReturnValueGenerator' => '/phpunit/Framework/MockObject/Runtime/ReturnValueGenerator.php', 'PHPUnit\\Framework\\MockObject\\ReturnValueNotConfiguredException' => '/phpunit/Framework/MockObject/Exception/ReturnValueNotConfiguredException.php', @@ -522,7 +525,6 @@ spl_autoload_register( 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnStub' => '/phpunit/Framework/MockObject/Runtime/Stub/ReturnStub.php', 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnValueMap' => '/phpunit/Framework/MockObject/Runtime/Stub/ReturnValueMap.php', 'PHPUnit\\Framework\\MockObject\\Stub\\Stub' => '/phpunit/Framework/MockObject/Runtime/Stub/Stub.php', - 'PHPUnit\\Framework\\MockObject\\UnmockedCloneMethod' => '/phpunit/Framework/MockObject/Runtime/Api/UnmockedCloneMethod.php', 'PHPUnit\\Framework\\NoChildTestSuiteException' => '/phpunit/Framework/Exception/NoChildTestSuiteException.php', 'PHPUnit\\Framework\\PhptAssertionFailedError' => '/phpunit/Framework/Exception/PhptAssertionFailedError.php', 'PHPUnit\\Framework\\ProcessIsolationException' => '/phpunit/Framework/Exception/ProcessIsolationException.php', @@ -994,6 +996,21 @@ spl_autoload_register( 'PHPUnit\\PhpParser\\Parser\\Tokens' => '/nikic-php-parser/PhpParser/Parser/Tokens.php', 'PHPUnit\\PhpParser\\PrettyPrinterAbstract' => '/nikic-php-parser/PhpParser/PrettyPrinterAbstract.php', 'PHPUnit\\PhpParser\\PrettyPrinter\\Standard' => '/nikic-php-parser/PhpParser/PrettyPrinter/Standard.php', + 'PHPUnit\\Runner\\Baseline\\Baseline' => '/phpunit/Runner/Baseline/Baseline.php', + 'PHPUnit\\Runner\\Baseline\\CannotLoadBaselineException' => '/phpunit/Runner/Baseline/Exception/CannotLoadBaselineException.php', + 'PHPUnit\\Runner\\Baseline\\FileDoesNotHaveLineException' => '/phpunit/Runner/Baseline/Exception/FileDoesNotHaveLineException.php', + 'PHPUnit\\Runner\\Baseline\\Generator' => '/phpunit/Runner/Baseline/Generator.php', + 'PHPUnit\\Runner\\Baseline\\Issue' => '/phpunit/Runner/Baseline/Issue.php', + 'PHPUnit\\Runner\\Baseline\\Reader' => '/phpunit/Runner/Baseline/Reader.php', + 'PHPUnit\\Runner\\Baseline\\RelativePathCalculator' => '/phpunit/Runner/Baseline/RelativePathCalculator.php', + 'PHPUnit\\Runner\\Baseline\\Subscriber' => '/phpunit/Runner/Baseline/Subscriber/Subscriber.php', + 'PHPUnit\\Runner\\Baseline\\TestTriggeredDeprecationSubscriber' => '/phpunit/Runner/Baseline/Subscriber/TestTriggeredDeprecationSubscriber.php', + 'PHPUnit\\Runner\\Baseline\\TestTriggeredNoticeSubscriber' => '/phpunit/Runner/Baseline/Subscriber/TestTriggeredNoticeSubscriber.php', + 'PHPUnit\\Runner\\Baseline\\TestTriggeredPhpDeprecationSubscriber' => '/phpunit/Runner/Baseline/Subscriber/TestTriggeredPhpDeprecationSubscriber.php', + 'PHPUnit\\Runner\\Baseline\\TestTriggeredPhpNoticeSubscriber' => '/phpunit/Runner/Baseline/Subscriber/TestTriggeredPhpNoticeSubscriber.php', + 'PHPUnit\\Runner\\Baseline\\TestTriggeredPhpWarningSubscriber' => '/phpunit/Runner/Baseline/Subscriber/TestTriggeredPhpWarningSubscriber.php', + 'PHPUnit\\Runner\\Baseline\\TestTriggeredWarningSubscriber' => '/phpunit/Runner/Baseline/Subscriber/TestTriggeredWarningSubscriber.php', + 'PHPUnit\\Runner\\Baseline\\Writer' => '/phpunit/Runner/Baseline/Writer.php', 'PHPUnit\\Runner\\ClassCannotBeFoundException' => '/phpunit/Runner/Exception/ClassCannotBeFoundException.php', 'PHPUnit\\Runner\\ClassDoesNotExtendTestCaseException' => '/phpunit/Runner/Exception/ClassDoesNotExtendTestCaseException.php', 'PHPUnit\\Runner\\ClassIsAbstractException' => '/phpunit/Runner/Exception/ClassIsAbstractException.php', @@ -1012,6 +1029,7 @@ spl_autoload_register( 'PHPUnit\\Runner\\Filter\\GroupFilterIterator' => '/phpunit/Runner/Filter/GroupFilterIterator.php', 'PHPUnit\\Runner\\Filter\\IncludeGroupFilterIterator' => '/phpunit/Runner/Filter/IncludeGroupFilterIterator.php', 'PHPUnit\\Runner\\Filter\\NameFilterIterator' => '/phpunit/Runner/Filter/NameFilterIterator.php', + 'PHPUnit\\Runner\\Filter\\TestIdFilterIterator' => '/phpunit/Runner/Filter/TestIdFilterIterator.php', 'PHPUnit\\Runner\\GarbageCollection\\ExecutionFinishedSubscriber' => '/phpunit/Runner/GarbageCollection/Subscriber/ExecutionFinishedSubscriber.php', 'PHPUnit\\Runner\\GarbageCollection\\ExecutionStartedSubscriber' => '/phpunit/Runner/GarbageCollection/Subscriber/ExecutionStartedSubscriber.php', 'PHPUnit\\Runner\\GarbageCollection\\GarbageCollectionHandler' => '/phpunit/Runner/GarbageCollection/GarbageCollectionHandler.php', @@ -1324,6 +1342,7 @@ spl_autoload_register( 'PHPUnit\\TextUI\\Configuration\\IniSettingCollectionIterator' => '/phpunit/TextUI/Configuration/Value/IniSettingCollectionIterator.php', 'PHPUnit\\TextUI\\Configuration\\LoggingNotConfiguredException' => '/phpunit/TextUI/Configuration/Exception/LoggingNotConfiguredException.php', 'PHPUnit\\TextUI\\Configuration\\Merger' => '/phpunit/TextUI/Configuration/Merger.php', + 'PHPUnit\\TextUI\\Configuration\\NoBaselineException' => '/phpunit/TextUI/Configuration/Exception/NoBaselineException.php', 'PHPUnit\\TextUI\\Configuration\\NoBootstrapException' => '/phpunit/TextUI/Configuration/Exception/NoBootstrapException.php', 'PHPUnit\\TextUI\\Configuration\\NoCacheDirectoryException' => '/phpunit/TextUI/Configuration/Exception/NoCacheDirectoryException.php', 'PHPUnit\\TextUI\\Configuration\\NoCliArgumentException' => '/phpunit/TextUI/Configuration/Exception/NoCliArgumentException.php', @@ -1474,6 +1493,7 @@ spl_autoload_register( 'PHPUnit\\Util\\Color' => '/phpunit/Util/Color.php', 'PHPUnit\\Util\\Exception' => '/phpunit/Util/Exception/Exception.php', 'PHPUnit\\Util\\ExcludeList' => '/phpunit/Util/ExcludeList.php', + 'PHPUnit\\Util\\Exporter' => '/phpunit/Util/Exporter.php', 'PHPUnit\\Util\\Filesystem' => '/phpunit/Util/Filesystem.php', 'PHPUnit\\Util\\Filter' => '/phpunit/Util/Filter.php', 'PHPUnit\\Util\\GlobalState' => '/phpunit/Util/GlobalState.php', @@ -1495,7 +1515,7 @@ spl_autoload_register( } if (isset($classes[$class])) { - require_once 'phar://phpunit-10.3.5.phar' . $classes[$class]; + require_once 'phar://phpunit-10.4.0.phar' . $classes[$class]; } }, true, @@ -1719,6 +1739,8 @@ foreach (['PHPUnit\\DeepCopy\\DeepCopy' => '/myclabs-deep-copy/DeepCopy/DeepCopy 'PHPUnit\\Event\\Test\\PreConditionCalledSubscriber' => '/phpunit/Event/Events/Test/HookMethod/PreConditionCalledSubscriber.php', 'PHPUnit\\Event\\Test\\PreConditionFinished' => '/phpunit/Event/Events/Test/HookMethod/PreConditionFinished.php', 'PHPUnit\\Event\\Test\\PreConditionFinishedSubscriber' => '/phpunit/Event/Events/Test/HookMethod/PreConditionFinishedSubscriber.php', + 'PHPUnit\\Event\\Test\\PreparationFailed' => '/phpunit/Event/Events/Test/Lifecycle/PreparationFailed.php', + 'PHPUnit\\Event\\Test\\PreparationFailedSubscriber' => '/phpunit/Event/Events/Test/Lifecycle/PreparationFailedSubscriber.php', 'PHPUnit\\Event\\Test\\PreparationStarted' => '/phpunit/Event/Events/Test/Lifecycle/PreparationStarted.php', 'PHPUnit\\Event\\Test\\PreparationStartedSubscriber' => '/phpunit/Event/Events/Test/Lifecycle/PreparationStartedSubscriber.php', 'PHPUnit\\Event\\Test\\Prepared' => '/phpunit/Event/Events/Test/Lifecycle/Prepared.php', @@ -1878,6 +1900,7 @@ foreach (['PHPUnit\\DeepCopy\\DeepCopy' => '/myclabs-deep-copy/DeepCopy/DeepCopy 'PHPUnit\\Framework\\MockObject\\CannotUseAddMethodsException' => '/phpunit/Framework/MockObject/Exception/CannotUseAddMethodsException.php', 'PHPUnit\\Framework\\MockObject\\CannotUseOnlyMethodsException' => '/phpunit/Framework/MockObject/Exception/CannotUseOnlyMethodsException.php', 'PHPUnit\\Framework\\MockObject\\ConfigurableMethod' => '/phpunit/Framework/MockObject/ConfigurableMethod.php', + 'PHPUnit\\Framework\\MockObject\\DoubledCloneMethod' => '/phpunit/Framework/MockObject/Runtime/Api/DoubledCloneMethod.php', 'PHPUnit\\Framework\\MockObject\\Exception' => '/phpunit/Framework/MockObject/Exception/Exception.php', 'PHPUnit\\Framework\\MockObject\\Generator\\ClassAlreadyExistsException' => '/phpunit/Framework/MockObject/Generator/Exception/ClassAlreadyExistsException.php', 'PHPUnit\\Framework\\MockObject\\Generator\\ClassIsEnumerationException' => '/phpunit/Framework/MockObject/Generator/Exception/ClassIsEnumerationException.php', @@ -1916,7 +1939,7 @@ foreach (['PHPUnit\\DeepCopy\\DeepCopy' => '/myclabs-deep-copy/DeepCopy/DeepCopy 'PHPUnit\\Framework\\MockObject\\MockObject' => '/phpunit/Framework/MockObject/Runtime/Interface/MockObject.php', 'PHPUnit\\Framework\\MockObject\\MockObjectApi' => '/phpunit/Framework/MockObject/Runtime/Api/MockObjectApi.php', 'PHPUnit\\Framework\\MockObject\\MockObjectInternal' => '/phpunit/Framework/MockObject/Runtime/Interface/MockObjectInternal.php', - 'PHPUnit\\Framework\\MockObject\\MockedCloneMethod' => '/phpunit/Framework/MockObject/Runtime/Api/MockedCloneMethod.php', + 'PHPUnit\\Framework\\MockObject\\ProxiedCloneMethod' => '/phpunit/Framework/MockObject/Runtime/Api/ProxiedCloneMethod.php', 'PHPUnit\\Framework\\MockObject\\ReflectionException' => '/phpunit/Framework/MockObject/Exception/ReflectionException.php', 'PHPUnit\\Framework\\MockObject\\ReturnValueGenerator' => '/phpunit/Framework/MockObject/Runtime/ReturnValueGenerator.php', 'PHPUnit\\Framework\\MockObject\\ReturnValueNotConfiguredException' => '/phpunit/Framework/MockObject/Exception/ReturnValueNotConfiguredException.php', @@ -1943,7 +1966,6 @@ foreach (['PHPUnit\\DeepCopy\\DeepCopy' => '/myclabs-deep-copy/DeepCopy/DeepCopy 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnStub' => '/phpunit/Framework/MockObject/Runtime/Stub/ReturnStub.php', 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnValueMap' => '/phpunit/Framework/MockObject/Runtime/Stub/ReturnValueMap.php', 'PHPUnit\\Framework\\MockObject\\Stub\\Stub' => '/phpunit/Framework/MockObject/Runtime/Stub/Stub.php', - 'PHPUnit\\Framework\\MockObject\\UnmockedCloneMethod' => '/phpunit/Framework/MockObject/Runtime/Api/UnmockedCloneMethod.php', 'PHPUnit\\Framework\\NoChildTestSuiteException' => '/phpunit/Framework/Exception/NoChildTestSuiteException.php', 'PHPUnit\\Framework\\PhptAssertionFailedError' => '/phpunit/Framework/Exception/PhptAssertionFailedError.php', 'PHPUnit\\Framework\\ProcessIsolationException' => '/phpunit/Framework/Exception/ProcessIsolationException.php', @@ -2415,6 +2437,21 @@ foreach (['PHPUnit\\DeepCopy\\DeepCopy' => '/myclabs-deep-copy/DeepCopy/DeepCopy 'PHPUnit\\PhpParser\\Parser\\Tokens' => '/nikic-php-parser/PhpParser/Parser/Tokens.php', 'PHPUnit\\PhpParser\\PrettyPrinterAbstract' => '/nikic-php-parser/PhpParser/PrettyPrinterAbstract.php', 'PHPUnit\\PhpParser\\PrettyPrinter\\Standard' => '/nikic-php-parser/PhpParser/PrettyPrinter/Standard.php', + 'PHPUnit\\Runner\\Baseline\\Baseline' => '/phpunit/Runner/Baseline/Baseline.php', + 'PHPUnit\\Runner\\Baseline\\CannotLoadBaselineException' => '/phpunit/Runner/Baseline/Exception/CannotLoadBaselineException.php', + 'PHPUnit\\Runner\\Baseline\\FileDoesNotHaveLineException' => '/phpunit/Runner/Baseline/Exception/FileDoesNotHaveLineException.php', + 'PHPUnit\\Runner\\Baseline\\Generator' => '/phpunit/Runner/Baseline/Generator.php', + 'PHPUnit\\Runner\\Baseline\\Issue' => '/phpunit/Runner/Baseline/Issue.php', + 'PHPUnit\\Runner\\Baseline\\Reader' => '/phpunit/Runner/Baseline/Reader.php', + 'PHPUnit\\Runner\\Baseline\\RelativePathCalculator' => '/phpunit/Runner/Baseline/RelativePathCalculator.php', + 'PHPUnit\\Runner\\Baseline\\Subscriber' => '/phpunit/Runner/Baseline/Subscriber/Subscriber.php', + 'PHPUnit\\Runner\\Baseline\\TestTriggeredDeprecationSubscriber' => '/phpunit/Runner/Baseline/Subscriber/TestTriggeredDeprecationSubscriber.php', + 'PHPUnit\\Runner\\Baseline\\TestTriggeredNoticeSubscriber' => '/phpunit/Runner/Baseline/Subscriber/TestTriggeredNoticeSubscriber.php', + 'PHPUnit\\Runner\\Baseline\\TestTriggeredPhpDeprecationSubscriber' => '/phpunit/Runner/Baseline/Subscriber/TestTriggeredPhpDeprecationSubscriber.php', + 'PHPUnit\\Runner\\Baseline\\TestTriggeredPhpNoticeSubscriber' => '/phpunit/Runner/Baseline/Subscriber/TestTriggeredPhpNoticeSubscriber.php', + 'PHPUnit\\Runner\\Baseline\\TestTriggeredPhpWarningSubscriber' => '/phpunit/Runner/Baseline/Subscriber/TestTriggeredPhpWarningSubscriber.php', + 'PHPUnit\\Runner\\Baseline\\TestTriggeredWarningSubscriber' => '/phpunit/Runner/Baseline/Subscriber/TestTriggeredWarningSubscriber.php', + 'PHPUnit\\Runner\\Baseline\\Writer' => '/phpunit/Runner/Baseline/Writer.php', 'PHPUnit\\Runner\\ClassCannotBeFoundException' => '/phpunit/Runner/Exception/ClassCannotBeFoundException.php', 'PHPUnit\\Runner\\ClassDoesNotExtendTestCaseException' => '/phpunit/Runner/Exception/ClassDoesNotExtendTestCaseException.php', 'PHPUnit\\Runner\\ClassIsAbstractException' => '/phpunit/Runner/Exception/ClassIsAbstractException.php', @@ -2433,6 +2470,7 @@ foreach (['PHPUnit\\DeepCopy\\DeepCopy' => '/myclabs-deep-copy/DeepCopy/DeepCopy 'PHPUnit\\Runner\\Filter\\GroupFilterIterator' => '/phpunit/Runner/Filter/GroupFilterIterator.php', 'PHPUnit\\Runner\\Filter\\IncludeGroupFilterIterator' => '/phpunit/Runner/Filter/IncludeGroupFilterIterator.php', 'PHPUnit\\Runner\\Filter\\NameFilterIterator' => '/phpunit/Runner/Filter/NameFilterIterator.php', + 'PHPUnit\\Runner\\Filter\\TestIdFilterIterator' => '/phpunit/Runner/Filter/TestIdFilterIterator.php', 'PHPUnit\\Runner\\GarbageCollection\\ExecutionFinishedSubscriber' => '/phpunit/Runner/GarbageCollection/Subscriber/ExecutionFinishedSubscriber.php', 'PHPUnit\\Runner\\GarbageCollection\\ExecutionStartedSubscriber' => '/phpunit/Runner/GarbageCollection/Subscriber/ExecutionStartedSubscriber.php', 'PHPUnit\\Runner\\GarbageCollection\\GarbageCollectionHandler' => '/phpunit/Runner/GarbageCollection/GarbageCollectionHandler.php', @@ -2745,6 +2783,7 @@ foreach (['PHPUnit\\DeepCopy\\DeepCopy' => '/myclabs-deep-copy/DeepCopy/DeepCopy 'PHPUnit\\TextUI\\Configuration\\IniSettingCollectionIterator' => '/phpunit/TextUI/Configuration/Value/IniSettingCollectionIterator.php', 'PHPUnit\\TextUI\\Configuration\\LoggingNotConfiguredException' => '/phpunit/TextUI/Configuration/Exception/LoggingNotConfiguredException.php', 'PHPUnit\\TextUI\\Configuration\\Merger' => '/phpunit/TextUI/Configuration/Merger.php', + 'PHPUnit\\TextUI\\Configuration\\NoBaselineException' => '/phpunit/TextUI/Configuration/Exception/NoBaselineException.php', 'PHPUnit\\TextUI\\Configuration\\NoBootstrapException' => '/phpunit/TextUI/Configuration/Exception/NoBootstrapException.php', 'PHPUnit\\TextUI\\Configuration\\NoCacheDirectoryException' => '/phpunit/TextUI/Configuration/Exception/NoCacheDirectoryException.php', 'PHPUnit\\TextUI\\Configuration\\NoCliArgumentException' => '/phpunit/TextUI/Configuration/Exception/NoCliArgumentException.php', @@ -2895,6 +2934,7 @@ foreach (['PHPUnit\\DeepCopy\\DeepCopy' => '/myclabs-deep-copy/DeepCopy/DeepCopy 'PHPUnit\\Util\\Color' => '/phpunit/Util/Color.php', 'PHPUnit\\Util\\Exception' => '/phpunit/Util/Exception/Exception.php', 'PHPUnit\\Util\\ExcludeList' => '/phpunit/Util/ExcludeList.php', + 'PHPUnit\\Util\\Exporter' => '/phpunit/Util/Exporter.php', 'PHPUnit\\Util\\Filesystem' => '/phpunit/Util/Filesystem.php', 'PHPUnit\\Util\\Filter' => '/phpunit/Util/Filter.php', 'PHPUnit\\Util\\GlobalState' => '/phpunit/Util/GlobalState.php', @@ -2913,7 +2953,7 @@ foreach (['PHPUnit\\DeepCopy\\DeepCopy' => '/myclabs-deep-copy/DeepCopy/DeepCopy 'PHPUnit\\Util\\Xml' => '/phpunit/Util/Xml/Xml.php', 'PHPUnit\\Util\\Xml\\Loader' => '/phpunit/Util/Xml/Loader.php', 'PHPUnit\\Util\\Xml\\XmlException' => '/phpunit/Util/Exception/XmlException.php'] as $file) { - require_once 'phar://phpunit-10.3.5.phar' . $file; + require_once 'phar://phpunit-10.4.0.phar' . $file; } require __PHPUNIT_PHAR_ROOT__ . '/phpunit/Framework/Assert/Functions.php'; @@ -2937,97 +2977,104 @@ if ($execute) { } __HALT_COMPILER(); ?> -Gphpunit-10.3.5.phar manifest.txt4 e'myclabs-deep-copy/DeepCopy/DeepCopy.php4 eLä7myclabs-deep-copy/DeepCopy/Exception/CloneException.php4 e {ˤ:myclabs-deep-copy/DeepCopy/Exception/PropertyException.php4 e3Gz5myclabs-deep-copy/DeepCopy/Filter/ChainableFilter.php4 eTE Gmyclabs-deep-copy/DeepCopy/Filter/Doctrine/DoctrineCollectionFilter.php -4 e -DgLmyclabs-deep-copy/DeepCopy/Filter/Doctrine/DoctrineEmptyCollectionFilter.php4 e)$Bmyclabs-deep-copy/DeepCopy/Filter/Doctrine/DoctrineProxyFilter.php4 e),myclabs-deep-copy/DeepCopy/Filter/Filter.phpd4 edM0myclabs-deep-copy/DeepCopy/Filter/KeepFilter.php4 eYn3myclabs-deep-copy/DeepCopy/Filter/ReplaceFilter.php4 e3myclabs-deep-copy/DeepCopy/Filter/SetNullFilter.php4 e䊉Dmyclabs-deep-copy/DeepCopy/Matcher/Doctrine/DoctrineProxyMatcher.php4 epr.myclabs-deep-copy/DeepCopy/Matcher/Matcher.php4 e6myclabs-deep-copy/DeepCopy/Matcher/PropertyMatcher.php4 e=Bv:myclabs-deep-copy/DeepCopy/Matcher/PropertyNameMatcher.php4 eR:myclabs-deep-copy/DeepCopy/Matcher/PropertyTypeMatcher.php24 e2ZQͤ:myclabs-deep-copy/DeepCopy/Reflection/ReflectionHelper.php54 e5ىAmyclabs-deep-copy/DeepCopy/TypeFilter/Date/DateIntervalFilter.php4 eƤ7myclabs-deep-copy/DeepCopy/TypeFilter/ReplaceFilter.php4 ez;myclabs-deep-copy/DeepCopy/TypeFilter/ShallowCopyFilter.php4 eؤ?myclabs-deep-copy/DeepCopy/TypeFilter/Spl/ArrayObjectFilter.php4 e^Amyclabs-deep-copy/DeepCopy/TypeFilter/Spl/SplDoublyLinkedList.php4 ev|Gmyclabs-deep-copy/DeepCopy/TypeFilter/Spl/SplDoublyLinkedListFilter.php4 eT+4myclabs-deep-copy/DeepCopy/TypeFilter/TypeFilter.php4 eVD6myclabs-deep-copy/DeepCopy/TypeMatcher/TypeMatcher.php4 eQBŤ(myclabs-deep-copy/DeepCopy/deep_copy.php4 erxmyclabs-deep-copy/LICENSE54 e5ʭ˄nikic-php-parser/LICENSE4 e*&nikic-php-parser/PhpParser/Builder.php4 e61nikic-php-parser/PhpParser/Builder/ClassConst.php4 e-nikic-php-parser/PhpParser/Builder/Class_.php4 ec32nikic-php-parser/PhpParser/Builder/Declaration.php4 eE7/nikic-php-parser/PhpParser/Builder/EnumCase.php^4 e^ueT,nikic-php-parser/PhpParser/Builder/Enum_.php 4 e #3nikic-php-parser/PhpParser/Builder/FunctionLike.php4 eZqe0nikic-php-parser/PhpParser/Builder/Function_.phpF4 eFux1nikic-php-parser/PhpParser/Builder/Interface_.php 4 e -nikic-php-parser/PhpParser/Builder/Method.php4 e}1nikic-php-parser/PhpParser/Builder/Namespace_.php:4 e:ˆp,nikic-php-parser/PhpParser/Builder/Param.php{4 e{j4/nikic-php-parser/PhpParser/Builder/Property.php|4 e|O /nikic-php-parser/PhpParser/Builder/TraitUse.phpW4 eWL@9nikic-php-parser/PhpParser/Builder/TraitUseAdaptation.php4 eUVx-nikic-php-parser/PhpParser/Builder/Trait_.php4 ekj+nikic-php-parser/PhpParser/Builder/Use_.php4 es-nikic-php-parser/PhpParser/BuilderFactory.php+4 e+ $-nikic-php-parser/PhpParser/BuilderHelpers.php$4 e$:@&nikic-php-parser/PhpParser/Comment.php4 eA*nikic-php-parser/PhpParser/Comment/Doc.phpx4 exp;nikic-php-parser/PhpParser/ConstExprEvaluationException.php_4 e_I 1nikic-php-parser/PhpParser/ConstExprEvaluator.phpl%4 el%evQ$nikic-php-parser/PhpParser/Error.php4 eQZ+nikic-php-parser/PhpParser/ErrorHandler.php/4 e/#\6nikic-php-parser/PhpParser/ErrorHandler/Collecting.php4 e&Ȥ4nikic-php-parser/PhpParser/ErrorHandler/Throwing.php4 eS}<0nikic-php-parser/PhpParser/Internal/DiffElem.php74 e7$.nikic-php-parser/PhpParser/Internal/Differ.php-4 e-^Anikic-php-parser/PhpParser/Internal/PrintableNewAnonClassNode.php4 e<3nikic-php-parser/PhpParser/Internal/TokenStream.php#4 e#f*nikic-php-parser/PhpParser/JsonDecoder.php 4 e xg$nikic-php-parser/PhpParser/Lexer.phpyZ4 eyZq⃤.nikic-php-parser/PhpParser/Lexer/Emulative.phpO#4 eO#ܲݤDnikic-php-parser/PhpParser/Lexer/TokenEmulator/AttributeEmulator.php4 erLnikic-php-parser/PhpParser/Lexer/TokenEmulator/CoaleseEqualTokenEmulator.php 4 e *§oDnikic-php-parser/PhpParser/Lexer/TokenEmulator/EnumTokenEmulator.php4 eLFHnikic-php-parser/PhpParser/Lexer/TokenEmulator/ExplicitOctalEmulator.php4 e*#Lnikic-php-parser/PhpParser/Lexer/TokenEmulator/FlexibleDocStringEmulator.phpn 4 en 1Bnikic-php-parser/PhpParser/Lexer/TokenEmulator/FnTokenEmulator.php4 ejBnikic-php-parser/PhpParser/Lexer/TokenEmulator/KeywordEmulator.php4 e`atEnikic-php-parser/PhpParser/Lexer/TokenEmulator/MatchTokenEmulator.php4 ec/Hnikic-php-parser/PhpParser/Lexer/TokenEmulator/NullsafeTokenEmulator.php4 e:&ERnikic-php-parser/PhpParser/Lexer/TokenEmulator/NumericLiteralSeparatorEmulator.phpV4 eVPnikic-php-parser/PhpParser/Lexer/TokenEmulator/ReadonlyFunctionTokenEmulator.php4 ee!ćHnikic-php-parser/PhpParser/Lexer/TokenEmulator/ReadonlyTokenEmulator.phpL4 eL -`9JBnikic-php-parser/PhpParser/Lexer/TokenEmulator/ReverseEmulator.php4 eI}@nikic-php-parser/PhpParser/Lexer/TokenEmulator/TokenEmulator.phpu4 euD4h*nikic-php-parser/PhpParser/NameContext.php%4 e%G-#nikic-php-parser/PhpParser/Node.php4 eyݗ'nikic-php-parser/PhpParser/Node/Arg.php04 e0q H-nikic-php-parser/PhpParser/Node/Attribute.phpH4 eHhqK2nikic-php-parser/PhpParser/Node/AttributeGroup.php4 eB9/nikic-php-parser/PhpParser/Node/ComplexType.phpS4 eS(*nikic-php-parser/PhpParser/Node/Const_.php4 eZ(nikic-php-parser/PhpParser/Node/Expr.php4 eh傤6nikic-php-parser/PhpParser/Node/Expr/ArrayDimFetch.phpM4 eMIY2nikic-php-parser/PhpParser/Node/Expr/ArrayItem.phpx4 ex| 2/nikic-php-parser/PhpParser/Node/Expr/Array_.php84 e8;p6nikic-php-parser/PhpParser/Node/Expr/ArrowFunction.php 4 e w3/nikic-php-parser/PhpParser/Node/Expr/Assign.php4 e1nikic-php-parser/PhpParser/Node/Expr/AssignOp.php4 e,<nikic-php-parser/PhpParser/Node/Expr/AssignOp/BitwiseAnd.php4 eu;nikic-php-parser/PhpParser/Node/Expr/AssignOp/BitwiseOr.php4 e;<nikic-php-parser/PhpParser/Node/Expr/AssignOp/BitwiseXor.php4 elϚ:nikic-php-parser/PhpParser/Node/Expr/AssignOp/Coalesce.php4 eq,8nikic-php-parser/PhpParser/Node/Expr/AssignOp/Concat.php4 e5nikic-php-parser/PhpParser/Node/Expr/AssignOp/Div.php4 eYP -7nikic-php-parser/PhpParser/Node/Expr/AssignOp/Minus.php4 e隤5nikic-php-parser/PhpParser/Node/Expr/AssignOp/Mod.php4 e]10Y5nikic-php-parser/PhpParser/Node/Expr/AssignOp/Mul.php4 eπ/6nikic-php-parser/PhpParser/Node/Expr/AssignOp/Plus.php4 e&|5nikic-php-parser/PhpParser/Node/Expr/AssignOp/Pow.php4 eyV;nikic-php-parser/PhpParser/Node/Expr/AssignOp/ShiftLeft.php4 e<nikic-php-parser/PhpParser/Node/Expr/AssignOp/ShiftRight.php4 es*2nikic-php-parser/PhpParser/Node/Expr/AssignRef.phpH4 eHE`ob1nikic-php-parser/PhpParser/Node/Expr/BinaryOp.phpo4 eo Ѥ<nikic-php-parser/PhpParser/Node/Expr/BinaryOp/BitwiseAnd.phpP4 eP6L6;nikic-php-parser/PhpParser/Node/Expr/BinaryOp/BitwiseOr.phpN4 eN_|<nikic-php-parser/PhpParser/Node/Expr/BinaryOp/BitwiseXor.phpP4 eP~Ƥ<nikic-php-parser/PhpParser/Node/Expr/BinaryOp/BooleanAnd.phpQ4 eQ5v;nikic-php-parser/PhpParser/Node/Expr/BinaryOp/BooleanOr.phpO4 eOeӸ:nikic-php-parser/PhpParser/Node/Expr/BinaryOp/Coalesce.phpM4 eMY 8nikic-php-parser/PhpParser/Node/Expr/BinaryOp/Concat.phpH4 eH @q5nikic-php-parser/PhpParser/Node/Expr/BinaryOp/Div.phpB4 eBi7nikic-php-parser/PhpParser/Node/Expr/BinaryOp/Equal.phpG4 eGݙʤ9nikic-php-parser/PhpParser/Node/Expr/BinaryOp/Greater.phpJ4 eJ4ͤ@nikic-php-parser/PhpParser/Node/Expr/BinaryOp/GreaterOrEqual.phpY4 eY^ز;nikic-php-parser/PhpParser/Node/Expr/BinaryOp/Identical.phpP4 eP"<nikic-php-parser/PhpParser/Node/Expr/BinaryOp/LogicalAnd.phpR4 eRi;nikic-php-parser/PhpParser/Node/Expr/BinaryOp/LogicalOr.phpO4 eO@<nikic-php-parser/PhpParser/Node/Expr/BinaryOp/LogicalXor.phpR4 eR4e7nikic-php-parser/PhpParser/Node/Expr/BinaryOp/Minus.phpF4 eF$Lˤ5nikic-php-parser/PhpParser/Node/Expr/BinaryOp/Mod.phpB4 eBʤ5nikic-php-parser/PhpParser/Node/Expr/BinaryOp/Mul.phpB4 eB|:nikic-php-parser/PhpParser/Node/Expr/BinaryOp/NotEqual.phpM4 eM>nikic-php-parser/PhpParser/Node/Expr/BinaryOp/NotIdentical.phpV4 eVh< -6nikic-php-parser/PhpParser/Node/Expr/BinaryOp/Plus.phpD4 eD' ,5nikic-php-parser/PhpParser/Node/Expr/BinaryOp/Pow.phpC4 eC;nikic-php-parser/PhpParser/Node/Expr/BinaryOp/ShiftLeft.phpO4 eOQ#<nikic-php-parser/PhpParser/Node/Expr/BinaryOp/ShiftRight.phpQ4 eQǤ9nikic-php-parser/PhpParser/Node/Expr/BinaryOp/Smaller.phpJ4 eJf@nikic-php-parser/PhpParser/Node/Expr/BinaryOp/SmallerOrEqual.phpY4 eY⍤;nikic-php-parser/PhpParser/Node/Expr/BinaryOp/Spaceship.phpP4 ePHƉ.3nikic-php-parser/PhpParser/Node/Expr/BitwiseNot.php4 e~'3nikic-php-parser/PhpParser/Node/Expr/BooleanNot.php4 eDC1nikic-php-parser/PhpParser/Node/Expr/CallLike.php&4 e&KS0-nikic-php-parser/PhpParser/Node/Expr/Cast.phpA4 eA:Vs4nikic-php-parser/PhpParser/Node/Expr/Cast/Array_.php4 eI|3nikic-php-parser/PhpParser/Node/Expr/Cast/Bool_.php4 e V]S4nikic-php-parser/PhpParser/Node/Expr/Cast/Double.php4 e>,2nikic-php-parser/PhpParser/Node/Expr/Cast/Int_.php4 ec5nikic-php-parser/PhpParser/Node/Expr/Cast/Object_.php4 e5nikic-php-parser/PhpParser/Node/Expr/Cast/String_.php4 e4nikic-php-parser/PhpParser/Node/Expr/Cast/Unset_.php4 e1Ӥ8nikic-php-parser/PhpParser/Node/Expr/ClassConstFetch.php4 eE/nikic-php-parser/PhpParser/Node/Expr/Clone_.php4 eW0nikic-php-parser/PhpParser/Node/Expr/Closure.php -4 e -U;3nikic-php-parser/PhpParser/Node/Expr/ClosureUse.php4 eh3nikic-php-parser/PhpParser/Node/Expr/ConstFetch.php4 e޶%/nikic-php-parser/PhpParser/Node/Expr/Empty_.php4 e'.nikic-php-parser/PhpParser/Node/Expr/Error.php4 ea\6nikic-php-parser/PhpParser/Node/Expr/ErrorSuppress.php4 eg.nikic-php-parser/PhpParser/Node/Expr/Eval_.php4 e356.nikic-php-parser/PhpParser/Node/Expr/Exit_.php4 e1nikic-php-parser/PhpParser/Node/Expr/FuncCall.php34 e3%A1nikic-php-parser/PhpParser/Node/Expr/Include_.php4 ei4nikic-php-parser/PhpParser/Node/Expr/Instanceof_.phpa4 ea< /nikic-php-parser/PhpParser/Node/Expr/Isset_.php4 eI.nikic-php-parser/PhpParser/Node/Expr/List_.php4 e/nikic-php-parser/PhpParser/Node/Expr/Match_.php4 eW 3nikic-php-parser/PhpParser/Node/Expr/MethodCall.phpO4 eODWX-nikic-php-parser/PhpParser/Node/Expr/New_.php4 eiĤ;nikic-php-parser/PhpParser/Node/Expr/NullsafeMethodCall.phpf4 efɤ>nikic-php-parser/PhpParser/Node/Expr/NullsafePropertyFetch.php4 e /N0nikic-php-parser/PhpParser/Node/Expr/PostDec.php4 ew:0nikic-php-parser/PhpParser/Node/Expr/PostInc.php4 eᦦ!/nikic-php-parser/PhpParser/Node/Expr/PreDec.php4 etg/nikic-php-parser/PhpParser/Node/Expr/PreInc.php4 eYä/nikic-php-parser/PhpParser/Node/Expr/Print_.php4 enX6nikic-php-parser/PhpParser/Node/Expr/PropertyFetch.php4 eɾ2nikic-php-parser/PhpParser/Node/Expr/ShellExec.php4 ehy3nikic-php-parser/PhpParser/Node/Expr/StaticCall.phpe4 ee<nikic-php-parser/PhpParser/Node/Expr/StaticPropertyFetch.php&4 e&ܐ0nikic-php-parser/PhpParser/Node/Expr/Ternary.php4 eQͤ/nikic-php-parser/PhpParser/Node/Expr/Throw_.php4 e ?3nikic-php-parser/PhpParser/Node/Expr/UnaryMinus.php4 elA2nikic-php-parser/PhpParser/Node/Expr/UnaryPlus.php4 ee̤1nikic-php-parser/PhpParser/Node/Expr/Variable.php4 emJr2nikic-php-parser/PhpParser/Node/Expr/YieldFrom.php4 ew8/nikic-php-parser/PhpParser/Node/Expr/Yield_.php\4 e\ 0nikic-php-parser/PhpParser/Node/FunctionLike.php4 e4ͤ.nikic-php-parser/PhpParser/Node/Identifier.php4 eJa4nikic-php-parser/PhpParser/Node/IntersectionType.php4 eo,nikic-php-parser/PhpParser/Node/MatchArm.php4 e+m6(nikic-php-parser/PhpParser/Node/Name.php 4 e 7nikic-php-parser/PhpParser/Node/Name/FullyQualified.php4 e 1nikic-php-parser/PhpParser/Node/Name/Relative.php4 eǛEf0nikic-php-parser/PhpParser/Node/NullableType.php4 e6C)nikic-php-parser/PhpParser/Node/Param.phpb4 ebMߤ*nikic-php-parser/PhpParser/Node/Scalar.phpk4 ek,ߤ2nikic-php-parser/PhpParser/Node/Scalar/DNumber.php4 ex3H:3nikic-php-parser/PhpParser/Node/Scalar/Encapsed.php4 eRU=nikic-php-parser/PhpParser/Node/Scalar/EncapsedStringPart.php4 e%2nikic-php-parser/PhpParser/Node/Scalar/LNumber.php 4 e z5nikic-php-parser/PhpParser/Node/Scalar/MagicConst.phpc4 ec,xG<nikic-php-parser/PhpParser/Node/Scalar/MagicConst/Class_.phpT4 eT㨘X9nikic-php-parser/PhpParser/Node/Scalar/MagicConst/Dir.phpM4 eMal:nikic-php-parser/PhpParser/Node/Scalar/MagicConst/File.phpP4 eP#?nikic-php-parser/PhpParser/Node/Scalar/MagicConst/Function_.php]4 e]HnY:nikic-php-parser/PhpParser/Node/Scalar/MagicConst/Line.phpP4 ePM4<nikic-php-parser/PhpParser/Node/Scalar/MagicConst/Method.phpV4 eVΤ@nikic-php-parser/PhpParser/Node/Scalar/MagicConst/Namespace_.php`4 e`><nikic-php-parser/PhpParser/Node/Scalar/MagicConst/Trait_.phpT4 eTd2nikic-php-parser/PhpParser/Node/Scalar/String_.phpq4 eqT$Q(nikic-php-parser/PhpParser/Node/Stmt.php4 ev2//nikic-php-parser/PhpParser/Node/Stmt/Break_.php4 e֤.nikic-php-parser/PhpParser/Node/Stmt/Case_.phpl4 elu/nikic-php-parser/PhpParser/Node/Stmt/Catch_.php|4 e|*V>3nikic-php-parser/PhpParser/Node/Stmt/ClassConst.php| 4 e| K:d2nikic-php-parser/PhpParser/Node/Stmt/ClassLike.php 4 e 04nikic-php-parser/PhpParser/Node/Stmt/ClassMethod.php4 eX/nikic-php-parser/PhpParser/Node/Stmt/Class_.phpu4 eu_ļ/nikic-php-parser/PhpParser/Node/Stmt/Const_.php4 e2nikic-php-parser/PhpParser/Node/Stmt/Continue_.php4 e7nikic-php-parser/PhpParser/Node/Stmt/DeclareDeclare.php4 eƀ1nikic-php-parser/PhpParser/Node/Stmt/Declare_.php4 e.. -,nikic-php-parser/PhpParser/Node/Stmt/Do_.phpB4 eB -@.nikic-php-parser/PhpParser/Node/Stmt/Echo_.php4 e͘Ƥ0nikic-php-parser/PhpParser/Node/Stmt/ElseIf_.phpI4 eIEä.nikic-php-parser/PhpParser/Node/Stmt/Else_.php4 e|ä1nikic-php-parser/PhpParser/Node/Stmt/EnumCase.php4 ejD.nikic-php-parser/PhpParser/Node/Stmt/Enum_.php=4 e=dA3nikic-php-parser/PhpParser/Node/Stmt/Expression.php4 eRK1nikic-php-parser/PhpParser/Node/Stmt/Finally_.php4 e1A-nikic-php-parser/PhpParser/Node/Stmt/For_.php>4 e>NQ1nikic-php-parser/PhpParser/Node/Stmt/Foreach_.phpo4 eo92nikic-php-parser/PhpParser/Node/Stmt/Function_.php, -4 e, -nL0nikic-php-parser/PhpParser/Node/Stmt/Global_.php4 e.nikic-php-parser/PhpParser/Node/Stmt/Goto_.php4 eVyPn1nikic-php-parser/PhpParser/Node/Stmt/GroupUse.php -4 e -ߎ0|5nikic-php-parser/PhpParser/Node/Stmt/HaltCompiler.php4 e];,nikic-php-parser/PhpParser/Node/Stmt/If_.php:4 e:u٤3nikic-php-parser/PhpParser/Node/Stmt/InlineHTML.php4 e]3nikic-php-parser/PhpParser/Node/Stmt/Interface_.php4 eL/Ǥ.nikic-php-parser/PhpParser/Node/Stmt/Label.php4 eӤ3nikic-php-parser/PhpParser/Node/Stmt/Namespace_.php4 e㹀,nikic-php-parser/PhpParser/Node/Stmt/Nop.php@4 e@G1nikic-php-parser/PhpParser/Node/Stmt/Property.phpO -4 eO -=9nikic-php-parser/PhpParser/Node/Stmt/PropertyProperty.php4 e҉0nikic-php-parser/PhpParser/Node/Stmt/Return_.php4 eͿ)e2nikic-php-parser/PhpParser/Node/Stmt/StaticVar.php4 e0nikic-php-parser/PhpParser/Node/Stmt/Static_.php4 e0nikic-php-parser/PhpParser/Node/Stmt/Switch_.php54 e5FFY/nikic-php-parser/PhpParser/Node/Stmt/Throw_.php4 e1nikic-php-parser/PhpParser/Node/Stmt/TraitUse.php4 eg,;nikic-php-parser/PhpParser/Node/Stmt/TraitUseAdaptation.php4 ea8Anikic-php-parser/PhpParser/Node/Stmt/TraitUseAdaptation/Alias.phpA4 eAdFnikic-php-parser/PhpParser/Node/Stmt/TraitUseAdaptation/Precedence.phpZ4 eZP֤/nikic-php-parser/PhpParser/Node/Stmt/Trait_.php4 e$v1nikic-php-parser/PhpParser/Node/Stmt/TryCatch.php$4 e$W/nikic-php-parser/PhpParser/Node/Stmt/Unset_.php4 e=oB/nikic-php-parser/PhpParser/Node/Stmt/UseUse.phpd4 edb-nikic-php-parser/PhpParser/Node/Stmt/Use_.phpl4 el9=|/nikic-php-parser/PhpParser/Node/Stmt/While_.phpE4 eEա-nikic-php-parser/PhpParser/Node/UnionType.php4 eԛ5nikic-php-parser/PhpParser/Node/VarLikeIdentifier.php4 e&7nikic-php-parser/PhpParser/Node/VariadicPlaceholder.php4 eP+nikic-php-parser/PhpParser/NodeAbstract.phpZ4 eZ׻@)nikic-php-parser/PhpParser/NodeDumper.phpd4 edY l)nikic-php-parser/PhpParser/NodeFinder.php 4 e ,nikic-php-parser/PhpParser/NodeTraverser.php]'4 e]'TG:Ƥ5nikic-php-parser/PhpParser/NodeTraverserInterface.php|4 e|Ś *nikic-php-parser/PhpParser/NodeVisitor.php4 e39nikic-php-parser/PhpParser/NodeVisitor/CloningVisitor.php4 e"WJ9nikic-php-parser/PhpParser/NodeVisitor/FindingVisitor.php4 eB>nikic-php-parser/PhpParser/NodeVisitor/FirstFindingVisitor.php4 em4Ť7nikic-php-parser/PhpParser/NodeVisitor/NameResolver.phpq&4 eq&ǠG@nikic-php-parser/PhpParser/NodeVisitor/NodeConnectingVisitor.php4 eu -äBnikic-php-parser/PhpParser/NodeVisitor/ParentConnectingVisitor.phpu4 euME2nikic-php-parser/PhpParser/NodeVisitorAbstract.php4 e%nikic-php-parser/PhpParser/Parser.php}4 e}{.nikic-php-parser/PhpParser/Parser/Multiple.php4 esF)7*nikic-php-parser/PhpParser/Parser/Php5.php+4 e+1*nikic-php-parser/PhpParser/Parser/Php7.phpT4 eT!V`,nikic-php-parser/PhpParser/Parser/Tokens.php&4 e&<-nikic-php-parser/PhpParser/ParserAbstract.phpT4 eT'[,nikic-php-parser/PhpParser/ParserFactory.php4 e -~&5nikic-php-parser/PhpParser/PrettyPrinter/Standard.php+4 e+4nikic-php-parser/PhpParser/PrettyPrinterAbstract.phpQ4 eQ%jobject-enumerator/LICENSE4 efobject-reflector/LICENSE4 eR6phar-io-manifest/LICENSE`4 e`p+phar-io-manifest/ManifestDocumentMapper.php4 e:#phar-io-manifest/ManifestLoader.php4 e.-a'phar-io-manifest/ManifestSerializer.php4 erp:phar-io-manifest/exceptions/ElementCollectionException.php4 e I)phar-io-manifest/exceptions/Exception.php4 e?phar-io-manifest/exceptions/InvalidApplicationNameException.php4 e:@>5phar-io-manifest/exceptions/InvalidEmailException.php4 e<3phar-io-manifest/exceptions/InvalidUrlException.php4 e 9phar-io-manifest/exceptions/ManifestDocumentException.php4 e!P4@phar-io-manifest/exceptions/ManifestDocumentLoadingException.phpH4 eHǃ?phar-io-manifest/exceptions/ManifestDocumentMapperException.php4 e:9z8phar-io-manifest/exceptions/ManifestElementException.php4 eA47phar-io-manifest/exceptions/ManifestLoaderException.php4 eD>'phar-io-manifest/values/Application.php4 eI$ۤ+phar-io-manifest/values/ApplicationName.php;4 e;D"phar-io-manifest/values/Author.php4 eF,phar-io-manifest/values/AuthorCollection.php4 eo4phar-io-manifest/values/AuthorCollectionIterator.php34 e3џ,phar-io-manifest/values/BundledComponent.php@4 e@DP`6phar-io-manifest/values/BundledComponentCollection.php 4 e ¾W6>phar-io-manifest/values/BundledComponentCollectionIterator.php4 eVh0phar-io-manifest/values/CopyrightInformation.phpP4 eP ai!phar-io-manifest/values/Email.phpN4 eNZ&%phar-io-manifest/values/Extension.php4 eq}#phar-io-manifest/values/Library.php4 eO#phar-io-manifest/values/License.php4 e&!o$phar-io-manifest/values/Manifest.php -4 e -=La3phar-io-manifest/values/PhpExtensionRequirement.php4 e11phar-io-manifest/values/PhpVersionRequirement.php4 em?'phar-io-manifest/values/Requirement.php4 ed1phar-io-manifest/values/RequirementCollection.php4 eP9phar-io-manifest/values/RequirementCollectionIterator.phpj4 ejܭ: phar-io-manifest/values/Type.php4 e=%phar-io-manifest/values/Url.php4 e͚&phar-io-manifest/xml/AuthorElement.phpr4 er<0phar-io-manifest/xml/AuthorElementCollection.php,4 e,-'phar-io-manifest/xml/BundlesElement.phpS4 eSWN>)phar-io-manifest/xml/ComponentElement.phpy4 eyݤ3phar-io-manifest/xml/ComponentElementCollection.php54 e5(\(phar-io-manifest/xml/ContainsElement.phpn4 enf)phar-io-manifest/xml/CopyrightElement.php4 e7*phar-io-manifest/xml/ElementCollection.php4 e@ #phar-io-manifest/xml/ExtElement.php 4 e y>-phar-io-manifest/xml/ExtElementCollection.php#4 e#E)phar-io-manifest/xml/ExtensionElement.php}4 e}0'phar-io-manifest/xml/LicenseElement.phpo4 eo%:')phar-io-manifest/xml/ManifestDocument.php - 4 e - 4(phar-io-manifest/xml/ManifestElement.php44 e4#phar-io-manifest/xml/PhpElement.php4 eB:5(phar-io-manifest/xml/RequiresElement.php$4 e$>!phar-io-version/BuildMetaData.php4 ephar-io-version/LICENSE&4 e&Ҫ $phar-io-version/PreReleaseSuffix.php4 e:phar-io-version/Version.php4 eu#+phar-io-version/VersionConstraintParser.phpT 4 eT Ф*phar-io-version/VersionConstraintValue.phpH -4 eH -F{~4!phar-io-version/VersionNumber.php4 eO19phar-io-version/constraints/AbstractVersionConstraint.php4 exB9phar-io-version/constraints/AndVersionConstraintGroup.php4 eY4phar-io-version/constraints/AnyVersionConstraint.phpR4 eR #6phar-io-version/constraints/ExactVersionConstraint.php4 e!Ephar-io-version/constraints/GreaterThanOrEqualToVersionConstraint.php4 eVU8phar-io-version/constraints/OrVersionConstraintGroup.php4 eM%Fphar-io-version/constraints/SpecificMajorAndMinorVersionConstraint.php4 eɍ>phar-io-version/constraints/SpecificMajorVersionConstraint.php4 e`9q:1phar-io-version/constraints/VersionConstraint.php4 eeDq(phar-io-version/exceptions/Exception.php4 e$eb?phar-io-version/exceptions/InvalidPreReleaseSuffixException.php4 eҵ6phar-io-version/exceptions/InvalidVersionException.php4 e4/S7phar-io-version/exceptions/NoBuildMetaDataException.php4 e]:phar-io-version/exceptions/NoPreReleaseSuffixException.php4 eT4Dphar-io-version/exceptions/UnsupportedVersionConstraintException.php4 e9"php-code-coverage/CodeCoverage.phpA4 eAc4php-code-coverage/Data/ProcessedCodeCoverageData.php\'4 e\'.php-code-coverage/Data/RawCodeCoverageData.phpz!4 ez!-#php-code-coverage/Driver/Driver.php 4 e cհ'php-code-coverage/Driver/PcovDriver.php4 e=%php-code-coverage/Driver/Selector.php14 e15)php-code-coverage/Driver/XdebugDriver.php 4 e …3jJphp-code-coverage/Exception/BranchAndPathCoverageNotSupportedException.php4 e77Fphp-code-coverage/Exception/DeadCodeDetectionNotSupportedException.php4 eCphp-code-coverage/Exception/DirectoryCouldNotBeCreatedException.php4 e)php-code-coverage/Exception/Exception.php}4 e}z>php-code-coverage/Exception/FileCouldNotBeWrittenException.php4 er8php-code-coverage/Exception/InvalidArgumentException.php4 eK.nFphp-code-coverage/Exception/NoCodeCoverageDriverAvailableException.php/4 e/6R]php-code-coverage/Exception/NoCodeCoverageDriverWithPathCoverageSupportAvailableException.phpa4 ea"A/php-code-coverage/Exception/ParserException.php4 e,/Dphp-code-coverage/Exception/PathExistsButIsNotDirectoryException.php4 e.29php-code-coverage/Exception/PcovNotAvailableException.phpa4 eaj3php-code-coverage/Exception/ReflectionException.php4 ek)?php-code-coverage/Exception/ReportAlreadyFinalizedException.php:4 e:d%6Iphp-code-coverage/Exception/StaticAnalysisCacheNotConfiguredException.php4 e}6php-code-coverage/Exception/TestIdMissingException.php4 e -Cphp-code-coverage/Exception/UnintentionallyCoveredCodeException.php4 e}=php-code-coverage/Exception/WriteOperationFailedException.php4 e(e;php-code-coverage/Exception/XdebugNotAvailableException.phpe4 eeNG9php-code-coverage/Exception/XdebugNotEnabledException.phpx4 ex@_;,php-code-coverage/Exception/XmlException.php4 eWܤphp-code-coverage/Filter.phpc 4 ec Z,php-code-coverage/LICENSE4 e-~y֤'php-code-coverage/Node/AbstractNode.php54 e5Ğ"php-code-coverage/Node/Builder.phpO4 eOi$php-code-coverage/Node/CrapIndex.php4 e8\$php-code-coverage/Node/Directory.phpF$4 eF$äphp-code-coverage/Node/File.php[W4 e[WL¤#php-code-coverage/Node/Iterator.phpx4 ex8A)#php-code-coverage/Report/Clover.php6(4 e6(&php-code-coverage/Report/Cobertura.php?14 e?1W0#php-code-coverage/Report/Crap4j.php)4 e)wҤ(php-code-coverage/Report/Html/Colors.php4 eX`/php-code-coverage/Report/Html/CustomCssFile.php64 e6"2bS(php-code-coverage/Report/Html/Facade.php4 e&'*php-code-coverage/Report/Html/Renderer.php 4 e G4php-code-coverage/Report/Html/Renderer/Dashboard.php!4 e!/Ѥ4php-code-coverage/Report/Html/Renderer/Directory.php54 e5V/g/php-code-coverage/Report/Html/Renderer/File.php܊4 e܊kBphp-code-coverage/Report/Html/Renderer/Template/branches.html.dist4 eh2+Fphp-code-coverage/Report/Html/Renderer/Template/coverage_bar.html.dist'4 e'O}Mphp-code-coverage/Report/Html/Renderer/Template/coverage_bar_branch.html.dist'4 e'O}Ephp-code-coverage/Report/Html/Renderer/Template/css/bootstrap.min.cssy4 eyĤ>php-code-coverage/Report/Html/Renderer/Template/css/custom.css4 eAphp-code-coverage/Report/Html/Renderer/Template/css/nv.d3.min.cssX%4 eX%0,@php-code-coverage/Report/Html/Renderer/Template/css/octicons.cssX4 eX'#=php-code-coverage/Report/Html/Renderer/Template/css/style.cssH -4 eH -Cphp-code-coverage/Report/Html/Renderer/Template/dashboard.html.dist4 eDJphp-code-coverage/Report/Html/Renderer/Template/dashboard_branch.html.dist4 eDCphp-code-coverage/Report/Html/Renderer/Template/directory.html.dist4 eՆJphp-code-coverage/Report/Html/Renderer/Template/directory_branch.html.dist4 en2]Hphp-code-coverage/Report/Html/Renderer/Template/directory_item.html.distA4 eAdsOphp-code-coverage/Report/Html/Renderer/Template/directory_item_branch.html.dist;4 e;mۤ>php-code-coverage/Report/Html/Renderer/Template/file.html.distP 4 eP j*Ephp-code-coverage/Report/Html/Renderer/Template/file_branch.html.dist 4 e ㉞Cphp-code-coverage/Report/Html/Renderer/Template/file_item.html.distr4 er/yJphp-code-coverage/Report/Html/Renderer/Template/file_item_branch.html.distl4 el-Cphp-code-coverage/Report/Html/Renderer/Template/icons/file-code.svg04 e0QUUHphp-code-coverage/Report/Html/Renderer/Template/icons/file-directory.svg4 eZCphp-code-coverage/Report/Html/Renderer/Template/js/bootstrap.min.jsc4 ec"#<php-code-coverage/Report/Html/Renderer/Template/js/d3.min.jsP4 ePhb:php-code-coverage/Report/Html/Renderer/Template/js/file.js4 eb䆤@php-code-coverage/Report/Html/Renderer/Template/js/jquery.min.js@^4 e@^ ?php-code-coverage/Report/Html/Renderer/Template/js/nv.d3.min.jsR4 eRphp-code-coverage/Report/Html/Renderer/Template/line.html.dist4 e{?php-code-coverage/Report/Html/Renderer/Template/lines.html.diste4 eedf Ephp-code-coverage/Report/Html/Renderer/Template/method_item.html.dist4 ejפLphp-code-coverage/Report/Html/Renderer/Template/method_item_branch.html.dist4 eyĎk?php-code-coverage/Report/Html/Renderer/Template/paths.html.dist4 e*'ݤ php-code-coverage/Report/PHP.php4 e<[!php-code-coverage/Report/Text.php&4 e&ਤ'php-code-coverage/Report/Thresholds.phpS4 eS 1php-code-coverage/Report/Xml/BuildInformation.php4 ezݤ)php-code-coverage/Report/Xml/Coverage.php4 e׍d*php-code-coverage/Report/Xml/Directory.php4 eAf'php-code-coverage/Report/Xml/Facade.php!4 e!t7 &%php-code-coverage/Report/Xml/File.php4 e4E'php-code-coverage/Report/Xml/Method.phpD4 eDC#T%php-code-coverage/Report/Xml/Node.php4 e(php-code-coverage/Report/Xml/Project.phpf4 efPe'php-code-coverage/Report/Xml/Report.php 4 e HC'php-code-coverage/Report/Xml/Source.phps4 esCaꀤ&php-code-coverage/Report/Xml/Tests.php4 elXΤ'php-code-coverage/Report/Xml/Totals.php4 eAx%php-code-coverage/Report/Xml/Unit.php4 ej0php-code-coverage/StaticAnalysis/CacheWarmer.php`4 e`_%פ8php-code-coverage/StaticAnalysis/CachingFileAnalyser.php4 et;php-code-coverage/StaticAnalysis/CodeUnitFindingVisitor.php%4 e%&`Bphp-code-coverage/StaticAnalysis/ExecutableLinesFindingVisitor.php'4 e')iH1php-code-coverage/StaticAnalysis/FileAnalyser.php4 e5?php-code-coverage/StaticAnalysis/IgnoredLinesFindingVisitor.php 4 e \GԤ8php-code-coverage/StaticAnalysis/ParsingFileAnalyser.php4 en*kS$php-code-coverage/TestSize/Known.phpX4 eXzK$php-code-coverage/TestSize/Large.php4 e'r %php-code-coverage/TestSize/Medium.php4 e{`$php-code-coverage/TestSize/Small.php4 eŖ_'php-code-coverage/TestSize/TestSize.php4 e8&php-code-coverage/TestSize/Unknown.phpi4 ei%,(php-code-coverage/TestStatus/Failure.phph4 ehK8B&php-code-coverage/TestStatus/Known.php4 e(php-code-coverage/TestStatus/Success.phph4 ehcp+php-code-coverage/TestStatus/TestStatus.php4 e%!(php-code-coverage/TestStatus/Unknown.phpm4 em[%php-code-coverage/Util/Filesystem.php4 e%php-code-coverage/Util/Percentage.php^4 e^5?:php-code-coverage/Version.php4 eջ%php-file-iterator/ExcludeIterator.php.4 e.&php-file-iterator/Facade.php4 elphp-file-iterator/Factory.php -4 e ->AqOphp-file-iterator/Iterator.php 4 e Jphp-file-iterator/LICENSE4 e-~y֤php-invoker/Invoker.php4 ec$php-invoker/exceptions/Exception.phpr4 ervvduDphp-invoker/exceptions/ProcessControlExtensionNotLoadedException.php4 e +php-invoker/exceptions/TimeoutException.php4 e.php-text-template/LICENSE4 e-~y֤php-text-template/Template.phpV 4 eV *`4*php-text-template/exceptions/Exception.phpy4 eyn9php-text-template/exceptions/InvalidArgumentException.php4 eaM1php-text-template/exceptions/RuntimeException.php4 eYm'php-timer/Duration.php 4 e 2php-timer/LICENSE4 e$php-timer/ResourceUsageFormatter.php4 e Hphp-timer/Timer.php4 eQ>El"php-timer/exceptions/Exception.phpn4 eniuۤ/php-timer/exceptions/NoActiveTimerException.php4 el٤Ephp-timer/exceptions/TimeSinceStartOfRequestNotAvailableException.php4 e$b phpunit.xsdF4 eF3&1phpunit/Event/Dispatcher/CollectingDispatcher.php4 e!0phpunit/Event/Dispatcher/DeferringDispatcher.php4 eD-phpunit/Event/Dispatcher/DirectDispatcher.php 4 e g'phpunit/Event/Dispatcher/Dispatcher.php4 e8Ť3phpunit/Event/Dispatcher/SubscribableDispatcher.php&4 e&>Y,,phpunit/Event/Emitter/DispatchingEmitter.phpSm4 eSmp&!phpunit/Event/Emitter/Emitter.php;$4 e;$xv-phpunit/Event/Events/Application/Finished.php4 ep,7phpunit/Event/Events/Application/FinishedSubscriber.php74 e7,~դ,phpunit/Event/Events/Application/Started.php4 eW6phpunit/Event/Events/Application/StartedSubscriber.php54 e5fphpunit/Event/Events/Event.php 4 e w(phpunit/Event/Events/EventCollection.phpO4 eOak0phpunit/Event/Events/EventCollectionIterator.php4 e`N7phpunit/Event/Events/Test/Assertion/AssertionFailed.php4 e1ݤAphpunit/Event/Events/Test/Assertion/AssertionFailedSubscriber.php74 e7haב:phpunit/Event/Events/Test/Assertion/AssertionSucceeded.php4 eUUDphpunit/Event/Events/Test/Assertion/AssertionSucceededSubscriber.php=4 e=m2phpunit/Event/Events/Test/ComparatorRegistered.php 4 e <phpunit/Event/Events/Test/ComparatorRegisteredSubscriber.phpA4 eA8VBphpunit/Event/Events/Test/HookMethod/AfterLastTestMethodCalled.phpm4 em֤Lphpunit/Event/Events/Test/HookMethod/AfterLastTestMethodCalledSubscriber.phpK4 eKĶLDphpunit/Event/Events/Test/HookMethod/AfterLastTestMethodFinished.phpd4 ed)Nphpunit/Event/Events/Test/HookMethod/AfterLastTestMethodFinishedSubscriber.phpO4 eO>phpunit/Event/Events/Test/HookMethod/AfterTestMethodCalled.phpd4 edHphpunit/Event/Events/Test/HookMethod/AfterTestMethodCalledSubscriber.phpC4 eCߊ@phpunit/Event/Events/Test/HookMethod/AfterTestMethodFinished.php[4 e[o΀Jphpunit/Event/Events/Test/HookMethod/AfterTestMethodFinishedSubscriber.phpG4 eGV)Dphpunit/Event/Events/Test/HookMethod/BeforeFirstTestMethodCalled.phpq4 eq,UNphpunit/Event/Events/Test/HookMethod/BeforeFirstTestMethodCalledSubscriber.phpO4 eOҘI Ephpunit/Event/Events/Test/HookMethod/BeforeFirstTestMethodErrored.php4 eOphpunit/Event/Events/Test/HookMethod/BeforeFirstTestMethodErroredSubscriber.phpQ4 eQFphpunit/Event/Events/Test/HookMethod/BeforeFirstTestMethodFinished.phph4 ehZPphpunit/Event/Events/Test/HookMethod/BeforeFirstTestMethodFinishedSubscriber.phpS4 eS/h?phpunit/Event/Events/Test/HookMethod/BeforeTestMethodCalled.phpf4 ef![Iphpunit/Event/Events/Test/HookMethod/BeforeTestMethodCalledSubscriber.phpE4 eEphpunit/Event/Events/Test/HookMethod/PostConditionFinished.php]4 e]Hphpunit/Event/Events/Test/HookMethod/PostConditionFinishedSubscriber.phpC4 eCkxŤ;phpunit/Event/Events/Test/HookMethod/PreConditionCalled.phpd4 edtդEphpunit/Event/Events/Test/HookMethod/PreConditionCalledSubscriber.php=4 e=T#=phpunit/Event/Events/Test/HookMethod/PreConditionFinished.php[4 e[ƄGphpunit/Event/Events/Test/HookMethod/PreConditionFinishedSubscriber.phpA4 eAm3phpunit/Event/Events/Test/Issue/ConsideredRisky.php4 e=phpunit/Event/Events/Test/Issue/ConsideredRiskySubscriber.php74 e7¤8phpunit/Event/Events/Test/Issue/DeprecationTriggered.php 4 e gmJ.Bphpunit/Event/Events/Test/Issue/DeprecationTriggeredSubscriber.phpA4 eA8d2phpunit/Event/Events/Test/Issue/ErrorTriggered.php~ 4 e~ <phpunit/Event/Events/Test/Issue/ErrorTriggeredSubscriber.php54 e53phpunit/Event/Events/Test/Issue/NoticeTriggered.php 4 e /lX=phpunit/Event/Events/Test/Issue/NoticeTriggeredSubscriber.php74 e7xp;phpunit/Event/Events/Test/Issue/PhpDeprecationTriggered.php 4 e 2obEphpunit/Event/Events/Test/Issue/PhpDeprecationTriggeredSubscriber.phpG4 eGdS6phpunit/Event/Events/Test/Issue/PhpNoticeTriggered.php 4 e B@phpunit/Event/Events/Test/Issue/PhpNoticeTriggeredSubscriber.php=4 e=L07phpunit/Event/Events/Test/Issue/PhpWarningTriggered.php 4 e %PAphpunit/Event/Events/Test/Issue/PhpWarningTriggeredSubscriber.php?4 e?Xޤ?phpunit/Event/Events/Test/Issue/PhpunitDeprecationTriggered.php4 e$/Iphpunit/Event/Events/Test/Issue/PhpunitDeprecationTriggeredSubscriber.phpO4 eOjt9phpunit/Event/Events/Test/Issue/PhpunitErrorTriggered.php4 e -Cphpunit/Event/Events/Test/Issue/PhpunitErrorTriggeredSubscriber.phpC4 eC;phpunit/Event/Events/Test/Issue/PhpunitWarningTriggered.php4 eESޤEphpunit/Event/Events/Test/Issue/PhpunitWarningTriggeredSubscriber.phpG4 eGM4phpunit/Event/Events/Test/Issue/WarningTriggered.php 4 e \R>phpunit/Event/Events/Test/Issue/WarningTriggeredSubscriber.php94 e9#A@@phpunit/Event/Events/Test/Lifecycle/DataProviderMethodCalled.php24 e2%|Jphpunit/Event/Events/Test/Lifecycle/DataProviderMethodCalledSubscriber.phpI4 eIQNBphpunit/Event/Events/Test/Lifecycle/DataProviderMethodFinished.php,4 e,Lphpunit/Event/Events/Test/Lifecycle/DataProviderMethodFinishedSubscriber.phpM4 eMN0phpunit/Event/Events/Test/Lifecycle/Finished.php{4 e{ դ:phpunit/Event/Events/Test/Lifecycle/FinishedSubscriber.php)4 e)Qb:phpunit/Event/Events/Test/Lifecycle/PreparationStarted.phpu4 euX[`Dphpunit/Event/Events/Test/Lifecycle/PreparationStartedSubscriber.php=4 e=w 0phpunit/Event/Events/Test/Lifecycle/Prepared.php`4 e`ISϤ:phpunit/Event/Events/Test/Lifecycle/PreparedSubscriber.php)4 e)Ѥy-phpunit/Event/Events/Test/Outcome/Errored.php4 es7phpunit/Event/Events/Test/Outcome/ErroredSubscriber.php'4 e' >,phpunit/Event/Events/Test/Outcome/Failed.php4 e6phpunit/Event/Events/Test/Outcome/FailedSubscriber.php%4 e%ǩ6phpunit/Event/Events/Test/Outcome/MarkedIncomplete.php4 e6;@phpunit/Event/Events/Test/Outcome/MarkedIncompleteSubscriber.php94 e96Ф,phpunit/Event/Events/Test/Outcome/Passed.php\4 e\6phpunit/Event/Events/Test/Outcome/PassedSubscriber.php%4 e%pE-phpunit/Event/Events/Test/Outcome/Skipped.php4 eoKȏ7phpunit/Event/Events/Test/Outcome/SkippedSubscriber.php'4 e'%I5phpunit/Event/Events/Test/PrintedUnexpectedOutput.php4 eOg?phpunit/Event/Events/Test/PrintedUnexpectedOutputSubscriber.phpG4 eG`ɐ:phpunit/Event/Events/Test/TestDouble/MockObjectCreated.php4 e{͵Dphpunit/Event/Events/Test/TestDouble/MockObjectCreatedSubscriber.php;4 e;h{6Jphpunit/Event/Events/Test/TestDouble/MockObjectForAbstractClassCreated.php4 eҽTphpunit/Event/Events/Test/TestDouble/MockObjectForAbstractClassCreatedSubscriber.php[4 e[ -vUphpunit/Event/Events/Test/TestDouble/MockObjectForIntersectionOfInterfacesCreated.phpX4 eXr_phpunit/Event/Events/Test/TestDouble/MockObjectForIntersectionOfInterfacesCreatedSubscriber.phpq4 eq/uBphpunit/Event/Events/Test/TestDouble/MockObjectForTraitCreated.php4 e> Lphpunit/Event/Events/Test/TestDouble/MockObjectForTraitCreatedSubscriber.phpK4 eK#TBphpunit/Event/Events/Test/TestDouble/MockObjectFromWsdlCreated.php -4 e -ȌkLphpunit/Event/Events/Test/TestDouble/MockObjectFromWsdlCreatedSubscriber.phpK4 eKIAphpunit/Event/Events/Test/TestDouble/PartialMockObjectCreated.php=4 e=sUKphpunit/Event/Events/Test/TestDouble/PartialMockObjectCreatedSubscriber.phpI4 eI2!9phpunit/Event/Events/Test/TestDouble/TestProxyCreated.php4 eͤCphpunit/Event/Events/Test/TestDouble/TestProxyCreatedSubscriber.php94 e9K8phpunit/Event/Events/Test/TestDouble/TestStubCreated.php4 esʤBphpunit/Event/Events/Test/TestDouble/TestStubCreatedSubscriber.php74 e7d#Sphpunit/Event/Events/Test/TestDouble/TestStubForIntersectionOfInterfacesCreated.phpT4 eT̪ ]phpunit/Event/Events/Test/TestDouble/TestStubForIntersectionOfInterfacesCreatedSubscriber.phpm4 emKѕ=5phpunit/Event/Events/TestRunner/BootstrapFinished.phpi4 ei?phpunit/Event/Events/TestRunner/BootstrapFinishedSubscriber.phpG4 eGaݤ.phpunit/Event/Events/TestRunner/Configured.php}4 e}u8phpunit/Event/Events/TestRunner/ConfiguredSubscriber.php94 e9դ8phpunit/Event/Events/TestRunner/DeprecationTriggered.phpt4 etӤzBphpunit/Event/Events/TestRunner/DeprecationTriggeredSubscriber.phpM4 eMd5phpunit/Event/Events/TestRunner/EventFacadeSealed.php4 e{J?phpunit/Event/Events/TestRunner/EventFacadeSealedSubscriber.phpG4 eG{ 4phpunit/Event/Events/TestRunner/ExecutionAborted.php4 eȃx>phpunit/Event/Events/TestRunner/ExecutionAbortedSubscriber.phpE4 eE W5phpunit/Event/Events/TestRunner/ExecutionFinished.php4 eБW?phpunit/Event/Events/TestRunner/ExecutionFinishedSubscriber.phpG4 eGH4phpunit/Event/Events/TestRunner/ExecutionStarted.php4 ecic>phpunit/Event/Events/TestRunner/ExecutionStartedSubscriber.phpE4 eES9phpunit/Event/Events/TestRunner/ExtensionBootstrapped.phpy4 ey%קCphpunit/Event/Events/TestRunner/ExtensionBootstrappedSubscriber.phpO4 eOpɞ2;phpunit/Event/Events/TestRunner/ExtensionLoadedFromPhar.php4 e䟉Ephpunit/Event/Events/TestRunner/ExtensionLoadedFromPharSubscriber.phpS4 eSR^1,phpunit/Event/Events/TestRunner/Finished.php{4 e{zǡ6phpunit/Event/Events/TestRunner/FinishedSubscriber.php54 e5̤=phpunit/Event/Events/TestRunner/GarbageCollectionDisabled.php4 e\$Gphpunit/Event/Events/TestRunner/GarbageCollectionDisabledSubscriber.phpW4 eWJj<phpunit/Event/Events/TestRunner/GarbageCollectionEnabled.php4 eFphpunit/Event/Events/TestRunner/GarbageCollectionEnabledSubscriber.phpU4 eU77>phpunit/Event/Events/TestRunner/GarbageCollectionTriggered.php4 e2ɤHphpunit/Event/Events/TestRunner/GarbageCollectionTriggeredSubscriber.phpY4 eY &ݤ+phpunit/Event/Events/TestRunner/Started.phpy4 ey5phpunit/Event/Events/TestRunner/StartedSubscriber.php34 e3 4phpunit/Event/Events/TestRunner/WarningTriggered.phpl4 el.Cv>phpunit/Event/Events/TestRunner/WarningTriggeredSubscriber.phpE4 eE8K+phpunit/Event/Events/TestSuite/Filtered.php4 eo5phpunit/Event/Events/TestSuite/FilteredSubscriber.php34 e3|+phpunit/Event/Events/TestSuite/Finished.php4 eĤt5phpunit/Event/Events/TestSuite/FinishedSubscriber.php34 e3զ)phpunit/Event/Events/TestSuite/Loaded.php4 eX(\*3phpunit/Event/Events/TestSuite/LoadedSubscriber.php/4 e/^7*phpunit/Event/Events/TestSuite/Skipped.php4 ep%4phpunit/Event/Events/TestSuite/SkippedSubscriber.php14 e1D!)phpunit/Event/Events/TestSuite/Sorted.php'4 e'j 3phpunit/Event/Events/TestSuite/SortedSubscriber.php/4 e/ Ȥ*phpunit/Event/Events/TestSuite/Started.php4 eз1٤4phpunit/Event/Events/TestSuite/StartedSubscriber.php14 e1i5k9phpunit/Event/Exception/EventAlreadyAssignedException.php 4 e 0ɤ8phpunit/Event/Exception/EventFacadeIsSealedException.php -4 e -J ؤ%phpunit/Event/Exception/Exception.phpL4 eLgx4phpunit/Event/Exception/InvalidArgumentException.php4 e䀤1phpunit/Event/Exception/InvalidEventException.php4 eE>6phpunit/Event/Exception/InvalidSubscriberException.php4 eSg$phpunit/Event/Exception/MapError.php4 eRGphpunit/Event/Exception/MoreThanOneDataSetFromDataProviderException.php04 e0R=8phpunit/Event/Exception/NoComparisonFailureException.php4 e{k>phpunit/Event/Exception/NoDataSetFromDataProviderException.php'4 e'@~8phpunit/Event/Exception/NoPreviousThrowableException.php -4 e -~@phpunit/Event/Exception/NoTestCaseObjectOnCallStackException.php4 e,phpunit/Event/Exception/RuntimeException.php4 eLDphpunit/Event/Exception/SubscriberTypeAlreadyRegisteredException.php4 eįK1phpunit/Event/Exception/UnknownEventException.php4 e}5phpunit/Event/Exception/UnknownEventTypeException.php4 e/<6phpunit/Event/Exception/UnknownSubscriberException.php4 e ˤ:phpunit/Event/Exception/UnknownSubscriberTypeException.php 4 e &'*phpunit/Event/Facade.php 4 e phpunit/Event/Subscriber.php4 edlkphpunit/Event/Tracer.php4 er7phpunit/Event/TypeMap.php54 e5pF'#phpunit/Event/Value/ClassMethod.php4 eB)phpunit/Event/Value/ComparisonFailure.php4 ek;0phpunit/Event/Value/ComparisonFailureBuilder.php4 evZ/phpunit/Event/Value/Runtime/OperatingSystem.php4 egA! #phpunit/Event/Value/Runtime/PHP.php 4 e P'phpunit/Event/Value/Runtime/PHPUnit.phpo4 eo3'phpunit/Event/Value/Runtime/Runtime.php4 ek?J*phpunit/Event/Value/Telemetry/Duration.php 4 e *t8phpunit/Event/Value/Telemetry/GarbageCollectorStatus.phpW4 eW;ä@phpunit/Event/Value/Telemetry/GarbageCollectorStatusProvider.php4 eN (phpunit/Event/Value/Telemetry/HRTime.php 4 e Fɤ&phpunit/Event/Value/Telemetry/Info.php -4 e -gHh!-phpunit/Event/Value/Telemetry/MemoryMeter.php:4 e:XH-phpunit/Event/Value/Telemetry/MemoryUsage.phpg4 eg-Ephpunit/Event/Value/Telemetry/Php81GarbageCollectorStatusProvider.phpP4 eP3݆Ephpunit/Event/Value/Telemetry/Php83GarbageCollectorStatusProvider.php4 er*phpunit/Event/Value/Telemetry/Snapshot.php4 e -.+phpunit/Event/Value/Telemetry/StopWatch.php4 eF4S(phpunit/Event/Value/Telemetry/System.php<4 e<fK3phpunit/Event/Value/Telemetry/SystemMemoryMeter.php~4 e~q`e1phpunit/Event/Value/Telemetry/SystemStopWatch.php4 e H};phpunit/Event/Value/Telemetry/SystemStopWatchWithOffset.php84 e8D !phpunit/Event/Value/Test/Phpt.php`4 e`B!phpunit/Event/Value/Test/Test.php4 ei +phpunit/Event/Value/Test/TestCollection.php14 e1J3T3phpunit/Event/Value/Test/TestCollectionIterator.php4 ebx:phpunit/Event/Value/Test/TestData/DataFromDataProvider.phpK4 eK?m<phpunit/Event/Value/Test/TestData/DataFromTestDependency.php4 e.phpunit/Event/Value/Test/TestData/TestData.php4 en~8phpunit/Event/Value/Test/TestData/TestDataCollection.php -4 e -*^@phpunit/Event/Value/Test/TestData/TestDataCollectionIterator.php4 eA$phpunit/Event/Value/Test/TestDox.php 4 e Kyx+phpunit/Event/Value/Test/TestDoxBuilder.php4 eU'phpunit/Event/Value/Test/TestMethod.php4 eX.phpunit/Event/Value/Test/TestMethodBuilder.php -4 e -d ޤ+phpunit/Event/Value/TestSuite/TestSuite.php4 e2phpunit/Event/Value/TestSuite/TestSuiteBuilder.php 4 e $ؤ7phpunit/Event/Value/TestSuite/TestSuiteForTestClass.php4 eN&Hphpunit/Event/Value/TestSuite/TestSuiteForTestMethodWithDataProvider.php4 eФ3phpunit/Event/Value/TestSuite/TestSuiteWithName.php4 e4d !phpunit/Event/Value/Throwable.php_ 4 e_  (phpunit/Event/Value/ThrowableBuilder.php4 eabphpunit/Exception.phpL4 eLߊphpunit/Framework/Assert.php$4 e$ȜO&phpunit/Framework/Assert/Functions.phpvX4 evXa&phpunit/Framework/Attributes/After.php4 e~jL¤+phpunit/Framework/Attributes/AfterClass.php4 e׎.phpunit/Framework/Attributes/BackupGlobals.php4 emEO7phpunit/Framework/Attributes/BackupStaticProperties.php4 eh'phpunit/Framework/Attributes/Before.php4 e;,phpunit/Framework/Attributes/BeforeClass.php4 e\3phpunit/Framework/Attributes/CodeCoverageIgnore.phpn4 enpw,phpunit/Framework/Attributes/CoversClass.php4 eCb/phpunit/Framework/Attributes/CoversFunction.php4 eΐX.phpunit/Framework/Attributes/CoversNothing.php4 e&ޏ-phpunit/Framework/Attributes/DataProvider.php4 eM5phpunit/Framework/Attributes/DataProviderExternal.php4 eh5(phpunit/Framework/Attributes/Depends.php4 eO0phpunit/Framework/Attributes/DependsExternal.php4 e -p>phpunit/Framework/Attributes/DependsExternalUsingDeepClone.php4 eWgAphpunit/Framework/Attributes/DependsExternalUsingShallowClone.php 4 e //phpunit/Framework/Attributes/DependsOnClass.php4 e4=phpunit/Framework/Attributes/DependsOnClassUsingDeepClone.php4 e'@phpunit/Framework/Attributes/DependsOnClassUsingShallowClone.php4 e}E6phpunit/Framework/Attributes/DependsUsingDeepClone.php4 erˌ9phpunit/Framework/Attributes/DependsUsingShallowClone.php4 e& 9phpunit/Framework/Attributes/DoesNotPerformAssertions.php)4 e)J.~@phpunit/Framework/Attributes/ExcludeGlobalVariableFromBackup.php4 eL༤@phpunit/Framework/Attributes/ExcludeStaticPropertyFromBackup.php24 e2&phpunit/Framework/Attributes/Group.php4 eio;phpunit/Framework/Attributes/IgnoreClassForCodeCoverage.php4 er|>phpunit/Framework/Attributes/IgnoreFunctionForCodeCoverage.php4 e\<phpunit/Framework/Attributes/IgnoreMethodForCodeCoverage.php4 eB&phpunit/Framework/Attributes/Large.php4 e"mn'phpunit/Framework/Attributes/Medium.php4 e'2.phpunit/Framework/Attributes/PostCondition.php4 eK-phpunit/Framework/Attributes/PreCondition.php4 eؕ@4phpunit/Framework/Attributes/PreserveGlobalState.php4 eM|1phpunit/Framework/Attributes/RequiresFunction.php4 ed/phpunit/Framework/Attributes/RequiresMethod.php4 eG -8phpunit/Framework/Attributes/RequiresOperatingSystem.php4 e>phpunit/Framework/Attributes/RequiresOperatingSystemFamily.php4 e-",phpunit/Framework/Attributes/RequiresPhp.php4 en5phpunit/Framework/Attributes/RequiresPhpExtension.phpv4 eve(a0phpunit/Framework/Attributes/RequiresPhpunit.php4 eIt0phpunit/Framework/Attributes/RequiresSetting.php4 eLP:phpunit/Framework/Attributes/RunClassInSeparateProcess.php4 e:5phpunit/Framework/Attributes/RunInSeparateProcess.php 4 e <phpunit/Framework/Attributes/RunTestsInSeparateProcesses.php4 eĪ&phpunit/Framework/Attributes/Small.php4 ew~%phpunit/Framework/Attributes/Test.php4 e#(phpunit/Framework/Attributes/TestDox.php4 e{)phpunit/Framework/Attributes/TestWith.php4 e[4-phpunit/Framework/Attributes/TestWithJson.php4 erzC'phpunit/Framework/Attributes/Ticket.php4 e 2*phpunit/Framework/Attributes/UsesClass.php4 eVF-phpunit/Framework/Attributes/UsesFunction.php4 eN5ﻤ4phpunit/Framework/Attributes/WithoutErrorHandler.php -4 e -0phpunit/Framework/Constraint/Boolean/IsFalse.phpb4 ebBVu/phpunit/Framework/Constraint/Boolean/IsTrue.php_4 e_)phpunit/Framework/Constraint/Callback.php4 e.@-2phpunit/Framework/Constraint/Cardinality/Count.php 4 e ^.8phpunit/Framework/Constraint/Cardinality/GreaterThan.php4 ea4phpunit/Framework/Constraint/Cardinality/IsEmpty.php_4 e_yGϤ5phpunit/Framework/Constraint/Cardinality/LessThan.php4 eߤo,5phpunit/Framework/Constraint/Cardinality/SameSize.php4 e+phpunit/Framework/Constraint/Constraint.phpK4 eKW1phpunit/Framework/Constraint/Equality/IsEqual.php! 4 e! xc`?phpunit/Framework/Constraint/Equality/IsEqualCanonicalizing.phpO -4 eO -x=phpunit/Framework/Constraint/Equality/IsEqualIgnoringCase.phpM -4 eM -}7:phpunit/Framework/Constraint/Equality/IsEqualWithDelta.php 4 e MZf4phpunit/Framework/Constraint/Exception/Exception.phpv4 evz8phpunit/Framework/Constraint/Exception/ExceptionCode.php4 e?]Gphpunit/Framework/Constraint/Exception/ExceptionMessageIsOrContains.php4 e_Sphpunit/Framework/Constraint/Exception/ExceptionMessageMatchesRegularExpression.php<4 e<K;phpunit/Framework/Constraint/Filesystem/DirectoryExists.php4 eyy6phpunit/Framework/Constraint/Filesystem/FileExists.php4 eC 6phpunit/Framework/Constraint/Filesystem/IsReadable.php4 eȅ]6phpunit/Framework/Constraint/Filesystem/IsWritable.php4 e +phpunit/Framework/Constraint/IsAnything.php4 e{Ϝ,phpunit/Framework/Constraint/IsIdentical.php 4 e 72,phpunit/Framework/Constraint/JsonMatches.php 4 e '4|.phpunit/Framework/Constraint/Math/IsFinite.php|4 e|G˴w0phpunit/Framework/Constraint/Math/IsInfinite.php4 e3ߡ+phpunit/Framework/Constraint/Math/IsNan.phpp4 epZMw4phpunit/Framework/Constraint/Object/ObjectEquals.phpo4 eo, 9phpunit/Framework/Constraint/Object/ObjectHasProperty.phpx4 ex(8phpunit/Framework/Constraint/Operator/BinaryOperator.php] 4 e]  4phpunit/Framework/Constraint/Operator/LogicalAnd.php]4 e]F4phpunit/Framework/Constraint/Operator/LogicalNot.php 4 e  33phpunit/Framework/Constraint/Operator/LogicalOr.phpA4 eA(K4phpunit/Framework/Constraint/Operator/LogicalXor.php4 e2phpunit/Framework/Constraint/Operator/Operator.php,4 e,{7phpunit/Framework/Constraint/Operator/UnaryOperator.php4 e.{-.phpunit/Framework/Constraint/String/IsJson.php4 e(9phpunit/Framework/Constraint/String/RegularExpression.php`4 e`m6phpunit/Framework/Constraint/String/StringContains.php -4 e -E6phpunit/Framework/Constraint/String/StringEndsWith.php4 ermMphpunit/Framework/Constraint/String/StringEqualsStringIgnoringLineEndings.php:4 e:IlFphpunit/Framework/Constraint/String/StringMatchesFormatDescription.php 4 e m}t8phpunit/Framework/Constraint/String/StringStartsWith.php4 ei.Qդ8phpunit/Framework/Constraint/Traversable/ArrayHasKey.phpt4 et~ҳ33phpunit/Framework/Constraint/Traversable/IsList.phpx4 exv @phpunit/Framework/Constraint/Traversable/TraversableContains.php<4 e<YGEphpunit/Framework/Constraint/Traversable/TraversableContainsEqual.php)4 e)%Iphpunit/Framework/Constraint/Traversable/TraversableContainsIdentical.php4 eyDphpunit/Framework/Constraint/Traversable/TraversableContainsOnly.phpT4 eTW?2phpunit/Framework/Constraint/Type/IsInstanceOf.php4 eX,phpunit/Framework/Constraint/Type/IsNull.php^4 e^Vɭ,phpunit/Framework/Constraint/Type/IsType.php4 e!ޕ+phpunit/Framework/DataProviderTestSuite.php4 eUa4phpunit/Framework/Exception/AssertionFailedError.php4 e5phpunit/Framework/Exception/CodeCoverageException.php4 e[4phpunit/Framework/Exception/EmptyStringException.php4 e!)phpunit/Framework/Exception/Exception.php4 eR*,:phpunit/Framework/Exception/ExpectationFailedException.php4 eA>phpunit/Framework/Exception/GeneratorNotSupportedException.php4 e(d9phpunit/Framework/Exception/Incomplete/IncompleteTest.php4 e,+>phpunit/Framework/Exception/Incomplete/IncompleteTestError.php4 eםܤ8phpunit/Framework/Exception/InvalidArgumentException.php4 e:(<phpunit/Framework/Exception/InvalidCoversTargetException.php4 eo苤<phpunit/Framework/Exception/InvalidDataProviderException.php4 e.ڜɤ:phpunit/Framework/Exception/InvalidDependencyException.php4 e}9phpunit/Framework/Exception/NoChildTestSuiteException.php4 eP$Nphpunit/Framework/Exception/ObjectEquals/ActualValueIsNotAnObjectException.phpA4 eA<ؤ`phpunit/Framework/Exception/ObjectEquals/ComparisonMethodDoesNotAcceptParameterTypeException.php4 e@bphpunit/Framework/Exception/ObjectEquals/ComparisonMethodDoesNotDeclareBoolReturnTypeException.php4 ePigphpunit/Framework/Exception/ObjectEquals/ComparisonMethodDoesNotDeclareExactlyOneParameterException.php4 eFaphpunit/Framework/Exception/ObjectEquals/ComparisonMethodDoesNotDeclareParameterTypeException.php4 eENRphpunit/Framework/Exception/ObjectEquals/ComparisonMethodDoesNotExistException.php4 eui8phpunit/Framework/Exception/PhptAssertionFailedError.php24 e2_9phpunit/Framework/Exception/ProcessIsolationException.php4 eH:3phpunit/Framework/Exception/Skipped/SkippedTest.php4 eS.=phpunit/Framework/Exception/Skipped/SkippedTestSuiteError.php4 exCphpunit/Framework/Exception/Skipped/SkippedWithMessageException.php4 ez$@phpunit/Framework/Exception/UnknownClassOrInterfaceException.php4 eӤ4phpunit/Framework/Exception/UnknownTypeException.phpn4 en(j.phpunit/Framework/ExecutionOrderDependency.php4 eX>2&3phpunit/Framework/MockObject/ConfigurableMethod.phpb4 ebAphpunit/Framework/MockObject/Exception/BadMethodCallException.php4 eΫXGphpunit/Framework/MockObject/Exception/CannotUseAddMethodsException.php54 e5{Hphpunit/Framework/MockObject/Exception/CannotUseOnlyMethodsException.php4 e/(4phpunit/Framework/MockObject/Exception/Exception.php4 eB'Kphpunit/Framework/MockObject/Exception/IncompatibleReturnValueException.phpy4 ey|/Hphpunit/Framework/MockObject/Exception/MatchBuilderNotFoundException.php4 eLphpunit/Framework/MockObject/Exception/MatcherAlreadyRegisteredException.php4 ez'Lphpunit/Framework/MockObject/Exception/MethodCannotBeConfiguredException.php4 e}QOphpunit/Framework/MockObject/Exception/MethodNameAlreadyConfiguredException.php4 eӁƤKphpunit/Framework/MockObject/Exception/MethodNameNotConfiguredException.php~4 e~x1)Uphpunit/Framework/MockObject/Exception/MethodParametersAlreadyConfiguredException.php4 e r>phpunit/Framework/MockObject/Exception/ReflectionException.php4 e.ؔLphpunit/Framework/MockObject/Exception/ReturnValueNotConfiguredException.php<4 e<Qo;phpunit/Framework/MockObject/Exception/RuntimeException.php4 e_|Pphpunit/Framework/MockObject/Generator/Exception/ClassAlreadyExistsException.php4 eϠPphpunit/Framework/MockObject/Generator/Exception/ClassIsEnumerationException.php4 eYJphpunit/Framework/MockObject/Generator/Exception/ClassIsFinalException.php4 eQMphpunit/Framework/MockObject/Generator/Exception/ClassIsReadonlyException.php4 eYMphpunit/Framework/MockObject/Generator/Exception/DuplicateMethodException.php4 e.٤>phpunit/Framework/MockObject/Generator/Exception/Exception.php4 eOphpunit/Framework/MockObject/Generator/Exception/InvalidMethodNameException.php4 elDcphpunit/Framework/MockObject/Generator/Exception/OriginalConstructorInvocationRequiredException.php4 eDKƤHphpunit/Framework/MockObject/Generator/Exception/ReflectionException.php4 eq3Ephpunit/Framework/MockObject/Generator/Exception/RuntimeException.php4 e}ʻWphpunit/Framework/MockObject/Generator/Exception/SoapExtensionNotAvailableException.php4 en5Jphpunit/Framework/MockObject/Generator/Exception/UnknownClassException.php4 eZMJphpunit/Framework/MockObject/Generator/Exception/UnknownTraitException.php4 ew -Iphpunit/Framework/MockObject/Generator/Exception/UnknownTypeException.php4 e#J4phpunit/Framework/MockObject/Generator/Generator.phpv4 evXe̤4phpunit/Framework/MockObject/Generator/MockClass.phpd4 edN|5phpunit/Framework/MockObject/Generator/MockMethod.phpe"4 ee"c8phpunit/Framework/MockObject/Generator/MockMethodSet.phpq4 eqR4phpunit/Framework/MockObject/Generator/MockTrait.phpD4 eD)m3phpunit/Framework/MockObject/Generator/MockType.php4 edp[9phpunit/Framework/MockObject/Generator/TemplateLoader.php4 eqWp@phpunit/Framework/MockObject/Generator/templates/deprecation.tpl;4 e;O5sAphpunit/Framework/MockObject/Generator/templates/intersection.tplL4 eL-XAphpunit/Framework/MockObject/Generator/templates/mocked_class.tpl4 eji[Bphpunit/Framework/MockObject/Generator/templates/mocked_method.tplF4 eFKPphpunit/Framework/MockObject/Generator/templates/mocked_method_never_or_void.tpl4 epIphpunit/Framework/MockObject/Generator/templates/mocked_static_method.tpl4 e 4RCphpunit/Framework/MockObject/Generator/templates/proxied_method.tpl}4 e}@ėQphpunit/Framework/MockObject/Generator/templates/proxied_method_never_or_void.tplv4 evT@phpunit/Framework/MockObject/Generator/templates/trait_class.tplQ4 eQ<Ȥ?phpunit/Framework/MockObject/Generator/templates/wsdl_class.tpl4 e@phpunit/Framework/MockObject/Generator/templates/wsdl_method.tpl<4 e<i,phpunit/Framework/MockObject/MockBuilder.php-4 e-3phpunit/Framework/MockObject/Runtime/Api/Method.php 4 e G(:phpunit/Framework/MockObject/Runtime/Api/MockObjectApi.php}4 e} ->phpunit/Framework/MockObject/Runtime/Api/MockedCloneMethod.php14 e1>BѤ4phpunit/Framework/MockObject/Runtime/Api/StubApi.php54 e5@phpunit/Framework/MockObject/Runtime/Api/UnmockedCloneMethod.phpN4 eN/9phpunit/Framework/MockObject/Runtime/Builder/Identity.php[4 e[$X3{Aphpunit/Framework/MockObject/Runtime/Builder/InvocationMocker.php4 e<Bphpunit/Framework/MockObject/Runtime/Builder/InvocationStubber.php4 eeU@phpunit/Framework/MockObject/Runtime/Builder/MethodNameMatch.php4 e:'@phpunit/Framework/MockObject/Runtime/Builder/ParametersMatch.phpN4 eNx)5phpunit/Framework/MockObject/Runtime/Builder/Stub.php4 e(=phpunit/Framework/MockObject/Runtime/Interface/MockObject.php4 etEphpunit/Framework/MockObject/Runtime/Interface/MockObjectInternal.php4 e c7phpunit/Framework/MockObject/Runtime/Interface/Stub.php4 eliH?phpunit/Framework/MockObject/Runtime/Interface/StubInternal.phpd4 ed٤3phpunit/Framework/MockObject/Runtime/Invocation.php)4 e)AI:phpunit/Framework/MockObject/Runtime/InvocationHandler.php4 e0phpunit/Framework/MockObject/Runtime/Matcher.php4 e=phpunit/Framework/MockObject/Runtime/MethodNameConstraint.php4 eӶ=phpunit/Framework/MockObject/Runtime/ReturnValueGenerator.php\4 e\N=phpunit/Framework/MockObject/Runtime/Rule/AnyInvokedCount.php4 e3;phpunit/Framework/MockObject/Runtime/Rule/AnyParameters.php4 eU=phpunit/Framework/MockObject/Runtime/Rule/InvocationOrder.php4 eH NAphpunit/Framework/MockObject/Runtime/Rule/InvokedAtLeastCount.php4 eiԤ@phpunit/Framework/MockObject/Runtime/Rule/InvokedAtLeastOnce.php4 e @phpunit/Framework/MockObject/Runtime/Rule/InvokedAtMostCount.php4 eN:phpunit/Framework/MockObject/Runtime/Rule/InvokedCount.phpZ 4 eZ 8phpunit/Framework/MockObject/Runtime/Rule/MethodName.php4 ef-Ф8phpunit/Framework/MockObject/Runtime/Rule/Parameters.php94 e9ڳj<phpunit/Framework/MockObject/Runtime/Rule/ParametersRule.php4 el^L>phpunit/Framework/MockObject/Runtime/Stub/ConsecutiveCalls.php4 e7phpunit/Framework/MockObject/Runtime/Stub/Exception.php;4 e; Ҥ<phpunit/Framework/MockObject/Runtime/Stub/ReturnArgument.php44 e4`<phpunit/Framework/MockObject/Runtime/Stub/ReturnCallback.phpi4 eit=phpunit/Framework/MockObject/Runtime/Stub/ReturnReference.php4 euߔ8phpunit/Framework/MockObject/Runtime/Stub/ReturnSelf.php4 eר ݤ8phpunit/Framework/MockObject/Runtime/Stub/ReturnStub.php4 e`[<phpunit/Framework/MockObject/Runtime/Stub/ReturnValueMap.php4 eʤ2phpunit/Framework/MockObject/Runtime/Stub/Stub.phpz4 ez!phpunit/Framework/Reorderable.php4 e˯$phpunit/Framework/SelfDescribing.php -4 e -sphpunit/Framework/Test.php4 eǺ!phpunit/Framework/TestBuilder.php%4 e%݇Ӥphpunit/Framework/TestCase.phpG4 eG@q phpunit/Framework/TestRunner.php74 e71S$phpunit/Framework/TestSize/Known.php4 e)T Ф$phpunit/Framework/TestSize/Large.php/4 e/N`i%phpunit/Framework/TestSize/Medium.php24 e2b{$phpunit/Framework/TestSize/Small.php#4 e#24'phpunit/Framework/TestSize/TestSize.php54 e5ˮ&phpunit/Framework/TestSize/Unknown.php4 eg,phpunit/Framework/TestStatus/Deprecation.php4 eȸ&phpunit/Framework/TestStatus/Error.php4 eۑ(phpunit/Framework/TestStatus/Failure.php4 ep!]+phpunit/Framework/TestStatus/Incomplete.php4 eC&phpunit/Framework/TestStatus/Known.phpz4 ez->f'phpunit/Framework/TestStatus/Notice.php4 e'S(&phpunit/Framework/TestStatus/Risky.php4 eVw(phpunit/Framework/TestStatus/Skipped.php4 e4̤(phpunit/Framework/TestStatus/Success.php4 eڍ]8+phpunit/Framework/TestStatus/TestStatus.phpn4 enb(phpunit/Framework/TestStatus/Unknown.php 4 e 7W(phpunit/Framework/TestStatus/Warning.php4 eYphpunit/Framework/TestSuite.php:D4 e:DS1N'phpunit/Framework/TestSuiteIterator.php34 e3.Kphpunit/Logging/EventLogger.php4 e-|phpunit/Logging/Exception.php4 e%٤(phpunit/Logging/JUnit/JunitXmlLogger.php/4 e/bޭ/phpunit/Logging/JUnit/Subscriber/Subscriber.php4 eyJ;:phpunit/Logging/JUnit/Subscriber/TestErroredSubscriber.phpz4 ezP_ˤ9phpunit/Logging/JUnit/Subscriber/TestFailedSubscriber.phpt4 etr);phpunit/Logging/JUnit/Subscriber/TestFinishedSubscriber.php4 e Cphpunit/Logging/JUnit/Subscriber/TestMarkedIncompleteSubscriber.php4 eP;phpunit/Logging/JUnit/Subscriber/TestPreparedSubscriber.php4 e:wJphpunit/Logging/JUnit/Subscriber/TestRunnerExecutionFinishedSubscriber.php4 eĤ:phpunit/Logging/JUnit/Subscriber/TestSkippedSubscriber.phpz4 ezY@phpunit/Logging/JUnit/Subscriber/TestSuiteFinishedSubscriber.php4 eVG?phpunit/Logging/JUnit/Subscriber/TestSuiteStartedSubscriber.php4 e?2phpunit/Logging/TeamCity/Subscriber/Subscriber.php4 eGEphpunit/Logging/TeamCity/Subscriber/TestConsideredRiskySubscriber.php?4 e?s&U=phpunit/Logging/TeamCity/Subscriber/TestErroredSubscriber.php4 eФ<phpunit/Logging/TeamCity/Subscriber/TestFailedSubscriber.php 4 e U>phpunit/Logging/TeamCity/Subscriber/TestFinishedSubscriber.php4 ei&iFphpunit/Logging/TeamCity/Subscriber/TestMarkedIncompleteSubscriber.phpE4 eE >phpunit/Logging/TeamCity/Subscriber/TestPreparedSubscriber.php4 e Mphpunit/Logging/TeamCity/Subscriber/TestRunnerExecutionFinishedSubscriber.php4 e,=phpunit/Logging/TeamCity/Subscriber/TestSkippedSubscriber.php4 emF֤Cphpunit/Logging/TeamCity/Subscriber/TestSuiteFinishedSubscriber.php4 exBphpunit/Logging/TeamCity/Subscriber/TestSuiteStartedSubscriber.php4 e}G9+phpunit/Logging/TeamCity/TeamCityLogger.php$4 e$bs((phpunit/Logging/TestDox/HtmlRenderer.php 4 e lE*phpunit/Logging/TestDox/NamePrettifier.php!4 e!;Y-phpunit/Logging/TestDox/PlainTextRenderer.phpe4 ee <phpunit/Logging/TestDox/TestMethod/Subscriber/Subscriber.php4 e'ĤOphpunit/Logging/TestDox/TestMethod/Subscriber/TestConsideredRiskySubscriber.php4 eAaphpunit/Logging/TestDox/TestMethod/Subscriber/TestCreatedMockObjectForAbstractClassSubscriber.php84 e8G驤Yphpunit/Logging/TestDox/TestMethod/Subscriber/TestCreatedMockObjectForTraitSubscriber.php4 eR< Yphpunit/Logging/TestDox/TestMethod/Subscriber/TestCreatedMockObjectFromWsdlSubscriber.php4 eQphpunit/Logging/TestDox/TestMethod/Subscriber/TestCreatedMockObjectSubscriber.php4 eԤXphpunit/Logging/TestDox/TestMethod/Subscriber/TestCreatedPartialMockObjectSubscriber.php 4 e 2Pphpunit/Logging/TestDox/TestMethod/Subscriber/TestCreatedTestProxySubscriber.php4 eOphpunit/Logging/TestDox/TestMethod/Subscriber/TestCreatedTestStubSubscriber.php4 eaGphpunit/Logging/TestDox/TestMethod/Subscriber/TestErroredSubscriber.php4 e;m Fphpunit/Logging/TestDox/TestMethod/Subscriber/TestFailedSubscriber.php4 eF,Hphpunit/Logging/TestDox/TestMethod/Subscriber/TestFinishedSubscriber.php4 ePGPphpunit/Logging/TestDox/TestMethod/Subscriber/TestMarkedIncompleteSubscriber.php4 e {Fphpunit/Logging/TestDox/TestMethod/Subscriber/TestPassedSubscriber.php4 e)#Hphpunit/Logging/TestDox/TestMethod/Subscriber/TestPreparedSubscriber.php4 e.Gphpunit/Logging/TestDox/TestMethod/Subscriber/TestSkippedSubscriber.php4 e<Ӥ1phpunit/Logging/TestDox/TestMethod/TestResult.php4 e%+8;phpunit/Logging/TestDox/TestMethod/TestResultCollection.php4 eCphpunit/Logging/TestDox/TestMethod/TestResultCollectionIterator.php4 ex:phpunit/Logging/TestDox/TestMethod/TestResultCollector.php4 e<phpunit/Metadata/After.php$4 e$Е1Τphpunit/Metadata/AfterClass.php.4 e.LR%phpunit/Metadata/Api/CodeCoverage.php$4 e$B& %phpunit/Metadata/Api/DataProvider.phpG!4 eG!-%phpunit/Metadata/Api/Dependencies.php 4 e  eɤphpunit/Metadata/Api/Groups.php9 4 e9 z/[C$phpunit/Metadata/Api/HookMethods.phpu 4 eu ` %phpunit/Metadata/Api/Requirements.php4 e>c8"phpunit/Metadata/BackupGlobals.php:4 e:€k+phpunit/Metadata/BackupStaticProperties.phpL4 eL& phpunit/Metadata/Before.php&4 e& phpunit/Metadata/BeforeClass.php04 e0Aphpunit/Metadata/Covers.php,4 e,Q phpunit/Metadata/CoversClass.php4 e3'phpunit/Metadata/CoversDefaultClass.php4 e"#phpunit/Metadata/CoversFunction.php>4 e>^$"phpunit/Metadata/CoversNothing.php44 e4~Zc!phpunit/Metadata/DataProvider.php4 ej#phpunit/Metadata/DependsOnClass.phpa4 eadˤ$phpunit/Metadata/DependsOnMethod.php!4 e! -phpunit/Metadata/DoesNotPerformAssertions.phpJ4 eJ8 \'Tphpunit/Metadata/Exception/AnnotationsAreNotSupportedForInternalClassesException.php:4 e:,Ȥ(phpunit/Metadata/Exception/Exception.phpO4 eOwAphpunit/Metadata/Exception/InvalidVersionRequirementException.php4 ePR<phpunit/Metadata/Exception/NoVersionRequirementException.php4 e?+睤2phpunit/Metadata/Exception/ReflectionException.php4 en4phpunit/Metadata/ExcludeGlobalVariableFromBackup.php4 eg"4phpunit/Metadata/ExcludeStaticPropertyFromBackup.php4 eʁg?phpunit/Metadata/Group.php<4 e<@7;/phpunit/Metadata/IgnoreClassForCodeCoverage.php4 eI-2phpunit/Metadata/IgnoreFunctionForCodeCoverage.php4 e4H0phpunit/Metadata/IgnoreMethodForCodeCoverage.php]4 e]Nphpunit/Metadata/Metadata.phpRQ4 eRQH'phpunit/Metadata/MetadataCollection.phpS,4 eS,o/phpunit/Metadata/MetadataCollectionIterator.php4 e2I/phpunit/Metadata/Parser/Annotation/DocBlock.phpP"4 eP"nV/phpunit/Metadata/Parser/Annotation/Registry.php 4 e tai,phpunit/Metadata/Parser/AnnotationParser.phpC4 eC^o+phpunit/Metadata/Parser/AttributeParser.phpU4 eU^.uI)phpunit/Metadata/Parser/CachingParser.php4 ePy~"phpunit/Metadata/Parser/Parser.php4 eOv'phpunit/Metadata/Parser/ParserChain.php4 e -nY$phpunit/Metadata/Parser/Registry.phpM4 eM2e"phpunit/Metadata/PostCondition.php44 e46..!phpunit/Metadata/PreCondition.php24 e2.(phpunit/Metadata/PreserveGlobalState.phpF4 eF8%phpunit/Metadata/RequiresFunction.phpd4 ed`B#phpunit/Metadata/RequiresMethod.php4 eA˃,phpunit/Metadata/RequiresOperatingSystem.php4 eM+A2phpunit/Metadata/RequiresOperatingSystemFamily.php4 e'r phpunit/Metadata/RequiresPhp.php4 e-Y)phpunit/Metadata/RequiresPhpExtension.php4 eEW'$phpunit/Metadata/RequiresPhpunit.php4 e!9a$phpunit/Metadata/RequiresSetting.php4 eAm.phpunit/Metadata/RunClassInSeparateProcess.phpL4 eLwT)phpunit/Metadata/RunInSeparateProcess.phpB4 eBiZ0phpunit/Metadata/RunTestsInSeparateProcesses.phpP4 ePtphpunit/Metadata/Test.php"4 e"phpunit/Metadata/TestDox.php"4 e"phpunit/Metadata/TestWith.php!4 e!phpunit/Metadata/Uses.php(4 e(פphpunit/Metadata/UsesClass.php4 e7*Ⱥ%phpunit/Metadata/UsesDefaultClass.php4 e/7X!phpunit/Metadata/UsesFunction.php74 e7(؟֤2phpunit/Metadata/Version/ComparisonRequirement.phph4 eh52phpunit/Metadata/Version/ConstraintRequirement.php4 ew㳤(phpunit/Metadata/Version/Requirement.php4 ea p_(phpunit/Metadata/WithoutErrorHandler.php@4 e@P߮phpunit/Runner/CodeCoverage.php24 e2Nphpunit/Runner/ErrorHandler.php 4 e ̤8phpunit/Runner/Exception/ClassCannotBeFoundException.php4 ec@phpunit/Runner/Exception/ClassDoesNotExtendTestCaseException.php4 en5phpunit/Runner/Exception/ClassIsAbstractException.php4 ep7o>phpunit/Runner/Exception/DirectoryCannotBeCreatedException.php4 e:Vr&phpunit/Runner/Exception/Exception.php4 enHA6phpunit/Runner/Exception/FileDoesNotExistException.php4 eg K2phpunit/Runner/Exception/InvalidOrderException.php4 e8Kڤ5phpunit/Runner/Exception/InvalidPhptFileException.php4 ezA>4phpunit/Runner/Exception/NoIgnoredEventException.php4 e3Uǚ;phpunit/Runner/Exception/ParameterDoesNotExistException.php4 e]wQDphpunit/Runner/Exception/PhptExternalFileCannotBeLoadedException.php4 ej0phpunit/Runner/Exception/ReflectionException.php4 e^ss<phpunit/Runner/Exception/UnsupportedPhptSectionException.php4 e &phpunit/Runner/Extension/Extension.php4 eVZ2phpunit/Runner/Extension/ExtensionBootstrapper.php_ 4 e_ ͤ#phpunit/Runner/Extension/Facade.php 4 e aŤ0phpunit/Runner/Extension/ParameterCollection.php4 enZ[c'phpunit/Runner/Extension/PharLoader.php4 eD 4phpunit/Runner/Filter/ExcludeGroupFilterIterator.phpl4 elH}H!phpunit/Runner/Filter/Factory.php4 es-phpunit/Runner/Filter/GroupFilterIterator.php4 e=z4phpunit/Runner/Filter/IncludeGroupFilterIterator.phpk4 ekSw,phpunit/Runner/Filter/NameFilterIterator.php 4 e =phpunit/Runner/GarbageCollection/GarbageCollectionHandler.php4 etKphpunit/Runner/GarbageCollection/Subscriber/ExecutionFinishedSubscriber.php4 eRJphpunit/Runner/GarbageCollection/Subscriber/ExecutionStartedSubscriber.php4 e+0:phpunit/Runner/GarbageCollection/Subscriber/Subscriber.php"4 e"eFphpunit/Runner/GarbageCollection/Subscriber/TestFinishedSubscriber.php[4 e[Hphpunit/Runner/PhptTestCase.php -V4 e -V̠1phpunit/Runner/ResultCache/DefaultResultCache.php 4 e X-.phpunit/Runner/ResultCache/NullResultCache.php4 eS*phpunit/Runner/ResultCache/ResultCache.php4 e3Gb1phpunit/Runner/ResultCache/ResultCacheHandler.php4 e4phpunit/Runner/ResultCache/Subscriber/Subscriber.php4 eM#Gphpunit/Runner/ResultCache/Subscriber/TestConsideredRiskySubscriber.php4 e$k?phpunit/Runner/ResultCache/Subscriber/TestErroredSubscriber.php4 e4}Fr>phpunit/Runner/ResultCache/Subscriber/TestFailedSubscriber.php4 e )@phpunit/Runner/ResultCache/Subscriber/TestFinishedSubscriber.phpU4 eUVHphpunit/Runner/ResultCache/Subscriber/TestMarkedIncompleteSubscriber.php4 e.6@phpunit/Runner/ResultCache/Subscriber/TestPreparedSubscriber.php4 eΤ?phpunit/Runner/ResultCache/Subscriber/TestSkippedSubscriber.phpO4 eODÇEphpunit/Runner/ResultCache/Subscriber/TestSuiteFinishedSubscriber.php4 eߤDphpunit/Runner/ResultCache/Subscriber/TestSuiteStartedSubscriber.php4 e0DĤ'phpunit/Runner/TestResult/Collector.phpE4 eE>B$phpunit/Runner/TestResult/Facade.php 4 e X#phpunit/Runner/TestResult/Issue.php 4 e ysh)phpunit/Runner/TestResult/PassedTests.php 4 e |Ophpunit/Runner/TestResult/Subscriber/BeforeTestClassMethodErroredSubscriber.php.4 e.$|;Cphpunit/Runner/TestResult/Subscriber/ExecutionStartedSubscriber.php$4 e$ޙ63phpunit/Runner/TestResult/Subscriber/Subscriber.php4 e񡠒Fphpunit/Runner/TestResult/Subscriber/TestConsideredRiskySubscriber.php4 e}9r4>phpunit/Runner/TestResult/Subscriber/TestErroredSubscriber.php4 eܤ=phpunit/Runner/TestResult/Subscriber/TestFailedSubscriber.php4 e?%+?phpunit/Runner/TestResult/Subscriber/TestFinishedSubscriber.php4 eۤGphpunit/Runner/TestResult/Subscriber/TestMarkedIncompleteSubscriber.php4 elH?phpunit/Runner/TestResult/Subscriber/TestPreparedSubscriber.php4 e<¤Qphpunit/Runner/TestResult/Subscriber/TestRunnerTriggeredDeprecationSubscriber.php4 eYMphpunit/Runner/TestResult/Subscriber/TestRunnerTriggeredWarningSubscriber.php4 ex>phpunit/Runner/TestResult/Subscriber/TestSkippedSubscriber.php4 eADphpunit/Runner/TestResult/Subscriber/TestSuiteFinishedSubscriber.phpS4 eS*Cphpunit/Runner/TestResult/Subscriber/TestSuiteSkippedSubscriber.php4 eFCphpunit/Runner/TestResult/Subscriber/TestSuiteStartedSubscriber.php4 e bZKphpunit/Runner/TestResult/Subscriber/TestTriggeredDeprecationSubscriber.php4 esXcEphpunit/Runner/TestResult/Subscriber/TestTriggeredErrorSubscriber.php4 e{9Fphpunit/Runner/TestResult/Subscriber/TestTriggeredNoticeSubscriber.php4 eߋ%Nphpunit/Runner/TestResult/Subscriber/TestTriggeredPhpDeprecationSubscriber.php4 eeLOԤIphpunit/Runner/TestResult/Subscriber/TestTriggeredPhpNoticeSubscriber.php4 e dJphpunit/Runner/TestResult/Subscriber/TestTriggeredPhpWarningSubscriber.php4 eèMRphpunit/Runner/TestResult/Subscriber/TestTriggeredPhpunitDeprecationSubscriber.php04 e0gﰤLphpunit/Runner/TestResult/Subscriber/TestTriggeredPhpunitErrorSubscriber.php 4 e T5Nphpunit/Runner/TestResult/Subscriber/TestTriggeredPhpunitWarningSubscriber.php4 eDnGphpunit/Runner/TestResult/Subscriber/TestTriggeredWarningSubscriber.php4 eɤ(phpunit/Runner/TestResult/TestResult.phpq:4 eq:Qe"phpunit/Runner/TestSuiteLoader.php4 e[ -uФ"phpunit/Runner/TestSuiteSorter.phpR%4 eR%phpunit/Runner/Version.php4 eophpunit/TextUI/Application.phpF4 eF;Ƥ"phpunit/TextUI/Command/Command.php4 eO㍤9phpunit/TextUI/Command/Commands/AtLeastVersionCommand.php4 eTؼ@phpunit/TextUI/Command/Commands/GenerateConfigurationCommand.php4 eor5phpunit/TextUI/Command/Commands/ListGroupsCommand.php4 e,e9phpunit/TextUI/Command/Commands/ListTestSuitesCommand.php4 eKn:phpunit/TextUI/Command/Commands/ListTestsAsTextCommand.php4 eE>9phpunit/TextUI/Command/Commands/ListTestsAsXmlCommand.php4 e ?phpunit/TextUI/Command/Commands/MigrateConfigurationCommand.php4 e3phpunit/TextUI/Command/Commands/ShowHelpCommand.php/4 e/>>#6phpunit/TextUI/Command/Commands/ShowVersionCommand.phpS4 eS7phpunit/TextUI/Command/Commands/VersionCheckCommand.php4 eZ@phpunit/TextUI/Command/Commands/WarmCodeCoverageCacheCommand.php 4 e :a!phpunit/TextUI/Command/Result.phpc4 ec{(phpunit/TextUI/Configuration/Builder.php4 eG,phpunit/TextUI/Configuration/Cli/Builder.phpS4 eS2phpunit/TextUI/Configuration/Cli/Configuration.php4 ei6.phpunit/TextUI/Configuration/Cli/Exception.php4 e%zE?phpunit/TextUI/Configuration/Cli/XmlConfigurationFileFinder.php4 e`L;phpunit/TextUI/Configuration/CodeCoverageFilterRegistry.php4 e .phpunit/TextUI/Configuration/Configuration.php4 eDŤDphpunit/TextUI/Configuration/Exception/CannotFindSchemaException.php&4 e&ؔ}Sphpunit/TextUI/Configuration/Exception/CodeCoverageReportNotConfiguredException.php$4 e$Nphpunit/TextUI/Configuration/Exception/ConfigurationCannotBeBuiltException.php4 eZ$&4phpunit/TextUI/Configuration/Exception/Exception.php4 eGphpunit/TextUI/Configuration/Exception/FilterNotConfiguredException.php4 egGLphpunit/TextUI/Configuration/Exception/IncludePathNotConfiguredException.php4 exHphpunit/TextUI/Configuration/Exception/LoggingNotConfiguredException.php4 eY%?phpunit/TextUI/Configuration/Exception/NoBootstrapException.php4 e`lƤDphpunit/TextUI/Configuration/Exception/NoCacheDirectoryException.php4 eCAphpunit/TextUI/Configuration/Exception/NoCliArgumentException.php4 e|J?RGphpunit/TextUI/Configuration/Exception/NoConfigurationFileException.php4 eMLphpunit/TextUI/Configuration/Exception/NoCoverageCacheDirectoryException.php4 e;Cphpunit/TextUI/Configuration/Exception/NoCustomCssFileException.php4 eʑ0Fphpunit/TextUI/Configuration/Exception/NoDefaultTestSuiteException.php4 e Lphpunit/TextUI/Configuration/Exception/NoPharExtensionDirectoryException.php4 e)R'phpunit/TextUI/Configuration/Merger.phpz4 ezRy+phpunit/TextUI/Configuration/PhpHandler.php\4 e\y)phpunit/TextUI/Configuration/Registry.phpK 4 eK /B-phpunit/TextUI/Configuration/SourceFilter.php4 e^:ؤ-phpunit/TextUI/Configuration/SourceMapper.php 4 e ff1phpunit/TextUI/Configuration/TestSuiteBuilder.php 4 e /2/phpunit/TextUI/Configuration/Value/Constant.php84 e8bt9phpunit/TextUI/Configuration/Value/ConstantCollection.php4 eW6bAphpunit/TextUI/Configuration/Value/ConstantCollectionIterator.php4 eg]0phpunit/TextUI/Configuration/Value/Directory.php4 e3F:phpunit/TextUI/Configuration/Value/DirectoryCollection.php 4 e ?aBphpunit/TextUI/Configuration/Value/DirectoryCollectionIterator.php4 eہW9phpunit/TextUI/Configuration/Value/ExtensionBootstrap.php4 er[Cphpunit/TextUI/Configuration/Value/ExtensionBootstrapCollection.php4 eѤKphpunit/TextUI/Configuration/Value/ExtensionBootstrapCollectionIterator.php4 e( V+phpunit/TextUI/Configuration/Value/File.php/4 e/w5phpunit/TextUI/Configuration/Value/FileCollection.php4 e'P=phpunit/TextUI/Configuration/Value/FileCollectionIterator.phpn4 enj6phpunit/TextUI/Configuration/Value/FilterDirectory.php4 epS@phpunit/TextUI/Configuration/Value/FilterDirectoryCollection.phpD4 eDJHphpunit/TextUI/Configuration/Value/FilterDirectoryCollectionIterator.php4 e񭥤,phpunit/TextUI/Configuration/Value/Group.php4 ekפ6phpunit/TextUI/Configuration/Value/GroupCollection.php84 e8+Bm>phpunit/TextUI/Configuration/Value/GroupCollectionIterator.phpy4 eywX1phpunit/TextUI/Configuration/Value/IniSetting.php14 e1;phpunit/TextUI/Configuration/Value/IniSettingCollection.php4 e^Cphpunit/TextUI/Configuration/Value/IniSettingCollectionIterator.php4 e8Ф*phpunit/TextUI/Configuration/Value/Php.phpY4 eY畉-phpunit/TextUI/Configuration/Value/Source.php4 e+ 4phpunit/TextUI/Configuration/Value/TestDirectory.php4 eF >phpunit/TextUI/Configuration/Value/TestDirectoryCollection.php-4 e-zȤFphpunit/TextUI/Configuration/Value/TestDirectoryCollectionIterator.php4 ea>k/phpunit/TextUI/Configuration/Value/TestFile.php4 e)tФ9phpunit/TextUI/Configuration/Value/TestFileCollection.php4 eAphpunit/TextUI/Configuration/Value/TestFileCollectionIterator.php4 ep0phpunit/TextUI/Configuration/Value/TestSuite.php4 e䣉:phpunit/TextUI/Configuration/Value/TestSuiteCollection.php4 ePBphpunit/TextUI/Configuration/Value/TestSuiteCollectionIterator.php4 e;E/phpunit/TextUI/Configuration/Value/Variable.php4 e@9phpunit/TextUI/Configuration/Value/VariableCollection.php4 eїAphpunit/TextUI/Configuration/Value/VariableCollectionIterator.php4 eՑ>phpunit/TextUI/Configuration/Xml/CodeCoverage/CodeCoverage.php4 e?phpunit/TextUI/Configuration/Xml/CodeCoverage/Report/Clover.php4 eƣˠBphpunit/TextUI/Configuration/Xml/CodeCoverage/Report/Cobertura.php4 e5?phpunit/TextUI/Configuration/Xml/CodeCoverage/Report/Crap4j.phpp4 ep^=phpunit/TextUI/Configuration/Xml/CodeCoverage/Report/Html.php -4 e -CD<phpunit/TextUI/Configuration/Xml/CodeCoverage/Report/Php.php4 eCC|=phpunit/TextUI/Configuration/Xml/CodeCoverage/Report/Text.php}4 e}<phpunit/TextUI/Configuration/Xml/CodeCoverage/Report/Xml.php4 e:H-2phpunit/TextUI/Configuration/Xml/Configuration.php 4 e lE<9phpunit/TextUI/Configuration/Xml/DefaultConfiguration.php 4 e [^&.phpunit/TextUI/Configuration/Xml/Exception.php4 eN5+.phpunit/TextUI/Configuration/Xml/Generator.php4 eX]!+phpunit/TextUI/Configuration/Xml/Groups.phpd4 ed8=Ӥ@phpunit/TextUI/Configuration/Xml/LoadedFromFileConfiguration.php4 e-[+phpunit/TextUI/Configuration/Xml/Loader.php 4 e *@2phpunit/TextUI/Configuration/Xml/Logging/Junit.php4 eФ4phpunit/TextUI/Configuration/Xml/Logging/Logging.php -4 e -#5phpunit/TextUI/Configuration/Xml/Logging/TeamCity.php4 eϦ9phpunit/TextUI/Configuration/Xml/Logging/TestDox/Html.php4 eB*$9phpunit/TextUI/Configuration/Xml/Logging/TestDox/Text.php4 e?phpunit/TextUI/Configuration/Xml/Migration/MigrationBuilder.php4 e˃Hphpunit/TextUI/Configuration/Xml/Migration/MigrationBuilderException.php4 eUWĝAphpunit/TextUI/Configuration/Xml/Migration/MigrationException.php4 e\ZIphpunit/TextUI/Configuration/Xml/Migration/Migrations/ConvertLogTypes.php4 ehoePphpunit/TextUI/Configuration/Xml/Migration/Migrations/CoverageCloverToReport.phpX4 eXijPphpunit/TextUI/Configuration/Xml/Migration/Migrations/CoverageCrap4jToReport.php4 e$i'Nphpunit/TextUI/Configuration/Xml/Migration/Migrations/CoverageHtmlToReport.php4 eՄjMphpunit/TextUI/Configuration/Xml/Migration/Migrations/CoveragePhpToReport.phpF4 eF^ӤNphpunit/TextUI/Configuration/Xml/Migration/Migrations/CoverageTextToReport.php4 eV_Mphpunit/TextUI/Configuration/Xml/Migration/Migrations/CoverageXmlToReport.phpK4 eK_ Zphpunit/TextUI/Configuration/Xml/Migration/Migrations/IntroduceCacheDirectoryAttribute.php\4 e\Rphpunit/TextUI/Configuration/Xml/Migration/Migrations/IntroduceCoverageElement.php4 eUNphpunit/TextUI/Configuration/Xml/Migration/Migrations/LogToReportMigration.php4 eUCphpunit/TextUI/Configuration/Xml/Migration/Migrations/Migration.php4 e'ephpunit/TextUI/Configuration/Xml/Migration/Migrations/MoveAttributesFromFilterWhitelistToCoverage.php4 eU%5Zphpunit/TextUI/Configuration/Xml/Migration/Migrations/MoveAttributesFromRootToCoverage.php4 e"OYphpunit/TextUI/Configuration/Xml/Migration/Migrations/MoveCoverageDirectoriesToSource.php4 eT>Yphpunit/TextUI/Configuration/Xml/Migration/Migrations/MoveWhitelistExcludesToCoverage.php4 e -Yphpunit/TextUI/Configuration/Xml/Migration/Migrations/MoveWhitelistIncludesToCoverage.php4 e8;sphpunit/TextUI/Configuration/Xml/Migration/Migrations/RemoveBeStrictAboutResourceUsageDuringSmallTestsAttribute.php4 e yhphpunit/TextUI/Configuration/Xml/Migration/Migrations/RemoveBeStrictAboutTodoAnnotatedTestsAttribute.phpm4 emXphpunit/TextUI/Configuration/Xml/Migration/Migrations/RemoveCacheResultFileAttribute.php=4 e=ۨǤTphpunit/TextUI/Configuration/Xml/Migration/Migrations/RemoveCacheTokensAttribute.php14 e1T9`phpunit/TextUI/Configuration/Xml/Migration/Migrations/RemoveConversionToExceptionsAttributes.php 4 e fphpunit/TextUI/Configuration/Xml/Migration/Migrations/RemoveCoverageElementCacheDirectoryAttribute.php4 emphpunit/TextUI/Configuration/Xml/Migration/Migrations/RemoveCoverageElementProcessUncoveredFilesAttribute.php4 e[ Kphpunit/TextUI/Configuration/Xml/Migration/Migrations/RemoveEmptyFilter.php{4 e{KIphpunit/TextUI/Configuration/Xml/Migration/Migrations/RemoveListeners.php'4 e'nHphpunit/TextUI/Configuration/Xml/Migration/Migrations/RemoveLogTypes.phpi4 eiOphpunit/TextUI/Configuration/Xml/Migration/Migrations/RemoveLoggingElements.php)4 e).Vphpunit/TextUI/Configuration/Xml/Migration/Migrations/RemoveNoInteractionAttribute.php74 e7⼿Qphpunit/TextUI/Configuration/Xml/Migration/Migrations/RemovePrinterAttributes.php4 e}Tphpunit/TextUI/Configuration/Xml/Migration/Migrations/RemoveTestDoxGroupsElement.php64 e6DYphpunit/TextUI/Configuration/Xml/Migration/Migrations/RemoveTestSuiteLoaderAttributes.php4 esUPphpunit/TextUI/Configuration/Xml/Migration/Migrations/RemoveVerboseAttribute.php%4 e%J_phpunit/TextUI/Configuration/Xml/Migration/Migrations/RenameBackupStaticAttributesAttribute.php$4 e$CȤfphpunit/TextUI/Configuration/Xml/Migration/Migrations/RenameBeStrictAboutCoversAnnotationAttribute.phpN4 eNb^phpunit/TextUI/Configuration/Xml/Migration/Migrations/RenameForceCoversAnnotationAttribute.php"4 e" Nphpunit/TextUI/Configuration/Xml/Migration/Migrations/UpdateSchemaLocation.php4 e 7phpunit/TextUI/Configuration/Xml/Migration/Migrator.php4 eU?phpunit/TextUI/Configuration/Xml/Migration/SnapshotNodeList.phpg4 egi,phpunit/TextUI/Configuration/Xml/PHPUnit.php;4 e;Ophpunit/TextUI/Configuration/Xml/SchemaDetector/FailedSchemaDetectionResult.php4 e,F6¤Iphpunit/TextUI/Configuration/Xml/SchemaDetector/SchemaDetectionResult.php4 e^=Bphpunit/TextUI/Configuration/Xml/SchemaDetector/SchemaDetector.php4 e+QSphpunit/TextUI/Configuration/Xml/SchemaDetector/SuccessfulSchemaDetectionResult.php24 e2YѶ1phpunit/TextUI/Configuration/Xml/SchemaFinder.php4 e -伤4phpunit/TextUI/Configuration/Xml/TestSuiteMapper.php4 ebH?phpunit/TextUI/Configuration/Xml/Validator/ValidationResult.php4 e+8phpunit/TextUI/Configuration/Xml/Validator/Validator.php14 e1EŤ;phpunit/TextUI/Exception/DirectoryDoesNotExistException.php4 e-ʤ&phpunit/TextUI/Exception/Exception.php4 eD{i=phpunit/TextUI/Exception/ExtensionsNotConfiguredException.php4 e3f.3phpunit/TextUI/Exception/InvalidSocketException.php4 e0phpunit/TextUI/Exception/ReflectionException.php4 eJuv-phpunit/TextUI/Exception/RuntimeException.php4 e ;phpunit/TextUI/Exception/TestDirectoryNotFoundException.php4 enL6phpunit/TextUI/Exception/TestFileNotFoundException.php4 e?lphpunit/TextUI/Help.php'14 e'1P_Aphpunit/TextUI/Output/Default/ProgressPrinter/ProgressPrinter.php.4 e.|_rcphpunit/TextUI/Output/Default/ProgressPrinter/Subscriber/BeforeTestClassMethodErroredSubscriber.phpF4 eFC8%Gphpunit/TextUI/Output/Default/ProgressPrinter/Subscriber/Subscriber.php;4 e;4 e> *sebastian-comparator/NumericComparator.php4 e]>m)sebastian-comparator/ObjectComparator.php -4 e -rXƤ+sebastian-comparator/ResourceComparator.phpI4 eIN')sebastian-comparator/ScalarComparator.php 4 e D~&3sebastian-comparator/SplObjectStorageComparator.php4 e'sebastian-comparator/TypeComparator.php4 e-sebastian-comparator/exceptions/Exception.phpv4 evEᵤ4sebastian-comparator/exceptions/RuntimeException.php4 eV'#sebastian-complexity/Calculator.php 4 e hg.sebastian-complexity/Complexity/Complexity.php^4 e^)r8sebastian-complexity/Complexity/ComplexityCollection.phpN4 eN}@sebastian-complexity/Complexity/ComplexityCollectionIterator.php4 e]Y,sebastian-complexity/Exception/Exception.phpv4 ev73sebastian-complexity/Exception/RuntimeException.php4 eCdWsebastian-complexity/LICENSE4 eP@٤=sebastian-complexity/Visitor/ComplexityCalculatingVisitor.phpQ 4 eQ ΀LGsebastian-complexity/Visitor/CyclomaticComplexityCalculatingVisitor.php4 eܽsebastian-diff/Chunk.php4 esebastian-diff/Diff.php`4 e`&sebastian-diff/Differ.php4 eה3sebastian-diff/Exception/ConfigurationException.php!4 e!&sebastian-diff/Exception/Exception.phpj4 ej05sebastian-diff/Exception/InvalidArgumentException.php4 eqsebastian-diff/LICENSE4 eTsebastian-diff/Line.php4 eǺ5sebastian-diff/LongestCommonSubsequenceCalculator.php4 e}e7zDsebastian-diff/MemoryEfficientLongestCommonSubsequenceCalculator.phpy 4 ey [DQ4sebastian-diff/Output/AbstractChunkOutputBuilder.php4 es/sebastian-diff/Output/DiffOnlyOutputBuilder.phpy4 ey"4sebastian-diff/Output/DiffOutputBuilderInterface.php4 eV8sebastian-diff/Output/StrictUnifiedDiffOutputBuilder.phpU(4 eU(ߢ"2sebastian-diff/Output/UnifiedDiffOutputBuilder.php4 eɅ|sebastian-diff/Parser.phpu 4 eu ݤBsebastian-diff/TimeEfficientLongestCommonSubsequenceCalculator.php. 4 e. N!sebastian-environment/Console.php4 eP1Ťsebastian-environment/LICENSE4 eWj!sebastian-environment/Runtime.php4 eB^sebastian-exporter/Exporter.php"4 e"lsebastian-exporter/LICENSE4 eT'sebastian-global-state/CodeExporter.phph 4 eh :}&sebastian-global-state/ExcludeList.php 4 e :$sebastian-global-state/LICENSE4 e$#sebastian-global-state/Restorer.php2 4 e2 Rɤ#sebastian-global-state/Snapshot.php&4 e&r/sebastian-global-state/exceptions/Exception.phpy4 eyJ6sebastian-global-state/exceptions/RuntimeException.php4 e;#sebastian-lines-of-code/Counter.phpb 4 eb /sebastian-lines-of-code/Exception/Exception.phpz4 ez aV>sebastian-lines-of-code/Exception/IllogicalValuesException.php4 eG<sebastian-lines-of-code/Exception/NegativeValueException.php4 e -ڤ6sebastian-lines-of-code/Exception/RuntimeException.php4 eKsebastian-lines-of-code/LICENSE4 eP@٤/sebastian-lines-of-code/LineCountingVisitor.php4 e ^'sebastian-lines-of-code/LinesOfCode.php 4 e (EФ*sebastian-object-enumerator/Enumerator.php4 e_.sebastian-object-reflector/ObjectReflector.php4 e9m 'sebastian-recursion-context/Context.php4 e!#sebastian-recursion-context/LICENSE4 eTsebastian-type/LICENSE4 e sebastian-type/Parameter.php4 e~]#sebastian-type/ReflectionMapper.php4 e 8sebastian-type/TypeName.php4 eh&sebastian-type/exception/Exception.phpj4 ejbᮧ-sebastian-type/exception/RuntimeException.php4 e%$sebastian-type/type/CallableType.php4 eĊP!sebastian-type/type/FalseType.phpb4 eb_&)sebastian-type/type/GenericObjectType.php 4 e c(sebastian-type/type/IntersectionType.php -4 e -¤$sebastian-type/type/IterableType.php4 e3դ!sebastian-type/type/MixedType.php'4 e'o!sebastian-type/type/NeverType.php4 eFҹ sebastian-type/type/NullType.php"4 e"9$F"sebastian-type/type/ObjectType.php%4 e%"sebastian-type/type/SimpleType.php,4 e,0"sebastian-type/type/StaticType.php4 e", sebastian-type/type/TrueType.php]4 e]<iפsebastian-type/type/Type.php4 eR!sebastian-type/type/UnionType.php* 4 e* AA#sebastian-type/type/UnknownType.php4 eǤ sebastian-type/type/VoidType.php4 esebastian-version/LICENSE4 eVosebastian-version/Version.php4 e.7theseer-tokenizer/Exception.phpn4 en'Ǥtheseer-tokenizer/LICENSE4 eR ("theseer-tokenizer/NamespaceUri.phpH4 eH=C+theseer-tokenizer/NamespaceUriException.phpy4 ey'Hetheseer-tokenizer/Token.php4 e4%theseer-tokenizer/TokenCollection.php -4 e -a.theseer-tokenizer/TokenCollectionException.php|4 e|`g-theseer-tokenizer/Tokenizer.php -4 e -zl#theseer-tokenizer/XMLSerializer.php4 eg; .phpstorm.meta.php4 eɒsphpunit/phpunit: 10.3.5 +phpunit-10.4.0.phar manifest.txt`eܤ'myclabs-deep-copy/DeepCopy/DeepCopy.php`eLä7myclabs-deep-copy/DeepCopy/Exception/CloneException.php`e {ˤ:myclabs-deep-copy/DeepCopy/Exception/PropertyException.php`e3Gz5myclabs-deep-copy/DeepCopy/Filter/ChainableFilter.php`eTE Gmyclabs-deep-copy/DeepCopy/Filter/Doctrine/DoctrineCollectionFilter.php +`e +DgLmyclabs-deep-copy/DeepCopy/Filter/Doctrine/DoctrineEmptyCollectionFilter.php`e)$Bmyclabs-deep-copy/DeepCopy/Filter/Doctrine/DoctrineProxyFilter.php`e),myclabs-deep-copy/DeepCopy/Filter/Filter.phpd`edM0myclabs-deep-copy/DeepCopy/Filter/KeepFilter.php`eYn3myclabs-deep-copy/DeepCopy/Filter/ReplaceFilter.php`e3myclabs-deep-copy/DeepCopy/Filter/SetNullFilter.php`e䊉Dmyclabs-deep-copy/DeepCopy/Matcher/Doctrine/DoctrineProxyMatcher.php`epr.myclabs-deep-copy/DeepCopy/Matcher/Matcher.php`e6myclabs-deep-copy/DeepCopy/Matcher/PropertyMatcher.php`e=Bv:myclabs-deep-copy/DeepCopy/Matcher/PropertyNameMatcher.php`eR:myclabs-deep-copy/DeepCopy/Matcher/PropertyTypeMatcher.php2`e2ZQͤ:myclabs-deep-copy/DeepCopy/Reflection/ReflectionHelper.php5`e5ىAmyclabs-deep-copy/DeepCopy/TypeFilter/Date/DateIntervalFilter.php`eƤ7myclabs-deep-copy/DeepCopy/TypeFilter/ReplaceFilter.php`ez;myclabs-deep-copy/DeepCopy/TypeFilter/ShallowCopyFilter.php`eؤ?myclabs-deep-copy/DeepCopy/TypeFilter/Spl/ArrayObjectFilter.php`e^Amyclabs-deep-copy/DeepCopy/TypeFilter/Spl/SplDoublyLinkedList.php`ev|Gmyclabs-deep-copy/DeepCopy/TypeFilter/Spl/SplDoublyLinkedListFilter.php`eT+4myclabs-deep-copy/DeepCopy/TypeFilter/TypeFilter.php`eVD6myclabs-deep-copy/DeepCopy/TypeMatcher/TypeMatcher.php`eQBŤ(myclabs-deep-copy/DeepCopy/deep_copy.php`erxmyclabs-deep-copy/LICENSE5`e5ʭ˄nikic-php-parser/LICENSE`e*&nikic-php-parser/PhpParser/Builder.php`e61nikic-php-parser/PhpParser/Builder/ClassConst.php`e-nikic-php-parser/PhpParser/Builder/Class_.php`ec32nikic-php-parser/PhpParser/Builder/Declaration.php`eE7/nikic-php-parser/PhpParser/Builder/EnumCase.php^`e^ueT,nikic-php-parser/PhpParser/Builder/Enum_.php `e #3nikic-php-parser/PhpParser/Builder/FunctionLike.php`eZqe0nikic-php-parser/PhpParser/Builder/Function_.phpF`eFux1nikic-php-parser/PhpParser/Builder/Interface_.php `e -nikic-php-parser/PhpParser/Builder/Method.php`e}1nikic-php-parser/PhpParser/Builder/Namespace_.php:`e:ˆp,nikic-php-parser/PhpParser/Builder/Param.php{`e{j4/nikic-php-parser/PhpParser/Builder/Property.php|`e|O /nikic-php-parser/PhpParser/Builder/TraitUse.phpW`eWL@9nikic-php-parser/PhpParser/Builder/TraitUseAdaptation.php`eUVx-nikic-php-parser/PhpParser/Builder/Trait_.php`ekj+nikic-php-parser/PhpParser/Builder/Use_.php`es-nikic-php-parser/PhpParser/BuilderFactory.php+`e+ $-nikic-php-parser/PhpParser/BuilderHelpers.php$`e$:@&nikic-php-parser/PhpParser/Comment.php`eA*nikic-php-parser/PhpParser/Comment/Doc.phpx`exp;nikic-php-parser/PhpParser/ConstExprEvaluationException.php_`e_I 1nikic-php-parser/PhpParser/ConstExprEvaluator.phpl%`el%evQ$nikic-php-parser/PhpParser/Error.php`eQZ+nikic-php-parser/PhpParser/ErrorHandler.php/`e/#\6nikic-php-parser/PhpParser/ErrorHandler/Collecting.php`e&Ȥ4nikic-php-parser/PhpParser/ErrorHandler/Throwing.php`eS}<0nikic-php-parser/PhpParser/Internal/DiffElem.php7`e7$.nikic-php-parser/PhpParser/Internal/Differ.php-`e-^Anikic-php-parser/PhpParser/Internal/PrintableNewAnonClassNode.php`e<3nikic-php-parser/PhpParser/Internal/TokenStream.php#`e#f*nikic-php-parser/PhpParser/JsonDecoder.php `e xg$nikic-php-parser/PhpParser/Lexer.phpyZ`eyZq⃤.nikic-php-parser/PhpParser/Lexer/Emulative.phpO#`eO#ܲݤDnikic-php-parser/PhpParser/Lexer/TokenEmulator/AttributeEmulator.php`erLnikic-php-parser/PhpParser/Lexer/TokenEmulator/CoaleseEqualTokenEmulator.php `e *§oDnikic-php-parser/PhpParser/Lexer/TokenEmulator/EnumTokenEmulator.php`eLFHnikic-php-parser/PhpParser/Lexer/TokenEmulator/ExplicitOctalEmulator.php`e*#Lnikic-php-parser/PhpParser/Lexer/TokenEmulator/FlexibleDocStringEmulator.phpn `en 1Bnikic-php-parser/PhpParser/Lexer/TokenEmulator/FnTokenEmulator.php`ejBnikic-php-parser/PhpParser/Lexer/TokenEmulator/KeywordEmulator.php`e`atEnikic-php-parser/PhpParser/Lexer/TokenEmulator/MatchTokenEmulator.php`ec/Hnikic-php-parser/PhpParser/Lexer/TokenEmulator/NullsafeTokenEmulator.php`e:&ERnikic-php-parser/PhpParser/Lexer/TokenEmulator/NumericLiteralSeparatorEmulator.phpV`eVPnikic-php-parser/PhpParser/Lexer/TokenEmulator/ReadonlyFunctionTokenEmulator.php`ee!ćHnikic-php-parser/PhpParser/Lexer/TokenEmulator/ReadonlyTokenEmulator.phpL`eL +`9JBnikic-php-parser/PhpParser/Lexer/TokenEmulator/ReverseEmulator.php`eI}@nikic-php-parser/PhpParser/Lexer/TokenEmulator/TokenEmulator.phpu`euD4h*nikic-php-parser/PhpParser/NameContext.php%`e%G-#nikic-php-parser/PhpParser/Node.php`eyݗ'nikic-php-parser/PhpParser/Node/Arg.php0`e0q H-nikic-php-parser/PhpParser/Node/Attribute.phpH`eHhqK2nikic-php-parser/PhpParser/Node/AttributeGroup.php`eB9/nikic-php-parser/PhpParser/Node/ComplexType.phpS`eS(*nikic-php-parser/PhpParser/Node/Const_.php`eZ(nikic-php-parser/PhpParser/Node/Expr.php`eh傤6nikic-php-parser/PhpParser/Node/Expr/ArrayDimFetch.phpM`eMIY2nikic-php-parser/PhpParser/Node/Expr/ArrayItem.phpx`ex| 2/nikic-php-parser/PhpParser/Node/Expr/Array_.php8`e8;p6nikic-php-parser/PhpParser/Node/Expr/ArrowFunction.php `e w3/nikic-php-parser/PhpParser/Node/Expr/Assign.php`e1nikic-php-parser/PhpParser/Node/Expr/AssignOp.php`e,<nikic-php-parser/PhpParser/Node/Expr/AssignOp/BitwiseAnd.php`eu;nikic-php-parser/PhpParser/Node/Expr/AssignOp/BitwiseOr.php`e;<nikic-php-parser/PhpParser/Node/Expr/AssignOp/BitwiseXor.php`elϚ:nikic-php-parser/PhpParser/Node/Expr/AssignOp/Coalesce.php`eq,8nikic-php-parser/PhpParser/Node/Expr/AssignOp/Concat.php`e5nikic-php-parser/PhpParser/Node/Expr/AssignOp/Div.php`eYP +7nikic-php-parser/PhpParser/Node/Expr/AssignOp/Minus.php`e隤5nikic-php-parser/PhpParser/Node/Expr/AssignOp/Mod.php`e]10Y5nikic-php-parser/PhpParser/Node/Expr/AssignOp/Mul.php`eπ/6nikic-php-parser/PhpParser/Node/Expr/AssignOp/Plus.php`e&|5nikic-php-parser/PhpParser/Node/Expr/AssignOp/Pow.php`eyV;nikic-php-parser/PhpParser/Node/Expr/AssignOp/ShiftLeft.php`e<nikic-php-parser/PhpParser/Node/Expr/AssignOp/ShiftRight.php`es*2nikic-php-parser/PhpParser/Node/Expr/AssignRef.phpH`eHE`ob1nikic-php-parser/PhpParser/Node/Expr/BinaryOp.phpo`eo Ѥ<nikic-php-parser/PhpParser/Node/Expr/BinaryOp/BitwiseAnd.phpP`eP6L6;nikic-php-parser/PhpParser/Node/Expr/BinaryOp/BitwiseOr.phpN`eN_|<nikic-php-parser/PhpParser/Node/Expr/BinaryOp/BitwiseXor.phpP`eP~Ƥ<nikic-php-parser/PhpParser/Node/Expr/BinaryOp/BooleanAnd.phpQ`eQ5v;nikic-php-parser/PhpParser/Node/Expr/BinaryOp/BooleanOr.phpO`eOeӸ:nikic-php-parser/PhpParser/Node/Expr/BinaryOp/Coalesce.phpM`eMY 8nikic-php-parser/PhpParser/Node/Expr/BinaryOp/Concat.phpH`eH @q5nikic-php-parser/PhpParser/Node/Expr/BinaryOp/Div.phpB`eBi7nikic-php-parser/PhpParser/Node/Expr/BinaryOp/Equal.phpG`eGݙʤ9nikic-php-parser/PhpParser/Node/Expr/BinaryOp/Greater.phpJ`eJ4ͤ@nikic-php-parser/PhpParser/Node/Expr/BinaryOp/GreaterOrEqual.phpY`eY^ز;nikic-php-parser/PhpParser/Node/Expr/BinaryOp/Identical.phpP`eP"<nikic-php-parser/PhpParser/Node/Expr/BinaryOp/LogicalAnd.phpR`eRi;nikic-php-parser/PhpParser/Node/Expr/BinaryOp/LogicalOr.phpO`eO@<nikic-php-parser/PhpParser/Node/Expr/BinaryOp/LogicalXor.phpR`eR4e7nikic-php-parser/PhpParser/Node/Expr/BinaryOp/Minus.phpF`eF$Lˤ5nikic-php-parser/PhpParser/Node/Expr/BinaryOp/Mod.phpB`eBʤ5nikic-php-parser/PhpParser/Node/Expr/BinaryOp/Mul.phpB`eB|:nikic-php-parser/PhpParser/Node/Expr/BinaryOp/NotEqual.phpM`eM>nikic-php-parser/PhpParser/Node/Expr/BinaryOp/NotIdentical.phpV`eVh< +6nikic-php-parser/PhpParser/Node/Expr/BinaryOp/Plus.phpD`eD' ,5nikic-php-parser/PhpParser/Node/Expr/BinaryOp/Pow.phpC`eC;nikic-php-parser/PhpParser/Node/Expr/BinaryOp/ShiftLeft.phpO`eOQ#<nikic-php-parser/PhpParser/Node/Expr/BinaryOp/ShiftRight.phpQ`eQǤ9nikic-php-parser/PhpParser/Node/Expr/BinaryOp/Smaller.phpJ`eJf@nikic-php-parser/PhpParser/Node/Expr/BinaryOp/SmallerOrEqual.phpY`eY⍤;nikic-php-parser/PhpParser/Node/Expr/BinaryOp/Spaceship.phpP`ePHƉ.3nikic-php-parser/PhpParser/Node/Expr/BitwiseNot.php`e~'3nikic-php-parser/PhpParser/Node/Expr/BooleanNot.php`eDC1nikic-php-parser/PhpParser/Node/Expr/CallLike.php&`e&KS0-nikic-php-parser/PhpParser/Node/Expr/Cast.phpA`eA:Vs4nikic-php-parser/PhpParser/Node/Expr/Cast/Array_.php`eI|3nikic-php-parser/PhpParser/Node/Expr/Cast/Bool_.php`e V]S4nikic-php-parser/PhpParser/Node/Expr/Cast/Double.php`e>,2nikic-php-parser/PhpParser/Node/Expr/Cast/Int_.php`ec5nikic-php-parser/PhpParser/Node/Expr/Cast/Object_.php`e5nikic-php-parser/PhpParser/Node/Expr/Cast/String_.php`e4nikic-php-parser/PhpParser/Node/Expr/Cast/Unset_.php`e1Ӥ8nikic-php-parser/PhpParser/Node/Expr/ClassConstFetch.php`eE/nikic-php-parser/PhpParser/Node/Expr/Clone_.php`eW0nikic-php-parser/PhpParser/Node/Expr/Closure.php +`e +U;3nikic-php-parser/PhpParser/Node/Expr/ClosureUse.php`eh3nikic-php-parser/PhpParser/Node/Expr/ConstFetch.php`e޶%/nikic-php-parser/PhpParser/Node/Expr/Empty_.php`e'.nikic-php-parser/PhpParser/Node/Expr/Error.php`ea\6nikic-php-parser/PhpParser/Node/Expr/ErrorSuppress.php`eg.nikic-php-parser/PhpParser/Node/Expr/Eval_.php`e356.nikic-php-parser/PhpParser/Node/Expr/Exit_.php`e1nikic-php-parser/PhpParser/Node/Expr/FuncCall.php3`e3%A1nikic-php-parser/PhpParser/Node/Expr/Include_.php`ei4nikic-php-parser/PhpParser/Node/Expr/Instanceof_.phpa`ea< /nikic-php-parser/PhpParser/Node/Expr/Isset_.php`eI.nikic-php-parser/PhpParser/Node/Expr/List_.php`e/nikic-php-parser/PhpParser/Node/Expr/Match_.php`eW 3nikic-php-parser/PhpParser/Node/Expr/MethodCall.phpO`eODWX-nikic-php-parser/PhpParser/Node/Expr/New_.php`eiĤ;nikic-php-parser/PhpParser/Node/Expr/NullsafeMethodCall.phpf`efɤ>nikic-php-parser/PhpParser/Node/Expr/NullsafePropertyFetch.php`e /N0nikic-php-parser/PhpParser/Node/Expr/PostDec.php`ew:0nikic-php-parser/PhpParser/Node/Expr/PostInc.php`eᦦ!/nikic-php-parser/PhpParser/Node/Expr/PreDec.php`etg/nikic-php-parser/PhpParser/Node/Expr/PreInc.php`eYä/nikic-php-parser/PhpParser/Node/Expr/Print_.php`enX6nikic-php-parser/PhpParser/Node/Expr/PropertyFetch.php`eɾ2nikic-php-parser/PhpParser/Node/Expr/ShellExec.php`ehy3nikic-php-parser/PhpParser/Node/Expr/StaticCall.phpe`ee<nikic-php-parser/PhpParser/Node/Expr/StaticPropertyFetch.php&`e&ܐ0nikic-php-parser/PhpParser/Node/Expr/Ternary.php`eQͤ/nikic-php-parser/PhpParser/Node/Expr/Throw_.php`e ?3nikic-php-parser/PhpParser/Node/Expr/UnaryMinus.php`elA2nikic-php-parser/PhpParser/Node/Expr/UnaryPlus.php`ee̤1nikic-php-parser/PhpParser/Node/Expr/Variable.php`emJr2nikic-php-parser/PhpParser/Node/Expr/YieldFrom.php`ew8/nikic-php-parser/PhpParser/Node/Expr/Yield_.php\`e\ 0nikic-php-parser/PhpParser/Node/FunctionLike.php`e4ͤ.nikic-php-parser/PhpParser/Node/Identifier.php`eJa4nikic-php-parser/PhpParser/Node/IntersectionType.php`eo,nikic-php-parser/PhpParser/Node/MatchArm.php`e+m6(nikic-php-parser/PhpParser/Node/Name.php `e 7nikic-php-parser/PhpParser/Node/Name/FullyQualified.php`e 1nikic-php-parser/PhpParser/Node/Name/Relative.php`eǛEf0nikic-php-parser/PhpParser/Node/NullableType.php`e6C)nikic-php-parser/PhpParser/Node/Param.phpb`ebMߤ*nikic-php-parser/PhpParser/Node/Scalar.phpk`ek,ߤ2nikic-php-parser/PhpParser/Node/Scalar/DNumber.php`ex3H:3nikic-php-parser/PhpParser/Node/Scalar/Encapsed.php`eRU=nikic-php-parser/PhpParser/Node/Scalar/EncapsedStringPart.php`e%2nikic-php-parser/PhpParser/Node/Scalar/LNumber.php `e z5nikic-php-parser/PhpParser/Node/Scalar/MagicConst.phpc`ec,xG<nikic-php-parser/PhpParser/Node/Scalar/MagicConst/Class_.phpT`eT㨘X9nikic-php-parser/PhpParser/Node/Scalar/MagicConst/Dir.phpM`eMal:nikic-php-parser/PhpParser/Node/Scalar/MagicConst/File.phpP`eP#?nikic-php-parser/PhpParser/Node/Scalar/MagicConst/Function_.php]`e]HnY:nikic-php-parser/PhpParser/Node/Scalar/MagicConst/Line.phpP`ePM4<nikic-php-parser/PhpParser/Node/Scalar/MagicConst/Method.phpV`eVΤ@nikic-php-parser/PhpParser/Node/Scalar/MagicConst/Namespace_.php``e`><nikic-php-parser/PhpParser/Node/Scalar/MagicConst/Trait_.phpT`eTd2nikic-php-parser/PhpParser/Node/Scalar/String_.phpq`eqT$Q(nikic-php-parser/PhpParser/Node/Stmt.php`ev2//nikic-php-parser/PhpParser/Node/Stmt/Break_.php`e֤.nikic-php-parser/PhpParser/Node/Stmt/Case_.phpl`elu/nikic-php-parser/PhpParser/Node/Stmt/Catch_.php|`e|*V>3nikic-php-parser/PhpParser/Node/Stmt/ClassConst.php| `e| K:d2nikic-php-parser/PhpParser/Node/Stmt/ClassLike.php `e 04nikic-php-parser/PhpParser/Node/Stmt/ClassMethod.php`eX/nikic-php-parser/PhpParser/Node/Stmt/Class_.phpu`eu_ļ/nikic-php-parser/PhpParser/Node/Stmt/Const_.php`e2nikic-php-parser/PhpParser/Node/Stmt/Continue_.php`e7nikic-php-parser/PhpParser/Node/Stmt/DeclareDeclare.php`eƀ1nikic-php-parser/PhpParser/Node/Stmt/Declare_.php`e.. +,nikic-php-parser/PhpParser/Node/Stmt/Do_.phpB`eB +@.nikic-php-parser/PhpParser/Node/Stmt/Echo_.php`e͘Ƥ0nikic-php-parser/PhpParser/Node/Stmt/ElseIf_.phpI`eIEä.nikic-php-parser/PhpParser/Node/Stmt/Else_.php`e|ä1nikic-php-parser/PhpParser/Node/Stmt/EnumCase.php`ejD.nikic-php-parser/PhpParser/Node/Stmt/Enum_.php=`e=dA3nikic-php-parser/PhpParser/Node/Stmt/Expression.php`eRK1nikic-php-parser/PhpParser/Node/Stmt/Finally_.php`e1A-nikic-php-parser/PhpParser/Node/Stmt/For_.php>`e>NQ1nikic-php-parser/PhpParser/Node/Stmt/Foreach_.phpo`eo92nikic-php-parser/PhpParser/Node/Stmt/Function_.php, +`e, +nL0nikic-php-parser/PhpParser/Node/Stmt/Global_.php`e.nikic-php-parser/PhpParser/Node/Stmt/Goto_.php`eVyPn1nikic-php-parser/PhpParser/Node/Stmt/GroupUse.php +`e +ߎ0|5nikic-php-parser/PhpParser/Node/Stmt/HaltCompiler.php`e];,nikic-php-parser/PhpParser/Node/Stmt/If_.php:`e:u٤3nikic-php-parser/PhpParser/Node/Stmt/InlineHTML.php`e]3nikic-php-parser/PhpParser/Node/Stmt/Interface_.php`eL/Ǥ.nikic-php-parser/PhpParser/Node/Stmt/Label.php`eӤ3nikic-php-parser/PhpParser/Node/Stmt/Namespace_.php`e㹀,nikic-php-parser/PhpParser/Node/Stmt/Nop.php@`e@G1nikic-php-parser/PhpParser/Node/Stmt/Property.phpO +`eO +=9nikic-php-parser/PhpParser/Node/Stmt/PropertyProperty.php`e҉0nikic-php-parser/PhpParser/Node/Stmt/Return_.php`eͿ)e2nikic-php-parser/PhpParser/Node/Stmt/StaticVar.php`e0nikic-php-parser/PhpParser/Node/Stmt/Static_.php`e0nikic-php-parser/PhpParser/Node/Stmt/Switch_.php5`e5FFY/nikic-php-parser/PhpParser/Node/Stmt/Throw_.php`e1nikic-php-parser/PhpParser/Node/Stmt/TraitUse.php`eg,;nikic-php-parser/PhpParser/Node/Stmt/TraitUseAdaptation.php`ea8Anikic-php-parser/PhpParser/Node/Stmt/TraitUseAdaptation/Alias.phpA`eAdFnikic-php-parser/PhpParser/Node/Stmt/TraitUseAdaptation/Precedence.phpZ`eZP֤/nikic-php-parser/PhpParser/Node/Stmt/Trait_.php`e$v1nikic-php-parser/PhpParser/Node/Stmt/TryCatch.php$`e$W/nikic-php-parser/PhpParser/Node/Stmt/Unset_.php`e=oB/nikic-php-parser/PhpParser/Node/Stmt/UseUse.phpd`edb-nikic-php-parser/PhpParser/Node/Stmt/Use_.phpl`el9=|/nikic-php-parser/PhpParser/Node/Stmt/While_.phpE`eEա-nikic-php-parser/PhpParser/Node/UnionType.php`eԛ5nikic-php-parser/PhpParser/Node/VarLikeIdentifier.php`e&7nikic-php-parser/PhpParser/Node/VariadicPlaceholder.php`eP+nikic-php-parser/PhpParser/NodeAbstract.phpZ`eZ׻@)nikic-php-parser/PhpParser/NodeDumper.phpd`edY l)nikic-php-parser/PhpParser/NodeFinder.php `e ,nikic-php-parser/PhpParser/NodeTraverser.php]'`e]'TG:Ƥ5nikic-php-parser/PhpParser/NodeTraverserInterface.php|`e|Ś *nikic-php-parser/PhpParser/NodeVisitor.php`e39nikic-php-parser/PhpParser/NodeVisitor/CloningVisitor.php`e"WJ9nikic-php-parser/PhpParser/NodeVisitor/FindingVisitor.php`eB>nikic-php-parser/PhpParser/NodeVisitor/FirstFindingVisitor.php`em4Ť7nikic-php-parser/PhpParser/NodeVisitor/NameResolver.phpq&`eq&ǠG@nikic-php-parser/PhpParser/NodeVisitor/NodeConnectingVisitor.php`eu +äBnikic-php-parser/PhpParser/NodeVisitor/ParentConnectingVisitor.phpu`euME2nikic-php-parser/PhpParser/NodeVisitorAbstract.php`e%nikic-php-parser/PhpParser/Parser.php}`e}{.nikic-php-parser/PhpParser/Parser/Multiple.php`esF)7*nikic-php-parser/PhpParser/Parser/Php5.php+`e+1*nikic-php-parser/PhpParser/Parser/Php7.phpT`eT!V`,nikic-php-parser/PhpParser/Parser/Tokens.php&`e&<-nikic-php-parser/PhpParser/ParserAbstract.phpT`eT'[,nikic-php-parser/PhpParser/ParserFactory.php`e +~&5nikic-php-parser/PhpParser/PrettyPrinter/Standard.php+`e+4nikic-php-parser/PhpParser/PrettyPrinterAbstract.phpQ`eQ%jobject-enumerator/LICENSE`efobject-reflector/LICENSE`eR6phar-io-manifest/LICENSE``e`p+phar-io-manifest/ManifestDocumentMapper.php`e:#phar-io-manifest/ManifestLoader.php`e.-a'phar-io-manifest/ManifestSerializer.php`erp:phar-io-manifest/exceptions/ElementCollectionException.php`e I)phar-io-manifest/exceptions/Exception.php`e?phar-io-manifest/exceptions/InvalidApplicationNameException.php`e:@>5phar-io-manifest/exceptions/InvalidEmailException.php`e<3phar-io-manifest/exceptions/InvalidUrlException.php`e 9phar-io-manifest/exceptions/ManifestDocumentException.php`e!P4@phar-io-manifest/exceptions/ManifestDocumentLoadingException.phpH`eHǃ?phar-io-manifest/exceptions/ManifestDocumentMapperException.php`e:9z8phar-io-manifest/exceptions/ManifestElementException.php`eA47phar-io-manifest/exceptions/ManifestLoaderException.php`eD>'phar-io-manifest/values/Application.php`eI$ۤ+phar-io-manifest/values/ApplicationName.php;`e;D"phar-io-manifest/values/Author.php`eF,phar-io-manifest/values/AuthorCollection.php`eo4phar-io-manifest/values/AuthorCollectionIterator.php3`e3џ,phar-io-manifest/values/BundledComponent.php@`e@DP`6phar-io-manifest/values/BundledComponentCollection.php `e ¾W6>phar-io-manifest/values/BundledComponentCollectionIterator.php`eVh0phar-io-manifest/values/CopyrightInformation.phpP`eP ai!phar-io-manifest/values/Email.phpN`eNZ&%phar-io-manifest/values/Extension.php`eq}#phar-io-manifest/values/Library.php`eO#phar-io-manifest/values/License.php`e&!o$phar-io-manifest/values/Manifest.php +`e +=La3phar-io-manifest/values/PhpExtensionRequirement.php`e11phar-io-manifest/values/PhpVersionRequirement.php`em?'phar-io-manifest/values/Requirement.php`ed1phar-io-manifest/values/RequirementCollection.php`eP9phar-io-manifest/values/RequirementCollectionIterator.phpj`ejܭ: phar-io-manifest/values/Type.php`e=%phar-io-manifest/values/Url.php`e͚&phar-io-manifest/xml/AuthorElement.phpr`er<0phar-io-manifest/xml/AuthorElementCollection.php,`e,-'phar-io-manifest/xml/BundlesElement.phpS`eSWN>)phar-io-manifest/xml/ComponentElement.phpy`eyݤ3phar-io-manifest/xml/ComponentElementCollection.php5`e5(\(phar-io-manifest/xml/ContainsElement.phpn`enf)phar-io-manifest/xml/CopyrightElement.php`e7*phar-io-manifest/xml/ElementCollection.php`e@ #phar-io-manifest/xml/ExtElement.php `e y>-phar-io-manifest/xml/ExtElementCollection.php#`e#E)phar-io-manifest/xml/ExtensionElement.php}`e}0'phar-io-manifest/xml/LicenseElement.phpo`eo%:')phar-io-manifest/xml/ManifestDocument.php + `e + 4(phar-io-manifest/xml/ManifestElement.php4`e4#phar-io-manifest/xml/PhpElement.php`eB:5(phar-io-manifest/xml/RequiresElement.php$`e$>!phar-io-version/BuildMetaData.php`ephar-io-version/LICENSE&`e&Ҫ $phar-io-version/PreReleaseSuffix.php`e:phar-io-version/Version.php`eu#+phar-io-version/VersionConstraintParser.phpT `eT Ф*phar-io-version/VersionConstraintValue.phpH +`eH +F{~4!phar-io-version/VersionNumber.php`eO19phar-io-version/constraints/AbstractVersionConstraint.php`exB9phar-io-version/constraints/AndVersionConstraintGroup.php`eY4phar-io-version/constraints/AnyVersionConstraint.phpR`eR #6phar-io-version/constraints/ExactVersionConstraint.php`e!Ephar-io-version/constraints/GreaterThanOrEqualToVersionConstraint.php`eVU8phar-io-version/constraints/OrVersionConstraintGroup.php`eM%Fphar-io-version/constraints/SpecificMajorAndMinorVersionConstraint.php`eɍ>phar-io-version/constraints/SpecificMajorVersionConstraint.php`e`9q:1phar-io-version/constraints/VersionConstraint.php`eeDq(phar-io-version/exceptions/Exception.php`e$eb?phar-io-version/exceptions/InvalidPreReleaseSuffixException.php`eҵ6phar-io-version/exceptions/InvalidVersionException.php`e4/S7phar-io-version/exceptions/NoBuildMetaDataException.php`e]:phar-io-version/exceptions/NoPreReleaseSuffixException.php`eT4Dphar-io-version/exceptions/UnsupportedVersionConstraintException.php`e9"php-code-coverage/CodeCoverage.phpA`eAc4php-code-coverage/Data/ProcessedCodeCoverageData.php\'`e\'.php-code-coverage/Data/RawCodeCoverageData.phpz!`ez!-#php-code-coverage/Driver/Driver.php `e cհ'php-code-coverage/Driver/PcovDriver.php`e=%php-code-coverage/Driver/Selector.php1`e15)php-code-coverage/Driver/XdebugDriver.php `e …3jJphp-code-coverage/Exception/BranchAndPathCoverageNotSupportedException.php`e77Fphp-code-coverage/Exception/DeadCodeDetectionNotSupportedException.php`eCphp-code-coverage/Exception/DirectoryCouldNotBeCreatedException.php`e)php-code-coverage/Exception/Exception.php}`e}z>php-code-coverage/Exception/FileCouldNotBeWrittenException.php`er8php-code-coverage/Exception/InvalidArgumentException.php`eK.nFphp-code-coverage/Exception/NoCodeCoverageDriverAvailableException.php/`e/6R]php-code-coverage/Exception/NoCodeCoverageDriverWithPathCoverageSupportAvailableException.phpa`ea"A/php-code-coverage/Exception/ParserException.php`e,/Dphp-code-coverage/Exception/PathExistsButIsNotDirectoryException.php`e.29php-code-coverage/Exception/PcovNotAvailableException.phpa`eaj3php-code-coverage/Exception/ReflectionException.php`ek)?php-code-coverage/Exception/ReportAlreadyFinalizedException.php:`e:d%6Iphp-code-coverage/Exception/StaticAnalysisCacheNotConfiguredException.php`e}6php-code-coverage/Exception/TestIdMissingException.php`e +Cphp-code-coverage/Exception/UnintentionallyCoveredCodeException.php`e}=php-code-coverage/Exception/WriteOperationFailedException.php`e(e;php-code-coverage/Exception/XdebugNotAvailableException.phpe`eeNG9php-code-coverage/Exception/XdebugNotEnabledException.phpx`ex@_;,php-code-coverage/Exception/XmlException.php`eWܤphp-code-coverage/Filter.phpc `ec Z,php-code-coverage/LICENSE`e-~y֤'php-code-coverage/Node/AbstractNode.php5`e5Ğ"php-code-coverage/Node/Builder.phpO`eOi$php-code-coverage/Node/CrapIndex.php`e8\$php-code-coverage/Node/Directory.phpF$`eF$äphp-code-coverage/Node/File.php[W`e[WL¤#php-code-coverage/Node/Iterator.phpx`ex8A)#php-code-coverage/Report/Clover.php6(`e6(&php-code-coverage/Report/Cobertura.php?1`e?1W0#php-code-coverage/Report/Crap4j.php)`e)wҤ(php-code-coverage/Report/Html/Colors.php`eX`/php-code-coverage/Report/Html/CustomCssFile.php6`e6"2bS(php-code-coverage/Report/Html/Facade.php`e&'*php-code-coverage/Report/Html/Renderer.php `e G4php-code-coverage/Report/Html/Renderer/Dashboard.php!`e!/Ѥ4php-code-coverage/Report/Html/Renderer/Directory.php5`e5V/g/php-code-coverage/Report/Html/Renderer/File.php܊`e܊kBphp-code-coverage/Report/Html/Renderer/Template/branches.html.dist`eh2+Fphp-code-coverage/Report/Html/Renderer/Template/coverage_bar.html.dist'`e'O}Mphp-code-coverage/Report/Html/Renderer/Template/coverage_bar_branch.html.dist'`e'O}Ephp-code-coverage/Report/Html/Renderer/Template/css/bootstrap.min.cssy`eyĤ>php-code-coverage/Report/Html/Renderer/Template/css/custom.css`eAphp-code-coverage/Report/Html/Renderer/Template/css/nv.d3.min.cssX%`eX%0,@php-code-coverage/Report/Html/Renderer/Template/css/octicons.cssX`eX'#=php-code-coverage/Report/Html/Renderer/Template/css/style.cssH +`eH +Cphp-code-coverage/Report/Html/Renderer/Template/dashboard.html.dist`eDJphp-code-coverage/Report/Html/Renderer/Template/dashboard_branch.html.dist`eDCphp-code-coverage/Report/Html/Renderer/Template/directory.html.dist`eՆJphp-code-coverage/Report/Html/Renderer/Template/directory_branch.html.dist`en2]Hphp-code-coverage/Report/Html/Renderer/Template/directory_item.html.distA`eAdsOphp-code-coverage/Report/Html/Renderer/Template/directory_item_branch.html.dist;`e;mۤ>php-code-coverage/Report/Html/Renderer/Template/file.html.distP `eP j*Ephp-code-coverage/Report/Html/Renderer/Template/file_branch.html.dist `e ㉞Cphp-code-coverage/Report/Html/Renderer/Template/file_item.html.distr`er/yJphp-code-coverage/Report/Html/Renderer/Template/file_item_branch.html.distl`el-Cphp-code-coverage/Report/Html/Renderer/Template/icons/file-code.svg0`e0QUUHphp-code-coverage/Report/Html/Renderer/Template/icons/file-directory.svg`eZCphp-code-coverage/Report/Html/Renderer/Template/js/bootstrap.min.jsc`ec"#<php-code-coverage/Report/Html/Renderer/Template/js/d3.min.jsP`ePhb:php-code-coverage/Report/Html/Renderer/Template/js/file.js`eb䆤@php-code-coverage/Report/Html/Renderer/Template/js/jquery.min.js@^`e@^ ?php-code-coverage/Report/Html/Renderer/Template/js/nv.d3.min.jsR`eRphp-code-coverage/Report/Html/Renderer/Template/line.html.dist`e{?php-code-coverage/Report/Html/Renderer/Template/lines.html.diste`eedf Ephp-code-coverage/Report/Html/Renderer/Template/method_item.html.dist`ejפLphp-code-coverage/Report/Html/Renderer/Template/method_item_branch.html.dist`eyĎk?php-code-coverage/Report/Html/Renderer/Template/paths.html.dist`e*'ݤ php-code-coverage/Report/PHP.php`e<[!php-code-coverage/Report/Text.php&`e&ਤ'php-code-coverage/Report/Thresholds.phpS`eS 1php-code-coverage/Report/Xml/BuildInformation.php`ezݤ)php-code-coverage/Report/Xml/Coverage.php`e׍d*php-code-coverage/Report/Xml/Directory.php`eAf'php-code-coverage/Report/Xml/Facade.php!`e!t7 &%php-code-coverage/Report/Xml/File.php`e4E'php-code-coverage/Report/Xml/Method.phpD`eDC#T%php-code-coverage/Report/Xml/Node.php`e(php-code-coverage/Report/Xml/Project.phpf`efPe'php-code-coverage/Report/Xml/Report.php `e HC'php-code-coverage/Report/Xml/Source.phps`esCaꀤ&php-code-coverage/Report/Xml/Tests.php`elXΤ'php-code-coverage/Report/Xml/Totals.php`eAx%php-code-coverage/Report/Xml/Unit.php`ej0php-code-coverage/StaticAnalysis/CacheWarmer.php``e`_%פ8php-code-coverage/StaticAnalysis/CachingFileAnalyser.php`et;php-code-coverage/StaticAnalysis/CodeUnitFindingVisitor.php%`e%&`Bphp-code-coverage/StaticAnalysis/ExecutableLinesFindingVisitor.php)`e)1php-code-coverage/StaticAnalysis/FileAnalyser.php`e5?php-code-coverage/StaticAnalysis/IgnoredLinesFindingVisitor.php `e \GԤ8php-code-coverage/StaticAnalysis/ParsingFileAnalyser.php`en*kS$php-code-coverage/TestSize/Known.phpX`eXzK$php-code-coverage/TestSize/Large.php`e'r %php-code-coverage/TestSize/Medium.php`e{`$php-code-coverage/TestSize/Small.php`eŖ_'php-code-coverage/TestSize/TestSize.php`e8&php-code-coverage/TestSize/Unknown.phpi`ei%,(php-code-coverage/TestStatus/Failure.phph`ehK8B&php-code-coverage/TestStatus/Known.php`e(php-code-coverage/TestStatus/Success.phph`ehcp+php-code-coverage/TestStatus/TestStatus.php`e%!(php-code-coverage/TestStatus/Unknown.phpm`em[%php-code-coverage/Util/Filesystem.php`e%php-code-coverage/Util/Percentage.php^`e^5?:php-code-coverage/Version.php`eq֬%php-file-iterator/ExcludeIterator.php.`e.&php-file-iterator/Facade.php`elphp-file-iterator/Factory.php +`e +>AqOphp-file-iterator/Iterator.php `e Jphp-file-iterator/LICENSE`e-~y֤php-invoker/Invoker.php`ec$php-invoker/exceptions/Exception.phpr`ervvduDphp-invoker/exceptions/ProcessControlExtensionNotLoadedException.php`e +php-invoker/exceptions/TimeoutException.php`e.php-text-template/LICENSE`e-~y֤php-text-template/Template.phpV `eV *`4*php-text-template/exceptions/Exception.phpy`eyn9php-text-template/exceptions/InvalidArgumentException.php`eaM1php-text-template/exceptions/RuntimeException.php`eYm'php-timer/Duration.php `e 2php-timer/LICENSE`e$php-timer/ResourceUsageFormatter.php`e Hphp-timer/Timer.php`eQ>El"php-timer/exceptions/Exception.phpn`eniuۤ/php-timer/exceptions/NoActiveTimerException.php`el٤Ephp-timer/exceptions/TimeSinceStartOfRequestNotAvailableException.php`e$b phpunit.xsdGF`eGF?1phpunit/Event/Dispatcher/CollectingDispatcher.php`e!0phpunit/Event/Dispatcher/DeferringDispatcher.php:`e:&u-phpunit/Event/Dispatcher/DirectDispatcher.php `e &W'phpunit/Event/Dispatcher/Dispatcher.php`e8Ť3phpunit/Event/Dispatcher/SubscribableDispatcher.php`ePl{K,phpunit/Event/Emitter/DispatchingEmitter.phpn`enפ!phpunit/Event/Emitter/Emitter.php|%`e|%kN-phpunit/Event/Events/Application/Finished.php`ep,7phpunit/Event/Events/Application/FinishedSubscriber.php7`e7,~դ,phpunit/Event/Events/Application/Started.php`eW6phpunit/Event/Events/Application/StartedSubscriber.php5`e5fphpunit/Event/Events/Event.php `e w(phpunit/Event/Events/EventCollection.phpO`eOak0phpunit/Event/Events/EventCollectionIterator.php`e`N7phpunit/Event/Events/Test/Assertion/AssertionFailed.php`e1ݤAphpunit/Event/Events/Test/Assertion/AssertionFailedSubscriber.php7`e7haב:phpunit/Event/Events/Test/Assertion/AssertionSucceeded.php`eUUDphpunit/Event/Events/Test/Assertion/AssertionSucceededSubscriber.php=`e=m2phpunit/Event/Events/Test/ComparatorRegistered.php `e <phpunit/Event/Events/Test/ComparatorRegisteredSubscriber.phpA`eA8VBphpunit/Event/Events/Test/HookMethod/AfterLastTestMethodCalled.phpm`em֤Lphpunit/Event/Events/Test/HookMethod/AfterLastTestMethodCalledSubscriber.phpK`eKĶLDphpunit/Event/Events/Test/HookMethod/AfterLastTestMethodFinished.phpd`ed)Nphpunit/Event/Events/Test/HookMethod/AfterLastTestMethodFinishedSubscriber.phpO`eO>phpunit/Event/Events/Test/HookMethod/AfterTestMethodCalled.phpd`edHphpunit/Event/Events/Test/HookMethod/AfterTestMethodCalledSubscriber.phpC`eCߊ@phpunit/Event/Events/Test/HookMethod/AfterTestMethodFinished.php[`e[o΀Jphpunit/Event/Events/Test/HookMethod/AfterTestMethodFinishedSubscriber.phpG`eGV)Dphpunit/Event/Events/Test/HookMethod/BeforeFirstTestMethodCalled.phpq`eq,UNphpunit/Event/Events/Test/HookMethod/BeforeFirstTestMethodCalledSubscriber.phpO`eOҘI Ephpunit/Event/Events/Test/HookMethod/BeforeFirstTestMethodErrored.php`eOphpunit/Event/Events/Test/HookMethod/BeforeFirstTestMethodErroredSubscriber.phpQ`eQFphpunit/Event/Events/Test/HookMethod/BeforeFirstTestMethodFinished.phph`ehZPphpunit/Event/Events/Test/HookMethod/BeforeFirstTestMethodFinishedSubscriber.phpS`eS/h?phpunit/Event/Events/Test/HookMethod/BeforeTestMethodCalled.phpf`ef![Iphpunit/Event/Events/Test/HookMethod/BeforeTestMethodCalledSubscriber.phpE`eEphpunit/Event/Events/Test/HookMethod/PostConditionFinished.php]`e]Hphpunit/Event/Events/Test/HookMethod/PostConditionFinishedSubscriber.phpC`eCkxŤ;phpunit/Event/Events/Test/HookMethod/PreConditionCalled.phpd`edtդEphpunit/Event/Events/Test/HookMethod/PreConditionCalledSubscriber.php=`e=T#=phpunit/Event/Events/Test/HookMethod/PreConditionFinished.php[`e[ƄGphpunit/Event/Events/Test/HookMethod/PreConditionFinishedSubscriber.phpA`eAm3phpunit/Event/Events/Test/Issue/ConsideredRisky.php`e=phpunit/Event/Events/Test/Issue/ConsideredRiskySubscriber.php7`e7¤8phpunit/Event/Events/Test/Issue/DeprecationTriggered.php `e Bphpunit/Event/Events/Test/Issue/DeprecationTriggeredSubscriber.phpA`eA8d2phpunit/Event/Events/Test/Issue/ErrorTriggered.php~ `e~ <phpunit/Event/Events/Test/Issue/ErrorTriggeredSubscriber.php5`e53phpunit/Event/Events/Test/Issue/NoticeTriggered.php +`e +4$=phpunit/Event/Events/Test/Issue/NoticeTriggeredSubscriber.php7`e7xp;phpunit/Event/Events/Test/Issue/PhpDeprecationTriggered.php `e J.#Ephpunit/Event/Events/Test/Issue/PhpDeprecationTriggeredSubscriber.phpG`eGdS6phpunit/Event/Events/Test/Issue/PhpNoticeTriggered.php `e AS@phpunit/Event/Events/Test/Issue/PhpNoticeTriggeredSubscriber.php=`e=L07phpunit/Event/Events/Test/Issue/PhpWarningTriggered.php `e vAphpunit/Event/Events/Test/Issue/PhpWarningTriggeredSubscriber.php?`e?Xޤ?phpunit/Event/Events/Test/Issue/PhpunitDeprecationTriggered.php`e$/Iphpunit/Event/Events/Test/Issue/PhpunitDeprecationTriggeredSubscriber.phpO`eOjt9phpunit/Event/Events/Test/Issue/PhpunitErrorTriggered.php`e +Cphpunit/Event/Events/Test/Issue/PhpunitErrorTriggeredSubscriber.phpC`eC;phpunit/Event/Events/Test/Issue/PhpunitWarningTriggered.php`eESޤEphpunit/Event/Events/Test/Issue/PhpunitWarningTriggeredSubscriber.phpG`eGM4phpunit/Event/Events/Test/Issue/WarningTriggered.php +`e +ݤ>phpunit/Event/Events/Test/Issue/WarningTriggeredSubscriber.php9`e9#A@@phpunit/Event/Events/Test/Lifecycle/DataProviderMethodCalled.php2`e2%|Jphpunit/Event/Events/Test/Lifecycle/DataProviderMethodCalledSubscriber.phpI`eIQNBphpunit/Event/Events/Test/Lifecycle/DataProviderMethodFinished.php,`e,Lphpunit/Event/Events/Test/Lifecycle/DataProviderMethodFinishedSubscriber.phpM`eMN0phpunit/Event/Events/Test/Lifecycle/Finished.php{`e{ դ:phpunit/Event/Events/Test/Lifecycle/FinishedSubscriber.php)`e)Qb9phpunit/Event/Events/Test/Lifecycle/PreparationFailed.phps`esx\Cphpunit/Event/Events/Test/Lifecycle/PreparationFailedSubscriber.php;`e;W:phpunit/Event/Events/Test/Lifecycle/PreparationStarted.phpu`euX[`Dphpunit/Event/Events/Test/Lifecycle/PreparationStartedSubscriber.php=`e=w 0phpunit/Event/Events/Test/Lifecycle/Prepared.php``e`ISϤ:phpunit/Event/Events/Test/Lifecycle/PreparedSubscriber.php)`e)Ѥy-phpunit/Event/Events/Test/Outcome/Errored.php`es7phpunit/Event/Events/Test/Outcome/ErroredSubscriber.php'`e' >,phpunit/Event/Events/Test/Outcome/Failed.php`e6phpunit/Event/Events/Test/Outcome/FailedSubscriber.php%`e%ǩ6phpunit/Event/Events/Test/Outcome/MarkedIncomplete.php`e6;@phpunit/Event/Events/Test/Outcome/MarkedIncompleteSubscriber.php9`e96Ф,phpunit/Event/Events/Test/Outcome/Passed.php\`e\6phpunit/Event/Events/Test/Outcome/PassedSubscriber.php%`e%pE-phpunit/Event/Events/Test/Outcome/Skipped.php`eoKȏ7phpunit/Event/Events/Test/Outcome/SkippedSubscriber.php'`e'%I5phpunit/Event/Events/Test/PrintedUnexpectedOutput.php`eOg?phpunit/Event/Events/Test/PrintedUnexpectedOutputSubscriber.phpG`eG`ɐ:phpunit/Event/Events/Test/TestDouble/MockObjectCreated.php`e{͵Dphpunit/Event/Events/Test/TestDouble/MockObjectCreatedSubscriber.php;`e;h{6Jphpunit/Event/Events/Test/TestDouble/MockObjectForAbstractClassCreated.php`eҽTphpunit/Event/Events/Test/TestDouble/MockObjectForAbstractClassCreatedSubscriber.php[`e[ +vUphpunit/Event/Events/Test/TestDouble/MockObjectForIntersectionOfInterfacesCreated.phpX`eXr_phpunit/Event/Events/Test/TestDouble/MockObjectForIntersectionOfInterfacesCreatedSubscriber.phpq`eq/uBphpunit/Event/Events/Test/TestDouble/MockObjectForTraitCreated.php`e> Lphpunit/Event/Events/Test/TestDouble/MockObjectForTraitCreatedSubscriber.phpK`eK#TBphpunit/Event/Events/Test/TestDouble/MockObjectFromWsdlCreated.php +`e +ȌkLphpunit/Event/Events/Test/TestDouble/MockObjectFromWsdlCreatedSubscriber.phpK`eKIAphpunit/Event/Events/Test/TestDouble/PartialMockObjectCreated.php=`e=sUKphpunit/Event/Events/Test/TestDouble/PartialMockObjectCreatedSubscriber.phpI`eI2!9phpunit/Event/Events/Test/TestDouble/TestProxyCreated.php`eͤCphpunit/Event/Events/Test/TestDouble/TestProxyCreatedSubscriber.php9`e9K8phpunit/Event/Events/Test/TestDouble/TestStubCreated.php`esʤBphpunit/Event/Events/Test/TestDouble/TestStubCreatedSubscriber.php7`e7d#Sphpunit/Event/Events/Test/TestDouble/TestStubForIntersectionOfInterfacesCreated.phpT`eT̪ ]phpunit/Event/Events/Test/TestDouble/TestStubForIntersectionOfInterfacesCreatedSubscriber.phpm`emKѕ=5phpunit/Event/Events/TestRunner/BootstrapFinished.phpi`ei?phpunit/Event/Events/TestRunner/BootstrapFinishedSubscriber.phpG`eGaݤ.phpunit/Event/Events/TestRunner/Configured.php}`e}u8phpunit/Event/Events/TestRunner/ConfiguredSubscriber.php9`e9դ8phpunit/Event/Events/TestRunner/DeprecationTriggered.phpt`etӤzBphpunit/Event/Events/TestRunner/DeprecationTriggeredSubscriber.phpM`eMd5phpunit/Event/Events/TestRunner/EventFacadeSealed.php`e{J?phpunit/Event/Events/TestRunner/EventFacadeSealedSubscriber.phpG`eG{ 4phpunit/Event/Events/TestRunner/ExecutionAborted.php`eȃx>phpunit/Event/Events/TestRunner/ExecutionAbortedSubscriber.phpE`eE W5phpunit/Event/Events/TestRunner/ExecutionFinished.php`eБW?phpunit/Event/Events/TestRunner/ExecutionFinishedSubscriber.phpG`eGH4phpunit/Event/Events/TestRunner/ExecutionStarted.php`ecic>phpunit/Event/Events/TestRunner/ExecutionStartedSubscriber.phpE`eES9phpunit/Event/Events/TestRunner/ExtensionBootstrapped.phpy`ey%קCphpunit/Event/Events/TestRunner/ExtensionBootstrappedSubscriber.phpO`eOpɞ2;phpunit/Event/Events/TestRunner/ExtensionLoadedFromPhar.php`e䟉Ephpunit/Event/Events/TestRunner/ExtensionLoadedFromPharSubscriber.phpS`eSR^1,phpunit/Event/Events/TestRunner/Finished.php{`e{zǡ6phpunit/Event/Events/TestRunner/FinishedSubscriber.php5`e5̤=phpunit/Event/Events/TestRunner/GarbageCollectionDisabled.php`e\$Gphpunit/Event/Events/TestRunner/GarbageCollectionDisabledSubscriber.phpW`eWJj<phpunit/Event/Events/TestRunner/GarbageCollectionEnabled.php`eFphpunit/Event/Events/TestRunner/GarbageCollectionEnabledSubscriber.phpU`eU77>phpunit/Event/Events/TestRunner/GarbageCollectionTriggered.php`e2ɤHphpunit/Event/Events/TestRunner/GarbageCollectionTriggeredSubscriber.phpY`eY &ݤ+phpunit/Event/Events/TestRunner/Started.phpy`ey5phpunit/Event/Events/TestRunner/StartedSubscriber.php3`e3 4phpunit/Event/Events/TestRunner/WarningTriggered.phpl`el.Cv>phpunit/Event/Events/TestRunner/WarningTriggeredSubscriber.phpE`eE8K+phpunit/Event/Events/TestSuite/Filtered.php`eo5phpunit/Event/Events/TestSuite/FilteredSubscriber.php3`e3|+phpunit/Event/Events/TestSuite/Finished.php`eĤt5phpunit/Event/Events/TestSuite/FinishedSubscriber.php3`e3զ)phpunit/Event/Events/TestSuite/Loaded.php`eX(\*3phpunit/Event/Events/TestSuite/LoadedSubscriber.php/`e/^7*phpunit/Event/Events/TestSuite/Skipped.php`ep%4phpunit/Event/Events/TestSuite/SkippedSubscriber.php1`e1D!)phpunit/Event/Events/TestSuite/Sorted.php'`e'j 3phpunit/Event/Events/TestSuite/SortedSubscriber.php/`e/ Ȥ*phpunit/Event/Events/TestSuite/Started.php`eз1٤4phpunit/Event/Events/TestSuite/StartedSubscriber.php1`e1i5k9phpunit/Event/Exception/EventAlreadyAssignedException.php `e 0ɤ8phpunit/Event/Exception/EventFacadeIsSealedException.php +`e +J ؤ%phpunit/Event/Exception/Exception.phpL`eLgx4phpunit/Event/Exception/InvalidArgumentException.php`e䀤1phpunit/Event/Exception/InvalidEventException.php`eE>6phpunit/Event/Exception/InvalidSubscriberException.php`eSg$phpunit/Event/Exception/MapError.php`eRGphpunit/Event/Exception/MoreThanOneDataSetFromDataProviderException.php0`e0R=8phpunit/Event/Exception/NoComparisonFailureException.php`e{k>phpunit/Event/Exception/NoDataSetFromDataProviderException.php'`e'@~8phpunit/Event/Exception/NoPreviousThrowableException.php +`e +~@phpunit/Event/Exception/NoTestCaseObjectOnCallStackException.php`e,phpunit/Event/Exception/RuntimeException.php`eLDphpunit/Event/Exception/SubscriberTypeAlreadyRegisteredException.php`eįK1phpunit/Event/Exception/UnknownEventException.php`e}5phpunit/Event/Exception/UnknownEventTypeException.php`e/<6phpunit/Event/Exception/UnknownSubscriberException.php`e ˤ:phpunit/Event/Exception/UnknownSubscriberTypeException.php `e &'*phpunit/Event/Facade.php!`e!CBphpunit/Event/Subscriber.php`edlkphpunit/Event/Tracer.php`er7phpunit/Event/TypeMap.php5`e5pF'#phpunit/Event/Value/ClassMethod.php`eB)phpunit/Event/Value/ComparisonFailure.php`ek;0phpunit/Event/Value/ComparisonFailureBuilder.php`evZ/phpunit/Event/Value/Runtime/OperatingSystem.php`egA! #phpunit/Event/Value/Runtime/PHP.php `e P'phpunit/Event/Value/Runtime/PHPUnit.phpo`eo3'phpunit/Event/Value/Runtime/Runtime.php`ek?J*phpunit/Event/Value/Telemetry/Duration.php `e *t8phpunit/Event/Value/Telemetry/GarbageCollectorStatus.phpW`eW;ä@phpunit/Event/Value/Telemetry/GarbageCollectorStatusProvider.php`eN (phpunit/Event/Value/Telemetry/HRTime.php `e Fɤ&phpunit/Event/Value/Telemetry/Info.php +`e +gHh!-phpunit/Event/Value/Telemetry/MemoryMeter.php:`e:XH-phpunit/Event/Value/Telemetry/MemoryUsage.phpg`eg-Ephpunit/Event/Value/Telemetry/Php81GarbageCollectorStatusProvider.phpP`eP3݆Ephpunit/Event/Value/Telemetry/Php83GarbageCollectorStatusProvider.php`er*phpunit/Event/Value/Telemetry/Snapshot.php`e +.+phpunit/Event/Value/Telemetry/StopWatch.php`eF4S(phpunit/Event/Value/Telemetry/System.php<`e<fK3phpunit/Event/Value/Telemetry/SystemMemoryMeter.php~`e~q`e1phpunit/Event/Value/Telemetry/SystemStopWatch.php`e H};phpunit/Event/Value/Telemetry/SystemStopWatchWithOffset.php8`e8D !phpunit/Event/Value/Test/Phpt.php``e`B!phpunit/Event/Value/Test/Test.php`ei +phpunit/Event/Value/Test/TestCollection.php1`e1J3T3phpunit/Event/Value/Test/TestCollectionIterator.php`ebx:phpunit/Event/Value/Test/TestData/DataFromDataProvider.phpK`eK?m<phpunit/Event/Value/Test/TestData/DataFromTestDependency.php`e.phpunit/Event/Value/Test/TestData/TestData.php`en~8phpunit/Event/Value/Test/TestData/TestDataCollection.php +`e +*^@phpunit/Event/Value/Test/TestData/TestDataCollectionIterator.php`eA$phpunit/Event/Value/Test/TestDox.php `e Kyx+phpunit/Event/Value/Test/TestDoxBuilder.php`eU'phpunit/Event/Value/Test/TestMethod.php`eX.phpunit/Event/Value/Test/TestMethodBuilder.php +`e ++phpunit/Event/Value/TestSuite/TestSuite.php`e2phpunit/Event/Value/TestSuite/TestSuiteBuilder.php `e !Ϥ7phpunit/Event/Value/TestSuite/TestSuiteForTestClass.php`eN&Hphpunit/Event/Value/TestSuite/TestSuiteForTestMethodWithDataProvider.php`eФ3phpunit/Event/Value/TestSuite/TestSuiteWithName.php`e4d !phpunit/Event/Value/Throwable.php_ `e_  (phpunit/Event/Value/ThrowableBuilder.php`eabphpunit/Exception.phpL`eLߊphpunit/Framework/Assert.php`e;i&phpunit/Framework/Assert/Functions.php]`e]^h&phpunit/Framework/Attributes/After.php`e~jL¤+phpunit/Framework/Attributes/AfterClass.php`e׎.phpunit/Framework/Attributes/BackupGlobals.php`emEO7phpunit/Framework/Attributes/BackupStaticProperties.php`eh'phpunit/Framework/Attributes/Before.php`e;,phpunit/Framework/Attributes/BeforeClass.php`e\3phpunit/Framework/Attributes/CodeCoverageIgnore.phpn`enpw,phpunit/Framework/Attributes/CoversClass.php`eCb/phpunit/Framework/Attributes/CoversFunction.php`eΐX.phpunit/Framework/Attributes/CoversNothing.php`e&ޏ-phpunit/Framework/Attributes/DataProvider.php`eM5phpunit/Framework/Attributes/DataProviderExternal.php`eh5(phpunit/Framework/Attributes/Depends.php`eO0phpunit/Framework/Attributes/DependsExternal.php`e +p>phpunit/Framework/Attributes/DependsExternalUsingDeepClone.php`eWgAphpunit/Framework/Attributes/DependsExternalUsingShallowClone.php `e //phpunit/Framework/Attributes/DependsOnClass.php`e4=phpunit/Framework/Attributes/DependsOnClassUsingDeepClone.php`e'@phpunit/Framework/Attributes/DependsOnClassUsingShallowClone.php`e}E6phpunit/Framework/Attributes/DependsUsingDeepClone.php`erˌ9phpunit/Framework/Attributes/DependsUsingShallowClone.php`e& 9phpunit/Framework/Attributes/DoesNotPerformAssertions.php)`e)J.~@phpunit/Framework/Attributes/ExcludeGlobalVariableFromBackup.php`eL༤@phpunit/Framework/Attributes/ExcludeStaticPropertyFromBackup.php2`e2&phpunit/Framework/Attributes/Group.php`eio;phpunit/Framework/Attributes/IgnoreClassForCodeCoverage.php`e>phpunit/Framework/Attributes/IgnoreFunctionForCodeCoverage.php`ed6`<phpunit/Framework/Attributes/IgnoreMethodForCodeCoverage.phpP`ePQ&phpunit/Framework/Attributes/Large.php`e"mn'phpunit/Framework/Attributes/Medium.php`e'2.phpunit/Framework/Attributes/PostCondition.php`eK-phpunit/Framework/Attributes/PreCondition.php`eؕ@4phpunit/Framework/Attributes/PreserveGlobalState.php`eM|1phpunit/Framework/Attributes/RequiresFunction.php`ed/phpunit/Framework/Attributes/RequiresMethod.php`eG +8phpunit/Framework/Attributes/RequiresOperatingSystem.php`e>phpunit/Framework/Attributes/RequiresOperatingSystemFamily.php`e-",phpunit/Framework/Attributes/RequiresPhp.php`en5phpunit/Framework/Attributes/RequiresPhpExtension.phpv`eve(a0phpunit/Framework/Attributes/RequiresPhpunit.php`eIt0phpunit/Framework/Attributes/RequiresSetting.php`eLP:phpunit/Framework/Attributes/RunClassInSeparateProcess.php`e:5phpunit/Framework/Attributes/RunInSeparateProcess.php `e <phpunit/Framework/Attributes/RunTestsInSeparateProcesses.php`eĪ&phpunit/Framework/Attributes/Small.php`ew~%phpunit/Framework/Attributes/Test.php`e#(phpunit/Framework/Attributes/TestDox.php`e{)phpunit/Framework/Attributes/TestWith.php`e[4-phpunit/Framework/Attributes/TestWithJson.php`erzC'phpunit/Framework/Attributes/Ticket.php`e 2*phpunit/Framework/Attributes/UsesClass.php`eVF-phpunit/Framework/Attributes/UsesFunction.php`eN5ﻤ4phpunit/Framework/Attributes/WithoutErrorHandler.php +`e +0phpunit/Framework/Constraint/Boolean/IsFalse.phpb`ebBVu/phpunit/Framework/Constraint/Boolean/IsTrue.php_`e_)phpunit/Framework/Constraint/Callback.php`e.@-2phpunit/Framework/Constraint/Cardinality/Count.php `e ^.8phpunit/Framework/Constraint/Cardinality/GreaterThan.phpV`eVl=O4phpunit/Framework/Constraint/Cardinality/IsEmpty.phpd`ed+R-5phpunit/Framework/Constraint/Cardinality/LessThan.phpP`ePդ5phpunit/Framework/Constraint/Cardinality/SameSize.php`e+phpunit/Framework/Constraint/Constraint.php `e vߤ1phpunit/Framework/Constraint/Equality/IsEqual.php_ `e_ ?phpunit/Framework/Constraint/Equality/IsEqualCanonicalizing.php +`e +apW=phpunit/Framework/Constraint/Equality/IsEqualIgnoringCase.php +`e +F:phpunit/Framework/Constraint/Equality/IsEqualWithDelta.php `e \̤4phpunit/Framework/Constraint/Exception/Exception.phpv`evz8phpunit/Framework/Constraint/Exception/ExceptionCode.php`eMGphpunit/Framework/Constraint/Exception/ExceptionMessageIsOrContains.php`eSphpunit/Framework/Constraint/Exception/ExceptionMessageMatchesRegularExpression.phpN`eNiK;phpunit/Framework/Constraint/Filesystem/DirectoryExists.php`eyy6phpunit/Framework/Constraint/Filesystem/FileExists.php`eC 6phpunit/Framework/Constraint/Filesystem/IsReadable.php`eȅ]6phpunit/Framework/Constraint/Filesystem/IsWritable.php`e +phpunit/Framework/Constraint/IsAnything.php`e{Ϝ,phpunit/Framework/Constraint/IsIdentical.php `e ,phpunit/Framework/Constraint/JsonMatches.php `e '4|.phpunit/Framework/Constraint/Math/IsFinite.php|`e|G˴w0phpunit/Framework/Constraint/Math/IsInfinite.php`e3ߡ+phpunit/Framework/Constraint/Math/IsNan.phpp`epZMw4phpunit/Framework/Constraint/Object/ObjectEquals.phpt`et{`9phpunit/Framework/Constraint/Object/ObjectHasProperty.php`ef8phpunit/Framework/Constraint/Operator/BinaryOperator.php] `e]  4phpunit/Framework/Constraint/Operator/LogicalAnd.php]`e]F4phpunit/Framework/Constraint/Operator/LogicalNot.php `e  33phpunit/Framework/Constraint/Operator/LogicalOr.phpA`eA(K4phpunit/Framework/Constraint/Operator/LogicalXor.php`e2phpunit/Framework/Constraint/Operator/Operator.php,`e,{7phpunit/Framework/Constraint/Operator/UnaryOperator.php`e.{-.phpunit/Framework/Constraint/String/IsJson.php4 `e4 [ڤ9phpunit/Framework/Constraint/String/RegularExpression.php``e`m6phpunit/Framework/Constraint/String/StringContains.phpV`eV2[6phpunit/Framework/Constraint/String/StringEndsWith.php`ermMphpunit/Framework/Constraint/String/StringEqualsStringIgnoringLineEndings.php:`e:IlFphpunit/Framework/Constraint/String/StringMatchesFormatDescription.php `e m}t8phpunit/Framework/Constraint/String/StringStartsWith.php`ei.Qդ8phpunit/Framework/Constraint/Traversable/ArrayHasKey.php`eL괤3phpunit/Framework/Constraint/Traversable/IsList.phpZ`eZ\)F@phpunit/Framework/Constraint/Traversable/TraversableContains.php`ehEphpunit/Framework/Constraint/Traversable/TraversableContainsEqual.php)`e)%Iphpunit/Framework/Constraint/Traversable/TraversableContainsIdentical.php`eyDphpunit/Framework/Constraint/Traversable/TraversableContainsOnly.phpT`eTW?2phpunit/Framework/Constraint/Type/IsInstanceOf.php`eVm",phpunit/Framework/Constraint/Type/IsNull.php^`e^Vɭ,phpunit/Framework/Constraint/Type/IsType.php`e!ޕ+phpunit/Framework/DataProviderTestSuite.php`eUa4phpunit/Framework/Exception/AssertionFailedError.php`e5phpunit/Framework/Exception/CodeCoverageException.php`e[4phpunit/Framework/Exception/EmptyStringException.php`e!)phpunit/Framework/Exception/Exception.php`eR*,:phpunit/Framework/Exception/ExpectationFailedException.php`eA>phpunit/Framework/Exception/GeneratorNotSupportedException.php`e(d9phpunit/Framework/Exception/Incomplete/IncompleteTest.php`e,+>phpunit/Framework/Exception/Incomplete/IncompleteTestError.php`eםܤ8phpunit/Framework/Exception/InvalidArgumentException.php`e:(<phpunit/Framework/Exception/InvalidCoversTargetException.php`eo苤<phpunit/Framework/Exception/InvalidDataProviderException.php`e.ڜɤ:phpunit/Framework/Exception/InvalidDependencyException.php`e}9phpunit/Framework/Exception/NoChildTestSuiteException.php`eP$Nphpunit/Framework/Exception/ObjectEquals/ActualValueIsNotAnObjectException.phpA`eA<ؤ`phpunit/Framework/Exception/ObjectEquals/ComparisonMethodDoesNotAcceptParameterTypeException.php`e@bphpunit/Framework/Exception/ObjectEquals/ComparisonMethodDoesNotDeclareBoolReturnTypeException.php`ePigphpunit/Framework/Exception/ObjectEquals/ComparisonMethodDoesNotDeclareExactlyOneParameterException.php`eFaphpunit/Framework/Exception/ObjectEquals/ComparisonMethodDoesNotDeclareParameterTypeException.php`eENRphpunit/Framework/Exception/ObjectEquals/ComparisonMethodDoesNotExistException.php`eui8phpunit/Framework/Exception/PhptAssertionFailedError.php2`e2_9phpunit/Framework/Exception/ProcessIsolationException.php`eH:3phpunit/Framework/Exception/Skipped/SkippedTest.php`eS.=phpunit/Framework/Exception/Skipped/SkippedTestSuiteError.php`exCphpunit/Framework/Exception/Skipped/SkippedWithMessageException.php`ez$@phpunit/Framework/Exception/UnknownClassOrInterfaceException.php`eӤ4phpunit/Framework/Exception/UnknownTypeException.phpn`en(j.phpunit/Framework/ExecutionOrderDependency.php`eX>2&3phpunit/Framework/MockObject/ConfigurableMethod.php`e/Aphpunit/Framework/MockObject/Exception/BadMethodCallException.php`eΫXGphpunit/Framework/MockObject/Exception/CannotUseAddMethodsException.php5`e5{Hphpunit/Framework/MockObject/Exception/CannotUseOnlyMethodsException.php`e/(4phpunit/Framework/MockObject/Exception/Exception.php`eB'Kphpunit/Framework/MockObject/Exception/IncompatibleReturnValueException.phpy`ey|/Hphpunit/Framework/MockObject/Exception/MatchBuilderNotFoundException.php`eLphpunit/Framework/MockObject/Exception/MatcherAlreadyRegisteredException.php`ez'Lphpunit/Framework/MockObject/Exception/MethodCannotBeConfiguredException.php`e}QOphpunit/Framework/MockObject/Exception/MethodNameAlreadyConfiguredException.php`eӁƤKphpunit/Framework/MockObject/Exception/MethodNameNotConfiguredException.php~`e~x1)Uphpunit/Framework/MockObject/Exception/MethodParametersAlreadyConfiguredException.php`e r>phpunit/Framework/MockObject/Exception/ReflectionException.php`e.ؔLphpunit/Framework/MockObject/Exception/ReturnValueNotConfiguredException.php<`e<Qo;phpunit/Framework/MockObject/Exception/RuntimeException.php`e_|Pphpunit/Framework/MockObject/Generator/Exception/ClassAlreadyExistsException.php`eϠPphpunit/Framework/MockObject/Generator/Exception/ClassIsEnumerationException.php`eYJphpunit/Framework/MockObject/Generator/Exception/ClassIsFinalException.php`eQMphpunit/Framework/MockObject/Generator/Exception/ClassIsReadonlyException.php`eYMphpunit/Framework/MockObject/Generator/Exception/DuplicateMethodException.php`e.٤>phpunit/Framework/MockObject/Generator/Exception/Exception.php`eOphpunit/Framework/MockObject/Generator/Exception/InvalidMethodNameException.php`elDcphpunit/Framework/MockObject/Generator/Exception/OriginalConstructorInvocationRequiredException.php`eDKƤHphpunit/Framework/MockObject/Generator/Exception/ReflectionException.php`eq3Ephpunit/Framework/MockObject/Generator/Exception/RuntimeException.php`e}ʻWphpunit/Framework/MockObject/Generator/Exception/SoapExtensionNotAvailableException.php`en5Jphpunit/Framework/MockObject/Generator/Exception/UnknownClassException.php`eZMJphpunit/Framework/MockObject/Generator/Exception/UnknownTraitException.php +`e +9ѤIphpunit/Framework/MockObject/Generator/Exception/UnknownTypeException.php`e#J4phpunit/Framework/MockObject/Generator/Generator.php}`e}4phpunit/Framework/MockObject/Generator/MockClass.phpd`edN|5phpunit/Framework/MockObject/Generator/MockMethod.php($`e($*k)8phpunit/Framework/MockObject/Generator/MockMethodSet.phpq`eqR4phpunit/Framework/MockObject/Generator/MockTrait.php`e:3phpunit/Framework/MockObject/Generator/MockType.php`edp[9phpunit/Framework/MockObject/Generator/TemplateLoader.php`eqWp@phpunit/Framework/MockObject/Generator/templates/deprecation.tpl;`e;O5sCphpunit/Framework/MockObject/Generator/templates/doubled_method.tpl2`e2Q *&Jphpunit/Framework/MockObject/Generator/templates/doubled_static_method.tpl`e 4RAphpunit/Framework/MockObject/Generator/templates/intersection.tplL`eL-XCphpunit/Framework/MockObject/Generator/templates/proxied_method.tpl`eFphpunit/Framework/MockObject/Generator/templates/test_double_class.tplf`ef' @phpunit/Framework/MockObject/Generator/templates/trait_class.tplQ`eQ<Ȥ?phpunit/Framework/MockObject/Generator/templates/wsdl_class.tpl`e@phpunit/Framework/MockObject/Generator/templates/wsdl_method.tpl<`e<i,phpunit/Framework/MockObject/MockBuilder.php0`e07l?phpunit/Framework/MockObject/Runtime/Api/DoubledCloneMethod.php2`e2.I3phpunit/Framework/MockObject/Runtime/Api/Method.php `e G(:phpunit/Framework/MockObject/Runtime/Api/MockObjectApi.php}`e} +?phpunit/Framework/MockObject/Runtime/Api/ProxiedCloneMethod.phpM`eMf4phpunit/Framework/MockObject/Runtime/Api/StubApi.php5`e59phpunit/Framework/MockObject/Runtime/Builder/Identity.php[`e[$X3{Aphpunit/Framework/MockObject/Runtime/Builder/InvocationMocker.php`e<Bphpunit/Framework/MockObject/Runtime/Builder/InvocationStubber.php`eeU@phpunit/Framework/MockObject/Runtime/Builder/MethodNameMatch.php`e:'@phpunit/Framework/MockObject/Runtime/Builder/ParametersMatch.phpN`eNx)5phpunit/Framework/MockObject/Runtime/Builder/Stub.php`e(=phpunit/Framework/MockObject/Runtime/Interface/MockObject.php`etEphpunit/Framework/MockObject/Runtime/Interface/MockObjectInternal.php`e c7phpunit/Framework/MockObject/Runtime/Interface/Stub.php`eliH?phpunit/Framework/MockObject/Runtime/Interface/StubInternal.phpd`ed٤3phpunit/Framework/MockObject/Runtime/Invocation.php)`e)AI:phpunit/Framework/MockObject/Runtime/InvocationHandler.php`e0phpunit/Framework/MockObject/Runtime/Matcher.php`e=phpunit/Framework/MockObject/Runtime/MethodNameConstraint.php`eӶ=phpunit/Framework/MockObject/Runtime/ReturnValueGenerator.phpq`eqs=phpunit/Framework/MockObject/Runtime/Rule/AnyInvokedCount.php`e3;phpunit/Framework/MockObject/Runtime/Rule/AnyParameters.php`eU=phpunit/Framework/MockObject/Runtime/Rule/InvocationOrder.php`eH NAphpunit/Framework/MockObject/Runtime/Rule/InvokedAtLeastCount.php`eiԤ@phpunit/Framework/MockObject/Runtime/Rule/InvokedAtLeastOnce.php`e @phpunit/Framework/MockObject/Runtime/Rule/InvokedAtMostCount.php`eN:phpunit/Framework/MockObject/Runtime/Rule/InvokedCount.phpZ `eZ 8phpunit/Framework/MockObject/Runtime/Rule/MethodName.php`ef-Ф8phpunit/Framework/MockObject/Runtime/Rule/Parameters.php9`e9ڳj<phpunit/Framework/MockObject/Runtime/Rule/ParametersRule.php`el^L>phpunit/Framework/MockObject/Runtime/Stub/ConsecutiveCalls.php`e7phpunit/Framework/MockObject/Runtime/Stub/Exception.php;`e; Ҥ<phpunit/Framework/MockObject/Runtime/Stub/ReturnArgument.php4`e4`<phpunit/Framework/MockObject/Runtime/Stub/ReturnCallback.phpi`eit=phpunit/Framework/MockObject/Runtime/Stub/ReturnReference.php`euߔ8phpunit/Framework/MockObject/Runtime/Stub/ReturnSelf.php`eר ݤ8phpunit/Framework/MockObject/Runtime/Stub/ReturnStub.php`e`[<phpunit/Framework/MockObject/Runtime/Stub/ReturnValueMap.php`eʤ2phpunit/Framework/MockObject/Runtime/Stub/Stub.phpz`ez!phpunit/Framework/Reorderable.php`e˯$phpunit/Framework/SelfDescribing.php +`e +sphpunit/Framework/Test.php`eǺ!phpunit/Framework/TestBuilder.php%`e%݇Ӥphpunit/Framework/TestCase.php(`e(=U_ phpunit/Framework/TestRunner.phpl8`el8}$phpunit/Framework/TestSize/Known.php`e)T Ф$phpunit/Framework/TestSize/Large.php/`e/N`i%phpunit/Framework/TestSize/Medium.php2`e2b{$phpunit/Framework/TestSize/Small.php#`e#24'phpunit/Framework/TestSize/TestSize.php5`e5ˮ&phpunit/Framework/TestSize/Unknown.php`eg,phpunit/Framework/TestStatus/Deprecation.php`eȸ&phpunit/Framework/TestStatus/Error.php`eۑ(phpunit/Framework/TestStatus/Failure.php`ep!]+phpunit/Framework/TestStatus/Incomplete.php`eC&phpunit/Framework/TestStatus/Known.phpz`ez->f'phpunit/Framework/TestStatus/Notice.php`e'S(&phpunit/Framework/TestStatus/Risky.php`eVw(phpunit/Framework/TestStatus/Skipped.php`e4̤(phpunit/Framework/TestStatus/Success.php`eڍ]8+phpunit/Framework/TestStatus/TestStatus.phpn`enb(phpunit/Framework/TestStatus/Unknown.php `e 7W(phpunit/Framework/TestStatus/Warning.php`eYphpunit/Framework/TestSuite.php:D`e:DS1N'phpunit/Framework/TestSuiteIterator.php3`e3.Kphpunit/Logging/EventLogger.php`e-|phpunit/Logging/Exception.php`e%٤(phpunit/Logging/JUnit/JunitXmlLogger.php/`e/bޭ/phpunit/Logging/JUnit/Subscriber/Subscriber.php`eyJ;:phpunit/Logging/JUnit/Subscriber/TestErroredSubscriber.phpz`ezP_ˤ9phpunit/Logging/JUnit/Subscriber/TestFailedSubscriber.phpt`etr);phpunit/Logging/JUnit/Subscriber/TestFinishedSubscriber.php`e Cphpunit/Logging/JUnit/Subscriber/TestMarkedIncompleteSubscriber.php`eP;phpunit/Logging/JUnit/Subscriber/TestPreparedSubscriber.php`e:wJphpunit/Logging/JUnit/Subscriber/TestRunnerExecutionFinishedSubscriber.php`eĤ:phpunit/Logging/JUnit/Subscriber/TestSkippedSubscriber.phpz`ezY@phpunit/Logging/JUnit/Subscriber/TestSuiteFinishedSubscriber.php`eVG?phpunit/Logging/JUnit/Subscriber/TestSuiteStartedSubscriber.php`e?2phpunit/Logging/TeamCity/Subscriber/Subscriber.php`eGEphpunit/Logging/TeamCity/Subscriber/TestConsideredRiskySubscriber.php?`e?s&U=phpunit/Logging/TeamCity/Subscriber/TestErroredSubscriber.php`eФ<phpunit/Logging/TeamCity/Subscriber/TestFailedSubscriber.php `e U>phpunit/Logging/TeamCity/Subscriber/TestFinishedSubscriber.php`ei&iFphpunit/Logging/TeamCity/Subscriber/TestMarkedIncompleteSubscriber.phpE`eE >phpunit/Logging/TeamCity/Subscriber/TestPreparedSubscriber.php`e Mphpunit/Logging/TeamCity/Subscriber/TestRunnerExecutionFinishedSubscriber.php`e,=phpunit/Logging/TeamCity/Subscriber/TestSkippedSubscriber.php`emF֤Cphpunit/Logging/TeamCity/Subscriber/TestSuiteFinishedSubscriber.php`exBphpunit/Logging/TeamCity/Subscriber/TestSuiteStartedSubscriber.php`e}G9+phpunit/Logging/TeamCity/TeamCityLogger.php$`e$bs((phpunit/Logging/TestDox/HtmlRenderer.php `e lE*phpunit/Logging/TestDox/NamePrettifier.php!`e!;Y-phpunit/Logging/TestDox/PlainTextRenderer.phpe`ee <phpunit/Logging/TestDox/TestMethod/Subscriber/Subscriber.php`e'ĤOphpunit/Logging/TestDox/TestMethod/Subscriber/TestConsideredRiskySubscriber.php`eAaphpunit/Logging/TestDox/TestMethod/Subscriber/TestCreatedMockObjectForAbstractClassSubscriber.php8`e8G驤Yphpunit/Logging/TestDox/TestMethod/Subscriber/TestCreatedMockObjectForTraitSubscriber.php`eR< Yphpunit/Logging/TestDox/TestMethod/Subscriber/TestCreatedMockObjectFromWsdlSubscriber.php`eQphpunit/Logging/TestDox/TestMethod/Subscriber/TestCreatedMockObjectSubscriber.php`eԤXphpunit/Logging/TestDox/TestMethod/Subscriber/TestCreatedPartialMockObjectSubscriber.php `e 2Pphpunit/Logging/TestDox/TestMethod/Subscriber/TestCreatedTestProxySubscriber.php`eOphpunit/Logging/TestDox/TestMethod/Subscriber/TestCreatedTestStubSubscriber.php`eaGphpunit/Logging/TestDox/TestMethod/Subscriber/TestErroredSubscriber.php`e;m Fphpunit/Logging/TestDox/TestMethod/Subscriber/TestFailedSubscriber.php`eF,Hphpunit/Logging/TestDox/TestMethod/Subscriber/TestFinishedSubscriber.php`ePGPphpunit/Logging/TestDox/TestMethod/Subscriber/TestMarkedIncompleteSubscriber.php`e {Fphpunit/Logging/TestDox/TestMethod/Subscriber/TestPassedSubscriber.php`e)#Hphpunit/Logging/TestDox/TestMethod/Subscriber/TestPreparedSubscriber.php`e.Gphpunit/Logging/TestDox/TestMethod/Subscriber/TestSkippedSubscriber.php`e<Ӥ1phpunit/Logging/TestDox/TestMethod/TestResult.php`e%+8;phpunit/Logging/TestDox/TestMethod/TestResultCollection.php`eCphpunit/Logging/TestDox/TestMethod/TestResultCollectionIterator.php`ex:phpunit/Logging/TestDox/TestMethod/TestResultCollector.php`e<phpunit/Metadata/After.php]`e]}p֤phpunit/Metadata/AfterClass.phpl`el{ۤ%phpunit/Metadata/Api/CodeCoverage.php$`e$B& %phpunit/Metadata/Api/DataProvider.phpG!`eG!-%phpunit/Metadata/Api/Dependencies.php `e  eɤphpunit/Metadata/Api/Groups.php9 `e9 z/[C$phpunit/Metadata/Api/HookMethods.phpu `eu ` %phpunit/Metadata/Api/Requirements.php`e>c8"phpunit/Metadata/BackupGlobals.php`ep<媤+phpunit/Metadata/BackupStaticProperties.php`e̤phpunit/Metadata/Before.php``e`X phpunit/Metadata/BeforeClass.phpo`eokphpunit/Metadata/Covers.php+`e+][ phpunit/Metadata/CoversClass.php@`e@'phpunit/Metadata/CoversDefaultClass.phpX`eX[~#phpunit/Metadata/CoversFunction.phpK`eK Qä"phpunit/Metadata/CoversNothing.phpu`eu\`!phpunit/Metadata/DataProvider.php`e*'#phpunit/Metadata/DependsOnClass.php`e{9Y$phpunit/Metadata/DependsOnMethod.php`el,ؤ-phpunit/Metadata/DoesNotPerformAssertions.php`eaTphpunit/Metadata/Exception/AnnotationsAreNotSupportedForInternalClassesException.php:`e:,Ȥ(phpunit/Metadata/Exception/Exception.phpO`eOwAphpunit/Metadata/Exception/InvalidVersionRequirementException.php`ePR<phpunit/Metadata/Exception/NoVersionRequirementException.php`e?+睤2phpunit/Metadata/Exception/ReflectionException.php`en4phpunit/Metadata/ExcludeGlobalVariableFromBackup.php`eU4phpunit/Metadata/ExcludeStaticPropertyFromBackup.php`ephpunit/Metadata/Group.php=`e=U/phpunit/Metadata/IgnoreClassForCodeCoverage.php`ek2phpunit/Metadata/IgnoreFunctionForCodeCoverage.php`eyA3s0phpunit/Metadata/IgnoreMethodForCodeCoverage.php`eV:;Bphpunit/Metadata/Metadata.phpY`eY-'phpunit/Metadata/MetadataCollection.phpg-`eg-?ڤ/phpunit/Metadata/MetadataCollectionIterator.php`e2I/phpunit/Metadata/Parser/Annotation/DocBlock.phpP"`eP"nV/phpunit/Metadata/Parser/Annotation/Registry.php `e ],phpunit/Metadata/Parser/AnnotationParser.phpC`eC^o+phpunit/Metadata/Parser/AttributeParser.phpU`eU^.uI)phpunit/Metadata/Parser/CachingParser.php`ePy~"phpunit/Metadata/Parser/Parser.php`eOv'phpunit/Metadata/Parser/ParserChain.php`e +nY$phpunit/Metadata/Parser/Registry.phpM`eM2e"phpunit/Metadata/PostCondition.phpu`euX !phpunit/Metadata/PreCondition.phpr`er\AI<(phpunit/Metadata/PreserveGlobalState.php`e%phpunit/Metadata/RequiresFunction.phps`esh#phpunit/Metadata/RequiresMethod.php`eФ,phpunit/Metadata/RequiresOperatingSystem.php`e/2phpunit/Metadata/RequiresOperatingSystemFamily.php`e.E phpunit/Metadata/RequiresPhp.php%`e% E)phpunit/Metadata/RequiresPhpExtension.php`e{k:$phpunit/Metadata/RequiresPhpunit.php1`e1$phpunit/Metadata/RequiresSetting.php`ez{ڤ.phpunit/Metadata/RunClassInSeparateProcess.php`e9)phpunit/Metadata/RunInSeparateProcess.php`e&0phpunit/Metadata/RunTestsInSeparateProcesses.php`eez(phpunit/Metadata/Test.phpZ`eZ.ophpunit/Metadata/TestDox.php `e (phpunit/Metadata/TestWith.php`eL:phpunit/Metadata/Uses.php%`e%Fphpunit/Metadata/UsesClass.php:`e:rY%phpunit/Metadata/UsesDefaultClass.phpR`eR"!!phpunit/Metadata/UsesFunction.phpB`eBqɤ2phpunit/Metadata/Version/ComparisonRequirement.phph`eh52phpunit/Metadata/Version/ConstraintRequirement.php`ew㳤(phpunit/Metadata/Version/Requirement.php`ea p_(phpunit/Metadata/WithoutErrorHandler.php`e#+@$phpunit/Runner/Baseline/Baseline.php`eAphpunit/Runner/Baseline/Exception/CannotLoadBaselineException.php`e\8Bphpunit/Runner/Baseline/Exception/FileDoesNotHaveLineException.php`eM%phpunit/Runner/Baseline/Generator.php `e *Y!phpunit/Runner/Baseline/Issue.php `e 95¤"phpunit/Runner/Baseline/Reader.phpn `en G2phpunit/Runner/Baseline/RelativePathCalculator.php +`e +1phpunit/Runner/Baseline/Subscriber/Subscriber.php`e>>kIphpunit/Runner/Baseline/Subscriber/TestTriggeredDeprecationSubscriber.php`eP53Dphpunit/Runner/Baseline/Subscriber/TestTriggeredNoticeSubscriber.phpn`en6=Lphpunit/Runner/Baseline/Subscriber/TestTriggeredPhpDeprecationSubscriber.php`eO դGphpunit/Runner/Baseline/Subscriber/TestTriggeredPhpNoticeSubscriber.php}`e}KPHphpunit/Runner/Baseline/Subscriber/TestTriggeredPhpWarningSubscriber.php`eD-lEphpunit/Runner/Baseline/Subscriber/TestTriggeredWarningSubscriber.phps`esk2"phpunit/Runner/Baseline/Writer.php`e-,phpunit/Runner/CodeCoverage.php2`e2Nphpunit/Runner/ErrorHandler.php`edۤ8phpunit/Runner/Exception/ClassCannotBeFoundException.php`ec@phpunit/Runner/Exception/ClassDoesNotExtendTestCaseException.php`en5phpunit/Runner/Exception/ClassIsAbstractException.php`ep7o>phpunit/Runner/Exception/DirectoryCannotBeCreatedException.php`e:Vr&phpunit/Runner/Exception/Exception.php`enHA6phpunit/Runner/Exception/FileDoesNotExistException.php`eg K2phpunit/Runner/Exception/InvalidOrderException.php`e8Kڤ5phpunit/Runner/Exception/InvalidPhptFileException.php`ezA>4phpunit/Runner/Exception/NoIgnoredEventException.php`e3Uǚ;phpunit/Runner/Exception/ParameterDoesNotExistException.php`e]wQDphpunit/Runner/Exception/PhptExternalFileCannotBeLoadedException.php`ej0phpunit/Runner/Exception/ReflectionException.php`e^ss<phpunit/Runner/Exception/UnsupportedPhptSectionException.php`e &phpunit/Runner/Extension/Extension.php`eVZ2phpunit/Runner/Extension/ExtensionBootstrapper.phpo `eo =/#phpunit/Runner/Extension/Facade.php +`e +L0phpunit/Runner/Extension/ParameterCollection.php`enZ[c'phpunit/Runner/Extension/PharLoader.php`eD 4phpunit/Runner/Filter/ExcludeGroupFilterIterator.phpl`elH}H!phpunit/Runner/Filter/Factory.php`eX/-phpunit/Runner/Filter/GroupFilterIterator.php9`e9.&?4phpunit/Runner/Filter/IncludeGroupFilterIterator.phpk`ekSw,phpunit/Runner/Filter/NameFilterIterator.php `e uc.phpunit/Runner/Filter/TestIdFilterIterator.php`e/=phpunit/Runner/GarbageCollection/GarbageCollectionHandler.php`etKphpunit/Runner/GarbageCollection/Subscriber/ExecutionFinishedSubscriber.php`eRJphpunit/Runner/GarbageCollection/Subscriber/ExecutionStartedSubscriber.php`e+0:phpunit/Runner/GarbageCollection/Subscriber/Subscriber.php"`e"eFphpunit/Runner/GarbageCollection/Subscriber/TestFinishedSubscriber.php[`e[Hphpunit/Runner/PhptTestCase.phpbU`ebUKx1phpunit/Runner/ResultCache/DefaultResultCache.php `e X-.phpunit/Runner/ResultCache/NullResultCache.php`eS*phpunit/Runner/ResultCache/ResultCache.php`e3Gb1phpunit/Runner/ResultCache/ResultCacheHandler.php`e4phpunit/Runner/ResultCache/Subscriber/Subscriber.php`eM#Gphpunit/Runner/ResultCache/Subscriber/TestConsideredRiskySubscriber.php`e$k?phpunit/Runner/ResultCache/Subscriber/TestErroredSubscriber.php`e4}Fr>phpunit/Runner/ResultCache/Subscriber/TestFailedSubscriber.php`e )@phpunit/Runner/ResultCache/Subscriber/TestFinishedSubscriber.phpU`eUVHphpunit/Runner/ResultCache/Subscriber/TestMarkedIncompleteSubscriber.php`e.6@phpunit/Runner/ResultCache/Subscriber/TestPreparedSubscriber.php`eΤ?phpunit/Runner/ResultCache/Subscriber/TestSkippedSubscriber.phpO`eODÇEphpunit/Runner/ResultCache/Subscriber/TestSuiteFinishedSubscriber.php`eߤDphpunit/Runner/ResultCache/Subscriber/TestSuiteStartedSubscriber.php`e0DĤ'phpunit/Runner/TestResult/Collector.phpI`eI/縤$phpunit/Runner/TestResult/Facade.php `e X#phpunit/Runner/TestResult/Issue.php `e ysh)phpunit/Runner/TestResult/PassedTests.php `e |Ophpunit/Runner/TestResult/Subscriber/BeforeTestClassMethodErroredSubscriber.php.`e.$|;Cphpunit/Runner/TestResult/Subscriber/ExecutionStartedSubscriber.php$`e$ޙ63phpunit/Runner/TestResult/Subscriber/Subscriber.php`e񡠒Fphpunit/Runner/TestResult/Subscriber/TestConsideredRiskySubscriber.php`e}9r4>phpunit/Runner/TestResult/Subscriber/TestErroredSubscriber.php`eܤ=phpunit/Runner/TestResult/Subscriber/TestFailedSubscriber.php`e?%+?phpunit/Runner/TestResult/Subscriber/TestFinishedSubscriber.php`eۤGphpunit/Runner/TestResult/Subscriber/TestMarkedIncompleteSubscriber.php`elH?phpunit/Runner/TestResult/Subscriber/TestPreparedSubscriber.php`e<¤Qphpunit/Runner/TestResult/Subscriber/TestRunnerTriggeredDeprecationSubscriber.php`eYMphpunit/Runner/TestResult/Subscriber/TestRunnerTriggeredWarningSubscriber.php`ex>phpunit/Runner/TestResult/Subscriber/TestSkippedSubscriber.php`eADphpunit/Runner/TestResult/Subscriber/TestSuiteFinishedSubscriber.phpS`eS*Cphpunit/Runner/TestResult/Subscriber/TestSuiteSkippedSubscriber.php`eFCphpunit/Runner/TestResult/Subscriber/TestSuiteStartedSubscriber.php`e bZKphpunit/Runner/TestResult/Subscriber/TestTriggeredDeprecationSubscriber.php`esXcEphpunit/Runner/TestResult/Subscriber/TestTriggeredErrorSubscriber.php`e{9Fphpunit/Runner/TestResult/Subscriber/TestTriggeredNoticeSubscriber.php`eߋ%Nphpunit/Runner/TestResult/Subscriber/TestTriggeredPhpDeprecationSubscriber.php`eeLOԤIphpunit/Runner/TestResult/Subscriber/TestTriggeredPhpNoticeSubscriber.php`e dJphpunit/Runner/TestResult/Subscriber/TestTriggeredPhpWarningSubscriber.php`eèMRphpunit/Runner/TestResult/Subscriber/TestTriggeredPhpunitDeprecationSubscriber.php0`e0gﰤLphpunit/Runner/TestResult/Subscriber/TestTriggeredPhpunitErrorSubscriber.php `e T5Nphpunit/Runner/TestResult/Subscriber/TestTriggeredPhpunitWarningSubscriber.php`eDnGphpunit/Runner/TestResult/Subscriber/TestTriggeredWarningSubscriber.php`eɤ(phpunit/Runner/TestResult/TestResult.php<`e<&u;"phpunit/Runner/TestSuiteLoader.php`e[ +uФ"phpunit/Runner/TestSuiteSorter.phpR%`eR%phpunit/Runner/Version.php`e= +ݟphpunit/TextUI/Application.phpN`eNi6"phpunit/TextUI/Command/Command.php`eO㍤9phpunit/TextUI/Command/Commands/AtLeastVersionCommand.php`eTؼ@phpunit/TextUI/Command/Commands/GenerateConfigurationCommand.php`eor5phpunit/TextUI/Command/Commands/ListGroupsCommand.php`e,e9phpunit/TextUI/Command/Commands/ListTestSuitesCommand.php`eKn:phpunit/TextUI/Command/Commands/ListTestsAsTextCommand.php`eE>9phpunit/TextUI/Command/Commands/ListTestsAsXmlCommand.php`e >?phpunit/TextUI/Command/Commands/MigrateConfigurationCommand.php`e3phpunit/TextUI/Command/Commands/ShowHelpCommand.php/`e/>>#6phpunit/TextUI/Command/Commands/ShowVersionCommand.phpS`eS7phpunit/TextUI/Command/Commands/VersionCheckCommand.php`e"Ƥ@phpunit/TextUI/Command/Commands/WarmCodeCoverageCacheCommand.php `e :a!phpunit/TextUI/Command/Result.phpc`ec{(phpunit/TextUI/Configuration/Builder.php`e4a(,phpunit/TextUI/Configuration/Cli/Builder.phpW`eW(2phpunit/TextUI/Configuration/Cli/Configuration.php+`e+"J.phpunit/TextUI/Configuration/Cli/Exception.php`e%zE?phpunit/TextUI/Configuration/Cli/XmlConfigurationFileFinder.php`e`L;phpunit/TextUI/Configuration/CodeCoverageFilterRegistry.php`e .phpunit/TextUI/Configuration/Configuration.php`eH뀤Dphpunit/TextUI/Configuration/Exception/CannotFindSchemaException.php&`e&ؔ}Sphpunit/TextUI/Configuration/Exception/CodeCoverageReportNotConfiguredException.php$`e$Nphpunit/TextUI/Configuration/Exception/ConfigurationCannotBeBuiltException.php`eZ$&4phpunit/TextUI/Configuration/Exception/Exception.php`eGphpunit/TextUI/Configuration/Exception/FilterNotConfiguredException.php`egGLphpunit/TextUI/Configuration/Exception/IncludePathNotConfiguredException.php`exHphpunit/TextUI/Configuration/Exception/LoggingNotConfiguredException.php`eY%>phpunit/TextUI/Configuration/Exception/NoBaselineException.php`eP!:?phpunit/TextUI/Configuration/Exception/NoBootstrapException.php`e`lƤDphpunit/TextUI/Configuration/Exception/NoCacheDirectoryException.php`eCAphpunit/TextUI/Configuration/Exception/NoCliArgumentException.php`e|J?RGphpunit/TextUI/Configuration/Exception/NoConfigurationFileException.php`eMLphpunit/TextUI/Configuration/Exception/NoCoverageCacheDirectoryException.php`e;Cphpunit/TextUI/Configuration/Exception/NoCustomCssFileException.php`eʑ0Fphpunit/TextUI/Configuration/Exception/NoDefaultTestSuiteException.php`e Lphpunit/TextUI/Configuration/Exception/NoPharExtensionDirectoryException.php`e)R'phpunit/TextUI/Configuration/Merger.php`e,Zy+phpunit/TextUI/Configuration/PhpHandler.php\`e\y)phpunit/TextUI/Configuration/Registry.phpK `eK /B-phpunit/TextUI/Configuration/SourceFilter.php`e^:ؤ-phpunit/TextUI/Configuration/SourceMapper.php `e ff1phpunit/TextUI/Configuration/TestSuiteBuilder.php`e ă/phpunit/TextUI/Configuration/Value/Constant.php8`e8bt9phpunit/TextUI/Configuration/Value/ConstantCollection.php`eW6bAphpunit/TextUI/Configuration/Value/ConstantCollectionIterator.php`eg]0phpunit/TextUI/Configuration/Value/Directory.php`e3F:phpunit/TextUI/Configuration/Value/DirectoryCollection.php `e ?aBphpunit/TextUI/Configuration/Value/DirectoryCollectionIterator.php`eہW9phpunit/TextUI/Configuration/Value/ExtensionBootstrap.php`er[Cphpunit/TextUI/Configuration/Value/ExtensionBootstrapCollection.php`eѤKphpunit/TextUI/Configuration/Value/ExtensionBootstrapCollectionIterator.php`e( V+phpunit/TextUI/Configuration/Value/File.php/`e/w5phpunit/TextUI/Configuration/Value/FileCollection.php`e'P=phpunit/TextUI/Configuration/Value/FileCollectionIterator.phpn`enj6phpunit/TextUI/Configuration/Value/FilterDirectory.php`epS@phpunit/TextUI/Configuration/Value/FilterDirectoryCollection.phpD`eDJHphpunit/TextUI/Configuration/Value/FilterDirectoryCollectionIterator.php`e񭥤,phpunit/TextUI/Configuration/Value/Group.php`ekפ6phpunit/TextUI/Configuration/Value/GroupCollection.php8`e8+Bm>phpunit/TextUI/Configuration/Value/GroupCollectionIterator.phpy`eywX1phpunit/TextUI/Configuration/Value/IniSetting.php1`e1;phpunit/TextUI/Configuration/Value/IniSettingCollection.php`e^Cphpunit/TextUI/Configuration/Value/IniSettingCollectionIterator.php`e8Ф*phpunit/TextUI/Configuration/Value/Php.phpY`eY畉-phpunit/TextUI/Configuration/Value/Source.php`e-Ȥ4phpunit/TextUI/Configuration/Value/TestDirectory.php`eF >phpunit/TextUI/Configuration/Value/TestDirectoryCollection.php-`e-zȤFphpunit/TextUI/Configuration/Value/TestDirectoryCollectionIterator.php`ea>k/phpunit/TextUI/Configuration/Value/TestFile.php`e)tФ9phpunit/TextUI/Configuration/Value/TestFileCollection.php`eAphpunit/TextUI/Configuration/Value/TestFileCollectionIterator.php`ep0phpunit/TextUI/Configuration/Value/TestSuite.php`e䣉:phpunit/TextUI/Configuration/Value/TestSuiteCollection.php`ePBphpunit/TextUI/Configuration/Value/TestSuiteCollectionIterator.php`e;E/phpunit/TextUI/Configuration/Value/Variable.php`e@9phpunit/TextUI/Configuration/Value/VariableCollection.php`eїAphpunit/TextUI/Configuration/Value/VariableCollectionIterator.php`eՑ>phpunit/TextUI/Configuration/Xml/CodeCoverage/CodeCoverage.php`e?phpunit/TextUI/Configuration/Xml/CodeCoverage/Report/Clover.php`eƣˠBphpunit/TextUI/Configuration/Xml/CodeCoverage/Report/Cobertura.php`e5?phpunit/TextUI/Configuration/Xml/CodeCoverage/Report/Crap4j.phpp`ep^=phpunit/TextUI/Configuration/Xml/CodeCoverage/Report/Html.php +`e +CD<phpunit/TextUI/Configuration/Xml/CodeCoverage/Report/Php.php`eCC|=phpunit/TextUI/Configuration/Xml/CodeCoverage/Report/Text.php}`e}<phpunit/TextUI/Configuration/Xml/CodeCoverage/Report/Xml.php`e:H-2phpunit/TextUI/Configuration/Xml/Configuration.php `e lE<9phpunit/TextUI/Configuration/Xml/DefaultConfiguration.php `e uԤ.phpunit/TextUI/Configuration/Xml/Exception.php`eN5+.phpunit/TextUI/Configuration/Xml/Generator.php`eX]!+phpunit/TextUI/Configuration/Xml/Groups.phpd`ed8=Ӥ@phpunit/TextUI/Configuration/Xml/LoadedFromFileConfiguration.php`e-[+phpunit/TextUI/Configuration/Xml/Loader.php`e<9>2phpunit/TextUI/Configuration/Xml/Logging/Junit.php`eФ4phpunit/TextUI/Configuration/Xml/Logging/Logging.php +`e +#5phpunit/TextUI/Configuration/Xml/Logging/TeamCity.php`eϦ9phpunit/TextUI/Configuration/Xml/Logging/TestDox/Html.php`eB*$9phpunit/TextUI/Configuration/Xml/Logging/TestDox/Text.php`e?phpunit/TextUI/Configuration/Xml/Migration/MigrationBuilder.php`e˃Hphpunit/TextUI/Configuration/Xml/Migration/MigrationBuilderException.php`eUWĝAphpunit/TextUI/Configuration/Xml/Migration/MigrationException.php`e\ZIphpunit/TextUI/Configuration/Xml/Migration/Migrations/ConvertLogTypes.php`ehoePphpunit/TextUI/Configuration/Xml/Migration/Migrations/CoverageCloverToReport.phpX`eXijPphpunit/TextUI/Configuration/Xml/Migration/Migrations/CoverageCrap4jToReport.php`e$i'Nphpunit/TextUI/Configuration/Xml/Migration/Migrations/CoverageHtmlToReport.php`eՄjMphpunit/TextUI/Configuration/Xml/Migration/Migrations/CoveragePhpToReport.phpF`eF^ӤNphpunit/TextUI/Configuration/Xml/Migration/Migrations/CoverageTextToReport.php`eV_Mphpunit/TextUI/Configuration/Xml/Migration/Migrations/CoverageXmlToReport.phpK`eK_ Zphpunit/TextUI/Configuration/Xml/Migration/Migrations/IntroduceCacheDirectoryAttribute.php\`e\Rphpunit/TextUI/Configuration/Xml/Migration/Migrations/IntroduceCoverageElement.php`eUNphpunit/TextUI/Configuration/Xml/Migration/Migrations/LogToReportMigration.php`eUCphpunit/TextUI/Configuration/Xml/Migration/Migrations/Migration.php`e'ephpunit/TextUI/Configuration/Xml/Migration/Migrations/MoveAttributesFromFilterWhitelistToCoverage.php`eU%5Zphpunit/TextUI/Configuration/Xml/Migration/Migrations/MoveAttributesFromRootToCoverage.php`e"OYphpunit/TextUI/Configuration/Xml/Migration/Migrations/MoveCoverageDirectoriesToSource.php`eT>Yphpunit/TextUI/Configuration/Xml/Migration/Migrations/MoveWhitelistExcludesToCoverage.php`e +Yphpunit/TextUI/Configuration/Xml/Migration/Migrations/MoveWhitelistIncludesToCoverage.php`e8;sphpunit/TextUI/Configuration/Xml/Migration/Migrations/RemoveBeStrictAboutResourceUsageDuringSmallTestsAttribute.php`e yhphpunit/TextUI/Configuration/Xml/Migration/Migrations/RemoveBeStrictAboutTodoAnnotatedTestsAttribute.phpm`emXphpunit/TextUI/Configuration/Xml/Migration/Migrations/RemoveCacheResultFileAttribute.php=`e=ۨǤTphpunit/TextUI/Configuration/Xml/Migration/Migrations/RemoveCacheTokensAttribute.php1`e1T9`phpunit/TextUI/Configuration/Xml/Migration/Migrations/RemoveConversionToExceptionsAttributes.php `e fphpunit/TextUI/Configuration/Xml/Migration/Migrations/RemoveCoverageElementCacheDirectoryAttribute.php`emphpunit/TextUI/Configuration/Xml/Migration/Migrations/RemoveCoverageElementProcessUncoveredFilesAttribute.php`e[ Kphpunit/TextUI/Configuration/Xml/Migration/Migrations/RemoveEmptyFilter.php{`e{KIphpunit/TextUI/Configuration/Xml/Migration/Migrations/RemoveListeners.php'`e'nHphpunit/TextUI/Configuration/Xml/Migration/Migrations/RemoveLogTypes.phpi`eiOphpunit/TextUI/Configuration/Xml/Migration/Migrations/RemoveLoggingElements.php)`e).Vphpunit/TextUI/Configuration/Xml/Migration/Migrations/RemoveNoInteractionAttribute.php7`e7⼿Qphpunit/TextUI/Configuration/Xml/Migration/Migrations/RemovePrinterAttributes.php`e}Tphpunit/TextUI/Configuration/Xml/Migration/Migrations/RemoveTestDoxGroupsElement.php6`e6DYphpunit/TextUI/Configuration/Xml/Migration/Migrations/RemoveTestSuiteLoaderAttributes.php`esUPphpunit/TextUI/Configuration/Xml/Migration/Migrations/RemoveVerboseAttribute.php%`e%J_phpunit/TextUI/Configuration/Xml/Migration/Migrations/RenameBackupStaticAttributesAttribute.php$`e$CȤfphpunit/TextUI/Configuration/Xml/Migration/Migrations/RenameBeStrictAboutCoversAnnotationAttribute.phpN`eNb^phpunit/TextUI/Configuration/Xml/Migration/Migrations/RenameForceCoversAnnotationAttribute.php"`e" Nphpunit/TextUI/Configuration/Xml/Migration/Migrations/UpdateSchemaLocation.php`e 7phpunit/TextUI/Configuration/Xml/Migration/Migrator.php`eU?phpunit/TextUI/Configuration/Xml/Migration/SnapshotNodeList.phpg`egi,phpunit/TextUI/Configuration/Xml/PHPUnit.php;`e;Ophpunit/TextUI/Configuration/Xml/SchemaDetector/FailedSchemaDetectionResult.php`e,F6¤Iphpunit/TextUI/Configuration/Xml/SchemaDetector/SchemaDetectionResult.php`e^=Bphpunit/TextUI/Configuration/Xml/SchemaDetector/SchemaDetector.php`e+QSphpunit/TextUI/Configuration/Xml/SchemaDetector/SuccessfulSchemaDetectionResult.php2`e2YѶ1phpunit/TextUI/Configuration/Xml/SchemaFinder.php`e +伤4phpunit/TextUI/Configuration/Xml/TestSuiteMapper.php`ebH?phpunit/TextUI/Configuration/Xml/Validator/ValidationResult.php`e+8phpunit/TextUI/Configuration/Xml/Validator/Validator.php1`e1EŤ;phpunit/TextUI/Exception/DirectoryDoesNotExistException.php`e-ʤ&phpunit/TextUI/Exception/Exception.php`eD{i=phpunit/TextUI/Exception/ExtensionsNotConfiguredException.php`e3f.3phpunit/TextUI/Exception/InvalidSocketException.php`e0phpunit/TextUI/Exception/ReflectionException.php`eJuv-phpunit/TextUI/Exception/RuntimeException.php`e ;phpunit/TextUI/Exception/TestDirectoryNotFoundException.php`enL6phpunit/TextUI/Exception/TestFileNotFoundException.php`e?lphpunit/TextUI/Help.php1`e1Aphpunit/TextUI/Output/Default/ProgressPrinter/ProgressPrinter.phpB0`eB0;Icphpunit/TextUI/Output/Default/ProgressPrinter/Subscriber/BeforeTestClassMethodErroredSubscriber.phpF`eFC8%Gphpunit/TextUI/Output/Default/ProgressPrinter/Subscriber/Subscriber.php;`e;`e> *sebastian-comparator/NumericComparator.php`e]>m)sebastian-comparator/ObjectComparator.php +`e +rXƤ+sebastian-comparator/ResourceComparator.phpI`eIN')sebastian-comparator/ScalarComparator.php `e D~&3sebastian-comparator/SplObjectStorageComparator.php`e'sebastian-comparator/TypeComparator.php`e-sebastian-comparator/exceptions/Exception.phpv`evEᵤ4sebastian-comparator/exceptions/RuntimeException.php`eV'#sebastian-complexity/Calculator.php `e hg.sebastian-complexity/Complexity/Complexity.php2`e2 +U[8sebastian-complexity/Complexity/ComplexityCollection.php`ey?@sebastian-complexity/Complexity/ComplexityCollectionIterator.php`e]Y,sebastian-complexity/Exception/Exception.phpv`ev73sebastian-complexity/Exception/RuntimeException.php`eCdWsebastian-complexity/LICENSE`eP@٤=sebastian-complexity/Visitor/ComplexityCalculatingVisitor.php `e Gsebastian-complexity/Visitor/CyclomaticComplexityCalculatingVisitor.php`eܽsebastian-diff/Chunk.php`esebastian-diff/Diff.php``e`&sebastian-diff/Differ.php`eה3sebastian-diff/Exception/ConfigurationException.php!`e!&sebastian-diff/Exception/Exception.phpj`ej05sebastian-diff/Exception/InvalidArgumentException.php`eqsebastian-diff/LICENSE`eTsebastian-diff/Line.php`eǺ5sebastian-diff/LongestCommonSubsequenceCalculator.php`e}e7zDsebastian-diff/MemoryEfficientLongestCommonSubsequenceCalculator.phpy `ey [DQ4sebastian-diff/Output/AbstractChunkOutputBuilder.php`es/sebastian-diff/Output/DiffOnlyOutputBuilder.phpy`ey"4sebastian-diff/Output/DiffOutputBuilderInterface.php`eV8sebastian-diff/Output/StrictUnifiedDiffOutputBuilder.phpU(`eU(ߢ"2sebastian-diff/Output/UnifiedDiffOutputBuilder.php`eɅ|sebastian-diff/Parser.phpu `eu ݤBsebastian-diff/TimeEfficientLongestCommonSubsequenceCalculator.php. `e. N!sebastian-environment/Console.php`eP1Ťsebastian-environment/LICENSE`eWj!sebastian-environment/Runtime.php`eB^sebastian-exporter/Exporter.php"`e"5sebastian-exporter/LICENSE`eT'sebastian-global-state/CodeExporter.phph `eh :}&sebastian-global-state/ExcludeList.php `e :$sebastian-global-state/LICENSE`e$#sebastian-global-state/Restorer.php2 `e2 Rɤ#sebastian-global-state/Snapshot.php&`e&r/sebastian-global-state/exceptions/Exception.phpy`eyJ6sebastian-global-state/exceptions/RuntimeException.php`e;#sebastian-lines-of-code/Counter.phpb `eb /sebastian-lines-of-code/Exception/Exception.phpz`ez aV>sebastian-lines-of-code/Exception/IllogicalValuesException.php`eG<sebastian-lines-of-code/Exception/NegativeValueException.php`e +ڤ6sebastian-lines-of-code/Exception/RuntimeException.php`eKsebastian-lines-of-code/LICENSE`eP@٤/sebastian-lines-of-code/LineCountingVisitor.php`e ^'sebastian-lines-of-code/LinesOfCode.php `e (EФ*sebastian-object-enumerator/Enumerator.php`e_.sebastian-object-reflector/ObjectReflector.php`e9m 'sebastian-recursion-context/Context.php`e!#sebastian-recursion-context/LICENSE`eTsebastian-type/LICENSE`e sebastian-type/Parameter.php`e~]#sebastian-type/ReflectionMapper.php`e 8sebastian-type/TypeName.php`eh&sebastian-type/exception/Exception.phpj`ejbᮧ-sebastian-type/exception/RuntimeException.php`e%$sebastian-type/type/CallableType.php`eĊP!sebastian-type/type/FalseType.phpb`eb_&)sebastian-type/type/GenericObjectType.php `e c(sebastian-type/type/IntersectionType.php +`e +¤$sebastian-type/type/IterableType.php`e3դ!sebastian-type/type/MixedType.php'`e'o!sebastian-type/type/NeverType.php`eFҹ sebastian-type/type/NullType.php"`e"9$F"sebastian-type/type/ObjectType.php%`e%"sebastian-type/type/SimpleType.php,`e,0"sebastian-type/type/StaticType.php`e", sebastian-type/type/TrueType.php]`e]<iפsebastian-type/type/Type.php`eR!sebastian-type/type/UnionType.php* `e* AA#sebastian-type/type/UnknownType.php`eǤ sebastian-type/type/VoidType.php`esebastian-version/LICENSE`eVosebastian-version/Version.php`e.7theseer-tokenizer/Exception.phpn`en'Ǥtheseer-tokenizer/LICENSE`eR ("theseer-tokenizer/NamespaceUri.phpH`eH=C+theseer-tokenizer/NamespaceUriException.phpy`ey'Hetheseer-tokenizer/Token.php`e4%theseer-tokenizer/TokenCollection.php +`e +a.theseer-tokenizer/TokenCollectionException.php|`e|`g-theseer-tokenizer/Tokenizer.php +`e +zl#theseer-tokenizer/XMLSerializer.php`eg; .phpstorm.meta.php`eɒsphpunit/phpunit: 10.4.0 myclabs/deep-copy: 1.11.1 nikic/php-parser: v4.17.1 phar-io/manifest: 2.0.3 phar-io/version: 3.2.1 -phpunit/php-code-coverage: 10.1.6 +phpunit/php-code-coverage: 10.1.7 phpunit/php-file-iterator: 4.1.0 phpunit/php-invoker: 4.0.0 phpunit/php-text-template: 3.0.1 @@ -3036,10 +3083,10 @@ sebastian/cli-parser: 2.0.0 sebastian/code-unit: 2.0.0 sebastian/code-unit-reverse-lookup: 3.0.0 sebastian/comparator: 5.0.1 -sebastian/complexity: 3.0.1 +sebastian/complexity: 3.1.0 sebastian/diff: 5.0.3 sebastian/environment: 6.0.1 -sebastian/exporter: 5.1.0 +sebastian/exporter: 5.1.1 sebastian/global-state: 6.0.1 sebastian/lines-of-code: 2.0.1 sebastian/object-enumerator: 5.0.0 @@ -32526,6 +32573,14 @@ final class ExecutableLinesFindingVisitor extends NodeVisitorAbstract return; } if ($node instanceof Node\Stmt\Enum_ || $node instanceof Node\Stmt\Function_ || $node instanceof Node\Stmt\Class_ || $node instanceof Node\Stmt\ClassMethod || $node instanceof Node\Expr\Closure || $node instanceof Node\Stmt\Trait_) { + if ($node instanceof Node\Stmt\Function_ || $node instanceof Node\Stmt\ClassMethod) { + foreach ($node->getParams() as $param) { + foreach (range($param->getStartLine(), $param->getEndLine()) as $line) { + $this->unsets[$line] = \true; + } + } + unset($this->unsets[$node->getEndLine()]); + } $isConcreteClassLike = $node instanceof Node\Stmt\Enum_ || $node instanceof Node\Stmt\Class_ || $node instanceof Node\Stmt\Trait_; if (null !== $node->stmts) { foreach ($node->stmts as $stmt) { @@ -33513,7 +33568,7 @@ final class Version public static function id() : string { if (self::$version === '') { - self::$version = (new VersionId('10.1.5', dirname(__DIR__)))->asString(); + self::$version = (new VersionId('10.1.7', dirname(__DIR__)))->asString(); } return self::$version; } @@ -34353,7 +34408,7 @@ final class TimeSinceStartOfRequestNotAvailableException extends RuntimeExceptio - This Schema file defines the rules by which the XML configuration file of PHPUnit 10.3 may be structured. + This Schema file defines the rules by which the XML configuration file of PHPUnit 10.4 may be structured. @@ -34375,6 +34430,7 @@ final class TimeSinceStartOfRequestNotAvailableException extends RuntimeExceptio + @@ -34738,13 +34794,6 @@ final class DeferringDispatcher implements \PHPUnit\Event\SubscribableDispatcher { $this->dispatcher->registerSubscriber($subscriber); } - /** - * @psalm-param class-string $className - */ - public function hasSubscriberFor(string $className) : bool - { - return $this->dispatcher->hasSubscriberFor($className); - } public function dispatch(\PHPUnit\Event\Event $event) : void { if ($this->recording) { @@ -34818,19 +34867,7 @@ final class DirectDispatcher implements \PHPUnit\Event\SubscribableDispatcher $this->subscribers[$eventClassName][] = $subscriber; } /** - * @psalm-param class-string $className - */ - public function hasSubscriberFor(string $className) : bool - { - if ($this->tracers !== []) { - return \true; - } - if (isset($this->subscribers[$className])) { - return \true; - } - return \false; - } - /** + * @throws Throwable * @throws UnknownEventTypeException */ public function dispatch(\PHPUnit\Event\Event $event) : void @@ -34843,7 +34880,7 @@ final class DirectDispatcher implements \PHPUnit\Event\SubscribableDispatcher try { $tracer->trace($event); } catch (Throwable $t) { - $this->ignoreThrowablesFromThirdPartySubscribers($t); + $this->handleThrowable($t); } } if (!array_key_exists($eventClassName, $this->subscribers)) { @@ -34853,18 +34890,24 @@ final class DirectDispatcher implements \PHPUnit\Event\SubscribableDispatcher try { $subscriber->notify($event); } catch (Throwable $t) { - $this->ignoreThrowablesFromThirdPartySubscribers($t); + $this->handleThrowable($t); } } } /** * @throws Throwable */ - private function ignoreThrowablesFromThirdPartySubscribers(Throwable $t) : void + public function handleThrowable(Throwable $t) : void { - if (str_starts_with($t->getFile(), dirname(__DIR__, 2))) { - throw $t; + if ($this->isThrowableFromThirdPartySubscriber($t)) { + \PHPUnit\Event\Facade::emitter()->testRunnerTriggeredWarning(sprintf('Exception in third-party event subscriber: %s%s%s', $t->getMessage(), \PHP_EOL, $t->getTraceAsString())); + return; } + throw $t; + } + private function isThrowableFromThirdPartySubscriber(Throwable $t) : bool + { + return !str_starts_with($t->getFile(), dirname(__DIR__, 2)); } } dispatcher = $dispatcher; @@ -34962,6 +35002,14 @@ final class DispatchingEmitter implements \PHPUnit\Event\Emitter $this->startSnapshot = $system->snapshot(); $this->previousSnapshot = $system->snapshot(); } + public function exportObjects() : void + { + $this->exportObjects = \true; + } + public function exportsObjects() : bool + { + return $this->exportObjects; + } /** * @throws InvalidArgumentException * @throws UnknownEventTypeException @@ -35109,6 +35157,14 @@ final class DispatchingEmitter implements \PHPUnit\Event\Emitter { $this->dispatcher->dispatch(new \PHPUnit\Event\Test\PreparationStarted($this->telemetryInfo(), $test)); } + /** + * @throws InvalidArgumentException + * @throws UnknownEventTypeException + */ + public function testPreparationFailed(\PHPUnit\Event\Code\Test $test) : void + { + $this->dispatcher->dispatch(new \PHPUnit\Event\Test\PreparationFailed($this->telemetryInfo(), $test)); + } /** * @psalm-param class-string $testClassName * @@ -35203,10 +35259,7 @@ final class DispatchingEmitter implements \PHPUnit\Event\Emitter */ public function testAssertionSucceeded(mixed $value, Constraint\Constraint $constraint, string $message) : void { - if (!$this->hasSubscriberFor(\PHPUnit\Event\Test\AssertionSucceeded::class)) { - return; - } - $this->dispatcher->dispatch(new \PHPUnit\Event\Test\AssertionSucceeded($this->telemetryInfo(), (new Exporter())->export($value), $constraint->toString(), $constraint->count(), $message)); + $this->dispatcher->dispatch(new \PHPUnit\Event\Test\AssertionSucceeded($this->telemetryInfo(), Exporter::export($value, $this->exportObjects), $constraint->toString($this->exportObjects), $constraint->count(), $message)); } /** * @throws InvalidArgumentException @@ -35214,10 +35267,7 @@ final class DispatchingEmitter implements \PHPUnit\Event\Emitter */ public function testAssertionFailed(mixed $value, Constraint\Constraint $constraint, string $message) : void { - if (!$this->hasSubscriberFor(\PHPUnit\Event\Test\AssertionFailed::class)) { - return; - } - $this->dispatcher->dispatch(new \PHPUnit\Event\Test\AssertionFailed($this->telemetryInfo(), (new Exporter())->export($value), $constraint->toString(), $constraint->count(), $message)); + $this->dispatcher->dispatch(new \PHPUnit\Event\Test\AssertionFailed($this->telemetryInfo(), Exporter::export($value, $this->exportObjects), $constraint->toString($this->exportObjects), $constraint->count(), $message)); } /** * @psalm-param class-string $className @@ -35288,7 +35338,7 @@ final class DispatchingEmitter implements \PHPUnit\Event\Emitter */ public function testCreatedTestProxy(string $className, array $constructorArguments) : void { - $this->dispatcher->dispatch(new \PHPUnit\Event\Test\TestProxyCreated($this->telemetryInfo(), $className, (new Exporter())->export($constructorArguments))); + $this->dispatcher->dispatch(new \PHPUnit\Event\Test\TestProxyCreated($this->telemetryInfo(), $className, Exporter::export($constructorArguments, $this->exportObjects))); } /** * @psalm-param class-string $className @@ -35370,17 +35420,17 @@ final class DispatchingEmitter implements \PHPUnit\Event\Emitter * @throws InvalidArgumentException * @throws UnknownEventTypeException */ - public function testTriggeredPhpDeprecation(\PHPUnit\Event\Code\Test $test, string $message, string $file, int $line, bool $suppressed) : void + public function testTriggeredPhpDeprecation(\PHPUnit\Event\Code\Test $test, string $message, string $file, int $line, bool $suppressed, bool $ignoredByBaseline) : void { - $this->dispatcher->dispatch(new \PHPUnit\Event\Test\PhpDeprecationTriggered($this->telemetryInfo(), $test, $message, $file, $line, $suppressed)); + $this->dispatcher->dispatch(new \PHPUnit\Event\Test\PhpDeprecationTriggered($this->telemetryInfo(), $test, $message, $file, $line, $suppressed, $ignoredByBaseline)); } /** * @throws InvalidArgumentException * @throws UnknownEventTypeException */ - public function testTriggeredDeprecation(\PHPUnit\Event\Code\Test $test, string $message, string $file, int $line, bool $suppressed) : void + public function testTriggeredDeprecation(\PHPUnit\Event\Code\Test $test, string $message, string $file, int $line, bool $suppressed, bool $ignoredByBaseline) : void { - $this->dispatcher->dispatch(new \PHPUnit\Event\Test\DeprecationTriggered($this->telemetryInfo(), $test, $message, $file, $line, $suppressed)); + $this->dispatcher->dispatch(new \PHPUnit\Event\Test\DeprecationTriggered($this->telemetryInfo(), $test, $message, $file, $line, $suppressed, $ignoredByBaseline)); } /** * @throws InvalidArgumentException @@ -35394,33 +35444,33 @@ final class DispatchingEmitter implements \PHPUnit\Event\Emitter * @throws InvalidArgumentException * @throws UnknownEventTypeException */ - public function testTriggeredNotice(\PHPUnit\Event\Code\Test $test, string $message, string $file, int $line, bool $suppressed) : void + public function testTriggeredNotice(\PHPUnit\Event\Code\Test $test, string $message, string $file, int $line, bool $suppressed, bool $ignoredByBaseline) : void { - $this->dispatcher->dispatch(new \PHPUnit\Event\Test\NoticeTriggered($this->telemetryInfo(), $test, $message, $file, $line, $suppressed)); + $this->dispatcher->dispatch(new \PHPUnit\Event\Test\NoticeTriggered($this->telemetryInfo(), $test, $message, $file, $line, $suppressed, $ignoredByBaseline)); } /** * @throws InvalidArgumentException * @throws UnknownEventTypeException */ - public function testTriggeredPhpNotice(\PHPUnit\Event\Code\Test $test, string $message, string $file, int $line, bool $suppressed) : void + public function testTriggeredPhpNotice(\PHPUnit\Event\Code\Test $test, string $message, string $file, int $line, bool $suppressed, bool $ignoredByBaseline) : void { - $this->dispatcher->dispatch(new \PHPUnit\Event\Test\PhpNoticeTriggered($this->telemetryInfo(), $test, $message, $file, $line, $suppressed)); + $this->dispatcher->dispatch(new \PHPUnit\Event\Test\PhpNoticeTriggered($this->telemetryInfo(), $test, $message, $file, $line, $suppressed, $ignoredByBaseline)); } /** * @throws InvalidArgumentException * @throws UnknownEventTypeException */ - public function testTriggeredWarning(\PHPUnit\Event\Code\Test $test, string $message, string $file, int $line, bool $suppressed) : void + public function testTriggeredWarning(\PHPUnit\Event\Code\Test $test, string $message, string $file, int $line, bool $suppressed, bool $ignoredByBaseline) : void { - $this->dispatcher->dispatch(new \PHPUnit\Event\Test\WarningTriggered($this->telemetryInfo(), $test, $message, $file, $line, $suppressed)); + $this->dispatcher->dispatch(new \PHPUnit\Event\Test\WarningTriggered($this->telemetryInfo(), $test, $message, $file, $line, $suppressed, $ignoredByBaseline)); } /** * @throws InvalidArgumentException * @throws UnknownEventTypeException */ - public function testTriggeredPhpWarning(\PHPUnit\Event\Code\Test $test, string $message, string $file, int $line, bool $suppressed) : void + public function testTriggeredPhpWarning(\PHPUnit\Event\Code\Test $test, string $message, string $file, int $line, bool $suppressed, bool $ignoredByBaseline) : void { - $this->dispatcher->dispatch(new \PHPUnit\Event\Test\PhpWarningTriggered($this->telemetryInfo(), $test, $message, $file, $line, $suppressed)); + $this->dispatcher->dispatch(new \PHPUnit\Event\Test\PhpWarningTriggered($this->telemetryInfo(), $test, $message, $file, $line, $suppressed, $ignoredByBaseline)); } /** * @throws InvalidArgumentException @@ -35590,16 +35640,6 @@ final class DispatchingEmitter implements \PHPUnit\Event\Emitter $this->previousSnapshot = $current; return $info; } - /** - * @psalm-param class-string $className - */ - private function hasSubscriberFor(string $className) : bool - { - if (!$this->dispatcher instanceof \PHPUnit\Event\SubscribableDispatcher) { - return \true; - } - return $this->dispatcher->hasSubscriberFor($className); - } } telemetryInfo = $telemetryInfo; $this->test = $test; @@ -37516,6 +37560,7 @@ final class DeprecationTriggered implements Event $this->file = $file; $this->line = $line; $this->suppressed = $suppressed; + $this->ignoredByBaseline = $ignoredByBaseline; } public function telemetryInfo() : Telemetry\Info { @@ -37550,13 +37595,23 @@ final class DeprecationTriggered implements Event { return $this->suppressed; } + public function ignoredByBaseline() : bool + { + return $this->ignoredByBaseline; + } public function asString() : string { $message = $this->message; if (!empty($message)) { $message = PHP_EOL . $message; } - return sprintf('Test Triggered %sDeprecation (%s)%s', $this->wasSuppressed() ? 'Suppressed ' : '', $this->test->id(), $message); + $status = ''; + if ($this->ignoredByBaseline) { + $status = 'Baseline-Ignored '; + } elseif ($this->suppressed) { + $status = 'Suppressed '; + } + return sprintf('Test Triggered %sDeprecation (%s)%s', $status, $this->test->id(), $message); } } telemetryInfo = $telemetryInfo; $this->test = $test; @@ -37750,6 +37806,7 @@ final class NoticeTriggered implements Event $this->file = $file; $this->line = $line; $this->suppressed = $suppressed; + $this->ignoredByBaseline = $ignoredByBaseline; } public function telemetryInfo() : Telemetry\Info { @@ -37784,13 +37841,23 @@ final class NoticeTriggered implements Event { return $this->suppressed; } + public function ignoredByBaseline() : bool + { + return $this->ignoredByBaseline; + } public function asString() : string { $message = $this->message; if (!empty($message)) { $message = PHP_EOL . $message; } - return sprintf('Test Triggered %sNotice (%s)%s', $this->wasSuppressed() ? 'Suppressed ' : '', $this->test->id(), $message); + $status = ''; + if ($this->ignoredByBaseline) { + $status = 'Baseline-Ignored '; + } elseif ($this->suppressed) { + $status = 'Suppressed '; + } + return sprintf('Test Triggered %sNotice (%s)%s', $status, $this->test->id(), $message); } } telemetryInfo = $telemetryInfo; $this->test = $test; @@ -37867,6 +37935,7 @@ final class PhpDeprecationTriggered implements Event $this->file = $file; $this->line = $line; $this->suppressed = $suppressed; + $this->ignoredByBaseline = $ignoredByBaseline; } public function telemetryInfo() : Telemetry\Info { @@ -37901,13 +37970,23 @@ final class PhpDeprecationTriggered implements Event { return $this->suppressed; } + public function ignoredByBaseline() : bool + { + return $this->ignoredByBaseline; + } public function asString() : string { $message = $this->message; if (!empty($message)) { $message = PHP_EOL . $message; } - return sprintf('Test Triggered %sPHP Deprecation (%s)%s', $this->wasSuppressed() ? 'Suppressed ' : '', $this->test->id(), $message); + $status = ''; + if ($this->ignoredByBaseline) { + $status = 'Baseline-Ignored '; + } elseif ($this->suppressed) { + $status = 'Suppressed '; + } + return sprintf('Test Triggered %sPHP Deprecation (%s)%s', $status, $this->test->id(), $message); } } telemetryInfo = $telemetryInfo; $this->test = $test; @@ -37984,6 +38064,7 @@ final class PhpNoticeTriggered implements Event $this->file = $file; $this->line = $line; $this->suppressed = $suppressed; + $this->ignoredByBaseline = $ignoredByBaseline; } public function telemetryInfo() : Telemetry\Info { @@ -38018,13 +38099,23 @@ final class PhpNoticeTriggered implements Event { return $this->suppressed; } + public function ignoredByBaseline() : bool + { + return $this->ignoredByBaseline; + } public function asString() : string { $message = $this->message; if (!empty($message)) { $message = PHP_EOL . $message; } - return sprintf('Test Triggered %sPHP Notice (%s)%s', $this->wasSuppressed() ? 'Suppressed ' : '', $this->test->id(), $message); + $status = ''; + if ($this->ignoredByBaseline) { + $status = 'Baseline-Ignored '; + } elseif ($this->suppressed) { + $status = 'Suppressed '; + } + return sprintf('Test Triggered %sPHP Notice (%s)%s', $status, $this->test->id(), $message); } } telemetryInfo = $telemetryInfo; $this->test = $test; @@ -38101,6 +38193,7 @@ final class PhpWarningTriggered implements Event $this->file = $file; $this->line = $line; $this->suppressed = $suppressed; + $this->ignoredByBaseline = $ignoredByBaseline; } public function telemetryInfo() : Telemetry\Info { @@ -38135,13 +38228,23 @@ final class PhpWarningTriggered implements Event { return $this->suppressed; } + public function ignoredByBaseline() : bool + { + return $this->ignoredByBaseline; + } public function asString() : string { $message = $this->message; if (!empty($message)) { $message = PHP_EOL . $message; } - return sprintf('Test Triggered %sPHP Warning (%s)%s', $this->wasSuppressed() ? 'Suppressed ' : '', $this->test->id(), $message); + $status = ''; + if ($this->ignoredByBaseline) { + $status = 'Baseline-Ignored '; + } elseif ($this->suppressed) { + $status = 'Suppressed '; + } + return sprintf('Test Triggered %sPHP Warning (%s)%s', $status, $this->test->id(), $message); } } telemetryInfo = $telemetryInfo; $this->test = $test; @@ -38447,6 +38551,7 @@ final class WarningTriggered implements Event $this->file = $file; $this->line = $line; $this->suppressed = $suppressed; + $this->ignoredByBaseline = $ignoredByBaseline; } public function telemetryInfo() : Telemetry\Info { @@ -38481,13 +38586,23 @@ final class WarningTriggered implements Event { return $this->suppressed; } + public function ignoredByBaseline() : bool + { + return $this->ignoredByBaseline; + } public function asString() : string { $message = $this->message; if (!empty($message)) { $message = PHP_EOL . $message; } - return sprintf('Test Triggered %sWarning (%s)%s', $this->wasSuppressed() ? 'Suppressed ' : '', $this->test->id(), $message); + $status = ''; + if ($this->ignoredByBaseline) { + $status = 'Baseline-Ignored '; + } elseif ($this->suppressed) { + $status = 'Suppressed '; + } + return sprintf('Test Triggered %sWarning (%s)%s', $status, $this->test->id(), $message); } } telemetryInfo = $telemetryInfo; + $this->test = $test; + } + public function telemetryInfo() : Telemetry\Info + { + return $this->telemetryInfo; + } + public function test() : Code\Test + { + return $this->test; + } + public function asString() : string + { + return sprintf('Test Preparation Failed (%s)', $this->test->id()); + } +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\Event\Test; + +use PHPUnit\Event\Subscriber; +/** + * @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit + */ +interface PreparationFailedSubscriber extends Subscriber +{ + public function notify(\PHPUnit\Event\Test\PreparationFailed $event) : void; +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\Event\Test; + use function sprintf; use PHPUnit\Event\Code; use PHPUnit\Event\Event; @@ -41829,10 +42009,13 @@ final class Facade $this->deferredDispatcher()->registerTracer($tracer); } /** @noinspection PhpUnused */ - public function initForIsolation(HRTime $offset) : \PHPUnit\Event\CollectingDispatcher + public function initForIsolation(HRTime $offset, bool $exportObjects) : \PHPUnit\Event\CollectingDispatcher { $dispatcher = new \PHPUnit\Event\CollectingDispatcher(); $this->emitter = new \PHPUnit\Event\DispatchingEmitter($dispatcher, new \PHPUnit\Event\Telemetry\System(new \PHPUnit\Event\Telemetry\SystemStopWatchWithOffset($offset), new \PHPUnit\Event\Telemetry\SystemMemoryMeter(), $this->garbageCollectorStatusProvider())); + if ($exportObjects) { + $this->emitter->exportObjects(); + } $this->sealed = \true; return $dispatcher; } @@ -41878,7 +42061,7 @@ final class Facade } private function registerDefaultTypes(\PHPUnit\Event\TypeMap $typeMap) : void { - $defaultEvents = [\PHPUnit\Event\Application\Started::class, \PHPUnit\Event\Application\Finished::class, \PHPUnit\Event\Test\DataProviderMethodCalled::class, \PHPUnit\Event\Test\DataProviderMethodFinished::class, \PHPUnit\Event\Test\MarkedIncomplete::class, \PHPUnit\Event\Test\AfterLastTestMethodCalled::class, \PHPUnit\Event\Test\AfterLastTestMethodFinished::class, \PHPUnit\Event\Test\AfterTestMethodCalled::class, \PHPUnit\Event\Test\AfterTestMethodFinished::class, \PHPUnit\Event\Test\AssertionSucceeded::class, \PHPUnit\Event\Test\AssertionFailed::class, \PHPUnit\Event\Test\BeforeFirstTestMethodCalled::class, \PHPUnit\Event\Test\BeforeFirstTestMethodErrored::class, \PHPUnit\Event\Test\BeforeFirstTestMethodFinished::class, \PHPUnit\Event\Test\BeforeTestMethodCalled::class, \PHPUnit\Event\Test\BeforeTestMethodFinished::class, \PHPUnit\Event\Test\ComparatorRegistered::class, \PHPUnit\Event\Test\ConsideredRisky::class, \PHPUnit\Event\Test\DeprecationTriggered::class, \PHPUnit\Event\Test\Errored::class, \PHPUnit\Event\Test\ErrorTriggered::class, \PHPUnit\Event\Test\Failed::class, \PHPUnit\Event\Test\Finished::class, \PHPUnit\Event\Test\NoticeTriggered::class, \PHPUnit\Event\Test\Passed::class, \PHPUnit\Event\Test\PhpDeprecationTriggered::class, \PHPUnit\Event\Test\PhpNoticeTriggered::class, \PHPUnit\Event\Test\PhpunitDeprecationTriggered::class, \PHPUnit\Event\Test\PhpunitErrorTriggered::class, \PHPUnit\Event\Test\PhpunitWarningTriggered::class, \PHPUnit\Event\Test\PhpWarningTriggered::class, \PHPUnit\Event\Test\PostConditionCalled::class, \PHPUnit\Event\Test\PostConditionFinished::class, \PHPUnit\Event\Test\PreConditionCalled::class, \PHPUnit\Event\Test\PreConditionFinished::class, \PHPUnit\Event\Test\PreparationStarted::class, \PHPUnit\Event\Test\Prepared::class, \PHPUnit\Event\Test\PrintedUnexpectedOutput::class, \PHPUnit\Event\Test\Skipped::class, \PHPUnit\Event\Test\WarningTriggered::class, \PHPUnit\Event\Test\MockObjectCreated::class, \PHPUnit\Event\Test\MockObjectForAbstractClassCreated::class, \PHPUnit\Event\Test\MockObjectForIntersectionOfInterfacesCreated::class, \PHPUnit\Event\Test\MockObjectForTraitCreated::class, \PHPUnit\Event\Test\MockObjectFromWsdlCreated::class, \PHPUnit\Event\Test\PartialMockObjectCreated::class, \PHPUnit\Event\Test\TestProxyCreated::class, \PHPUnit\Event\Test\TestStubCreated::class, \PHPUnit\Event\Test\TestStubForIntersectionOfInterfacesCreated::class, \PHPUnit\Event\TestRunner\BootstrapFinished::class, \PHPUnit\Event\TestRunner\Configured::class, \PHPUnit\Event\TestRunner\EventFacadeSealed::class, \PHPUnit\Event\TestRunner\ExecutionAborted::class, \PHPUnit\Event\TestRunner\ExecutionFinished::class, \PHPUnit\Event\TestRunner\ExecutionStarted::class, \PHPUnit\Event\TestRunner\ExtensionLoadedFromPhar::class, \PHPUnit\Event\TestRunner\ExtensionBootstrapped::class, \PHPUnit\Event\TestRunner\Finished::class, \PHPUnit\Event\TestRunner\Started::class, \PHPUnit\Event\TestRunner\DeprecationTriggered::class, \PHPUnit\Event\TestRunner\WarningTriggered::class, \PHPUnit\Event\TestRunner\GarbageCollectionDisabled::class, \PHPUnit\Event\TestRunner\GarbageCollectionTriggered::class, \PHPUnit\Event\TestRunner\GarbageCollectionEnabled::class, \PHPUnit\Event\TestSuite\Filtered::class, \PHPUnit\Event\TestSuite\Finished::class, \PHPUnit\Event\TestSuite\Loaded::class, \PHPUnit\Event\TestSuite\Skipped::class, \PHPUnit\Event\TestSuite\Sorted::class, \PHPUnit\Event\TestSuite\Started::class]; + $defaultEvents = [\PHPUnit\Event\Application\Started::class, \PHPUnit\Event\Application\Finished::class, \PHPUnit\Event\Test\DataProviderMethodCalled::class, \PHPUnit\Event\Test\DataProviderMethodFinished::class, \PHPUnit\Event\Test\MarkedIncomplete::class, \PHPUnit\Event\Test\AfterLastTestMethodCalled::class, \PHPUnit\Event\Test\AfterLastTestMethodFinished::class, \PHPUnit\Event\Test\AfterTestMethodCalled::class, \PHPUnit\Event\Test\AfterTestMethodFinished::class, \PHPUnit\Event\Test\AssertionSucceeded::class, \PHPUnit\Event\Test\AssertionFailed::class, \PHPUnit\Event\Test\BeforeFirstTestMethodCalled::class, \PHPUnit\Event\Test\BeforeFirstTestMethodErrored::class, \PHPUnit\Event\Test\BeforeFirstTestMethodFinished::class, \PHPUnit\Event\Test\BeforeTestMethodCalled::class, \PHPUnit\Event\Test\BeforeTestMethodFinished::class, \PHPUnit\Event\Test\ComparatorRegistered::class, \PHPUnit\Event\Test\ConsideredRisky::class, \PHPUnit\Event\Test\DeprecationTriggered::class, \PHPUnit\Event\Test\Errored::class, \PHPUnit\Event\Test\ErrorTriggered::class, \PHPUnit\Event\Test\Failed::class, \PHPUnit\Event\Test\Finished::class, \PHPUnit\Event\Test\NoticeTriggered::class, \PHPUnit\Event\Test\Passed::class, \PHPUnit\Event\Test\PhpDeprecationTriggered::class, \PHPUnit\Event\Test\PhpNoticeTriggered::class, \PHPUnit\Event\Test\PhpunitDeprecationTriggered::class, \PHPUnit\Event\Test\PhpunitErrorTriggered::class, \PHPUnit\Event\Test\PhpunitWarningTriggered::class, \PHPUnit\Event\Test\PhpWarningTriggered::class, \PHPUnit\Event\Test\PostConditionCalled::class, \PHPUnit\Event\Test\PostConditionFinished::class, \PHPUnit\Event\Test\PreConditionCalled::class, \PHPUnit\Event\Test\PreConditionFinished::class, \PHPUnit\Event\Test\PreparationStarted::class, \PHPUnit\Event\Test\Prepared::class, \PHPUnit\Event\Test\PreparationFailed::class, \PHPUnit\Event\Test\PrintedUnexpectedOutput::class, \PHPUnit\Event\Test\Skipped::class, \PHPUnit\Event\Test\WarningTriggered::class, \PHPUnit\Event\Test\MockObjectCreated::class, \PHPUnit\Event\Test\MockObjectForAbstractClassCreated::class, \PHPUnit\Event\Test\MockObjectForIntersectionOfInterfacesCreated::class, \PHPUnit\Event\Test\MockObjectForTraitCreated::class, \PHPUnit\Event\Test\MockObjectFromWsdlCreated::class, \PHPUnit\Event\Test\PartialMockObjectCreated::class, \PHPUnit\Event\Test\TestProxyCreated::class, \PHPUnit\Event\Test\TestStubCreated::class, \PHPUnit\Event\Test\TestStubForIntersectionOfInterfacesCreated::class, \PHPUnit\Event\TestRunner\BootstrapFinished::class, \PHPUnit\Event\TestRunner\Configured::class, \PHPUnit\Event\TestRunner\EventFacadeSealed::class, \PHPUnit\Event\TestRunner\ExecutionAborted::class, \PHPUnit\Event\TestRunner\ExecutionFinished::class, \PHPUnit\Event\TestRunner\ExecutionStarted::class, \PHPUnit\Event\TestRunner\ExtensionLoadedFromPhar::class, \PHPUnit\Event\TestRunner\ExtensionBootstrapped::class, \PHPUnit\Event\TestRunner\Finished::class, \PHPUnit\Event\TestRunner\Started::class, \PHPUnit\Event\TestRunner\DeprecationTriggered::class, \PHPUnit\Event\TestRunner\WarningTriggered::class, \PHPUnit\Event\TestRunner\GarbageCollectionDisabled::class, \PHPUnit\Event\TestRunner\GarbageCollectionTriggered::class, \PHPUnit\Event\TestRunner\GarbageCollectionEnabled::class, \PHPUnit\Event\TestSuite\Filtered::class, \PHPUnit\Event\TestSuite\Finished::class, \PHPUnit\Event\TestSuite\Loaded::class, \PHPUnit\Event\TestSuite\Skipped::class, \PHPUnit\Event\TestSuite\Sorted::class, \PHPUnit\Event\TestSuite\Started::class]; foreach ($defaultEvents as $eventClass) { $typeMap->addMapping($eventClass . 'Subscriber', $eventClass); } @@ -43897,14 +44080,15 @@ namespace PHPUnit\Event\Code; use function assert; use function debug_backtrace; use function is_numeric; +use PHPUnit\Event\Facade as EventFacade; use PHPUnit\Event\TestData\DataFromDataProvider; use PHPUnit\Event\TestData\DataFromTestDependency; use PHPUnit\Event\TestData\MoreThanOneDataSetFromDataProviderException; use PHPUnit\Event\TestData\TestDataCollection; use PHPUnit\Framework\TestCase; use PHPUnit\Metadata\Parser\Registry as MetadataRegistry; +use PHPUnit\Util\Exporter; use PHPUnit\Util\Reflection; -use PHPUnit\SebastianBergmann\Exporter\Exporter; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ @@ -43943,10 +44127,10 @@ final class TestMethodBuilder if (is_numeric($dataSetName)) { $dataSetName = (int) $dataSetName; } - $testData[] = DataFromDataProvider::from($dataSetName, (new Exporter())->export($testCase->providedData())); + $testData[] = DataFromDataProvider::from($dataSetName, Exporter::export($testCase->providedData(), EventFacade::emitter()->exportsObjects())); } if ($testCase->hasDependencyInput()) { - $testData[] = DataFromTestDependency::from((new Exporter())->export($testCase->dependencyInput())); + $testData[] = DataFromTestDependency::from(Exporter::export($testCase->dependencyInput(), EventFacade::emitter()->exportsObjects())); } return TestDataCollection::fromArray($testData); } @@ -44074,17 +44258,21 @@ final class TestSuiteBuilder try { $reflector = new ReflectionMethod($className, $methodName); return new \PHPUnit\Event\TestSuite\TestSuiteForTestMethodWithDataProvider($testSuite->name(), $testSuite->count(), TestCollection::fromArray($tests), $className, $methodName, $reflector->getFileName(), $reflector->getStartLine()); + // @codeCoverageIgnoreStart } catch (ReflectionException $e) { throw new RuntimeException($e->getMessage(), $e->getCode(), $e); } + // @codeCoverageIgnoreEnd } if ($testSuite->isForTestClass()) { try { $reflector = new ReflectionClass($testSuite->name()); return new \PHPUnit\Event\TestSuite\TestSuiteForTestClass($testSuite->name(), $testSuite->count(), TestCollection::fromArray($tests), $reflector->getFileName(), $reflector->getStartLine()); + // @codeCoverageIgnoreStart } catch (ReflectionException $e) { throw new RuntimeException($e->getMessage(), $e->getCode(), $e); } + // @codeCoverageIgnoreEnd } return new \PHPUnit\Event\TestSuite\TestSuiteWithName($testSuite->name(), $testSuite->count(), TestCollection::fromArray($tests)); } @@ -45610,6 +45798,27 @@ abstract class Assert { static::assertThat($actual, new StringEqualsStringIgnoringLineEndings($expected), $message); } + /** + * Asserts that a string matches a given format string. + * + * @throws ExpectationFailedException + */ + public static final function assertFileMatchesFormat(string $format, string $actualFile, string $message = '') : void + { + static::assertFileExists($actualFile, $message); + static::assertThat(file_get_contents($actualFile), new StringMatchesFormatDescription($format), $message); + } + /** + * Asserts that a string matches a given format string. + * + * @throws ExpectationFailedException + */ + public static final function assertFileMatchesFormatFile(string $formatFile, string $actualFile, string $message = '') : void + { + static::assertFileExists($formatFile, $message); + static::assertFileExists($actualFile, $message); + static::assertThat(file_get_contents($actualFile), new StringMatchesFormatDescription(file_get_contents($formatFile)), $message); + } /** * Asserts that a string matches a given format string. * @@ -45623,6 +45832,8 @@ abstract class Assert * Asserts that a string does not match a given format string. * * @throws ExpectationFailedException + * + * @deprecated https://github.com/sebastianbergmann/phpunit/issues/5472 */ public static final function assertStringNotMatchesFormat(string $format, string $string, string $message = '') : void { @@ -45642,6 +45853,8 @@ abstract class Assert * Asserts that a string does not match a given format string. * * @throws ExpectationFailedException + * + * @deprecated https://github.com/sebastianbergmann/phpunit/issues/5472 */ public static final function assertStringNotMatchesFormatFile(string $formatFile, string $string, string $message = '') : void { @@ -47875,6 +48088,36 @@ if (!function_exists('PHPUnit\\Framework\\assertStringEqualsStringIgnoringLineEn \PHPUnit\Framework\Assert::assertStringEqualsStringIgnoringLineEndings(...func_get_args()); } } +if (!function_exists('PHPUnit\\Framework\\assertFileMatchesFormat')) { + /** + * Asserts that a string matches a given format string. + * + * @throws ExpectationFailedException + * + * @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit + * + * @see Assert::assertFileMatchesFormat + */ + function assertFileMatchesFormat(string $format, string $actualFile, string $message = '') : void + { + \PHPUnit\Framework\Assert::assertFileMatchesFormat(...func_get_args()); + } +} +if (!function_exists('PHPUnit\\Framework\\assertFileMatchesFormatFile')) { + /** + * Asserts that a string matches a given format string. + * + * @throws ExpectationFailedException + * + * @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit + * + * @see Assert::assertFileMatchesFormatFile + */ + function assertFileMatchesFormatFile(string $formatFile, string $actualFile, string $message = '') : void + { + \PHPUnit\Framework\Assert::assertFileMatchesFormatFile(...func_get_args()); + } +} if (!function_exists('PHPUnit\\Framework\\assertStringMatchesFormat')) { /** * Asserts that a string matches a given format string. @@ -47899,6 +48142,7 @@ if (!function_exists('PHPUnit\\Framework\\assertStringNotMatchesFormat')) { * @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit * * @see Assert::assertStringNotMatchesFormat + * @deprecated https://github.com/sebastianbergmann/phpunit/issues/5472 */ function assertStringNotMatchesFormat(string $format, string $string, string $message = '') : void { @@ -47929,6 +48173,7 @@ if (!function_exists('PHPUnit\\Framework\\assertStringNotMatchesFormatFile')) { * @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit * * @see Assert::assertStringNotMatchesFormatFile + * @deprecated https://github.com/sebastianbergmann/phpunit/issues/5472 */ function assertStringNotMatchesFormatFile(string $formatFile, string $string, string $message = '') : void { @@ -49639,6 +49884,8 @@ use Attribute; * @psalm-immutable * * @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit + * + * @deprecated https://github.com/sebastianbergmann/phpunit/issues/5513 */ #[Attribute(Attribute::TARGET_CLASS | Attribute::IS_REPEATABLE)] final class IgnoreClassForCodeCoverage @@ -49680,6 +49927,8 @@ use Attribute; * @psalm-immutable * * @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit + * + * @deprecated https://github.com/sebastianbergmann/phpunit/issues/5513 */ #[Attribute(Attribute::TARGET_CLASS | Attribute::IS_REPEATABLE)] final class IgnoreFunctionForCodeCoverage @@ -49721,6 +49970,8 @@ use Attribute; * @psalm-immutable * * @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit + * + * @deprecated https://github.com/sebastianbergmann/phpunit/issues/5513 */ #[Attribute(Attribute::TARGET_CLASS | Attribute::IS_REPEATABLE)] final class IgnoreMethodForCodeCoverage @@ -50854,6 +51105,7 @@ declare (strict_types=1); */ namespace PHPUnit\Framework\Constraint; +use PHPUnit\Util\Exporter; /** * @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit */ @@ -50867,9 +51119,9 @@ final class GreaterThan extends \PHPUnit\Framework\Constraint\Constraint /** * Returns a string representation of the constraint. */ - public function toString() : string + public function toString(bool $exportObjects = \false) : string { - return 'is greater than ' . $this->exporter()->export($this->value); + return 'is greater than ' . Exporter::export($this->value, $exportObjects); } /** * Evaluates the constraint for parameter $other. Returns true if the @@ -50934,7 +51186,7 @@ final class IsEmpty extends \PHPUnit\Framework\Constraint\Constraint protected function failureDescription(mixed $other) : string { $type = gettype($other); - return sprintf('%s %s %s', str_starts_with($type, 'a') || str_starts_with($type, 'o') ? 'an' : 'a', $type, $this->toString()); + return sprintf('%s %s %s', str_starts_with($type, 'a') || str_starts_with($type, 'o') ? 'an' : 'a', $type, $this->toString(\true)); } } exporter()->export($this->value); + return 'is less than ' . Exporter::export($this->value, $exportObjects); } /** * Evaluates the constraint for parameter $other. Returns true if the @@ -51018,18 +51271,19 @@ declare (strict_types=1); */ namespace PHPUnit\Framework\Constraint; +use function gettype; use function sprintf; +use function strtolower; use Countable; use PHPUnit\Framework\ExpectationFailedException; use PHPUnit\Framework\SelfDescribing; +use PHPUnit\Util\Exporter; use PHPUnit\SebastianBergmann\Comparator\ComparisonFailure; -use PHPUnit\SebastianBergmann\Exporter\Exporter; /** * @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit */ abstract class Constraint implements Countable, SelfDescribing { - private ?Exporter $exporter = null; /** * Evaluates the constraint for parameter $other. * @@ -51063,12 +51317,12 @@ abstract class Constraint implements Countable, SelfDescribing { return 1; } - protected function exporter() : Exporter + /** + * @deprecated + */ + protected function exporter() : \PHPUnit\SebastianBergmann\Exporter\Exporter { - if ($this->exporter === null) { - $this->exporter = new Exporter(); - } - return $this->exporter; + return new \PHPUnit\SebastianBergmann\Exporter\Exporter(); } /** * Evaluates the constraint for parameter $other. Returns true if the @@ -51118,7 +51372,7 @@ abstract class Constraint implements Countable, SelfDescribing */ protected function failureDescription(mixed $other) : string { - return $this->exporter()->export($other) . ' ' . $this->toString(); + return Exporter::export($other, \true) . ' ' . $this->toString(\true); } /** * Returns a custom string representation of the constraint object when it @@ -51154,7 +51408,7 @@ abstract class Constraint implements Countable, SelfDescribing if ($string === '') { return ''; } - return $this->exporter()->export($other) . ' ' . $string; + return Exporter::export($other, \true) . ' ' . $string; } /** * Reduces the sub-expression starting at $this by skipping degenerate @@ -51220,6 +51474,25 @@ abstract class Constraint implements Countable, SelfDescribing { return $this; } + /** + * @psalm-return non-empty-string + */ + protected function valueToTypeStringFragment(mixed $value) : string + { + $type = strtolower(gettype($value)); + if ($type === 'double') { + $type = 'float'; + } + if ($type === 'resource (closed)') { + $type = 'closed resource'; + } + return match ($type) { + 'array', 'integer', 'object' => 'an ' . $type . ' ', + 'boolean', 'closed resource', 'float', 'resource', 'string' => 'a ' . $type . ' ', + 'null' => 'null ', + default => 'a value of ' . $type . ' ', + }; + } } value)) { @@ -51304,7 +51578,7 @@ final class IsEqual extends \PHPUnit\Framework\Constraint\Constraint if ($this->delta != 0) { $delta = sprintf(' with delta <%F>', $this->delta); } - return sprintf('is equal to %s%s', $this->exporter()->export($this->value), $delta); + return sprintf('is equal to %s%s', Exporter::export($this->value, $exportObjects), $delta); } } value)) { if (str_contains($this->value, "\n")) { @@ -51380,7 +51655,7 @@ final class IsEqualCanonicalizing extends \PHPUnit\Framework\Constraint\Constrai } return sprintf("is equal to '%s'", $this->value); } - return sprintf('is equal to %s', $this->exporter()->export($this->value)); + return sprintf('is equal to %s', Exporter::export($this->value, $exportObjects)); } } value)) { if (str_contains($this->value, "\n")) { @@ -51456,7 +51732,7 @@ final class IsEqualIgnoringCase extends \PHPUnit\Framework\Constraint\Constraint } return sprintf("is equal to '%s'", $this->value); } - return sprintf('is equal to %s', $this->exporter()->export($this->value)); + return sprintf('is equal to %s', Exporter::export($this->value, $exportObjects)); } } ', $this->exporter()->export($this->value), $this->delta); + return sprintf('is equal to %s with delta <%F>', Exporter::export($this->value, $exportObjects), $this->delta); } } exporter()->export($other), $this->exporter()->export($this->expectedCode)); + return sprintf('%s is equal to expected exception code %s', Exporter::export($other, \true), Exporter::export($this->expectedCode, \true)); } } expectedMessage === '') { return 'exception message is empty'; } - return 'exception message contains ' . $this->exporter()->export($this->expectedMessage); + return 'exception message contains ' . Exporter::export($this->expectedMessage); } protected function matches(mixed $other) : bool { @@ -51706,6 +51985,7 @@ namespace PHPUnit\Framework\Constraint; use function preg_match; use function sprintf; use Exception; +use PHPUnit\Util\Exporter; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ @@ -51718,7 +51998,7 @@ final class ExceptionMessageMatchesRegularExpression extends \PHPUnit\Framework\ } public function toString() : string { - return 'exception message matches ' . $this->exporter()->export($this->regularExpression); + return 'exception message matches ' . Exporter::export($this->regularExpression); } /** * Evaluates the constraint for parameter $other. Returns true if the @@ -51998,6 +52278,7 @@ use function is_object; use function is_string; use function sprintf; use PHPUnit\Framework\ExpectationFailedException; +use PHPUnit\Util\Exporter; use PHPUnit\SebastianBergmann\Comparator\ComparisonFailure; /** * @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit @@ -52035,7 +52316,7 @@ final class IsIdentical extends \PHPUnit\Framework\Constraint\Constraint } // if both values are array, make sure a diff is generated if (is_array($this->value) && is_array($other)) { - $f = new ComparisonFailure($this->value, $other, $this->exporter()->export($this->value), $this->exporter()->export($other)); + $f = new ComparisonFailure($this->value, $other, Exporter::export($this->value, \true), Exporter::export($other, \true)); } $this->fail($other, $description, $f); } @@ -52044,12 +52325,12 @@ final class IsIdentical extends \PHPUnit\Framework\Constraint\Constraint /** * Returns a string representation of the constraint. */ - public function toString() : string + public function toString(bool $exportObjects = \false) : string { if (is_object($this->value)) { return 'is identical to an object of class "' . $this->value::class . '"'; } - return 'is identical to ' . $this->exporter()->export($this->value); + return 'is identical to ' . Exporter::export($this->value, $exportObjects); } /** * Returns the description of the failure. @@ -52343,7 +52624,7 @@ final class ObjectEquals extends \PHPUnit\Framework\Constraint\Constraint } protected function failureDescription(mixed $other) : string { - return $this->toString(); + return $this->toString(\true); } } toString()); + return sprintf('object of class "%s" %s', $other::class, $this->toString(\true)); } - return sprintf('"%s" (%s) %s', $other, gettype($other), $this->toString()); + return sprintf('"%s" (%s) %s', $other, gettype($other), $this->toString(\true)); } } valueToTypeStringFragment($other) . 'is valid JSON'; + } if ($other === '') { return 'an empty string is valid JSON'; } - json_decode($other); - return sprintf('%s is valid JSON (%s)', $this->exporter()->shortenedExport($other), $this->determineJsonError(json_last_error())); + return sprintf('a string is valid JSON (%s)', $this->determineJsonError($other)); } - private function determineJsonError(int $error) : string + private function determineJsonError(string $json) : string { - return match ($error) { + json_decode($json); + return match (json_last_error()) { \JSON_ERROR_NONE => '', \JSON_ERROR_DEPTH => 'Maximum stack depth exceeded', \JSON_ERROR_STATE_MISMATCH => 'Underflow or the modes mismatch', @@ -53050,25 +53335,28 @@ declare (strict_types=1); namespace PHPUnit\Framework\Constraint; use function is_string; +use function mb_detect_encoding; use function mb_stripos; use function mb_strtolower; use function sprintf; use function str_contains; +use function strlen; use function strtr; +use PHPUnit\Util\Exporter; /** * @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit */ final class StringContains extends \PHPUnit\Framework\Constraint\Constraint { - private readonly string $string; + private readonly string $needle; private readonly bool $ignoreCase; private readonly bool $ignoreLineEndings; - public function __construct(string $string, bool $ignoreCase = \false, bool $ignoreLineEndings = \false) + public function __construct(string $needle, bool $ignoreCase = \false, bool $ignoreLineEndings = \false) { if ($ignoreLineEndings) { - $string = $this->normalizeLineEndings($string); + $needle = $this->normalizeLineEndings($needle); } - $this->string = $string; + $this->needle = $needle; $this->ignoreCase = $ignoreCase; $this->ignoreLineEndings = $ignoreLineEndings; } @@ -53077,11 +53365,20 @@ final class StringContains extends \PHPUnit\Framework\Constraint\Constraint */ public function toString() : string { - $string = $this->string; + $needle = $this->needle; if ($this->ignoreCase) { - $string = mb_strtolower($this->string, 'UTF-8'); + $needle = mb_strtolower($this->needle, 'UTF-8'); } - return sprintf('contains "%s"', $string); + return sprintf('contains "%s" [%s](length: %s)', $needle, $this->getDetectedEncoding($needle), strlen($needle)); + } + public function failureDescription(mixed $other) : string + { + $stringifiedHaystack = Exporter::export($other, \true); + $haystackEncoding = $this->getDetectedEncoding($other); + $haystackLength = $this->getHaystackLength($other); + $haystackInformation = sprintf('%s [%s](length: %s) ', $stringifiedHaystack, $haystackEncoding, $haystackLength); + $needleInformation = $this->toString(\true); + return $haystackInformation . $needleInformation; } /** * Evaluates the constraint for parameter $other. Returns true if the @@ -53089,31 +53386,56 @@ final class StringContains extends \PHPUnit\Framework\Constraint\Constraint */ protected function matches(mixed $other) : bool { - if ('' === $this->string) { + $haystack = $other; + if ('' === $this->needle) { return \true; } - if (!is_string($other)) { + if (!is_string($haystack)) { return \false; } if ($this->ignoreLineEndings) { - $other = $this->normalizeLineEndings($other); + $haystack = $this->normalizeLineEndings($haystack); } if ($this->ignoreCase) { /* - * We must use the multi byte safe version so we can accurately compare non latin upper characters with + * We must use the multibyte-safe version, so we can accurately compare non-latin uppercase characters with * their lowercase equivalents. */ - return mb_stripos($other, $this->string, 0, 'UTF-8') !== \false; + return mb_stripos($haystack, $this->needle, 0, 'UTF-8') !== \false; } /* - * Use the non multi byte safe functions to see if the string is contained in $other. + * Use the non-multibyte safe functions to see if the string is contained in $other. * - * This function is very fast and we don't care about the character position in the string. + * This function is very fast, and we don't care about the character position in the string. * - * Additionally, we want this method to be binary safe so we can check if some binary data is in other binary + * Additionally, we want this method to be binary safe, so we can check if some binary data is in other binary * data. */ - return str_contains($other, $this->string); + return str_contains($haystack, $this->needle); + } + private function getDetectedEncoding(mixed $other) : string + { + if ($this->ignoreCase) { + return 'Encoding ignored'; + } + if (!is_string($other)) { + return 'Encoding detection failed'; + } + $detectedEncoding = mb_detect_encoding($other, null, \true); + if (!$detectedEncoding) { + return 'Encoding detection failed'; + } + return $detectedEncoding; + } + private function getHaystackLength(mixed $haystack) : int + { + if (!is_string($haystack)) { + return 0; + } + if ($this->ignoreLineEndings) { + $haystack = $this->normalizeLineEndings($haystack); + } + return strlen($haystack); } private function normalizeLineEndings(string $string) : string { @@ -53355,6 +53677,7 @@ namespace PHPUnit\Framework\Constraint; use function array_key_exists; use function is_array; use ArrayAccess; +use PHPUnit\Util\Exporter; /** * @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit */ @@ -53370,7 +53693,7 @@ final class ArrayHasKey extends \PHPUnit\Framework\Constraint\Constraint */ public function toString() : string { - return 'has the key ' . $this->exporter()->export($this->key); + return 'has the key ' . Exporter::export($this->key); } /** * Evaluates the constraint for parameter $other. Returns true if the @@ -53394,7 +53717,7 @@ final class ArrayHasKey extends \PHPUnit\Framework\Constraint\Constraint */ protected function failureDescription(mixed $other) : string { - return 'an array ' . $this->toString(); + return 'an array ' . $this->toString(\true); } } 'an ' . $type . ' ' . $this->toString(), - 'boolean', 'closed resource', 'float', 'resource', 'string' => 'a ' . $type . ' ' . $this->toString(), - 'null' => 'null ' . $this->toString(), - default => 'a value of ' . $type . ' ' . $this->toString(), - }; + return $this->valueToTypeStringFragment($other) . $this->toString(\true); } } exporter()->export($this->value); + return 'contains ' . Exporter::export($this->value, $exportObjects); } /** * Returns the description of the failure. @@ -53500,7 +53810,7 @@ abstract class TraversableContains extends \PHPUnit\Framework\Constraint\Constra */ protected function failureDescription(mixed $other) : string { - return sprintf('%s %s', is_array($other) ? 'an array' : 'a traversable', $this->toString()); + return sprintf('%s %s', is_array($other) ? 'an array' : 'a traversable', $this->toString(\true)); } protected function value() : mixed { @@ -53669,7 +53979,13 @@ use PHPUnit\Framework\UnknownClassOrInterfaceException; */ final class IsInstanceOf extends \PHPUnit\Framework\Constraint\Constraint { + /** + * @psalm-var class-string + */ private readonly string $name; + /** + * @psalm-var 'class'|'interface' + */ private readonly string $type; /** * @throws UnknownClassOrInterfaceException @@ -53708,7 +54024,7 @@ final class IsInstanceOf extends \PHPUnit\Framework\Constraint\Constraint */ protected function failureDescription(mixed $other) : string { - return sprintf('%s is an instance of %s %s', $this->exporter()->shortenedExport($other), $this->type, $this->name); + return $this->valueToTypeStringFragment($other) . $this->toString(\true); } } name = $name; $this->returnType = $returnType; } + /** + * @psalm-return non-empty-string + */ public function name() : string { return $this->name; } public function mayReturn(mixed $value) : bool { - if ($value === null && $this->returnType->allowsNull()) { - return \true; - } return $this->returnType->isAssignable(Type::fromValue($value, \false)); } public function returnTypeDeclaration() : string @@ -55393,6 +55715,8 @@ namespace PHPUnit\Framework\MockObject\Generator; use function sprintf; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit + * + * @deprecated https://github.com/sebastianbergmann/phpunit/issues/5243 */ final class UnknownTraitException extends \PHPUnit\Framework\Exception implements \PHPUnit\Framework\MockObject\Generator\Exception { @@ -55474,8 +55798,14 @@ use Iterator; use IteratorAggregate; use PHPUnit\Framework\InvalidArgumentException; use PHPUnit\Framework\MockObject\ConfigurableMethod; +use PHPUnit\Framework\MockObject\DoubledCloneMethod; +use PHPUnit\Framework\MockObject\Method; use PHPUnit\Framework\MockObject\MockObject; +use PHPUnit\Framework\MockObject\MockObjectApi; use PHPUnit\Framework\MockObject\MockObjectInternal; +use PHPUnit\Framework\MockObject\ProxiedCloneMethod; +use PHPUnit\Framework\MockObject\Stub; +use PHPUnit\Framework\MockObject\StubApi; use PHPUnit\Framework\MockObject\StubInternal; use ReflectionClass; use ReflectionMethod; @@ -55495,13 +55825,7 @@ final class Generator private const EXCLUDED_METHOD_NAMES = ['__CLASS__' => \true, '__DIR__' => \true, '__FILE__' => \true, '__FUNCTION__' => \true, '__LINE__' => \true, '__METHOD__' => \true, '__NAMESPACE__' => \true, '__TRAIT__' => \true, '__clone' => \true, '__halt_compiler' => \true]; private static array $cache = []; /** - * Returns a mock object for the specified class. - * - * @psalm-template RealInstanceType of object - * - * @psalm-param class-string $type - * - * @psalm-return MockObject&RealInstanceType + * Returns a test double for the specified class. * * @throws ClassAlreadyExistsException * @throws ClassIsEnumerationException @@ -55514,7 +55838,7 @@ final class Generator * @throws RuntimeException * @throws UnknownTypeException */ - public function getMock(string $type, ?array $methods = [], array $arguments = [], string $mockClassName = '', bool $callOriginalConstructor = \true, bool $callOriginalClone = \true, bool $callAutoload = \true, bool $cloneArguments = \true, bool $callOriginalMethods = \false, object $proxyTarget = null, bool $allowMockingUnknownTypes = \true, bool $returnValueGeneration = \true) : MockObject + public function testDouble(string $type, bool $mockObject, ?array $methods = [], array $arguments = [], string $mockClassName = '', bool $callOriginalConstructor = \true, bool $callOriginalClone = \true, bool $callAutoload = \true, bool $cloneArguments = \true, bool $callOriginalMethods = \false, object $proxyTarget = null, bool $allowMockingUnknownTypes = \true, bool $returnValueGeneration = \true) : MockObject|Stub { if ($type === Traversable::class) { $type = Iterator::class; @@ -55527,9 +55851,14 @@ final class Generator if (!$callOriginalConstructor && $callOriginalMethods) { throw new \PHPUnit\Framework\MockObject\Generator\OriginalConstructorInvocationRequiredException(); } - $mock = $this->generate($type, $methods, $mockClassName, $callOriginalClone, $callAutoload, $cloneArguments, $callOriginalMethods); + $mock = $this->generate($type, $mockObject, $methods, $mockClassName, $callOriginalClone, $callAutoload, $cloneArguments, $callOriginalMethods); $object = $this->getObject($mock, $type, $callOriginalConstructor, $arguments, $callOriginalMethods, $proxyTarget, $returnValueGeneration); - assert($object instanceof MockObject); + assert($object instanceof $type); + if ($mockObject) { + assert($object instanceof MockObject); + } else { + assert($object instanceof Stub); + } return $object; } /** @@ -55538,7 +55867,7 @@ final class Generator * @throws RuntimeException * @throws UnknownTypeException */ - public function getMockForInterfaces(array $interfaces, bool $callAutoload = \true) : MockObject + public function testDoubleForInterfaceIntersection(array $interfaces, bool $mockObject, bool $callAutoload = \true) : MockObject|Stub { if (count($interfaces) < 2) { throw new \PHPUnit\Framework\MockObject\Generator\RuntimeException('At least two interfaces must be specified'); @@ -55551,7 +55880,7 @@ final class Generator sort($interfaces); $methods = []; foreach ($interfaces as $interface) { - $methods = array_merge($methods, $this->getClassMethods($interface)); + $methods = array_merge($methods, $this->namesOfMethodsIn($interface)); } if (count(array_unique($methods)) < count($methods)) { throw new \PHPUnit\Framework\MockObject\Generator\RuntimeException('Interfaces must not declare the same method'); @@ -55568,7 +55897,7 @@ final class Generator $template = $this->loadTemplate('intersection.tpl'); $template->setVar(['intersection' => $intersectionName, 'interfaces' => implode(', ', $interfaces)]); eval($template->render()); - return $this->getMock($intersectionName); + return $this->testDouble($intersectionName, $mockObject); } /** * Returns a mock object for the specified abstract class with all abstract @@ -55576,12 +55905,6 @@ final class Generator * * Concrete methods to mock can be specified with the $mockedMethods parameter. * - * @psalm-template RealInstanceType of object - * - * @psalm-param class-string $originalClassName - * - * @psalm-return MockObject&RealInstanceType - * * @throws ClassAlreadyExistsException * @throws ClassIsEnumerationException * @throws ClassIsFinalException @@ -55594,8 +55917,10 @@ final class Generator * @throws RuntimeException * @throws UnknownClassException * @throws UnknownTypeException + * + * @deprecated https://github.com/sebastianbergmann/phpunit/issues/5241 */ - public function getMockForAbstractClass(string $originalClassName, array $arguments = [], string $mockClassName = '', bool $callOriginalConstructor = \true, bool $callOriginalClone = \true, bool $callAutoload = \true, array $mockedMethods = null, bool $cloneArguments = \true) : MockObject + public function mockObjectForAbstractClass(string $originalClassName, array $arguments = [], string $mockClassName = '', bool $callOriginalConstructor = \true, bool $callOriginalClone = \true, bool $callAutoload = \true, array $mockedMethods = null, bool $cloneArguments = \true) : MockObject { if (class_exists($originalClassName, $callAutoload) || interface_exists($originalClassName, $callAutoload)) { $reflector = $this->reflectClass($originalClassName); @@ -55608,7 +55933,10 @@ final class Generator if (empty($methods)) { $methods = null; } - return $this->getMock($originalClassName, $methods, $arguments, $mockClassName, $callOriginalConstructor, $callOriginalClone, $callAutoload, $cloneArguments); + $mockObject = $this->testDouble($originalClassName, \true, $methods, $arguments, $mockClassName, $callOriginalConstructor, $callOriginalClone, $callAutoload, $cloneArguments); + assert($mockObject instanceof $originalClassName); + assert($mockObject instanceof MockObject); + return $mockObject; } throw new \PHPUnit\Framework\MockObject\Generator\UnknownClassException($originalClassName); } @@ -55632,8 +55960,10 @@ final class Generator * @throws UnknownClassException * @throws UnknownTraitException * @throws UnknownTypeException + * + * @deprecated https://github.com/sebastianbergmann/phpunit/issues/5243 */ - public function getMockForTrait(string $traitName, array $arguments = [], string $mockClassName = '', bool $callOriginalConstructor = \true, bool $callOriginalClone = \true, bool $callAutoload = \true, array $mockedMethods = null, bool $cloneArguments = \true) : MockObject + public function mockObjectForTrait(string $traitName, array $arguments = [], string $mockClassName = '', bool $callOriginalConstructor = \true, bool $callOriginalClone = \true, bool $callAutoload = \true, array $mockedMethods = null, bool $cloneArguments = \true) : MockObject { if (!trait_exists($traitName, $callAutoload)) { throw new \PHPUnit\Framework\MockObject\Generator\UnknownTraitException($traitName); @@ -55643,7 +55973,7 @@ final class Generator $classTemplate->setVar(['prologue' => 'abstract ', 'class_name' => $className['className'], 'trait_name' => $traitName]); $mockTrait = new \PHPUnit\Framework\MockObject\Generator\MockTrait($classTemplate->render(), $className['className']); $mockTrait->generate(); - return $this->getMockForAbstractClass($className['className'], $arguments, $mockClassName, $callOriginalConstructor, $callOriginalClone, $callAutoload, $mockedMethods, $cloneArguments); + return $this->mockObjectForAbstractClass($className['className'], $arguments, $mockClassName, $callOriginalConstructor, $callOriginalClone, $callAutoload, $mockedMethods, $cloneArguments); } /** * Returns an object for the specified trait. @@ -55653,8 +55983,10 @@ final class Generator * @throws ReflectionException * @throws RuntimeException * @throws UnknownTraitException + * + * @deprecated https://github.com/sebastianbergmann/phpunit/issues/5244 */ - public function getObjectForTrait(string $traitName, string $traitClassName = '', bool $callAutoload = \true, bool $callOriginalConstructor = \false, array $arguments = []) : object + public function objectForTrait(string $traitName, string $traitClassName = '', bool $callAutoload = \true, bool $callOriginalConstructor = \false, array $arguments = []) : object { if (!trait_exists($traitName, $callAutoload)) { throw new \PHPUnit\Framework\MockObject\Generator\UnknownTraitException($traitName); @@ -55670,21 +56002,27 @@ final class Generator * @throws ClassIsReadonlyException * @throws ReflectionException * @throws RuntimeException + * + * @todo This method is only public because it is used to test generated code in PHPT tests + * + * @see https://github.com/sebastianbergmann/phpunit/issues/5476 */ - public function generate(string $type, array $methods = null, string $mockClassName = '', bool $callOriginalClone = \true, bool $callAutoload = \true, bool $cloneArguments = \true, bool $callOriginalMethods = \false) : \PHPUnit\Framework\MockObject\Generator\MockClass + public function generate(string $type, bool $mockObject, array $methods = null, string $mockClassName = '', bool $callOriginalClone = \true, bool $callAutoload = \true, bool $cloneArguments = \true, bool $callOriginalMethods = \false) : \PHPUnit\Framework\MockObject\Generator\MockClass { if ($mockClassName !== '') { - return $this->generateMock($type, $methods, $mockClassName, $callOriginalClone, $callAutoload, $cloneArguments, $callOriginalMethods); + return $this->generateCodeForTestDoubleClass($type, $mockObject, $methods, $mockClassName, $callOriginalClone, $callAutoload, $cloneArguments, $callOriginalMethods); } $key = md5($type . serialize($methods) . serialize($callOriginalClone) . serialize($cloneArguments) . serialize($callOriginalMethods)); if (!isset(self::$cache[$key])) { - self::$cache[$key] = $this->generateMock($type, $methods, $mockClassName, $callOriginalClone, $callAutoload, $cloneArguments, $callOriginalMethods); + self::$cache[$key] = $this->generateCodeForTestDoubleClass($type, $mockObject, $methods, $mockClassName, $callOriginalClone, $callAutoload, $cloneArguments, $callOriginalMethods); } return self::$cache[$key]; } /** * @throws RuntimeException * @throws SoapExtensionNotAvailableException + * + * @deprecated https://github.com/sebastianbergmann/phpunit/issues/5242 */ public function generateClassFromWsdl(string $wsdlFile, string $className, array $methods = [], array $options = []) : string { @@ -55736,22 +56074,6 @@ final class Generator $classTemplate->setVar(['namespace' => $namespace, 'class_name' => $className, 'wsdl' => $wsdlFile, 'options' => $optionsBuffer, 'methods' => $methodsBuffer]); return $classTemplate->render(); } - /** - * @throws ReflectionException - * - * @psalm-return list - */ - public function getClassMethods(string $className) : array - { - $class = $this->reflectClass($className); - $methods = []; - foreach ($class->getMethods() as $method) { - if ($method->isPublic() || $method->isAbstract()) { - $methods[] = $method->getName(); - } - } - return $methods; - } /** * @throws ReflectionException * @@ -55768,20 +56090,6 @@ final class Generator } return $methods; } - /** - * @throws ReflectionException - * - * @psalm-return list - */ - public function mockInterfaceMethods(string $interfaceName, bool $cloneArguments) : array - { - $class = $this->reflectClass($interfaceName); - $methods = []; - foreach ($class->getMethods() as $method) { - $methods[] = \PHPUnit\Framework\MockObject\Generator\MockMethod::fromReflection($method, \false, $cloneArguments); - } - return $methods; - } /** * @psalm-param class-string $interfaceName * @@ -55824,17 +56132,18 @@ final class Generator * @throws ReflectionException * @throws RuntimeException */ - private function generateMock(string $type, ?array $explicitMethods, string $mockClassName, bool $callOriginalClone, bool $callAutoload, bool $cloneArguments, bool $callOriginalMethods) : \PHPUnit\Framework\MockObject\Generator\MockClass + private function generateCodeForTestDoubleClass(string $type, bool $mockObject, ?array $explicitMethods, string $mockClassName, bool $callOriginalClone, bool $callAutoload, bool $cloneArguments, bool $callOriginalMethods) : \PHPUnit\Framework\MockObject\Generator\MockClass { - $classTemplate = $this->loadTemplate('mocked_class.tpl'); + $classTemplate = $this->loadTemplate('test_double_class.tpl'); $additionalInterfaces = []; - $mockedCloneMethod = \false; - $unmockedCloneMethod = \false; + $doubledCloneMethod = \false; + $proxiedCloneMethod = \false; $isClass = \false; $isInterface = \false; $class = null; $mockMethods = new \PHPUnit\Framework\MockObject\Generator\MockMethodSet(); - $_mockClassName = $this->generateClassName($type, $mockClassName, 'Mock_'); + $testDoubleClassPrefix = $mockObject ? 'MockObject_' : 'TestStub_'; + $_mockClassName = $this->generateClassName($type, $mockClassName, $testDoubleClassPrefix); if (class_exists($_mockClassName['fullClassName'], $callAutoload)) { $isClass = \true; } elseif (interface_exists($_mockClassName['fullClassName'], $callAutoload)) { @@ -55846,7 +56155,7 @@ final class Generator $prologue = 'namespace ' . $_mockClassName['namespaceName'] . " {\n\n" . $prologue . "}\n\n" . "namespace {\n\n"; $epilogue = "\n\n}"; } - $mockedCloneMethod = \true; + $doubledCloneMethod = \true; } else { $class = $this->reflectClass($_mockClassName['fullClassName']); if ($class->isEnum()) { @@ -55874,7 +56183,7 @@ final class Generator } $mockMethods->addMethods(\PHPUnit\Framework\MockObject\Generator\MockMethod::fromReflection($method, $callOriginalMethods, $cloneArguments)); } - $_mockClassName = $this->generateClassName($actualClassName, $_mockClassName['className'], 'Mock_'); + $_mockClassName = $this->generateClassName($actualClassName, $_mockClassName['className'], $testDoubleClassPrefix); } // @see https://github.com/sebastianbergmann/phpunit-mock-objects/issues/103 if ($isInterface && $class->implementsInterface(Traversable::class) && !$class->implementsInterface(Iterator::class) && !$class->implementsInterface(IteratorAggregate::class)) { @@ -55885,20 +56194,20 @@ final class Generator $cloneMethod = $class->getMethod('__clone'); if (!$cloneMethod->isFinal()) { if ($callOriginalClone && !$isInterface) { - $unmockedCloneMethod = \true; + $proxiedCloneMethod = \true; } else { - $mockedCloneMethod = \true; + $doubledCloneMethod = \true; } } } else { - $mockedCloneMethod = \true; + $doubledCloneMethod = \true; } } if ($isClass && $explicitMethods === []) { $mockMethods->addMethods(...$this->mockClassMethods($_mockClassName['fullClassName'], $callOriginalMethods, $cloneArguments)); } if ($isInterface && ($explicitMethods === [] || $explicitMethods === null)) { - $mockMethods->addMethods(...$this->mockInterfaceMethods($_mockClassName['fullClassName'], $cloneArguments)); + $mockMethods->addMethods(...$this->interfaceMethods($_mockClassName['fullClassName'], $cloneArguments)); } if (is_array($explicitMethods)) { foreach ($explicitMethods as $methodName) { @@ -55918,18 +56227,26 @@ final class Generator $mockedMethods .= $mockMethod->generateCode(); $configurable[] = new ConfigurableMethod($mockMethod->methodName(), $mockMethod->returnType()); } - $method = ''; + /** @psalm-var trait-string[] $traits */ + $traits = [StubApi::class]; + if ($mockObject) { + $traits[] = MockObjectApi::class; + } if (!$mockMethods->hasMethod('method') && (!isset($class) || !$class->hasMethod('method'))) { - $method = PHP_EOL . ' use \\PHPUnit\\Framework\\MockObject\\Method;'; + $traits[] = Method::class; + } + if ($doubledCloneMethod) { + $traits[] = DoubledCloneMethod::class; } - $cloneTrait = ''; - if ($mockedCloneMethod) { - $cloneTrait = PHP_EOL . ' use \\PHPUnit\\Framework\\MockObject\\MockedCloneMethod;'; + if ($proxiedCloneMethod) { + $traits[] = ProxiedCloneMethod::class; } - if ($unmockedCloneMethod) { - $cloneTrait = PHP_EOL . ' use \\PHPUnit\\Framework\\MockObject\\UnmockedCloneMethod;'; + $useStatements = ''; + foreach ($traits as $trait) { + $useStatements .= sprintf(' use %s;' . PHP_EOL, $trait); } - $classTemplate->setVar(['prologue' => $prologue ?? '', 'epilogue' => $epilogue ?? '', 'class_declaration' => $this->generateMockClassDeclaration($_mockClassName, $isInterface, $additionalInterfaces), 'clone' => $cloneTrait, 'mock_class_name' => $_mockClassName['className'], 'mocked_methods' => $mockedMethods, 'method' => $method]); + unset($traits); + $classTemplate->setVar(['prologue' => $prologue ?? '', 'epilogue' => $epilogue ?? '', 'class_declaration' => $this->generateTestDoubleClassDeclaration($mockObject, $_mockClassName, $isInterface, $additionalInterfaces), 'use_statements' => $useStatements, 'mock_class_name' => $_mockClassName['className'], 'mocked_methods' => $mockedMethods]); return new \PHPUnit\Framework\MockObject\Generator\MockClass($classTemplate->render(), $_mockClassName['className'], $configurable); } private function generateClassName(string $type, string $className, string $prefix) : array @@ -55953,10 +56270,14 @@ final class Generator } return ['className' => $className, 'originalClassName' => $type, 'fullClassName' => $fullClassName, 'namespaceName' => $namespaceName]; } - private function generateMockClassDeclaration(array $mockClassName, bool $isInterface, array $additionalInterfaces = []) : string + private function generateTestDoubleClassDeclaration(bool $mockObject, array $mockClassName, bool $isInterface, array $additionalInterfaces = []) : string { + if ($mockObject) { + $additionalInterfaces[] = MockObjectInternal::class; + } else { + $additionalInterfaces[] = StubInternal::class; + } $buffer = 'class '; - $additionalInterfaces[] = MockObjectInternal::class; $interfaces = implode(', ', $additionalInterfaces); if ($isInterface) { $buffer .= sprintf('%s implements %s', $mockClassName['className'], $interfaces); @@ -56045,14 +56366,18 @@ final class Generator } try { return (new ReflectionClass($className))->newInstanceArgs($arguments); + // @codeCoverageIgnoreStart } catch (\ReflectionException $e) { throw new \PHPUnit\Framework\MockObject\Generator\ReflectionException($e->getMessage(), $e->getCode(), $e); } + // @codeCoverageIgnoreEnd } try { return (new ReflectionClass($className))->newInstanceWithoutConstructor(); + // @codeCoverageIgnoreStart } catch (\ReflectionException $e) { throw new \PHPUnit\Framework\MockObject\Generator\ReflectionException($e->getMessage(), $e->getCode(), $e); + // @codeCoverageIgnoreEnd } } /** @@ -56070,9 +56395,11 @@ final class Generator $class = new ReflectionClass($type); try { $proxyTarget = $class->newInstanceArgs($arguments); + // @codeCoverageIgnoreStart } catch (\ReflectionException $e) { throw new \PHPUnit\Framework\MockObject\Generator\ReflectionException($e->getMessage(), $e->getCode(), $e); } + // @codeCoverageIgnoreEnd } } $object->__phpunit_setOriginalObject($proxyTarget); @@ -56086,11 +56413,47 @@ final class Generator { try { $class = new ReflectionClass($className); + // @codeCoverageIgnoreStart } catch (\ReflectionException $e) { throw new \PHPUnit\Framework\MockObject\Generator\ReflectionException($e->getMessage(), $e->getCode(), $e); } + // @codeCoverageIgnoreEnd return $class; } + /** + * @psalm-param class-string $classOrInterfaceName + * + * @psalm-return list + * + * @throws ReflectionException + */ + private function namesOfMethodsIn(string $classOrInterfaceName) : array + { + $class = $this->reflectClass($classOrInterfaceName); + $methods = []; + foreach ($class->getMethods() as $method) { + if ($method->isPublic() || $method->isAbstract()) { + $methods[] = $method->getName(); + } + } + return $methods; + } + /** + * @psalm-param class-string $interfaceName + * + * @psalm-return list + * + * @throws ReflectionException + */ + private function interfaceMethods(string $interfaceName, bool $cloneArguments) : array + { + $class = $this->reflectClass($interfaceName); + $methods = []; + foreach ($class->getMethods() as $method) { + $methods[] = \PHPUnit\Framework\MockObject\Generator\MockMethod::fromReflection($method, \false, $cloneArguments); + } + return $methods; + } } getDeclaringClass()->getName(), $method->getName(), $cloneArguments, $modifier, self::methodParametersForDeclaration($method), self::methodParametersForCall($method), (new ReflectionMapper())->fromReturnType($method), $reference, $callOriginalMethod, $method->isStatic(), $deprecation); } - public static function fromName(string $fullClassName, string $methodName, bool $cloneArguments) : self + /** + * @param class-string $className + * @param non-empty-string $methodName + */ + public static function fromName(string $className, string $methodName, bool $cloneArguments) : self { - return new self($fullClassName, $methodName, $cloneArguments, 'public', '', '', new UnknownType(), '', \false, \false, null); + return new self($className, $methodName, $cloneArguments, 'public', '', '', new UnknownType(), '', \false, \false, null); } - public function __construct(string $className, string $methodName, bool $cloneArguments, string $modifier, string $argumentsForDeclaration, string $argumentsForCall, Type $returnType, string $reference, bool $callOriginalMethod, bool $static, ?string $deprecation) + /** + * @param class-string $className + * @param non-empty-string $methodName + */ + private function __construct(string $className, string $methodName, bool $cloneArguments, string $modifier, string $argumentsForDeclaration, string $argumentsForCall, Type $returnType, string $reference, bool $callOriginalMethod, bool $static, ?string $deprecation) { $this->className = $className; $this->methodName = $methodName; @@ -56243,6 +56620,9 @@ final class MockMethod $this->static = $static; $this->deprecation = $deprecation; } + /** + * @psalm-return non-empty-string + */ public function methodName() : string { return $this->methodName; @@ -56253,13 +56633,19 @@ final class MockMethod public function generateCode() : string { if ($this->static) { - $templateFile = 'mocked_static_method.tpl'; - } elseif ($this->returnType->isNever() || $this->returnType->isVoid()) { - $templateFile = sprintf('%s_method_never_or_void.tpl', $this->callOriginalMethod ? 'proxied' : 'mocked'); + $templateFile = 'doubled_static_method.tpl'; } else { - $templateFile = sprintf('%s_method.tpl', $this->callOriginalMethod ? 'proxied' : 'mocked'); + $templateFile = sprintf('%s_method.tpl', $this->callOriginalMethod ? 'proxied' : 'doubled'); } $deprecation = $this->deprecation; + $returnResult = ''; + if (!$this->returnType->isNever() && !$this->returnType->isVoid()) { + $returnResult = <<<'EOT' + + + return $__phpunit_result; +EOT; + } if (null !== $this->deprecation) { $deprecation = "The {$this->className}::{$this->methodName} method is deprecated ({$this->deprecation})."; $deprecationTemplate = $this->loadTemplate('deprecation.tpl'); @@ -56267,7 +56653,7 @@ final class MockMethod $deprecation = $deprecationTemplate->render(); } $template = $this->loadTemplate($templateFile); - $template->setVar(['arguments_decl' => $this->argumentsForDeclaration, 'arguments_call' => $this->argumentsForCall, 'return_declaration' => !empty($this->returnType->asString()) ? ': ' . $this->returnType->asString() : '', 'return_type' => $this->returnType->asString(), 'arguments_count' => !empty($this->argumentsForCall) ? substr_count($this->argumentsForCall, ',') + 1 : 0, 'class_name' => $this->className, 'method_name' => $this->methodName, 'modifier' => $this->modifier, 'reference' => $this->reference, 'clone_arguments' => $this->cloneArguments ? 'true' : 'false', 'deprecation' => $deprecation]); + $template->setVar(['arguments_decl' => $this->argumentsForDeclaration, 'arguments_call' => $this->argumentsForCall, 'return_declaration' => !empty($this->returnType->asString()) ? ': ' . $this->returnType->asString() : '', 'return_type' => $this->returnType->asString(), 'arguments_count' => !empty($this->argumentsForCall) ? substr_count($this->argumentsForCall, ',') + 1 : 0, 'class_name' => $this->className, 'method_name' => $this->methodName, 'modifier' => $this->modifier, 'reference' => $this->reference, 'clone_arguments' => $this->cloneArguments ? 'true' : 'false', 'deprecation' => $deprecation, 'return_result' => $returnResult]); return $template->render(); } public function returnType() : Type @@ -56350,9 +56736,11 @@ final class MockMethod } $parameterAsString = $parameter->__toString(); return explode(' = ', substr(substr($parameterAsString, strpos($parameterAsString, ' ') + strlen(' ')), 0, -2))[1]; + // @codeCoverageIgnoreStart } catch (\ReflectionException $e) { throw new \PHPUnit\Framework\MockObject\Generator\ReflectionException($e->getMessage(), $e->getCode(), $e); } + // @codeCoverageIgnoreEnd } } {arguments_count}) { - $__phpunit_arguments_tmp = func_get_args(); - - for ($__phpunit_i = {arguments_count}; $__phpunit_i < $__phpunit_count; $__phpunit_i++) { - $__phpunit_arguments[] = $__phpunit_arguments_tmp[$__phpunit_i]; - } - } - - $this->__phpunit_getInvocationHandler()->invoke( - new \PHPUnit\Framework\MockObject\Invocation( - '{class_name}', '{method_name}', $__phpunit_arguments, '{return_type}', $this, {clone_arguments} - ) - ); + );{return_result} } {modifier} function {reference}{method_name}({arguments_decl}){return_declaration} { throw new \PHPUnit\Framework\MockObject\BadMethodCallException('Static method "{method_name}" cannot be invoked on mock object'); } +declare(strict_types=1); - {modifier} function {reference}{method_name}({arguments_decl}){return_declaration} - { - $__phpunit_arguments = [{arguments_call}]; - $__phpunit_count = func_num_args(); - - if ($__phpunit_count > {arguments_count}) { - $__phpunit_arguments_tmp = func_get_args(); - - for ($__phpunit_i = {arguments_count}; $__phpunit_i < $__phpunit_count; $__phpunit_i++) { - $__phpunit_arguments[] = $__phpunit_arguments_tmp[$__phpunit_i]; - } - } - - $this->__phpunit_getInvocationHandler()->invoke( - new \PHPUnit\Framework\MockObject\Invocation( - '{class_name}', '{method_name}', $__phpunit_arguments, '{return_type}', $this, {clone_arguments}, true - ) - ); - - return call_user_func_array(array($this->__phpunit_originalObject, "{method_name}"), $__phpunit_arguments); - } +interface {intersection} extends {interfaces} +{ +} {modifier} function {reference}{method_name}({arguments_decl}){return_declaration} { @@ -56602,10 +56941,15 @@ declare(strict_types=1); ) ); - call_user_func_array(array($this->__phpunit_originalObject, "{method_name}"), $__phpunit_arguments); + $__phpunit_result = call_user_func_array([$this->__phpunit_originalObject, "{method_name}"], $__phpunit_arguments);{return_result} } declare(strict_types=1); +{prologue}{class_declaration} +{ +{use_statements}{mocked_methods}}{epilogue} +declare(strict_types=1); + {prologue}class {class_name} { use {trait_name}; @@ -56637,6 +56981,9 @@ declare (strict_types=1); namespace PHPUnit\Framework\MockObject; use function array_merge; +use function assert; +use function trait_exists; +use PHPUnit\Framework\InvalidArgumentException; use PHPUnit\Framework\MockObject\Generator\ClassAlreadyExistsException; use PHPUnit\Framework\MockObject\Generator\ClassIsEnumerationException; use PHPUnit\Framework\MockObject\Generator\ClassIsFinalException; @@ -56658,10 +57005,19 @@ use ReflectionClass; final class MockBuilder { private readonly TestCase $testCase; + /** + * @psalm-var class-string|trait-string + */ private readonly string $type; - private ?array $methods = []; + /** + * @psalm-var list + */ + private array $methods = []; private bool $emptyMethodsArray = \false; - private string $mockClassName = ''; + /** + * @psalm-var ?class-string + */ + private ?string $mockClassName = null; private array $constructorArgs = []; private bool $originalConstructor = \true; private bool $originalClone = \true; @@ -56673,7 +57029,7 @@ final class MockBuilder private bool $returnValueGeneration = \true; private readonly Generator $generator; /** - * @psalm-param class-string $type + * @psalm-param class-string|trait-string $type */ public function __construct(TestCase $testCase, string $type) { @@ -56684,12 +57040,12 @@ final class MockBuilder /** * Creates a mock object using a fluent interface. * - * @throws \PHPUnit\Framework\InvalidArgumentException * @throws ClassAlreadyExistsException * @throws ClassIsEnumerationException * @throws ClassIsFinalException * @throws ClassIsReadonlyException * @throws DuplicateMethodException + * @throws InvalidArgumentException * @throws InvalidMethodNameException * @throws OriginalConstructorInvocationRequiredException * @throws ReflectionException @@ -56698,12 +57054,12 @@ final class MockBuilder * * @psalm-return MockObject&MockedType */ - public function getMock(bool $register = \true) : \PHPUnit\Framework\MockObject\MockObject + public function getMock() : \PHPUnit\Framework\MockObject\MockObject { - $object = $this->generator->getMock($this->type, !$this->emptyMethodsArray ? $this->methods : null, $this->constructorArgs, $this->mockClassName, $this->originalConstructor, $this->originalClone, $this->autoload, $this->cloneArguments, $this->callOriginalMethods, $this->proxyTarget, $this->allowMockingUnknownTypes, $this->returnValueGeneration); - if ($register) { - $this->testCase->registerMockObject($object); - } + $object = $this->generator->testDouble($this->type, \true, !$this->emptyMethodsArray ? $this->methods : null, $this->constructorArgs, $this->mockClassName ?? '', $this->originalConstructor, $this->originalClone, $this->autoload, $this->cloneArguments, $this->callOriginalMethods, $this->proxyTarget, $this->allowMockingUnknownTypes, $this->returnValueGeneration); + assert($object instanceof $this->type); + assert($object instanceof \PHPUnit\Framework\MockObject\MockObject); + $this->testCase->registerMockObject($object); return $object; } /** @@ -56719,7 +57075,8 @@ final class MockBuilder */ public function getMockForAbstractClass() : \PHPUnit\Framework\MockObject\MockObject { - $object = $this->generator->getMockForAbstractClass($this->type, $this->constructorArgs, $this->mockClassName, $this->originalConstructor, $this->originalClone, $this->autoload, $this->methods, $this->cloneArguments); + $object = $this->generator->mockObjectForAbstractClass($this->type, $this->constructorArgs, $this->mockClassName ?? '', $this->originalConstructor, $this->originalClone, $this->autoload, $this->methods, $this->cloneArguments); + assert($object instanceof \PHPUnit\Framework\MockObject\MockObject); $this->testCase->registerMockObject($object); return $object; } @@ -56736,14 +57093,16 @@ final class MockBuilder */ public function getMockForTrait() : \PHPUnit\Framework\MockObject\MockObject { - $object = $this->generator->getMockForTrait($this->type, $this->constructorArgs, $this->mockClassName, $this->originalConstructor, $this->originalClone, $this->autoload, $this->methods, $this->cloneArguments); + assert(trait_exists($this->type)); + $object = $this->generator->mockObjectForTrait($this->type, $this->constructorArgs, $this->mockClassName ?? '', $this->originalConstructor, $this->originalClone, $this->autoload, $this->methods, $this->cloneArguments); + assert($object instanceof \PHPUnit\Framework\MockObject\MockObject); $this->testCase->registerMockObject($object); return $object; } /** * Specifies the subset of methods to mock, requiring each to exist in the class. * - * @psalm-param list $methods + * @psalm-param list $methods * * @throws CannotUseOnlyMethodsException * @throws ReflectionException @@ -56758,21 +57117,23 @@ final class MockBuilder } try { $reflector = new ReflectionClass($this->type); + // @codeCoverageIgnoreStart } catch (\ReflectionException $e) { throw new ReflectionException($e->getMessage(), $e->getCode(), $e); + // @codeCoverageIgnoreEnd } foreach ($methods as $method) { if (!$reflector->hasMethod($method)) { throw new \PHPUnit\Framework\MockObject\CannotUseOnlyMethodsException($this->type, $method); } } - $this->methods = array_merge($this->methods ?? [], $methods); + $this->methods = array_merge($this->methods, $methods); return $this; } /** * Specifies methods that don't exist in the class which you want to mock. * - * @psalm-param list $methods + * @psalm-param list $methods * * @throws CannotUseAddMethodsException * @throws ReflectionException @@ -56790,15 +57151,17 @@ final class MockBuilder } try { $reflector = new ReflectionClass($this->type); + // @codeCoverageIgnoreStart } catch (\ReflectionException $e) { throw new ReflectionException($e->getMessage(), $e->getCode(), $e); + // @codeCoverageIgnoreEnd } foreach ($methods as $method) { if ($reflector->hasMethod($method)) { throw new \PHPUnit\Framework\MockObject\CannotUseAddMethodsException($this->type, $method); } } - $this->methods = array_merge($this->methods ?? [], $methods); + $this->methods = array_merge($this->methods, $methods); return $this; } /** @@ -56814,6 +57177,8 @@ final class MockBuilder /** * Specifies the name for the mock class. * + * @psalm-param class-string $name + * * @return $this */ public function setMockClassName(string $name) : self @@ -57000,6 +57365,29 @@ declare (strict_types=1); */ namespace PHPUnit\Framework\MockObject; +/** + * @internal This trait is not covered by the backward compatibility promise for PHPUnit + */ +trait DoubledCloneMethod +{ + public function __clone() : void + { + $this->__phpunit_invocationMocker = clone $this->__phpunit_getInvocationHandler(); + } +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\Framework\MockObject; + use function call_user_func_array; use function func_get_args; use PHPUnit\Framework\MockObject\Builder\InvocationMocker; @@ -57077,11 +57465,12 @@ namespace PHPUnit\Framework\MockObject; /** * @internal This trait is not covered by the backward compatibility promise for PHPUnit */ -trait MockedCloneMethod +trait ProxiedCloneMethod { public function __clone() : void { $this->__phpunit_invocationMocker = clone $this->__phpunit_getInvocationHandler(); + parent::__clone(); } } - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnit\Framework\MockObject; - -/** - * @internal This trait is not covered by the backward compatibility promise for PHPUnit - */ -trait UnmockedCloneMethod -{ - public function __clone() : void - { - $this->__phpunit_invocationMocker = clone $this->__phpunit_getInvocationHandler(); - parent::__clone(); - } -} -getMock($type, [], [], '', \false); + return (new Generator())->testDouble($type, \false, [], [], '', \false); } catch (Throwable $t) { throw new \PHPUnit\Framework\MockObject\RuntimeException(sprintf('Return value for %s::%s() cannot be generated: %s', $className, $methodName, $t->getMessage())); } @@ -58231,10 +58596,10 @@ final class ReturnValueGenerator * * @throws RuntimeException */ - private function testDoubleForIntersectionOfInterfaces(array $types, string $className, string $methodName) : \PHPUnit\Framework\MockObject\MockObject + private function testDoubleForIntersectionOfInterfaces(array $types, string $className, string $methodName) : \PHPUnit\Framework\MockObject\Stub { try { - return (new Generator())->getMockForInterfaces($types); + return (new Generator())->testDoubleForInterfaceIntersection($types, \false); } catch (Throwable $t) { throw new \PHPUnit\Framework\MockObject\RuntimeException(sprintf('Return value for %s::%s() cannot be generated: %s', $className, $methodName, $t->getMessage())); } @@ -59850,6 +60215,7 @@ abstract class TestCase extends \PHPUnit\Framework\Assert implements \PHPUnit\Fr } catch (AssertionError|\PHPUnit\Framework\AssertionFailedError $e) { if (!$this->wasPrepared) { $this->wasPrepared = \true; + $emitter->testPreparationFailed($this->valueObjectForEvents()); } $this->status = TestStatus::failure($e->getMessage()); $emitter->testFailed($this->valueObjectForEvents(), Event\Code\ThrowableBuilder::from($e), Event\Code\ComparisonFailureBuilder::from($e)); @@ -59886,6 +60252,9 @@ abstract class TestCase extends \PHPUnit\Framework\Assert implements \PHPUnit\Fr $this->invokeAfterClassHookMethods($hookMethods, $emitter); } } + } catch (AssertionError|\PHPUnit\Framework\AssertionFailedError $e) { + $this->status = TestStatus::failure($e->getMessage()); + $emitter->testFailed($this->valueObjectForEvents(), Event\Code\ThrowableBuilder::from($e), Event\Code\ComparisonFailureBuilder::from($e)); } catch (Throwable $exceptionRaisedDuringTearDown) { if (!isset($e)) { $this->status = TestStatus::error($exceptionRaisedDuringTearDown->getMessage()); @@ -60255,7 +60624,9 @@ abstract class TestCase extends \PHPUnit\Framework\Assert implements \PHPUnit\Fr */ protected function createMock(string $originalClassName) : MockObject { - $mock = (new MockGenerator())->getMock($originalClassName, callOriginalConstructor: \false, callOriginalClone: \false, cloneArguments: \false, allowMockingUnknownTypes: \false); + $mock = (new MockGenerator())->testDouble($originalClassName, \true, callOriginalConstructor: \false, callOriginalClone: \false, cloneArguments: \false, allowMockingUnknownTypes: \false); + assert($mock instanceof $originalClassName); + assert($mock instanceof MockObject); $this->registerMockObject($mock); Event\Facade::emitter()->testCreatedMockObject($originalClassName); return $mock; @@ -60267,8 +60638,9 @@ abstract class TestCase extends \PHPUnit\Framework\Assert implements \PHPUnit\Fr */ protected function createMockForIntersectionOfInterfaces(array $interfaces) : MockObject { - $mock = (new MockGenerator())->getMockForInterfaces($interfaces); + $mock = (new MockGenerator())->testDoubleForInterfaceIntersection($interfaces, \true); Event\Facade::emitter()->testCreatedMockObjectForIntersectionOfInterfaces($interfaces); + assert($mock instanceof MockObject); return $mock; } /** @@ -60295,7 +60667,7 @@ abstract class TestCase extends \PHPUnit\Framework\Assert implements \PHPUnit\Fr /** * Creates a partial mock object for the specified interface or class. * - * @psalm-param list $methods + * @psalm-param list $methods * * @psalm-template RealInstanceType of object * @@ -60308,7 +60680,7 @@ abstract class TestCase extends \PHPUnit\Framework\Assert implements \PHPUnit\Fr */ protected function createPartialMock(string $originalClassName, array $methods) : MockObject { - $partialMock = (new MockBuilder($this, $originalClassName))->disableOriginalConstructor()->disableOriginalClone()->disableArgumentCloning()->disallowMockingUnknownTypes()->onlyMethods($methods)->getMock(); + $partialMock = $this->getMockBuilder($originalClassName)->disableOriginalConstructor()->disableOriginalClone()->disableArgumentCloning()->disallowMockingUnknownTypes()->onlyMethods($methods)->getMock(); Event\Facade::emitter()->testCreatedPartialMockObject($originalClassName, ...$methods); return $partialMock; } @@ -60328,7 +60700,7 @@ abstract class TestCase extends \PHPUnit\Framework\Assert implements \PHPUnit\Fr */ protected function createTestProxy(string $originalClassName, array $constructorArguments = []) : MockObject { - $testProxy = (new MockBuilder($this, $originalClassName))->setConstructorArgs($constructorArguments)->enableProxyingToOriginalMethods()->getMock(); + $testProxy = $this->getMockBuilder($originalClassName)->setConstructorArgs($constructorArguments)->enableProxyingToOriginalMethods()->getMock(); Event\Facade::emitter()->testCreatedTestProxy($originalClassName, $constructorArguments); return $testProxy; } @@ -60350,20 +60722,16 @@ abstract class TestCase extends \PHPUnit\Framework\Assert implements \PHPUnit\Fr */ protected function getMockForAbstractClass(string $originalClassName, array $arguments = [], string $mockClassName = '', bool $callOriginalConstructor = \true, bool $callOriginalClone = \true, bool $callAutoload = \true, array $mockedMethods = [], bool $cloneArguments = \false) : MockObject { - $mockObject = (new MockGenerator())->getMockForAbstractClass($originalClassName, $arguments, $mockClassName, $callOriginalConstructor, $callOriginalClone, $callAutoload, $mockedMethods, $cloneArguments); + $mockObject = (new MockGenerator())->mockObjectForAbstractClass($originalClassName, $arguments, $mockClassName, $callOriginalConstructor, $callOriginalClone, $callAutoload, $mockedMethods, $cloneArguments); $this->registerMockObject($mockObject); Event\Facade::emitter()->testCreatedMockObjectForAbstractClass($originalClassName); + assert($mockObject instanceof $originalClassName); + assert($mockObject instanceof MockObject); return $mockObject; } /** * Creates a mock object based on the given WSDL file. * - * @psalm-template RealInstanceType of object - * - * @psalm-param class-string|string $originalClassName - * - * @psalm-return MockObject&RealInstanceType - * * @throws \PHPUnit\Framework\MockObject\Exception * * @deprecated https://github.com/sebastianbergmann/phpunit/issues/5242 @@ -60377,8 +60745,9 @@ abstract class TestCase extends \PHPUnit\Framework\Assert implements \PHPUnit\Fr if (!class_exists($originalClassName)) { eval((new MockGenerator())->generateClassFromWsdl($wsdlFile, $originalClassName, $methods, $options)); } - $mockObject = (new MockGenerator())->getMock($originalClassName, $methods, ['', $options], $mockClassName, $callOriginalConstructor, \false, \false); + $mockObject = (new MockGenerator())->testDouble($originalClassName, \true, $methods, ['', $options], $mockClassName, $callOriginalConstructor, \false, \false); Event\Facade::emitter()->testCreatedMockObjectFromWsdl($wsdlFile, $originalClassName, $mockClassName, $methods, $callOriginalConstructor, $options); + assert($mockObject instanceof MockObject); $this->registerMockObject($mockObject); return $mockObject; } @@ -60396,7 +60765,7 @@ abstract class TestCase extends \PHPUnit\Framework\Assert implements \PHPUnit\Fr */ protected function getMockForTrait(string $traitName, array $arguments = [], string $mockClassName = '', bool $callOriginalConstructor = \true, bool $callOriginalClone = \true, bool $callAutoload = \true, array $mockedMethods = [], bool $cloneArguments = \false) : MockObject { - $mockObject = (new MockGenerator())->getMockForTrait($traitName, $arguments, $mockClassName, $callOriginalConstructor, $callOriginalClone, $callAutoload, $mockedMethods, $cloneArguments); + $mockObject = (new MockGenerator())->mockObjectForTrait($traitName, $arguments, $mockClassName, $callOriginalConstructor, $callOriginalClone, $callAutoload, $mockedMethods, $cloneArguments); $this->registerMockObject($mockObject); Event\Facade::emitter()->testCreatedMockObjectForTrait($traitName); return $mockObject; @@ -60412,7 +60781,7 @@ abstract class TestCase extends \PHPUnit\Framework\Assert implements \PHPUnit\Fr */ protected function getObjectForTrait(string $traitName, array $arguments = [], string $traitClassName = '', bool $callOriginalConstructor = \true, bool $callOriginalClone = \true, bool $callAutoload = \true) : object { - return (new MockGenerator())->getObjectForTrait($traitName, $traitClassName, $callAutoload, $callOriginalConstructor, $arguments); + return (new MockGenerator())->objectForTrait($traitName, $traitClassName, $callAutoload, $callOriginalConstructor, $arguments); } protected function transformException(Throwable $t) : Throwable { @@ -60699,9 +61068,11 @@ abstract class TestCase extends \PHPUnit\Framework\Assert implements \PHPUnit\Fr if (is_string($this->expectedException)) { try { $reflector = new ReflectionClass($this->expectedException); + // @codeCoverageIgnoreStart } catch (ReflectionException $e) { throw new \PHPUnit\Framework\Exception($e->getMessage(), $e->getCode(), $e); } + // @codeCoverageIgnoreEnd if ($this->expectedException === 'PHPUnit\\Framework\\Exception' || $this->expectedException === '\\PHPUnit\\Framework\\Exception' || $reflector->isSubclassOf(\PHPUnit\Framework\Exception::class)) { $result = \true; } @@ -60902,8 +61273,10 @@ abstract class TestCase extends \PHPUnit\Framework\Assert implements \PHPUnit\Fr */ protected static function createStub(string $originalClassName) : Stub { - $stub = (new MockGenerator())->getMock($originalClassName, callOriginalConstructor: \false, callOriginalClone: \false, cloneArguments: \false, allowMockingUnknownTypes: \false); + $stub = (new MockGenerator())->testDouble($originalClassName, \true, callOriginalConstructor: \false, callOriginalClone: \false, cloneArguments: \false, allowMockingUnknownTypes: \false); Event\Facade::emitter()->testCreatedStub($originalClassName); + assert($stub instanceof $originalClassName); + assert($stub instanceof Stub); return $stub; } /** @@ -60913,7 +61286,7 @@ abstract class TestCase extends \PHPUnit\Framework\Assert implements \PHPUnit\Fr */ protected static function createStubForIntersectionOfInterfaces(array $interfaces) : Stub { - $stub = (new MockGenerator())->getMockForInterfaces($interfaces); + $stub = (new MockGenerator())->testDoubleForInterfaceIntersection($interfaces, \false); Event\Facade::emitter()->testCreatedStubForIntersectionOfInterfaces($interfaces); return $stub; } @@ -61125,6 +61498,7 @@ final class TestRunner $includedFiles = GlobalState::getIncludedFilesAsString(); $iniSettings = GlobalState::getIniSettingsAsString(); } + $exportObjects = Event\Facade::emitter()->exportsObjects() ? 'true' : 'false'; $coverage = CodeCoverage::instance()->isActive() ? 'true' : 'false'; $linesToBeIgnored = var_export(CodeCoverage::instance()->linesToBeIgnored(), \true); if (defined('PHPUNIT_COMPOSER_INSTALL')) { @@ -61150,7 +61524,7 @@ final class TestRunner $offset = hrtime(); $serializedConfiguration = $this->saveConfigurationForChildProcess(); $processResultFile = tempnam(sys_get_temp_dir(), 'phpunit_'); - $var = ['bootstrap' => $bootstrap, 'composerAutoload' => $composerAutoload, 'phar' => $phar, 'filename' => $class->getFileName(), 'className' => $class->getName(), 'collectCodeCoverageInformation' => $coverage, 'linesToBeIgnored' => $linesToBeIgnored, 'data' => $data, 'dataName' => $dataName, 'dependencyInput' => $dependencyInput, 'constants' => $constants, 'globals' => $globals, 'include_path' => $includePath, 'included_files' => $includedFiles, 'iniSettings' => $iniSettings, 'name' => $test->name(), 'offsetSeconds' => $offset[0], 'offsetNanoseconds' => $offset[1], 'serializedConfiguration' => $serializedConfiguration, 'processResultFile' => $processResultFile]; + $var = ['bootstrap' => $bootstrap, 'composerAutoload' => $composerAutoload, 'phar' => $phar, 'filename' => $class->getFileName(), 'className' => $class->getName(), 'collectCodeCoverageInformation' => $coverage, 'linesToBeIgnored' => $linesToBeIgnored, 'data' => $data, 'dataName' => $dataName, 'dependencyInput' => $dependencyInput, 'constants' => $constants, 'globals' => $globals, 'include_path' => $includePath, 'included_files' => $includedFiles, 'iniSettings' => $iniSettings, 'name' => $test->name(), 'offsetSeconds' => $offset[0], 'offsetNanoseconds' => $offset[1], 'serializedConfiguration' => $serializedConfiguration, 'processResultFile' => $processResultFile, 'exportObjects' => $exportObjects]; if (!$runEntireClass) { $var['methodName'] = $test->name(); } @@ -65015,6 +65389,9 @@ namespace PHPUnit\Metadata; */ final class After extends \PHPUnit\Metadata\Metadata { + /** + * @psalm-assert-if-true After $this + */ public function isAfter() : bool { return \true; @@ -65040,6 +65417,9 @@ namespace PHPUnit\Metadata; */ final class AfterClass extends \PHPUnit\Metadata\Metadata { + /** + * @psalm-assert-if-true AfterClass $this + */ public function isAfterClass() : bool { return \true; @@ -65797,11 +66177,17 @@ namespace PHPUnit\Metadata; final class BackupGlobals extends \PHPUnit\Metadata\Metadata { private readonly bool $enabled; + /** + * @psalm-param 0|1 $level + */ protected function __construct(int $level, bool $enabled) { parent::__construct($level); $this->enabled = $enabled; } + /** + * @psalm-assert-if-true BackupGlobals $this + */ public function isBackupGlobals() : bool { return \true; @@ -65832,11 +66218,17 @@ namespace PHPUnit\Metadata; final class BackupStaticProperties extends \PHPUnit\Metadata\Metadata { private readonly bool $enabled; + /** + * @psalm-param 0|1 $level + */ protected function __construct(int $level, bool $enabled) { parent::__construct($level); $this->enabled = $enabled; } + /** + * @psalm-assert-if-true BackupStaticProperties $this + */ public function isBackupStaticProperties() : bool { return \true; @@ -65866,6 +66258,9 @@ namespace PHPUnit\Metadata; */ final class Before extends \PHPUnit\Metadata\Metadata { + /** + * @psalm-assert-if-true Before $this + */ public function isBefore() : bool { return \true; @@ -65891,6 +66286,9 @@ namespace PHPUnit\Metadata; */ final class BeforeClass extends \PHPUnit\Metadata\Metadata { + /** + * @psalm-assert-if-true BeforeClass $this + */ public function isBeforeClass() : bool { return \true; @@ -65916,16 +66314,29 @@ namespace PHPUnit\Metadata; */ final class Covers extends \PHPUnit\Metadata\Metadata { + /** + * @psalm-var non-empty-string + */ private readonly string $target; + /** + * @psalm-param 0|1 $level + * @psalm-param non-empty-string $target + */ protected function __construct(int $level, string $target) { parent::__construct($level); $this->target = $target; } + /** + * @psalm-assert-if-true Covers $this + */ public function isCovers() : bool { return \true; } + /** + * @psalm-return non-empty-string + */ public function target() : string { return $this->target; @@ -65956,6 +66367,7 @@ final class CoversClass extends \PHPUnit\Metadata\Metadata */ private readonly string $className; /** + * @psalm-param 0|1 $level * @psalm-param class-string $className */ protected function __construct(int $level, string $className) @@ -65963,6 +66375,9 @@ final class CoversClass extends \PHPUnit\Metadata\Metadata parent::__construct($level); $this->className = $className; } + /** + * @psalm-assert-if-true CoversClass $this + */ public function isCoversClass() : bool { return \true; @@ -66009,6 +66424,7 @@ final class CoversDefaultClass extends \PHPUnit\Metadata\Metadata */ private readonly string $className; /** + * @psalm-param 0|1 $level * @psalm-param class-string $className */ protected function __construct(int $level, string $className) @@ -66016,6 +66432,9 @@ final class CoversDefaultClass extends \PHPUnit\Metadata\Metadata parent::__construct($level); $this->className = $className; } + /** + * @psalm-assert-if-true CoversDefaultClass $this + */ public function isCoversDefaultClass() : bool { return \true; @@ -66048,16 +66467,29 @@ namespace PHPUnit\Metadata; */ final class CoversFunction extends \PHPUnit\Metadata\Metadata { + /** + * @psalm-var non-empty-string + */ private readonly string $functionName; + /** + * @psalm-param 0|1 $level + * @psalm-param non-empty-string $functionName + */ protected function __construct(int $level, string $functionName) { parent::__construct($level); $this->functionName = $functionName; } + /** + * @psalm-assert-if-true CoversFunction $this + */ public function isCoversFunction() : bool { return \true; } + /** + * @psalm-return non-empty-string + */ public function functionName() : string { return $this->functionName; @@ -66090,6 +66522,9 @@ namespace PHPUnit\Metadata; */ final class CoversNothing extends \PHPUnit\Metadata\Metadata { + /** + * @psalm-assert-if-true CoversNothing $this + */ public function isCoversNothing() : bool { return \true; @@ -66119,9 +66554,14 @@ final class DataProvider extends \PHPUnit\Metadata\Metadata * @psalm-var class-string */ private readonly string $className; + /** + * @psalm-var non-empty-string + */ private readonly string $methodName; /** + * @psalm-param 0|1 $level * @psalm-param class-string $className + * @psalm-param non-empty-string $methodName */ protected function __construct(int $level, string $className, string $methodName) { @@ -66129,6 +66569,9 @@ final class DataProvider extends \PHPUnit\Metadata\Metadata $this->className = $className; $this->methodName = $methodName; } + /** + * @psalm-assert-if-true DataProvider $this + */ public function isDataProvider() : bool { return \true; @@ -66140,6 +66583,9 @@ final class DataProvider extends \PHPUnit\Metadata\Metadata { return $this->className; } + /** + * @psalm-return non-empty-string + */ public function methodName() : string { return $this->methodName; @@ -66172,6 +66618,7 @@ final class DependsOnClass extends \PHPUnit\Metadata\Metadata private readonly bool $deepClone; private readonly bool $shallowClone; /** + * @psalm-param 0|1 $level * @psalm-param class-string $className */ protected function __construct(int $level, string $className, bool $deepClone, bool $shallowClone) @@ -66181,6 +66628,9 @@ final class DependsOnClass extends \PHPUnit\Metadata\Metadata $this->deepClone = $deepClone; $this->shallowClone = $shallowClone; } + /** + * @psalm-assert-if-true DependsOnClass $this + */ public function isDependsOnClass() : bool { return \true; @@ -66225,11 +66675,16 @@ final class DependsOnMethod extends \PHPUnit\Metadata\Metadata * @psalm-var class-string */ private readonly string $className; + /** + * @psalm-var non-empty-string + */ private readonly string $methodName; private readonly bool $deepClone; private readonly bool $shallowClone; /** + * @psalm-param 0|1 $level * @psalm-param class-string $className + * @psalm-param non-empty-string $methodName */ protected function __construct(int $level, string $className, string $methodName, bool $deepClone, bool $shallowClone) { @@ -66239,6 +66694,9 @@ final class DependsOnMethod extends \PHPUnit\Metadata\Metadata $this->deepClone = $deepClone; $this->shallowClone = $shallowClone; } + /** + * @psalm-assert-if-true DependsOnMethod $this + */ public function isDependsOnMethod() : bool { return \true; @@ -66250,6 +66708,9 @@ final class DependsOnMethod extends \PHPUnit\Metadata\Metadata { return $this->className; } + /** + * @psalm-return non-empty-string + */ public function methodName() : string { return $this->methodName; @@ -66283,6 +66744,9 @@ namespace PHPUnit\Metadata; */ final class DoesNotPerformAssertions extends \PHPUnit\Metadata\Metadata { + /** + * @psalm-assert-if-true DoesNotPerformAssertions $this + */ public function isDoesNotPerformAssertions() : bool { return \true; @@ -66406,16 +66870,29 @@ namespace PHPUnit\Metadata; */ final class ExcludeGlobalVariableFromBackup extends \PHPUnit\Metadata\Metadata { + /** + * @psalm-var non-empty-string + */ private readonly string $globalVariableName; + /** + * @psalm-param 0|1 $level + * @psalm-param non-empty-string $globalVariableName + */ protected function __construct(int $level, string $globalVariableName) { parent::__construct($level); $this->globalVariableName = $globalVariableName; } + /** + * @psalm-assert-if-true ExcludeGlobalVariableFromBackup $this + */ public function isExcludeGlobalVariableFromBackup() : bool { return \true; } + /** + * @psalm-return non-empty-string + */ public function globalVariableName() : string { return $this->globalVariableName; @@ -66445,9 +66922,14 @@ final class ExcludeStaticPropertyFromBackup extends \PHPUnit\Metadata\Metadata * @psalm-var class-string */ private readonly string $className; + /** + * @psalm-var non-empty-string + */ private readonly string $propertyName; /** + * @psalm-param 0|1 $level * @psalm-param class-string $className + * @psalm-param non-empty-string $propertyName */ protected function __construct(int $level, string $className, string $propertyName) { @@ -66455,6 +66937,9 @@ final class ExcludeStaticPropertyFromBackup extends \PHPUnit\Metadata\Metadata $this->className = $className; $this->propertyName = $propertyName; } + /** + * @psalm-assert-if-true ExcludeStaticPropertyFromBackup $this + */ public function isExcludeStaticPropertyFromBackup() : bool { return \true; @@ -66466,6 +66951,9 @@ final class ExcludeStaticPropertyFromBackup extends \PHPUnit\Metadata\Metadata { return $this->className; } + /** + * @psalm-return non-empty-string + */ public function propertyName() : string { return $this->propertyName; @@ -66491,16 +66979,29 @@ namespace PHPUnit\Metadata; */ final class Group extends \PHPUnit\Metadata\Metadata { + /** + * @psalm-var non-empty-string + */ private readonly string $groupName; + /** + * @psalm-param 0|1 $level + * @psalm-param non-empty-string $groupName + */ protected function __construct(int $level, string $groupName) { parent::__construct($level); $this->groupName = $groupName; } + /** + * @psalm-assert-if-true Group $this + */ public function isGroup() : bool { return \true; } + /** + * @psalm-return non-empty-string + */ public function groupName() : string { return $this->groupName; @@ -66523,6 +67024,8 @@ namespace PHPUnit\Metadata; * @psalm-immutable * * @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit + * + * @deprecated https://github.com/sebastianbergmann/phpunit/issues/5513 */ final class IgnoreClassForCodeCoverage extends \PHPUnit\Metadata\Metadata { @@ -66531,6 +67034,7 @@ final class IgnoreClassForCodeCoverage extends \PHPUnit\Metadata\Metadata */ private readonly string $className; /** + * @psalm-param 0|1 $level * @psalm-param class-string $className */ protected function __construct(int $level, string $className) @@ -66538,6 +67042,9 @@ final class IgnoreClassForCodeCoverage extends \PHPUnit\Metadata\Metadata parent::__construct($level); $this->className = $className; } + /** + * @psalm-assert-if-true IgnoreClassForCodeCoverage $this + */ public function isIgnoreClassForCodeCoverage() : bool { return \true; @@ -66567,6 +67074,8 @@ namespace PHPUnit\Metadata; * @psalm-immutable * * @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit + * + * @deprecated https://github.com/sebastianbergmann/phpunit/issues/5513 */ final class IgnoreFunctionForCodeCoverage extends \PHPUnit\Metadata\Metadata { @@ -66575,6 +67084,7 @@ final class IgnoreFunctionForCodeCoverage extends \PHPUnit\Metadata\Metadata */ private readonly string $functionName; /** + * @psalm-param 0|1 $level * @psalm-param non-empty-string $functionName */ protected function __construct(int $level, string $functionName) @@ -66582,10 +67092,16 @@ final class IgnoreFunctionForCodeCoverage extends \PHPUnit\Metadata\Metadata parent::__construct($level); $this->functionName = $functionName; } + /** + * @psalm-assert-if-true IgnoreFunctionForCodeCoverage $this + */ public function isIgnoreFunctionForCodeCoverage() : bool { return \true; } + /** + * @psalm-return non-empty-string + */ public function functionName() : string { return $this->functionName; @@ -66608,6 +67124,8 @@ namespace PHPUnit\Metadata; * @psalm-immutable * * @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit + * + * @deprecated https://github.com/sebastianbergmann/phpunit/issues/5513 */ final class IgnoreMethodForCodeCoverage extends \PHPUnit\Metadata\Metadata { @@ -66620,6 +67138,7 @@ final class IgnoreMethodForCodeCoverage extends \PHPUnit\Metadata\Metadata */ private readonly string $methodName; /** + * @psalm-param 0|1 $level * @psalm-param class-string $className * @psalm-param non-empty-string $methodName */ @@ -66629,6 +67148,9 @@ final class IgnoreMethodForCodeCoverage extends \PHPUnit\Metadata\Metadata $this->className = $className; $this->methodName = $methodName; } + /** + * @psalm-assert-if-true IgnoreMethodForCodeCoverage $this + */ public function isIgnoreMethodForCodeCoverage() : bool { return \true; @@ -66671,6 +67193,9 @@ abstract class Metadata { private const CLASS_LEVEL = 0; private const METHOD_LEVEL = 1; + /** + * @psalm-var 0|1 + */ private readonly int $level; public static function after() : \PHPUnit\Metadata\After { @@ -66711,14 +67236,23 @@ abstract class Metadata { return new \PHPUnit\Metadata\CoversClass(self::CLASS_LEVEL, $className); } + /** + * @psalm-param non-empty-string $functionName + */ public static function coversFunction(string $functionName) : \PHPUnit\Metadata\CoversFunction { return new \PHPUnit\Metadata\CoversFunction(self::CLASS_LEVEL, $functionName); } + /** + * @psalm-param non-empty-string $target + */ public static function coversOnClass(string $target) : \PHPUnit\Metadata\Covers { return new \PHPUnit\Metadata\Covers(self::CLASS_LEVEL, $target); } + /** + * @psalm-param non-empty-string $target + */ public static function coversOnMethod(string $target) : \PHPUnit\Metadata\Covers { return new \PHPUnit\Metadata\Covers(self::METHOD_LEVEL, $target); @@ -66740,15 +67274,23 @@ abstract class Metadata } /** * @psalm-param class-string $className + * @psalm-param non-empty-string $methodName */ public static function dataProvider(string $className, string $methodName) : \PHPUnit\Metadata\DataProvider { return new \PHPUnit\Metadata\DataProvider(self::METHOD_LEVEL, $className, $methodName); } + /** + * @psalm-param class-string $className + */ public static function dependsOnClass(string $className, bool $deepClone, bool $shallowClone) : \PHPUnit\Metadata\DependsOnClass { return new \PHPUnit\Metadata\DependsOnClass(self::METHOD_LEVEL, $className, $deepClone, $shallowClone); } + /** + * @psalm-param class-string $className + * @psalm-param non-empty-string $methodName + */ public static function dependsOnMethod(string $className, string $methodName, bool $deepClone, bool $shallowClone) : \PHPUnit\Metadata\DependsOnMethod { return new \PHPUnit\Metadata\DependsOnMethod(self::METHOD_LEVEL, $className, $methodName, $deepClone, $shallowClone); @@ -66761,16 +67303,23 @@ abstract class Metadata { return new \PHPUnit\Metadata\DoesNotPerformAssertions(self::METHOD_LEVEL); } + /** + * @psalm-param non-empty-string $globalVariableName + */ public static function excludeGlobalVariableFromBackupOnClass(string $globalVariableName) : \PHPUnit\Metadata\ExcludeGlobalVariableFromBackup { return new \PHPUnit\Metadata\ExcludeGlobalVariableFromBackup(self::CLASS_LEVEL, $globalVariableName); } + /** + * @psalm-param non-empty-string $globalVariableName + */ public static function excludeGlobalVariableFromBackupOnMethod(string $globalVariableName) : \PHPUnit\Metadata\ExcludeGlobalVariableFromBackup { return new \PHPUnit\Metadata\ExcludeGlobalVariableFromBackup(self::METHOD_LEVEL, $globalVariableName); } /** * @psalm-param class-string $className + * @psalm-param non-empty-string $propertyName */ public static function excludeStaticPropertyFromBackupOnClass(string $className, string $propertyName) : \PHPUnit\Metadata\ExcludeStaticPropertyFromBackup { @@ -66778,15 +67327,22 @@ abstract class Metadata } /** * @psalm-param class-string $className + * @psalm-param non-empty-string $propertyName */ public static function excludeStaticPropertyFromBackupOnMethod(string $className, string $propertyName) : \PHPUnit\Metadata\ExcludeStaticPropertyFromBackup { return new \PHPUnit\Metadata\ExcludeStaticPropertyFromBackup(self::METHOD_LEVEL, $className, $propertyName); } + /** + * @psalm-param non-empty-string $groupName + */ public static function groupOnClass(string $groupName) : \PHPUnit\Metadata\Group { return new \PHPUnit\Metadata\Group(self::CLASS_LEVEL, $groupName); } + /** + * @psalm-param non-empty-string $groupName + */ public static function groupOnMethod(string $groupName) : \PHPUnit\Metadata\Group { return new \PHPUnit\Metadata\Group(self::METHOD_LEVEL, $groupName); @@ -66829,16 +67385,23 @@ abstract class Metadata { return new \PHPUnit\Metadata\PreserveGlobalState(self::METHOD_LEVEL, $enabled); } + /** + * @psalm-param non-empty-string $functionName + */ public static function requiresFunctionOnClass(string $functionName) : \PHPUnit\Metadata\RequiresFunction { return new \PHPUnit\Metadata\RequiresFunction(self::CLASS_LEVEL, $functionName); } + /** + * @psalm-param non-empty-string $functionName + */ public static function requiresFunctionOnMethod(string $functionName) : \PHPUnit\Metadata\RequiresFunction { return new \PHPUnit\Metadata\RequiresFunction(self::METHOD_LEVEL, $functionName); } /** * @psalm-param class-string $className + * @psalm-param non-empty-string $methodName */ public static function requiresMethodOnClass(string $className, string $methodName) : \PHPUnit\Metadata\RequiresMethod { @@ -66846,23 +67409,36 @@ abstract class Metadata } /** * @psalm-param class-string $className + * @psalm-param non-empty-string $methodName */ public static function requiresMethodOnMethod(string $className, string $methodName) : \PHPUnit\Metadata\RequiresMethod { return new \PHPUnit\Metadata\RequiresMethod(self::METHOD_LEVEL, $className, $methodName); } + /** + * @psalm-param non-empty-string $operatingSystem + */ public static function requiresOperatingSystemOnClass(string $operatingSystem) : \PHPUnit\Metadata\RequiresOperatingSystem { return new \PHPUnit\Metadata\RequiresOperatingSystem(self::CLASS_LEVEL, $operatingSystem); } + /** + * @psalm-param non-empty-string $operatingSystem + */ public static function requiresOperatingSystemOnMethod(string $operatingSystem) : \PHPUnit\Metadata\RequiresOperatingSystem { return new \PHPUnit\Metadata\RequiresOperatingSystem(self::METHOD_LEVEL, $operatingSystem); } + /** + * @psalm-param non-empty-string $operatingSystemFamily + */ public static function requiresOperatingSystemFamilyOnClass(string $operatingSystemFamily) : \PHPUnit\Metadata\RequiresOperatingSystemFamily { return new \PHPUnit\Metadata\RequiresOperatingSystemFamily(self::CLASS_LEVEL, $operatingSystemFamily); } + /** + * @psalm-param non-empty-string $operatingSystemFamily + */ public static function requiresOperatingSystemFamilyOnMethod(string $operatingSystemFamily) : \PHPUnit\Metadata\RequiresOperatingSystemFamily { return new \PHPUnit\Metadata\RequiresOperatingSystemFamily(self::METHOD_LEVEL, $operatingSystemFamily); @@ -66875,10 +67451,16 @@ abstract class Metadata { return new \PHPUnit\Metadata\RequiresPhp(self::METHOD_LEVEL, $versionRequirement); } + /** + * @psalm-param non-empty-string $extension + */ public static function requiresPhpExtensionOnClass(string $extension, ?Requirement $versionRequirement) : \PHPUnit\Metadata\RequiresPhpExtension { return new \PHPUnit\Metadata\RequiresPhpExtension(self::CLASS_LEVEL, $extension, $versionRequirement); } + /** + * @psalm-param non-empty-string $extension + */ public static function requiresPhpExtensionOnMethod(string $extension, ?Requirement $versionRequirement) : \PHPUnit\Metadata\RequiresPhpExtension { return new \PHPUnit\Metadata\RequiresPhpExtension(self::METHOD_LEVEL, $extension, $versionRequirement); @@ -66891,10 +67473,18 @@ abstract class Metadata { return new \PHPUnit\Metadata\RequiresPhpunit(self::METHOD_LEVEL, $versionRequirement); } + /** + * @psalm-param non-empty-string $setting + * @psalm-param non-empty-string $value + */ public static function requiresSettingOnClass(string $setting, string $value) : \PHPUnit\Metadata\RequiresSetting { return new \PHPUnit\Metadata\RequiresSetting(self::CLASS_LEVEL, $setting, $value); } + /** + * @psalm-param non-empty-string $setting + * @psalm-param non-empty-string $value + */ public static function requiresSettingOnMethod(string $setting, string $value) : \PHPUnit\Metadata\RequiresSetting { return new \PHPUnit\Metadata\RequiresSetting(self::METHOD_LEVEL, $setting, $value); @@ -66915,10 +67505,16 @@ abstract class Metadata { return new \PHPUnit\Metadata\Test(self::METHOD_LEVEL); } + /** + * @psalm-param non-empty-string $text + */ public static function testDoxOnClass(string $text) : \PHPUnit\Metadata\TestDox { return new \PHPUnit\Metadata\TestDox(self::CLASS_LEVEL, $text); } + /** + * @psalm-param non-empty-string $text + */ public static function testDoxOnMethod(string $text) : \PHPUnit\Metadata\TestDox { return new \PHPUnit\Metadata\TestDox(self::METHOD_LEVEL, $text); @@ -66934,14 +67530,23 @@ abstract class Metadata { return new \PHPUnit\Metadata\UsesClass(self::CLASS_LEVEL, $className); } + /** + * @psalm-param non-empty-string $functionName + */ public static function usesFunction(string $functionName) : \PHPUnit\Metadata\UsesFunction { return new \PHPUnit\Metadata\UsesFunction(self::CLASS_LEVEL, $functionName); } + /** + * @psalm-param non-empty-string $target + */ public static function usesOnClass(string $target) : \PHPUnit\Metadata\Uses { return new \PHPUnit\Metadata\Uses(self::CLASS_LEVEL, $target); } + /** + * @psalm-param non-empty-string $target + */ public static function usesOnMethod(string $target) : \PHPUnit\Metadata\Uses { return new \PHPUnit\Metadata\Uses(self::METHOD_LEVEL, $target); @@ -66957,6 +67562,9 @@ abstract class Metadata { return new \PHPUnit\Metadata\WithoutErrorHandler(self::METHOD_LEVEL); } + /** + * @psalm-param 0|1 $level + */ protected function __construct(int $level) { $this->level = $level; @@ -67074,10 +67682,16 @@ abstract class Metadata { return \false; } + /** + * @psalm-assert-if-true ExcludeGlobalVariableFromBackup $this + */ public function isExcludeGlobalVariableFromBackup() : bool { return \false; } + /** + * @psalm-assert-if-true ExcludeStaticPropertyFromBackup $this + */ public function isExcludeStaticPropertyFromBackup() : bool { return \false; @@ -67418,14 +68032,23 @@ final class MetadataCollection implements Countable, IteratorAggregate { return new self(...array_filter($this->metadata, static fn(\PHPUnit\Metadata\Metadata $metadata): bool => $metadata->isGroup())); } + /** + * @deprecated https://github.com/sebastianbergmann/phpunit/issues/5513 + */ public function isIgnoreClassForCodeCoverage() : self { return new self(...array_filter($this->metadata, static fn(\PHPUnit\Metadata\Metadata $metadata): bool => $metadata->isIgnoreClassForCodeCoverage())); } + /** + * @deprecated https://github.com/sebastianbergmann/phpunit/issues/5513 + */ public function isIgnoreMethodForCodeCoverage() : self { return new self(...array_filter($this->metadata, static fn(\PHPUnit\Metadata\Metadata $metadata): bool => $metadata->isIgnoreMethodForCodeCoverage())); } + /** + * @deprecated https://github.com/sebastianbergmann/phpunit/issues/5513 + */ public function isIgnoreFunctionForCodeCoverage() : self { return new self(...array_filter($this->metadata, static fn(\PHPUnit\Metadata\Metadata $metadata): bool => $metadata->isIgnoreFunctionForCodeCoverage())); @@ -67815,9 +68438,11 @@ final class Registry } try { $reflection = new ReflectionClass($class); + // @codeCoverageIgnoreStart } catch (\ReflectionException $e) { throw new ReflectionException($e->getMessage(), $e->getCode(), $e); } + // @codeCoverageIgnoreEnd return $this->classDocBlocks[$class] = \PHPUnit\Metadata\Annotation\Parser\DocBlock::ofClass($reflection); } /** @@ -67833,9 +68458,11 @@ final class Registry } try { $reflection = new ReflectionMethod($classInHierarchy, $method); + // @codeCoverageIgnoreStart } catch (\ReflectionException $e) { throw new ReflectionException($e->getMessage(), $e->getCode(), $e); } + // @codeCoverageIgnoreEnd return $this->methodDocBlocks[$classInHierarchy][$method] = \PHPUnit\Metadata\Annotation\Parser\DocBlock::ofMethod($reflection); } } @@ -68829,6 +69456,9 @@ namespace PHPUnit\Metadata; */ final class PostCondition extends \PHPUnit\Metadata\Metadata { + /** + * @psalm-assert-if-true PostCondition $this + */ public function isPostCondition() : bool { return \true; @@ -68854,6 +69484,9 @@ namespace PHPUnit\Metadata; */ final class PreCondition extends \PHPUnit\Metadata\Metadata { + /** + * @psalm-assert-if-true PreCondition $this + */ public function isPreCondition() : bool { return \true; @@ -68880,11 +69513,17 @@ namespace PHPUnit\Metadata; final class PreserveGlobalState extends \PHPUnit\Metadata\Metadata { private readonly bool $enabled; + /** + * @psalm-param 0|1 $level + */ protected function __construct(int $level, bool $enabled) { parent::__construct($level); $this->enabled = $enabled; } + /** + * @psalm-assert-if-true PreserveGlobalState $this + */ public function isPreserveGlobalState() : bool { return \true; @@ -68914,16 +69553,29 @@ namespace PHPUnit\Metadata; */ final class RequiresFunction extends \PHPUnit\Metadata\Metadata { + /** + * @psalm-var non-empty-string + */ private readonly string $functionName; + /** + * @psalm-param 0|1 $level + * @psalm-param non-empty-string $functionName + */ protected function __construct(int $level, string $functionName) { parent::__construct($level); $this->functionName = $functionName; } + /** + * @psalm-assert-if-true RequiresFunction $this + */ public function isRequiresFunction() : bool { return \true; } + /** + * @psalm-return non-empty-string + */ public function functionName() : string { return $this->functionName; @@ -68953,9 +69605,14 @@ final class RequiresMethod extends \PHPUnit\Metadata\Metadata * @psalm-var class-string */ private readonly string $className; + /** + * @psalm-var non-empty-string + */ private readonly string $methodName; /** + * @psalm-param 0|1 $level * @psalm-param class-string $className + * @psalm-param non-empty-string $methodName */ protected function __construct(int $level, string $className, string $methodName) { @@ -68963,6 +69620,9 @@ final class RequiresMethod extends \PHPUnit\Metadata\Metadata $this->className = $className; $this->methodName = $methodName; } + /** + * @psalm-assert-if-true RequiresMethod $this + */ public function isRequiresMethod() : bool { return \true; @@ -68974,6 +69634,9 @@ final class RequiresMethod extends \PHPUnit\Metadata\Metadata { return $this->className; } + /** + * @psalm-return non-empty-string + */ public function methodName() : string { return $this->methodName; @@ -68999,16 +69662,29 @@ namespace PHPUnit\Metadata; */ final class RequiresOperatingSystem extends \PHPUnit\Metadata\Metadata { + /** + * @psalm-var non-empty-string + */ private readonly string $operatingSystem; + /** + * @psalm-param 0|1 $level + * @psalm-param non-empty-string $operatingSystem + */ public function __construct(int $level, string $operatingSystem) { parent::__construct($level); $this->operatingSystem = $operatingSystem; } + /** + * @psalm-assert-if-true RequiresOperatingSystem $this + */ public function isRequiresOperatingSystem() : bool { return \true; } + /** + * @psalm-return non-empty-string + */ public function operatingSystem() : string { return $this->operatingSystem; @@ -69034,16 +69710,29 @@ namespace PHPUnit\Metadata; */ final class RequiresOperatingSystemFamily extends \PHPUnit\Metadata\Metadata { + /** + * @psalm-var non-empty-string + */ private readonly string $operatingSystemFamily; + /** + * @psalm-param 0|1 $level + * @psalm-param non-empty-string $operatingSystemFamily + */ protected function __construct(int $level, string $operatingSystemFamily) { parent::__construct($level); $this->operatingSystemFamily = $operatingSystemFamily; } + /** + * @psalm-assert-if-true RequiresOperatingSystemFamily $this + */ public function isRequiresOperatingSystemFamily() : bool { return \true; } + /** + * @psalm-return non-empty-string + */ public function operatingSystemFamily() : string { return $this->operatingSystemFamily; @@ -69071,11 +69760,17 @@ use PHPUnit\Metadata\Version\Requirement; final class RequiresPhp extends \PHPUnit\Metadata\Metadata { private readonly Requirement $versionRequirement; + /** + * @psalm-param 0|1 $level + */ protected function __construct(int $level, Requirement $versionRequirement) { parent::__construct($level); $this->versionRequirement = $versionRequirement; } + /** + * @psalm-assert-if-true RequiresPhp $this + */ public function isRequiresPhp() : bool { return \true; @@ -69106,18 +69801,31 @@ use PHPUnit\Metadata\Version\Requirement; */ final class RequiresPhpExtension extends \PHPUnit\Metadata\Metadata { + /** + * @psalm-var non-empty-string + */ private readonly string $extension; private readonly ?Requirement $versionRequirement; + /** + * @psalm-param 0|1 $level + * @psalm-param non-empty-string $extension + */ protected function __construct(int $level, string $extension, ?Requirement $versionRequirement) { parent::__construct($level); $this->extension = $extension; $this->versionRequirement = $versionRequirement; } + /** + * @psalm-assert-if-true RequiresPhpExtension $this + */ public function isRequiresPhpExtension() : bool { return \true; } + /** + * @psalm-return non-empty-string + */ public function extension() : string { return $this->extension; @@ -69162,11 +69870,17 @@ use PHPUnit\Metadata\Version\Requirement; final class RequiresPhpunit extends \PHPUnit\Metadata\Metadata { private readonly Requirement $versionRequirement; + /** + * @psalm-param 0|1 $level + */ protected function __construct(int $level, Requirement $versionRequirement) { parent::__construct($level); $this->versionRequirement = $versionRequirement; } + /** + * @psalm-assert-if-true RequiresPhpunit $this + */ public function isRequiresPhpunit() : bool { return \true; @@ -69196,22 +69910,42 @@ namespace PHPUnit\Metadata; */ final class RequiresSetting extends \PHPUnit\Metadata\Metadata { + /** + * @psalm-var non-empty-string + */ private readonly string $setting; + /** + * @psalm-var non-empty-string + */ private readonly string $value; + /** + * @psalm-param 0|1 $level + * @psalm-param non-empty-string $setting + * @psalm-param non-empty-string $value + */ protected function __construct(int $level, string $setting, string $value) { parent::__construct($level); $this->setting = $setting; $this->value = $value; } + /** + * @psalm-assert-if-true RequiresSetting $this + */ public function isRequiresSetting() : bool { return \true; } + /** + * @psalm-return non-empty-string + */ public function setting() : string { return $this->setting; } + /** + * @psalm-return non-empty-string + */ public function value() : string { return $this->value; @@ -69237,6 +69971,9 @@ namespace PHPUnit\Metadata; */ final class RunClassInSeparateProcess extends \PHPUnit\Metadata\Metadata { + /** + * @psalm-assert-if-true RunClassInSeparateProcess $this + */ public function isRunClassInSeparateProcess() : bool { return \true; @@ -69262,6 +69999,9 @@ namespace PHPUnit\Metadata; */ final class RunInSeparateProcess extends \PHPUnit\Metadata\Metadata { + /** + * @psalm-assert-if-true RunInSeparateProcess $this + */ public function isRunInSeparateProcess() : bool { return \true; @@ -69287,6 +70027,9 @@ namespace PHPUnit\Metadata; */ final class RunTestsInSeparateProcesses extends \PHPUnit\Metadata\Metadata { + /** + * @psalm-assert-if-true RunTestsInSeparateProcesses $this + */ public function isRunTestsInSeparateProcesses() : bool { return \true; @@ -69312,6 +70055,9 @@ namespace PHPUnit\Metadata; */ final class Test extends \PHPUnit\Metadata\Metadata { + /** + * @psalm-assert-if-true Test $this + */ public function isTest() : bool { return \true; @@ -69337,16 +70083,29 @@ namespace PHPUnit\Metadata; */ final class TestDox extends \PHPUnit\Metadata\Metadata { + /** + * @psalm-var non-empty-string + */ private readonly string $text; + /** + * @psalm-param 0|1 $level + * @psalm-param non-empty-string $text + */ protected function __construct(int $level, string $text) { parent::__construct($level); $this->text = $text; } + /** + * @psalm-assert-if-true TestDox $this + */ public function isTestDox() : bool { return \true; } + /** + * @psalm-return non-empty-string + */ public function text() : string { return $this->text; @@ -69373,11 +70132,17 @@ namespace PHPUnit\Metadata; final class TestWith extends \PHPUnit\Metadata\Metadata { private readonly array $data; + /** + * @psalm-param 0|1 $level + */ protected function __construct(int $level, array $data) { parent::__construct($level); $this->data = $data; } + /** + * @psalm-assert-if-true TestWith $this + */ public function isTestWith() : bool { return \true; @@ -69407,16 +70172,29 @@ namespace PHPUnit\Metadata; */ final class Uses extends \PHPUnit\Metadata\Metadata { + /** + * @psalm-var non-empty-string + */ private readonly string $target; + /** + * @psalm-param 0|1 $level + * @psalm-param non-empty-string $target + */ protected function __construct(int $level, string $target) { parent::__construct($level); $this->target = $target; } + /** + * @psalm-assert-if-true Uses $this + */ public function isUses() : bool { return \true; } + /** + * @psalm-return non-empty-string + */ public function target() : string { return $this->target; @@ -69447,6 +70225,7 @@ final class UsesClass extends \PHPUnit\Metadata\Metadata */ private readonly string $className; /** + * @psalm-param 0|1 $level * @psalm-param class-string $className */ protected function __construct(int $level, string $className) @@ -69454,6 +70233,9 @@ final class UsesClass extends \PHPUnit\Metadata\Metadata parent::__construct($level); $this->className = $className; } + /** + * @psalm-assert-if-true UsesClass $this + */ public function isUsesClass() : bool { return \true; @@ -69500,6 +70282,7 @@ final class UsesDefaultClass extends \PHPUnit\Metadata\Metadata */ private readonly string $className; /** + * @psalm-param 0|1 $level * @psalm-param class-string $className */ protected function __construct(int $level, string $className) @@ -69507,6 +70290,9 @@ final class UsesDefaultClass extends \PHPUnit\Metadata\Metadata parent::__construct($level); $this->className = $className; } + /** + * @psalm-assert-if-true UsesDefaultClass $this + */ public function isUsesDefaultClass() : bool { return \true; @@ -69539,16 +70325,29 @@ namespace PHPUnit\Metadata; */ final class UsesFunction extends \PHPUnit\Metadata\Metadata { + /** + * @psalm-var non-empty-string + */ private readonly string $functionName; + /** + * @psalm-param 0|1 $level + * @psalm-param non-empty-string $functionName + */ public function __construct(int $level, string $functionName) { parent::__construct($level); $this->functionName = $functionName; } + /** + * @psalm-assert-if-true UsesFunction $this + */ public function isUsesFunction() : bool { return \true; } + /** + * @psalm-return non-empty-string + */ public function functionName() : string { return $this->functionName; @@ -69711,6 +70510,9 @@ namespace PHPUnit\Metadata; */ final class WithoutErrorHandler extends \PHPUnit\Metadata\Metadata { + /** + * @psalm-assert-if-true WithoutErrorHandler $this + */ public function isWithoutErrorHandler() : bool { return \true; @@ -69718,6 +70520,714 @@ final class WithoutErrorHandler extends \PHPUnit\Metadata\Metadata } + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\Runner\Baseline; + +/** + * @internal This class is not covered by the backward compatibility promise for PHPUnit + */ +final class Baseline +{ + public const VERSION = 1; + /** + * @psalm-var array>> + */ + private array $issues = []; + public function add(\PHPUnit\Runner\Baseline\Issue $issue) : void + { + if (!isset($this->issues[$issue->file()])) { + $this->issues[$issue->file()] = []; + } + if (!isset($this->issues[$issue->file()][$issue->line()])) { + $this->issues[$issue->file()][$issue->line()] = []; + } + $this->issues[$issue->file()][$issue->line()][] = $issue; + } + public function has(\PHPUnit\Runner\Baseline\Issue $issue) : bool + { + if (!isset($this->issues[$issue->file()][$issue->line()])) { + return \false; + } + foreach ($this->issues[$issue->file()][$issue->line()] as $_issue) { + if ($_issue->equals($issue)) { + return \true; + } + } + return \false; + } + /** + * @psalm-return array>> + */ + public function groupedByFileAndLine() : array + { + return $this->issues; + } +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\Runner\Baseline; + +use PHPUnit\Runner\Exception; +use RuntimeException; +/** + * @internal This class is not covered by the backward compatibility promise for PHPUnit + */ +final class CannotLoadBaselineException extends RuntimeException implements Exception +{ +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\Runner\Baseline; + +use function sprintf; +use PHPUnit\Runner\Exception; +use RuntimeException; +/** + * @internal This class is not covered by the backward compatibility promise for PHPUnit + */ +final class FileDoesNotHaveLineException extends RuntimeException implements Exception +{ + public function __construct(string $file, int $line) + { + parent::__construct(sprintf('File "%s" does not have line %d', $file, $line)); + } +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\Runner\Baseline; + +use PHPUnit\Event\EventFacadeIsSealedException; +use PHPUnit\Event\Facade; +use PHPUnit\Event\Test\DeprecationTriggered; +use PHPUnit\Event\Test\NoticeTriggered; +use PHPUnit\Event\Test\PhpDeprecationTriggered; +use PHPUnit\Event\Test\PhpNoticeTriggered; +use PHPUnit\Event\Test\PhpWarningTriggered; +use PHPUnit\Event\Test\WarningTriggered; +use PHPUnit\Event\UnknownSubscriberTypeException; +use PHPUnit\Runner\FileDoesNotExistException; +use PHPUnit\TextUI\Configuration\Source; +use PHPUnit\TextUI\Configuration\SourceFilter; +/** + * @internal This class is not covered by the backward compatibility promise for PHPUnit + */ +final class Generator +{ + private \PHPUnit\Runner\Baseline\Baseline $baseline; + private readonly Source $source; + /** + * @throws EventFacadeIsSealedException + * @throws UnknownSubscriberTypeException + */ + public function __construct(Facade $facade, Source $source) + { + $facade->registerSubscribers(new \PHPUnit\Runner\Baseline\TestTriggeredDeprecationSubscriber($this), new \PHPUnit\Runner\Baseline\TestTriggeredNoticeSubscriber($this), new \PHPUnit\Runner\Baseline\TestTriggeredPhpDeprecationSubscriber($this), new \PHPUnit\Runner\Baseline\TestTriggeredPhpNoticeSubscriber($this), new \PHPUnit\Runner\Baseline\TestTriggeredPhpWarningSubscriber($this), new \PHPUnit\Runner\Baseline\TestTriggeredWarningSubscriber($this)); + $this->baseline = new \PHPUnit\Runner\Baseline\Baseline(); + $this->source = $source; + } + public function baseline() : \PHPUnit\Runner\Baseline\Baseline + { + return $this->baseline; + } + /** + * @throws FileDoesNotExistException + * @throws FileDoesNotHaveLineException + */ + public function testTriggeredIssue(DeprecationTriggered|NoticeTriggered|PhpDeprecationTriggered|PhpNoticeTriggered|PhpWarningTriggered|WarningTriggered $event) : void + { + if (!$this->source->ignoreSuppressionOfPhpWarnings() && $event->wasSuppressed()) { + return; + } + if ($this->source->restrictWarnings() && !(new SourceFilter())->includes($this->source, $event->file())) { + return; + } + $this->baseline->add(\PHPUnit\Runner\Baseline\Issue::from($event->file(), $event->line(), null, $event->message())); + } +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\Runner\Baseline; + +use function assert; +use function file; +use function is_file; +use function sha1; +use PHPUnit\Runner\FileDoesNotExistException; +/** + * @internal This class is not covered by the backward compatibility promise for PHPUnit + */ +final class Issue +{ + /** + * @psalm-var non-empty-string + */ + private readonly string $file; + /** + * @psalm-var positive-int + */ + private readonly int $line; + /** + * @psalm-var non-empty-string + */ + private readonly string $hash; + /** + * @psalm-var non-empty-string + */ + private readonly string $description; + /** + * @psalm-param non-empty-string $file + * @psalm-param positive-int $line + * @psalm-param ?non-empty-string $hash + * @psalm-param non-empty-string $description + * + * @throws FileDoesNotExistException + * @throws FileDoesNotHaveLineException + */ + public static function from(string $file, int $line, ?string $hash, string $description) : self + { + if ($hash === null) { + $hash = self::calculateHash($file, $line); + } + return new self($file, $line, $hash, $description); + } + /** + * @psalm-param non-empty-string $file + * @psalm-param positive-int $line + * @psalm-param non-empty-string $hash + * @psalm-param non-empty-string $description + */ + private function __construct(string $file, int $line, string $hash, string $description) + { + $this->file = $file; + $this->line = $line; + $this->hash = $hash; + $this->description = $description; + } + /** + * @psalm-return non-empty-string + */ + public function file() : string + { + return $this->file; + } + /** + * @psalm-return positive-int + */ + public function line() : int + { + return $this->line; + } + /** + * @psalm-return non-empty-string + */ + public function hash() : string + { + return $this->hash; + } + /** + * @psalm-return non-empty-string + */ + public function description() : string + { + return $this->description; + } + public function equals(self $other) : bool + { + return $this->file() === $other->file() && $this->line() === $other->line() && $this->hash() === $other->hash() && $this->description() === $other->description(); + } + /** + * @psalm-param non-empty-string $file + * @psalm-param positive-int $line + * + * @psalm-return non-empty-string + * + * @throws FileDoesNotExistException + * @throws FileDoesNotHaveLineException + */ + private static function calculateHash(string $file, int $line) : string + { + if (!is_file($file)) { + throw new FileDoesNotExistException($file); + } + $lines = file($file, \FILE_IGNORE_NEW_LINES); + $key = $line - 1; + if (!isset($lines[$key])) { + throw new \PHPUnit\Runner\Baseline\FileDoesNotHaveLineException($file, $line); + } + $hash = sha1($lines[$key]); + assert(!empty($hash)); + return $hash; + } +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\Runner\Baseline; + +use function assert; +use function dirname; +use function file_exists; +use function realpath; +use function sprintf; +use function str_replace; +use function trim; +use DOMElement; +use DOMXPath; +use PHPUnit\Util\Xml\Loader as XmlLoader; +use PHPUnit\Util\Xml\XmlException; +/** + * @internal This class is not covered by the backward compatibility promise for PHPUnit + */ +final class Reader +{ + /** + * @psalm-param non-empty-string $baselineFile + * + * @throws CannotLoadBaselineException + */ + public function read(string $baselineFile) : \PHPUnit\Runner\Baseline\Baseline + { + if (!file_exists($baselineFile)) { + throw new \PHPUnit\Runner\Baseline\CannotLoadBaselineException(sprintf('Cannot read baseline %s, file does not exist', $baselineFile)); + } + try { + $document = (new XmlLoader())->loadFile($baselineFile); + } catch (XmlException $e) { + throw new \PHPUnit\Runner\Baseline\CannotLoadBaselineException(sprintf('Cannot read baseline: %s', trim($e->getMessage()))); + } + $version = (int) $document->documentElement->getAttribute('version'); + if ($version !== \PHPUnit\Runner\Baseline\Baseline::VERSION) { + throw new \PHPUnit\Runner\Baseline\CannotLoadBaselineException(sprintf('Cannot read baseline %s, version %d is not supported', $baselineFile, $version)); + } + $baseline = new \PHPUnit\Runner\Baseline\Baseline(); + $baselineDirectory = dirname(realpath($baselineFile)); + $xpath = new DOMXPath($document); + foreach ($xpath->query('file') as $fileElement) { + assert($fileElement instanceof DOMElement); + $file = $baselineDirectory . \DIRECTORY_SEPARATOR . str_replace('/', \DIRECTORY_SEPARATOR, $fileElement->getAttribute('path')); + foreach ($xpath->query('line', $fileElement) as $lineElement) { + assert($lineElement instanceof DOMElement); + $line = (int) $lineElement->getAttribute('number'); + $hash = $lineElement->getAttribute('hash'); + foreach ($xpath->query('issue', $lineElement) as $issueElement) { + assert($issueElement instanceof DOMElement); + $description = $issueElement->textContent; + assert(!empty($file)); + assert($line > 0); + assert(!empty($hash)); + assert(!empty($description)); + $baseline->add(\PHPUnit\Runner\Baseline\Issue::from($file, $line, $hash, $description)); + } + } + } + return $baseline; + } +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\Runner\Baseline; + +use function array_fill; +use function array_merge; +use function array_slice; +use function assert; +use function count; +use function explode; +use function implode; +use function str_replace; +use function strpos; +use function substr; +use function trim; +/** + * @internal This class is not covered by the backward compatibility promise for PHPUnit + * + * @see Copied from https://github.com/phpstan/phpstan-src/blob/1.10.33/src/File/ParentDirectoryRelativePathHelper.php + */ +final class RelativePathCalculator +{ + /** + * @psalm-var non-empty-string $baselineDirectory + */ + private readonly string $baselineDirectory; + /** + * @psalm-param non-empty-string $baselineDirectory + */ + public function __construct(string $baselineDirectory) + { + $this->baselineDirectory = $baselineDirectory; + } + /** + * @psalm-param non-empty-string $filename + * + * @psalm-return non-empty-string + */ + public function calculate(string $filename) : string + { + $result = implode('/', $this->parts($filename)); + assert($result !== ''); + return $result; + } + /** + * @psalm-param non-empty-string $filename + * + * @psalm-return list + */ + public function parts(string $filename) : array + { + $schemePosition = strpos($filename, '://'); + if ($schemePosition !== \false) { + $filename = substr($filename, $schemePosition + 3); + assert($filename !== ''); + } + $parentParts = explode('/', trim(str_replace('\\', '/', $this->baselineDirectory), '/')); + $parentPartsCount = count($parentParts); + $filenameParts = explode('/', trim(str_replace('\\', '/', $filename), '/')); + $filenamePartsCount = count($filenameParts); + $i = 0; + for (; $i < $filenamePartsCount; $i++) { + if ($parentPartsCount < $i + 1) { + break; + } + $parentPath = implode('/', array_slice($parentParts, 0, $i + 1)); + $filenamePath = implode('/', array_slice($filenameParts, 0, $i + 1)); + if ($parentPath !== $filenamePath) { + break; + } + } + if ($i === 0) { + return [$filename]; + } + $dotsCount = $parentPartsCount - $i; + assert($dotsCount >= 0); + return array_merge(array_fill(0, $dotsCount, '..'), array_slice($filenameParts, $i)); + } +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\Runner\Baseline; + +/** + * @internal This class is not covered by the backward compatibility promise for PHPUnit + */ +abstract class Subscriber +{ + private readonly \PHPUnit\Runner\Baseline\Generator $generator; + public function __construct(\PHPUnit\Runner\Baseline\Generator $generator) + { + $this->generator = $generator; + } + protected function generator() : \PHPUnit\Runner\Baseline\Generator + { + return $this->generator; + } +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\Runner\Baseline; + +use PHPUnit\Event\Test\DeprecationTriggered; +use PHPUnit\Event\Test\DeprecationTriggeredSubscriber; +use PHPUnit\Runner\FileDoesNotExistException; +/** + * @internal This class is not covered by the backward compatibility promise for PHPUnit + */ +final class TestTriggeredDeprecationSubscriber extends \PHPUnit\Runner\Baseline\Subscriber implements DeprecationTriggeredSubscriber +{ + /** + * @throws FileDoesNotExistException + * @throws FileDoesNotHaveLineException + */ + public function notify(DeprecationTriggered $event) : void + { + $this->generator()->testTriggeredIssue($event); + } +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\Runner\Baseline; + +use PHPUnit\Event\Test\NoticeTriggered; +use PHPUnit\Event\Test\NoticeTriggeredSubscriber; +use PHPUnit\Runner\FileDoesNotExistException; +/** + * @internal This class is not covered by the backward compatibility promise for PHPUnit + */ +final class TestTriggeredNoticeSubscriber extends \PHPUnit\Runner\Baseline\Subscriber implements NoticeTriggeredSubscriber +{ + /** + * @throws FileDoesNotExistException + * @throws FileDoesNotHaveLineException + */ + public function notify(NoticeTriggered $event) : void + { + $this->generator()->testTriggeredIssue($event); + } +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\Runner\Baseline; + +use PHPUnit\Event\Test\PhpDeprecationTriggered; +use PHPUnit\Event\Test\PhpDeprecationTriggeredSubscriber; +use PHPUnit\Runner\FileDoesNotExistException; +/** + * @internal This class is not covered by the backward compatibility promise for PHPUnit + */ +final class TestTriggeredPhpDeprecationSubscriber extends \PHPUnit\Runner\Baseline\Subscriber implements PhpDeprecationTriggeredSubscriber +{ + /** + * @throws FileDoesNotExistException + * @throws FileDoesNotHaveLineException + */ + public function notify(PhpDeprecationTriggered $event) : void + { + $this->generator()->testTriggeredIssue($event); + } +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\Runner\Baseline; + +use PHPUnit\Event\Test\PhpNoticeTriggered; +use PHPUnit\Event\Test\PhpNoticeTriggeredSubscriber; +use PHPUnit\Runner\FileDoesNotExistException; +/** + * @internal This class is not covered by the backward compatibility promise for PHPUnit + */ +final class TestTriggeredPhpNoticeSubscriber extends \PHPUnit\Runner\Baseline\Subscriber implements PhpNoticeTriggeredSubscriber +{ + /** + * @throws FileDoesNotExistException + * @throws FileDoesNotHaveLineException + */ + public function notify(PhpNoticeTriggered $event) : void + { + $this->generator()->testTriggeredIssue($event); + } +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\Runner\Baseline; + +use PHPUnit\Event\Test\PhpWarningTriggered; +use PHPUnit\Event\Test\PhpWarningTriggeredSubscriber; +use PHPUnit\Runner\FileDoesNotExistException; +/** + * @internal This class is not covered by the backward compatibility promise for PHPUnit + */ +final class TestTriggeredPhpWarningSubscriber extends \PHPUnit\Runner\Baseline\Subscriber implements PhpWarningTriggeredSubscriber +{ + /** + * @throws FileDoesNotExistException + * @throws FileDoesNotHaveLineException + */ + public function notify(PhpWarningTriggered $event) : void + { + $this->generator()->testTriggeredIssue($event); + } +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\Runner\Baseline; + +use PHPUnit\Event\Test\WarningTriggered; +use PHPUnit\Event\Test\WarningTriggeredSubscriber; +use PHPUnit\Runner\FileDoesNotExistException; +/** + * @internal This class is not covered by the backward compatibility promise for PHPUnit + */ +final class TestTriggeredWarningSubscriber extends \PHPUnit\Runner\Baseline\Subscriber implements WarningTriggeredSubscriber +{ + /** + * @throws FileDoesNotExistException + * @throws FileDoesNotHaveLineException + */ + public function notify(WarningTriggered $event) : void + { + $this->generator()->testTriggeredIssue($event); + } +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\Runner\Baseline; + +use function assert; +use function dirname; +use function file_put_contents; +use XMLWriter; +/** + * @internal This class is not covered by the backward compatibility promise for PHPUnit + */ +final class Writer +{ + /** + * @psalm-param non-empty-string $baselineFile + */ + public function write(string $baselineFile, \PHPUnit\Runner\Baseline\Baseline $baseline) : void + { + $pathCalculator = new \PHPUnit\Runner\Baseline\RelativePathCalculator(dirname($baselineFile)); + $writer = new XMLWriter(); + $writer->openMemory(); + $writer->setIndent(\true); + $writer->startDocument(); + $writer->startElement('files'); + $writer->writeAttribute('version', (string) \PHPUnit\Runner\Baseline\Baseline::VERSION); + foreach ($baseline->groupedByFileAndLine() as $file => $lines) { + assert(!empty($file)); + $writer->startElement('file'); + $writer->writeAttribute('path', $pathCalculator->calculate($file)); + foreach ($lines as $line => $issues) { + $writer->startElement('line'); + $writer->writeAttribute('number', (string) $line); + $writer->writeAttribute('hash', $issues[0]->hash()); + foreach ($issues as $issue) { + $writer->startElement('issue'); + $writer->writeCData($issue->description()); + $writer->endElement(); + } + $writer->endElement(); + } + $writer->endElement(); + } + $writer->endElement(); + file_put_contents($baselineFile, $writer->outputMemory()); + } +} +isExcluded($errorFile)) { return \false; } + $ignoredByBaseline = $this->ignoredByBaseline($errorFile, $errorLine, $errorString); switch ($errorNumber) { case E_NOTICE: case E_STRICT: - Event\Facade::emitter()->testTriggeredPhpNotice(Event\Code\TestMethodBuilder::fromCallStack(), $errorString, $errorFile, $errorLine, $suppressed); + Event\Facade::emitter()->testTriggeredPhpNotice(Event\Code\TestMethodBuilder::fromCallStack(), $errorString, $errorFile, $errorLine, $suppressed, $ignoredByBaseline); break; case E_USER_NOTICE: - Event\Facade::emitter()->testTriggeredNotice(Event\Code\TestMethodBuilder::fromCallStack(), $errorString, $errorFile, $errorLine, $suppressed); + Event\Facade::emitter()->testTriggeredNotice(Event\Code\TestMethodBuilder::fromCallStack(), $errorString, $errorFile, $errorLine, $suppressed, $ignoredByBaseline); break; case E_WARNING: - Event\Facade::emitter()->testTriggeredPhpWarning(Event\Code\TestMethodBuilder::fromCallStack(), $errorString, $errorFile, $errorLine, $suppressed); + Event\Facade::emitter()->testTriggeredPhpWarning(Event\Code\TestMethodBuilder::fromCallStack(), $errorString, $errorFile, $errorLine, $suppressed, $ignoredByBaseline); break; case E_USER_WARNING: - Event\Facade::emitter()->testTriggeredWarning(Event\Code\TestMethodBuilder::fromCallStack(), $errorString, $errorFile, $errorLine, $suppressed); + Event\Facade::emitter()->testTriggeredWarning(Event\Code\TestMethodBuilder::fromCallStack(), $errorString, $errorFile, $errorLine, $suppressed, $ignoredByBaseline); break; case E_DEPRECATED: - Event\Facade::emitter()->testTriggeredPhpDeprecation(Event\Code\TestMethodBuilder::fromCallStack(), $errorString, $errorFile, $errorLine, $suppressed); + Event\Facade::emitter()->testTriggeredPhpDeprecation(Event\Code\TestMethodBuilder::fromCallStack(), $errorString, $errorFile, $errorLine, $suppressed, $ignoredByBaseline); break; case E_USER_DEPRECATED: - Event\Facade::emitter()->testTriggeredDeprecation(Event\Code\TestMethodBuilder::fromCallStack(), $errorString, $errorFile, $errorLine, $suppressed); + Event\Facade::emitter()->testTriggeredDeprecation(Event\Code\TestMethodBuilder::fromCallStack(), $errorString, $errorFile, $errorLine, $suppressed, $ignoredByBaseline); break; case \E_USER_ERROR: Event\Facade::emitter()->testTriggeredError(Event\Code\TestMethodBuilder::fromCallStack(), $errorString, $errorFile, $errorLine, $suppressed); @@ -70113,6 +71627,22 @@ final class ErrorHandler restore_error_handler(); $this->enabled = \false; } + public function use(Baseline $baseline) : void + { + $this->baseline = $baseline; + } + /** + * @psalm-param non-empty-string $file + * @psalm-param positive-int $line + * @psalm-param non-empty-string $description + */ + private function ignoredByBaseline(string $file, int $line, string $description) : bool + { + if ($this->baseline === null) { + return \false; + } + return $this->baseline->has(Issue::from($file, $line, null, $description)); + } } newInstance(); + assert($instance instanceof \PHPUnit\Runner\Extension\Extension); + $instance->bootstrap($this->configuration, $this->facade, \PHPUnit\Runner\Extension\ParameterCollection::fromArray($parameters)); } catch (Throwable $t) { - EventFacade::emitter()->testRunnerTriggeredWarning(sprintf('Cannot bootstrap extension because class %s cannot be instantiated: %s', $className, $t->getMessage())); + EventFacade::emitter()->testRunnerTriggeredWarning(sprintf('Bootstrapping of extension %s failed: %s%s%s', $className, $t->getMessage(), \PHP_EOL, $t->getTraceAsString())); return; } - assert($instance instanceof \PHPUnit\Runner\Extension\Extension); - $instance->bootstrap($this->configuration, $this->facade, \PHPUnit\Runner\Extension\ParameterCollection::fromArray($parameters)); Event\Facade::emitter()->testRunnerBootstrappedExtension($className, $parameters); } } @@ -70521,6 +72051,7 @@ final class Facade private bool $replacesProgressOutput = \false; private bool $replacesResultOutput = \false; private bool $requiresCodeCoverageCollection = \false; + private bool $requiresExportOfObjects = \false; /** * @throws EventFacadeIsSealedException * @throws UnknownSubscriberTypeException @@ -70576,6 +72107,14 @@ final class Facade { return $this->requiresCodeCoverageCollection; } + public function requireExportOfObjects() : void + { + $this->requiresExportOfObjects = \true; + } + public function requiresExportOfObjects() : bool + { + return $this->requiresExportOfObjects; + } } */ private array $filters = []; + /** + * @psalm-param list $testIds + */ + public function addTestIdFilter(array $testIds) : void + { + $this->filters[] = [new ReflectionClass(\PHPUnit\Runner\Filter\TestIdFilterIterator::class), $testIds]; + } + /** + * @psalm-param list $groups + */ public function addExcludeGroupFilter(array $groups) : void { $this->filters[] = [new ReflectionClass(\PHPUnit\Runner\Filter\ExcludeGroupFilterIterator::class), $groups]; } + /** + * @psalm-param list $groups + */ public function addIncludeGroupFilter(array $groups) : void { $this->filters[] = [new ReflectionClass(\PHPUnit\Runner\Filter\IncludeGroupFilterIterator::class), $groups]; } + /** + * @psalm-param non-empty-string $name + */ public function addNameFilter(string $name) : void { $this->filters[] = [new ReflectionClass(\PHPUnit\Runner\Filter\NameFilterIterator::class), $name]; @@ -70808,6 +72363,7 @@ use function array_map; use function array_push; use function in_array; use function spl_object_id; +use PHPUnit\Framework\Test; use PHPUnit\Framework\TestSuite; use RecursiveFilterIterator; use RecursiveIterator; @@ -70820,6 +72376,10 @@ abstract class GroupFilterIterator extends RecursiveFilterIterator * @psalm-var list */ protected array $groupTests = []; + /** + * @psalm-param RecursiveIterator $iterator + * @psalm-param list $groups + */ public function __construct(RecursiveIterator $iterator, array $groups, TestSuite $suite) { parent::__construct($iterator); @@ -70898,6 +72458,9 @@ final class NameFilterIterator extends RecursiveFilterIterator private ?int $filterMin = null; private ?int $filterMax = null; /** + * @psalm-param RecursiveIterator $iterator + * @psalm-param non-empty-string $filter + * * @throws Exception */ public function __construct(RecursiveIterator $iterator, string $filter) @@ -70966,6 +72529,62 @@ final class NameFilterIterator extends RecursiveFilterIterator } + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\Runner\Filter; + +use function in_array; +use PHPUnit\Event\TestData\MoreThanOneDataSetFromDataProviderException; +use PHPUnit\Event\TestData\NoDataSetFromDataProviderException; +use PHPUnit\Framework\Test; +use PHPUnit\Framework\TestCase; +use PHPUnit\Framework\TestSuite; +use PHPUnit\Runner\PhptTestCase; +use RecursiveFilterIterator; +use RecursiveIterator; +/** + * @internal This class is not covered by the backward compatibility promise for PHPUnit + */ +final class TestIdFilterIterator extends RecursiveFilterIterator +{ + /** + * @psalm-var non-empty-list + */ + private readonly array $testIds; + /** + * @psalm-param RecursiveIterator $iterator + * @psalm-param non-empty-list $testIds + */ + public function __construct(RecursiveIterator $iterator, array $testIds) + { + parent::__construct($iterator); + $this->testIds = $testIds; + } + public function accept() : bool + { + $test = $this->getInnerIterator()->current(); + if ($test instanceof TestSuite) { + return \true; + } + if (!$test instanceof TestCase && !$test instanceof PhptTestCase) { + return \false; + } + try { + return in_array($test->valueObjectForEvents()->id(), $this->testIds, \true); + } catch (MoreThanOneDataSetFromDataProviderException|NoDataSetFromDataProviderException) { + return \false; + } + } +} +phpUtil->setEnv($env); } $this->phpUtil->setUseStderrRedirection(\true); - if (ConfigurationRegistry::get()->enforceTimeLimit()) { - $this->phpUtil->setTimeout(ConfigurationRegistry::get()->timeoutForLargeTests()); - } if ($this->shouldTestBeSkipped($sections, $settings)) { return; } @@ -72339,6 +73955,10 @@ final class Collector private int $numberOfAssertions = 0; private bool $prepared = \false; private bool $currentTestSuiteForTestClassFailed = \false; + /** + * @psalm-var non-negative-int + */ + private int $numberOfIssuesIgnoredByBaseline = 0; /** * @psalm-var list */ @@ -72422,7 +74042,7 @@ final class Collector } public function result() : \PHPUnit\TestRunner\TestResult\TestResult { - return new \PHPUnit\TestRunner\TestResult\TestResult($this->numberOfTests, $this->numberOfTestsRun, $this->numberOfAssertions, $this->testErroredEvents, $this->testFailedEvents, $this->testConsideredRiskyEvents, $this->testSuiteSkippedEvents, $this->testSkippedEvents, $this->testMarkedIncompleteEvents, $this->testTriggeredPhpunitDeprecationEvents, $this->testTriggeredPhpunitErrorEvents, $this->testTriggeredPhpunitWarningEvents, $this->testRunnerTriggeredDeprecationEvents, $this->testRunnerTriggeredWarningEvents, array_values($this->errors), array_values($this->deprecations), array_values($this->notices), array_values($this->warnings), array_values($this->phpDeprecations), array_values($this->phpNotices), array_values($this->phpWarnings)); + return new \PHPUnit\TestRunner\TestResult\TestResult($this->numberOfTests, $this->numberOfTestsRun, $this->numberOfAssertions, $this->testErroredEvents, $this->testFailedEvents, $this->testConsideredRiskyEvents, $this->testSuiteSkippedEvents, $this->testSkippedEvents, $this->testMarkedIncompleteEvents, $this->testTriggeredPhpunitDeprecationEvents, $this->testTriggeredPhpunitErrorEvents, $this->testTriggeredPhpunitWarningEvents, $this->testRunnerTriggeredDeprecationEvents, $this->testRunnerTriggeredWarningEvents, array_values($this->errors), array_values($this->deprecations), array_values($this->notices), array_values($this->warnings), array_values($this->phpDeprecations), array_values($this->phpNotices), array_values($this->phpWarnings), $this->numberOfIssuesIgnoredByBaseline); } public function executionStarted(ExecutionStarted $event) : void { @@ -72520,6 +74140,10 @@ final class Collector } public function testTriggeredDeprecation(DeprecationTriggered $event) : void { + if ($event->ignoredByBaseline()) { + $this->numberOfIssuesIgnoredByBaseline++; + return; + } if (!$this->source->ignoreSuppressionOfDeprecations() && $event->wasSuppressed()) { return; } @@ -72535,6 +74159,10 @@ final class Collector } public function testTriggeredPhpDeprecation(PhpDeprecationTriggered $event) : void { + if ($event->ignoredByBaseline()) { + $this->numberOfIssuesIgnoredByBaseline++; + return; + } if (!$this->source->ignoreSuppressionOfPhpDeprecations() && $event->wasSuppressed()) { return; } @@ -72569,6 +74197,10 @@ final class Collector } public function testTriggeredNotice(NoticeTriggered $event) : void { + if ($event->ignoredByBaseline()) { + $this->numberOfIssuesIgnoredByBaseline++; + return; + } if (!$this->source->ignoreSuppressionOfNotices() && $event->wasSuppressed()) { return; } @@ -72584,6 +74216,10 @@ final class Collector } public function testTriggeredPhpNotice(PhpNoticeTriggered $event) : void { + if ($event->ignoredByBaseline()) { + $this->numberOfIssuesIgnoredByBaseline++; + return; + } if (!$this->source->ignoreSuppressionOfPhpNotices() && $event->wasSuppressed()) { return; } @@ -72599,6 +74235,10 @@ final class Collector } public function testTriggeredWarning(WarningTriggered $event) : void { + if ($event->ignoredByBaseline()) { + $this->numberOfIssuesIgnoredByBaseline++; + return; + } if (!$this->source->ignoreSuppressionOfWarnings() && $event->wasSuppressed()) { return; } @@ -72614,6 +74254,10 @@ final class Collector } public function testTriggeredPhpWarning(PhpWarningTriggered $event) : void { + if ($event->ignoredByBaseline()) { + $this->numberOfIssuesIgnoredByBaseline++; + return; + } if (!$this->source->ignoreSuppressionOfPhpWarnings() && $event->wasSuppressed()) { return; } @@ -73702,6 +75346,10 @@ final class TestResult * @psalm-var list */ private readonly array $phpWarnings; + /** + * @psalm-var non-negative-int + */ + private readonly int $numberOfIssuesIgnoredByBaseline; /** * @psalm-param list $testErroredEvents * @psalm-param list $testFailedEvents @@ -73721,8 +75369,9 @@ final class TestResult * @psalm-param list $phpDeprecations * @psalm-param list $phpNotices * @psalm-param list $phpWarnings + * @psalm-param non-negative-int $numberOfIssuesIgnoredByBaseline */ - public function __construct(int $numberOfTests, int $numberOfTestsRun, int $numberOfAssertions, array $testErroredEvents, array $testFailedEvents, array $testConsideredRiskyEvents, array $testSuiteSkippedEvents, array $testSkippedEvents, array $testMarkedIncompleteEvents, array $testTriggeredPhpunitDeprecationEvents, array $testTriggeredPhpunitErrorEvents, array $testTriggeredPhpunitWarningEvents, array $testRunnerTriggeredDeprecationEvents, array $testRunnerTriggeredWarningEvents, array $errors, array $deprecations, array $notices, array $warnings, array $phpDeprecations, array $phpNotices, array $phpWarnings) + public function __construct(int $numberOfTests, int $numberOfTestsRun, int $numberOfAssertions, array $testErroredEvents, array $testFailedEvents, array $testConsideredRiskyEvents, array $testSuiteSkippedEvents, array $testSkippedEvents, array $testMarkedIncompleteEvents, array $testTriggeredPhpunitDeprecationEvents, array $testTriggeredPhpunitErrorEvents, array $testTriggeredPhpunitWarningEvents, array $testRunnerTriggeredDeprecationEvents, array $testRunnerTriggeredWarningEvents, array $errors, array $deprecations, array $notices, array $warnings, array $phpDeprecations, array $phpNotices, array $phpWarnings, int $numberOfIssuesIgnoredByBaseline) { $this->numberOfTests = $numberOfTests; $this->numberOfTestsRun = $numberOfTestsRun; @@ -73745,6 +75394,7 @@ final class TestResult $this->phpDeprecations = $phpDeprecations; $this->phpNotices = $phpNotices; $this->phpWarnings = $phpWarnings; + $this->numberOfIssuesIgnoredByBaseline = $numberOfIssuesIgnoredByBaseline; } public function numberOfTestsRun() : int { @@ -74032,6 +75682,17 @@ final class TestResult { return !empty($this->testSkippedEvents); } + public function hasIssuesIgnoredByBaseline() : bool + { + return $this->numberOfIssuesIgnoredByBaseline > 0; + } + /** + * @psalm-return non-negative-int + */ + public function numberOfIssuesIgnoredByBaseline() : int + { + return $this->numberOfIssuesIgnoredByBaseline; + } } asString(); + self::$version = (new VersionId('10.4.0', dirname(__DIR__, 2)))->asString(); } return self::$version; } @@ -74491,7 +76152,12 @@ use PHPUnit\Logging\TestDox\HtmlRenderer as TestDoxHtmlRenderer; use PHPUnit\Logging\TestDox\PlainTextRenderer as TestDoxTextRenderer; use PHPUnit\Logging\TestDox\TestResultCollector as TestDoxResultCollector; use PHPUnit\Metadata\Api\CodeCoverage as CodeCoverageMetadataApi; +use PHPUnit\Runner\Baseline\CannotLoadBaselineException; +use PHPUnit\Runner\Baseline\Generator as BaselineGenerator; +use PHPUnit\Runner\Baseline\Reader; +use PHPUnit\Runner\Baseline\Writer; use PHPUnit\Runner\CodeCoverage; +use PHPUnit\Runner\ErrorHandler; use PHPUnit\Runner\Extension\ExtensionBootstrapper; use PHPUnit\Runner\Extension\Facade as ExtensionFacade; use PHPUnit\Runner\Extension\PharLoader; @@ -74559,6 +76225,7 @@ final class Application $extensionReplacesOutput = \false; $extensionReplacesProgressOutput = \false; $extensionReplacesResultOutput = \false; + $extensionRequiresExportOfObjects = \false; if (!$configuration->noExtensions()) { if ($configuration->hasPharExtensionDirectory()) { $pharExtensions = (new PharLoader())->loadPharExtensionsInDirectory($configuration->pharExtensionDirectory()); @@ -74568,6 +76235,10 @@ final class Application $extensionReplacesOutput = $bootstrappedExtensions['replacesOutput']; $extensionReplacesProgressOutput = $bootstrappedExtensions['replacesProgressOutput']; $extensionReplacesResultOutput = $bootstrappedExtensions['replacesResultOutput']; + $extensionRequiresExportOfObjects = $bootstrappedExtensions['requiresExportOfObjects']; + } + if ($extensionRequiresExportOfObjects) { + EventFacade::emitter()->exportObjects(); } CodeCoverage::instance()->init($configuration, CodeCoverageFilterRegistry::instance(), $extensionRequiresCodeCoverageCollection); if (CodeCoverage::instance()->isActive()) { @@ -74587,6 +76258,7 @@ final class Application if ($configuration->controlGarbageCollector()) { new GarbageCollectionHandler(EventFacade::instance(), $configuration->numberOfTestsBeforeGarbageCollection()); } + $baselineGenerator = $this->configureBaseline($configuration); EventFacade::instance()->seal(); $timer = new Timer(); $timer->start(); @@ -74608,31 +76280,18 @@ final class Application OutputFacade::printResult($result, $testDoxResult, $duration); } CodeCoverage::instance()->generateReports($printer, $configuration); + if (isset($baselineGenerator)) { + (new Writer())->write($configuration->generateBaseline(), $baselineGenerator->baseline()); + $printer->print(sprintf(PHP_EOL . 'Baseline written to %s.' . PHP_EOL, realpath($configuration->generateBaseline()))); + } $shellExitCode = (new \PHPUnit\TextUI\ShellExitCodeCalculator())->calculate($configuration->failOnDeprecation(), $configuration->failOnEmptyTestSuite(), $configuration->failOnIncomplete(), $configuration->failOnNotice(), $configuration->failOnRisky(), $configuration->failOnSkipped(), $configuration->failOnWarning(), $result); EventFacade::emitter()->applicationFinished($shellExitCode); return $shellExitCode; + // @codeCoverageIgnoreStart } catch (Throwable $t) { $this->exitWithCrashMessage($t); } - } - private function exitWithCrashMessage(Throwable $t) : never - { - $message = $t->getMessage(); - if (empty(trim($message))) { - $message = '(no message)'; - } - printf('%s%sAn error occurred inside PHPUnit.%s%sMessage: %s', PHP_EOL, PHP_EOL, PHP_EOL, PHP_EOL, $message); - $first = \true; - do { - printf('%s%s: %s:%d%s%s%s%s', PHP_EOL, $first ? 'Location' : 'Caused by', $t->getFile(), $t->getLine(), PHP_EOL, PHP_EOL, $t->getTraceAsString(), PHP_EOL); - $first = \false; - } while ($t = $t->getPrevious()); - exit(Result::CRASH); - } - private function exitWithErrorMessage(string $message) : never - { - print Version::getVersionString() . PHP_EOL . PHP_EOL . $message . PHP_EOL; - exit(Result::EXCEPTION); + // @codeCoverageIgnoreEnd } private function execute(\PHPUnit\TextUI\Command\Command $command) : never { @@ -74686,7 +76345,7 @@ final class Application } } /** - * @psalm-return array{requiresCodeCoverageCollection: bool, replacesOutput: bool, replacesProgressOutput: bool, replacesResultOutput: bool} + * @psalm-return array{requiresCodeCoverageCollection: bool, replacesOutput: bool, replacesProgressOutput: bool, replacesResultOutput: bool, requiresExportOfObjects: bool} */ private function bootstrapExtensions(Configuration $configuration) : array { @@ -74695,7 +76354,7 @@ final class Application foreach ($configuration->extensionBootstrappers() as $bootstrapper) { $extensionBootstrapper->bootstrap($bootstrapper['className'], $bootstrapper['parameters']); } - return ['requiresCodeCoverageCollection' => $facade->requiresCodeCoverageCollection(), 'replacesOutput' => $facade->replacesOutput(), 'replacesProgressOutput' => $facade->replacesProgressOutput(), 'replacesResultOutput' => $facade->replacesResultOutput()]; + return ['requiresCodeCoverageCollection' => $facade->requiresCodeCoverageCollection(), 'replacesOutput' => $facade->replacesOutput(), 'replacesProgressOutput' => $facade->replacesProgressOutput(), 'replacesResultOutput' => $facade->replacesResultOutput(), 'requiresExportOfObjects' => $facade->requiresExportOfObjects()]; } private function executeCommandsThatOnlyRequireCliConfiguration(CliConfiguration $cliConfiguration, false|string $configurationFile) : void { @@ -74744,7 +76403,7 @@ final class Application } private function executeHelpCommandWhenThereIsNothingElseToDo(Configuration $configuration, TestSuite $testSuite) : void { - if ($testSuite->isEmpty() && !$configuration->hasCliArgument() && $configuration->testSuite()->isEmpty()) { + if ($testSuite->isEmpty() && !$configuration->hasCliArguments() && $configuration->testSuite()->isEmpty()) { $this->execute(new ShowHelpCommand(Result::FAILURE)); } } @@ -74799,6 +76458,7 @@ final class Application unlink($configuration->logEventsVerboseText()); } EventFacade::instance()->registerTracer(new EventLogger($configuration->logEventsVerboseText(), \true)); + EventFacade::emitter()->exportObjects(); } if ($configuration->hasLogfileJunit()) { new JunitXmlLogger(OutputFacade::printerFor($configuration->logfileJunit()), EventFacade::instance()); @@ -74831,6 +76491,52 @@ final class Application } return new NullResultCache(); } + /** + * @throws EventFacadeIsSealedException + * @throws UnknownSubscriberTypeException + */ + private function configureBaseline(Configuration $configuration) : ?BaselineGenerator + { + if ($configuration->hasGenerateBaseline()) { + return new BaselineGenerator(EventFacade::instance(), $configuration->source()); + } + if ($configuration->source()->useBaseline()) { + /** @psalm-suppress MissingThrowsDocblock */ + $baselineFile = $configuration->source()->baseline(); + $baseline = null; + try { + $baseline = (new Reader())->read($baselineFile); + } catch (CannotLoadBaselineException $e) { + EventFacade::emitter()->testRunnerTriggeredWarning($e->getMessage()); + } + if ($baseline !== null) { + ErrorHandler::instance()->use($baseline); + } + } + return null; + } + /** + * @codeCoverageIgnore + */ + private function exitWithCrashMessage(Throwable $t) : never + { + $message = $t->getMessage(); + if (empty(trim($message))) { + $message = '(no message)'; + } + printf('%s%sAn error occurred inside PHPUnit.%s%sMessage: %s', PHP_EOL, PHP_EOL, PHP_EOL, PHP_EOL, $message); + $first = \true; + do { + printf('%s%s: %s:%d%s%s%s%s', PHP_EOL, $first ? 'Location' : 'Caused by', $t->getFile(), $t->getLine(), PHP_EOL, PHP_EOL, $t->getTraceAsString(), PHP_EOL); + $first = \false; + } while ($t = $t->getPrevious()); + exit(Result::CRASH); + } + private function exitWithErrorMessage(string $message) : never + { + print Version::getVersionString() . PHP_EOL . PHP_EOL . $message . PHP_EOL; + exit(Result::EXCEPTION); + } } startElement('testCaseMethod'); + $writer->writeAttribute('id', $test->valueObjectForEvents()->id()); $writer->writeAttribute('name', $test->name()); $writer->writeAttribute('groups', implode(',', $test->groups())); + /** + * @deprecated https://github.com/sebastianbergmann/phpunit/issues/5481 + */ if (!empty($test->dataSetAsString())) { $writer->writeAttribute('dataSet', str_replace(' with data set ', '', $test->dataSetAsString())); } $writer->endElement(); - } elseif ($test instanceof PhptTestCase) { + continue; + } + if ($test instanceof PhptTestCase) { if ($currentTestCase !== null) { $writer->endElement(); $currentTestCase = null; @@ -75341,6 +77053,8 @@ use function version_compare; use PHPUnit\Runner\Version; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit + * + * @codeCoverageIgnore */ final class VersionCheckCommand implements \PHPUnit\TextUI\Command\Command { @@ -75472,6 +77186,8 @@ use PHPUnit\TextUI\XmlConfiguration\Exception as XmlConfigurationException; use PHPUnit\TextUI\XmlConfiguration\Loader; /** * @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit + * + * @codeCoverageIgnore */ final class Builder { @@ -75507,7 +77223,10 @@ declare (strict_types=1); namespace PHPUnit\TextUI\CliArguments; use function array_map; +use function basename; use function explode; +use function getcwd; +use function is_file; use function is_numeric; use function sprintf; use PHPUnit\Runner\TestSuiteSorter; @@ -75518,7 +77237,7 @@ use PHPUnit\SebastianBergmann\CliParser\Parser as CliParser; */ final class Builder { - private const LONG_OPTIONS = ['atleast-version=', 'bootstrap=', 'cache-result', 'do-not-cache-result', 'cache-directory=', 'cache-result-file=', 'check-version', 'colors==', 'columns=', 'configuration=', 'coverage-cache=', 'warm-coverage-cache', 'coverage-filter=', 'coverage-clover=', 'coverage-cobertura=', 'coverage-crap4j=', 'coverage-html=', 'coverage-php=', 'coverage-text==', 'coverage-xml=', 'path-coverage', 'disallow-test-output', 'display-incomplete', 'display-skipped', 'display-deprecations', 'display-errors', 'display-notices', 'display-warnings', 'default-time-limit=', 'enforce-time-limit', 'exclude-group=', 'filter=', 'generate-configuration', 'globals-backup', 'group=', 'covers=', 'uses=', 'help', 'resolve-dependencies', 'ignore-dependencies', 'include-path=', 'list-groups', 'list-suites', 'list-tests', 'list-tests-xml=', 'log-junit=', 'log-teamcity=', 'migrate-configuration', 'no-configuration', 'no-coverage', 'no-logging', 'no-extensions', 'no-output', 'no-progress', 'no-results', 'order-by=', 'process-isolation', 'dont-report-useless-tests', 'random-order', 'random-order-seed=', 'reverse-order', 'reverse-list', 'static-backup', 'stderr', 'fail-on-deprecation', 'fail-on-empty-test-suite', 'fail-on-incomplete', 'fail-on-notice', 'fail-on-risky', 'fail-on-skipped', 'fail-on-warning', 'stop-on-defect', 'stop-on-deprecation', 'stop-on-error', 'stop-on-failure', 'stop-on-incomplete', 'stop-on-notice', 'stop-on-risky', 'stop-on-skipped', 'stop-on-warning', 'strict-coverage', 'disable-coverage-ignore', 'strict-global-state', 'teamcity', 'testdox', 'testdox-html=', 'testdox-text=', 'test-suffix=', 'testsuite=', 'exclude-testsuite=', 'log-events-text=', 'log-events-verbose-text=', 'version']; + private const LONG_OPTIONS = ['atleast-version=', 'bootstrap=', 'cache-result', 'do-not-cache-result', 'cache-directory=', 'cache-result-file=', 'check-version', 'colors==', 'columns=', 'configuration=', 'coverage-cache=', 'warm-coverage-cache', 'coverage-filter=', 'coverage-clover=', 'coverage-cobertura=', 'coverage-crap4j=', 'coverage-html=', 'coverage-php=', 'coverage-text==', 'coverage-xml=', 'path-coverage', 'disallow-test-output', 'display-incomplete', 'display-skipped', 'display-deprecations', 'display-errors', 'display-notices', 'display-warnings', 'default-time-limit=', 'enforce-time-limit', 'exclude-group=', 'filter=', 'generate-baseline=', 'use-baseline=', 'ignore-baseline', 'generate-configuration', 'globals-backup', 'group=', 'covers=', 'uses=', 'help', 'resolve-dependencies', 'ignore-dependencies', 'include-path=', 'list-groups', 'list-suites', 'list-tests', 'list-tests-xml=', 'log-junit=', 'log-teamcity=', 'migrate-configuration', 'no-configuration', 'no-coverage', 'no-logging', 'no-extensions', 'no-output', 'no-progress', 'no-results', 'order-by=', 'process-isolation', 'dont-report-useless-tests', 'random-order', 'random-order-seed=', 'reverse-order', 'reverse-list', 'static-backup', 'stderr', 'fail-on-deprecation', 'fail-on-empty-test-suite', 'fail-on-incomplete', 'fail-on-notice', 'fail-on-risky', 'fail-on-skipped', 'fail-on-warning', 'stop-on-defect', 'stop-on-deprecation', 'stop-on-error', 'stop-on-failure', 'stop-on-incomplete', 'stop-on-notice', 'stop-on-risky', 'stop-on-skipped', 'stop-on-warning', 'strict-coverage', 'disable-coverage-ignore', 'strict-global-state', 'teamcity', 'testdox', 'testdox-html=', 'testdox-text=', 'test-suffix=', 'testsuite=', 'exclude-testsuite=', 'log-events-text=', 'log-events-verbose-text=', 'version']; private const SHORT_OPTIONS = 'd:c:h'; /** * @throws Exception @@ -75530,7 +77249,6 @@ final class Builder } catch (CliParserException $e) { throw new \PHPUnit\TextUI\CliArguments\Exception($e->getMessage(), $e->getCode(), $e); } - $argument = null; $atLeastVersion = null; $backupGlobals = null; $backupStaticProperties = null; @@ -75586,6 +77304,9 @@ final class Builder $stopOnSkipped = null; $stopOnWarning = null; $filter = null; + $generateBaseline = null; + $useBaseline = null; + $ignoreBaseline = \false; $generateConfiguration = \false; $migrateConfiguration = \false; $groups = null; @@ -75624,9 +77345,6 @@ final class Builder $logEventsVerboseText = null; $printerTeamCity = null; $printerTestDox = null; - if (isset($options[1][0])) { - $argument = $options[1][0]; - } foreach ($options[0] as $option) { switch ($option[0]) { case '--colors': @@ -75716,6 +77434,21 @@ final class Builder case '--exclude-testsuite': $excludeTestSuite = $option[1]; break; + case '--generate-baseline': + $generateBaseline = $option[1]; + if (basename($generateBaseline) === $generateBaseline) { + $generateBaseline = getcwd() . \DIRECTORY_SEPARATOR . $generateBaseline; + } + break; + case '--use-baseline': + $useBaseline = $option[1]; + if (!is_file($useBaseline) && basename($useBaseline) === $useBaseline) { + $useBaseline = getcwd() . \DIRECTORY_SEPARATOR . $useBaseline; + } + break; + case '--ignore-baseline': + $ignoreBaseline = \true; + break; case '--generate-configuration': $generateConfiguration = \true; break; @@ -75971,7 +77704,7 @@ final class Builder if (empty($coverageFilter)) { $coverageFilter = null; } - return new \PHPUnit\TextUI\CliArguments\Configuration($argument, $atLeastVersion, $backupGlobals, $backupStaticProperties, $beStrictAboutChangesToGlobalState, $bootstrap, $cacheDirectory, $cacheResult, $cacheResultFile, $checkVersion, $colors, $columns, $configuration, $coverageClover, $coverageCobertura, $coverageCrap4J, $coverageHtml, $coveragePhp, $coverageText, $coverageTextShowUncoveredFiles, $coverageTextShowOnlySummary, $coverageXml, $pathCoverage, $coverageCacheDirectory, $warmCoverageCache, $defaultTimeLimit, $disableCodeCoverageIgnore, $disallowTestOutput, $enforceTimeLimit, $excludeGroups, $executionOrder, $executionOrderDefects, $failOnDeprecation, $failOnEmptyTestSuite, $failOnIncomplete, $failOnNotice, $failOnRisky, $failOnSkipped, $failOnWarning, $stopOnDefect, $stopOnDeprecation, $stopOnError, $stopOnFailure, $stopOnIncomplete, $stopOnNotice, $stopOnRisky, $stopOnSkipped, $stopOnWarning, $filter, $generateConfiguration, $migrateConfiguration, $groups, $testsCovering, $testsUsing, $help, $includePath, $iniSettings, $junitLogfile, $listGroups, $listSuites, $listTests, $listTestsXml, $noCoverage, $noExtensions, $noOutput, $noProgress, $noResults, $noLogging, $processIsolation, $randomOrderSeed, $reportUselessTests, $resolveDependencies, $reverseList, $stderr, $strictCoverage, $teamcityLogfile, $testdoxHtmlFile, $testdoxTextFile, $testSuffixes, $testSuite, $excludeTestSuite, $useDefaultConfiguration, $displayIncomplete, $displaySkipped, $displayDeprecations, $displayErrors, $displayNotices, $displayWarnings, $version, $coverageFilter, $logEventsText, $logEventsVerboseText, $printerTeamCity, $printerTestDox); + return new \PHPUnit\TextUI\CliArguments\Configuration($options[1], $atLeastVersion, $backupGlobals, $backupStaticProperties, $beStrictAboutChangesToGlobalState, $bootstrap, $cacheDirectory, $cacheResult, $cacheResultFile, $checkVersion, $colors, $columns, $configuration, $coverageClover, $coverageCobertura, $coverageCrap4J, $coverageHtml, $coveragePhp, $coverageText, $coverageTextShowUncoveredFiles, $coverageTextShowOnlySummary, $coverageXml, $pathCoverage, $coverageCacheDirectory, $warmCoverageCache, $defaultTimeLimit, $disableCodeCoverageIgnore, $disallowTestOutput, $enforceTimeLimit, $excludeGroups, $executionOrder, $executionOrderDefects, $failOnDeprecation, $failOnEmptyTestSuite, $failOnIncomplete, $failOnNotice, $failOnRisky, $failOnSkipped, $failOnWarning, $stopOnDefect, $stopOnDeprecation, $stopOnError, $stopOnFailure, $stopOnIncomplete, $stopOnNotice, $stopOnRisky, $stopOnSkipped, $stopOnWarning, $filter, $generateBaseline, $useBaseline, $ignoreBaseline, $generateConfiguration, $migrateConfiguration, $groups, $testsCovering, $testsUsing, $help, $includePath, $iniSettings, $junitLogfile, $listGroups, $listSuites, $listTests, $listTestsXml, $noCoverage, $noExtensions, $noOutput, $noProgress, $noResults, $noLogging, $processIsolation, $randomOrderSeed, $reportUselessTests, $resolveDependencies, $reverseList, $stderr, $strictCoverage, $teamcityLogfile, $testdoxHtmlFile, $testdoxTextFile, $testSuffixes, $testSuite, $excludeTestSuite, $useDefaultConfiguration, $displayIncomplete, $displaySkipped, $displayDeprecations, $displayErrors, $displayNotices, $displayWarnings, $version, $coverageFilter, $logEventsText, $logEventsVerboseText, $printerTeamCity, $printerTestDox); } } + */ + private readonly array $arguments; private readonly ?string $atLeastVersion; private readonly ?bool $backupGlobals; private readonly ?bool $backupStaticProperties; @@ -76044,6 +77780,9 @@ final class Configuration private readonly ?bool $stopOnSkipped; private readonly ?bool $stopOnWarning; private readonly ?string $filter; + private readonly ?string $generateBaseline; + private readonly ?string $useBaseline; + private readonly bool $ignoreBaseline; private readonly bool $generateConfiguration; private readonly bool $migrateConfiguration; private readonly ?array $groups; @@ -76092,11 +77831,12 @@ final class Configuration private readonly ?string $logEventsText; private readonly ?string $logEventsVerboseText; /** + * @psalm-param list $arguments * @psalm-param ?non-empty-list $testSuffixes */ - public function __construct(?string $argument, ?string $atLeastVersion, ?bool $backupGlobals, ?bool $backupStaticProperties, ?bool $beStrictAboutChangesToGlobalState, ?string $bootstrap, ?string $cacheDirectory, ?bool $cacheResult, ?string $cacheResultFile, bool $checkVersion, ?string $colors, null|int|string $columns, ?string $configurationFile, ?string $coverageClover, ?string $coverageCobertura, ?string $coverageCrap4J, ?string $coverageHtml, ?string $coveragePhp, ?string $coverageText, ?bool $coverageTextShowUncoveredFiles, ?bool $coverageTextShowOnlySummary, ?string $coverageXml, ?bool $pathCoverage, ?string $coverageCacheDirectory, bool $warmCoverageCache, ?int $defaultTimeLimit, ?bool $disableCodeCoverageIgnore, ?bool $disallowTestOutput, ?bool $enforceTimeLimit, ?array $excludeGroups, ?int $executionOrder, ?int $executionOrderDefects, ?bool $failOnDeprecation, ?bool $failOnEmptyTestSuite, ?bool $failOnIncomplete, ?bool $failOnNotice, ?bool $failOnRisky, ?bool $failOnSkipped, ?bool $failOnWarning, ?bool $stopOnDefect, ?bool $stopOnDeprecation, ?bool $stopOnError, ?bool $stopOnFailure, ?bool $stopOnIncomplete, ?bool $stopOnNotice, ?bool $stopOnRisky, ?bool $stopOnSkipped, ?bool $stopOnWarning, ?string $filter, bool $generateConfiguration, bool $migrateConfiguration, ?array $groups, ?array $testsCovering, ?array $testsUsing, bool $help, ?string $includePath, ?array $iniSettings, ?string $junitLogfile, bool $listGroups, bool $listSuites, bool $listTests, ?string $listTestsXml, ?bool $noCoverage, ?bool $noExtensions, ?bool $noOutput, ?bool $noProgress, ?bool $noResults, ?bool $noLogging, ?bool $processIsolation, ?int $randomOrderSeed, ?bool $reportUselessTests, ?bool $resolveDependencies, ?bool $reverseList, ?bool $stderr, ?bool $strictCoverage, ?string $teamcityLogfile, ?string $testdoxHtmlFile, ?string $testdoxTextFile, ?array $testSuffixes, ?string $testSuite, ?string $excludeTestSuite, bool $useDefaultConfiguration, ?bool $displayDetailsOnIncompleteTests, ?bool $displayDetailsOnSkippedTests, ?bool $displayDetailsOnTestsThatTriggerDeprecations, ?bool $displayDetailsOnTestsThatTriggerErrors, ?bool $displayDetailsOnTestsThatTriggerNotices, ?bool $displayDetailsOnTestsThatTriggerWarnings, bool $version, ?array $coverageFilter, ?string $logEventsText, ?string $logEventsVerboseText, ?bool $printerTeamCity, ?bool $printerTestDox) + public function __construct(array $arguments, ?string $atLeastVersion, ?bool $backupGlobals, ?bool $backupStaticProperties, ?bool $beStrictAboutChangesToGlobalState, ?string $bootstrap, ?string $cacheDirectory, ?bool $cacheResult, ?string $cacheResultFile, bool $checkVersion, ?string $colors, null|int|string $columns, ?string $configurationFile, ?string $coverageClover, ?string $coverageCobertura, ?string $coverageCrap4J, ?string $coverageHtml, ?string $coveragePhp, ?string $coverageText, ?bool $coverageTextShowUncoveredFiles, ?bool $coverageTextShowOnlySummary, ?string $coverageXml, ?bool $pathCoverage, ?string $coverageCacheDirectory, bool $warmCoverageCache, ?int $defaultTimeLimit, ?bool $disableCodeCoverageIgnore, ?bool $disallowTestOutput, ?bool $enforceTimeLimit, ?array $excludeGroups, ?int $executionOrder, ?int $executionOrderDefects, ?bool $failOnDeprecation, ?bool $failOnEmptyTestSuite, ?bool $failOnIncomplete, ?bool $failOnNotice, ?bool $failOnRisky, ?bool $failOnSkipped, ?bool $failOnWarning, ?bool $stopOnDefect, ?bool $stopOnDeprecation, ?bool $stopOnError, ?bool $stopOnFailure, ?bool $stopOnIncomplete, ?bool $stopOnNotice, ?bool $stopOnRisky, ?bool $stopOnSkipped, ?bool $stopOnWarning, ?string $filter, ?string $generateBaseline, ?string $useBaseline, bool $ignoreBaseline, bool $generateConfiguration, bool $migrateConfiguration, ?array $groups, ?array $testsCovering, ?array $testsUsing, bool $help, ?string $includePath, ?array $iniSettings, ?string $junitLogfile, bool $listGroups, bool $listSuites, bool $listTests, ?string $listTestsXml, ?bool $noCoverage, ?bool $noExtensions, ?bool $noOutput, ?bool $noProgress, ?bool $noResults, ?bool $noLogging, ?bool $processIsolation, ?int $randomOrderSeed, ?bool $reportUselessTests, ?bool $resolveDependencies, ?bool $reverseList, ?bool $stderr, ?bool $strictCoverage, ?string $teamcityLogfile, ?string $testdoxHtmlFile, ?string $testdoxTextFile, ?array $testSuffixes, ?string $testSuite, ?string $excludeTestSuite, bool $useDefaultConfiguration, ?bool $displayDetailsOnIncompleteTests, ?bool $displayDetailsOnSkippedTests, ?bool $displayDetailsOnTestsThatTriggerDeprecations, ?bool $displayDetailsOnTestsThatTriggerErrors, ?bool $displayDetailsOnTestsThatTriggerNotices, ?bool $displayDetailsOnTestsThatTriggerWarnings, bool $version, ?array $coverageFilter, ?string $logEventsText, ?string $logEventsVerboseText, ?bool $printerTeamCity, ?bool $printerTestDox) { - $this->argument = $argument; + $this->arguments = $arguments; $this->atLeastVersion = $atLeastVersion; $this->backupGlobals = $backupGlobals; $this->backupStaticProperties = $backupStaticProperties; @@ -76146,6 +77886,9 @@ final class Configuration $this->stopOnSkipped = $stopOnSkipped; $this->stopOnWarning = $stopOnWarning; $this->filter = $filter; + $this->generateBaseline = $generateBaseline; + $this->useBaseline = $useBaseline; + $this->ignoreBaseline = $ignoreBaseline; $this->generateConfiguration = $generateConfiguration; $this->migrateConfiguration = $migrateConfiguration; $this->groups = $groups; @@ -76192,21 +77935,11 @@ final class Configuration $this->testdoxPrinter = $printerTestDox; } /** - * @psalm-assert-if-true !null $this->argument - */ - public function hasArgument() : bool - { - return $this->argument !== null; - } - /** - * @throws Exception + * @psalm-return list */ - public function argument() : string + public function arguments() : array { - if (!$this->hasArgument()) { - throw new \PHPUnit\TextUI\CliArguments\Exception(); - } - return $this->argument; + return $this->arguments; } /** * @psalm-assert-if-true !null $this->atLeastVersion @@ -77023,6 +78756,44 @@ final class Configuration } return $this->filter; } + /** + * @psalm-assert-if-true !null $this->generateBaseline + */ + public function hasGenerateBaseline() : bool + { + return $this->generateBaseline !== null; + } + /** + * @throws Exception + */ + public function generateBaseline() : string + { + if (!$this->hasGenerateBaseline()) { + throw new \PHPUnit\TextUI\CliArguments\Exception(); + } + return $this->generateBaseline; + } + /** + * @psalm-assert-if-true !null $this->useBaseline + */ + public function hasUseBaseline() : bool + { + return $this->useBaseline !== null; + } + /** + * @throws Exception + */ + public function useBaseline() : string + { + if (!$this->hasUseBaseline()) { + throw new \PHPUnit\TextUI\CliArguments\Exception(); + } + return $this->useBaseline; + } + public function ignoreBaseline() : bool + { + return $this->ignoreBaseline; + } public function generateConfiguration() : bool { return $this->generateConfiguration; @@ -77826,7 +79597,10 @@ final class Configuration public const COLOR_AUTO = 'auto'; public const COLOR_ALWAYS = 'always'; public const COLOR_DEFAULT = self::COLOR_NEVER; - private readonly ?string $cliArgument; + /** + * @psalm-var list + */ + private readonly array $cliArguments; private readonly ?string $configurationFile; private readonly ?string $bootstrap; private readonly bool $cacheResult; @@ -77936,14 +79710,16 @@ final class Configuration private readonly \PHPUnit\TextUI\Configuration\Php $php; private readonly bool $controlGarbageCollector; private readonly int $numberOfTestsBeforeGarbageCollection; + private readonly ?string $generateBaseline; /** + * @psalm-param list $cliArguments * @psalm-param ?non-empty-string $pharExtensionDirectory * @psalm-param non-empty-list $testSuffixes * @psalm-param list}> $extensionBootstrappers */ - public function __construct(?string $cliArgument, ?string $configurationFile, ?string $bootstrap, bool $cacheResult, ?string $cacheDirectory, ?string $coverageCacheDirectory, \PHPUnit\TextUI\Configuration\Source $source, string $testResultCacheFile, ?string $coverageClover, ?string $coverageCobertura, ?string $coverageCrap4j, int $coverageCrap4jThreshold, ?string $coverageHtml, int $coverageHtmlLowUpperBound, int $coverageHtmlHighLowerBound, string $coverageHtmlColorSuccessLow, string $coverageHtmlColorSuccessMedium, string $coverageHtmlColorSuccessHigh, string $coverageHtmlColorWarning, string $coverageHtmlColorDanger, ?string $coverageHtmlCustomCssFile, ?string $coveragePhp, ?string $coverageText, bool $coverageTextShowUncoveredFiles, bool $coverageTextShowOnlySummary, ?string $coverageXml, bool $pathCoverage, bool $ignoreDeprecatedCodeUnitsFromCodeCoverage, bool $disableCodeCoverageIgnore, bool $failOnDeprecation, bool $failOnEmptyTestSuite, bool $failOnIncomplete, bool $failOnNotice, bool $failOnRisky, bool $failOnSkipped, bool $failOnWarning, bool $stopOnDefect, bool $stopOnDeprecation, bool $stopOnError, bool $stopOnFailure, bool $stopOnIncomplete, bool $stopOnNotice, bool $stopOnRisky, bool $stopOnSkipped, bool $stopOnWarning, bool $outputToStandardErrorStream, int|string $columns, bool $noExtensions, ?string $pharExtensionDirectory, array $extensionBootstrappers, bool $backupGlobals, bool $backupStaticProperties, bool $beStrictAboutChangesToGlobalState, bool $colors, bool $processIsolation, bool $enforceTimeLimit, int $defaultTimeLimit, int $timeoutForSmallTests, int $timeoutForMediumTests, int $timeoutForLargeTests, bool $reportUselessTests, bool $strictCoverage, bool $disallowTestOutput, bool $displayDetailsOnIncompleteTests, bool $displayDetailsOnSkippedTests, bool $displayDetailsOnTestsThatTriggerDeprecations, bool $displayDetailsOnTestsThatTriggerErrors, bool $displayDetailsOnTestsThatTriggerNotices, bool $displayDetailsOnTestsThatTriggerWarnings, bool $reverseDefectList, bool $requireCoverageMetadata, bool $registerMockObjectsFromTestArgumentsRecursively, bool $noProgress, bool $noResults, bool $noOutput, int $executionOrder, int $executionOrderDefects, bool $resolveDependencies, ?string $logfileTeamcity, ?string $logfileJunit, ?string $logfileTestdoxHtml, ?string $logfileTestdoxText, ?string $logEventsText, ?string $logEventsVerboseText, bool $teamCityOutput, bool $testDoxOutput, ?array $testsCovering, ?array $testsUsing, ?string $filter, ?array $groups, ?array $excludeGroups, int $randomOrderSeed, bool $includeUncoveredFiles, \PHPUnit\TextUI\Configuration\TestSuiteCollection $testSuite, string $includeTestSuite, string $excludeTestSuite, ?string $defaultTestSuite, array $testSuffixes, \PHPUnit\TextUI\Configuration\Php $php, bool $controlGarbageCollector, int $numberOfTestsBeforeGarbageCollection) + public function __construct(array $cliArguments, ?string $configurationFile, ?string $bootstrap, bool $cacheResult, ?string $cacheDirectory, ?string $coverageCacheDirectory, \PHPUnit\TextUI\Configuration\Source $source, string $testResultCacheFile, ?string $coverageClover, ?string $coverageCobertura, ?string $coverageCrap4j, int $coverageCrap4jThreshold, ?string $coverageHtml, int $coverageHtmlLowUpperBound, int $coverageHtmlHighLowerBound, string $coverageHtmlColorSuccessLow, string $coverageHtmlColorSuccessMedium, string $coverageHtmlColorSuccessHigh, string $coverageHtmlColorWarning, string $coverageHtmlColorDanger, ?string $coverageHtmlCustomCssFile, ?string $coveragePhp, ?string $coverageText, bool $coverageTextShowUncoveredFiles, bool $coverageTextShowOnlySummary, ?string $coverageXml, bool $pathCoverage, bool $ignoreDeprecatedCodeUnitsFromCodeCoverage, bool $disableCodeCoverageIgnore, bool $failOnDeprecation, bool $failOnEmptyTestSuite, bool $failOnIncomplete, bool $failOnNotice, bool $failOnRisky, bool $failOnSkipped, bool $failOnWarning, bool $stopOnDefect, bool $stopOnDeprecation, bool $stopOnError, bool $stopOnFailure, bool $stopOnIncomplete, bool $stopOnNotice, bool $stopOnRisky, bool $stopOnSkipped, bool $stopOnWarning, bool $outputToStandardErrorStream, int|string $columns, bool $noExtensions, ?string $pharExtensionDirectory, array $extensionBootstrappers, bool $backupGlobals, bool $backupStaticProperties, bool $beStrictAboutChangesToGlobalState, bool $colors, bool $processIsolation, bool $enforceTimeLimit, int $defaultTimeLimit, int $timeoutForSmallTests, int $timeoutForMediumTests, int $timeoutForLargeTests, bool $reportUselessTests, bool $strictCoverage, bool $disallowTestOutput, bool $displayDetailsOnIncompleteTests, bool $displayDetailsOnSkippedTests, bool $displayDetailsOnTestsThatTriggerDeprecations, bool $displayDetailsOnTestsThatTriggerErrors, bool $displayDetailsOnTestsThatTriggerNotices, bool $displayDetailsOnTestsThatTriggerWarnings, bool $reverseDefectList, bool $requireCoverageMetadata, bool $registerMockObjectsFromTestArgumentsRecursively, bool $noProgress, bool $noResults, bool $noOutput, int $executionOrder, int $executionOrderDefects, bool $resolveDependencies, ?string $logfileTeamcity, ?string $logfileJunit, ?string $logfileTestdoxHtml, ?string $logfileTestdoxText, ?string $logEventsText, ?string $logEventsVerboseText, bool $teamCityOutput, bool $testDoxOutput, ?array $testsCovering, ?array $testsUsing, ?string $filter, ?array $groups, ?array $excludeGroups, int $randomOrderSeed, bool $includeUncoveredFiles, \PHPUnit\TextUI\Configuration\TestSuiteCollection $testSuite, string $includeTestSuite, string $excludeTestSuite, ?string $defaultTestSuite, array $testSuffixes, \PHPUnit\TextUI\Configuration\Php $php, bool $controlGarbageCollector, int $numberOfTestsBeforeGarbageCollection, ?string $generateBaseline) { - $this->cliArgument = $cliArgument; + $this->cliArguments = $cliArguments; $this->configurationFile = $configurationFile; $this->bootstrap = $bootstrap; $this->cacheResult = $cacheResult; @@ -78044,23 +79820,44 @@ final class Configuration $this->php = $php; $this->controlGarbageCollector = $controlGarbageCollector; $this->numberOfTestsBeforeGarbageCollection = $numberOfTestsBeforeGarbageCollection; + $this->generateBaseline = $generateBaseline; } /** - * @psalm-assert-if-true !null $this->cliArgument + * @psalm-assert-if-true !empty $this->cliArguments + */ + public function hasCliArguments() : bool + { + return !empty($this->cliArguments); + } + /** + * @psalm-return list + */ + public function cliArguments() : array + { + return $this->cliArguments; + } + /** + * @psalm-assert-if-true !empty $this->cliArguments + * + * @deprecated Use hasCliArguments() instead */ public function hasCliArgument() : bool { - return $this->cliArgument !== null; + return !empty($this->cliArguments); } /** * @throws NoCliArgumentException + * + * @return non-empty-string + * + * @deprecated Use cliArguments()[0] instead */ public function cliArgument() : string { - if (!$this->hasCliArgument()) { + if (!$this->hasCliArguments()) { throw new \PHPUnit\TextUI\Configuration\NoCliArgumentException(); } - return $this->cliArgument; + return $this->cliArguments[0]; } /** * @psalm-assert-if-true !null $this->configurationFile @@ -78866,6 +80663,23 @@ final class Configuration { return $this->numberOfTestsBeforeGarbageCollection; } + /** + * @psalm-assert-if-true !null $this->generateBaseline + */ + public function hasGenerateBaseline() : bool + { + return $this->generateBaseline !== null; + } + /** + * @throws NoBaselineException + */ + public function generateBaseline() : string + { + if (!$this->hasGenerateBaseline()) { + throw new \PHPUnit\TextUI\Configuration\NoBaselineException(); + } + return $this->generateBaseline; + } } + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\TextUI\Configuration; + use RuntimeException; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit @@ -79211,10 +81045,6 @@ final class Merger */ public function merge(CliConfiguration $cliConfiguration, XmlConfiguration $xmlConfiguration) : \PHPUnit\TextUI\Configuration\Configuration { - $cliArgument = null; - if ($cliConfiguration->hasArgument()) { - $cliArgument = $cliConfiguration->argument(); - } $configurationFile = null; if ($xmlConfiguration->wasLoadedFromFile()) { assert($xmlConfiguration instanceof LoadedFromFileConfiguration); @@ -79355,22 +81185,18 @@ final class Merger } else { $outputToStandardErrorStream = $xmlConfiguration->phpunit()->stderr(); } - $maxNumberOfColumns = (new Console())->getNumberOfColumns(); if ($cliConfiguration->hasColumns()) { $columns = $cliConfiguration->columns(); } else { $columns = $xmlConfiguration->phpunit()->columns(); } if ($columns === 'max') { - $columns = $maxNumberOfColumns; + $columns = (new Console())->getNumberOfColumns(); } if ($columns < 16) { $columns = 16; EventFacade::emitter()->testRunnerTriggeredWarning('Less than 16 columns requested, number of columns set to 16'); } - if ($columns > $maxNumberOfColumns) { - $columns = $maxNumberOfColumns; - } assert(is_int($columns)); $noExtensions = \false; if ($cliConfiguration->hasNoExtensions() && $cliConfiguration->noExtensions()) { @@ -79734,7 +81560,20 @@ final class Merger $sourceExcludeDirectories = $xmlConfiguration->source()->excludeDirectories(); $sourceExcludeFiles = $xmlConfiguration->source()->excludeFiles(); } - return new \PHPUnit\TextUI\Configuration\Configuration($cliArgument, $configurationFile, $bootstrap, $cacheResult, $cacheDirectory, $coverageCacheDirectory, new \PHPUnit\TextUI\Configuration\Source(\PHPUnit\TextUI\Configuration\FilterDirectoryCollection::fromArray($sourceIncludeDirectories), $sourceIncludeFiles, $sourceExcludeDirectories, $sourceExcludeFiles, $xmlConfiguration->source()->restrictDeprecations(), $xmlConfiguration->source()->restrictNotices(), $xmlConfiguration->source()->restrictWarnings(), $xmlConfiguration->source()->ignoreSuppressionOfDeprecations(), $xmlConfiguration->source()->ignoreSuppressionOfPhpDeprecations(), $xmlConfiguration->source()->ignoreSuppressionOfErrors(), $xmlConfiguration->source()->ignoreSuppressionOfNotices(), $xmlConfiguration->source()->ignoreSuppressionOfPhpNotices(), $xmlConfiguration->source()->ignoreSuppressionOfWarnings(), $xmlConfiguration->source()->ignoreSuppressionOfPhpWarnings()), $testResultCacheFile, $coverageClover, $coverageCobertura, $coverageCrap4j, $coverageCrap4jThreshold, $coverageHtml, $coverageHtmlLowUpperBound, $coverageHtmlHighLowerBound, $coverageHtmlColorSuccessLow, $coverageHtmlColorSuccessMedium, $coverageHtmlColorSuccessHigh, $coverageHtmlColorWarning, $coverageHtmlColorDanger, $coverageHtmlCustomCssFile, $coveragePhp, $coverageText, $coverageTextShowUncoveredFiles, $coverageTextShowOnlySummary, $coverageXml, $pathCoverage, $xmlConfiguration->codeCoverage()->ignoreDeprecatedCodeUnits(), $disableCodeCoverageIgnore, $failOnDeprecation, $failOnEmptyTestSuite, $failOnIncomplete, $failOnNotice, $failOnRisky, $failOnSkipped, $failOnWarning, $stopOnDefect, $stopOnDeprecation, $stopOnError, $stopOnFailure, $stopOnIncomplete, $stopOnNotice, $stopOnRisky, $stopOnSkipped, $stopOnWarning, $outputToStandardErrorStream, $columns, $noExtensions, $pharExtensionDirectory, $extensionBootstrappers, $backupGlobals, $backupStaticProperties, $beStrictAboutChangesToGlobalState, $colors, $processIsolation, $enforceTimeLimit, $defaultTimeLimit, $timeoutForSmallTests, $timeoutForMediumTests, $timeoutForLargeTests, $reportUselessTests, $strictCoverage, $disallowTestOutput, $displayDetailsOnIncompleteTests, $displayDetailsOnSkippedTests, $displayDetailsOnTestsThatTriggerDeprecations, $displayDetailsOnTestsThatTriggerErrors, $displayDetailsOnTestsThatTriggerNotices, $displayDetailsOnTestsThatTriggerWarnings, $reverseDefectList, $requireCoverageMetadata, $registerMockObjectsFromTestArgumentsRecursively, $noProgress, $noResults, $noOutput, $executionOrder, $executionOrderDefects, $resolveDependencies, $logfileTeamcity, $logfileJunit, $logfileTestdoxHtml, $logfileTestdoxText, $logEventsText, $logEventsVerboseText, $teamCityOutput, $testDoxOutput, $testsCovering, $testsUsing, $filter, $groups, $excludeGroups, $randomOrderSeed, $includeUncoveredFiles, $xmlConfiguration->testSuite(), $includeTestSuite, $excludeTestSuite, $xmlConfiguration->phpunit()->hasDefaultTestSuite() ? $xmlConfiguration->phpunit()->defaultTestSuite() : null, $testSuffixes, new \PHPUnit\TextUI\Configuration\Php(\PHPUnit\TextUI\Configuration\DirectoryCollection::fromArray($includePaths), \PHPUnit\TextUI\Configuration\IniSettingCollection::fromArray($iniSettings), $xmlConfiguration->php()->constants(), $xmlConfiguration->php()->globalVariables(), $xmlConfiguration->php()->envVariables(), $xmlConfiguration->php()->postVariables(), $xmlConfiguration->php()->getVariables(), $xmlConfiguration->php()->cookieVariables(), $xmlConfiguration->php()->serverVariables(), $xmlConfiguration->php()->filesVariables(), $xmlConfiguration->php()->requestVariables()), $xmlConfiguration->phpunit()->controlGarbageCollector(), $xmlConfiguration->phpunit()->numberOfTestsBeforeGarbageCollection()); + $useBaseline = null; + $generateBaseline = null; + if (!$cliConfiguration->hasGenerateBaseline()) { + if ($cliConfiguration->hasUseBaseline()) { + $useBaseline = $cliConfiguration->useBaseline(); + } elseif ($xmlConfiguration->source()->hasBaseline()) { + $useBaseline = $xmlConfiguration->source()->baseline(); + } + } else { + $generateBaseline = $cliConfiguration->generateBaseline(); + } + assert($useBaseline !== ''); + assert($generateBaseline !== ''); + return new \PHPUnit\TextUI\Configuration\Configuration($cliConfiguration->arguments(), $configurationFile, $bootstrap, $cacheResult, $cacheDirectory, $coverageCacheDirectory, new \PHPUnit\TextUI\Configuration\Source($useBaseline, $cliConfiguration->ignoreBaseline(), \PHPUnit\TextUI\Configuration\FilterDirectoryCollection::fromArray($sourceIncludeDirectories), $sourceIncludeFiles, $sourceExcludeDirectories, $sourceExcludeFiles, $xmlConfiguration->source()->restrictDeprecations(), $xmlConfiguration->source()->restrictNotices(), $xmlConfiguration->source()->restrictWarnings(), $xmlConfiguration->source()->ignoreSuppressionOfDeprecations(), $xmlConfiguration->source()->ignoreSuppressionOfPhpDeprecations(), $xmlConfiguration->source()->ignoreSuppressionOfErrors(), $xmlConfiguration->source()->ignoreSuppressionOfNotices(), $xmlConfiguration->source()->ignoreSuppressionOfPhpNotices(), $xmlConfiguration->source()->ignoreSuppressionOfWarnings(), $xmlConfiguration->source()->ignoreSuppressionOfPhpWarnings()), $testResultCacheFile, $coverageClover, $coverageCobertura, $coverageCrap4j, $coverageCrap4jThreshold, $coverageHtml, $coverageHtmlLowUpperBound, $coverageHtmlHighLowerBound, $coverageHtmlColorSuccessLow, $coverageHtmlColorSuccessMedium, $coverageHtmlColorSuccessHigh, $coverageHtmlColorWarning, $coverageHtmlColorDanger, $coverageHtmlCustomCssFile, $coveragePhp, $coverageText, $coverageTextShowUncoveredFiles, $coverageTextShowOnlySummary, $coverageXml, $pathCoverage, $xmlConfiguration->codeCoverage()->ignoreDeprecatedCodeUnits(), $disableCodeCoverageIgnore, $failOnDeprecation, $failOnEmptyTestSuite, $failOnIncomplete, $failOnNotice, $failOnRisky, $failOnSkipped, $failOnWarning, $stopOnDefect, $stopOnDeprecation, $stopOnError, $stopOnFailure, $stopOnIncomplete, $stopOnNotice, $stopOnRisky, $stopOnSkipped, $stopOnWarning, $outputToStandardErrorStream, $columns, $noExtensions, $pharExtensionDirectory, $extensionBootstrappers, $backupGlobals, $backupStaticProperties, $beStrictAboutChangesToGlobalState, $colors, $processIsolation, $enforceTimeLimit, $defaultTimeLimit, $timeoutForSmallTests, $timeoutForMediumTests, $timeoutForLargeTests, $reportUselessTests, $strictCoverage, $disallowTestOutput, $displayDetailsOnIncompleteTests, $displayDetailsOnSkippedTests, $displayDetailsOnTestsThatTriggerDeprecations, $displayDetailsOnTestsThatTriggerErrors, $displayDetailsOnTestsThatTriggerNotices, $displayDetailsOnTestsThatTriggerWarnings, $reverseDefectList, $requireCoverageMetadata, $registerMockObjectsFromTestArgumentsRecursively, $noProgress, $noResults, $noOutput, $executionOrder, $executionOrderDefects, $resolveDependencies, $logfileTeamcity, $logfileJunit, $logfileTestdoxHtml, $logfileTestdoxText, $logEventsText, $logEventsVerboseText, $teamCityOutput, $testDoxOutput, $testsCovering, $testsUsing, $filter, $groups, $excludeGroups, $randomOrderSeed, $includeUncoveredFiles, $xmlConfiguration->testSuite(), $includeTestSuite, $excludeTestSuite, $xmlConfiguration->phpunit()->hasDefaultTestSuite() ? $xmlConfiguration->phpunit()->defaultTestSuite() : null, $testSuffixes, new \PHPUnit\TextUI\Configuration\Php(\PHPUnit\TextUI\Configuration\DirectoryCollection::fromArray($includePaths), \PHPUnit\TextUI\Configuration\IniSettingCollection::fromArray($iniSettings), $xmlConfiguration->php()->constants(), $xmlConfiguration->php()->globalVariables(), $xmlConfiguration->php()->envVariables(), $xmlConfiguration->php()->postVariables(), $xmlConfiguration->php()->getVariables(), $xmlConfiguration->php()->cookieVariables(), $xmlConfiguration->php()->serverVariables(), $xmlConfiguration->php()->filesVariables(), $xmlConfiguration->php()->requestVariables()), $xmlConfiguration->phpunit()->controlGarbageCollector(), $xmlConfiguration->phpunit()->numberOfTestsBeforeGarbageCollection(), $generateBaseline); } } hasCliArgument()) { - $argument = realpath($configuration->cliArgument()); - if (!$argument) { - throw new TestFileNotFoundException($configuration->cliArgument()); + if ($configuration->hasCliArguments()) { + $arguments = []; + foreach ($configuration->cliArguments() as $cliArgument) { + $argument = realpath($cliArgument); + if (!$argument) { + throw new TestFileNotFoundException($cliArgument); + } + $arguments[] = $argument; + } + if (count($arguments) === 1) { + $testSuite = $this->testSuiteFromPath($arguments[0], $configuration->testSuffixes()); + } else { + $testSuite = $this->testSuiteFromPathList($arguments, $configuration->testSuffixes()); } - $testSuite = $this->testSuiteFromPath($argument, $configuration->testSuffixes()); } if (!isset($testSuite)) { $xmlConfigurationFile = $configuration->hasConfigurationFile() ? $configuration->configurationFile() : 'Root Test Suite'; @@ -80066,19 +81914,20 @@ final class TestSuiteBuilder /** * @psalm-param non-empty-string $path * @psalm-param list $suffixes + * @psalm-param ?TestSuite $suite * * @throws \PHPUnit\Framework\Exception */ - private function testSuiteFromPath(string $path, array $suffixes) : TestSuite + private function testSuiteFromPath(string $path, array $suffixes, ?TestSuite $suite = null) : TestSuite { if (is_dir($path)) { $files = (new FileIteratorFacade())->getFilesAsArray($path, $suffixes); - $suite = TestSuite::empty($path); + $suite = $suite ?: TestSuite::empty('CLI Arguments'); $suite->addTestFiles($files); return $suite; } if (is_file($path) && str_ends_with($path, '.phpt')) { - $suite = TestSuite::empty($path); + $suite = $suite ?: TestSuite::empty($path); $suite->addTestFile($path); return $suite; } @@ -80088,7 +81937,25 @@ final class TestSuiteBuilder print $e->getMessage() . \PHP_EOL; exit(1); } - return TestSuite::fromClassReflector($testClass); + if (!$suite) { + return TestSuite::fromClassReflector($testClass); + } + $suite->addTestSuite($testClass); + return $suite; + } + /** + * @psalm-param list $paths + * @psalm-param list $suffixes + * + * @throws \PHPUnit\Framework\Exception + */ + private function testSuiteFromPathList(array $paths, array $suffixes) : TestSuite + { + $suite = TestSuite::empty('CLI Arguments'); + foreach ($paths as $path) { + $this->testSuiteFromPath($path, $suffixes, $suite); + } + return $suite; } } baseline = $baseline; + $this->ignoreBaseline = $ignoreBaseline; $this->includeDirectories = $includeDirectories; $this->includeFiles = $includeFiles; $this->excludeDirectories = $excludeDirectories; @@ -81319,6 +83196,32 @@ final class Source $this->ignoreSuppressionOfWarnings = $ignoreSuppressionOfWarnings; $this->ignoreSuppressionOfPhpWarnings = $ignoreSuppressionOfPhpWarnings; } + /** + * @psalm-assert-if-true !null $this->baseline + */ + public function useBaseline() : bool + { + return $this->hasBaseline() && !$this->ignoreBaseline; + } + /** + * @psalm-assert-if-true !null $this->baseline + */ + public function hasBaseline() : bool + { + return $this->baseline !== null; + } + /** + * @psalm-return non-empty-string + * + * @throws NoBaselineException + */ + public function baseline() : string + { + if (!$this->hasBaseline()) { + throw new \PHPUnit\TextUI\Configuration\NoBaselineException(); + } + return $this->baseline; + } public function includeDirectories() : \PHPUnit\TextUI\Configuration\FilterDirectoryCollection { return $this->includeDirectories; @@ -82723,7 +84626,7 @@ final class DefaultConfiguration extends \PHPUnit\TextUI\XmlConfiguration\Config { public static function create() : self { - return new self(ExtensionBootstrapCollection::fromArray([]), new Source(CodeCoverageFilterDirectoryCollection::fromArray([]), FileCollection::fromArray([]), CodeCoverageFilterDirectoryCollection::fromArray([]), FileCollection::fromArray([]), \false, \false, \false, \false, \false, \false, \false, \false, \false, \false), new CodeCoverage(null, CodeCoverageFilterDirectoryCollection::fromArray([]), FileCollection::fromArray([]), CodeCoverageFilterDirectoryCollection::fromArray([]), FileCollection::fromArray([]), \false, \true, \false, \false, null, null, null, null, null, null, null), new \PHPUnit\TextUI\XmlConfiguration\Groups(GroupCollection::fromArray([]), GroupCollection::fromArray([])), new Logging(null, null, null, null), new Php(DirectoryCollection::fromArray([]), IniSettingCollection::fromArray([]), ConstantCollection::fromArray([]), VariableCollection::fromArray([]), VariableCollection::fromArray([]), VariableCollection::fromArray([]), VariableCollection::fromArray([]), VariableCollection::fromArray([]), VariableCollection::fromArray([]), VariableCollection::fromArray([]), VariableCollection::fromArray([])), new \PHPUnit\TextUI\XmlConfiguration\PHPUnit(null, \true, null, 80, \PHPUnit\TextUI\Configuration\Configuration::COLOR_DEFAULT, \false, \false, \false, \false, \false, \false, \false, \false, \false, null, \false, \false, \false, \false, \false, \false, \false, \false, \false, \false, \false, \false, \false, \false, \false, \false, \false, null, \false, \false, \true, \false, \false, 1, 1, 10, 60, null, TestSuiteSorter::ORDER_DEFAULT, \true, \false, \false, \false, \false, \false, \false, 100), TestSuiteCollection::fromArray([])); + return new self(ExtensionBootstrapCollection::fromArray([]), new Source(null, \false, CodeCoverageFilterDirectoryCollection::fromArray([]), FileCollection::fromArray([]), CodeCoverageFilterDirectoryCollection::fromArray([]), FileCollection::fromArray([]), \false, \false, \false, \false, \false, \false, \false, \false, \false, \false), new CodeCoverage(null, CodeCoverageFilterDirectoryCollection::fromArray([]), FileCollection::fromArray([]), CodeCoverageFilterDirectoryCollection::fromArray([]), FileCollection::fromArray([]), \false, \true, \false, \false, null, null, null, null, null, null, null), new \PHPUnit\TextUI\XmlConfiguration\Groups(GroupCollection::fromArray([]), GroupCollection::fromArray([])), new Logging(null, null, null, null), new Php(DirectoryCollection::fromArray([]), IniSettingCollection::fromArray([]), ConstantCollection::fromArray([]), VariableCollection::fromArray([]), VariableCollection::fromArray([]), VariableCollection::fromArray([]), VariableCollection::fromArray([]), VariableCollection::fromArray([]), VariableCollection::fromArray([]), VariableCollection::fromArray([]), VariableCollection::fromArray([])), new \PHPUnit\TextUI\XmlConfiguration\PHPUnit(null, \true, null, 80, \PHPUnit\TextUI\Configuration\Configuration::COLOR_DEFAULT, \false, \false, \false, \false, \false, \false, \false, \false, \false, null, \false, \false, \false, \false, \false, \false, \false, \false, \false, \false, \false, \false, \false, \false, \false, \false, \false, null, \false, \false, \true, \false, \false, 1, 1, 10, 60, null, TestSuiteSorter::ORDER_DEFAULT, \true, \false, \false, \false, \false, \false, \false, 100), TestSuiteCollection::fromArray([])); } public function isDefault() : bool { @@ -83053,8 +84956,7 @@ final class Loader // - C:\windows // - C:/windows // - c:/windows - if (defined('PHP_WINDOWS_VERSION_BUILD') && ($path[0] === '\\' || strlen($path) >= 3 && preg_match('#^[A-Z]:[/\\\\]#i', substr($path, 0, 3)))) { - assert(!empty($path)); + if (defined('PHP_WINDOWS_VERSION_BUILD') && !empty($path) && ($path[0] === '\\' || strlen($path) >= 3 && preg_match('#^[A-Z]:[/\\\\]#i', substr($path, 0, 3)))) { return $path; } if (str_contains($path, '://')) { @@ -83064,6 +84966,7 @@ final class Loader } private function source(string $filename, DOMXPath $xpath) : Source { + $baseline = null; $restrictDeprecations = \false; $restrictNotices = \false; $restrictWarnings = \false; @@ -83076,6 +84979,10 @@ final class Loader $ignoreSuppressionOfPhpWarnings = \false; $element = $this->element($xpath, 'source'); if ($element) { + $baseline = $this->getStringAttribute($element, 'baseline'); + if ($baseline !== null) { + $baseline = $this->toAbsolutePath($filename, $baseline); + } $restrictDeprecations = $this->getBooleanAttribute($element, 'restrictDeprecations', \false); $restrictNotices = $this->getBooleanAttribute($element, 'restrictNotices', \false); $restrictWarnings = $this->getBooleanAttribute($element, 'restrictWarnings', \false); @@ -83087,7 +84994,7 @@ final class Loader $ignoreSuppressionOfWarnings = $this->getBooleanAttribute($element, 'ignoreSuppressionOfWarnings', \false); $ignoreSuppressionOfPhpWarnings = $this->getBooleanAttribute($element, 'ignoreSuppressionOfPhpWarnings', \false); } - return new Source($this->readFilterDirectories($filename, $xpath, 'source/include/directory'), $this->readFilterFiles($filename, $xpath, 'source/include/file'), $this->readFilterDirectories($filename, $xpath, 'source/exclude/directory'), $this->readFilterFiles($filename, $xpath, 'source/exclude/file'), $restrictDeprecations, $restrictNotices, $restrictWarnings, $ignoreSuppressionOfDeprecations, $ignoreSuppressionOfPhpDeprecations, $ignoreSuppressionOfErrors, $ignoreSuppressionOfNotices, $ignoreSuppressionOfPhpNotices, $ignoreSuppressionOfWarnings, $ignoreSuppressionOfPhpWarnings); + return new Source($baseline, \false, $this->readFilterDirectories($filename, $xpath, 'source/include/directory'), $this->readFilterFiles($filename, $xpath, 'source/include/file'), $this->readFilterDirectories($filename, $xpath, 'source/exclude/directory'), $this->readFilterFiles($filename, $xpath, 'source/exclude/file'), $restrictDeprecations, $restrictNotices, $restrictWarnings, $ignoreSuppressionOfDeprecations, $ignoreSuppressionOfPhpDeprecations, $ignoreSuppressionOfErrors, $ignoreSuppressionOfNotices, $ignoreSuppressionOfPhpNotices, $ignoreSuppressionOfWarnings, $ignoreSuppressionOfPhpWarnings); } private function codeCoverage(string $filename, DOMXPath $xpath) : CodeCoverage { @@ -86087,7 +87994,7 @@ use PHPUnit\SebastianBergmann\Environment\Console; final class Help { private const LEFT_MARGIN = ' '; - private const HELP_TEXT = ['Usage' => [['text' => 'phpunit [options] UnitTest.php'], ['text' => 'phpunit [options] ']], 'Configuration' => [['arg' => '--bootstrap ', 'desc' => 'A PHP script that is included before the tests run'], ['arg' => '-c|--configuration ', 'desc' => 'Read configuration from XML file'], ['arg' => '--no-configuration', 'desc' => 'Ignore default configuration file (phpunit.xml)'], ['arg' => '--no-extensions', 'desc' => 'Do not load PHPUnit extensions'], ['arg' => '--include-path ', 'desc' => 'Prepend PHP\'s include_path with given path(s)'], ['arg' => '-d ', 'desc' => 'Sets a php.ini value'], ['arg' => '--cache-directory ', 'desc' => 'Specify cache directory'], ['arg' => '--generate-configuration', 'desc' => 'Generate configuration file with suggested settings'], ['arg' => '--migrate-configuration', 'desc' => 'Migrate configuration file to current format']], 'Selection' => [['arg' => '--list-suites', 'desc' => 'List available test suites'], ['arg' => '--testsuite ', 'desc' => 'Only run tests from the specified test suite(s)'], ['arg' => '--exclude-testsuite ', 'desc' => 'Exclude tests from the specified test suite(s)'], ['arg' => '--list-groups', 'desc' => 'List available test groups'], ['arg' => '--group ', 'desc' => 'Only run tests from the specified group(s)'], ['arg' => '--exclude-group ', 'desc' => 'Exclude tests from the specified group(s)'], ['arg' => '--covers ', 'desc' => 'Only run tests that intend to cover '], ['arg' => '--uses ', 'desc' => 'Only run tests that intend to use '], ['arg' => '--list-tests', 'desc' => 'List available tests'], ['arg' => '--list-tests-xml ', 'desc' => 'List available tests in XML format'], ['arg' => '--filter ', 'desc' => 'Filter which tests to run'], ['arg' => '--test-suffix ', 'desc' => 'Only search for test in files with specified suffix(es). Default: Test.php,.phpt']], 'Execution' => [['arg' => '--process-isolation', 'desc' => 'Run each test in a separate PHP process'], ['arg' => '--globals-backup', 'desc' => 'Backup and restore $GLOBALS for each test'], ['arg' => '--static-backup', 'desc' => 'Backup and restore static properties for each test'], ['spacer' => ''], ['arg' => '--strict-coverage', 'desc' => 'Be strict about code coverage metadata'], ['arg' => '--strict-global-state', 'desc' => 'Be strict about changes to global state'], ['arg' => '--disallow-test-output', 'desc' => 'Be strict about output during tests'], ['arg' => '--enforce-time-limit', 'desc' => 'Enforce time limit based on test size'], ['arg' => '--default-time-limit ', 'desc' => 'Timeout in seconds for tests that have no declared size'], ['arg' => '--dont-report-useless-tests', 'desc' => 'Do not report tests that do not test anything'], ['spacer' => ''], ['arg' => '--stop-on-defect', 'desc' => 'Stop after first error, failure, warning, or risky test'], ['arg' => '--stop-on-error', 'desc' => 'Stop after first error'], ['arg' => '--stop-on-failure', 'desc' => 'Stop after first failure'], ['arg' => '--stop-on-warning', 'desc' => 'Stop after first warning'], ['arg' => '--stop-on-risky', 'desc' => 'Stop after first risky test'], ['arg' => '--stop-on-deprecation', 'desc' => 'Stop after first test that triggered a deprecation'], ['arg' => '--stop-on-notice', 'desc' => 'Stop after first test that triggered a notice'], ['arg' => '--stop-on-skipped', 'desc' => 'Stop after first skipped test'], ['arg' => '--stop-on-incomplete', 'desc' => 'Stop after first incomplete test'], ['spacer' => ''], ['arg' => '--fail-on-warning', 'desc' => 'Signal failure using shell exit code when a warning was triggered'], ['arg' => '--fail-on-risky', 'desc' => 'Signal failure using shell exit code when a test was considered risky'], ['arg' => '--fail-on-deprecation', 'desc' => 'Signal failure using shell exit code when a deprecation was triggered'], ['arg' => '--fail-on-notice', 'desc' => 'Signal failure using shell exit code when a notice was triggered'], ['arg' => '--fail-on-skipped', 'desc' => 'Signal failure using shell exit code when a test was skipped'], ['arg' => '--fail-on-incomplete', 'desc' => 'Signal failure using shell exit code when a test was marked incomplete'], ['spacer' => ''], ['arg' => '--cache-result', 'desc' => 'Write test results to cache file'], ['arg' => '--do-not-cache-result', 'desc' => 'Do not write test results to cache file'], ['spacer' => ''], ['arg' => '--order-by ', 'desc' => 'Run tests in order: default|defects|depends|duration|no-depends|random|reverse|size'], ['arg' => '--random-order-seed ', 'desc' => 'Use the specified random seed when running tests in random order']], 'Reporting' => [['arg' => '--colors ', 'desc' => 'Use colors in output ("never", "auto" or "always")'], ['arg' => '--columns ', 'desc' => 'Number of columns to use for progress output'], ['arg' => '--columns max', 'desc' => 'Use maximum number of columns for progress output'], ['arg' => '--stderr', 'desc' => 'Write to STDERR instead of STDOUT'], ['spacer' => ''], ['arg' => '--no-progress', 'desc' => 'Disable output of test execution progress'], ['arg' => '--no-results', 'desc' => 'Disable output of test results'], ['arg' => '--no-output', 'desc' => 'Disable all output'], ['spacer' => ''], ['arg' => '--display-incomplete', 'desc' => 'Display details for incomplete tests'], ['arg' => '--display-skipped', 'desc' => 'Display details for skipped tests'], ['arg' => '--display-deprecations', 'desc' => 'Display details for deprecations triggered by tests'], ['arg' => '--display-errors', 'desc' => 'Display details for errors triggered by tests'], ['arg' => '--display-notices', 'desc' => 'Display details for notices triggered by tests'], ['arg' => '--display-warnings', 'desc' => 'Display details for warnings triggered by tests'], ['arg' => '--reverse-list', 'desc' => 'Print defects in reverse order'], ['spacer' => ''], ['arg' => '--teamcity', 'desc' => 'Replace default progress and result output with TeamCity format'], ['arg' => '--testdox', 'desc' => 'Replace default result output with TestDox format']], 'Logging' => [['arg' => '--log-junit ', 'desc' => 'Write test results in JUnit XML format to file'], ['arg' => '--log-teamcity ', 'desc' => 'Write test results in TeamCity format to file'], ['arg' => '--testdox-html ', 'desc' => 'Write test results in TestDox format (HTML) to file'], ['arg' => '--testdox-text ', 'desc' => 'Write test results in TestDox format (plain text) to file'], ['arg' => '--log-events-text ', 'desc' => 'Stream events as plain text to file'], ['arg' => '--log-events-verbose-text ', 'desc' => 'Stream events as plain text (with telemetry information) to file'], ['arg' => '--no-logging', 'desc' => 'Ignore logging configured in the XML configuration file']], 'Code Coverage' => [['arg' => '--coverage-clover ', 'desc' => 'Write code coverage report in Clover XML format to file'], ['arg' => '--coverage-cobertura ', 'desc' => 'Write code coverage report in Cobertura XML format to file'], ['arg' => '--coverage-crap4j ', 'desc' => 'Write code coverage report in Crap4J XML format to file'], ['arg' => '--coverage-html ', 'desc' => 'Write code coverage report in HTML format to directory'], ['arg' => '--coverage-php ', 'desc' => 'Write serialized code coverage data to file'], ['arg' => '--coverage-text=', 'desc' => 'Write code coverage report in text format to file [default: standard output]'], ['arg' => '--coverage-xml ', 'desc' => 'Write code coverage report in XML format to directory'], ['arg' => '--warm-coverage-cache', 'desc' => 'Warm static analysis cache'], ['arg' => '--coverage-filter ', 'desc' => 'Include in code coverage reporting'], ['arg' => '--path-coverage', 'desc' => 'Report path coverage in addition to line coverage'], ['arg' => '--disable-coverage-ignore', 'desc' => 'Disable metadata for ignoring code coverage'], ['arg' => '--no-coverage', 'desc' => 'Ignore code coverage reporting configured in the XML configuration file']], 'Miscellaneous' => [['arg' => '-h|--help', 'desc' => 'Prints this usage information'], ['arg' => '--version', 'desc' => 'Prints the version and exits'], ['arg' => '--atleast-version ', 'desc' => 'Checks that version is greater than and exits'], ['arg' => '--check-version', 'desc' => 'Check whether PHPUnit is the latest version and exits']]]; + private const HELP_TEXT = ['Usage' => [['text' => 'phpunit [options] ...']], 'Configuration' => [['arg' => '--bootstrap ', 'desc' => 'A PHP script that is included before the tests run'], ['arg' => '-c|--configuration ', 'desc' => 'Read configuration from XML file'], ['arg' => '--no-configuration', 'desc' => 'Ignore default configuration file (phpunit.xml)'], ['arg' => '--no-extensions', 'desc' => 'Do not load PHPUnit extensions'], ['arg' => '--include-path ', 'desc' => 'Prepend PHP\'s include_path with given path(s)'], ['arg' => '-d ', 'desc' => 'Sets a php.ini value'], ['arg' => '--cache-directory ', 'desc' => 'Specify cache directory'], ['arg' => '--generate-configuration', 'desc' => 'Generate configuration file with suggested settings'], ['arg' => '--migrate-configuration', 'desc' => 'Migrate configuration file to current format'], ['arg' => '--generate-baseline ', 'desc' => 'Generate baseline for issues'], ['arg' => '--use-baseline ', 'desc' => 'Use baseline to ignore issues'], ['arg' => '--ignore-baseline', 'desc' => 'Do not use baseline to ignore issues']], 'Selection' => [['arg' => '--list-suites', 'desc' => 'List available test suites'], ['arg' => '--testsuite ', 'desc' => 'Only run tests from the specified test suite(s)'], ['arg' => '--exclude-testsuite ', 'desc' => 'Exclude tests from the specified test suite(s)'], ['arg' => '--list-groups', 'desc' => 'List available test groups'], ['arg' => '--group ', 'desc' => 'Only run tests from the specified group(s)'], ['arg' => '--exclude-group ', 'desc' => 'Exclude tests from the specified group(s)'], ['arg' => '--covers ', 'desc' => 'Only run tests that intend to cover '], ['arg' => '--uses ', 'desc' => 'Only run tests that intend to use '], ['arg' => '--list-tests', 'desc' => 'List available tests'], ['arg' => '--list-tests-xml ', 'desc' => 'List available tests in XML format'], ['arg' => '--filter ', 'desc' => 'Filter which tests to run'], ['arg' => '--test-suffix ', 'desc' => 'Only search for test in files with specified suffix(es). Default: Test.php,.phpt']], 'Execution' => [['arg' => '--process-isolation', 'desc' => 'Run each test in a separate PHP process'], ['arg' => '--globals-backup', 'desc' => 'Backup and restore $GLOBALS for each test'], ['arg' => '--static-backup', 'desc' => 'Backup and restore static properties for each test'], ['spacer' => ''], ['arg' => '--strict-coverage', 'desc' => 'Be strict about code coverage metadata'], ['arg' => '--strict-global-state', 'desc' => 'Be strict about changes to global state'], ['arg' => '--disallow-test-output', 'desc' => 'Be strict about output during tests'], ['arg' => '--enforce-time-limit', 'desc' => 'Enforce time limit based on test size'], ['arg' => '--default-time-limit ', 'desc' => 'Timeout in seconds for tests that have no declared size'], ['arg' => '--dont-report-useless-tests', 'desc' => 'Do not report tests that do not test anything'], ['spacer' => ''], ['arg' => '--stop-on-defect', 'desc' => 'Stop after first error, failure, warning, or risky test'], ['arg' => '--stop-on-error', 'desc' => 'Stop after first error'], ['arg' => '--stop-on-failure', 'desc' => 'Stop after first failure'], ['arg' => '--stop-on-warning', 'desc' => 'Stop after first warning'], ['arg' => '--stop-on-risky', 'desc' => 'Stop after first risky test'], ['arg' => '--stop-on-deprecation', 'desc' => 'Stop after first test that triggered a deprecation'], ['arg' => '--stop-on-notice', 'desc' => 'Stop after first test that triggered a notice'], ['arg' => '--stop-on-skipped', 'desc' => 'Stop after first skipped test'], ['arg' => '--stop-on-incomplete', 'desc' => 'Stop after first incomplete test'], ['spacer' => ''], ['arg' => '--fail-on-warning', 'desc' => 'Signal failure using shell exit code when a warning was triggered'], ['arg' => '--fail-on-risky', 'desc' => 'Signal failure using shell exit code when a test was considered risky'], ['arg' => '--fail-on-deprecation', 'desc' => 'Signal failure using shell exit code when a deprecation was triggered'], ['arg' => '--fail-on-notice', 'desc' => 'Signal failure using shell exit code when a notice was triggered'], ['arg' => '--fail-on-skipped', 'desc' => 'Signal failure using shell exit code when a test was skipped'], ['arg' => '--fail-on-incomplete', 'desc' => 'Signal failure using shell exit code when a test was marked incomplete'], ['spacer' => ''], ['arg' => '--cache-result', 'desc' => 'Write test results to cache file'], ['arg' => '--do-not-cache-result', 'desc' => 'Do not write test results to cache file'], ['spacer' => ''], ['arg' => '--order-by ', 'desc' => 'Run tests in order: default|defects|depends|duration|no-depends|random|reverse|size'], ['arg' => '--random-order-seed ', 'desc' => 'Use the specified random seed when running tests in random order']], 'Reporting' => [['arg' => '--colors ', 'desc' => 'Use colors in output ("never", "auto" or "always")'], ['arg' => '--columns ', 'desc' => 'Number of columns to use for progress output'], ['arg' => '--columns max', 'desc' => 'Use maximum number of columns for progress output'], ['arg' => '--stderr', 'desc' => 'Write to STDERR instead of STDOUT'], ['spacer' => ''], ['arg' => '--no-progress', 'desc' => 'Disable output of test execution progress'], ['arg' => '--no-results', 'desc' => 'Disable output of test results'], ['arg' => '--no-output', 'desc' => 'Disable all output'], ['spacer' => ''], ['arg' => '--display-incomplete', 'desc' => 'Display details for incomplete tests'], ['arg' => '--display-skipped', 'desc' => 'Display details for skipped tests'], ['arg' => '--display-deprecations', 'desc' => 'Display details for deprecations triggered by tests'], ['arg' => '--display-errors', 'desc' => 'Display details for errors triggered by tests'], ['arg' => '--display-notices', 'desc' => 'Display details for notices triggered by tests'], ['arg' => '--display-warnings', 'desc' => 'Display details for warnings triggered by tests'], ['arg' => '--reverse-list', 'desc' => 'Print defects in reverse order'], ['spacer' => ''], ['arg' => '--teamcity', 'desc' => 'Replace default progress and result output with TeamCity format'], ['arg' => '--testdox', 'desc' => 'Replace default result output with TestDox format']], 'Logging' => [['arg' => '--log-junit ', 'desc' => 'Write test results in JUnit XML format to file'], ['arg' => '--log-teamcity ', 'desc' => 'Write test results in TeamCity format to file'], ['arg' => '--testdox-html ', 'desc' => 'Write test results in TestDox format (HTML) to file'], ['arg' => '--testdox-text ', 'desc' => 'Write test results in TestDox format (plain text) to file'], ['arg' => '--log-events-text ', 'desc' => 'Stream events as plain text to file'], ['arg' => '--log-events-verbose-text ', 'desc' => 'Stream events as plain text with extended information to file'], ['arg' => '--no-logging', 'desc' => 'Ignore logging configured in the XML configuration file']], 'Code Coverage' => [['arg' => '--coverage-clover ', 'desc' => 'Write code coverage report in Clover XML format to file'], ['arg' => '--coverage-cobertura ', 'desc' => 'Write code coverage report in Cobertura XML format to file'], ['arg' => '--coverage-crap4j ', 'desc' => 'Write code coverage report in Crap4J XML format to file'], ['arg' => '--coverage-html ', 'desc' => 'Write code coverage report in HTML format to directory'], ['arg' => '--coverage-php ', 'desc' => 'Write serialized code coverage data to file'], ['arg' => '--coverage-text=', 'desc' => 'Write code coverage report in text format to file [default: standard output]'], ['arg' => '--coverage-xml ', 'desc' => 'Write code coverage report in XML format to directory'], ['arg' => '--warm-coverage-cache', 'desc' => 'Warm static analysis cache'], ['arg' => '--coverage-filter ', 'desc' => 'Include in code coverage reporting'], ['arg' => '--path-coverage', 'desc' => 'Report path coverage in addition to line coverage'], ['arg' => '--disable-coverage-ignore', 'desc' => 'Disable metadata for ignoring code coverage'], ['arg' => '--no-coverage', 'desc' => 'Ignore code coverage reporting configured in the XML configuration file']], 'Miscellaneous' => [['arg' => '-h|--help', 'desc' => 'Prints this usage information'], ['arg' => '--version', 'desc' => 'Prints the version and exits'], ['arg' => '--atleast-version ', 'desc' => 'Checks that version is greater than and exits'], ['arg' => '--check-version', 'desc' => 'Check whether PHPUnit is the latest version and exits']]]; private int $lengthOfLongestOptionName = 0; private readonly int $columnsAvailableForDescription; private ?bool $hasColor; @@ -86265,6 +88172,9 @@ final class ProgressPrinter } public function testTriggeredNotice(NoticeTriggered $event) : void { + if ($event->ignoredByBaseline()) { + return; + } if ($this->source->restrictNotices() && !(new SourceFilter())->includes($this->source, $event->file())) { return; } @@ -86275,6 +88185,9 @@ final class ProgressPrinter } public function testTriggeredPhpNotice(PhpNoticeTriggered $event) : void { + if ($event->ignoredByBaseline()) { + return; + } if ($this->source->restrictNotices() && !(new SourceFilter())->includes($this->source, $event->file())) { return; } @@ -86285,6 +88198,9 @@ final class ProgressPrinter } public function testTriggeredDeprecation(DeprecationTriggered $event) : void { + if ($event->ignoredByBaseline()) { + return; + } if ($this->source->restrictDeprecations() && !(new SourceFilter())->includes($this->source, $event->file())) { return; } @@ -86295,6 +88211,9 @@ final class ProgressPrinter } public function testTriggeredPhpDeprecation(PhpDeprecationTriggered $event) : void { + if ($event->ignoredByBaseline()) { + return; + } if ($this->source->restrictDeprecations() && !(new SourceFilter())->includes($this->source, $event->file())) { return; } @@ -86313,6 +88232,9 @@ final class ProgressPrinter } public function testTriggeredWarning(WarningTriggered $event) : void { + if ($event->ignoredByBaseline()) { + return; + } if ($this->source->restrictWarnings() && !(new SourceFilter())->includes($this->source, $event->file())) { return; } @@ -86323,6 +88245,9 @@ final class ProgressPrinter } public function testTriggeredPhpWarning(PhpWarningTriggered $event) : void { + if ($event->ignoredByBaseline()) { + return; + } if ($this->source->restrictWarnings() && !(new SourceFilter())->includes($this->source, $event->file())) { return; } @@ -87748,6 +89673,7 @@ final class SummaryPrinter } if ($result->wasSuccessfulAndNoTestHasIssues() && !$result->hasTestSuiteSkippedEvents() && !$result->hasTestSkippedEvents()) { $this->printWithColor('fg-black, bg-green', sprintf('OK (%d test%s, %d assertion%s)', $result->numberOfTestsRun(), $result->numberOfTestsRun() === 1 ? '' : 's', $result->numberOfAssertions(), $result->numberOfAssertions() === 1 ? '' : 's')); + $this->printNumberOfIssuesIgnoredByBaseline($result); return; } $color = 'fg-black, bg-yellow'; @@ -87783,6 +89709,7 @@ final class SummaryPrinter $this->printCountString($result->numberOfTestMarkedIncompleteEvents(), 'Incomplete', $color); $this->printCountString($result->numberOfTestsWithTestConsideredRiskyEvents(), 'Risky', $color); $this->printWithColor($color, '.'); + $this->printNumberOfIssuesIgnoredByBaseline($result); } private function printCountString(int $count, string $name, string $color, bool $always = \false) : void { @@ -87801,6 +89728,12 @@ final class SummaryPrinter $this->printer->print(\PHP_EOL); } } + private function printNumberOfIssuesIgnoredByBaseline(TestResult $result) : void + { + if ($result->hasIssuesIgnoredByBaseline()) { + $this->printer->print(sprintf('%s%d issue%s %s ignored by baseline.%s', \PHP_EOL, $result->numberOfIssuesIgnoredByBaseline(), $result->numberOfIssuesIgnoredByBaseline() > 1 ? 's' : '', $result->numberOfIssuesIgnoredByBaseline() > 1 ? 'were' : 'was', \PHP_EOL)); + } + } } export($value); + } + return '{enable export of objects to see this value}'; + } + private static function isScalarOrArrayOfScalars(mixed $value) : bool + { + if (is_scalar($value)) { + return \true; + } + if (!is_array($value)) { + return \false; + } + foreach ($value as $_value) { + if (!self::isScalarOrArrayOfScalars($_value)) { + return \false; + } + } + return \true; + } +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\Util; + use function is_dir; use function mkdir; /** @@ -89069,7 +91044,6 @@ declare (strict_types=1); */ namespace PHPUnit\Util\PHP; -use const DIRECTORY_SEPARATOR; use const PHP_SAPI; use function array_keys; use function array_merge; @@ -89080,9 +91054,6 @@ use function file_get_contents; use function ini_get_all; use function restore_error_handler; use function set_error_handler; -use function str_replace; -use function str_starts_with; -use function substr; use function trim; use function unlink; use function unserialize; @@ -89104,7 +91075,6 @@ use PHPUnit\SebastianBergmann\Environment\Runtime; */ abstract class AbstractPhpProcess { - protected Runtime $runtime; protected bool $stderrRedirection = \false; protected string $stdin = ''; protected string $arguments = ''; @@ -89112,18 +91082,13 @@ abstract class AbstractPhpProcess * @psalm-var array */ protected array $env = []; - protected int $timeout = 0; public static function factory() : self { - if (DIRECTORY_SEPARATOR === '\\') { + if (\PHP_OS_FAMILY === 'Windows') { return new \PHPUnit\Util\PHP\WindowsPhpProcess(); } return new \PHPUnit\Util\PHP\DefaultPhpProcess(); } - public function __construct() - { - $this->runtime = new Runtime(); - } /** * Defines if should use STDERR redirection or not. * @@ -89184,20 +91149,6 @@ abstract class AbstractPhpProcess { return $this->env; } - /** - * Sets the amount of seconds to wait before timing out. - */ - public function setTimeout(int $timeout) : void - { - $this->timeout = $timeout; - } - /** - * Returns the amount of seconds to wait before timing out. - */ - public function getTimeout() : int - { - return $this->timeout; - } /** * Runs a single test in a separate PHP process. * @@ -89221,11 +91172,12 @@ abstract class AbstractPhpProcess */ public function getCommand(array $settings, string $file = null) : string { - $command = $this->runtime->getBinary(); - if ($this->runtime->hasPCOV()) { - $settings = array_merge($settings, $this->runtime->getCurrentSettings(array_keys(ini_get_all('pcov')))); - } elseif ($this->runtime->hasXdebug()) { - $settings = array_merge($settings, $this->runtime->getCurrentSettings(array_keys(ini_get_all('xdebug')))); + $runtime = new Runtime(); + $command = $runtime->getBinary(); + if ($runtime->hasPCOV()) { + $settings = array_merge($settings, $runtime->getCurrentSettings(array_keys(ini_get_all('pcov')))); + } elseif ($runtime->hasXdebug()) { + $settings = array_merge($settings, $runtime->getCurrentSettings(array_keys(ini_get_all('xdebug')))); } $command .= $this->settingsToParameters($settings); if (PHP_SAPI === 'phpdbg') { @@ -89283,10 +91235,7 @@ abstract class AbstractPhpProcess } ); try { - if (str_starts_with($stdout, "#!/usr/bin/env php\n")) { - $stdout = substr($stdout, 19); - } - $childResult = unserialize(str_replace("#!/usr/bin/env php\n", '', $stdout)); + $childResult = unserialize($stdout); restore_error_handler(); if ($childResult === \false) { $exception = new AssertionFailedError('Test was run in child process and ended unexpectedly'); @@ -89335,17 +91284,13 @@ namespace PHPUnit\Util\PHP; use function array_merge; use function fclose; use function file_put_contents; -use function fread; use function fwrite; use function is_array; use function is_resource; use function proc_close; use function proc_open; -use function proc_terminate; use function rewind; -use function sprintf; use function stream_get_contents; -use function stream_select; use function sys_get_temp_dir; use function tempnam; use function unlink; @@ -89413,56 +91358,13 @@ class DefaultPhpProcess extends \PHPUnit\Util\PHP\AbstractPhpProcess } fclose($pipes[0]); $stderr = $stdout = ''; - if ($this->timeout) { - unset($pipes[0]); - while (\true) { - $r = $pipes; - $w = null; - $e = null; - $n = @stream_select($r, $w, $e, $this->timeout); - if ($n === \false) { - break; - } - if ($n === 0) { - proc_terminate($process, 9); - throw new \PHPUnit\Util\PHP\PhpProcessException(sprintf('Job execution aborted after %d seconds', $this->timeout)); - } - if ($n > 0) { - foreach ($r as $pipe) { - $pipeOffset = 0; - foreach ($pipes as $i => $origPipe) { - if ($pipe === $origPipe) { - $pipeOffset = $i; - break; - } - } - if (!$pipeOffset) { - break; - } - $line = fread($pipe, 8192); - if ($line === '' || $line === \false) { - fclose($pipes[$pipeOffset]); - unset($pipes[$pipeOffset]); - } elseif ($pipeOffset === 1) { - $stdout .= $line; - } else { - $stderr .= $line; - } - } - if (empty($pipes)) { - break; - } - } - } - } else { - if (isset($pipes[1])) { - $stdout = stream_get_contents($pipes[1]); - fclose($pipes[1]); - } - if (isset($pipes[2])) { - $stderr = stream_get_contents($pipes[2]); - fclose($pipes[2]); - } + if (isset($pipes[1])) { + $stdout = stream_get_contents($pipes[1]); + fclose($pipes[1]); + } + if (isset($pipes[2])) { + $stderr = stream_get_contents($pipes[2]); + fclose($pipes[2]); } if (isset($handles[1])) { rewind($handles[1]); @@ -89535,7 +91437,8 @@ function __phpunit_run_isolated_test() PHPUnit\Event\Telemetry\HRTime::fromSecondsAndNanoseconds( {offsetSeconds}, {offsetNanoseconds} - ) + ), + {exportObjects}, ); require_once '{filename}'; @@ -89546,6 +91449,7 @@ function __phpunit_run_isolated_test() } $test = new {className}('{name}'); + $test->setData('{dataName}', unserialize('{data}')); $test->setDependencyInput(unserialize('{dependencyInput}')); $test->setInIsolation(true); @@ -89650,7 +91554,8 @@ function __phpunit_run_isolated_test() PHPUnit\Event\Telemetry\HRTime::fromSecondsAndNanoseconds( {offsetSeconds}, {offsetNanoseconds} - ) + ), + {exportObjects}, ); require_once '{filename}'; @@ -90096,7 +92001,7 @@ final class Loader // Required for XInclude if ($filename !== null) { // Required for XInclude on Windows - if (\DIRECTORY_SEPARATOR === '\\') { + if (\PHP_OS_FAMILY === 'Windows') { $cwd = getcwd(); @chdir(dirname($filename)); } @@ -90199,14 +92104,14 @@ final class Xml phpunit phpunit - 10.3.5 + 10.4.0 The PHP Unit Testing framework. BSD-3-Clause - pkg:composer/phpunit/phpunit@10.3.5 + pkg:composer/phpunit/phpunit@10.4.0 myclabs @@ -90259,14 +92164,14 @@ final class Xml phpunit php-code-coverage - 10.1.6 + 10.1.7 Library that provides collection, processing, and rendering functionality for PHP code coverage information. BSD-3-Clause - pkg:composer/phpunit/php-code-coverage@10.1.6 + pkg:composer/phpunit/php-code-coverage@10.1.7 phpunit @@ -90367,14 +92272,14 @@ final class Xml sebastian complexity - 3.0.1 + 3.1.0 Library for calculating the complexity of PHP code units BSD-3-Clause - pkg:composer/sebastian/complexity@3.0.1 + pkg:composer/sebastian/complexity@3.1.0 sebastian @@ -90403,14 +92308,14 @@ final class Xml sebastian exporter - 5.1.0 + 5.1.1 Provides the functionality to export PHP variables for visualization BSD-3-Clause - pkg:composer/sebastian/exporter@5.1.0 + pkg:composer/sebastian/exporter@5.1.1 sebastian @@ -93994,6 +95899,7 @@ declare (strict_types=1); */ namespace PHPUnit\SebastianBergmann\Complexity; +use function str_contains; /** * @psalm-immutable */ @@ -94030,6 +95936,14 @@ final class Complexity { return $this->cyclomaticComplexity; } + public function isFunction() : bool + { + return !$this->isMethod(); + } + public function isMethod() : bool + { + return str_contains($this->name, '::'); + } } items, static fn(Complexity $complexity): bool => $complexity->isFunction()))); + } + public function isMethod() : self + { + return new self(array_values(array_filter($this->items, static fn(Complexity $complexity): bool => $complexity->isMethod()))); + } + public function mergeWith(self $other) : self + { + return new self(array_merge($this->asArray(), $other->asArray())); + } } getAttribute('parent'); assert($parent instanceof Class_ || $parent instanceof Trait_); + if ($parent->getAttribute('parent') instanceof New_) { + return 'anonymous class'; + } assert(isset($parent->namespacedName)); assert($parent->namespacedName instanceof Name); return $parent->namespacedName->toString() . '::' . $node->name->toString(); @@ -96148,9 +98081,9 @@ final class Exporter continue; } // properties are transformed to keys in the following way: - // private $property => "\0Classname\0property" - // protected $property => "\0*\0property" - // public $property => "property" + // private $propertyName => "\0ClassName\0propertyName" + // protected $propertyName => "\0*\0propertyName" + // public $propertyName => "propertyName" if (preg_match('/^\\0.+\\0(.+)$/', (string) $key, $matches)) { $key = $matches[1]; } @@ -96160,7 +98093,7 @@ final class Exporter } $array[$key] = $val; } - // Some internal classes like SplObjectStorage don't work with the + // Some internal classes like SplObjectStorage do not work with the // above (fast) mechanism nor with reflection in Zend. // Format the output similarly to print_r() in this case if ($value instanceof SplObjectStorage) { @@ -96227,27 +98160,27 @@ final class Exporter $values = ''; if (count($array) > 0) { foreach ($array as $k => $v) { - $values .= sprintf('%s %s => %s,' . "\n", $whitespace, $this->recursiveExport($k, $indentation), $this->recursiveExport($value[$k], $indentation + 1, $processed)); + $values .= $whitespace . ' ' . $this->recursiveExport($k, $indentation) . ' => ' . $this->recursiveExport($value[$k], $indentation + 1, $processed) . ",\n"; } $values = "\n" . $values . $whitespace; } - return sprintf('Array &%s [%s]', $key, $values); + return 'Array &' . (string) $key . ' [' . $values . ']'; } if (is_object($value)) { $class = $value::class; if ($processed->contains($value)) { - return sprintf('%s Object #%d', $class, spl_object_id($value)); + return $class . ' Object #' . spl_object_id($value); } $processed->add($value); $values = ''; $array = $this->toArray($value); if (count($array) > 0) { foreach ($array as $k => $v) { - $values .= sprintf('%s %s => %s' . ",\n", $whitespace, $this->recursiveExport($k, $indentation), $this->recursiveExport($v, $indentation + 1, $processed)); + $values .= $whitespace . ' ' . $this->recursiveExport($k, $indentation) . ' => ' . $this->recursiveExport($v, $indentation + 1, $processed) . ",\n"; } $values = "\n" . $values . $whitespace; } - return sprintf('%s Object #%d (%s)', $class, spl_object_id($value), $values); + return $class . ' Object #' . spl_object_id($value) . ' (' . $values . ')'; } return var_export($value, \true); } @@ -99309,4 +101242,4 @@ namespace PHPSTORM_META { map([""=>"$0"]) ); } -n-.{pU>SɐMPstvTw1Z41,%I\deGBMB \ No newline at end of file +α2Ŧ%Ry*7iqM wB7v8~DgǢr9*G̻GBMB \ No newline at end of file