diff --git a/.gitattributes b/.gitattributes index c56b6ed..a7dcd17 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,6 +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 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..6756bd6 --- /dev/null +++ b/.github/lint-xml-configuration/lint-xml-configuration.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +set -ex + +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 "$phpunitXsd" \ No newline at end of file diff --git a/.github/workflows/integrate.yaml b/.github/workflows/integrate.yaml new file mode 100644 index 0000000..b8cdf64 --- /dev/null +++ b/.github/workflows/integrate.yaml @@ -0,0 +1,321 @@ +name: "Integrate" + +on: + pull_request: + push: + branches: + - "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, 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 --strict" + + - 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" + + 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" + + runs-on: ${{ matrix.os }} + + strategy: + matrix: + os: + - "ubuntu-latest" + - "windows-latest" + php-version: + - "7.3" + - "7.4" + dependencies: + - "lowest" + - "highest" + + steps: + - name: "Checkout" + uses: "actions/checkout@v2" + + - name: "Install PHP" + uses: "shivammathur/setup-php@v2" + with: + coverage: "pcov" + php-version: "${{ matrix.php-version }}" + ini-values: zend.assertions=1 + tools: composer:v1 + 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" + + code-coverage: + name: "Code Coverage" + + 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: "pcov" + php-version: "${{ matrix.php-version }}" + tools: composer:v1 + 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 dependencies" + 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" + + 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 }}" + 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: "vendor/bin/phpcs -q --report=checkstyle | cs2pr" + + 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 }}" + 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: "vendor/bin/phpstan analyse --no-progress --error-format=checkstyle | cs2pr" + + - name: "Run PSalm for type-coverage" + 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" + + 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 }}" + 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: "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..96c8225 --- /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.GITHUB_TOKEN }}" + with: + draft: false + prerelease: false + 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.GITHUB_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/.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/.travis.yml b/.travis.yml deleted file mode 100644 index 407b464..0000000 --- a/.travis.yml +++ /dev/null @@ -1,96 +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.1 - 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: - - 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 vendor/bin/phpcs --ignore=*/test/fixtures/*,bootstrap.php --standard=PSR12 ./src/ ./test/; 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 diff --git a/README.md b/README.md index b86d114..0e754c2 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,11 @@ ParaTest ======== -[![Build Status](https://travis-ci.org/paratestphp/paratest.svg?branch=master)](https://travis-ci.org/paratestphp/paratest) -[![Packagist](https://img.shields.io/packagist/dt/brianium/paratest.svg)](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) +[![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! @@ -134,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 @@ -234,6 +245,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,8 +264,11 @@ 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` OR `vendor/bin/php-cs-fixer fix` +`composer style-fix` Use `composer style` to only show violations without fixing. 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()) { - $statement = $db->prepare('UPDATE tests SET reserved_by_process_id = :procId WHERE id = :id AND reserved_by_process_id IS NULL'); - $statement->execute([ - ':procId' => getmypid(), - ':id' => $test['id'], - ]); - - if ($statement->rowCount() !== 1) { - // Seems like this test has already been reserved. Continue to the next one. - continue; - } - - try { - if (!preg_match_all('/\'([^\']*)\'[ ]?/', $test['command'], $arguments)) { - throw new \Exception("Failed to parse arguments from command line: \"" . $test['command'] . "\""); - } - $_SERVER['argv'] = $arguments[1]; - - PHPUnit\TextUI\Command::main(false); - } finally { - $db->prepare('UPDATE tests SET completed = 1 WHERE id = :id') - ->execute([':id' => $test['id']]); - } -} diff --git a/bin/phpunit-sqlite-wrapper.php b/bin/phpunit-sqlite-wrapper.php new file mode 100644 index 0000000..c5592b8 --- /dev/null +++ b/bin/phpunit-sqlite-wrapper.php @@ -0,0 +1,60 @@ +query($selectQuery)->fetch()) !== false) { + $statement = $db->prepare($reserveTest); + $statement->execute([ + ':procId' => getmypid(), + ':id' => $test['id'], + ]); + + if ($statement->rowCount() !== 1) { + // Seems like this test has already been reserved. Continue to the next one. + continue; + } + + try { + $_SERVER['argv'] = unserialize($test['command']); + + PHPUnit\TextUI\Command::main(false); + } finally { + $db->prepare('UPDATE tests SET completed = 1 WHERE id = :id') + ->execute([':id' => $test['id']]); + } +} diff --git a/bin/phpunit-wrapper b/bin/phpunit-wrapper deleted file mode 100644 index 2802cb2..0000000 --- a/bin/phpunit-wrapper +++ /dev/null @@ -1,70 +0,0 @@ -format(DateTime::RFC3339); - $info[] = "Iteration: $i"; - $info[] = "Command: $command"; - $info[] = PHP_EOL; - $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]; - - ob_start(); - $lastExitCode = PHPUnit\TextUI\Command::main(false); - $infoText = ob_get_clean(); - $logInfo($infoText); - - echo "FINISHED\n"; -} diff --git a/bin/phpunit-wrapper.php b/bin/phpunit-wrapper.php new file mode 100644 index 0000000..ba9db06 --- /dev/null +++ b/bin/phpunit-wrapper.php @@ -0,0 +1,76 @@ +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(); + $logInfo($infoText); + + echo "FINISHED\n"; +} 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 4271a96..ae65bba 100644 --- a/composer.json +++ b/composer.json @@ -1,24 +1,13 @@ { "name": "mamitech/paratest", - "require": { - "php": "^7.1", - "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", - "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" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^2.16", - "squizlabs/php_codesniffer": "^3.5" - }, "type": "library", "description": "Parallel testing for PHP", - "keywords": ["testing","PHPUnit", "concurrent", "parallel"], + "keywords": [ + "testing", + "PHPUnit", + "concurrent", + "parallel" + ], "homepage": "https://github.com/paratestphp/paratest", "license": "MIT", "authors": [ @@ -29,10 +18,33 @@ "role": "Lead" } ], - "bin": ["bin/paratest"], + "require": { + "php": "^7.3", + "ext-dom": "*", + "ext-json": "*", + "ext-pcre": "*", + "ext-pdo": "*", + "ext-reflection": "*", + "ext-simplexml": "*", + "brianium/habitat": "^1.0", + "phpunit/php-code-coverage": "^9.1.2", + "phpunit/php-timer": "^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.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": { - "ParaTest\\": ["src/"] + "ParaTest\\": [ + "src/" + ] } }, "autoload-dev": { @@ -40,32 +52,39 @@ "ParaTest\\Tests\\": "test/" } }, + "bin": [ + "bin/paratest" + ], "scripts": { + "static-analysis": [ + "vendor/bin/phpstan analyse" + ], "style": [ - "php-cs-fixer fix --dry-run --verbose" + "vendor/bin/phpcs" ], "style-fix": [ - "php-cs-fixer fix" + "vendor/bin/phpcbf" ], "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", "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" } } 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/phpcs.xml.dist b/phpcs.xml.dist new file mode 100644 index 0000000..069ea0d --- /dev/null +++ b/phpcs.xml.dist @@ -0,0 +1,40 @@ + + + + + + + src + test + */test/fixtures/* + + + + + + + 0 + + + + 0 + + + 0 + + + + 0 + + + + 0 + + + 0 + + diff --git a/phpstan.neon.dist b/phpstan.neon.dist new file mode 100644 index 0000000..773e1ff --- /dev/null +++ b/phpstan.neon.dist @@ -0,0 +1,70 @@ +includes: + - phar://phpstan.phar/conf/config.level6.neon + - vendor/phpstan/phpstan-phpunit/extension.neon + +parameters: + tipsOfTheDay: false + bootstrapFiles: + - test/constants.php + paths: + - bin/ + - bin/paratest + - src/ + - test/ + excludes_analyse: + - test/fixtures/* + ignoreErrors: + # 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 + 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/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 new file mode 100644 index 0000000..89cb7ff --- /dev/null +++ b/psalm.xml.dist @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + diff --git a/src/Console/Commands/ParaTestCommand.php b/src/Console/Commands/ParaTestCommand.php index e6306bb..0714bce 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') @@ -111,13 +109,8 @@ protected function configure() /** * Executes the specified tester. - * - * @param InputInterface $input - * @param OutputInterface $output - * - * @return int|mixed|null */ - public function execute(InputInterface $input, OutputInterface $output) + public function execute(InputInterface $input, OutputInterface $output): int { return $this->tester->execute($input, $output); } diff --git a/src/Console/ParaTestApplication.php b/src/Console/ParaTestApplication.php index 88f5aed..0dac24a 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)); } /** @@ -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())); @@ -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 188ca07..3b47def 100644 --- a/src/Console/Testers/PHPUnit.php +++ b/src/Console/Testers/PHPUnit.php @@ -9,15 +9,27 @@ 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; use Symfony\Component\Console\Input\InputInterface; 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 @@ -28,18 +40,14 @@ class PHPUnit extends Tester */ private const TEST_SUITE_FILTER_SEPARATOR = ','; - /** - * @var \ParaTest\Console\Commands\ParaTestCommand - */ + /** @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( @@ -82,23 +90,17 @@ 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; } /** * 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) + public function execute(InputInterface $input, OutputInterface $output): int { - if (!$this->hasConfig($input) && !$this->hasPath($input)) { + if (! $this->hasConfig($input) && ! $this->hasPath($input)) { $this->displayHelp($input, $output); } @@ -112,45 +114,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; @@ -160,28 +152,37 @@ protected function getConfig(InputInterface $input) } /** - * @param \Symfony\Component\Console\Input\InputInterface $input - * - * @throws \RuntimeException + * Displays help for the ParaTestCommand. + */ + protected function displayHelp(InputInterface $input, OutputInterface $output): void + { + $help = $this->command->getApplication()->find('help'); + $input = new ArrayInput(['command_name' => 'paratest']); + $help->run($input, $output); + exit(0); + } + + /** + * @return array * - * @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'] @@ -195,19 +196,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 $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); @@ -217,22 +217,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 mixed $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 $options - * - * @return bool + * @param array $options */ protected function hasCoverage(array $options): bool { @@ -241,18 +237,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 { @@ -260,11 +253,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 : ''; @@ -274,13 +267,14 @@ 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; } - 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 6b20c74..8655ba2 100644 --- a/src/Console/Testers/Tester.php +++ b/src/Console/Testers/Tester.php @@ -5,13 +5,10 @@ namespace ParaTest\Console\Testers; 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 */ @@ -21,50 +18,28 @@ 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); + abstract public function execute(InputInterface $input, OutputInterface $output): int; /** * Returns non-empty options. * - * @param InputInterface $input - * - * @return array + * @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; } - - /** - * 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/Console/VersionProvider.php b/src/Console/VersionProvider.php index c997abf..f019ba6 100644 --- a/src/Console/VersionProvider.php +++ b/src/Console/VersionProvider.php @@ -4,11 +4,13 @@ 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; /** - * Class VersionProvider. - * * Obtain version information of the ParaTest application itself based on * it's current installment (composer; git; default passed) */ @@ -16,81 +18,68 @@ 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 getComposerInstalledVersion(string $package): ?string { - $cmd = 'git describe --tags --always --first-parent'; - $process = \method_exists(Process::class, 'fromShellCommandline') ? - Process::fromShellCommandline($cmd, __DIR__) : - new Process($cmd, __DIR__); - - if ($process->run() !== 0) { + if (($path = $this->getComposerInstalledJsonPath()) === null) { return null; } - return \trim($process->getOutput()); - } - - public function getComposerInstalledVersion($package) - { - if (null === $path = $this->getComposerInstalledJsonPath()) { - return; - } - - $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 @@ -101,9 +90,11 @@ 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; } } + + return null; } } diff --git a/src/Coverage/CoverageMerger.php b/src/Coverage/CoverageMerger.php index ae5b858..c67ae61 100644 --- a/src/Coverage/CoverageMerger.php +++ b/src/Coverage/CoverageMerger.php @@ -4,51 +4,61 @@ namespace ParaTest\Coverage; +use RuntimeException; use SebastianBergmann\CodeCoverage\CodeCoverage; +use SebastianBergmann\CodeCoverage\ProcessedCodeCoverageData; +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; + /** @var int */ + private $test_limit; 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 +66,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 +107,6 @@ public function getReporter(): CoverageReporterInterface /** * Get CodeCoverage object. - * - * @return CodeCoverage */ public function getCodeCoverageObject(): ?CodeCoverage { @@ -109,19 +115,26 @@ 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; } + + $data = $coverage->getData(true); + $newData = 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); + }, + $data->lineCoverage(), + ); + $processedData = new ProcessedCodeCoverageData(); + $processedData->setLineCoverage($newData); + + $coverage->setData($processedData); } } 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 4772c25..fe15d19 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 { @@ -74,7 +75,7 @@ public function isSingleSuite(): bool * Return the Reader's collection * of test suites. * - * @return array + * @return TestSuite[] */ public function getSuites(): array { @@ -89,12 +90,12 @@ public function getSuites(): array * characters: .,F,E * TODO: Update this, skipped was added in phpunit. * - * @return array + * @return string[] */ 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(); @@ -138,17 +139,17 @@ protected function init() /** * 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) + 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); } } @@ -156,58 +157,63 @@ 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 TestCase[] $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; } /** * 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, 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 { $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 +225,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); @@ -231,4 +237,41 @@ protected function initSuite() $this->suites[] = TestSuite::suiteFromArray(self::$defaultSuite); } } + + /** + * Return a value as a float or integer. + * + * @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. + * + * @return string[] + */ + 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, 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; + }, [])); + }, []) + ); + } + + return $messages; + } } diff --git a/src/Logging/JUnit/TestCase.php b/src/Logging/JUnit/TestCase.php index efcc4ea..491dc5d 100644 --- a/src/Logging/JUnit/TestCase.php +++ b/src/Logging/JUnit/TestCase.php @@ -4,77 +4,48 @@ namespace ParaTest\Logging\JUnit; +use SimpleXMLElement; + +use function assert; +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; - /** - * 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 = []; - /** - * @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 +54,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 $type - * @param $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 +79,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 +102,9 @@ public static function caseFromNode(\SimpleXMLElement $node): self foreach ($defect_groups as $group => $defects) { foreach ($defects as $defect) { - $message = (string) $defect; + assert($defect !== false); + + $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 ebfec93..053d04b 100644 --- a/src/Logging/JUnit/TestSuite.php +++ b/src/Logging/JUnit/TestSuite.php @@ -4,79 +4,53 @@ 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; /** * Nested suites. * - * @var array + * @var TestSuite[] */ public $suites = []; /** * Cases belonging to this suite. * - * @var array + * @var TestCase[] */ public $cases = []; - /** - * @param string $name - * @param int $tests - * @param int $assertions - * @param int $failures - * @param mixed $errors - * @param int $skipped - * @param float $time - * @param string|null $file - */ public function __construct( string $name, int $tests, @@ -85,23 +59,23 @@ 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; } /** * Create a TestSuite from an associative * array. * - * @param array $arr + * @param array $arr * * @return TestSuite */ @@ -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 a999ffe..58b3acf 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; /** @@ -44,7 +52,7 @@ class Writer * A default suite to ease flattening of * suite structures. * - * @var array + * @var array */ protected static $defaultSuite = [ 'tests' => 0, @@ -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 $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 $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 $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 $caseNode - * @param $defects - * @param $type + * @param array $defects */ - 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); } @@ -173,22 +170,22 @@ protected function appendDefects(\DOMElement $caseNode, array $defects, string $ /** * Get the root level testsuite node. * - * @param $suites - * - * @return \DOMElement + * @param TestSuite[] $suites */ - 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; @@ -198,31 +195,28 @@ protected function getSuiteRoot(array $suites): \DOMElement * Get the attributes used on the root testsuite * node. * - * @param $suites + * @param array $suites * * @return mixed */ 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 2c42e51..cc7cf14 100644 --- a/src/Logging/LogInterpreter.php +++ b/src/Logging/LogInterpreter.php @@ -5,15 +5,24 @@ namespace ParaTest\Logging; use ParaTest\Logging\JUnit\Reader; +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 { /** * A collection of Reader objects * to aggregate results from. * - * @var array + * @var Reader[] */ protected $readers = []; @@ -21,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 @@ -56,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->getTotalFailures(); - $errors = $this->getTotalErrors(); + $failures = $this->getNumericValue('failures'); + $errors = $this->getNumericValue('errors'); return $failures === 0 && $errors === 0; } @@ -71,17 +76,17 @@ public function isSuccessful(): bool * Get all test case objects found within * the collection of Reader objects. * - * @return array + * @return TestCase[] */ 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); } } } @@ -92,90 +97,87 @@ public function getCases(): array /** * Fix problem with empty testcase from DataProvider. * - * @param array $cases - * @param TestSuite $suite + * @param TestCase[] $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; } } /** * 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 { $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 $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 $type - * - * @return array + * @return string[] */ 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 $method - * - * @return array + * @return string[] */ 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; @@ -185,13 +187,11 @@ private function mergeMessages(string $method): array * Reduces a collection of readers down to a single * result based on an accessor. * - * @param $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 896a282..63c925f 100644 --- a/src/Logging/MetaProvider.php +++ b/src/Logging/MetaProvider.php @@ -4,11 +4,24 @@ namespace ParaTest\Logging; +use Exception; + +use function preg_match; +use function strtolower; + /** - * Class MetaProvider. - * * 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 int getTotalTime() + * @method string[] getFailures() + * @method string[] getErrors() + * @method string[] getWarnings() */ abstract class MetaProvider { @@ -31,54 +44,35 @@ abstract class MetaProvider /** * Simplify aggregation of totals or messages. * - * @param mixed $method - * @param mixed $args + * @param mixed[] $args + * + * @return float|int|string[] */ 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); } + + throw new Exception("Method $method uknown"); } /** - * Return a value as a float or integer. - * - * @param $property + * Returns a value as either a float or int. * * @return float|int */ - protected function getNumericValue(string $property) - { - return ($property === 'time') - ? (float) $this->suites[0]->$property - : (int) $this->suites[0]->$property; - } + abstract protected function getNumericValue(string $property); /** - * Return messages for a given type. + * Gets messages of a given type and + * merges them into a single collection. * - * @param $type - * - * @return array + * @return string[] */ - 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; - } + 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..9e962f1 100644 --- a/src/Parser/ParsedClass.php +++ b/src/Parser/ParsedClass.php @@ -4,26 +4,30 @@ namespace ParaTest\Parser; +use function array_filter; +use function explode; + class ParsedClass extends ParsedObject { - /** - * @var string - */ + /** @var string */ private $namespace; /** * 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); $this->namespace = $namespace; - $this->methods = $methods; + $this->methods = $methods; } /** @@ -31,15 +35,15 @@ 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 { - $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 +58,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 0d64bb4..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 $anno - * @param mixed $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 6a32123..d321e83 100644 --- a/src/Parser/Parser.php +++ b/src/Parser/Parser.php @@ -4,6 +4,21 @@ namespace ParaTest\Parser; +use InvalidArgumentException; +use PHPStan\Testing\TestCase; +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 +28,7 @@ class Parser */ private $path; - /** - * @var \ReflectionClass - */ + /** @var ReflectionClass */ private $refl; /** @@ -35,21 +48,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 +72,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,31 +87,31 @@ 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()); } /** * Return all test methods present in the file. * - * @return array + * @return ParsedFunction[] */ 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 +121,13 @@ private function getMethods(): array * Return the class name of the class contained * in the file. * - * @param mixed $filename - * @param mixed $previousDeclaredClasses - * - * @return string + * @param string[] $previousDeclaredClasses */ - 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)) { @@ -129,50 +138,51 @@ private function getClassName(string $filename, array $previousDeclaredClasses) if (isset($className)) { return $className; } + + return null; } /** * 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 $filename - * @param $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..dfbe61b 100644 --- a/src/Runners/PHPUnit/BaseRunner.php +++ b/src/Runners/PHPUnit/BaseRunner.php @@ -7,29 +7,30 @@ 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; +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; /** * A collection of pending ExecutableTest objects that have * yet to run. * - * @var ExecutableTest[] + * @var array */ protected $pending = []; @@ -56,14 +57,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 +77,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($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); } } @@ -90,11 +94,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 +107,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 +116,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 +130,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 +163,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 +185,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 894fdb1..8f657f8 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,35 +34,25 @@ class Configuration */ protected $path; - /** - * @var \SimpleXMLElement - */ + /** @var false|SimpleXMLElement */ protected $xml; + /** @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; - 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 +76,6 @@ public function getBootstrap(): string /** * Returns the path to the phpunit configuration * file. - * - * @return string */ public function getPath(): string { @@ -85,31 +88,36 @@ public function getPath(): string * * @return SuitePath[][]|null */ - public function getSuites() + public function getSuites(): ?array { - if (!$this->xml) { - return; + 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; } - public function hasSuites() + public function hasSuites(): bool { - return !empty($this->getSuitesName()); + return ! empty($this->getSuitesName()); } - public function getSuitesName() + /** + * @return string[]|null + */ + 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 +131,13 @@ public function getSuitesName() * Return the contents of the nodes * contained in a PHPUnit configuration. * - * @param string $suiteName - * - * @return SuitePath[]|null + * @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 +147,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 +172,7 @@ public function getSuiteByName(string $suiteName) (string) $nodeContent->attributes()->suffix ); } + break; } } @@ -174,24 +185,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 $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,26 +206,28 @@ 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"); } /** * Get override environment variables from phpunit config file. * - * @return array + * @return array */ public function getEnvironmentVariables(): array { - if (!isset($this->xml->php->env)) { + if (! isset($this->xml->php->env)) { return []; } @@ -233,13 +242,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 60806ee..fd5714e 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 { /** @@ -24,8 +34,6 @@ abstract class ExecutableTest */ protected $temp; - protected $pipes = []; - /** * Path where the coveragereport is stored. * @@ -33,9 +41,7 @@ abstract class ExecutableTest */ protected $coverageFileName; - /** - * @var Process - */ + /** @var Process */ protected $process; /** @@ -60,15 +66,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 +81,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 +93,6 @@ public function getTempFile(): string /** * Return the test process' stderr contents. - * - * @return string */ public function getStderr(): string { @@ -104,10 +102,8 @@ public function getStderr(): string /** * Stop the process and return it's * exit code. - * - * @return int */ - public function stop(): int + public function stop(): ?int { return $this->process->stop(); } @@ -115,16 +111,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,18 +127,14 @@ public function isDoneRunning(): bool /** * Return the exit code of the process. - * - * @return int */ - public function getExitCode(): int + public function getExitCode(): ?int { return $this->process->getExitCode(); } /** * Return the last process command. - * - * @return string */ public function getLastCommand(): string { @@ -153,10 +143,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,11 +152,10 @@ public function setLastCommand(string $command) /** * Executes the test by creating a separate process. * - * @param string $binary - * @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 */ @@ -176,8 +163,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 +174,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; @@ -211,37 +184,30 @@ 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|null $passthru - * @param string|null $passthruPhp - * - * @return string + * @param array $options + * @param string[]|null $passthru + * @param string[]|null $passthruPhp */ protected function getFullCommandlineString( - $binary, - $options, - ?string $passthru = null, - ?string $passthruPhp = null - ) { + string $binary, + array $options, + ?array $passthru = null, + ?array $passthruPhp = null + ): string { $finder = new PhpExecutableFinder(); - $args = []; - $args['php'] = $finder->find(); - if (!empty($passthruPhp)) { - $args['phpOptions'] = $passthruPhp; + $args = [$finder->find()]; + if ($passthruPhp !== null) { + $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(); } /** * Returns the unique token for this test process. - * - * @return int */ public function getToken(): int { @@ -249,33 +215,60 @@ 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 $binary executable binary name + * @param array $options command line options + * @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 = array_merge($this->prepareOptions($options), ['log-junit' => $this->getTempFile()]); $options = $this->redirectCoverageOption($options); - $cmd = $this->getCommandString($binary, $options, $passthru); + $arguments = [$binary]; + if ($passthru !== null) { + $arguments = array_merge($arguments, $passthru); + } + + foreach ($options as $key => $value) { + $arguments[] = "--$key"; + if ($value === null) { + continue; + } + + $arguments[] = $value; + } + + $arguments[] = $this->getPath(); + $arguments = array_map('strval', $arguments); + + return $arguments; + } - return $cmd; + /** + * 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(); } /** * 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; @@ -283,8 +276,6 @@ public function getCoverageFileName(): string /** * Get process stdout content. - * - * @return string */ public function getStdout(): string { @@ -293,10 +284,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; } @@ -310,17 +299,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: @@ -332,78 +322,37 @@ protected function assertValidCommandLineLength(string $cmd) /** * 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 { 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. * - * @param $environmentVariables + * @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']; } /** * 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/FullSuite.php b/src/Runners/PHPUnit/FullSuite.php index 692dc73..82d96c1 100644 --- a/src/Runners/PHPUnit/FullSuite.php +++ b/src/Runners/PHPUnit/FullSuite.php @@ -4,38 +4,32 @@ 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; } /** * {@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( + array_merge( $options, [ 'configuration' => $this->configPath, diff --git a/src/Runners/PHPUnit/Options.php b/src/Runners/PHPUnit/Options.php index b11c53f..26e34fc 100644 --- a/src/Runners/PHPUnit/Options.php +++ b/src/Runners/PHPUnit/Options.php @@ -4,9 +4,59 @@ namespace ParaTest\Runners\PHPUnit; +use RuntimeException; +use Symfony\Component\Process\Process; + +use function array_diff_key; +use function array_shift; +use function assert; +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 is_string; +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 * 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|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 { @@ -52,57 +102,43 @@ class Options * A collection of post-processed option values. This is the collection * containing ParaTest specific options. * - * @var array + * @var array */ protected $filtered; - /** - * @var string - */ + /** @var string */ protected $runner; - /** - * @var bool - */ + /** @var bool */ protected $noTestTokens; - /** - * @var bool - */ + /** @var bool */ protected $colors; /** * Filters which tests to run. * - * @var string[] + * @var string|string[] */ 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; /** * A collection of option values directly corresponding * to certain annotations - i.e group. * - * @var array + * @var array */ protected $annotations = []; @@ -116,14 +152,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; @@ -142,6 +178,9 @@ class Options */ protected $coverageTestLimit; + /** + * @param array $opts + */ public function __construct(array $opts = []) { foreach (self::defaults() as $opt => $value) { @@ -151,24 +190,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 = $opts['passthru'] ?? null; - $this->passthruPhp = $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'] ?? 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 @@ -176,15 +215,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); @@ -194,8 +233,6 @@ public function __construct(array $opts = []) /** * Public read accessibility. * - * @param string $var - * * @return mixed */ public function __get(string $var) @@ -206,10 +243,6 @@ public function __get(string $var) /** * Public read accessibility * (e.g. to make empty($options->property) work as expected). - * - * @param string $var - * - * @return mixed */ public function __isset(string $var): bool { @@ -220,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 { @@ -240,7 +273,7 @@ protected static function defaults(): array 'passthru' => null, 'passthru-php' => null, 'verbose' => 0, - 'coverage-test-limit' => 0 + 'coverage-test-limit' => 0, ]; } @@ -257,9 +290,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; } @@ -273,9 +306,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; @@ -284,10 +317,14 @@ 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 { - $filtered = \array_diff_key($options, [ + $filtered = array_diff_key($options, [ 'processes' => $this->processes, 'path' => $this->path, 'phpunit' => $this->phpunit, @@ -303,7 +340,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); @@ -316,11 +353,9 @@ protected function filterOptions(array $options): array * Take an array of filtered options and return a * configuration path. * - * @param $filtered - * - * @return string|null + * @param array $filtered */ - protected function getConfigurationPath(array $filtered) + protected function getConfigurationPath(array $filtered): ?string { if (isset($filtered['configuration'])) { return $this->getDefaultConfigurationForPath($filtered['configuration'], $filtered['configuration']); @@ -335,21 +370,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); } } @@ -360,24 +393,22 @@ 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; } + + assert(is_string($value)); + $this->annotations[$key] = $value; } } - /** - * @param $file - * - * @return bool - */ private function isFile(string $file): bool { - return \file_exists($file) && !\is_dir($file); + return file_exists($file) && ! is_dir($file); } /** @@ -390,24 +421,48 @@ 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; } + + /** + * @return string[]|null + */ + private function parsePassthru(?string $param): ?array + { + if ($param === null) { + return null; + } + + $stringToArgumentProcess = Process::fromShellCommandline( + sprintf('%s -r "echo serialize(\\$argv);" -- %s', PHP_BINARY, $param) + ); + $stringToArgumentProcess->mustRun(); + + $passthruAsArguments = unserialize($stringToArgumentProcess->getOutput()); + array_shift($passthruAsArguments); + + if (count($passthruAsArguments) === 0) { + return null; + } + + return $passthruAsArguments; + } } diff --git a/src/Runners/PHPUnit/ResultPrinter.php b/src/Runners/PHPUnit/ResultPrinter.php index 61d87fe..29490d2 100644 --- a/src/Runners/PHPUnit/ResultPrinter.php +++ b/src/Runners/PHPUnit/ResultPrinter.php @@ -4,14 +4,21 @@ namespace ParaTest\Runners\PHPUnit; +use InvalidArgumentException; use ParaTest\Logging\JUnit\Reader; use ParaTest\Logging\LogInterpreter; +use RuntimeException; use SebastianBergmann\Timer\ResourceUsageFormatter; -use SebastianBergmann\Timer\Timer; + +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 @@ -19,13 +26,11 @@ class ResultPrinter /** * A collection of ExecutableTest objects. * - * @var array + * @var ExecutableTest[] */ protected $suites = []; - /** - * @var \ParaTest\Logging\LogInterpreter - */ + /** @var LogInterpreter */ protected $results; /** @@ -72,13 +77,6 @@ class ResultPrinter */ protected $colors; - /** - * Warnings generated by the cases. - * - * @var array - */ - protected $warnings = []; - /** * Number of columns. * @@ -108,14 +106,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; @@ -124,16 +120,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' : '', @@ -141,16 +135,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"; @@ -160,7 +152,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(); @@ -169,7 +161,7 @@ public function flush() /** * Print final results. */ - public function printResults() + public function printResults(): void { echo $this->getHeader(); echo $this->getErrors(); @@ -181,15 +173,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", @@ -198,22 +188,17 @@ 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 { - if (class_exists(ResourceUsageFormatter::class)) { - $resourceUsage = (new ResourceUsageFormatter())->resourceUsageSinceStartOfRequest(); - } else { - $resourceUsage = Timer::resourceUsage(); - } + $resourceUsage = (new ResourceUsageFormatter())->resourceUsageSinceStartOfRequest(); return "\n\n" . $resourceUsage . "\n\n"; } @@ -230,19 +215,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(); } /** * Return the footer information reporting success * or failure. - * - * @return string */ public function getFooter(): string { @@ -253,8 +234,6 @@ public function getFooter(): string /** * Returns the failure messages. - * - * @return string */ public function getFailures(): string { @@ -265,8 +244,6 @@ public function getFailures(): string /** * Returns error messages. - * - * @return string */ public function getErrors(): string { @@ -277,8 +254,6 @@ public function getErrors(): string /** * Returns the total cases being printed. - * - * @return int */ public function getTotalCases(): int { @@ -287,28 +262,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); } /** @@ -316,10 +292,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 mixed $options - * - * @return bool */ protected function isSkippedIncompleTestCanBeTracked(Options $options): bool { @@ -334,11 +306,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) { @@ -357,17 +326,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'); } } @@ -375,44 +343,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 $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; } @@ -420,27 +396,25 @@ protected function printFeedbackItemColor(string $item) * Method that returns a formatted string * for a collection of errors or failures. * - * @param array $defects - * @param $type - * - * @return string + * @param string[] $defects */ 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; @@ -451,26 +425,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(), @@ -483,18 +455,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, @@ -505,12 +475,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' )); } @@ -540,7 +510,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..b77d492 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 { @@ -14,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); @@ -27,30 +42,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 +78,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 +95,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 +126,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 +161,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]; } } @@ -166,7 +188,7 @@ protected function initTokens() * Gets the next token that is available to be acquired * from a finished process. * - * @return bool|array + * @return bool|array */ protected function getNextAvailableToken() { @@ -181,36 +203,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 8c0420d..308bc08 100644 --- a/src/Runners/PHPUnit/SqliteRunner.php +++ b/src/Runners/PHPUnit/SqliteRunner.php @@ -9,31 +9,53 @@ 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[] */ + protected $workers; + /** @var PDO */ private $db; /** @var string */ private $dbFileName = null; + /** + * {@inheritDoc} + */ 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(); @@ -50,17 +72,20 @@ 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); 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; } @@ -73,13 +98,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); } /** @@ -110,7 +138,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, ]); } @@ -146,7 +174,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..723c8e2 100644 --- a/src/Runners/PHPUnit/Suite.php +++ b/src/Runners/PHPUnit/Suite.php @@ -4,9 +4,11 @@ namespace ParaTest\Runners\PHPUnit; +use ParaTest\Parser\ParsedFunction; + +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 @@ -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 { @@ -38,11 +43,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 dca5732..fd98647 100644 --- a/src/Runners/PHPUnit/SuiteLoader.php +++ b/src/Runners/PHPUnit/SuiteLoader.php @@ -7,27 +7,37 @@ 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 assert; +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 { /** * The collection of loaded files. * - * @var array + * @var string[] */ protected $files = []; - /** - * @var array - */ + /** @var string[]|null */ protected $suitesName = null; /** * The collection of parsed test classes. * - * @var array + * @var array */ protected $loadedSuites = []; @@ -38,25 +48,21 @@ class SuiteLoader */ protected $configuration; - /** - * @var 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(''); } /** * Returns all parsed suite objects as ExecutableTest * instances. * - * @return array + * @return array */ public function getSuites(): array { @@ -67,13 +73,14 @@ 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) { - $methods = \array_merge($methods, $suite->getFunctions()); + assert($suite instanceof Suite); + $methods = array_merge($methods, $suite->getFunctions()); } return $methods; @@ -83,15 +90,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 +106,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 +118,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 +126,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 +141,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 +151,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; } } @@ -157,13 +162,15 @@ protected function initSuites(): void } } + /** + * @return TestMethod[] + */ 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); - $executableTests[] = $executableTest; + $executableTests[] = new TestMethod($path, $methodBatch); } return $executableTests; @@ -175,19 +182,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 + * @return string[][] 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; } @@ -201,25 +206,33 @@ 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) { foreach ($batch as $methodName) { if ($dependsOn === $methodName) { - $batches[$key] = \array_merge($batches[$key], $tests); + $batches[$key] = array_merge($batches[$key], $tests); continue; } } } } + /** + * @param string[][] $batches + * @param string[] $tests + */ 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,8 +247,8 @@ 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 ParsedObject $method parsed method + * @param ParsedClass $class parsed class + * @param ParsedFunction $method parsed method * * @return string[] array of test names */ @@ -248,17 +261,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()]; @@ -267,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)) { @@ -274,20 +292,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 +308,29 @@ 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; } + /** + * @param string[] $group + */ protected function testMatchOptions(string $className, string $name, array $group): bool { - $result = $this->testMatchGroupOptions($group) + return $this->testMatchGroupOptions($group) && $this->testMatchFilterOptions($className, $name); - - return $result; } + /** + * @return string[] + */ protected function testGroups(ParsedClass $class, ParsedFunction $method): array { - return \array_merge( + return array_merge( $this->classGroups($class), $this->methodGroups($method) ); @@ -322,7 +338,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,25 +347,31 @@ 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]; } return null; } + /** + * @return 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]; } return []; } + /** + * @return string[] + */ 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]; } @@ -367,7 +389,7 @@ protected function createSuite(string $path, ParsedClass $class): Suite ); } - private function createFullSuite($suiteName, $configPath): FullSuite + private function createFullSuite(string $suiteName, string $configPath): FullSuite { return new FullSuite($suiteName, $configPath); } diff --git a/src/Runners/PHPUnit/SuitePath.php b/src/Runners/PHPUnit/SuitePath.php index 271fc1d..f90968b 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,34 +13,29 @@ 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[] */ protected $excludedPaths; + /** + * @param string[] $excludedPaths + */ 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 +49,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 ec9b554..2d0a08a 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 { /** @@ -27,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 = []; @@ -45,7 +56,10 @@ class TestFileLoader */ protected $excludingFiles = false; - public function __construct(Options $options = null) + /** @var Options|null */ + protected $options; + + public function __construct(?Options $options = null) { $this->options = $options; } @@ -54,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()); @@ -82,31 +94,25 @@ 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 - * - * @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 = []; $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"); + 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); } @@ -115,24 +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 { - $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 $path */ - private function loadFile(string $path) + private function loadFile(string $path): void { $this->tryLoadTests($path, self::FILE_PATTERN); } @@ -140,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..b317bcb 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); } /** @@ -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, function ($r, $v) { - $isDataSet = \strpos($v, ' with data set ') !== false; + $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|\$)"); + return ($r ? $r . '|' : '') . preg_quote($v, '/') . ($isDataSet ? '$' : '(?:\s|$)'); }); + $options['filter'] = '/' . $re . '/'; return $options; @@ -92,11 +93,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 f96dc0a..2fc8a24 100644 --- a/src/Runners/PHPUnit/Worker/BaseWorker.php +++ b/src/Runners/PHPUnit/Worker/BaseWorker.php @@ -5,53 +5,88 @@ 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; + /** @var resource[] */ protected $pipes; + /** @var int */ protected $inExecution = 0; + /** @var int|null */ private $exitCode = null; + /** @var string */ private $chunks = ''; + /** @var string */ private $alreadyReadOutput = ''; + /** + * @param string[] $parameters + */ public function start( string $wrapperBinary, - $token = 1, - $uniqueToken = null, + ?int $token = 1, + ?string $uniqueToken = null, array $parameters = [], ?Options $options = null - ) { - $bin = 'PARATEST=1 '; - if (\is_numeric($token)) { - $bin .= 'XDEBUG_CONFIG="true" '; - $bin .= "TEST_TOKEN=$token "; + ): void { + $env = getenv(); + $env['PARATEST'] = 1; + if (is_numeric($token)) { + $env['XDEBUG_CONFIG'] = 'true'; + $env['TEST_TOKEN'] = $token; } + if ($uniqueToken) { - $bin .= "UNIQUE_TEST_TOKEN=$uniqueToken "; + $env['UNIQUE_TEST_TOKEN'] = $uniqueToken; } - $finder = new PhpExecutableFinder(); + + $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) { - $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); - $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; } @@ -69,7 +104,7 @@ public function isRunning(): bool return false; } - $status = \proc_get_status($this->proc); + $status = proc_get_status($this->proc); return $status ? $status['running'] : false; } @@ -81,10 +116,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(); @@ -96,16 +132,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() + public function getCrashReport(): string { - $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 @@ -115,23 +151,30 @@ 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) + /** + * @param 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() + private function readAllStderr(): string { - return \stream_get_contents($this->pipes[2]); + return stream_get_contents($this->pipes[2]); } /** @@ -139,27 +182,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 33ba37c..37b1432 100644 --- a/src/Runners/PHPUnit/Worker/SqliteWorker.php +++ b/src/Runners/PHPUnit/Worker/SqliteWorker.php @@ -16,13 +16,16 @@ public function __construct(string $dbFileName) $this->dbFileName = $dbFileName; } + /** + * @param string[] $parameters + */ public function start( string $wrapperBinary, - $token = 1, - $uniqueToken = null, + ?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 575026f..6b1e5ba 100644 --- a/src/Runners/PHPUnit/Worker/WrapperWorker.php +++ b/src/Runners/PHPUnit/Worker/WrapperWorker.php @@ -5,71 +5,91 @@ 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; +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 ExecutableTest - */ + /** @var ExecutableTest|null */ private $currentlyExecuting; + /** + * @return resource + */ public function stdout() { return $this->pipes[1]; } - public function execute(string $testCmd) + /** + * @param string[] $testCmdArguments + */ + public function execute(array $testCmdArguments): void { $this->checkStarted(); - $this->commands[] = $testCmd; - \fwrite($this->pipes[0], $testCmd . "\n"); + $this->commands[] = implode(' ', $testCmdArguments); + fwrite($this->pipes[0], serialize($testCmdArguments) . "\n"); ++$this->inExecution; } - public function assign(ExecutableTest $test, string $phpunit, array $phpunitOptions, Options $options) + /** + * @param array $phpunitOptions + */ + 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; - $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) + 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(); } @@ -77,22 +97,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.'); } } @@ -102,19 +124,21 @@ 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); } } - public function getCoverageFileName() + public function getCoverageFileName(): ?string { if ($this->currentlyExecuting !== null) { return $this->currentlyExecuting->getCoverageFileName(); } + + return null; } } diff --git a/src/Runners/PHPUnit/WrapperRunner.php b/src/Runners/PHPUnit/WrapperRunner.php index 4477212..9a24572 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,22 +26,28 @@ class WrapperRunner extends BaseRunner private const PHPUNIT_ERRORS = 2; - /** - * @var array - */ + /** @var resource[] */ protected $streams; - /** - * @var WrapperWorker[] - */ + /** @var WrapperWorker[] */ protected $workers; + /** @var resource[] */ + protected $modified; + /** - * @var array + * {@inheritDoc} */ - protected $modified; + public function __construct(array $opts = []) + { + 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(); @@ -38,104 +58,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(__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) { - $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 resource[] $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; @@ -157,8 +190,10 @@ private function progressedWorkers(): array break; } } + $result[$found] = $this->workers[$found]; } + $this->modified = []; return $result; @@ -167,21 +202,21 @@ private function progressedWorkers(): array /** * Returns the output streams of a subset of workers. * - * @param array 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 { $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(); @@ -194,7 +229,7 @@ protected function complete() } } - private function setExitCode() + private function setExitCode(): void { if ($this->interpreter->getTotalErrors()) { $this->exitcode = self::PHPUNIT_ERRORS; @@ -205,11 +240,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 5eefd94..446efdc 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,23 +23,17 @@ class CoverageMergerTest extends TestBase */ private $targetDir; - /** - * {@inheritdoc} - */ protected function setUp(): void { parent::setUp(); 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); } - /** - * {@inheritdoc} - */ protected function tearDown(): void { $this->removeDirectory($this->targetDir); @@ -42,27 +42,27 @@ 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); $coverageMerger = new CoverageMerger(); $coverageMerger->addCoverageFromFile($filename); - static::assertFileNotExists($filename); + static::assertFileDoesNotExist($filename); } /** - * @dataProvider getCoverageFileProvider + * @param string[] $coverageFiles + * @param class-string $expectedClass * - * @param string[] $coverageFiles - * @param $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 +80,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,22 +118,18 @@ 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./'; - if (method_exists($this, 'expectExceptionMessageMatches')) { - $this->expectExceptionMessageMatches($regex); - } else { - $this->expectExceptionMessageRegExp($regex); - } - $filename = $this->copyCoverageFile('coverage-tests/empty_test.cov', $this->targetDir); + $this->expectExceptionMessageMatches($regex); + $filename = $this->copyCoverageFile('coverage-tests' . DS . 'empty_test.cov', $this->targetDir); $coverageMerger = new CoverageMerger(); $coverageMerger->addCoverageFromFile($filename); } - public function testCoverageFileIsNull() + public function testCoverageFileIsNull(): void { $coverageMerger = new CoverageMerger(); $coverageMerger->addCoverageFromFile(null); @@ -141,7 +137,7 @@ public function testCoverageFileIsNull() $this->assertNull($coverageMerger->getCodeCoverageObject()); } - public function testCoverageFileDoesNotExist() + public function testCoverageFileDoesNotExist(): void { $coverageMerger = new CoverageMerger(); $coverageMerger->addCoverageFromFile('no-such-file.cov'); @@ -150,12 +146,12 @@ public function testCoverageFileDoesNotExist() } /** - * @return array + * @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', ]; @@ -169,12 +165,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 aab2786..ccd6ca5 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,23 +24,17 @@ class CoverageReporterTest extends TestBase */ private $targetDir; - /** - * {@inheritdoc} - */ protected function setUp(): void { parent::setUp(); 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); } - /** - * {@inheritdoc} - */ protected function tearDown(): void { $this->removeDirectory($this->targetDir); @@ -42,12 +43,12 @@ protected function tearDown(): void } /** - * @dataProvider getReporterProvider + * @param string[] $coverageFiles + * @param class-string $expectedReportClass * - * @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 +63,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); @@ -75,9 +76,9 @@ public function testGeneratePhp(array $coverageFiles) $coverageMerger->addCoverageFromFile($filename1); $coverageMerger->addCoverageFromFile($filename2); - $target = $this->targetDir . '/coverage.php'; + $target = $this->targetDir . DS . 'coverage.php'; - static::assertFileNotExists($target); + static::assertFileDoesNotExist($target); $coverageMerger->getReporter()->php($target); @@ -85,11 +86,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); @@ -98,24 +99,24 @@ public function testGenerateClover(array $coverageFiles) $coverageMerger->addCoverageFromFile($filename1); $coverageMerger->addCoverageFromFile($filename2); - $target = $this->targetDir . '/coverage.xml'; + $target = $this->targetDir . DS . 'coverage.xml'; - static::assertFileNotExists($target); + static::assertFileDoesNotExist($target); $coverageMerger->getReporter()->clover($target); static::assertFileExists($target); - $reportXml = \PHPUnit\Util\XML::loadFile($target); + $reportXml = (new Xml\Loader())->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); @@ -124,25 +125,25 @@ public function testGenerateCrap4J(array $coverageFiles) $coverageMerger->addCoverageFromFile($filename1); $coverageMerger->addCoverageFromFile($filename2); - $target = $this->targetDir . '/coverage.xml'; + $target = $this->targetDir . DS . 'coverage.xml'; - static::assertFileNotExists($target); + static::assertFileDoesNotExist($target); $coverageMerger->getReporter()->crap4j($target); static::assertFileExists($target); - $reportXml = \PHPUnit\Util\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); } /** - * @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); @@ -151,25 +152,26 @@ public function testGenerateHtml(array $coverageFiles) $coverageMerger->addCoverageFromFile($filename1); $coverageMerger->addCoverageFromFile($filename2); - $target = $this->targetDir . '/coverage'; + $target = $this->targetDir . DS . 'coverage'; - static::assertFileNotExists($target); + 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'); } /** - * @return array + * @return array> */ - public static function getReporterProvider() + public static function getReporterProvider(): array { - $version = 'CodeCoverage >4.0'; - $filenames = [ - 'coverage-tests/runner_test.cov', - 'coverage-tests/result_printer_test.cov', + $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', ]; $reporterClass = CoverageReporter::class; diff --git a/test/Functional/DataProviderTest.php b/test/Functional/DataProviderTest.php index b58be78..243b622 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 @@ -18,62 +18,62 @@ public function setUp(): void ); } - public function testFunctionalMode() + public function testFunctionalMode(): void { $proc = $this->invoker->execute([ '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() + public function testNumericDataSetInFunctionalModeWithMethodFilter(): void { $proc = $this->invoker->execute([ 'functional' => null, '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() + public function testNumericDataSetInFunctionalModeWithCustomFilter(): void { $proc = $this->invoker->execute([ 'functional' => null, '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() + public function testNamedDataSetInFunctionalModeWithMethodFilter(): void { $proc = $this->invoker->execute([ 'functional' => null, '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() + public function testNamedDataSetInFunctionalModeWithCustomFilter(): void { $proc = $this->invoker->execute([ 'functional' => null, '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() + public function testNumericDataSet1000InFunctionalModeWithFilterAndMaxBatchSize(): void { $proc = $this->invoker->execute([ 'functional' => null, '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..4022aa6 100644 --- a/test/Functional/FunctionalTestBase.php +++ b/test/Functional/FunctionalTestBase.php @@ -8,28 +8,42 @@ 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) + protected function fixture(string $fixture): string { $fixture = FIXTURES . DS . $fixture; - if (!file_exists($fixture)) { + if (! file_exists($fixture)) { throw new Exception("Fixture $fixture not found"); } return $fixture; } - protected function invokeParatest($path, $options = [], $callback = null) + /** + * @param array $options + * + * @return Process + */ + 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+') - { - $this->assertRegExp( + /** + * @param Process $proc + */ + protected function assertTestsPassed( + Process $proc, + string $testPattern = '\d+', + string $assertionPattern = '\d+' + ): void { + $this->assertMatchesRegularExpression( "/OK \($testPattern tests?, $assertionPattern assertions?\)/", $proc->getOutput() ); @@ -39,11 +53,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 2c4e733..1760f1c 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 @@ -18,40 +18,40 @@ public function setUp(): void ); } - public function testGroupSwitchOnlyExecutesThoseGroups() + public function testGroupSwitchOnlyExecutesThoseGroups(): void { $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() + public function testExcludeGroupSwitchDontExecuteThatGroup(): void { $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() + public function testGroupSwitchExecutesGroupsUsingShortOption(): void { $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() + public function testGroupSwitchOnlyExecutesThoseGroupsInFunctionalMode(): void { $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() + public function testGroupSwitchOnlyExecutesThoseGroupsWhereTestHasMultipleGroups(): void { $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() + public function testGroupsSwitchExecutesMultipleGroups(): void { $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..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,15 +20,15 @@ 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); $this->assertStringContainsString('Configuration read from ' . getcwd() . DS . 'phpunit.xml.dist', $output); - $this->assertRegExp('/[.F]{4}/', $output); + $this->assertMatchesRegularExpression('/[.F]{4}/', $output); } - public function testMessagePrintedWhenInvalidConfigFileSupplied() + public function testMessagePrintedWhenInvalidConfigFileSupplied(): void { $output = $this->paratest ->execute(['configuration' => 'nope.xml']) @@ -36,21 +36,21 @@ 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]) ->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() + public function testProcCountIsReportedWithProcOption(): void { $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/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 b8c7ecb..2682999 100644 --- a/test/Functional/PHPUnitTest.php +++ b/test/Functional/PHPUnitTest.php @@ -8,38 +8,45 @@ 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 - $this->assertRegExp( + $this->assertMatchesRegularExpression( '/(\[RuntimeException\]|Bootstrap specified but could not be found)/', $errors, 'Expected exception name not found in output' ); } - 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])); } - public function testWithWrapperRunner() + /** + * @requires OSFAMILY Linux + */ + public function testWithWrapperRunner(): void { $this->assertTestsPassed($this->invokeParatest('passing-tests', [ 'configuration' => PHPUNIT_CONFIGURATION, @@ -47,7 +54,7 @@ public function testWithWrapperRunner() ])); } - public function testWithSqliteRunner() + public function testWithSqliteRunner(): void { $this->guardSqliteExtensionLoaded(); @@ -57,7 +64,7 @@ public function testWithSqliteRunner() ])); } - public function testWithCustomRunner() + public function testWithCustomRunner(): void { $cb = new ProcessCallback(); @@ -72,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', @@ -84,7 +91,7 @@ public function testWithColorsGreenBar() ); } - public function testWithColorsRedBar() + public function testWithColorsRedBar(): void { $proc = $this->invokeParatest( 'failing-tests/UnitTestWithErrorTest.php', @@ -96,7 +103,7 @@ public function testWithColorsRedBar() ); } - public function testParatestEnvironmentVariable() + public function testParatestEnvironmentVariable(): void { $this->assertTestsPassed($this->invokeParatest( 'paratest-only-tests/EnvironmentTest.php', @@ -104,7 +111,10 @@ public function testParatestEnvironmentVariable() )); } - public function testParatestEnvironmentVariableWithWrapperRunner() + /** + * @requires OSFAMILY Linux + */ + public function testParatestEnvironmentVariableWithWrapperRunner(): void { $this->assertTestsPassed($this->invokeParatest( 'paratest-only-tests/EnvironmentTest.php', @@ -112,16 +122,19 @@ public function testParatestEnvironmentVariableWithWrapperRunner() )); } - public function testParatestEnvironmentVariableWithWrapperRunnerWithoutTestTokens() + /** + * @requires OSFAMILY Linux + */ + public function testParatestEnvironmentVariableWithWrapperRunnerWithoutTestTokens(): void { $proc = $this->invokeParatest( '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() + public function testParatestEnvironmentVariableWithSqliteRunner(): void { $this->guardSqliteExtensionLoaded(); $this->assertTestsPassed($this->invokeParatest( @@ -130,22 +143,22 @@ 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', ['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() + public function testFunctionalWithBootstrap(): void { $this->assertTestsPassed($this->invokeParatest( 'passing-tests', @@ -153,7 +166,7 @@ public function testFunctionalWithBootstrap() )); } - public function testFunctionalWithConfiguration() + public function testFunctionalWithConfiguration(): void { $this->assertTestsPassed($this->invokeParatest( 'passing-tests', @@ -161,17 +174,17 @@ public function testFunctionalWithConfiguration() )); } - public function testWithBootstrapAndProcessesSwitch() + public function testWithBootstrapAndProcessesSwitch(): void { $proc = $this->invokeParatest( '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); } - public function testWithBootstrapAndManuallySpecifiedPHPUnit() + public function testWithBootstrapAndManuallySpecifiedPHPUnit(): void { $this->assertTestsPassed($this->invokeParatest( 'passing-tests', @@ -179,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( @@ -194,66 +207,62 @@ 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( 'passing-tests', ['path' => 'test/fixtures/paratest-only-tests/TestTokenTest.php'] ); - $this->assertTestsPassed($proc, 1, 1); + $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->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()); } @@ -262,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' => '', @@ -283,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' => '', @@ -295,15 +302,17 @@ 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); + if (! file_exists($output)) { + return; } + + unlink($output); } - public function testUsingDefaultLoadedConfiguration() + public function testUsingDefaultLoadedConfiguration(): void { $this->assertTestsPassed($this->invokeParatest( 'passing-tests', @@ -311,34 +320,37 @@ public function testUsingDefaultLoadedConfiguration() )); } - public function testEachTestRunsExactlyOnceOnChainDependencyOnFunctionalMode() + public function testEachTestRunsExactlyOnceOnChainDependencyOnFunctionalMode(): void { $proc = $this->invokeParatest( 'passing-tests/DependsOnChain.php', ['bootstrap' => BOOTSTRAP, 'functional'] ); - $this->assertTestsPassed($proc, 5, 5); + $this->assertTestsPassed($proc, '5', '5'); } - public function testEachTestRunsExactlyOnceOnSameDependencyOnFunctionalMode() + public function testEachTestRunsExactlyOnceOnSameDependencyOnFunctionalMode(): void { $proc = $this->invokeParatest( 'passing-tests/DependsOnSame.php', ['bootstrap' => BOOTSTRAP, 'functional'] ); - $this->assertTestsPassed($proc, 3, 3); + $this->assertTestsPassed($proc, '3', '3'); } - public function testFunctionalModeEachTestCalledOnce() + public function testFunctionalModeEachTestCalledOnce(): void { $proc = $this->invokeParatest( 'passing-tests/FunctionalModeEachTestCalledOnce.php', ['bootstrap' => BOOTSTRAP, 'functional'] ); - $this->assertTestsPassed($proc, 2, 2); + $this->assertTestsPassed($proc, '2', '2'); } - public function setsCoveragePhpDataProvider() + /** + * @return array>> + */ + public function setsCoveragePhpDataProvider(): array { return [ [ @@ -361,20 +373,20 @@ public function setsCoveragePhpDataProvider() } /** - * @dataProvider setsCoveragePhpDataProvider + * @param array $options * - * @param $options - * @param $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); @@ -387,16 +399,16 @@ public function testSetsCoveragePhp($options, $coveragePhp) } /** - * @dataProvider getRunnerOptionsDataProvider + * @param array> $options + * @param array> $expected * - * @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); @@ -411,7 +423,10 @@ public function testGetRunnerOptions(array $options, array $expected) $this->assertEquals($expected, $options); } - public function getRunnerOptionsDataProvider() + /** + * @return array|int|string>>> + */ + public function getRunnerOptionsDataProvider(): array { return [ 'default' => [ 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 0d9bcbc..5525cb2 100644 --- a/test/Functional/ParaTestInvoker.php +++ b/test/Functional/ParaTestInvoker.php @@ -7,37 +7,41 @@ 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 { + /** @var string */ public $path; + /** @var string */ public $bootstrap; - public function __construct($path, $bootstrap) + public function __construct(string $path, string $bootstrap) { - $this->path = $path; + $this->path = $path; $this->bootstrap = $bootstrap; } /** * Runs the command, returns the proc after it's done. * - * @param array $options - * @param callable $callback + * @param array $options * - * @return Process + * @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; - $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 - } + $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); @@ -46,21 +50,33 @@ public function execute($options = [], $callback = null) return $proc; } - private function buildCommand($options = []) + /** + * @param array $options + */ + private function buildCommand(array $options = []): string { - $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, + PARA_BINARY, + $this->bootstrap, + PHPUNIT + ); 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..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) + public function callback(string $type, string $buffer): void { - $this->type = $type; + $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 e70fc44..fef7d66 100644 --- a/test/Functional/Runners/PHPUnit/RunnerIntegrationTest.php +++ b/test/Functional/Runners/PHPUnit/RunnerIntegrationTest.php @@ -5,12 +5,22 @@ 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; - /** @var array */ + /** @var array */ protected $options; protected function setUp(): void @@ -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 @@ -37,22 +47,25 @@ protected function tearDown(): void parent::tearDown(); } - private function globTempDir($pattern) + /** + * @return string[] + */ + private function globTempDir(string $pattern): array { 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 +79,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 +91,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(string $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 0bebd18..57badca 100644 --- a/test/Functional/Runners/PHPUnit/WorkerTest.php +++ b/test/Functional/Runners/PHPUnit/WorkerTest.php @@ -5,41 +5,62 @@ 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 { + /** @var string[][] */ protected static $descriptorspec = [ - 0 => ['pipe', 'r'], - 1 => ['pipe', 'w'], - 2 => ['pipe', 'w'], + 0 => ['pipe', 'r'], + 1 => ['pipe', 'w'], + 2 => ['pipe', 'w'], ]; + /** @var string */ + protected $bootstrap; + /** @var string */ + private $phpunitWrapper; 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) + private function deleteIfExists(string $file): void { - if (file_exists($file)) { - unlink($file); + if (! file_exists($file)) { + return; } + + unlink($file); } - public function testReadsAPHPUnitCommandFromStdInAndExecutesItItsOwnProcess() + /** + * @requires OSFAMILY Linux + */ + public function testReadsAPHPUnitCommandFromStdInAndExecutesItItsOwnProcess(): void { - $testLog = '/tmp/test.xml'; - $testCmd = $this->getCommand('passing-tests/TestOfUnits.php', $testLog); - $worker = new WrapperWorker(); + $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); @@ -49,11 +70,14 @@ public function testReadsAPHPUnitCommandFromStdInAndExecutesItItsOwnProcess() $this->assertJUnitLogIsValid($testLog); } - public function testKnowsWhenAJobIsFinished() + /** + * @requires OSFAMILY Linux + */ + public function testKnowsWhenAJobIsFinished(): void { - $testLog = '/tmp/test.xml'; - $testCmd = $this->getCommand('passing-tests/TestOfUnits.php', $testLog); - $worker = new WrapperWorker(); + $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); $worker->waitForFinishedJob(); @@ -61,11 +85,14 @@ public function testKnowsWhenAJobIsFinished() $this->assertJUnitLogIsValid($testLog); } - public function testTellsWhenItsFree() + /** + * @requires OSFAMILY Linux + */ + public function testTellsWhenItsFree(): void { - $testLog = '/tmp/test.xml'; - $testCmd = $this->getCommand('passing-tests/TestOfUnits.php', $testLog); - $worker = new WrapperWorker(); + $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()); @@ -76,7 +103,10 @@ public function testTellsWhenItsFree() $this->assertTrue($worker->isFree()); } - public function testTellsWhenItsStopped() + /** + * @requires OSFAMILY Linux + */ + public function testTellsWhenItsStopped(): void { $worker = new WrapperWorker(); $this->assertFalse($worker->isRunning()); @@ -89,7 +119,10 @@ public function testTellsWhenItsStopped() $this->assertFalse($worker->isRunning()); } - public function testProcessIsMarkedAsCrashedWhenItFinishesWithNonZeroExitCode() + /** + * @requires OSFAMILY Linux + */ + public function testProcessIsMarkedAsCrashedWhenItFinishesWithNonZeroExitCode(): void { // fake state: process has already exited (with non-zero exit code) but worker did not yet notice $worker = new WrapperWorker(); @@ -98,6 +131,9 @@ public function testProcessIsMarkedAsCrashedWhenItFinishesWithNonZeroExitCode() $this->assertTrue($worker->isCrashed()); } + /** + * @return resource + */ private function createSomeClosedProcess() { $descriptorspec = [ @@ -106,36 +142,39 @@ 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) + /** + * @param mixed $value + */ + private function setPerReflection(object $instance, string $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'; + $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(); @@ -145,22 +184,26 @@ public function testCanExecuteMultiplePHPUnitCommands() $this->assertJUnitLogIsValid($testLog2); } - private function getCommand($testFile, $logFile) + /** + * @return string[] + */ + private function getCommand(string $testFile, string $logFile): array { - return sprintf( - "'%s' '--bootstrap' '%s' '--log-junit' '%s' '%s'", - 'vendor/bin/phpunit', + return [ + PHPUNIT, + '--bootstrap', $this->bootstrap, + '--log-junit', $logFile, - $this->fixture($testFile) - ); + $this->fixture($testFile), + ]; } - private function assertJUnitLogIsValid($logFile) + private function assertJUnitLogIsValid(string $logFile): void { - $this->assertFileExists($logFile, "Failed asserting that $logFile exists."); - $log = new SimpleXMLElement(file_get_contents($logFile)); - $count = \count($log->testsuite->testcase); + $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/SkippedOrIncompleteTest.php b/test/Functional/SkippedOrIncompleteTest.php index c29ce56..d4bd668 100644 --- a/test/Functional/SkippedOrIncompleteTest.php +++ b/test/Functional/SkippedOrIncompleteTest.php @@ -4,13 +4,16 @@ 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. */ class SkippedOrIncompleteTest extends FunctionalTestBase { - /** @var ParatestInvoker */ + /** @var ParaTestInvoker */ private $invoker; public function setUp(): void @@ -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(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 6f4d5d0..c640f0b 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); @@ -27,10 +27,10 @@ public function testResultsAreCorrect() ]); $expected = self::TEST_CLASSES * self::TEST_METHODS_PER_CLASS; - $this->assertTestsPassed($proc, $expected, $expected); + $this->assertTestsPassed($proc, (string) $expected, (string) $expected); } - public function testRunningFewerTestsThanTheWorkersIsPossible() + public function testRunningFewerTestsThanTheWorkersIsPossible(): void { $generator = new TestGenerator(); $generator->generate(1, 1); @@ -40,24 +40,24 @@ public function testRunningFewerTestsThanTheWorkersIsPossible() 'processes' => 2, ]); - $this->assertTestsPassed($proc, 1, 1); + $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..c2ef839 100644 --- a/test/Functional/TestGenerator.php +++ b/test/Functional/TestGenerator.php @@ -4,22 +4,31 @@ namespace ParaTest\Tests\Functional; +use function file_put_contents; +use function is_dir; +use function mkdir; +use function uniqid; + class TestGenerator { + /** @var string */ public $path; + /** @var string */ private $fullPath; 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(int $tests = 1, int $methods = 1): void { for ($i = 0; $i < $tests; ++$i) { $name = "Generated{$i}Test"; @@ -28,12 +37,12 @@ public function generate($tests = 1, $methods = 1) } } - 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 0a569b9..03bfae7 100644 --- a/test/Functional/WrapperRunnerTest.php +++ b/test/Functional/WrapperRunnerTest.php @@ -4,13 +4,16 @@ namespace ParaTest\Tests\Functional; +/** + * @requires OSFAMILY Linux + */ class WrapperRunnerTest extends FunctionalTestBase { private const TEST_METHODS_PER_CLASS = 5; 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); @@ -21,10 +24,10 @@ public function testResultsAreCorrect() ]); $expected = self::TEST_CLASSES * self::TEST_METHODS_PER_CLASS; - $this->assertTestsPassed($proc, $expected, $expected); + $this->assertTestsPassed($proc, (string) $expected, (string) $expected); } - public function testRunningFewerTestsThanTheWorkersIsPossible() + public function testRunningFewerTestsThanTheWorkersIsPossible(): void { $generator = new TestGenerator(); $generator->generate(1, 1); @@ -34,34 +37,24 @@ public function testRunningFewerTestsThanTheWorkersIsPossible() 'processes' => 2, ]); - $this->assertTestsPassed($proc, 1, 1); + $this->assertTestsPassed($proc, '1', '1'); } - public function functionalModeEnabledDataProvider() - { - return [[false]]; - } - - /** - * @dataProvider functionalModeEnabledDataProvider - * - * @param mixed $functionalModeEnabled - */ - public function testExitCodes($functionalModeEnabled) + public function testExitCodes(): 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); @@ -69,15 +62,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 d3f9e5f..05d5692 100644 --- a/test/TestBase.php +++ b/test/TestBase.php @@ -6,65 +6,90 @@ use Exception; use PHPUnit; +use PHPUnit\Framework\SkippedTestError; use PHPUnit\Runner\Version; use RecursiveDirectoryIterator; use RecursiveIteratorIterator; use ReflectionClass; +use ReflectionObject; +use ReflectionProperty; 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(); } - protected function fixture($fixture) + protected function fixture(string $fixture): string { $fixture = FIXTURES . DS . $fixture; - if (!file_exists($fixture)) { + if (! file_exists($fixture)) { throw new Exception("Fixture $fixture not found"); } return $fixture; } - protected function findTests($dir) + /** + * @return string[] + */ + protected function findTests(string $dir): array { - $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; } - 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); + $refl = new ReflectionObject($object); $prop = $refl->getProperty($property); $prop->setAccessible(true); @@ -74,13 +99,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,69 +113,75 @@ 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); } - protected static function callMethod($objectOrClassName, $methodName, $args = null) + /** + * @param string|object $objectOrClassName + * @param mixed[]|null $args + * + * @return mixed + */ + protected static function callMethod($objectOrClassName, string $methodName, ?array $args = null) { $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 +192,7 @@ protected function removeDirectory($dirname) unlink($file->getRealPath()); } } + rmdir($dirname); } @@ -168,14 +200,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 = '/tmp') + protected function copyCoverageFile(string $fixture, string $directory): string { $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/Console/Commands/ParaTestCommandTest.php b/test/Unit/Console/Commands/ParaTestCommandTest.php index 8f9a00e..5052451 100644 --- a/test/Unit/Console/Commands/ParaTestCommandTest.php +++ b/test/Unit/Console/Commands/ParaTestCommandTest.php @@ -7,24 +7,27 @@ 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 { + /** @var PHPUnit */ protected $tester; + /** @var ParaTestCommand */ 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 +37,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 +195,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 +211,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 bd513ff..e24e7fa 100644 --- a/test/Unit/Console/VersionProviderTest.php +++ b/test/Unit/Console/VersionProviderTest.php @@ -8,42 +8,32 @@ 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->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'); } - - 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'); - } } diff --git a/test/Unit/Coverage/CoverageMergerTest.php b/test/Unit/Coverage/CoverageMergerTest.php index 5ccc94f..9e9b325 100644 --- a/test/Unit/Coverage/CoverageMergerTest.php +++ b/test/Unit/Coverage/CoverageMergerTest.php @@ -5,10 +5,15 @@ namespace ParaTest\Tests\Unit\Coverage; 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; -class CoverageMergerTest extends \ParaTest\Tests\TestBase +use function assert; + +class CoverageMergerTest extends TestBase { protected function setUp(): void { @@ -20,31 +25,35 @@ protected function setUp(): void * * @requires function \SebastianBergmann\CodeCoverage\CodeCoverage::merge */ - public function testSimpleMerge() + public function testSimpleMerge(): void { - $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 - $firstFileFirstLine = 39; - $secondFileFirstLine = 39; + $firstFileFirstLine = 46; + $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' ); @@ -52,12 +61,12 @@ 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); - $data = $coverage->getData(); + $data = $coverage->getData()->lineCoverage(); $this->assertCount(2, $data[$firstFile][$firstFileFirstLine]); $this->assertEquals('Test1', $data[$firstFile][$firstFileFirstLine][0]); @@ -72,31 +81,35 @@ public function testSimpleMerge() * * @requires function \SebastianBergmann\CodeCoverage\CodeCoverage::merge */ - public function testSimpleMergeLimited() + public function testSimpleMergeLimited(): void { - $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 - $firstFileFirstLine = 39; - $secondFileFirstLine = 39; + $firstFileFirstLine = 46; + $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' ); @@ -104,11 +117,11 @@ 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(); + $data = $coverage->getData()->lineCoverage(); $this->assertCount(1, $data[$firstFile][$firstFileFirstLine]); $this->assertCount(1, $data[$secondFile][$secondFileFirstLine]); diff --git a/test/Unit/Logging/JUnit/ReaderTest.php b/test/Unit/Logging/JUnit/ReaderTest.php index e0ed6e9..df2fbbb 100644 --- a/test/Unit/Logging/JUnit/ReaderTest.php +++ b/test/Unit/Logging/JUnit/ReaderTest.php @@ -4,46 +4,59 @@ namespace ParaTest\Tests\Unit\Logging\JUnit; +use InvalidArgumentException; use ParaTest\Logging\JUnit\Reader; +use ParaTest\Logging\JUnit\TestSuite; +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 { + /** @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 { - $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()); } - public function testMixedSuiteShouldConstructRootSuite() + public function testMixedSuiteShouldConstructRootSuite(): TestSuite { $suites = $this->mixed->getSuites(); $this->assertCount(1, $suites); @@ -59,10 +72,8 @@ public function testMixedSuiteShouldConstructRootSuite() /** * @depends testMixedSuiteShouldConstructRootSuite - * - * @param mixed $suite */ - public function testMixedSuiteConstructsChildSuites($suite) + public function testMixedSuiteConstructsChildSuites(TestSuite $suite): TestSuite { $this->assertCount(3, $suite->suites); $first = $suite->suites[0]; @@ -82,10 +93,8 @@ public function testMixedSuiteConstructsChildSuites($suite) /** * @depends testMixedSuiteConstructsChildSuites - * - * @param mixed $suite */ - public function testMixedSuiteConstructsTestCases($suite) + public function testMixedSuiteConstructsTestCases(TestSuite $suite): void { $this->assertCount(3, $suite->cases); $first = $suite->cases[0]; @@ -100,35 +109,35 @@ 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'] ); } - public function testSingleSuiteShouldConstructRootSuite() + public function testSingleSuiteShouldConstructRootSuite(): TestSuite { $suites = $this->single->getSuites(); $this->assertCount(1, $suites); @@ -147,21 +156,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]; @@ -176,21 +185,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); @@ -205,7 +214,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()); @@ -214,7 +223,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()); @@ -223,41 +232,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] ); } @@ -265,7 +274,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); @@ -273,60 +282,58 @@ 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; - $casesProcessed = 0; - $feedback = $this->mixed->getFeedback($totalCases, $casesProcessed); + $feedback = $this->mixed->getFeedback(); $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(); - $this->assertFileNotExists($tmp); + $this->assertFileDoesNotExist($tmp); } /** * 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..c4631bd 100644 --- a/test/Unit/Logging/JUnit/WriterTest.php +++ b/test/Unit/Logging/JUnit/WriterTest.php @@ -7,23 +7,29 @@ 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 { + /** @var Writer */ protected $writer; - /** @var LogInterpreter */ protected $interpreter; + /** @var string */ protected $passing; 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 +38,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 +88,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..65ca9b4 100644 --- a/test/Unit/Logging/LogInterpreterTest.php +++ b/test/Unit/Logging/LogInterpreterTest.php @@ -5,11 +5,16 @@ 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; + +use function array_pop; class LogInterpreterTest extends ResultTester { + /** @var LogInterpreter */ protected $interpreter; public function setUp(): void @@ -21,27 +26,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 +56,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 +146,7 @@ public function testGetCasesExtendEmptyCasesFromSuites() } else { $this->assertEquals($case->class, 'DataProviderTest'); } + if ($case->name === 'testNumericDataProvider5 with data set #4') { $this->assertEquals( $case->file, @@ -160,7 +166,10 @@ public function testGetCasesExtendEmptyCasesFromSuites() } } - public function testFlattenCasesReturnsCorrectNumberOfSuites() + /** + * @return TestSuite[] + */ + public function testFlattenCasesReturnsCorrectNumberOfSuites(): array { $suites = $this->interpreter->flattenCases(); $this->assertCount(4, $suites); @@ -169,11 +178,11 @@ public function testFlattenCasesReturnsCorrectNumberOfSuites() } /** - * @depends testFlattenCasesReturnsCorrectNumberOfSuites + * @param TestSuite[] $suites * - * @param mixed $suites + * @depends testFlattenCasesReturnsCorrectNumberOfSuites */ - public function testFlattenedSuiteHasCorrectTotals($suites) + public function testFlattenedSuiteHasCorrectTotals(array $suites): void { $first = $suites[0]; $this->assertEquals('UnitTestWithClassAnnotationTest', $first->name); @@ -188,12 +197,15 @@ public function testFlattenedSuiteHasCorrectTotals($suites) $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/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..17aded3 100644 --- a/test/Unit/Parser/ParsedClassTest.php +++ b/test/Unit/Parser/ParsedClassTest.php @@ -6,10 +6,13 @@ use ParaTest\Parser\ParsedClass; use ParaTest\Parser\ParsedFunction; +use ParaTest\Tests\TestBase; -class ParsedClassTest extends \ParaTest\Tests\TestBase +class ParsedClassTest extends TestBase { + /** @var ParsedClass */ protected $class; + /** @var ParsedFunction[] */ protected $methods; public function setUp(): void @@ -31,31 +34,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 +66,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..f3d15f6 100644 --- a/test/Unit/Parser/ParsedObjectTest.php +++ b/test/Unit/Parser/ParsedObjectTest.php @@ -5,9 +5,11 @@ namespace ParaTest\Tests\Unit\Parser; use ParaTest\Parser\ParsedClass; +use ParaTest\Tests\TestBase; -class ParsedObjectTest extends \ParaTest\Tests\TestBase +class ParsedObjectTest extends TestBase { + /** @var ParsedClass */ protected $parsedClass; public function setUp(): void @@ -15,25 +17,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..c5aecad 100644 --- a/test/Unit/ResultTester.php +++ b/test/Unit/ResultTester.php @@ -6,40 +6,48 @@ 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; + /** @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 { - $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) + public function getSuiteWithResult(string $result, int $methodCount): Suite { - $result = FIXTURES . DS . 'results' . DS . $result; + $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); $suite->setTempFile($result); 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 a96000a..06cb4e6 100644 --- a/test/Unit/Runners/PHPUnit/ConfigurationTest.php +++ b/test/Unit/Runners/PHPUnit/ConfigurationTest.php @@ -4,32 +4,40 @@ 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); } - public function testGetSuitesShouldReturnCorrectNumberOfSuites() + /** + * @return SuitePath[][] + */ + public function testGetSuitesShouldReturnCorrectNumberOfSuites(): array { $suites = $this->config->getSuites(); $this->assertCount(2, $suites); @@ -37,36 +45,20 @@ public function testGetSuitesShouldReturnCorrectNumberOfSuites() return $suites; } - public function testHasSuites() + public function testHasSuites(): void { $actual = $this->config->hasSuites(); $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; - } - /** - * @depends testGetSuitesShouldReturnCorrectNumberOfSuites + * @param SuitePath[][] $suites * - * @param mixed $suites + * @return SuitePath[][] + * + * @depends testGetSuitesShouldReturnCorrectNumberOfSuites */ - public function testSuitesContainSuiteNameAtKey($suites) + public function testSuitesContainSuiteNameAtKey(array $suites): array { $this->assertArrayHasKey('ParaTest Unit Tests', $suites); $this->assertArrayHasKey('ParaTest Functional Tests', $suites); @@ -75,13 +67,13 @@ public function testSuitesContainSuiteNameAtKey($suites) } /** - * @depends testSuitesContainSuiteNameAtKey + * @param SuitePath[][] $suites * - * @param mixed $suites + * @depends testSuitesContainSuiteNameAtKey */ - public function testSuitesContainPathAsValue($suites) + public function testSuitesContainPathAsValue(array $suites): void { - $basePath = getcwd() . DS; + $basePath = getcwd() . DS; $unitSuite = $suites['ParaTest Unit Tests']; $this->assertIsArray($unitSuite); $this->assertCount(1, $unitSuite); @@ -96,7 +88,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()); @@ -104,18 +96,34 @@ public function testGetEnvironmentVariables() $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()); } - public function testLoadConfigEvenIfLibXmlEntityLoaderIsDisabled() + 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(); - $e = null; + $e = null; try { $this->config = new Configuration($this->path); - } catch (\Exception $exc) { + } catch (Throwable $exc) { $e = $exc; } @@ -123,18 +131,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')); + $config = new Configuration(realpath(__DIR__ . '/phpunit-ConfigurationTest.xml')); - $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 c9aa457..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,29 +24,17 @@ public function setUp(): void parent::setUp(); } - public function testConstructor() + public function testConstructor(): void { $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() + public function testGetCommandStringIncludesPassthruOptions(): void { - $options = ['bootstrap' => 'test/bootstrap.php']; - $binary = '/usr/bin/phpunit'; - $passthru = "'--prepend' 'xdebug-filter.php'"; - $passthruPhp = "'-d' 'zend_extension=xdebug.so'"; + $options = ['bootstrap' => 'test' . DS . 'bootstrap.php']; + $binary = '/usr/bin/phpunit'; + $passthru = ['--prepend', 'xdebug-filter.php']; + $passthruPhp = ['-d', 'zend_extension=xdebug.so']; $command = $this->call( $this->executableTestChild, @@ -54,52 +47,77 @@ 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(); + $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() + public function testCommandRedirectsCoverage(): void { - $options = ['a' => 'b', 'coverage-php' => 'target_html', 'coverage-php' => 'target.php']; - $binary = '/usr/bin/phpunit'; + $options = ['a' => 'b', 'coverage-php' => 'target.php']; + $binary = '/usr/bin/phpunit'; - $command = $this->executableTestChild->command($binary, $options); + $command = $this->executableTestChild->command($binary, $options); $coverageFileName = str_replace('/', '\/', $this->executableTestChild->getCoverageFileName()); - $this->assertRegExp("/^'\/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() + 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 0370b9b..8ecf199 100644 --- a/test/Unit/Runners/PHPUnit/OptionsTest.php +++ b/test/Unit/Runners/PHPUnit/OptionsTest.php @@ -5,11 +5,25 @@ namespace ParaTest\Tests\Unit\Runners\PHPUnit; use ParaTest\Runners\PHPUnit\Options; - -class OptionsTest extends \ParaTest\Tests\TestBase +use ParaTest\Tests\TestBase; + +use function chdir; +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 { + /** @var Options */ protected $options; + /** @var array */ protected $unfiltered; + /** @var string */ + private $currentCwd; public function setUp(): void { @@ -21,17 +35,37 @@ public function setUp(): void 'group' => 'group1', 'bootstrap' => '/path/to/bootstrap', ]; - $this->options = new Options($this->unfiltered); - $this->cleanUpConfigurations(); + $this->options = new Options($this->unfiltered); + $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); } - public function testFilteredOptionsShouldContainExtraneousOptions() + private function cleanUpGeneratedFiles(): void + { + foreach (glob(getcwd() . DS . '*') as $file) { + unlink($file); + } + } + + 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 +74,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,87 +95,67 @@ 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'); + $this->assertConfigurationFileFiltered('phpunit-myconfig.xml', getcwd(), 'phpunit-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); } - /** - * 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() - { - 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'); - } - } - - 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 $configFileName - * @param $path - * @param $configurationParameter - */ - private function assertConfigurationFileFiltered($configFileName, $path, $configurationParameter = null) - { - file_put_contents($configFileName, ''); + 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()); + $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 7151a46..82278db 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'; + return __DIR__ . DS . 'phpunit-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,26 +89,32 @@ 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()); $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() + 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", @@ -119,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", @@ -131,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'), @@ -149,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); @@ -165,7 +171,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/", @@ -173,7 +179,7 @@ public function testGetHeader() ); } - public function testGetErrorsSingleError() + public function testGetErrorsSingleError(): void { $this->printer->addTest($this->errorSuite) ->addTest($this->failureSuite); @@ -182,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"; @@ -190,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); @@ -199,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"; @@ -210,7 +216,7 @@ public function testGetErrorsMultipleErrors() $this->assertEquals($eq, $errors); } - public function testGetFailures() + public function testGetFailures(): void { $this->printer->addTest($this->mixedSuite); @@ -218,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"; @@ -229,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); @@ -238,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); @@ -257,7 +263,7 @@ public function testGetFooterWithSuccess() $this->assertEquals($eq, $footer); } - public function testPrintFeedbackForMixed() + public function testPrintFeedbackForMixed(): void { $this->printer->addTest($this->mixedSuite); ob_start(); @@ -266,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) { @@ -283,21 +289,31 @@ public function testPrintFeedbackForMoreThan100Suites() for ($i = 0; $i < 40; ++$i) { $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); } - public function testResultPrinterAdjustsTotalCountForDataProviders() + public function testResultPrinterAdjustsTotalCountForDataProviders(): void { //add tests for ($i = 0; $i < 22; ++$i) { @@ -314,36 +330,46 @@ public function testResultPrinterAdjustsTotalCountForDataProviders() for ($i = 0; $i < 22; ++$i) { $this->printer->printFeedback($this->passingSuiteWithWrongTestCountEstimation); } + $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); } - protected function getStartOutput(Options $options) + protected function getStartOutput(Options $options): string { 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..6ac55b0 100644 --- a/test/Unit/Runners/PHPUnit/RunnerTest.php +++ b/test/Unit/Runners/PHPUnit/RunnerTest.php @@ -8,22 +8,25 @@ 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 { + /** @var Runner */ protected $runner; - protected $files; - protected $testDir; 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 +42,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 +63,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 +71,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 +79,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 +87,7 @@ public function testGetNextAvailableTokenReturnsFalseWhenNoTokensAreAvailable() $this->assertFalse($tokenData); } - public function testReleaseTokenMakesTokenAvailable() + public function testReleaseTokenMakesTokenAvailable(): void { $tokens = [ 0 => ['token' => 0, 'unique' => uniqid(), 'available' => false], @@ -92,7 +95,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..f80400b 100644 --- a/test/Unit/Runners/PHPUnit/SuiteLoaderTest.php +++ b/test/Unit/Runners/PHPUnit/SuiteLoaderTest.php @@ -4,47 +4,57 @@ 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; +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 +62,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 +76,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 +90,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 +104,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,137 +118,142 @@ 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)); } - protected function getLoadedPaths($path, $loader = null) + /** + * @return string[] + */ + protected function getLoadedPaths(string $path, ?SuiteLoader $loader = null): array { $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() + /** + * @return ExecutableTest[] + */ + public function testLoadDirGetsPathOfAllTestsWithKeys(): array { - $path = $this->fixture('passing-tests'); + $path = $this->fixture('passing-tests'); $files = $this->findTests($path); $loader = new SuiteLoader(); @@ -252,13 +267,13 @@ public function testLoadDirGetsPathOfAllTestsWithKeys() } /** - * @depends testLoadDirGetsPathOfAllTestsWithKeys + * @param ExecutableTest[] $paraSuites * - * @param mixed $paraSuites + * @depends testLoadDirGetsPathOfAllTestsWithKeys */ - public function testFirstParallelSuiteHasCorrectFunctions($paraSuites) + public function testFirstParallelSuiteHasCorrectFunctions(array $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()); @@ -268,32 +283,38 @@ public function testFirstParallelSuiteHasCorrectFunctions($paraSuites) $this->assertEquals('testAddition', $functions[4]->getName()); } - private function suiteByPath($path, array $paraSuites) + /** + * @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; } } - throw new \RuntimeException("Suite $path not found."); + + throw new RuntimeException("Suite $path not found."); } /** - * @depends testLoadDirGetsPathOfAllTestsWithKeys + * @param ExecutableTest[] $paraSuites * - * @param mixed $paraSuites + * @depends testLoadDirGetsPathOfAllTestsWithKeys */ - public function testSecondParallelSuiteHasCorrectFunctions($paraSuites) + public function testSecondParallelSuiteHasCorrectFunctions(array $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 +323,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 +334,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..416575a 100644 --- a/test/Unit/Runners/PHPUnit/SuiteTest.php +++ b/test/Unit/Runners/PHPUnit/SuiteTest.php @@ -5,9 +5,11 @@ 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 { + /** @var Suite */ protected $suite; public function setUp(): void @@ -15,7 +17,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 new file mode 100644 index 0000000..93d4909 --- /dev/null +++ b/test/Unit/Runners/PHPUnit/WrapperRunnerTest.php @@ -0,0 +1,22 @@ +expectException(RuntimeException::class); + + new WrapperRunner(); + } +} 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/Unit/Util/StrTest.php b/test/Unit/Util/StrTest.php index e497d41..aa0669f 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); @@ -23,7 +24,10 @@ public function testExplodeWithCleanup(string $delimiter, string $valueString, a $this->assertEquals($expected, $actual); } - public function explodeWithCleanupDataProvider() + /** + * @return array> + */ + public function explodeWithCleanupDataProvider(): array { return [ 'default' => [ 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..917bfd2 --- /dev/null +++ b/test/constants.php @@ -0,0 +1,15 @@ +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 => + 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, + ), +); +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 ( + '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, + ), +)); + +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 new file mode 100644 index 0000000..5f9b888 --- /dev/null +++ b/test/fixtures/coverage-tests/runner_test-windows.cov @@ -0,0 +1,3871 @@ +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 => + 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, + ), +); +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 ( + '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, + ), +)); + +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 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 9cd3a13..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 403abee..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 bfd0f1f..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 396c25f..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 00b3801..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 7cef19e..988f68e 100644 --- a/test/fixtures/passing-tests/GroupsTest.php +++ b/test/fixtures/passing-tests/GroupsTest.php @@ -1,14 +1,16 @@ 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/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" > 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); }