diff --git a/src/Util/Help.php b/src/Util/Help.php index 5c25bf1fbd4..230a48cb58b 100644 --- a/src/Util/Help.php +++ b/src/Util/Help.php @@ -139,10 +139,17 @@ class Help */ private $hasColor = false; - public function __construct() + public function __construct(?int $width = null, ?bool $withColor = null) { - $console = new Console(); - $this->hasColor = $console->hasColorSupport(); + if ($width === null || $withColor === null) { + $console = new Console(); + } + + if ($withColor === null) { + $this->hasColor = $console->hasColorSupport(); + } else { + $this->hasColor = $withColor; + } foreach (self::HELP_TEXT as $section => $options) { foreach ($options as $option) { @@ -152,7 +159,12 @@ public function __construct() } } - $this->maxDescLength = $console->getNumberOfColumns() - $this->maxArgLength - 4; + if ($width === null) { + $this->maxDescLength = $console->getNumberOfColumns() - $this->maxArgLength - 4; + } else { + // The 76 is based on the width=80 used elsewhere in the code minus the margins=4 + $this->maxDescLength = 76 - $this->maxArgLength; + } } /** diff --git a/tests/end-to-end/cli/_files/output-cli-help-color.txt b/tests/end-to-end/cli/_files/output-cli-help-color.txt new file mode 100644 index 00000000000..41404ed3a1e --- /dev/null +++ b/tests/end-to-end/cli/_files/output-cli-help-color.txt @@ -0,0 +1,109 @@ +Usage: + phpunit [options] UnitTest [UnitTest.php] + phpunit [options] + +Code Coverage Options: + --coverage-clover   Generate code coverage report in Clover XML + format + --coverage-crap4j   Generate code coverage report in Crap4J XML + format + --coverage-html   Generate code coverage report in HTML format + --coverage-php   Export PHP_CodeCoverage object to file + --coverage-text=  Generate code coverage report in text format + [default: standard output] + --coverage-xml   Generate code coverage report in PHPUnit XML + format + --whitelist   Whitelist for code coverage analysis + --disable-coverage-ignore  Disable annotations for ignoring code coverage + --no-coverage  Ignore code coverage configuration + --dump-xdebug-filter  Generate script to set Xdebug code coverage + filter + +Logging Options: + --log-junit   Log test execution in JUnit XML format to file + --log-teamcity   Log test execution in TeamCity format to file + --testdox-html   Write agile documentation in HTML format to file + --testdox-text   Write agile documentation in Text format to file + --testdox-xml   Write agile documentation in XML format to file + --reverse-list  Print defects in reverse order + +Test Selection Options: + --filter   Filter which tests to run + --testsuite   Filter which testsuite to run + --group   Only runs tests from the specified group(s) + --exclude-group   Exclude tests from the specified group(s) + --list-groups  List available test groups + --list-suites  List available test suites + --list-tests  List available tests + --list-tests-xml   List available tests in XML format + --test-suffix   Only search for test in files with specified + suffix(es). Default: Test.php,.phpt + +Test Execution Options: + --dont-report-useless-tests Do not report tests that do not test anything + --strict-coverage  Be strict about @covers annotation usage + --strict-global-state  Be strict about changes to global state + --disallow-test-output  Be strict about output during tests + --disallow-resource-usage  Be strict about resource usage during small tests + --enforce-time-limit  Enforce time limit based on test size + --default-time-limit=  Timeout in seconds for tests without @small, + @medium or @large + --disallow-todo-tests  Disallow @todo-annotated tests + + --process-isolation  Run each test in a separate PHP process + --globals-backup  Backup and restore $GLOBALS for each test + --static-backup  Backup and restore static attributes for each + test + + --colors=  Use colors in output ("never", "auto" or + "always") + --columns   Number of columns to use for progress output + --columns max  Use maximum number of columns for progress output + --stderr  Write to STDERR instead of STDOUT + --stop-on-defect  Stop execution upon first not-passed test + --stop-on-error  Stop execution upon first error + --stop-on-failure  Stop execution upon first error or failure + --stop-on-warning  Stop execution upon first warning + --stop-on-risky  Stop execution upon first risky test + --stop-on-skipped  Stop execution upon first skipped test + --stop-on-incomplete  Stop execution upon first incomplete test + --fail-on-warning  Treat tests with warnings as failures + --fail-on-risky  Treat risky tests as failures + -v|--verbose  Output more verbose information + --debug  Display debugging information + + --loader   TestSuiteLoader implementation to use + --repeat   Runs the test(s) repeatedly + --teamcity  Report test execution progress in TeamCity format + --testdox  Report test execution progress in TestDox format + --testdox-group  Only include tests from the specified group(s) + --testdox-exclude-group  Exclude tests from the specified group(s) + --printer   TestListener implementation to use + + --order-by=  Run tests in order: + default|reverse|random|defects|no-depends + --random-order-seed=  Use a specific random seed for random order + --cache-result  Write test results to cache file + --do-not-cache-result  Do not write test results to cache file + +Configuration Options: + --prepend   A PHP script that is included as early as + possible + --bootstrap   A PHP script that is included before the tests + run + -c|--configuration   Read configuration from XML file + --no-configuration  Ignore default configuration file (phpunit.xml) + --no-logging  Ignore logging configuration + --no-extensions  Do not load PHPUnit extensions + --include-path   Prepend PHP's include_path with given path(s) + -d   Sets a php.ini value + --generate-configuration  Generate configuration file with suggested + settings + --cache-result-file=  Specify result cache path and filename + +Miscellaneous Options: + -h|--help  Prints this usage information + --version  Prints the version and exits + --atleast-version   Checks that version is greater than min and exits + --check-version  Check whether PHPUnit is the latest version + diff --git a/tests/end-to-end/cli/help-color.phpt b/tests/end-to-end/cli/help-color.phpt new file mode 100644 index 00000000000..58f6377da4c --- /dev/null +++ b/tests/end-to-end/cli/help-color.phpt @@ -0,0 +1,11 @@ +--TEST-- +phpunit --help +--ARGS-- +--no-configuration --help +--FILE-- +writeToConsole(); +--EXPECTF_EXTERNAL-- +_files/output-cli-help-color.txt