From f2233bd67445b9438712506e06f641282b543d51 Mon Sep 17 00:00:00 2001 From: Filippo Tessarotto Date: Sun, 12 Jul 2020 12:58:31 +0200 Subject: [PATCH 01/34] Require the latest PHPUnit minor version only --- .travis.yml | 22 +--------------------- composer.json | 8 ++++---- 2 files changed, 5 insertions(+), 25 deletions(-) diff --git a/.travis.yml b/.travis.yml index 407b464..9420cce 100644 --- a/.travis.yml +++ b/.travis.yml @@ -14,29 +14,9 @@ matrix: env: - CS_CHECK=true - name: "Build Phar" - php: 7.1 + php: 7.3 env: - BUILD_PHAR=true - - name: "Tests PHP 7.1 Lowest Dependencies" - php: 7.1 - env: - - DEPS=lowest - - name: "Tests PHP 7.1 PHPUnit Dev Version" - php: 7.1 - env: - - PHPUNIT_DEV=true - - name: "Tests PHP 7.1" - php: 7.1 - - name: "Tests PHP 7.2 Lowest Dependencies" - php: 7.2 - env: - - DEPS=lowest - - name: "Tests PHP 7.2 PHPUnit Dev Version" - php: 7.2 - env: - - PHPUNIT_DEV=true - - name: "Tests PHP 7.2" - php: 7.2 - php: 7.3 name: "Tests PHP 7.3 Lowest Dependencies" env: diff --git a/composer.json b/composer.json index b04a0e7..2d3ba2b 100644 --- a/composer.json +++ b/composer.json @@ -1,16 +1,16 @@ { "name": "brianium/paratest", "require": { - "php": "^7.1", + "php": "^7.3", "ext-pcre": "*", "ext-reflection": "*", "ext-simplexml": "*", "brianium/habitat": "1.0.0", - "phpunit/php-timer": "^2.0|^3.0|^4.0|^5.0", - "phpunit/phpunit": "^7.5.8|^8.0|^9.0", + "phpunit/php-timer": "^5.0", + "phpunit/phpunit": "^9.2", "symfony/console": "^3.4||^4.0||^5.0", "symfony/process": "^3.4||^4.0||^5.0", - "phpunit/php-code-coverage": "^6.1.4|^7.0.2|^8.0" + "phpunit/php-code-coverage": "^8.0" }, "require-dev": { "friendsofphp/php-cs-fixer": "^2.16", From 408254ded643518267fc1ab861ad95f54696577a Mon Sep 17 00:00:00 2001 From: Filippo Tessarotto Date: Sun, 12 Jul 2020 13:02:09 +0200 Subject: [PATCH 02/34] Forward deprecated methods --- test/Functional/Coverage/CoverageMergerTest.php | 2 +- test/Functional/Coverage/CoverageReporterTest.php | 8 ++++---- test/Functional/DataProviderTest.php | 12 ++++++------ test/Functional/FunctionalTestBase.php | 2 +- test/Functional/GroupTest.php | 12 ++++++------ test/Functional/OutputTest.php | 6 +++--- test/Functional/PHPUnitTest.php | 12 ++++++------ test/Unit/Console/VersionProviderTest.php | 4 ++-- test/Unit/Logging/JUnit/ReaderTest.php | 2 +- test/Unit/Runners/PHPUnit/ExecutableTestTest.php | 2 +- test/Unit/Runners/PHPUnit/ResultPrinterTest.php | 2 +- 11 files changed, 32 insertions(+), 32 deletions(-) diff --git a/test/Functional/Coverage/CoverageMergerTest.php b/test/Functional/Coverage/CoverageMergerTest.php index 5eefd94..b117114 100644 --- a/test/Functional/Coverage/CoverageMergerTest.php +++ b/test/Functional/Coverage/CoverageMergerTest.php @@ -53,7 +53,7 @@ public function testCoverageFromFileIsDeletedAfterAdd(array $coverageFiles) $coverageMerger = new CoverageMerger(); $coverageMerger->addCoverageFromFile($filename); - static::assertFileNotExists($filename); + static::assertFileDoesNotExist($filename); } /** diff --git a/test/Functional/Coverage/CoverageReporterTest.php b/test/Functional/Coverage/CoverageReporterTest.php index aab2786..ad93951 100644 --- a/test/Functional/Coverage/CoverageReporterTest.php +++ b/test/Functional/Coverage/CoverageReporterTest.php @@ -77,7 +77,7 @@ public function testGeneratePhp(array $coverageFiles) $target = $this->targetDir . '/coverage.php'; - static::assertFileNotExists($target); + static::assertFileDoesNotExist($target); $coverageMerger->getReporter()->php($target); @@ -100,7 +100,7 @@ public function testGenerateClover(array $coverageFiles) $target = $this->targetDir . '/coverage.xml'; - static::assertFileNotExists($target); + static::assertFileDoesNotExist($target); $coverageMerger->getReporter()->clover($target); @@ -126,7 +126,7 @@ public function testGenerateCrap4J(array $coverageFiles) $target = $this->targetDir . '/coverage.xml'; - static::assertFileNotExists($target); + static::assertFileDoesNotExist($target); $coverageMerger->getReporter()->crap4j($target); @@ -153,7 +153,7 @@ public function testGenerateHtml(array $coverageFiles) $target = $this->targetDir . '/coverage'; - static::assertFileNotExists($target); + static::assertFileDoesNotExist($target); $coverageMerger->getReporter()->html($target); diff --git a/test/Functional/DataProviderTest.php b/test/Functional/DataProviderTest.php index b58be78..2bb552f 100644 --- a/test/Functional/DataProviderTest.php +++ b/test/Functional/DataProviderTest.php @@ -24,7 +24,7 @@ public function testFunctionalMode() 'functional' => null, 'max-batch-size' => 50, ]); - $this->assertRegExp('/OK \(1150 tests, 1150 assertions\)/', $proc->getOutput()); + $this->assertMatchesRegularExpression('/OK \(1150 tests, 1150 assertions\)/', $proc->getOutput()); } public function testNumericDataSetInFunctionalModeWithMethodFilter() @@ -34,7 +34,7 @@ public function testNumericDataSetInFunctionalModeWithMethodFilter() 'max-batch-size' => 50, 'filter' => 'testNumericDataProvider50', ]); - $this->assertRegExp('/OK \(50 tests, 50 assertions\)/', $proc->getOutput()); + $this->assertMatchesRegularExpression('/OK \(50 tests, 50 assertions\)/', $proc->getOutput()); } public function testNumericDataSetInFunctionalModeWithCustomFilter() @@ -44,7 +44,7 @@ public function testNumericDataSetInFunctionalModeWithCustomFilter() 'max-batch-size' => 50, 'filter' => 'testNumericDataProvider50.*1', ]); - $this->assertRegExp('/OK \(14 tests, 14 assertions\)/', $proc->getOutput()); + $this->assertMatchesRegularExpression('/OK \(14 tests, 14 assertions\)/', $proc->getOutput()); } public function testNamedDataSetInFunctionalModeWithMethodFilter() @@ -54,7 +54,7 @@ public function testNamedDataSetInFunctionalModeWithMethodFilter() 'max-batch-size' => 50, 'filter' => 'testNamedDataProvider50', ]); - $this->assertRegExp('/OK \(50 tests, 50 assertions\)/', $proc->getOutput()); + $this->assertMatchesRegularExpression('/OK \(50 tests, 50 assertions\)/', $proc->getOutput()); } public function testNamedDataSetInFunctionalModeWithCustomFilter() @@ -64,7 +64,7 @@ public function testNamedDataSetInFunctionalModeWithCustomFilter() 'max-batch-size' => 50, 'filter' => 'testNamedDataProvider50.*name_of_test_.*1', ]); - $this->assertRegExp('/OK \(14 tests, 14 assertions\)/', $proc->getOutput()); + $this->assertMatchesRegularExpression('/OK \(14 tests, 14 assertions\)/', $proc->getOutput()); } public function testNumericDataSet1000InFunctionalModeWithFilterAndMaxBatchSize() @@ -74,6 +74,6 @@ public function testNumericDataSet1000InFunctionalModeWithFilterAndMaxBatchSize( 'max-batch-size' => 50, 'filter' => 'testNumericDataProvider1000', ]); - $this->assertRegExp('/OK \(1000 tests, 1000 assertions\)/', $proc->getOutput()); + $this->assertMatchesRegularExpression('/OK \(1000 tests, 1000 assertions\)/', $proc->getOutput()); } } diff --git a/test/Functional/FunctionalTestBase.php b/test/Functional/FunctionalTestBase.php index efd268d..188c715 100644 --- a/test/Functional/FunctionalTestBase.php +++ b/test/Functional/FunctionalTestBase.php @@ -29,7 +29,7 @@ protected function invokeParatest($path, $options = [], $callback = null) protected function assertTestsPassed(Process $proc, $testPattern = '\d+', $assertionPattern = '\d+') { - $this->assertRegExp( + $this->assertMatchesRegularExpression( "/OK \($testPattern tests?, $assertionPattern assertions?\)/", $proc->getOutput() ); diff --git a/test/Functional/GroupTest.php b/test/Functional/GroupTest.php index 2c4e733..4fb4540 100644 --- a/test/Functional/GroupTest.php +++ b/test/Functional/GroupTest.php @@ -21,37 +21,37 @@ public function setUp(): void public function testGroupSwitchOnlyExecutesThoseGroups() { $proc = $this->invoker->execute(['group' => 'group1']); - $this->assertRegExp('/OK \(2 tests, 2 assertions\)/', $proc->getOutput()); + $this->assertMatchesRegularExpression('/OK \(2 tests, 2 assertions\)/', $proc->getOutput()); } public function testExcludeGroupSwitchDontExecuteThatGroup() { $proc = $this->invoker->execute(['exclude-group' => 'group1']); - $this->assertRegExp('/OK \(3 tests, 3 assertions\)/', $proc->getOutput()); + $this->assertMatchesRegularExpression('/OK \(3 tests, 3 assertions\)/', $proc->getOutput()); } public function testGroupSwitchExecutesGroupsUsingShortOption() { $proc = $this->invoker->execute(['g' => 'group1']); - $this->assertRegExp('/OK \(2 tests, 2 assertions\)/', $proc->getOutput()); + $this->assertMatchesRegularExpression('/OK \(2 tests, 2 assertions\)/', $proc->getOutput()); } public function testGroupSwitchOnlyExecutesThoseGroupsInFunctionalMode() { $proc = $this->invoker->execute(['functional', 'g' => 'group1']); - $this->assertRegExp('/OK \(2 tests, 2 assertions\)/', $proc->getOutput()); + $this->assertMatchesRegularExpression('/OK \(2 tests, 2 assertions\)/', $proc->getOutput()); } public function testGroupSwitchOnlyExecutesThoseGroupsWhereTestHasMultipleGroups() { $proc = $this->invoker->execute(['functional', 'group' => 'group3']); - $this->assertRegExp('/OK \(1 test, 1 assertion\)/', $proc->getOutput()); + $this->assertMatchesRegularExpression('/OK \(1 test, 1 assertion\)/', $proc->getOutput()); } public function testGroupsSwitchExecutesMultipleGroups() { $proc = $this->invoker->execute(['functional', 'group' => 'group1,group3']); - $this->assertRegExp('/OK \(3 tests, 3 assertions\)/', $proc->getOutput()); + $this->assertMatchesRegularExpression('/OK \(3 tests, 3 assertions\)/', $proc->getOutput()); } } diff --git a/test/Functional/OutputTest.php b/test/Functional/OutputTest.php index 88c9c6c..b396ef0 100644 --- a/test/Functional/OutputTest.php +++ b/test/Functional/OutputTest.php @@ -25,7 +25,7 @@ public function testDefaultMessagesDisplayed() $output = $this->paratest->execute(['p' => 5])->getOutput(); $this->assertStringContainsString('Running phpunit in 5 processes with ' . PHPUNIT, $output); $this->assertStringContainsString('Configuration read from ' . getcwd() . DS . 'phpunit.xml.dist', $output); - $this->assertRegExp('/[.F]{4}/', $output); + $this->assertMatchesRegularExpression('/[.F]{4}/', $output); } public function testMessagePrintedWhenInvalidConfigFileSupplied() @@ -43,7 +43,7 @@ public function testMessagePrintedWhenFunctionalModeIsOn() ->getOutput(); $this->assertStringContainsString('Running phpunit in 5 processes with ' . PHPUNIT, $output); $this->assertStringContainsString('Functional mode is ON.', $output); - $this->assertRegExp('/[.F]{4}/', $output); + $this->assertMatchesRegularExpression('/[.F]{4}/', $output); } public function testProcCountIsReportedWithProcOption() @@ -51,6 +51,6 @@ public function testProcCountIsReportedWithProcOption() $output = $this->paratest->execute(['p' => 1]) ->getOutput(); $this->assertStringContainsString('Running phpunit in 1 process with ' . PHPUNIT, $output); - $this->assertRegExp('/[.F]{4}/', $output); + $this->assertMatchesRegularExpression('/[.F]{4}/', $output); } } diff --git a/test/Functional/PHPUnitTest.php b/test/Functional/PHPUnitTest.php index b8c7ecb..b578f0f 100644 --- a/test/Functional/PHPUnitTest.php +++ b/test/Functional/PHPUnitTest.php @@ -25,7 +25,7 @@ public function testWithBootstrapThatDoesNotExist() $this->assertEquals(1, $proc->getExitCode(), 'Unexpected exit code'); // The [RuntimeException] message appears only on lower 6.x versions of Phpunit - $this->assertRegExp( + $this->assertMatchesRegularExpression( '/(\[RuntimeException\]|Bootstrap specified but could not be found)/', $errors, 'Expected exception name not found in output' @@ -118,7 +118,7 @@ public function testParatestEnvironmentVariableWithWrapperRunnerWithoutTestToken 'paratest-only-tests/EnvironmentTest.php', ['bootstrap' => BOOTSTRAP, 'runner' => 'WrapperRunner', 'no-test-tokens' => 0] ); - $this->assertRegexp('/Failures: 1/', $proc->getOutput()); + $this->assertMatchesRegularExpression('/Failures: 1/', $proc->getOutput()); } public function testParatestEnvironmentVariableWithSqliteRunner() @@ -142,7 +142,7 @@ public function testWithConfigurationThatDoesNotExist() 'passing-tests', ['configuration' => FIXTURES . DS . 'phpunit.xml.disto'] ); // dist"o" does not exist - $this->assertRegExp('/Could not read ".*phpunit.xml.disto"./', $proc->getOutput()); + $this->assertMatchesRegularExpression('/Could not read ".*phpunit.xml.disto"./', $proc->getOutput()); } public function testFunctionalWithBootstrap() @@ -167,7 +167,7 @@ public function testWithBootstrapAndProcessesSwitch() 'passing-tests', ['bootstrap' => BOOTSTRAP, 'processes' => 6] ); - $this->assertRegExp('/Running phpunit in 6 processes/', $proc->getOutput()); + $this->assertMatchesRegularExpression('/Running phpunit in 6 processes/', $proc->getOutput()); $this->assertTestsPassed($proc); } @@ -295,8 +295,8 @@ public function testFullyConfiguredRun() ]); $this->assertTestsPassed($proc); $results = $proc->getOutput(); - $this->assertRegExp('/Running phpunit in 6 processes/', $results); - $this->assertRegExp('/Functional mode is on/i', $results); + $this->assertMatchesRegularExpression('/Running phpunit in 6 processes/', $results); + $this->assertMatchesRegularExpression('/Functional mode is on/i', $results); $this->assertFileExists($output); if (file_exists($output)) { unlink($output); diff --git a/test/Unit/Console/VersionProviderTest.php b/test/Unit/Console/VersionProviderTest.php index bd513ff..4d65772 100644 --- a/test/Unit/Console/VersionProviderTest.php +++ b/test/Unit/Console/VersionProviderTest.php @@ -33,7 +33,7 @@ public function testComposerInstalledVersion() $this->assertIsString($actual, 'Version of phpunit package was found installed'); // dev-master is included here as the phpunit package is checked and there is a dev-master used on travis - $this->assertRegExp("~^dev-master|\d.\d.(.)+$~", $actual, 'Actual version number'); + $this->assertMatchesRegularExpression("~^dev-master|\d.\d.(.)+$~", $actual, 'Actual version number'); $actual = $provider->getComposerInstalledVersion('foooo/barazzoraz'); $this->assertNull($actual, 'No version for non-existent package'); @@ -44,6 +44,6 @@ public function testGitVersion() $provider = new VersionProvider(); $actual = $provider->getGitVersion(); $this->assertIsString($actual, 'Git is enabled and works'); - $this->assertRegExp("~^\d.\d(?:.\d+)?(?:-\d+-g[\da-f]+)?$~", $actual, 'Git gives a version'); + $this->assertMatchesRegularExpression("~^\d.\d(?:.\d+)?(?:-\d+-g[\da-f]+)?$~", $actual, 'Git gives a version'); } } diff --git a/test/Unit/Logging/JUnit/ReaderTest.php b/test/Unit/Logging/JUnit/ReaderTest.php index e0ed6e9..9c14c81 100644 --- a/test/Unit/Logging/JUnit/ReaderTest.php +++ b/test/Unit/Logging/JUnit/ReaderTest.php @@ -300,7 +300,7 @@ public function testRemoveLog() file_put_contents($tmp, $contents); $reader = new Reader($tmp); $reader->removeLog(); - $this->assertFileNotExists($tmp); + $this->assertFileDoesNotExist($tmp); } /** diff --git a/test/Unit/Runners/PHPUnit/ExecutableTestTest.php b/test/Unit/Runners/PHPUnit/ExecutableTestTest.php index c9aa457..351054c 100644 --- a/test/Unit/Runners/PHPUnit/ExecutableTestTest.php +++ b/test/Unit/Runners/PHPUnit/ExecutableTestTest.php @@ -74,7 +74,7 @@ public function testCommandRedirectsCoverage() $command = $this->executableTestChild->command($binary, $options); $coverageFileName = str_replace('/', '\/', $this->executableTestChild->getCoverageFileName()); - $this->assertRegExp("/^'\/usr\/bin\/phpunit' '--a' 'b' '--coverage-php' '$coverageFileName' '.*'/", $command); + $this->assertMatchesRegularExpression("/^'\/usr\/bin\/phpunit' '--a' 'b' '--coverage-php' '$coverageFileName' '.*'/", $command); } public function testHandleEnvironmentVariablesAssignsToken() diff --git a/test/Unit/Runners/PHPUnit/ResultPrinterTest.php b/test/Unit/Runners/PHPUnit/ResultPrinterTest.php index 7151a46..0dae941 100644 --- a/test/Unit/Runners/PHPUnit/ResultPrinterTest.php +++ b/test/Unit/Runners/PHPUnit/ResultPrinterTest.php @@ -165,7 +165,7 @@ public function testGetHeader() $header = $this->printer->getHeader(); - $this->assertRegExp( + $this->assertMatchesRegularExpression( "/\n\nTime: ([.:]?[0-9]{1,3})+ ?" . '(minute|minutes|second|seconds|ms|)?,' . " Memory:[\s][0-9]+([.][0-9]{1,2})? ?M[Bb]\n\n/", From 2a738593fc300ccace6b09a9c406606b655f76d4 Mon Sep 17 00:00:00 2001 From: Filippo Tessarotto Date: Sun, 12 Jul 2020 13:03:17 +0200 Subject: [PATCH 03/34] Remove legacy unused code --- src/Runners/PHPUnit/ResultPrinter.php | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/src/Runners/PHPUnit/ResultPrinter.php b/src/Runners/PHPUnit/ResultPrinter.php index 61d87fe..a9605eb 100644 --- a/src/Runners/PHPUnit/ResultPrinter.php +++ b/src/Runners/PHPUnit/ResultPrinter.php @@ -7,7 +7,6 @@ use ParaTest\Logging\JUnit\Reader; use ParaTest\Logging\LogInterpreter; use SebastianBergmann\Timer\ResourceUsageFormatter; -use SebastianBergmann\Timer\Timer; /** * Class ResultPrinter. @@ -209,11 +208,7 @@ public function printFeedback(ExecutableTest $test) */ public function getHeader(): string { - if (class_exists(ResourceUsageFormatter::class)) { - $resourceUsage = (new ResourceUsageFormatter())->resourceUsageSinceStartOfRequest(); - } else { - $resourceUsage = Timer::resourceUsage(); - } + $resourceUsage = (new ResourceUsageFormatter())->resourceUsageSinceStartOfRequest(); return "\n\n" . $resourceUsage . "\n\n"; } From 0b587a31f80e0b0676d226bbf386af0a15c8e5e2 Mon Sep 17 00:00:00 2001 From: Filippo Tessarotto Date: Sun, 12 Jul 2020 13:07:05 +0200 Subject: [PATCH 04/34] CS Fix --- test/Unit/Runners/PHPUnit/ExecutableTestTest.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/test/Unit/Runners/PHPUnit/ExecutableTestTest.php b/test/Unit/Runners/PHPUnit/ExecutableTestTest.php index 351054c..e0364ba 100644 --- a/test/Unit/Runners/PHPUnit/ExecutableTestTest.php +++ b/test/Unit/Runners/PHPUnit/ExecutableTestTest.php @@ -74,7 +74,10 @@ public function testCommandRedirectsCoverage() $command = $this->executableTestChild->command($binary, $options); $coverageFileName = str_replace('/', '\/', $this->executableTestChild->getCoverageFileName()); - $this->assertMatchesRegularExpression("/^'\/usr\/bin\/phpunit' '--a' 'b' '--coverage-php' '$coverageFileName' '.*'/", $command); + $this->assertMatchesRegularExpression( + "/^'\/usr\/bin\/phpunit' '--a' 'b' '--coverage-php' '$coverageFileName' '.*'/", + $command + ); } public function testHandleEnvironmentVariablesAssignsToken() From c747d18f3e0b217b24d778050f50d72cd867e5f4 Mon Sep 17 00:00:00 2001 From: Filippo Tessarotto Date: Wed, 15 Jul 2020 08:20:38 +0200 Subject: [PATCH 05/34] Remove PHP-CS-Fixer, use config file for PHPCodeSniffer --- .gitattributes | 1 + .travis.yml | 2 +- README.md | 2 +- composer.json | 5 ++--- phpcs.xml.dist | 18 ++++++++++++++++++ 5 files changed, 23 insertions(+), 5 deletions(-) create mode 100644 phpcs.xml.dist diff --git a/.gitattributes b/.gitattributes index c56b6ed..52a9ec6 100644 --- a/.gitattributes +++ b/.gitattributes @@ -2,5 +2,6 @@ /.gitignore export-ignore /.travis.yml export-ignore /box.json.dist export-ignore +/phpcs.xml.dist export-ignore /phpunit.xml.dist export-ignore /test/ export-ignore diff --git a/.travis.yml b/.travis.yml index 9420cce..3e28b8f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -55,7 +55,7 @@ install: - composer install script: - - if [[ $CS_CHECK == 'true' ]]; then vendor/bin/phpcs --ignore=*/test/fixtures/*,bootstrap.php --standard=PSR12 ./src/ ./test/; fi; + - if [[ $CS_CHECK == 'true' ]]; then composer style; fi; - if [[ $CS_CHECK != 'true' ]]; then vendor/bin/phpunit $COVERAGE_ARGS; fi; before_deploy: diff --git a/README.md b/README.md index b86d114..1d1d9d2 100644 --- a/README.md +++ b/README.md @@ -253,7 +253,7 @@ ParaTest can run its own test suite by running it from the `bin` directory: `composer test` OR `bin/paratest` Before creating a Pull Request be sure to run the style checks and commit the eventual changes: -`composer style-fix` OR `vendor/bin/php-cs-fixer fix` +`composer style-fix` Use `composer style` to only show violations without fixing. diff --git a/composer.json b/composer.json index 2d3ba2b..cfa08ec 100644 --- a/composer.json +++ b/composer.json @@ -13,7 +13,6 @@ "phpunit/php-code-coverage": "^8.0" }, "require-dev": { - "friendsofphp/php-cs-fixer": "^2.16", "squizlabs/php_codesniffer": "^3.5" }, "type": "library", @@ -42,10 +41,10 @@ }, "scripts": { "style": [ - "php-cs-fixer fix --dry-run --verbose" + "vendor/bin/phpcs" ], "style-fix": [ - "php-cs-fixer fix" + "vendor/bin/phpcbf" ], "test": [ "phpunit" diff --git a/phpcs.xml.dist b/phpcs.xml.dist new file mode 100644 index 0000000..0b6d6e7 --- /dev/null +++ b/phpcs.xml.dist @@ -0,0 +1,18 @@ + + + + + + + src + test + + */test/fixtures/* + bootstrap.php + + + From 7cca683c4b168553ea9c8da1c1aabccbac58a9ff Mon Sep 17 00:00:00 2001 From: Filippo Tessarotto Date: Fri, 17 Jul 2020 14:29:37 +0200 Subject: [PATCH 06/34] Replace Travis-CI with Github Actions --- .github/workflows/integrate.yaml | 146 +++++++++++++++++++++++++++++++ .github/workflows/release.yaml | 81 +++++++++++++++++ .travis.yml | 76 ---------------- 3 files changed, 227 insertions(+), 76 deletions(-) create mode 100644 .github/workflows/integrate.yaml create mode 100644 .github/workflows/release.yaml delete mode 100644 .travis.yml diff --git a/.github/workflows/integrate.yaml b/.github/workflows/integrate.yaml new file mode 100644 index 0000000..ed35dbf --- /dev/null +++ b/.github/workflows/integrate.yaml @@ -0,0 +1,146 @@ +name: "Integrate" + +on: + pull_request: + push: + branches: + - "master" + +jobs: + tests: + name: "Tests" + + runs-on: "ubuntu-latest" + + strategy: + matrix: + php-version: + - "7.3" + - "7.4" + dependencies: + - "lowest" + - "highest" + + steps: + - name: "Checkout" + uses: "actions/checkout@v2" + with: + # Needed for \ParaTest\Console\VersionProvider::getGitVersion + fetch-depth: 0 + + - name: "Install PHP" + uses: "shivammathur/setup-php@v2" + with: + coverage: "none" + php-version: "${{ matrix.php-version }}" + ini-values: memory_limit=-1 + tools: composer:v1, cs2pr + + - name: "Get composer cache directory" + id: composercache + run: echo "::set-output name=dir::$(composer config cache-files-dir)" + + - name: "Cache dependencies" + uses: actions/cache@v2 + with: + path: ${{ steps.composercache.outputs.dir }} + key: ${{ runner.os }}-php-${{ matrix.php-version }}-${{ matrix.dependencies }}-composer-${{ hashFiles('**/composer.json') }} + restore-keys: ${{ runner.os }}-php-${{ matrix.php-version }}-${{ matrix.dependencies }}-composer- + + - name: "Install lowest dependencies" + if: ${{ matrix.dependencies == 'lowest' }} + run: "composer update --no-interaction --no-progress --prefer-lowest" + + - name: "Install highest dependencies" + if: ${{ matrix.dependencies == 'highest' }} + run: "composer update --no-interaction --no-progress" + + - name: "Tests" + run: "vendor/bin/phpunit" + + coding-standards: + name: "Coding Standards" + + runs-on: "ubuntu-latest" + + strategy: + matrix: + php-version: + - "7.3" + + steps: + - name: "Checkout" + uses: "actions/checkout@v2" + + - name: "Install PHP" + uses: "shivammathur/setup-php@v2" + with: + coverage: "none" + php-version: "${{ matrix.php-version }}" + ini-values: memory_limit=-1 + tools: composer:v1, cs2pr + + - name: "Get composer cache directory" + id: composercache + run: echo "::set-output name=dir::$(composer config cache-files-dir)" + + - name: "Cache dependencies" + uses: actions/cache@v2 + with: + path: ${{ steps.composercache.outputs.dir }} + key: ${{ runner.os }}-php-${{ matrix.php-version }}-${{ matrix.dependencies }}-composer-${{ hashFiles('**/composer.json') }} + restore-keys: ${{ runner.os }}-php-${{ matrix.php-version }}-${{ matrix.dependencies }}-composer- + + - name: "Install dependencies" + run: "composer update --no-interaction --no-progress" + + - name: "Check coding standards" + run: "composer style" + + compile-phar: + name: "Compile Phar" + + runs-on: "ubuntu-latest" + + strategy: + matrix: + php-version: + - "7.3" + + steps: + - name: "Checkout" + uses: "actions/checkout@v2" + + - name: "Install PHP" + uses: "shivammathur/setup-php@v2" + with: + coverage: "none" + php-version: "${{ matrix.php-version }}" + ini-values: memory_limit=-1 + tools: composer:v1, cs2pr + + - name: "Get composer cache directory" + id: composercache + run: echo "::set-output name=dir::$(composer config cache-files-dir)" + + - name: "Cache dependencies" + uses: actions/cache@v2 + with: + path: ${{ steps.composercache.outputs.dir }} + key: ${{ runner.os }}-php-${{ matrix.php-version }}-${{ matrix.dependencies }}-composer-${{ hashFiles('**/composer.json') }} + restore-keys: ${{ runner.os }}-php-${{ matrix.php-version }}-${{ matrix.dependencies }}-composer- + + - name: "Install dependencies" + run: "composer update --no-interaction --no-progress" + + - name: "Download BOX.phar" + run: "wget https://github.com/humbug/box/releases/latest/download/box.phar" + + - name: "Validate configuration for humbug/box" + run: "php box.phar validate" + + - name: "Compile paratest.phar with humbug/box" + run: "php box.phar compile" + + - name: "Show info about paratest.phar with humbug/box" + run: "php box.phar info bin/paratest.phar" diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml new file mode 100644 index 0000000..51ae555 --- /dev/null +++ b/.github/workflows/release.yaml @@ -0,0 +1,81 @@ +name: "Release" + +on: + push: + tags: + - "**" + +jobs: + release: + name: "Release" + + runs-on: "ubuntu-latest" + + strategy: + matrix: + php-version: + - "7.3" + + steps: + - name: "Checkout" + uses: "actions/checkout@v2" + + - name: "Install PHP" + uses: "shivammathur/setup-php@v2" + with: + coverage: "none" + php-version: "${{ matrix.php-version }}" + ini-values: memory_limit=-1 + tools: composer:v1, cs2pr + + - name: "Get composer cache directory" + id: composercache + run: echo "::set-output name=dir::$(composer config cache-files-dir)" + + - name: "Cache dependencies" + uses: actions/cache@v2 + with: + path: ${{ steps.composercache.outputs.dir }} + key: ${{ runner.os }}-php-${{ matrix.php-version }}-${{ matrix.dependencies }}-composer-${{ hashFiles('**/composer.json') }} + restore-keys: ${{ runner.os }}-php-${{ matrix.php-version }}-${{ matrix.dependencies }}-composer- + + - name: "Install dependencies" + run: "composer update --no-interaction --no-progress" + + - name: "Download BOX.phar" + run: "wget https://github.com/humbug/box/releases/latest/download/box.phar" + + - name: "Validate configuration for humbug/box" + run: "php box.phar validate" + + - name: "Compile paratest.phar with humbug/box" + run: "php box.phar compile" + + - name: "Show info about paratest.phar with humbug/box" + run: "php box.phar info bin/paratest.phar" + + - name: "Determine tag" + id: "determine-tag" + run: "echo \"::set-output name=tag::${GITHUB_REF#refs/tags/}\"" + + - name: "Create release" + id: "create-release" + uses: "actions/create-release@v1" + env: + GITHUB_TOKEN: "${{ secrets.PARATEST_BOT_TOKEN }}" + with: + draft: false + prerelease: false + release_name: "${{ steps.determine-tag.outputs.tag }}" + tag_name: "${{ steps.determine-tag.outputs.tag }}" + + - name: "Upload paratest.phar" + if: "always()" + uses: "actions/upload-release-asset@v1" + env: + GITHUB_TOKEN: "${{ secrets.PARATEST_BOT_TOKEN }}" + with: + asset_content_type: "text/plain" + asset_name: "paratest.phar" + asset_path: "bin/paratest.phar" + upload_url: "${{ steps.create-release.outputs.upload_url }}" diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 3e28b8f..0000000 --- a/.travis.yml +++ /dev/null @@ -1,76 +0,0 @@ -language: php - -sudo: false - -cache: - directories: - - $HOME/.composer/ - -matrix: - fast_finish: true - include: - - name: "PHPCS" - php: 7.4 - env: - - CS_CHECK=true - - name: "Build Phar" - php: 7.3 - env: - - BUILD_PHAR=true - - php: 7.3 - name: "Tests PHP 7.3 Lowest Dependencies" - env: - - DEPS=lowest - - name: "Tests PHP 7.3 PHPUnit Dev Version" - php: 7.3 - env: - - PHPUNIT_DEV=true - - name: "Tests PHP 7.3" - php: 7.3 - - php: 7.4 - name: "Tests PHP 7.4 Lowest Dependencies" - env: - - DEPS=lowest - - name: "Tests PHP 7.4 PHPUnit Dev Version" - php: 7.4 - env: - - PHPUNIT_DEV=true - - name: "Tests PHP 7.4" - php: 7.4 - - name: "Tests PHP 7.4 with symfony 5" - php: 7.4 - env: - - SYMFONY_VERSION='5.0.x-dev' - - name: "Tests PHP Nightly" - php: nightly - allow_failures: - - php: nightly - -install: - - if [[ $CS_CHECK == 'true' ]]; then phpenv config-rm xdebug.ini || return 0; fi; - - if [[ $SYMFONY_VERSION != "" ]]; then composer require --no-update "symfony/symfony:${SYMFONY_VERSION}"; fi; - - if [[ $PHPUNIT_DEV == 'true' ]]; then composer require --no-update phpunit/phpunit=*@dev; fi; - - if [[ $DEPS == 'lowest' ]]; then COMPOSER_ARGS='--prefer-lowest --prefer-stable'; fi; composer update --no-interaction --prefer-dist $COMPOSER_ARGS; - - if [[ $BUILD_PHAR == 'true' ]]; then wget https://github.com/humbug/box/releases/download/3.7.0/box.phar; fi; - - composer install - -script: - - if [[ $CS_CHECK == 'true' ]]; then composer style; fi; - - if [[ $CS_CHECK != 'true' ]]; then vendor/bin/phpunit $COVERAGE_ARGS; fi; - -before_deploy: - - if [[ $BUILD_PHAR == 'true' ]]; then php box.phar compile; fi; - -deploy: - provider: releases - api_key: - secure: OER6C7dNaVOIhl2wEA2i2Qe4T6BcXuM/cP0vOoz4578X0LRipYudWMXnLXYmMmjzraMBJ2W3cQx830mQK0TBVU/m0hp5bpTcfGsOBX7+sLi6MY/ncDa4kXV2x8qZOmQLRtk3smAgMyh5hUp7qlmpDRJJ9F1xCYFNqpotK8N3Rfk= - file: bin/paratest.phar - skip_cleanup: true - on: - condition: $BUILD_PHAR == 'true' - repo: paratestphp/paratest - tags: true - -notifications: - email: false From 16990e7575645c9544afe68e2ccf942c60930627 Mon Sep 17 00:00:00 2001 From: Filippo Tessarotto Date: Sat, 18 Jul 2020 16:06:39 +0200 Subject: [PATCH 07/34] GITHUB_TOKEN is already provided by action --- .github/workflows/release.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 51ae555..96c8225 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -62,18 +62,18 @@ jobs: id: "create-release" uses: "actions/create-release@v1" env: - GITHUB_TOKEN: "${{ secrets.PARATEST_BOT_TOKEN }}" + GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}" with: draft: false prerelease: false - release_name: "${{ steps.determine-tag.outputs.tag }}" + release_name: "Version ${{ steps.determine-tag.outputs.tag }}" tag_name: "${{ steps.determine-tag.outputs.tag }}" - name: "Upload paratest.phar" if: "always()" uses: "actions/upload-release-asset@v1" env: - GITHUB_TOKEN: "${{ secrets.PARATEST_BOT_TOKEN }}" + GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}" with: asset_content_type: "text/plain" asset_name: "paratest.phar" From 32c738b0599dfa9f485f4e84757536de7796dc39 Mon Sep 17 00:00:00 2001 From: Filippo Tessarotto Date: Tue, 21 Jul 2020 10:49:01 +0200 Subject: [PATCH 08/34] Switch badge from TravisCI to GA --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 1d1d9d2..e3057c0 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ ParaTest ======== -[![Build Status](https://travis-ci.org/paratestphp/paratest.svg?branch=master)](https://travis-ci.org/paratestphp/paratest) +[![Integrate](https://github.com/paratestphp/paratest/workflows/Integrate/badge.svg?branch=master)](https://github.com/paratestphp/paratest/actions) [![Packagist](https://img.shields.io/packagist/dt/brianium/paratest.svg)](https://packagist.org/packages/brianium/paratest) The objective of ParaTest is to support parallel testing in PHPUnit. Provided you have well-written PHPUnit tests, you can drop `paratest` in your project and From a574a609c7e77da969e7ae2a647566f291f605eb Mon Sep 17 00:00:00 2001 From: Filippo Tessarotto Date: Mon, 20 Jul 2020 15:40:07 +0200 Subject: [PATCH 09/34] PHPStan level 0 --- composer.json | 2 ++ src/Runners/PHPUnit/TestFileLoader.php | 5 +++++ test/Functional/Coverage/CoverageMergerTest.php | 6 +----- test/Functional/Coverage/CoverageReporterTest.php | 4 ++-- test/Functional/Runners/PHPUnit/WorkerTest.php | 8 ++++++++ test/Unit/Logging/JUnit/ReaderTest.php | 1 + test/Unit/Runners/PHPUnit/ExecutableTestTest.php | 2 +- test/fixtures/excluded-tests/PassingTest.php | 2 +- .../excluded-tests/excluded/ExcludedFailingTest.php | 2 +- .../excluded-tests/included/IncludedPassingTest.php | 2 +- .../globbing-support-tests/some-dir/TestTokenTest.php | 2 +- .../globbing-support-tests/some-dir2/TestTokenTest.php | 2 +- test/fixtures/paratest-only-tests/TestTokenTest.php | 2 +- test/fixtures/passing-tests/GroupsTest.php | 2 +- 14 files changed, 27 insertions(+), 15 deletions(-) diff --git a/composer.json b/composer.json index cfa08ec..290c0d8 100644 --- a/composer.json +++ b/composer.json @@ -13,6 +13,8 @@ "phpunit/php-code-coverage": "^8.0" }, "require-dev": { + "phpstan/phpstan": "^0.12.33", + "phpstan/phpstan-phpunit": "^0.12.12", "squizlabs/php_codesniffer": "^3.5" }, "type": "library", diff --git a/src/Runners/PHPUnit/TestFileLoader.php b/src/Runners/PHPUnit/TestFileLoader.php index ec9b554..270617b 100644 --- a/src/Runners/PHPUnit/TestFileLoader.php +++ b/src/Runners/PHPUnit/TestFileLoader.php @@ -45,6 +45,11 @@ class TestFileLoader */ protected $excludingFiles = false; + /** + * @var Options|null + */ + protected $options; + public function __construct(Options $options = null) { $this->options = $options; diff --git a/test/Functional/Coverage/CoverageMergerTest.php b/test/Functional/Coverage/CoverageMergerTest.php index b117114..423f078 100644 --- a/test/Functional/Coverage/CoverageMergerTest.php +++ b/test/Functional/Coverage/CoverageMergerTest.php @@ -122,11 +122,7 @@ public function testCoverageFileIsEmpty() { $this->expectException(\RuntimeException::class); $regex = '/Coverage file .*? is empty. This means a PHPUnit process has crashed./'; - if (method_exists($this, 'expectExceptionMessageMatches')) { - $this->expectExceptionMessageMatches($regex); - } else { - $this->expectExceptionMessageRegExp($regex); - } + $this->expectExceptionMessageMatches($regex); $filename = $this->copyCoverageFile('coverage-tests/empty_test.cov', $this->targetDir); $coverageMerger = new CoverageMerger(); diff --git a/test/Functional/Coverage/CoverageReporterTest.php b/test/Functional/Coverage/CoverageReporterTest.php index ad93951..bc7e8a8 100644 --- a/test/Functional/Coverage/CoverageReporterTest.php +++ b/test/Functional/Coverage/CoverageReporterTest.php @@ -106,7 +106,7 @@ public function testGenerateClover(array $coverageFiles) static::assertFileExists($target); - $reportXml = \PHPUnit\Util\XML::loadFile($target); + $reportXml = \PHPUnit\Util\Xml::loadFile($target); static::assertInstanceOf('DomDocument', $reportXml, 'Incorrect clover report xml was generated'); } @@ -132,7 +132,7 @@ public function testGenerateCrap4J(array $coverageFiles) static::assertFileExists($target); - $reportXml = \PHPUnit\Util\XML::loadFile($target); + $reportXml = \PHPUnit\Util\Xml::loadFile($target); static::assertInstanceOf('DomDocument', $reportXml, 'Incorrect crap4j report xml was generated'); static::assertEquals('crap_result', $reportXml->documentElement->tagName); } diff --git a/test/Functional/Runners/PHPUnit/WorkerTest.php b/test/Functional/Runners/PHPUnit/WorkerTest.php index 0bebd18..a82fe32 100644 --- a/test/Functional/Runners/PHPUnit/WorkerTest.php +++ b/test/Functional/Runners/PHPUnit/WorkerTest.php @@ -14,6 +14,14 @@ class WorkerTest extends \ParaTest\Tests\TestBase 1 => ['pipe', 'w'], 2 => ['pipe', 'w'], ]; + /** + * @var string + */ + protected $bootstrap; + /** + * @var string + */ + private $phpunitWrapper; public function setUp(): void { diff --git a/test/Unit/Logging/JUnit/ReaderTest.php b/test/Unit/Logging/JUnit/ReaderTest.php index 9c14c81..3c7a9fe 100644 --- a/test/Unit/Logging/JUnit/ReaderTest.php +++ b/test/Unit/Logging/JUnit/ReaderTest.php @@ -13,6 +13,7 @@ class ReaderTest extends \ParaTest\Tests\TestBase protected $mixed; protected $single; protected $empty; + protected $multi_errors; public function setUp(): void { diff --git a/test/Unit/Runners/PHPUnit/ExecutableTestTest.php b/test/Unit/Runners/PHPUnit/ExecutableTestTest.php index e0364ba..e8dbd81 100644 --- a/test/Unit/Runners/PHPUnit/ExecutableTestTest.php +++ b/test/Unit/Runners/PHPUnit/ExecutableTestTest.php @@ -69,7 +69,7 @@ public function testGetCommandStringIncludesPassthruOptions() public function testCommandRedirectsCoverage() { - $options = ['a' => 'b', 'coverage-php' => 'target_html', 'coverage-php' => 'target.php']; + $options = ['a' => 'b', 'coverage-php' => 'target.php']; $binary = '/usr/bin/phpunit'; $command = $this->executableTestChild->command($binary, $options); diff --git a/test/fixtures/excluded-tests/PassingTest.php b/test/fixtures/excluded-tests/PassingTest.php index 9cd3a13..32347fb 100644 --- a/test/fixtures/excluded-tests/PassingTest.php +++ b/test/fixtures/excluded-tests/PassingTest.php @@ -1,6 +1,6 @@ Date: Tue, 21 Jul 2020 11:03:56 +0200 Subject: [PATCH 10/34] Add static analysis job to GA --- .github/workflows/integrate.yaml | 41 +++++++++++++++++++++++++++++++- README.md | 4 ++++ composer.json | 4 ++++ 3 files changed, 48 insertions(+), 1 deletion(-) diff --git a/.github/workflows/integrate.yaml b/.github/workflows/integrate.yaml index ed35dbf..92f906c 100644 --- a/.github/workflows/integrate.yaml +++ b/.github/workflows/integrate.yaml @@ -55,7 +55,7 @@ jobs: if: ${{ matrix.dependencies == 'highest' }} run: "composer update --no-interaction --no-progress" - - name: "Tests" + - name: "Run tests" run: "vendor/bin/phpunit" coding-standards: @@ -97,6 +97,45 @@ jobs: - name: "Check coding standards" run: "composer style" + static-analysis: + name: "Static Analysis" + + runs-on: "ubuntu-latest" + + strategy: + matrix: + php-version: + - "7.4" + + steps: + - name: "Checkout" + uses: "actions/checkout@v2" + + - name: "Install PHP" + uses: "shivammathur/setup-php@v2" + with: + coverage: "none" + php-version: "${{ matrix.php-version }}" + ini-values: memory_limit=-1 + tools: composer:v1, cs2pr + + - name: "Get composer cache directory" + id: composercache + run: echo "::set-output name=dir::$(composer config cache-files-dir)" + + - name: "Cache dependencies" + uses: actions/cache@v2 + with: + path: ${{ steps.composercache.outputs.dir }} + key: ${{ runner.os }}-php-${{ matrix.php-version }}-${{ matrix.dependencies }}-composer-${{ hashFiles('**/composer.json') }} + restore-keys: ${{ runner.os }}-php-${{ matrix.php-version }}-${{ matrix.dependencies }}-composer- + + - name: "Install dependencies" + run: "composer update --no-interaction --no-progress" + + - name: "Run static analysis" + run: "composer static-analysis" + compile-phar: name: "Compile Phar" diff --git a/README.md b/README.md index e3057c0..60a18ce 100644 --- a/README.md +++ b/README.md @@ -234,6 +234,7 @@ composer run-script -l scripts: style Run style checks (only dry run - no fixing!) style-fix Run style checks and fix violations + static-analysis Run static analysis test Run all tests test-unit Run only unit tests test-functional Run only functional tests @@ -252,6 +253,9 @@ You can run all tests at once by running phpunit from the project directory: ParaTest can run its own test suite by running it from the `bin` directory: `composer test` OR `bin/paratest` +Analyse the code statically: +`composer static-analysis` + Before creating a Pull Request be sure to run the style checks and commit the eventual changes: `composer style-fix` diff --git a/composer.json b/composer.json index 290c0d8..fe587de 100644 --- a/composer.json +++ b/composer.json @@ -48,6 +48,9 @@ "style-fix": [ "vendor/bin/phpcbf" ], + "static-analysis": [ + "vendor/bin/phpstan analyse" + ], "test": [ "phpunit" ], @@ -64,6 +67,7 @@ "scripts-descriptions": { "style": "Run style checks (only dry run - no fixing!)", "style-fix": "Run style checks and fix violations", + "static-analysis": "Run static analysis", "test": "Run all tests", "test-unit": "Run only unit tests", "test-functional": "Run only functional tests", From 8057d0f8e560e11926e709bef3ed636ec712314f Mon Sep 17 00:00:00 2001 From: Filippo Tessarotto Date: Tue, 21 Jul 2020 11:06:46 +0200 Subject: [PATCH 11/34] Add PHPStan config file --- phpstan.neon.dist | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 phpstan.neon.dist diff --git a/phpstan.neon.dist b/phpstan.neon.dist new file mode 100644 index 0000000..147de93 --- /dev/null +++ b/phpstan.neon.dist @@ -0,0 +1,11 @@ +includes: + - phar://phpstan.phar/conf/config.level0.neon + - vendor/phpstan/phpstan-phpunit/extension.neon + +parameters: + tipsOfTheDay: false + paths: + - src/ + - test/ + excludes_analyse: + - test/fixtures/fatal-tests/ From 0c6e2418b5d22f648158bbe3d42135c46500e4f2 Mon Sep 17 00:00:00 2001 From: Filippo Tessarotto Date: Tue, 21 Jul 2020 11:12:17 +0200 Subject: [PATCH 12/34] Move methods where they belong to --- src/Console/Testers/PHPUnit.php | 15 +++++++++++++ src/Console/Testers/Tester.php | 14 ------------ src/Logging/JUnit/Reader.php | 38 +++++++++++++++++++++++++++++++++ src/Logging/MetaProvider.php | 38 --------------------------------- 4 files changed, 53 insertions(+), 52 deletions(-) diff --git a/src/Console/Testers/PHPUnit.php b/src/Console/Testers/PHPUnit.php index 188ca07..f24382e 100644 --- a/src/Console/Testers/PHPUnit.php +++ b/src/Console/Testers/PHPUnit.php @@ -10,6 +10,7 @@ use ParaTest\Runners\PHPUnit\Runner; use ParaTest\Util\Str; use Symfony\Component\Console\Command\Command; +use Symfony\Component\Console\Input\ArrayInput; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Input\InputOption; @@ -159,6 +160,20 @@ protected function getConfig(InputInterface $input) return new Configuration($configFilename); } + /** + * Displays help for the ParaTestCommand. + * + * @param InputInterface $input + * @param OutputInterface $output + */ + protected function displayHelp(InputInterface $input, OutputInterface $output) + { + $help = $this->command->getApplication()->find('help'); + $input = new ArrayInput(['command_name' => 'paratest']); + $help->run($input, $output); + exit(0); + } + /** * @param \Symfony\Component\Console\Input\InputInterface $input * diff --git a/src/Console/Testers/Tester.php b/src/Console/Testers/Tester.php index 6b20c74..9ba1a23 100644 --- a/src/Console/Testers/Tester.php +++ b/src/Console/Testers/Tester.php @@ -53,18 +53,4 @@ protected function getOptions(InputInterface $input): array return $options; } - - /** - * Displays help for the ParaTestCommand. - * - * @param InputInterface $input - * @param OutputInterface $output - */ - protected function displayHelp(InputInterface $input, OutputInterface $output) - { - $help = $this->command->getApplication()->find('help'); - $input = new ArrayInput(['command_name' => 'paratest']); - $help->run($input, $output); - exit(0); - } } diff --git a/src/Logging/JUnit/Reader.php b/src/Logging/JUnit/Reader.php index 4772c25..b397db4 100644 --- a/src/Logging/JUnit/Reader.php +++ b/src/Logging/JUnit/Reader.php @@ -231,4 +231,42 @@ protected function initSuite() $this->suites[] = TestSuite::suiteFromArray(self::$defaultSuite); } } + + /** + * Return a value as a float or integer. + * + * @param $property + * + * @return float|int + */ + protected function getNumericValue(string $property) + { + return ($property === 'time') + ? (float) $this->suites[0]->$property + : (int) $this->suites[0]->$property; + } + + /** + * Return messages for a given type. + * + * @param $type + * + * @return array + */ + protected function getMessages(string $type): array + { + $messages = []; + $suites = $this->isSingle ? $this->suites : $this->suites[0]->suites; + foreach ($suites as $suite) { + $messages = \array_merge($messages, \array_reduce($suite->cases, function ($result, $case) use ($type) { + return \array_merge($result, \array_reduce($case->$type, function ($msgs, $msg) { + $msgs[] = $msg['text']; + + return $msgs; + }, [])); + }, [])); + } + + return $messages; + } } diff --git a/src/Logging/MetaProvider.php b/src/Logging/MetaProvider.php index 896a282..95008dd 100644 --- a/src/Logging/MetaProvider.php +++ b/src/Logging/MetaProvider.php @@ -43,42 +43,4 @@ public function __call(string $method, array $args) return $this->getMessages($type); } } - - /** - * Return a value as a float or integer. - * - * @param $property - * - * @return float|int - */ - protected function getNumericValue(string $property) - { - return ($property === 'time') - ? (float) $this->suites[0]->$property - : (int) $this->suites[0]->$property; - } - - /** - * Return messages for a given type. - * - * @param $type - * - * @return array - */ - protected function getMessages(string $type): array - { - $messages = []; - $suites = $this->isSingle ? $this->suites : $this->suites[0]->suites; - foreach ($suites as $suite) { - $messages = \array_merge($messages, \array_reduce($suite->cases, function ($result, $case) use ($type) { - return \array_merge($result, \array_reduce($case->$type, function ($msgs, $msg) { - $msgs[] = $msg['text']; - - return $msgs; - }, [])); - }, [])); - } - - return $messages; - } } From 915e64093e30d532c5a963e93a532ee225cb6672 Mon Sep 17 00:00:00 2001 From: Filippo Tessarotto Date: Tue, 21 Jul 2020 11:33:58 +0200 Subject: [PATCH 13/34] PHPStan level 1 --- phpstan.neon.dist | 4 +++- src/Logging/LogInterpreter.php | 4 ++-- src/Logging/MetaProvider.php | 19 +++++++++++++++++++ test/Functional/ParaTestInvoker.php | 8 +++++++- test/bootstrap.php | 26 +++----------------------- test/constants.php | 16 ++++++++++++++++ 6 files changed, 50 insertions(+), 27 deletions(-) create mode 100644 test/constants.php diff --git a/phpstan.neon.dist b/phpstan.neon.dist index 147de93..c8a9cce 100644 --- a/phpstan.neon.dist +++ b/phpstan.neon.dist @@ -1,9 +1,11 @@ includes: - - phar://phpstan.phar/conf/config.level0.neon + - phar://phpstan.phar/conf/config.level1.neon - vendor/phpstan/phpstan-phpunit/extension.neon parameters: tipsOfTheDay: false + bootstrapFiles: + - test/constants.php paths: - src/ - test/ diff --git a/src/Logging/LogInterpreter.php b/src/Logging/LogInterpreter.php index 2c42e51..14f92af 100644 --- a/src/Logging/LogInterpreter.php +++ b/src/Logging/LogInterpreter.php @@ -61,8 +61,8 @@ public function getReaders(): array */ public function isSuccessful(): bool { - $failures = $this->getTotalFailures(); - $errors = $this->getTotalErrors(); + $failures = $this->getNumericValue('failures'); + $errors = $this->getNumericValue('errors'); return $failures === 0 && $errors === 0; } diff --git a/src/Logging/MetaProvider.php b/src/Logging/MetaProvider.php index 95008dd..2ddfb1e 100644 --- a/src/Logging/MetaProvider.php +++ b/src/Logging/MetaProvider.php @@ -43,4 +43,23 @@ public function __call(string $method, array $args) return $this->getMessages($type); } } + + /** + * Returns a value as either a float or int. + * + * @param $property + * + * @return float|int + */ + abstract protected function getNumericValue(string $property); + + /** + * Gets messages of a given type and + * merges them into a single collection. + * + * @param $type + * + * @return array + */ + abstract protected function getMessages(string $type): array; } diff --git a/test/Functional/ParaTestInvoker.php b/test/Functional/ParaTestInvoker.php index 0d9bcbc..9eb77fd 100644 --- a/test/Functional/ParaTestInvoker.php +++ b/test/Functional/ParaTestInvoker.php @@ -48,7 +48,13 @@ public function execute($options = [], $callback = null) private function buildCommand($options = []) { - $cmd = sprintf('%s %s --bootstrap %s --phpunit %s', PHP_BINARY, PARA_BINARY, $this->bootstrap, PHPUNIT); + $cmd = sprintf( + '%s %s --bootstrap %s --phpunit %s', + PHP_BINARY, + defined('PHP_WINDOWS_VERSION_BUILD') ? PARA_BINARY_WINDOWS : PARA_BINARY, + $this->bootstrap, + PHPUNIT + ); foreach ($options as $switch => $value) { if (is_numeric($switch)) { $switch = $value; diff --git a/test/bootstrap.php b/test/bootstrap.php index 7d4cd16..ac2bc39 100644 --- a/test/bootstrap.php +++ b/test/bootstrap.php @@ -2,26 +2,6 @@ declare(strict_types=1); -if (!defined('DS')) { - define('DS', DIRECTORY_SEPARATOR); -} - -require_once dirname(__DIR__) . DS . 'vendor' . DS . 'autoload.php'; - -//TEST CONSTANTS -define('FIXTURES', __DIR__ . DS . 'fixtures'); - -$pb = dirname(__DIR__) . DS . 'bin' . DS . 'paratest'; -if (defined('PHP_WINDOWS_VERSION_BUILD')) { - $pb .= '.bat'; -} -define('PARA_BINARY', $pb); -define('PARATEST_ROOT', dirname(__DIR__)); - -$phpunit_path = PARATEST_ROOT . DS . 'vendor' . DS . 'phpunit' . DS . 'phpunit' . DS . 'phpunit'; -define('PHPUNIT', $phpunit_path); - -define('BOOTSTRAP', __FILE__); -define('PHPUNIT_CONFIGURATION', dirname(__DIR__) . DS . 'phpunit.xml.dist'); - -require_once __DIR__ . DS . 'TestBase.php'; +require_once __DIR__ . DIRECTORY_SEPARATOR . 'constants.php'; +require_once PARATEST_ROOT . DIRECTORY_SEPARATOR . 'vendor' . DIRECTORY_SEPARATOR . 'autoload.php'; +require_once __DIR__ . DIRECTORY_SEPARATOR . 'TestBase.php'; diff --git a/test/constants.php b/test/constants.php new file mode 100644 index 0000000..795ddb4 --- /dev/null +++ b/test/constants.php @@ -0,0 +1,16 @@ + Date: Tue, 21 Jul 2020 12:00:56 +0200 Subject: [PATCH 14/34] PHPStan level 2 --- phpstan.neon.dist | 2 +- src/Console/Testers/PHPUnit.php | 6 ++--- src/Console/VersionProvider.php | 2 ++ src/Logging/JUnit/Reader.php | 8 +++--- src/Logging/JUnit/TestCase.php | 4 +-- src/Logging/JUnit/TestSuite.php | 2 +- src/Logging/JUnit/Writer.php | 16 +++++------ src/Logging/LogInterpreter.php | 9 ++++--- src/Logging/MetaProvider.php | 17 +++++++++--- src/Parser/ParsedObject.php | 4 +-- src/Parser/Parser.php | 12 +++++---- src/Runners/PHPUnit/Configuration.php | 2 +- src/Runners/PHPUnit/ExecutableTest.php | 10 +++---- src/Runners/PHPUnit/Options.php | 27 ++++++++++++++++--- src/Runners/PHPUnit/ResultPrinter.php | 6 ++--- src/Runners/PHPUnit/SuiteLoader.php | 2 +- src/Runners/PHPUnit/TestFileLoader.php | 6 ++--- src/Runners/PHPUnit/WrapperRunner.php | 2 +- .../Coverage/CoverageMergerTest.php | 2 +- test/Functional/DataProviderTest.php | 2 +- test/Functional/GroupTest.php | 2 +- test/Functional/PHPUnitTest.php | 4 +-- test/Functional/SkippedOrIncompleteTest.php | 2 +- test/Unit/Coverage/CoverageMergerTest.php | 8 +++--- test/Unit/Runners/PHPUnit/OptionsTest.php | 6 ++--- 25 files changed, 99 insertions(+), 64 deletions(-) diff --git a/phpstan.neon.dist b/phpstan.neon.dist index c8a9cce..fc0f0cc 100644 --- a/phpstan.neon.dist +++ b/phpstan.neon.dist @@ -1,5 +1,5 @@ includes: - - phar://phpstan.phar/conf/config.level1.neon + - phar://phpstan.phar/conf/config.level2.neon - vendor/phpstan/phpstan-phpunit/extension.neon parameters: diff --git a/src/Console/Testers/PHPUnit.php b/src/Console/Testers/PHPUnit.php index f24382e..a0e8357 100644 --- a/src/Console/Testers/PHPUnit.php +++ b/src/Console/Testers/PHPUnit.php @@ -210,7 +210,7 @@ public function getRunnerOptions(InputInterface $input): array * Require the bootstrap. If the file is specified, but does not exist * then an exception will be raised. * - * @param $file + * @param string $file * * @throws \RuntimeException */ @@ -233,7 +233,7 @@ public function requireBootstrap(string $file) * so that variables defined in it do not break * this object's configuration. * - * @param mixed $file + * @param string $file */ protected function scopedRequire(string $file) { @@ -245,7 +245,7 @@ protected function scopedRequire(string $file) /** * Return whether or not code coverage information should be collected. * - * @param $options + * @param array $options * * @return bool */ diff --git a/src/Console/VersionProvider.php b/src/Console/VersionProvider.php index c997abf..ee98d79 100644 --- a/src/Console/VersionProvider.php +++ b/src/Console/VersionProvider.php @@ -105,5 +105,7 @@ private function getComposerInstalledJsonPath() return $path; } } + + return null; } } diff --git a/src/Logging/JUnit/Reader.php b/src/Logging/JUnit/Reader.php index b397db4..6d28f18 100644 --- a/src/Logging/JUnit/Reader.php +++ b/src/Logging/JUnit/Reader.php @@ -156,8 +156,8 @@ protected function initSuiteFromCases(array $nodeArray) * Creates and adds a TestSuite based on the given * suite properties and collection of test cases. * - * @param $properties - * @param $testCases + * @param array $properties + * @param array $testCases */ protected function addSuite($properties, array $testCases) { @@ -235,7 +235,7 @@ protected function initSuite() /** * Return a value as a float or integer. * - * @param $property + * @param string $property * * @return float|int */ @@ -249,7 +249,7 @@ protected function getNumericValue(string $property) /** * Return messages for a given type. * - * @param $type + * @param string $type * * @return array */ diff --git a/src/Logging/JUnit/TestCase.php b/src/Logging/JUnit/TestCase.php index efcc4ea..29e3ce8 100644 --- a/src/Logging/JUnit/TestCase.php +++ b/src/Logging/JUnit/TestCase.php @@ -95,8 +95,8 @@ public function __construct( * Add a defect type (error or failure). * * @param string $collName the name of the collection to add to - * @param $type - * @param $text + * @param string $type + * @param string $text */ protected function addDefect(string $collName, string $type, string $text) { diff --git a/src/Logging/JUnit/TestSuite.php b/src/Logging/JUnit/TestSuite.php index ebfec93..91ee82c 100644 --- a/src/Logging/JUnit/TestSuite.php +++ b/src/Logging/JUnit/TestSuite.php @@ -72,7 +72,7 @@ class TestSuite * @param int $tests * @param int $assertions * @param int $failures - * @param mixed $errors + * @param int $errors * @param int $skipped * @param float $time * @param string|null $file diff --git a/src/Logging/JUnit/Writer.php b/src/Logging/JUnit/Writer.php index a999ffe..7361445 100644 --- a/src/Logging/JUnit/Writer.php +++ b/src/Logging/JUnit/Writer.php @@ -96,7 +96,7 @@ public function getXml(): string /** * Write the xml structure to a file path. * - * @param $path + * @param string $path */ public function write(string $path) { @@ -107,7 +107,7 @@ public function write(string $path) * Append a testsuite node to the given * root element. * - * @param $root + * @param \DOMElement $root * @param TestSuite $suite * * @return \DOMElement @@ -130,7 +130,7 @@ protected function appendSuite(\DOMElement $root, TestSuite $suite): \DOMElement * Append a testcase node to the given testsuite * node. * - * @param $suiteNode + * @param \DOMElement $suiteNode * @param TestCase $case * * @return \DOMElement @@ -157,9 +157,9 @@ protected function appendCase(\DOMElement $suiteNode, TestCase $case): \DOMEleme /** * Append error or failure nodes to the given testcase node. * - * @param $caseNode - * @param $defects - * @param $type + * @param \DOMElement $caseNode + * @param array $defects + * @param string $type */ protected function appendDefects(\DOMElement $caseNode, array $defects, string $type) { @@ -173,7 +173,7 @@ protected function appendDefects(\DOMElement $caseNode, array $defects, string $ /** * Get the root level testsuite node. * - * @param $suites + * @param array $suites * * @return \DOMElement */ @@ -198,7 +198,7 @@ protected function getSuiteRoot(array $suites): \DOMElement * Get the attributes used on the root testsuite * node. * - * @param $suites + * @param array $suites * * @return mixed */ diff --git a/src/Logging/LogInterpreter.php b/src/Logging/LogInterpreter.php index 14f92af..5e29374 100644 --- a/src/Logging/LogInterpreter.php +++ b/src/Logging/LogInterpreter.php @@ -5,6 +5,7 @@ namespace ParaTest\Logging; use ParaTest\Logging\JUnit\Reader; +use ParaTest\Logging\JUnit\TestCase; use ParaTest\Logging\JUnit\TestSuite; class LogInterpreter extends MetaProvider @@ -139,7 +140,7 @@ public function flattenCases(): array /** * Returns a value as either a float or int. * - * @param $property + * @param string $property * * @return float|int */ @@ -154,7 +155,7 @@ protected function getNumericValue(string $property) * Gets messages of a given type and * merges them into a single collection. * - * @param $type + * @param string $type * * @return array */ @@ -167,7 +168,7 @@ protected function getMessages(string $type): array * Flatten messages into a single collection * based on an accessor method. * - * @param $method + * @param string $method * * @return array */ @@ -185,7 +186,7 @@ private function mergeMessages(string $method): array * Reduces a collection of readers down to a single * result based on an accessor. * - * @param $method + * @param string $method * * @return mixed */ diff --git a/src/Logging/MetaProvider.php b/src/Logging/MetaProvider.php index 2ddfb1e..19430b8 100644 --- a/src/Logging/MetaProvider.php +++ b/src/Logging/MetaProvider.php @@ -9,6 +9,15 @@ * * Adds __call behavior to a logging object * for aggregating totals and messages + * + * @method int getTotalTests() + * @method int getTotalAssertions() + * @method int getTotalFailures() + * @method int getTotalErrors() + * @method int getTotalWarning() + * @method string[] getFailures() + * @method string[] getErrors() + * @method string[] getWarnings() */ abstract class MetaProvider { @@ -31,8 +40,8 @@ abstract class MetaProvider /** * Simplify aggregation of totals or messages. * - * @param mixed $method - * @param mixed $args + * @param string $method + * @param array $args */ public function __call(string $method, array $args) { @@ -47,7 +56,7 @@ public function __call(string $method, array $args) /** * Returns a value as either a float or int. * - * @param $property + * @param string $property * * @return float|int */ @@ -57,7 +66,7 @@ abstract protected function getNumericValue(string $property); * Gets messages of a given type and * merges them into a single collection. * - * @param $type + * @param string $type * * @return array */ diff --git a/src/Parser/ParsedObject.php b/src/Parser/ParsedObject.php index 0d64bb4..eab3057 100644 --- a/src/Parser/ParsedObject.php +++ b/src/Parser/ParsedObject.php @@ -47,8 +47,8 @@ public function getDocBlock() * has an annotation matching the name and value * if provided. * - * @param string $anno - * @param mixed $value + * @param string $annotation + * @param null|string $value * * @return bool */ diff --git a/src/Parser/Parser.php b/src/Parser/Parser.php index 6a32123..cafae60 100644 --- a/src/Parser/Parser.php +++ b/src/Parser/Parser.php @@ -109,10 +109,10 @@ private function getMethods(): array * Return the class name of the class contained * in the file. * - * @param mixed $filename - * @param mixed $previousDeclaredClasses + * @param string $filename + * @param array $previousDeclaredClasses * - * @return string + * @return null|string */ private function getClassName(string $filename, array $previousDeclaredClasses) { @@ -129,6 +129,8 @@ private function getClassName(string $filename, array $previousDeclaredClasses) if (isset($className)) { return $className; } + + return null; } /** @@ -160,8 +162,8 @@ private function searchForUnitTestClass(array $classes, string $filename) } /** - * @param $filename - * @param $className + * @param string $filename + * @param string $className * * @return bool */ diff --git a/src/Runners/PHPUnit/Configuration.php b/src/Runners/PHPUnit/Configuration.php index 894fdb1..afe05e3 100644 --- a/src/Runners/PHPUnit/Configuration.php +++ b/src/Runners/PHPUnit/Configuration.php @@ -185,7 +185,7 @@ public function getConfigDir(): string /** * Returns a suite paths relative to the config file. * - * @param $path + * @param string $path * * @return array|string[] */ diff --git a/src/Runners/PHPUnit/ExecutableTest.php b/src/Runners/PHPUnit/ExecutableTest.php index 60806ee..7b36957 100644 --- a/src/Runners/PHPUnit/ExecutableTest.php +++ b/src/Runners/PHPUnit/ExecutableTest.php @@ -211,16 +211,16 @@ public function run( * Build the full executable as we would do on the command line, e.g. * php -d zend_extension=xdebug.so vendor/bin/phpunit --teststuite suite1 --prepend xdebug-filter.php. * - * @param $binary - * @param $options + * @param string $binary + * @param array $options * @param string|null $passthru * @param string|null $passthruPhp * * @return string */ protected function getFullCommandlineString( - $binary, - $options, + string $binary, + array $options, ?string $passthru = null, ?string $passthruPhp = null ) { @@ -388,7 +388,7 @@ protected function getCommandString(string $binary, array $options = [], ?string * Checks environment variables for the presence of a TEST_TOKEN * variable and sets $this->token based on its value. * - * @param $environmentVariables + * @param array $environmentVariables */ protected function handleEnvironmentVariables(array $environmentVariables) { diff --git a/src/Runners/PHPUnit/Options.php b/src/Runners/PHPUnit/Options.php index b11c53f..d622fb0 100644 --- a/src/Runners/PHPUnit/Options.php +++ b/src/Runners/PHPUnit/Options.php @@ -7,6 +7,27 @@ /** * An object containing all configurable information used * to run PHPUnit via ParaTest. + * + * @property-read int $processes + * @property-read string $path + * @property-read string $phpunit + * @property-read string $functional + * @property-read bool $stopOnFailure + * @property-read array $filtered + * @property-read string $runner + * @property-read bool $noTestTokens + * @property-read bool $colors + * @property-read string[] $testsuite + * @property-read int|null $maxBatchSize + * @property-read string $filter + * @property-read string[] $groups + * @property-read string[] $excludeGroups + * @property-read array $annotations + * @property-read bool $parallelSuite + * @property-read string|null $passthru + * @property-read string|null $passthruPhp + * @property-read int $verbose + * @property-read int $coverageTestLimit */ class Options { @@ -209,7 +230,7 @@ public function __get(string $var) * * @param string $var * - * @return mixed + * @return bool */ public function __isset(string $var): bool { @@ -316,7 +337,7 @@ protected function filterOptions(array $options): array * Take an array of filtered options and return a * configuration path. * - * @param $filtered + * @param array $filtered * * @return string|null */ @@ -371,7 +392,7 @@ protected function initAnnotations() } /** - * @param $file + * @param string $file * * @return bool */ diff --git a/src/Runners/PHPUnit/ResultPrinter.php b/src/Runners/PHPUnit/ResultPrinter.php index a9605eb..2ff624d 100644 --- a/src/Runners/PHPUnit/ResultPrinter.php +++ b/src/Runners/PHPUnit/ResultPrinter.php @@ -312,7 +312,7 @@ protected function processReaderFeedback(Reader $reader, int $expectedTestCount) * @todo Skipped/Incomplete test tracking available only in functional mode for now * or in regular mode but without group/exclude-group filters. * - * @param mixed $options + * @param Options $options * * @return bool */ @@ -371,7 +371,7 @@ protected function printSkippedAndIncomplete(int $actualTestCount, int $expected * the total number of processed cases and the column * position. * - * @param $item + * @param string $item */ protected function printFeedbackItem(string $item) { @@ -416,7 +416,7 @@ protected function printFeedbackItemColor(string $item) * for a collection of errors or failures. * * @param array $defects - * @param $type + * @param string $type * * @return string */ diff --git a/src/Runners/PHPUnit/SuiteLoader.php b/src/Runners/PHPUnit/SuiteLoader.php index dca5732..5f003de 100644 --- a/src/Runners/PHPUnit/SuiteLoader.php +++ b/src/Runners/PHPUnit/SuiteLoader.php @@ -235,7 +235,7 @@ protected function addTestsToBatchSet(array &$batches, array $tests, int $maxBat * data provider is not used and return all test if has data provider and data provider is used. * * @param ParsedClass $class parsed class - * @param ParsedObject $method parsed method + * @param ParsedFunction $method parsed method * * @return string[] array of test names */ diff --git a/src/Runners/PHPUnit/TestFileLoader.php b/src/Runners/PHPUnit/TestFileLoader.php index 270617b..056afe6 100644 --- a/src/Runners/PHPUnit/TestFileLoader.php +++ b/src/Runners/PHPUnit/TestFileLoader.php @@ -87,8 +87,8 @@ public function loadSuitePath(SuitePath $path): array * Loads suites based on a specific path. * A valid path can be a directory or file. * - * @param $path - * @param $pattern + * @param string $path + * @param string|null $pattern * * @throws \InvalidArgumentException * @@ -135,7 +135,7 @@ private function loadDir(string $path, string $pattern = self::TEST_PATTERN) /** * Load a single suite file. * - * @param $path + * @param string $path */ private function loadFile(string $path) { diff --git a/src/Runners/PHPUnit/WrapperRunner.php b/src/Runners/PHPUnit/WrapperRunner.php index 4477212..baec1c8 100644 --- a/src/Runners/PHPUnit/WrapperRunner.php +++ b/src/Runners/PHPUnit/WrapperRunner.php @@ -167,7 +167,7 @@ private function progressedWorkers(): array /** * Returns the output streams of a subset of workers. * - * @param array keys are positions in $this->workers + * @param array $workers keys are positions in $this->workers * * @return array */ diff --git a/test/Functional/Coverage/CoverageMergerTest.php b/test/Functional/Coverage/CoverageMergerTest.php index 423f078..33fe054 100644 --- a/test/Functional/Coverage/CoverageMergerTest.php +++ b/test/Functional/Coverage/CoverageMergerTest.php @@ -60,7 +60,7 @@ public function testCoverageFromFileIsDeletedAfterAdd(array $coverageFiles) * @dataProvider getCoverageFileProvider * * @param string[] $coverageFiles - * @param $expectedClass + * @param string $expectedClass */ public function testCodeCoverageObjectIsCreatedFromCoverageFile(array $coverageFiles, $expectedClass) { diff --git a/test/Functional/DataProviderTest.php b/test/Functional/DataProviderTest.php index 2bb552f..e1dc8f3 100644 --- a/test/Functional/DataProviderTest.php +++ b/test/Functional/DataProviderTest.php @@ -6,7 +6,7 @@ class DataProviderTest extends FunctionalTestBase { - /** @var ParatestInvoker */ + /** @var ParaTestInvoker */ private $invoker; public function setUp(): void diff --git a/test/Functional/GroupTest.php b/test/Functional/GroupTest.php index 4fb4540..8fb873a 100644 --- a/test/Functional/GroupTest.php +++ b/test/Functional/GroupTest.php @@ -6,7 +6,7 @@ class GroupTest extends FunctionalTestBase { - /** @var ParatestInvoker */ + /** @var ParaTestInvoker */ private $invoker; public function setUp(): void diff --git a/test/Functional/PHPUnitTest.php b/test/Functional/PHPUnitTest.php index b578f0f..5cd5be1 100644 --- a/test/Functional/PHPUnitTest.php +++ b/test/Functional/PHPUnitTest.php @@ -363,8 +363,8 @@ public function setsCoveragePhpDataProvider() /** * @dataProvider setsCoveragePhpDataProvider * - * @param $options - * @param $coveragePhp + * @param array $options + * @param string $coveragePhp */ public function testSetsCoveragePhp($options, $coveragePhp) { diff --git a/test/Functional/SkippedOrIncompleteTest.php b/test/Functional/SkippedOrIncompleteTest.php index c29ce56..eb031c1 100644 --- a/test/Functional/SkippedOrIncompleteTest.php +++ b/test/Functional/SkippedOrIncompleteTest.php @@ -10,7 +10,7 @@ */ class SkippedOrIncompleteTest extends FunctionalTestBase { - /** @var ParatestInvoker */ + /** @var ParaTestInvoker */ private $invoker; public function setUp(): void diff --git a/test/Unit/Coverage/CoverageMergerTest.php b/test/Unit/Coverage/CoverageMergerTest.php index 5ccc94f..c2911ee 100644 --- a/test/Unit/Coverage/CoverageMergerTest.php +++ b/test/Unit/Coverage/CoverageMergerTest.php @@ -27,8 +27,8 @@ public function testSimpleMerge() // Every time the two above files are changed, the line numbers // may change, and so these two numbers may need adjustments - $firstFileFirstLine = 39; - $secondFileFirstLine = 39; + $firstFileFirstLine = 40; + $secondFileFirstLine = 48; $filter = new Filter(); $filter->addFilesToWhitelist([$firstFile, $secondFile]); @@ -79,8 +79,8 @@ public function testSimpleMergeLimited() // Every time the two above files are changed, the line numbers // may change, and so these two numbers may need adjustments - $firstFileFirstLine = 39; - $secondFileFirstLine = 39; + $firstFileFirstLine = 40; + $secondFileFirstLine = 48; $filter = new Filter(); $filter->addFilesToWhitelist([$firstFile, $secondFile]); diff --git a/test/Unit/Runners/PHPUnit/OptionsTest.php b/test/Unit/Runners/PHPUnit/OptionsTest.php index 0370b9b..d93d632 100644 --- a/test/Unit/Runners/PHPUnit/OptionsTest.php +++ b/test/Unit/Runners/PHPUnit/OptionsTest.php @@ -130,9 +130,9 @@ public function testConfigurationShouldReturnXmlDistIfConfigSpecifiedAsDirectory } /** - * @param $configFileName - * @param $path - * @param $configurationParameter + * @param string $configFileName + * @param string $path + * @param string|null $configurationParameter */ private function assertConfigurationFileFiltered($configFileName, $path, $configurationParameter = null) { From 0cdc9d6f2a6f0f48cf20a40b085d0c474a0cb260 Mon Sep 17 00:00:00 2001 From: Filippo Tessarotto Date: Tue, 21 Jul 2020 12:16:18 +0200 Subject: [PATCH 15/34] PHPStan level 3 --- phpstan.neon.dist | 2 +- src/Console/Testers/PHPUnit.php | 2 +- src/Console/Testers/Tester.php | 1 + src/Runners/PHPUnit/Configuration.php | 2 +- src/Runners/PHPUnit/SqliteRunner.php | 5 +++++ src/Runners/PHPUnit/Worker/WrapperWorker.php | 2 +- 6 files changed, 10 insertions(+), 4 deletions(-) diff --git a/phpstan.neon.dist b/phpstan.neon.dist index fc0f0cc..e44fc43 100644 --- a/phpstan.neon.dist +++ b/phpstan.neon.dist @@ -1,5 +1,5 @@ includes: - - phar://phpstan.phar/conf/config.level2.neon + - phar://phpstan.phar/conf/config.level3.neon - vendor/phpstan/phpstan-phpunit/extension.neon parameters: diff --git a/src/Console/Testers/PHPUnit.php b/src/Console/Testers/PHPUnit.php index a0e8357..77b168c 100644 --- a/src/Console/Testers/PHPUnit.php +++ b/src/Console/Testers/PHPUnit.php @@ -30,7 +30,7 @@ class PHPUnit extends Tester private const TEST_SUITE_FILTER_SEPARATOR = ','; /** - * @var \ParaTest\Console\Commands\ParaTestCommand + * @var Command */ protected $command; diff --git a/src/Console/Testers/Tester.php b/src/Console/Testers/Tester.php index 9ba1a23..d03f16f 100644 --- a/src/Console/Testers/Tester.php +++ b/src/Console/Testers/Tester.php @@ -4,6 +4,7 @@ namespace ParaTest\Console\Testers; +use ParaTest\Console\Commands\ParaTestCommand; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\ArrayInput; use Symfony\Component\Console\Input\InputInterface; diff --git a/src/Runners/PHPUnit/Configuration.php b/src/Runners/PHPUnit/Configuration.php index afe05e3..6899c81 100644 --- a/src/Runners/PHPUnit/Configuration.php +++ b/src/Runners/PHPUnit/Configuration.php @@ -88,7 +88,7 @@ public function getPath(): string public function getSuites() { if (!$this->xml) { - return; + return null; } $suites = []; $nodes = $this->xml->xpath('//testsuites/testsuite'); diff --git a/src/Runners/PHPUnit/SqliteRunner.php b/src/Runners/PHPUnit/SqliteRunner.php index 8c0420d..bab9a7b 100644 --- a/src/Runners/PHPUnit/SqliteRunner.php +++ b/src/Runners/PHPUnit/SqliteRunner.php @@ -11,6 +11,11 @@ class SqliteRunner extends WrapperRunner { + /** + * @var SqliteWorker[] + */ + protected $workers; + /** @var PDO */ private $db; diff --git a/src/Runners/PHPUnit/Worker/WrapperWorker.php b/src/Runners/PHPUnit/Worker/WrapperWorker.php index 575026f..6059f1b 100644 --- a/src/Runners/PHPUnit/Worker/WrapperWorker.php +++ b/src/Runners/PHPUnit/Worker/WrapperWorker.php @@ -17,7 +17,7 @@ class WrapperWorker extends BaseWorker private $commands = []; /** - * @var ExecutableTest + * @var null|ExecutableTest */ private $currentlyExecuting; From cd8032ae7b9de5bf66276ba9fad26a225c2c487a Mon Sep 17 00:00:00 2001 From: Filippo Tessarotto Date: Tue, 21 Jul 2020 12:38:58 +0200 Subject: [PATCH 16/34] PHPStan level 4 --- phpstan.neon.dist | 61 +++++++++++++++++++++++++- src/Runners/PHPUnit/Configuration.php | 2 +- src/Runners/PHPUnit/SuiteLoader.php | 4 +- src/Runners/PHPUnit/TestFileLoader.php | 4 -- 4 files changed, 62 insertions(+), 9 deletions(-) diff --git a/phpstan.neon.dist b/phpstan.neon.dist index e44fc43..90f0062 100644 --- a/phpstan.neon.dist +++ b/phpstan.neon.dist @@ -1,5 +1,5 @@ includes: - - phar://phpstan.phar/conf/config.level3.neon + - phar://phpstan.phar/conf/config.level4.neon - vendor/phpstan/phpstan-phpunit/extension.neon parameters: @@ -10,4 +10,61 @@ parameters: - src/ - test/ excludes_analyse: - - test/fixtures/fatal-tests/ + - test/fixtures/fatal-tests/* + ignoreErrors: + # @see https://github.com/phpstan/phpstan-src/pull/281 + - + message: "#^Strict comparison using \\=\\=\\= between int and false will always evaluate to false\\.$#" + count: 1 + path: src/Runners/PHPUnit/SqliteRunner.php + + # Known fixtures + - + message: "#^Call to method PHPUnit\\\\Framework\\\\Assert\\:\\:assertTrue\\(\\) with false will always evaluate to false\\.$#" + count: 1 + path: test/fixtures/excluded-tests/excluded/ExcludedFailingTest.php + + - + message: "#^Call to method PHPUnit\\\\Framework\\\\Assert\\:\\:assertFalse\\(\\) with true will always evaluate to false\\.$#" + count: 1 + path: test/fixtures/failing-tests/FailingTest.php + + - + message: "#^Call to method PHPUnit\\\\Framework\\\\Assert\\:\\:assertTrue\\(\\) with false will always evaluate to false\\.$#" + count: 1 + path: test/fixtures/failing-tests/FailingTest.php + + - + message: "#^Call to method PHPUnit\\\\Framework\\\\Assert\\:\\:assertFalse\\(\\) with true will always evaluate to false\\.$#" + count: 1 + path: test/fixtures/failing-tests/StopOnFailureTest.php + + - + message: "#^Call to method PHPUnit\\\\Framework\\\\Assert\\:\\:assertTrue\\(\\) with false will always evaluate to false\\.$#" + count: 1 + path: test/fixtures/failing-tests/StopOnFailureTest.php + + - + message: "#^Call to method PHPUnit\\\\Framework\\\\Assert\\:\\:assertFalse\\(\\) with true will always evaluate to false\\.$#" + count: 1 + path: test/fixtures/failing-tests/UnitTestWithClassAnnotationTest.php + + - + message: "#^Unreachable statement \\- code above always terminates\\.$#" + count: 1 + path: test/fixtures/failing-tests/UnitTestWithErrorTest.php + + - + message: "#^Call to method PHPUnit\\\\Framework\\\\Assert\\:\\:assertFalse\\(\\) with true will always evaluate to false\\.$#" + count: 1 + path: test/fixtures/failing-tests/UnitTestWithMethodAnnotationsTest.php + + - + message: "#^Call to method PHPUnit\\\\Framework\\\\Assert\\:\\:assertFalse\\(\\) with true will always evaluate to false\\.$#" + count: 1 + path: test/fixtures/slow-tests/LongRunningTest.php + + - + message: "#^Call to method PHPUnit\\\\Framework\\\\Assert\\:\\:assertTrue\\(\\) with false will always evaluate to false\\.$#" + count: 1 + path: test/fixtures/wrapper-runner-exit-code-tests/FailureTest.php diff --git a/src/Runners/PHPUnit/Configuration.php b/src/Runners/PHPUnit/Configuration.php index 6899c81..5cc8377 100644 --- a/src/Runners/PHPUnit/Configuration.php +++ b/src/Runners/PHPUnit/Configuration.php @@ -20,7 +20,7 @@ class Configuration protected $path; /** - * @var \SimpleXMLElement + * @var false|\SimpleXMLElement */ protected $xml; diff --git a/src/Runners/PHPUnit/SuiteLoader.php b/src/Runners/PHPUnit/SuiteLoader.php index 5f003de..26ba1b6 100644 --- a/src/Runners/PHPUnit/SuiteLoader.php +++ b/src/Runners/PHPUnit/SuiteLoader.php @@ -20,7 +20,7 @@ class SuiteLoader protected $files = []; /** - * @var array + * @var null|array */ protected $suitesName = null; @@ -39,7 +39,7 @@ class SuiteLoader protected $configuration; /** - * @var Options + * @var null|Options */ public $options; diff --git a/src/Runners/PHPUnit/TestFileLoader.php b/src/Runners/PHPUnit/TestFileLoader.php index 056afe6..b41a88d 100644 --- a/src/Runners/PHPUnit/TestFileLoader.php +++ b/src/Runners/PHPUnit/TestFileLoader.php @@ -101,10 +101,6 @@ public function loadPath(string $path, string $pattern = null): array $pattern = $pattern ?? self::TEST_PATTERN; $path = $path ?: $this->options->path; - if ($path instanceof SuitePath) { - $pattern = $path->getPattern(); - $path = $path->getPath(); - } if (!\file_exists($path)) { throw new \InvalidArgumentException("$path is not a valid directory or file"); From c7f609a985f4d957b71dd4959c34ada2f4822588 Mon Sep 17 00:00:00 2001 From: Filippo Tessarotto Date: Tue, 21 Jul 2020 12:42:49 +0200 Subject: [PATCH 17/34] PHPStan level 5 --- phpstan.neon.dist | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/phpstan.neon.dist b/phpstan.neon.dist index 90f0062..a8e8e63 100644 --- a/phpstan.neon.dist +++ b/phpstan.neon.dist @@ -1,5 +1,5 @@ includes: - - phar://phpstan.phar/conf/config.level4.neon + - phar://phpstan.phar/conf/config.level5.neon - vendor/phpstan/phpstan-phpunit/extension.neon parameters: @@ -18,6 +18,17 @@ parameters: count: 1 path: src/Runners/PHPUnit/SqliteRunner.php + # Symfony 3.4 + - + message: "#^Parameter \\#1 \\$command of class Symfony\\\\Component\\\\Process\\\\Process constructor expects array, string given\\.$#" + count: 1 + path: src/Console/VersionProvider.php + + - + message: "#^Parameter \\#1 \\$command of class Symfony\\\\Component\\\\Process\\\\Process constructor expects array, string given\\.$#" + count: 1 + path: src/Runners/PHPUnit/ExecutableTest.php + # Known fixtures - message: "#^Call to method PHPUnit\\\\Framework\\\\Assert\\:\\:assertTrue\\(\\) with false will always evaluate to false\\.$#" From e3bd450e5173d69641629dbfafe767b6c1cd3c64 Mon Sep 17 00:00:00 2001 From: Filippo Tessarotto Date: Tue, 21 Jul 2020 12:46:53 +0200 Subject: [PATCH 18/34] Analyse binaries as well --- phpstan.neon.dist | 3 +++ 1 file changed, 3 insertions(+) diff --git a/phpstan.neon.dist b/phpstan.neon.dist index a8e8e63..05d1e79 100644 --- a/phpstan.neon.dist +++ b/phpstan.neon.dist @@ -7,6 +7,9 @@ parameters: bootstrapFiles: - test/constants.php paths: + - bin/paratest + - bin/phpunit-sqlite-wrapper + - bin/phpunit-wrapper - src/ - test/ excludes_analyse: From f5af41de6f52f3420755884196d0e61c4b2ca1da Mon Sep 17 00:00:00 2001 From: Filippo Tessarotto Date: Tue, 21 Jul 2020 12:55:03 +0200 Subject: [PATCH 19/34] Tests: run with PCOV and SQLite --- .github/workflows/integrate.yaml | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/.github/workflows/integrate.yaml b/.github/workflows/integrate.yaml index 92f906c..f8a8b95 100644 --- a/.github/workflows/integrate.yaml +++ b/.github/workflows/integrate.yaml @@ -31,10 +31,10 @@ jobs: - name: "Install PHP" uses: "shivammathur/setup-php@v2" with: - coverage: "none" + coverage: "pcov" php-version: "${{ matrix.php-version }}" - ini-values: memory_limit=-1 tools: composer:v1, cs2pr + extensions: sqlite - name: "Get composer cache directory" id: composercache @@ -77,7 +77,6 @@ jobs: with: coverage: "none" php-version: "${{ matrix.php-version }}" - ini-values: memory_limit=-1 tools: composer:v1, cs2pr - name: "Get composer cache directory" @@ -116,7 +115,6 @@ jobs: with: coverage: "none" php-version: "${{ matrix.php-version }}" - ini-values: memory_limit=-1 tools: composer:v1, cs2pr - name: "Get composer cache directory" @@ -155,7 +153,6 @@ jobs: with: coverage: "none" php-version: "${{ matrix.php-version }}" - ini-values: memory_limit=-1 tools: composer:v1, cs2pr - name: "Get composer cache directory" From 71a151d6ed9898e5bd34cecdf983dec1637488cb Mon Sep 17 00:00:00 2001 From: Filippo Tessarotto Date: Tue, 21 Jul 2020 14:04:49 +0200 Subject: [PATCH 20/34] Lint composer.json file (#460) * Lint composer.json file * Tools availabile from v2.4.0 * Specific version is the tag * Tools must be specified, of course * Composer normalize should run in dry-run to have an exit code feedback * Normalize composer.json * Normalize composer.json: ok, good boy --- .github/workflows/integrate.yaml | 47 +++++++++++++++++++++++ composer-require-checker.json | 7 ++++ composer.json | 66 +++++++++++++++++++------------- 3 files changed, 93 insertions(+), 27 deletions(-) create mode 100644 composer-require-checker.json diff --git a/.github/workflows/integrate.yaml b/.github/workflows/integrate.yaml index f8a8b95..0dbe45a 100644 --- a/.github/workflows/integrate.yaml +++ b/.github/workflows/integrate.yaml @@ -7,6 +7,53 @@ on: - "master" jobs: + composer-json-lint: + name: "Lint composer.json" + + runs-on: "ubuntu-latest" + + strategy: + matrix: + php-version: + - "7.4" + + steps: + - name: "Checkout" + uses: "actions/checkout@v2" + + - name: "Install PHP" + uses: "shivammathur/setup-php@v2" + with: + coverage: "none" + php-version: "${{ matrix.php-version }}" + tools: composer:v1, cs2pr, composer-normalize, composer-require-checker, composer-unused + + - name: "Get composer cache directory" + id: composercache + run: echo "::set-output name=dir::$(composer config cache-files-dir)" + + - name: "Cache dependencies" + uses: actions/cache@v2 + with: + path: ${{ steps.composercache.outputs.dir }} + key: ${{ runner.os }}-php-${{ matrix.php-version }}-${{ matrix.dependencies }}-composer-${{ hashFiles('**/composer.json') }} + restore-keys: ${{ runner.os }}-php-${{ matrix.php-version }}-${{ matrix.dependencies }}-composer- + + - name: "Install dependencies" + run: "composer update --no-interaction --no-progress" + + - name: "Validate composer.json" + run: "composer validate" + + - name: "Normalize composer.json" + run: "composer-normalize --dry-run" + + - name: "Check composer.json explicit dependencies" + run: "composer-require-checker check --config-file=$(realpath composer-require-checker.json)" + + - name: "Check composer.json unused dependencies" + run: "composer-unused" + tests: name: "Tests" diff --git a/composer-require-checker.json b/composer-require-checker.json new file mode 100644 index 0000000..5d0e97f --- /dev/null +++ b/composer-require-checker.json @@ -0,0 +1,7 @@ +{ + "symbol-whitelist" : [ + "null", "true", "false", + "static", "self", "parent", + "array", "string", "int", "float", "bool", "iterable", "callable", "void", "object" + ] +} diff --git a/composer.json b/composer.json index fe587de..f87a40d 100644 --- a/composer.json +++ b/composer.json @@ -1,39 +1,48 @@ { "name": "brianium/paratest", + "type": "library", + "description": "Parallel testing for PHP", + "keywords": [ + "testing", + "PHPUnit", + "concurrent", + "parallel" + ], + "homepage": "https://github.com/paratestphp/paratest", + "license": "MIT", + "authors": [ + { + "name": "Brian Scaturro", + "email": "scaturrob@gmail.com", + "homepage": "http://brianscaturro.com", + "role": "Lead" + } + ], "require": { "php": "^7.3", + "ext-dom": "*", + "ext-json": "*", "ext-pcre": "*", + "ext-pdo": "*", "ext-reflection": "*", "ext-simplexml": "*", "brianium/habitat": "1.0.0", + "phpunit/php-code-coverage": "^8.0", "phpunit/php-timer": "^5.0", "phpunit/phpunit": "^9.2", - "symfony/console": "^3.4||^4.0||^5.0", - "symfony/process": "^3.4||^4.0||^5.0", - "phpunit/php-code-coverage": "^8.0" + "symfony/console": "^3.4 || ^4.0 || ^5.0", + "symfony/process": "^3.4 || ^4.0 || ^5.0" }, "require-dev": { "phpstan/phpstan": "^0.12.33", "phpstan/phpstan-phpunit": "^0.12.12", "squizlabs/php_codesniffer": "^3.5" }, - "type": "library", - "description": "Parallel testing for PHP", - "keywords": ["testing","PHPUnit", "concurrent", "parallel"], - "homepage": "https://github.com/paratestphp/paratest", - "license": "MIT", - "authors": [ - { - "name": "Brian Scaturro", - "email": "scaturrob@gmail.com", - "homepage": "http://brianscaturro.com", - "role": "Lead" - } - ], - "bin": ["bin/paratest"], "autoload": { "psr-4": { - "ParaTest\\": ["src/"] + "ParaTest\\": [ + "src/" + ] } }, "autoload-dev": { @@ -41,36 +50,39 @@ "ParaTest\\Tests\\": "test/" } }, + "bin": [ + "bin/paratest" + ], "scripts": { + "static-analysis": [ + "vendor/bin/phpstan analyse" + ], "style": [ "vendor/bin/phpcs" ], "style-fix": [ "vendor/bin/phpcbf" ], - "static-analysis": [ - "vendor/bin/phpstan analyse" - ], "test": [ "phpunit" ], - "test-unit": [ - "phpunit test/Unit/" - ], "test-functional": [ "phpunit test/Functional/" ], "test-paratest": [ "bin/paratest" + ], + "test-unit": [ + "phpunit test/Unit/" ] }, "scripts-descriptions": { + "static-analysis": "Run static analysis", "style": "Run style checks (only dry run - no fixing!)", "style-fix": "Run style checks and fix violations", - "static-analysis": "Run static analysis", "test": "Run all tests", - "test-unit": "Run only unit tests", "test-functional": "Run only functional tests", - "test-paratest": "Run all tests with paratest itself" + "test-paratest": "Run all tests with paratest itself", + "test-unit": "Run only unit tests" } } From cabf5d14427beb19828a3fa74219e9cfd5afbb4a Mon Sep 17 00:00:00 2001 From: Filippo Tessarotto Date: Tue, 21 Jul 2020 14:17:44 +0200 Subject: [PATCH 21/34] .gitattributes: add missing export-ignore (#462) --- .gitattributes | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitattributes b/.gitattributes index 52a9ec6..a7dcd17 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,7 +1,10 @@ /.gitattributes export-ignore /.gitignore export-ignore /.travis.yml export-ignore +/composer-require-checker.json export-ignore /box.json.dist export-ignore /phpcs.xml.dist export-ignore +/phpstan.neon.dist export-ignore /phpunit.xml.dist export-ignore +/.github/ export-ignore /test/ export-ignore From 2782afd4c174cc4846ccbe4244feadf760717a38 Mon Sep 17 00:00:00 2001 From: Filippo Tessarotto Date: Fri, 24 Jul 2020 08:45:33 +0200 Subject: [PATCH 22/34] Run tests against Windows (#463) --- .github/workflows/integrate.yaml | 6 +- bin/paratest | 6 +- ...ite-wrapper => phpunit-sqlite-wrapper.php} | 18 +- bin/{phpunit-wrapper => phpunit-wrapper.php} | 14 +- composer.json | 4 +- docs/code-coverage.md | 2 +- docs/logging.md | 4 +- phpstan.neon.dist | 14 +- src/Console/Testers/PHPUnit.php | 6 +- src/Console/VersionProvider.php | 5 +- src/Runners/PHPUnit/ExecutableTest.php | 125 +- src/Runners/PHPUnit/FullSuite.php | 4 +- src/Runners/PHPUnit/Options.php | 39 +- src/Runners/PHPUnit/SqliteRunner.php | 6 +- src/Runners/PHPUnit/TestFileLoader.php | 1 + src/Runners/PHPUnit/Worker/BaseWorker.php | 15 +- src/Runners/PHPUnit/Worker/WrapperWorker.php | 14 +- src/Runners/PHPUnit/WrapperRunner.php | 13 +- .../Coverage/CoverageMergerTest.php | 4 +- .../Coverage/CoverageReporterTest.php | 17 +- test/Functional/PHPUnitTest.php | 9 + test/Functional/ParaTestInvoker.php | 9 +- .../Functional/Runners/PHPUnit/WorkerTest.php | 56 +- test/Functional/WrapperRunnerTest.php | 3 + test/TestBase.php | 4 +- test/Unit/Coverage/CoverageMergerTest.php | 8 +- .../Runners/PHPUnit/ExecutableTestTest.php | 60 +- .../Runners/PHPUnit/ResultPrinterTest.php | 34 +- .../Runners/PHPUnit/WrapperRunnerTest.php | 20 + test/constants.php | 1 - test/fixtures/chdirBootstrap.php | 2 +- .../result_printer_test-windows.cov | 5900 +++++++++++++++++ .../coverage-tests/runner_test-windows.cov | 3864 +++++++++++ 33 files changed, 10060 insertions(+), 227 deletions(-) rename bin/{phpunit-sqlite-wrapper => phpunit-sqlite-wrapper.php} (63%) mode change 100755 => 100644 rename bin/{phpunit-wrapper => phpunit-wrapper.php} (80%) create mode 100644 test/Unit/Runners/PHPUnit/WrapperRunnerTest.php create mode 100644 test/fixtures/coverage-tests/result_printer_test-windows.cov create mode 100644 test/fixtures/coverage-tests/runner_test-windows.cov diff --git a/.github/workflows/integrate.yaml b/.github/workflows/integrate.yaml index 0dbe45a..beb8896 100644 --- a/.github/workflows/integrate.yaml +++ b/.github/workflows/integrate.yaml @@ -57,10 +57,13 @@ jobs: tests: name: "Tests" - runs-on: "ubuntu-latest" + runs-on: ${{ matrix.os }} strategy: matrix: + os: + - "ubuntu-latest" + - "windows-latest" php-version: - "7.3" - "7.4" @@ -103,6 +106,7 @@ jobs: run: "composer update --no-interaction --no-progress" - name: "Run tests" + timeout-minutes: 10 run: "vendor/bin/phpunit" coding-standards: diff --git a/bin/paratest b/bin/paratest index 6cfd550..55a4c6c 100755 --- a/bin/paratest +++ b/bin/paratest @@ -2,9 +2,9 @@ query('SELECT id, command FROM tests WHERE reserved_by_process_id IS NULL ORDER BY file_name LIMIT 1')->fetch()) { @@ -28,10 +27,7 @@ } try { - if (!preg_match_all('/\'([^\']*)\'[ ]?/', $test['command'], $arguments)) { - throw new \Exception("Failed to parse arguments from command line: \"" . $test['command'] . "\""); - } - $_SERVER['argv'] = $arguments[1]; + $_SERVER['argv'] = unserialize($test['command']); PHPUnit\TextUI\Command::main(false); } finally { diff --git a/bin/phpunit-wrapper b/bin/phpunit-wrapper.php similarity index 80% rename from bin/phpunit-wrapper rename to bin/phpunit-wrapper.php index 2802cb2..48254e0 100644 --- a/bin/phpunit-wrapper +++ b/bin/phpunit-wrapper.php @@ -2,9 +2,9 @@ echo "Worker starting\n"; $composerAutoloadFiles = [ - __DIR__ . '/../../../autoload.php', - __DIR__ . '/../../vendor/autoload.php', - __DIR__ . '/../vendor/autoload.php' + dirname(__DIR__, 3) . DIRECTORY_SEPARATOR . 'autoload.php', + dirname(__DIR__, 2) . DIRECTORY_SEPARATOR . 'vendor' . DIRECTORY_SEPARATOR . 'autoload.php', + dirname(__DIR__) . DIRECTORY_SEPARATOR . 'vendor' . DIRECTORY_SEPARATOR . 'autoload.php' ]; foreach ($composerAutoloadFiles as $file) { @@ -46,6 +46,9 @@ echo "EXITED\n"; exit($lastExitCode); } + + $arguments = unserialize($command); + $command = implode(' ', $arguments); echo "Executing: $command\n"; $info = []; @@ -56,10 +59,7 @@ $infoText = implode(PHP_EOL,$info).PHP_EOL; $logInfo($infoText); - if (!preg_match_all('/\'([^\']*)\'[ ]?/', $command, $arguments)) { - throw new \Exception("Failed to parse arguments from command line: \"" . $command . "\""); - } - $_SERVER['argv'] = $arguments[1]; + $_SERVER['argv'] = $arguments; ob_start(); $lastExitCode = PHPUnit\TextUI\Command::main(false); diff --git a/composer.json b/composer.json index f87a40d..d558701 100644 --- a/composer.json +++ b/composer.json @@ -30,8 +30,8 @@ "phpunit/php-code-coverage": "^8.0", "phpunit/php-timer": "^5.0", "phpunit/phpunit": "^9.2", - "symfony/console": "^3.4 || ^4.0 || ^5.0", - "symfony/process": "^3.4 || ^4.0 || ^5.0" + "symfony/console": "^4.4 || ^5.0", + "symfony/process": "^4.4 || ^5.0" }, "require-dev": { "phpstan/phpstan": "^0.12.33", diff --git a/docs/code-coverage.md b/docs/code-coverage.md index 51ede00..b5f288c 100644 --- a/docs/code-coverage.md +++ b/docs/code-coverage.md @@ -467,7 +467,7 @@ Running phpunit in 1 process with /codebase/paratest/vendor/phpunit/phpunit/phpu Configuration read from /codebase/paratest/phpunit.xml.dist -Starting WrapperWorker via: PARATEST=1 XDEBUG_CONFIG="true" TEST_TOKEN=1 UNIQUE_TEST_TOKEN=5c4af2d88c0d9 /usr/bin/php7.2 "/codebase/paratest/bin/phpunit-wrapper" +Starting WrapperWorker via: PARATEST=1 XDEBUG_CONFIG="true" TEST_TOKEN=1 UNIQUE_TEST_TOKEN=5c4af2d88c0d9 /usr/bin/php7.2 "/codebase/paratest/bin/phpunit-wrapper.php" Executing test via: '/codebase/paratest/vendor/phpunit/phpunit/phpunit' '--configuration' '/codebase/paratest/phpunit.xml.dist' '--log-junit' '/tmp/PT_tIUjT5' 'ParaTest\Util\StrTest' 'test/unit/Util/StrTest.php' ..... diff --git a/docs/logging.md b/docs/logging.md index 7ebf2a7..d2ef772 100644 --- a/docs/logging.md +++ b/docs/logging.md @@ -1,5 +1,5 @@ # Logging WrapperRunner output -The `--runner WrapperRunner` option will start the script in `bin/phpunit-wrapper` as a long running process +The `--runner WrapperRunner` option will start the script in `bin/phpunit-wrapper.php` as a long running process and send individual tests in via stdin/pipes. In order to make the execution of the process easier to understand, you can set the environment variable `PT_LOGGING_ENABLE` to true. @@ -24,7 +24,7 @@ $testToken = getenv("TEST_TOKEN") ?: "no_test_token"; $filename = "paratest_t-{$testToken}_ut-{$uniqueTestToken}_r-{$rand}.log"; $path = sys_get_temp_dir()."/".$filename; ```` -If in doubt just check the contents of `bin/phpunit-wrapper`. +If in doubt just check the contents of `bin/phpunit-wrapper.php`. The resulting file names look like this: ```` diff --git a/phpstan.neon.dist b/phpstan.neon.dist index 05d1e79..7db4bef 100644 --- a/phpstan.neon.dist +++ b/phpstan.neon.dist @@ -7,9 +7,8 @@ parameters: bootstrapFiles: - test/constants.php paths: + - bin/ - bin/paratest - - bin/phpunit-sqlite-wrapper - - bin/phpunit-wrapper - src/ - test/ excludes_analyse: @@ -21,17 +20,6 @@ parameters: count: 1 path: src/Runners/PHPUnit/SqliteRunner.php - # Symfony 3.4 - - - message: "#^Parameter \\#1 \\$command of class Symfony\\\\Component\\\\Process\\\\Process constructor expects array, string given\\.$#" - count: 1 - path: src/Console/VersionProvider.php - - - - message: "#^Parameter \\#1 \\$command of class Symfony\\\\Component\\\\Process\\\\Process constructor expects array, string given\\.$#" - count: 1 - path: src/Runners/PHPUnit/ExecutableTest.php - # Known fixtures - message: "#^Call to method PHPUnit\\\\Framework\\\\Assert\\:\\:assertTrue\\(\\) with false will always evaluate to false\\.$#" diff --git a/src/Console/Testers/PHPUnit.php b/src/Console/Testers/PHPUnit.php index 77b168c..25b2fb5 100644 --- a/src/Console/Testers/PHPUnit.php +++ b/src/Console/Testers/PHPUnit.php @@ -289,8 +289,10 @@ private function initializeRunner(InputInterface $input): BaseRunner { if ($input->getOption('runner')) { $runnerClass = $input->getOption('runner') ?: ''; - $runnerClass = \class_exists($runnerClass) ? - $runnerClass : ('\\ParaTest\\Runners\\PHPUnit\\' . $runnerClass); + $runnerClass = \class_exists($runnerClass) + ? $runnerClass + : ('\\ParaTest\\Runners\\PHPUnit\\' . $runnerClass) + ; } else { $runnerClass = Runner::class; } diff --git a/src/Console/VersionProvider.php b/src/Console/VersionProvider.php index ee98d79..9c21c51 100644 --- a/src/Console/VersionProvider.php +++ b/src/Console/VersionProvider.php @@ -43,10 +43,7 @@ public function getParaTestVersion() public function getGitVersion() { $cmd = 'git describe --tags --always --first-parent'; - $process = \method_exists(Process::class, 'fromShellCommandline') ? - Process::fromShellCommandline($cmd, __DIR__) : - new Process($cmd, __DIR__); - + $process = Process::fromShellCommandline($cmd, __DIR__); if ($process->run() !== 0) { return null; } diff --git a/src/Runners/PHPUnit/ExecutableTest.php b/src/Runners/PHPUnit/ExecutableTest.php index 7b36957..a5798f3 100644 --- a/src/Runners/PHPUnit/ExecutableTest.php +++ b/src/Runners/PHPUnit/ExecutableTest.php @@ -167,8 +167,8 @@ public function setLastCommand(string $command) * @param string $binary * @param array $options * @param array $environmentVariables - * @param string|null $passthru - * @param string|null $passthruPhp + * @param string[]|null $passthru + * @param string[]|null $passthruPhp * * @return $this */ @@ -176,8 +176,8 @@ public function run( string $binary, array $options = [], array $environmentVariables = [], - ?string $passthru = null, - ?string $passthruPhp = null + ?array $passthru = null, + ?array $passthruPhp = null ) { $environmentVariables['PARATEST'] = 1; $this->handleEnvironmentVariables($environmentVariables); @@ -187,21 +187,7 @@ public function run( $this->assertValidCommandLineLength($command); $this->setLastCommand($command); - $this->process = \method_exists(Process::class, 'fromShellCommandline') ? - Process::fromShellCommandline($command, null, $environmentVariables) : - new Process($command, null, $environmentVariables); - - if (\method_exists($this->process, 'inheritEnvironmentVariables')) { - $reflectionMethod = new \ReflectionMethod($this->process, 'inheritEnvironmentVariables'); - if (\stripos($reflectionMethod->getDocComment() ?: '', '@deprecated') === false) { - // no such method in 3.0, but emits warning if this isn't done in 3.3, - // and is deprecated starting in symfony/process 4.4 because it became the default. - // - // This checks for deprecation because E_USER_DEPRECATED may cause problems - // in custom error handlers in test bootstrap files - $this->process->inheritEnvironmentVariables(); - } - } + $this->process = Process::fromShellCommandline($command, null, $environmentVariables); $this->process->start(); return $this; @@ -213,29 +199,26 @@ public function run( * * @param string $binary * @param array $options - * @param string|null $passthru - * @param string|null $passthruPhp + * @param string[]|null $passthru + * @param string[]|null $passthruPhp * * @return string */ protected function getFullCommandlineString( string $binary, array $options, - ?string $passthru = null, - ?string $passthruPhp = null + ?array $passthru = null, + ?array $passthruPhp = null ) { $finder = new PhpExecutableFinder(); - $args = []; - $args['php'] = $finder->find(); - if (!empty($passthruPhp)) { - $args['phpOptions'] = $passthruPhp; + $args = [$finder->find()]; + if (null !== $passthruPhp) { + $args = array_merge($args, $passthruPhp); } - $args['phpunit'] = $this->command($binary, $options, $passthru); - - $command = \implode(' ', $args); + $args = array_merge($args, $this->commandArguments($binary, $options, $passthru)); - return $command; + return (new Process($args))->getCommandLine(); } /** @@ -249,22 +232,47 @@ public function getToken(): int } /** - * Generate command line with passed options suitable to handle through paratest. + * Generate command line arguments with passed options suitable to handle through paratest. * * @param string $binary executable binary name * @param array $options command line options - * @param string|null $passthru + * @param string[]|null $passthru * - * @return string command line + * @return string[] command line arguments */ - public function command(string $binary, array $options = [], ?string $passthru = null): string + public function commandArguments(string $binary, array $options = [], ?array $passthru = null): array { $options = \array_merge($this->prepareOptions($options), ['log-junit' => $this->getTempFile()]); $options = $this->redirectCoverageOption($options); - $cmd = $this->getCommandString($binary, $options, $passthru); + $arguments = [$binary]; + if (null !== $passthru) { + $arguments = array_merge($arguments, $passthru); + } + foreach ($options as $key => $value) { + $arguments[] = "--$key"; + if ($value !== null) { + $arguments[] = $value; + } + } + $arguments[] = $this->getPath(); + $arguments = array_map('strval', $arguments); - return $cmd; + return $arguments; + } + + /** + * Generate command line with passed options suitable to handle through paratest. + * + * @param string $binary executable binary name + * @param array $options command line options + * @param string[]|null $passthru + * + * @return string command line + */ + public function command(string $binary, array $options = [], ?array $passthru = null): string + { + return (new Process($this->commandArguments($binary, $options, $passthru)))->getCommandLine(); } /** @@ -341,49 +349,6 @@ protected function prepareOptions(array $options): array return $options; } - /** - * Returns the command string that will be executed - * by proc_open. - * - * @param string $binary - * @param array $options - * @param string|null $passthru - * - * @return mixed - */ - protected function getCommandString(string $binary, array $options = [], ?string $passthru = null) - { - // The order we add stuff into $arguments is important - $arguments = [$binary]; - // Note: - // the arguments MUST come last and we need to "somehow" - // merge the passthru string in there. - // Thus, we "split" the command creation here. - // For a clean solution, we would need to manually parse and verify - // the passthru. I'll leave that as a - // TODO - // @see https://stackoverflow.com/a/34871367/413531 - // @see https://github.com/symfony/console/blob/68001d4b65139ef4f22da581a8da7be714218aec/Input/StringInput.php - $cmd = (new Process($arguments))->getCommandLine(); - if (!empty($passthru)) { - $cmd .= ' ' . $passthru; - } - - $arguments = []; - foreach ($options as $key => $value) { - $arguments[] = "--$key"; - if ($value !== null) { - $arguments[] = $value; - } - } - - $arguments[] = $this->getPath(); - - $args = (new Process($arguments))->getCommandLine(); - - return $cmd . ' ' . $args; - } - /** * Checks environment variables for the presence of a TEST_TOKEN * variable and sets $this->token based on its value. diff --git a/src/Runners/PHPUnit/FullSuite.php b/src/Runners/PHPUnit/FullSuite.php index 692dc73..fbda8aa 100644 --- a/src/Runners/PHPUnit/FullSuite.php +++ b/src/Runners/PHPUnit/FullSuite.php @@ -31,9 +31,9 @@ public function __construct($suiteName, $configPath) /** * {@inheritdoc} */ - protected function getCommandString(string $binary, array $options = [], ?string $passthru = null) + public function commandArguments(string $binary, array $options = [], ?array $passthru = null): array { - return parent::getCommandString( + return parent::commandArguments( $binary, \array_merge( $options, diff --git a/src/Runners/PHPUnit/Options.php b/src/Runners/PHPUnit/Options.php index d622fb0..6287730 100644 --- a/src/Runners/PHPUnit/Options.php +++ b/src/Runners/PHPUnit/Options.php @@ -4,6 +4,8 @@ namespace ParaTest\Runners\PHPUnit; +use PHPStan\Parallel\Process; + /** * An object containing all configurable information used * to run PHPUnit via ParaTest. @@ -24,8 +26,8 @@ * @property-read string[] $excludeGroups * @property-read array $annotations * @property-read bool $parallelSuite - * @property-read string|null $passthru - * @property-read string|null $passthruPhp + * @property-read string[]|null $passthru + * @property-read string[]|null $passthruPhp * @property-read int $verbose * @property-read int $coverageTestLimit */ @@ -137,14 +139,14 @@ class Options /** * Strings that gets passed verbatim to the underlying phpunit command. * - * @var string|null + * @var string[]|null */ protected $passthru; /** * Strings that gets passed verbatim to the underlying php process. * - * @var string|null + * @var string[]|null */ protected $passthruPhp; @@ -187,8 +189,8 @@ public function __construct(array $opts = []) $this->maxBatchSize = (int) $opts['max-batch-size']; $this->filter = $opts['filter']; $this->parallelSuite = $opts['parallel-suite']; - $this->passthru = $opts['passthru'] ?? null; - $this->passthruPhp = $opts['passthru-php'] ?? null; + $this->passthru = $this->parsePassthru($opts['passthru-php'] ?? null); + $this->passthruPhp = $this->parsePassthru($opts['passthru-php'] ?? null); $this->verbose = $opts['verbose'] ?? 0; $this->coverageTestLimit = $opts['coverage-test-limit'] ?? 0; @@ -431,4 +433,29 @@ public static function getNumberOfCPUCores(): int return $cores; } + + /** + * @param string|null $param + * @return string[]|null + */ + private function parsePassthru(?string $param): ?array + { + if (null === $param) { + return null; + } + + $stringToArgumentProcess = \Symfony\Component\Process\Process::fromShellCommandline( + sprintf('%s -r "echo serialize(\\$argv);" -- %s', PHP_BINARY, $param) + ); + $stringToArgumentProcess->mustRun(); + + $passthruAsArguments = unserialize($stringToArgumentProcess->getOutput()); + array_shift($passthruAsArguments); + + if (0 === count($passthruAsArguments)) { + return null; + } + + return $passthruAsArguments; + } } diff --git a/src/Runners/PHPUnit/SqliteRunner.php b/src/Runners/PHPUnit/SqliteRunner.php index bab9a7b..a5e6891 100644 --- a/src/Runners/PHPUnit/SqliteRunner.php +++ b/src/Runners/PHPUnit/SqliteRunner.php @@ -55,7 +55,9 @@ public function run() */ protected function startWorkers(): void { - $wrapper = \realpath(__DIR__ . '/../../../bin/phpunit-sqlite-wrapper'); + $wrapper = \realpath( + dirname(__DIR__, 3) . DIRECTORY_SEPARATOR . 'bin' . DIRECTORY_SEPARATOR . 'phpunit-sqlite-wrapper.php' + ); for ($i = 1; $i <= $this->options->processes; ++$i) { $worker = new SqliteWorker($this->dbFileName); @@ -115,7 +117,7 @@ private function assignAllPendingTests(): void foreach ($this->pending as $fileName => $test) { $this->db->prepare('INSERT INTO tests (command, file_name) VALUES (:command, :fileName)') ->execute([ - ':command' => $test->command($this->options->phpunit, $this->options->filtered), + ':command' => serialize($test->commandArguments($this->options->phpunit, $this->options->filtered)), ':fileName' => $fileName, ]); } diff --git a/src/Runners/PHPUnit/TestFileLoader.php b/src/Runners/PHPUnit/TestFileLoader.php index b41a88d..f58cf3a 100644 --- a/src/Runners/PHPUnit/TestFileLoader.php +++ b/src/Runners/PHPUnit/TestFileLoader.php @@ -122,6 +122,7 @@ public function loadPath(string $path, string $pattern = null): array */ private function loadDir(string $path, string $pattern = self::TEST_PATTERN) { + $path = realpath($path); $files = \scandir($path); foreach ($files as $file) { $this->tryLoadTests($path . \DIRECTORY_SEPARATOR . $file, $pattern); diff --git a/src/Runners/PHPUnit/Worker/BaseWorker.php b/src/Runners/PHPUnit/Worker/BaseWorker.php index f96dc0a..34d9062 100644 --- a/src/Runners/PHPUnit/Worker/BaseWorker.php +++ b/src/Runners/PHPUnit/Worker/BaseWorker.php @@ -28,19 +28,20 @@ public function start( array $parameters = [], ?Options $options = null ) { - $bin = 'PARATEST=1 '; + $env = getenv(); + $env['PARATEST'] = 1; if (\is_numeric($token)) { - $bin .= 'XDEBUG_CONFIG="true" '; - $bin .= "TEST_TOKEN=$token "; + $env['XDEBUG_CONFIG'] = 'true'; + $env['TEST_TOKEN'] = $token; } if ($uniqueToken) { - $bin .= "UNIQUE_TEST_TOKEN=$uniqueToken "; + $env['UNIQUE_TEST_TOKEN'] = $uniqueToken; } $finder = new PhpExecutableFinder(); $phpExecutable = $finder->find(); - $bin .= "$phpExecutable "; + $bin = "$phpExecutable "; if ($options && $options->passthruPhp) { - $bin .= $options->passthruPhp . ' '; + $bin .= implode(' ', $options->passthruPhp) . ' '; } $bin .= " \"$wrapperBinary\""; if ($parameters) { @@ -50,7 +51,7 @@ public function start( if ($options && $options->verbose) { echo "Starting WrapperWorker via: $bin\n"; } - $process = \proc_open($bin, self::$descriptorspec, $pipes); + $process = \proc_open($bin, self::$descriptorspec, $pipes, null, $env); $this->proc = \is_resource($process) ? $process : null; $this->pipes = $pipes; } diff --git a/src/Runners/PHPUnit/Worker/WrapperWorker.php b/src/Runners/PHPUnit/Worker/WrapperWorker.php index 6059f1b..300c0bc 100644 --- a/src/Runners/PHPUnit/Worker/WrapperWorker.php +++ b/src/Runners/PHPUnit/Worker/WrapperWorker.php @@ -26,11 +26,14 @@ public function stdout() return $this->pipes[1]; } - public function execute(string $testCmd) + /** + * @param string[] $testCmdArguments + */ + public function execute(array $testCmdArguments) { $this->checkStarted(); - $this->commands[] = $testCmd; - \fwrite($this->pipes[0], $testCmd . "\n"); + $this->commands[] = implode(' ', $testCmdArguments); + \fwrite($this->pipes[0], serialize($testCmdArguments) . "\n"); ++$this->inExecution; } @@ -40,12 +43,13 @@ public function assign(ExecutableTest $test, string $phpunit, array $phpunitOpti throw new Exception('Worker already has a test assigned - did you forget to call reset()?'); } $this->currentlyExecuting = $test; - $command = $test->command($phpunit, $phpunitOptions, $options->passthru); + $commandArguments = $test->commandArguments($phpunit, $phpunitOptions, $options->passthru); + $command = implode(' ', $commandArguments); if ($options->verbose) { echo "\nExecuting test via: $command\n"; } $test->setLastCommand($command); - $this->execute($command); + $this->execute($commandArguments); } public function printFeedback(ResultPrinter $printer) diff --git a/src/Runners/PHPUnit/WrapperRunner.php b/src/Runners/PHPUnit/WrapperRunner.php index baec1c8..5a7c850 100644 --- a/src/Runners/PHPUnit/WrapperRunner.php +++ b/src/Runners/PHPUnit/WrapperRunner.php @@ -27,6 +27,15 @@ class WrapperRunner extends BaseRunner */ protected $modified; + public function __construct(array $opts = []) + { + if (static::class === __CLASS__ && defined('PHP_WINDOWS_VERSION_BUILD')) { + throw new \RuntimeException('WrapperRunner is not supported on Windows'); + } + + parent::__construct($opts); + } + public function run() { parent::run(); @@ -51,7 +60,9 @@ protected function load(SuiteLoader $loader) protected function startWorkers() { - $wrapper = \realpath(__DIR__ . '/../../../bin/phpunit-wrapper'); + $wrapper = \realpath( + dirname(__DIR__, 3) . DIRECTORY_SEPARATOR . 'bin' . DIRECTORY_SEPARATOR . 'phpunit-wrapper.php' + ); for ($i = 1; $i <= $this->options->processes; ++$i) { $worker = new WrapperWorker(); if ($this->options->noTestTokens) { diff --git a/test/Functional/Coverage/CoverageMergerTest.php b/test/Functional/Coverage/CoverageMergerTest.php index 33fe054..07f08cb 100644 --- a/test/Functional/Coverage/CoverageMergerTest.php +++ b/test/Functional/Coverage/CoverageMergerTest.php @@ -26,7 +26,7 @@ protected function setUp(): void static::skipIfCodeCoverageNotEnabled(); - $this->targetDir = str_replace('.', '_', uniqid('/tmp/paratest-', true)); + $this->targetDir = str_replace('.', '_', sys_get_temp_dir() . DS . uniqid('paratest-', true)); $this->removeDirectory($this->targetDir); mkdir($this->targetDir); } @@ -123,7 +123,7 @@ public function testCoverageFileIsEmpty() $this->expectException(\RuntimeException::class); $regex = '/Coverage file .*? is empty. This means a PHPUnit process has crashed./'; $this->expectExceptionMessageMatches($regex); - $filename = $this->copyCoverageFile('coverage-tests/empty_test.cov', $this->targetDir); + $filename = $this->copyCoverageFile('coverage-tests' . DS . 'empty_test.cov', $this->targetDir); $coverageMerger = new CoverageMerger(); $coverageMerger->addCoverageFromFile($filename); diff --git a/test/Functional/Coverage/CoverageReporterTest.php b/test/Functional/Coverage/CoverageReporterTest.php index bc7e8a8..e3471dc 100644 --- a/test/Functional/Coverage/CoverageReporterTest.php +++ b/test/Functional/Coverage/CoverageReporterTest.php @@ -26,7 +26,7 @@ protected function setUp(): void static::skipIfCodeCoverageNotEnabled(); - $this->targetDir = str_replace('.', '_', uniqid('/tmp/report-', true)); + $this->targetDir = str_replace('.', '_', sys_get_temp_dir() . DS . uniqid('paratest-', true)); $this->removeDirectory($this->targetDir); mkdir($this->targetDir); } @@ -75,7 +75,7 @@ public function testGeneratePhp(array $coverageFiles) $coverageMerger->addCoverageFromFile($filename1); $coverageMerger->addCoverageFromFile($filename2); - $target = $this->targetDir . '/coverage.php'; + $target = $this->targetDir . DS . 'coverage.php'; static::assertFileDoesNotExist($target); @@ -98,7 +98,7 @@ public function testGenerateClover(array $coverageFiles) $coverageMerger->addCoverageFromFile($filename1); $coverageMerger->addCoverageFromFile($filename2); - $target = $this->targetDir . '/coverage.xml'; + $target = $this->targetDir . DS . 'coverage.xml'; static::assertFileDoesNotExist($target); @@ -124,7 +124,7 @@ public function testGenerateCrap4J(array $coverageFiles) $coverageMerger->addCoverageFromFile($filename1); $coverageMerger->addCoverageFromFile($filename2); - $target = $this->targetDir . '/coverage.xml'; + $target = $this->targetDir . DS . 'coverage.xml'; static::assertFileDoesNotExist($target); @@ -151,14 +151,14 @@ public function testGenerateHtml(array $coverageFiles) $coverageMerger->addCoverageFromFile($filename1); $coverageMerger->addCoverageFromFile($filename2); - $target = $this->targetDir . '/coverage'; + $target = $this->targetDir . DS . 'coverage'; static::assertFileDoesNotExist($target); $coverageMerger->getReporter()->html($target); static::assertFileExists($target); - static::assertFileExists($target . '/index.html', 'Index html file was not generated'); + static::assertFileExists($target . DS . 'index.html', 'Index html file was not generated'); } /** @@ -167,9 +167,10 @@ public function testGenerateHtml(array $coverageFiles) public static function getReporterProvider() { $version = 'CodeCoverage >4.0'; + $windowsExt = defined('PHP_WINDOWS_VERSION_BUILD') ? '-windows' : ''; $filenames = [ - 'coverage-tests/runner_test.cov', - 'coverage-tests/result_printer_test.cov', + 'coverage-tests' . DS . 'runner_test' . $windowsExt . '.cov', + 'coverage-tests' . DS . 'result_printer_test' . $windowsExt . '.cov', ]; $reporterClass = CoverageReporter::class; diff --git a/test/Functional/PHPUnitTest.php b/test/Functional/PHPUnitTest.php index 5cd5be1..02b9c06 100644 --- a/test/Functional/PHPUnitTest.php +++ b/test/Functional/PHPUnitTest.php @@ -39,6 +39,9 @@ public function testWithJustConfiguration() ])); } + /** + * @requires OSFAMILY Linux + */ public function testWithWrapperRunner() { $this->assertTestsPassed($this->invokeParatest('passing-tests', [ @@ -104,6 +107,9 @@ public function testParatestEnvironmentVariable() )); } + /** + * @requires OSFAMILY Linux + */ public function testParatestEnvironmentVariableWithWrapperRunner() { $this->assertTestsPassed($this->invokeParatest( @@ -112,6 +118,9 @@ public function testParatestEnvironmentVariableWithWrapperRunner() )); } + /** + * @requires OSFAMILY Linux + */ public function testParatestEnvironmentVariableWithWrapperRunnerWithoutTestTokens() { $proc = $this->invokeParatest( diff --git a/test/Functional/ParaTestInvoker.php b/test/Functional/ParaTestInvoker.php index 9eb77fd..6e051a2 100644 --- a/test/Functional/ParaTestInvoker.php +++ b/test/Functional/ParaTestInvoker.php @@ -30,12 +30,7 @@ public function execute($options = [], $callback = null) { $cmd = $this->buildCommand($options); $env = defined('PHP_WINDOWS_VERSION_BUILD') ? Habitat::getAll() : null; - $proc = method_exists(Process::class, 'fromShellCommandline') ? - Process::fromShellCommandline($cmd, null, $env, null, $timeout = 600) : - new Process($cmd, null, $env, null, $timeout = 600); - if (method_exists($proc, 'inheritEnvironmentVariables')) { - $proc->inheritEnvironmentVariables(); // no such method in 3.0, but emits warning if this isn't done in 3.3 - } + $proc = Process::fromShellCommandline($cmd, null, $env, null, $timeout = 600); if (!is_callable($callback)) { $proc->run(); @@ -51,7 +46,7 @@ private function buildCommand($options = []) $cmd = sprintf( '%s %s --bootstrap %s --phpunit %s', PHP_BINARY, - defined('PHP_WINDOWS_VERSION_BUILD') ? PARA_BINARY_WINDOWS : PARA_BINARY, + PARA_BINARY, $this->bootstrap, PHPUNIT ); diff --git a/test/Functional/Runners/PHPUnit/WorkerTest.php b/test/Functional/Runners/PHPUnit/WorkerTest.php index a82fe32..f1f8d08 100644 --- a/test/Functional/Runners/PHPUnit/WorkerTest.php +++ b/test/Functional/Runners/PHPUnit/WorkerTest.php @@ -26,14 +26,14 @@ class WorkerTest extends \ParaTest\Tests\TestBase public function setUp(): void { parent::setUp(); - $this->bootstrap = PARATEST_ROOT . '/test/bootstrap.php'; - $this->phpunitWrapper = PARATEST_ROOT . '/bin/phpunit-wrapper'; + $this->bootstrap = PARATEST_ROOT . DS . 'test' . DS . 'bootstrap.php'; + $this->phpunitWrapper = PARATEST_ROOT . DS . 'bin' . DS . 'phpunit-wrapper.php'; } public function tearDown(): void { - $this->deleteIfExists('/tmp/test.xml'); - $this->deleteIfExists('/tmp/test2.xml'); + $this->deleteIfExists(sys_get_temp_dir() . DS . 'test.xml'); + $this->deleteIfExists(sys_get_temp_dir() . DS . 'test2.xml'); } private function deleteIfExists($file) @@ -43,10 +43,13 @@ private function deleteIfExists($file) } } + /** + * @requires OSFAMILY Linux + */ public function testReadsAPHPUnitCommandFromStdInAndExecutesItItsOwnProcess() { - $testLog = '/tmp/test.xml'; - $testCmd = $this->getCommand('passing-tests/TestOfUnits.php', $testLog); + $testLog = sys_get_temp_dir() . DS . 'test.xml'; + $testCmd = $this->getCommand('passing-tests' . DS . 'TestOfUnits.php', $testLog); $worker = new WrapperWorker(); $worker->start($this->phpunitWrapper); $worker->execute($testCmd); @@ -57,10 +60,13 @@ public function testReadsAPHPUnitCommandFromStdInAndExecutesItItsOwnProcess() $this->assertJUnitLogIsValid($testLog); } + /** + * @requires OSFAMILY Linux + */ public function testKnowsWhenAJobIsFinished() { - $testLog = '/tmp/test.xml'; - $testCmd = $this->getCommand('passing-tests/TestOfUnits.php', $testLog); + $testLog = sys_get_temp_dir() . DS . 'test.xml'; + $testCmd = $this->getCommand('passing-tests' . DS . 'TestOfUnits.php', $testLog); $worker = new WrapperWorker(); $worker->start($this->phpunitWrapper); $worker->execute($testCmd); @@ -69,10 +75,13 @@ public function testKnowsWhenAJobIsFinished() $this->assertJUnitLogIsValid($testLog); } + /** + * @requires OSFAMILY Linux + */ public function testTellsWhenItsFree() { - $testLog = '/tmp/test.xml'; - $testCmd = $this->getCommand('passing-tests/TestOfUnits.php', $testLog); + $testLog = sys_get_temp_dir() . DS . 'test.xml'; + $testCmd = $this->getCommand('passing-tests' . DS . 'TestOfUnits.php', $testLog); $worker = new WrapperWorker(); $worker->start($this->phpunitWrapper); $this->assertTrue($worker->isFree()); @@ -84,6 +93,9 @@ public function testTellsWhenItsFree() $this->assertTrue($worker->isFree()); } + /** + * @requires OSFAMILY Linux + */ public function testTellsWhenItsStopped() { $worker = new WrapperWorker(); @@ -97,6 +109,9 @@ public function testTellsWhenItsStopped() $this->assertFalse($worker->isRunning()); } + /** + * @requires OSFAMILY Linux + */ public function testProcessIsMarkedAsCrashedWhenItFinishesWithNonZeroExitCode() { // fake state: process has already exited (with non-zero exit code) but worker did not yet notice @@ -133,17 +148,17 @@ private function setPerReflection($instance, $property, $value) public function testCanExecuteMultiplePHPUnitCommands() { - $bin = 'bin/phpunit-wrapper'; + $bin = 'bin/phpunit-wrapper.php'; $worker = new WrapperWorker(); $worker->start($this->phpunitWrapper); - $testLog = '/tmp/test.xml'; - $testCmd = $this->getCommand('passing-tests/TestOfUnits.php', $testLog); + $testLog = sys_get_temp_dir() . DS . 'test.xml'; + $testCmd = $this->getCommand('passing-tests' . DS . 'TestOfUnits.php', $testLog); $worker->execute($testCmd); - $testLog2 = '/tmp/test2.xml'; - $testCmd2 = $this->getCommand('failing-tests/UnitTestWithErrorTest.php', $testLog2); + $testLog2 = sys_get_temp_dir() . DS . 'test2.xml'; + $testCmd2 = $this->getCommand('failing-tests' . DS . 'UnitTestWithErrorTest.php', $testLog2); $worker->execute($testCmd2); $worker->stop(); @@ -155,18 +170,19 @@ public function testCanExecuteMultiplePHPUnitCommands() private function getCommand($testFile, $logFile) { - return sprintf( - "'%s' '--bootstrap' '%s' '--log-junit' '%s' '%s'", - 'vendor/bin/phpunit', + return [ + PHPUNIT, + '--bootstrap', $this->bootstrap, + '--log-junit', $logFile, $this->fixture($testFile) - ); + ]; } private function assertJUnitLogIsValid($logFile) { - $this->assertFileExists($logFile, "Failed asserting that $logFile exists."); + $this->assertFileExists($logFile); $log = new SimpleXMLElement(file_get_contents($logFile)); $count = \count($log->testsuite->testcase); $this->assertGreaterThan(1, $count, 'Not even a test has been executed'); diff --git a/test/Functional/WrapperRunnerTest.php b/test/Functional/WrapperRunnerTest.php index 0a569b9..212accd 100644 --- a/test/Functional/WrapperRunnerTest.php +++ b/test/Functional/WrapperRunnerTest.php @@ -4,6 +4,9 @@ namespace ParaTest\Tests\Functional; +/** + * @requires OSFAMILY Linux + */ class WrapperRunnerTest extends FunctionalTestBase { private const TEST_METHODS_PER_CLASS = 5; diff --git a/test/TestBase.php b/test/TestBase.php index d3f9e5f..1b6740c 100644 --- a/test/TestBase.php +++ b/test/TestBase.php @@ -172,10 +172,10 @@ protected function removeDirectory($dirname) * * @return string Copied coverage file */ - protected function copyCoverageFile($fixture, $directory = '/tmp') + protected function copyCoverageFile($fixture, $directory) { $fixturePath = $this->fixture($fixture); - $filename = str_replace('.', '_', uniqid($directory . '/cov-', true)); + $filename = str_replace('.', '_', $directory . DS . uniqid('cov-', true)); copy($fixturePath, $filename); return $filename; diff --git a/test/Unit/Coverage/CoverageMergerTest.php b/test/Unit/Coverage/CoverageMergerTest.php index c2911ee..f0a27c4 100644 --- a/test/Unit/Coverage/CoverageMergerTest.php +++ b/test/Unit/Coverage/CoverageMergerTest.php @@ -22,8 +22,8 @@ protected function setUp(): void */ public function testSimpleMerge() { - $firstFile = PARATEST_ROOT . '/src/Logging/LogInterpreter.php'; - $secondFile = PARATEST_ROOT . '/src/Logging/MetaProvider.php'; + $firstFile = PARATEST_ROOT . DS . 'src' . DS . 'Logging' . DS . 'LogInterpreter.php'; + $secondFile = PARATEST_ROOT . DS . 'src' . DS . 'Logging' . DS . 'MetaProvider.php'; // Every time the two above files are changed, the line numbers // may change, and so these two numbers may need adjustments @@ -74,8 +74,8 @@ public function testSimpleMerge() */ public function testSimpleMergeLimited() { - $firstFile = PARATEST_ROOT . '/src/Logging/LogInterpreter.php'; - $secondFile = PARATEST_ROOT . '/src/Logging/MetaProvider.php'; + $firstFile = PARATEST_ROOT . DS . 'src' . DS . 'Logging' . DS . 'LogInterpreter.php'; + $secondFile = PARATEST_ROOT . DS . 'src' . DS . 'Logging' . DS . 'MetaProvider.php'; // Every time the two above files are changed, the line numbers // may change, and so these two numbers may need adjustments diff --git a/test/Unit/Runners/PHPUnit/ExecutableTestTest.php b/test/Unit/Runners/PHPUnit/ExecutableTestTest.php index e8dbd81..bac4b6b 100644 --- a/test/Unit/Runners/PHPUnit/ExecutableTestTest.php +++ b/test/Unit/Runners/PHPUnit/ExecutableTestTest.php @@ -24,24 +24,12 @@ public function testConstructor() $this->assertEquals('pathToFile', $this->getObjectValue($this->executableTestChild, 'path')); } - public function testGetCommandStringIncludesOptions() - { - $options = ['bootstrap' => 'test/bootstrap.php']; - $binary = '/usr/bin/phpunit'; - - $command = $this->call($this->executableTestChild, 'getCommandString', $binary, $options); - $this->assertEquals( - "'/usr/bin/phpunit' '--bootstrap' 'test/bootstrap.php' 'pathToFile'", - $command - ); - } - public function testGetCommandStringIncludesPassthruOptions() { - $options = ['bootstrap' => 'test/bootstrap.php']; + $options = ['bootstrap' => 'test' . DS . 'bootstrap.php']; $binary = '/usr/bin/phpunit'; - $passthru = "'--prepend' 'xdebug-filter.php'"; - $passthruPhp = "'-d' 'zend_extension=xdebug.so'"; + $passthru = ['--prepend', 'xdebug-filter.php']; + $passthruPhp = ['-d', 'zend_extension=xdebug.so']; $command = $this->call( $this->executableTestChild, @@ -54,17 +42,31 @@ public function testGetCommandStringIncludesPassthruOptions() // Note: // '--log-junit' '/tmp/PT_LKnfzA' // is appended by default where PT_LKnfzA is randomly generated - so we remove it from the resulting command - $command = preg_replace("# '--log-junit' '[^']+?'#", '', $command); + if (defined('PHP_WINDOWS_VERSION_BUILD')) { + $command = preg_replace("# --log-junit [^ ]+#", '', $command); + } else { + $command = preg_replace("# '--log-junit' '[^']+?'#", '', $command); + } + // Note: // The pass to the php executable depends on the system, // so we need to keep it flexible in the test $finder = new PhpExecutableFinder(); $phpExecutable = $finder->find(); - $this->assertEquals( - "$phpExecutable '-d' 'zend_extension=xdebug.so' '/usr/bin/phpunit' '--prepend' 'xdebug-filter.php' " . - "'--bootstrap' 'test/bootstrap.php' 'pathToFile'", - $command - ); + + if (defined('PHP_WINDOWS_VERSION_BUILD')) { + $this->assertEquals( + "$phpExecutable -d zend_extension=xdebug.so \"/usr/bin/phpunit\" --prepend xdebug-filter.php " . + "--bootstrap test" . DS . "bootstrap.php pathToFile", + $command + ); + } else { + $this->assertEquals( + "'$phpExecutable' '-d' 'zend_extension=xdebug.so' '/usr/bin/phpunit' '--prepend' 'xdebug-filter.php' " . + "'--bootstrap' 'test" . DS . "bootstrap.php' 'pathToFile'", + $command + ); + } } public function testCommandRedirectsCoverage() @@ -74,10 +76,18 @@ public function testCommandRedirectsCoverage() $command = $this->executableTestChild->command($binary, $options); $coverageFileName = str_replace('/', '\/', $this->executableTestChild->getCoverageFileName()); - $this->assertMatchesRegularExpression( - "/^'\/usr\/bin\/phpunit' '--a' 'b' '--coverage-php' '$coverageFileName' '.*'/", - $command - ); + + if (defined('PHP_WINDOWS_VERSION_BUILD')) { + $this->assertMatchesRegularExpression( + '#^"/usr/bin/phpunit" --a b --coverage-php ' . preg_quote($coverageFileName, '#') . ' .*#', + $command + ); + } else { + $this->assertMatchesRegularExpression( + "#^'/usr/bin/phpunit' '--a' 'b' '--coverage-php' '" . $coverageFileName . "' '.*'#", + $command + ); + } } public function testHandleEnvironmentVariablesAssignsToken() diff --git a/test/Unit/Runners/PHPUnit/ResultPrinterTest.php b/test/Unit/Runners/PHPUnit/ResultPrinterTest.php index 0dae941..11e19ee 100644 --- a/test/Unit/Runners/PHPUnit/ResultPrinterTest.php +++ b/test/Unit/Runners/PHPUnit/ResultPrinterTest.php @@ -99,9 +99,13 @@ public function testStartSetsWidthAndMaxColumn() $this->printer->addTest($suite); $this->getStartOutput(new Options()); $numTestsWidth = $this->getObjectValue($this->printer, 'numTestsWidth'); - $maxColumn = $this->getObjectValue($this->printer, 'maxColumn'); $this->assertEquals(3, $numTestsWidth); - $this->assertEquals(63, $maxColumn); + $maxExpectedColumun = 63; + if (defined('PHP_WINDOWS_VERSION_BUILD')) { + $maxExpectedColumun -= 1; + } + $maxColumn = $this->getObjectValue($this->printer, 'maxColumn'); + $this->assertEquals($maxExpectedColumun, $maxColumn); } public function testStartPrintsOptionInfoAndConfigurationDetailsIfConfigFilePresent() @@ -284,14 +288,21 @@ public function testPrintFeedbackForMoreThan100Suites() $this->printer->printFeedback($this->passingSuite); } $feedback = ob_get_clean(); + + $firstRowColumns = 63; + $secondRowColumns = 57; + if (defined('PHP_WINDOWS_VERSION_BUILD')) { + $firstRowColumns -= 1; + $secondRowColumns += 1; + } //assert it is as expected $expected = ''; - for ($i = 0; $i < 63; ++$i) { + for ($i = 0; $i < $firstRowColumns; ++$i) { $expected .= '.'; } - $expected .= " 63 / 120 ( 52%)\n"; - for ($i = 0; $i < 57; ++$i) { + $expected .= sprintf(" %s / 120 ( %s%%)\n", $firstRowColumns, (int) ($firstRowColumns / 120 * 100)); + for ($i = 0; $i < $secondRowColumns; ++$i) { $expected .= '.'; } $this->assertEquals($expected, $feedback); @@ -316,13 +327,20 @@ public function testResultPrinterAdjustsTotalCountForDataProviders() } $feedback = ob_get_clean(); + $firstRowColumns = 65; + $secondRowColumns = 1; + if (defined('PHP_WINDOWS_VERSION_BUILD')) { + $firstRowColumns -= 1; + $secondRowColumns += 1; + } + //assert it is as expected $expected = ''; - for ($i = 0; $i < 65; ++$i) { + for ($i = 0; $i < $firstRowColumns; ++$i) { $expected .= '.'; } - $expected .= " 65 / 66 ( 98%)\n"; - for ($i = 0; $i < 1; ++$i) { + $expected .= sprintf(" %s / 66 ( %s%%)\n", $firstRowColumns, (int) ($firstRowColumns / 66 * 100)); + for ($i = 0; $i < $secondRowColumns; ++$i) { $expected .= '.'; } $this->assertEquals($expected, $feedback); diff --git a/test/Unit/Runners/PHPUnit/WrapperRunnerTest.php b/test/Unit/Runners/PHPUnit/WrapperRunnerTest.php new file mode 100644 index 0000000..3cca7a7 --- /dev/null +++ b/test/Unit/Runners/PHPUnit/WrapperRunnerTest.php @@ -0,0 +1,20 @@ +expectException(\RuntimeException::class); + + new WrapperRunner(); + } +} diff --git a/test/constants.php b/test/constants.php index 795ddb4..25ce1e8 100644 --- a/test/constants.php +++ b/test/constants.php @@ -10,7 +10,6 @@ define('FIXTURES', __DIR__ . DS . 'fixtures'); define('PARATEST_ROOT', dirname(__DIR__)); define('PARA_BINARY', PARATEST_ROOT . DS . 'bin' . DS . 'paratest'); -define('PARA_BINARY_WINDOWS', PARATEST_ROOT . DS . 'bin' . DS . 'paratest.bat'); define('PHPUNIT', PARATEST_ROOT . DS . 'vendor' . DS . 'phpunit' . DS . 'phpunit' . DS . 'phpunit'); define('BOOTSTRAP', __DIR__ . DS . 'bootstrap.php'); define('PHPUNIT_CONFIGURATION', PARATEST_ROOT . DS . 'phpunit.xml.dist'); diff --git a/test/fixtures/chdirBootstrap.php b/test/fixtures/chdirBootstrap.php index 909875a..e749993 100644 --- a/test/fixtures/chdirBootstrap.php +++ b/test/fixtures/chdirBootstrap.php @@ -1,2 +1,2 @@ setData(array ( + 'C:\\paratest\\src\\ParaTest\\Console\\ParaTestApplication.php' => + array ( + 18 => + array ( + ), + 19 => + array ( + ), + 28 => + array ( + ), + 29 => + array ( + ), + 30 => NULL, + 40 => + array ( + ), + 41 => + array ( + ), + 43 => NULL, + 51 => + array ( + ), + 52 => NULL, + ), + 'C:\\paratest\\src\\ParaTest\\Coverage\\CoverageReporter.php' => + array ( + 22 => + array ( + ), + 23 => + array ( + ), + 32 => + array ( + ), + 33 => + array ( + ), + 34 => + array ( + ), + 43 => + array ( + ), + 44 => + array ( + ), + 45 => + array ( + ), + 53 => + array ( + ), + 54 => + array ( + ), + 55 => + array ( + ), + ), + 'C:\\paratest\\src\\ParaTest\\Parser\\ParsedClass.php' => + array ( + 21 => + array ( + ), + 22 => + array ( + ), + 23 => + array ( + ), + 24 => + array ( + ), + 45 => + array ( + ), + 46 => + array ( + ), + 47 => NULL, + 56 => + array ( + ), + 57 => NULL, + ), + 'C:\\paratest\\src\\ParaTest\\Coverage\\CoverageReporterInterface.php' => + array ( + ), + 'C:\\paratest\\src\\ParaTest\\Runners\\PHPUnit\\Suite.php' => + array ( + 23 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testConstructor', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testAddTestShouldaddTest', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testAddTestReturnsSelf', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfo', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartSetsWidthAndMaxColumn', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoAndConfigurationDetailsIfConfigFilePresent', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithFunctionalMode', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithSingularForOneProcess', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testAddSuiteAddsFunctionCountToTotalTestCases', + 9 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testAddTestMethodIncrementsCountByOne', + 10 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 11 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 12 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 13 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 14 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 15 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 16 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 17 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 18 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + 19 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testEmptyResultsLog', + ), + 24 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testConstructor', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testAddTestShouldaddTest', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testAddTestReturnsSelf', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfo', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartSetsWidthAndMaxColumn', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoAndConfigurationDetailsIfConfigFilePresent', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithFunctionalMode', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithSingularForOneProcess', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testAddSuiteAddsFunctionCountToTotalTestCases', + 9 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testAddTestMethodIncrementsCountByOne', + 10 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 11 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 12 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 13 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 14 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 15 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 16 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 17 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 18 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + 19 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testEmptyResultsLog', + ), + 25 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testConstructor', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testAddTestShouldaddTest', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testAddTestReturnsSelf', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfo', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartSetsWidthAndMaxColumn', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoAndConfigurationDetailsIfConfigFilePresent', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithFunctionalMode', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithSingularForOneProcess', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testAddSuiteAddsFunctionCountToTotalTestCases', + 9 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testAddTestMethodIncrementsCountByOne', + 10 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 11 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 12 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 13 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 14 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 15 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 16 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 17 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 18 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + 19 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testEmptyResultsLog', + ), + 44 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testAddTestShouldaddTest', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testAddTestReturnsSelf', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartSetsWidthAndMaxColumn', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testAddSuiteAddsFunctionCountToTotalTestCases', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 9 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 10 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 11 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 12 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + ), + 'C:\\paratest\\src\\ParaTest\\Console\\Commands\\ParaTestCommand.php' => + array ( + 19 => + array ( + ), + 20 => + array ( + ), + 21 => + array ( + ), + 22 => + array ( + ), + 29 => + array ( + ), + 30 => NULL, + 38 => + array ( + ), + 39 => + array ( + ), + 40 => + array ( + ), + 41 => + array ( + ), + 42 => + array ( + ), + 43 => + array ( + ), + 44 => + array ( + ), + 45 => + array ( + ), + 46 => + array ( + ), + 48 => + array ( + ), + 49 => + array ( + ), + 51 => + array ( + ), + 62 => + array ( + ), + 63 => NULL, + ), + 'C:\\paratest\\src\\ParaTest\\Logging\\MetaProvider.php' => + array ( + 35 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + ), + 36 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + ), + 38 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + ), + 39 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + ), + 41 => + array ( + ), + 51 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + ), + 52 => + array ( + ), + 53 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + ), + 54 => NULL, + 64 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + ), + 65 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + ), + 66 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + ), + 72 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + ), + 74 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + ), + 75 => NULL, + 69 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + ), + 70 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + ), + 71 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + ), + ), + 'C:\\paratest\\src\\ParaTest\\Parser\\NoClassInFileException.php' => + array ( + ), + 'C:\\paratest\\src\\ParaTest\\Runners\\PHPUnit\\SuitePath.php' => + array ( + 28 => + array ( + ), + 29 => + array ( + ), + 31 => + array ( + ), + 32 => + array ( + ), + 33 => + array ( + ), + 34 => + array ( + ), + 41 => + array ( + ), + 42 => NULL, + 49 => + array ( + ), + 50 => NULL, + 57 => + array ( + ), + 58 => NULL, + 65 => + array ( + ), + 66 => NULL, + ), + 'C:\\paratest\\src\\ParaTest\\Runners\\PHPUnit\\Configuration.php' => + array ( + 39 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfo', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartSetsWidthAndMaxColumn', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoAndConfigurationDetailsIfConfigFilePresent', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithFunctionalMode', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithSingularForOneProcess', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 40 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfo', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartSetsWidthAndMaxColumn', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoAndConfigurationDetailsIfConfigFilePresent', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithFunctionalMode', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithSingularForOneProcess', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 41 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfo', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartSetsWidthAndMaxColumn', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoAndConfigurationDetailsIfConfigFilePresent', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithFunctionalMode', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithSingularForOneProcess', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 43 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfo', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartSetsWidthAndMaxColumn', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoAndConfigurationDetailsIfConfigFilePresent', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithFunctionalMode', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithSingularForOneProcess', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 52 => + array ( + ), + 53 => + array ( + ), + 55 => + array ( + ), + 57 => NULL, + 67 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfo', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartSetsWidthAndMaxColumn', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoAndConfigurationDetailsIfConfigFilePresent', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithFunctionalMode', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithSingularForOneProcess', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 68 => NULL, + 78 => + array ( + ), + 79 => + array ( + ), + 81 => + array ( + ), + 82 => + array ( + ), + 84 => + array ( + ), + 85 => + array ( + ), + 87 => + array ( + ), + 88 => NULL, + 100 => + array ( + ), + 102 => + array ( + ), + 103 => + array ( + ), + 104 => + array ( + ), + 105 => + array ( + ), + 106 => + array ( + ), + 108 => + array ( + ), + 109 => + array ( + ), + 110 => + array ( + ), + 112 => + array ( + ), + 113 => + array ( + ), + 114 => + array ( + ), + 115 => + array ( + ), + 116 => + array ( + ), + 119 => + array ( + ), + 120 => + array ( + ), + 121 => + array ( + ), + 126 => + array ( + ), + 127 => + array ( + ), + 130 => + array ( + ), + 133 => + array ( + ), + 139 => + array ( + ), + 140 => NULL, + 150 => + array ( + ), + 151 => NULL, + 161 => + array ( + ), + 163 => + array ( + ), + 164 => + array ( + ), + 167 => + array ( + ), + 168 => + array ( + ), + 169 => + array ( + ), + 170 => + array ( + ), + 171 => + array ( + ), + 174 => + array ( + ), + 177 => + array ( + ), + 178 => NULL, + 188 => + array ( + ), + 189 => NULL, + 199 => + array ( + ), + 200 => NULL, + ), + 'C:\\paratest\\src\\ParaTest\\Runners\\PHPUnit\\Options.php' => + array ( + 70 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfo', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartSetsWidthAndMaxColumn', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoAndConfigurationDetailsIfConfigFilePresent', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithFunctionalMode', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithSingularForOneProcess', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 71 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfo', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartSetsWidthAndMaxColumn', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoAndConfigurationDetailsIfConfigFilePresent', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithFunctionalMode', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithSingularForOneProcess', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 74 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfo', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartSetsWidthAndMaxColumn', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoAndConfigurationDetailsIfConfigFilePresent', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithFunctionalMode', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithSingularForOneProcess', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 75 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfo', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartSetsWidthAndMaxColumn', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoAndConfigurationDetailsIfConfigFilePresent', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithFunctionalMode', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithSingularForOneProcess', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 76 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfo', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartSetsWidthAndMaxColumn', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoAndConfigurationDetailsIfConfigFilePresent', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithFunctionalMode', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithSingularForOneProcess', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 77 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfo', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartSetsWidthAndMaxColumn', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoAndConfigurationDetailsIfConfigFilePresent', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithFunctionalMode', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithSingularForOneProcess', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 78 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfo', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartSetsWidthAndMaxColumn', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoAndConfigurationDetailsIfConfigFilePresent', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithFunctionalMode', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithSingularForOneProcess', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 79 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfo', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartSetsWidthAndMaxColumn', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoAndConfigurationDetailsIfConfigFilePresent', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithFunctionalMode', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithSingularForOneProcess', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 80 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfo', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartSetsWidthAndMaxColumn', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoAndConfigurationDetailsIfConfigFilePresent', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithFunctionalMode', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithSingularForOneProcess', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 81 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfo', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartSetsWidthAndMaxColumn', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoAndConfigurationDetailsIfConfigFilePresent', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithFunctionalMode', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithSingularForOneProcess', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 82 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfo', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartSetsWidthAndMaxColumn', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoAndConfigurationDetailsIfConfigFilePresent', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithFunctionalMode', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithSingularForOneProcess', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 83 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfo', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartSetsWidthAndMaxColumn', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoAndConfigurationDetailsIfConfigFilePresent', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithFunctionalMode', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithSingularForOneProcess', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 84 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfo', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartSetsWidthAndMaxColumn', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoAndConfigurationDetailsIfConfigFilePresent', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithFunctionalMode', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithSingularForOneProcess', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 91 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfo', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartSetsWidthAndMaxColumn', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoAndConfigurationDetailsIfConfigFilePresent', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithFunctionalMode', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithSingularForOneProcess', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 93 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfo', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartSetsWidthAndMaxColumn', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoAndConfigurationDetailsIfConfigFilePresent', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithFunctionalMode', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithSingularForOneProcess', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 94 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfo', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartSetsWidthAndMaxColumn', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoAndConfigurationDetailsIfConfigFilePresent', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithFunctionalMode', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithSingularForOneProcess', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 96 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfo', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartSetsWidthAndMaxColumn', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoAndConfigurationDetailsIfConfigFilePresent', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithFunctionalMode', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithSingularForOneProcess', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 98 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfo', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartSetsWidthAndMaxColumn', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoAndConfigurationDetailsIfConfigFilePresent', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithFunctionalMode', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithSingularForOneProcess', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 102 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfo', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartSetsWidthAndMaxColumn', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoAndConfigurationDetailsIfConfigFilePresent', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithFunctionalMode', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithSingularForOneProcess', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 103 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfo', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartSetsWidthAndMaxColumn', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoAndConfigurationDetailsIfConfigFilePresent', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithFunctionalMode', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithSingularForOneProcess', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 104 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfo', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartSetsWidthAndMaxColumn', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoAndConfigurationDetailsIfConfigFilePresent', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithFunctionalMode', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithSingularForOneProcess', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 114 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfo', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartSetsWidthAndMaxColumn', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoAndConfigurationDetailsIfConfigFilePresent', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithFunctionalMode', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithSingularForOneProcess', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 126 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfo', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartSetsWidthAndMaxColumn', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoAndConfigurationDetailsIfConfigFilePresent', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithFunctionalMode', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithSingularForOneProcess', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 127 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfo', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartSetsWidthAndMaxColumn', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoAndConfigurationDetailsIfConfigFilePresent', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithFunctionalMode', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithSingularForOneProcess', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 128 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfo', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartSetsWidthAndMaxColumn', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoAndConfigurationDetailsIfConfigFilePresent', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithFunctionalMode', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithSingularForOneProcess', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 131 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfo', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartSetsWidthAndMaxColumn', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoAndConfigurationDetailsIfConfigFilePresent', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithFunctionalMode', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithSingularForOneProcess', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 134 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfo', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartSetsWidthAndMaxColumn', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoAndConfigurationDetailsIfConfigFilePresent', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithFunctionalMode', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithSingularForOneProcess', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 135 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfo', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartSetsWidthAndMaxColumn', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoAndConfigurationDetailsIfConfigFilePresent', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithFunctionalMode', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithSingularForOneProcess', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 150 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfo', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartSetsWidthAndMaxColumn', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoAndConfigurationDetailsIfConfigFilePresent', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithFunctionalMode', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithSingularForOneProcess', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 151 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfo', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartSetsWidthAndMaxColumn', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoAndConfigurationDetailsIfConfigFilePresent', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithFunctionalMode', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithSingularForOneProcess', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 152 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfo', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartSetsWidthAndMaxColumn', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoAndConfigurationDetailsIfConfigFilePresent', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithFunctionalMode', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithSingularForOneProcess', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 154 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfo', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartSetsWidthAndMaxColumn', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoAndConfigurationDetailsIfConfigFilePresent', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithFunctionalMode', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithSingularForOneProcess', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 158 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfo', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartSetsWidthAndMaxColumn', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoAndConfigurationDetailsIfConfigFilePresent', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithFunctionalMode', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithSingularForOneProcess', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 159 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfo', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartSetsWidthAndMaxColumn', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoAndConfigurationDetailsIfConfigFilePresent', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithFunctionalMode', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithSingularForOneProcess', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 172 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfo', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartSetsWidthAndMaxColumn', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoAndConfigurationDetailsIfConfigFilePresent', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithFunctionalMode', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithSingularForOneProcess', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 173 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfo', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartSetsWidthAndMaxColumn', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoAndConfigurationDetailsIfConfigFilePresent', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithFunctionalMode', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithSingularForOneProcess', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 177 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfo', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartSetsWidthAndMaxColumn', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoAndConfigurationDetailsIfConfigFilePresent', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithFunctionalMode', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithSingularForOneProcess', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 188 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfo', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartSetsWidthAndMaxColumn', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoAndConfigurationDetailsIfConfigFilePresent', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithFunctionalMode', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithSingularForOneProcess', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 189 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfo', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartSetsWidthAndMaxColumn', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoAndConfigurationDetailsIfConfigFilePresent', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithFunctionalMode', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithSingularForOneProcess', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 190 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfo', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartSetsWidthAndMaxColumn', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoAndConfigurationDetailsIfConfigFilePresent', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithFunctionalMode', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithSingularForOneProcess', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 191 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfo', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartSetsWidthAndMaxColumn', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoAndConfigurationDetailsIfConfigFilePresent', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithFunctionalMode', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithSingularForOneProcess', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 192 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfo', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartSetsWidthAndMaxColumn', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoAndConfigurationDetailsIfConfigFilePresent', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithFunctionalMode', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithSingularForOneProcess', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 193 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfo', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartSetsWidthAndMaxColumn', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoAndConfigurationDetailsIfConfigFilePresent', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithFunctionalMode', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithSingularForOneProcess', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 194 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfo', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartSetsWidthAndMaxColumn', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoAndConfigurationDetailsIfConfigFilePresent', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithFunctionalMode', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithSingularForOneProcess', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 195 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfo', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartSetsWidthAndMaxColumn', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoAndConfigurationDetailsIfConfigFilePresent', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithFunctionalMode', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithSingularForOneProcess', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 196 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfo', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartSetsWidthAndMaxColumn', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoAndConfigurationDetailsIfConfigFilePresent', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithFunctionalMode', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithSingularForOneProcess', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 197 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfo', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartSetsWidthAndMaxColumn', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoAndConfigurationDetailsIfConfigFilePresent', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithFunctionalMode', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithSingularForOneProcess', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 198 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfo', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartSetsWidthAndMaxColumn', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoAndConfigurationDetailsIfConfigFilePresent', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithFunctionalMode', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithSingularForOneProcess', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 199 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfo', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartSetsWidthAndMaxColumn', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoAndConfigurationDetailsIfConfigFilePresent', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithFunctionalMode', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithSingularForOneProcess', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 201 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfo', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartSetsWidthAndMaxColumn', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoAndConfigurationDetailsIfConfigFilePresent', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithFunctionalMode', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithSingularForOneProcess', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 202 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfo', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartSetsWidthAndMaxColumn', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoAndConfigurationDetailsIfConfigFilePresent', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithFunctionalMode', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithSingularForOneProcess', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 205 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfo', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartSetsWidthAndMaxColumn', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoAndConfigurationDetailsIfConfigFilePresent', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithFunctionalMode', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithSingularForOneProcess', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 217 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfo', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartSetsWidthAndMaxColumn', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoAndConfigurationDetailsIfConfigFilePresent', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithFunctionalMode', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithSingularForOneProcess', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 220 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfo', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartSetsWidthAndMaxColumn', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithFunctionalMode', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithSingularForOneProcess', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 233 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfo', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartSetsWidthAndMaxColumn', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoAndConfigurationDetailsIfConfigFilePresent', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithFunctionalMode', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithSingularForOneProcess', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 237 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfo', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartSetsWidthAndMaxColumn', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithFunctionalMode', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithSingularForOneProcess', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 238 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfo', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartSetsWidthAndMaxColumn', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithFunctionalMode', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithSingularForOneProcess', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 240 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfo', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartSetsWidthAndMaxColumn', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithFunctionalMode', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithSingularForOneProcess', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 241 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfo', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartSetsWidthAndMaxColumn', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithFunctionalMode', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithSingularForOneProcess', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 242 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfo', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartSetsWidthAndMaxColumn', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithFunctionalMode', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithSingularForOneProcess', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 254 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfo', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartSetsWidthAndMaxColumn', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoAndConfigurationDetailsIfConfigFilePresent', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithFunctionalMode', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithSingularForOneProcess', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 255 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfo', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartSetsWidthAndMaxColumn', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoAndConfigurationDetailsIfConfigFilePresent', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithFunctionalMode', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithSingularForOneProcess', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 256 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfo', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartSetsWidthAndMaxColumn', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoAndConfigurationDetailsIfConfigFilePresent', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithFunctionalMode', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithSingularForOneProcess', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 257 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfo', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartSetsWidthAndMaxColumn', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoAndConfigurationDetailsIfConfigFilePresent', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithFunctionalMode', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithSingularForOneProcess', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 260 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfo', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartSetsWidthAndMaxColumn', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoAndConfigurationDetailsIfConfigFilePresent', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithFunctionalMode', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithSingularForOneProcess', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 268 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfo', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartSetsWidthAndMaxColumn', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoAndConfigurationDetailsIfConfigFilePresent', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithFunctionalMode', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithSingularForOneProcess', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 218 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoAndConfigurationDetailsIfConfigFilePresent', + ), + 234 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoAndConfigurationDetailsIfConfigFilePresent', + ), + ), + 'C:\\paratest\\src\\ParaTest\\Runners\\PHPUnit\\Runner.php' => + array ( + ), + 'C:\\paratest\\src\\ParaTest\\Parser\\ParsedFunction.php' => + array ( + 12 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testConstructor', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testAddTestShouldaddTest', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testAddTestReturnsSelf', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfo', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartSetsWidthAndMaxColumn', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoAndConfigurationDetailsIfConfigFilePresent', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithFunctionalMode', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithSingularForOneProcess', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testAddSuiteAddsFunctionCountToTotalTestCases', + 9 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testAddTestMethodIncrementsCountByOne', + 10 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 11 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 12 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 13 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 14 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 15 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 16 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 17 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 18 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + 19 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testEmptyResultsLog', + ), + 13 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testConstructor', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testAddTestShouldaddTest', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testAddTestReturnsSelf', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfo', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartSetsWidthAndMaxColumn', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoAndConfigurationDetailsIfConfigFilePresent', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithFunctionalMode', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithSingularForOneProcess', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testAddSuiteAddsFunctionCountToTotalTestCases', + 9 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testAddTestMethodIncrementsCountByOne', + 10 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 11 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 12 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 13 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 14 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 15 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 16 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 17 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 18 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + 19 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testEmptyResultsLog', + ), + 14 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testConstructor', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testAddTestShouldaddTest', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testAddTestReturnsSelf', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfo', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartSetsWidthAndMaxColumn', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoAndConfigurationDetailsIfConfigFilePresent', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithFunctionalMode', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithSingularForOneProcess', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testAddSuiteAddsFunctionCountToTotalTestCases', + 9 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testAddTestMethodIncrementsCountByOne', + 10 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 11 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 12 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 13 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 14 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 15 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 16 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 17 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 18 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + 19 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testEmptyResultsLog', + ), + ), + 'C:\\paratest\\src\\ParaTest\\Runners\\PHPUnit\\Worker.php' => + array ( + 28 => + array ( + ), + 29 => + array ( + ), + 30 => + array ( + ), + 32 => + array ( + ), + 33 => + array ( + ), + 35 => + array ( + ), + 36 => + array ( + ), + 37 => + array ( + ), + 38 => + array ( + ), + 39 => + array ( + ), + 40 => + array ( + ), + 44 => + array ( + ), + 45 => NULL, + 49 => + array ( + ), + 50 => + array ( + ), + 51 => + array ( + ), + 52 => + array ( + ), + 53 => + array ( + ), + 57 => + array ( + ), + 58 => + array ( + ), + 60 => + array ( + ), + 61 => + array ( + ), + 62 => + array ( + ), + 66 => + array ( + ), + 67 => + array ( + ), + 69 => + array ( + ), + 73 => + array ( + ), + 74 => + array ( + ), + 78 => + array ( + ), + 79 => NULL, + 83 => + array ( + ), + 84 => + array ( + ), + 86 => + array ( + ), + 90 => + array ( + ), + 91 => + array ( + ), + 92 => + array ( + ), + 100 => + array ( + ), + 101 => + array ( + ), + 103 => + array ( + ), + 104 => + array ( + ), + 105 => + array ( + ), + 106 => + array ( + ), + 107 => + array ( + ), + 108 => + array ( + ), + 109 => + array ( + ), + 112 => + array ( + ), + 113 => + array ( + ), + 115 => + array ( + ), + 119 => + array ( + ), + 120 => + array ( + ), + 121 => + array ( + ), + 122 => NULL, + 132 => + array ( + ), + 133 => + array ( + ), + 134 => + array ( + ), + 135 => + array ( + ), + 137 => + array ( + ), + 141 => + array ( + ), + 142 => + array ( + ), + 144 => + array ( + ), + 146 => NULL, + 150 => + array ( + ), + 151 => + array ( + ), + 152 => + array ( + ), + 155 => + array ( + ), + 159 => + array ( + ), + 160 => + array ( + ), + 161 => + array ( + ), + 162 => NULL, + 166 => + array ( + ), + 167 => + array ( + ), + 169 => + array ( + ), + 171 => + array ( + ), + 172 => + array ( + ), + 173 => + array ( + ), + 176 => + array ( + ), + 177 => + array ( + ), + 178 => + array ( + ), + 180 => + array ( + ), + 181 => NULL, + 185 => + array ( + ), + 186 => + array ( + ), + 187 => + array ( + ), + 188 => + array ( + ), + 189 => + array ( + ), + 190 => + array ( + ), + 191 => + array ( + ), + 192 => + array ( + ), + 195 => + array ( + ), + 199 => + array ( + ), + 200 => NULL, + 209 => + array ( + ), + 210 => + array ( + ), + 211 => + array ( + ), + 212 => + array ( + ), + 213 => + array ( + ), + 215 => + array ( + ), + 218 => + array ( + ), + 219 => + array ( + ), + 221 => + array ( + ), + 222 => + array ( + ), + 223 => + array ( + ), + 224 => + array ( + ), + 226 => + array ( + ), + 227 => + array ( + ), + 230 => + array ( + ), + 232 => + array ( + ), + ), + 'C:\\paratest\\src\\ParaTest\\Logging\\JUnit\\TestSuite.php' => + array ( + 73 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 74 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 75 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 76 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 77 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 78 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 79 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 80 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 91 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + ), + 92 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + ), + 93 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + ), + 94 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + ), + 95 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + ), + 96 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + ), + 97 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + ), + 98 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + ), + 100 => NULL, + 110 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 111 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 112 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 113 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 114 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 115 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 116 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 117 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 119 => NULL, + ), + 'C:\\paratest\\src\\ParaTest\\Console\\Testers\\Tester.php' => + array ( + 43 => + array ( + ), + 44 => + array ( + ), + 45 => + array ( + ), + 46 => + array ( + ), + 49 => + array ( + ), + 50 => NULL, + 60 => + array ( + ), + 61 => + array ( + ), + 62 => + array ( + ), + 63 => + array ( + ), + 64 => NULL, + ), + 'C:\\paratest\\src\\ParaTest\\Runners\\PHPUnit\\TestMethod.php' => + array ( + 41 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testAddTestMethodIncrementsCountByOne', + ), + 44 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testAddTestMethodIncrementsCountByOne', + ), + 45 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testAddTestMethodIncrementsCountByOne', + ), + 96 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testAddTestMethodIncrementsCountByOne', + ), + ), + 'C:\\paratest\\src\\ParaTest\\Coverage\\CoverageMerger.php' => + array ( + 19 => + array ( + ), + 20 => + array ( + ), + 22 => + array ( + ), + 24 => + array ( + ), + 31 => + array ( + ), + 32 => + array ( + ), + 39 => + array ( + ), + 40 => + array ( + ), + 51 => + array ( + ), + 53 => + array ( + ), + 54 => + array ( + ), + 57 => + array ( + ), + 59 => + array ( + ), + 60 => NULL, + 69 => + array ( + ), + 70 => + array ( + ), + 73 => + array ( + ), + 74 => + array ( + ), + 77 => + array ( + ), + 78 => + array ( + ), + 79 => + array ( + ), + 88 => + array ( + ), + 89 => + array ( + ), + 92 => + array ( + ), + 93 => NULL, + ), + 'C:\\paratest\\src\\ParaTest\\Runners\\PHPUnit\\ResultPrinter.php' => + array ( + 107 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testConstructor', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testAddTestShouldaddTest', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testAddTestReturnsSelf', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfo', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartSetsWidthAndMaxColumn', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoAndConfigurationDetailsIfConfigFilePresent', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithFunctionalMode', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithSingularForOneProcess', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testAddSuiteAddsFunctionCountToTotalTestCases', + 9 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testAddTestMethodIncrementsCountByOne', + 10 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 11 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 12 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 13 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 14 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 15 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 16 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 17 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 18 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + 19 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testEmptyResultsLog', + ), + 108 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testConstructor', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testAddTestShouldaddTest', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testAddTestReturnsSelf', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfo', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartSetsWidthAndMaxColumn', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoAndConfigurationDetailsIfConfigFilePresent', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithFunctionalMode', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithSingularForOneProcess', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testAddSuiteAddsFunctionCountToTotalTestCases', + 9 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testAddTestMethodIncrementsCountByOne', + 10 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 11 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 12 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 13 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 14 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 15 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 16 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 17 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 18 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + 19 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testEmptyResultsLog', + ), + 109 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testConstructor', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testAddTestShouldaddTest', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testAddTestReturnsSelf', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfo', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartSetsWidthAndMaxColumn', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoAndConfigurationDetailsIfConfigFilePresent', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithFunctionalMode', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithSingularForOneProcess', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testAddSuiteAddsFunctionCountToTotalTestCases', + 9 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testAddTestMethodIncrementsCountByOne', + 10 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 11 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 12 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 13 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 14 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 15 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 16 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 17 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 18 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + 19 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testEmptyResultsLog', + ), + 119 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testAddTestShouldaddTest', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testAddTestReturnsSelf', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartSetsWidthAndMaxColumn', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testAddSuiteAddsFunctionCountToTotalTestCases', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testAddTestMethodIncrementsCountByOne', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 9 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 10 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 11 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 12 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 13 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 120 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testAddTestShouldaddTest', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testAddTestReturnsSelf', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartSetsWidthAndMaxColumn', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testAddSuiteAddsFunctionCountToTotalTestCases', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testAddTestMethodIncrementsCountByOne', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 9 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 10 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 11 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 12 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 13 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 121 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testAddTestShouldaddTest', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testAddTestReturnsSelf', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartSetsWidthAndMaxColumn', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testAddSuiteAddsFunctionCountToTotalTestCases', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testAddTestMethodIncrementsCountByOne', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 9 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 10 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 11 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 12 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 13 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 123 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testAddTestShouldaddTest', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testAddTestReturnsSelf', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartSetsWidthAndMaxColumn', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testAddSuiteAddsFunctionCountToTotalTestCases', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testAddTestMethodIncrementsCountByOne', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 9 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 10 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 11 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 12 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 13 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 124 => NULL, + 134 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfo', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartSetsWidthAndMaxColumn', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoAndConfigurationDetailsIfConfigFilePresent', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithFunctionalMode', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithSingularForOneProcess', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 135 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfo', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartSetsWidthAndMaxColumn', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoAndConfigurationDetailsIfConfigFilePresent', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithFunctionalMode', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithSingularForOneProcess', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 136 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfo', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartSetsWidthAndMaxColumn', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoAndConfigurationDetailsIfConfigFilePresent', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithFunctionalMode', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithSingularForOneProcess', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 137 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfo', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartSetsWidthAndMaxColumn', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoAndConfigurationDetailsIfConfigFilePresent', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithFunctionalMode', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithSingularForOneProcess', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 138 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfo', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartSetsWidthAndMaxColumn', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoAndConfigurationDetailsIfConfigFilePresent', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithFunctionalMode', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithSingularForOneProcess', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 139 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfo', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartSetsWidthAndMaxColumn', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoAndConfigurationDetailsIfConfigFilePresent', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithFunctionalMode', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithSingularForOneProcess', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 140 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfo', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartSetsWidthAndMaxColumn', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoAndConfigurationDetailsIfConfigFilePresent', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithFunctionalMode', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithSingularForOneProcess', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 141 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfo', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartSetsWidthAndMaxColumn', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoAndConfigurationDetailsIfConfigFilePresent', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithFunctionalMode', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithSingularForOneProcess', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 142 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfo', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartSetsWidthAndMaxColumn', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoAndConfigurationDetailsIfConfigFilePresent', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithFunctionalMode', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithSingularForOneProcess', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 143 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfo', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartSetsWidthAndMaxColumn', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoAndConfigurationDetailsIfConfigFilePresent', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithFunctionalMode', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithSingularForOneProcess', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 145 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfo', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartSetsWidthAndMaxColumn', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoAndConfigurationDetailsIfConfigFilePresent', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithFunctionalMode', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithSingularForOneProcess', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 146 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfo', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartSetsWidthAndMaxColumn', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoAndConfigurationDetailsIfConfigFilePresent', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithFunctionalMode', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithSingularForOneProcess', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 148 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfo', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartSetsWidthAndMaxColumn', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoAndConfigurationDetailsIfConfigFilePresent', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithFunctionalMode', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithSingularForOneProcess', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 149 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfo', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartSetsWidthAndMaxColumn', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoAndConfigurationDetailsIfConfigFilePresent', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithFunctionalMode', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithSingularForOneProcess', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 150 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfo', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartSetsWidthAndMaxColumn', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoAndConfigurationDetailsIfConfigFilePresent', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithFunctionalMode', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithSingularForOneProcess', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 151 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfo', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartSetsWidthAndMaxColumn', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoAndConfigurationDetailsIfConfigFilePresent', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithFunctionalMode', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithSingularForOneProcess', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 158 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 159 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 160 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 168 => + array ( + ), + 169 => + array ( + ), + 170 => + array ( + ), + 177 => + array ( + ), + 178 => + array ( + ), + 179 => + array ( + ), + 180 => + array ( + ), + 181 => + array ( + ), + 182 => + array ( + ), + 193 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + 9 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testEmptyResultsLog', + ), + 194 => + array ( + ), + 195 => + array ( + ), + 198 => + array ( + ), + 199 => + array ( + ), + 200 => + array ( + ), + 201 => + array ( + ), + 204 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + 9 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testEmptyResultsLog', + ), + 205 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testEmptyResultsLog', + ), + 208 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testEmptyResultsLog', + ), + 209 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testEmptyResultsLog', + ), + 210 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testEmptyResultsLog', + ), + 211 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testEmptyResultsLog', + ), + 214 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 215 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 216 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 217 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 226 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + ), + 227 => NULL, + 235 => + array ( + ), + 236 => + array ( + ), + 243 => + array ( + ), + 244 => NULL, + 253 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + ), + 254 => NULL, + 264 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + ), + 265 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + ), + 266 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + ), + 267 => NULL, + 276 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + ), + 278 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + ), + 279 => NULL, + 288 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + ), + 290 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + ), + 291 => NULL, + 300 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testAddSuiteAddsFunctionCountToTotalTestCases', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testAddTestMethodIncrementsCountByOne', + ), + 301 => NULL, + 311 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 313 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 315 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 317 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 318 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 321 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 322 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 324 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 333 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 334 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 335 => + array ( + ), + 336 => + array ( + ), + 337 => + array ( + ), + 340 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 352 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfo', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartSetsWidthAndMaxColumn', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoAndConfigurationDetailsIfConfigFilePresent', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithFunctionalMode', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithSingularForOneProcess', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 353 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfo', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartSetsWidthAndMaxColumn', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoAndConfigurationDetailsIfConfigFilePresent', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithFunctionalMode', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithSingularForOneProcess', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 354 => NULL, + 369 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 370 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 371 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 372 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 374 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 377 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + ), + 379 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 392 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 393 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 394 => + array ( + ), + 395 => + array ( + ), + 398 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 409 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 410 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 411 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 412 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 413 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 414 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 416 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 428 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + ), + 429 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + ), + 430 => + array ( + ), + 432 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + ), + 433 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + ), + 434 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + ), + 437 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + ), + 440 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + ), + 441 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + ), + 444 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + ), + 445 => NULL, + 452 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfo', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartSetsWidthAndMaxColumn', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoAndConfigurationDetailsIfConfigFilePresent', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithFunctionalMode', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithSingularForOneProcess', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 453 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfo', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartSetsWidthAndMaxColumn', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoAndConfigurationDetailsIfConfigFilePresent', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithFunctionalMode', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithSingularForOneProcess', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 454 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfo', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartSetsWidthAndMaxColumn', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoAndConfigurationDetailsIfConfigFilePresent', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithFunctionalMode', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithSingularForOneProcess', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 455 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfo', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartSetsWidthAndMaxColumn', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoAndConfigurationDetailsIfConfigFilePresent', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithFunctionalMode', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithSingularForOneProcess', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 456 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfo', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartSetsWidthAndMaxColumn', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoAndConfigurationDetailsIfConfigFilePresent', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithFunctionalMode', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithSingularForOneProcess', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 458 => NULL, + 468 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + ), + 470 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + ), + 473 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + ), + 474 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + ), + 475 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + ), + 476 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + ), + 479 => NULL, + 489 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + ), + 490 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + ), + 492 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + ), + 495 => + array ( + ), + 497 => + array ( + ), + 500 => + array ( + ), + 505 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + ), + 506 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + ), + 508 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + ), + 510 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + ), + 513 => NULL, + 517 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + ), + 519 => + array ( + ), + 520 => + array ( + ), + 522 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + ), + 523 => NULL, + 527 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + ), + 529 => + array ( + ), + 530 => + array ( + ), + 532 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + ), + 533 => NULL, + 541 => + array ( + ), + 542 => + array ( + ), + 544 => + array ( + ), + ), + 'C:\\paratest\\src\\ParaTest\\Runners\\PHPUnit\\SuiteLoader.php' => + array ( + 27 => + array ( + ), + 28 => + array ( + ), + 31 => + array ( + ), + 32 => + array ( + ), + 42 => + array ( + ), + 43 => NULL, + 53 => + array ( + ), + 54 => + array ( + ), + 55 => + array ( + ), + 58 => + array ( + ), + 59 => NULL, + 70 => + array ( + ), + 71 => + array ( + ), + 73 => + array ( + ), + 76 => + array ( + ), + 77 => + array ( + ), + 78 => + array ( + ), + 79 => + array ( + ), + 80 => + array ( + ), + 81 => + array ( + ), + 82 => + array ( + ), + 83 => + array ( + ), + 86 => + array ( + ), + 87 => + array ( + ), + 88 => + array ( + ), + 89 => + array ( + ), + 90 => + array ( + ), + 96 => + array ( + ), + 97 => + array ( + ), + 100 => + array ( + ), + 102 => + array ( + ), + 103 => + array ( + ), + 112 => + array ( + ), + 114 => + array ( + ), + 115 => + array ( + ), + 116 => + array ( + ), + 118 => + array ( + ), + 119 => + array ( + ), + 122 => + array ( + ), + 126 => + array ( + ), + 127 => + array ( + ), + 128 => + array ( + ), + 129 => + array ( + ), + 130 => + array ( + ), + 132 => + array ( + ), + 133 => NULL, + 146 => + array ( + ), + 147 => + array ( + ), + 148 => + array ( + ), + 149 => + array ( + ), + 150 => + array ( + ), + 152 => + array ( + ), + 153 => + array ( + ), + 156 => + array ( + ), + 157 => + array ( + ), + 159 => + array ( + ), + 162 => + array ( + ), + 163 => NULL, + 167 => + array ( + ), + 168 => + array ( + ), + 169 => + array ( + ), + 170 => + array ( + ), + 171 => + array ( + ), + 175 => + array ( + ), + 179 => + array ( + ), + 180 => + array ( + ), + 181 => + array ( + ), + 182 => + array ( + ), + 184 => + array ( + ), + 186 => + array ( + ), + 189 => + array ( + ), + 204 => + array ( + ), + 206 => + array ( + ), + 208 => + array ( + ), + 209 => + array ( + ), + 210 => + array ( + ), + 211 => + array ( + ), + 212 => + array ( + ), + 213 => + array ( + ), + 214 => + array ( + ), + 215 => + array ( + ), + 216 => + array ( + ), + 217 => + array ( + ), + 218 => + array ( + ), + 220 => + array ( + ), + 221 => + array ( + ), + 224 => + array ( + ), + 225 => + array ( + ), + 228 => + array ( + ), + 229 => NULL, + 233 => + array ( + ), + 234 => + array ( + ), + 237 => + array ( + ), + 238 => + array ( + ), + 240 => + array ( + ), + 243 => + array ( + ), + 244 => + array ( + ), + 246 => + array ( + ), + 249 => + array ( + ), + 250 => NULL, + 254 => + array ( + ), + 255 => + array ( + ), + 258 => + array ( + ), + 259 => + array ( + ), + 260 => + array ( + ), + 261 => + array ( + ), + 262 => + array ( + ), + 264 => + array ( + ), + 265 => NULL, + 269 => + array ( + ), + 270 => + array ( + ), + 272 => + array ( + ), + 273 => NULL, + 277 => + array ( + ), + 278 => + array ( + ), + 280 => + array ( + ), + 281 => NULL, + 285 => + array ( + ), + 286 => + array ( + ), + 288 => + array ( + ), + 289 => NULL, + 293 => + array ( + ), + 294 => + array ( + ), + 296 => + array ( + ), + 297 => NULL, + 301 => + array ( + ), + 303 => + array ( + ), + 307 => + array ( + ), + 309 => NULL, + ), + 'C:\\paratest\\src\\ParaTest\\Coverage\\CoverageReporterLegacy.php' => + array ( + 20 => + array ( + ), + 21 => + array ( + ), + 30 => + array ( + ), + 31 => + array ( + ), + 32 => + array ( + ), + 41 => + array ( + ), + 42 => + array ( + ), + 43 => + array ( + ), + 51 => + array ( + ), + 52 => + array ( + ), + 53 => + array ( + ), + ), + 'C:\\paratest\\src\\ParaTest\\Logging\\JUnit\\Writer.php' => + array ( + 56 => + array ( + ), + 57 => + array ( + ), + 58 => + array ( + ), + 59 => + array ( + ), + 60 => + array ( + ), + 69 => + array ( + ), + 70 => NULL, + 80 => + array ( + ), + 81 => + array ( + ), + 82 => + array ( + ), + 83 => + array ( + ), + 84 => + array ( + ), + 85 => + array ( + ), + 88 => + array ( + ), + 89 => NULL, + 98 => + array ( + ), + 99 => + array ( + ), + 111 => + array ( + ), + 112 => + array ( + ), + 113 => + array ( + ), + 114 => + array ( + ), + 115 => + array ( + ), + 118 => + array ( + ), + 119 => + array ( + ), + 120 => NULL, + 132 => + array ( + ), + 133 => + array ( + ), + 134 => + array ( + ), + 135 => + array ( + ), + 136 => + array ( + ), + 139 => + array ( + ), + 140 => + array ( + ), + 141 => + array ( + ), + 142 => + array ( + ), + 143 => NULL, + 154 => + array ( + ), + 155 => + array ( + ), + 156 => + array ( + ), + 157 => + array ( + ), + 159 => + array ( + ), + 169 => + array ( + ), + 170 => + array ( + ), + 171 => + array ( + ), + 172 => + array ( + ), + 174 => + array ( + ), + 175 => + array ( + ), + 176 => + array ( + ), + 177 => + array ( + ), + 179 => + array ( + ), + 180 => + array ( + ), + 181 => NULL, + 199 => + array ( + ), + 200 => NULL, + ), + 'C:\\paratest\\src\\ParaTest\\Runners\\PHPUnit\\WrapperRunner.php' => + array ( + ), + 'C:\\paratest\\src\\ParaTest\\Parser\\Parser.php' => + array ( + 35 => + array ( + ), + 36 => + array ( + ), + 39 => + array ( + ), + 40 => + array ( + ), + 41 => + array ( + ), + 42 => + array ( + ), + 43 => + array ( + ), + 44 => + array ( + ), + 47 => + array ( + ), + 48 => + array ( + ), + 49 => + array ( + ), + 51 => + array ( + ), + 61 => + array ( + ), + 62 => + array ( + ), + 63 => + array ( + ), + 64 => + array ( + ), + 65 => + array ( + ), + 66 => + array ( + ), + 67 => + array ( + ), + 69 => NULL, + 78 => + array ( + ), + 79 => + array ( + ), + 80 => + array ( + ), + 81 => + array ( + ), + 82 => + array ( + ), + 83 => + array ( + ), + 84 => + array ( + ), + 85 => + array ( + ), + 88 => + array ( + ), + 89 => NULL, + 99 => + array ( + ), + 100 => + array ( + ), + 101 => + array ( + ), + 103 => + array ( + ), + 104 => + array ( + ), + 105 => + array ( + ), + 106 => + array ( + ), + 107 => + array ( + ), + 113 => + array ( + ), + 114 => + array ( + ), + 115 => + array ( + ), + 116 => + array ( + ), + 119 => + array ( + ), + 128 => + array ( + ), + 129 => + array ( + ), + 130 => NULL, + 134 => + array ( + ), + 135 => NULL, + ), + 'C:\\paratest\\src\\ParaTest\\Parser\\ParsedObject.php' => + array ( + 18 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testConstructor', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testAddTestShouldaddTest', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testAddTestReturnsSelf', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfo', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartSetsWidthAndMaxColumn', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoAndConfigurationDetailsIfConfigFilePresent', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithFunctionalMode', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithSingularForOneProcess', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testAddSuiteAddsFunctionCountToTotalTestCases', + 9 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testAddTestMethodIncrementsCountByOne', + 10 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 11 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 12 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 13 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 14 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 15 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 16 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 17 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 18 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + 19 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testEmptyResultsLog', + ), + 19 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testConstructor', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testAddTestShouldaddTest', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testAddTestReturnsSelf', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfo', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartSetsWidthAndMaxColumn', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoAndConfigurationDetailsIfConfigFilePresent', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithFunctionalMode', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithSingularForOneProcess', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testAddSuiteAddsFunctionCountToTotalTestCases', + 9 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testAddTestMethodIncrementsCountByOne', + 10 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 11 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 12 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 13 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 14 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 15 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 16 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 17 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 18 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + 19 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testEmptyResultsLog', + ), + 20 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testConstructor', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testAddTestShouldaddTest', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testAddTestReturnsSelf', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfo', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartSetsWidthAndMaxColumn', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoAndConfigurationDetailsIfConfigFilePresent', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithFunctionalMode', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithSingularForOneProcess', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testAddSuiteAddsFunctionCountToTotalTestCases', + 9 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testAddTestMethodIncrementsCountByOne', + 10 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 11 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 12 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 13 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 14 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 15 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 16 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 17 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 18 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + 19 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testEmptyResultsLog', + ), + 29 => + array ( + ), + 30 => NULL, + 39 => + array ( + ), + 40 => NULL, + 53 => + array ( + ), + 54 => + array ( + ), + 56 => + array ( + ), + 58 => + array ( + ), + 59 => NULL, + ), + 'C:\\paratest\\src\\ParaTest\\Runners\\PHPUnit\\TestFileLoader.php' => + array ( + 51 => + array ( + ), + 52 => + array ( + ), + 55 => + array ( + ), + 56 => + array ( + ), + 68 => + array ( + ), + 69 => + array ( + ), + 70 => + array ( + ), + 71 => + array ( + ), + 72 => + array ( + ), + 76 => + array ( + ), + 77 => + array ( + ), + 80 => + array ( + ), + 82 => + array ( + ), + 83 => NULL, + 96 => + array ( + ), + 97 => + array ( + ), + 98 => + array ( + ), + 100 => + array ( + ), + 101 => + array ( + ), + 103 => + array ( + ), + 104 => + array ( + ), + 105 => + array ( + ), + 106 => + array ( + ), + 109 => + array ( + ), + 110 => NULL, + 120 => + array ( + ), + 121 => + array ( + ), + 122 => + array ( + ), + 124 => + array ( + ), + 133 => + array ( + ), + 134 => + array ( + ), + 144 => + array ( + ), + 145 => + array ( + ), + 146 => + array ( + ), + 147 => + array ( + ), + 148 => + array ( + ), + 152 => + array ( + ), + 153 => + array ( + ), + 155 => + array ( + ), + ), + 'C:\\paratest\\src\\ParaTest\\Logging\\JUnit\\TestCase.php' => + array ( + 67 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 68 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 69 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 70 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 71 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 72 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 73 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 81 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + ), + 82 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + ), + 90 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + ), + 91 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + ), + 102 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + ), + 103 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + ), + 104 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + ), + 106 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + ), + 117 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 118 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 119 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 120 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 121 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 122 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 123 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 125 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 126 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 127 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 128 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + ), + 130 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 131 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + ), + 133 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 134 => NULL, + ), + 'C:\\paratest\\src\\ParaTest\\Logging\\JUnit\\Reader.php' => + array ( + 41 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + 9 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testEmptyResultsLog', + ), + 42 => + array ( + ), + 45 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + 9 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testEmptyResultsLog', + ), + 46 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + 9 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testEmptyResultsLog', + ), + 47 => + array ( + ), + 49 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + 9 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testEmptyResultsLog', + ), + 50 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + 9 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testEmptyResultsLog', + ), + 51 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + 9 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testEmptyResultsLog', + ), + 52 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + 9 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testEmptyResultsLog', + ), + 62 => + array ( + ), + 63 => NULL, + 73 => + array ( + ), + 74 => NULL, + 84 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + 9 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testEmptyResultsLog', + ), + 85 => NULL, + 98 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 99 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 100 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 101 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 102 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 103 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + ), + 104 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 105 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + ), + 107 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 111 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 112 => NULL, + 119 => + array ( + ), + 120 => + array ( + ), + 128 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + 9 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testEmptyResultsLog', + ), + 129 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + 9 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testEmptyResultsLog', + ), + 130 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + 9 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testEmptyResultsLog', + ), + 131 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 133 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + 9 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testEmptyResultsLog', + ), + 141 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 142 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 143 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 144 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + ), + 146 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 148 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 159 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + ), + 160 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + ), + 161 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + ), + 162 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + ), + 172 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 183 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 184 => NULL, + 194 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + 9 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testEmptyResultsLog', + ), + 195 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + 9 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testEmptyResultsLog', + ), + 196 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + 9 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testEmptyResultsLog', + ), + 197 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 198 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 199 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 201 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 203 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + 9 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testEmptyResultsLog', + ), + 204 => NULL, + 213 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + 9 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testEmptyResultsLog', + ), + 214 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + 9 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testEmptyResultsLog', + ), + 215 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + 9 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testEmptyResultsLog', + ), + 217 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + 9 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testEmptyResultsLog', + ), + 218 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 220 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + 9 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testEmptyResultsLog', + ), + 174 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 175 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 176 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 177 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 178 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 179 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 180 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 181 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 182 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + ), + 'C:\\paratest\\src\\ParaTest\\Console\\Testers\\PHPUnit.php' => + array ( + 37 => + array ( + ), + 38 => + array ( + ), + 39 => + array ( + ), + 40 => + array ( + ), + 41 => + array ( + ), + 42 => + array ( + ), + 43 => + array ( + ), + 44 => + array ( + ), + 45 => + array ( + ), + 46 => + array ( + ), + 47 => + array ( + ), + 48 => + array ( + ), + 49 => + array ( + ), + 50 => + array ( + ), + 62 => + array ( + ), + 63 => + array ( + ), + 66 => + array ( + ), + 67 => + array ( + ), + 69 => + array ( + ), + 71 => + array ( + ), + 72 => + array ( + ), + 73 => + array ( + ), + 74 => + array ( + ), + 79 => + array ( + ), + 80 => + array ( + ), + 83 => + array ( + ), + 84 => + array ( + ), + 85 => NULL, + 96 => + array ( + ), + 97 => + array ( + ), + 98 => + array ( + ), + 99 => NULL, + 109 => + array ( + ), + 110 => NULL, + 118 => + array ( + ), + 120 => + array ( + ), + 121 => + array ( + ), + 122 => + array ( + ), + 123 => + array ( + ), + 124 => + array ( + ), + 125 => + array ( + ), + 127 => + array ( + ), + 130 => + array ( + ), + 131 => NULL, + 140 => + array ( + ), + 141 => + array ( + ), + 142 => + array ( + ), + 143 => + array ( + ), + 145 => + array ( + ), + 146 => + array ( + ), + 149 => + array ( + ), + 150 => + array ( + ), + 153 => + array ( + ), + 154 => NULL, + 165 => + array ( + ), + 166 => + array ( + ), + 169 => + array ( + ), + 170 => + array ( + ), + 171 => + array ( + ), + 174 => + array ( + ), + 175 => + array ( + ), + 184 => + array ( + ), + 185 => + array ( + ), + 186 => + array ( + ), + 187 => + array ( + ), + 197 => + array ( + ), + 198 => + array ( + ), + 199 => + array ( + ), + 200 => NULL, + 211 => + array ( + ), + 212 => + array ( + ), + 215 => + array ( + ), + 216 => + array ( + ), + 219 => + array ( + ), + 220 => + array ( + ), + 222 => + array ( + ), + 223 => NULL, + ), + 'C:\\paratest\\src\\ParaTest\\Runners\\PHPUnit\\ExecutableTest.php' => + array ( + 54 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testConstructor', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testAddTestShouldaddTest', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testAddTestReturnsSelf', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfo', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartSetsWidthAndMaxColumn', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoAndConfigurationDetailsIfConfigFilePresent', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithFunctionalMode', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithSingularForOneProcess', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testAddSuiteAddsFunctionCountToTotalTestCases', + 9 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testAddTestMethodIncrementsCountByOne', + 10 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 11 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 12 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 13 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 14 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 15 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 16 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 17 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 18 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + 19 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testEmptyResultsLog', + ), + 55 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testConstructor', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testAddTestShouldaddTest', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testAddTestReturnsSelf', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfo', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartSetsWidthAndMaxColumn', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoAndConfigurationDetailsIfConfigFilePresent', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithFunctionalMode', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithSingularForOneProcess', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testAddSuiteAddsFunctionCountToTotalTestCases', + 9 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testAddTestMethodIncrementsCountByOne', + 10 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 11 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 12 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 13 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 14 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 15 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 16 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 17 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 18 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + 19 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testEmptyResultsLog', + ), + 56 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testConstructor', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testAddTestShouldaddTest', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testAddTestReturnsSelf', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfo', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartSetsWidthAndMaxColumn', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoAndConfigurationDetailsIfConfigFilePresent', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithFunctionalMode', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithSingularForOneProcess', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testAddSuiteAddsFunctionCountToTotalTestCases', + 9 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testAddTestMethodIncrementsCountByOne', + 10 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 11 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 12 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 13 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 14 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 15 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 16 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 17 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 18 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + 19 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testEmptyResultsLog', + ), + 72 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testEmptyResultsLog', + ), + 73 => NULL, + 84 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + 9 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testEmptyResultsLog', + ), + 85 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testEmptyResultsLog', + ), + 88 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + 9 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testEmptyResultsLog', + ), + 89 => NULL, + 98 => + array ( + ), + 99 => NULL, + 107 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 108 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 114 => + array ( + ), + 115 => + array ( + ), + 116 => + array ( + ), + 120 => + array ( + ), + 121 => NULL, + 131 => + array ( + ), + 132 => NULL, + 139 => + array ( + ), + 140 => + array ( + ), + 141 => + array ( + ), + 150 => + array ( + ), + 151 => NULL, + 160 => + array ( + ), + 161 => NULL, + 170 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testEmptyResultsLog', + ), + 171 => NULL, + 183 => + array ( + ), + 184 => + array ( + ), + 185 => + array ( + ), + 186 => + array ( + ), + 187 => + array ( + ), + 188 => + array ( + ), + 189 => + array ( + ), + 190 => + array ( + ), + 191 => NULL, + 200 => + array ( + ), + 201 => NULL, + 212 => + array ( + ), + 213 => + array ( + ), + 214 => + array ( + ), + 215 => NULL, + 224 => + array ( + ), + 225 => + array ( + ), + 228 => + array ( + ), + 229 => NULL, + 238 => + array ( + ), + 239 => NULL, + 248 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testConstructor', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testAddTestShouldaddTest', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testAddTestReturnsSelf', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfo', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartSetsWidthAndMaxColumn', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoAndConfigurationDetailsIfConfigFilePresent', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithFunctionalMode', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithSingularForOneProcess', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testAddSuiteAddsFunctionCountToTotalTestCases', + 9 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testAddTestMethodIncrementsCountByOne', + 10 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 11 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 12 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 13 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 14 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 15 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 16 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 17 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 18 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + 19 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testEmptyResultsLog', + ), + 249 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testConstructor', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testAddTestShouldaddTest', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testAddTestReturnsSelf', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfo', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartSetsWidthAndMaxColumn', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoAndConfigurationDetailsIfConfigFilePresent', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithFunctionalMode', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithSingularForOneProcess', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testAddSuiteAddsFunctionCountToTotalTestCases', + 9 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testAddTestMethodIncrementsCountByOne', + 10 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 11 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 12 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 13 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 14 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 15 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 16 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 17 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 18 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + 19 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testEmptyResultsLog', + ), + 263 => + array ( + ), + 265 => + array ( + ), + 266 => + array ( + ), + 267 => + array ( + ), + 275 => + array ( + ), + 285 => + array ( + ), + 286 => NULL, + 298 => + array ( + ), + 299 => + array ( + ), + 300 => + array ( + ), + 301 => + array ( + ), + 302 => + array ( + ), + 303 => + array ( + ), + 307 => + array ( + ), + 308 => + array ( + ), + 310 => + array ( + ), + 312 => + array ( + ), + 313 => NULL, + 323 => + array ( + ), + 324 => + array ( + ), + 326 => + array ( + ), + 337 => + array ( + ), + 338 => + array ( + ), + 341 => + array ( + ), + 342 => + array ( + ), + 344 => + array ( + ), + 345 => NULL, + ), + 'C:\\paratest\\src\\ParaTest\\Logging\\LogInterpreter.php' => + array ( + 35 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 36 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 3 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + 4 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 5 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + 6 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed', + 7 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites', + 8 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders', + ), + 150 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + ), + 162 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + ), + 163 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + ), + 164 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + ), + 166 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors', + 2 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures', + ), + 58 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + ), + 59 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + ), + 60 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + ), + 136 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + ), + 138 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + ), + 179 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + ), + 180 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + ), + 181 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures', + 1 => 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess', + ), + ), + 'C:\\paratest\\src\\ParaTest\\Runners\\PHPUnit\\BaseRunner.php' => + array ( + 62 => + array ( + ), + 63 => + array ( + ), + 64 => + array ( + ), + 65 => + array ( + ), + 69 => + array ( + ), + 70 => + array ( + ), + 71 => + array ( + ), + 72 => + array ( + ), + 73 => + array ( + ), + 82 => + array ( + ), + 83 => + array ( + ), + 84 => + array ( + ), + 86 => + array ( + ), + 96 => + array ( + ), + 97 => + array ( + ), + 98 => + array ( + ), + 99 => + array ( + ), + 100 => + array ( + ), + 101 => + array ( + ), + 103 => + array ( + ), + 113 => + array ( + ), + 114 => NULL, + 121 => + array ( + ), + 122 => + array ( + ), + 124 => + array ( + ), + 125 => + array ( + ), + 126 => + array ( + ), + 127 => + array ( + ), + 134 => + array ( + ), + 135 => + array ( + ), + 138 => + array ( + ), + 140 => + array ( + ), + 142 => + array ( + ), + 143 => + array ( + ), + 146 => + array ( + ), + 147 => + array ( + ), + 150 => + array ( + ), + 151 => + array ( + ), + 155 => + array ( + ), + 156 => + array ( + ), + 159 => + array ( + ), + 160 => + array ( + ), + 167 => + array ( + ), + 168 => NULL, + 175 => + array ( + ), + 176 => NULL, + ), +)); +$coverage->setTests(array ( + 'UNCOVERED_FILES_FROM_WHITELIST' => + array ( + 'size' => 'unknown', + 'status' => NULL, + ), + 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testConstructor' => + array ( + 'size' => 'unknown', + 'status' => 0, + ), + 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testAddTestShouldaddTest' => + array ( + 'size' => 'unknown', + 'status' => 0, + ), + 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testAddTestReturnsSelf' => + array ( + 'size' => 'unknown', + 'status' => 0, + ), + 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfo' => + array ( + 'size' => 'unknown', + 'status' => 0, + ), + 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartSetsWidthAndMaxColumn' => + array ( + 'size' => 'unknown', + 'status' => 0, + ), + 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoAndConfigurationDetailsIfConfigFilePresent' => + array ( + 'size' => 'unknown', + 'status' => 0, + ), + 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithFunctionalMode' => + array ( + 'size' => 'unknown', + 'status' => 0, + ), + 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testStartPrintsOptionInfoWithSingularForOneProcess' => + array ( + 'size' => 'unknown', + 'status' => 0, + ), + 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testAddSuiteAddsFunctionCountToTotalTestCases' => + array ( + 'size' => 'unknown', + 'status' => 0, + ), + 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testAddTestMethodIncrementsCountByOne' => + array ( + 'size' => 'unknown', + 'status' => 0, + ), + 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetHeader' => + array ( + 'size' => 'unknown', + 'status' => 0, + ), + 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsSingleError' => + array ( + 'size' => 'unknown', + 'status' => 0, + ), + 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetErrorsMultipleErrors' => + array ( + 'size' => 'unknown', + 'status' => 0, + ), + 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFailures' => + array ( + 'size' => 'unknown', + 'status' => 0, + ), + 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithFailures' => + array ( + 'size' => 'unknown', + 'status' => 0, + ), + 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testGetFooterWithSuccess' => + array ( + 'size' => 'unknown', + 'status' => 0, + ), + 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMixed' => + array ( + 'size' => 'unknown', + 'status' => 0, + ), + 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testPrintFeedbackForMoreThan100Suites' => + array ( + 'size' => 'unknown', + 'status' => 0, + ), + 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testResultPrinterAdjustsTotalCountForDataProviders' => + array ( + 'size' => 'unknown', + 'status' => 0, + ), + 'ParaTest\\Runners\\PHPUnit\\ResultPrinterTest::testEmptyResultsLog' => + array ( + 'size' => 'unknown', + 'status' => 0, + ), +)); + +$filter = $coverage->filter(); +$filter->setWhitelistedFiles(array ( + 'C:\\paratest\\src\\ParaTest\\Console\\Commands\\ParaTestCommand.php' => true, + 'C:\\paratest\\src\\ParaTest\\Console\\ParaTestApplication.php' => true, + 'C:\\paratest\\src\\ParaTest\\Console\\Testers\\PHPUnit.php' => true, + 'C:\\paratest\\src\\ParaTest\\Console\\Testers\\Tester.php' => true, + 'C:\\paratest\\src\\ParaTest\\Coverage\\CoverageMerger.php' => true, + 'C:\\paratest\\src\\ParaTest\\Coverage\\CoverageReporter.php' => true, + 'C:\\paratest\\src\\ParaTest\\Coverage\\CoverageReporterInterface.php' => true, + 'C:\\paratest\\src\\ParaTest\\Coverage\\CoverageReporterLegacy.php' => true, + 'C:\\paratest\\src\\ParaTest\\Logging\\JUnit\\Reader.php' => true, + 'C:\\paratest\\src\\ParaTest\\Logging\\JUnit\\TestCase.php' => true, + 'C:\\paratest\\src\\ParaTest\\Logging\\JUnit\\TestSuite.php' => true, + 'C:\\paratest\\src\\ParaTest\\Logging\\JUnit\\Writer.php' => true, + 'C:\\paratest\\src\\ParaTest\\Logging\\LogInterpreter.php' => true, + 'C:\\paratest\\src\\ParaTest\\Logging\\MetaProvider.php' => true, + 'C:\\paratest\\src\\ParaTest\\Parser\\NoClassInFileException.php' => true, + 'C:\\paratest\\src\\ParaTest\\Parser\\ParsedClass.php' => true, + 'C:\\paratest\\src\\ParaTest\\Parser\\ParsedFunction.php' => true, + 'C:\\paratest\\src\\ParaTest\\Parser\\ParsedObject.php' => true, + 'C:\\paratest\\src\\ParaTest\\Parser\\Parser.php' => true, + 'C:\\paratest\\src\\ParaTest\\Runners\\PHPUnit\\BaseRunner.php' => true, + 'C:\\paratest\\src\\ParaTest\\Runners\\PHPUnit\\Configuration.php' => true, + 'C:\\paratest\\src\\ParaTest\\Runners\\PHPUnit\\ExecutableTest.php' => true, + 'C:\\paratest\\src\\ParaTest\\Runners\\PHPUnit\\Options.php' => true, + 'C:\\paratest\\src\\ParaTest\\Runners\\PHPUnit\\ResultPrinter.php' => true, + 'C:\\paratest\\src\\ParaTest\\Runners\\PHPUnit\\Runner.php' => true, + 'C:\\paratest\\src\\ParaTest\\Runners\\PHPUnit\\Suite.php' => true, + 'C:\\paratest\\src\\ParaTest\\Runners\\PHPUnit\\SuiteLoader.php' => true, + 'C:\\paratest\\src\\ParaTest\\Runners\\PHPUnit\\SuitePath.php' => true, + 'C:\\paratest\\src\\ParaTest\\Runners\\PHPUnit\\TestFileLoader.php' => true, + 'C:\\paratest\\src\\ParaTest\\Runners\\PHPUnit\\TestMethod.php' => true, + 'C:\\paratest\\src\\ParaTest\\Runners\\PHPUnit\\Worker.php' => true, + 'C:\\paratest\\src\\ParaTest\\Runners\\PHPUnit\\WrapperRunner.php' => true, +)); + +return $coverage; \ No newline at end of file diff --git a/test/fixtures/coverage-tests/runner_test-windows.cov b/test/fixtures/coverage-tests/runner_test-windows.cov new file mode 100644 index 0000000..2c82e64 --- /dev/null +++ b/test/fixtures/coverage-tests/runner_test-windows.cov @@ -0,0 +1,3864 @@ +setData(array ( + 'C:\\paratest\\src\\ParaTest\\Console\\ParaTestApplication.php' => + array ( + 18 => + array ( + ), + 19 => + array ( + ), + 28 => + array ( + ), + 29 => + array ( + ), + 30 => NULL, + 40 => + array ( + ), + 41 => + array ( + ), + 43 => NULL, + 51 => + array ( + ), + 52 => NULL, + ), + 'C:\\paratest\\src\\ParaTest\\Coverage\\CoverageReporter.php' => + array ( + 22 => + array ( + ), + 23 => + array ( + ), + 32 => + array ( + ), + 33 => + array ( + ), + 34 => + array ( + ), + 43 => + array ( + ), + 44 => + array ( + ), + 45 => + array ( + ), + 53 => + array ( + ), + 54 => + array ( + ), + 55 => + array ( + ), + ), + 'C:\\paratest\\src\\ParaTest\\Parser\\ParsedClass.php' => + array ( + 21 => + array ( + ), + 22 => + array ( + ), + 23 => + array ( + ), + 24 => + array ( + ), + 45 => + array ( + ), + 46 => + array ( + ), + 47 => NULL, + 56 => + array ( + ), + 57 => NULL, + ), + 'C:\\paratest\\src\\ParaTest\\Coverage\\CoverageReporterInterface.php' => + array ( + ), + 'C:\\paratest\\src\\ParaTest\\Runners\\PHPUnit\\Suite.php' => + array ( + ), + 'C:\\paratest\\src\\ParaTest\\Console\\Commands\\ParaTestCommand.php' => + array ( + 19 => + array ( + ), + 20 => + array ( + ), + 21 => + array ( + ), + 22 => + array ( + ), + 29 => + array ( + ), + 30 => NULL, + 38 => + array ( + ), + 39 => + array ( + ), + 40 => + array ( + ), + 41 => + array ( + ), + 42 => + array ( + ), + 43 => + array ( + ), + 44 => + array ( + ), + 45 => + array ( + ), + 46 => + array ( + ), + 48 => + array ( + ), + 49 => + array ( + ), + 51 => + array ( + ), + 62 => + array ( + ), + 63 => NULL, + ), + 'C:\\paratest\\src\\ParaTest\\Logging\\MetaProvider.php' => + array ( + 35 => + array ( + ), + 36 => + array ( + ), + 38 => + array ( + ), + 39 => + array ( + ), + 41 => + array ( + ), + 51 => + array ( + ), + 52 => + array ( + ), + 53 => + array ( + ), + 54 => NULL, + 64 => + array ( + ), + 65 => + array ( + ), + 66 => + array ( + ), + 72 => + array ( + ), + 74 => + array ( + ), + 75 => NULL, + ), + 'C:\\paratest\\src\\ParaTest\\Parser\\NoClassInFileException.php' => + array ( + ), + 'C:\\paratest\\src\\ParaTest\\Runners\\PHPUnit\\SuitePath.php' => + array ( + 28 => + array ( + ), + 29 => + array ( + ), + 31 => + array ( + ), + 32 => + array ( + ), + 33 => + array ( + ), + 34 => + array ( + ), + 41 => + array ( + ), + 42 => NULL, + 49 => + array ( + ), + 50 => NULL, + 57 => + array ( + ), + 58 => NULL, + 65 => + array ( + ), + 66 => NULL, + ), + 'C:\\paratest\\src\\ParaTest\\Runners\\PHPUnit\\Configuration.php' => + array ( + 39 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructor', + 1 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetExitCode', + 2 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructorAssignsTokens', + 3 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetsNextAvailableTokenReturnsTokenIdentifier', + 4 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetNextAvailableTokenReturnsFalseWhenNoTokensAreAvailable', + 5 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testReleaseTokenMakesTokenAvailable', + ), + 40 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructor', + 1 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetExitCode', + 2 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructorAssignsTokens', + 3 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetsNextAvailableTokenReturnsTokenIdentifier', + 4 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetNextAvailableTokenReturnsFalseWhenNoTokensAreAvailable', + 5 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testReleaseTokenMakesTokenAvailable', + ), + 41 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructor', + 1 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetExitCode', + 2 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructorAssignsTokens', + 3 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetsNextAvailableTokenReturnsTokenIdentifier', + 4 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetNextAvailableTokenReturnsFalseWhenNoTokensAreAvailable', + 5 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testReleaseTokenMakesTokenAvailable', + ), + 43 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructor', + 1 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetExitCode', + 2 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructorAssignsTokens', + 3 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetsNextAvailableTokenReturnsTokenIdentifier', + 4 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetNextAvailableTokenReturnsFalseWhenNoTokensAreAvailable', + 5 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testReleaseTokenMakesTokenAvailable', + ), + 52 => + array ( + ), + 53 => + array ( + ), + 55 => + array ( + ), + 57 => NULL, + 67 => + array ( + ), + 68 => NULL, + 78 => + array ( + ), + 79 => + array ( + ), + 81 => + array ( + ), + 82 => + array ( + ), + 84 => + array ( + ), + 85 => + array ( + ), + 87 => + array ( + ), + 88 => NULL, + 100 => + array ( + ), + 102 => + array ( + ), + 103 => + array ( + ), + 104 => + array ( + ), + 105 => + array ( + ), + 106 => + array ( + ), + 108 => + array ( + ), + 109 => + array ( + ), + 110 => + array ( + ), + 112 => + array ( + ), + 113 => + array ( + ), + 114 => + array ( + ), + 115 => + array ( + ), + 116 => + array ( + ), + 119 => + array ( + ), + 120 => + array ( + ), + 121 => + array ( + ), + 126 => + array ( + ), + 127 => + array ( + ), + 130 => + array ( + ), + 133 => + array ( + ), + 139 => + array ( + ), + 140 => NULL, + 150 => + array ( + ), + 151 => NULL, + 161 => + array ( + ), + 163 => + array ( + ), + 164 => + array ( + ), + 167 => + array ( + ), + 168 => + array ( + ), + 169 => + array ( + ), + 170 => + array ( + ), + 171 => + array ( + ), + 174 => + array ( + ), + 177 => + array ( + ), + 178 => NULL, + 188 => + array ( + ), + 189 => NULL, + 199 => + array ( + ), + 200 => NULL, + ), + 'C:\\paratest\\src\\ParaTest\\Runners\\PHPUnit\\Options.php' => + array ( + 70 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructor', + 1 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetExitCode', + 2 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructorAssignsTokens', + 3 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetsNextAvailableTokenReturnsTokenIdentifier', + 4 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetNextAvailableTokenReturnsFalseWhenNoTokensAreAvailable', + 5 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testReleaseTokenMakesTokenAvailable', + ), + 71 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructor', + 1 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetExitCode', + 2 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructorAssignsTokens', + 3 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetsNextAvailableTokenReturnsTokenIdentifier', + 4 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetNextAvailableTokenReturnsFalseWhenNoTokensAreAvailable', + 5 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testReleaseTokenMakesTokenAvailable', + ), + 74 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructor', + 1 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetExitCode', + 2 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructorAssignsTokens', + 3 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetsNextAvailableTokenReturnsTokenIdentifier', + 4 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetNextAvailableTokenReturnsFalseWhenNoTokensAreAvailable', + 5 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testReleaseTokenMakesTokenAvailable', + ), + 75 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructor', + 1 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetExitCode', + 2 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructorAssignsTokens', + 3 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetsNextAvailableTokenReturnsTokenIdentifier', + 4 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetNextAvailableTokenReturnsFalseWhenNoTokensAreAvailable', + 5 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testReleaseTokenMakesTokenAvailable', + ), + 76 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructor', + 1 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetExitCode', + 2 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructorAssignsTokens', + 3 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetsNextAvailableTokenReturnsTokenIdentifier', + 4 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetNextAvailableTokenReturnsFalseWhenNoTokensAreAvailable', + 5 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testReleaseTokenMakesTokenAvailable', + ), + 77 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructor', + 1 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetExitCode', + 2 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructorAssignsTokens', + 3 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetsNextAvailableTokenReturnsTokenIdentifier', + 4 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetNextAvailableTokenReturnsFalseWhenNoTokensAreAvailable', + 5 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testReleaseTokenMakesTokenAvailable', + ), + 78 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructor', + 1 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetExitCode', + 2 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructorAssignsTokens', + 3 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetsNextAvailableTokenReturnsTokenIdentifier', + 4 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetNextAvailableTokenReturnsFalseWhenNoTokensAreAvailable', + 5 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testReleaseTokenMakesTokenAvailable', + ), + 79 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructor', + 1 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetExitCode', + 2 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructorAssignsTokens', + 3 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetsNextAvailableTokenReturnsTokenIdentifier', + 4 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetNextAvailableTokenReturnsFalseWhenNoTokensAreAvailable', + 5 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testReleaseTokenMakesTokenAvailable', + ), + 80 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructor', + 1 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetExitCode', + 2 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructorAssignsTokens', + 3 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetsNextAvailableTokenReturnsTokenIdentifier', + 4 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetNextAvailableTokenReturnsFalseWhenNoTokensAreAvailable', + 5 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testReleaseTokenMakesTokenAvailable', + ), + 81 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructor', + 1 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetExitCode', + 2 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructorAssignsTokens', + 3 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetsNextAvailableTokenReturnsTokenIdentifier', + 4 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetNextAvailableTokenReturnsFalseWhenNoTokensAreAvailable', + 5 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testReleaseTokenMakesTokenAvailable', + ), + 82 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructor', + 1 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetExitCode', + 2 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructorAssignsTokens', + 3 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetsNextAvailableTokenReturnsTokenIdentifier', + 4 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetNextAvailableTokenReturnsFalseWhenNoTokensAreAvailable', + 5 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testReleaseTokenMakesTokenAvailable', + ), + 83 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructor', + 1 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetExitCode', + 2 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructorAssignsTokens', + 3 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetsNextAvailableTokenReturnsTokenIdentifier', + 4 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetNextAvailableTokenReturnsFalseWhenNoTokensAreAvailable', + 5 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testReleaseTokenMakesTokenAvailable', + ), + 84 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructor', + 1 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetExitCode', + 2 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructorAssignsTokens', + 3 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetsNextAvailableTokenReturnsTokenIdentifier', + 4 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetNextAvailableTokenReturnsFalseWhenNoTokensAreAvailable', + 5 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testReleaseTokenMakesTokenAvailable', + ), + 91 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructor', + 1 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetExitCode', + 2 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructorAssignsTokens', + 3 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetsNextAvailableTokenReturnsTokenIdentifier', + 4 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetNextAvailableTokenReturnsFalseWhenNoTokensAreAvailable', + 5 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testReleaseTokenMakesTokenAvailable', + ), + 93 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructor', + 1 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetExitCode', + 2 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructorAssignsTokens', + 3 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetsNextAvailableTokenReturnsTokenIdentifier', + 4 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetNextAvailableTokenReturnsFalseWhenNoTokensAreAvailable', + 5 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testReleaseTokenMakesTokenAvailable', + ), + 94 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructor', + 1 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetExitCode', + 2 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructorAssignsTokens', + 3 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetsNextAvailableTokenReturnsTokenIdentifier', + 4 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetNextAvailableTokenReturnsFalseWhenNoTokensAreAvailable', + 5 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testReleaseTokenMakesTokenAvailable', + ), + 96 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructor', + 1 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetExitCode', + 2 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructorAssignsTokens', + 3 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetsNextAvailableTokenReturnsTokenIdentifier', + 4 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetNextAvailableTokenReturnsFalseWhenNoTokensAreAvailable', + 5 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testReleaseTokenMakesTokenAvailable', + ), + 98 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructor', + 1 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetExitCode', + 2 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructorAssignsTokens', + 3 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetsNextAvailableTokenReturnsTokenIdentifier', + 4 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetNextAvailableTokenReturnsFalseWhenNoTokensAreAvailable', + 5 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testReleaseTokenMakesTokenAvailable', + ), + 102 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructor', + 1 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetExitCode', + 2 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructorAssignsTokens', + 3 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetsNextAvailableTokenReturnsTokenIdentifier', + 4 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetNextAvailableTokenReturnsFalseWhenNoTokensAreAvailable', + 5 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testReleaseTokenMakesTokenAvailable', + ), + 103 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructor', + 1 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetExitCode', + 2 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructorAssignsTokens', + 3 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetsNextAvailableTokenReturnsTokenIdentifier', + 4 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetNextAvailableTokenReturnsFalseWhenNoTokensAreAvailable', + 5 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testReleaseTokenMakesTokenAvailable', + ), + 104 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructor', + 1 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetExitCode', + 2 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructorAssignsTokens', + 3 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetsNextAvailableTokenReturnsTokenIdentifier', + 4 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetNextAvailableTokenReturnsFalseWhenNoTokensAreAvailable', + 5 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testReleaseTokenMakesTokenAvailable', + ), + 114 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructor', + 1 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetExitCode', + 2 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructorAssignsTokens', + 3 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetsNextAvailableTokenReturnsTokenIdentifier', + 4 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetNextAvailableTokenReturnsFalseWhenNoTokensAreAvailable', + 5 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testReleaseTokenMakesTokenAvailable', + ), + 126 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructor', + 1 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetExitCode', + 2 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructorAssignsTokens', + 3 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetsNextAvailableTokenReturnsTokenIdentifier', + 4 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetNextAvailableTokenReturnsFalseWhenNoTokensAreAvailable', + 5 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testReleaseTokenMakesTokenAvailable', + ), + 127 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructor', + 1 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetExitCode', + 2 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructorAssignsTokens', + 3 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetsNextAvailableTokenReturnsTokenIdentifier', + 4 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetNextAvailableTokenReturnsFalseWhenNoTokensAreAvailable', + 5 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testReleaseTokenMakesTokenAvailable', + ), + 128 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructor', + 1 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetExitCode', + 2 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructorAssignsTokens', + 3 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetsNextAvailableTokenReturnsTokenIdentifier', + 4 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetNextAvailableTokenReturnsFalseWhenNoTokensAreAvailable', + 5 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testReleaseTokenMakesTokenAvailable', + ), + 131 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructor', + 1 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetExitCode', + 2 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructorAssignsTokens', + 3 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetsNextAvailableTokenReturnsTokenIdentifier', + 4 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetNextAvailableTokenReturnsFalseWhenNoTokensAreAvailable', + 5 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testReleaseTokenMakesTokenAvailable', + ), + 134 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructor', + 1 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetExitCode', + 2 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructorAssignsTokens', + 3 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetsNextAvailableTokenReturnsTokenIdentifier', + 4 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetNextAvailableTokenReturnsFalseWhenNoTokensAreAvailable', + 5 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testReleaseTokenMakesTokenAvailable', + ), + 135 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructor', + 1 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetExitCode', + 2 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructorAssignsTokens', + 3 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetsNextAvailableTokenReturnsTokenIdentifier', + 4 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetNextAvailableTokenReturnsFalseWhenNoTokensAreAvailable', + 5 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testReleaseTokenMakesTokenAvailable', + ), + 150 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructor', + 1 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetExitCode', + 2 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructorAssignsTokens', + 3 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetsNextAvailableTokenReturnsTokenIdentifier', + 4 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetNextAvailableTokenReturnsFalseWhenNoTokensAreAvailable', + 5 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testReleaseTokenMakesTokenAvailable', + ), + 151 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructor', + 1 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetExitCode', + 2 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructorAssignsTokens', + 3 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetsNextAvailableTokenReturnsTokenIdentifier', + 4 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetNextAvailableTokenReturnsFalseWhenNoTokensAreAvailable', + 5 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testReleaseTokenMakesTokenAvailable', + ), + 152 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructor', + 1 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetExitCode', + 2 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructorAssignsTokens', + 3 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetsNextAvailableTokenReturnsTokenIdentifier', + 4 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetNextAvailableTokenReturnsFalseWhenNoTokensAreAvailable', + 5 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testReleaseTokenMakesTokenAvailable', + ), + 154 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructor', + 1 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetExitCode', + 2 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructorAssignsTokens', + 3 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetsNextAvailableTokenReturnsTokenIdentifier', + 4 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetNextAvailableTokenReturnsFalseWhenNoTokensAreAvailable', + 5 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testReleaseTokenMakesTokenAvailable', + ), + 158 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructor', + 1 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetExitCode', + 2 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructorAssignsTokens', + 3 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetsNextAvailableTokenReturnsTokenIdentifier', + 4 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetNextAvailableTokenReturnsFalseWhenNoTokensAreAvailable', + 5 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testReleaseTokenMakesTokenAvailable', + ), + 159 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructor', + 1 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetExitCode', + 2 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructorAssignsTokens', + 3 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetsNextAvailableTokenReturnsTokenIdentifier', + 4 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetNextAvailableTokenReturnsFalseWhenNoTokensAreAvailable', + 5 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testReleaseTokenMakesTokenAvailable', + ), + 172 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructor', + 1 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetExitCode', + 2 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructorAssignsTokens', + 3 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetsNextAvailableTokenReturnsTokenIdentifier', + 4 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetNextAvailableTokenReturnsFalseWhenNoTokensAreAvailable', + 5 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testReleaseTokenMakesTokenAvailable', + ), + 173 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructor', + 1 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetExitCode', + 2 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructorAssignsTokens', + 3 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetsNextAvailableTokenReturnsTokenIdentifier', + 4 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetNextAvailableTokenReturnsFalseWhenNoTokensAreAvailable', + 5 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testReleaseTokenMakesTokenAvailable', + ), + 177 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructor', + 1 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetExitCode', + 2 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructorAssignsTokens', + 3 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetsNextAvailableTokenReturnsTokenIdentifier', + 4 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetNextAvailableTokenReturnsFalseWhenNoTokensAreAvailable', + 5 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testReleaseTokenMakesTokenAvailable', + ), + 188 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructor', + 1 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetExitCode', + 2 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructorAssignsTokens', + 3 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetsNextAvailableTokenReturnsTokenIdentifier', + 4 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetNextAvailableTokenReturnsFalseWhenNoTokensAreAvailable', + 5 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testReleaseTokenMakesTokenAvailable', + ), + 189 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructor', + 1 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetExitCode', + 2 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructorAssignsTokens', + 3 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetsNextAvailableTokenReturnsTokenIdentifier', + 4 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetNextAvailableTokenReturnsFalseWhenNoTokensAreAvailable', + 5 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testReleaseTokenMakesTokenAvailable', + ), + 190 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructor', + 1 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetExitCode', + 2 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructorAssignsTokens', + 3 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetsNextAvailableTokenReturnsTokenIdentifier', + 4 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetNextAvailableTokenReturnsFalseWhenNoTokensAreAvailable', + 5 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testReleaseTokenMakesTokenAvailable', + ), + 191 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructor', + 1 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetExitCode', + 2 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructorAssignsTokens', + 3 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetsNextAvailableTokenReturnsTokenIdentifier', + 4 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetNextAvailableTokenReturnsFalseWhenNoTokensAreAvailable', + 5 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testReleaseTokenMakesTokenAvailable', + ), + 192 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructor', + 1 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetExitCode', + 2 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructorAssignsTokens', + 3 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetsNextAvailableTokenReturnsTokenIdentifier', + 4 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetNextAvailableTokenReturnsFalseWhenNoTokensAreAvailable', + 5 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testReleaseTokenMakesTokenAvailable', + ), + 193 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructor', + 1 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetExitCode', + 2 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructorAssignsTokens', + 3 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetsNextAvailableTokenReturnsTokenIdentifier', + 4 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetNextAvailableTokenReturnsFalseWhenNoTokensAreAvailable', + 5 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testReleaseTokenMakesTokenAvailable', + ), + 194 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructor', + 1 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetExitCode', + 2 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructorAssignsTokens', + 3 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetsNextAvailableTokenReturnsTokenIdentifier', + 4 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetNextAvailableTokenReturnsFalseWhenNoTokensAreAvailable', + 5 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testReleaseTokenMakesTokenAvailable', + ), + 195 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructor', + 1 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetExitCode', + 2 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructorAssignsTokens', + 3 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetsNextAvailableTokenReturnsTokenIdentifier', + 4 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetNextAvailableTokenReturnsFalseWhenNoTokensAreAvailable', + 5 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testReleaseTokenMakesTokenAvailable', + ), + 196 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructor', + 1 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetExitCode', + 2 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructorAssignsTokens', + 3 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetsNextAvailableTokenReturnsTokenIdentifier', + 4 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetNextAvailableTokenReturnsFalseWhenNoTokensAreAvailable', + 5 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testReleaseTokenMakesTokenAvailable', + ), + 197 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructor', + 1 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetExitCode', + 2 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructorAssignsTokens', + 3 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetsNextAvailableTokenReturnsTokenIdentifier', + 4 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetNextAvailableTokenReturnsFalseWhenNoTokensAreAvailable', + 5 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testReleaseTokenMakesTokenAvailable', + ), + 198 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructor', + 1 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetExitCode', + 2 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructorAssignsTokens', + 3 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetsNextAvailableTokenReturnsTokenIdentifier', + 4 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetNextAvailableTokenReturnsFalseWhenNoTokensAreAvailable', + 5 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testReleaseTokenMakesTokenAvailable', + ), + 199 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructor', + 1 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetExitCode', + 2 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructorAssignsTokens', + 3 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetsNextAvailableTokenReturnsTokenIdentifier', + 4 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetNextAvailableTokenReturnsFalseWhenNoTokensAreAvailable', + 5 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testReleaseTokenMakesTokenAvailable', + ), + 201 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructor', + 1 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetExitCode', + 2 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructorAssignsTokens', + 3 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetsNextAvailableTokenReturnsTokenIdentifier', + 4 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetNextAvailableTokenReturnsFalseWhenNoTokensAreAvailable', + 5 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testReleaseTokenMakesTokenAvailable', + ), + 202 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructor', + 1 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetExitCode', + 2 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructorAssignsTokens', + 3 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetsNextAvailableTokenReturnsTokenIdentifier', + 4 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetNextAvailableTokenReturnsFalseWhenNoTokensAreAvailable', + 5 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testReleaseTokenMakesTokenAvailable', + ), + 205 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructor', + 1 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetExitCode', + 2 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructorAssignsTokens', + 3 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetsNextAvailableTokenReturnsTokenIdentifier', + 4 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetNextAvailableTokenReturnsFalseWhenNoTokensAreAvailable', + 5 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testReleaseTokenMakesTokenAvailable', + ), + 217 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructor', + 1 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetExitCode', + 2 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructorAssignsTokens', + 3 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetsNextAvailableTokenReturnsTokenIdentifier', + 4 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetNextAvailableTokenReturnsFalseWhenNoTokensAreAvailable', + 5 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testReleaseTokenMakesTokenAvailable', + ), + 220 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructor', + 1 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetExitCode', + 2 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructorAssignsTokens', + 3 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetsNextAvailableTokenReturnsTokenIdentifier', + 4 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetNextAvailableTokenReturnsFalseWhenNoTokensAreAvailable', + 5 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testReleaseTokenMakesTokenAvailable', + ), + 233 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructor', + 1 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetExitCode', + 2 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructorAssignsTokens', + 3 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetsNextAvailableTokenReturnsTokenIdentifier', + 4 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetNextAvailableTokenReturnsFalseWhenNoTokensAreAvailable', + 5 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testReleaseTokenMakesTokenAvailable', + ), + 237 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructor', + 1 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetExitCode', + 2 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructorAssignsTokens', + 3 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetsNextAvailableTokenReturnsTokenIdentifier', + 4 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetNextAvailableTokenReturnsFalseWhenNoTokensAreAvailable', + 5 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testReleaseTokenMakesTokenAvailable', + ), + 238 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructor', + 1 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetExitCode', + 2 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructorAssignsTokens', + 3 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetsNextAvailableTokenReturnsTokenIdentifier', + 4 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetNextAvailableTokenReturnsFalseWhenNoTokensAreAvailable', + 5 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testReleaseTokenMakesTokenAvailable', + ), + 240 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructor', + 1 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetExitCode', + 2 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructorAssignsTokens', + 3 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetsNextAvailableTokenReturnsTokenIdentifier', + 4 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetNextAvailableTokenReturnsFalseWhenNoTokensAreAvailable', + 5 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testReleaseTokenMakesTokenAvailable', + ), + 241 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructor', + 1 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetExitCode', + 2 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructorAssignsTokens', + 3 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetsNextAvailableTokenReturnsTokenIdentifier', + 4 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetNextAvailableTokenReturnsFalseWhenNoTokensAreAvailable', + 5 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testReleaseTokenMakesTokenAvailable', + ), + 242 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructor', + 1 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetExitCode', + 2 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructorAssignsTokens', + 3 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetsNextAvailableTokenReturnsTokenIdentifier', + 4 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetNextAvailableTokenReturnsFalseWhenNoTokensAreAvailable', + 5 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testReleaseTokenMakesTokenAvailable', + ), + 254 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructor', + 1 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetExitCode', + 2 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructorAssignsTokens', + 3 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetsNextAvailableTokenReturnsTokenIdentifier', + 4 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetNextAvailableTokenReturnsFalseWhenNoTokensAreAvailable', + 5 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testReleaseTokenMakesTokenAvailable', + ), + 255 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructor', + 1 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetExitCode', + 2 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructorAssignsTokens', + 3 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetsNextAvailableTokenReturnsTokenIdentifier', + 4 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetNextAvailableTokenReturnsFalseWhenNoTokensAreAvailable', + 5 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testReleaseTokenMakesTokenAvailable', + ), + 256 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructor', + 1 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetExitCode', + 2 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructorAssignsTokens', + 3 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetsNextAvailableTokenReturnsTokenIdentifier', + 4 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetNextAvailableTokenReturnsFalseWhenNoTokensAreAvailable', + 5 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testReleaseTokenMakesTokenAvailable', + ), + 257 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructor', + 1 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetExitCode', + 2 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructorAssignsTokens', + 3 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetsNextAvailableTokenReturnsTokenIdentifier', + 4 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetNextAvailableTokenReturnsFalseWhenNoTokensAreAvailable', + 5 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testReleaseTokenMakesTokenAvailable', + ), + 260 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructor', + 1 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetExitCode', + 2 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructorAssignsTokens', + 3 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetsNextAvailableTokenReturnsTokenIdentifier', + 4 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetNextAvailableTokenReturnsFalseWhenNoTokensAreAvailable', + 5 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testReleaseTokenMakesTokenAvailable', + ), + 268 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructor', + 1 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetExitCode', + 2 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructorAssignsTokens', + 3 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetsNextAvailableTokenReturnsTokenIdentifier', + 4 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetNextAvailableTokenReturnsFalseWhenNoTokensAreAvailable', + 5 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testReleaseTokenMakesTokenAvailable', + ), + ), + 'C:\\paratest\\src\\ParaTest\\Runners\\PHPUnit\\Runner.php' => + array ( + 19 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructor', + 1 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetExitCode', + 2 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructorAssignsTokens', + 3 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetsNextAvailableTokenReturnsTokenIdentifier', + 4 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetNextAvailableTokenReturnsFalseWhenNoTokensAreAvailable', + 5 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testReleaseTokenMakesTokenAvailable', + ), + 20 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructor', + 1 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetExitCode', + 2 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructorAssignsTokens', + 3 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetsNextAvailableTokenReturnsTokenIdentifier', + 4 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetNextAvailableTokenReturnsFalseWhenNoTokensAreAvailable', + 5 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testReleaseTokenMakesTokenAvailable', + ), + 21 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructor', + 1 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetExitCode', + 2 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructorAssignsTokens', + 3 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetsNextAvailableTokenReturnsTokenIdentifier', + 4 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetNextAvailableTokenReturnsFalseWhenNoTokensAreAvailable', + 5 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testReleaseTokenMakesTokenAvailable', + ), + 135 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructor', + 1 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetExitCode', + 2 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructorAssignsTokens', + 3 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetsNextAvailableTokenReturnsTokenIdentifier', + 4 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetNextAvailableTokenReturnsFalseWhenNoTokensAreAvailable', + 5 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testReleaseTokenMakesTokenAvailable', + ), + 136 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructor', + 1 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetExitCode', + 2 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructorAssignsTokens', + 3 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetsNextAvailableTokenReturnsTokenIdentifier', + 4 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetNextAvailableTokenReturnsFalseWhenNoTokensAreAvailable', + 5 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testReleaseTokenMakesTokenAvailable', + ), + 137 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructor', + 1 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetExitCode', + 2 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructorAssignsTokens', + 3 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetsNextAvailableTokenReturnsTokenIdentifier', + 4 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetNextAvailableTokenReturnsFalseWhenNoTokensAreAvailable', + 5 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testReleaseTokenMakesTokenAvailable', + ), + 139 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructor', + 1 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetExitCode', + 2 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructorAssignsTokens', + 3 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetsNextAvailableTokenReturnsTokenIdentifier', + 4 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetNextAvailableTokenReturnsFalseWhenNoTokensAreAvailable', + 5 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testReleaseTokenMakesTokenAvailable', + ), + 149 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetsNextAvailableTokenReturnsTokenIdentifier', + 1 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetNextAvailableTokenReturnsFalseWhenNoTokensAreAvailable', + ), + 150 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetsNextAvailableTokenReturnsTokenIdentifier', + 1 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetNextAvailableTokenReturnsFalseWhenNoTokensAreAvailable', + ), + 151 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetsNextAvailableTokenReturnsTokenIdentifier', + 1 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetNextAvailableTokenReturnsFalseWhenNoTokensAreAvailable', + ), + 154 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetNextAvailableTokenReturnsFalseWhenNoTokensAreAvailable', + ), + 165 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testReleaseTokenMakesTokenAvailable', + ), + 166 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testReleaseTokenMakesTokenAvailable', + ), + 167 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testReleaseTokenMakesTokenAvailable', + ), + 168 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testReleaseTokenMakesTokenAvailable', + ), + 169 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testReleaseTokenMakesTokenAvailable', + ), + ), + 'C:\\paratest\\src\\ParaTest\\Parser\\ParsedFunction.php' => + array ( + ), + 'C:\\paratest\\src\\ParaTest\\Runners\\PHPUnit\\Worker.php' => + array ( + 28 => + array ( + ), + 29 => + array ( + ), + 30 => + array ( + ), + 32 => + array ( + ), + 33 => + array ( + ), + 35 => + array ( + ), + 36 => + array ( + ), + 37 => + array ( + ), + 38 => + array ( + ), + 39 => + array ( + ), + 40 => + array ( + ), + 44 => + array ( + ), + 45 => NULL, + 49 => + array ( + ), + 50 => + array ( + ), + 51 => + array ( + ), + 52 => + array ( + ), + 53 => + array ( + ), + 57 => + array ( + ), + 58 => + array ( + ), + 60 => + array ( + ), + 61 => + array ( + ), + 62 => + array ( + ), + 66 => + array ( + ), + 67 => + array ( + ), + 69 => + array ( + ), + 73 => + array ( + ), + 74 => + array ( + ), + 78 => + array ( + ), + 79 => NULL, + 83 => + array ( + ), + 84 => + array ( + ), + 86 => + array ( + ), + 90 => + array ( + ), + 91 => + array ( + ), + 92 => + array ( + ), + 100 => + array ( + ), + 101 => + array ( + ), + 103 => + array ( + ), + 104 => + array ( + ), + 105 => + array ( + ), + 106 => + array ( + ), + 107 => + array ( + ), + 108 => + array ( + ), + 109 => + array ( + ), + 112 => + array ( + ), + 113 => + array ( + ), + 115 => + array ( + ), + 119 => + array ( + ), + 120 => + array ( + ), + 121 => + array ( + ), + 122 => NULL, + 132 => + array ( + ), + 133 => + array ( + ), + 134 => + array ( + ), + 135 => + array ( + ), + 137 => + array ( + ), + 141 => + array ( + ), + 142 => + array ( + ), + 144 => + array ( + ), + 146 => NULL, + 150 => + array ( + ), + 151 => + array ( + ), + 152 => + array ( + ), + 155 => + array ( + ), + 159 => + array ( + ), + 160 => + array ( + ), + 161 => + array ( + ), + 162 => NULL, + 166 => + array ( + ), + 167 => + array ( + ), + 169 => + array ( + ), + 171 => + array ( + ), + 172 => + array ( + ), + 173 => + array ( + ), + 176 => + array ( + ), + 177 => + array ( + ), + 178 => + array ( + ), + 180 => + array ( + ), + 181 => NULL, + 185 => + array ( + ), + 186 => + array ( + ), + 187 => + array ( + ), + 188 => + array ( + ), + 189 => + array ( + ), + 190 => + array ( + ), + 191 => + array ( + ), + 192 => + array ( + ), + 195 => + array ( + ), + 199 => + array ( + ), + 200 => NULL, + 209 => + array ( + ), + 210 => + array ( + ), + 211 => + array ( + ), + 212 => + array ( + ), + 213 => + array ( + ), + 215 => + array ( + ), + 218 => + array ( + ), + 219 => + array ( + ), + 221 => + array ( + ), + 222 => + array ( + ), + 223 => + array ( + ), + 224 => + array ( + ), + 226 => + array ( + ), + 227 => + array ( + ), + 230 => + array ( + ), + 232 => + array ( + ), + ), + 'C:\\paratest\\src\\ParaTest\\Logging\\JUnit\\TestSuite.php' => + array ( + 73 => + array ( + ), + 74 => + array ( + ), + 75 => + array ( + ), + 76 => + array ( + ), + 77 => + array ( + ), + 78 => + array ( + ), + 79 => + array ( + ), + 80 => + array ( + ), + 91 => + array ( + ), + 92 => + array ( + ), + 93 => + array ( + ), + 94 => + array ( + ), + 95 => + array ( + ), + 96 => + array ( + ), + 97 => + array ( + ), + 98 => + array ( + ), + 100 => NULL, + 110 => + array ( + ), + 111 => + array ( + ), + 112 => + array ( + ), + 113 => + array ( + ), + 114 => + array ( + ), + 115 => + array ( + ), + 116 => + array ( + ), + 117 => + array ( + ), + 119 => NULL, + ), + 'C:\\paratest\\src\\ParaTest\\Console\\Testers\\Tester.php' => + array ( + 43 => + array ( + ), + 44 => + array ( + ), + 45 => + array ( + ), + 46 => + array ( + ), + 49 => + array ( + ), + 50 => NULL, + 60 => + array ( + ), + 61 => + array ( + ), + 62 => + array ( + ), + 63 => + array ( + ), + 64 => NULL, + ), + 'C:\\paratest\\src\\ParaTest\\Runners\\PHPUnit\\TestMethod.php' => + array ( + ), + 'C:\\paratest\\src\\ParaTest\\Coverage\\CoverageMerger.php' => + array ( + 19 => + array ( + ), + 20 => + array ( + ), + 22 => + array ( + ), + 24 => + array ( + ), + 31 => + array ( + ), + 32 => + array ( + ), + 39 => + array ( + ), + 40 => + array ( + ), + 51 => + array ( + ), + 53 => + array ( + ), + 54 => + array ( + ), + 57 => + array ( + ), + 59 => + array ( + ), + 60 => NULL, + 69 => + array ( + ), + 70 => + array ( + ), + 73 => + array ( + ), + 74 => + array ( + ), + 77 => + array ( + ), + 78 => + array ( + ), + 79 => + array ( + ), + 88 => + array ( + ), + 89 => + array ( + ), + 92 => + array ( + ), + 93 => NULL, + ), + 'C:\\paratest\\src\\ParaTest\\Runners\\PHPUnit\\ResultPrinter.php' => + array ( + 107 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructor', + 1 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetExitCode', + 2 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructorAssignsTokens', + 3 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetsNextAvailableTokenReturnsTokenIdentifier', + 4 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetNextAvailableTokenReturnsFalseWhenNoTokensAreAvailable', + 5 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testReleaseTokenMakesTokenAvailable', + ), + 108 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructor', + 1 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetExitCode', + 2 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructorAssignsTokens', + 3 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetsNextAvailableTokenReturnsTokenIdentifier', + 4 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetNextAvailableTokenReturnsFalseWhenNoTokensAreAvailable', + 5 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testReleaseTokenMakesTokenAvailable', + ), + 109 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructor', + 1 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetExitCode', + 2 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructorAssignsTokens', + 3 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetsNextAvailableTokenReturnsTokenIdentifier', + 4 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetNextAvailableTokenReturnsFalseWhenNoTokensAreAvailable', + 5 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testReleaseTokenMakesTokenAvailable', + ), + 119 => + array ( + ), + 120 => + array ( + ), + 121 => + array ( + ), + 123 => + array ( + ), + 124 => NULL, + 134 => + array ( + ), + 135 => + array ( + ), + 136 => + array ( + ), + 137 => + array ( + ), + 138 => + array ( + ), + 139 => + array ( + ), + 140 => + array ( + ), + 141 => + array ( + ), + 142 => + array ( + ), + 143 => + array ( + ), + 145 => + array ( + ), + 146 => + array ( + ), + 148 => + array ( + ), + 149 => + array ( + ), + 150 => + array ( + ), + 151 => + array ( + ), + 158 => + array ( + ), + 159 => + array ( + ), + 160 => + array ( + ), + 168 => + array ( + ), + 169 => + array ( + ), + 170 => + array ( + ), + 177 => + array ( + ), + 178 => + array ( + ), + 179 => + array ( + ), + 180 => + array ( + ), + 181 => + array ( + ), + 182 => + array ( + ), + 193 => + array ( + ), + 194 => + array ( + ), + 195 => + array ( + ), + 198 => + array ( + ), + 199 => + array ( + ), + 200 => + array ( + ), + 201 => + array ( + ), + 204 => + array ( + ), + 205 => + array ( + ), + 208 => + array ( + ), + 209 => + array ( + ), + 210 => + array ( + ), + 211 => + array ( + ), + 214 => + array ( + ), + 215 => + array ( + ), + 216 => + array ( + ), + 217 => + array ( + ), + 226 => + array ( + ), + 227 => NULL, + 235 => + array ( + ), + 236 => + array ( + ), + 243 => + array ( + ), + 244 => NULL, + 253 => + array ( + ), + 254 => NULL, + 264 => + array ( + ), + 265 => + array ( + ), + 266 => + array ( + ), + 267 => NULL, + 276 => + array ( + ), + 278 => + array ( + ), + 279 => NULL, + 288 => + array ( + ), + 290 => + array ( + ), + 291 => NULL, + 300 => + array ( + ), + 301 => NULL, + 311 => + array ( + ), + 313 => + array ( + ), + 315 => + array ( + ), + 317 => + array ( + ), + 318 => + array ( + ), + 321 => + array ( + ), + 322 => + array ( + ), + 324 => + array ( + ), + 333 => + array ( + ), + 334 => + array ( + ), + 335 => + array ( + ), + 336 => + array ( + ), + 337 => + array ( + ), + 340 => + array ( + ), + 352 => + array ( + ), + 353 => + array ( + ), + 354 => NULL, + 369 => + array ( + ), + 370 => + array ( + ), + 371 => + array ( + ), + 372 => + array ( + ), + 374 => + array ( + ), + 377 => + array ( + ), + 379 => + array ( + ), + 392 => + array ( + ), + 393 => + array ( + ), + 394 => + array ( + ), + 395 => + array ( + ), + 398 => + array ( + ), + 409 => + array ( + ), + 410 => + array ( + ), + 411 => + array ( + ), + 412 => + array ( + ), + 413 => + array ( + ), + 414 => + array ( + ), + 416 => + array ( + ), + 428 => + array ( + ), + 429 => + array ( + ), + 430 => + array ( + ), + 432 => + array ( + ), + 433 => + array ( + ), + 434 => + array ( + ), + 437 => + array ( + ), + 440 => + array ( + ), + 441 => + array ( + ), + 444 => + array ( + ), + 445 => NULL, + 452 => + array ( + ), + 453 => + array ( + ), + 454 => + array ( + ), + 455 => + array ( + ), + 456 => + array ( + ), + 458 => NULL, + 468 => + array ( + ), + 470 => + array ( + ), + 473 => + array ( + ), + 474 => + array ( + ), + 475 => + array ( + ), + 476 => + array ( + ), + 479 => NULL, + 489 => + array ( + ), + 490 => + array ( + ), + 492 => + array ( + ), + 495 => + array ( + ), + 497 => + array ( + ), + 500 => + array ( + ), + 505 => + array ( + ), + 506 => + array ( + ), + 508 => + array ( + ), + 510 => + array ( + ), + 513 => NULL, + 517 => + array ( + ), + 519 => + array ( + ), + 520 => + array ( + ), + 522 => + array ( + ), + 523 => NULL, + 527 => + array ( + ), + 529 => + array ( + ), + 530 => + array ( + ), + 532 => + array ( + ), + 533 => NULL, + 541 => + array ( + ), + 542 => + array ( + ), + 544 => + array ( + ), + ), + 'C:\\paratest\\src\\ParaTest\\Runners\\PHPUnit\\SuiteLoader.php' => + array ( + 27 => + array ( + ), + 28 => + array ( + ), + 31 => + array ( + ), + 32 => + array ( + ), + 42 => + array ( + ), + 43 => NULL, + 53 => + array ( + ), + 54 => + array ( + ), + 55 => + array ( + ), + 58 => + array ( + ), + 59 => NULL, + 70 => + array ( + ), + 71 => + array ( + ), + 73 => + array ( + ), + 76 => + array ( + ), + 77 => + array ( + ), + 78 => + array ( + ), + 79 => + array ( + ), + 80 => + array ( + ), + 81 => + array ( + ), + 82 => + array ( + ), + 83 => + array ( + ), + 86 => + array ( + ), + 87 => + array ( + ), + 88 => + array ( + ), + 89 => + array ( + ), + 90 => + array ( + ), + 96 => + array ( + ), + 97 => + array ( + ), + 100 => + array ( + ), + 102 => + array ( + ), + 103 => + array ( + ), + 112 => + array ( + ), + 114 => + array ( + ), + 115 => + array ( + ), + 116 => + array ( + ), + 118 => + array ( + ), + 119 => + array ( + ), + 122 => + array ( + ), + 126 => + array ( + ), + 127 => + array ( + ), + 128 => + array ( + ), + 129 => + array ( + ), + 130 => + array ( + ), + 132 => + array ( + ), + 133 => NULL, + 146 => + array ( + ), + 147 => + array ( + ), + 148 => + array ( + ), + 149 => + array ( + ), + 150 => + array ( + ), + 152 => + array ( + ), + 153 => + array ( + ), + 156 => + array ( + ), + 157 => + array ( + ), + 159 => + array ( + ), + 162 => + array ( + ), + 163 => NULL, + 167 => + array ( + ), + 168 => + array ( + ), + 169 => + array ( + ), + 170 => + array ( + ), + 171 => + array ( + ), + 175 => + array ( + ), + 179 => + array ( + ), + 180 => + array ( + ), + 181 => + array ( + ), + 182 => + array ( + ), + 184 => + array ( + ), + 186 => + array ( + ), + 189 => + array ( + ), + 204 => + array ( + ), + 206 => + array ( + ), + 208 => + array ( + ), + 209 => + array ( + ), + 210 => + array ( + ), + 211 => + array ( + ), + 212 => + array ( + ), + 213 => + array ( + ), + 214 => + array ( + ), + 215 => + array ( + ), + 216 => + array ( + ), + 217 => + array ( + ), + 218 => + array ( + ), + 220 => + array ( + ), + 221 => + array ( + ), + 224 => + array ( + ), + 225 => + array ( + ), + 228 => + array ( + ), + 229 => NULL, + 233 => + array ( + ), + 234 => + array ( + ), + 237 => + array ( + ), + 238 => + array ( + ), + 240 => + array ( + ), + 243 => + array ( + ), + 244 => + array ( + ), + 246 => + array ( + ), + 249 => + array ( + ), + 250 => NULL, + 254 => + array ( + ), + 255 => + array ( + ), + 258 => + array ( + ), + 259 => + array ( + ), + 260 => + array ( + ), + 261 => + array ( + ), + 262 => + array ( + ), + 264 => + array ( + ), + 265 => NULL, + 269 => + array ( + ), + 270 => + array ( + ), + 272 => + array ( + ), + 273 => NULL, + 277 => + array ( + ), + 278 => + array ( + ), + 280 => + array ( + ), + 281 => NULL, + 285 => + array ( + ), + 286 => + array ( + ), + 288 => + array ( + ), + 289 => NULL, + 293 => + array ( + ), + 294 => + array ( + ), + 296 => + array ( + ), + 297 => NULL, + 301 => + array ( + ), + 303 => + array ( + ), + 307 => + array ( + ), + 309 => NULL, + ), + 'C:\\paratest\\src\\ParaTest\\Coverage\\CoverageReporterLegacy.php' => + array ( + 20 => + array ( + ), + 21 => + array ( + ), + 30 => + array ( + ), + 31 => + array ( + ), + 32 => + array ( + ), + 41 => + array ( + ), + 42 => + array ( + ), + 43 => + array ( + ), + 51 => + array ( + ), + 52 => + array ( + ), + 53 => + array ( + ), + ), + 'C:\\paratest\\src\\ParaTest\\Logging\\JUnit\\Writer.php' => + array ( + 56 => + array ( + ), + 57 => + array ( + ), + 58 => + array ( + ), + 59 => + array ( + ), + 60 => + array ( + ), + 69 => + array ( + ), + 70 => NULL, + 80 => + array ( + ), + 81 => + array ( + ), + 82 => + array ( + ), + 83 => + array ( + ), + 84 => + array ( + ), + 85 => + array ( + ), + 88 => + array ( + ), + 89 => NULL, + 98 => + array ( + ), + 99 => + array ( + ), + 111 => + array ( + ), + 112 => + array ( + ), + 113 => + array ( + ), + 114 => + array ( + ), + 115 => + array ( + ), + 118 => + array ( + ), + 119 => + array ( + ), + 120 => NULL, + 132 => + array ( + ), + 133 => + array ( + ), + 134 => + array ( + ), + 135 => + array ( + ), + 136 => + array ( + ), + 139 => + array ( + ), + 140 => + array ( + ), + 141 => + array ( + ), + 142 => + array ( + ), + 143 => NULL, + 154 => + array ( + ), + 155 => + array ( + ), + 156 => + array ( + ), + 157 => + array ( + ), + 159 => + array ( + ), + 169 => + array ( + ), + 170 => + array ( + ), + 171 => + array ( + ), + 172 => + array ( + ), + 174 => + array ( + ), + 175 => + array ( + ), + 176 => + array ( + ), + 177 => + array ( + ), + 179 => + array ( + ), + 180 => + array ( + ), + 181 => NULL, + 199 => + array ( + ), + 200 => NULL, + ), + 'C:\\paratest\\src\\ParaTest\\Runners\\PHPUnit\\WrapperRunner.php' => + array ( + ), + 'C:\\paratest\\src\\ParaTest\\Parser\\Parser.php' => + array ( + 35 => + array ( + ), + 36 => + array ( + ), + 39 => + array ( + ), + 40 => + array ( + ), + 41 => + array ( + ), + 42 => + array ( + ), + 43 => + array ( + ), + 44 => + array ( + ), + 47 => + array ( + ), + 48 => + array ( + ), + 49 => + array ( + ), + 51 => + array ( + ), + 61 => + array ( + ), + 62 => + array ( + ), + 63 => + array ( + ), + 64 => + array ( + ), + 65 => + array ( + ), + 66 => + array ( + ), + 67 => + array ( + ), + 69 => NULL, + 78 => + array ( + ), + 79 => + array ( + ), + 80 => + array ( + ), + 81 => + array ( + ), + 82 => + array ( + ), + 83 => + array ( + ), + 84 => + array ( + ), + 85 => + array ( + ), + 88 => + array ( + ), + 89 => NULL, + 99 => + array ( + ), + 100 => + array ( + ), + 101 => + array ( + ), + 103 => + array ( + ), + 104 => + array ( + ), + 105 => + array ( + ), + 106 => + array ( + ), + 107 => + array ( + ), + 113 => + array ( + ), + 114 => + array ( + ), + 115 => + array ( + ), + 116 => + array ( + ), + 119 => + array ( + ), + 128 => + array ( + ), + 129 => + array ( + ), + 130 => NULL, + 134 => + array ( + ), + 135 => NULL, + ), + 'C:\\paratest\\src\\ParaTest\\Parser\\ParsedObject.php' => + array ( + 18 => + array ( + ), + 19 => + array ( + ), + 20 => + array ( + ), + 29 => + array ( + ), + 30 => NULL, + 39 => + array ( + ), + 40 => NULL, + 53 => + array ( + ), + 54 => + array ( + ), + 56 => + array ( + ), + 58 => + array ( + ), + 59 => NULL, + ), + 'C:\\paratest\\src\\ParaTest\\Runners\\PHPUnit\\TestFileLoader.php' => + array ( + 51 => + array ( + ), + 52 => + array ( + ), + 55 => + array ( + ), + 56 => + array ( + ), + 68 => + array ( + ), + 69 => + array ( + ), + 70 => + array ( + ), + 71 => + array ( + ), + 72 => + array ( + ), + 76 => + array ( + ), + 77 => + array ( + ), + 80 => + array ( + ), + 82 => + array ( + ), + 83 => NULL, + 96 => + array ( + ), + 97 => + array ( + ), + 98 => + array ( + ), + 100 => + array ( + ), + 101 => + array ( + ), + 103 => + array ( + ), + 104 => + array ( + ), + 105 => + array ( + ), + 106 => + array ( + ), + 109 => + array ( + ), + 110 => NULL, + 120 => + array ( + ), + 121 => + array ( + ), + 122 => + array ( + ), + 124 => + array ( + ), + 133 => + array ( + ), + 134 => + array ( + ), + 144 => + array ( + ), + 145 => + array ( + ), + 146 => + array ( + ), + 147 => + array ( + ), + 148 => + array ( + ), + 152 => + array ( + ), + 153 => + array ( + ), + 155 => + array ( + ), + ), + 'C:\\paratest\\src\\ParaTest\\Logging\\JUnit\\TestCase.php' => + array ( + 67 => + array ( + ), + 68 => + array ( + ), + 69 => + array ( + ), + 70 => + array ( + ), + 71 => + array ( + ), + 72 => + array ( + ), + 73 => + array ( + ), + 81 => + array ( + ), + 82 => + array ( + ), + 90 => + array ( + ), + 91 => + array ( + ), + 102 => + array ( + ), + 103 => + array ( + ), + 104 => + array ( + ), + 106 => + array ( + ), + 117 => + array ( + ), + 118 => + array ( + ), + 119 => + array ( + ), + 120 => + array ( + ), + 121 => + array ( + ), + 122 => + array ( + ), + 123 => + array ( + ), + 125 => + array ( + ), + 126 => + array ( + ), + 127 => + array ( + ), + 128 => + array ( + ), + 130 => + array ( + ), + 131 => + array ( + ), + 133 => + array ( + ), + 134 => NULL, + ), + 'C:\\paratest\\src\\ParaTest\\Logging\\JUnit\\Reader.php' => + array ( + 41 => + array ( + ), + 42 => + array ( + ), + 45 => + array ( + ), + 46 => + array ( + ), + 47 => + array ( + ), + 49 => + array ( + ), + 50 => + array ( + ), + 51 => + array ( + ), + 52 => + array ( + ), + 62 => + array ( + ), + 63 => NULL, + 73 => + array ( + ), + 74 => NULL, + 84 => + array ( + ), + 85 => NULL, + 98 => + array ( + ), + 99 => + array ( + ), + 100 => + array ( + ), + 101 => + array ( + ), + 102 => + array ( + ), + 103 => + array ( + ), + 104 => + array ( + ), + 105 => + array ( + ), + 107 => + array ( + ), + 111 => + array ( + ), + 112 => NULL, + 119 => + array ( + ), + 120 => + array ( + ), + 128 => + array ( + ), + 129 => + array ( + ), + 130 => + array ( + ), + 131 => + array ( + ), + 133 => + array ( + ), + 141 => + array ( + ), + 142 => + array ( + ), + 143 => + array ( + ), + 144 => + array ( + ), + 146 => + array ( + ), + 148 => + array ( + ), + 159 => + array ( + ), + 160 => + array ( + ), + 161 => + array ( + ), + 162 => + array ( + ), + 172 => + array ( + ), + 183 => + array ( + ), + 184 => NULL, + 194 => + array ( + ), + 195 => + array ( + ), + 196 => + array ( + ), + 197 => + array ( + ), + 198 => + array ( + ), + 199 => + array ( + ), + 201 => + array ( + ), + 203 => + array ( + ), + 204 => NULL, + 213 => + array ( + ), + 214 => + array ( + ), + 215 => + array ( + ), + 217 => + array ( + ), + 218 => + array ( + ), + 220 => + array ( + ), + ), + 'C:\\paratest\\src\\ParaTest\\Console\\Testers\\PHPUnit.php' => + array ( + 37 => + array ( + ), + 38 => + array ( + ), + 39 => + array ( + ), + 40 => + array ( + ), + 41 => + array ( + ), + 42 => + array ( + ), + 43 => + array ( + ), + 44 => + array ( + ), + 45 => + array ( + ), + 46 => + array ( + ), + 47 => + array ( + ), + 48 => + array ( + ), + 49 => + array ( + ), + 50 => + array ( + ), + 62 => + array ( + ), + 63 => + array ( + ), + 66 => + array ( + ), + 67 => + array ( + ), + 69 => + array ( + ), + 71 => + array ( + ), + 72 => + array ( + ), + 73 => + array ( + ), + 74 => + array ( + ), + 79 => + array ( + ), + 80 => + array ( + ), + 83 => + array ( + ), + 84 => + array ( + ), + 85 => NULL, + 96 => + array ( + ), + 97 => + array ( + ), + 98 => + array ( + ), + 99 => NULL, + 109 => + array ( + ), + 110 => NULL, + 118 => + array ( + ), + 120 => + array ( + ), + 121 => + array ( + ), + 122 => + array ( + ), + 123 => + array ( + ), + 124 => + array ( + ), + 125 => + array ( + ), + 127 => + array ( + ), + 130 => + array ( + ), + 131 => NULL, + 140 => + array ( + ), + 141 => + array ( + ), + 142 => + array ( + ), + 143 => + array ( + ), + 145 => + array ( + ), + 146 => + array ( + ), + 149 => + array ( + ), + 150 => + array ( + ), + 153 => + array ( + ), + 154 => NULL, + 165 => + array ( + ), + 166 => + array ( + ), + 169 => + array ( + ), + 170 => + array ( + ), + 171 => + array ( + ), + 174 => + array ( + ), + 175 => + array ( + ), + 184 => + array ( + ), + 185 => + array ( + ), + 186 => + array ( + ), + 187 => + array ( + ), + 197 => + array ( + ), + 198 => + array ( + ), + 199 => + array ( + ), + 200 => NULL, + 211 => + array ( + ), + 212 => + array ( + ), + 215 => + array ( + ), + 216 => + array ( + ), + 219 => + array ( + ), + 220 => + array ( + ), + 222 => + array ( + ), + 223 => NULL, + ), + 'C:\\paratest\\src\\ParaTest\\Runners\\PHPUnit\\ExecutableTest.php' => + array ( + 54 => + array ( + ), + 55 => + array ( + ), + 56 => + array ( + ), + 72 => + array ( + ), + 73 => NULL, + 84 => + array ( + ), + 85 => + array ( + ), + 88 => + array ( + ), + 89 => NULL, + 98 => + array ( + ), + 99 => NULL, + 107 => + array ( + ), + 108 => + array ( + ), + 114 => + array ( + ), + 115 => + array ( + ), + 116 => + array ( + ), + 120 => + array ( + ), + 121 => NULL, + 131 => + array ( + ), + 132 => NULL, + 139 => + array ( + ), + 140 => + array ( + ), + 141 => + array ( + ), + 150 => + array ( + ), + 151 => NULL, + 160 => + array ( + ), + 161 => NULL, + 170 => + array ( + ), + 171 => NULL, + 183 => + array ( + ), + 184 => + array ( + ), + 185 => + array ( + ), + 186 => + array ( + ), + 187 => + array ( + ), + 188 => + array ( + ), + 189 => + array ( + ), + 190 => + array ( + ), + 191 => NULL, + 200 => + array ( + ), + 201 => NULL, + 212 => + array ( + ), + 213 => + array ( + ), + 214 => + array ( + ), + 215 => NULL, + 224 => + array ( + ), + 225 => + array ( + ), + 228 => + array ( + ), + 229 => NULL, + 238 => + array ( + ), + 239 => NULL, + 248 => + array ( + ), + 249 => + array ( + ), + 263 => + array ( + ), + 265 => + array ( + ), + 266 => + array ( + ), + 267 => + array ( + ), + 275 => + array ( + ), + 285 => + array ( + ), + 286 => NULL, + 298 => + array ( + ), + 299 => + array ( + ), + 300 => + array ( + ), + 301 => + array ( + ), + 302 => + array ( + ), + 303 => + array ( + ), + 307 => + array ( + ), + 308 => + array ( + ), + 310 => + array ( + ), + 312 => + array ( + ), + 313 => NULL, + 323 => + array ( + ), + 324 => + array ( + ), + 326 => + array ( + ), + 337 => + array ( + ), + 338 => + array ( + ), + 341 => + array ( + ), + 342 => + array ( + ), + 344 => + array ( + ), + 345 => NULL, + ), + 'C:\\paratest\\src\\ParaTest\\Logging\\LogInterpreter.php' => + array ( + ), + 'C:\\paratest\\src\\ParaTest\\Runners\\PHPUnit\\BaseRunner.php' => + array ( + 62 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructor', + 1 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetExitCode', + 2 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructorAssignsTokens', + 3 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetsNextAvailableTokenReturnsTokenIdentifier', + 4 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetNextAvailableTokenReturnsFalseWhenNoTokensAreAvailable', + 5 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testReleaseTokenMakesTokenAvailable', + ), + 63 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructor', + 1 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetExitCode', + 2 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructorAssignsTokens', + 3 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetsNextAvailableTokenReturnsTokenIdentifier', + 4 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetNextAvailableTokenReturnsFalseWhenNoTokensAreAvailable', + 5 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testReleaseTokenMakesTokenAvailable', + ), + 64 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructor', + 1 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetExitCode', + 2 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructorAssignsTokens', + 3 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetsNextAvailableTokenReturnsTokenIdentifier', + 4 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetNextAvailableTokenReturnsFalseWhenNoTokensAreAvailable', + 5 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testReleaseTokenMakesTokenAvailable', + ), + 65 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructor', + 1 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetExitCode', + 2 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructorAssignsTokens', + 3 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetsNextAvailableTokenReturnsTokenIdentifier', + 4 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetNextAvailableTokenReturnsFalseWhenNoTokensAreAvailable', + 5 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testReleaseTokenMakesTokenAvailable', + ), + 69 => + array ( + ), + 70 => + array ( + ), + 71 => + array ( + ), + 72 => + array ( + ), + 73 => + array ( + ), + 82 => + array ( + ), + 83 => + array ( + ), + 84 => + array ( + ), + 86 => + array ( + ), + 96 => + array ( + ), + 97 => + array ( + ), + 98 => + array ( + ), + 99 => + array ( + ), + 100 => + array ( + ), + 101 => + array ( + ), + 103 => + array ( + ), + 113 => + array ( + 0 => 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetExitCode', + ), + 114 => NULL, + 121 => + array ( + ), + 122 => + array ( + ), + 124 => + array ( + ), + 125 => + array ( + ), + 126 => + array ( + ), + 127 => + array ( + ), + 134 => + array ( + ), + 135 => + array ( + ), + 138 => + array ( + ), + 140 => + array ( + ), + 142 => + array ( + ), + 143 => + array ( + ), + 146 => + array ( + ), + 147 => + array ( + ), + 150 => + array ( + ), + 151 => + array ( + ), + 155 => + array ( + ), + 156 => + array ( + ), + 159 => + array ( + ), + 160 => + array ( + ), + 167 => + array ( + ), + 168 => NULL, + 175 => + array ( + ), + 176 => NULL, + ), +)); +$coverage->setTests(array ( + 'UNCOVERED_FILES_FROM_WHITELIST' => + array ( + 'size' => 'unknown', + 'status' => NULL, + ), + 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructor' => + array ( + 'size' => 'unknown', + 'status' => 0, + ), + 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetExitCode' => + array ( + 'size' => 'unknown', + 'status' => 0, + ), + 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testConstructorAssignsTokens' => + array ( + 'size' => 'unknown', + 'status' => 0, + ), + 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetsNextAvailableTokenReturnsTokenIdentifier' => + array ( + 'size' => 'unknown', + 'status' => 0, + ), + 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testGetNextAvailableTokenReturnsFalseWhenNoTokensAreAvailable' => + array ( + 'size' => 'unknown', + 'status' => 0, + ), + 'ParaTest\\Runners\\PHPUnit\\RunnerTest::testReleaseTokenMakesTokenAvailable' => + array ( + 'size' => 'unknown', + 'status' => 0, + ), +)); + +$filter = $coverage->filter(); +$filter->setWhitelistedFiles(array ( + 'C:\\paratest\\src\\ParaTest\\Console\\Commands\\ParaTestCommand.php' => true, + 'C:\\paratest\\src\\ParaTest\\Console\\ParaTestApplication.php' => true, + 'C:\\paratest\\src\\ParaTest\\Console\\Testers\\PHPUnit.php' => true, + 'C:\\paratest\\src\\ParaTest\\Console\\Testers\\Tester.php' => true, + 'C:\\paratest\\src\\ParaTest\\Coverage\\CoverageMerger.php' => true, + 'C:\\paratest\\src\\ParaTest\\Coverage\\CoverageReporter.php' => true, + 'C:\\paratest\\src\\ParaTest\\Coverage\\CoverageReporterInterface.php' => true, + 'C:\\paratest\\src\\ParaTest\\Coverage\\CoverageReporterLegacy.php' => true, + 'C:\\paratest\\src\\ParaTest\\Logging\\JUnit\\Reader.php' => true, + 'C:\\paratest\\src\\ParaTest\\Logging\\JUnit\\TestCase.php' => true, + 'C:\\paratest\\src\\ParaTest\\Logging\\JUnit\\TestSuite.php' => true, + 'C:\\paratest\\src\\ParaTest\\Logging\\JUnit\\Writer.php' => true, + 'C:\\paratest\\src\\ParaTest\\Logging\\LogInterpreter.php' => true, + 'C:\\paratest\\src\\ParaTest\\Logging\\MetaProvider.php' => true, + 'C:\\paratest\\src\\ParaTest\\Parser\\NoClassInFileException.php' => true, + 'C:\\paratest\\src\\ParaTest\\Parser\\ParsedClass.php' => true, + 'C:\\paratest\\src\\ParaTest\\Parser\\ParsedFunction.php' => true, + 'C:\\paratest\\src\\ParaTest\\Parser\\ParsedObject.php' => true, + 'C:\\paratest\\src\\ParaTest\\Parser\\Parser.php' => true, + 'C:\\paratest\\src\\ParaTest\\Runners\\PHPUnit\\BaseRunner.php' => true, + 'C:\\paratest\\src\\ParaTest\\Runners\\PHPUnit\\Configuration.php' => true, + 'C:\\paratest\\src\\ParaTest\\Runners\\PHPUnit\\ExecutableTest.php' => true, + 'C:\\paratest\\src\\ParaTest\\Runners\\PHPUnit\\Options.php' => true, + 'C:\\paratest\\src\\ParaTest\\Runners\\PHPUnit\\ResultPrinter.php' => true, + 'C:\\paratest\\src\\ParaTest\\Runners\\PHPUnit\\Runner.php' => true, + 'C:\\paratest\\src\\ParaTest\\Runners\\PHPUnit\\Suite.php' => true, + 'C:\\paratest\\src\\ParaTest\\Runners\\PHPUnit\\SuiteLoader.php' => true, + 'C:\\paratest\\src\\ParaTest\\Runners\\PHPUnit\\SuitePath.php' => true, + 'C:\\paratest\\src\\ParaTest\\Runners\\PHPUnit\\TestFileLoader.php' => true, + 'C:\\paratest\\src\\ParaTest\\Runners\\PHPUnit\\TestMethod.php' => true, + 'C:\\paratest\\src\\ParaTest\\Runners\\PHPUnit\\Worker.php' => true, + 'C:\\paratest\\src\\ParaTest\\Runners\\PHPUnit\\WrapperRunner.php' => true, +)); + +return $coverage; \ No newline at end of file From 666a617e9c3ba972a85f055819d9cf4567cb942b Mon Sep 17 00:00:00 2001 From: Filippo Tessarotto Date: Fri, 24 Jul 2020 09:00:02 +0200 Subject: [PATCH 23/34] Add Code Coverage reports (#464) --- .github/workflows/integrate.yaml | 55 ++++++++++++++++++++++++++++++++ README.md | 1 + 2 files changed, 56 insertions(+) diff --git a/.github/workflows/integrate.yaml b/.github/workflows/integrate.yaml index beb8896..803c7a2 100644 --- a/.github/workflows/integrate.yaml +++ b/.github/workflows/integrate.yaml @@ -109,6 +109,61 @@ jobs: timeout-minutes: 10 run: "vendor/bin/phpunit" + code-coverage: + name: "Code Coverage" + + runs-on: "ubuntu-latest" + + strategy: + matrix: + php-version: + - "7.4" + dependencies: + - "highest" + + steps: + - name: "Checkout" + uses: "actions/checkout@v2" + with: + # Needed for \ParaTest\Console\VersionProvider::getGitVersion + fetch-depth: 0 + + - name: "Install PHP" + uses: "shivammathur/setup-php@v2" + with: + coverage: "pcov" + php-version: "${{ matrix.php-version }}" + tools: composer:v1, cs2pr + extensions: sqlite + + - name: "Get composer cache directory" + id: composercache + run: echo "::set-output name=dir::$(composer config cache-files-dir)" + + - name: "Cache dependencies" + uses: actions/cache@v2 + with: + path: ${{ steps.composercache.outputs.dir }} + key: ${{ runner.os }}-php-${{ matrix.php-version }}-${{ matrix.dependencies }}-composer-${{ hashFiles('**/composer.json') }} + restore-keys: ${{ runner.os }}-php-${{ matrix.php-version }}-${{ matrix.dependencies }}-composer- + + - name: "Install lowest dependencies" + if: ${{ matrix.dependencies == 'lowest' }} + run: "composer update --no-interaction --no-progress --prefer-lowest" + + - name: "Install highest dependencies" + if: ${{ matrix.dependencies == 'highest' }} + run: "composer update --no-interaction --no-progress" + + - name: "Run tests" + timeout-minutes: 10 + run: "vendor/bin/phpunit --coverage-clover=coverage.xml" + + - name: "Send code coverage report to Codecov.io" + uses: codecov/codecov-action@v1 + with: + token: ${{ secrets.CODECOV_TOKEN }} + coding-standards: name: "Coding Standards" diff --git a/README.md b/README.md index 60a18ce..6da375f 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,7 @@ ParaTest ======== [![Integrate](https://github.com/paratestphp/paratest/workflows/Integrate/badge.svg?branch=master)](https://github.com/paratestphp/paratest/actions) +[![Code Coverage](https://codecov.io/gh/paratestphp/paratest/coverage.svg?branch=master)](https://codecov.io/gh/paratestphp/paratest?branch=master) [![Packagist](https://img.shields.io/packagist/dt/brianium/paratest.svg)](https://packagist.org/packages/brianium/paratest) The objective of ParaTest is to support parallel testing in PHPUnit. Provided you have well-written PHPUnit tests, you can drop `paratest` in your project and From 3f03292d6d3d6b09668e08a46e448fb91bf9a7cd Mon Sep 17 00:00:00 2001 From: Filippo Tessarotto Date: Fri, 24 Jul 2020 10:02:44 +0200 Subject: [PATCH 24/34] Add Type Coverage report (#466) * Add Type Coverage report * Forgot to commit PSalm added dep --- .github/workflows/integrate.yaml | 5 ++++- README.md | 4 +++- composer.json | 5 +++-- phpstan.neon.dist | 1 + psalm.xml.dist | 15 +++++++++++++++ src/Console/VersionProvider.php | 2 +- src/Runners/PHPUnit/SuiteLoader.php | 2 +- src/Runners/PHPUnit/Worker/BaseWorker.php | 8 ++++++-- src/Runners/PHPUnit/Worker/SqliteWorker.php | 8 ++++++-- 9 files changed, 40 insertions(+), 10 deletions(-) create mode 100644 psalm.xml.dist diff --git a/.github/workflows/integrate.yaml b/.github/workflows/integrate.yaml index 803c7a2..5ec49a1 100644 --- a/.github/workflows/integrate.yaml +++ b/.github/workflows/integrate.yaml @@ -43,7 +43,7 @@ jobs: run: "composer update --no-interaction --no-progress" - name: "Validate composer.json" - run: "composer validate" + run: "composer validate --strict" - name: "Normalize composer.json" run: "composer-normalize --dry-run" @@ -240,6 +240,9 @@ jobs: - name: "Run static analysis" run: "composer static-analysis" + - name: "Run PSalm for type-coverage" + run: "vendor/bin/psalm --no-progress --shepherd --show-info=false --stats" + compile-phar: name: "Compile Phar" diff --git a/README.md b/README.md index 6da375f..e3e01cc 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,11 @@ ParaTest ======== +[![Latest Stable Version](https://img.shields.io/packagist/v/brianium/paratest.svg?style=flat-square)](https://packagist.org/packages/brianium/paratest) +[![Downloads](https://img.shields.io/packagist/dt/brianium/paratest.svg)](https://packagist.org/packages/brianium/paratest) [![Integrate](https://github.com/paratestphp/paratest/workflows/Integrate/badge.svg?branch=master)](https://github.com/paratestphp/paratest/actions) [![Code Coverage](https://codecov.io/gh/paratestphp/paratest/coverage.svg?branch=master)](https://codecov.io/gh/paratestphp/paratest?branch=master) -[![Packagist](https://img.shields.io/packagist/dt/brianium/paratest.svg)](https://packagist.org/packages/brianium/paratest) +[![Type Coverage](https://shepherd.dev/github/sebastianbergmann/phpunit/coverage.svg)](https://shepherd.dev/github/paratestphp/paratest) The objective of ParaTest is to support parallel testing in PHPUnit. Provided you have well-written PHPUnit tests, you can drop `paratest` in your project and start using it with no additional bootstrap or configurations! diff --git a/composer.json b/composer.json index d558701..92cabcb 100644 --- a/composer.json +++ b/composer.json @@ -26,7 +26,7 @@ "ext-pdo": "*", "ext-reflection": "*", "ext-simplexml": "*", - "brianium/habitat": "1.0.0", + "brianium/habitat": "^1.0", "phpunit/php-code-coverage": "^8.0", "phpunit/php-timer": "^5.0", "phpunit/phpunit": "^9.2", @@ -36,7 +36,8 @@ "require-dev": { "phpstan/phpstan": "^0.12.33", "phpstan/phpstan-phpunit": "^0.12.12", - "squizlabs/php_codesniffer": "^3.5" + "squizlabs/php_codesniffer": "^3.5", + "vimeo/psalm": "^3.12" }, "autoload": { "psr-4": { diff --git a/phpstan.neon.dist b/phpstan.neon.dist index 7db4bef..1bc3757 100644 --- a/phpstan.neon.dist +++ b/phpstan.neon.dist @@ -13,6 +13,7 @@ parameters: - test/ excludes_analyse: - test/fixtures/fatal-tests/* + - test/fixtures/generated-tests/* ignoreErrors: # @see https://github.com/phpstan/phpstan-src/pull/281 - diff --git a/psalm.xml.dist b/psalm.xml.dist new file mode 100644 index 0000000..7c0333d --- /dev/null +++ b/psalm.xml.dist @@ -0,0 +1,15 @@ + + + + + + + + + diff --git a/src/Console/VersionProvider.php b/src/Console/VersionProvider.php index 9c21c51..61dac3c 100644 --- a/src/Console/VersionProvider.php +++ b/src/Console/VersionProvider.php @@ -51,7 +51,7 @@ public function getGitVersion() return \trim($process->getOutput()); } - public function getComposerInstalledVersion($package) + public function getComposerInstalledVersion(string $package) { if (null === $path = $this->getComposerInstalledJsonPath()) { return; diff --git a/src/Runners/PHPUnit/SuiteLoader.php b/src/Runners/PHPUnit/SuiteLoader.php index 26ba1b6..af370b3 100644 --- a/src/Runners/PHPUnit/SuiteLoader.php +++ b/src/Runners/PHPUnit/SuiteLoader.php @@ -367,7 +367,7 @@ protected function createSuite(string $path, ParsedClass $class): Suite ); } - private function createFullSuite($suiteName, $configPath): FullSuite + private function createFullSuite($suiteName, string $configPath): FullSuite { return new FullSuite($suiteName, $configPath); } diff --git a/src/Runners/PHPUnit/Worker/BaseWorker.php b/src/Runners/PHPUnit/Worker/BaseWorker.php index 34d9062..c9bb45d 100644 --- a/src/Runners/PHPUnit/Worker/BaseWorker.php +++ b/src/Runners/PHPUnit/Worker/BaseWorker.php @@ -21,10 +21,14 @@ abstract class BaseWorker private $chunks = ''; private $alreadyReadOutput = ''; + /** + * @param int|null $token + * @param null|string $uniqueToken + */ public function start( string $wrapperBinary, - $token = 1, - $uniqueToken = null, + ?int $token = 1, + ?string $uniqueToken = null, array $parameters = [], ?Options $options = null ) { diff --git a/src/Runners/PHPUnit/Worker/SqliteWorker.php b/src/Runners/PHPUnit/Worker/SqliteWorker.php index 33ba37c..68fdc5e 100644 --- a/src/Runners/PHPUnit/Worker/SqliteWorker.php +++ b/src/Runners/PHPUnit/Worker/SqliteWorker.php @@ -16,10 +16,14 @@ public function __construct(string $dbFileName) $this->dbFileName = $dbFileName; } + /** + * @param int|null $token + * @param null|string $uniqueToken + */ public function start( string $wrapperBinary, - $token = 1, - $uniqueToken = null, + ?int $token = 1, + ?string $uniqueToken = null, array $parameters = [], ?Options $options = null ) { From f78e60785fce4ef425eff1fd711cb9aeaccd14a4 Mon Sep 17 00:00:00 2001 From: Filippo Tessarotto Date: Fri, 24 Jul 2020 10:04:36 +0200 Subject: [PATCH 25/34] Type Coverage: fix badge URI --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e3e01cc..f231161 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ ParaTest [![Downloads](https://img.shields.io/packagist/dt/brianium/paratest.svg)](https://packagist.org/packages/brianium/paratest) [![Integrate](https://github.com/paratestphp/paratest/workflows/Integrate/badge.svg?branch=master)](https://github.com/paratestphp/paratest/actions) [![Code Coverage](https://codecov.io/gh/paratestphp/paratest/coverage.svg?branch=master)](https://codecov.io/gh/paratestphp/paratest?branch=master) -[![Type Coverage](https://shepherd.dev/github/sebastianbergmann/phpunit/coverage.svg)](https://shepherd.dev/github/paratestphp/paratest) +[![Type Coverage](https://shepherd.dev/github/paratestphp/paratest/coverage.svg)](https://shepherd.dev/github/paratestphp/paratest) The objective of ParaTest is to support parallel testing in PHPUnit. Provided you have well-written PHPUnit tests, you can drop `paratest` in your project and start using it with no additional bootstrap or configurations! From faf59843d60d72fc73702a7d75c69d433dc7bef3 Mon Sep 17 00:00:00 2001 From: Filippo Tessarotto Date: Fri, 24 Jul 2020 11:22:01 +0200 Subject: [PATCH 26/34] Adopt Doctrine Coding Standards (#467) --- composer.json | 1 + phpcs.xml.dist | 46 ++++- src/Console/Commands/ParaTestCommand.php | 9 +- src/Console/ParaTestApplication.php | 9 +- src/Console/Testers/PHPUnit.php | 123 +++++------- src/Console/Testers/Tester.php | 17 +- src/Console/VersionProvider.php | 49 +++-- src/Coverage/CoverageMerger.php | 91 +++++---- src/Coverage/CoverageReporter.php | 19 +- src/Coverage/CoverageReporterInterface.php | 12 +- src/Logging/JUnit/Reader.php | 119 +++++------ src/Logging/JUnit/TestCase.php | 60 ++---- src/Logging/JUnit/TestSuite.php | 66 ++----- src/Logging/JUnit/Writer.php | 112 +++++------ src/Logging/LogInterpreter.php | 71 ++++--- src/Logging/MetaProvider.php | 15 +- src/Parser/NoClassInFileException.php | 4 +- src/Parser/ParsedClass.php | 15 +- src/Parser/ParsedFunction.php | 6 +- src/Parser/ParsedObject.php | 32 ++- src/Parser/Parser.php | 115 ++++++----- src/Runners/PHPUnit/BaseRunner.php | 71 ++++--- src/Runners/PHPUnit/Configuration.php | 99 +++++----- src/Runners/PHPUnit/EmptyRunnerStub.php | 2 +- src/Runners/PHPUnit/ExecutableTest.php | 110 +++++------ src/Runners/PHPUnit/FullSuite.php | 20 +- src/Runners/PHPUnit/Options.php | 184 +++++++++--------- src/Runners/PHPUnit/ResultPrinter.php | 176 ++++++++--------- src/Runners/PHPUnit/Runner.php | 116 ++++++----- src/Runners/PHPUnit/SqliteRunner.php | 54 +++-- src/Runners/PHPUnit/Suite.php | 8 +- src/Runners/PHPUnit/SuiteLoader.php | 115 ++++++----- src/Runners/PHPUnit/SuitePath.php | 30 +-- src/Runners/PHPUnit/TestFileLoader.php | 69 +++---- src/Runners/PHPUnit/TestMethod.php | 24 ++- src/Runners/PHPUnit/Worker/BaseWorker.php | 129 +++++++----- src/Runners/PHPUnit/Worker/SqliteWorker.php | 6 +- src/Runners/PHPUnit/Worker/WrapperWorker.php | 69 ++++--- src/Runners/PHPUnit/WrapperRunner.php | 126 +++++++----- src/Util/Str.php | 11 +- .../Coverage/CoverageMergerTest.php | 52 +++-- .../Coverage/CoverageReporterTest.php | 56 +++--- test/Functional/DataProviderTest.php | 12 +- test/Functional/FunctionalTestBase.php | 15 +- test/Functional/GroupTest.php | 12 +- test/Functional/OutputTest.php | 14 +- test/Functional/PHPUnitOtherWarningsTest.php | 2 +- test/Functional/PHPUnitTest.php | 154 +++++++-------- test/Functional/PHPUnitWarningsTest.php | 2 +- test/Functional/ParaTestInvoker.php | 26 ++- test/Functional/ProcessCallback.php | 4 +- .../Runners/PHPUnit/RunnerIntegrationTest.php | 48 +++-- .../Functional/Runners/PHPUnit/WorkerTest.php | 71 ++++--- test/Functional/SkippedOrIncompleteTest.php | 17 +- test/Functional/SqliteRunnerTest.php | 18 +- test/Functional/TestGenerator.php | 15 +- test/Functional/WrapperRunnerTest.php | 22 +-- test/TestBase.php | 83 ++++---- .../Console/Commands/ParaTestCommandTest.php | 20 +- test/Unit/Console/Testers/PHPUnitTest.php | 17 +- test/Unit/Console/VersionProviderTest.php | 18 +- test/Unit/Coverage/CoverageMergerTest.php | 25 +-- test/Unit/Logging/JUnit/ReaderTest.php | 132 +++++++------ test/Unit/Logging/JUnit/WriterTest.php | 43 ++-- test/Unit/Logging/LogInterpreterTest.php | 51 ++--- test/Unit/Parser/GetClassTest.php | 21 +- test/Unit/Parser/ParsedClassTest.php | 19 +- test/Unit/Parser/ParsedObjectTest.php | 11 +- test/Unit/Parser/ParserTest.php | 23 ++- test/Unit/ResultTester.php | 16 +- .../Runners/PHPUnit/ConfigurationTest.php | 59 +++--- .../Runners/PHPUnit/ExecutableTestChild.php | 2 - .../Runners/PHPUnit/ExecutableTestTest.php | 49 ++--- test/Unit/Runners/PHPUnit/OptionsTest.php | 67 ++++--- .../Runners/PHPUnit/ResultPrinterTest.php | 110 ++++++----- test/Unit/Runners/PHPUnit/RunnerTest.php | 30 +-- test/Unit/Runners/PHPUnit/SuiteLoaderTest.php | 172 ++++++++-------- test/Unit/Runners/PHPUnit/SuiteTest.php | 5 +- .../Runners/PHPUnit/TestFileLoaderTest.php | 14 +- test/Unit/Runners/PHPUnit/TestMethodTest.php | 5 +- .../Runners/PHPUnit/WrapperRunnerTest.php | 8 +- test/Unit/Util/StrTest.php | 9 +- test/constants.php | 2 +- 83 files changed, 2042 insertions(+), 1919 deletions(-) diff --git a/composer.json b/composer.json index 92cabcb..33196ed 100644 --- a/composer.json +++ b/composer.json @@ -34,6 +34,7 @@ "symfony/process": "^4.4 || ^5.0" }, "require-dev": { + "doctrine/coding-standard": "^8.1", "phpstan/phpstan": "^0.12.33", "phpstan/phpstan-phpunit": "^0.12.12", "squizlabs/php_codesniffer": "^3.5", diff --git a/phpcs.xml.dist b/phpcs.xml.dist index 0b6d6e7..5284483 100644 --- a/phpcs.xml.dist +++ b/phpcs.xml.dist @@ -14,5 +14,49 @@ */test/fixtures/* bootstrap.php - + + + + + + 0 + + + 0 + + + 0 + + + + 0 + + + 0 + + + 0 + + + + 0 + + + + 0 + + + 0 + + + + 0 + + + + 0 + + + 0 + diff --git a/src/Console/Commands/ParaTestCommand.php b/src/Console/Commands/ParaTestCommand.php index e6306bb..e02a369 100644 --- a/src/Console/Commands/ParaTestCommand.php +++ b/src/Console/Commands/ParaTestCommand.php @@ -12,9 +12,7 @@ class ParaTestCommand extends Command { - /** - * @var \ParaTest\Console\Testers\Tester - */ + /** @var Tester */ protected $tester; public function __construct(Tester $tester) @@ -27,7 +25,7 @@ public function __construct(Tester $tester) /** * Ubiquitous configuration options for ParaTest. */ - protected function configure() + protected function configure(): void { $this ->addOption('processes', 'p', InputOption::VALUE_REQUIRED, 'The number of test processes to run.', 'auto') @@ -112,9 +110,6 @@ protected function configure() /** * Executes the specified tester. * - * @param InputInterface $input - * @param OutputInterface $output - * * @return int|mixed|null */ public function execute(InputInterface $input, OutputInterface $output) diff --git a/src/Console/ParaTestApplication.php b/src/Console/ParaTestApplication.php index 88f5aed..6cc3d13 100644 --- a/src/Console/ParaTestApplication.php +++ b/src/Console/ParaTestApplication.php @@ -20,7 +20,7 @@ class ParaTestApplication extends Application public function __construct() { - parent::__construct(static::NAME, VersionProvider::getVersion(static::VERSION)); + parent::__construct(self::NAME, VersionProvider::getVersion(self::VERSION)); } /** @@ -38,8 +38,6 @@ public function doRun(InputInterface $input, OutputInterface $output) /** * The default InputDefinition for the application. Leave it to specific * Tester objects for specifying further definitions. - * - * @return InputDefinition */ public function getDefinition(): InputDefinition { @@ -48,11 +46,6 @@ public function getDefinition(): InputDefinition ]); } - /** - * @param InputInterface $input - * - * @return string - */ public function getCommandName(InputInterface $input): string { return 'paratest'; diff --git a/src/Console/Testers/PHPUnit.php b/src/Console/Testers/PHPUnit.php index 25b2fb5..14b3df2 100644 --- a/src/Console/Testers/PHPUnit.php +++ b/src/Console/Testers/PHPUnit.php @@ -9,6 +9,7 @@ use ParaTest\Runners\PHPUnit\Configuration; use ParaTest\Runners\PHPUnit\Runner; use ParaTest\Util\Str; +use RuntimeException; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\ArrayInput; use Symfony\Component\Console\Input\InputArgument; @@ -16,9 +17,19 @@ use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Output\OutputInterface; +use function array_key_exists; +use function array_merge; +use function chdir; +use function class_exists; +use function file_exists; +use function getcwd; +use function sprintf; +use function sys_get_temp_dir; +use function tempnam; + +use const DIRECTORY_SEPARATOR; + /** - * Class PHPUnit. - * * Creates the interface for PHPUnit testing */ class PHPUnit extends Tester @@ -29,18 +40,14 @@ class PHPUnit extends Tester */ private const TEST_SUITE_FILTER_SEPARATOR = ','; - /** - * @var Command - */ + /** @var Command */ protected $command; /** * Configures the ParaTestCommand with PHPUnit specific * definitions. - * - * @param Command $command */ - public function configure(Command $command) + public function configure(Command $command): void { $command ->addOption( @@ -83,8 +90,7 @@ public function configure(Command $command) InputArgument::OPTIONAL, 'The path to a directory or file containing tests. (default: current directory)' ) - ->addOption('path', null, InputOption::VALUE_REQUIRED, 'An alias for the path argument.') - ; + ->addOption('path', null, InputOption::VALUE_REQUIRED, 'An alias for the path argument.'); $this->command = $command; } @@ -92,14 +98,11 @@ public function configure(Command $command) * Executes the PHPUnit Runner. Will Display help if no config and no path * supplied. * - * @param InputInterface $input - * @param OutputInterface $output - * * @return int|mixed */ public function execute(InputInterface $input, OutputInterface $output) { - if (!$this->hasConfig($input) && !$this->hasPath($input)) { + if (! $this->hasConfig($input) && ! $this->hasPath($input)) { $this->displayHelp($input, $output); } @@ -113,45 +116,35 @@ public function execute(InputInterface $input, OutputInterface $output) /** * Returns whether or not a test path has been supplied * via option or regular input. - * - * @param InputInterface $input - * - * @return bool */ - protected function hasPath(InputInterface $input) + protected function hasPath(InputInterface $input): bool { $argument = $input->getArgument('path'); - $option = $input->getOption('path'); + $option = $input->getOption('path'); return $argument || $option; } /** * Is there a PHPUnit xml configuration present. - * - * @param InputInterface $input - * - * @return bool */ protected function hasConfig(InputInterface $input): bool { - return false !== $this->getConfig($input); + return $this->getConfig($input) !== false; } /** - * @param \Symfony\Component\Console\Input\InputInterface $input - * - * @return \ParaTest\Runners\PHPUnit\Configuration|bool + * @return Configuration|bool */ protected function getConfig(InputInterface $input) { - $cwd = \getcwd() . \DIRECTORY_SEPARATOR; + $cwd = getcwd() . DIRECTORY_SEPARATOR; if ($input->getOption('configuration')) { $configFilename = $input->getOption('configuration'); - } elseif (\file_exists($cwd . 'phpunit.xml.dist')) { + } elseif (file_exists($cwd . 'phpunit.xml.dist')) { $configFilename = $cwd . 'phpunit.xml.dist'; - } elseif (\file_exists($cwd . 'phpunit.xml')) { + } elseif (file_exists($cwd . 'phpunit.xml')) { $configFilename = $cwd . 'phpunit.xml'; } else { return false; @@ -162,41 +155,36 @@ protected function getConfig(InputInterface $input) /** * Displays help for the ParaTestCommand. - * - * @param InputInterface $input - * @param OutputInterface $output */ - protected function displayHelp(InputInterface $input, OutputInterface $output) + protected function displayHelp(InputInterface $input, OutputInterface $output): void { - $help = $this->command->getApplication()->find('help'); + $help = $this->command->getApplication()->find('help'); $input = new ArrayInput(['command_name' => 'paratest']); $help->run($input, $output); exit(0); } /** - * @param \Symfony\Component\Console\Input\InputInterface $input - * - * @throws \RuntimeException - * * @return array + * + * @throws RuntimeException */ public function getRunnerOptions(InputInterface $input): array { - $path = $input->getArgument('path'); - $options = $this->getOptions($input); + $path = $input->getArgument('path'); + $options = $this->getOptions($input); $bootstrap = $this->getBootstrapFile($input, $options); $this->requireBootstrap($bootstrap); if ($this->hasCoverage($options)) { - $options['coverage-php'] = \tempnam(\sys_get_temp_dir(), 'paratest_'); + $options['coverage-php'] = tempnam(sys_get_temp_dir(), 'paratest_'); } if ($path) { - $options = \array_merge(['path' => $path], $options); + $options = array_merge(['path' => $path], $options); } - if (\array_key_exists('testsuite', $options)) { + if (array_key_exists('testsuite', $options)) { $options['testsuite'] = Str::explodeWithCleanup( self::TEST_SUITE_FILTER_SEPARATOR, $options['testsuite'] @@ -210,19 +198,18 @@ public function getRunnerOptions(InputInterface $input): array * Require the bootstrap. If the file is specified, but does not exist * then an exception will be raised. * - * @param string $file - * - * @throws \RuntimeException + * @throws RuntimeException */ - public function requireBootstrap(string $file) + public function requireBootstrap(string $file): void { - if (!$file) { + if (! $file) { return; } - if (!\file_exists($file)) { - $message = \sprintf('Bootstrap specified but could not be found (%s)', $file); - throw new \RuntimeException($message); + if (! file_exists($file)) { + $message = sprintf('Bootstrap specified but could not be found (%s)', $file); + + throw new RuntimeException($message); } $this->scopedRequire($file); @@ -232,22 +219,18 @@ public function requireBootstrap(string $file) * This function limits the scope of a required file * so that variables defined in it do not break * this object's configuration. - * - * @param string $file */ - protected function scopedRequire(string $file) + protected function scopedRequire(string $file): void { - $cwd = \getcwd(); + $cwd = getcwd(); require_once $file; - \chdir($cwd); + chdir($cwd); } /** * Return whether or not code coverage information should be collected. * * @param array $options - * - * @return bool */ protected function hasCoverage(array $options): bool { @@ -256,18 +239,15 @@ protected function hasCoverage(array $options): bool || isset($options['coverage-crap4j']) || isset($options['coverage-xml']); $isTextFormat = isset($options['coverage-text']); - $isPHP = isset($options['coverage-php']); + $isPHP = isset($options['coverage-php']); - return $isTextFormat || $isFileFormat && !$isPHP; + return $isTextFormat || $isFileFormat && ! $isPHP; } /** * Fetch the path to the bootstrap file. * - * @param InputInterface $input - * @param array $options - * - * @return string + * @param array $options */ protected function getBootstrapFile(InputInterface $input, array $options): string { @@ -275,11 +255,11 @@ protected function getBootstrapFile(InputInterface $input, array $options): stri return $options['bootstrap']; } - if (!$this->hasConfig($input)) { + if (! $this->hasConfig($input)) { return ''; } - $config = $this->getConfig($input); + $config = $this->getConfig($input); $bootstrap = $config->getBootstrap(); return $bootstrap ? $config->getConfigDir() . $bootstrap : ''; @@ -289,15 +269,14 @@ private function initializeRunner(InputInterface $input): BaseRunner { if ($input->getOption('runner')) { $runnerClass = $input->getOption('runner') ?: ''; - $runnerClass = \class_exists($runnerClass) + $runnerClass = class_exists($runnerClass) ? $runnerClass - : ('\\ParaTest\\Runners\\PHPUnit\\' . $runnerClass) - ; + : '\\ParaTest\\Runners\\PHPUnit\\' . $runnerClass; } else { $runnerClass = Runner::class; } - if (!\class_exists($runnerClass)) { + if (! class_exists($runnerClass)) { throw new InvalidArgumentException('Selected runner does not exist.'); } diff --git a/src/Console/Testers/Tester.php b/src/Console/Testers/Tester.php index d03f16f..94e36fd 100644 --- a/src/Console/Testers/Tester.php +++ b/src/Console/Testers/Tester.php @@ -4,15 +4,11 @@ namespace ParaTest\Console\Testers; -use ParaTest\Console\Commands\ParaTestCommand; use Symfony\Component\Console\Command\Command; -use Symfony\Component\Console\Input\ArrayInput; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; /** - * Class Tester. - * * A base for Testers. A Tester is a specialized console * command for controlling a given tool - i.e PHPUnit */ @@ -22,16 +18,11 @@ abstract class Tester * Configures the ParaTestCommand with Tester specific * definitions. * - * @param Command $command - * * @return mixed */ abstract public function configure(Command $command); /** - * @param InputInterface $input - * @param OutputInterface $output - * * @return mixed */ abstract public function execute(InputInterface $input, OutputInterface $output); @@ -39,17 +30,17 @@ abstract public function execute(InputInterface $input, OutputInterface $output) /** * Returns non-empty options. * - * @param InputInterface $input - * * @return array */ protected function getOptions(InputInterface $input): array { $options = $input->getOptions(); foreach ($options as $key => $value) { - if (empty($options[$key])) { - unset($options[$key]); + if (! empty($options[$key])) { + continue; } + + unset($options[$key]); } return $options; diff --git a/src/Console/VersionProvider.php b/src/Console/VersionProvider.php index 61dac3c..2809867 100644 --- a/src/Console/VersionProvider.php +++ b/src/Console/VersionProvider.php @@ -6,9 +6,14 @@ use Symfony\Component\Process\Process; +use function file_exists; +use function file_get_contents; +use function is_array; +use function is_readable; +use function json_decode; +use function trim; + /** - * Class VersionProvider. - * * Obtain version information of the ParaTest application itself based on * it's current installment (composer; git; default passed) */ @@ -16,9 +21,7 @@ final class VersionProvider { private const PACKAGE = 'brianium/paratest'; - /** - * @var null - */ + /** @var null */ private $default; public function __construct($default = null) @@ -42,52 +45,56 @@ public function getParaTestVersion() public function getGitVersion() { - $cmd = 'git describe --tags --always --first-parent'; + $cmd = 'git describe --tags --always --first-parent'; $process = Process::fromShellCommandline($cmd, __DIR__); if ($process->run() !== 0) { return null; } - return \trim($process->getOutput()); + return trim($process->getOutput()); } - public function getComposerInstalledVersion(string $package) + public function getComposerInstalledVersion(string $package): ?string { - if (null === $path = $this->getComposerInstalledJsonPath()) { - return; + if (($path = $this->getComposerInstalledJsonPath()) === null) { + return null; } - $result = \file_get_contents($path); - if (false === $result) { - return; + $result = file_get_contents($path); + if ($result === false) { + return null; } - $struct = \json_decode($result, true, 16); - if (!\is_array($struct)) { - return; + $struct = json_decode($result, true, 16); + if (! is_array($struct)) { + return null; } foreach ($struct as $entry) { - if (!\is_array($entry)) { + if (! is_array($entry)) { continue; } + $name = $entry['name'] ?? null; - if (null === $name || $name !== $package) { + if ($name === null || $name !== $package) { continue; } + $version = $entry['version'] ?? null; - if (null === $version) { + if ($version === null) { continue; } return $version; } + + return null; } /** * @return string|null path to composer/installed.json */ - private function getComposerInstalledJsonPath() + private function getComposerInstalledJsonPath(): ?string { $paths = [ // path in the installed version @@ -98,7 +105,7 @@ private function getComposerInstalledJsonPath() // first hit makes it foreach ($paths as $path) { - if (\file_exists($path) && \is_readable($path)) { + if (file_exists($path) && is_readable($path)) { return $path; } } diff --git a/src/Coverage/CoverageMerger.php b/src/Coverage/CoverageMerger.php index ae5b858..ec226ff 100644 --- a/src/Coverage/CoverageMerger.php +++ b/src/Coverage/CoverageMerger.php @@ -4,13 +4,25 @@ namespace ParaTest\Coverage; +use RuntimeException; use SebastianBergmann\CodeCoverage\CodeCoverage; +use SplFileObject; + +use function array_map; +use function array_slice; +use function extension_loaded; +use function file_exists; +use function function_exists; +use function ini_get; +use function is_array; +use function unlink; +use function unserialize; + +use const PHP_SAPI; class CoverageMerger { - /** - * @var CodeCoverage - */ + /** @var CodeCoverage */ private $coverage = null; private $test_limit = null; @@ -20,35 +32,32 @@ public function __construct(int $test_limit = 0) $this->test_limit = $test_limit; } - /** - * @param CodeCoverage $coverage - */ - private function addCoverage(CodeCoverage $coverage) + private function addCoverage(CodeCoverage $coverage): void { - if (null === $this->coverage) { + if ($this->coverage === null) { $this->coverage = $coverage; } else { $this->coverage->merge($coverage); } + $this->limitCoverageTests($this->coverage); } /** * Returns coverage object from file. * - * @param \SplFileObject $coverageFile coverage file - * - * @return CodeCoverage + * @param SplFileObject $coverageFile coverage file */ - private function getCoverageObject(\SplFileObject $coverageFile): CodeCoverage + private function getCoverageObject(SplFileObject $coverageFile): CodeCoverage { - if ('fread(5)) { + if ($coverageFile->fread(5) === 'getRealPath(); } $coverageFile->fseek(0); + // the PHPUnit 3.x and below - return \unserialize($coverageFile->fread($coverageFile->getSize())); + return unserialize($coverageFile->fread($coverageFile->getSize())); } /** @@ -56,41 +65,39 @@ private function getCoverageObject(\SplFileObject $coverageFile): CodeCoverage * * @param string $coverageFile Code coverage file * - * @throws \RuntimeException When coverage file is empty + * @throws RuntimeException When coverage file is empty. */ - public function addCoverageFromFile(string $coverageFile = null) + public function addCoverageFromFile(?string $coverageFile = null): void { - if ($coverageFile === null || !\file_exists($coverageFile)) { + if ($coverageFile === null || ! file_exists($coverageFile)) { return; } - $file = new \SplFileObject($coverageFile); + $file = new SplFileObject($coverageFile); - if (0 === $file->getSize()) { + if ($file->getSize() === 0) { $extra = 'This means a PHPUnit process has crashed.'; - $xdebug = \function_exists('xdebug_get_code_coverage'); - $phpdbg = \PHP_SAPI === 'phpdbg'; - $pcov = \extension_loaded('pcov') && \ini_get('pcov.enabled'); + $xdebug = function_exists('xdebug_get_code_coverage'); + $phpdbg = PHP_SAPI === 'phpdbg'; + $pcov = extension_loaded('pcov') && ini_get('pcov.enabled'); - if (!$xdebug && !$phpdbg && !$pcov) { + if (! $xdebug && ! $phpdbg && ! $pcov) { $extra = 'No coverage driver found! Enable one of Xdebug, PHPDBG or PCOV for coverage.'; } - throw new \RuntimeException( + throw new RuntimeException( "Coverage file {$file->getRealPath()} is empty. " . $extra ); } $this->addCoverage($this->getCoverageObject($file)); - \unlink($file->getRealPath()); + unlink($file->getRealPath()); } /** * Get coverage report generator. - * - * @return CoverageReporterInterface */ public function getReporter(): CoverageReporterInterface { @@ -99,8 +106,6 @@ public function getReporter(): CoverageReporterInterface /** * Get CodeCoverage object. - * - * @return CodeCoverage */ public function getCodeCoverageObject(): ?CodeCoverage { @@ -109,19 +114,21 @@ public function getCodeCoverageObject(): ?CodeCoverage private function limitCoverageTests(CodeCoverage $coverage): void { - if ($this->test_limit) { - $coverage->setData(\array_map( - function (array $lines) { - return \array_map(function ($value) { - if (!\is_array($value)) { - return $value; - } - - return \array_slice($value, 0, $this->test_limit); - }, $lines); - }, - $coverage->getData($raw = true) - )); + if (! $this->test_limit) { + return; } + + $coverage->setData(array_map( + function (array $lines) { + return array_map(function ($value) { + if (! is_array($value)) { + return $value; + } + + return array_slice($value, 0, $this->test_limit); + }, $lines); + }, + $coverage->getData($raw = true) + )); } } diff --git a/src/Coverage/CoverageReporter.php b/src/Coverage/CoverageReporter.php index 279e361..ff6dc0c 100644 --- a/src/Coverage/CoverageReporter.php +++ b/src/Coverage/CoverageReporter.php @@ -15,14 +15,9 @@ class CoverageReporter implements CoverageReporterInterface { - /** - * @var CodeCoverage - */ + /** @var CodeCoverage */ private $coverage; - /** - * @param CodeCoverage $coverage - */ public function __construct(CodeCoverage $coverage) { $this->coverage = $coverage; @@ -33,7 +28,7 @@ public function __construct(CodeCoverage $coverage) * * @param string $target Report filename */ - public function clover(string $target) + public function clover(string $target): void { $clover = new Clover(); $clover->process($this->coverage, $target); @@ -44,7 +39,7 @@ public function clover(string $target) * * @param string $target Report filename */ - public function crap4j(string $target) + public function crap4j(string $target): void { $xml = new Crap4j(); $xml->process($this->coverage, $target); @@ -55,7 +50,7 @@ public function crap4j(string $target) * * @param string $target Report filename */ - public function html(string $target) + public function html(string $target): void { $html = new Html\Facade(); $html->process($this->coverage, $target); @@ -66,7 +61,7 @@ public function html(string $target) * * @param string $target Report filename */ - public function php(string $target) + public function php(string $target): void { $php = new PHP(); $php->process($this->coverage, $target); @@ -75,7 +70,7 @@ public function php(string $target) /** * Generate text coverage report. */ - public function text() + public function text(): void { $text = new Text(); echo $text->process($this->coverage); @@ -86,7 +81,7 @@ public function text() * * @param string $target Report filename */ - public function xml(string $target) + public function xml(string $target): void { $xml = new XmlReport(Version::id()); $xml->process($this->coverage, $target); diff --git a/src/Coverage/CoverageReporterInterface.php b/src/Coverage/CoverageReporterInterface.php index 579f6b0..77de28c 100644 --- a/src/Coverage/CoverageReporterInterface.php +++ b/src/Coverage/CoverageReporterInterface.php @@ -11,38 +11,38 @@ interface CoverageReporterInterface * * @param string $target Report filename */ - public function clover(string $target); + public function clover(string $target): void; /** * Generate Crap4J XML coverage report. * * @param string $target Report filename */ - public function crap4j(string $target); + public function crap4j(string $target): void; /** * Generate html coverage report. * * @param string $target Report filename */ - public function html(string $target); + public function html(string $target): void; /** * Generate php coverage report. * * @param string $target Report filename */ - public function php(string $target); + public function php(string $target): void; /** * Generate text coverage report. */ - public function text(); + public function text(): void; /** * Generate PHPUnit XML coverage report. * * @param string $target Report filename */ - public function xml(string $target); + public function xml(string $target): void; } diff --git a/src/Logging/JUnit/Reader.php b/src/Logging/JUnit/Reader.php index 6d28f18..3a19474 100644 --- a/src/Logging/JUnit/Reader.php +++ b/src/Logging/JUnit/Reader.php @@ -4,33 +4,35 @@ namespace ParaTest\Logging\JUnit; +use InvalidArgumentException; use ParaTest\Logging\MetaProvider; +use SimpleXMLElement; + +use function array_merge; +use function array_reduce; +use function call_user_func_array; +use function count; +use function current; +use function file_exists; +use function file_get_contents; +use function filesize; +use function unlink; class Reader extends MetaProvider { - /** - * @var \SimpleXMLElement - */ + /** @var SimpleXMLElement */ protected $xml; - /** - * @var bool - */ + /** @var bool */ protected $isSingle = false; - /** - * @var TestSuite[] - */ + /** @var TestSuite[] */ protected $suites = []; - /** - * @var string - */ + /** @var string */ protected $logFile; - /** - * @var array - */ + /** @var array */ protected static $defaultSuite = [ 'name' => '', 'file' => '', @@ -44,26 +46,25 @@ class Reader extends MetaProvider public function __construct(string $logFile) { - if (!\file_exists($logFile)) { - throw new \InvalidArgumentException("Log file $logFile does not exist"); + if (! file_exists($logFile)) { + throw new InvalidArgumentException("Log file $logFile does not exist"); } $this->logFile = $logFile; - if (\filesize($logFile) === 0) { - throw new \InvalidArgumentException( + if (filesize($logFile) === 0) { + throw new InvalidArgumentException( "Log file $logFile is empty. This means a PHPUnit process has crashed." ); } - $logFileContents = \file_get_contents($this->logFile); - $this->xml = new \SimpleXMLElement($logFileContents); + + $logFileContents = file_get_contents($this->logFile); + $this->xml = new SimpleXMLElement($logFileContents); $this->init(); } /** * Returns whether or not this reader contains only * a single suite. - * - * @return bool */ public function isSingleSuite(): bool { @@ -94,7 +95,7 @@ public function getSuites(): array public function getFeedback(): array { $feedback = []; - $suites = $this->isSingle ? $this->suites : $this->suites[0]->suites; + $suites = $this->isSingle ? $this->suites : $this->suites[0]->suites; foreach ($suites as $suite) { foreach ($suite->cases as $case) { if ($case->failures) { @@ -117,16 +118,16 @@ public function getFeedback(): array /** * Remove the JUnit xml file. */ - public function removeLog() + public function removeLog(): void { - \unlink($this->logFile); + unlink($this->logFile); } /** * Initialize the suite collection * from the JUnit xml document. */ - protected function init() + protected function init(): void { $this->initSuite(); $cases = $this->getCaseNodes(); @@ -140,15 +141,15 @@ protected function init() * * @param array $nodeArray an array of SimpleXMLElement nodes representing testcase elements */ - protected function initSuiteFromCases(array $nodeArray) + protected function initSuiteFromCases(array $nodeArray): void { - $testCases = []; + $testCases = []; $properties = $this->caseNodesToSuiteProperties($nodeArray, $testCases); - if (!$this->isSingle) { + if (! $this->isSingle) { $this->addSuite($properties, $testCases); } else { - $suite = $this->suites[0]; - $suite->cases = \array_merge($suite->cases, $testCases); + $suite = $this->suites[0]; + $suite->cases = array_merge($suite->cases, $testCases); } } @@ -159,10 +160,10 @@ protected function initSuiteFromCases(array $nodeArray) * @param array $properties * @param array $testCases */ - protected function addSuite($properties, array $testCases) + protected function addSuite(array $properties, array $testCases): void { - $suite = TestSuite::suiteFromArray($properties); - $suite->cases = $testCases; + $suite = TestSuite::suiteFromArray($properties); + $suite->cases = $testCases; $this->suites[0]->suites[] = $suite; } @@ -178,16 +179,16 @@ protected function caseNodesToSuiteProperties(array $nodeArray, array &$testCase { $cb = [TestCase::class, 'caseFromNode']; - return \array_reduce($nodeArray, function ($result, $c) use (&$testCases, $cb) { - $testCases[] = \call_user_func_array($cb, [$c]); + return array_reduce($nodeArray, static function ($result, $c) use (&$testCases, $cb) { + $testCases[] = call_user_func_array($cb, [$c]); $result['name'] = (string) $c['class']; $result['file'] = (string) $c['file']; ++$result['tests']; $result['assertions'] += (int) $c['assertions']; - $result['failures'] += \count($c->xpath('failure')); - $result['errors'] += \count($c->xpath('error')); - $result['skipped'] += \count($c->xpath('skipped')); - $result['time'] += (float) $c['time']; + $result['failures'] += count($c->xpath('failure')); + $result['errors'] += count($c->xpath('error')); + $result['skipped'] += count($c->xpath('skipped')); + $result['time'] += (float) $c['time']; return $result; }, static::$defaultSuite); @@ -202,12 +203,13 @@ protected function caseNodesToSuiteProperties(array $nodeArray, array &$testCase protected function getCaseNodes(): array { $caseNodes = $this->xml->xpath('//testcase'); - $cases = []; + $cases = []; foreach ($caseNodes as $node) { $caseFilename = (string) $node['file']; - if (!isset($cases[$caseFilename])) { + if (! isset($cases[$caseFilename])) { $cases[$caseFilename] = []; } + $cases[$caseFilename][] = $node; } @@ -219,11 +221,11 @@ protected function getCaseNodes(): array * and initialize the suite collection with the first * suite. */ - protected function initSuite() + protected function initSuite(): void { - $suiteNodes = $this->xml->xpath('/testsuites/testsuite/testsuite'); - $this->isSingle = \count($suiteNodes) === 0; - $node = \current($this->xml->xpath('/testsuites/testsuite')); + $suiteNodes = $this->xml->xpath('/testsuites/testsuite/testsuite'); + $this->isSingle = count($suiteNodes) === 0; + $node = current($this->xml->xpath('/testsuites/testsuite')); if ($node !== false) { $this->suites[] = TestSuite::suiteFromNode($node); @@ -235,13 +237,11 @@ protected function initSuite() /** * Return a value as a float or integer. * - * @param string $property - * * @return float|int */ protected function getNumericValue(string $property) { - return ($property === 'time') + return $property === 'time' ? (float) $this->suites[0]->$property : (int) $this->suites[0]->$property; } @@ -249,22 +249,23 @@ protected function getNumericValue(string $property) /** * Return messages for a given type. * - * @param string $type - * * @return array */ protected function getMessages(string $type): array { $messages = []; - $suites = $this->isSingle ? $this->suites : $this->suites[0]->suites; + $suites = $this->isSingle ? $this->suites : $this->suites[0]->suites; foreach ($suites as $suite) { - $messages = \array_merge($messages, \array_reduce($suite->cases, function ($result, $case) use ($type) { - return \array_merge($result, \array_reduce($case->$type, function ($msgs, $msg) { - $msgs[] = $msg['text']; + $messages = array_merge( + $messages, + array_reduce($suite->cases, static function ($result, $case) use ($type) { + return array_merge($result, array_reduce($case->$type, static function ($msgs, $msg) { + $msgs[] = $msg['text']; - return $msgs; - }, [])); - }, [])); + return $msgs; + }, [])); + }, []) + ); } return $messages; diff --git a/src/Logging/JUnit/TestCase.php b/src/Logging/JUnit/TestCase.php index 29e3ce8..6e5450c 100644 --- a/src/Logging/JUnit/TestCase.php +++ b/src/Logging/JUnit/TestCase.php @@ -4,43 +4,33 @@ namespace ParaTest\Logging\JUnit; +use SimpleXMLElement; + +use function trim; + /** - * Class TestCase. - * * A simple data structure for tracking * the results of a testcase node in a * JUnit xml document */ class TestCase { - /** - * @var string - */ + /** @var string */ public $name; - /** - * @var string - */ + /** @var string */ public $class; - /** - * @var string - */ + /** @var string */ public $file; - /** - * @var int - */ + /** @var int */ public $line; - /** - * @var int - */ + /** @var int */ public $assertions; - /** - * @var string|float (a stringified float, from phpunit XML output) - */ + /** @var string|float (a stringified float, from phpunit XML output) */ public $time; /** @@ -67,14 +57,6 @@ class TestCase /** @var array */ public $skipped = []; - /** - * @param string $name - * @param string $class - * @param string $file - * @param int $line - * @param int $assertions - * @param string $time - */ public function __construct( string $name, string $class, @@ -83,26 +65,24 @@ public function __construct( int $assertions, string $time ) { - $this->name = $name; - $this->class = $class; - $this->file = $file; - $this->line = $line; + $this->name = $name; + $this->class = $class; + $this->file = $file; + $this->line = $line; $this->assertions = $assertions; - $this->time = $time; + $this->time = $time; } /** * Add a defect type (error or failure). * * @param string $collName the name of the collection to add to - * @param string $type - * @param string $text */ - protected function addDefect(string $collName, string $type, string $text) + protected function addDefect(string $collName, string $type, string $text): void { $this->{$collName}[] = [ 'type' => $type, - 'text' => \trim($text), + 'text' => trim($text), ]; } @@ -110,11 +90,9 @@ protected function addDefect(string $collName, string $type, string $text) * Factory method that creates a TestCase object * from a SimpleXMLElement. * - * @param \SimpleXMLElement $node - * * @return TestCase */ - public static function caseFromNode(\SimpleXMLElement $node): self + public static function caseFromNode(SimpleXMLElement $node): self { $case = new self( (string) $node['name'], @@ -135,7 +113,7 @@ public static function caseFromNode(\SimpleXMLElement $node): self foreach ($defect_groups as $group => $defects) { foreach ($defects as $defect) { - $message = (string) $defect; + $message = (string) $defect; $message .= (string) $system_output; $case->addDefect($group, (string) $defect['type'], $message); } diff --git a/src/Logging/JUnit/TestSuite.php b/src/Logging/JUnit/TestSuite.php index 91ee82c..6efb7b2 100644 --- a/src/Logging/JUnit/TestSuite.php +++ b/src/Logging/JUnit/TestSuite.php @@ -4,53 +4,37 @@ namespace ParaTest\Logging\JUnit; +use SimpleXMLElement; + /** - * Class TestSuite. - * * A simple data structure for tracking * data associated with a testsuite node * in a JUnit xml document */ class TestSuite { - /** - * @var string - */ + /** @var string */ public $name; - /** - * @var int - */ + /** @var int */ public $tests; - /** - * @var int - */ + /** @var int */ public $assertions; - /** - * @var int - */ + /** @var int */ public $failures; - /** - * @var int - */ + /** @var int */ public $errors; - /** - * @var int - */ + /** @var int */ public $skipped; - /** - * @var float - */ + /** @var float */ public $time; - /** - * @var string - */ + /** @var string */ public $file; /** @@ -67,16 +51,6 @@ class TestSuite */ public $cases = []; - /** - * @param string $name - * @param int $tests - * @param int $assertions - * @param int $failures - * @param int $errors - * @param int $skipped - * @param float $time - * @param string|null $file - */ public function __construct( string $name, int $tests, @@ -85,16 +59,16 @@ public function __construct( int $errors, int $skipped, float $time, - string $file = null + ?string $file = null ) { - $this->name = $name; - $this->tests = $tests; + $this->name = $name; + $this->tests = $tests; $this->assertions = $assertions; - $this->failures = $failures; - $this->skipped = $skipped; - $this->errors = $errors; - $this->time = $time; - $this->file = $file; + $this->failures = $failures; + $this->skipped = $skipped; + $this->errors = $errors; + $this->time = $time; + $this->file = $file; } /** @@ -122,11 +96,9 @@ public static function suiteFromArray(array $arr): self /** * Create a TestSuite from a SimpleXMLElement. * - * @param \SimpleXMLElement $node - * * @return TestSuite */ - public static function suiteFromNode(\SimpleXMLElement $node): self + public static function suiteFromNode(SimpleXMLElement $node): self { return new self( (string) $node['name'], diff --git a/src/Logging/JUnit/Writer.php b/src/Logging/JUnit/Writer.php index 7361445..1c78979 100644 --- a/src/Logging/JUnit/Writer.php +++ b/src/Logging/JUnit/Writer.php @@ -4,8 +4,20 @@ namespace ParaTest\Logging\JUnit; +use DOMDocument; +use DOMElement; use ParaTest\Logging\LogInterpreter; +use function array_merge; +use function array_reduce; +use function count; +use function file_put_contents; +use function get_object_vars; +use function htmlspecialchars; +use function preg_match; + +use const ENT_XML1; + class Writer { /** @@ -16,14 +28,10 @@ class Writer */ protected $name; - /** - * @var \ParaTest\Logging\LogInterpreter - */ + /** @var LogInterpreter */ protected $interpreter; - /** - * @var \DOMDocument - */ + /** @var DOMDocument */ protected $document; /** @@ -57,16 +65,14 @@ class Writer public function __construct(LogInterpreter $interpreter, string $name = '') { - $this->name = $name; - $this->interpreter = $interpreter; - $this->document = new \DOMDocument('1.0', 'UTF-8'); + $this->name = $name; + $this->interpreter = $interpreter; + $this->document = new DOMDocument('1.0', 'UTF-8'); $this->document->formatOutput = true; } /** * Get the name of the root suite being written. - * - * @return string */ public function getName(): string { @@ -76,13 +82,11 @@ public function getName(): string /** * Returns the xml structure the writer * will use. - * - * @return string */ public function getXml(): string { $suites = $this->interpreter->flattenCases(); - $root = $this->getSuiteRoot($suites); + $root = $this->getSuiteRoot($suites); foreach ($suites as $suite) { $snode = $this->appendSuite($root, $suite); foreach ($suite->cases as $case) { @@ -95,32 +99,28 @@ public function getXml(): string /** * Write the xml structure to a file path. - * - * @param string $path */ - public function write(string $path) + public function write(string $path): void { - \file_put_contents($path, $this->getXml()); + file_put_contents($path, $this->getXml()); } /** * Append a testsuite node to the given * root element. - * - * @param \DOMElement $root - * @param TestSuite $suite - * - * @return \DOMElement */ - protected function appendSuite(\DOMElement $root, TestSuite $suite): \DOMElement + protected function appendSuite(DOMElement $root, TestSuite $suite): DOMElement { $suiteNode = $this->document->createElement('testsuite'); - $vars = \get_object_vars($suite); + $vars = get_object_vars($suite); foreach ($vars as $name => $value) { - if (\preg_match(static::$suiteAttrs, $name)) { - $suiteNode->setAttribute($name, (string) $value); + if (! preg_match(static::$suiteAttrs, $name)) { + continue; } + + $suiteNode->setAttribute($name, (string) $value); } + $root->appendChild($suiteNode); return $suiteNode; @@ -129,24 +129,23 @@ protected function appendSuite(\DOMElement $root, TestSuite $suite): \DOMElement /** * Append a testcase node to the given testsuite * node. - * - * @param \DOMElement $suiteNode - * @param TestCase $case - * - * @return \DOMElement */ - protected function appendCase(\DOMElement $suiteNode, TestCase $case): \DOMElement + protected function appendCase(DOMElement $suiteNode, TestCase $case): DOMElement { $caseNode = $this->document->createElement('testcase'); - $vars = \get_object_vars($case); + $vars = get_object_vars($case); foreach ($vars as $name => $value) { - if (\preg_match(static::$caseAttrs, $name)) { - if ($this->isEmptyLineAttribute($name, $value)) { - continue; - } - $caseNode->setAttribute($name, (string) $value); + if (! preg_match(static::$caseAttrs, $name)) { + continue; } + + if ($this->isEmptyLineAttribute($name, $value)) { + continue; + } + + $caseNode->setAttribute($name, (string) $value); } + $suiteNode->appendChild($caseNode); $this->appendDefects($caseNode, $case->failures, 'failure'); $this->appendDefects($caseNode, $case->errors, 'error'); @@ -157,14 +156,12 @@ protected function appendCase(\DOMElement $suiteNode, TestCase $case): \DOMEleme /** * Append error or failure nodes to the given testcase node. * - * @param \DOMElement $caseNode * @param array $defects - * @param string $type */ - protected function appendDefects(\DOMElement $caseNode, array $defects, string $type) + protected function appendDefects(DOMElement $caseNode, array $defects, string $type): void { foreach ($defects as $defect) { - $defectNode = $this->document->createElement($type, \htmlspecialchars($defect['text'], ENT_XML1) . "\n"); + $defectNode = $this->document->createElement($type, htmlspecialchars($defect['text'], ENT_XML1) . "\n"); $defectNode->setAttribute('type', $defect['type']); $caseNode->appendChild($defectNode); } @@ -174,21 +171,21 @@ protected function appendDefects(\DOMElement $caseNode, array $defects, string $ * Get the root level testsuite node. * * @param array $suites - * - * @return \DOMElement */ - protected function getSuiteRoot(array $suites): \DOMElement + protected function getSuiteRoot(array $suites): DOMElement { $testsuites = $this->document->createElement('testsuites'); $this->document->appendChild($testsuites); - if (\count($suites) === 1) { + if (count($suites) === 1) { return $testsuites; } + $rootSuite = $this->document->createElement('testsuite'); - $attrs = $this->getSuiteRootAttributes($suites); + $attrs = $this->getSuiteRootAttributes($suites); foreach ($attrs as $attr => $value) { $rootSuite->setAttribute($attr, (string) $value); } + $testsuites->appendChild($rootSuite); return $rootSuite; @@ -204,25 +201,22 @@ protected function getSuiteRoot(array $suites): \DOMElement */ protected function getSuiteRootAttributes(array $suites) { - return \array_reduce($suites, function (array $result, TestSuite $suite): array { - $result['tests'] += $suite->tests; + return array_reduce($suites, static function (array $result, TestSuite $suite): array { + $result['tests'] += $suite->tests; $result['assertions'] += $suite->assertions; - $result['failures'] += $suite->failures; - $result['skipped'] += $suite->skipped; - $result['errors'] += $suite->errors; - $result['time'] += $suite->time; + $result['failures'] += $suite->failures; + $result['skipped'] += $suite->skipped; + $result['errors'] += $suite->errors; + $result['time'] += $suite->time; return $result; - }, \array_merge(['name' => $this->name], self::$defaultSuite)); + }, array_merge(['name' => $this->name], self::$defaultSuite)); } /** * Prevent writing empty "line" XML attributes which could break parsers. * - * @param string $name - * @param mixed $value - * - * @return bool + * @param mixed $value */ private function isEmptyLineAttribute(string $name, $value): bool { diff --git a/src/Logging/LogInterpreter.php b/src/Logging/LogInterpreter.php index 5e29374..5082f47 100644 --- a/src/Logging/LogInterpreter.php +++ b/src/Logging/LogInterpreter.php @@ -8,6 +8,14 @@ use ParaTest\Logging\JUnit\TestCase; use ParaTest\Logging\JUnit\TestSuite; +use function array_merge; +use function array_reduce; +use function array_values; +use function assert; +use function count; +use function reset; +use function ucfirst; + class LogInterpreter extends MetaProvider { /** @@ -22,17 +30,15 @@ class LogInterpreter extends MetaProvider * Reset the array pointer of the internal * readers collection. */ - public function rewind() + public function rewind(): void { - \reset($this->readers); + reset($this->readers); } /** * Add a new Reader to be included * in the final results. * - * @param Reader $reader - * * @return $this */ public function addReader(Reader $reader): self @@ -57,13 +63,11 @@ public function getReaders(): array * Returns true if total errors and failures * equals 0, false otherwise * TODO: Remove this comment if we don't care about skipped tests in callers. - * - * @return bool */ public function isSuccessful(): bool { $failures = $this->getNumericValue('failures'); - $errors = $this->getNumericValue('errors'); + $errors = $this->getNumericValue('errors'); return $failures === 0 && $errors === 0; } @@ -79,10 +83,10 @@ public function getCases(): array $cases = []; foreach ($this->readers as $reader) { foreach ($reader->getSuites() as $suite) { - $cases = \array_merge($cases, $suite->cases); + $cases = array_merge($cases, $suite->cases); foreach ($suite->suites as $nested) { $this->extendEmptyCasesFromSuites($nested->cases, $suite); - $cases = \array_merge($cases, $nested->cases); + $cases = array_merge($cases, $nested->cases); } } } @@ -93,22 +97,24 @@ public function getCases(): array /** * Fix problem with empty testcase from DataProvider. * - * @param array $cases - * @param TestSuite $suite + * @param array $cases */ - protected function extendEmptyCasesFromSuites(array $cases, TestSuite $suite) + protected function extendEmptyCasesFromSuites(array $cases, TestSuite $suite): void { $class = $suite->name; - $file = $suite->file; + $file = $suite->file; - /** @var TestCase $case */ foreach ($cases as $case) { + assert($case instanceof TestCase); if (empty($case->class)) { $case->class = $class; } - if (empty($case->file)) { - $case->file = $file; + + if (! empty($case->file)) { + continue; } + + $case->file = $file; } } @@ -121,62 +127,57 @@ public function flattenCases(): array { $dict = []; foreach ($this->getCases() as $case) { - if (!isset($dict[$case->file])) { + if (! isset($dict[$case->file])) { $dict[$case->file] = new TestSuite($case->class, 0, 0, 0, 0, 0, 0); } + $dict[$case->file]->cases[] = $case; ++$dict[$case->file]->tests; $dict[$case->file]->assertions += $case->assertions; - $dict[$case->file]->failures += \count($case->failures); - $dict[$case->file]->errors += \count($case->errors); - $dict[$case->file]->skipped += \count($case->skipped); - $dict[$case->file]->time += $case->time; - $dict[$case->file]->file = $case->file; + $dict[$case->file]->failures += count($case->failures); + $dict[$case->file]->errors += count($case->errors); + $dict[$case->file]->skipped += count($case->skipped); + $dict[$case->file]->time += $case->time; + $dict[$case->file]->file = $case->file; } - return \array_values($dict); + return array_values($dict); } /** * Returns a value as either a float or int. * - * @param string $property - * * @return float|int */ protected function getNumericValue(string $property) { - return ($property === 'time') + return $property === 'time' ? (float) $this->accumulate('getTotalTime') - : (int) $this->accumulate('getTotal' . \ucfirst($property)); + : (int) $this->accumulate('getTotal' . ucfirst($property)); } /** * Gets messages of a given type and * merges them into a single collection. * - * @param string $type - * * @return array */ protected function getMessages(string $type): array { - return $this->mergeMessages('get' . \ucfirst($type)); + return $this->mergeMessages('get' . ucfirst($type)); } /** * Flatten messages into a single collection * based on an accessor method. * - * @param string $method - * * @return array */ private function mergeMessages(string $method): array { $messages = []; foreach ($this->readers as $reader) { - $messages = \array_merge($messages, $reader->{$method}()); + $messages = array_merge($messages, $reader->{$method}()); } return $messages; @@ -186,13 +187,11 @@ private function mergeMessages(string $method): array * Reduces a collection of readers down to a single * result based on an accessor. * - * @param string $method - * * @return mixed */ private function accumulate(string $method) { - return \array_reduce($this->readers, function ($result, $reader) use ($method) { + return array_reduce($this->readers, static function ($result, $reader) use ($method) { $result += $reader->$method(); return $result; diff --git a/src/Logging/MetaProvider.php b/src/Logging/MetaProvider.php index 19430b8..2bc730c 100644 --- a/src/Logging/MetaProvider.php +++ b/src/Logging/MetaProvider.php @@ -4,9 +4,10 @@ namespace ParaTest\Logging; +use function preg_match; +use function strtolower; + /** - * Class MetaProvider. - * * Adds __call behavior to a logging object * for aggregating totals and messages * @@ -40,15 +41,15 @@ abstract class MetaProvider /** * Simplify aggregation of totals or messages. * - * @param string $method * @param array $args */ public function __call(string $method, array $args) { - if (\preg_match(self::$totalMethod, $method, $matches) && $property = \strtolower($matches[1])) { + if (preg_match(self::$totalMethod, $method, $matches) && $property = strtolower($matches[1])) { return $this->getNumericValue($property); } - if (\preg_match(self::$messageMethod, $method, $matches) && $type = \strtolower($matches[1])) { + + if (preg_match(self::$messageMethod, $method, $matches) && $type = strtolower($matches[1])) { return $this->getMessages($type); } } @@ -56,8 +57,6 @@ public function __call(string $method, array $args) /** * Returns a value as either a float or int. * - * @param string $property - * * @return float|int */ abstract protected function getNumericValue(string $property); @@ -66,8 +65,6 @@ abstract protected function getNumericValue(string $property); * Gets messages of a given type and * merges them into a single collection. * - * @param string $type - * * @return array */ abstract protected function getMessages(string $type): array; diff --git a/src/Parser/NoClassInFileException.php b/src/Parser/NoClassInFileException.php index e0f8cbb..5832a71 100644 --- a/src/Parser/NoClassInFileException.php +++ b/src/Parser/NoClassInFileException.php @@ -4,6 +4,8 @@ namespace ParaTest\Parser; -class NoClassInFileException extends \Exception +use Exception; + +class NoClassInFileException extends Exception { } diff --git a/src/Parser/ParsedClass.php b/src/Parser/ParsedClass.php index 859f878..f123253 100644 --- a/src/Parser/ParsedClass.php +++ b/src/Parser/ParsedClass.php @@ -4,11 +4,12 @@ namespace ParaTest\Parser; +use function array_filter; +use function explode; + class ParsedClass extends ParsedObject { - /** - * @var string - */ + /** @var string */ private $namespace; /** @@ -23,7 +24,7 @@ public function __construct(string $doc, string $name, string $namespace, array { parent::__construct($doc, $name); $this->namespace = $namespace; - $this->methods = $methods; + $this->methods = $methods; } /** @@ -37,9 +38,9 @@ public function __construct(string $doc, string $name, string $namespace, array */ public function getMethods(array $annotations = []): array { - $methods = \array_filter($this->methods, function (ParsedFunction $method) use ($annotations): bool { + $methods = array_filter($this->methods, static function (ParsedFunction $method) use ($annotations): bool { foreach ($annotations as $a => $v) { - foreach (\explode(',', $v) as $subValue) { + foreach (explode(',', $v) as $subValue) { if ($method->hasAnnotation($a, $subValue)) { return true; } @@ -54,8 +55,6 @@ public function getMethods(array $annotations = []): array /** * Return the namespace of the parsed class. - * - * @return string */ public function getNamespace(): string { diff --git a/src/Parser/ParsedFunction.php b/src/Parser/ParsedFunction.php index 8d64b96..f32c7b6 100644 --- a/src/Parser/ParsedFunction.php +++ b/src/Parser/ParsedFunction.php @@ -6,9 +6,7 @@ class ParsedFunction extends ParsedObject { - /** - * @var string - */ + /** @var string */ private $visibility; public function __construct(string $doc, string $visibility, string $name) @@ -20,8 +18,6 @@ public function __construct(string $doc, string $visibility, string $name) /** * Returns the accessibility level of the parsed * method - i.e public, private, protected. - * - * @return string */ public function getVisibility(): string { diff --git a/src/Parser/ParsedObject.php b/src/Parser/ParsedObject.php index eab3057..ecc87f2 100644 --- a/src/Parser/ParsedObject.php +++ b/src/Parser/ParsedObject.php @@ -4,28 +4,25 @@ namespace ParaTest\Parser; +use function preg_match; +use function sprintf; + abstract class ParsedObject { - /** - * @var string - */ + /** @var string */ protected $docBlock; - /** - * @var string - */ + /** @var string */ protected $name; public function __construct(string $doc, string $name) { $this->docBlock = $doc; - $this->name = $name; + $this->name = $name; } /** * Get the name of a parsed object. - * - * @return string */ public function getName(): string { @@ -34,10 +31,8 @@ public function getName(): string /** * Get the doc block comments of a parsed object. - * - * @return string */ - public function getDocBlock() + public function getDocBlock(): string { return $this->docBlock; } @@ -46,20 +41,15 @@ public function getDocBlock() * Returns whether or not the parsed object * has an annotation matching the name and value * if provided. - * - * @param string $annotation - * @param null|string $value - * - * @return bool */ - public function hasAnnotation(string $annotation, string $value = null): bool + public function hasAnnotation(string $annotation, ?string $value = null): bool { - $pattern = \sprintf( + $pattern = sprintf( '/@%s%s/', $annotation, - null !== $value ? "[\s]+$value" : '\b' + $value !== null ? "[\s]+$value" : '\b' ); - return 1 === \preg_match($pattern, $this->docBlock); + return preg_match($pattern, $this->docBlock) === 1; } } diff --git a/src/Parser/Parser.php b/src/Parser/Parser.php index cafae60..b584c50 100644 --- a/src/Parser/Parser.php +++ b/src/Parser/Parser.php @@ -4,6 +4,20 @@ namespace ParaTest\Parser; +use InvalidArgumentException; +use ReflectionClass; +use ReflectionException; +use ReflectionMethod; + +use function array_diff; +use function array_values; +use function file_exists; +use function get_declared_classes; +use function preg_match; +use function realpath; +use function str_replace; +use function strpos; + class Parser { /** @@ -13,9 +27,7 @@ class Parser */ private $path; - /** - * @var \ReflectionClass - */ + /** @var ReflectionClass */ private $refl; /** @@ -35,21 +47,22 @@ class Parser public function __construct(string $srcPath) { - if (!\file_exists($srcPath)) { - throw new \InvalidArgumentException('file not found: ' . $srcPath); + if (! file_exists($srcPath)) { + throw new InvalidArgumentException('file not found: ' . $srcPath); } - $this->path = $srcPath; - $declaredClasses = \get_declared_classes(); + $this->path = $srcPath; + $declaredClasses = get_declared_classes(); require_once $this->path; $class = $this->getClassName($this->path, $declaredClasses); - if (!$class) { + if (! $class) { throw new NoClassInFileException(); } + try { - $this->refl = new \ReflectionClass($class); - } catch (\ReflectionException $e) { - throw new \InvalidArgumentException( + $this->refl = new ReflectionClass($class); + } catch (ReflectionException $e) { + throw new InvalidArgumentException( 'Unable to instantiate ReflectionClass. ' . $class . ' not found in: ' . $srcPath ); } @@ -58,10 +71,8 @@ public function __construct(string $srcPath) /** * Returns the fully constructed class * with methods or null if the class is abstract. - * - * @return ParsedClass|null */ - public function getClass() + public function getClass(): ?ParsedClass { return $this->refl->isAbstract() ? null @@ -75,12 +86,10 @@ public function getClass() /** * Return reflection name with null bytes stripped. - * - * @return string */ private function getCleanReflectionName(): string { - return \str_replace("\x00", '', $this->refl->getName()); + return str_replace("\x00", '', $this->refl->getName()); } /** @@ -90,16 +99,18 @@ private function getCleanReflectionName(): string */ private function getMethods(): array { - $tests = []; - $methods = $this->refl->getMethods(\ReflectionMethod::IS_PUBLIC); + $tests = []; + $methods = $this->refl->getMethods(ReflectionMethod::IS_PUBLIC); foreach ($methods as $method) { - $hasTestName = \preg_match(self::$testName, $method->getName()); - $docComment = $method->getDocComment(); - $hasTestAnnotation = false !== $docComment && \preg_match(self::$testAnnotation, $docComment); - $isTestMethod = $hasTestName || $hasTestAnnotation; - if ($isTestMethod) { - $tests[] = new ParsedFunction((string) $method->getDocComment(), 'public', $method->getName()); + $hasTestName = preg_match(self::$testName, $method->getName()); + $docComment = $method->getDocComment(); + $hasTestAnnotation = $docComment !== false && preg_match(self::$testAnnotation, $docComment); + $isTestMethod = $hasTestName || $hasTestAnnotation; + if (! $isTestMethod) { + continue; } + + $tests[] = new ParsedFunction((string) $method->getDocComment(), 'public', $method->getName()); } return $tests; @@ -109,16 +120,13 @@ private function getMethods(): array * Return the class name of the class contained * in the file. * - * @param string $filename * @param array $previousDeclaredClasses - * - * @return null|string */ - private function getClassName(string $filename, array $previousDeclaredClasses) + private function getClassName(string $filename, array $previousDeclaredClasses): ?string { - $filename = \realpath($filename); - $classes = \get_declared_classes(); - $newClasses = \array_values(\array_diff($classes, $previousDeclaredClasses)); + $filename = realpath($filename); + $classes = get_declared_classes(); + $newClasses = array_values(array_diff($classes, $previousDeclaredClasses)); $className = $this->searchForUnitTestClass($newClasses, $filename); if (isset($className)) { @@ -137,44 +145,43 @@ private function getClassName(string $filename, array $previousDeclaredClasses) * Search for the name of the unit test. * * @param string[] $classes - * @param string $filename - * - * @return string|null */ - private function searchForUnitTestClass(array $classes, string $filename) + private function searchForUnitTestClass(array $classes, string $filename): ?string { // TODO: After merging this PR or other PR for phpunit 6 support, keep only the applicable subclass name $matchingClassName = null; foreach ($classes as $className) { - $class = new \ReflectionClass($className); - if ($class->getFileName() === $filename) { - if ($class->isSubclassOf('PHPUnit\Framework\TestCase')) { - if ($this->classNameMatchesFileName($filename, $className)) { - return $className; - } elseif ($matchingClassName === null) { - $matchingClassName = $className; - } - } + $class = new ReflectionClass($className); + if ($class->getFileName() !== $filename) { + continue; } + + if (! $class->isSubclassOf('PHPUnit\Framework\TestCase')) { + continue; + } + + if ($this->classNameMatchesFileName($filename, $className)) { + return $className; + } + + if ($matchingClassName !== null) { + continue; + } + + $matchingClassName = $className; } return $matchingClassName; } - /** - * @param string $filename - * @param string $className - * - * @return bool - */ private function classNameMatchesFileName(string $filename, string $className): bool { - return \strpos($filename, $className) !== false - || \strpos($filename, $this->invertSlashes($className)) !== false; + return strpos($filename, $className) !== false + || strpos($filename, $this->invertSlashes($className)) !== false; } private function invertSlashes(string $className): string { - return \str_replace('\\', '/', $className); + return str_replace('\\', '/', $className); } } diff --git a/src/Runners/PHPUnit/BaseRunner.php b/src/Runners/PHPUnit/BaseRunner.php index b75e70e..5150833 100644 --- a/src/Runners/PHPUnit/BaseRunner.php +++ b/src/Runners/PHPUnit/BaseRunner.php @@ -8,21 +8,21 @@ use ParaTest\Logging\JUnit\Writer; use ParaTest\Logging\LogInterpreter; +use function array_merge; +use function file_exists; +use function getenv; +use function putenv; +use function sprintf; + abstract class BaseRunner { - /** - * @var Options - */ + /** @var Options */ protected $options; - /** - * @var \ParaTest\Logging\LogInterpreter - */ + /** @var LogInterpreter */ protected $interpreter; - /** - * @var ResultPrinter - */ + /** @var ResultPrinter */ protected $printer; /** @@ -56,14 +56,17 @@ abstract class BaseRunner */ protected $coverage = null; + /** + * @param array $opts + */ public function __construct(array $opts = []) { - $this->options = new Options($opts); + $this->options = new Options($opts); $this->interpreter = new LogInterpreter(); - $this->printer = new ResultPrinter($this->interpreter); + $this->printer = new ResultPrinter($this->interpreter); } - public function run() + public function run(): void { $this->initialize(); } @@ -73,13 +76,13 @@ public function run() * causes ParaTest to print the error message and exit immediately * with an exit code of 1. */ - protected function verifyConfiguration() + protected function verifyConfiguration(): void { if ( isset($this->options->filtered['configuration']) && - !\file_exists($this->options->filtered['configuration']->getPath()) + ! file_exists($this->options->filtered['configuration']->getPath()) ) { - $this->printer->println(\sprintf('Could not read "%s".', $this->options->filtered['configuration'])); + $this->printer->println(sprintf('Could not read "%s".', $this->options->filtered['configuration'])); exit(1); } } @@ -90,11 +93,11 @@ protected function verifyConfiguration() * contain a collection of TestMethod objects instead of Suite * objects. */ - protected function load(SuiteLoader $loader) + protected function load(SuiteLoader $loader): void { $loader->load($this->options->path); - $executables = $this->options->functional ? $loader->getTestMethods() : $loader->getSuites(); - $this->pending = \array_merge($this->pending, $executables); + $executables = $this->options->functional ? $loader->getTestMethods() : $loader->getSuites(); + $this->pending = array_merge($this->pending, $executables); foreach ($this->pending as $pending) { $this->printer->addTest($pending); } @@ -103,8 +106,6 @@ protected function load(SuiteLoader $loader) /** * Returns the highest exit code encountered * throughout the course of test execution. - * - * @return int */ public function getExitCode(): int { @@ -114,11 +115,12 @@ public function getExitCode(): int /** * Write output to JUnit format if requested. */ - protected function log() + protected function log(): void { - if (!isset($this->options->filtered['log-junit'])) { + if (! isset($this->options->filtered['log-junit'])) { return; } + $output = $this->options->filtered['log-junit']; $writer = new Writer($this->interpreter, $this->options->path); $writer->write($output); @@ -127,9 +129,9 @@ protected function log() /** * Write coverage to file if requested. */ - protected function logCoverage() + protected function logCoverage(): void { - if (!$this->hasCoverage()) { + if (! $this->hasCoverage()) { return; } @@ -160,26 +162,21 @@ protected function logCoverage() $reporter->php($filteredOptions['coverage-php']); } - protected function initCoverage() + protected function initCoverage(): void { - if (!isset($this->options->filtered['coverage-php'])) { + if (! isset($this->options->filtered['coverage-php'])) { return; } - $this->coverage = new CoverageMerger((int)$this->options->coverageTestLimit); + + $this->coverage = new CoverageMerger((int) $this->options->coverageTestLimit); } - /** - * @return bool - */ protected function hasCoverage(): bool { return $this->getCoverage() !== null; } - /** - * @return CoverageMerger|null - */ - protected function getCoverage() + protected function getCoverage(): ?CoverageMerger { return $this->coverage; } @@ -187,16 +184,16 @@ protected function getCoverage() /** * Overrides envirenment variables if needed. */ - protected function overrideEnvironmentVariables() + protected function overrideEnvironmentVariables(): void { - if (!isset($this->options->filtered['configuration'])) { + if (! isset($this->options->filtered['configuration'])) { return; } $variables = $this->options->filtered['configuration']->getEnvironmentVariables(); foreach ($variables as $key => $value) { - \putenv(\sprintf('%s=%s', $key, getenv($key, true) ?: $value)); + putenv(sprintf('%s=%s', $key, getenv($key, true) ?: $value)); $_ENV[$key] = getenv($key, true) ?: $value; } diff --git a/src/Runners/PHPUnit/Configuration.php b/src/Runners/PHPUnit/Configuration.php index 5cc8377..0da0e4c 100644 --- a/src/Runners/PHPUnit/Configuration.php +++ b/src/Runners/PHPUnit/Configuration.php @@ -4,9 +4,24 @@ namespace ParaTest\Runners\PHPUnit; +use RuntimeException; +use SimpleXMLElement; + +use function array_key_exists; +use function array_merge_recursive; +use function dirname; +use function file_exists; +use function file_get_contents; +use function glob; +use function realpath; +use function simplexml_load_string; +use function sprintf; +use function strpos; + +use const DIRECTORY_SEPARATOR; +use const GLOB_ONLYDIR; + /** - * Class Configuration. - * * Stores information about the phpunit xml * configuration being used to run tests */ @@ -19,11 +34,10 @@ class Configuration */ protected $path; - /** - * @var false|\SimpleXMLElement - */ + /** @var false|SimpleXMLElement */ protected $xml; + /** @var string[] */ protected $availableNodes = ['exclude', 'file', 'directory', 'testsuite']; /** @@ -38,16 +52,16 @@ class Configuration public function __construct(string $path) { $this->path = $path; - if (\file_exists($path)) { - $this->xml = \simplexml_load_string(\file_get_contents($path)); + if (! file_exists($path)) { + return; } + + $this->xml = simplexml_load_string(file_get_contents($path)); } /** * Converting the configuration to a string * returns the configuration path. - * - * @return string */ public function __toString(): string { @@ -71,8 +85,6 @@ public function getBootstrap(): string /** * Returns the path to the phpunit configuration * file. - * - * @return string */ public function getPath(): string { @@ -85,16 +97,17 @@ public function getPath(): string * * @return SuitePath[][]|null */ - public function getSuites() + public function getSuites(): ?array { - if (!$this->xml) { + if (! $this->xml) { return null; } + $suites = []; - $nodes = $this->xml->xpath('//testsuites/testsuite'); + $nodes = $this->xml->xpath('//testsuites/testsuite'); foreach ($nodes as $node) { - $suites = \array_merge_recursive($suites, $this->getSuiteByName((string) $node['name'])); + $suites = array_merge_recursive($suites, $this->getSuiteByName((string) $node['name'])); } return $suites; @@ -102,14 +115,15 @@ public function getSuites() public function hasSuites() { - return !empty($this->getSuitesName()); + return ! empty($this->getSuitesName()); } - public function getSuitesName() + public function getSuitesName(): ?array { - if (!$this->xml) { - return; + if (! $this->xml) { + return null; } + $nodes = $this->xml->xpath('//testsuites/testsuite'); $names = []; foreach ($nodes as $node) { @@ -123,15 +137,13 @@ public function getSuitesName() * Return the contents of the nodes * contained in a PHPUnit configuration. * - * @param string $suiteName - * * @return SuitePath[]|null */ - public function getSuiteByName(string $suiteName) + public function getSuiteByName(string $suiteName): ?array { - $nodes = $this->xml->xpath(\sprintf('//testsuite[@name="%s"]', $suiteName)); + $nodes = $this->xml->xpath(sprintf('//testsuite[@name="%s"]', $suiteName)); - $suites = []; + $suites = []; $excludedPaths = []; foreach ($nodes as $node) { foreach ($this->availableNodes as $nodeName) { @@ -141,18 +153,22 @@ public function getSuiteByName(string $suiteName) foreach ($this->getSuitePaths((string) $nodeContent) as $excludedPath) { $excludedPaths[$excludedPath] = $excludedPath; } + break; case 'testsuite': - $suites = \array_merge_recursive($suites, $this->getSuiteByName((string) $nodeContent)); + $suites = array_merge_recursive($suites, $this->getSuiteByName((string) $nodeContent)); break; case 'directory': // Replicate behaviour of PHPUnit // if a directory is included and excluded at the same time, then it is considered included foreach ($this->getSuitePaths((string) $nodeContent) as $dir) { - if (\array_key_exists($dir, $excludedPaths)) { - unset($excludedPaths[$dir]); + if (! array_key_exists($dir, $excludedPaths)) { + continue; } + + unset($excludedPaths[$dir]); } + // no break on purpose default: foreach ($this->getSuitePaths((string) $nodeContent) as $path) { @@ -162,6 +178,7 @@ public function getSuiteByName(string $suiteName) (string) $nodeContent->attributes()->suffix ); } + break; } } @@ -174,24 +191,20 @@ public function getSuiteByName(string $suiteName) /** * Return the path of the directory * that contains the phpunit configuration. - * - * @return string */ public function getConfigDir(): string { - return \dirname($this->path) . \DIRECTORY_SEPARATOR; + return dirname($this->path) . DIRECTORY_SEPARATOR; } /** * Returns a suite paths relative to the config file. * - * @param string $path - * * @return array|string[] */ - public function getSuitePaths(string $path) + public function getSuitePaths(string $path): array { - $real = \realpath($this->getConfigDir() . $path); + $real = realpath($this->getConfigDir() . $path); if ($real !== false) { return [$real]; @@ -199,16 +212,18 @@ public function getSuitePaths(string $path) if ($this->isGlobRequired($path)) { $paths = []; - foreach (\glob($this->getConfigDir() . $path, GLOB_ONLYDIR) as $path) { - if (($path = \realpath($path)) !== false) { - $paths[] = $path; + foreach (glob($this->getConfigDir() . $path, GLOB_ONLYDIR) as $path) { + if (($path = realpath($path)) === false) { + continue; } + + $paths[] = $path; } return $paths; } - throw new \RuntimeException("Suite path $path could not be found"); + throw new RuntimeException("Suite path $path could not be found"); } /** @@ -218,7 +233,7 @@ public function getSuitePaths(string $path) */ public function getEnvironmentVariables(): array { - if (!isset($this->xml->php->env)) { + if (! isset($this->xml->php->env)) { return []; } @@ -233,13 +248,9 @@ public function getEnvironmentVariables(): array /** * Returns true if path needs globbing (like a /path/*-to/string). - * - * @param string $path - * - * @return bool */ public function isGlobRequired(string $path): bool { - return \strpos($path, '*') !== false; + return strpos($path, '*') !== false; } } diff --git a/src/Runners/PHPUnit/EmptyRunnerStub.php b/src/Runners/PHPUnit/EmptyRunnerStub.php index 77e76c0..679f171 100644 --- a/src/Runners/PHPUnit/EmptyRunnerStub.php +++ b/src/Runners/PHPUnit/EmptyRunnerStub.php @@ -6,7 +6,7 @@ class EmptyRunnerStub extends BaseRunner { - public function run() + public function run(): void { echo 'EXECUTED'; } diff --git a/src/Runners/PHPUnit/ExecutableTest.php b/src/Runners/PHPUnit/ExecutableTest.php index a5798f3..e58224a 100644 --- a/src/Runners/PHPUnit/ExecutableTest.php +++ b/src/Runners/PHPUnit/ExecutableTest.php @@ -4,9 +4,19 @@ namespace ParaTest\Runners\PHPUnit; +use RuntimeException; use Symfony\Component\Process\PhpExecutableFinder; use Symfony\Component\Process\Process; +use function array_map; +use function array_merge; +use function strlen; +use function sys_get_temp_dir; +use function tempnam; +use function unlink; + +use const DIRECTORY_SEPARATOR; + abstract class ExecutableTest { /** @@ -33,9 +43,7 @@ abstract class ExecutableTest */ protected $coverageFileName; - /** - * @var Process - */ + /** @var Process */ protected $process; /** @@ -60,15 +68,11 @@ public function __construct(string $path) /** * Get the expected count of tests to be executed. - * - * @return int */ abstract public function getTestCount(): int; /** * Get the path to the test being executed. - * - * @return string */ public function getPath(): string { @@ -79,13 +83,11 @@ public function getPath(): string * Returns the path to this test's temp file. * If the temp file does not exist, it will be * created. - * - * @return string */ public function getTempFile(): string { - if (null === $this->temp) { - $this->temp = \tempnam(\sys_get_temp_dir(), 'PT_'); + if ($this->temp === null) { + $this->temp = tempnam(sys_get_temp_dir(), 'PT_'); } return $this->temp; @@ -93,8 +95,6 @@ public function getTempFile(): string /** * Return the test process' stderr contents. - * - * @return string */ public function getStderr(): string { @@ -104,8 +104,6 @@ public function getStderr(): string /** * Stop the process and return it's * exit code. - * - * @return int */ public function stop(): int { @@ -115,16 +113,14 @@ public function stop(): int /** * Removes the test file. */ - public function deleteFile() + public function deleteFile(): void { $outputFile = $this->getTempFile(); - \unlink($outputFile); + unlink($outputFile); } /** * Check if the process has terminated. - * - * @return bool */ public function isDoneRunning(): bool { @@ -133,8 +129,6 @@ public function isDoneRunning(): bool /** * Return the exit code of the process. - * - * @return int */ public function getExitCode(): int { @@ -143,8 +137,6 @@ public function getExitCode(): int /** * Return the last process command. - * - * @return string */ public function getLastCommand(): string { @@ -153,10 +145,8 @@ public function getLastCommand(): string /** * Set the last process command. - * - * @param string $command */ - public function setLastCommand(string $command) + public function setLastCommand(string $command): void { $this->lastCommand = $command; } @@ -164,9 +154,8 @@ public function setLastCommand(string $command) /** * Executes the test by creating a separate process. * - * @param string $binary - * @param array $options - * @param array $environmentVariables + * @param array $options + * @param array $environmentVariables * @param string[]|null $passthru * @param string[]|null $passthruPhp * @@ -197,25 +186,23 @@ public function run( * Build the full executable as we would do on the command line, e.g. * php -d zend_extension=xdebug.so vendor/bin/phpunit --teststuite suite1 --prepend xdebug-filter.php. * - * @param string $binary - * @param array $options + * @param array $options * @param string[]|null $passthru * @param string[]|null $passthruPhp - * - * @return string */ protected function getFullCommandlineString( string $binary, array $options, ?array $passthru = null, ?array $passthruPhp = null - ) { + ): string { $finder = new PhpExecutableFinder(); $args = [$finder->find()]; - if (null !== $passthruPhp) { + if ($passthruPhp !== null) { $args = array_merge($args, $passthruPhp); } + $args = array_merge($args, $this->commandArguments($binary, $options, $passthru)); return (new Process($args))->getCommandLine(); @@ -223,8 +210,6 @@ protected function getFullCommandlineString( /** * Returns the unique token for this test process. - * - * @return int */ public function getToken(): int { @@ -234,29 +219,33 @@ public function getToken(): int /** * Generate command line arguments with passed options suitable to handle through paratest. * - * @param string $binary executable binary name - * @param array $options command line options + * @param string $binary executable binary name + * @param array $options command line options * @param string[]|null $passthru * * @return string[] command line arguments */ public function commandArguments(string $binary, array $options = [], ?array $passthru = null): array { - $options = \array_merge($this->prepareOptions($options), ['log-junit' => $this->getTempFile()]); + $options = array_merge($this->prepareOptions($options), ['log-junit' => $this->getTempFile()]); $options = $this->redirectCoverageOption($options); $arguments = [$binary]; - if (null !== $passthru) { + if ($passthru !== null) { $arguments = array_merge($arguments, $passthru); } + foreach ($options as $key => $value) { $arguments[] = "--$key"; - if ($value !== null) { - $arguments[] = $value; + if ($value === null) { + continue; } + + $arguments[] = $value; } + $arguments[] = $this->getPath(); - $arguments = array_map('strval', $arguments); + $arguments = array_map('strval', $arguments); return $arguments; } @@ -264,8 +253,8 @@ public function commandArguments(string $binary, array $options = [], ?array $pa /** * Generate command line with passed options suitable to handle through paratest. * - * @param string $binary executable binary name - * @param array $options command line options + * @param string $binary executable binary name + * @param array $options command line options * @param string[]|null $passthru * * @return string command line @@ -277,13 +266,11 @@ public function command(string $binary, array $options = [], ?array $passthru = /** * Get coverage filename. - * - * @return string */ public function getCoverageFileName(): string { if ($this->coverageFileName === null) { - $this->coverageFileName = \tempnam(\sys_get_temp_dir(), 'CV_'); + $this->coverageFileName = tempnam(sys_get_temp_dir(), 'CV_'); } return $this->coverageFileName; @@ -291,8 +278,6 @@ public function getCoverageFileName(): string /** * Get process stdout content. - * - * @return string */ public function getStdout(): string { @@ -301,10 +286,8 @@ public function getStdout(): string /** * Set process temporary filename. - * - * @param string $temp */ - public function setTempFile(string $temp) + public function setTempFile(string $temp): void { $this->temp = $temp; } @@ -318,17 +301,18 @@ public function setTempFile(string $temp) * * @param string $cmd Command line * - * @throws \RuntimeException on too long command line + * @throws RuntimeException on too long command line. */ - protected function assertValidCommandLineLength(string $cmd) + protected function assertValidCommandLineLength(string $cmd): void { - if (\DIRECTORY_SEPARATOR === '\\') { // windows + if (DIRECTORY_SEPARATOR === '\\') { // windows // symfony's process wrapper $cmd = 'cmd /V:ON /E:ON /C "(' . $cmd . ')'; - if (\strlen($cmd) > 32767) { - throw new \RuntimeException('Command line is too long, try to decrease max batch size'); + if (strlen($cmd) > 32767) { + throw new RuntimeException('Command line is too long, try to decrease max batch size'); } } + /* * @todo Implement command line length validation for linux/osx/freebsd. * Please note that on unix environment variables also became part of command line: @@ -355,11 +339,13 @@ protected function prepareOptions(array $options): array * * @param array $environmentVariables */ - protected function handleEnvironmentVariables(array $environmentVariables) + protected function handleEnvironmentVariables(array $environmentVariables): void { - if (isset($environmentVariables['TEST_TOKEN'])) { - $this->token = $environmentVariables['TEST_TOKEN']; + if (! isset($environmentVariables['TEST_TOKEN'])) { + return; } + + $this->token = $environmentVariables['TEST_TOKEN']; } /** diff --git a/src/Runners/PHPUnit/FullSuite.php b/src/Runners/PHPUnit/FullSuite.php index fbda8aa..82d96c1 100644 --- a/src/Runners/PHPUnit/FullSuite.php +++ b/src/Runners/PHPUnit/FullSuite.php @@ -4,27 +4,21 @@ namespace ParaTest\Runners\PHPUnit; +use function array_merge; + class FullSuite extends ExecutableTest { - /** - * @var string - */ + /** @var string */ protected $suiteName; - /** - * @var string - */ + /** @var string */ protected $configPath; - /** - * @param string $suiteName - * @param string $configPath - */ - public function __construct($suiteName, $configPath) + public function __construct(string $suiteName, string $configPath) { parent::__construct(''); - $this->suiteName = $suiteName; + $this->suiteName = $suiteName; $this->configPath = $configPath; } @@ -35,7 +29,7 @@ public function commandArguments(string $binary, array $options = [], ?array $pa { return parent::commandArguments( $binary, - \array_merge( + array_merge( $options, [ 'configuration' => $this->configPath, diff --git a/src/Runners/PHPUnit/Options.php b/src/Runners/PHPUnit/Options.php index 6287730..b0d2f55 100644 --- a/src/Runners/PHPUnit/Options.php +++ b/src/Runners/PHPUnit/Options.php @@ -4,7 +4,32 @@ namespace ParaTest\Runners\PHPUnit; -use PHPStan\Parallel\Process; +use RuntimeException; +use Symfony\Component\Process\Process; + +use function array_diff_key; +use function array_shift; +use function count; +use function dirname; +use function explode; +use function fgets; +use function file_exists; +use function file_get_contents; +use function in_array; +use function intdiv; +use function is_dir; +use function is_file; +use function pclose; +use function popen; +use function preg_match_all; +use function realpath; +use function rtrim; +use function sprintf; +use function strlen; +use function unserialize; + +use const DIRECTORY_SEPARATOR; +use const PHP_BINARY; /** * An object containing all configurable information used @@ -79,19 +104,13 @@ class Options */ protected $filtered; - /** - * @var string - */ + /** @var string */ protected $runner; - /** - * @var bool - */ + /** @var bool */ protected $noTestTokens; - /** - * @var bool - */ + /** @var bool */ protected $colors; /** @@ -101,24 +120,16 @@ class Options */ protected $testsuite; - /** - * @var int|null - */ + /** @var int|null */ protected $maxBatchSize; - /** - * @var string - */ + /** @var string */ protected $filter; - /** - * @var string[] - */ + /** @var string[] */ protected $groups; - /** - * @var string[] - */ + /** @var string[] */ protected $excludeGroups; /** @@ -165,6 +176,9 @@ class Options */ protected $coverageTestLimit; + /** + * @param array $opts + */ public function __construct(array $opts = []) { foreach (self::defaults() as $opt => $value) { @@ -174,24 +188,24 @@ public function __construct(array $opts = []) if ($opts['processes'] === 'auto') { $opts['processes'] = self::getNumberOfCPUCores(); } elseif ($opts['processes'] === 'half') { - $opts['processes'] = \intdiv(self::getNumberOfCPUCores(), 2); + $opts['processes'] = intdiv(self::getNumberOfCPUCores(), 2); } - $this->processes = $opts['processes']; - $this->path = $opts['path']; - $this->phpunit = $opts['phpunit']; - $this->functional = $opts['functional']; - $this->stopOnFailure = $opts['stop-on-failure']; - $this->runner = $opts['runner']; - $this->noTestTokens = $opts['no-test-tokens']; - $this->colors = $opts['colors']; - $this->testsuite = $opts['testsuite']; - $this->maxBatchSize = (int) $opts['max-batch-size']; - $this->filter = $opts['filter']; - $this->parallelSuite = $opts['parallel-suite']; - $this->passthru = $this->parsePassthru($opts['passthru-php'] ?? null); - $this->passthruPhp = $this->parsePassthru($opts['passthru-php'] ?? null); - $this->verbose = $opts['verbose'] ?? 0; + $this->processes = $opts['processes']; + $this->path = $opts['path']; + $this->phpunit = $opts['phpunit']; + $this->functional = $opts['functional']; + $this->stopOnFailure = $opts['stop-on-failure']; + $this->runner = $opts['runner']; + $this->noTestTokens = $opts['no-test-tokens']; + $this->colors = $opts['colors']; + $this->testsuite = $opts['testsuite']; + $this->maxBatchSize = (int) $opts['max-batch-size']; + $this->filter = $opts['filter']; + $this->parallelSuite = $opts['parallel-suite']; + $this->passthru = $this->parsePassthru($opts['passthru-php'] ?? null); + $this->passthruPhp = $this->parsePassthru($opts['passthru-php'] ?? null); + $this->verbose = $opts['verbose'] ?? 0; $this->coverageTestLimit = $opts['coverage-test-limit'] ?? 0; // we need to register that options if they are blank but do not get them as @@ -199,15 +213,15 @@ public function __construct(array $opts = []) // phpunit command line generation (it will add them in command line with no value // and it's wrong because group and exclude-group options require value when passed // to phpunit) - $this->groups = isset($opts['group']) && $opts['group'] !== '' - ? \explode(',', $opts['group']) + $this->groups = isset($opts['group']) && $opts['group'] !== '' + ? explode(',', $opts['group']) : []; $this->excludeGroups = isset($opts['exclude-group']) && $opts['exclude-group'] !== '' - ? \explode(',', $opts['exclude-group']) + ? explode(',', $opts['exclude-group']) : []; - if (isset($opts['filter']) && \strlen($opts['filter']) > 0 && !$this->functional) { - throw new \RuntimeException('Option --filter is not implemented for non functional mode'); + if (isset($opts['filter']) && strlen($opts['filter']) > 0 && ! $this->functional) { + throw new RuntimeException('Option --filter is not implemented for non functional mode'); } $this->filtered = $this->filterOptions($opts); @@ -217,8 +231,6 @@ public function __construct(array $opts = []) /** * Public read accessibility. * - * @param string $var - * * @return mixed */ public function __get(string $var) @@ -229,10 +241,6 @@ public function __get(string $var) /** * Public read accessibility * (e.g. to make empty($options->property) work as expected). - * - * @param string $var - * - * @return bool */ public function __isset(string $var): bool { @@ -263,7 +271,7 @@ protected static function defaults(): array 'passthru' => null, 'passthru-php' => null, 'verbose' => 0, - 'coverage-test-limit' => 0 + 'coverage-test-limit' => 0, ]; } @@ -280,9 +288,9 @@ protected static function phpunit(): string { $vendor = static::vendorDir(); - $phpunit = $vendor . \DIRECTORY_SEPARATOR . 'phpunit' . \DIRECTORY_SEPARATOR . 'phpunit' . - \DIRECTORY_SEPARATOR . 'phpunit'; - if (\file_exists($phpunit)) { + $phpunit = $vendor . DIRECTORY_SEPARATOR . 'phpunit' . DIRECTORY_SEPARATOR . 'phpunit' . + DIRECTORY_SEPARATOR . 'phpunit'; + if (file_exists($phpunit)) { return $phpunit; } @@ -296,9 +304,9 @@ protected static function phpunit(): string */ protected static function vendorDir(): string { - $vendor = \dirname(\dirname(\dirname(__DIR__))) . \DIRECTORY_SEPARATOR . 'vendor'; - if (!\file_exists($vendor)) { - $vendor = \dirname(\dirname(\dirname(\dirname(\dirname(__DIR__))))); + $vendor = dirname(dirname(dirname(__DIR__))) . DIRECTORY_SEPARATOR . 'vendor'; + if (! file_exists($vendor)) { + $vendor = dirname(dirname(dirname(dirname(dirname(__DIR__))))); } return $vendor; @@ -310,7 +318,7 @@ protected static function vendorDir(): string */ protected function filterOptions(array $options): array { - $filtered = \array_diff_key($options, [ + $filtered = array_diff_key($options, [ 'processes' => $this->processes, 'path' => $this->path, 'phpunit' => $this->phpunit, @@ -326,7 +334,7 @@ protected function filterOptions(array $options): array 'passthru' => $this->passthru, 'passthru-php' => $this->passthruPhp, 'verbose' => $this->verbose, - 'coverage-test-limit' => $this->coverageTestLimit + 'coverage-test-limit' => $this->coverageTestLimit, ]); if ($configuration = $this->getConfigurationPath($filtered)) { $filtered['configuration'] = new Configuration($configuration); @@ -340,10 +348,8 @@ protected function filterOptions(array $options): array * configuration path. * * @param array $filtered - * - * @return string|null */ - protected function getConfigurationPath(array $filtered) + protected function getConfigurationPath(array $filtered): ?string { if (isset($filtered['configuration'])) { return $this->getDefaultConfigurationForPath($filtered['configuration'], $filtered['configuration']); @@ -358,21 +364,19 @@ protected function getConfigurationPath(array $filtered) * * @param string $path The path to search into * @param string $default The default value to give back - * - * @return string|null */ - private function getDefaultConfigurationForPath(string $path = '.', string $default = null) + private function getDefaultConfigurationForPath(string $path = '.', ?string $default = null): ?string { if ($this->isFile($path)) { - return \realpath($path); + return realpath($path); } - $path = \rtrim($path, \DIRECTORY_SEPARATOR) . \DIRECTORY_SEPARATOR; + $path = rtrim($path, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR; $suffixes = ['phpunit.xml', 'phpunit.xml.dist']; foreach ($suffixes as $suffix) { if ($this->isFile($path . $suffix)) { - return \realpath($path . $suffix); + return realpath($path . $suffix); } } @@ -383,24 +387,21 @@ private function getDefaultConfigurationForPath(string $path = '.', string $defa * Load options that are represented by annotations * inside of tests i.e @group group1 = --group group1. */ - protected function initAnnotations() + protected function initAnnotations(): void { $annotatedOptions = ['group']; foreach ($this->filtered as $key => $value) { - if (\in_array($key, $annotatedOptions, true)) { - $this->annotations[$key] = $value; + if (! in_array($key, $annotatedOptions, true)) { + continue; } + + $this->annotations[$key] = $value; } } - /** - * @param string $file - * - * @return bool - */ private function isFile(string $file): bool { - return \file_exists($file) && !\is_dir($file); + return file_exists($file) && ! is_dir($file); } /** @@ -413,38 +414,37 @@ private function isFile(string $file): bool public static function getNumberOfCPUCores(): int { $cores = 2; - if (\is_file('/proc/cpuinfo')) { + if (is_file('/proc/cpuinfo')) { // Linux (and potentially Windows with linux sub systems) - $cpuinfo = \file_get_contents('/proc/cpuinfo'); - \preg_match_all('/^processor/m', $cpuinfo, $matches); - $cores = \count($matches[0]); - } elseif (\DIRECTORY_SEPARATOR === '\\') { + $cpuinfo = file_get_contents('/proc/cpuinfo'); + preg_match_all('/^processor/m', $cpuinfo, $matches); + $cores = count($matches[0]); + } elseif (DIRECTORY_SEPARATOR === '\\') { // Windows - if (($process = @\popen('wmic cpu get NumberOfCores', 'rb')) !== false) { - \fgets($process); - $cores = (int) \fgets($process); - \pclose($process); + if (($process = @popen('wmic cpu get NumberOfCores', 'rb')) !== false) { + fgets($process); + $cores = (int) fgets($process); + pclose($process); } - } elseif (($process = @\popen('sysctl -n hw.ncpu', 'rb')) !== false) { + } elseif (($process = @popen('sysctl -n hw.ncpu', 'rb')) !== false) { // *nix (Linux, BSD and Mac) - $cores = (int) \fgets($process); - \pclose($process); + $cores = (int) fgets($process); + pclose($process); } return $cores; } /** - * @param string|null $param * @return string[]|null */ private function parsePassthru(?string $param): ?array { - if (null === $param) { + if ($param === null) { return null; } - $stringToArgumentProcess = \Symfony\Component\Process\Process::fromShellCommandline( + $stringToArgumentProcess = Process::fromShellCommandline( sprintf('%s -r "echo serialize(\\$argv);" -- %s', PHP_BINARY, $param) ); $stringToArgumentProcess->mustRun(); @@ -452,7 +452,7 @@ private function parsePassthru(?string $param): ?array $passthruAsArguments = unserialize($stringToArgumentProcess->getOutput()); array_shift($passthruAsArguments); - if (0 === count($passthruAsArguments)) { + if (count($passthruAsArguments) === 0) { return null; } diff --git a/src/Runners/PHPUnit/ResultPrinter.php b/src/Runners/PHPUnit/ResultPrinter.php index 2ff624d..95fe80e 100644 --- a/src/Runners/PHPUnit/ResultPrinter.php +++ b/src/Runners/PHPUnit/ResultPrinter.php @@ -4,13 +4,21 @@ namespace ParaTest\Runners\PHPUnit; +use InvalidArgumentException; use ParaTest\Logging\JUnit\Reader; use ParaTest\Logging\LogInterpreter; +use RuntimeException; use SebastianBergmann\Timer\ResourceUsageFormatter; +use function count; +use function floor; +use function printf; +use function sprintf; +use function strlen; + +use const DIRECTORY_SEPARATOR; + /** - * Class ResultPrinter. - * * Used for outputting ParaTest results */ class ResultPrinter @@ -22,9 +30,7 @@ class ResultPrinter */ protected $suites = []; - /** - * @var \ParaTest\Logging\LogInterpreter - */ + /** @var LogInterpreter */ protected $results; /** @@ -107,14 +113,12 @@ public function __construct(LogInterpreter $results) /** * Adds an ExecutableTest to the tracked results. * - * @param ExecutableTest $suite - * * @return $this */ public function addTest(ExecutableTest $suite): self { - $this->suites[] = $suite; - $increment = $suite->getTestCount(); + $this->suites[] = $suite; + $increment = $suite->getTestCount(); $this->totalCases += $increment; return $this; @@ -123,16 +127,14 @@ public function addTest(ExecutableTest $suite): self /** * Initializes printing constraints, prints header * information and starts the test timer. - * - * @param Options $options */ - public function start(Options $options) + public function start(Options $options): void { - $this->numTestsWidth = \strlen((string) $this->totalCases); - $this->maxColumn = $this->numberOfColumns - + (\DIRECTORY_SEPARATOR === '\\' ? -1 : 0) // fix windows blank lines - - \strlen($this->getProgress()); - \printf( + $this->numTestsWidth = strlen((string) $this->totalCases); + $this->maxColumn = $this->numberOfColumns + + (DIRECTORY_SEPARATOR === '\\' ? -1 : 0) // fix windows blank lines + - strlen($this->getProgress()); + printf( "\nRunning phpunit in %d process%s with %s%s\n\n", $options->processes, $options->processes > 1 ? 'es' : '', @@ -140,16 +142,14 @@ public function start(Options $options) $options->functional ? '. Functional mode is ON.' : '' ); if (isset($options->filtered['configuration'])) { - \printf("Configuration read from %s\n\n", $options->filtered['configuration']->getPath()); + printf("Configuration read from %s\n\n", $options->filtered['configuration']->getPath()); } - $this->colors = $options->colors; + + $this->colors = $options->colors; $this->processSkipped = $this->isSkippedIncompleTestCanBeTracked($options); } - /** - * @param string $string - */ - public function println(string $string = '') + public function println(string $string = ''): void { $this->column = 0; echo "$string\n"; @@ -159,7 +159,7 @@ public function println(string $string = '') * Prints all results and removes any log files * used for aggregating results. */ - public function flush() + public function flush(): void { $this->printResults(); $this->clearLogs(); @@ -168,7 +168,7 @@ public function flush() /** * Print final results. */ - public function printResults() + public function printResults(): void { echo $this->getHeader(); echo $this->getErrors(); @@ -180,15 +180,13 @@ public function printResults() /** * Prints the individual "quick" feedback for run * tests, that is the ".EF" items. - * - * @param ExecutableTest $test */ - public function printFeedback(ExecutableTest $test) + public function printFeedback(ExecutableTest $test): void { try { $reader = new Reader($test->getTempFile()); - } catch (\InvalidArgumentException $e) { - throw new \RuntimeException(\sprintf( + } catch (InvalidArgumentException $e) { + throw new RuntimeException(sprintf( "%s\n" . "The process: %s\n" . "This means a PHPUnit process was unable to run \"%s\"\n", @@ -197,14 +195,13 @@ public function printFeedback(ExecutableTest $test) $test->getPath() )); } + $this->results->addReader($reader); $this->processReaderFeedback($reader, $test->getTestCount()); } /** * Returns the header containing resource usage. - * - * @return string */ public function getHeader(): string { @@ -225,19 +222,15 @@ public function getWarnings(): string /** * Whether the test run is successful and has no warnings. - * - * @return bool */ public function isSuccessful(): bool { - return $this->results->isSuccessful() && \count($this->warnings) === 0; + return $this->results->isSuccessful() && count($this->warnings) === 0; } /** * Return the footer information reporting success * or failure. - * - * @return string */ public function getFooter(): string { @@ -248,8 +241,6 @@ public function getFooter(): string /** * Returns the failure messages. - * - * @return string */ public function getFailures(): string { @@ -260,8 +251,6 @@ public function getFailures(): string /** * Returns error messages. - * - * @return string */ public function getErrors(): string { @@ -272,8 +261,6 @@ public function getErrors(): string /** * Returns the total cases being printed. - * - * @return int */ public function getTotalCases(): int { @@ -282,28 +269,29 @@ public function getTotalCases(): int /** * Process reader feedback and print it. - * - * @param Reader $reader - * @param int $expectedTestCount */ - protected function processReaderFeedback(Reader $reader, int $expectedTestCount) + protected function processReaderFeedback(Reader $reader, int $expectedTestCount): void { $feedbackItems = $reader->getFeedback(); - $actualTestCount = \count($feedbackItems); + $actualTestCount = count($feedbackItems); $this->processTestOverhead($actualTestCount, $expectedTestCount); foreach ($feedbackItems as $item) { $this->printFeedbackItem($item); - if ($item === 'S') { - ++$this->totalSkippedOrIncomplete; + if ($item !== 'S') { + continue; } + + ++$this->totalSkippedOrIncomplete; } - if ($this->processSkipped) { - $this->printSkippedAndIncomplete($actualTestCount, $expectedTestCount); + if (! $this->processSkipped) { + return; } + + $this->printSkippedAndIncomplete($actualTestCount, $expectedTestCount); } /** @@ -311,10 +299,6 @@ protected function processReaderFeedback(Reader $reader, int $expectedTestCount) * * @todo Skipped/Incomplete test tracking available only in functional mode for now * or in regular mode but without group/exclude-group filters. - * - * @param Options $options - * - * @return bool */ protected function isSkippedIncompleTestCanBeTracked(Options $options): bool { @@ -329,11 +313,8 @@ protected function isSkippedIncompleTestCanBeTracked(Options $options): bool * this method correct total amount of tests so paratest progress will be auto corrected. * * @todo May be we need to throw Exception here instead of silent correction. - * - * @param int $actualTestCount - * @param int $expectedTestCount */ - protected function processTestOverhead(int $actualTestCount, int $expectedTestCount) + protected function processTestOverhead(int $actualTestCount, int $expectedTestCount): void { $overhead = $actualTestCount - $expectedTestCount; if ($this->processSkipped) { @@ -352,17 +333,16 @@ protected function processTestOverhead(int $actualTestCount, int $expectedTestCo * * If for some reason process return less tests than expected then we threat all remaining * as skipped or incomplete and print them as skipped (S letter) - * - * @param int $actualTestCount - * @param int $expectedTestCount */ - protected function printSkippedAndIncomplete(int $actualTestCount, int $expectedTestCount) + protected function printSkippedAndIncomplete(int $actualTestCount, int $expectedTestCount): void { $overhead = $expectedTestCount - $actualTestCount; - if ($overhead > 0) { - for ($i = 0; $i < $overhead; ++$i) { - $this->printFeedbackItem('S'); - } + if ($overhead <= 0) { + return; + } + + for ($i = 0; $i < $overhead; ++$i) { + $this->printFeedbackItem('S'); } } @@ -370,44 +350,52 @@ protected function printSkippedAndIncomplete(int $actualTestCount, int $expected * Prints a single "quick" feedback item and increments * the total number of processed cases and the column * position. - * - * @param string $item */ - protected function printFeedbackItem(string $item) + protected function printFeedbackItem(string $item): void { $this->printFeedbackItemColor($item); ++$this->column; ++$this->casesProcessed; - if ($this->column === $this->maxColumn) { - echo $this->getProgress(); - $this->println(); + if ($this->column !== $this->maxColumn) { + return; } + + echo $this->getProgress(); + $this->println(); } - protected function printFeedbackItemColor(string $item) + protected function printFeedbackItemColor(string $item): void { if ($this->colors) { switch ($item) { case 'E': // fg-red echo "\x1b[31m" . $item . "\x1b[0m"; + return; + case 'F': // bg-red echo "\x1b[41m" . $item . "\x1b[0m"; + return; + case 'W': case 'I': case 'R': // fg-yellow echo "\x1b[33m" . $item . "\x1b[0m"; + return; + case 'S': // fg-cyan echo "\x1b[36m" . $item . "\x1b[0m"; + return; } } + echo $item; } @@ -416,26 +404,24 @@ protected function printFeedbackItemColor(string $item) * for a collection of errors or failures. * * @param array $defects - * @param string $type - * - * @return string */ protected function getDefects(array $defects, string $type): string { - $count = \count($defects); + $count = count($defects); if ($count === 0) { return ''; } - $output = \sprintf( + + $output = sprintf( "There %s %d %s%s:\n", - ($count === 1) ? 'was' : 'were', + $count === 1 ? 'was' : 'were', $count, $type, - ($count === 1) ? '' : 's' + $count === 1 ? '' : 's' ); - for ($i = 1; $i <= \count($defects); ++$i) { - $output .= \sprintf("\n%d) %s\n", $i, $defects[$i - 1]); + for ($i = 1; $i <= count($defects); ++$i) { + $output .= sprintf("\n%d) %s\n", $i, $defects[$i - 1]); } return $output; @@ -446,26 +432,24 @@ protected function getDefects(array $defects, string $type): string */ protected function getProgress(): string { - return \sprintf( + return sprintf( ' %' . $this->numTestsWidth . 'd / %' . $this->numTestsWidth . 'd (%3s%%)', $this->casesProcessed, $this->totalCases, - \floor(($this->totalCases ? $this->casesProcessed / $this->totalCases : 0) * 100) + floor(($this->totalCases ? $this->casesProcessed / $this->totalCases : 0) * 100) ); } /** * Get the footer for a test collection that had tests with * failures or errors. - * - * @return string */ private function getFailedFooter(): string { $formatString = "FAILURES!\nTests: %d, Assertions: %d, Failures: %d, Errors: %d.\n"; return "\n" . $this->red( - \sprintf( + sprintf( $formatString, $this->results->getTotalTests(), $this->results->getTotalAssertions(), @@ -478,18 +462,16 @@ private function getFailedFooter(): string /** * Get the footer for a test collection containing all successful * tests. - * - * @return string */ private function getSuccessFooter(): string { - $tests = $this->totalCases; + $tests = $this->totalCases; $asserts = $this->results->getTotalAssertions(); if ($this->totalSkippedOrIncomplete > 0) { // phpunit 4.5 produce NOT plural version for test(s) and assertion(s) in that case // also it shows result in standard color scheme - return \sprintf( + return sprintf( "OK, but incomplete, skipped, or risky tests!\n" . "Tests: %d, Assertions: %d, Incomplete: %d.\n", $tests, @@ -500,12 +482,12 @@ private function getSuccessFooter(): string // phpunit 4.5 produce plural version for test(s) and assertion(s) in that case // also it shows result as black text on green background - return $this->green(\sprintf( + return $this->green(sprintf( "OK (%d test%s, %d assertion%s)\n", $tests, - ($tests === 1) ? '' : 's', + $tests === 1 ? '' : 's', $asserts, - ($asserts === 1) ? '' : 's' + $asserts === 1 ? '' : 's' )); } @@ -535,7 +517,7 @@ private function red(string $text): string * Deletes all the temporary log files for ExecutableTest objects * being printed. */ - private function clearLogs() + private function clearLogs(): void { foreach ($this->suites as $suite) { $suite->deleteFile(); diff --git a/src/Runners/PHPUnit/Runner.php b/src/Runners/PHPUnit/Runner.php index f0e4660..17f26e1 100644 --- a/src/Runners/PHPUnit/Runner.php +++ b/src/Runners/PHPUnit/Runner.php @@ -4,7 +4,19 @@ namespace ParaTest\Runners\PHPUnit; +use Exception; use Habitat\Habitat; +use Throwable; + +use function array_filter; +use function array_keys; +use function array_shift; +use function count; +use function sprintf; +use function uniqid; +use function usleep; + +use const PHP_EOL; class Runner extends BaseRunner { @@ -27,30 +39,33 @@ public function __construct(array $opts = []) /** * The money maker. Runs all ExecutableTest objects in separate processes. */ - public function run() + public function run(): void { parent::run(); - while (\count($this->running) || \count($this->pending)) { + while (count($this->running) || count($this->pending)) { foreach ($this->running as $key => $test) { try { - if (!$this->testIsStillRunning($test)) { + if (! $this->testIsStillRunning($test)) { unset($this->running[$key]); $this->releaseToken($key); } - } catch (\Exception $e) { + } catch (Throwable $e) { if ($this->options->verbose) { echo "An error for $key: {$e->getMessage()}" . PHP_EOL; echo "Command: {$test->getLastCommand()}" . PHP_EOL; echo 'StdErr: ' . $test->getStderr() . PHP_EOL; echo 'StdOut: ' . $test->getStdout() . PHP_EOL; } + throw $e; } } + $this->fillRunQueue(); - \usleep(10000); + usleep(10000); } + $this->complete(); } @@ -60,7 +75,7 @@ public function run() * logs any results to JUnit, and cleans up temporary * files. */ - private function complete() + private function complete(): void { $this->printer->printResults(); $this->interpreter->rewind(); @@ -77,24 +92,28 @@ private function complete() * and adds them to the running collection. It is also in charge of recycling and * acquiring available test tokens for use. */ - private function fillRunQueue() + private function fillRunQueue(): void { $opts = $this->options; - while (\count($this->pending) && \count($this->running) < $opts->processes) { + while (count($this->pending) && count($this->running) < $opts->processes) { $tokenData = $this->getNextAvailableToken(); - if ($tokenData !== false) { - $this->acquireToken($tokenData['token']); - $env = [ - 'TEST_TOKEN' => $tokenData['token'], - 'UNIQUE_TEST_TOKEN' => $tokenData['unique'] - ] + Habitat::getAll(); - $this->running[$tokenData['token']] = \array_shift($this->pending) - ->run($opts->phpunit, $opts->filtered, $env, $opts->passthru, $opts->passthruPhp); - if ($opts->verbose) { - $cmd = $this->running[$tokenData['token']]; - echo "\nExecuting test via: {$cmd->getLastCommand()}\n"; - } + if ($tokenData === false) { + continue; } + + $this->acquireToken($tokenData['token']); + $env = [ + 'TEST_TOKEN' => $tokenData['token'], + 'UNIQUE_TEST_TOKEN' => $tokenData['unique'], + ] + Habitat::getAll(); + $this->running[$tokenData['token']] = array_shift($this->pending) + ->run($opts->phpunit, $opts->filtered, $env, $opts->passthru, $opts->passthruPhp); + if (! $opts->verbose) { + continue; + } + + $cmd = $this->running[$tokenData['token']]; + echo "\nExecuting test via: {$cmd->getLastCommand()}\n"; } } @@ -104,29 +123,29 @@ private function fillRunQueue() * throwing an exception if a fatal error has occurred - * prints feedback, and updates the overall exit code. * - * @param ExecutableTest $test - * - * @throws \Exception - * - * @return bool + * @throws Exception */ private function testIsStillRunning(ExecutableTest $test): bool { - if (!$test->isDoneRunning()) { + if (! $test->isDoneRunning()) { return true; } + $this->setExitCode($test); $test->stop(); if ($this->options->stopOnFailure && $test->getExitCode() > 0) { $this->pending = []; } - if (static::PHPUNIT_FATAL_ERROR === $test->getExitCode()) { + + if ($test->getExitCode() === self::PHPUNIT_FATAL_ERROR) { $errorOutput = $test->getStderr(); - if (!$errorOutput) { + if (! $errorOutput) { $errorOutput = $test->getStdout(); } - throw new \Exception(\sprintf("Fatal error in %s:\n%s", $test->getPath(), $errorOutput)); + + throw new Exception(sprintf("Fatal error in %s:\n%s", $test->getPath(), $errorOutput)); } + $this->printer->printFeedback($test); if ($this->hasCoverage()) { $this->addCoverage($test); @@ -139,26 +158,26 @@ private function testIsStillRunning(ExecutableTest $test): bool * If the provided test object has an exit code * higher than the currently set exit code, that exit * code will be set as the overall exit code. - * - * @param ExecutableTest $test */ - private function setExitCode(ExecutableTest $test) + private function setExitCode(ExecutableTest $test): void { $exit = $test->getExitCode(); - if ($exit > $this->exitcode) { - $this->exitcode = $exit; + if ($exit <= $this->exitcode) { + return; } + + $this->exitcode = $exit; } /** * Initialize the available test tokens based * on how many processes ParaTest will be run in. */ - protected function initTokens() + protected function initTokens(): void { $this->tokens = []; for ($i = 1; $i <= $this->options->processes; ++$i) { - $this->tokens[$i] = ['token' => $i, 'unique' => \uniqid(\sprintf('%s_', $i)), 'available' => true]; + $this->tokens[$i] = ['token' => $i, 'unique' => uniqid(sprintf('%s_', $i)), 'available' => true]; } } @@ -181,36 +200,33 @@ protected function getNextAvailableToken() /** * Flag a token as available for use. - * - * @param string $tokenIdentifier */ - protected function releaseToken($tokenIdentifier) + protected function releaseToken(int $tokenIdentifier): void { - $filtered = \array_filter($this->tokens, function ($val) use ($tokenIdentifier) { + $filtered = array_filter($this->tokens, static function ($val) use ($tokenIdentifier) { return $val['token'] === $tokenIdentifier; }); - $keys = \array_keys($filtered); + + $keys = array_keys($filtered); + $this->tokens[$keys[0]]['available'] = true; } /** * Flag a token as acquired and not available for use. - * - * @param string $tokenIdentifier */ - protected function acquireToken($tokenIdentifier) + protected function acquireToken(int $tokenIdentifier): void { - $filtered = \array_filter($this->tokens, function ($val) use ($tokenIdentifier) { + $filtered = array_filter($this->tokens, static function ($val) use ($tokenIdentifier) { return $val['token'] === $tokenIdentifier; }); - $keys = \array_keys($filtered); + + $keys = array_keys($filtered); + $this->tokens[$keys[0]]['available'] = false; } - /** - * @param ExecutableTest $test - */ - private function addCoverage(ExecutableTest $test) + private function addCoverage(ExecutableTest $test): void { $coverageFile = $test->getCoverageFileName(); $this->getCoverage()->addCoverageFromFile($coverageFile); diff --git a/src/Runners/PHPUnit/SqliteRunner.php b/src/Runners/PHPUnit/SqliteRunner.php index a5e6891..5a1ca6b 100644 --- a/src/Runners/PHPUnit/SqliteRunner.php +++ b/src/Runners/PHPUnit/SqliteRunner.php @@ -9,11 +9,23 @@ use PDO; use RuntimeException; +use function count; +use function dirname; +use function implode; +use function realpath; +use function serialize; +use function sys_get_temp_dir; +use function tempnam; +use function uniqid; +use function unlink; +use function usleep; + +use const DIRECTORY_SEPARATOR; +use const PHP_EOL; + class SqliteRunner extends WrapperRunner { - /** - * @var SqliteWorker[] - */ + /** @var SqliteWorker[] */ protected $workers; /** @var PDO */ @@ -26,19 +38,21 @@ public function __construct(array $opts = []) { parent::__construct($opts); - $this->dbFileName = (string) ($opts['database'] ?? \tempnam(\sys_get_temp_dir(), 'paratest_db_')); - $this->db = new PDO('sqlite:' . $this->dbFileName); + $this->dbFileName = (string) ($opts['database'] ?? tempnam(sys_get_temp_dir(), 'paratest_db_')); + $this->db = new PDO('sqlite:' . $this->dbFileName); } public function __destruct() { - if ($this->db !== null) { - unset($this->db); - \unlink($this->dbFileName); + if ($this->db === null) { + return; } + + unset($this->db); + unlink($this->dbFileName); } - public function run() + public function run(): void { $this->initialize(); @@ -55,19 +69,20 @@ public function run() */ protected function startWorkers(): void { - $wrapper = \realpath( + $wrapper = realpath( dirname(__DIR__, 3) . DIRECTORY_SEPARATOR . 'bin' . DIRECTORY_SEPARATOR . 'phpunit-sqlite-wrapper.php' ); for ($i = 1; $i <= $this->options->processes; ++$i) { $worker = new SqliteWorker($this->dbFileName); if ($this->options->noTestTokens) { - $token = null; + $token = null; $uniqueToken = null; } else { - $token = $i; - $uniqueToken = \uniqid(); + $token = $i; + $uniqueToken = uniqid(); } + $worker->start($wrapper, $token, $uniqueToken); $this->workers[] = $worker; } @@ -80,13 +95,16 @@ private function waitForAllToFinish(): void { do { foreach ($this->workers as $key => $worker) { - if (!$worker->isRunning()) { - unset($this->workers[$key]); + if ($worker->isRunning()) { + continue; } + + unset($this->workers[$key]); } - \usleep(10000); + + usleep(10000); $this->printOutput(); - } while (\count($this->workers) > 0); + } while (count($this->workers) > 0); } /** @@ -153,7 +171,7 @@ private function checkIfWorkersCrashed(): void . '----------------------' . PHP_EOL . 'Failed test command(s):' . PHP_EOL . '----------------------' . PHP_EOL - . \implode(PHP_EOL, $this->db->query('SELECT command FROM tests')->fetchAll(PDO::FETCH_COLUMN)) + . implode(PHP_EOL, $this->db->query('SELECT command FROM tests')->fetchAll(PDO::FETCH_COLUMN)) ); } } diff --git a/src/Runners/PHPUnit/Suite.php b/src/Runners/PHPUnit/Suite.php index b2cb22d..1ca04ea 100644 --- a/src/Runners/PHPUnit/Suite.php +++ b/src/Runners/PHPUnit/Suite.php @@ -4,9 +4,9 @@ namespace ParaTest\Runners\PHPUnit; +use function count; + /** - * Class Suite. - * * A suite represents an entire PHPUnit Test Suite * object - this class is essentially used for running * entire test classes in parallel @@ -38,11 +38,9 @@ public function getFunctions(): array /** * Get the expected count of tests to be executed. - * - * @return int */ public function getTestCount(): int { - return \count($this->functions); + return count($this->functions); } } diff --git a/src/Runners/PHPUnit/SuiteLoader.php b/src/Runners/PHPUnit/SuiteLoader.php index af370b3..01d1c8c 100644 --- a/src/Runners/PHPUnit/SuiteLoader.php +++ b/src/Runners/PHPUnit/SuiteLoader.php @@ -7,8 +7,19 @@ use ParaTest\Parser\NoClassInFileException; use ParaTest\Parser\ParsedClass; use ParaTest\Parser\ParsedFunction; -use ParaTest\Parser\ParsedObject; use ParaTest\Parser\Parser; +use RuntimeException; + +use function array_intersect; +use function array_merge; +use function array_unique; +use function count; +use function is_array; +use function is_int; +use function preg_match; +use function preg_match_all; +use function sprintf; +use function substr; class SuiteLoader { @@ -19,9 +30,7 @@ class SuiteLoader */ protected $files = []; - /** - * @var null|array - */ + /** @var array|null */ protected $suitesName = null; /** @@ -38,18 +47,14 @@ class SuiteLoader */ protected $configuration; - /** - * @var null|Options - */ + /** @var Options|null */ public $options; - public function __construct(Options $options = null) + public function __construct(?Options $options = null) { $this->options = $options; - $this->configuration = isset($this->options->filtered['configuration']) - ? $this->options->filtered['configuration'] - : new Configuration(''); + $this->configuration = $this->options->filtered['configuration'] ?? new Configuration(''); } /** @@ -73,7 +78,7 @@ public function getTestMethods(): array { $methods = []; foreach ($this->loadedSuites as $suite) { - $methods = \array_merge($methods, $suite->getFunctions()); + $methods = array_merge($methods, $suite->getFunctions()); } return $methods; @@ -83,15 +88,13 @@ public function getTestMethods(): array * Populates the loaded suite collection. Will load suites * based off a phpunit xml configuration or a specified path. * - * @param string $path - * - * @throws \RuntimeException + * @throws RuntimeException */ public function load(string $path = ''): void { if ($path) { $testFileLoader = new TestFileLoader($this->options); - $this->files = \array_merge( + $this->files = array_merge( $this->files, $testFileLoader->loadPath($path) ); @@ -101,10 +104,10 @@ public function load(string $path = ''): void ) { $this->suitesName = $this->configuration->getSuitesName(); } elseif ($this->configuration->hasSuites()) { - if (!empty($this->options->testsuite)) { + if (! empty($this->options->testsuite)) { $suites = []; foreach ($this->options->testsuite as $testsuite) { - $suites = \array_merge($suites, $this->configuration->getSuiteByName($testsuite)); + $suites = array_merge($suites, $this->configuration->getSuiteByName($testsuite)); } } else { $suites = $this->configuration->getSuites(); @@ -113,7 +116,7 @@ public function load(string $path = ''): void foreach ($suites as $suite) { foreach ($suite as $suitePath) { $testFileLoader = new TestFileLoader($this->options); - $this->files = \array_merge( + $this->files = array_merge( $this->files, $testFileLoader->loadSuitePath($suitePath) ); @@ -121,11 +124,11 @@ public function load(string $path = ''): void } } - if (!$this->files && !\is_array($this->suitesName)) { - throw new \RuntimeException('No path or configuration provided (tests must end with Test.php)'); + if (! $this->files && ! is_array($this->suitesName)) { + throw new RuntimeException('No path or configuration provided (tests must end with Test.php)'); } - $this->files = \array_unique($this->files); // remove duplicates + $this->files = array_unique($this->files); // remove duplicates $this->initSuites(); } @@ -136,7 +139,7 @@ public function load(string $path = ''): void */ protected function initSuites(): void { - if (\is_array($this->suitesName)) { + if (is_array($this->suitesName)) { foreach ($this->suitesName as $suiteName) { $this->loadedSuites[$suiteName] = $this->createFullSuite($suiteName, $this->configuration->getPath()); } @@ -146,7 +149,7 @@ protected function initSuites(): void $parser = new Parser($path); if ($class = $parser->getClass()) { $suite = $this->createSuite($path, $class); - if (\count($suite->getFunctions()) > 0) { + if (count($suite->getFunctions()) > 0) { $this->loadedSuites[$path] = $suite; } } @@ -160,9 +163,9 @@ protected function initSuites(): void protected function executableTests(string $path, ParsedClass $class): array { $executableTests = []; - $methodBatches = $this->getMethodBatches($class); + $methodBatches = $this->getMethodBatches($class); foreach ($methodBatches as $methodBatch) { - $executableTest = new TestMethod($path, $methodBatch); + $executableTest = new TestMethod($path, $methodBatch); $executableTests[] = $executableTest; } @@ -175,19 +178,17 @@ protected function executableTests(string $path, ParsedClass $class): array * Identify method dependencies, and group dependents and dependees on a single methodBatch. * Use max batch size to fill batches. * - * @param ParsedClass $class - * * @return array of MethodBatches. Each MethodBatch has an array of method names */ protected function getMethodBatches(ParsedClass $class): array { $classMethods = $class->getMethods($this->options ? $this->options->annotations : []); $maxBatchSize = $this->options && $this->options->functional ? $this->options->maxBatchSize : 0; - $batches = []; + $batches = []; foreach ($classMethods as $method) { $tests = $this->getMethodTests($class, $method); // if filter passed to paratest then method tests can be blank if not match to filter - if (!$tests) { + if (! $tests) { continue; } @@ -206,7 +207,7 @@ protected function addDependentTestsToBatchSet(array &$batches, string $dependsO foreach ($batches as $key => $batch) { foreach ($batch as $methodName) { if ($dependsOn === $methodName) { - $batches[$key] = \array_merge($batches[$key], $tests); + $batches[$key] = array_merge($batches[$key], $tests); continue; } } @@ -216,10 +217,10 @@ protected function addDependentTestsToBatchSet(array &$batches, string $dependsO protected function addTestsToBatchSet(array &$batches, array $tests, int $maxBatchSize): void { foreach ($tests as $test) { - $lastIndex = \count($batches) - 1; + $lastIndex = count($batches) - 1; if ( $lastIndex !== -1 - && \count($batches[$lastIndex]) < $maxBatchSize + && count($batches[$lastIndex]) < $maxBatchSize ) { $batches[$lastIndex][] = $test; } else { @@ -234,7 +235,7 @@ protected function addTestsToBatchSet(array &$batches, array $tests, int $maxBat * With empty filter this method returns single test if doesn't have data provider or * data provider is not used and return all test if has data provider and data provider is used. * - * @param ParsedClass $class parsed class + * @param ParsedClass $class parsed class * @param ParsedFunction $method parsed method * * @return string[] array of test names @@ -248,17 +249,19 @@ protected function getMethodTests(ParsedClass $class, ParsedFunction $method): a $dataProvider = $this->methodDataProvider($method); if (isset($dataProvider)) { $testFullClassName = '\\' . $class->getName(); - $testClass = new $testFullClassName(); - $result = []; + $testClass = new $testFullClassName(); + $result = []; foreach ($testClass->$dataProvider() as $key => $value) { - $test = \sprintf( + $test = sprintf( '%s with data set %s', $method->getName(), - \is_int($key) ? '#' . $key : '"' . $key . '"' + is_int($key) ? '#' . $key : '"' . $key . '"' ); - if ($this->testMatchOptions($class->getName(), $test, $groups)) { - $result[] = $test; + if (! $this->testMatchOptions($class->getName(), $test, $groups)) { + continue; } + + $result[] = $test; } } elseif ($this->testMatchOptions($class->getName(), $method->getName(), $groups)) { $result = [$method->getName()]; @@ -274,20 +277,14 @@ protected function testMatchGroupOptions(array $groups): bool } if ( - !empty($this->options->groups) - && !\array_intersect($groups, $this->options->groups) + ! empty($this->options->groups) + && ! array_intersect($groups, $this->options->groups) ) { return false; } - if ( - !empty($this->options->excludeGroups) - && \array_intersect($groups, $this->options->excludeGroups) - ) { - return false; - } - - return true; + return empty($this->options->excludeGroups) + || ! array_intersect($groups, $this->options->excludeGroups); } protected function testMatchFilterOptions(string $className, string $name): bool @@ -296,25 +293,23 @@ protected function testMatchFilterOptions(string $className, string $name): bool return true; } - $re = \substr($this->options->filter, 0, 1) === '/' + $re = substr($this->options->filter, 0, 1) === '/' ? $this->options->filter : '/' . $this->options->filter . '/'; $fullName = $className . '::' . $name; - return 1 === \preg_match($re, $fullName); + return preg_match($re, $fullName) === 1; } protected function testMatchOptions(string $className, string $name, array $group): bool { - $result = $this->testMatchGroupOptions($group) + return $this->testMatchGroupOptions($group) && $this->testMatchFilterOptions($className, $name); - - return $result; } protected function testGroups(ParsedClass $class, ParsedFunction $method): array { - return \array_merge( + return array_merge( $this->classGroups($class), $this->methodGroups($method) ); @@ -322,7 +317,7 @@ protected function testGroups(ParsedClass $class, ParsedFunction $method): array protected function methodDataProvider(ParsedFunction $method): ?string { - if (\preg_match("/@\bdataProvider\b \b(.*)\b/", $method->getDocBlock(), $matches)) { + if (preg_match("/@\bdataProvider\b \b(.*)\b/", $method->getDocBlock(), $matches)) { return $matches[1]; } @@ -331,7 +326,7 @@ protected function methodDataProvider(ParsedFunction $method): ?string protected function methodDependency(ParsedFunction $method): ?string { - if (\preg_match("/@\bdepends\b \b(.*)\b/", $method->getDocBlock(), $matches)) { + if (preg_match("/@\bdepends\b \b(.*)\b/", $method->getDocBlock(), $matches)) { return $matches[1]; } @@ -340,7 +335,7 @@ protected function methodDependency(ParsedFunction $method): ?string protected function methodGroups(ParsedFunction $method): array { - if (\preg_match_all("/@\bgroup\b \b(.*)\b/", $method->getDocBlock(), $matches)) { + if (preg_match_all("/@\bgroup\b \b(.*)\b/", $method->getDocBlock(), $matches)) { return $matches[1]; } @@ -349,7 +344,7 @@ protected function methodGroups(ParsedFunction $method): array protected function classGroups(ParsedClass $class): array { - if (\preg_match_all("/@\bgroup\b \b(.*)\b/", $class->getDocBlock(), $matches)) { + if (preg_match_all("/@\bgroup\b \b(.*)\b/", $class->getDocBlock(), $matches)) { return $matches[1]; } diff --git a/src/Runners/PHPUnit/SuitePath.php b/src/Runners/PHPUnit/SuitePath.php index 271fc1d..1a96b05 100644 --- a/src/Runners/PHPUnit/SuitePath.php +++ b/src/Runners/PHPUnit/SuitePath.php @@ -4,6 +4,8 @@ namespace ParaTest\Runners\PHPUnit; +use function preg_quote; + /** * Representation of test suite paths found in phpunit.xml. */ @@ -11,19 +13,13 @@ class SuitePath { private const DEFAULT_SUFFIX = 'Test.php'; - /** - * @var string - */ + /** @var string */ protected $path; - /** - * @var string - */ + /** @var string */ protected $suffix; - /** - * @var string[]s - */ + /** @var string[]s */ protected $excludedPaths; public function __construct(string $path, array $excludedPaths, string $suffix) @@ -31,14 +27,12 @@ public function __construct(string $path, array $excludedPaths, string $suffix) if (empty($suffix)) { $suffix = self::DEFAULT_SUFFIX; } - $this->path = $path; + + $this->path = $path; $this->excludedPaths = $excludedPaths; - $this->suffix = $suffix; + $this->suffix = $suffix; } - /** - * @return string - */ public function getPath(): string { return $this->path; @@ -52,19 +46,13 @@ public function getExcludedPaths(): array return $this->excludedPaths; } - /** - * @return string - */ public function getSuffix(): string { return $this->suffix; } - /** - * @return string - */ public function getPattern(): string { - return '|' . \preg_quote($this->getSuffix()) . '$|'; + return '|' . preg_quote($this->getSuffix()) . '$|'; } } diff --git a/src/Runners/PHPUnit/TestFileLoader.php b/src/Runners/PHPUnit/TestFileLoader.php index f58cf3a..721a34a 100644 --- a/src/Runners/PHPUnit/TestFileLoader.php +++ b/src/Runners/PHPUnit/TestFileLoader.php @@ -4,6 +4,17 @@ namespace ParaTest\Runners\PHPUnit; +use InvalidArgumentException; + +use function array_key_exists; +use function file_exists; +use function is_dir; +use function preg_match; +use function realpath; +use function scandir; + +use const DIRECTORY_SEPARATOR; + class TestFileLoader { /** @@ -45,12 +56,10 @@ class TestFileLoader */ protected $excludingFiles = false; - /** - * @var Options|null - */ + /** @var Options|null */ protected $options; - public function __construct(Options $options = null) + public function __construct(?Options $options = null) { $this->options = $options; } @@ -59,15 +68,13 @@ public function __construct(Options $options = null) * Loads a SuitePath and makes sure to * take into account the excluded directory / files. * - * @param SuitePath $path - * * @return string[] */ public function loadSuitePath(SuitePath $path): array { // First initialize the list of files and excluded files - $this->files = []; - $this->excludedFiles = []; + $this->files = []; + $this->excludedFiles = []; $this->excludingFiles = true; foreach ($path->getExcludedPaths() as $excludedPath) { $this->loadPath($excludedPath, $path->getPattern()); @@ -87,14 +94,11 @@ public function loadSuitePath(SuitePath $path): array * Loads suites based on a specific path. * A valid path can be a directory or file. * - * @param string $path - * @param string|null $pattern - * - * @throws \InvalidArgumentException - * * @return string[] + * + * @throws InvalidArgumentException */ - public function loadPath(string $path, string $pattern = null): array + public function loadPath(string $path, ?string $pattern = null): array { $this->files = []; @@ -102,12 +106,13 @@ public function loadPath(string $path, string $pattern = null): array $path = $path ?: $this->options->path; - if (!\file_exists($path)) { - throw new \InvalidArgumentException("$path is not a valid directory or file"); + if (! file_exists($path)) { + throw new InvalidArgumentException("$path is not a valid directory or file"); } - if (\is_dir($path)) { + + if (is_dir($path)) { $this->loadDir($path, $pattern); - } elseif (\file_exists($path)) { + } elseif (file_exists($path)) { $this->loadFile($path); } @@ -116,25 +121,20 @@ public function loadPath(string $path, string $pattern = null): array /** * Loads suites from a directory. - * - * @param string $path - * @param string $pattern */ - private function loadDir(string $path, string $pattern = self::TEST_PATTERN) + private function loadDir(string $path, string $pattern = self::TEST_PATTERN): void { - $path = realpath($path); - $files = \scandir($path); + $path = realpath($path); + $files = scandir($path); foreach ($files as $file) { - $this->tryLoadTests($path . \DIRECTORY_SEPARATOR . $file, $pattern); + $this->tryLoadTests($path . DIRECTORY_SEPARATOR . $file, $pattern); } } /** * Load a single suite file. - * - * @param string $path */ - private function loadFile(string $path) + private function loadFile(string $path): void { $this->tryLoadTests($path, self::FILE_PATTERN); } @@ -142,21 +142,22 @@ private function loadFile(string $path) /** * Attempts to load suites from a path. * - * @param string $path * @param string $pattern regular expression for matching file names */ - private function tryLoadTests(string $path, string $pattern = self::TEST_PATTERN) + private function tryLoadTests(string $path, string $pattern = self::TEST_PATTERN): void { - if (\preg_match($pattern, $path)) { + if (preg_match($pattern, $path)) { if ($this->excludingFiles) { $this->excludedFiles[$path] = $path; - } elseif (!\array_key_exists($path, $this->excludedFiles)) { + } elseif (! array_key_exists($path, $this->excludedFiles)) { $this->files[] = $path; } } - if (!\preg_match(self::$dotPattern, $path) && \is_dir($path)) { - $this->loadDir($path, $pattern); + if (preg_match(self::$dotPattern, $path) || ! is_dir($path)) { + return; } + + $this->loadDir($path, $pattern); } } diff --git a/src/Runners/PHPUnit/TestMethod.php b/src/Runners/PHPUnit/TestMethod.php index 3a998b5..71948ee 100644 --- a/src/Runners/PHPUnit/TestMethod.php +++ b/src/Runners/PHPUnit/TestMethod.php @@ -4,9 +4,13 @@ namespace ParaTest\Runners\PHPUnit; +use function array_reduce; +use function count; +use function implode; +use function preg_quote; +use function strpos; + /** - * Class TestMethod. - * * Represents a set of tests grouped in batch which can be passed to a single phpunit process. * Batch limited to run tests only from one php test case file. * Used for running ParaTest in functional mode. @@ -30,8 +34,6 @@ class TestMethod extends ExecutableTest protected $filters; /** - * Constructor. - * * Passed filters must be unescaped and must represent test name, optionally including * dataset name (numeric or named). * @@ -60,12 +62,10 @@ public function getFilters(): array * Returns the test method's name. * * This method will join all filters via pipe character and return as string. - * - * @return string */ public function getName(): string { - return \implode('|', $this->filters); + return implode('|', $this->filters); } /** @@ -80,10 +80,10 @@ public function getName(): string */ protected function prepareOptions(array $options): array { - $re = \array_reduce($this->filters, function ($r, $v) { - $isDataSet = \strpos($v, ' with data set ') !== false; + $re = array_reduce($this->filters, static function ($r, $v) { + $isDataSet = strpos($v, ' with data set ') !== false; - return ($r ? $r . '|' : '') . \preg_quote($v, '/') . ($isDataSet ? '$' : "(?:\s|\$)"); + return ($r ? $r . '|' : '') . preg_quote($v, '/') . ($isDataSet ? '$' : '(?:\s|$)'); }); $options['filter'] = '/' . $re . '/'; @@ -92,11 +92,9 @@ protected function prepareOptions(array $options): array /** * Get the expected count of tests to be executed. - * - * @return int */ public function getTestCount(): int { - return \count($this->filters); + return count($this->filters); } } diff --git a/src/Runners/PHPUnit/Worker/BaseWorker.php b/src/Runners/PHPUnit/Worker/BaseWorker.php index c9bb45d..7d993a9 100644 --- a/src/Runners/PHPUnit/Worker/BaseWorker.php +++ b/src/Runners/PHPUnit/Worker/BaseWorker.php @@ -5,58 +5,84 @@ namespace ParaTest\Runners\PHPUnit\Worker; use ParaTest\Runners\PHPUnit\Options; +use RuntimeException; use Symfony\Component\Process\PhpExecutableFinder; +use function array_map; +use function count; +use function end; +use function explode; +use function fclose; +use function fread; +use function getenv; +use function implode; +use function is_numeric; +use function is_resource; +use function proc_get_status; +use function proc_open; +use function stream_get_contents; +use function stream_set_blocking; +use function strstr; + +use const PHP_EOL; + abstract class BaseWorker { + /** @var string[][] */ protected static $descriptorspec = [ 0 => ['pipe', 'r'], 1 => ['pipe', 'w'], 2 => ['pipe', 'w'], ]; + /** @var resource|null */ protected $proc; protected $pipes; + /** @var int */ protected $inExecution = 0; + /** @var int|null */ private $exitCode = null; + /** @var string */ private $chunks = ''; + /** @var string */ private $alreadyReadOutput = ''; - /** - * @param int|null $token - * @param null|string $uniqueToken - */ public function start( string $wrapperBinary, ?int $token = 1, ?string $uniqueToken = null, array $parameters = [], ?Options $options = null - ) { - $env = getenv(); + ): void { + $env = getenv(); $env['PARATEST'] = 1; - if (\is_numeric($token)) { + if (is_numeric($token)) { $env['XDEBUG_CONFIG'] = 'true'; - $env['TEST_TOKEN'] = $token; + $env['TEST_TOKEN'] = $token; } + if ($uniqueToken) { $env['UNIQUE_TEST_TOKEN'] = $uniqueToken; } - $finder = new PhpExecutableFinder(); + + $finder = new PhpExecutableFinder(); $phpExecutable = $finder->find(); - $bin = "$phpExecutable "; + $bin = "$phpExecutable "; if ($options && $options->passthruPhp) { $bin .= implode(' ', $options->passthruPhp) . ' '; } + $bin .= " \"$wrapperBinary\""; if ($parameters) { - $bin .= ' ' . \implode(' ', \array_map('escapeshellarg', $parameters)); + $bin .= ' ' . implode(' ', array_map('escapeshellarg', $parameters)); } + $pipes = []; if ($options && $options->verbose) { echo "Starting WrapperWorker via: $bin\n"; } - $process = \proc_open($bin, self::$descriptorspec, $pipes, null, $env); - $this->proc = \is_resource($process) ? $process : null; + + $process = proc_open($bin, self::$descriptorspec, $pipes, null, $env); + $this->proc = is_resource($process) ? $process : null; $this->pipes = $pipes; } @@ -74,7 +100,7 @@ public function isRunning(): bool return false; } - $status = \proc_get_status($this->proc); + $status = proc_get_status($this->proc); return $status ? $status['running'] : false; } @@ -86,10 +112,11 @@ public function isStarted(): bool public function isCrashed(): bool { - if (!$this->isStarted()) { + if (! $this->isStarted()) { return false; } - $status = \proc_get_status($this->proc); + + $status = proc_get_status($this->proc); $this->updateStateFromAvailableOutput(); @@ -101,16 +128,16 @@ public function isCrashed(): bool return $this->exitCode !== 0; } - public function checkNotCrashed() + public function checkNotCrashed(): void { if ($this->isCrashed()) { - throw new \RuntimeException($this->getCrashReport()); + throw new RuntimeException($this->getCrashReport()); } } public function getCrashReport() { - $lastCommand = isset($this->commands) ? ' Last executed command: ' . \end($this->commands) : ''; + $lastCommand = isset($this->commands) ? ' Last executed command: ' . end($this->commands) : ''; return 'This worker has crashed.' . $lastCommand . PHP_EOL . 'Output:' . PHP_EOL @@ -120,23 +147,27 @@ public function getCrashReport() . $this->readAllStderr(); } - public function stop() + public function stop(): void { - \fclose($this->pipes[0]); + fclose($this->pipes[0]); } - protected function setExitCode(array $status) + protected function setExitCode(array $status): void { - if (!$status['running']) { - if ($this->exitCode === null) { - $this->exitCode = $status['exitcode']; - } + if ($status['running']) { + return; } + + if ($this->exitCode !== null) { + return; + } + + $this->exitCode = $status['exitcode']; } private function readAllStderr() { - return \stream_get_contents($this->pipes[2]); + return stream_get_contents($this->pipes[2]); } /** @@ -144,27 +175,33 @@ private function readAllStderr() * Otherwise it would continue to non-block because there are bytes to be read, * but fgets() won't pick them up. */ - private function updateStateFromAvailableOutput() + private function updateStateFromAvailableOutput(): void { - if (isset($this->pipes[1])) { - \stream_set_blocking($this->pipes[1], false); - while ($chunk = \fread($this->pipes[1], 4096)) { - $this->chunks .= $chunk; - $this->alreadyReadOutput .= $chunk; - } - $lines = \explode("\n", $this->chunks); - // last element is not a complete line, - // becomes part of a line completed later - $this->chunks = $lines[\count($lines) - 1]; - unset($lines[\count($lines) - 1]); - // delivering complete lines to this Worker - foreach ($lines as $line) { - $line .= "\n"; - if (\strstr($line, "FINISHED\n")) { - --$this->inExecution; - } + if (! isset($this->pipes[1])) { + return; + } + + stream_set_blocking($this->pipes[1], false); + while ($chunk = fread($this->pipes[1], 4096)) { + $this->chunks .= $chunk; + $this->alreadyReadOutput .= $chunk; + } + + $lines = explode("\n", $this->chunks); + // last element is not a complete line, + // becomes part of a line completed later + $this->chunks = $lines[count($lines) - 1]; + unset($lines[count($lines) - 1]); + // delivering complete lines to this Worker + foreach ($lines as $line) { + $line .= "\n"; + if (! strstr($line, "FINISHED\n")) { + continue; } - \stream_set_blocking($this->pipes[1], true); + + --$this->inExecution; } + + stream_set_blocking($this->pipes[1], true); } } diff --git a/src/Runners/PHPUnit/Worker/SqliteWorker.php b/src/Runners/PHPUnit/Worker/SqliteWorker.php index 68fdc5e..717987b 100644 --- a/src/Runners/PHPUnit/Worker/SqliteWorker.php +++ b/src/Runners/PHPUnit/Worker/SqliteWorker.php @@ -16,17 +16,13 @@ public function __construct(string $dbFileName) $this->dbFileName = $dbFileName; } - /** - * @param int|null $token - * @param null|string $uniqueToken - */ public function start( string $wrapperBinary, ?int $token = 1, ?string $uniqueToken = null, array $parameters = [], ?Options $options = null - ) { + ): void { $parameters[] = $this->dbFileName; parent::start($wrapperBinary, $token, $uniqueToken, $parameters, $options); diff --git a/src/Runners/PHPUnit/Worker/WrapperWorker.php b/src/Runners/PHPUnit/Worker/WrapperWorker.php index 300c0bc..6546060 100644 --- a/src/Runners/PHPUnit/Worker/WrapperWorker.php +++ b/src/Runners/PHPUnit/Worker/WrapperWorker.php @@ -8,17 +8,22 @@ use ParaTest\Runners\PHPUnit\ExecutableTest; use ParaTest\Runners\PHPUnit\Options; use ParaTest\Runners\PHPUnit\ResultPrinter; +use RuntimeException; + +use function fgets; +use function fwrite; +use function implode; +use function proc_get_status; +use function serialize; +use function stream_set_blocking; +use function strstr; class WrapperWorker extends BaseWorker { - /** - * @var string[] - */ + /** @var string[] */ private $commands = []; - /** - * @var null|ExecutableTest - */ + /** @var ExecutableTest|null */ private $currentlyExecuting; public function stdout() @@ -29,51 +34,55 @@ public function stdout() /** * @param string[] $testCmdArguments */ - public function execute(array $testCmdArguments) + public function execute(array $testCmdArguments): void { $this->checkStarted(); $this->commands[] = implode(' ', $testCmdArguments); - \fwrite($this->pipes[0], serialize($testCmdArguments) . "\n"); + fwrite($this->pipes[0], serialize($testCmdArguments) . "\n"); ++$this->inExecution; } - public function assign(ExecutableTest $test, string $phpunit, array $phpunitOptions, Options $options) + public function assign(ExecutableTest $test, string $phpunit, array $phpunitOptions, Options $options): void { if ($this->currentlyExecuting !== null) { throw new Exception('Worker already has a test assigned - did you forget to call reset()?'); } + $this->currentlyExecuting = $test; - $commandArguments = $test->commandArguments($phpunit, $phpunitOptions, $options->passthru); - $command = implode(' ', $commandArguments); + $commandArguments = $test->commandArguments($phpunit, $phpunitOptions, $options->passthru); + $command = implode(' ', $commandArguments); if ($options->verbose) { echo "\nExecuting test via: $command\n"; } + $test->setLastCommand($command); $this->execute($commandArguments); } - public function printFeedback(ResultPrinter $printer) + public function printFeedback(ResultPrinter $printer): void { - if ($this->currentlyExecuting !== null) { - $printer->printFeedback($this->currentlyExecuting); + if ($this->currentlyExecuting === null) { + return; } + + $printer->printFeedback($this->currentlyExecuting); } - public function reset() + public function reset(): void { $this->currentlyExecuting = null; } - protected function checkStarted() + protected function checkStarted(): void { - if (!$this->isStarted()) { - throw new \RuntimeException('You have to start the Worker first!'); + if (! $this->isStarted()) { + throw new RuntimeException('You have to start the Worker first!'); } } - public function stop() + public function stop(): void { - \fwrite($this->pipes[0], "EXIT\n"); + fwrite($this->pipes[0], "EXIT\n"); parent::stop(); } @@ -81,22 +90,24 @@ public function stop() * This is an utility function for tests. * Refactor or write it only in the test case. */ - public function waitForFinishedJob() + public function waitForFinishedJob(): void { if ($this->inExecution === 0) { return; } + $tellsUsItHasFinished = false; - \stream_set_blocking($this->pipes[1], true); - while ($line = \fgets($this->pipes[1])) { - if (\strstr($line, "FINISHED\n")) { + stream_set_blocking($this->pipes[1], true); + while ($line = fgets($this->pipes[1])) { + if (strstr($line, "FINISHED\n")) { $tellsUsItHasFinished = true; --$this->inExecution; break; } } - if (!$tellsUsItHasFinished) { - throw new \RuntimeException('The Worker terminated without finishing the job.'); + + if (! $tellsUsItHasFinished) { + throw new RuntimeException('The Worker terminated without finishing the job.'); } } @@ -106,11 +117,11 @@ public function waitForFinishedJob() * the worker to finish. Use it only in testing paratest * itself. */ - public function waitForStop() + public function waitForStop(): void { - $status = \proc_get_status($this->proc); + $status = proc_get_status($this->proc); while ($status['running']) { - $status = \proc_get_status($this->proc); + $status = proc_get_status($this->proc); $this->setExitCode($status); } } diff --git a/src/Runners/PHPUnit/WrapperRunner.php b/src/Runners/PHPUnit/WrapperRunner.php index 5a7c850..51baa69 100644 --- a/src/Runners/PHPUnit/WrapperRunner.php +++ b/src/Runners/PHPUnit/WrapperRunner.php @@ -5,6 +5,20 @@ namespace ParaTest\Runners\PHPUnit; use ParaTest\Runners\PHPUnit\Worker\WrapperWorker; +use RuntimeException; +use Throwable; + +use function array_keys; +use function array_shift; +use function count; +use function defined; +use function dirname; +use function realpath; +use function stream_select; +use function uniqid; + +use const DIRECTORY_SEPARATOR; +use const PHP_EOL; class WrapperRunner extends BaseRunner { @@ -12,31 +26,25 @@ class WrapperRunner extends BaseRunner private const PHPUNIT_ERRORS = 2; - /** - * @var array - */ + /** @var array */ protected $streams; - /** - * @var WrapperWorker[] - */ + /** @var WrapperWorker[] */ protected $workers; - /** - * @var array - */ + /** @var array */ protected $modified; public function __construct(array $opts = []) { - if (static::class === __CLASS__ && defined('PHP_WINDOWS_VERSION_BUILD')) { - throw new \RuntimeException('WrapperRunner is not supported on Windows'); + if (static::class === self::class && defined('PHP_WINDOWS_VERSION_BUILD')) { + throw new RuntimeException('WrapperRunner is not supported on Windows'); } parent::__construct($opts); } - public function run() + public function run(): void { parent::run(); @@ -47,106 +55,117 @@ public function run() $this->complete(); } - protected function load(SuiteLoader $loader) + protected function load(SuiteLoader $loader): void { if ($this->options->functional) { - throw new \RuntimeException( + throw new RuntimeException( 'The `functional` option is not supported yet in the WrapperRunner. Only full classes can be run due ' . 'to the current PHPUnit commands causing classloading issues.' ); } + parent::load($loader); } - protected function startWorkers() + protected function startWorkers(): void { - $wrapper = \realpath( + $wrapper = realpath( dirname(__DIR__, 3) . DIRECTORY_SEPARATOR . 'bin' . DIRECTORY_SEPARATOR . 'phpunit-wrapper.php' ); for ($i = 1; $i <= $this->options->processes; ++$i) { $worker = new WrapperWorker(); if ($this->options->noTestTokens) { - $token = null; + $token = null; $uniqueToken = null; } else { - $token = $i; - $uniqueToken = \uniqid(); + $token = $i; + $uniqueToken = uniqid(); } + $worker->start($wrapper, $token, $uniqueToken, [], $this->options); $this->streams[] = $worker->stdout(); $this->workers[] = $worker; } } - private function assignAllPendingTests() + private function assignAllPendingTests(): void { - $phpunit = $this->options->phpunit; + $phpunit = $this->options->phpunit; $phpunitOptions = $this->options->filtered; // $phpunitOptions['no-globals-backup'] = null; // removed in phpunit 6.0 - while (\count($this->pending)) { + while (count($this->pending)) { $this->waitForStreamsToChange($this->streams); foreach ($this->progressedWorkers() as $key => $worker) { - if ($worker->isFree()) { - try { - $this->flushWorker($worker); - $pending = \array_shift($this->pending); - if ($pending) { - $worker->assign($pending, $phpunit, $phpunitOptions, $this->options); - } - } catch (\Exception $e) { - if ($this->options->verbose) { - $worker->stop(); - echo "Error while assigning pending tests for worker $key: {$e->getMessage()}" . PHP_EOL; - echo $worker->getCrashReport(); - } - throw $e; + if (! $worker->isFree()) { + continue; + } + + try { + $this->flushWorker($worker); + $pending = array_shift($this->pending); + if ($pending) { + $worker->assign($pending, $phpunit, $phpunitOptions, $this->options); } + } catch (Throwable $e) { + if ($this->options->verbose) { + $worker->stop(); + echo "Error while assigning pending tests for worker $key: {$e->getMessage()}" . PHP_EOL; + echo $worker->getCrashReport(); + } + + throw $e; } } } } - private function sendStopMessages() + private function sendStopMessages(): void { foreach ($this->workers as $worker) { $worker->stop(); } } - private function waitForAllToFinish() + private function waitForAllToFinish(): void { $toStop = $this->workers; - while (\count($toStop) > 0) { + while (count($toStop) > 0) { $toCheck = $this->streamsOf($toStop); - $new = $this->waitForStreamsToChange($toCheck); + $new = $this->waitForStreamsToChange($toCheck); foreach ($this->progressedWorkers() as $index => $worker) { try { - if (!$worker->isRunning()) { + if (! $worker->isRunning()) { $this->flushWorker($worker); unset($toStop[$index]); } - } catch (\Exception $e) { + } catch (Throwable $e) { if ($this->options->verbose) { $worker->stop(); unset($toStop[$index]); echo "Error while waiting to finish for worker $index: {$e->getMessage()}" . PHP_EOL; echo $worker->getCrashReport(); } + throw $e; } } } } - // put on WorkersPool - private function waitForStreamsToChange(array $modified) + /** + * put on WorkersPool + * + * @param array $modified + */ + private function waitForStreamsToChange(array $modified): int { - $write = []; + $write = []; $except = []; - $result = \stream_select($modified, $write, $except, 1); + $result = stream_select($modified, $write, $except, 1); if ($result === false) { - throw new \RuntimeException('stream_select() returned an error while waiting for all workers to finish.'); + throw new RuntimeException('stream_select() returned an error while waiting for all workers to finish.'); } + $this->modified = $modified; return $result; @@ -168,8 +187,10 @@ private function progressedWorkers(): array break; } } + $result[$found] = $this->workers[$found]; } + $this->modified = []; return $result; @@ -178,21 +199,21 @@ private function progressedWorkers(): array /** * Returns the output streams of a subset of workers. * - * @param array $workers keys are positions in $this->workers + * @param array $workers keys are positions in $this->workers * * @return array */ private function streamsOf(array $workers): array { $streams = []; - foreach (\array_keys($workers) as $index) { + foreach (array_keys($workers) as $index) { $streams[$index] = $this->streams[$index]; } return $streams; } - protected function complete() + protected function complete(): void { $this->setExitCode(); $this->printer->printResults(); @@ -205,7 +226,7 @@ protected function complete() } } - private function setExitCode() + private function setExitCode(): void { if ($this->interpreter->getTotalErrors()) { $this->exitcode = self::PHPUNIT_ERRORS; @@ -216,11 +237,12 @@ private function setExitCode() } } - private function flushWorker(WrapperWorker $worker) + private function flushWorker(WrapperWorker $worker): void { if ($this->hasCoverage()) { $this->getCoverage()->addCoverageFromFile($worker->getCoverageFileName()); } + $worker->printFeedback($this->printer); $worker->reset(); } diff --git a/src/Util/Str.php b/src/Util/Str.php index 6e8123a..1f55202 100644 --- a/src/Util/Str.php +++ b/src/Util/Str.php @@ -4,25 +4,26 @@ namespace ParaTest\Util; +use function explode; +use function trim; + class Str { /** * Split $string on $delimiter and trim the individual parts. * - * @param string $delimiter - * @param string $string - * * @return string[] */ public static function explodeWithCleanup(string $delimiter, string $string): array { - $stringValues = \explode($delimiter, $string); + $stringValues = explode($delimiter, $string); $parsedValues = []; foreach ($stringValues as $k => $v) { - $v = \trim($v); + $v = trim($v); if (empty($v)) { continue; } + $parsedValues[] = $v; } diff --git a/test/Functional/Coverage/CoverageMergerTest.php b/test/Functional/Coverage/CoverageMergerTest.php index 07f08cb..6bf53c5 100644 --- a/test/Functional/Coverage/CoverageMergerTest.php +++ b/test/Functional/Coverage/CoverageMergerTest.php @@ -6,8 +6,14 @@ use ParaTest\Coverage\CoverageMerger; use ParaTest\Tests\TestBase; +use RuntimeException; use SebastianBergmann\CodeCoverage\CodeCoverage; +use function mkdir; +use function str_replace; +use function sys_get_temp_dir; +use function uniqid; + class CoverageMergerTest extends TestBase { /** @@ -17,9 +23,6 @@ class CoverageMergerTest extends TestBase */ private $targetDir; - /** - * {@inheritdoc} - */ protected function setUp(): void { parent::setUp(); @@ -31,9 +34,6 @@ protected function setUp(): void mkdir($this->targetDir); } - /** - * {@inheritdoc} - */ protected function tearDown(): void { $this->removeDirectory($this->targetDir); @@ -42,11 +42,11 @@ protected function tearDown(): void } /** - * @dataProvider getCoverageFileProvider - * * @param string[] $coverageFiles + * + * @dataProvider getCoverageFileProvider */ - public function testCoverageFromFileIsDeletedAfterAdd(array $coverageFiles) + public function testCoverageFromFileIsDeletedAfterAdd(array $coverageFiles): void { $filename = $this->copyCoverageFile($coverageFiles[0], $this->targetDir); @@ -57,12 +57,11 @@ public function testCoverageFromFileIsDeletedAfterAdd(array $coverageFiles) } /** - * @dataProvider getCoverageFileProvider - * * @param string[] $coverageFiles - * @param string $expectedClass + * + * @dataProvider getCoverageFileProvider */ - public function testCodeCoverageObjectIsCreatedFromCoverageFile(array $coverageFiles, $expectedClass) + public function testCodeCoverageObjectIsCreatedFromCoverageFile(array $coverageFiles, string $expectedClass): void { $filename = $this->copyCoverageFile($coverageFiles[0], $this->targetDir); @@ -80,11 +79,11 @@ public function testCodeCoverageObjectIsCreatedFromCoverageFile(array $coverageF } /** - * @dataProvider getCoverageFileProvider - * * @param string[] $coverageFiles + * + * @dataProvider getCoverageFileProvider */ - public function testCoverageIsMergedOnSecondAddCoverageFromFile(array $coverageFiles) + public function testCoverageIsMergedOnSecondAddCoverageFromFile(array $coverageFiles): void { $filename1 = $this->copyCoverageFile($coverageFiles[0], $this->targetDir); $filename2 = $this->copyCoverageFile($coverageFiles[1], $this->targetDir); @@ -118,9 +117,9 @@ public function testCoverageIsMergedOnSecondAddCoverageFromFile(array $coverageF ); } - public function testCoverageFileIsEmpty() + public function testCoverageFileIsEmpty(): void { - $this->expectException(\RuntimeException::class); + $this->expectException(RuntimeException::class); $regex = '/Coverage file .*? is empty. This means a PHPUnit process has crashed./'; $this->expectExceptionMessageMatches($regex); $filename = $this->copyCoverageFile('coverage-tests' . DS . 'empty_test.cov', $this->targetDir); @@ -129,7 +128,7 @@ public function testCoverageFileIsEmpty() $coverageMerger->addCoverageFromFile($filename); } - public function testCoverageFileIsNull() + public function testCoverageFileIsNull(): void { $coverageMerger = new CoverageMerger(); $coverageMerger->addCoverageFromFile(null); @@ -137,7 +136,7 @@ public function testCoverageFileIsNull() $this->assertNull($coverageMerger->getCodeCoverageObject()); } - public function testCoverageFileDoesNotExist() + public function testCoverageFileDoesNotExist(): void { $coverageMerger = new CoverageMerger(); $coverageMerger->addCoverageFromFile('no-such-file.cov'); @@ -148,10 +147,10 @@ public function testCoverageFileDoesNotExist() /** * @return array */ - public static function getCoverageFileProvider() + public static function getCoverageFileProvider(): array { - $version = 'CodeCoverage >4.0'; - $filenames = [ + $version = 'CodeCoverage >4.0'; + $filenames = [ 'coverage-tests/runner_test.cov', 'coverage-tests/result_printer_test.cov', ]; @@ -165,12 +164,7 @@ public static function getCoverageFileProvider() ]; } - /** - * @param CoverageMerger $coverageMerger - * - * @return CodeCoverage - */ - private function getCoverage(CoverageMerger $coverageMerger) + private function getCoverage(CoverageMerger $coverageMerger): CodeCoverage { return $this->getObjectValue($coverageMerger, 'coverage'); } diff --git a/test/Functional/Coverage/CoverageReporterTest.php b/test/Functional/Coverage/CoverageReporterTest.php index e3471dc..f28f2e8 100644 --- a/test/Functional/Coverage/CoverageReporterTest.php +++ b/test/Functional/Coverage/CoverageReporterTest.php @@ -7,6 +7,13 @@ use ParaTest\Coverage\CoverageMerger; use ParaTest\Coverage\CoverageReporter; use ParaTest\Tests\TestBase; +use PHPUnit\Util\Xml; + +use function defined; +use function mkdir; +use function str_replace; +use function sys_get_temp_dir; +use function uniqid; class CoverageReporterTest extends TestBase { @@ -17,9 +24,6 @@ class CoverageReporterTest extends TestBase */ private $targetDir; - /** - * {@inheritdoc} - */ protected function setUp(): void { parent::setUp(); @@ -31,9 +35,6 @@ protected function setUp(): void mkdir($this->targetDir); } - /** - * {@inheritdoc} - */ protected function tearDown(): void { $this->removeDirectory($this->targetDir); @@ -42,12 +43,11 @@ protected function tearDown(): void } /** - * @dataProvider getReporterProvider - * * @param string[] $coverageFiles - * @param string $expectedReportClass + * + * @dataProvider getReporterProvider */ - public function testGetReporter(array $coverageFiles, $expectedReportClass) + public function testGetReporter(array $coverageFiles, string $expectedReportClass): void { $filename1 = $this->copyCoverageFile($coverageFiles[0], $this->targetDir); $filename2 = $this->copyCoverageFile($coverageFiles[1], $this->targetDir); @@ -62,11 +62,11 @@ public function testGetReporter(array $coverageFiles, $expectedReportClass) } /** - * @dataProvider getReporterProvider - * * @param string[] $coverageFiles + * + * @dataProvider getReporterProvider */ - public function testGeneratePhp(array $coverageFiles) + public function testGeneratePhp(array $coverageFiles): void { $filename1 = $this->copyCoverageFile($coverageFiles[0], $this->targetDir); $filename2 = $this->copyCoverageFile($coverageFiles[1], $this->targetDir); @@ -85,11 +85,11 @@ public function testGeneratePhp(array $coverageFiles) } /** - * @dataProvider getReporterProvider - * * @param string[] $coverageFiles + * + * @dataProvider getReporterProvider */ - public function testGenerateClover(array $coverageFiles) + public function testGenerateClover(array $coverageFiles): void { $filename1 = $this->copyCoverageFile($coverageFiles[0], $this->targetDir); $filename2 = $this->copyCoverageFile($coverageFiles[1], $this->targetDir); @@ -106,16 +106,16 @@ public function testGenerateClover(array $coverageFiles) static::assertFileExists($target); - $reportXml = \PHPUnit\Util\Xml::loadFile($target); + $reportXml = Xml::loadFile($target); static::assertInstanceOf('DomDocument', $reportXml, 'Incorrect clover report xml was generated'); } /** - * @dataProvider getReporterProvider - * * @param string[] $coverageFiles + * + * @dataProvider getReporterProvider */ - public function testGenerateCrap4J(array $coverageFiles) + public function testGenerateCrap4J(array $coverageFiles): void { $filename1 = $this->copyCoverageFile($coverageFiles[0], $this->targetDir); $filename2 = $this->copyCoverageFile($coverageFiles[1], $this->targetDir); @@ -132,17 +132,17 @@ public function testGenerateCrap4J(array $coverageFiles) static::assertFileExists($target); - $reportXml = \PHPUnit\Util\Xml::loadFile($target); + $reportXml = Xml::loadFile($target); static::assertInstanceOf('DomDocument', $reportXml, 'Incorrect crap4j report xml was generated'); static::assertEquals('crap_result', $reportXml->documentElement->tagName); } /** - * @dataProvider getReporterProvider - * * @param string[] $coverageFiles + * + * @dataProvider getReporterProvider */ - public function testGenerateHtml(array $coverageFiles) + public function testGenerateHtml(array $coverageFiles): void { $filename1 = $this->copyCoverageFile($coverageFiles[0], $this->targetDir); $filename2 = $this->copyCoverageFile($coverageFiles[1], $this->targetDir); @@ -164,11 +164,11 @@ public function testGenerateHtml(array $coverageFiles) /** * @return array */ - public static function getReporterProvider() + public static function getReporterProvider(): array { - $version = 'CodeCoverage >4.0'; - $windowsExt = defined('PHP_WINDOWS_VERSION_BUILD') ? '-windows' : ''; - $filenames = [ + $version = 'CodeCoverage >4.0'; + $windowsExt = defined('PHP_WINDOWS_VERSION_BUILD') ? '-windows' : ''; + $filenames = [ 'coverage-tests' . DS . 'runner_test' . $windowsExt . '.cov', 'coverage-tests' . DS . 'result_printer_test' . $windowsExt . '.cov', ]; diff --git a/test/Functional/DataProviderTest.php b/test/Functional/DataProviderTest.php index e1dc8f3..243b622 100644 --- a/test/Functional/DataProviderTest.php +++ b/test/Functional/DataProviderTest.php @@ -18,7 +18,7 @@ public function setUp(): void ); } - public function testFunctionalMode() + public function testFunctionalMode(): void { $proc = $this->invoker->execute([ 'functional' => null, @@ -27,7 +27,7 @@ public function testFunctionalMode() $this->assertMatchesRegularExpression('/OK \(1150 tests, 1150 assertions\)/', $proc->getOutput()); } - public function testNumericDataSetInFunctionalModeWithMethodFilter() + public function testNumericDataSetInFunctionalModeWithMethodFilter(): void { $proc = $this->invoker->execute([ 'functional' => null, @@ -37,7 +37,7 @@ public function testNumericDataSetInFunctionalModeWithMethodFilter() $this->assertMatchesRegularExpression('/OK \(50 tests, 50 assertions\)/', $proc->getOutput()); } - public function testNumericDataSetInFunctionalModeWithCustomFilter() + public function testNumericDataSetInFunctionalModeWithCustomFilter(): void { $proc = $this->invoker->execute([ 'functional' => null, @@ -47,7 +47,7 @@ public function testNumericDataSetInFunctionalModeWithCustomFilter() $this->assertMatchesRegularExpression('/OK \(14 tests, 14 assertions\)/', $proc->getOutput()); } - public function testNamedDataSetInFunctionalModeWithMethodFilter() + public function testNamedDataSetInFunctionalModeWithMethodFilter(): void { $proc = $this->invoker->execute([ 'functional' => null, @@ -57,7 +57,7 @@ public function testNamedDataSetInFunctionalModeWithMethodFilter() $this->assertMatchesRegularExpression('/OK \(50 tests, 50 assertions\)/', $proc->getOutput()); } - public function testNamedDataSetInFunctionalModeWithCustomFilter() + public function testNamedDataSetInFunctionalModeWithCustomFilter(): void { $proc = $this->invoker->execute([ 'functional' => null, @@ -67,7 +67,7 @@ public function testNamedDataSetInFunctionalModeWithCustomFilter() $this->assertMatchesRegularExpression('/OK \(14 tests, 14 assertions\)/', $proc->getOutput()); } - public function testNumericDataSet1000InFunctionalModeWithFilterAndMaxBatchSize() + public function testNumericDataSet1000InFunctionalModeWithFilterAndMaxBatchSize(): void { $proc = $this->invoker->execute([ 'functional' => null, diff --git a/test/Functional/FunctionalTestBase.php b/test/Functional/FunctionalTestBase.php index 188c715..72cc871 100644 --- a/test/Functional/FunctionalTestBase.php +++ b/test/Functional/FunctionalTestBase.php @@ -8,12 +8,15 @@ use PHPUnit; use Symfony\Component\Process\Process; +use function extension_loaded; +use function file_exists; + class FunctionalTestBase extends PHPUnit\Framework\TestCase { protected function fixture($fixture) { $fixture = FIXTURES . DS . $fixture; - if (!file_exists($fixture)) { + if (! file_exists($fixture)) { throw new Exception("Fixture $fixture not found"); } @@ -27,7 +30,7 @@ protected function invokeParatest($path, $options = [], $callback = null) return $invoker->execute($options, $callback); } - protected function assertTestsPassed(Process $proc, $testPattern = '\d+', $assertionPattern = '\d+') + protected function assertTestsPassed(Process $proc, $testPattern = '\d+', $assertionPattern = '\d+'): void { $this->assertMatchesRegularExpression( "/OK \($testPattern tests?, $assertionPattern assertions?\)/", @@ -39,11 +42,13 @@ protected function assertTestsPassed(Process $proc, $testPattern = '\d+', $asser /** * Checks if the sqlite extension is loaded and skips the test if not. */ - protected function guardSqliteExtensionLoaded() + protected function guardSqliteExtensionLoaded(): void { $sqliteExtension = 'pdo_sqlite'; - if (!extension_loaded($sqliteExtension)) { - $this->markTestSkipped("Skipping test: Extension '$sqliteExtension' not found."); + if (extension_loaded($sqliteExtension)) { + return; } + + $this->markTestSkipped("Skipping test: Extension '$sqliteExtension' not found."); } } diff --git a/test/Functional/GroupTest.php b/test/Functional/GroupTest.php index 8fb873a..1760f1c 100644 --- a/test/Functional/GroupTest.php +++ b/test/Functional/GroupTest.php @@ -18,38 +18,38 @@ public function setUp(): void ); } - public function testGroupSwitchOnlyExecutesThoseGroups() + public function testGroupSwitchOnlyExecutesThoseGroups(): void { $proc = $this->invoker->execute(['group' => 'group1']); $this->assertMatchesRegularExpression('/OK \(2 tests, 2 assertions\)/', $proc->getOutput()); } - public function testExcludeGroupSwitchDontExecuteThatGroup() + public function testExcludeGroupSwitchDontExecuteThatGroup(): void { $proc = $this->invoker->execute(['exclude-group' => 'group1']); $this->assertMatchesRegularExpression('/OK \(3 tests, 3 assertions\)/', $proc->getOutput()); } - public function testGroupSwitchExecutesGroupsUsingShortOption() + public function testGroupSwitchExecutesGroupsUsingShortOption(): void { $proc = $this->invoker->execute(['g' => 'group1']); $this->assertMatchesRegularExpression('/OK \(2 tests, 2 assertions\)/', $proc->getOutput()); } - public function testGroupSwitchOnlyExecutesThoseGroupsInFunctionalMode() + public function testGroupSwitchOnlyExecutesThoseGroupsInFunctionalMode(): void { $proc = $this->invoker->execute(['functional', 'g' => 'group1']); $this->assertMatchesRegularExpression('/OK \(2 tests, 2 assertions\)/', $proc->getOutput()); } - public function testGroupSwitchOnlyExecutesThoseGroupsWhereTestHasMultipleGroups() + public function testGroupSwitchOnlyExecutesThoseGroupsWhereTestHasMultipleGroups(): void { $proc = $this->invoker->execute(['functional', 'group' => 'group3']); $this->assertMatchesRegularExpression('/OK \(1 test, 1 assertion\)/', $proc->getOutput()); } - public function testGroupsSwitchExecutesMultipleGroups() + public function testGroupsSwitchExecutesMultipleGroups(): void { $proc = $this->invoker->execute(['functional', 'group' => 'group1,group3']); $this->assertMatchesRegularExpression('/OK \(3 tests, 3 assertions\)/', $proc->getOutput()); diff --git a/test/Functional/OutputTest.php b/test/Functional/OutputTest.php index b396ef0..11af20a 100644 --- a/test/Functional/OutputTest.php +++ b/test/Functional/OutputTest.php @@ -4,11 +4,11 @@ namespace ParaTest\Tests\Functional; +use function getcwd; + class OutputTest extends FunctionalTestBase { - /** - * @var ParaTestInvoker - */ + /** @var ParaTestInvoker */ protected $paratest; public function setUp(): void @@ -20,7 +20,7 @@ public function setUp(): void ); } - public function testDefaultMessagesDisplayed() + public function testDefaultMessagesDisplayed(): void { $output = $this->paratest->execute(['p' => 5])->getOutput(); $this->assertStringContainsString('Running phpunit in 5 processes with ' . PHPUNIT, $output); @@ -28,7 +28,7 @@ public function testDefaultMessagesDisplayed() $this->assertMatchesRegularExpression('/[.F]{4}/', $output); } - public function testMessagePrintedWhenInvalidConfigFileSupplied() + public function testMessagePrintedWhenInvalidConfigFileSupplied(): void { $output = $this->paratest ->execute(['configuration' => 'nope.xml']) @@ -36,7 +36,7 @@ public function testMessagePrintedWhenInvalidConfigFileSupplied() $this->assertStringContainsString('Could not read "nope.xml"', $output); } - public function testMessagePrintedWhenFunctionalModeIsOn() + public function testMessagePrintedWhenFunctionalModeIsOn(): void { $output = $this->paratest ->execute(['functional', 'p' => 5]) @@ -46,7 +46,7 @@ public function testMessagePrintedWhenFunctionalModeIsOn() $this->assertMatchesRegularExpression('/[.F]{4}/', $output); } - public function testProcCountIsReportedWithProcOption() + public function testProcCountIsReportedWithProcOption(): void { $output = $this->paratest->execute(['p' => 1]) ->getOutput(); diff --git a/test/Functional/PHPUnitOtherWarningsTest.php b/test/Functional/PHPUnitOtherWarningsTest.php index d5291a0..d5b9d1b 100644 --- a/test/Functional/PHPUnitOtherWarningsTest.php +++ b/test/Functional/PHPUnitOtherWarningsTest.php @@ -13,7 +13,7 @@ */ class PHPUnitOtherWarningsTest extends FunctionalTestBase { - public function testTestsWithWarningsResultInFailure() + public function testTestsWithWarningsResultInFailure(): void { $proc = $this->invokeParatest( 'warning-tests/HasOtherWarningsTest.php', diff --git a/test/Functional/PHPUnitTest.php b/test/Functional/PHPUnitTest.php index 02b9c06..ea5ce67 100644 --- a/test/Functional/PHPUnitTest.php +++ b/test/Functional/PHPUnitTest.php @@ -8,20 +8,26 @@ use ParaTest\Console\Testers\PHPUnit; use Symfony\Component\Console\Input\ArrayInput; +use function array_key_exists; +use function chdir; +use function dirname; +use function file_exists; +use function sys_get_temp_dir; +use function tempnam; +use function unlink; + class PHPUnitTest extends FunctionalTestBase { - public function testWithJustBootstrap() + public function testWithJustBootstrap(): void { - $this->assertTestsPassed($this->invokeParatest('passing-tests', [ - 'bootstrap' => BOOTSTRAP, - ])); + $this->assertTestsPassed($this->invokeParatest('passing-tests', ['bootstrap' => BOOTSTRAP])); } - public function testWithBootstrapThatDoesNotExist() + public function testWithBootstrapThatDoesNotExist(): void { $bootstrap = '/fileThatDoesNotExist.php'; - $proc = $this->invokeParatest('passing-tests', ['bootstrap' => $bootstrap]); - $errors = $proc->getErrorOutput(); + $proc = $this->invokeParatest('passing-tests', ['bootstrap' => $bootstrap]); + $errors = $proc->getErrorOutput(); $this->assertEquals(1, $proc->getExitCode(), 'Unexpected exit code'); // The [RuntimeException] message appears only on lower 6.x versions of Phpunit @@ -32,17 +38,15 @@ public function testWithBootstrapThatDoesNotExist() ); } - public function testWithJustConfiguration() + public function testWithJustConfiguration(): void { - $this->assertTestsPassed($this->invokeParatest('passing-tests', [ - 'configuration' => PHPUNIT_CONFIGURATION, - ])); + $this->assertTestsPassed($this->invokeParatest('passing-tests', ['configuration' => PHPUNIT_CONFIGURATION])); } /** * @requires OSFAMILY Linux */ - public function testWithWrapperRunner() + public function testWithWrapperRunner(): void { $this->assertTestsPassed($this->invokeParatest('passing-tests', [ 'configuration' => PHPUNIT_CONFIGURATION, @@ -50,7 +54,7 @@ public function testWithWrapperRunner() ])); } - public function testWithSqliteRunner() + public function testWithSqliteRunner(): void { $this->guardSqliteExtensionLoaded(); @@ -60,7 +64,7 @@ public function testWithSqliteRunner() ])); } - public function testWithCustomRunner() + public function testWithCustomRunner(): void { $cb = new ProcessCallback(); @@ -75,7 +79,7 @@ public function testWithCustomRunner() $this->assertEquals('EXECUTED', $cb->getBuffer()); } - public function testWithColorsGreenBar() + public function testWithColorsGreenBar(): void { $proc = $this->invokeParatest( 'paratest-only-tests/EnvironmentTest.php', @@ -87,7 +91,7 @@ public function testWithColorsGreenBar() ); } - public function testWithColorsRedBar() + public function testWithColorsRedBar(): void { $proc = $this->invokeParatest( 'failing-tests/UnitTestWithErrorTest.php', @@ -99,7 +103,7 @@ public function testWithColorsRedBar() ); } - public function testParatestEnvironmentVariable() + public function testParatestEnvironmentVariable(): void { $this->assertTestsPassed($this->invokeParatest( 'paratest-only-tests/EnvironmentTest.php', @@ -110,7 +114,7 @@ public function testParatestEnvironmentVariable() /** * @requires OSFAMILY Linux */ - public function testParatestEnvironmentVariableWithWrapperRunner() + public function testParatestEnvironmentVariableWithWrapperRunner(): void { $this->assertTestsPassed($this->invokeParatest( 'paratest-only-tests/EnvironmentTest.php', @@ -121,7 +125,7 @@ public function testParatestEnvironmentVariableWithWrapperRunner() /** * @requires OSFAMILY Linux */ - public function testParatestEnvironmentVariableWithWrapperRunnerWithoutTestTokens() + public function testParatestEnvironmentVariableWithWrapperRunnerWithoutTestTokens(): void { $proc = $this->invokeParatest( 'paratest-only-tests/EnvironmentTest.php', @@ -130,7 +134,7 @@ public function testParatestEnvironmentVariableWithWrapperRunnerWithoutTestToken $this->assertMatchesRegularExpression('/Failures: 1/', $proc->getOutput()); } - public function testParatestEnvironmentVariableWithSqliteRunner() + public function testParatestEnvironmentVariableWithSqliteRunner(): void { $this->guardSqliteExtensionLoaded(); $this->assertTestsPassed($this->invokeParatest( @@ -139,13 +143,13 @@ public function testParatestEnvironmentVariableWithSqliteRunner() )); } - public function testWithConfigurationInDirWithoutConfigFile() + public function testWithConfigurationInDirWithoutConfigFile(): void { chdir(dirname(FIXTURES)); $this->assertTestsPassed($this->invokeParatest('passing-tests')); } - public function testWithConfigurationThatDoesNotExist() + public function testWithConfigurationThatDoesNotExist(): void { $proc = $this->invokeParatest( 'passing-tests', @@ -154,7 +158,7 @@ public function testWithConfigurationThatDoesNotExist() $this->assertMatchesRegularExpression('/Could not read ".*phpunit.xml.disto"./', $proc->getOutput()); } - public function testFunctionalWithBootstrap() + public function testFunctionalWithBootstrap(): void { $this->assertTestsPassed($this->invokeParatest( 'passing-tests', @@ -162,7 +166,7 @@ public function testFunctionalWithBootstrap() )); } - public function testFunctionalWithConfiguration() + public function testFunctionalWithConfiguration(): void { $this->assertTestsPassed($this->invokeParatest( 'passing-tests', @@ -170,7 +174,7 @@ public function testFunctionalWithConfiguration() )); } - public function testWithBootstrapAndProcessesSwitch() + public function testWithBootstrapAndProcessesSwitch(): void { $proc = $this->invokeParatest( 'passing-tests', @@ -180,7 +184,7 @@ public function testWithBootstrapAndProcessesSwitch() $this->assertTestsPassed($proc); } - public function testWithBootstrapAndManuallySpecifiedPHPUnit() + public function testWithBootstrapAndManuallySpecifiedPHPUnit(): void { $this->assertTestsPassed($this->invokeParatest( 'passing-tests', @@ -188,13 +192,13 @@ public function testWithBootstrapAndManuallySpecifiedPHPUnit() )); } - public function testDefaultSettingsWithoutBootstrap() + public function testDefaultSettingsWithoutBootstrap(): void { chdir(PARATEST_ROOT); $this->assertTestsPassed($this->invokeParatest('passing-tests')); } - public function testDefaultSettingsWithSpecifiedPath() + public function testDefaultSettingsWithSpecifiedPath(): void { chdir(PARATEST_ROOT); $this->assertTestsPassed($this->invokeParatest( @@ -203,21 +207,21 @@ public function testDefaultSettingsWithSpecifiedPath() )); } - public function testLoggingXmlOfDirectory() + public function testLoggingXmlOfDirectory(): void { chdir(PARATEST_ROOT); $output = FIXTURES . DS . 'logs' . DS . 'functional-directory.xml'; - $proc = $this->invokeParatest('passing-tests', [ - 'log-junit' => $output, - ]); + $proc = $this->invokeParatest('passing-tests', ['log-junit' => $output]); $this->assertTestsPassed($proc); $this->assertFileExists($output); - if (file_exists($output)) { - unlink($output); + if (! file_exists($output)) { + return; } + + unlink($output); } - public function testTestTokenEnvVarIsPassed() + public function testTestTokenEnvVarIsPassed(): void { chdir(PARATEST_ROOT); $proc = $this->invokeParatest( @@ -227,42 +231,38 @@ public function testTestTokenEnvVarIsPassed() $this->assertTestsPassed($proc, 1, 1); } - public function testLoggingXmlOfSingleFile() + public function testLoggingXmlOfSingleFile(): void { chdir(PARATEST_ROOT); $output = FIXTURES . DS . 'logs' . DS . 'functional-file.xml'; - $proc = $this->invokeParatest('passing-tests/GroupsTest.php', [ + $proc = $this->invokeParatest('passing-tests/GroupsTest.php', [ 'log-junit' => $output, 'bootstrap' => BOOTSTRAP, ]); $this->assertTestsPassed($proc, 5, 5); $this->assertFileExists($output); - if (file_exists($output)) { - unlink($output); + if (! file_exists($output)) { + return; } + + unlink($output); } - public function testSuccessfulRunHasExitCode0() + public function testSuccessfulRunHasExitCode0(): void { - $proc = $this->invokeParatest('passing-tests/GroupsTest.php', [ - 'bootstrap' => BOOTSTRAP, - ]); + $proc = $this->invokeParatest('passing-tests/GroupsTest.php', ['bootstrap' => BOOTSTRAP]); $this->assertEquals(0, $proc->getExitCode()); } - public function testFailedRunHasExitCode1() + public function testFailedRunHasExitCode1(): void { - $proc = $this->invokeParatest('failing-tests/FailingTest.php', [ - 'bootstrap' => BOOTSTRAP, - ]); + $proc = $this->invokeParatest('failing-tests/FailingTest.php', ['bootstrap' => BOOTSTRAP]); $this->assertEquals(1, $proc->getExitCode()); } - public function testRunWithErrorsHasExitCode2() + public function testRunWithErrorsHasExitCode2(): void { - $proc = $this->invokeParatest('failing-tests/UnitTestWithErrorTest.php', [ - 'bootstrap' => BOOTSTRAP, - ]); + $proc = $this->invokeParatest('failing-tests/UnitTestWithErrorTest.php', ['bootstrap' => BOOTSTRAP]); $this->assertEquals(2, $proc->getExitCode()); } @@ -271,17 +271,15 @@ public function testRunWithErrorsHasExitCode2() * running it. In some PHP/library versions, the exception code would be 255. Otherwise, the exception code was 0 * and is manually converted to 1 inside the Symfony Console runner. */ - public function testRunWithFatalParseErrorsHasExitCode255or1() + public function testRunWithFatalParseErrorsHasExitCode255or1(): void { - $proc = $this->invokeParatest('fatal-tests/UnitTestWithFatalParseErrorTest.php', [ - 'bootstrap' => BOOTSTRAP, - ]); + $proc = $this->invokeParatest('fatal-tests/UnitTestWithFatalParseErrorTest.php', ['bootstrap' => BOOTSTRAP]); $this->assertContains($proc->getExitCode(), [1, 255]); } - public function testStopOnFailurePreventsStartingFurtherTestsAfterFailure() + public function testStopOnFailurePreventsStartingFurtherTestsAfterFailure(): void { - $proc = $this->invokeParatest('failing-tests/StopOnFailureTest.php', [ + $proc = $this->invokeParatest('failing-tests/StopOnFailureTest.php', [ 'bootstrap' => BOOTSTRAP, 'stop-on-failure' => '', 'f' => '', @@ -292,10 +290,10 @@ public function testStopOnFailurePreventsStartingFurtherTestsAfterFailure() $this->assertStringContainsString('Failures: 1,', $results); // The suite actually has 2 failing tests } - public function testFullyConfiguredRun() + public function testFullyConfiguredRun(): void { $output = FIXTURES . DS . 'logs' . DS . 'functional.xml'; - $proc = $this->invokeParatest('passing-tests', [ + $proc = $this->invokeParatest('passing-tests', [ 'bootstrap' => BOOTSTRAP, 'phpunit' => PHPUNIT, 'f' => '', @@ -307,12 +305,14 @@ public function testFullyConfiguredRun() $this->assertMatchesRegularExpression('/Running phpunit in 6 processes/', $results); $this->assertMatchesRegularExpression('/Functional mode is on/i', $results); $this->assertFileExists($output); - if (file_exists($output)) { - unlink($output); + if (! file_exists($output)) { + return; } + + unlink($output); } - public function testUsingDefaultLoadedConfiguration() + public function testUsingDefaultLoadedConfiguration(): void { $this->assertTestsPassed($this->invokeParatest( 'passing-tests', @@ -320,7 +320,7 @@ public function testUsingDefaultLoadedConfiguration() )); } - public function testEachTestRunsExactlyOnceOnChainDependencyOnFunctionalMode() + public function testEachTestRunsExactlyOnceOnChainDependencyOnFunctionalMode(): void { $proc = $this->invokeParatest( 'passing-tests/DependsOnChain.php', @@ -329,7 +329,7 @@ public function testEachTestRunsExactlyOnceOnChainDependencyOnFunctionalMode() $this->assertTestsPassed($proc, 5, 5); } - public function testEachTestRunsExactlyOnceOnSameDependencyOnFunctionalMode() + public function testEachTestRunsExactlyOnceOnSameDependencyOnFunctionalMode(): void { $proc = $this->invokeParatest( 'passing-tests/DependsOnSame.php', @@ -338,7 +338,7 @@ public function testEachTestRunsExactlyOnceOnSameDependencyOnFunctionalMode() $this->assertTestsPassed($proc, 3, 3); } - public function testFunctionalModeEachTestCalledOnce() + public function testFunctionalModeEachTestCalledOnce(): void { $proc = $this->invokeParatest( 'passing-tests/FunctionalModeEachTestCalledOnce.php', @@ -370,20 +370,20 @@ public function setsCoveragePhpDataProvider() } /** - * @dataProvider setsCoveragePhpDataProvider - * * @param array $options - * @param string $coveragePhp + * + * @dataProvider setsCoveragePhpDataProvider */ - public function testSetsCoveragePhp($options, $coveragePhp) + public function testSetsCoveragePhp(array $options, string $coveragePhp): void { - $phpUnit = new \ParaTest\Console\Testers\PHPUnit(); - $c = new \ParaTest\Console\Commands\ParaTestCommand($phpUnit); + $phpUnit = new PHPUnit(); + $c = new ParaTestCommand($phpUnit); - $input = new \Symfony\Component\Console\Input\ArrayInput([], $c->getDefinition()); + $input = new ArrayInput([], $c->getDefinition()); foreach ($options as $key => $value) { $input->setOption($key, $value); } + $input->setArgument('path', '.'); $options = $phpUnit->getRunnerOptions($input); @@ -396,16 +396,16 @@ public function testSetsCoveragePhp($options, $coveragePhp) } /** - * @dataProvider getRunnerOptionsDataProvider - * * @param array $options * @param array $expected + * + * @dataProvider getRunnerOptionsDataProvider */ - public function testGetRunnerOptions(array $options, array $expected) + public function testGetRunnerOptions(array $options, array $expected): void { $phpUnit = new PHPUnit(); - $c = new ParaTestCommand($phpUnit); - $input = new ArrayInput($options, $c->getDefinition()); + $c = new ParaTestCommand($phpUnit); + $input = new ArrayInput($options, $c->getDefinition()); $options = $phpUnit->getRunnerOptions($input); diff --git a/test/Functional/PHPUnitWarningsTest.php b/test/Functional/PHPUnitWarningsTest.php index 352828d..353e7af 100644 --- a/test/Functional/PHPUnitWarningsTest.php +++ b/test/Functional/PHPUnitWarningsTest.php @@ -9,7 +9,7 @@ */ class PHPUnitWarningsTest extends FunctionalTestBase { - public function testTestsWithWarningsResultInFailure() + public function testTestsWithWarningsResultInFailure(): void { $proc = $this->invokeParatest( 'warning-tests/HasWarningsTest.php', diff --git a/test/Functional/ParaTestInvoker.php b/test/Functional/ParaTestInvoker.php index 6e051a2..ae1ad4f 100644 --- a/test/Functional/ParaTestInvoker.php +++ b/test/Functional/ParaTestInvoker.php @@ -7,6 +7,14 @@ use Habitat\Habitat; use Symfony\Component\Process\Process; +use function defined; +use function is_callable; +use function is_numeric; +use function sprintf; +use function strlen; + +use const PHP_BINARY; + class ParaTestInvoker { public $path; @@ -14,7 +22,7 @@ class ParaTestInvoker public function __construct($path, $bootstrap) { - $this->path = $path; + $this->path = $path; $this->bootstrap = $bootstrap; } @@ -22,17 +30,14 @@ public function __construct($path, $bootstrap) * Runs the command, returns the proc after it's done. * * @param array $options - * @param callable $callback - * - * @return Process */ - public function execute($options = [], $callback = null) + public function execute(array $options = [], ?callable $callback = null): Process { - $cmd = $this->buildCommand($options); - $env = defined('PHP_WINDOWS_VERSION_BUILD') ? Habitat::getAll() : null; + $cmd = $this->buildCommand($options); + $env = defined('PHP_WINDOWS_VERSION_BUILD') ? Habitat::getAll() : null; $proc = Process::fromShellCommandline($cmd, null, $env, null, $timeout = 600); - if (!is_callable($callback)) { + if (! is_callable($callback)) { $proc->run(); } else { $proc->run($callback); @@ -53,15 +58,18 @@ private function buildCommand($options = []) foreach ($options as $switch => $value) { if (is_numeric($switch)) { $switch = $value; - $value = null; + $value = null; } + if (strlen($switch) > 1) { $switch = '--' . $switch; } else { $switch = '-' . $switch; } + $cmd .= sprintf(' %s', $value ? $switch . ' ' . $value : $switch); } + $cmd .= sprintf(' %s', $this->path); return $cmd; diff --git a/test/Functional/ProcessCallback.php b/test/Functional/ProcessCallback.php index 428945b..5578e0f 100644 --- a/test/Functional/ProcessCallback.php +++ b/test/Functional/ProcessCallback.php @@ -9,9 +9,9 @@ class ProcessCallback protected $type; protected $buffer; - public function callback($type, $buffer) + public function callback($type, $buffer): void { - $this->type = $type; + $this->type = $type; $this->buffer = $buffer; } diff --git a/test/Functional/Runners/PHPUnit/RunnerIntegrationTest.php b/test/Functional/Runners/PHPUnit/RunnerIntegrationTest.php index e70fc44..fdf75db 100644 --- a/test/Functional/Runners/PHPUnit/RunnerIntegrationTest.php +++ b/test/Functional/Runners/PHPUnit/RunnerIntegrationTest.php @@ -5,8 +5,18 @@ namespace ParaTest\Tests\Functional\Runners\PHPUnit; use ParaTest\Runners\PHPUnit\Runner; - -class RunnerIntegrationTest extends \ParaTest\Tests\TestBase +use ParaTest\Tests\TestBase; + +use function count; +use function file_exists; +use function glob; +use function ob_end_clean; +use function ob_start; +use function simplexml_load_file; +use function sys_get_temp_dir; +use function unlink; + +class RunnerIntegrationTest extends TestBase { /** @var Runner $runner */ protected $runner; @@ -24,7 +34,7 @@ protected function setUp(): void 'bootstrap' => BOOTSTRAP, 'whitelist' => FIXTURES . DS . 'failing-tests', ]; - $this->runner = new Runner($this->options); + $this->runner = new Runner($this->options); } protected function tearDown(): void @@ -42,17 +52,17 @@ private function globTempDir($pattern) return glob(sys_get_temp_dir() . DS . $pattern); } - public function testRunningTestsShouldLeaveNoTempFiles() + public function testRunningTestsShouldLeaveNoTempFiles(): void { - $countBefore = \count($this->globTempDir('PT_*')); - $countCoverageBefore = \count($this->globTempDir('CV_*')); + $countBefore = count($this->globTempDir('PT_*')); + $countCoverageBefore = count($this->globTempDir('CV_*')); ob_start(); $this->runner->run(); ob_end_clean(); - $countAfter = \count($this->globTempDir('PT_*')); - $countCoverageAfter = \count($this->globTempDir('CV_*')); + $countAfter = count($this->globTempDir('PT_*')); + $countCoverageAfter = count($this->globTempDir('CV_*')); $this->assertEquals( $countAfter, @@ -66,11 +76,11 @@ public function testRunningTestsShouldLeaveNoTempFiles() ); } - public function testLogJUnitCreatesXmlFile() + public function testLogJUnitCreatesXmlFile(): void { - $outputPath = FIXTURES . DS . 'logs' . DS . 'test-output.xml'; + $outputPath = FIXTURES . DS . 'logs' . DS . 'test-output.xml'; $this->options['log-junit'] = $outputPath; - $runner = new Runner($this->options); + $runner = new Runner($this->options); ob_start(); $runner->run(); @@ -78,18 +88,20 @@ public function testLogJUnitCreatesXmlFile() $this->assertFileExists($outputPath); $this->assertJunitXmlIsCorrect($outputPath); - if (file_exists($outputPath)) { - unlink($outputPath); + if (! file_exists($outputPath)) { + return; } + + unlink($outputPath); } - public function assertJunitXmlIsCorrect($path) + public function assertJunitXmlIsCorrect($path): void { - $doc = simplexml_load_file($path); - $suites = $doc->xpath('//testsuite'); - $cases = $doc->xpath('//testcase'); + $doc = simplexml_load_file($path); + $suites = $doc->xpath('//testsuite'); + $cases = $doc->xpath('//testcase'); $failures = $doc->xpath('//failure'); - $errors = $doc->xpath('//error'); + $errors = $doc->xpath('//error'); // these numbers represent the tests in fixtures/failing-tests // so will need to be updated when tests are added or removed diff --git a/test/Functional/Runners/PHPUnit/WorkerTest.php b/test/Functional/Runners/PHPUnit/WorkerTest.php index f1f8d08..25955ff 100644 --- a/test/Functional/Runners/PHPUnit/WorkerTest.php +++ b/test/Functional/Runners/PHPUnit/WorkerTest.php @@ -5,28 +5,35 @@ namespace ParaTest\Tests\Functional\Runners\PHPUnit; use ParaTest\Runners\PHPUnit\Worker\WrapperWorker; +use ParaTest\Tests\TestBase; +use ReflectionProperty; use SimpleXMLElement; -class WorkerTest extends \ParaTest\Tests\TestBase +use function count; +use function file_exists; +use function file_get_contents; +use function get_class; +use function proc_get_status; +use function proc_open; +use function sys_get_temp_dir; +use function unlink; + +class WorkerTest extends TestBase { protected static $descriptorspec = [ - 0 => ['pipe', 'r'], - 1 => ['pipe', 'w'], - 2 => ['pipe', 'w'], + 0 => ['pipe', 'r'], + 1 => ['pipe', 'w'], + 2 => ['pipe', 'w'], ]; - /** - * @var string - */ + /** @var string */ protected $bootstrap; - /** - * @var string - */ + /** @var string */ private $phpunitWrapper; public function setUp(): void { parent::setUp(); - $this->bootstrap = PARATEST_ROOT . DS . 'test' . DS . 'bootstrap.php'; + $this->bootstrap = PARATEST_ROOT . DS . 'test' . DS . 'bootstrap.php'; $this->phpunitWrapper = PARATEST_ROOT . DS . 'bin' . DS . 'phpunit-wrapper.php'; } @@ -36,21 +43,23 @@ public function tearDown(): void $this->deleteIfExists(sys_get_temp_dir() . DS . 'test2.xml'); } - private function deleteIfExists($file) + private function deleteIfExists($file): void { - if (file_exists($file)) { - unlink($file); + if (! file_exists($file)) { + return; } + + unlink($file); } /** * @requires OSFAMILY Linux */ - public function testReadsAPHPUnitCommandFromStdInAndExecutesItItsOwnProcess() + public function testReadsAPHPUnitCommandFromStdInAndExecutesItItsOwnProcess(): void { $testLog = sys_get_temp_dir() . DS . 'test.xml'; $testCmd = $this->getCommand('passing-tests' . DS . 'TestOfUnits.php', $testLog); - $worker = new WrapperWorker(); + $worker = new WrapperWorker(); $worker->start($this->phpunitWrapper); $worker->execute($testCmd); @@ -63,11 +72,11 @@ public function testReadsAPHPUnitCommandFromStdInAndExecutesItItsOwnProcess() /** * @requires OSFAMILY Linux */ - public function testKnowsWhenAJobIsFinished() + public function testKnowsWhenAJobIsFinished(): void { $testLog = sys_get_temp_dir() . DS . 'test.xml'; $testCmd = $this->getCommand('passing-tests' . DS . 'TestOfUnits.php', $testLog); - $worker = new WrapperWorker(); + $worker = new WrapperWorker(); $worker->start($this->phpunitWrapper); $worker->execute($testCmd); $worker->waitForFinishedJob(); @@ -78,11 +87,11 @@ public function testKnowsWhenAJobIsFinished() /** * @requires OSFAMILY Linux */ - public function testTellsWhenItsFree() + public function testTellsWhenItsFree(): void { $testLog = sys_get_temp_dir() . DS . 'test.xml'; $testCmd = $this->getCommand('passing-tests' . DS . 'TestOfUnits.php', $testLog); - $worker = new WrapperWorker(); + $worker = new WrapperWorker(); $worker->start($this->phpunitWrapper); $this->assertTrue($worker->isFree()); @@ -96,7 +105,7 @@ public function testTellsWhenItsFree() /** * @requires OSFAMILY Linux */ - public function testTellsWhenItsStopped() + public function testTellsWhenItsStopped(): void { $worker = new WrapperWorker(); $this->assertFalse($worker->isRunning()); @@ -112,7 +121,7 @@ public function testTellsWhenItsStopped() /** * @requires OSFAMILY Linux */ - public function testProcessIsMarkedAsCrashedWhenItFinishesWithNonZeroExitCode() + public function testProcessIsMarkedAsCrashedWhenItFinishesWithNonZeroExitCode(): void { // fake state: process has already exited (with non-zero exit code) but worker did not yet notice $worker = new WrapperWorker(); @@ -129,24 +138,24 @@ private function createSomeClosedProcess() 2 => ['pipe', 'w'], ]; - $proc = proc_open('thisCommandHasAnExitcodeNotEqualZero', $descriptorspec, $pipes, '/tmp'); + $proc = proc_open('thisCommandHasAnExitcodeNotEqualZero', $descriptorspec, $pipes, '/tmp'); $running = true; while ($running) { - $status = proc_get_status($proc); + $status = proc_get_status($proc); $running = $status['running']; } return $proc; } - private function setPerReflection($instance, $property, $value) + private function setPerReflection($instance, $property, $value): void { - $reflectionProperty = new \ReflectionProperty(\get_class($instance), $property); + $reflectionProperty = new ReflectionProperty(get_class($instance), $property); $reflectionProperty->setAccessible(true); $reflectionProperty->setValue($instance, $value); } - public function testCanExecuteMultiplePHPUnitCommands() + public function testCanExecuteMultiplePHPUnitCommands(): void { $bin = 'bin/phpunit-wrapper.php'; @@ -176,15 +185,15 @@ private function getCommand($testFile, $logFile) $this->bootstrap, '--log-junit', $logFile, - $this->fixture($testFile) + $this->fixture($testFile), ]; } - private function assertJUnitLogIsValid($logFile) + private function assertJUnitLogIsValid($logFile): void { $this->assertFileExists($logFile); - $log = new SimpleXMLElement(file_get_contents($logFile)); - $count = \count($log->testsuite->testcase); + $log = new SimpleXMLElement(file_get_contents($logFile)); + $count = count($log->testsuite->testcase); $this->assertGreaterThan(1, $count, 'Not even a test has been executed'); } } diff --git a/test/Functional/SkippedOrIncompleteTest.php b/test/Functional/SkippedOrIncompleteTest.php index eb031c1..63da263 100644 --- a/test/Functional/SkippedOrIncompleteTest.php +++ b/test/Functional/SkippedOrIncompleteTest.php @@ -4,6 +4,9 @@ namespace ParaTest\Tests\Functional; +use function preg_match; +use function substr_count; + /** * @todo SkippedOrIncompleteTest can't be used in default mode with group filter * (not implemented yet) so we have to split tests per file. @@ -22,7 +25,7 @@ public function setUp(): void ); } - public function testSkippedInFunctionalMode() + public function testSkippedInFunctionalMode(): void { $proc = $this->invoker->execute([ 'functional' => null, @@ -36,7 +39,7 @@ public function testSkippedInFunctionalMode() $this->assertContainsNSkippedTests(1, $proc->getOutput()); } - public function testIncompleteInFunctionalMode() + public function testIncompleteInFunctionalMode(): void { $proc = $this->invoker->execute([ 'functional' => null, @@ -50,7 +53,7 @@ public function testIncompleteInFunctionalMode() $this->assertContainsNSkippedTests(1, $proc->getOutput()); } - public function testDataProviderWithSkippedInFunctionalMode() + public function testDataProviderWithSkippedInFunctionalMode(): void { $proc = $this->invoker->execute([ 'functional' => null, @@ -64,7 +67,7 @@ public function testDataProviderWithSkippedInFunctionalMode() $this->assertContainsNSkippedTests(67, $proc->getOutput()); } - public function testSkippedInDefaultMode() + public function testSkippedInDefaultMode(): void { // amount of tests is known, based on amount of methods, so // we can identify skipped tests @@ -82,7 +85,7 @@ public function testSkippedInDefaultMode() $this->assertContainsNSkippedTests(1, $proc->getOutput()); } - public function testIncompleteInDefaultMode() + public function testIncompleteInDefaultMode(): void { // amount of tests is known, based on amount of methods, so // we can identify skipped tests @@ -101,7 +104,7 @@ public function testIncompleteInDefaultMode() $this->assertContainsNSkippedTests(1, $proc->getOutput()); } - public function testDataProviderWithSkippedInDefaultMode() + public function testDataProviderWithSkippedInDefaultMode(): void { // TODO: update comments // amount of tests is known, but based on amount of methods, @@ -119,7 +122,7 @@ public function testDataProviderWithSkippedInDefaultMode() $this->assertStringContainsString($expected, $proc->getOutput()); } - protected function assertContainsNSkippedTests($n, $output) + protected function assertContainsNSkippedTests($n, $output): void { preg_match('/\n\n([\.ISEF].*)\n\nTime/s', $output, $matches); $this->assertCount(2, $matches); diff --git a/test/Functional/SqliteRunnerTest.php b/test/Functional/SqliteRunnerTest.php index 6f4d5d0..bc2ebea 100644 --- a/test/Functional/SqliteRunnerTest.php +++ b/test/Functional/SqliteRunnerTest.php @@ -16,7 +16,7 @@ protected function setUp(): void parent::setUp(); } - public function testResultsAreCorrect() + public function testResultsAreCorrect(): void { $generator = new TestGenerator(); $generator->generate(self::TEST_CLASSES, self::TEST_METHODS_PER_CLASS); @@ -30,7 +30,7 @@ public function testResultsAreCorrect() $this->assertTestsPassed($proc, $expected, $expected); } - public function testRunningFewerTestsThanTheWorkersIsPossible() + public function testRunningFewerTestsThanTheWorkersIsPossible(): void { $generator = new TestGenerator(); $generator->generate(1, 1); @@ -43,21 +43,21 @@ public function testRunningFewerTestsThanTheWorkersIsPossible() $this->assertTestsPassed($proc, 1, 1); } - public function testExitCodes() + public function testExitCodes(): void { $options = [ 'runner' => 'SqliteRunner', 'processes' => 1, ]; - $proc = $this->invokeParatest('wrapper-runner-exit-code-tests/ErrorTest.php', $options); - $output = $proc->getOutput(); + $proc = $this->invokeParatest('wrapper-runner-exit-code-tests/ErrorTest.php', $options); + $output = $proc->getOutput(); $this->assertStringContainsString('Tests: 1', $output); $this->assertStringContainsString('Failures: 0', $output); $this->assertStringContainsString('Errors: 1', $output); $this->assertEquals(2, $proc->getExitCode()); - $proc = $this->invokeParatest('wrapper-runner-exit-code-tests/FailureTest.php', $options); + $proc = $this->invokeParatest('wrapper-runner-exit-code-tests/FailureTest.php', $options); $output = $proc->getOutput(); $this->assertStringContainsString('Tests: 1', $output); @@ -65,15 +65,15 @@ public function testExitCodes() $this->assertStringContainsString('Errors: 0', $output); $this->assertEquals(1, $proc->getExitCode()); - $proc = $this->invokeParatest('wrapper-runner-exit-code-tests/SuccessTest.php', $options); + $proc = $this->invokeParatest('wrapper-runner-exit-code-tests/SuccessTest.php', $options); $output = $proc->getOutput(); $this->assertStringContainsString('OK (1 test, 1 assertion)', $output); $this->assertEquals(0, $proc->getExitCode()); $options['processes'] = 3; - $proc = $this->invokeParatest('wrapper-runner-exit-code-tests', $options); - $output = $proc->getOutput(); + $proc = $this->invokeParatest('wrapper-runner-exit-code-tests', $options); + $output = $proc->getOutput(); $this->assertStringContainsString('Tests: 3', $output); $this->assertStringContainsString('Failures: 1', $output); $this->assertStringContainsString('Errors: 1', $output); diff --git a/test/Functional/TestGenerator.php b/test/Functional/TestGenerator.php index 0097ffe..bc14d03 100644 --- a/test/Functional/TestGenerator.php +++ b/test/Functional/TestGenerator.php @@ -4,6 +4,11 @@ namespace ParaTest\Tests\Functional; +use function file_put_contents; +use function is_dir; +use function mkdir; +use function uniqid; + class TestGenerator { public $path; @@ -11,15 +16,17 @@ class TestGenerator public function __construct() { - $this->path = 'generated-tests' . DS . uniqid(); + $this->path = 'generated-tests' . DS . uniqid(); $this->fullPath = FIXTURES . DS . $this->path; - if (!is_dir($this->fullPath)) { - mkdir($this->fullPath, 0777, true); + if (is_dir($this->fullPath)) { + return; } + + mkdir($this->fullPath, 0777, true); } - public function generate($tests = 1, $methods = 1) + public function generate($tests = 1, $methods = 1): void { for ($i = 0; $i < $tests; ++$i) { $name = "Generated{$i}Test"; diff --git a/test/Functional/WrapperRunnerTest.php b/test/Functional/WrapperRunnerTest.php index 212accd..bbd5b48 100644 --- a/test/Functional/WrapperRunnerTest.php +++ b/test/Functional/WrapperRunnerTest.php @@ -13,7 +13,7 @@ class WrapperRunnerTest extends FunctionalTestBase private const TEST_CLASSES = 6; - public function testResultsAreCorrect() + public function testResultsAreCorrect(): void { $generator = new TestGenerator(); $generator->generate(self::TEST_CLASSES, self::TEST_METHODS_PER_CLASS); @@ -27,7 +27,7 @@ public function testResultsAreCorrect() $this->assertTestsPassed($proc, $expected, $expected); } - public function testRunningFewerTestsThanTheWorkersIsPossible() + public function testRunningFewerTestsThanTheWorkersIsPossible(): void { $generator = new TestGenerator(); $generator->generate(1, 1); @@ -46,25 +46,25 @@ public function functionalModeEnabledDataProvider() } /** - * @dataProvider functionalModeEnabledDataProvider - * * @param mixed $functionalModeEnabled + * + * @dataProvider functionalModeEnabledDataProvider */ - public function testExitCodes($functionalModeEnabled) + public function testExitCodes($functionalModeEnabled): void { $options = [ 'runner' => 'WrapperRunner', 'processes' => 1, ]; - $proc = $this->invokeParatest('wrapper-runner-exit-code-tests/ErrorTest.php', $options); - $output = $proc->getOutput(); + $proc = $this->invokeParatest('wrapper-runner-exit-code-tests/ErrorTest.php', $options); + $output = $proc->getOutput(); $this->assertStringContainsString('Tests: 1', $output); $this->assertStringContainsString('Failures: 0', $output); $this->assertStringContainsString('Errors: 1', $output); $this->assertEquals(2, $proc->getExitCode()); - $proc = $this->invokeParatest('wrapper-runner-exit-code-tests/FailureTest.php', $options); + $proc = $this->invokeParatest('wrapper-runner-exit-code-tests/FailureTest.php', $options); $output = $proc->getOutput(); $this->assertStringContainsString('Tests: 1', $output); @@ -72,15 +72,15 @@ public function testExitCodes($functionalModeEnabled) $this->assertStringContainsString('Errors: 0', $output); $this->assertEquals(1, $proc->getExitCode()); - $proc = $this->invokeParatest('wrapper-runner-exit-code-tests/SuccessTest.php', $options); + $proc = $this->invokeParatest('wrapper-runner-exit-code-tests/SuccessTest.php', $options); $output = $proc->getOutput(); $this->assertStringContainsString('OK (1 test, 1 assertion)', $output); $this->assertEquals(0, $proc->getExitCode()); $options['processes'] = 3; - $proc = $this->invokeParatest('wrapper-runner-exit-code-tests', $options); - $output = $proc->getOutput(); + $proc = $this->invokeParatest('wrapper-runner-exit-code-tests', $options); + $output = $proc->getOutput(); $this->assertStringContainsString('Tests: 3', $output); $this->assertStringContainsString('Failures: 1', $output); $this->assertStringContainsString('Errors: 1', $output); diff --git a/test/TestBase.php b/test/TestBase.php index 1b6740c..37369b1 100644 --- a/test/TestBase.php +++ b/test/TestBase.php @@ -6,20 +6,33 @@ use Exception; use PHPUnit; +use PHPUnit\Framework\SkippedTestError; use PHPUnit\Runner\Version; use RecursiveDirectoryIterator; use RecursiveIteratorIterator; use ReflectionClass; +use ReflectionObject; use SebastianBergmann\Environment\Runtime; +use SplFileObject; + +use function copy; +use function file_exists; +use function get_class; +use function is_dir; +use function is_object; +use function is_string; +use function preg_match; +use function rmdir; +use function str_replace; +use function uniqid; +use function unlink; class TestBase extends PHPUnit\Framework\TestCase { /** * Get PHPUnit version. - * - * @return string */ - protected static function getPhpUnitVersion() + protected static function getPhpUnitVersion(): string { return Version::id(); } @@ -27,7 +40,7 @@ protected static function getPhpUnitVersion() protected function fixture($fixture) { $fixture = FIXTURES . DS . $fixture; - if (!file_exists($fixture)) { + if (! file_exists($fixture)) { throw new Exception("Fixture $fixture not found"); } @@ -36,13 +49,15 @@ protected function fixture($fixture) protected function findTests($dir) { - $it = new \RecursiveDirectoryIterator($dir, \RecursiveIteratorIterator::SELF_FIRST); - $it = new \RecursiveIteratorIterator($it); + $it = new RecursiveDirectoryIterator($dir, RecursiveIteratorIterator::SELF_FIRST); + $it = new RecursiveIteratorIterator($it); $files = []; foreach ($it as $file) { - if (preg_match('/Test\.php$/', $file->getPathname())) { - $files[] = $file->getPathname(); + if (! preg_match('/Test\.php$/', $file->getPathname())) { + continue; } + + $files[] = $file->getPathname(); } return $files; @@ -64,7 +79,7 @@ protected function setObjectValue($object, $property, $value) private function getAccessibleProperty($object, $property) { - $refl = new \ReflectionObject($object); + $refl = new ReflectionObject($object); $prop = $refl->getProperty($property); $prop->setAccessible(true); @@ -74,13 +89,13 @@ private function getAccessibleProperty($object, $property) /** * Calls an object method even if it is protected or private. * - * @param object $object the object to call a method on + * @param object $object the object to call a method on * @param string $methodName the method name to be called - * @param mixed $args 0 or more arguments passed in the function + * @param mixed $args 0 or more arguments passed in the function * * @return mixed returns what the object's method call will return */ - public function call($object, $methodName, ...$args) + public function call(object $object, string $methodName, ...$args) { return self::callMethod($object, $methodName, $args); } @@ -88,13 +103,13 @@ public function call($object, $methodName, ...$args) /** * Calls a class method even if it is protected or private. * - * @param string $class the class to call a method on + * @param string $class the class to call a method on * @param string $methodName the method name to be called - * @param mixed $args 0 or more arguments passed in the function + * @param mixed $args 0 or more arguments passed in the function * * @return mixed returns what the object's method call will return */ - public function callStatic($class, $methodName, ...$args) + public function callStatic(string $class, string $methodName, ...$args) { return self::callMethod($class, $methodName, $args); } @@ -103,54 +118,54 @@ protected static function callMethod($objectOrClassName, $methodName, $args = nu { $isStatic = is_string($objectOrClassName); - if (!$isStatic) { - if (!is_object($objectOrClassName)) { + if (! $isStatic) { + if (! is_object($objectOrClassName)) { throw new Exception('Method call on non existent object or class'); } } - $class = $isStatic ? $objectOrClassName : get_class($objectOrClassName); + $class = $isStatic ? $objectOrClassName : get_class($objectOrClassName); $object = $isStatic ? null : $objectOrClassName; $reflectionClass = new ReflectionClass($class); - $method = $reflectionClass->getMethod($methodName); + $method = $reflectionClass->getMethod($methodName); $method->setAccessible(true); return $method->invokeArgs($object, $args); } /** - * @throws \PHPUnit\Framework\SkippedTestError When code coverage library is not found + * @throws SkippedTestError When code coverage library is not found. */ - protected static function skipIfCodeCoverageNotEnabled() + protected static function skipIfCodeCoverageNotEnabled(): void { static $runtime; - if (null === $runtime) { + if ($runtime === null) { $runtime = new Runtime(); } - if (!$runtime->canCollectCodeCoverage()) { - static::markTestSkipped('No code coverage driver available'); + if ($runtime->canCollectCodeCoverage()) { + return; } + + static::markTestSkipped('No code coverage driver available'); } /** * Remove dir and its files. - * - * @param string $dirname */ - protected function removeDirectory($dirname) + protected function removeDirectory(string $dirname): void { - if (!file_exists($dirname) || !is_dir($dirname)) { + if (! file_exists($dirname) || ! is_dir($dirname)) { return; } - $directory = new \RecursiveDirectoryIterator( + $directory = new RecursiveDirectoryIterator( $dirname, RecursiveDirectoryIterator::SKIP_DOTS ); - /** @var \SplFileObject[] $iterator */ - $iterator = new \RecursiveIteratorIterator( + /** @var SplFileObject[] $iterator */ + $iterator = new RecursiveIteratorIterator( $directory, RecursiveIteratorIterator::CHILD_FIRST ); @@ -161,6 +176,7 @@ protected function removeDirectory($dirname) unlink($file->getRealPath()); } } + rmdir($dirname); } @@ -168,14 +184,13 @@ protected function removeDirectory($dirname) * Copy fixture file to tmp folder, cause coverage file will be deleted by merger. * * @param string $fixture Fixture coverage file name - * @param string $directory * * @return string Copied coverage file */ - protected function copyCoverageFile($fixture, $directory) + protected function copyCoverageFile(string $fixture, string $directory): string { $fixturePath = $this->fixture($fixture); - $filename = str_replace('.', '_', $directory . DS . uniqid('cov-', true)); + $filename = str_replace('.', '_', $directory . DS . uniqid('cov-', true)); copy($fixturePath, $filename); return $filename; diff --git a/test/Unit/Console/Commands/ParaTestCommandTest.php b/test/Unit/Console/Commands/ParaTestCommandTest.php index 8f9a00e..e7fff9b 100644 --- a/test/Unit/Console/Commands/ParaTestCommandTest.php +++ b/test/Unit/Console/Commands/ParaTestCommandTest.php @@ -7,24 +7,25 @@ use ParaTest\Console\Commands\ParaTestCommand; use ParaTest\Console\Testers\PHPUnit; use ParaTest\Console\Testers\Tester; +use ParaTest\Tests\TestBase; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputDefinition; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Output\OutputInterface; -class ParaTestCommandTest extends \ParaTest\Tests\TestBase +class ParaTestCommandTest extends TestBase { protected $tester; protected $command; public function setUp(): void { - $this->tester = new PHPUnit(); + $this->tester = new PHPUnit(); $this->command = new ParaTestCommand($this->tester); } - public function testConstructor() + public function testConstructor(): void { $this->assertEquals('paratest', $this->command->getName()); $this->assertSame($this->tester, $this->getObjectValue($this->command, 'tester')); @@ -34,9 +35,9 @@ public function testConstructor() * Should be configured from the ParaTest command * as well as the Tester it is composed of. */ - public function testConfiguredDefinitionWithPHPUnitTester() + public function testConfiguredDefinitionWithPHPUnitTester(): void { - $options = [ + $options = [ new InputOption( 'processes', 'p', @@ -192,14 +193,14 @@ public function testConfiguredDefinitionWithPHPUnitTester() 'Directory to add to the coverage whitelist.' ), ]; - $expected = new InputDefinition($options); + $expected = new InputDefinition($options); $definition = $this->command->getDefinition(); $this->assertEquals($expected, $definition); } - public function testExecuteInvokesTestersExecuteMethod() + public function testExecuteInvokesTestersExecuteMethod(): void { - $input = $this->getMockBuilder(InputInterface::class)->getMock(); + $input = $this->getMockBuilder(InputInterface::class)->getMock(); $output = $this->getMockBuilder(OutputInterface::class)->getMock(); $tester = $this->getMockBuilder(Tester::class)->getMock(); $tester @@ -208,8 +209,7 @@ public function testExecuteInvokesTestersExecuteMethod() ->with( $this->equalTo($input), $this->equalTo($output) - ) - ; + ); $command = new ParaTestCommand($tester); $command->execute($input, $output); } diff --git a/test/Unit/Console/Testers/PHPUnitTest.php b/test/Unit/Console/Testers/PHPUnitTest.php index 0d47488..8e2a660 100644 --- a/test/Unit/Console/Testers/PHPUnitTest.php +++ b/test/Unit/Console/Testers/PHPUnitTest.php @@ -5,16 +5,19 @@ namespace ParaTest\Tests\Unit\Console\Testers; use ParaTest\Console\Testers\PHPUnit; +use ParaTest\Tests\TestBase; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputDefinition; use Symfony\Component\Console\Input\InputOption; -class PHPUnitTest extends \ParaTest\Tests\TestBase +use function getcwd; + +class PHPUnitTest extends TestBase { - public function testConfigureAddsOptionsAndArgumentsToCommand() + public function testConfigureAddsOptionsAndArgumentsToCommand(): void { $testCommand = new TestCommand(); - $definition = new InputDefinition([ + $definition = new InputDefinition([ new InputOption( 'phpunit', null, @@ -67,16 +70,16 @@ public function testConfigureAddsOptionsAndArgumentsToCommand() new InputOption('path', null, InputOption::VALUE_REQUIRED, 'An alias for the path argument.'), new InputOption('testsuite', null, InputOption::VALUE_OPTIONAL, 'Filter which testsuite to run'), ]); - $tester = new PHPUnit(); + $tester = new PHPUnit(); $tester->configure($testCommand); $this->assertEquals($definition, $testCommand->getDefinition()); } - public function testRequireBootstrapIsChdirResistent() + public function testRequireBootstrapIsChdirResistent(): void { - $file = __DIR__ . '/../../../fixtures/chdirBootstrap.php'; + $file = __DIR__ . '/../../../fixtures/chdirBootstrap.php'; $tester = new PHPUnit(); - $cwd = getcwd(); + $cwd = getcwd(); $tester->requireBootstrap($file); $this->assertEquals($cwd, getcwd()); diff --git a/test/Unit/Console/VersionProviderTest.php b/test/Unit/Console/VersionProviderTest.php index 4d65772..0fbd887 100644 --- a/test/Unit/Console/VersionProviderTest.php +++ b/test/Unit/Console/VersionProviderTest.php @@ -8,42 +8,40 @@ use PHPUnit\Framework\TestCase; /** - * Class VersionProviderTest. - * * @covers \ParaTest\Console\VersionProvider */ class VersionProviderTest extends TestCase { - public function testCreation() + public function testCreation(): void { $provider = new VersionProvider(); $this->assertInstanceOf(VersionProvider::class, $provider); } - public function testStaticCall() + public function testStaticCall(): void { $provider = new VersionProvider(); $this->assertSame($provider::getVersion(), $provider->getParaTestVersion()); } - public function testComposerInstalledVersion() + public function testComposerInstalledVersion(): void { $provider = new VersionProvider(); - $actual = $provider->getComposerInstalledVersion('phpunit/phpunit'); + $actual = $provider->getComposerInstalledVersion('phpunit/phpunit'); $this->assertIsString($actual, 'Version of phpunit package was found installed'); // dev-master is included here as the phpunit package is checked and there is a dev-master used on travis - $this->assertMatchesRegularExpression("~^dev-master|\d.\d.(.)+$~", $actual, 'Actual version number'); + $this->assertMatchesRegularExpression('~^dev-master|\d.\d.(.)+$~', $actual, 'Actual version number'); $actual = $provider->getComposerInstalledVersion('foooo/barazzoraz'); $this->assertNull($actual, 'No version for non-existent package'); } - public function testGitVersion() + public function testGitVersion(): void { $provider = new VersionProvider(); - $actual = $provider->getGitVersion(); + $actual = $provider->getGitVersion(); $this->assertIsString($actual, 'Git is enabled and works'); - $this->assertMatchesRegularExpression("~^\d.\d(?:.\d+)?(?:-\d+-g[\da-f]+)?$~", $actual, 'Git gives a version'); + $this->assertMatchesRegularExpression('~^\d.\d(?:.\d+)?(?:-\d+-g[\da-f]+)?$~', $actual, 'Git gives a version'); } } diff --git a/test/Unit/Coverage/CoverageMergerTest.php b/test/Unit/Coverage/CoverageMergerTest.php index f0a27c4..7940744 100644 --- a/test/Unit/Coverage/CoverageMergerTest.php +++ b/test/Unit/Coverage/CoverageMergerTest.php @@ -5,10 +5,13 @@ namespace ParaTest\Tests\Unit\Coverage; use ParaTest\Coverage\CoverageMerger; +use ParaTest\Tests\TestBase; use SebastianBergmann\CodeCoverage\CodeCoverage; use SebastianBergmann\CodeCoverage\Filter; -class CoverageMergerTest extends \ParaTest\Tests\TestBase +use function assert; + +class CoverageMergerTest extends TestBase { protected function setUp(): void { @@ -20,15 +23,15 @@ protected function setUp(): void * * @requires function \SebastianBergmann\CodeCoverage\CodeCoverage::merge */ - public function testSimpleMerge() + public function testSimpleMerge(): void { - $firstFile = PARATEST_ROOT . DS . 'src' . DS . 'Logging' . DS . 'LogInterpreter.php'; + $firstFile = PARATEST_ROOT . DS . 'src' . DS . 'Logging' . DS . 'LogInterpreter.php'; $secondFile = PARATEST_ROOT . DS . 'src' . DS . 'Logging' . DS . 'MetaProvider.php'; // Every time the two above files are changed, the line numbers // may change, and so these two numbers may need adjustments - $firstFileFirstLine = 40; - $secondFileFirstLine = 48; + $firstFileFirstLine = 46; + $secondFileFirstLine = 47; $filter = new Filter(); $filter->addFilesToWhitelist([$firstFile, $secondFile]); @@ -52,8 +55,8 @@ public function testSimpleMerge() $this->call($merger, 'addCoverage', $coverage1); $this->call($merger, 'addCoverage', $coverage2); - /** @var CodeCoverage $coverage */ $coverage = $this->getObjectValue($merger, 'coverage'); + assert($coverage instanceof CodeCoverage); $this->assertInstanceOf(CodeCoverage::class, $coverage); @@ -72,15 +75,15 @@ public function testSimpleMerge() * * @requires function \SebastianBergmann\CodeCoverage\CodeCoverage::merge */ - public function testSimpleMergeLimited() + public function testSimpleMergeLimited(): void { - $firstFile = PARATEST_ROOT . DS . 'src' . DS . 'Logging' . DS . 'LogInterpreter.php'; + $firstFile = PARATEST_ROOT . DS . 'src' . DS . 'Logging' . DS . 'LogInterpreter.php'; $secondFile = PARATEST_ROOT . DS . 'src' . DS . 'Logging' . DS . 'MetaProvider.php'; // Every time the two above files are changed, the line numbers // may change, and so these two numbers may need adjustments - $firstFileFirstLine = 40; - $secondFileFirstLine = 48; + $firstFileFirstLine = 46; + $secondFileFirstLine = 47; $filter = new Filter(); $filter->addFilesToWhitelist([$firstFile, $secondFile]); @@ -104,8 +107,8 @@ public function testSimpleMergeLimited() $this->call($merger, 'addCoverage', $coverage1); $this->call($merger, 'addCoverage', $coverage2); - /** @var CodeCoverage $coverage */ $coverage = $this->getObjectValue($merger, 'coverage'); + assert($coverage instanceof CodeCoverage); $this->assertInstanceOf(CodeCoverage::class, $coverage); $data = $coverage->getData(); diff --git a/test/Unit/Logging/JUnit/ReaderTest.php b/test/Unit/Logging/JUnit/ReaderTest.php index 3c7a9fe..a17cd6a 100644 --- a/test/Unit/Logging/JUnit/ReaderTest.php +++ b/test/Unit/Logging/JUnit/ReaderTest.php @@ -4,10 +4,16 @@ namespace ParaTest\Tests\Unit\Logging\JUnit; +use InvalidArgumentException; use ParaTest\Logging\JUnit\Reader; +use ParaTest\Tests\TestBase; use PHPUnit\Framework\ExpectationFailedException; +use stdClass; -class ReaderTest extends \ParaTest\Tests\TestBase +use function file_get_contents; +use function file_put_contents; + +class ReaderTest extends TestBase { protected $mixedPath; protected $mixed; @@ -17,29 +23,29 @@ class ReaderTest extends \ParaTest\Tests\TestBase public function setUp(): void { - $this->mixedPath = FIXTURES . DS . 'results' . DS . 'mixed-results.xml'; - $this->mixed = new Reader($this->mixedPath); - $single = FIXTURES . DS . 'results' . DS . 'single-wfailure.xml'; - $this->single = new Reader($single); - $empty = FIXTURES . DS . 'results' . DS . 'empty-test-suite.xml'; - $this->empty = new Reader($empty); - $multi_errors = FIXTURES . DS . 'results' . DS . 'multiple-errors-with-system-out.xml'; + $this->mixedPath = FIXTURES . DS . 'results' . DS . 'mixed-results.xml'; + $this->mixed = new Reader($this->mixedPath); + $single = FIXTURES . DS . 'results' . DS . 'single-wfailure.xml'; + $this->single = new Reader($single); + $empty = FIXTURES . DS . 'results' . DS . 'empty-test-suite.xml'; + $this->empty = new Reader($empty); + $multi_errors = FIXTURES . DS . 'results' . DS . 'multiple-errors-with-system-out.xml'; $this->multi_errors = new Reader($multi_errors); } - public function testInvalidPathThrowsException() + public function testInvalidPathThrowsException(): void { - $this->expectException(\InvalidArgumentException::class); + $this->expectException(InvalidArgumentException::class); $reader = new Reader('/path/to/nowhere'); } - public function testIsSingleSuiteReturnsTrueForSingleSuite() + public function testIsSingleSuiteReturnsTrueForSingleSuite(): void { $this->assertTrue($this->single->isSingleSuite()); } - public function testIsSingleSuiteReturnsFalseForMultipleSuites() + public function testIsSingleSuiteReturnsFalseForMultipleSuites(): void { $this->assertFalse($this->mixed->isSingleSuite()); } @@ -59,9 +65,9 @@ public function testMixedSuiteShouldConstructRootSuite() } /** - * @depends testMixedSuiteShouldConstructRootSuite - * * @param mixed $suite + * + * @depends testMixedSuiteShouldConstructRootSuite */ public function testMixedSuiteConstructsChildSuites($suite) { @@ -82,11 +88,11 @@ public function testMixedSuiteConstructsChildSuites($suite) } /** - * @depends testMixedSuiteConstructsChildSuites - * * @param mixed $suite + * + * @depends testMixedSuiteConstructsChildSuites */ - public function testMixedSuiteConstructsTestCases($suite) + public function testMixedSuiteConstructsTestCases($suite): void { $this->assertCount(3, $suite->cases); $first = $suite->cases[0]; @@ -101,30 +107,30 @@ public function testMixedSuiteConstructsTestCases($suite) $this->assertEquals('0.001760', $first->time); } - public function testMixedSuiteCasesLoadFailures() + public function testMixedSuiteCasesLoadFailures(): void { $suites = $this->mixed->getSuites(); - $case = $suites[0]->suites[0]->cases[1]; + $case = $suites[0]->suites[0]->cases[1]; $this->assertCount(1, $case->failures); $failure = $case->failures[0]; $this->assertEquals(ExpectationFailedException::class, $failure['type']); $this->assertEquals( "UnitTestWithClassAnnotationTest::testFalsehood\nFailed asserting that true is false.\n\n" . - "/home/brian/Projects/parallel-phpunit/test/fixtures/tests/UnitTestWithClassAnnotationTest.php:20", + '/home/brian/Projects/parallel-phpunit/test/fixtures/tests/UnitTestWithClassAnnotationTest.php:20', $failure['text'] ); } - public function testMixedSuiteCasesLoadErrors() + public function testMixedSuiteCasesLoadErrors(): void { $suites = $this->mixed->getSuites(); - $case = $suites[0]->suites[1]->cases[0]; + $case = $suites[0]->suites[1]->cases[0]; $this->assertCount(1, $case->errors); $error = $case->errors[0]; $this->assertEquals('Exception', $error['type']); $this->assertEquals( "UnitTestWithErrorTest::testTruth\nException: Error!!!\n\n" . - "/home/brian/Projects/parallel-phpunit/test/fixtures/tests/UnitTestWithErrorTest.php:12", + '/home/brian/Projects/parallel-phpunit/test/fixtures/tests/UnitTestWithErrorTest.php:12', $error['text'] ); } @@ -148,21 +154,21 @@ public function testSingleSuiteShouldConstructRootSuite() } /** - * @depends testSingleSuiteShouldConstructRootSuite - * * @param mixed $suite + * + * @depends testSingleSuiteShouldConstructRootSuite */ - public function testSingleSuiteShouldHaveNoChildSuites($suite) + public function testSingleSuiteShouldHaveNoChildSuites($suite): void { $this->assertCount(0, $suite->suites); } /** - * @depends testSingleSuiteShouldConstructRootSuite - * * @param mixed $suite + * + * @depends testSingleSuiteShouldConstructRootSuite */ - public function testSingleSuiteConstructsTestCases($suite) + public function testSingleSuiteConstructsTestCases($suite): void { $this->assertCount(3, $suite->cases); $first = $suite->cases[0]; @@ -177,21 +183,21 @@ public function testSingleSuiteConstructsTestCases($suite) $this->assertEquals('0.001632', $first->time); } - public function testSingleSuiteCasesLoadFailures() + public function testSingleSuiteCasesLoadFailures(): void { $suites = $this->single->getSuites(); - $case = $suites[0]->cases[1]; + $case = $suites[0]->cases[1]; $this->assertCount(1, $case->failures); $failure = $case->failures[0]; $this->assertEquals(ExpectationFailedException::class, $failure['type']); $this->assertEquals( "UnitTestWithMethodAnnotationsTest::testFalsehood\nFailed asserting that true is false.\n\n" . - "/home/brian/Projects/parallel-phpunit/test/fixtures/tests/UnitTestWithMethodAnnotationsTest.php:18", + '/home/brian/Projects/parallel-phpunit/test/fixtures/tests/UnitTestWithMethodAnnotationsTest.php:18', $failure['text'] ); } - public function testEmptySuiteConstructsTestCase() + public function testEmptySuiteConstructsTestCase(): void { $suites = $this->empty->getSuites(); $this->assertCount(1, $suites); @@ -206,7 +212,7 @@ public function testEmptySuiteConstructsTestCase() $this->assertEquals(0, $suite->time); } - public function testMixedGetTotals() + public function testMixedGetTotals(): void { $this->assertEquals(7, $this->mixed->getTotalTests()); $this->assertEquals(6, $this->mixed->getTotalAssertions()); @@ -215,7 +221,7 @@ public function testMixedGetTotals() $this->assertEquals(0.007625, $this->mixed->getTotalTime()); } - public function testSingleGetTotals() + public function testSingleGetTotals(): void { $this->assertEquals(3, $this->single->getTotalTests()); $this->assertEquals(3, $this->single->getTotalAssertions()); @@ -224,41 +230,41 @@ public function testSingleGetTotals() $this->assertEquals(0.005895, $this->single->getTotalTime()); } - public function testMixedGetFailureMessages() + public function testMixedGetFailureMessages(): void { $failures = $this->mixed->getFailures(); $this->assertCount(2, $failures); $this->assertEquals( "UnitTestWithClassAnnotationTest::testFalsehood\nFailed asserting that true is false.\n\n" . - "/home/brian/Projects/parallel-phpunit/test/fixtures/tests/UnitTestWithClassAnnotationTest.php:20", + '/home/brian/Projects/parallel-phpunit/test/fixtures/tests/UnitTestWithClassAnnotationTest.php:20', $failures[0] ); $this->assertEquals( "UnitTestWithMethodAnnotationsTest::testFalsehood\nFailed asserting that true is false." . "\n\n/home/brian/Projects/parallel-phpunit/test/fixtures/tests/UnitTestWithMethodAnnotationsTest." . - "php:18", + 'php:18', $failures[1] ); } - public function testMixedGetErrorMessages() + public function testMixedGetErrorMessages(): void { $errors = $this->mixed->getErrors(); $this->assertCount(1, $errors); $this->assertEquals( "UnitTestWithErrorTest::testTruth\nException: Error!!!\n\n" . - "/home/brian/Projects/parallel-phpunit/test/fixtures/tests/UnitTestWithErrorTest.php:12", + '/home/brian/Projects/parallel-phpunit/test/fixtures/tests/UnitTestWithErrorTest.php:12', $errors[0] ); } - public function testSingleGetMessages() + public function testSingleGetMessages(): void { $failures = $this->single->getFailures(); $this->assertCount(1, $failures); $this->assertEquals( "UnitTestWithMethodAnnotationsTest::testFalsehood\nFailed asserting that true is false.\n\n" . - "/home/brian/Projects/parallel-phpunit/test/fixtures/tests/UnitTestWithMethodAnnotationsTest.php:18", + '/home/brian/Projects/parallel-phpunit/test/fixtures/tests/UnitTestWithMethodAnnotationsTest.php:18', $failures[0] ); } @@ -266,7 +272,7 @@ public function testSingleGetMessages() /** * https://github.com/paratestphp/paratest/issues/352 */ - public function testGetMultiErrorsMessages() + public function testGetMultiErrorsMessages(): void { $errors = $this->multi_errors->getErrors(); $this->assertCount(2, $errors); @@ -274,30 +280,30 @@ public function testGetMultiErrorsMessages() "Risky Test\n" . "/project/vendor/phpunit/phpunit/src/TextUI/Command.php:200\n" . "/project/vendor/phpunit/phpunit/src/TextUI/Command.php:159\n" . - "Custom error log on result test with multiple errors!", + 'Custom error log on result test with multiple errors!', $errors[0] ); $this->assertEquals( "Risky Test\n" . "/project/vendor/phpunit/phpunit/src/TextUI/Command.php:200\n" . "/project/vendor/phpunit/phpunit/src/TextUI/Command.php:159\n" . - "Custom error log on result test with multiple errors!", + 'Custom error log on result test with multiple errors!', $errors[1] ); } - public function testMixedGetFeedback() + public function testMixedGetFeedback(): void { - $totalCases = 7; + $totalCases = 7; $casesProcessed = 0; - $feedback = $this->mixed->getFeedback($totalCases, $casesProcessed); + $feedback = $this->mixed->getFeedback($totalCases, $casesProcessed); $this->assertEquals(['.', 'F', '.', 'E', '.', 'F', '.'], $feedback); } - public function testRemoveLog() + public function testRemoveLog(): void { $contents = file_get_contents($this->mixedPath); - $tmp = FIXTURES . DS . 'results' . DS . 'dummy.xml'; + $tmp = FIXTURES . DS . 'results' . DS . 'dummy.xml'; file_put_contents($tmp, $contents); $reader = new Reader($tmp); $reader->removeLog(); @@ -307,27 +313,27 @@ public function testRemoveLog() /** * Extraction of log from xml file to use in test of validation "SystemOut" result. * - * @return \stdClass $log + * @return stdClass $log */ - public static function extractLog() + public static function extractLog(): stdClass { - $log = new \stdClass(); - $result = FIXTURES . DS . 'results' . DS . 'mixed-results-with-system-out.xml'; - $node = new Reader($result); + $log = new stdClass(); + $result = FIXTURES . DS . 'results' . DS . 'mixed-results-with-system-out.xml'; + $node = new Reader($result); $log->failure = $node->getSuites()[0]->suites[0]->cases[1]->failures[0]['text']; - $log->error = $node->getSuites()[0]->suites[1]->cases[0]->errors[0]['text']; + $log->error = $node->getSuites()[0]->suites[1]->cases[0]->errors[0]['text']; return $log; } - public function testResultWithSystemOut() + public function testResultWithSystemOut(): void { - $customLog = "\nCustom error log on result test with "; - $result = FIXTURES . DS . 'results' . DS . 'mixed-results-with-system-out.xml'; - $failLog = self::extractLog()->failure . $customLog . 'failure!'; - $errorLog = self::extractLog()->error . $customLog . 'error!'; - $node = new Reader($result); - $resultFail = $node->getSuites()[0]->suites[2]->cases[1]->failures[0]['text']; + $customLog = "\nCustom error log on result test with "; + $result = FIXTURES . DS . 'results' . DS . 'mixed-results-with-system-out.xml'; + $failLog = self::extractLog()->failure . $customLog . 'failure!'; + $errorLog = self::extractLog()->error . $customLog . 'error!'; + $node = new Reader($result); + $resultFail = $node->getSuites()[0]->suites[2]->cases[1]->failures[0]['text']; $resultError = $node->getSuites()[0]->suites[1]->cases[1]->errors[0]['text']; $this->assertEquals($failLog, $resultFail); diff --git a/test/Unit/Logging/JUnit/WriterTest.php b/test/Unit/Logging/JUnit/WriterTest.php index 21ec331..a555cf7 100644 --- a/test/Unit/Logging/JUnit/WriterTest.php +++ b/test/Unit/Logging/JUnit/WriterTest.php @@ -7,8 +7,13 @@ use ParaTest\Logging\JUnit\Reader; use ParaTest\Logging\JUnit\Writer; use ParaTest\Logging\LogInterpreter; +use ParaTest\Tests\TestBase; -class WriterTest extends \ParaTest\Tests\TestBase +use function file_exists; +use function file_get_contents; +use function unlink; + +class WriterTest extends TestBase { protected $writer; @@ -19,11 +24,11 @@ class WriterTest extends \ParaTest\Tests\TestBase public function setUp(): void { $this->interpreter = new LogInterpreter(); - $this->writer = new Writer($this->interpreter, 'test/fixtures/tests/'); - $this->passing = FIXTURES . DS . 'results' . DS . 'single-passing.xml'; + $this->writer = new Writer($this->interpreter, 'test/fixtures/tests/'); + $this->passing = FIXTURES . DS . 'results' . DS . 'single-passing.xml'; } - public function testConstructor() + public function testConstructor(): void { $this->assertInstanceOf( LogInterpreter::class, @@ -32,45 +37,47 @@ public function testConstructor() $this->assertEquals('test/fixtures/tests/', $this->writer->getName()); } - public function testSingleFileLog() + public function testSingleFileLog(): void { $this->addPassingReader(); $xml = $this->writer->getXml(); $this->assertXmlStringEqualsXmlString(file_get_contents($this->passing), $xml); } - public function testMixedFileLog() + public function testMixedFileLog(): void { - $mixed = FIXTURES . DS . 'results' . DS . 'mixed-results.xml'; + $mixed = FIXTURES . DS . 'results' . DS . 'mixed-results.xml'; $reader = new Reader($mixed); $this->interpreter->addReader($reader); $writer = new Writer($this->interpreter, 'test/fixtures/tests/'); - $xml = $writer->getXml(); + $xml = $writer->getXml(); $this->assertXmlStringEqualsXmlString(file_get_contents($mixed), $xml); } - public function testDataProviderWithSpecialCharacters() + public function testDataProviderWithSpecialCharacters(): void { - $mixed = FIXTURES . DS . 'results' . DS . 'data-provider-with-special-chars.xml'; + $mixed = FIXTURES . DS . 'results' . DS . 'data-provider-with-special-chars.xml'; $reader = new Reader($mixed); $this->interpreter->addReader($reader); $writer = new Writer($this->interpreter, 'test/fixtures/tests/'); - $xml = $writer->getXml(); + $xml = $writer->getXml(); $this->assertXmlStringEqualsXmlString(file_get_contents($mixed), $xml); } - public function testWrite() + public function testWrite(): void { $output = FIXTURES . DS . 'logs' . DS . 'passing.xml'; $this->addPassingReader(); $this->writer->write($output); $this->assertXmlStringEqualsXmlString(file_get_contents($this->passing), file_get_contents($output)); - if (file_exists($output)) { - unlink($output); + if (! file_exists($output)) { + return; } + + unlink($output); } - protected function addPassingReader() + protected function addPassingReader(): void { $reader = new Reader($this->passing); $this->interpreter->addReader($reader); @@ -80,13 +87,13 @@ protected function addPassingReader() * Empty line attributes, e.g. line="" breaks Jenkins parsing since it needs to be an integer. * To repair, ensure that empty line attributes are actually written as 0 instead of empty string. */ - public function testThatEmptyLineAttributesConvertToZero() + public function testThatEmptyLineAttributesConvertToZero(): void { - $mixed = FIXTURES . DS . 'results' . DS . 'junit-example-result.xml'; + $mixed = FIXTURES . DS . 'results' . DS . 'junit-example-result.xml'; $reader = new Reader($mixed); $this->interpreter->addReader($reader); $writer = new Writer($this->interpreter, 'test/fixtures/tests/'); - $xml = $writer->getXml(); + $xml = $writer->getXml(); $this->assertStringNotContainsString( 'line=""', diff --git a/test/Unit/Logging/LogInterpreterTest.php b/test/Unit/Logging/LogInterpreterTest.php index 303e110..ac2aeaa 100644 --- a/test/Unit/Logging/LogInterpreterTest.php +++ b/test/Unit/Logging/LogInterpreterTest.php @@ -8,6 +8,8 @@ use ParaTest\Logging\LogInterpreter; use ParaTest\Tests\Unit\ResultTester; +use function array_pop; + class LogInterpreterTest extends ResultTester { protected $interpreter; @@ -21,27 +23,27 @@ public function setUp(): void ->addReader($this->getReader('passingSuite')); } - public function testConstructor() + public function testConstructor(): void { $interpreter = new LogInterpreter(); $this->assertEquals([], $this->getObjectValue($interpreter, 'readers')); } - public function testAddReaderIncrementsReaders() + public function testAddReaderIncrementsReaders(): void { $reader = $this->getMockReader(); $this->interpreter->addReader($reader); $this->assertCount(3, $this->getObjectValue($this->interpreter, 'readers')); } - public function testAddReaderReturnsSelf() + public function testAddReaderReturnsSelf(): void { $reader = $this->getMockReader(); - $self = $this->interpreter->addReader($reader); + $self = $this->interpreter->addReader($reader); $this->assertSame($self, $this->interpreter); } - public function testGetReaders() + public function testGetReaders(): void { $reader = $this->getMockReader(); $this->interpreter->addReader($reader); @@ -51,82 +53,82 @@ public function testGetReaders() $this->assertSame($reader, $last); } - public function testGetTotalTests() + public function testGetTotalTests(): void { $this->assertEquals(10, $this->interpreter->getTotalTests()); } - public function testGetTotalAssertions() + public function testGetTotalAssertions(): void { $this->assertEquals(9, $this->interpreter->getTotalAssertions()); } - public function testGetTotalFailures() + public function testGetTotalFailures(): void { $this->assertEquals(2, $this->interpreter->getTotalFailures()); } - public function testGetTotalErrors() + public function testGetTotalErrors(): void { $this->assertEquals(1, $this->interpreter->getTotalErrors()); } - public function testIsSuccessfulReturnsFalseIfFailuresPresentAndNoErrors() + public function testIsSuccessfulReturnsFalseIfFailuresPresentAndNoErrors(): void { $interpreter = new LogInterpreter(); $interpreter->addReader($this->getReader('failureSuite')); $this->assertFalse($interpreter->isSuccessful()); } - public function testIsSuccessfulReturnsFalseIfErrorsPresentAndNoFailures() + public function testIsSuccessfulReturnsFalseIfErrorsPresentAndNoFailures(): void { $interpreter = new LogInterpreter(); $interpreter->addReader($this->getReader('errorSuite')); $this->assertFalse($interpreter->isSuccessful()); } - public function testIsSuccessfulReturnsFalseIfErrorsAndFailuresPresent() + public function testIsSuccessfulReturnsFalseIfErrorsAndFailuresPresent(): void { $this->assertFalse($this->interpreter->isSuccessful()); } - public function testIsSuccessfulReturnsTrueIfNoErrorsOrFailures() + public function testIsSuccessfulReturnsTrueIfNoErrorsOrFailures(): void { $interpreter = new LogInterpreter(); $interpreter->addReader($this->getReader('passingSuite')); $this->assertTrue($interpreter->isSuccessful()); } - public function testGetErrorsReturnsArrayOfErrorMessages() + public function testGetErrorsReturnsArrayOfErrorMessages(): void { $errors = [ "UnitTestWithErrorTest::testTruth\nException: Error!!!\n\n/home/brian/Projects/parallel-phpunit/" . - "test/fixtures/tests/UnitTestWithErrorTest.php:12" + 'test/fixtures/tests/UnitTestWithErrorTest.php:12', ]; $this->assertEquals($errors, $this->interpreter->getErrors()); } - public function testGetFailuresReturnsArrayOfFailureMessages() + public function testGetFailuresReturnsArrayOfFailureMessages(): void { $failures = [ "UnitTestWithClassAnnotationTest::testFalsehood\nFailed asserting that true is false.\n\n/" . - "home/brian/Projects/parallel-phpunit/test/fixtures/tests/UnitTestWithClassAnnotationTest.php:20", + 'home/brian/Projects/parallel-phpunit/test/fixtures/tests/UnitTestWithClassAnnotationTest.php:20', "UnitTestWithMethodAnnotationsTest::testFalsehood\nFailed asserting that true is false.\n\n" . - "/home/brian/Projects/parallel-phpunit/test/fixtures/tests/UnitTestWithMethodAnnotationsTest.php:18", + '/home/brian/Projects/parallel-phpunit/test/fixtures/tests/UnitTestWithMethodAnnotationsTest.php:18', ]; $this->assertEquals($failures, $this->interpreter->getFailures()); } - public function testGetCasesReturnsAllCases() + public function testGetCasesReturnsAllCases(): void { $cases = $this->interpreter->getCases(); $this->assertCount(10, $cases); } - public function testGetCasesExtendEmptyCasesFromSuites() + public function testGetCasesExtendEmptyCasesFromSuites(): void { - $interpreter = new LogInterpreter(); + $interpreter = new LogInterpreter(); $dataProviderReader = $this->getReader('dataProviderSuite'); $interpreter->addReader($dataProviderReader); $cases = $interpreter->getCases(); @@ -141,6 +143,7 @@ public function testGetCasesExtendEmptyCasesFromSuites() } else { $this->assertEquals($case->class, 'DataProviderTest'); } + if ($case->name === 'testNumericDataProvider5 with data set #4') { $this->assertEquals( $case->file, @@ -169,11 +172,11 @@ public function testFlattenCasesReturnsCorrectNumberOfSuites() } /** - * @depends testFlattenCasesReturnsCorrectNumberOfSuites - * * @param mixed $suites + * + * @depends testFlattenCasesReturnsCorrectNumberOfSuites */ - public function testFlattenedSuiteHasCorrectTotals($suites) + public function testFlattenedSuiteHasCorrectTotals($suites): void { $first = $suites[0]; $this->assertEquals('UnitTestWithClassAnnotationTest', $first->name); diff --git a/test/Unit/Parser/GetClassTest.php b/test/Unit/Parser/GetClassTest.php index 2dfb7b8..497243f 100644 --- a/test/Unit/Parser/GetClassTest.php +++ b/test/Unit/Parser/GetClassTest.php @@ -6,10 +6,11 @@ use ParaTest\Parser\ParsedClass; use ParaTest\Parser\Parser; +use ParaTest\Tests\TestBase; -class GetClassTest extends \ParaTest\Tests\TestBase +class GetClassTest extends TestBase { - public function testPreviouslyLoadedTestClassCanBeParsed() + public function testPreviouslyLoadedTestClassCanBeParsed(): void { $testFile = $this->fixture('passing-tests/PreviouslyLoadedTest.php'); require_once $testFile; @@ -18,19 +19,19 @@ public function testPreviouslyLoadedTestClassCanBeParsed() $this->assertEquals('PreviouslyLoadedTest', $class->getName()); } - public function testParsedClassHasName() + public function testParsedClassHasName(): void { $class = $this->parseFile($this->fixture('failing-tests/UnitTestWithClassAnnotationTest.php')); $this->assertEquals('Fixtures\\Tests\\UnitTestWithClassAnnotationTest', $class->getName()); } - public function testParsedAnonymousClassNameHasNoNullByte() + public function testParsedAnonymousClassNameHasNoNullByte(): void { $class = $this->parseFile($this->fixture('failing-tests/AnonymousClass.inc')); $this->assertStringNotContainsString("\x00", $class->getName()); } - public function testParsedClassHasDocBlock() + public function testParsedClassHasDocBlock(): void { $class = $this->parseFile($this->fixture('failing-tests/UnitTestWithClassAnnotationTest.php')); $this->assertEquals('/** @@ -39,19 +40,19 @@ public function testParsedClassHasDocBlock() */', $class->getDocBlock()); } - public function testParsedClassHasNamespace() + public function testParsedClassHasNamespace(): void { $class = $this->parseFile($this->fixture('failing-tests/UnitTestWithClassAnnotationTest.php')); $this->assertEquals('Fixtures\\Tests', $class->getNamespace()); } - public function testParsedClassHasCorrectNumberOfTestMethods() + public function testParsedClassHasCorrectNumberOfTestMethods(): void { $class = $this->parseFile($this->fixture('failing-tests/UnitTestWithClassAnnotationTest.php')); $this->assertCount(4, $class->getMethods()); } - public function testParsedClassWithParentHasCorrectNumberOfTestMethods() + public function testParsedClassWithParentHasCorrectNumberOfTestMethods(): void { $class = $this->parseFile($this->fixture('failing-tests/UnitTestWithErrorTest.php')); $this->assertCount(4, $class->getMethods()); @@ -61,10 +62,8 @@ public function testParsedClassWithParentHasCorrectNumberOfTestMethods() * Parses a test case and returns the test class. * * @param mixed $path - * - * @return ParsedClass */ - protected function parseFile($path) + protected function parseFile($path): ParsedClass { $parser = new Parser($path); diff --git a/test/Unit/Parser/ParsedClassTest.php b/test/Unit/Parser/ParsedClassTest.php index 1375e85..e016cd1 100644 --- a/test/Unit/Parser/ParsedClassTest.php +++ b/test/Unit/Parser/ParsedClassTest.php @@ -6,8 +6,9 @@ use ParaTest\Parser\ParsedClass; use ParaTest\Parser\ParsedFunction; +use ParaTest\Tests\TestBase; -class ParsedClassTest extends \ParaTest\Tests\TestBase +class ParsedClassTest extends TestBase { protected $class; protected $methods; @@ -31,31 +32,31 @@ public function setUp(): void ), new ParsedFunction('', 'public', 'testFunction3'), ]; - $this->class = new ParsedClass('', 'MyTestClass', '', $this->methods); + $this->class = new ParsedClass('', 'MyTestClass', '', $this->methods); } - public function testGetMethodsReturnsMethods() + public function testGetMethodsReturnsMethods(): void { $this->assertEquals($this->methods, $this->class->getMethods()); } - public function testGetMethodsMultipleAnnotationsReturnsMethods() + public function testGetMethodsMultipleAnnotationsReturnsMethods(): void { - $goodMethod = new ParsedFunction( + $goodMethod = new ParsedFunction( '/** * @group group1 */', 'public', 'testFunction' ); - $goodMethod2 = new ParsedFunction( + $goodMethod2 = new ParsedFunction( '/** * @group group2 */', 'public', 'testFunction2' ); - $badMethod = new ParsedFunction( + $badMethod = new ParsedFunction( '/** * @group group3 */', @@ -63,11 +64,11 @@ public function testGetMethodsMultipleAnnotationsReturnsMethods() 'testFunction2' ); $annotatedClass = new ParsedClass('', 'MyTestClass', '', [$goodMethod, $goodMethod2, $badMethod]); - $methods = $annotatedClass->getMethods(['group' => 'group1,group2']); + $methods = $annotatedClass->getMethods(['group' => 'group1,group2']); $this->assertEquals([$goodMethod, $goodMethod2], $methods); } - public function testGetMethodsExceptsAdditionalAnnotationFilter() + public function testGetMethodsExceptsAdditionalAnnotationFilter(): void { $group1 = $this->class->getMethods(['group' => 'group1']); $this->assertCount(1, $group1); diff --git a/test/Unit/Parser/ParsedObjectTest.php b/test/Unit/Parser/ParsedObjectTest.php index cd1a4f0..fb61a27 100644 --- a/test/Unit/Parser/ParsedObjectTest.php +++ b/test/Unit/Parser/ParsedObjectTest.php @@ -5,8 +5,9 @@ namespace ParaTest\Tests\Unit\Parser; use ParaTest\Parser\ParsedClass; +use ParaTest\Tests\TestBase; -class ParsedObjectTest extends \ParaTest\Tests\TestBase +class ParsedObjectTest extends TestBase { protected $parsedClass; @@ -15,25 +16,25 @@ public function setUp(): void $this->parsedClass = new ParsedClass("/**\n * @test\n @group group1\n*\/", 'MyClass', 'My\\Name\\Space'); } - public function testHasAnnotationReturnsTrueWhenAnnotationPresent() + public function testHasAnnotationReturnsTrueWhenAnnotationPresent(): void { $hasAnnotation = $this->parsedClass->hasAnnotation('test'); $this->assertTrue($hasAnnotation); } - public function testHasAnnotationReturnsFalseWhenAnnotationNotPresent() + public function testHasAnnotationReturnsFalseWhenAnnotationNotPresent(): void { $hasAnnotation = $this->parsedClass->hasAnnotation('pizza'); $this->assertFalse($hasAnnotation); } - public function testHasAnnotationReturnsTrueWhenAnnotationAndValueMatch() + public function testHasAnnotationReturnsTrueWhenAnnotationAndValueMatch(): void { $hasAnnotation = $this->parsedClass->hasAnnotation('group', 'group1'); $this->assertTrue($hasAnnotation); } - public function testHasAnnotationReturnsFalseWhenAnnotationAndValueDontMatch() + public function testHasAnnotationReturnsFalseWhenAnnotationAndValueDontMatch(): void { $hasAnnotation = $this->parsedClass->hasAnnotation('group', 'group2'); $this->assertFalse($hasAnnotation); diff --git a/test/Unit/Parser/ParserTest.php b/test/Unit/Parser/ParserTest.php index ba9656c..3fde825 100644 --- a/test/Unit/Parser/ParserTest.php +++ b/test/Unit/Parser/ParserTest.php @@ -4,36 +4,39 @@ namespace ParaTest\Tests\Unit\Parser; +use InvalidArgumentException; +use ParaTest\Parser\NoClassInFileException; use ParaTest\Parser\Parser; +use ParaTest\Tests\TestBase; -class ParserTest extends \ParaTest\Tests\TestBase +class ParserTest extends TestBase { - public function testConstructorThrowsExceptionIfFileNotFound() + public function testConstructorThrowsExceptionIfFileNotFound(): void { - $this->expectException(\InvalidArgumentException::class); + $this->expectException(InvalidArgumentException::class); $parser = new Parser('/path/to/nowhere'); } - public function testConstructorThrowsExceptionIfClassNotFoundInFile() + public function testConstructorThrowsExceptionIfClassNotFoundInFile(): void { - $this->expectException(\ParaTest\Parser\NoClassInFileException::class); + $this->expectException(NoClassInFileException::class); $fileWithoutAClass = FIXTURES . DS . 'chdirBootstrap.php'; - $parser = new Parser($fileWithoutAClass); + $parser = new Parser($fileWithoutAClass); } - public function testPrefersClassByFileName() + public function testPrefersClassByFileName(): void { $filename = FIXTURES . DS . 'special-classes' . DS . 'SomeNamespace' . DS . 'ParserTestClass.php'; - $parser = new Parser($filename); + $parser = new Parser($filename); $this->assertEquals('SomeNamespace\\ParserTestClass', $parser->getClass()->getName()); } - public function testClassFallsBackOnExisting() + public function testClassFallsBackOnExisting(): void { $filename = FIXTURES . DS . 'special-classes' . DS . 'NameDoesNotMatch.php'; - $parser = new Parser($filename); + $parser = new Parser($filename); $this->assertEquals('ParserTestClassFallsBack', $parser->getClass()->getName()); } } diff --git a/test/Unit/ResultTester.php b/test/Unit/ResultTester.php index 1e15a46..fbe1e4d 100644 --- a/test/Unit/ResultTester.php +++ b/test/Unit/ResultTester.php @@ -6,8 +6,9 @@ use ParaTest\Parser\ParsedFunction; use ParaTest\Runners\PHPUnit\Suite; +use ParaTest\Tests\TestBase; -abstract class ResultTester extends \ParaTest\Tests\TestBase +abstract class ResultTester extends TestBase { protected $errorSuite; protected $failureSuite; @@ -18,21 +19,22 @@ abstract class ResultTester extends \ParaTest\Tests\TestBase public function setUp(): void { - $this->errorSuite = $this->getSuiteWithResult('single-werror.xml', 1); - $this->otherErrorSuite = $this->getSuiteWithResult('single-werror2.xml', 1); - $this->failureSuite = $this->getSuiteWithResult('single-wfailure.xml', 3); - $this->mixedSuite = $this->getSuiteWithResult('mixed-results.xml', 7); - $this->passingSuite = $this->getSuiteWithResult('single-passing.xml', 3); + $this->errorSuite = $this->getSuiteWithResult('single-werror.xml', 1); + $this->otherErrorSuite = $this->getSuiteWithResult('single-werror2.xml', 1); + $this->failureSuite = $this->getSuiteWithResult('single-wfailure.xml', 3); + $this->mixedSuite = $this->getSuiteWithResult('mixed-results.xml', 7); + $this->passingSuite = $this->getSuiteWithResult('single-passing.xml', 3); $this->dataProviderSuite = $this->getSuiteWithResult('data-provider-result.xml', 50); } public function getSuiteWithResult($result, $methodCount) { - $result = FIXTURES . DS . 'results' . DS . $result; + $result = FIXTURES . DS . 'results' . DS . $result; $functions = []; for ($i = 0; $i < $methodCount; ++$i) { $functions[] = $this->mockFunction($i); } + $suite = new Suite('', $functions); $suite->setTempFile($result); diff --git a/test/Unit/Runners/PHPUnit/ConfigurationTest.php b/test/Unit/Runners/PHPUnit/ConfigurationTest.php index a96000a..682e8fa 100644 --- a/test/Unit/Runners/PHPUnit/ConfigurationTest.php +++ b/test/Unit/Runners/PHPUnit/ConfigurationTest.php @@ -4,27 +4,32 @@ namespace ParaTest\Tests\Unit\Runners\PHPUnit; +use Exception; use ParaTest\Runners\PHPUnit\Configuration; use ParaTest\Runners\PHPUnit\SuitePath; +use ParaTest\Tests\TestBase; +use Throwable; -class ConfigurationTest extends \ParaTest\Tests\TestBase +use function getcwd; +use function getenv; +use function libxml_disable_entity_loader; +use function putenv; +use function realpath; + +class ConfigurationTest extends TestBase { - /** - * @var string - */ + /** @var string */ protected $path; - /** - * @var Configuration - */ + /** @var Configuration */ protected $config; public function setUp(): void { - $this->path = realpath(PARATEST_ROOT . '/phpunit.xml.dist'); + $this->path = realpath(PARATEST_ROOT . '/phpunit.xml.dist'); $this->config = new Configuration($this->path); } - public function testToStringReturnsPath() + public function testToStringReturnsPath(): void { $this->assertEquals($this->path, (string) $this->config); } @@ -37,7 +42,7 @@ public function testGetSuitesShouldReturnCorrectNumberOfSuites() return $suites; } - public function testHasSuites() + public function testHasSuites(): void { $actual = $this->config->hasSuites(); $this->assertTrue($actual); @@ -45,7 +50,7 @@ public function testHasSuites() public function testGlobbingSupport() { - $basePath = getcwd() . DS; + $basePath = getcwd() . DS; $configuration = new Configuration($this->fixture('phpunit-globbing.xml')); /** @var SuitePath[][] $suites */ $suites = $configuration->getSuites(); @@ -62,9 +67,9 @@ public function testGlobbingSupport() } /** - * @depends testGetSuitesShouldReturnCorrectNumberOfSuites - * * @param mixed $suites + * + * @depends testGetSuitesShouldReturnCorrectNumberOfSuites */ public function testSuitesContainSuiteNameAtKey($suites) { @@ -75,13 +80,13 @@ public function testSuitesContainSuiteNameAtKey($suites) } /** - * @depends testSuitesContainSuiteNameAtKey - * * @param mixed $suites + * + * @depends testSuitesContainSuiteNameAtKey */ - public function testSuitesContainPathAsValue($suites) + public function testSuitesContainPathAsValue($suites): void { - $basePath = getcwd() . DS; + $basePath = getcwd() . DS; $unitSuite = $suites['ParaTest Unit Tests']; $this->assertIsArray($unitSuite); $this->assertCount(1, $unitSuite); @@ -96,7 +101,7 @@ public function testSuitesContainPathAsValue($suites) $this->assertEquals($basePath . 'test' . DS . 'Functional', $functionalSuitePath->getPath()); } - public function testGetEnvironmentVariables() + public function testGetEnvironmentVariables(): void { $this->assertCount(4, $this->config->getEnvironmentVariables()); $this->assertArrayHasKey('APP_ENV', $this->config->getEnvironmentVariables()); @@ -108,14 +113,14 @@ public function testGetEnvironmentVariables() $this->assertCount(0, $config->getEnvironmentVariables()); } - public function testLoadConfigEvenIfLibXmlEntityLoaderIsDisabled() + public function testLoadConfigEvenIfLibXmlEntityLoaderIsDisabled(): void { $before = libxml_disable_entity_loader(); - $e = null; + $e = null; try { $this->config = new Configuration($this->path); - } catch (\Exception $exc) { + } catch (Throwable $exc) { $e = $exc; } @@ -123,18 +128,18 @@ public function testLoadConfigEvenIfLibXmlEntityLoaderIsDisabled() $this->assertNull( $e, - 'Could not instantiate Configuration: ' . ($e instanceof \Exception ? $e->getMessage() : 'no error given') + 'Could not instantiate Configuration: ' . ($e instanceof Exception ? $e->getMessage() : 'no error given') ); } - public function testLoadedEnvironmentVariablesWillNotBeOverwritten() + public function testLoadedEnvironmentVariablesWillNotBeOverwritten(): void { - \putenv('DB_CONNECTION=mysql'); - \putenv('DB_DATABASE=localhost'); + putenv('DB_CONNECTION=mysql'); + putenv('DB_DATABASE=localhost'); $config = new Configuration(realpath(__DIR__ . '/phpunit.xml.dist')); - $this->assertSame('mysql', \getenv('DB_CONNECTION')); - $this->assertSame('localhost', \getenv('DB_DATABASE')); + $this->assertSame('mysql', getenv('DB_CONNECTION')); + $this->assertSame('localhost', getenv('DB_DATABASE')); } } diff --git a/test/Unit/Runners/PHPUnit/ExecutableTestChild.php b/test/Unit/Runners/PHPUnit/ExecutableTestChild.php index acc9a7b..d6494e6 100644 --- a/test/Unit/Runners/PHPUnit/ExecutableTestChild.php +++ b/test/Unit/Runners/PHPUnit/ExecutableTestChild.php @@ -10,8 +10,6 @@ class ExecutableTestChild extends ExecutableTest { /** * Get the expected count of tests to be executed. - * - * @return int */ public function getTestCount(): int { diff --git a/test/Unit/Runners/PHPUnit/ExecutableTestTest.php b/test/Unit/Runners/PHPUnit/ExecutableTestTest.php index bac4b6b..f85d571 100644 --- a/test/Unit/Runners/PHPUnit/ExecutableTestTest.php +++ b/test/Unit/Runners/PHPUnit/ExecutableTestTest.php @@ -4,13 +4,18 @@ namespace ParaTest\Tests\Unit\Runners\PHPUnit; +use ParaTest\Tests\TestBase; use Symfony\Component\Process\PhpExecutableFinder; -class ExecutableTestTest extends \ParaTest\Tests\TestBase +use function defined; +use function preg_quote; +use function preg_replace; +use function str_replace; +use function unlink; + +class ExecutableTestTest extends TestBase { - /** - * @var ExecutableTestChild - */ + /** @var ExecutableTestChild */ protected $executableTestChild; public function setUp(): void @@ -19,16 +24,16 @@ public function setUp(): void parent::setUp(); } - public function testConstructor() + public function testConstructor(): void { $this->assertEquals('pathToFile', $this->getObjectValue($this->executableTestChild, 'path')); } - public function testGetCommandStringIncludesPassthruOptions() + public function testGetCommandStringIncludesPassthruOptions(): void { - $options = ['bootstrap' => 'test' . DS . 'bootstrap.php']; - $binary = '/usr/bin/phpunit'; - $passthru = ['--prepend', 'xdebug-filter.php']; + $options = ['bootstrap' => 'test' . DS . 'bootstrap.php']; + $binary = '/usr/bin/phpunit'; + $passthru = ['--prepend', 'xdebug-filter.php']; $passthruPhp = ['-d', 'zend_extension=xdebug.so']; $command = $this->call( @@ -43,21 +48,21 @@ public function testGetCommandStringIncludesPassthruOptions() // '--log-junit' '/tmp/PT_LKnfzA' // is appended by default where PT_LKnfzA is randomly generated - so we remove it from the resulting command if (defined('PHP_WINDOWS_VERSION_BUILD')) { - $command = preg_replace("# --log-junit [^ ]+#", '', $command); + $command = preg_replace('# --log-junit [^ ]+#', '', $command); } else { $command = preg_replace("# '--log-junit' '[^']+?'#", '', $command); } - + // Note: // The pass to the php executable depends on the system, // so we need to keep it flexible in the test - $finder = new PhpExecutableFinder(); + $finder = new PhpExecutableFinder(); $phpExecutable = $finder->find(); - + if (defined('PHP_WINDOWS_VERSION_BUILD')) { $this->assertEquals( "$phpExecutable -d zend_extension=xdebug.so \"/usr/bin/phpunit\" --prepend xdebug-filter.php " . - "--bootstrap test" . DS . "bootstrap.php pathToFile", + '--bootstrap test' . DS . 'bootstrap.php pathToFile', $command ); } else { @@ -69,12 +74,12 @@ public function testGetCommandStringIncludesPassthruOptions() } } - public function testCommandRedirectsCoverage() + public function testCommandRedirectsCoverage(): void { $options = ['a' => 'b', 'coverage-php' => 'target.php']; - $binary = '/usr/bin/phpunit'; + $binary = '/usr/bin/phpunit'; - $command = $this->executableTestChild->command($binary, $options); + $command = $this->executableTestChild->command($binary, $options); $coverageFileName = str_replace('/', '\/', $this->executableTestChild->getCoverageFileName()); if (defined('PHP_WINDOWS_VERSION_BUILD')) { @@ -90,29 +95,29 @@ public function testCommandRedirectsCoverage() } } - public function testHandleEnvironmentVariablesAssignsToken() + public function testHandleEnvironmentVariablesAssignsToken(): void { $environmentVariables = ['TEST_TOKEN' => 3, 'APPLICATION_ENVIRONMENT_VAR' => 'abc']; $this->call($this->executableTestChild, 'handleEnvironmentVariables', $environmentVariables); $this->assertEquals(3, $this->getObjectValue($this->executableTestChild, 'token')); } - public function testGetTokenReturnsValidToken() + public function testGetTokenReturnsValidToken(): void { $this->setObjectValue($this->executableTestChild, 'token', 3); $this->assertEquals(3, $this->executableTestChild->getToken()); } - public function testGetTempFileShouldCreateTempFile() + public function testGetTempFileShouldCreateTempFile(): void { $file = $this->executableTestChild->getTempFile(); $this->assertFileExists($file); unlink($file); } - public function testGetTempFileShouldReturnSameFileIfAlreadyCalled() + public function testGetTempFileShouldReturnSameFileIfAlreadyCalled(): void { - $file = $this->executableTestChild->getTempFile(); + $file = $this->executableTestChild->getTempFile(); $fileAgain = $this->executableTestChild->getTempFile(); $this->assertEquals($file, $fileAgain); unlink($file); diff --git a/test/Unit/Runners/PHPUnit/OptionsTest.php b/test/Unit/Runners/PHPUnit/OptionsTest.php index d93d632..1756da7 100644 --- a/test/Unit/Runners/PHPUnit/OptionsTest.php +++ b/test/Unit/Runners/PHPUnit/OptionsTest.php @@ -5,8 +5,16 @@ namespace ParaTest\Tests\Unit\Runners\PHPUnit; use ParaTest\Runners\PHPUnit\Options; +use ParaTest\Tests\TestBase; -class OptionsTest extends \ParaTest\Tests\TestBase +use function chdir; +use function file_exists; +use function file_put_contents; +use function getcwd; +use function intdiv; +use function unlink; + +class OptionsTest extends TestBase { protected $options; protected $unfiltered; @@ -21,17 +29,17 @@ public function setUp(): void 'group' => 'group1', 'bootstrap' => '/path/to/bootstrap', ]; - $this->options = new Options($this->unfiltered); + $this->options = new Options($this->unfiltered); $this->cleanUpConfigurations(); } - public function testFilteredOptionsShouldContainExtraneousOptions() + public function testFilteredOptionsShouldContainExtraneousOptions(): void { $this->assertEquals('group1', $this->options->filtered['group']); $this->assertEquals('/path/to/bootstrap', $this->options->filtered['bootstrap']); } - public function testFilteredOptionsIsSet() + public function testFilteredOptionsIsSet(): void { $this->assertEquals($this->unfiltered['processes'], $this->options->processes); $this->assertEquals($this->unfiltered['path'], $this->options->path); @@ -40,19 +48,19 @@ public function testFilteredOptionsIsSet() $this->assertEquals([$this->unfiltered['group']], $this->options->groups); } - public function testAnnotationsReturnsAnnotations() + public function testAnnotationsReturnsAnnotations(): void { $this->assertCount(1, $this->options->annotations); $this->assertEquals('group1', $this->options->annotations['group']); } - public function testAnnotationsDefaultsToEmptyArray() + public function testAnnotationsDefaultsToEmptyArray(): void { $options = new Options([]); $this->assertEmpty($options->annotations); } - public function testDefaults() + public function testDefaults(): void { $options = new Options(); $this->assertEquals(Options::getNumberOfCPUCores(), $options->processes); @@ -61,39 +69,39 @@ public function testDefaults() $this->assertFalse($options->functional); } - public function testHalfProcessesMode() + public function testHalfProcessesMode(): void { $options = new Options(['processes' => 'half']); $this->assertEquals(intdiv(Options::getNumberOfCPUCores(), 2), $options->processes); } - public function testConfigurationShouldReturnXmlIfConfigNotSpecifiedAndFileExistsInCwd() + public function testConfigurationShouldReturnXmlIfConfigNotSpecifiedAndFileExistsInCwd(): void { $this->assertConfigurationFileFiltered('phpunit.xml', getcwd()); } - public function testConfigurationShouldReturnXmlDistIfConfigAndXmlNotSpecifiedAndFileExistsInCwd() + public function testConfigurationShouldReturnXmlDistIfConfigAndXmlNotSpecifiedAndFileExistsInCwd(): void { $this->assertConfigurationFileFiltered('phpunit.xml.dist', getcwd()); } - public function testConfigurationShouldReturnSpecifiedConfigurationIfFileExists() + public function testConfigurationShouldReturnSpecifiedConfigurationIfFileExists(): void { $this->assertConfigurationFileFiltered('myconfig.xml', getcwd(), 'myconfig.xml'); } - public function testConfigurationShouldBeSetEvenIfFileDoesNotExist() + public function testConfigurationShouldBeSetEvenIfFileDoesNotExist(): void { - $this->unfiltered['path'] = getcwd(); + $this->unfiltered['path'] = getcwd(); $this->unfiltered['configuration'] = '/path/to/config'; - $options = new Options($this->unfiltered); + $options = new Options($this->unfiltered); $this->assertEquals('/path/to/config', $options->filtered['configuration']->getPath()); } - public function testConfigurationKeyIsNotPresentIfNoConfigGiven() + public function testConfigurationKeyIsNotPresentIfNoConfigGiven(): void { $this->unfiltered['path'] = getcwd(); - $options = new Options($this->unfiltered); + $options = new Options($this->unfiltered); $this->assertArrayNotHasKey('configuration', $options->filtered); } @@ -105,42 +113,45 @@ public function testConfigurationKeyIsNotPresentIfNoConfigGiven() * Performs any cleanup to make sure no config files are * present when a test starts */ - protected function cleanUpConfigurations() + protected function cleanUpConfigurations(): void { chdir(__DIR__); if (file_exists('phpunit.xml')) { unlink('phpunit.xml'); } + if (file_exists('phpunit.xml.dist')) { unlink('phpunit.xml.dist'); } - if (file_exists('myconfig.xml')) { - unlink('myconfig.xml'); + + if (! file_exists('myconfig.xml')) { + return; } + + unlink('myconfig.xml'); } - public function testConfigurationShouldReturnXmlIfConfigSpecifiedAsDirectoryAndFileExists() + public function testConfigurationShouldReturnXmlIfConfigSpecifiedAsDirectoryAndFileExists(): void { $this->assertConfigurationFileFiltered('phpunit.xml', getcwd(), getcwd()); } - public function testConfigurationShouldReturnXmlDistIfConfigSpecifiedAsDirectoryAndFileExists() + public function testConfigurationShouldReturnXmlDistIfConfigSpecifiedAsDirectoryAndFileExists(): void { $this->assertConfigurationFileFiltered('phpunit.xml.dist', getcwd(), getcwd()); } - /** - * @param string $configFileName - * @param string $path - * @param string|null $configurationParameter - */ - private function assertConfigurationFileFiltered($configFileName, $path, $configurationParameter = null) - { + private function assertConfigurationFileFiltered( + string $configFileName, + string $path, + ?string $configurationParameter = null + ): void { file_put_contents($configFileName, ''); $this->unfiltered['path'] = $path; if ($configurationParameter !== null) { $this->unfiltered['configuration'] = $configurationParameter; } + $options = new Options($this->unfiltered); $this->assertEquals(__DIR__ . DS . $configFileName, $options->filtered['configuration']->getPath()); } diff --git a/test/Unit/Runners/PHPUnit/ResultPrinterTest.php b/test/Unit/Runners/PHPUnit/ResultPrinterTest.php index 11e19ee..f7f1f23 100644 --- a/test/Unit/Runners/PHPUnit/ResultPrinterTest.php +++ b/test/Unit/Runners/PHPUnit/ResultPrinterTest.php @@ -6,35 +6,38 @@ use ParaTest\Logging\LogInterpreter; use ParaTest\Parser\ParsedFunction; -use ParaTest\Tests\Unit\ResultTester; use ParaTest\Runners\PHPUnit\Options; use ParaTest\Runners\PHPUnit\ResultPrinter; use ParaTest\Runners\PHPUnit\Suite; use ParaTest\Runners\PHPUnit\TestMethod; +use ParaTest\Tests\Unit\ResultTester; + +use function defined; +use function file_exists; +use function file_put_contents; +use function ob_end_clean; +use function ob_get_clean; +use function ob_start; +use function sprintf; +use function unlink; class ResultPrinterTest extends ResultTester { - /** - * @var ResultPrinter - */ + /** @var ResultPrinter */ protected $printer; - /** - * @var LogInterpreter - */ + /** @var LogInterpreter */ protected $interpreter; - /** - * @var Suite - */ + /** @var Suite */ protected $passingSuiteWithWrongTestCountEstimation; public function setUp(): void { parent::setUp(); $this->interpreter = new LogInterpreter(); - $this->printer = new ResultPrinter($this->interpreter); - $pathToConfig = $this->getPathToConfig(); + $this->printer = new ResultPrinter($this->interpreter); + $pathToConfig = $this->getPathToConfig(); if (file_exists($pathToConfig)) { unlink($pathToConfig); } @@ -42,15 +45,12 @@ public function setUp(): void $this->passingSuiteWithWrongTestCountEstimation = $this->getSuiteWithResult('single-passing.xml', 1); } - /** - * @return string - */ - protected function getPathToConfig() + protected function getPathToConfig(): string { return __DIR__ . DS . 'myconfig.xml'; } - public function testConstructor() + public function testConstructor(): void { $this->assertEquals([], $this->getObjectValue($this->printer, 'suites')); $this->assertInstanceOf( @@ -59,7 +59,7 @@ public function testConstructor() ); } - public function testAddTestShouldAddTest() + public function testAddTestShouldAddTest(): void { $suite = new Suite('/path/to/ResultSuite.php', []); @@ -68,7 +68,7 @@ public function testAddTestShouldAddTest() $this->assertEquals([$suite], $this->getObjectValue($this->printer, 'suites')); } - public function testAddTestReturnsSelf() + public function testAddTestReturnsSelf(): void { $suite = new Suite('/path/to/ResultSuite.php', []); @@ -77,9 +77,9 @@ public function testAddTestReturnsSelf() $this->assertSame($this->printer, $self); } - public function testStartPrintsOptionInfo() + public function testStartPrintsOptionInfo(): void { - $options = new Options(); + $options = new Options(); $contents = $this->getStartOutput($options); $expected = sprintf( "\nRunning phpunit in %s processes with %s\n\n", @@ -89,12 +89,13 @@ public function testStartPrintsOptionInfo() $this->assertStringStartsWith($expected, $contents); } - public function testStartSetsWidthAndMaxColumn() + public function testStartSetsWidthAndMaxColumn(): void { $funcs = []; for ($i = 0; $i < 120; ++$i) { $funcs[] = new ParsedFunction('doc', 'public', 'function' . $i); } + $suite = new Suite('/path', $funcs); $this->printer->addTest($suite); $this->getStartOutput(new Options()); @@ -104,15 +105,16 @@ public function testStartSetsWidthAndMaxColumn() if (defined('PHP_WINDOWS_VERSION_BUILD')) { $maxExpectedColumun -= 1; } + $maxColumn = $this->getObjectValue($this->printer, 'maxColumn'); $this->assertEquals($maxExpectedColumun, $maxColumn); } - public function testStartPrintsOptionInfoAndConfigurationDetailsIfConfigFilePresent() + public function testStartPrintsOptionInfoAndConfigurationDetailsIfConfigFilePresent(): void { $pathToConfig = $this->getPathToConfig(); file_put_contents($pathToConfig, ''); - $options = new Options(['configuration' => $pathToConfig]); + $options = new Options(['configuration' => $pathToConfig]); $contents = $this->getStartOutput($options); $expected = sprintf( "\nRunning phpunit in %s processes with %s\n\nConfiguration read from %s\n\n", @@ -123,9 +125,9 @@ public function testStartPrintsOptionInfoAndConfigurationDetailsIfConfigFilePres $this->assertStringStartsWith($expected, $contents); } - public function testStartPrintsOptionInfoWithFunctionalMode() + public function testStartPrintsOptionInfoWithFunctionalMode(): void { - $options = new Options(['functional' => true]); + $options = new Options(['functional' => true]); $contents = $this->getStartOutput($options); $expected = sprintf( "\nRunning phpunit in %s processes with %s. Functional mode is ON.\n\n", @@ -135,15 +137,15 @@ public function testStartPrintsOptionInfoWithFunctionalMode() $this->assertStringStartsWith($expected, $contents); } - public function testStartPrintsOptionInfoWithSingularForOneProcess() + public function testStartPrintsOptionInfoWithSingularForOneProcess(): void { - $options = new Options(['processes' => 1]); + $options = new Options(['processes' => 1]); $contents = $this->getStartOutput($options); $expected = sprintf("\nRunning phpunit in 1 process with %s\n\n", $options->phpunit); $this->assertStringStartsWith($expected, $contents); } - public function testAddSuiteAddsFunctionCountToTotalTestCases() + public function testAddSuiteAddsFunctionCountToTotalTestCases(): void { $suite = new Suite('/path', [ new ParsedFunction('doc', 'public', 'funcOne'), @@ -153,14 +155,14 @@ public function testAddSuiteAddsFunctionCountToTotalTestCases() $this->assertEquals(2, $this->printer->getTotalCases()); } - public function testAddTestMethodIncrementsCountByOne() + public function testAddTestMethodIncrementsCountByOne(): void { $method = new TestMethod('/path', ['testThisMethod']); $this->printer->addTest($method); $this->assertEquals(1, $this->printer->getTotalCases()); } - public function testGetHeader() + public function testGetHeader(): void { $this->printer->addTest($this->errorSuite) ->addTest($this->failureSuite); @@ -177,7 +179,7 @@ public function testGetHeader() ); } - public function testGetErrorsSingleError() + public function testGetErrorsSingleError(): void { $this->printer->addTest($this->errorSuite) ->addTest($this->failureSuite); @@ -186,7 +188,7 @@ public function testGetErrorsSingleError() $errors = $this->printer->getErrors(); - $eq = "There was 1 error:\n\n"; + $eq = "There was 1 error:\n\n"; $eq .= "1) UnitTestWithErrorTest::testTruth\n"; $eq .= "Exception: Error!!!\n\n"; $eq .= "/home/brian/Projects/parallel-phpunit/test/fixtures/tests/UnitTestWithErrorTest.php:12\n"; @@ -194,7 +196,7 @@ public function testGetErrorsSingleError() $this->assertEquals($eq, $errors); } - public function testGetErrorsMultipleErrors() + public function testGetErrorsMultipleErrors(): void { $this->printer->addTest($this->errorSuite) ->addTest($this->otherErrorSuite); @@ -203,7 +205,7 @@ public function testGetErrorsMultipleErrors() $errors = $this->printer->getErrors(); - $eq = "There were 2 errors:\n\n"; + $eq = "There were 2 errors:\n\n"; $eq .= "1) UnitTestWithErrorTest::testTruth\n"; $eq .= "Exception: Error!!!\n\n"; $eq .= "/home/brian/Projects/parallel-phpunit/test/fixtures/tests/UnitTestWithErrorTest.php:12\n"; @@ -214,7 +216,7 @@ public function testGetErrorsMultipleErrors() $this->assertEquals($eq, $errors); } - public function testGetFailures() + public function testGetFailures(): void { $this->printer->addTest($this->mixedSuite); @@ -222,7 +224,7 @@ public function testGetFailures() $failures = $this->printer->getFailures(); - $eq = "There were 2 failures:\n\n"; + $eq = "There were 2 failures:\n\n"; $eq .= "1) UnitTestWithClassAnnotationTest::testFalsehood\n"; $eq .= "Failed asserting that true is false.\n\n"; $eq .= "/home/brian/Projects/parallel-phpunit/test/fixtures/tests/UnitTestWithClassAnnotationTest.php:20\n"; @@ -233,7 +235,7 @@ public function testGetFailures() $this->assertEquals($eq, $failures); } - public function testGetFooterWithFailures() + public function testGetFooterWithFailures(): void { $this->printer->addTest($this->errorSuite) ->addTest($this->mixedSuite); @@ -242,13 +244,13 @@ public function testGetFooterWithFailures() $footer = $this->printer->getFooter(); - $eq = "\nFAILURES!\n"; + $eq = "\nFAILURES!\n"; $eq .= "Tests: 8, Assertions: 6, Failures: 2, Errors: 2.\n"; $this->assertEquals($eq, $footer); } - public function testGetFooterWithSuccess() + public function testGetFooterWithSuccess(): void { $this->printer->addTest($this->passingSuite); @@ -261,7 +263,7 @@ public function testGetFooterWithSuccess() $this->assertEquals($eq, $footer); } - public function testPrintFeedbackForMixed() + public function testPrintFeedbackForMixed(): void { $this->printer->addTest($this->mixedSuite); ob_start(); @@ -270,7 +272,7 @@ public function testPrintFeedbackForMixed() $this->assertEquals('.F.E.F.', $contents); } - public function testPrintFeedbackForMoreThan100Suites() + public function testPrintFeedbackForMoreThan100Suites(): void { //add tests for ($i = 0; $i < 40; ++$i) { @@ -287,12 +289,13 @@ public function testPrintFeedbackForMoreThan100Suites() for ($i = 0; $i < 40; ++$i) { $this->printer->printFeedback($this->passingSuite); } + $feedback = ob_get_clean(); - - $firstRowColumns = 63; + + $firstRowColumns = 63; $secondRowColumns = 57; if (defined('PHP_WINDOWS_VERSION_BUILD')) { - $firstRowColumns -= 1; + $firstRowColumns -= 1; $secondRowColumns += 1; } @@ -301,14 +304,16 @@ public function testPrintFeedbackForMoreThan100Suites() for ($i = 0; $i < $firstRowColumns; ++$i) { $expected .= '.'; } + $expected .= sprintf(" %s / 120 ( %s%%)\n", $firstRowColumns, (int) ($firstRowColumns / 120 * 100)); for ($i = 0; $i < $secondRowColumns; ++$i) { $expected .= '.'; } + $this->assertEquals($expected, $feedback); } - public function testResultPrinterAdjustsTotalCountForDataProviders() + public function testResultPrinterAdjustsTotalCountForDataProviders(): void { //add tests for ($i = 0; $i < 22; ++$i) { @@ -325,12 +330,13 @@ public function testResultPrinterAdjustsTotalCountForDataProviders() for ($i = 0; $i < 22; ++$i) { $this->printer->printFeedback($this->passingSuiteWithWrongTestCountEstimation); } + $feedback = ob_get_clean(); - $firstRowColumns = 65; + $firstRowColumns = 65; $secondRowColumns = 1; if (defined('PHP_WINDOWS_VERSION_BUILD')) { - $firstRowColumns -= 1; + $firstRowColumns -= 1; $secondRowColumns += 1; } @@ -339,10 +345,12 @@ public function testResultPrinterAdjustsTotalCountForDataProviders() for ($i = 0; $i < $firstRowColumns; ++$i) { $expected .= '.'; } + $expected .= sprintf(" %s / 66 ( %s%%)\n", $firstRowColumns, (int) ($firstRowColumns / 66 * 100)); for ($i = 0; $i < $secondRowColumns; ++$i) { $expected .= '.'; } + $this->assertEquals($expected, $feedback); } @@ -350,18 +358,18 @@ protected function getStartOutput(Options $options) { ob_start(); $this->printer->start($options); - $contents = ob_get_clean(); - return $contents; + return ob_get_clean(); } - private function prepareReaders() + private function prepareReaders(): void { $suites = $this->getObjectValue($this->printer, 'suites'); ob_start(); foreach ($suites as $suite) { $this->printer->printFeedback($suite); } + ob_end_clean(); } } diff --git a/test/Unit/Runners/PHPUnit/RunnerTest.php b/test/Unit/Runners/PHPUnit/RunnerTest.php index dd735db..2912bfb 100644 --- a/test/Unit/Runners/PHPUnit/RunnerTest.php +++ b/test/Unit/Runners/PHPUnit/RunnerTest.php @@ -8,8 +8,12 @@ use ParaTest\Runners\PHPUnit\Configuration; use ParaTest\Runners\PHPUnit\ResultPrinter; use ParaTest\Runners\PHPUnit\Runner; +use ParaTest\Tests\TestBase; -class RunnerTest extends \ParaTest\Tests\TestBase +use function getcwd; +use function uniqid; + +class RunnerTest extends TestBase { protected $runner; protected $files; @@ -20,10 +24,10 @@ public function setUp(): void $this->runner = new Runner(); } - public function testConstructor() + public function testConstructor(): void { - $opts = ['processes' => 4, 'path' => FIXTURES . DS . 'tests', 'bootstrap' => 'hello', 'functional' => true]; - $runner = new Runner($opts); + $opts = ['processes' => 4, 'path' => FIXTURES . DS . 'tests', 'bootstrap' => 'hello', 'functional' => true]; + $runner = new Runner($opts); $options = $this->getObjectValue($runner, 'options'); $this->assertEquals(4, $options->processes); @@ -39,20 +43,20 @@ public function testConstructor() $this->assertInstanceOf(ResultPrinter::class, $this->getObjectValue($runner, 'printer')); } - public function testGetExitCode() + public function testGetExitCode(): void { $this->assertEquals(-1, $this->runner->getExitCode()); } - public function testConstructorAssignsTokens() + public function testConstructorAssignsTokens(): void { - $opts = ['processes' => 4, 'path' => FIXTURES . DS . 'tests', 'bootstrap' => 'hello', 'functional' => true]; + $opts = ['processes' => 4, 'path' => FIXTURES . DS . 'tests', 'bootstrap' => 'hello', 'functional' => true]; $runner = new Runner($opts); $tokens = $this->getObjectValue($runner, 'tokens'); $this->assertCount(4, $tokens); } - public function testGetsNextAvailableTokenReturnsTokenIdentifier() + public function testGetsNextAvailableTokenReturnsTokenIdentifier(): void { $tokens = [ 0 => ['token' => 0, 'unique' => uniqid(), 'available' => false], @@ -60,7 +64,7 @@ public function testGetsNextAvailableTokenReturnsTokenIdentifier() 2 => ['token' => 2, 'unique' => uniqid(), 'available' => true], 3 => ['token' => 3, 'unique' => uniqid(), 'available' => false], ]; - $opts = ['processes' => 4, 'path' => FIXTURES . DS . 'tests', 'bootstrap' => 'hello', 'functional' => true]; + $opts = ['processes' => 4, 'path' => FIXTURES . DS . 'tests', 'bootstrap' => 'hello', 'functional' => true]; $runner = new Runner($opts); $this->setObjectValue($runner, 'tokens', $tokens); @@ -68,7 +72,7 @@ public function testGetsNextAvailableTokenReturnsTokenIdentifier() $this->assertEquals(2, $tokenData['token']); } - public function testGetNextAvailableTokenReturnsFalseWhenNoTokensAreAvailable() + public function testGetNextAvailableTokenReturnsFalseWhenNoTokensAreAvailable(): void { $tokens = [ 0 => ['token' => 0, 'unique' => uniqid(), 'available' => false], @@ -76,7 +80,7 @@ public function testGetNextAvailableTokenReturnsFalseWhenNoTokensAreAvailable() 2 => ['token' => 2, 'unique' => uniqid(), 'available' => false], 3 => ['token' => 3, 'unique' => uniqid(), 'available' => false], ]; - $opts = ['processes' => 4, 'path' => FIXTURES . DS . 'tests', 'bootstrap' => 'hello', 'functional' => true]; + $opts = ['processes' => 4, 'path' => FIXTURES . DS . 'tests', 'bootstrap' => 'hello', 'functional' => true]; $runner = new Runner($opts); $this->setObjectValue($runner, 'tokens', $tokens); @@ -84,7 +88,7 @@ public function testGetNextAvailableTokenReturnsFalseWhenNoTokensAreAvailable() $this->assertFalse($tokenData); } - public function testReleaseTokenMakesTokenAvailable() + public function testReleaseTokenMakesTokenAvailable(): void { $tokens = [ 0 => ['token' => 0, 'unique' => uniqid(), 'available' => false], @@ -92,7 +96,7 @@ public function testReleaseTokenMakesTokenAvailable() 2 => ['token' => 2, 'unique' => uniqid(), 'available' => false], 3 => ['token' => 3, 'unique' => uniqid(), 'available' => false], ]; - $opts = ['processes' => 4, 'path' => FIXTURES . DS . 'tests', 'bootstrap' => 'hello', 'functional' => true]; + $opts = ['processes' => 4, 'path' => FIXTURES . DS . 'tests', 'bootstrap' => 'hello', 'functional' => true]; $runner = new Runner($opts); $this->setObjectValue($runner, 'tokens', $tokens); diff --git a/test/Unit/Runners/PHPUnit/SuiteLoaderTest.php b/test/Unit/Runners/PHPUnit/SuiteLoaderTest.php index 7131fc7..a32f396 100644 --- a/test/Unit/Runners/PHPUnit/SuiteLoaderTest.php +++ b/test/Unit/Runners/PHPUnit/SuiteLoaderTest.php @@ -4,47 +4,55 @@ namespace ParaTest\Tests\Unit\Runners\PHPUnit; +use InvalidArgumentException; use ParaTest\Runners\PHPUnit\Options; use ParaTest\Runners\PHPUnit\SuiteLoader; +use ParaTest\Tests\TestBase; +use RuntimeException; -class SuiteLoaderTest extends \ParaTest\Tests\TestBase +use function array_keys; +use function array_shift; +use function count; +use function strstr; + +class SuiteLoaderTest extends TestBase { - public function testConstructor() + public function testConstructor(): void { $options = new Options(['group' => 'group1']); - $loader = new SuiteLoader($options); + $loader = new SuiteLoader($options); $this->assertEquals($options, $this->getObjectValue($loader, 'options')); } - public function testOptionsCanBeNull() + public function testOptionsCanBeNull(): void { $loader = new SuiteLoader(); $this->assertNull($this->getObjectValue($loader, 'options')); } - public function testLoadThrowsExceptionWithInvalidPath() + public function testLoadThrowsExceptionWithInvalidPath(): void { - $this->expectException(\InvalidArgumentException::class); + $this->expectException(InvalidArgumentException::class); $loader = new SuiteLoader(); $loader->load('/path/to/nowhere'); } - public function testLoadBarePathWithNoPathAndNoConfiguration() + public function testLoadBarePathWithNoPathAndNoConfiguration(): void { - $this->expectException(\RuntimeException::class); + $this->expectException(RuntimeException::class); $this->expectExceptionMessage('No path or configuration provided (tests must end with Test.php)'); $loader = new SuiteLoader(); $loader->load(); } - public function testLoadTestsuiteFileFromConfig() + public function testLoadTestsuiteFileFromConfig(): void { $options = new Options( ['configuration' => $this->fixture('phpunit-file.xml'), 'testsuite' => ['ParaTest Fixtures']] ); - $loader = new SuiteLoader($options); + $loader = new SuiteLoader($options); $loader->load(); $files = $this->getObjectValue($loader, 'files'); @@ -52,13 +60,13 @@ public function testLoadTestsuiteFileFromConfig() $this->assertCount($expected, $files); } - public function testLoadTestsuiteFilesFromConfigWhileIgnoringExcludeTag() + public function testLoadTestsuiteFilesFromConfigWhileIgnoringExcludeTag(): void { $options = new Options([ 'configuration' => $this->fixture('phpunit-excluded-including-file.xml'), - 'testsuite' => ['ParaTest Fixtures'] + 'testsuite' => ['ParaTest Fixtures'], ]); - $loader = new SuiteLoader($options); + $loader = new SuiteLoader($options); $loader->load(); $files = $this->getObjectValue($loader, 'files'); @@ -66,13 +74,13 @@ public function testLoadTestsuiteFilesFromConfigWhileIgnoringExcludeTag() $this->assertCount($expected, $files); } - public function testLoadTestsuiteFilesFromDirFromConfigWhileRespectingExcludeTag() + public function testLoadTestsuiteFilesFromDirFromConfigWhileRespectingExcludeTag(): void { $options = new Options([ 'configuration' => $this->fixture('phpunit-excluded-including-dir.xml'), - 'testsuite' => ['ParaTest Fixtures'] + 'testsuite' => ['ParaTest Fixtures'], ]); - $loader = new SuiteLoader($options); + $loader = new SuiteLoader($options); $loader->load(); $files = $this->getObjectValue($loader, 'files'); @@ -80,13 +88,13 @@ public function testLoadTestsuiteFilesFromDirFromConfigWhileRespectingExcludeTag $this->assertCount($expected, $files); } - public function testLoadTestsuiteFilesFromConfigWhileIncludingAndExcludingTheSameDirectory() + public function testLoadTestsuiteFilesFromConfigWhileIncludingAndExcludingTheSameDirectory(): void { $options = new Options([ 'configuration' => $this->fixture('phpunit-excluded-including-excluding-same-dir.xml'), - 'testsuite' => ['ParaTest Fixtures'] + 'testsuite' => ['ParaTest Fixtures'], ]); - $loader = new SuiteLoader($options); + $loader = new SuiteLoader($options); $loader->load(); $files = $this->getObjectValue($loader, 'files'); @@ -94,13 +102,13 @@ public function testLoadTestsuiteFilesFromConfigWhileIncludingAndExcludingTheSam $this->assertCount($expected, $files); } - public function testLoadTestsuiteFilesFromConfig() + public function testLoadTestsuiteFilesFromConfig(): void { $options = new Options([ 'configuration' => $this->fixture('phpunit-multifile.xml'), - 'testsuite' => ['ParaTest Fixtures'] + 'testsuite' => ['ParaTest Fixtures'], ]); - $loader = new SuiteLoader($options); + $loader = new SuiteLoader($options); $loader->load(); $files = $this->getObjectValue($loader, 'files'); @@ -108,113 +116,113 @@ public function testLoadTestsuiteFilesFromConfig() $this->assertCount($expected, $files); } - public function testLoadTestsuiteWithDirectory() + public function testLoadTestsuiteWithDirectory(): void { $options = new Options([ 'configuration' => $this->fixture('phpunit-passing.xml'), - 'testsuite' => ['ParaTest Fixtures'] + 'testsuite' => ['ParaTest Fixtures'], ]); - $loader = new SuiteLoader($options); + $loader = new SuiteLoader($options); $loader->load(); $files = $this->getObjectValue($loader, 'files'); - $expected = \count($this->findTests(FIXTURES . DS . 'passing-tests')); + $expected = count($this->findTests(FIXTURES . DS . 'passing-tests')); $this->assertCount($expected, $files); } - public function testLoadTestsuiteWithDirectories() + public function testLoadTestsuiteWithDirectories(): void { $options = new Options([ 'configuration' => $this->fixture('phpunit-multidir.xml'), - 'testsuite' => ['ParaTest Fixtures'] + 'testsuite' => ['ParaTest Fixtures'], ]); - $loader = new SuiteLoader($options); + $loader = new SuiteLoader($options); $loader->load(); $files = $this->getObjectValue($loader, 'files'); - $expected = \count($this->findTests(FIXTURES . DS . 'passing-tests')) + - \count($this->findTests(FIXTURES . DS . 'failing-tests')); + $expected = count($this->findTests(FIXTURES . DS . 'passing-tests')) + + count($this->findTests(FIXTURES . DS . 'failing-tests')); $this->assertCount($expected, $files); } - public function testLoadTestsuiteWithFilesDirsMixed() + public function testLoadTestsuiteWithFilesDirsMixed(): void { $options = new Options( ['configuration' => $this->fixture('phpunit-files-dirs-mix.xml'), 'testsuite' => ['ParaTest Fixtures']] ); - $loader = new SuiteLoader($options); + $loader = new SuiteLoader($options); $loader->load(); $files = $this->getObjectValue($loader, 'files'); - $expected = \count($this->findTests(FIXTURES . DS . 'failing-tests')) + 2; + $expected = count($this->findTests(FIXTURES . DS . 'failing-tests')) + 2; $this->assertCount($expected, $files); } - public function testLoadTestsuiteWithNestedSuite() + public function testLoadTestsuiteWithNestedSuite(): void { $options = new Options([ 'configuration' => $this->fixture('phpunit-files-dirs-mix-nested.xml'), - 'testsuite' => ['ParaTest Fixtures'] + 'testsuite' => ['ParaTest Fixtures'], ]); - $loader = new SuiteLoader($options); + $loader = new SuiteLoader($options); $loader->load(); $files = $this->getObjectValue($loader, 'files'); - $expected = \count($this->findTests(FIXTURES . DS . 'passing-tests')) + - \count($this->findTests(FIXTURES . DS . 'failing-tests')) + 1; + $expected = count($this->findTests(FIXTURES . DS . 'passing-tests')) + + count($this->findTests(FIXTURES . DS . 'failing-tests')) + 1; $this->assertCount($expected, $files); } - public function testLoadTestsuiteWithDuplicateFilesDirMixed() + public function testLoadTestsuiteWithDuplicateFilesDirMixed(): void { $options = new Options([ 'configuration' => $this->fixture('phpunit-files-dirs-mix-duplicates.xml'), - 'testsuite' => ['ParaTest Fixtures'] + 'testsuite' => ['ParaTest Fixtures'], ]); - $loader = new SuiteLoader($options); + $loader = new SuiteLoader($options); $loader->load(); $files = $this->getObjectValue($loader, 'files'); - $expected = \count($this->findTests(FIXTURES . DS . 'passing-tests')) + 1; + $expected = count($this->findTests(FIXTURES . DS . 'passing-tests')) + 1; $this->assertCount($expected, $files); } - public function testLoadSuiteFromConfig() + public function testLoadSuiteFromConfig(): void { $options = new Options(['configuration' => $this->fixture('phpunit-passing.xml')]); - $loader = new SuiteLoader($options); + $loader = new SuiteLoader($options); $loader->load(); $files = $this->getObjectValue($loader, 'files'); - $expected = \count($this->findTests(FIXTURES . DS . 'passing-tests')); + $expected = count($this->findTests(FIXTURES . DS . 'passing-tests')); $this->assertCount($expected, $files); } - public function testLoadSuiteFromConfigWithMultipleDirs() + public function testLoadSuiteFromConfigWithMultipleDirs(): void { $options = new Options(['configuration' => $this->fixture('phpunit-multidir.xml')]); - $loader = new SuiteLoader($options); + $loader = new SuiteLoader($options); $loader->load(); $files = $this->getObjectValue($loader, 'files'); - $expected = \count($this->findTests(FIXTURES . DS . 'passing-tests')) + - \count($this->findTests(FIXTURES . DS . 'failing-tests')); + $expected = count($this->findTests(FIXTURES . DS . 'passing-tests')) + + count($this->findTests(FIXTURES . DS . 'failing-tests')); $this->assertCount($expected, $files); } - public function testLoadSuiteFromConfigWithBadSuitePath() + public function testLoadSuiteFromConfigWithBadSuitePath(): void { - $this->expectException(\RuntimeException::class); + $this->expectException(RuntimeException::class); $this->expectExceptionMessage('Suite path ./nope/ could not be found'); $options = new Options(['configuration' => $this->fixture('phpunit-non-existent-testsuite-dir.xml')]); - $loader = new SuiteLoader($options); + $loader = new SuiteLoader($options); $loader->load(); } - public function testLoadFileGetsPathOfFile() + public function testLoadFileGetsPathOfFile(): void { - $path = $this->fixture('failing-tests/UnitTestWithClassAnnotationTest.php'); + $path = $this->fixture('failing-tests/UnitTestWithClassAnnotationTest.php'); $paths = $this->getLoadedPaths($path); $this->assertEquals($path, array_shift($paths)); } @@ -224,21 +232,20 @@ protected function getLoadedPaths($path, $loader = null) $loader = $loader ?: new SuiteLoader(); $loader->load($path); $loaded = $this->getObjectValue($loader, 'loadedSuites'); - $paths = array_keys($loaded); - return $paths; + return array_keys($loaded); } - public function testLoadFileShouldLoadFileWhereNameDoesNotEndInTest() + public function testLoadFileShouldLoadFileWhereNameDoesNotEndInTest(): void { - $path = $this->fixture('passing-tests/TestOfUnits.php'); + $path = $this->fixture('passing-tests/TestOfUnits.php'); $paths = $this->getLoadedPaths($path); $this->assertEquals($path, array_shift($paths)); } public function testLoadDirGetsPathOfAllTestsWithKeys() { - $path = $this->fixture('passing-tests'); + $path = $this->fixture('passing-tests'); $files = $this->findTests($path); $loader = new SuiteLoader(); @@ -252,13 +259,13 @@ public function testLoadDirGetsPathOfAllTestsWithKeys() } /** - * @depends testLoadDirGetsPathOfAllTestsWithKeys - * * @param mixed $paraSuites + * + * @depends testLoadDirGetsPathOfAllTestsWithKeys */ - public function testFirstParallelSuiteHasCorrectFunctions($paraSuites) + public function testFirstParallelSuiteHasCorrectFunctions($paraSuites): void { - $first = $this->suiteByPath('GroupsTest.php', $paraSuites); + $first = $this->suiteByPath('GroupsTest.php', $paraSuites); $functions = $first->getFunctions(); $this->assertCount(5, $functions); $this->assertEquals('testTruth', $functions[0]->getName()); @@ -275,25 +282,26 @@ private function suiteByPath($path, array $paraSuites) return $suite; } } - throw new \RuntimeException("Suite $path not found."); + + throw new RuntimeException("Suite $path not found."); } /** - * @depends testLoadDirGetsPathOfAllTestsWithKeys - * * @param mixed $paraSuites + * + * @depends testLoadDirGetsPathOfAllTestsWithKeys */ - public function testSecondParallelSuiteHasCorrectFunctions($paraSuites) + public function testSecondParallelSuiteHasCorrectFunctions($paraSuites): void { - $second = $this->suiteByPath('LegacyNamespaceTest.php', $paraSuites); + $second = $this->suiteByPath('LegacyNamespaceTest.php', $paraSuites); $functions = $second->getFunctions(); $this->assertCount(1, $functions); } - public function testGetTestMethodsOnlyReturnsMethodsOfGroupIfOptionIsSpecified() + public function testGetTestMethodsOnlyReturnsMethodsOfGroupIfOptionIsSpecified(): void { - $options = new Options(['group' => 'group1']); - $loader = new SuiteLoader($options); + $options = new Options(['group' => 'group1']); + $loader = new SuiteLoader($options); $groupsTest = $this->fixture('passing-tests/GroupsTest.php'); $loader->load($groupsTest); $methods = $loader->getTestMethods(); @@ -302,10 +310,10 @@ public function testGetTestMethodsOnlyReturnsMethodsOfGroupIfOptionIsSpecified() $this->assertEquals('testFalsehood', $methods[1]->getName()); } - public function testGetTestMethodsOnlyReturnsMethodsOfClassGroup() + public function testGetTestMethodsOnlyReturnsMethodsOfClassGroup(): void { - $options = new Options(['group' => 'group4']); - $loader = new SuiteLoader($options); + $options = new Options(['group' => 'group4']); + $loader = new SuiteLoader($options); $groupsTest = $this->fixture('passing-tests/GroupsTest.php'); $loader->load($groupsTest); $methods = $loader->getTestMethods(); @@ -313,27 +321,27 @@ public function testGetTestMethodsOnlyReturnsMethodsOfClassGroup() $this->assertCount(5, $methods); } - public function testGetSuitesForNonMatchingGroups() + public function testGetSuitesForNonMatchingGroups(): void { - $options = new Options(['group' => 'non-existent']); - $loader = new SuiteLoader($options); + $options = new Options(['group' => 'non-existent']); + $loader = new SuiteLoader($options); $groupsTest = $this->fixture('passing-tests/GroupsTest.php'); $loader->load($groupsTest); $this->assertCount(0, $loader->getSuites()); $this->assertCount(0, $loader->getTestMethods()); } - public function testLoadIgnoresFilesWithoutClasses() + public function testLoadIgnoresFilesWithoutClasses(): void { - $loader = new SuiteLoader(); + $loader = new SuiteLoader(); $fileWithoutClass = $this->fixture('special-classes/FileWithoutClass.php'); $loader->load($fileWithoutClass); $this->assertCount(0, $loader->getTestMethods()); } - public function testExecutableTestsForFunctionalModeUse() + public function testExecutableTestsForFunctionalModeUse(): void { - $path = $this->fixture('passing-tests/DependsOnChain.php'); + $path = $this->fixture('passing-tests/DependsOnChain.php'); $loader = new SuiteLoader(); $loader->load($path); $tests = $loader->getTestMethods(); diff --git a/test/Unit/Runners/PHPUnit/SuiteTest.php b/test/Unit/Runners/PHPUnit/SuiteTest.php index 2e5bfd0..a7c4e3f 100644 --- a/test/Unit/Runners/PHPUnit/SuiteTest.php +++ b/test/Unit/Runners/PHPUnit/SuiteTest.php @@ -5,8 +5,9 @@ namespace ParaTest\Tests\Unit\Runners\PHPUnit; use ParaTest\Runners\PHPUnit\Suite; +use ParaTest\Tests\TestBase; -class SuiteTest extends \ParaTest\Tests\TestBase +class SuiteTest extends TestBase { protected $suite; @@ -15,7 +16,7 @@ public function setUp(): void $this->suite = new Suite('/path/to/UnitTest.php', []); } - public function testConstruction() + public function testConstruction(): void { $this->assertNull($this->getObjectValue($this->suite, 'process')); } diff --git a/test/Unit/Runners/PHPUnit/TestFileLoaderTest.php b/test/Unit/Runners/PHPUnit/TestFileLoaderTest.php index 988a7b6..2d031db 100644 --- a/test/Unit/Runners/PHPUnit/TestFileLoaderTest.php +++ b/test/Unit/Runners/PHPUnit/TestFileLoaderTest.php @@ -4,30 +4,32 @@ namespace ParaTest\Tests\Unit\Runners\PHPUnit; +use InvalidArgumentException; use ParaTest\Runners\PHPUnit\Options; use ParaTest\Runners\PHPUnit\TestFileLoader; +use ParaTest\Tests\TestBase; /** * The functionnalities of this class is tested in SuiteLoaderTest.php. */ -class TestFileLoaderTest extends \ParaTest\Tests\TestBase +class TestFileLoaderTest extends TestBase { - public function testConstructor() + public function testConstructor(): void { - $options = new Options(['group' => 'group1']); + $options = new Options(['group' => 'group1']); $testFileLoader = new TestFileLoader($options); $this->assertEquals($options, $this->getObjectValue($testFileLoader, 'options')); } - public function testOptionsCanBeNull() + public function testOptionsCanBeNull(): void { $testFileLoader = new TestFileLoader(); $this->assertNull($this->getObjectValue($testFileLoader, 'options')); } - public function testLoadThrowsExceptionWithInvalidPath() + public function testLoadThrowsExceptionWithInvalidPath(): void { - $this->expectException(\InvalidArgumentException::class); + $this->expectException(InvalidArgumentException::class); $testFileLoader = new TestFileLoader(); $testFileLoader->loadPath('path/to/nowhere'); diff --git a/test/Unit/Runners/PHPUnit/TestMethodTest.php b/test/Unit/Runners/PHPUnit/TestMethodTest.php index 6171ee2..09ae7df 100644 --- a/test/Unit/Runners/PHPUnit/TestMethodTest.php +++ b/test/Unit/Runners/PHPUnit/TestMethodTest.php @@ -5,10 +5,11 @@ namespace ParaTest\Tests\Unit\Runners\PHPUnit; use ParaTest\Runners\PHPUnit\TestMethod; +use ParaTest\Tests\TestBase; -class TestMethodTest extends \ParaTest\Tests\TestBase +class TestMethodTest extends TestBase { - public function testConstructor() + public function testConstructor(): void { $testMethod = new TestMethod('pathToFile', ['methodName']); $this->assertEquals('pathToFile', $this->getObjectValue($testMethod, 'path')); diff --git a/test/Unit/Runners/PHPUnit/WrapperRunnerTest.php b/test/Unit/Runners/PHPUnit/WrapperRunnerTest.php index 3cca7a7..93d4909 100644 --- a/test/Unit/Runners/PHPUnit/WrapperRunnerTest.php +++ b/test/Unit/Runners/PHPUnit/WrapperRunnerTest.php @@ -5,15 +5,17 @@ namespace ParaTest\Tests\Unit\Runners\PHPUnit; use ParaTest\Runners\PHPUnit\WrapperRunner; +use ParaTest\Tests\TestBase; +use RuntimeException; -class WrapperRunnerTest extends \ParaTest\Tests\TestBase +class WrapperRunnerTest extends TestBase { /** * @requires OSFAMILY Windows */ - public function testWrapperRunnerCannotBeUsedOnWindows() + public function testWrapperRunnerCannotBeUsedOnWindows(): void { - $this->expectException(\RuntimeException::class); + $this->expectException(RuntimeException::class); new WrapperRunner(); } diff --git a/test/Unit/Util/StrTest.php b/test/Unit/Util/StrTest.php index e497d41..6c1b856 100644 --- a/test/Unit/Util/StrTest.php +++ b/test/Unit/Util/StrTest.php @@ -7,15 +7,16 @@ use ParaTest\Util\Str; use PHPUnit\Framework\TestCase; +use function array_values; + class StrTest extends TestCase { /** - * @param string $delimiter - * @param string $valueString - * @param array $expected + * @param array $expected + * * @dataProvider explodeWithCleanupDataProvider */ - public function testExplodeWithCleanup(string $delimiter, string $valueString, array $expected) + public function testExplodeWithCleanup(string $delimiter, string $valueString, array $expected): void { $actual = Str::explodeWithCleanup($delimiter, $valueString); $actual = array_values($actual); diff --git a/test/constants.php b/test/constants.php index 25ce1e8..917bfd2 100644 --- a/test/constants.php +++ b/test/constants.php @@ -2,7 +2,7 @@ declare(strict_types=1); -if (!defined('DS')) { +if (! defined('DS')) { define('DS', DIRECTORY_SEPARATOR); } From dda1d3ea3d170db09016375847d42538d2a55e73 Mon Sep 17 00:00:00 2001 From: Filippo Tessarotto Date: Fri, 24 Jul 2020 11:58:25 +0200 Subject: [PATCH 27/34] Use cs2pr to redirect CS/STAN to Github GUI (#468) --- .github/workflows/integrate.yaml | 4 ++-- README.md | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/integrate.yaml b/.github/workflows/integrate.yaml index 5ec49a1..81e9714 100644 --- a/.github/workflows/integrate.yaml +++ b/.github/workflows/integrate.yaml @@ -200,7 +200,7 @@ jobs: run: "composer update --no-interaction --no-progress" - name: "Check coding standards" - run: "composer style" + run: "vendor/bin/phpcs -q --report=checkstyle | cs2pr" static-analysis: name: "Static Analysis" @@ -238,7 +238,7 @@ jobs: run: "composer update --no-interaction --no-progress" - name: "Run static analysis" - run: "composer static-analysis" + run: "vendor/bin/phpstan analyse --no-progress --error-format=checkstyle | cs2pr" - name: "Run PSalm for type-coverage" run: "vendor/bin/psalm --no-progress --shepherd --show-info=false --stats" diff --git a/README.md b/README.md index f231161..d14c4e9 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ ParaTest ======== -[![Latest Stable Version](https://img.shields.io/packagist/v/brianium/paratest.svg?style=flat-square)](https://packagist.org/packages/brianium/paratest) +[![Latest Stable Version](https://img.shields.io/packagist/v/brianium/paratest.svg)](https://packagist.org/packages/brianium/paratest) [![Downloads](https://img.shields.io/packagist/dt/brianium/paratest.svg)](https://packagist.org/packages/brianium/paratest) [![Integrate](https://github.com/paratestphp/paratest/workflows/Integrate/badge.svg?branch=master)](https://github.com/paratestphp/paratest/actions) [![Code Coverage](https://codecov.io/gh/paratestphp/paratest/coverage.svg?branch=master)](https://codecov.io/gh/paratestphp/paratest?branch=master) From 8f89a1bd05c1f424661129a7407cb1f9f6f60eca Mon Sep 17 00:00:00 2001 From: Filippo Tessarotto Date: Fri, 24 Jul 2020 14:48:15 +0200 Subject: [PATCH 28/34] Lint XML configuration files (#469) --- .github/lint-xml-configuration/Dockerfile | 5 ++ .../lint-xml-configuration.sh | 8 +++ .github/workflows/integrate.yaml | 57 +++++++++++++---- .gitignore | 7 ++- .../Runners/PHPUnit/ConfigurationTest.php | 4 +- test/Unit/Runners/PHPUnit/OptionsTest.php | 63 ++++++++++--------- .../Runners/PHPUnit/ResultPrinterTest.php | 2 +- .../PHPUnit/phpunit-ConfigurationTest.xml | 2 + test/Unit/Runners/PHPUnit/phpunit.xml.dist | 1 - test/fixtures/phpunit-dataprovider.xml | 1 - .../phpunit-excluded-including-dir.xml | 3 +- ...-excluded-including-excluding-same-dir.xml | 3 +- .../phpunit-excluded-including-file.xml | 3 +- test/fixtures/phpunit-file.xml | 1 - .../phpunit-files-dirs-mix-duplicates.xml | 1 - .../phpunit-files-dirs-mix-nested.xml | 1 - test/fixtures/phpunit-files-dirs-mix.xml | 1 - test/fixtures/phpunit-globbing.xml | 1 - test/fixtures/phpunit-multidir.xml | 1 - test/fixtures/phpunit-multifile.xml | 1 - .../phpunit-non-existent-testsuite-dir.xml | 1 - test/fixtures/phpunit-passing.xml | 1 - test/fixtures/phpunit-skipped.xml | 1 - test/fixtures/phpunit.xml.dist | 1 - 24 files changed, 102 insertions(+), 68 deletions(-) create mode 100644 .github/lint-xml-configuration/Dockerfile create mode 100644 .github/lint-xml-configuration/lint-xml-configuration.sh create mode 100644 test/Unit/Runners/PHPUnit/phpunit-ConfigurationTest.xml delete mode 100644 test/Unit/Runners/PHPUnit/phpunit.xml.dist diff --git a/.github/lint-xml-configuration/Dockerfile b/.github/lint-xml-configuration/Dockerfile new file mode 100644 index 0000000..117737d --- /dev/null +++ b/.github/lint-xml-configuration/Dockerfile @@ -0,0 +1,5 @@ +FROM alpine:latest + +RUN apk add --no-cache \ + bash \ + libxml2-utils diff --git a/.github/lint-xml-configuration/lint-xml-configuration.sh b/.github/lint-xml-configuration/lint-xml-configuration.sh new file mode 100644 index 0000000..f96380a --- /dev/null +++ b/.github/lint-xml-configuration/lint-xml-configuration.sh @@ -0,0 +1,8 @@ +#!/bin/bash + +set -ex + +xmllint --noout --schema vendor/phpunit/phpunit/phpunit.xsd phpunit.xml.dist +xmllint --noout --schema vendor/squizlabs/php_codesniffer/phpcs.xsd phpcs.xml.dist +xmllint --noout --schema vendor/vimeo/psalm/config.xsd psalm.xml.dist +find test/ -name "phpunit*.xml*" -not -name "phpunit-files-dirs-mix-nested.xml" -print0 | xargs -0 xmllint --noout --schema vendor/phpunit/phpunit/phpunit.xsd \ No newline at end of file diff --git a/.github/workflows/integrate.yaml b/.github/workflows/integrate.yaml index 81e9714..e0c3272 100644 --- a/.github/workflows/integrate.yaml +++ b/.github/workflows/integrate.yaml @@ -26,7 +26,7 @@ jobs: with: coverage: "none" php-version: "${{ matrix.php-version }}" - tools: composer:v1, cs2pr, composer-normalize, composer-require-checker, composer-unused + tools: composer:v1, composer-normalize, composer-require-checker, composer-unused - name: "Get composer cache directory" id: composercache @@ -54,6 +54,46 @@ jobs: - name: "Check composer.json unused dependencies" run: "composer-unused" + xml-lint: + name: "Lint XMLs" + + runs-on: ubuntu-latest + + strategy: + matrix: + php-version: + - "7.4" + + steps: + - name: "Checkout" + uses: "actions/checkout@v2" + + - name: "Install PHP" + uses: "shivammathur/setup-php@v2" + with: + coverage: "none" + php-version: "${{ matrix.php-version }}" + tools: composer:v1 + + - name: "Get composer cache directory" + id: composercache + run: echo "::set-output name=dir::$(composer config cache-files-dir)" + + - name: "Cache dependencies" + uses: actions/cache@v2 + with: + path: ${{ steps.composercache.outputs.dir }} + key: ${{ runner.os }}-php-${{ matrix.php-version }}-${{ matrix.dependencies }}-composer-${{ hashFiles('**/composer.json') }} + restore-keys: ${{ runner.os }}-php-${{ matrix.php-version }}-${{ matrix.dependencies }}-composer- + + - name: "Install dependencies" + run: "composer update --no-interaction --no-progress" + + - name: "Lint XMLs" + uses: ./.github/lint-xml-configuration + with: + args: bash .github/lint-xml-configuration/lint-xml-configuration.sh + tests: name: "Tests" @@ -83,7 +123,7 @@ jobs: with: coverage: "pcov" php-version: "${{ matrix.php-version }}" - tools: composer:v1, cs2pr + tools: composer:v1 extensions: sqlite - name: "Get composer cache directory" @@ -118,8 +158,6 @@ jobs: matrix: php-version: - "7.4" - dependencies: - - "highest" steps: - name: "Checkout" @@ -133,7 +171,7 @@ jobs: with: coverage: "pcov" php-version: "${{ matrix.php-version }}" - tools: composer:v1, cs2pr + tools: composer:v1 extensions: sqlite - name: "Get composer cache directory" @@ -147,12 +185,7 @@ jobs: key: ${{ runner.os }}-php-${{ matrix.php-version }}-${{ matrix.dependencies }}-composer-${{ hashFiles('**/composer.json') }} restore-keys: ${{ runner.os }}-php-${{ matrix.php-version }}-${{ matrix.dependencies }}-composer- - - name: "Install lowest dependencies" - if: ${{ matrix.dependencies == 'lowest' }} - run: "composer update --no-interaction --no-progress --prefer-lowest" - - - name: "Install highest dependencies" - if: ${{ matrix.dependencies == 'highest' }} + - name: "Install dependencies" run: "composer update --no-interaction --no-progress" - name: "Run tests" @@ -262,7 +295,7 @@ jobs: with: coverage: "none" php-version: "${{ matrix.php-version }}" - tools: composer:v1, cs2pr + tools: composer:v1 - name: "Get composer cache directory" id: composercache diff --git a/.gitignore b/.gitignore index 192afbf..54cf46e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ -vendor -composer.lock +/.idea /test/fixtures/generated-tests +/test/Unit/Runners/PHPUnit/generated-configs +/vendor +composer.lock .phpunit.result.cache .php_cs.cache -.idea diff --git a/test/Unit/Runners/PHPUnit/ConfigurationTest.php b/test/Unit/Runners/PHPUnit/ConfigurationTest.php index 682e8fa..1c374da 100644 --- a/test/Unit/Runners/PHPUnit/ConfigurationTest.php +++ b/test/Unit/Runners/PHPUnit/ConfigurationTest.php @@ -109,7 +109,7 @@ public function testGetEnvironmentVariables(): void $this->assertArrayHasKey('DB_CONNECTION', $this->config->getEnvironmentVariables()); $this->assertArrayHasKey('DB_DATABASE', $this->config->getEnvironmentVariables()); - $config = new Configuration(realpath(__DIR__ . '/phpunit.xml.dist')); + $config = new Configuration(realpath(__DIR__ . '/phpunit-ConfigurationTest.xml')); $this->assertCount(0, $config->getEnvironmentVariables()); } @@ -137,7 +137,7 @@ public function testLoadedEnvironmentVariablesWillNotBeOverwritten(): void putenv('DB_CONNECTION=mysql'); putenv('DB_DATABASE=localhost'); - $config = new Configuration(realpath(__DIR__ . '/phpunit.xml.dist')); + $config = new Configuration(realpath(__DIR__ . '/phpunit-ConfigurationTest.xml')); $this->assertSame('mysql', getenv('DB_CONNECTION')); $this->assertSame('localhost', getenv('DB_DATABASE')); diff --git a/test/Unit/Runners/PHPUnit/OptionsTest.php b/test/Unit/Runners/PHPUnit/OptionsTest.php index 1756da7..163b862 100644 --- a/test/Unit/Runners/PHPUnit/OptionsTest.php +++ b/test/Unit/Runners/PHPUnit/OptionsTest.php @@ -8,16 +8,20 @@ use ParaTest\Tests\TestBase; use function chdir; -use function file_exists; use function file_put_contents; use function getcwd; +use function glob; use function intdiv; +use function is_dir; +use function mkdir; use function unlink; class OptionsTest extends TestBase { protected $options; protected $unfiltered; + /** @var string */ + private $currentCwd; public function setUp(): void { @@ -30,7 +34,27 @@ public function setUp(): void 'bootstrap' => '/path/to/bootstrap', ]; $this->options = new Options($this->unfiltered); - $this->cleanUpConfigurations(); + $this->currentCwd = getcwd(); + $testCwd = __DIR__ . DS . 'generated-configs'; + if (! is_dir($testCwd)) { + mkdir($testCwd, 0777, true); + } + + chdir($testCwd); + $this->cleanUpGeneratedFiles(); + } + + protected function tearDown(): void + { + $this->cleanUpGeneratedFiles(); + chdir($this->currentCwd); + } + + private function cleanUpGeneratedFiles(): void + { + foreach (glob(getcwd() . DS . '*') as $file) { + unlink($file); + } } public function testFilteredOptionsShouldContainExtraneousOptions(): void @@ -87,7 +111,7 @@ public function testConfigurationShouldReturnXmlDistIfConfigAndXmlNotSpecifiedAn public function testConfigurationShouldReturnSpecifiedConfigurationIfFileExists(): void { - $this->assertConfigurationFileFiltered('myconfig.xml', getcwd(), 'myconfig.xml'); + $this->assertConfigurationFileFiltered('phpunit-myconfig.xml', getcwd(), 'phpunit-myconfig.xml'); } public function testConfigurationShouldBeSetEvenIfFileDoesNotExist(): void @@ -105,32 +129,6 @@ public function testConfigurationKeyIsNotPresentIfNoConfigGiven(): void $this->assertArrayNotHasKey('configuration', $options->filtered); } - /** - * Sets the current working directory to this source - * directory so we can test configuration details without - * using ParaTest's own configuration. - * - * Performs any cleanup to make sure no config files are - * present when a test starts - */ - protected function cleanUpConfigurations(): void - { - chdir(__DIR__); - if (file_exists('phpunit.xml')) { - unlink('phpunit.xml'); - } - - if (file_exists('phpunit.xml.dist')) { - unlink('phpunit.xml.dist'); - } - - if (! file_exists('myconfig.xml')) { - return; - } - - unlink('myconfig.xml'); - } - public function testConfigurationShouldReturnXmlIfConfigSpecifiedAsDirectoryAndFileExists(): void { $this->assertConfigurationFileFiltered('phpunit.xml', getcwd(), getcwd()); @@ -146,13 +144,16 @@ private function assertConfigurationFileFiltered( string $path, ?string $configurationParameter = null ): void { - file_put_contents($configFileName, ''); + file_put_contents($configFileName, ''); $this->unfiltered['path'] = $path; if ($configurationParameter !== null) { $this->unfiltered['configuration'] = $configurationParameter; } $options = new Options($this->unfiltered); - $this->assertEquals(__DIR__ . DS . $configFileName, $options->filtered['configuration']->getPath()); + $this->assertEquals( + __DIR__ . DS . 'generated-configs' . DS . $configFileName, + $options->filtered['configuration']->getPath() + ); } } diff --git a/test/Unit/Runners/PHPUnit/ResultPrinterTest.php b/test/Unit/Runners/PHPUnit/ResultPrinterTest.php index f7f1f23..c0a7ae3 100644 --- a/test/Unit/Runners/PHPUnit/ResultPrinterTest.php +++ b/test/Unit/Runners/PHPUnit/ResultPrinterTest.php @@ -47,7 +47,7 @@ public function setUp(): void protected function getPathToConfig(): string { - return __DIR__ . DS . 'myconfig.xml'; + return __DIR__ . DS . 'phpunit-myconfig.xml'; } public function testConstructor(): void diff --git a/test/Unit/Runners/PHPUnit/phpunit-ConfigurationTest.xml b/test/Unit/Runners/PHPUnit/phpunit-ConfigurationTest.xml new file mode 100644 index 0000000..5d3daed --- /dev/null +++ b/test/Unit/Runners/PHPUnit/phpunit-ConfigurationTest.xml @@ -0,0 +1,2 @@ + + diff --git a/test/Unit/Runners/PHPUnit/phpunit.xml.dist b/test/Unit/Runners/PHPUnit/phpunit.xml.dist deleted file mode 100644 index 635b93e..0000000 --- a/test/Unit/Runners/PHPUnit/phpunit.xml.dist +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/test/fixtures/phpunit-dataprovider.xml b/test/fixtures/phpunit-dataprovider.xml index 7c8399d..d358b77 100644 --- a/test/fixtures/phpunit-dataprovider.xml +++ b/test/fixtures/phpunit-dataprovider.xml @@ -8,7 +8,6 @@ convertWarningsToExceptions="true" processIsolation="false" stopOnFailure="false" - syntaxCheck="false" > diff --git a/test/fixtures/phpunit-excluded-including-dir.xml b/test/fixtures/phpunit-excluded-including-dir.xml index cd91b35..ffda9a5 100644 --- a/test/fixtures/phpunit-excluded-including-dir.xml +++ b/test/fixtures/phpunit-excluded-including-dir.xml @@ -8,12 +8,11 @@ convertWarningsToExceptions="true" processIsolation="false" stopOnFailure="false" - syntaxCheck="false" > - ./excluded-tests/excluded ./excluded-tests + ./excluded-tests/excluded diff --git a/test/fixtures/phpunit-excluded-including-excluding-same-dir.xml b/test/fixtures/phpunit-excluded-including-excluding-same-dir.xml index 36f52cb..0ebe64a 100644 --- a/test/fixtures/phpunit-excluded-including-excluding-same-dir.xml +++ b/test/fixtures/phpunit-excluded-including-excluding-same-dir.xml @@ -8,12 +8,11 @@ convertWarningsToExceptions="true" processIsolation="false" stopOnFailure="false" - syntaxCheck="false" > - ./excluded-tests/included ./excluded-tests/included + ./excluded-tests/included diff --git a/test/fixtures/phpunit-excluded-including-file.xml b/test/fixtures/phpunit-excluded-including-file.xml index 93025c8..d0d4411 100644 --- a/test/fixtures/phpunit-excluded-including-file.xml +++ b/test/fixtures/phpunit-excluded-including-file.xml @@ -8,12 +8,11 @@ convertWarningsToExceptions="true" processIsolation="false" stopOnFailure="false" - syntaxCheck="false" > - ./excluded-tests/excluded ./excluded-tests/included/IncludedPassingTest.php + ./excluded-tests/excluded diff --git a/test/fixtures/phpunit-file.xml b/test/fixtures/phpunit-file.xml index 4ec508b..0091fb2 100644 --- a/test/fixtures/phpunit-file.xml +++ b/test/fixtures/phpunit-file.xml @@ -8,7 +8,6 @@ convertWarningsToExceptions="true" processIsolation="false" stopOnFailure="false" - syntaxCheck="false" > diff --git a/test/fixtures/phpunit-files-dirs-mix-duplicates.xml b/test/fixtures/phpunit-files-dirs-mix-duplicates.xml index 0a46c39..87c0133 100644 --- a/test/fixtures/phpunit-files-dirs-mix-duplicates.xml +++ b/test/fixtures/phpunit-files-dirs-mix-duplicates.xml @@ -8,7 +8,6 @@ convertWarningsToExceptions="true" processIsolation="false" stopOnFailure="false" - syntaxCheck="false" > diff --git a/test/fixtures/phpunit-files-dirs-mix-nested.xml b/test/fixtures/phpunit-files-dirs-mix-nested.xml index 5a0cef9..568bcb6 100644 --- a/test/fixtures/phpunit-files-dirs-mix-nested.xml +++ b/test/fixtures/phpunit-files-dirs-mix-nested.xml @@ -8,7 +8,6 @@ convertWarningsToExceptions="true" processIsolation="false" stopOnFailure="false" - syntaxCheck="false" > diff --git a/test/fixtures/phpunit-files-dirs-mix.xml b/test/fixtures/phpunit-files-dirs-mix.xml index e601aef..527913a 100644 --- a/test/fixtures/phpunit-files-dirs-mix.xml +++ b/test/fixtures/phpunit-files-dirs-mix.xml @@ -8,7 +8,6 @@ convertWarningsToExceptions="true" processIsolation="false" stopOnFailure="false" - syntaxCheck="false" > diff --git a/test/fixtures/phpunit-globbing.xml b/test/fixtures/phpunit-globbing.xml index c057e55..8516999 100644 --- a/test/fixtures/phpunit-globbing.xml +++ b/test/fixtures/phpunit-globbing.xml @@ -8,7 +8,6 @@ convertWarningsToExceptions="true" processIsolation="false" stopOnFailure="false" - syntaxCheck="false" > diff --git a/test/fixtures/phpunit-multidir.xml b/test/fixtures/phpunit-multidir.xml index a0ead8f..ba37ab4 100644 --- a/test/fixtures/phpunit-multidir.xml +++ b/test/fixtures/phpunit-multidir.xml @@ -8,7 +8,6 @@ convertWarningsToExceptions="true" processIsolation="false" stopOnFailure="false" - syntaxCheck="false" > diff --git a/test/fixtures/phpunit-multifile.xml b/test/fixtures/phpunit-multifile.xml index 4e8449d..21fb7bd 100644 --- a/test/fixtures/phpunit-multifile.xml +++ b/test/fixtures/phpunit-multifile.xml @@ -8,7 +8,6 @@ convertWarningsToExceptions="true" processIsolation="false" stopOnFailure="false" - syntaxCheck="false" > diff --git a/test/fixtures/phpunit-non-existent-testsuite-dir.xml b/test/fixtures/phpunit-non-existent-testsuite-dir.xml index 955f447..1a6427e 100644 --- a/test/fixtures/phpunit-non-existent-testsuite-dir.xml +++ b/test/fixtures/phpunit-non-existent-testsuite-dir.xml @@ -8,7 +8,6 @@ convertWarningsToExceptions="true" processIsolation="false" stopOnFailure="false" - syntaxCheck="false" > diff --git a/test/fixtures/phpunit-passing.xml b/test/fixtures/phpunit-passing.xml index 97e7f70..346e7af 100644 --- a/test/fixtures/phpunit-passing.xml +++ b/test/fixtures/phpunit-passing.xml @@ -8,7 +8,6 @@ convertWarningsToExceptions="true" processIsolation="false" stopOnFailure="false" - syntaxCheck="false" > diff --git a/test/fixtures/phpunit-skipped.xml b/test/fixtures/phpunit-skipped.xml index 938b033..3231393 100644 --- a/test/fixtures/phpunit-skipped.xml +++ b/test/fixtures/phpunit-skipped.xml @@ -8,7 +8,6 @@ convertWarningsToExceptions="true" processIsolation="false" stopOnFailure="false" - syntaxCheck="false" > diff --git a/test/fixtures/phpunit.xml.dist b/test/fixtures/phpunit.xml.dist index 97e7f70..346e7af 100644 --- a/test/fixtures/phpunit.xml.dist +++ b/test/fixtures/phpunit.xml.dist @@ -8,7 +8,6 @@ convertWarningsToExceptions="true" processIsolation="false" stopOnFailure="false" - syntaxCheck="false" > From fc8acab86e3cff34924a63b5a63e2aaf7a891f9c Mon Sep 17 00:00:00 2001 From: Filippo Tessarotto Date: Fri, 24 Jul 2020 15:55:26 +0200 Subject: [PATCH 29/34] Add missing type hints (#471) --- phpcs.xml.dist | 12 ----- phpstan.neon.dist | 6 +-- psalm.xml.dist | 1 + src/Console/ParaTestApplication.php | 2 +- src/Console/VersionProvider.php | 10 ++--- src/Coverage/CoverageMerger.php | 4 +- src/Logging/JUnit/Reader.php | 2 +- src/Logging/JUnit/TestSuite.php | 2 +- src/Logging/MetaProvider.php | 7 +++ src/Parser/Parser.php | 3 +- src/Runners/PHPUnit/Configuration.php | 2 +- src/Runners/PHPUnit/ExecutableTest.php | 1 + src/Runners/PHPUnit/SuiteLoader.php | 4 +- src/Runners/PHPUnit/Worker/BaseWorker.php | 5 ++- src/Runners/PHPUnit/Worker/WrapperWorker.php | 7 ++- .../Coverage/CoverageMergerTest.php | 3 +- .../Coverage/CoverageReporterTest.php | 3 +- test/Functional/FunctionalTestBase.php | 11 +++-- test/Functional/PHPUnitTest.php | 14 +++--- test/Functional/ParaTestInvoker.php | 6 ++- test/Functional/ProcessCallback.php | 14 +++--- .../Runners/PHPUnit/RunnerIntegrationTest.php | 4 +- .../Functional/Runners/PHPUnit/WorkerTest.php | 15 +++++-- test/Functional/SkippedOrIncompleteTest.php | 2 +- test/Functional/SqliteRunnerTest.php | 4 +- test/Functional/TestGenerator.php | 8 ++-- test/Functional/WrapperRunnerTest.php | 16 ++----- test/TestBase.php | 26 ++++++++--- .../Console/Commands/ParaTestCommandTest.php | 2 + test/Unit/Coverage/CoverageMergerTest.php | 4 +- test/Unit/Logging/JUnit/ReaderTest.php | 22 +++++----- test/Unit/Logging/JUnit/WriterTest.php | 3 +- test/Unit/Logging/LogInterpreterTest.php | 15 ++++--- test/Unit/Parser/ParsedClassTest.php | 2 + test/Unit/Parser/ParsedObjectTest.php | 1 + test/Unit/ResultTester.php | 14 ++++-- .../Runners/PHPUnit/ConfigurationTest.php | 44 ++++++++----------- test/Unit/Runners/PHPUnit/OptionsTest.php | 2 + .../Runners/PHPUnit/ResultPrinterTest.php | 2 +- test/Unit/Runners/PHPUnit/RunnerTest.php | 3 +- test/Unit/Runners/PHPUnit/SuiteLoaderTest.php | 15 +++---- test/Unit/Runners/PHPUnit/SuiteTest.php | 1 + test/Unit/Util/StrTest.php | 2 +- .../dataprovider-tests/DataProviderTest.php | 16 ++++--- test/fixtures/excluded-tests/PassingTest.php | 4 +- .../excluded/ExcludedFailingTest.php | 4 +- .../included/IncludedPassingTest.php | 4 +- test/fixtures/failing-tests/FailingTest.php | 8 +++- .../failing-tests/StopOnFailureTest.php | 11 +++-- .../UnitTestWithClassAnnotationTest.php | 20 ++++++--- .../failing-tests/UnitTestWithErrorTest.php | 7 ++- .../UnitTestWithMethodAnnotationsTest.php | 11 +++-- .../UnitTestWithFatalFunctionErrorTest.php | 8 ++-- .../UnitTestWithFatalParseErrorTest.php | 6 ++- .../some-dir/TestTokenTest.php | 4 +- .../some-dir2/TestTokenTest.php | 4 +- .../paratest-only-tests/EnvironmentTest.php | 11 +++-- .../paratest-only-tests/TestTokenTest.php | 6 ++- .../fixtures/passing-tests/DependsOnChain.php | 9 +++- test/fixtures/passing-tests/DependsOnSame.php | 7 ++- .../FunctionalModeEachTestCalledOnce.php | 6 ++- test/fixtures/passing-tests/GroupsTest.php | 12 ++--- .../passing-tests/LegacyNamespaceTest.php | 12 ++--- .../passing-tests/PreviouslyLoadedTest.php | 5 ++- test/fixtures/passing-tests/TestOfUnits.php | 8 ++-- .../level1/AnotherUnitTestInSubLevelTest.php | 11 +++-- .../level1/UnitTestInSubLevelTest.php | 16 ++++--- .../AnotherUnitTestInSubSubLevelTest.php | 11 +++-- .../level2/UnitTestInSubSubLevelTest.php | 11 +++-- .../fixtures/skipped-tests/IncompleteTest.php | 8 +++- .../SkippedAndIncompleteDataProviderTest.php | 12 +++-- .../skipped-tests/SkippedOrIncompleteTest.php | 16 ++++--- test/fixtures/skipped-tests/SkippedTest.php | 8 +++- test/fixtures/slow-tests/LongRunningTest.php | 11 +++-- .../special-classes/FileWithoutClass.php | 2 + .../special-classes/NameDoesNotMatch.php | 2 + .../SomeNamespace/ParserTestClass.php | 10 +++-- test/fixtures/warning-tests/AbstractTest.php | 4 +- .../warning-tests/HasOtherWarningsTest.php | 8 ++-- .../warning-tests/HasWarningsTest.php | 8 ++-- .../ErrorTest.php | 10 +++-- .../FailureTest.php | 8 +++- .../SuccessTest.php | 8 +++- 83 files changed, 409 insertions(+), 264 deletions(-) diff --git a/phpcs.xml.dist b/phpcs.xml.dist index 5284483..0927fc6 100644 --- a/phpcs.xml.dist +++ b/phpcs.xml.dist @@ -10,9 +10,7 @@ src test - */test/fixtures/* - bootstrap.php @@ -28,16 +26,6 @@ 0 - - 0 - - - 0 - - - 0 - - 0 diff --git a/phpstan.neon.dist b/phpstan.neon.dist index 1bc3757..5f3d9ba 100644 --- a/phpstan.neon.dist +++ b/phpstan.neon.dist @@ -1,9 +1,10 @@ includes: - - phar://phpstan.phar/conf/config.level5.neon + - phar://phpstan.phar/conf/config.level6.neon - vendor/phpstan/phpstan-phpunit/extension.neon parameters: tipsOfTheDay: false + checkMissingIterableValueType: false bootstrapFiles: - test/constants.php paths: @@ -12,8 +13,7 @@ parameters: - src/ - test/ excludes_analyse: - - test/fixtures/fatal-tests/* - - test/fixtures/generated-tests/* + - test/fixtures/* ignoreErrors: # @see https://github.com/phpstan/phpstan-src/pull/281 - diff --git a/psalm.xml.dist b/psalm.xml.dist index 7c0333d..64a2d85 100644 --- a/psalm.xml.dist +++ b/psalm.xml.dist @@ -9,6 +9,7 @@ + diff --git a/src/Console/ParaTestApplication.php b/src/Console/ParaTestApplication.php index 6cc3d13..0dac24a 100644 --- a/src/Console/ParaTestApplication.php +++ b/src/Console/ParaTestApplication.php @@ -28,7 +28,7 @@ public function __construct() * * @todo for now paratest will only run the phpunit command */ - public function doRun(InputInterface $input, OutputInterface $output) + public function doRun(InputInterface $input, OutputInterface $output): int { $this->add(new ParaTestCommand(new PHPUnit())); diff --git a/src/Console/VersionProvider.php b/src/Console/VersionProvider.php index 2809867..9c1c18e 100644 --- a/src/Console/VersionProvider.php +++ b/src/Console/VersionProvider.php @@ -21,29 +21,29 @@ final class VersionProvider { private const PACKAGE = 'brianium/paratest'; - /** @var null */ + /** @var string|null */ private $default; - public function __construct($default = null) + public function __construct(?string $default = null) { $this->default = $default; } - public static function getVersion($default = null) + public static function getVersion(?string $default = null): ?string { $provider = new self($default); return $provider->getParaTestVersion(); } - public function getParaTestVersion() + public function getParaTestVersion(): ?string { return $this->getComposerInstalledVersion(self::PACKAGE) ?? $this->getGitVersion() ?? $this->default; } - public function getGitVersion() + public function getGitVersion(): ?string { $cmd = 'git describe --tags --always --first-parent'; $process = Process::fromShellCommandline($cmd, __DIR__); diff --git a/src/Coverage/CoverageMerger.php b/src/Coverage/CoverageMerger.php index ec226ff..e4e08b9 100644 --- a/src/Coverage/CoverageMerger.php +++ b/src/Coverage/CoverageMerger.php @@ -24,8 +24,8 @@ class CoverageMerger { /** @var CodeCoverage */ private $coverage = null; - - private $test_limit = null; + /** @var int */ + private $test_limit; public function __construct(int $test_limit = 0) { diff --git a/src/Logging/JUnit/Reader.php b/src/Logging/JUnit/Reader.php index 3a19474..56c29ca 100644 --- a/src/Logging/JUnit/Reader.php +++ b/src/Logging/JUnit/Reader.php @@ -75,7 +75,7 @@ public function isSingleSuite(): bool * Return the Reader's collection * of test suites. * - * @return array + * @return TestSuite[] */ public function getSuites(): array { diff --git a/src/Logging/JUnit/TestSuite.php b/src/Logging/JUnit/TestSuite.php index 6efb7b2..0f36478 100644 --- a/src/Logging/JUnit/TestSuite.php +++ b/src/Logging/JUnit/TestSuite.php @@ -40,7 +40,7 @@ class TestSuite /** * Nested suites. * - * @var array + * @var TestSuite[] */ public $suites = []; diff --git a/src/Logging/MetaProvider.php b/src/Logging/MetaProvider.php index 2bc730c..2648a19 100644 --- a/src/Logging/MetaProvider.php +++ b/src/Logging/MetaProvider.php @@ -4,6 +4,8 @@ namespace ParaTest\Logging; +use Exception; + use function preg_match; use function strtolower; @@ -16,6 +18,7 @@ * @method int getTotalFailures() * @method int getTotalErrors() * @method int getTotalWarning() + * @method int getTotalTime() * @method string[] getFailures() * @method string[] getErrors() * @method string[] getWarnings() @@ -42,6 +45,8 @@ abstract class MetaProvider * Simplify aggregation of totals or messages. * * @param array $args + * + * @return float|int|array */ public function __call(string $method, array $args) { @@ -52,6 +57,8 @@ public function __call(string $method, array $args) if (preg_match(self::$messageMethod, $method, $matches) && $type = strtolower($matches[1])) { return $this->getMessages($type); } + + throw new Exception("Method $method uknown"); } /** diff --git a/src/Parser/Parser.php b/src/Parser/Parser.php index b584c50..036f606 100644 --- a/src/Parser/Parser.php +++ b/src/Parser/Parser.php @@ -5,6 +5,7 @@ namespace ParaTest\Parser; use InvalidArgumentException; +use PHPStan\Testing\TestCase; use ReflectionClass; use ReflectionException; use ReflectionMethod; @@ -27,7 +28,7 @@ class Parser */ private $path; - /** @var ReflectionClass */ + /** @var ReflectionClass */ private $refl; /** diff --git a/src/Runners/PHPUnit/Configuration.php b/src/Runners/PHPUnit/Configuration.php index 0da0e4c..df597a9 100644 --- a/src/Runners/PHPUnit/Configuration.php +++ b/src/Runners/PHPUnit/Configuration.php @@ -113,7 +113,7 @@ public function getSuites(): ?array return $suites; } - public function hasSuites() + public function hasSuites(): bool { return ! empty($this->getSuitesName()); } diff --git a/src/Runners/PHPUnit/ExecutableTest.php b/src/Runners/PHPUnit/ExecutableTest.php index e58224a..78c2bd2 100644 --- a/src/Runners/PHPUnit/ExecutableTest.php +++ b/src/Runners/PHPUnit/ExecutableTest.php @@ -34,6 +34,7 @@ abstract class ExecutableTest */ protected $temp; + /** @var array */ protected $pipes = []; /** diff --git a/src/Runners/PHPUnit/SuiteLoader.php b/src/Runners/PHPUnit/SuiteLoader.php index 01d1c8c..6ab0890 100644 --- a/src/Runners/PHPUnit/SuiteLoader.php +++ b/src/Runners/PHPUnit/SuiteLoader.php @@ -30,7 +30,7 @@ class SuiteLoader */ protected $files = []; - /** @var array|null */ + /** @var string[]|null */ protected $suitesName = null; /** @@ -362,7 +362,7 @@ protected function createSuite(string $path, ParsedClass $class): Suite ); } - private function createFullSuite($suiteName, string $configPath): FullSuite + private function createFullSuite(string $suiteName, string $configPath): FullSuite { return new FullSuite($suiteName, $configPath); } diff --git a/src/Runners/PHPUnit/Worker/BaseWorker.php b/src/Runners/PHPUnit/Worker/BaseWorker.php index 7d993a9..18fcb23 100644 --- a/src/Runners/PHPUnit/Worker/BaseWorker.php +++ b/src/Runners/PHPUnit/Worker/BaseWorker.php @@ -36,6 +36,7 @@ abstract class BaseWorker ]; /** @var resource|null */ protected $proc; + /** @var array */ protected $pipes; /** @var int */ protected $inExecution = 0; @@ -135,7 +136,7 @@ public function checkNotCrashed(): void } } - public function getCrashReport() + public function getCrashReport(): string { $lastCommand = isset($this->commands) ? ' Last executed command: ' . end($this->commands) : ''; @@ -165,7 +166,7 @@ protected function setExitCode(array $status): void $this->exitCode = $status['exitcode']; } - private function readAllStderr() + private function readAllStderr(): string { return stream_get_contents($this->pipes[2]); } diff --git a/src/Runners/PHPUnit/Worker/WrapperWorker.php b/src/Runners/PHPUnit/Worker/WrapperWorker.php index 6546060..8f98545 100644 --- a/src/Runners/PHPUnit/Worker/WrapperWorker.php +++ b/src/Runners/PHPUnit/Worker/WrapperWorker.php @@ -26,6 +26,9 @@ class WrapperWorker extends BaseWorker /** @var ExecutableTest|null */ private $currentlyExecuting; + /** + * @return resource + */ public function stdout() { return $this->pipes[1]; @@ -126,10 +129,12 @@ public function waitForStop(): void } } - public function getCoverageFileName() + public function getCoverageFileName(): ?string { if ($this->currentlyExecuting !== null) { return $this->currentlyExecuting->getCoverageFileName(); } + + return null; } } diff --git a/test/Functional/Coverage/CoverageMergerTest.php b/test/Functional/Coverage/CoverageMergerTest.php index 6bf53c5..cc004f4 100644 --- a/test/Functional/Coverage/CoverageMergerTest.php +++ b/test/Functional/Coverage/CoverageMergerTest.php @@ -57,7 +57,8 @@ public function testCoverageFromFileIsDeletedAfterAdd(array $coverageFiles): voi } /** - * @param string[] $coverageFiles + * @param string[] $coverageFiles + * @param class-string $expectedClass * * @dataProvider getCoverageFileProvider */ diff --git a/test/Functional/Coverage/CoverageReporterTest.php b/test/Functional/Coverage/CoverageReporterTest.php index f28f2e8..c8acb2f 100644 --- a/test/Functional/Coverage/CoverageReporterTest.php +++ b/test/Functional/Coverage/CoverageReporterTest.php @@ -43,7 +43,8 @@ protected function tearDown(): void } /** - * @param string[] $coverageFiles + * @param string[] $coverageFiles + * @param class-string $expectedReportClass * * @dataProvider getReporterProvider */ diff --git a/test/Functional/FunctionalTestBase.php b/test/Functional/FunctionalTestBase.php index 72cc871..3bf415f 100644 --- a/test/Functional/FunctionalTestBase.php +++ b/test/Functional/FunctionalTestBase.php @@ -13,7 +13,7 @@ class FunctionalTestBase extends PHPUnit\Framework\TestCase { - protected function fixture($fixture) + protected function fixture(string $fixture): string { $fixture = FIXTURES . DS . $fixture; if (! file_exists($fixture)) { @@ -23,15 +23,18 @@ protected function fixture($fixture) return $fixture; } - protected function invokeParatest($path, $options = [], $callback = null) + protected function invokeParatest(string $path, array $options = [], ?callable $callback = null): Process { $invoker = new ParaTestInvoker($this->fixture($path), BOOTSTRAP); return $invoker->execute($options, $callback); } - protected function assertTestsPassed(Process $proc, $testPattern = '\d+', $assertionPattern = '\d+'): void - { + protected function assertTestsPassed( + Process $proc, + string $testPattern = '\d+', + string $assertionPattern = '\d+' + ): void { $this->assertMatchesRegularExpression( "/OK \($testPattern tests?, $assertionPattern assertions?\)/", $proc->getOutput() diff --git a/test/Functional/PHPUnitTest.php b/test/Functional/PHPUnitTest.php index ea5ce67..be3c557 100644 --- a/test/Functional/PHPUnitTest.php +++ b/test/Functional/PHPUnitTest.php @@ -228,7 +228,7 @@ public function testTestTokenEnvVarIsPassed(): void 'passing-tests', ['path' => 'test/fixtures/paratest-only-tests/TestTokenTest.php'] ); - $this->assertTestsPassed($proc, 1, 1); + $this->assertTestsPassed($proc, '1', '1'); } public function testLoggingXmlOfSingleFile(): void @@ -239,7 +239,7 @@ public function testLoggingXmlOfSingleFile(): void 'log-junit' => $output, 'bootstrap' => BOOTSTRAP, ]); - $this->assertTestsPassed($proc, 5, 5); + $this->assertTestsPassed($proc, '5', '5'); $this->assertFileExists($output); if (! file_exists($output)) { return; @@ -326,7 +326,7 @@ public function testEachTestRunsExactlyOnceOnChainDependencyOnFunctionalMode(): 'passing-tests/DependsOnChain.php', ['bootstrap' => BOOTSTRAP, 'functional'] ); - $this->assertTestsPassed($proc, 5, 5); + $this->assertTestsPassed($proc, '5', '5'); } public function testEachTestRunsExactlyOnceOnSameDependencyOnFunctionalMode(): void @@ -335,7 +335,7 @@ public function testEachTestRunsExactlyOnceOnSameDependencyOnFunctionalMode(): v 'passing-tests/DependsOnSame.php', ['bootstrap' => BOOTSTRAP, 'functional'] ); - $this->assertTestsPassed($proc, 3, 3); + $this->assertTestsPassed($proc, '3', '3'); } public function testFunctionalModeEachTestCalledOnce(): void @@ -344,10 +344,10 @@ public function testFunctionalModeEachTestCalledOnce(): void 'passing-tests/FunctionalModeEachTestCalledOnce.php', ['bootstrap' => BOOTSTRAP, 'functional'] ); - $this->assertTestsPassed($proc, 2, 2); + $this->assertTestsPassed($proc, '2', '2'); } - public function setsCoveragePhpDataProvider() + public function setsCoveragePhpDataProvider(): array { return [ [ @@ -420,7 +420,7 @@ public function testGetRunnerOptions(array $options, array $expected): void $this->assertEquals($expected, $options); } - public function getRunnerOptionsDataProvider() + public function getRunnerOptionsDataProvider(): array { return [ 'default' => [ diff --git a/test/Functional/ParaTestInvoker.php b/test/Functional/ParaTestInvoker.php index ae1ad4f..8942b97 100644 --- a/test/Functional/ParaTestInvoker.php +++ b/test/Functional/ParaTestInvoker.php @@ -17,10 +17,12 @@ class ParaTestInvoker { + /** @var string */ public $path; + /** @var string */ public $bootstrap; - public function __construct($path, $bootstrap) + public function __construct(string $path, string $bootstrap) { $this->path = $path; $this->bootstrap = $bootstrap; @@ -46,7 +48,7 @@ public function execute(array $options = [], ?callable $callback = null): Proces return $proc; } - private function buildCommand($options = []) + private function buildCommand(array $options = []): string { $cmd = sprintf( '%s %s --bootstrap %s --phpunit %s', diff --git a/test/Functional/ProcessCallback.php b/test/Functional/ProcessCallback.php index 5578e0f..9eb77c0 100644 --- a/test/Functional/ProcessCallback.php +++ b/test/Functional/ProcessCallback.php @@ -6,27 +6,23 @@ class ProcessCallback { + /** @var string */ protected $type; + /** @var string */ protected $buffer; - public function callback($type, $buffer): void + public function callback(string $type, string $buffer): void { $this->type = $type; $this->buffer = $buffer; } - /** - * @return mixed - */ - public function getType() + public function getType(): string { return $this->type; } - /** - * @return mixed - */ - public function getBuffer() + public function getBuffer(): string { return $this->buffer; } diff --git a/test/Functional/Runners/PHPUnit/RunnerIntegrationTest.php b/test/Functional/Runners/PHPUnit/RunnerIntegrationTest.php index fdf75db..4c60921 100644 --- a/test/Functional/Runners/PHPUnit/RunnerIntegrationTest.php +++ b/test/Functional/Runners/PHPUnit/RunnerIntegrationTest.php @@ -47,7 +47,7 @@ protected function tearDown(): void parent::tearDown(); } - private function globTempDir($pattern) + private function globTempDir(string $pattern): array { return glob(sys_get_temp_dir() . DS . $pattern); } @@ -95,7 +95,7 @@ public function testLogJUnitCreatesXmlFile(): void unlink($outputPath); } - public function assertJunitXmlIsCorrect($path): void + public function assertJunitXmlIsCorrect(string $path): void { $doc = simplexml_load_file($path); $suites = $doc->xpath('//testsuite'); diff --git a/test/Functional/Runners/PHPUnit/WorkerTest.php b/test/Functional/Runners/PHPUnit/WorkerTest.php index 25955ff..1cbc95b 100644 --- a/test/Functional/Runners/PHPUnit/WorkerTest.php +++ b/test/Functional/Runners/PHPUnit/WorkerTest.php @@ -20,6 +20,7 @@ class WorkerTest extends TestBase { + /** @var string[][] */ protected static $descriptorspec = [ 0 => ['pipe', 'r'], 1 => ['pipe', 'w'], @@ -43,7 +44,7 @@ public function tearDown(): void $this->deleteIfExists(sys_get_temp_dir() . DS . 'test2.xml'); } - private function deleteIfExists($file): void + private function deleteIfExists(string $file): void { if (! file_exists($file)) { return; @@ -130,6 +131,9 @@ public function testProcessIsMarkedAsCrashedWhenItFinishesWithNonZeroExitCode(): $this->assertTrue($worker->isCrashed()); } + /** + * @return resource + */ private function createSomeClosedProcess() { $descriptorspec = [ @@ -148,7 +152,10 @@ private function createSomeClosedProcess() return $proc; } - private function setPerReflection($instance, $property, $value): void + /** + * @param mixed $value + */ + private function setPerReflection(object $instance, string $property, $value): void { $reflectionProperty = new ReflectionProperty(get_class($instance), $property); $reflectionProperty->setAccessible(true); @@ -177,7 +184,7 @@ public function testCanExecuteMultiplePHPUnitCommands(): void $this->assertJUnitLogIsValid($testLog2); } - private function getCommand($testFile, $logFile) + private function getCommand(string $testFile, string $logFile): array { return [ PHPUNIT, @@ -189,7 +196,7 @@ private function getCommand($testFile, $logFile) ]; } - private function assertJUnitLogIsValid($logFile): void + private function assertJUnitLogIsValid(string $logFile): void { $this->assertFileExists($logFile); $log = new SimpleXMLElement(file_get_contents($logFile)); diff --git a/test/Functional/SkippedOrIncompleteTest.php b/test/Functional/SkippedOrIncompleteTest.php index 63da263..d4bd668 100644 --- a/test/Functional/SkippedOrIncompleteTest.php +++ b/test/Functional/SkippedOrIncompleteTest.php @@ -122,7 +122,7 @@ public function testDataProviderWithSkippedInDefaultMode(): void $this->assertStringContainsString($expected, $proc->getOutput()); } - protected function assertContainsNSkippedTests($n, $output): void + protected function assertContainsNSkippedTests(int $n, string $output): void { preg_match('/\n\n([\.ISEF].*)\n\nTime/s', $output, $matches); $this->assertCount(2, $matches); diff --git a/test/Functional/SqliteRunnerTest.php b/test/Functional/SqliteRunnerTest.php index bc2ebea..c640f0b 100644 --- a/test/Functional/SqliteRunnerTest.php +++ b/test/Functional/SqliteRunnerTest.php @@ -27,7 +27,7 @@ public function testResultsAreCorrect(): void ]); $expected = self::TEST_CLASSES * self::TEST_METHODS_PER_CLASS; - $this->assertTestsPassed($proc, $expected, $expected); + $this->assertTestsPassed($proc, (string) $expected, (string) $expected); } public function testRunningFewerTestsThanTheWorkersIsPossible(): void @@ -40,7 +40,7 @@ public function testRunningFewerTestsThanTheWorkersIsPossible(): void 'processes' => 2, ]); - $this->assertTestsPassed($proc, 1, 1); + $this->assertTestsPassed($proc, '1', '1'); } public function testExitCodes(): void diff --git a/test/Functional/TestGenerator.php b/test/Functional/TestGenerator.php index bc14d03..c2ef839 100644 --- a/test/Functional/TestGenerator.php +++ b/test/Functional/TestGenerator.php @@ -11,7 +11,9 @@ class TestGenerator { + /** @var string */ public $path; + /** @var string */ private $fullPath; public function __construct() @@ -26,7 +28,7 @@ public function __construct() mkdir($this->fullPath, 0777, true); } - public function generate($tests = 1, $methods = 1): void + public function generate(int $tests = 1, int $methods = 1): void { for ($i = 0; $i < $tests; ++$i) { $name = "Generated{$i}Test"; @@ -35,12 +37,12 @@ public function generate($tests = 1, $methods = 1): void } } - private function generateTestString($testName, $methods = 1) + private function generateTestString(string $testName, int $methods = 1): string { $php = '<' . "?php\n\nclass $testName extends PHPUnit\\Framework\\TestCase\n{\n"; for ($i = 0; $i < $methods; ++$i) { - $php .= "\tpublic function testMethod{$i}(){"; + $php .= "\tpublic function testMethod{$i}(): void{"; $php .= "\$this->assertTrue(true);}\n"; } diff --git a/test/Functional/WrapperRunnerTest.php b/test/Functional/WrapperRunnerTest.php index bbd5b48..03bfae7 100644 --- a/test/Functional/WrapperRunnerTest.php +++ b/test/Functional/WrapperRunnerTest.php @@ -24,7 +24,7 @@ public function testResultsAreCorrect(): void ]); $expected = self::TEST_CLASSES * self::TEST_METHODS_PER_CLASS; - $this->assertTestsPassed($proc, $expected, $expected); + $this->assertTestsPassed($proc, (string) $expected, (string) $expected); } public function testRunningFewerTestsThanTheWorkersIsPossible(): void @@ -37,20 +37,10 @@ public function testRunningFewerTestsThanTheWorkersIsPossible(): void 'processes' => 2, ]); - $this->assertTestsPassed($proc, 1, 1); + $this->assertTestsPassed($proc, '1', '1'); } - public function functionalModeEnabledDataProvider() - { - return [[false]]; - } - - /** - * @param mixed $functionalModeEnabled - * - * @dataProvider functionalModeEnabledDataProvider - */ - public function testExitCodes($functionalModeEnabled): void + public function testExitCodes(): void { $options = [ 'runner' => 'WrapperRunner', diff --git a/test/TestBase.php b/test/TestBase.php index 37369b1..a81687b 100644 --- a/test/TestBase.php +++ b/test/TestBase.php @@ -12,6 +12,7 @@ use RecursiveIteratorIterator; use ReflectionClass; use ReflectionObject; +use ReflectionProperty; use SebastianBergmann\Environment\Runtime; use SplFileObject; @@ -37,7 +38,7 @@ protected static function getPhpUnitVersion(): string return Version::id(); } - protected function fixture($fixture) + protected function fixture(string $fixture): string { $fixture = FIXTURES . DS . $fixture; if (! file_exists($fixture)) { @@ -47,7 +48,7 @@ protected function fixture($fixture) return $fixture; } - protected function findTests($dir) + protected function findTests(string $dir): array { $it = new RecursiveDirectoryIterator($dir, RecursiveIteratorIterator::SELF_FIRST); $it = new RecursiveIteratorIterator($it); @@ -63,21 +64,27 @@ protected function findTests($dir) return $files; } - protected function getObjectValue($object, $property) + /** + * @return mixed + */ + protected function getObjectValue(object $object, string $property) { $prop = $this->getAccessibleProperty($object, $property); return $prop->getValue($object); } - protected function setObjectValue($object, $property, $value) + /** + * @param mixed $value + */ + protected function setObjectValue(object $object, string $property, $value): void { $prop = $this->getAccessibleProperty($object, $property); - return $prop->setValue($object, $value); + $prop->setValue($object, $value); } - private function getAccessibleProperty($object, $property) + private function getAccessibleProperty(object $object, string $property): ReflectionProperty { $refl = new ReflectionObject($object); $prop = $refl->getProperty($property); @@ -114,7 +121,12 @@ public function callStatic(string $class, string $methodName, ...$args) return self::callMethod($class, $methodName, $args); } - protected static function callMethod($objectOrClassName, $methodName, $args = null) + /** + * @param string|object $objectOrClassName + * + * @return mixed + */ + protected static function callMethod($objectOrClassName, string $methodName, ?array $args = null) { $isStatic = is_string($objectOrClassName); diff --git a/test/Unit/Console/Commands/ParaTestCommandTest.php b/test/Unit/Console/Commands/ParaTestCommandTest.php index e7fff9b..5052451 100644 --- a/test/Unit/Console/Commands/ParaTestCommandTest.php +++ b/test/Unit/Console/Commands/ParaTestCommandTest.php @@ -16,7 +16,9 @@ class ParaTestCommandTest extends TestBase { + /** @var PHPUnit */ protected $tester; + /** @var ParaTestCommand */ protected $command; public function setUp(): void diff --git a/test/Unit/Coverage/CoverageMergerTest.php b/test/Unit/Coverage/CoverageMergerTest.php index 7940744..0c63fe6 100644 --- a/test/Unit/Coverage/CoverageMergerTest.php +++ b/test/Unit/Coverage/CoverageMergerTest.php @@ -31,7 +31,7 @@ public function testSimpleMerge(): void // Every time the two above files are changed, the line numbers // may change, and so these two numbers may need adjustments $firstFileFirstLine = 46; - $secondFileFirstLine = 47; + $secondFileFirstLine = 53; $filter = new Filter(); $filter->addFilesToWhitelist([$firstFile, $secondFile]); @@ -83,7 +83,7 @@ public function testSimpleMergeLimited(): void // Every time the two above files are changed, the line numbers // may change, and so these two numbers may need adjustments $firstFileFirstLine = 46; - $secondFileFirstLine = 47; + $secondFileFirstLine = 53; $filter = new Filter(); $filter->addFilesToWhitelist([$firstFile, $secondFile]); diff --git a/test/Unit/Logging/JUnit/ReaderTest.php b/test/Unit/Logging/JUnit/ReaderTest.php index a17cd6a..df2fbbb 100644 --- a/test/Unit/Logging/JUnit/ReaderTest.php +++ b/test/Unit/Logging/JUnit/ReaderTest.php @@ -6,6 +6,7 @@ use InvalidArgumentException; use ParaTest\Logging\JUnit\Reader; +use ParaTest\Logging\JUnit\TestSuite; use ParaTest\Tests\TestBase; use PHPUnit\Framework\ExpectationFailedException; use stdClass; @@ -15,10 +16,15 @@ class ReaderTest extends TestBase { + /** @var string */ protected $mixedPath; + /** @var Reader */ protected $mixed; + /** @var Reader */ protected $single; + /** @var Reader */ protected $empty; + /** @var Reader */ protected $multi_errors; public function setUp(): void @@ -50,7 +56,7 @@ public function testIsSingleSuiteReturnsFalseForMultipleSuites(): void $this->assertFalse($this->mixed->isSingleSuite()); } - public function testMixedSuiteShouldConstructRootSuite() + public function testMixedSuiteShouldConstructRootSuite(): TestSuite { $suites = $this->mixed->getSuites(); $this->assertCount(1, $suites); @@ -65,11 +71,9 @@ public function testMixedSuiteShouldConstructRootSuite() } /** - * @param mixed $suite - * * @depends testMixedSuiteShouldConstructRootSuite */ - public function testMixedSuiteConstructsChildSuites($suite) + public function testMixedSuiteConstructsChildSuites(TestSuite $suite): TestSuite { $this->assertCount(3, $suite->suites); $first = $suite->suites[0]; @@ -88,11 +92,9 @@ public function testMixedSuiteConstructsChildSuites($suite) } /** - * @param mixed $suite - * * @depends testMixedSuiteConstructsChildSuites */ - public function testMixedSuiteConstructsTestCases($suite): void + public function testMixedSuiteConstructsTestCases(TestSuite $suite): void { $this->assertCount(3, $suite->cases); $first = $suite->cases[0]; @@ -135,7 +137,7 @@ public function testMixedSuiteCasesLoadErrors(): void ); } - public function testSingleSuiteShouldConstructRootSuite() + public function testSingleSuiteShouldConstructRootSuite(): TestSuite { $suites = $this->single->getSuites(); $this->assertCount(1, $suites); @@ -294,9 +296,7 @@ public function testGetMultiErrorsMessages(): void public function testMixedGetFeedback(): void { - $totalCases = 7; - $casesProcessed = 0; - $feedback = $this->mixed->getFeedback($totalCases, $casesProcessed); + $feedback = $this->mixed->getFeedback(); $this->assertEquals(['.', 'F', '.', 'E', '.', 'F', '.'], $feedback); } diff --git a/test/Unit/Logging/JUnit/WriterTest.php b/test/Unit/Logging/JUnit/WriterTest.php index a555cf7..c4631bd 100644 --- a/test/Unit/Logging/JUnit/WriterTest.php +++ b/test/Unit/Logging/JUnit/WriterTest.php @@ -15,10 +15,11 @@ class WriterTest extends TestBase { + /** @var Writer */ protected $writer; - /** @var LogInterpreter */ protected $interpreter; + /** @var string */ protected $passing; public function setUp(): void diff --git a/test/Unit/Logging/LogInterpreterTest.php b/test/Unit/Logging/LogInterpreterTest.php index ac2aeaa..e545fd5 100644 --- a/test/Unit/Logging/LogInterpreterTest.php +++ b/test/Unit/Logging/LogInterpreterTest.php @@ -7,11 +7,13 @@ use ParaTest\Logging\JUnit\Reader; use ParaTest\Logging\LogInterpreter; use ParaTest\Tests\Unit\ResultTester; +use PHPUnit\Framework\MockObject\MockObject; use function array_pop; class LogInterpreterTest extends ResultTester { + /** @var LogInterpreter */ protected $interpreter; public function setUp(): void @@ -163,7 +165,7 @@ public function testGetCasesExtendEmptyCasesFromSuites(): void } } - public function testFlattenCasesReturnsCorrectNumberOfSuites() + public function testFlattenCasesReturnsCorrectNumberOfSuites(): array { $suites = $this->interpreter->flattenCases(); $this->assertCount(4, $suites); @@ -172,11 +174,9 @@ public function testFlattenCasesReturnsCorrectNumberOfSuites() } /** - * @param mixed $suites - * * @depends testFlattenCasesReturnsCorrectNumberOfSuites */ - public function testFlattenedSuiteHasCorrectTotals($suites): void + public function testFlattenedSuiteHasCorrectTotals(array $suites): void { $first = $suites[0]; $this->assertEquals('UnitTestWithClassAnnotationTest', $first->name); @@ -191,12 +191,15 @@ public function testFlattenedSuiteHasCorrectTotals($suites): void $this->assertEquals('0.006109', $first->time); } - protected function getReader($suiteName) + protected function getReader(string $suiteName): Reader { return new Reader($this->$suiteName->getTempFile()); } - protected function getMockReader() + /** + * @return Reader&MockObject + */ + protected function getMockReader(): Reader { return $this->getMockBuilder(Reader::class) ->disableOriginalConstructor() diff --git a/test/Unit/Parser/ParsedClassTest.php b/test/Unit/Parser/ParsedClassTest.php index e016cd1..17aded3 100644 --- a/test/Unit/Parser/ParsedClassTest.php +++ b/test/Unit/Parser/ParsedClassTest.php @@ -10,7 +10,9 @@ class ParsedClassTest extends TestBase { + /** @var ParsedClass */ protected $class; + /** @var ParsedFunction[] */ protected $methods; public function setUp(): void diff --git a/test/Unit/Parser/ParsedObjectTest.php b/test/Unit/Parser/ParsedObjectTest.php index fb61a27..f3d15f6 100644 --- a/test/Unit/Parser/ParsedObjectTest.php +++ b/test/Unit/Parser/ParsedObjectTest.php @@ -9,6 +9,7 @@ class ParsedObjectTest extends TestBase { + /** @var ParsedClass */ protected $parsedClass; public function setUp(): void diff --git a/test/Unit/ResultTester.php b/test/Unit/ResultTester.php index fbe1e4d..c5aecad 100644 --- a/test/Unit/ResultTester.php +++ b/test/Unit/ResultTester.php @@ -10,12 +10,18 @@ abstract class ResultTester extends TestBase { - protected $errorSuite; + /** @var Suite */ protected $failureSuite; + /** @var Suite */ protected $otherErrorSuite; + /** @var Suite */ protected $mixedSuite; + /** @var Suite */ protected $passingSuite; + /** @var Suite */ protected $dataProviderSuite; + /** @var Suite */ + protected $errorSuite; public function setUp(): void { @@ -27,12 +33,12 @@ public function setUp(): void $this->dataProviderSuite = $this->getSuiteWithResult('data-provider-result.xml', 50); } - public function getSuiteWithResult($result, $methodCount) + public function getSuiteWithResult(string $result, int $methodCount): Suite { $result = FIXTURES . DS . 'results' . DS . $result; $functions = []; for ($i = 0; $i < $methodCount; ++$i) { - $functions[] = $this->mockFunction($i); + $functions[] = $this->mockFunction((string) $i); } $suite = new Suite('', $functions); @@ -41,7 +47,7 @@ public function getSuiteWithResult($result, $methodCount) return $suite; } - protected function mockFunction($functionCount) + protected function mockFunction(string $functionCount): ParsedFunction { return new ParsedFunction('doc', 'public', 'func' . $functionCount); } diff --git a/test/Unit/Runners/PHPUnit/ConfigurationTest.php b/test/Unit/Runners/PHPUnit/ConfigurationTest.php index 1c374da..caaa17d 100644 --- a/test/Unit/Runners/PHPUnit/ConfigurationTest.php +++ b/test/Unit/Runners/PHPUnit/ConfigurationTest.php @@ -34,7 +34,7 @@ public function testToStringReturnsPath(): void $this->assertEquals($this->path, (string) $this->config); } - public function testGetSuitesShouldReturnCorrectNumberOfSuites() + public function testGetSuitesShouldReturnCorrectNumberOfSuites(): array { $suites = $this->config->getSuites(); $this->assertCount(2, $suites); @@ -48,30 +48,10 @@ public function testHasSuites(): void $this->assertTrue($actual); } - public function testGlobbingSupport() - { - $basePath = getcwd() . DS; - $configuration = new Configuration($this->fixture('phpunit-globbing.xml')); - /** @var SuitePath[][] $suites */ - $suites = $configuration->getSuites(); - $this->assertEquals( - $basePath . 'test' . DS . 'fixtures' . DS . 'globbing-support-tests' . DS . 'some-dir', - $suites['ParaTest Fixtures'][0]->getPath() - ); - $this->assertEquals( - $basePath . 'test' . DS . 'fixtures' . DS . 'globbing-support-tests' . DS . 'some-dir2', - $suites['ParaTest Fixtures'][1]->getPath() - ); - - return $suites; - } - /** - * @param mixed $suites - * * @depends testGetSuitesShouldReturnCorrectNumberOfSuites */ - public function testSuitesContainSuiteNameAtKey($suites) + public function testSuitesContainSuiteNameAtKey(array $suites): array { $this->assertArrayHasKey('ParaTest Unit Tests', $suites); $this->assertArrayHasKey('ParaTest Functional Tests', $suites); @@ -80,11 +60,9 @@ public function testSuitesContainSuiteNameAtKey($suites) } /** - * @param mixed $suites - * * @depends testSuitesContainSuiteNameAtKey */ - public function testSuitesContainPathAsValue($suites): void + public function testSuitesContainPathAsValue(array $suites): void { $basePath = getcwd() . DS; $unitSuite = $suites['ParaTest Unit Tests']; @@ -113,6 +91,22 @@ public function testGetEnvironmentVariables(): void $this->assertCount(0, $config->getEnvironmentVariables()); } + public function testGlobbingSupport(): void + { + $basePath = getcwd() . DS; + $configuration = new Configuration($this->fixture('phpunit-globbing.xml')); + /** @var SuitePath[][] $suites */ + $suites = $configuration->getSuites(); + $this->assertEquals( + $basePath . 'test' . DS . 'fixtures' . DS . 'globbing-support-tests' . DS . 'some-dir', + $suites['ParaTest Fixtures'][0]->getPath() + ); + $this->assertEquals( + $basePath . 'test' . DS . 'fixtures' . DS . 'globbing-support-tests' . DS . 'some-dir2', + $suites['ParaTest Fixtures'][1]->getPath() + ); + } + public function testLoadConfigEvenIfLibXmlEntityLoaderIsDisabled(): void { $before = libxml_disable_entity_loader(); diff --git a/test/Unit/Runners/PHPUnit/OptionsTest.php b/test/Unit/Runners/PHPUnit/OptionsTest.php index 163b862..8ecf199 100644 --- a/test/Unit/Runners/PHPUnit/OptionsTest.php +++ b/test/Unit/Runners/PHPUnit/OptionsTest.php @@ -18,7 +18,9 @@ class OptionsTest extends TestBase { + /** @var Options */ protected $options; + /** @var array */ protected $unfiltered; /** @var string */ private $currentCwd; diff --git a/test/Unit/Runners/PHPUnit/ResultPrinterTest.php b/test/Unit/Runners/PHPUnit/ResultPrinterTest.php index c0a7ae3..82278db 100644 --- a/test/Unit/Runners/PHPUnit/ResultPrinterTest.php +++ b/test/Unit/Runners/PHPUnit/ResultPrinterTest.php @@ -354,7 +354,7 @@ public function testResultPrinterAdjustsTotalCountForDataProviders(): void $this->assertEquals($expected, $feedback); } - protected function getStartOutput(Options $options) + protected function getStartOutput(Options $options): string { ob_start(); $this->printer->start($options); diff --git a/test/Unit/Runners/PHPUnit/RunnerTest.php b/test/Unit/Runners/PHPUnit/RunnerTest.php index 2912bfb..6ac55b0 100644 --- a/test/Unit/Runners/PHPUnit/RunnerTest.php +++ b/test/Unit/Runners/PHPUnit/RunnerTest.php @@ -15,9 +15,8 @@ class RunnerTest extends TestBase { + /** @var Runner */ protected $runner; - protected $files; - protected $testDir; public function setUp(): void { diff --git a/test/Unit/Runners/PHPUnit/SuiteLoaderTest.php b/test/Unit/Runners/PHPUnit/SuiteLoaderTest.php index a32f396..891f922 100644 --- a/test/Unit/Runners/PHPUnit/SuiteLoaderTest.php +++ b/test/Unit/Runners/PHPUnit/SuiteLoaderTest.php @@ -6,6 +6,7 @@ use InvalidArgumentException; use ParaTest\Runners\PHPUnit\Options; +use ParaTest\Runners\PHPUnit\Suite; use ParaTest\Runners\PHPUnit\SuiteLoader; use ParaTest\Tests\TestBase; use RuntimeException; @@ -227,7 +228,7 @@ public function testLoadFileGetsPathOfFile(): void $this->assertEquals($path, array_shift($paths)); } - protected function getLoadedPaths($path, $loader = null) + protected function getLoadedPaths(string $path, ?SuiteLoader $loader = null): array { $loader = $loader ?: new SuiteLoader(); $loader->load($path); @@ -243,7 +244,7 @@ public function testLoadFileShouldLoadFileWhereNameDoesNotEndInTest(): void $this->assertEquals($path, array_shift($paths)); } - public function testLoadDirGetsPathOfAllTestsWithKeys() + public function testLoadDirGetsPathOfAllTestsWithKeys(): array { $path = $this->fixture('passing-tests'); $files = $this->findTests($path); @@ -259,11 +260,9 @@ public function testLoadDirGetsPathOfAllTestsWithKeys() } /** - * @param mixed $paraSuites - * * @depends testLoadDirGetsPathOfAllTestsWithKeys */ - public function testFirstParallelSuiteHasCorrectFunctions($paraSuites): void + public function testFirstParallelSuiteHasCorrectFunctions(array $paraSuites): void { $first = $this->suiteByPath('GroupsTest.php', $paraSuites); $functions = $first->getFunctions(); @@ -275,7 +274,7 @@ public function testFirstParallelSuiteHasCorrectFunctions($paraSuites): void $this->assertEquals('testAddition', $functions[4]->getName()); } - private function suiteByPath($path, array $paraSuites) + private function suiteByPath(string $path, array $paraSuites): Suite { foreach ($paraSuites as $completePath => $suite) { if (strstr($completePath, $path)) { @@ -287,11 +286,9 @@ private function suiteByPath($path, array $paraSuites) } /** - * @param mixed $paraSuites - * * @depends testLoadDirGetsPathOfAllTestsWithKeys */ - public function testSecondParallelSuiteHasCorrectFunctions($paraSuites): void + public function testSecondParallelSuiteHasCorrectFunctions(array $paraSuites): void { $second = $this->suiteByPath('LegacyNamespaceTest.php', $paraSuites); $functions = $second->getFunctions(); diff --git a/test/Unit/Runners/PHPUnit/SuiteTest.php b/test/Unit/Runners/PHPUnit/SuiteTest.php index a7c4e3f..416575a 100644 --- a/test/Unit/Runners/PHPUnit/SuiteTest.php +++ b/test/Unit/Runners/PHPUnit/SuiteTest.php @@ -9,6 +9,7 @@ class SuiteTest extends TestBase { + /** @var Suite */ protected $suite; public function setUp(): void diff --git a/test/Unit/Util/StrTest.php b/test/Unit/Util/StrTest.php index 6c1b856..5181a9e 100644 --- a/test/Unit/Util/StrTest.php +++ b/test/Unit/Util/StrTest.php @@ -24,7 +24,7 @@ public function testExplodeWithCleanup(string $delimiter, string $valueString, a $this->assertEquals($expected, $actual); } - public function explodeWithCleanupDataProvider() + public function explodeWithCleanupDataProvider(): array { return [ 'default' => [ diff --git a/test/fixtures/dataprovider-tests/DataProviderTest.php b/test/fixtures/dataprovider-tests/DataProviderTest.php index cf8b823..db891c8 100644 --- a/test/fixtures/dataprovider-tests/DataProviderTest.php +++ b/test/fixtures/dataprovider-tests/DataProviderTest.php @@ -1,11 +1,15 @@ assertEquals($expected, $actual); } @@ -23,7 +27,7 @@ public function dataProviderNumeric50() /** * @dataProvider dataProviderNamed50 */ - public function testNamedDataProvider50($expected, $actual) + public function testNamedDataProvider50($expected, $actual): void { $this->assertEquals($expected, $actual); } @@ -32,7 +36,7 @@ public function dataProviderNamed50() { $result = []; for ($i = 0; $i < 50; $i++) { - $name = 'name_of_test_' . $i; + $name = 'name_of_test_' . $i; $result[$name] = [$i, $i]; } @@ -42,7 +46,7 @@ public function dataProviderNamed50() /** * @dataProvider dataProviderNumeric1000 */ - public function testNumericDataProvider1000($expected, $actual) + public function testNumericDataProvider1000($expected, $actual): void { $this->assertEquals($expected, $actual); } @@ -60,7 +64,7 @@ public function dataProviderNumeric1000() /** * @dataProvider dataProviderIterable */ - public function testIterableDataProvider($expected, $actual) + public function testIterableDataProvider($expected, $actual): void { $this->assertEquals($expected, $actual); } diff --git a/test/fixtures/excluded-tests/PassingTest.php b/test/fixtures/excluded-tests/PassingTest.php index 32347fb..361ca77 100644 --- a/test/fixtures/excluded-tests/PassingTest.php +++ b/test/fixtures/excluded-tests/PassingTest.php @@ -1,8 +1,10 @@ assertTrue(true); } diff --git a/test/fixtures/excluded-tests/excluded/ExcludedFailingTest.php b/test/fixtures/excluded-tests/excluded/ExcludedFailingTest.php index babd29b..b3118ce 100644 --- a/test/fixtures/excluded-tests/excluded/ExcludedFailingTest.php +++ b/test/fixtures/excluded-tests/excluded/ExcludedFailingTest.php @@ -1,8 +1,10 @@ assertTrue(false); } diff --git a/test/fixtures/excluded-tests/included/IncludedPassingTest.php b/test/fixtures/excluded-tests/included/IncludedPassingTest.php index c4ebc96..85c550e 100644 --- a/test/fixtures/excluded-tests/included/IncludedPassingTest.php +++ b/test/fixtures/excluded-tests/included/IncludedPassingTest.php @@ -1,8 +1,10 @@ assertTrue(true); } diff --git a/test/fixtures/failing-tests/FailingTest.php b/test/fixtures/failing-tests/FailingTest.php index f42e1d6..1b29dd7 100644 --- a/test/fixtures/failing-tests/FailingTest.php +++ b/test/fixtures/failing-tests/FailingTest.php @@ -1,8 +1,12 @@ assertFalse(true); $this->assertTrue(false); diff --git a/test/fixtures/failing-tests/StopOnFailureTest.php b/test/fixtures/failing-tests/StopOnFailureTest.php index dee5ea1..e61a05c 100644 --- a/test/fixtures/failing-tests/StopOnFailureTest.php +++ b/test/fixtures/failing-tests/StopOnFailureTest.php @@ -1,11 +1,14 @@ assertTrue(true); } @@ -13,7 +16,7 @@ public function testOne() /** * @group fixtures */ - public function testTwo() + public function testTwo(): void { $this->assertFalse(true); } @@ -21,7 +24,7 @@ public function testTwo() /** * @group fixtures */ - public function testThree() + public function testThree(): void { $this->assertTrue(true); } @@ -29,7 +32,7 @@ public function testThree() /** * @group fixtures */ - public function testFour() + public function testFour(): void { $this->assertTrue(false); } diff --git a/test/fixtures/failing-tests/UnitTestWithClassAnnotationTest.php b/test/fixtures/failing-tests/UnitTestWithClassAnnotationTest.php index 17efd22..255da30 100644 --- a/test/fixtures/failing-tests/UnitTestWithClassAnnotationTest.php +++ b/test/fixtures/failing-tests/UnitTestWithClassAnnotationTest.php @@ -1,18 +1,24 @@ assertTrue(true); } @@ -21,7 +27,7 @@ public function testTruth() * @group fixtures * @pizza */ - public function testFalsehood() + public function testFalsehood(): void { $this->assertFalse(true); } @@ -29,21 +35,21 @@ public function testFalsehood() /** * @group fixtures */ - public function testArrayLength() + public function testArrayLength(): void { - $elems = [1,2,3,4,5]; + $elems = [1, 2, 3, 4, 5]; $this->assertEquals(5, sizeof($elems)); } /** * @test */ - public function itsATest() + public function itsATest(): void { $this->assertTrue(true); } - private function helperFunction() + private function helperFunction(): void { echo 'I am super helpful'; } diff --git a/test/fixtures/failing-tests/UnitTestWithErrorTest.php b/test/fixtures/failing-tests/UnitTestWithErrorTest.php index 310dc0e..e534e4e 100644 --- a/test/fixtures/failing-tests/UnitTestWithErrorTest.php +++ b/test/fixtures/failing-tests/UnitTestWithErrorTest.php @@ -1,5 +1,7 @@ assertTrue(true); } /** * @test */ - public function isItFalse() + public function isItFalse(): void { $this->assertFalse(false); } diff --git a/test/fixtures/failing-tests/UnitTestWithMethodAnnotationsTest.php b/test/fixtures/failing-tests/UnitTestWithMethodAnnotationsTest.php index 61c8cf1..f744131 100644 --- a/test/fixtures/failing-tests/UnitTestWithMethodAnnotationsTest.php +++ b/test/fixtures/failing-tests/UnitTestWithMethodAnnotationsTest.php @@ -1,10 +1,13 @@ assertTrue(true); } @@ -12,7 +15,7 @@ public function testTruth() /** * @group fixtures */ - public function testFalsehood() + public function testFalsehood(): void { $this->assertFalse(true); } @@ -20,9 +23,9 @@ public function testFalsehood() /** * @group fixtures */ - public function testArrayLength() + public function testArrayLength(): void { - $elems = [1,2,3,4,5]; + $elems = [1, 2, 3, 4, 5]; $this->assertEquals(5, sizeof($elems)); } } diff --git a/test/fixtures/fatal-tests/UnitTestWithFatalFunctionErrorTest.php b/test/fixtures/fatal-tests/UnitTestWithFatalFunctionErrorTest.php index 7c10729..8b6fa2f 100644 --- a/test/fixtures/fatal-tests/UnitTestWithFatalFunctionErrorTest.php +++ b/test/fixtures/fatal-tests/UnitTestWithFatalFunctionErrorTest.php @@ -1,5 +1,7 @@ assertFalse(false); diff --git a/test/fixtures/fatal-tests/UnitTestWithFatalParseErrorTest.php b/test/fixtures/fatal-tests/UnitTestWithFatalParseErrorTest.php index 75f3ad4..9166a1f 100644 --- a/test/fixtures/fatal-tests/UnitTestWithFatalParseErrorTest.php +++ b/test/fixtures/fatal-tests/UnitTestWithFatalParseErrorTest.php @@ -1,5 +1,7 @@ assertFalse(false); diff --git a/test/fixtures/globbing-support-tests/some-dir/TestTokenTest.php b/test/fixtures/globbing-support-tests/some-dir/TestTokenTest.php index 73e1e82..c42ee76 100644 --- a/test/fixtures/globbing-support-tests/some-dir/TestTokenTest.php +++ b/test/fixtures/globbing-support-tests/some-dir/TestTokenTest.php @@ -1,8 +1,10 @@ assertEquals(1, getenv('PARATEST')); } - public function testTestTokenVariableIsDefinedCorrectly() + public function testTestTokenVariableIsDefinedCorrectly(): void { - $token = getenv('TEST_TOKEN'); + $token = getenv('TEST_TOKEN'); $unqiueToken = getenv('UNIQUE_TEST_TOKEN'); $this->assertTrue(is_numeric($token)); - $this->assertTrue(!empty($unqiueToken)); + $this->assertTrue(! empty($unqiueToken)); } } diff --git a/test/fixtures/paratest-only-tests/TestTokenTest.php b/test/fixtures/paratest-only-tests/TestTokenTest.php index 0b76d01..0e4129c 100644 --- a/test/fixtures/paratest-only-tests/TestTokenTest.php +++ b/test/fixtures/paratest-only-tests/TestTokenTest.php @@ -1,10 +1,12 @@ assertTrue(false !== $token); + $this->assertTrue($token !== false); } } diff --git a/test/fixtures/passing-tests/DependsOnChain.php b/test/fixtures/passing-tests/DependsOnChain.php index 872458b..1c37767 100644 --- a/test/fixtures/passing-tests/DependsOnChain.php +++ b/test/fixtures/passing-tests/DependsOnChain.php @@ -1,11 +1,13 @@ assertTrue(true); + return 'oneA'; } @@ -15,13 +17,14 @@ public function testOneA() public function testOneBDependsOnA($result) { $this->assertEquals('oneA', $result); + return 'oneB'; } /** * @depends testOneBDependsOnA */ - public function testOneCDependsOnB($result) + public function testOneCDependsOnB($result): void { $this->assertEquals('oneB', $result); } @@ -29,6 +32,7 @@ public function testOneCDependsOnB($result) public function testTwoA() { $this->assertTrue(true); + return 'twoA'; } @@ -38,6 +42,7 @@ public function testTwoA() public function testTwoBDependsOnA($result) { $this->assertEquals('twoA', $result); + return 'twoB'; } } diff --git a/test/fixtures/passing-tests/DependsOnSame.php b/test/fixtures/passing-tests/DependsOnSame.php index 1c3b0ba..c4aec81 100644 --- a/test/fixtures/passing-tests/DependsOnSame.php +++ b/test/fixtures/passing-tests/DependsOnSame.php @@ -1,17 +1,20 @@ assertTrue(true); + return 'twoA'; } /** * @depends testOneA */ - public function testOneBDependsOnA($result) + public function testOneBDependsOnA($result): void { $this->assertEquals('twoA', $result); } @@ -19,7 +22,7 @@ public function testOneBDependsOnA($result) /** * @depends testOneA */ - public function testOneCDependsOnA($result) + public function testOneCDependsOnA($result): void { $this->assertEquals('twoA', $result); } diff --git a/test/fixtures/passing-tests/FunctionalModeEachTestCalledOnce.php b/test/fixtures/passing-tests/FunctionalModeEachTestCalledOnce.php index 94c680c..06021bb 100644 --- a/test/fixtures/passing-tests/FunctionalModeEachTestCalledOnce.php +++ b/test/fixtures/passing-tests/FunctionalModeEachTestCalledOnce.php @@ -1,13 +1,15 @@ assertTrue(true); } - public function testOneIsNotAlone() + public function testOneIsNotAlone(): void { $this->assertNotEmpty('This test is to ensure that in functional mode tests are not executed multiple times #53'); } diff --git a/test/fixtures/passing-tests/GroupsTest.php b/test/fixtures/passing-tests/GroupsTest.php index 80612c2..988f68e 100644 --- a/test/fixtures/passing-tests/GroupsTest.php +++ b/test/fixtures/passing-tests/GroupsTest.php @@ -1,5 +1,7 @@ assertTrue(true); } @@ -16,7 +18,7 @@ public function testTruth() /** * @group group1 */ - public function testFalsehood() + public function testFalsehood(): void { $this->assertFalse(false); } @@ -24,7 +26,7 @@ public function testFalsehood() /** * @group group2 */ - public function testArrayLength() + public function testArrayLength(): void { $values = [1, 3, 4, 7]; $this->assertEquals(4, count($values)); @@ -34,13 +36,13 @@ public function testArrayLength() * @group group2 * @group group3 */ - public function testStringLength() + public function testStringLength(): void { $string = 'hello'; $this->assertEquals(5, strlen($string)); } - public function testAddition() + public function testAddition(): void { $vals = 1 + 1; $this->assertEquals(2, $vals); diff --git a/test/fixtures/passing-tests/LegacyNamespaceTest.php b/test/fixtures/passing-tests/LegacyNamespaceTest.php index 42110cb..4f2280e 100644 --- a/test/fixtures/passing-tests/LegacyNamespaceTest.php +++ b/test/fixtures/passing-tests/LegacyNamespaceTest.php @@ -1,16 +1,18 @@ assertTrue(true); + public function testAlwaysTrue(): void + { + $this->assertTrue(true); + } } -} } diff --git a/test/fixtures/passing-tests/PreviouslyLoadedTest.php b/test/fixtures/passing-tests/PreviouslyLoadedTest.php index f2a68aa..906db91 100644 --- a/test/fixtures/passing-tests/PreviouslyLoadedTest.php +++ b/test/fixtures/passing-tests/PreviouslyLoadedTest.php @@ -1,7 +1,10 @@ assertTrue(true); } diff --git a/test/fixtures/passing-tests/TestOfUnits.php b/test/fixtures/passing-tests/TestOfUnits.php index 7884e8f..7bd4934 100644 --- a/test/fixtures/passing-tests/TestOfUnits.php +++ b/test/fixtures/passing-tests/TestOfUnits.php @@ -1,11 +1,13 @@ assertTrue(true); } @@ -13,9 +15,9 @@ public function testTruth() /** * @group fixtures */ - public function testArrayLength() + public function testArrayLength(): void { - $elems = [1,2,3,4,5]; + $elems = [1, 2, 3, 4, 5]; $this->assertEquals(5, sizeof($elems)); } } diff --git a/test/fixtures/passing-tests/level1/AnotherUnitTestInSubLevelTest.php b/test/fixtures/passing-tests/level1/AnotherUnitTestInSubLevelTest.php index 680f2ca..36fb4b9 100644 --- a/test/fixtures/passing-tests/level1/AnotherUnitTestInSubLevelTest.php +++ b/test/fixtures/passing-tests/level1/AnotherUnitTestInSubLevelTest.php @@ -1,10 +1,13 @@ assertTrue(true); } @@ -12,7 +15,7 @@ public function testTruth() /** * @group fixtures */ - public function testFalsehood() + public function testFalsehood(): void { $this->assertFalse(false); } @@ -20,9 +23,9 @@ public function testFalsehood() /** * @group fixtures */ - public function testArrayLength() + public function testArrayLength(): void { - $elems = [1,2,3,4,5]; + $elems = [1, 2, 3, 4, 5]; $this->assertEquals(5, sizeof($elems)); } } diff --git a/test/fixtures/passing-tests/level1/UnitTestInSubLevelTest.php b/test/fixtures/passing-tests/level1/UnitTestInSubLevelTest.php index b89feb7..4005386 100644 --- a/test/fixtures/passing-tests/level1/UnitTestInSubLevelTest.php +++ b/test/fixtures/passing-tests/level1/UnitTestInSubLevelTest.php @@ -1,16 +1,22 @@ assertTrue(true); } @@ -18,7 +24,7 @@ public function testTruth() /** * @group fixtures */ - public function testFalsehood() + public function testFalsehood(): void { $this->assertFalse(false); } @@ -26,9 +32,9 @@ public function testFalsehood() /** * @group fixtures */ - public function testArrayLength() + public function testArrayLength(): void { - $elems = [1,2,3,4,5]; + $elems = [1, 2, 3, 4, 5]; $this->assertEquals(5, sizeof($elems)); } } diff --git a/test/fixtures/passing-tests/level1/level2/AnotherUnitTestInSubSubLevelTest.php b/test/fixtures/passing-tests/level1/level2/AnotherUnitTestInSubSubLevelTest.php index 6f546d8..c478a2a 100644 --- a/test/fixtures/passing-tests/level1/level2/AnotherUnitTestInSubSubLevelTest.php +++ b/test/fixtures/passing-tests/level1/level2/AnotherUnitTestInSubSubLevelTest.php @@ -1,10 +1,13 @@ assertTrue(true); } @@ -12,7 +15,7 @@ public function testTruth() /** * @group fixtures */ - public function testFalsehood() + public function testFalsehood(): void { $this->assertFalse(false); } @@ -20,9 +23,9 @@ public function testFalsehood() /** * @group fixtures */ - public function testArrayLength() + public function testArrayLength(): void { - $elems = [1,2,3,4,5]; + $elems = [1, 2, 3, 4, 5]; $this->assertEquals(5, sizeof($elems)); } } diff --git a/test/fixtures/passing-tests/level1/level2/UnitTestInSubSubLevelTest.php b/test/fixtures/passing-tests/level1/level2/UnitTestInSubSubLevelTest.php index 7e5ee95..a0c308e 100644 --- a/test/fixtures/passing-tests/level1/level2/UnitTestInSubSubLevelTest.php +++ b/test/fixtures/passing-tests/level1/level2/UnitTestInSubSubLevelTest.php @@ -1,4 +1,7 @@ assertTrue(true); } @@ -15,7 +18,7 @@ public function testTruth() /** * @group fixtures */ - public function testFalsehood() + public function testFalsehood(): void { $this->assertFalse(false); } @@ -23,9 +26,9 @@ public function testFalsehood() /** * @group fixtures */ - public function testArrayLength() + public function testArrayLength(): void { - $elems = [1,2,3,4,5]; + $elems = [1, 2, 3, 4, 5]; $this->assertEquals(5, sizeof($elems)); } } diff --git a/test/fixtures/skipped-tests/IncompleteTest.php b/test/fixtures/skipped-tests/IncompleteTest.php index 15e4729..f4307aa 100644 --- a/test/fixtures/skipped-tests/IncompleteTest.php +++ b/test/fixtures/skipped-tests/IncompleteTest.php @@ -1,8 +1,12 @@ markTestIncomplete(); } diff --git a/test/fixtures/skipped-tests/SkippedAndIncompleteDataProviderTest.php b/test/fixtures/skipped-tests/SkippedAndIncompleteDataProviderTest.php index b1665b8..7fb1e62 100644 --- a/test/fixtures/skipped-tests/SkippedAndIncompleteDataProviderTest.php +++ b/test/fixtures/skipped-tests/SkippedAndIncompleteDataProviderTest.php @@ -1,6 +1,10 @@ markTestSkipped(); - } elseif ($expected % 3 == 1) { + } elseif ($expected % 3 === 1) { $this->markTestIncomplete(); } diff --git a/test/fixtures/skipped-tests/SkippedOrIncompleteTest.php b/test/fixtures/skipped-tests/SkippedOrIncompleteTest.php index acd6c30..f7e60a2 100644 --- a/test/fixtures/skipped-tests/SkippedOrIncompleteTest.php +++ b/test/fixtures/skipped-tests/SkippedOrIncompleteTest.php @@ -1,11 +1,15 @@ markTestSkipped(); } @@ -13,7 +17,7 @@ public function testSkipped() /** * @group incomplete-group */ - public function testIncomplete() + public function testIncomplete(): void { $this->markTestIncomplete(); } @@ -32,11 +36,11 @@ public function dataProviderNumeric100() * @group dataset-group * @dataProvider dataProviderNumeric100 */ - public function testDataProviderWithSkipped($expected, $actual) + public function testDataProviderWithSkipped($expected, $actual): void { - if ($expected % 3 == 0) { + if ($expected % 3 === 0) { $this->markTestSkipped(); - } elseif ($expected % 3 == 1) { + } elseif ($expected % 3 === 1) { $this->markTestIncomplete(); } diff --git a/test/fixtures/skipped-tests/SkippedTest.php b/test/fixtures/skipped-tests/SkippedTest.php index 4ed43a9..7797614 100644 --- a/test/fixtures/skipped-tests/SkippedTest.php +++ b/test/fixtures/skipped-tests/SkippedTest.php @@ -1,8 +1,12 @@ markTestSkipped(); } diff --git a/test/fixtures/slow-tests/LongRunningTest.php b/test/fixtures/slow-tests/LongRunningTest.php index 2a81260..cd7961d 100644 --- a/test/fixtures/slow-tests/LongRunningTest.php +++ b/test/fixtures/slow-tests/LongRunningTest.php @@ -1,10 +1,13 @@ assertTrue(true); @@ -13,7 +16,7 @@ public function testOne() /** * @group fixtures */ - public function testTwo() + public function testTwo(): void { sleep(5); $this->assertFalse(true); @@ -22,10 +25,10 @@ public function testTwo() /** * @group fixtures */ - public function testThree() + public function testThree(): void { sleep(5); - $elems = [1,2,3,4,5]; + $elems = [1, 2, 3, 4, 5]; $this->assertEquals(5, sizeof($elems)); } } diff --git a/test/fixtures/special-classes/FileWithoutClass.php b/test/fixtures/special-classes/FileWithoutClass.php index b3d9bbc..174d7fd 100644 --- a/test/fixtures/special-classes/FileWithoutClass.php +++ b/test/fixtures/special-classes/FileWithoutClass.php @@ -1 +1,3 @@ assertTrue(true); } diff --git a/test/fixtures/warning-tests/HasOtherWarningsTest.php b/test/fixtures/warning-tests/HasOtherWarningsTest.php index b8c49e9..c745056 100644 --- a/test/fixtures/warning-tests/HasOtherWarningsTest.php +++ b/test/fixtures/warning-tests/HasOtherWarningsTest.php @@ -1,15 +1,15 @@ getMockBuilder(\RuntimeException::class) + $mock = $this->getMockBuilder(RuntimeException::class) ->disableOriginalConstructor() ->getMock(); $mock diff --git a/test/fixtures/warning-tests/HasWarningsTest.php b/test/fixtures/warning-tests/HasWarningsTest.php index 91ba932..28398f6 100644 --- a/test/fixtures/warning-tests/HasWarningsTest.php +++ b/test/fixtures/warning-tests/HasWarningsTest.php @@ -1,13 +1,15 @@ assertTrue(true); } - private function testPrivateTest() + private function testPrivateTest(): void { $this->assertTrue(true); } @@ -15,7 +17,7 @@ private function testPrivateTest() /** * @dataProvider llamas */ - private function testMissingDataProvider() + private function testMissingDataProvider(): void { $this->assertTrue(true); } diff --git a/test/fixtures/wrapper-runner-exit-code-tests/ErrorTest.php b/test/fixtures/wrapper-runner-exit-code-tests/ErrorTest.php index b62b5a4..af3c239 100644 --- a/test/fixtures/wrapper-runner-exit-code-tests/ErrorTest.php +++ b/test/fixtures/wrapper-runner-exit-code-tests/ErrorTest.php @@ -1,9 +1,13 @@ assertTrue(false); } diff --git a/test/fixtures/wrapper-runner-exit-code-tests/SuccessTest.php b/test/fixtures/wrapper-runner-exit-code-tests/SuccessTest.php index 8c63f6d..dbd907a 100644 --- a/test/fixtures/wrapper-runner-exit-code-tests/SuccessTest.php +++ b/test/fixtures/wrapper-runner-exit-code-tests/SuccessTest.php @@ -1,8 +1,12 @@ assertTrue(true); } From 5a486dd90ca9e081cceb10626ae1c869fbb0d937 Mon Sep 17 00:00:00 2001 From: Filippo Tessarotto Date: Fri, 24 Jul 2020 16:11:32 +0200 Subject: [PATCH 30/34] Raise Static Analysis levels (#472) --- psalm.xml.dist | 2 +- src/Console/Commands/ParaTestCommand.php | 4 +--- src/Console/Testers/PHPUnit.php | 4 +--- src/Console/Testers/Tester.php | 5 +---- src/Logging/JUnit/TestCase.php | 3 +++ src/Runners/PHPUnit/Configuration.php | 2 +- src/Runners/PHPUnit/ExecutableTest.php | 4 ++-- src/Runners/PHPUnit/SuitePath.php | 2 +- 8 files changed, 11 insertions(+), 15 deletions(-) diff --git a/psalm.xml.dist b/psalm.xml.dist index 64a2d85..342c860 100644 --- a/psalm.xml.dist +++ b/psalm.xml.dist @@ -1,6 +1,6 @@ tester->execute($input, $output); } diff --git a/src/Console/Testers/PHPUnit.php b/src/Console/Testers/PHPUnit.php index 14b3df2..7aef46c 100644 --- a/src/Console/Testers/PHPUnit.php +++ b/src/Console/Testers/PHPUnit.php @@ -97,10 +97,8 @@ public function configure(Command $command): void /** * Executes the PHPUnit Runner. Will Display help if no config and no path * supplied. - * - * @return int|mixed */ - public function execute(InputInterface $input, OutputInterface $output) + public function execute(InputInterface $input, OutputInterface $output): int { if (! $this->hasConfig($input) && ! $this->hasPath($input)) { $this->displayHelp($input, $output); diff --git a/src/Console/Testers/Tester.php b/src/Console/Testers/Tester.php index 94e36fd..66026e5 100644 --- a/src/Console/Testers/Tester.php +++ b/src/Console/Testers/Tester.php @@ -22,10 +22,7 @@ abstract class Tester */ abstract public function configure(Command $command); - /** - * @return mixed - */ - abstract public function execute(InputInterface $input, OutputInterface $output); + abstract public function execute(InputInterface $input, OutputInterface $output): int; /** * Returns non-empty options. diff --git a/src/Logging/JUnit/TestCase.php b/src/Logging/JUnit/TestCase.php index 6e5450c..84548f0 100644 --- a/src/Logging/JUnit/TestCase.php +++ b/src/Logging/JUnit/TestCase.php @@ -6,6 +6,7 @@ use SimpleXMLElement; +use function assert; use function trim; /** @@ -113,6 +114,8 @@ public static function caseFromNode(SimpleXMLElement $node): self foreach ($defect_groups as $group => $defects) { foreach ($defects as $defect) { + assert($defect !== false); + $message = (string) $defect; $message .= (string) $system_output; $case->addDefect($group, (string) $defect['type'], $message); diff --git a/src/Runners/PHPUnit/Configuration.php b/src/Runners/PHPUnit/Configuration.php index df597a9..8906d56 100644 --- a/src/Runners/PHPUnit/Configuration.php +++ b/src/Runners/PHPUnit/Configuration.php @@ -137,7 +137,7 @@ public function getSuitesName(): ?array * Return the contents of the nodes * contained in a PHPUnit configuration. * - * @return SuitePath[]|null + * @return SuitePath[][]|null */ public function getSuiteByName(string $suiteName): ?array { diff --git a/src/Runners/PHPUnit/ExecutableTest.php b/src/Runners/PHPUnit/ExecutableTest.php index 78c2bd2..f2e2c95 100644 --- a/src/Runners/PHPUnit/ExecutableTest.php +++ b/src/Runners/PHPUnit/ExecutableTest.php @@ -106,7 +106,7 @@ public function getStderr(): string * Stop the process and return it's * exit code. */ - public function stop(): int + public function stop(): ?int { return $this->process->stop(); } @@ -131,7 +131,7 @@ public function isDoneRunning(): bool /** * Return the exit code of the process. */ - public function getExitCode(): int + public function getExitCode(): ?int { return $this->process->getExitCode(); } diff --git a/src/Runners/PHPUnit/SuitePath.php b/src/Runners/PHPUnit/SuitePath.php index 1a96b05..021c6c7 100644 --- a/src/Runners/PHPUnit/SuitePath.php +++ b/src/Runners/PHPUnit/SuitePath.php @@ -19,7 +19,7 @@ class SuitePath /** @var string */ protected $suffix; - /** @var string[]s */ + /** @var string[] */ protected $excludedPaths; public function __construct(string $path, array $excludedPaths, string $suffix) From 14a114695eb38cbc22ca62811698c2f802c4b730 Mon Sep 17 00:00:00 2001 From: Filippo Tessarotto Date: Fri, 24 Jul 2020 16:26:18 +0200 Subject: [PATCH 31/34] Activate assert() in CI (#473) --- .github/workflows/integrate.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/integrate.yaml b/.github/workflows/integrate.yaml index e0c3272..f24e65a 100644 --- a/.github/workflows/integrate.yaml +++ b/.github/workflows/integrate.yaml @@ -123,6 +123,7 @@ jobs: with: coverage: "pcov" php-version: "${{ matrix.php-version }}" + ini-values: zend.assertions=1 tools: composer:v1 extensions: sqlite From ce9268f3ae43e76a52ea0be9f5b80a75fbe80803 Mon Sep 17 00:00:00 2001 From: Filippo Tessarotto Date: Mon, 27 Jul 2020 16:16:44 +0200 Subject: [PATCH 32/34] Add missing iterable type hints (#474) --- .github/workflows/integrate.yaml | 4 +- bin/phpunit-sqlite-wrapper.php | 41 +++++++++++--- bin/phpunit-wrapper.php | 46 ++++++++------- phpcs.xml.dist | 10 ---- phpstan.neon.dist | 5 +- src/Console/Testers/PHPUnit.php | 6 +- src/Console/Testers/Tester.php | 2 +- src/Logging/JUnit/Reader.php | 56 ++++++++++--------- src/Logging/JUnit/TestCase.php | 20 ++----- src/Logging/JUnit/TestSuite.php | 4 +- src/Logging/JUnit/Writer.php | 8 +-- src/Logging/LogInterpreter.php | 12 ++-- src/Logging/MetaProvider.php | 6 +- src/Parser/ParsedClass.php | 9 ++- src/Parser/Parser.php | 4 +- src/Runners/PHPUnit/BaseRunner.php | 9 +-- src/Runners/PHPUnit/Configuration.php | 14 ++--- src/Runners/PHPUnit/ExecutableTest.php | 39 ++++++------- src/Runners/PHPUnit/Options.php | 25 ++++++--- src/Runners/PHPUnit/ResultPrinter.php | 13 +---- src/Runners/PHPUnit/Runner.php | 7 ++- src/Runners/PHPUnit/SqliteRunner.php | 3 + src/Runners/PHPUnit/Suite.php | 9 ++- src/Runners/PHPUnit/SuiteLoader.php | 41 +++++++++++--- src/Runners/PHPUnit/SuitePath.php | 3 + src/Runners/PHPUnit/TestFileLoader.php | 4 +- src/Runners/PHPUnit/TestMethod.php | 7 ++- src/Runners/PHPUnit/Worker/BaseWorker.php | 8 ++- src/Runners/PHPUnit/Worker/SqliteWorker.php | 3 + src/Runners/PHPUnit/Worker/WrapperWorker.php | 4 ++ src/Runners/PHPUnit/WrapperRunner.php | 13 +++-- .../Coverage/CoverageMergerTest.php | 2 +- .../Coverage/CoverageReporterTest.php | 2 +- test/Functional/FunctionalTestBase.php | 8 +++ test/Functional/PHPUnitTest.php | 12 +++- test/Functional/ParaTestInvoker.php | 7 ++- .../Runners/PHPUnit/RunnerIntegrationTest.php | 5 +- .../Functional/Runners/PHPUnit/WorkerTest.php | 3 + test/TestBase.php | 4 ++ test/Unit/Logging/LogInterpreterTest.php | 6 ++ .../Runners/PHPUnit/ConfigurationTest.php | 9 +++ test/Unit/Runners/PHPUnit/SuiteLoaderTest.php | 16 ++++++ test/Unit/Util/StrTest.php | 5 +- 43 files changed, 323 insertions(+), 191 deletions(-) diff --git a/.github/workflows/integrate.yaml b/.github/workflows/integrate.yaml index f24e65a..424e442 100644 --- a/.github/workflows/integrate.yaml +++ b/.github/workflows/integrate.yaml @@ -275,7 +275,9 @@ jobs: run: "vendor/bin/phpstan analyse --no-progress --error-format=checkstyle | cs2pr" - name: "Run PSalm for type-coverage" - run: "vendor/bin/psalm --no-progress --shepherd --show-info=false --stats" + run: | + vendor/bin/psalm --no-progress --show-info=false > /dev/null || true + vendor/bin/psalm --no-progress --shepherd --show-info=false --stats compile-phar: name: "Compile Phar" diff --git a/bin/phpunit-sqlite-wrapper.php b/bin/phpunit-sqlite-wrapper.php index 909e24d..c5592b8 100644 --- a/bin/phpunit-sqlite-wrapper.php +++ b/bin/phpunit-sqlite-wrapper.php @@ -1,21 +1,44 @@ query('SELECT id, command FROM tests WHERE reserved_by_process_id IS NULL ORDER BY file_name LIMIT 1')->fetch()) { - $statement = $db->prepare('UPDATE tests SET reserved_by_process_id = :procId WHERE id = :id AND reserved_by_process_id IS NULL'); +$selectQuery = ' + SELECT id, command + FROM tests + WHERE reserved_by_process_id IS NULL + ORDER BY file_name + LIMIT 1 +'; +$reserveTest = ' + UPDATE tests + SET reserved_by_process_id = :procId + WHERE id = :id AND reserved_by_process_id IS NULL +'; + +while (($test = $db->query($selectQuery)->fetch()) !== false) { + $statement = $db->prepare($reserveTest); $statement->execute([ ':procId' => getmypid(), ':id' => $test['id'], diff --git a/bin/phpunit-wrapper.php b/bin/phpunit-wrapper.php index 48254e0..ba9db06 100644 --- a/bin/phpunit-wrapper.php +++ b/bin/phpunit-wrapper.php @@ -1,10 +1,13 @@ format(DateTime::RFC3339); - $info[] = "Iteration: $i"; - $info[] = "Command: $command"; - $info[] = PHP_EOL; - $infoText = implode(PHP_EOL,$info).PHP_EOL; + $info = []; + $info[] = 'Time: ' . (new DateTime())->format(DateTime::RFC3339); + $info[] = "Iteration: $i"; + $info[] = "Command: $command"; + $info[] = PHP_EOL; + $infoText = implode(PHP_EOL, $info) . PHP_EOL; $logInfo($infoText); $_SERVER['argv'] = $arguments; ob_start(); $lastExitCode = PHPUnit\TextUI\Command::main(false); - $infoText = ob_get_clean(); + $infoText = ob_get_clean(); $logInfo($infoText); echo "FINISHED\n"; diff --git a/phpcs.xml.dist b/phpcs.xml.dist index 0927fc6..069ea0d 100644 --- a/phpcs.xml.dist +++ b/phpcs.xml.dist @@ -16,16 +16,6 @@ - - 0 - - - 0 - - - 0 - - 0 diff --git a/phpstan.neon.dist b/phpstan.neon.dist index 5f3d9ba..6bf226b 100644 --- a/phpstan.neon.dist +++ b/phpstan.neon.dist @@ -4,7 +4,6 @@ includes: parameters: tipsOfTheDay: false - checkMissingIterableValueType: false bootstrapFiles: - test/constants.php paths: @@ -22,6 +21,10 @@ parameters: path: src/Runners/PHPUnit/SqliteRunner.php # Known fixtures + - + message: "#^Property ParaTest\\\\Runners\\\\PHPUnit\\\\ExecutableTest\\:\\:\\$process type has no value type specified in iterable type Symfony\\\\Component\\\\Process\\\\Process\\.$#" + count: 1 + path: src/Runners/PHPUnit/ExecutableTest.php - message: "#^Call to method PHPUnit\\\\Framework\\\\Assert\\:\\:assertTrue\\(\\) with false will always evaluate to false\\.$#" count: 1 diff --git a/src/Console/Testers/PHPUnit.php b/src/Console/Testers/PHPUnit.php index 7aef46c..3b47def 100644 --- a/src/Console/Testers/PHPUnit.php +++ b/src/Console/Testers/PHPUnit.php @@ -163,7 +163,7 @@ protected function displayHelp(InputInterface $input, OutputInterface $output): } /** - * @return array + * @return array * * @throws RuntimeException */ @@ -228,7 +228,7 @@ protected function scopedRequire(string $file): void /** * Return whether or not code coverage information should be collected. * - * @param array $options + * @param array $options */ protected function hasCoverage(array $options): bool { @@ -245,7 +245,7 @@ protected function hasCoverage(array $options): bool /** * Fetch the path to the bootstrap file. * - * @param array $options + * @param array $options */ protected function getBootstrapFile(InputInterface $input, array $options): string { diff --git a/src/Console/Testers/Tester.php b/src/Console/Testers/Tester.php index 66026e5..8655ba2 100644 --- a/src/Console/Testers/Tester.php +++ b/src/Console/Testers/Tester.php @@ -27,7 +27,7 @@ abstract public function execute(InputInterface $input, OutputInterface $output) /** * Returns non-empty options. * - * @return array + * @return array */ protected function getOptions(InputInterface $input): array { diff --git a/src/Logging/JUnit/Reader.php b/src/Logging/JUnit/Reader.php index 56c29ca..fe15d19 100644 --- a/src/Logging/JUnit/Reader.php +++ b/src/Logging/JUnit/Reader.php @@ -32,7 +32,7 @@ class Reader extends MetaProvider /** @var string */ protected $logFile; - /** @var array */ + /** @var array */ protected static $defaultSuite = [ 'name' => '', 'file' => '', @@ -90,7 +90,7 @@ public function getSuites(): array * characters: .,F,E * TODO: Update this, skipped was added in phpunit. * - * @return array + * @return string[] */ public function getFeedback(): array { @@ -139,7 +139,7 @@ protected function init(): void /** * Uses an array of testcase nodes to build a suite. * - * @param array $nodeArray an array of SimpleXMLElement nodes representing testcase elements + * @param SimpleXMLElement[] $nodeArray an array of SimpleXMLElement nodes representing testcase elements */ protected function initSuiteFromCases(array $nodeArray): void { @@ -157,8 +157,8 @@ protected function initSuiteFromCases(array $nodeArray): void * Creates and adds a TestSuite based on the given * suite properties and collection of test cases. * - * @param array $properties - * @param array $testCases + * @param array $properties + * @param TestCase[] $testCases */ protected function addSuite(array $properties, array $testCases): void { @@ -170,35 +170,39 @@ protected function addSuite(array $properties, array $testCases): void /** * Fold an array of testcase nodes into a suite array. * - * @param array $nodeArray an array of testcase nodes - * @param array $testCases an array reference. Individual testcases will be placed here. + * @param SimpleXMLElement[] $nodeArray an array of testcase nodes + * @param TestCase[] $testCases an array reference. Individual testcases will be placed here. * - * @return mixed + * @return array */ - protected function caseNodesToSuiteProperties(array $nodeArray, array &$testCases = []) + protected function caseNodesToSuiteProperties(array $nodeArray, array &$testCases = []): array { $cb = [TestCase::class, 'caseFromNode']; - return array_reduce($nodeArray, static function ($result, $c) use (&$testCases, $cb) { - $testCases[] = call_user_func_array($cb, [$c]); - $result['name'] = (string) $c['class']; - $result['file'] = (string) $c['file']; - ++$result['tests']; - $result['assertions'] += (int) $c['assertions']; - $result['failures'] += count($c->xpath('failure')); - $result['errors'] += count($c->xpath('error')); - $result['skipped'] += count($c->xpath('skipped')); - $result['time'] += (float) $c['time']; - - return $result; - }, static::$defaultSuite); + return array_reduce( + $nodeArray, + static function (array $result, SimpleXMLElement $c) use (&$testCases, $cb): array { + $testCases[] = call_user_func_array($cb, [$c]); + $result['name'] = (string) $c['class']; + $result['file'] = (string) $c['file']; + ++$result['tests']; + $result['assertions'] += (int) $c['assertions']; + $result['failures'] += count($c->xpath('failure')); + $result['errors'] += count($c->xpath('error')); + $result['skipped'] += count($c->xpath('skipped')); + $result['time'] += (float) $c['time']; + + return $result; + }, + static::$defaultSuite + ); } /** * Return a collection of testcase nodes * from the xml document. * - * @return array + * @return array */ protected function getCaseNodes(): array { @@ -249,7 +253,7 @@ protected function getNumericValue(string $property) /** * Return messages for a given type. * - * @return array + * @return string[] */ protected function getMessages(string $type): array { @@ -258,8 +262,8 @@ protected function getMessages(string $type): array foreach ($suites as $suite) { $messages = array_merge( $messages, - array_reduce($suite->cases, static function ($result, $case) use ($type) { - return array_merge($result, array_reduce($case->$type, static function ($msgs, $msg) { + array_reduce($suite->cases, static function ($result, TestCase $case) use ($type): array { + return array_merge($result, array_reduce($case->$type, static function ($msgs, $msg): array { $msgs[] = $msg['text']; return $msgs; diff --git a/src/Logging/JUnit/TestCase.php b/src/Logging/JUnit/TestCase.php index 84548f0..491dc5d 100644 --- a/src/Logging/JUnit/TestCase.php +++ b/src/Logging/JUnit/TestCase.php @@ -34,28 +34,16 @@ class TestCase /** @var string|float (a stringified float, from phpunit XML output) */ public $time; - /** - * List of failures in this test case. - * - * @var array - */ + /** @var array */ public $failures = []; - /** - * List of errors in this test case. - * - * @var array - */ + /** @var array */ public $errors = []; - /** - * List of warnings in this test case. - * - * @var array - */ + /** @var array */ public $warnings = []; - /** @var array */ + /** @var array */ public $skipped = []; public function __construct( diff --git a/src/Logging/JUnit/TestSuite.php b/src/Logging/JUnit/TestSuite.php index 0f36478..053d04b 100644 --- a/src/Logging/JUnit/TestSuite.php +++ b/src/Logging/JUnit/TestSuite.php @@ -47,7 +47,7 @@ class TestSuite /** * Cases belonging to this suite. * - * @var array + * @var TestCase[] */ public $cases = []; @@ -75,7 +75,7 @@ public function __construct( * Create a TestSuite from an associative * array. * - * @param array $arr + * @param array $arr * * @return TestSuite */ diff --git a/src/Logging/JUnit/Writer.php b/src/Logging/JUnit/Writer.php index 1c78979..58b3acf 100644 --- a/src/Logging/JUnit/Writer.php +++ b/src/Logging/JUnit/Writer.php @@ -52,7 +52,7 @@ class Writer * A default suite to ease flattening of * suite structures. * - * @var array + * @var array */ protected static $defaultSuite = [ 'tests' => 0, @@ -156,7 +156,7 @@ protected function appendCase(DOMElement $suiteNode, TestCase $case): DOMElement /** * Append error or failure nodes to the given testcase node. * - * @param array $defects + * @param array $defects */ protected function appendDefects(DOMElement $caseNode, array $defects, string $type): void { @@ -170,7 +170,7 @@ protected function appendDefects(DOMElement $caseNode, array $defects, string $t /** * Get the root level testsuite node. * - * @param array $suites + * @param TestSuite[] $suites */ protected function getSuiteRoot(array $suites): DOMElement { @@ -195,7 +195,7 @@ protected function getSuiteRoot(array $suites): DOMElement * Get the attributes used on the root testsuite * node. * - * @param array $suites + * @param array $suites * * @return mixed */ diff --git a/src/Logging/LogInterpreter.php b/src/Logging/LogInterpreter.php index 5082f47..cc7cf14 100644 --- a/src/Logging/LogInterpreter.php +++ b/src/Logging/LogInterpreter.php @@ -22,7 +22,7 @@ class LogInterpreter extends MetaProvider * A collection of Reader objects * to aggregate results from. * - * @var array + * @var Reader[] */ protected $readers = []; @@ -76,7 +76,7 @@ public function isSuccessful(): bool * Get all test case objects found within * the collection of Reader objects. * - * @return array + * @return TestCase[] */ public function getCases(): array { @@ -97,7 +97,7 @@ public function getCases(): array /** * Fix problem with empty testcase from DataProvider. * - * @param array $cases + * @param TestCase[] $cases */ protected function extendEmptyCasesFromSuites(array $cases, TestSuite $suite): void { @@ -121,7 +121,7 @@ protected function extendEmptyCasesFromSuites(array $cases, TestSuite $suite): v /** * Flattens all cases into their respective suites. * - * @return array $suites a collection of suites and their cases + * @return TestSuite[] $suites a collection of suites and their cases */ public function flattenCases(): array { @@ -160,7 +160,7 @@ protected function getNumericValue(string $property) * Gets messages of a given type and * merges them into a single collection. * - * @return array + * @return string[] */ protected function getMessages(string $type): array { @@ -171,7 +171,7 @@ protected function getMessages(string $type): array * Flatten messages into a single collection * based on an accessor method. * - * @return array + * @return string[] */ private function mergeMessages(string $method): array { diff --git a/src/Logging/MetaProvider.php b/src/Logging/MetaProvider.php index 2648a19..63c925f 100644 --- a/src/Logging/MetaProvider.php +++ b/src/Logging/MetaProvider.php @@ -44,9 +44,9 @@ abstract class MetaProvider /** * Simplify aggregation of totals or messages. * - * @param array $args + * @param mixed[] $args * - * @return float|int|array + * @return float|int|string[] */ public function __call(string $method, array $args) { @@ -72,7 +72,7 @@ abstract protected function getNumericValue(string $property); * Gets messages of a given type and * merges them into a single collection. * - * @return array + * @return string[] */ abstract protected function getMessages(string $type): array; } diff --git a/src/Parser/ParsedClass.php b/src/Parser/ParsedClass.php index f123253..9e962f1 100644 --- a/src/Parser/ParsedClass.php +++ b/src/Parser/ParsedClass.php @@ -16,10 +16,13 @@ class ParsedClass extends ParsedObject * A collection of methods belonging * to the parsed class. * - * @var array + * @var ParsedFunction[] */ private $methods; + /** + * @param ParsedFunction[] $methods + */ public function __construct(string $doc, string $name, string $namespace, array $methods = []) { parent::__construct($doc, $name); @@ -32,9 +35,9 @@ public function __construct(string $doc, string $name, string $namespace, array * optionally filtering on annotations present * on a method. * - * @param array $annotations + * @param array $annotations * - * @return array + * @return ParsedFunction[] */ public function getMethods(array $annotations = []): array { diff --git a/src/Parser/Parser.php b/src/Parser/Parser.php index 036f606..d321e83 100644 --- a/src/Parser/Parser.php +++ b/src/Parser/Parser.php @@ -96,7 +96,7 @@ private function getCleanReflectionName(): string /** * Return all test methods present in the file. * - * @return array + * @return ParsedFunction[] */ private function getMethods(): array { @@ -121,7 +121,7 @@ private function getMethods(): array * Return the class name of the class contained * in the file. * - * @param array $previousDeclaredClasses + * @param string[] $previousDeclaredClasses */ private function getClassName(string $filename, array $previousDeclaredClasses): ?string { diff --git a/src/Runners/PHPUnit/BaseRunner.php b/src/Runners/PHPUnit/BaseRunner.php index 5150833..dfbe61b 100644 --- a/src/Runners/PHPUnit/BaseRunner.php +++ b/src/Runners/PHPUnit/BaseRunner.php @@ -7,6 +7,7 @@ use ParaTest\Coverage\CoverageMerger; use ParaTest\Logging\JUnit\Writer; use ParaTest\Logging\LogInterpreter; +use ParaTest\Parser\ParsedFunction; use function array_merge; use function file_exists; @@ -29,7 +30,7 @@ abstract class BaseRunner * A collection of pending ExecutableTest objects that have * yet to run. * - * @var ExecutableTest[] + * @var array */ protected $pending = []; @@ -57,7 +58,7 @@ abstract class BaseRunner protected $coverage = null; /** - * @param array $opts + * @param array $opts */ public function __construct(array $opts = []) { @@ -80,9 +81,9 @@ protected function verifyConfiguration(): void { if ( isset($this->options->filtered['configuration']) && - ! file_exists($this->options->filtered['configuration']->getPath()) + ! file_exists($path = $this->options->filtered['configuration']->getPath()) ) { - $this->printer->println(sprintf('Could not read "%s".', $this->options->filtered['configuration'])); + $this->printer->println(sprintf('Could not read "%s".', $path)); exit(1); } } diff --git a/src/Runners/PHPUnit/Configuration.php b/src/Runners/PHPUnit/Configuration.php index 8906d56..8f657f8 100644 --- a/src/Runners/PHPUnit/Configuration.php +++ b/src/Runners/PHPUnit/Configuration.php @@ -40,15 +40,6 @@ class Configuration /** @var string[] */ protected $availableNodes = ['exclude', 'file', 'directory', 'testsuite']; - /** - * A collection of datastructures - * build from the nodes inside of a - * PHPUnit configuration. - * - * @var array - */ - protected $suites = []; - public function __construct(string $path) { $this->path = $path; @@ -118,6 +109,9 @@ public function hasSuites(): bool return ! empty($this->getSuitesName()); } + /** + * @return string[]|null + */ public function getSuitesName(): ?array { if (! $this->xml) { @@ -229,7 +223,7 @@ public function getSuitePaths(string $path): array /** * Get override environment variables from phpunit config file. * - * @return array + * @return array */ public function getEnvironmentVariables(): array { diff --git a/src/Runners/PHPUnit/ExecutableTest.php b/src/Runners/PHPUnit/ExecutableTest.php index f2e2c95..fd5714e 100644 --- a/src/Runners/PHPUnit/ExecutableTest.php +++ b/src/Runners/PHPUnit/ExecutableTest.php @@ -34,9 +34,6 @@ abstract class ExecutableTest */ protected $temp; - /** @var array */ - protected $pipes = []; - /** * Path where the coveragereport is stored. * @@ -155,10 +152,10 @@ public function setLastCommand(string $command): void /** * Executes the test by creating a separate process. * - * @param array $options - * @param array $environmentVariables - * @param string[]|null $passthru - * @param string[]|null $passthruPhp + * @param array $options + * @param array $environmentVariables + * @param string[]|null $passthru + * @param string[]|null $passthruPhp * * @return $this */ @@ -187,9 +184,9 @@ public function run( * Build the full executable as we would do on the command line, e.g. * php -d zend_extension=xdebug.so vendor/bin/phpunit --teststuite suite1 --prepend xdebug-filter.php. * - * @param array $options - * @param string[]|null $passthru - * @param string[]|null $passthruPhp + * @param array $options + * @param string[]|null $passthru + * @param string[]|null $passthruPhp */ protected function getFullCommandlineString( string $binary, @@ -220,9 +217,9 @@ public function getToken(): int /** * Generate command line arguments with passed options suitable to handle through paratest. * - * @param string $binary executable binary name - * @param array $options command line options - * @param string[]|null $passthru + * @param string $binary executable binary name + * @param array $options command line options + * @param string[]|null $passthru * * @return string[] command line arguments */ @@ -254,9 +251,9 @@ public function commandArguments(string $binary, array $options = [], ?array $pa /** * Generate command line with passed options suitable to handle through paratest. * - * @param string $binary executable binary name - * @param array $options command line options - * @param string[]|null $passthru + * @param string $binary executable binary name + * @param array $options command line options + * @param string[]|null $passthru * * @return string command line */ @@ -325,9 +322,9 @@ protected function assertValidCommandLineLength(string $cmd): void /** * A template method that can be overridden to add necessary options for a test. * - * @param array $options the options that are passed to the run method + * @param array $options * - * @return array $options the prepared options + * @return array $options */ protected function prepareOptions(array $options): array { @@ -338,7 +335,7 @@ protected function prepareOptions(array $options): array * Checks environment variables for the presence of a TEST_TOKEN * variable and sets $this->token based on its value. * - * @param array $environmentVariables + * @param array $environmentVariables */ protected function handleEnvironmentVariables(array $environmentVariables): void { @@ -353,9 +350,9 @@ protected function handleEnvironmentVariables(array $environmentVariables): void * Checks if the coverage-php option is set and redirects it to a unique temp file. * This will ensure, that multiple tests write to separate coverage-files. * - * @param array $options + * @param array $options * - * @return array $options + * @return array $options */ protected function redirectCoverageOption(array $options): array { diff --git a/src/Runners/PHPUnit/Options.php b/src/Runners/PHPUnit/Options.php index b0d2f55..aabde05 100644 --- a/src/Runners/PHPUnit/Options.php +++ b/src/Runners/PHPUnit/Options.php @@ -9,6 +9,7 @@ use function array_diff_key; use function array_shift; +use function assert; use function count; use function dirname; use function explode; @@ -19,6 +20,7 @@ use function intdiv; use function is_dir; use function is_file; +use function is_string; use function pclose; use function popen; use function preg_match_all; @@ -40,16 +42,16 @@ * @property-read string $phpunit * @property-read string $functional * @property-read bool $stopOnFailure - * @property-read array $filtered + * @property-read array $filtered * @property-read string $runner * @property-read bool $noTestTokens * @property-read bool $colors - * @property-read string[] $testsuite + * @property-read string|string[] $testsuite * @property-read int|null $maxBatchSize * @property-read string $filter * @property-read string[] $groups * @property-read string[] $excludeGroups - * @property-read array $annotations + * @property-read array $annotations * @property-read bool $parallelSuite * @property-read string[]|null $passthru * @property-read string[]|null $passthruPhp @@ -100,7 +102,7 @@ class Options * A collection of post-processed option values. This is the collection * containing ParaTest specific options. * - * @var array + * @var array */ protected $filtered; @@ -116,7 +118,7 @@ class Options /** * Filters which tests to run. * - * @var string[] + * @var string|string[] */ protected $testsuite; @@ -136,7 +138,7 @@ class Options * A collection of option values directly corresponding * to certain annotations - i.e group. * - * @var array + * @var array */ protected $annotations = []; @@ -177,7 +179,7 @@ class Options protected $coverageTestLimit; /** - * @param array $opts + * @param array $opts */ public function __construct(array $opts = []) { @@ -251,7 +253,7 @@ public function __isset(string $var): bool * Returns a collection of ParaTest's default * option values. * - * @return array + * @return array */ protected static function defaults(): array { @@ -315,6 +317,10 @@ protected static function vendorDir(): string /** * Filter options to distinguish between paratest * internal options and any other options. + * + * @param array $options + * + * @return array */ protected function filterOptions(array $options): array { @@ -347,7 +353,7 @@ protected function filterOptions(array $options): array * Take an array of filtered options and return a * configuration path. * - * @param array $filtered + * @param array $filtered */ protected function getConfigurationPath(array $filtered): ?string { @@ -395,6 +401,7 @@ protected function initAnnotations(): void continue; } + assert(is_string($value)); $this->annotations[$key] = $value; } } diff --git a/src/Runners/PHPUnit/ResultPrinter.php b/src/Runners/PHPUnit/ResultPrinter.php index 95fe80e..29490d2 100644 --- a/src/Runners/PHPUnit/ResultPrinter.php +++ b/src/Runners/PHPUnit/ResultPrinter.php @@ -26,7 +26,7 @@ class ResultPrinter /** * A collection of ExecutableTest objects. * - * @var array + * @var ExecutableTest[] */ protected $suites = []; @@ -77,13 +77,6 @@ class ResultPrinter */ protected $colors; - /** - * Warnings generated by the cases. - * - * @var array - */ - protected $warnings = []; - /** * Number of columns. * @@ -225,7 +218,7 @@ public function getWarnings(): string */ public function isSuccessful(): bool { - return $this->results->isSuccessful() && count($this->warnings) === 0; + return $this->results->isSuccessful(); } /** @@ -403,7 +396,7 @@ protected function printFeedbackItemColor(string $item): void * Method that returns a formatted string * for a collection of errors or failures. * - * @param array $defects + * @param string[] $defects */ protected function getDefects(array $defects, string $type): string { diff --git a/src/Runners/PHPUnit/Runner.php b/src/Runners/PHPUnit/Runner.php index 17f26e1..b77d492 100644 --- a/src/Runners/PHPUnit/Runner.php +++ b/src/Runners/PHPUnit/Runner.php @@ -26,10 +26,13 @@ class Runner extends BaseRunner * A collection of available tokens based on the number * of processes specified in $options. * - * @var array + * @var array> */ protected $tokens = []; + /** + * {@inheritDoc} + */ public function __construct(array $opts = []) { parent::__construct($opts); @@ -185,7 +188,7 @@ protected function initTokens(): void * Gets the next token that is available to be acquired * from a finished process. * - * @return bool|array + * @return bool|array */ protected function getNextAvailableToken() { diff --git a/src/Runners/PHPUnit/SqliteRunner.php b/src/Runners/PHPUnit/SqliteRunner.php index 5a1ca6b..308bc08 100644 --- a/src/Runners/PHPUnit/SqliteRunner.php +++ b/src/Runners/PHPUnit/SqliteRunner.php @@ -34,6 +34,9 @@ class SqliteRunner extends WrapperRunner /** @var string */ private $dbFileName = null; + /** + * {@inheritDoc} + */ public function __construct(array $opts = []) { parent::__construct($opts); diff --git a/src/Runners/PHPUnit/Suite.php b/src/Runners/PHPUnit/Suite.php index 1ca04ea..723c8e2 100644 --- a/src/Runners/PHPUnit/Suite.php +++ b/src/Runners/PHPUnit/Suite.php @@ -4,6 +4,8 @@ namespace ParaTest\Runners\PHPUnit; +use ParaTest\Parser\ParsedFunction; + use function count; /** @@ -16,10 +18,13 @@ class Suite extends ExecutableTest /** * A collection of test methods. * - * @var array + * @var array */ private $functions; + /** + * @param array $functions + */ public function __construct(string $path, array $functions) { parent::__construct($path); @@ -29,7 +34,7 @@ public function __construct(string $path, array $functions) /** * Return the collection of test methods. * - * @return array + * @return array */ public function getFunctions(): array { diff --git a/src/Runners/PHPUnit/SuiteLoader.php b/src/Runners/PHPUnit/SuiteLoader.php index 6ab0890..fd98647 100644 --- a/src/Runners/PHPUnit/SuiteLoader.php +++ b/src/Runners/PHPUnit/SuiteLoader.php @@ -13,6 +13,7 @@ use function array_intersect; use function array_merge; use function array_unique; +use function assert; use function count; use function is_array; use function is_int; @@ -26,7 +27,7 @@ class SuiteLoader /** * The collection of loaded files. * - * @var array + * @var string[] */ protected $files = []; @@ -36,7 +37,7 @@ class SuiteLoader /** * The collection of parsed test classes. * - * @var array + * @var array */ protected $loadedSuites = []; @@ -61,7 +62,7 @@ public function __construct(?Options $options = null) * Returns all parsed suite objects as ExecutableTest * instances. * - * @return array + * @return array */ public function getSuites(): array { @@ -72,12 +73,13 @@ public function getSuites(): array * Returns a collection of TestMethod objects * for all loaded ExecutableTest instances. * - * @return array + * @return array */ public function getTestMethods(): array { $methods = []; foreach ($this->loadedSuites as $suite) { + assert($suite instanceof Suite); $methods = array_merge($methods, $suite->getFunctions()); } @@ -160,13 +162,15 @@ protected function initSuites(): void } } + /** + * @return TestMethod[] + */ protected function executableTests(string $path, ParsedClass $class): array { $executableTests = []; $methodBatches = $this->getMethodBatches($class); foreach ($methodBatches as $methodBatch) { - $executableTest = new TestMethod($path, $methodBatch); - $executableTests[] = $executableTest; + $executableTests[] = new TestMethod($path, $methodBatch); } return $executableTests; @@ -178,7 +182,7 @@ protected function executableTests(string $path, ParsedClass $class): array * Identify method dependencies, and group dependents and dependees on a single methodBatch. * Use max batch size to fill batches. * - * @return array of MethodBatches. Each MethodBatch has an array of method names + * @return string[][] of MethodBatches. Each MethodBatch has an array of method names */ protected function getMethodBatches(ParsedClass $class): array { @@ -202,6 +206,10 @@ protected function getMethodBatches(ParsedClass $class): array return $batches; } + /** + * @param string[][] $batches + * @param string[] $tests + */ protected function addDependentTestsToBatchSet(array &$batches, string $dependsOn, array $tests): void { foreach ($batches as $key => $batch) { @@ -214,6 +222,10 @@ protected function addDependentTestsToBatchSet(array &$batches, string $dependsO } } + /** + * @param string[][] $batches + * @param string[] $tests + */ protected function addTestsToBatchSet(array &$batches, array $tests, int $maxBatchSize): void { foreach ($tests as $test) { @@ -270,6 +282,9 @@ protected function getMethodTests(ParsedClass $class, ParsedFunction $method): a return $result; } + /** + * @param string[] $groups + */ protected function testMatchGroupOptions(array $groups): bool { if (empty($groups)) { @@ -301,12 +316,18 @@ protected function testMatchFilterOptions(string $className, string $name): bool return preg_match($re, $fullName) === 1; } + /** + * @param string[] $group + */ protected function testMatchOptions(string $className, string $name, array $group): bool { return $this->testMatchGroupOptions($group) && $this->testMatchFilterOptions($className, $name); } + /** + * @return string[] + */ protected function testGroups(ParsedClass $class, ParsedFunction $method): array { return array_merge( @@ -333,6 +354,9 @@ protected function methodDependency(ParsedFunction $method): ?string return null; } + /** + * @return string[] + */ protected function methodGroups(ParsedFunction $method): array { if (preg_match_all("/@\bgroup\b \b(.*)\b/", $method->getDocBlock(), $matches)) { @@ -342,6 +366,9 @@ protected function methodGroups(ParsedFunction $method): array return []; } + /** + * @return string[] + */ protected function classGroups(ParsedClass $class): array { if (preg_match_all("/@\bgroup\b \b(.*)\b/", $class->getDocBlock(), $matches)) { diff --git a/src/Runners/PHPUnit/SuitePath.php b/src/Runners/PHPUnit/SuitePath.php index 021c6c7..f90968b 100644 --- a/src/Runners/PHPUnit/SuitePath.php +++ b/src/Runners/PHPUnit/SuitePath.php @@ -22,6 +22,9 @@ class SuitePath /** @var string[] */ protected $excludedPaths; + /** + * @param string[] $excludedPaths + */ public function __construct(string $path, array $excludedPaths, string $suffix) { if (empty($suffix)) { diff --git a/src/Runners/PHPUnit/TestFileLoader.php b/src/Runners/PHPUnit/TestFileLoader.php index 721a34a..2d0a08a 100644 --- a/src/Runners/PHPUnit/TestFileLoader.php +++ b/src/Runners/PHPUnit/TestFileLoader.php @@ -38,14 +38,14 @@ class TestFileLoader /** * The collection of loaded files for this test suite. * - * @var array + * @var string[] */ protected $files = []; /** * The collection of excluded files. * - * @var array + * @var array */ protected $excludedFiles = []; diff --git a/src/Runners/PHPUnit/TestMethod.php b/src/Runners/PHPUnit/TestMethod.php index 71948ee..b317bcb 100644 --- a/src/Runners/PHPUnit/TestMethod.php +++ b/src/Runners/PHPUnit/TestMethod.php @@ -74,17 +74,18 @@ public function getName(): string * This sets up the --filter switch used to run a single PHPUnit test method. * This method also provide escaping for method name to be used as filter regexp. * - * @param array $options + * @param array $options * - * @return array + * @return array */ protected function prepareOptions(array $options): array { - $re = array_reduce($this->filters, static function ($r, $v) { + $re = array_reduce($this->filters, static function (?string $r, string $v): string { $isDataSet = strpos($v, ' with data set ') !== false; return ($r ? $r . '|' : '') . preg_quote($v, '/') . ($isDataSet ? '$' : '(?:\s|$)'); }); + $options['filter'] = '/' . $re . '/'; return $options; diff --git a/src/Runners/PHPUnit/Worker/BaseWorker.php b/src/Runners/PHPUnit/Worker/BaseWorker.php index 18fcb23..30ead64 100644 --- a/src/Runners/PHPUnit/Worker/BaseWorker.php +++ b/src/Runners/PHPUnit/Worker/BaseWorker.php @@ -36,7 +36,7 @@ abstract class BaseWorker ]; /** @var resource|null */ protected $proc; - /** @var array */ + /** @var resource[] */ protected $pipes; /** @var int */ protected $inExecution = 0; @@ -47,6 +47,9 @@ abstract class BaseWorker /** @var string */ private $alreadyReadOutput = ''; + /** + * @param string[] $parameters + */ public function start( string $wrapperBinary, ?int $token = 1, @@ -153,6 +156,9 @@ public function stop(): void fclose($this->pipes[0]); } + /** + * @param array $status + */ protected function setExitCode(array $status): void { if ($status['running']) { diff --git a/src/Runners/PHPUnit/Worker/SqliteWorker.php b/src/Runners/PHPUnit/Worker/SqliteWorker.php index 717987b..37b1432 100644 --- a/src/Runners/PHPUnit/Worker/SqliteWorker.php +++ b/src/Runners/PHPUnit/Worker/SqliteWorker.php @@ -16,6 +16,9 @@ public function __construct(string $dbFileName) $this->dbFileName = $dbFileName; } + /** + * @param string[] $parameters + */ public function start( string $wrapperBinary, ?int $token = 1, diff --git a/src/Runners/PHPUnit/Worker/WrapperWorker.php b/src/Runners/PHPUnit/Worker/WrapperWorker.php index 8f98545..6b1e5ba 100644 --- a/src/Runners/PHPUnit/Worker/WrapperWorker.php +++ b/src/Runners/PHPUnit/Worker/WrapperWorker.php @@ -5,6 +5,7 @@ namespace ParaTest\Runners\PHPUnit\Worker; use Exception; +use ParaTest\Runners\PHPUnit\Configuration; use ParaTest\Runners\PHPUnit\ExecutableTest; use ParaTest\Runners\PHPUnit\Options; use ParaTest\Runners\PHPUnit\ResultPrinter; @@ -45,6 +46,9 @@ public function execute(array $testCmdArguments): void ++$this->inExecution; } + /** + * @param array $phpunitOptions + */ public function assign(ExecutableTest $test, string $phpunit, array $phpunitOptions, Options $options): void { if ($this->currentlyExecuting !== null) { diff --git a/src/Runners/PHPUnit/WrapperRunner.php b/src/Runners/PHPUnit/WrapperRunner.php index 51baa69..9a24572 100644 --- a/src/Runners/PHPUnit/WrapperRunner.php +++ b/src/Runners/PHPUnit/WrapperRunner.php @@ -26,15 +26,18 @@ class WrapperRunner extends BaseRunner private const PHPUNIT_ERRORS = 2; - /** @var array */ + /** @var resource[] */ protected $streams; /** @var WrapperWorker[] */ protected $workers; - /** @var array */ + /** @var resource[] */ protected $modified; + /** + * {@inheritDoc} + */ public function __construct(array $opts = []) { if (static::class === self::class && defined('PHP_WINDOWS_VERSION_BUILD')) { @@ -155,7 +158,7 @@ private function waitForAllToFinish(): void /** * put on WorkersPool * - * @param array $modified + * @param resource[] $modified */ private function waitForStreamsToChange(array $modified): int { @@ -199,9 +202,9 @@ private function progressedWorkers(): array /** * Returns the output streams of a subset of workers. * - * @param array $workers keys are positions in $this->workers + * @param WrapperWorker[] $workers keys are positions in $this->workers * - * @return array + * @return resource[] */ private function streamsOf(array $workers): array { diff --git a/test/Functional/Coverage/CoverageMergerTest.php b/test/Functional/Coverage/CoverageMergerTest.php index cc004f4..446efdc 100644 --- a/test/Functional/Coverage/CoverageMergerTest.php +++ b/test/Functional/Coverage/CoverageMergerTest.php @@ -146,7 +146,7 @@ public function testCoverageFileDoesNotExist(): void } /** - * @return array + * @return array> */ public static function getCoverageFileProvider(): array { diff --git a/test/Functional/Coverage/CoverageReporterTest.php b/test/Functional/Coverage/CoverageReporterTest.php index c8acb2f..490eb94 100644 --- a/test/Functional/Coverage/CoverageReporterTest.php +++ b/test/Functional/Coverage/CoverageReporterTest.php @@ -163,7 +163,7 @@ public function testGenerateHtml(array $coverageFiles): void } /** - * @return array + * @return array> */ public static function getReporterProvider(): array { diff --git a/test/Functional/FunctionalTestBase.php b/test/Functional/FunctionalTestBase.php index 3bf415f..4022aa6 100644 --- a/test/Functional/FunctionalTestBase.php +++ b/test/Functional/FunctionalTestBase.php @@ -23,6 +23,11 @@ protected function fixture(string $fixture): string return $fixture; } + /** + * @param array $options + * + * @return Process + */ protected function invokeParatest(string $path, array $options = [], ?callable $callback = null): Process { $invoker = new ParaTestInvoker($this->fixture($path), BOOTSTRAP); @@ -30,6 +35,9 @@ protected function invokeParatest(string $path, array $options = [], ?callable $ return $invoker->execute($options, $callback); } + /** + * @param Process $proc + */ protected function assertTestsPassed( Process $proc, string $testPattern = '\d+', diff --git a/test/Functional/PHPUnitTest.php b/test/Functional/PHPUnitTest.php index be3c557..2682999 100644 --- a/test/Functional/PHPUnitTest.php +++ b/test/Functional/PHPUnitTest.php @@ -347,6 +347,9 @@ public function testFunctionalModeEachTestCalledOnce(): void $this->assertTestsPassed($proc, '2', '2'); } + /** + * @return array>> + */ public function setsCoveragePhpDataProvider(): array { return [ @@ -370,7 +373,7 @@ public function setsCoveragePhpDataProvider(): array } /** - * @param array $options + * @param array $options * * @dataProvider setsCoveragePhpDataProvider */ @@ -396,8 +399,8 @@ public function testSetsCoveragePhp(array $options, string $coveragePhp): void } /** - * @param array $options - * @param array $expected + * @param array> $options + * @param array> $expected * * @dataProvider getRunnerOptionsDataProvider */ @@ -420,6 +423,9 @@ public function testGetRunnerOptions(array $options, array $expected): void $this->assertEquals($expected, $options); } + /** + * @return array|int|string>>> + */ public function getRunnerOptionsDataProvider(): array { return [ diff --git a/test/Functional/ParaTestInvoker.php b/test/Functional/ParaTestInvoker.php index 8942b97..5525cb2 100644 --- a/test/Functional/ParaTestInvoker.php +++ b/test/Functional/ParaTestInvoker.php @@ -31,7 +31,9 @@ public function __construct(string $path, string $bootstrap) /** * Runs the command, returns the proc after it's done. * - * @param array $options + * @param array $options + * + * @return Process */ public function execute(array $options = [], ?callable $callback = null): Process { @@ -48,6 +50,9 @@ public function execute(array $options = [], ?callable $callback = null): Proces return $proc; } + /** + * @param array $options + */ private function buildCommand(array $options = []): string { $cmd = sprintf( diff --git a/test/Functional/Runners/PHPUnit/RunnerIntegrationTest.php b/test/Functional/Runners/PHPUnit/RunnerIntegrationTest.php index 4c60921..fef7d66 100644 --- a/test/Functional/Runners/PHPUnit/RunnerIntegrationTest.php +++ b/test/Functional/Runners/PHPUnit/RunnerIntegrationTest.php @@ -20,7 +20,7 @@ class RunnerIntegrationTest extends TestBase { /** @var Runner $runner */ protected $runner; - /** @var array */ + /** @var array */ protected $options; protected function setUp(): void @@ -47,6 +47,9 @@ protected function tearDown(): void parent::tearDown(); } + /** + * @return string[] + */ private function globTempDir(string $pattern): array { return glob(sys_get_temp_dir() . DS . $pattern); diff --git a/test/Functional/Runners/PHPUnit/WorkerTest.php b/test/Functional/Runners/PHPUnit/WorkerTest.php index 1cbc95b..57badca 100644 --- a/test/Functional/Runners/PHPUnit/WorkerTest.php +++ b/test/Functional/Runners/PHPUnit/WorkerTest.php @@ -184,6 +184,9 @@ public function testCanExecuteMultiplePHPUnitCommands(): void $this->assertJUnitLogIsValid($testLog2); } + /** + * @return string[] + */ private function getCommand(string $testFile, string $logFile): array { return [ diff --git a/test/TestBase.php b/test/TestBase.php index a81687b..05d5692 100644 --- a/test/TestBase.php +++ b/test/TestBase.php @@ -48,6 +48,9 @@ protected function fixture(string $fixture): string return $fixture; } + /** + * @return string[] + */ protected function findTests(string $dir): array { $it = new RecursiveDirectoryIterator($dir, RecursiveIteratorIterator::SELF_FIRST); @@ -123,6 +126,7 @@ public function callStatic(string $class, string $methodName, ...$args) /** * @param string|object $objectOrClassName + * @param mixed[]|null $args * * @return mixed */ diff --git a/test/Unit/Logging/LogInterpreterTest.php b/test/Unit/Logging/LogInterpreterTest.php index e545fd5..65ca9b4 100644 --- a/test/Unit/Logging/LogInterpreterTest.php +++ b/test/Unit/Logging/LogInterpreterTest.php @@ -5,6 +5,7 @@ namespace ParaTest\Tests\Unit\Logging; use ParaTest\Logging\JUnit\Reader; +use ParaTest\Logging\JUnit\TestSuite; use ParaTest\Logging\LogInterpreter; use ParaTest\Tests\Unit\ResultTester; use PHPUnit\Framework\MockObject\MockObject; @@ -165,6 +166,9 @@ public function testGetCasesExtendEmptyCasesFromSuites(): void } } + /** + * @return TestSuite[] + */ public function testFlattenCasesReturnsCorrectNumberOfSuites(): array { $suites = $this->interpreter->flattenCases(); @@ -174,6 +178,8 @@ public function testFlattenCasesReturnsCorrectNumberOfSuites(): array } /** + * @param TestSuite[] $suites + * * @depends testFlattenCasesReturnsCorrectNumberOfSuites */ public function testFlattenedSuiteHasCorrectTotals(array $suites): void diff --git a/test/Unit/Runners/PHPUnit/ConfigurationTest.php b/test/Unit/Runners/PHPUnit/ConfigurationTest.php index caaa17d..06cb4e6 100644 --- a/test/Unit/Runners/PHPUnit/ConfigurationTest.php +++ b/test/Unit/Runners/PHPUnit/ConfigurationTest.php @@ -34,6 +34,9 @@ public function testToStringReturnsPath(): void $this->assertEquals($this->path, (string) $this->config); } + /** + * @return SuitePath[][] + */ public function testGetSuitesShouldReturnCorrectNumberOfSuites(): array { $suites = $this->config->getSuites(); @@ -49,6 +52,10 @@ public function testHasSuites(): void } /** + * @param SuitePath[][] $suites + * + * @return SuitePath[][] + * * @depends testGetSuitesShouldReturnCorrectNumberOfSuites */ public function testSuitesContainSuiteNameAtKey(array $suites): array @@ -60,6 +67,8 @@ public function testSuitesContainSuiteNameAtKey(array $suites): array } /** + * @param SuitePath[][] $suites + * * @depends testSuitesContainSuiteNameAtKey */ public function testSuitesContainPathAsValue(array $suites): void diff --git a/test/Unit/Runners/PHPUnit/SuiteLoaderTest.php b/test/Unit/Runners/PHPUnit/SuiteLoaderTest.php index 891f922..f80400b 100644 --- a/test/Unit/Runners/PHPUnit/SuiteLoaderTest.php +++ b/test/Unit/Runners/PHPUnit/SuiteLoaderTest.php @@ -5,6 +5,7 @@ namespace ParaTest\Tests\Unit\Runners\PHPUnit; use InvalidArgumentException; +use ParaTest\Runners\PHPUnit\ExecutableTest; use ParaTest\Runners\PHPUnit\Options; use ParaTest\Runners\PHPUnit\Suite; use ParaTest\Runners\PHPUnit\SuiteLoader; @@ -228,6 +229,9 @@ public function testLoadFileGetsPathOfFile(): void $this->assertEquals($path, array_shift($paths)); } + /** + * @return string[] + */ protected function getLoadedPaths(string $path, ?SuiteLoader $loader = null): array { $loader = $loader ?: new SuiteLoader(); @@ -244,6 +248,9 @@ public function testLoadFileShouldLoadFileWhereNameDoesNotEndInTest(): void $this->assertEquals($path, array_shift($paths)); } + /** + * @return ExecutableTest[] + */ public function testLoadDirGetsPathOfAllTestsWithKeys(): array { $path = $this->fixture('passing-tests'); @@ -260,6 +267,8 @@ public function testLoadDirGetsPathOfAllTestsWithKeys(): array } /** + * @param ExecutableTest[] $paraSuites + * * @depends testLoadDirGetsPathOfAllTestsWithKeys */ public function testFirstParallelSuiteHasCorrectFunctions(array $paraSuites): void @@ -274,10 +283,15 @@ public function testFirstParallelSuiteHasCorrectFunctions(array $paraSuites): vo $this->assertEquals('testAddition', $functions[4]->getName()); } + /** + * @param ExecutableTest[] $paraSuites + */ private function suiteByPath(string $path, array $paraSuites): Suite { foreach ($paraSuites as $completePath => $suite) { if (strstr($completePath, $path)) { + $this->assertInstanceOf(Suite::class, $suite); + return $suite; } } @@ -286,6 +300,8 @@ private function suiteByPath(string $path, array $paraSuites): Suite } /** + * @param ExecutableTest[] $paraSuites + * * @depends testLoadDirGetsPathOfAllTestsWithKeys */ public function testSecondParallelSuiteHasCorrectFunctions(array $paraSuites): void diff --git a/test/Unit/Util/StrTest.php b/test/Unit/Util/StrTest.php index 5181a9e..aa0669f 100644 --- a/test/Unit/Util/StrTest.php +++ b/test/Unit/Util/StrTest.php @@ -12,7 +12,7 @@ class StrTest extends TestCase { /** - * @param array $expected + * @param array> $expected * * @dataProvider explodeWithCleanupDataProvider */ @@ -24,6 +24,9 @@ public function testExplodeWithCleanup(string $delimiter, string $valueString, a $this->assertEquals($expected, $actual); } + /** + * @return array> + */ public function explodeWithCleanupDataProvider(): array { return [ From d51a2adb936a7ae82eee02fefc75592ee9dd4f33 Mon Sep 17 00:00:00 2001 From: Filippo Tessarotto Date: Tue, 28 Jul 2020 10:51:55 +0200 Subject: [PATCH 33/34] Remove version gathered from git as it's used only within the test suite (#481) --- .github/workflows/integrate.yaml | 6 ------ src/Console/VersionProvider.php | 15 --------------- test/Unit/Console/VersionProviderTest.php | 8 -------- 3 files changed, 29 deletions(-) diff --git a/.github/workflows/integrate.yaml b/.github/workflows/integrate.yaml index 424e442..b8cdf64 100644 --- a/.github/workflows/integrate.yaml +++ b/.github/workflows/integrate.yaml @@ -114,9 +114,6 @@ jobs: steps: - name: "Checkout" uses: "actions/checkout@v2" - with: - # Needed for \ParaTest\Console\VersionProvider::getGitVersion - fetch-depth: 0 - name: "Install PHP" uses: "shivammathur/setup-php@v2" @@ -163,9 +160,6 @@ jobs: steps: - name: "Checkout" uses: "actions/checkout@v2" - with: - # Needed for \ParaTest\Console\VersionProvider::getGitVersion - fetch-depth: 0 - name: "Install PHP" uses: "shivammathur/setup-php@v2" diff --git a/src/Console/VersionProvider.php b/src/Console/VersionProvider.php index 9c1c18e..f019ba6 100644 --- a/src/Console/VersionProvider.php +++ b/src/Console/VersionProvider.php @@ -4,14 +4,11 @@ namespace ParaTest\Console; -use Symfony\Component\Process\Process; - use function file_exists; use function file_get_contents; use function is_array; use function is_readable; use function json_decode; -use function trim; /** * Obtain version information of the ParaTest application itself based on @@ -39,21 +36,9 @@ public static function getVersion(?string $default = null): ?string public function getParaTestVersion(): ?string { return $this->getComposerInstalledVersion(self::PACKAGE) - ?? $this->getGitVersion() ?? $this->default; } - public function getGitVersion(): ?string - { - $cmd = 'git describe --tags --always --first-parent'; - $process = Process::fromShellCommandline($cmd, __DIR__); - if ($process->run() !== 0) { - return null; - } - - return trim($process->getOutput()); - } - public function getComposerInstalledVersion(string $package): ?string { if (($path = $this->getComposerInstalledJsonPath()) === null) { diff --git a/test/Unit/Console/VersionProviderTest.php b/test/Unit/Console/VersionProviderTest.php index 0fbd887..e24e7fa 100644 --- a/test/Unit/Console/VersionProviderTest.php +++ b/test/Unit/Console/VersionProviderTest.php @@ -36,12 +36,4 @@ public function testComposerInstalledVersion(): void $actual = $provider->getComposerInstalledVersion('foooo/barazzoraz'); $this->assertNull($actual, 'No version for non-existent package'); } - - public function testGitVersion(): void - { - $provider = new VersionProvider(); - $actual = $provider->getGitVersion(); - $this->assertIsString($actual, 'Git is enabled and works'); - $this->assertMatchesRegularExpression('~^\d.\d(?:.\d+)?(?:-\d+-g[\da-f]+)?$~', $actual, 'Git gives a version'); - } } From 88e4d87421279457c765abf5db54e1de71f31845 Mon Sep 17 00:00:00 2001 From: Filippo Tessarotto Date: Mon, 10 Aug 2020 09:51:24 +0200 Subject: [PATCH 34/34] Allow PHPUnit 9.3 (#504) * Allow PHPUnit 9.3 * Suggest warming coverage cache --- .../lint-xml-configuration.sh | 6 +- README.md | 8 ++ composer.json | 18 ++-- phpstan.neon.dist | 6 -- phpunit.xml.dist | 61 ++++++------- psalm.xml.dist | 5 ++ src/Coverage/CoverageMerger.php | 12 ++- src/Runners/PHPUnit/Options.php | 2 +- src/Runners/PHPUnit/Worker/BaseWorker.php | 2 +- .../Coverage/CoverageReporterTest.php | 4 +- test/Unit/Coverage/CoverageMergerTest.php | 54 +++++++----- .../result_printer_test-windows.cov | 86 ++++++++++--------- .../coverage-tests/result_printer_test.cov | 86 ++++++++++--------- .../coverage-tests/runner_test-windows.cov | 85 +++++++++--------- test/fixtures/coverage-tests/runner_test.cov | 86 ++++++++++--------- 15 files changed, 289 insertions(+), 232 deletions(-) diff --git a/.github/lint-xml-configuration/lint-xml-configuration.sh b/.github/lint-xml-configuration/lint-xml-configuration.sh index f96380a..6756bd6 100644 --- a/.github/lint-xml-configuration/lint-xml-configuration.sh +++ b/.github/lint-xml-configuration/lint-xml-configuration.sh @@ -2,7 +2,9 @@ set -ex -xmllint --noout --schema vendor/phpunit/phpunit/phpunit.xsd phpunit.xml.dist +phpunitXsd="vendor/phpunit/phpunit/phpunit.xsd" + +xmllint --noout --schema "$phpunitXsd" phpunit.xml.dist xmllint --noout --schema vendor/squizlabs/php_codesniffer/phpcs.xsd phpcs.xml.dist xmllint --noout --schema vendor/vimeo/psalm/config.xsd psalm.xml.dist -find test/ -name "phpunit*.xml*" -not -name "phpunit-files-dirs-mix-nested.xml" -print0 | xargs -0 xmllint --noout --schema vendor/phpunit/phpunit/phpunit.xsd \ No newline at end of file +find test/ -name "phpunit*.xml*" -not -name "phpunit-files-dirs-mix-nested.xml" -print0 | xargs -0 xmllint --noout --schema "$phpunitXsd" \ No newline at end of file diff --git a/README.md b/README.md index d14c4e9..0e754c2 100644 --- a/README.md +++ b/README.md @@ -137,6 +137,14 @@ The corresponding logfiles are placed in your `sys_get_temp_dir()`. See [Logging docs](docs/logging.md) for further information. ### Generating code coverage + +Beginning from PHPUnit 9.3.4, it is strongly advised to warm the coverage cache before running any code-coverage +analysis, see [PHPUnit Changlog @ 9.3.4](https://github.com/sebastianbergmann/phpunit/blob/master/ChangeLog-9.3.md#934---2020-08-10): + +``` +vendor/bin/phpunit --warm-coverage-cache +``` + Examples assume your tests are located under `./test/unit`. ```` vendor/bin/paratest -p 1 --coverage-text test/unit diff --git a/composer.json b/composer.json index 33196ed..cda417e 100644 --- a/composer.json +++ b/composer.json @@ -27,18 +27,18 @@ "ext-reflection": "*", "ext-simplexml": "*", "brianium/habitat": "^1.0", - "phpunit/php-code-coverage": "^8.0", + "phpunit/php-code-coverage": "^9.1.2", "phpunit/php-timer": "^5.0", - "phpunit/phpunit": "^9.2", - "symfony/console": "^4.4 || ^5.0", - "symfony/process": "^4.4 || ^5.0" + "phpunit/phpunit": "^9.3.5", + "symfony/console": "^4.4 || ^5.1", + "symfony/process": "^4.4 || ^5.1" }, "require-dev": { - "doctrine/coding-standard": "^8.1", - "phpstan/phpstan": "^0.12.33", - "phpstan/phpstan-phpunit": "^0.12.12", - "squizlabs/php_codesniffer": "^3.5", - "vimeo/psalm": "^3.12" + "doctrine/coding-standard": "^8.1.0", + "phpstan/phpstan": "^0.12.37", + "phpstan/phpstan-phpunit": "^0.12.16", + "squizlabs/php_codesniffer": "^3.5.6", + "vimeo/psalm": "^3.12.2" }, "autoload": { "psr-4": { diff --git a/phpstan.neon.dist b/phpstan.neon.dist index 6bf226b..773e1ff 100644 --- a/phpstan.neon.dist +++ b/phpstan.neon.dist @@ -14,12 +14,6 @@ parameters: excludes_analyse: - test/fixtures/* ignoreErrors: - # @see https://github.com/phpstan/phpstan-src/pull/281 - - - message: "#^Strict comparison using \\=\\=\\= between int and false will always evaluate to false\\.$#" - count: 1 - path: src/Runners/PHPUnit/SqliteRunner.php - # Known fixtures - message: "#^Property ParaTest\\\\Runners\\\\PHPUnit\\\\ExecutableTest\\:\\:\\$process type has no value type specified in iterable type Symfony\\\\Component\\\\Process\\\\Process\\.$#" diff --git a/phpunit.xml.dist b/phpunit.xml.dist index 907340c..de89de3 100644 --- a/phpunit.xml.dist +++ b/phpunit.xml.dist @@ -1,33 +1,34 @@ - - - - ./test/Unit/ - - - ./test/Functional/ - - - - - - src - - - - - - - - - + + + ./test/Unit/ + + + ./test/Functional/ + + + + + src + + + + + + + + diff --git a/psalm.xml.dist b/psalm.xml.dist index 342c860..89cb7ff 100644 --- a/psalm.xml.dist +++ b/psalm.xml.dist @@ -13,4 +13,9 @@ + + + + + diff --git a/src/Coverage/CoverageMerger.php b/src/Coverage/CoverageMerger.php index e4e08b9..c67ae61 100644 --- a/src/Coverage/CoverageMerger.php +++ b/src/Coverage/CoverageMerger.php @@ -6,6 +6,7 @@ use RuntimeException; use SebastianBergmann\CodeCoverage\CodeCoverage; +use SebastianBergmann\CodeCoverage\ProcessedCodeCoverageData; use SplFileObject; use function array_map; @@ -118,7 +119,8 @@ private function limitCoverageTests(CodeCoverage $coverage): void return; } - $coverage->setData(array_map( + $data = $coverage->getData(true); + $newData = array_map( function (array $lines) { return array_map(function ($value) { if (! is_array($value)) { @@ -128,7 +130,11 @@ function (array $lines) { return array_slice($value, 0, $this->test_limit); }, $lines); }, - $coverage->getData($raw = true) - )); + $data->lineCoverage(), + ); + $processedData = new ProcessedCodeCoverageData(); + $processedData->setLineCoverage($newData); + + $coverage->setData($processedData); } } diff --git a/src/Runners/PHPUnit/Options.php b/src/Runners/PHPUnit/Options.php index aabde05..26e34fc 100644 --- a/src/Runners/PHPUnit/Options.php +++ b/src/Runners/PHPUnit/Options.php @@ -205,7 +205,7 @@ public function __construct(array $opts = []) $this->maxBatchSize = (int) $opts['max-batch-size']; $this->filter = $opts['filter']; $this->parallelSuite = $opts['parallel-suite']; - $this->passthru = $this->parsePassthru($opts['passthru-php'] ?? null); + $this->passthru = $this->parsePassthru($opts['passthru'] ?? null); $this->passthruPhp = $this->parsePassthru($opts['passthru-php'] ?? null); $this->verbose = $opts['verbose'] ?? 0; $this->coverageTestLimit = $opts['coverage-test-limit'] ?? 0; diff --git a/src/Runners/PHPUnit/Worker/BaseWorker.php b/src/Runners/PHPUnit/Worker/BaseWorker.php index 30ead64..2fc8a24 100644 --- a/src/Runners/PHPUnit/Worker/BaseWorker.php +++ b/src/Runners/PHPUnit/Worker/BaseWorker.php @@ -157,7 +157,7 @@ public function stop(): void } /** - * @param array $status + * @param array $status */ protected function setExitCode(array $status): void { diff --git a/test/Functional/Coverage/CoverageReporterTest.php b/test/Functional/Coverage/CoverageReporterTest.php index 490eb94..ccd6ca5 100644 --- a/test/Functional/Coverage/CoverageReporterTest.php +++ b/test/Functional/Coverage/CoverageReporterTest.php @@ -107,7 +107,7 @@ public function testGenerateClover(array $coverageFiles): void static::assertFileExists($target); - $reportXml = Xml::loadFile($target); + $reportXml = (new Xml\Loader())->loadFile($target); static::assertInstanceOf('DomDocument', $reportXml, 'Incorrect clover report xml was generated'); } @@ -133,7 +133,7 @@ public function testGenerateCrap4J(array $coverageFiles): void static::assertFileExists($target); - $reportXml = Xml::loadFile($target); + $reportXml = (new Xml\Loader())->loadFile($target); static::assertInstanceOf('DomDocument', $reportXml, 'Incorrect crap4j report xml was generated'); static::assertEquals('crap_result', $reportXml->documentElement->tagName); } diff --git a/test/Unit/Coverage/CoverageMergerTest.php b/test/Unit/Coverage/CoverageMergerTest.php index 0c63fe6..9e9b325 100644 --- a/test/Unit/Coverage/CoverageMergerTest.php +++ b/test/Unit/Coverage/CoverageMergerTest.php @@ -7,7 +7,9 @@ use ParaTest\Coverage\CoverageMerger; use ParaTest\Tests\TestBase; use SebastianBergmann\CodeCoverage\CodeCoverage; +use SebastianBergmann\CodeCoverage\Driver\Driver; use SebastianBergmann\CodeCoverage\Filter; +use SebastianBergmann\CodeCoverage\RawCodeCoverageData; use function assert; @@ -34,20 +36,24 @@ public function testSimpleMerge(): void $secondFileFirstLine = 53; $filter = new Filter(); - $filter->addFilesToWhitelist([$firstFile, $secondFile]); - $coverage1 = new CodeCoverage(null, $filter); + $filter->includeFiles([$firstFile, $secondFile]); + + $data = RawCodeCoverageData::fromXdebugWithoutPathCoverage([ + $firstFile => [$firstFileFirstLine => 1], + $secondFile => [$secondFileFirstLine => 1], + ]); + $coverage1 = new CodeCoverage(Driver::forLineCoverage($filter), $filter); $coverage1->append( - [ - $firstFile => [$firstFileFirstLine => 1], - $secondFile => [$secondFileFirstLine => 1], - ], + $data, 'Test1' ); - $coverage2 = new CodeCoverage(null, $filter); + + $data = RawCodeCoverageData::fromXdebugWithoutPathCoverage([ + $firstFile => [$firstFileFirstLine => 1, 1 + $firstFileFirstLine => 1], + ]); + $coverage2 = new CodeCoverage(Driver::forLineCoverage($filter), $filter); $coverage2->append( - [ - $firstFile => [$firstFileFirstLine => 1, 1 + $firstFileFirstLine => 1], - ], + $data, 'Test2' ); @@ -60,7 +66,7 @@ public function testSimpleMerge(): void $this->assertInstanceOf(CodeCoverage::class, $coverage); - $data = $coverage->getData(); + $data = $coverage->getData()->lineCoverage(); $this->assertCount(2, $data[$firstFile][$firstFileFirstLine]); $this->assertEquals('Test1', $data[$firstFile][$firstFileFirstLine][0]); @@ -86,20 +92,24 @@ public function testSimpleMergeLimited(): void $secondFileFirstLine = 53; $filter = new Filter(); - $filter->addFilesToWhitelist([$firstFile, $secondFile]); - $coverage1 = new CodeCoverage(null, $filter); + $filter->includeFiles([$firstFile, $secondFile]); + + $data = RawCodeCoverageData::fromXdebugWithoutPathCoverage([ + $firstFile => [$firstFileFirstLine => 1], + $secondFile => [$secondFileFirstLine => 1], + ]); + $coverage1 = new CodeCoverage(Driver::forLineCoverage($filter), $filter); $coverage1->append( - [ - $firstFile => [$firstFileFirstLine => 1], - $secondFile => [$secondFileFirstLine => 1], - ], + $data, 'Test1' ); - $coverage2 = new CodeCoverage(null, $filter); + + $data = RawCodeCoverageData::fromXdebugWithoutPathCoverage([ + $firstFile => [$firstFileFirstLine => 1, 1 + $firstFileFirstLine => 1], + ]); + $coverage2 = new CodeCoverage(Driver::forLineCoverage($filter), $filter); $coverage2->append( - [ - $firstFile => [$firstFileFirstLine => 1, 1 + $firstFileFirstLine => 1], - ], + $data, 'Test2' ); @@ -111,7 +121,7 @@ public function testSimpleMergeLimited(): void assert($coverage instanceof CodeCoverage); $this->assertInstanceOf(CodeCoverage::class, $coverage); - $data = $coverage->getData(); + $data = $coverage->getData()->lineCoverage(); $this->assertCount(1, $data[$firstFile][$firstFileFirstLine]); $this->assertCount(1, $data[$secondFile][$secondFileFirstLine]); diff --git a/test/fixtures/coverage-tests/result_printer_test-windows.cov b/test/fixtures/coverage-tests/result_printer_test-windows.cov index 668ec52..69888ab 100644 --- a/test/fixtures/coverage-tests/result_printer_test-windows.cov +++ b/test/fixtures/coverage-tests/result_printer_test-windows.cov @@ -1,6 +1,43 @@ setData(array ( + +$filter = new \SebastianBergmann\CodeCoverage\Filter(); +$filter->includeFiles(array ( + 'C:\\paratest\\src\\ParaTest\\Console\\Commands\\ParaTestCommand.php', + 'C:\\paratest\\src\\ParaTest\\Console\\ParaTestApplication.php', + 'C:\\paratest\\src\\ParaTest\\Console\\Testers\\PHPUnit.php', + 'C:\\paratest\\src\\ParaTest\\Console\\Testers\\Tester.php', + 'C:\\paratest\\src\\ParaTest\\Coverage\\CoverageMerger.php', + 'C:\\paratest\\src\\ParaTest\\Coverage\\CoverageReporter.php', + 'C:\\paratest\\src\\ParaTest\\Coverage\\CoverageReporterInterface.php', + 'C:\\paratest\\src\\ParaTest\\Coverage\\CoverageReporterLegacy.php', + 'C:\\paratest\\src\\ParaTest\\Logging\\JUnit\\Reader.php', + 'C:\\paratest\\src\\ParaTest\\Logging\\JUnit\\TestCase.php', + 'C:\\paratest\\src\\ParaTest\\Logging\\JUnit\\TestSuite.php', + 'C:\\paratest\\src\\ParaTest\\Logging\\JUnit\\Writer.php', + 'C:\\paratest\\src\\ParaTest\\Logging\\LogInterpreter.php', + 'C:\\paratest\\src\\ParaTest\\Logging\\MetaProvider.php', + 'C:\\paratest\\src\\ParaTest\\Parser\\NoClassInFileException.php', + 'C:\\paratest\\src\\ParaTest\\Parser\\ParsedClass.php', + 'C:\\paratest\\src\\ParaTest\\Parser\\ParsedFunction.php', + 'C:\\paratest\\src\\ParaTest\\Parser\\ParsedObject.php', + 'C:\\paratest\\src\\ParaTest\\Parser\\Parser.php', + 'C:\\paratest\\src\\ParaTest\\Runners\\PHPUnit\\BaseRunner.php', + 'C:\\paratest\\src\\ParaTest\\Runners\\PHPUnit\\Configuration.php', + 'C:\\paratest\\src\\ParaTest\\Runners\\PHPUnit\\ExecutableTest.php', + 'C:\\paratest\\src\\ParaTest\\Runners\\PHPUnit\\Options.php', + 'C:\\paratest\\src\\ParaTest\\Runners\\PHPUnit\\ResultPrinter.php', + 'C:\\paratest\\src\\ParaTest\\Runners\\PHPUnit\\Runner.php', + 'C:\\paratest\\src\\ParaTest\\Runners\\PHPUnit\\Suite.php', + 'C:\\paratest\\src\\ParaTest\\Runners\\PHPUnit\\SuiteLoader.php', + 'C:\\paratest\\src\\ParaTest\\Runners\\PHPUnit\\SuitePath.php', + 'C:\\paratest\\src\\ParaTest\\Runners\\PHPUnit\\TestFileLoader.php', + 'C:\\paratest\\src\\ParaTest\\Runners\\PHPUnit\\TestMethod.php', + 'C:\\paratest\\src\\ParaTest\\Runners\\PHPUnit\\Worker.php', + 'C:\\paratest\\src\\ParaTest\\Runners\\PHPUnit\\WrapperRunner.php', +)); + +$coverage = new \SebastianBergmann\CodeCoverage\CodeCoverage(new \SebastianBergmann\CodeCoverage\Driver\PcovDriver($filter), $filter); +$data = array ( 'C:\\paratest\\src\\ParaTest\\Console\\ParaTestApplication.php' => array ( 18 => @@ -5752,7 +5789,14 @@ $coverage->setData(array ( ), 176 => NULL, ), -)); +); +if (class_exists(\SebastianBergmann\CodeCoverage\ProcessedCodeCoverageData::class)) { + $processedData = new \SebastianBergmann\CodeCoverage\ProcessedCodeCoverageData(); + $processedData->setLineCoverage($data); + + $data = $processedData; +} +$coverage->setData($data); $coverage->setTests(array ( 'UNCOVERED_FILES_FROM_WHITELIST' => array ( @@ -5861,40 +5905,4 @@ $coverage->setTests(array ( ), )); -$filter = $coverage->filter(); -$filter->setWhitelistedFiles(array ( - 'C:\\paratest\\src\\ParaTest\\Console\\Commands\\ParaTestCommand.php' => true, - 'C:\\paratest\\src\\ParaTest\\Console\\ParaTestApplication.php' => true, - 'C:\\paratest\\src\\ParaTest\\Console\\Testers\\PHPUnit.php' => true, - 'C:\\paratest\\src\\ParaTest\\Console\\Testers\\Tester.php' => true, - 'C:\\paratest\\src\\ParaTest\\Coverage\\CoverageMerger.php' => true, - 'C:\\paratest\\src\\ParaTest\\Coverage\\CoverageReporter.php' => true, - 'C:\\paratest\\src\\ParaTest\\Coverage\\CoverageReporterInterface.php' => true, - 'C:\\paratest\\src\\ParaTest\\Coverage\\CoverageReporterLegacy.php' => true, - 'C:\\paratest\\src\\ParaTest\\Logging\\JUnit\\Reader.php' => true, - 'C:\\paratest\\src\\ParaTest\\Logging\\JUnit\\TestCase.php' => true, - 'C:\\paratest\\src\\ParaTest\\Logging\\JUnit\\TestSuite.php' => true, - 'C:\\paratest\\src\\ParaTest\\Logging\\JUnit\\Writer.php' => true, - 'C:\\paratest\\src\\ParaTest\\Logging\\LogInterpreter.php' => true, - 'C:\\paratest\\src\\ParaTest\\Logging\\MetaProvider.php' => true, - 'C:\\paratest\\src\\ParaTest\\Parser\\NoClassInFileException.php' => true, - 'C:\\paratest\\src\\ParaTest\\Parser\\ParsedClass.php' => true, - 'C:\\paratest\\src\\ParaTest\\Parser\\ParsedFunction.php' => true, - 'C:\\paratest\\src\\ParaTest\\Parser\\ParsedObject.php' => true, - 'C:\\paratest\\src\\ParaTest\\Parser\\Parser.php' => true, - 'C:\\paratest\\src\\ParaTest\\Runners\\PHPUnit\\BaseRunner.php' => true, - 'C:\\paratest\\src\\ParaTest\\Runners\\PHPUnit\\Configuration.php' => true, - 'C:\\paratest\\src\\ParaTest\\Runners\\PHPUnit\\ExecutableTest.php' => true, - 'C:\\paratest\\src\\ParaTest\\Runners\\PHPUnit\\Options.php' => true, - 'C:\\paratest\\src\\ParaTest\\Runners\\PHPUnit\\ResultPrinter.php' => true, - 'C:\\paratest\\src\\ParaTest\\Runners\\PHPUnit\\Runner.php' => true, - 'C:\\paratest\\src\\ParaTest\\Runners\\PHPUnit\\Suite.php' => true, - 'C:\\paratest\\src\\ParaTest\\Runners\\PHPUnit\\SuiteLoader.php' => true, - 'C:\\paratest\\src\\ParaTest\\Runners\\PHPUnit\\SuitePath.php' => true, - 'C:\\paratest\\src\\ParaTest\\Runners\\PHPUnit\\TestFileLoader.php' => true, - 'C:\\paratest\\src\\ParaTest\\Runners\\PHPUnit\\TestMethod.php' => true, - 'C:\\paratest\\src\\ParaTest\\Runners\\PHPUnit\\Worker.php' => true, - 'C:\\paratest\\src\\ParaTest\\Runners\\PHPUnit\\WrapperRunner.php' => true, -)); - return $coverage; \ No newline at end of file diff --git a/test/fixtures/coverage-tests/result_printer_test.cov b/test/fixtures/coverage-tests/result_printer_test.cov index d4aa96d..bfabbe3 100644 --- a/test/fixtures/coverage-tests/result_printer_test.cov +++ b/test/fixtures/coverage-tests/result_printer_test.cov @@ -1,6 +1,43 @@ setData(array ( + +$filter = new \SebastianBergmann\CodeCoverage\Filter(); +$filter->includeFiles(array ( + '/home/munkie/Projects/paratest/src/ParaTest/Console/Commands/ParaTestCommand.php', + '/home/munkie/Projects/paratest/src/ParaTest/Console/ParaTestApplication.php', + '/home/munkie/Projects/paratest/src/ParaTest/Console/Testers/PHPUnit.php', + '/home/munkie/Projects/paratest/src/ParaTest/Console/Testers/Tester.php', + '/home/munkie/Projects/paratest/src/ParaTest/Coverage/CoverageMerger.php', + '/home/munkie/Projects/paratest/src/ParaTest/Coverage/CoverageReporter.php', + '/home/munkie/Projects/paratest/src/ParaTest/Coverage/CoverageReporterInterface.php', + '/home/munkie/Projects/paratest/src/ParaTest/Coverage/CoverageReporterLegacy.php', + '/home/munkie/Projects/paratest/src/ParaTest/Logging/JUnit/Reader.php', + '/home/munkie/Projects/paratest/src/ParaTest/Logging/JUnit/TestCase.php', + '/home/munkie/Projects/paratest/src/ParaTest/Logging/JUnit/TestSuite.php', + '/home/munkie/Projects/paratest/src/ParaTest/Logging/JUnit/Writer.php', + '/home/munkie/Projects/paratest/src/ParaTest/Logging/LogInterpreter.php', + '/home/munkie/Projects/paratest/src/ParaTest/Logging/MetaProvider.php', + '/home/munkie/Projects/paratest/src/ParaTest/Parser/NoClassInFileException.php', + '/home/munkie/Projects/paratest/src/ParaTest/Parser/ParsedClass.php', + '/home/munkie/Projects/paratest/src/ParaTest/Parser/ParsedFunction.php', + '/home/munkie/Projects/paratest/src/ParaTest/Parser/ParsedObject.php', + '/home/munkie/Projects/paratest/src/ParaTest/Parser/Parser.php', + '/home/munkie/Projects/paratest/src/ParaTest/Runners/PHPUnit/BaseRunner.php', + '/home/munkie/Projects/paratest/src/ParaTest/Runners/PHPUnit/Configuration.php', + '/home/munkie/Projects/paratest/src/ParaTest/Runners/PHPUnit/ExecutableTest.php', + '/home/munkie/Projects/paratest/src/ParaTest/Runners/PHPUnit/Options.php', + '/home/munkie/Projects/paratest/src/ParaTest/Runners/PHPUnit/ResultPrinter.php', + '/home/munkie/Projects/paratest/src/ParaTest/Runners/PHPUnit/Runner.php', + '/home/munkie/Projects/paratest/src/ParaTest/Runners/PHPUnit/Suite.php', + '/home/munkie/Projects/paratest/src/ParaTest/Runners/PHPUnit/SuiteLoader.php', + '/home/munkie/Projects/paratest/src/ParaTest/Runners/PHPUnit/SuitePath.php', + '/home/munkie/Projects/paratest/src/ParaTest/Runners/PHPUnit/TestFileLoader.php', + '/home/munkie/Projects/paratest/src/ParaTest/Runners/PHPUnit/TestMethod.php', + '/home/munkie/Projects/paratest/src/ParaTest/Runners/PHPUnit/Worker.php', + '/home/munkie/Projects/paratest/src/ParaTest/Runners/PHPUnit/WrapperRunner.php', +)); + +$coverage = new \SebastianBergmann\CodeCoverage\CodeCoverage(new \SebastianBergmann\CodeCoverage\Driver\PcovDriver($filter), $filter); +$data = array ( '/home/munkie/Projects/paratest/src/ParaTest/Console/ParaTestApplication.php' => array ( 18 => @@ -5752,7 +5789,14 @@ $coverage->setData(array ( ), 176 => NULL, ), -)); +); +if (class_exists(\SebastianBergmann\CodeCoverage\ProcessedCodeCoverageData::class)) { + $processedData = new \SebastianBergmann\CodeCoverage\ProcessedCodeCoverageData(); + $processedData->setLineCoverage($data); + + $data = $processedData; +} +$coverage->setData($data); $coverage->setTests(array ( 'UNCOVERED_FILES_FROM_WHITELIST' => array ( @@ -5861,40 +5905,4 @@ $coverage->setTests(array ( ), )); -$filter = $coverage->filter(); -$filter->setWhitelistedFiles(array ( - '/home/munkie/Projects/paratest/src/ParaTest/Console/Commands/ParaTestCommand.php' => true, - '/home/munkie/Projects/paratest/src/ParaTest/Console/ParaTestApplication.php' => true, - '/home/munkie/Projects/paratest/src/ParaTest/Console/Testers/PHPUnit.php' => true, - '/home/munkie/Projects/paratest/src/ParaTest/Console/Testers/Tester.php' => true, - '/home/munkie/Projects/paratest/src/ParaTest/Coverage/CoverageMerger.php' => true, - '/home/munkie/Projects/paratest/src/ParaTest/Coverage/CoverageReporter.php' => true, - '/home/munkie/Projects/paratest/src/ParaTest/Coverage/CoverageReporterInterface.php' => true, - '/home/munkie/Projects/paratest/src/ParaTest/Coverage/CoverageReporterLegacy.php' => true, - '/home/munkie/Projects/paratest/src/ParaTest/Logging/JUnit/Reader.php' => true, - '/home/munkie/Projects/paratest/src/ParaTest/Logging/JUnit/TestCase.php' => true, - '/home/munkie/Projects/paratest/src/ParaTest/Logging/JUnit/TestSuite.php' => true, - '/home/munkie/Projects/paratest/src/ParaTest/Logging/JUnit/Writer.php' => true, - '/home/munkie/Projects/paratest/src/ParaTest/Logging/LogInterpreter.php' => true, - '/home/munkie/Projects/paratest/src/ParaTest/Logging/MetaProvider.php' => true, - '/home/munkie/Projects/paratest/src/ParaTest/Parser/NoClassInFileException.php' => true, - '/home/munkie/Projects/paratest/src/ParaTest/Parser/ParsedClass.php' => true, - '/home/munkie/Projects/paratest/src/ParaTest/Parser/ParsedFunction.php' => true, - '/home/munkie/Projects/paratest/src/ParaTest/Parser/ParsedObject.php' => true, - '/home/munkie/Projects/paratest/src/ParaTest/Parser/Parser.php' => true, - '/home/munkie/Projects/paratest/src/ParaTest/Runners/PHPUnit/BaseRunner.php' => true, - '/home/munkie/Projects/paratest/src/ParaTest/Runners/PHPUnit/Configuration.php' => true, - '/home/munkie/Projects/paratest/src/ParaTest/Runners/PHPUnit/ExecutableTest.php' => true, - '/home/munkie/Projects/paratest/src/ParaTest/Runners/PHPUnit/Options.php' => true, - '/home/munkie/Projects/paratest/src/ParaTest/Runners/PHPUnit/ResultPrinter.php' => true, - '/home/munkie/Projects/paratest/src/ParaTest/Runners/PHPUnit/Runner.php' => true, - '/home/munkie/Projects/paratest/src/ParaTest/Runners/PHPUnit/Suite.php' => true, - '/home/munkie/Projects/paratest/src/ParaTest/Runners/PHPUnit/SuiteLoader.php' => true, - '/home/munkie/Projects/paratest/src/ParaTest/Runners/PHPUnit/SuitePath.php' => true, - '/home/munkie/Projects/paratest/src/ParaTest/Runners/PHPUnit/TestFileLoader.php' => true, - '/home/munkie/Projects/paratest/src/ParaTest/Runners/PHPUnit/TestMethod.php' => true, - '/home/munkie/Projects/paratest/src/ParaTest/Runners/PHPUnit/Worker.php' => true, - '/home/munkie/Projects/paratest/src/ParaTest/Runners/PHPUnit/WrapperRunner.php' => true, -)); - return $coverage; \ No newline at end of file diff --git a/test/fixtures/coverage-tests/runner_test-windows.cov b/test/fixtures/coverage-tests/runner_test-windows.cov index 2c82e64..5f9b888 100644 --- a/test/fixtures/coverage-tests/runner_test-windows.cov +++ b/test/fixtures/coverage-tests/runner_test-windows.cov @@ -1,6 +1,42 @@ setData(array ( + +$filter = new \SebastianBergmann\CodeCoverage\Filter(); +$filter->includeFiles(array ( + 'C:\\paratest\\src\\ParaTest\\Console\\Commands\\ParaTestCommand.php', + 'C:\\paratest\\src\\ParaTest\\Console\\ParaTestApplication.php', + 'C:\\paratest\\src\\ParaTest\\Console\\Testers\\PHPUnit.php', + 'C:\\paratest\\src\\ParaTest\\Console\\Testers\\Tester.php', + 'C:\\paratest\\src\\ParaTest\\Coverage\\CoverageMerger.php', + 'C:\\paratest\\src\\ParaTest\\Coverage\\CoverageReporter.php', + 'C:\\paratest\\src\\ParaTest\\Coverage\\CoverageReporterInterface.php', + 'C:\\paratest\\src\\ParaTest\\Coverage\\CoverageReporterLegacy.php', + 'C:\\paratest\\src\\ParaTest\\Logging\\JUnit\\Reader.php', + 'C:\\paratest\\src\\ParaTest\\Logging\\JUnit\\TestCase.php', + 'C:\\paratest\\src\\ParaTest\\Logging\\JUnit\\TestSuite.php', + 'C:\\paratest\\src\\ParaTest\\Logging\\JUnit\\Writer.php', + 'C:\\paratest\\src\\ParaTest\\Logging\\LogInterpreter.php', + 'C:\\paratest\\src\\ParaTest\\Logging\\MetaProvider.php', + 'C:\\paratest\\src\\ParaTest\\Parser\\NoClassInFileException.php', + 'C:\\paratest\\src\\ParaTest\\Parser\\ParsedClass.php', + 'C:\\paratest\\src\\ParaTest\\Parser\\ParsedFunction.php', + 'C:\\paratest\\src\\ParaTest\\Parser\\ParsedObject.php', + 'C:\\paratest\\src\\ParaTest\\Parser\\Parser.php', + 'C:\\paratest\\src\\ParaTest\\Runners\\PHPUnit\\BaseRunner.php', + 'C:\\paratest\\src\\ParaTest\\Runners\\PHPUnit\\Configuration.php', + 'C:\\paratest\\src\\ParaTest\\Runners\\PHPUnit\\ExecutableTest.php', + 'C:\\paratest\\src\\ParaTest\\Runners\\PHPUnit\\Options.php', + 'C:\\paratest\\src\\ParaTest\\Runners\\PHPUnit\\ResultPrinter.php', + 'C:\\paratest\\src\\ParaTest\\Runners\\PHPUnit\\Runner.php', + 'C:\\paratest\\src\\ParaTest\\Runners\\PHPUnit\\Suite.php', + 'C:\\paratest\\src\\ParaTest\\Runners\\PHPUnit\\SuiteLoader.php', + 'C:\\paratest\\src\\ParaTest\\Runners\\PHPUnit\\SuitePath.php', + 'C:\\paratest\\src\\ParaTest\\Runners\\PHPUnit\\TestFileLoader.php', + 'C:\\paratest\\src\\ParaTest\\Runners\\PHPUnit\\TestMethod.php', + 'C:\\paratest\\src\\ParaTest\\Runners\\PHPUnit\\Worker.php', + 'C:\\paratest\\src\\ParaTest\\Runners\\PHPUnit\\WrapperRunner.php', +)); +$coverage = new \SebastianBergmann\CodeCoverage\CodeCoverage(new \SebastianBergmann\CodeCoverage\Driver\PcovDriver($filter), $filter); +$data = array ( 'C:\\paratest\\src\\ParaTest\\Console\\ParaTestApplication.php' => array ( 18 => @@ -3786,7 +3822,14 @@ $coverage->setData(array ( ), 176 => NULL, ), -)); +); +if (class_exists(\SebastianBergmann\CodeCoverage\ProcessedCodeCoverageData::class)) { + $processedData = new \SebastianBergmann\CodeCoverage\ProcessedCodeCoverageData(); + $processedData->setLineCoverage($data); + + $data = $processedData; +} +$coverage->setData($data); $coverage->setTests(array ( 'UNCOVERED_FILES_FROM_WHITELIST' => array ( @@ -3825,40 +3868,4 @@ $coverage->setTests(array ( ), )); -$filter = $coverage->filter(); -$filter->setWhitelistedFiles(array ( - 'C:\\paratest\\src\\ParaTest\\Console\\Commands\\ParaTestCommand.php' => true, - 'C:\\paratest\\src\\ParaTest\\Console\\ParaTestApplication.php' => true, - 'C:\\paratest\\src\\ParaTest\\Console\\Testers\\PHPUnit.php' => true, - 'C:\\paratest\\src\\ParaTest\\Console\\Testers\\Tester.php' => true, - 'C:\\paratest\\src\\ParaTest\\Coverage\\CoverageMerger.php' => true, - 'C:\\paratest\\src\\ParaTest\\Coverage\\CoverageReporter.php' => true, - 'C:\\paratest\\src\\ParaTest\\Coverage\\CoverageReporterInterface.php' => true, - 'C:\\paratest\\src\\ParaTest\\Coverage\\CoverageReporterLegacy.php' => true, - 'C:\\paratest\\src\\ParaTest\\Logging\\JUnit\\Reader.php' => true, - 'C:\\paratest\\src\\ParaTest\\Logging\\JUnit\\TestCase.php' => true, - 'C:\\paratest\\src\\ParaTest\\Logging\\JUnit\\TestSuite.php' => true, - 'C:\\paratest\\src\\ParaTest\\Logging\\JUnit\\Writer.php' => true, - 'C:\\paratest\\src\\ParaTest\\Logging\\LogInterpreter.php' => true, - 'C:\\paratest\\src\\ParaTest\\Logging\\MetaProvider.php' => true, - 'C:\\paratest\\src\\ParaTest\\Parser\\NoClassInFileException.php' => true, - 'C:\\paratest\\src\\ParaTest\\Parser\\ParsedClass.php' => true, - 'C:\\paratest\\src\\ParaTest\\Parser\\ParsedFunction.php' => true, - 'C:\\paratest\\src\\ParaTest\\Parser\\ParsedObject.php' => true, - 'C:\\paratest\\src\\ParaTest\\Parser\\Parser.php' => true, - 'C:\\paratest\\src\\ParaTest\\Runners\\PHPUnit\\BaseRunner.php' => true, - 'C:\\paratest\\src\\ParaTest\\Runners\\PHPUnit\\Configuration.php' => true, - 'C:\\paratest\\src\\ParaTest\\Runners\\PHPUnit\\ExecutableTest.php' => true, - 'C:\\paratest\\src\\ParaTest\\Runners\\PHPUnit\\Options.php' => true, - 'C:\\paratest\\src\\ParaTest\\Runners\\PHPUnit\\ResultPrinter.php' => true, - 'C:\\paratest\\src\\ParaTest\\Runners\\PHPUnit\\Runner.php' => true, - 'C:\\paratest\\src\\ParaTest\\Runners\\PHPUnit\\Suite.php' => true, - 'C:\\paratest\\src\\ParaTest\\Runners\\PHPUnit\\SuiteLoader.php' => true, - 'C:\\paratest\\src\\ParaTest\\Runners\\PHPUnit\\SuitePath.php' => true, - 'C:\\paratest\\src\\ParaTest\\Runners\\PHPUnit\\TestFileLoader.php' => true, - 'C:\\paratest\\src\\ParaTest\\Runners\\PHPUnit\\TestMethod.php' => true, - 'C:\\paratest\\src\\ParaTest\\Runners\\PHPUnit\\Worker.php' => true, - 'C:\\paratest\\src\\ParaTest\\Runners\\PHPUnit\\WrapperRunner.php' => true, -)); - return $coverage; \ No newline at end of file diff --git a/test/fixtures/coverage-tests/runner_test.cov b/test/fixtures/coverage-tests/runner_test.cov index 9fba364..f8adb96 100644 --- a/test/fixtures/coverage-tests/runner_test.cov +++ b/test/fixtures/coverage-tests/runner_test.cov @@ -1,6 +1,43 @@ setData(array ( + +$filter = new \SebastianBergmann\CodeCoverage\Filter(); +$filter->includeFiles(array ( + '/home/munkie/Projects/paratest/src/ParaTest/Console/Commands/ParaTestCommand.php', + '/home/munkie/Projects/paratest/src/ParaTest/Console/ParaTestApplication.php', + '/home/munkie/Projects/paratest/src/ParaTest/Console/Testers/PHPUnit.php', + '/home/munkie/Projects/paratest/src/ParaTest/Console/Testers/Tester.php', + '/home/munkie/Projects/paratest/src/ParaTest/Coverage/CoverageMerger.php', + '/home/munkie/Projects/paratest/src/ParaTest/Coverage/CoverageReporter.php', + '/home/munkie/Projects/paratest/src/ParaTest/Coverage/CoverageReporterInterface.php', + '/home/munkie/Projects/paratest/src/ParaTest/Coverage/CoverageReporterLegacy.php', + '/home/munkie/Projects/paratest/src/ParaTest/Logging/JUnit/Reader.php', + '/home/munkie/Projects/paratest/src/ParaTest/Logging/JUnit/TestCase.php', + '/home/munkie/Projects/paratest/src/ParaTest/Logging/JUnit/TestSuite.php', + '/home/munkie/Projects/paratest/src/ParaTest/Logging/JUnit/Writer.php', + '/home/munkie/Projects/paratest/src/ParaTest/Logging/LogInterpreter.php', + '/home/munkie/Projects/paratest/src/ParaTest/Logging/MetaProvider.php', + '/home/munkie/Projects/paratest/src/ParaTest/Parser/NoClassInFileException.php', + '/home/munkie/Projects/paratest/src/ParaTest/Parser/ParsedClass.php', + '/home/munkie/Projects/paratest/src/ParaTest/Parser/ParsedFunction.php', + '/home/munkie/Projects/paratest/src/ParaTest/Parser/ParsedObject.php', + '/home/munkie/Projects/paratest/src/ParaTest/Parser/Parser.php', + '/home/munkie/Projects/paratest/src/ParaTest/Runners/PHPUnit/BaseRunner.php', + '/home/munkie/Projects/paratest/src/ParaTest/Runners/PHPUnit/Configuration.php', + '/home/munkie/Projects/paratest/src/ParaTest/Runners/PHPUnit/ExecutableTest.php', + '/home/munkie/Projects/paratest/src/ParaTest/Runners/PHPUnit/Options.php', + '/home/munkie/Projects/paratest/src/ParaTest/Runners/PHPUnit/ResultPrinter.php', + '/home/munkie/Projects/paratest/src/ParaTest/Runners/PHPUnit/Runner.php', + '/home/munkie/Projects/paratest/src/ParaTest/Runners/PHPUnit/Suite.php', + '/home/munkie/Projects/paratest/src/ParaTest/Runners/PHPUnit/SuiteLoader.php', + '/home/munkie/Projects/paratest/src/ParaTest/Runners/PHPUnit/SuitePath.php', + '/home/munkie/Projects/paratest/src/ParaTest/Runners/PHPUnit/TestFileLoader.php', + '/home/munkie/Projects/paratest/src/ParaTest/Runners/PHPUnit/TestMethod.php', + '/home/munkie/Projects/paratest/src/ParaTest/Runners/PHPUnit/Worker.php', + '/home/munkie/Projects/paratest/src/ParaTest/Runners/PHPUnit/WrapperRunner.php', +)); + +$coverage = new \SebastianBergmann\CodeCoverage\CodeCoverage(new \SebastianBergmann\CodeCoverage\Driver\PcovDriver($filter), $filter); +$data = array ( '/home/munkie/Projects/paratest/src/ParaTest/Console/ParaTestApplication.php' => array ( 18 => @@ -3786,7 +3823,14 @@ $coverage->setData(array ( ), 176 => NULL, ), -)); +); +if (class_exists(\SebastianBergmann\CodeCoverage\ProcessedCodeCoverageData::class)) { + $processedData = new \SebastianBergmann\CodeCoverage\ProcessedCodeCoverageData(); + $processedData->setLineCoverage($data); + + $data = $processedData; +} +$coverage->setData($data); $coverage->setTests(array ( 'UNCOVERED_FILES_FROM_WHITELIST' => array ( @@ -3825,40 +3869,4 @@ $coverage->setTests(array ( ), )); -$filter = $coverage->filter(); -$filter->setWhitelistedFiles(array ( - '/home/munkie/Projects/paratest/src/ParaTest/Console/Commands/ParaTestCommand.php' => true, - '/home/munkie/Projects/paratest/src/ParaTest/Console/ParaTestApplication.php' => true, - '/home/munkie/Projects/paratest/src/ParaTest/Console/Testers/PHPUnit.php' => true, - '/home/munkie/Projects/paratest/src/ParaTest/Console/Testers/Tester.php' => true, - '/home/munkie/Projects/paratest/src/ParaTest/Coverage/CoverageMerger.php' => true, - '/home/munkie/Projects/paratest/src/ParaTest/Coverage/CoverageReporter.php' => true, - '/home/munkie/Projects/paratest/src/ParaTest/Coverage/CoverageReporterInterface.php' => true, - '/home/munkie/Projects/paratest/src/ParaTest/Coverage/CoverageReporterLegacy.php' => true, - '/home/munkie/Projects/paratest/src/ParaTest/Logging/JUnit/Reader.php' => true, - '/home/munkie/Projects/paratest/src/ParaTest/Logging/JUnit/TestCase.php' => true, - '/home/munkie/Projects/paratest/src/ParaTest/Logging/JUnit/TestSuite.php' => true, - '/home/munkie/Projects/paratest/src/ParaTest/Logging/JUnit/Writer.php' => true, - '/home/munkie/Projects/paratest/src/ParaTest/Logging/LogInterpreter.php' => true, - '/home/munkie/Projects/paratest/src/ParaTest/Logging/MetaProvider.php' => true, - '/home/munkie/Projects/paratest/src/ParaTest/Parser/NoClassInFileException.php' => true, - '/home/munkie/Projects/paratest/src/ParaTest/Parser/ParsedClass.php' => true, - '/home/munkie/Projects/paratest/src/ParaTest/Parser/ParsedFunction.php' => true, - '/home/munkie/Projects/paratest/src/ParaTest/Parser/ParsedObject.php' => true, - '/home/munkie/Projects/paratest/src/ParaTest/Parser/Parser.php' => true, - '/home/munkie/Projects/paratest/src/ParaTest/Runners/PHPUnit/BaseRunner.php' => true, - '/home/munkie/Projects/paratest/src/ParaTest/Runners/PHPUnit/Configuration.php' => true, - '/home/munkie/Projects/paratest/src/ParaTest/Runners/PHPUnit/ExecutableTest.php' => true, - '/home/munkie/Projects/paratest/src/ParaTest/Runners/PHPUnit/Options.php' => true, - '/home/munkie/Projects/paratest/src/ParaTest/Runners/PHPUnit/ResultPrinter.php' => true, - '/home/munkie/Projects/paratest/src/ParaTest/Runners/PHPUnit/Runner.php' => true, - '/home/munkie/Projects/paratest/src/ParaTest/Runners/PHPUnit/Suite.php' => true, - '/home/munkie/Projects/paratest/src/ParaTest/Runners/PHPUnit/SuiteLoader.php' => true, - '/home/munkie/Projects/paratest/src/ParaTest/Runners/PHPUnit/SuitePath.php' => true, - '/home/munkie/Projects/paratest/src/ParaTest/Runners/PHPUnit/TestFileLoader.php' => true, - '/home/munkie/Projects/paratest/src/ParaTest/Runners/PHPUnit/TestMethod.php' => true, - '/home/munkie/Projects/paratest/src/ParaTest/Runners/PHPUnit/Worker.php' => true, - '/home/munkie/Projects/paratest/src/ParaTest/Runners/PHPUnit/WrapperRunner.php' => true, -)); - return $coverage; \ No newline at end of file