#!/usr/bin/env php ] [file...]' . PHP_EOL; echo 'Description:' . PHP_EOL; echo ' Launches the test suite for Tecnickcom\'s TCPDF.' . PHP_EOL; echo 'Supported environment variables:' . PHP_EOL; echo ' PHP_BINARY Path to php executable to use.' . PHP_EOL; echo ' PDFINFO_BINARY Path to pdfinfo executable to use.' . PHP_EOL; echo ' For more information on pdfinfo, visit https://www.xpdfreader.com/' . PHP_EOL; echo 'Arguments:' . PHP_EOL; echo ' file' . PHP_EOL; echo ' Test file(s) to run. If not provided all the tests are considered for the run.' . PHP_EOL; echo ' Usage example:' . PHP_EOL; echo ' php launch.php example_001.php barcodes/example_1d_html.php' . PHP_EOL; echo 'Options:' . PHP_EOL; echo ' -c, --clean-up' . PHP_EOL; echo ' Clean up generated files.' . PHP_EOL; echo ' The default is to NOT clean up if the -o option is provided,' . PHP_EOL; echo ' and to clean up if the -o option is NOT provided.' . PHP_EOL; echo ' -o , --output-dir=' . PHP_EOL; echo ' The folder in which files should be generated.' . PHP_EOL; echo ' Default is to create a folder in the system\'s temporary folder.' . PHP_EOL; echo ' --group=' . PHP_EOL; echo ' Filter the tests to run based on the @group annotation present in the file.' . PHP_EOL; echo ' --stop-on-defect' . PHP_EOL; echo ' Stop execution upon first not-passed test.' . PHP_EOL; echo ' -v, --verbose' . PHP_EOL; echo ' Outputs more information.' . PHP_EOL; echo ' -h, --help' . PHP_EOL; echo ' Prints this message.' . PHP_EOL; } if (false === $options || array_key_exists('h', $options) || array_key_exists('help', $options)) { printLaunchHelp(); exit(false === $options ? -1 : 0); } if (!empty($options['o'])) { $outputDir = $options['o']; } if (!empty($options['output-dir'])) { $outputDir = $options['output-dir']; } if (array_key_exists('c', $options) || array_key_exists('clean-up', $options)) { $preserveOutputFiles = false; } elseif (isset($outputDir)) { $preserveOutputFiles = true; } else { $preserveOutputFiles = false; } $stopOn = array(); if (array_key_exists('stop-on-defect', $options)) { $stopOn[] = 'defect'; } $verbose = array_key_exists('v', $options) || array_key_exists('verbose', $options); $groups = array(); if (!empty($options['group'])) { if (is_array($options['group'])) { $groups = $options['group']; } else { $groups = explode(',', $options['group']); } } $isBinaryLocatorAvailable = class_exists('\LocateBinaries\LocateBinaries'); $pdfinfo = getenv('PDFINFO_BINARY'); if (empty($pdfinfo)) { $paths = ($isBinaryLocatorAvailable) ? LocateBinaries::locateInstalledBinaries('pdfinfo') : array(); if (empty($paths)) { echo 'pdfinfo could not be located.' . PHP_EOL; echo 'Please set the PDFINFO_BINARY environment variable.' . PHP_EOL; if (!$isBinaryLocatorAvailable) { echo 'You could install rosell-dk/locate-binaries via composer to detect binaries.' . PHP_EOL; } exit(-1); } $pdfinfo = reset($paths); } $pdfTools = new PdfTools(array('pdfinfo' => $pdfinfo), $verbose); echo 'pdfinfo: ' . $pdfinfo . PHP_EOL; echo 'pdfinfo version: ' . $pdfTools->getPdfinfoVersionInfo() . PHP_EOL; echo PHP_EOL; // Allows you to use PHP_BINARY=/usr/bin/php5.3 php ./tests/launch.php $phpBinary = getenv('PHP_BINARY'); if (empty($phpBinary)) { // PHP_BINARY only exists since PHP 5.4 if (defined('PHP_BINARY')) { $phpBinary = PHP_BINARY; } else { $paths = ($isBinaryLocatorAvailable) ? LocateBinaries::locateInstalledBinaries('php') : array(); if (empty($paths)) { echo 'php could not be located. Please set PHP_BINARY environment variable.' . PHP_EOL; if (!$isBinaryLocatorAvailable) { echo 'You could install rosell-dk/locate-binaries via composer to detect binaries.' . PHP_EOL; } exit(-1); } $phpBinary = reset($paths); } } $isWindows = (stripos(PHP_OS, 'WIN') === 0); $phpExecutor = new PhpExecutor($phpBinary, $verbose); echo 'PHP: ' . ((string)$phpExecutor) . PHP_EOL; echo 'PHP version: ' . $phpExecutor->getPhpVersionInfo() . PHP_EOL; echo PHP_EOL; /** * Map of extension availability. * Possible values: * - true: built in PHP, * - false: available, * - null: not available (not detected). */ $phpExtensions = array( 'bcmath' => null, 'gd' => null, 'imagick' => null, 'json' => null, 'openssl' => null, 'xml' => null, ); $phpExtensionDir = $phpExecutor->getPhpExtensionDir(); echo 'PHP extension folder: ' . $phpExtensionDir . PHP_EOL; if (strpos($phpExtensionDir, ' ') !== false) { echo "WARNING: Spaces in extension_dir might cause problems." . PHP_EOL; if ($isWindows) { echo " You should use `dir /x` to get the short name of the path," . PHP_EOL; echo " then adjust the extension_dir option of your php.ini file." . PHP_EOL; } if (!in_array('defect', $stopOn, true)) { $stopOn[] = 'defect'; echo " --stop-on-defect as been forced to avoid too many failing tests." . PHP_EOL; } } echo 'Extensions:' . PHP_EOL; foreach ($phpExtensions as $extension => $_) { $status = $phpExecutor->getExtensionStatus($extension); $phpExtensions[$extension] = $status; echo " $extension: "; if (true === $status) { echo 'BUILT-IN'; } elseif (false === $status) { echo 'AVAILABLE'; } else { echo 'NO'; } echo PHP_EOL; } if (null === $phpExtensions['gd'] && null === $phpExtensions['imagick']) { echo 'gd or imagick extension required.' . PHP_EOL; echo 'Exit code: 1' . PHP_EOL; exit(1); } if (null === $phpExtensions['openssl']) { echo 'openssl extension required.' . PHP_EOL; echo 'Exit code: 1' . PHP_EOL; exit(1); } echo PHP_EOL; $rootDir = dirname(realpath(__DIR__)) . DIRECTORY_SEPARATOR; echo "Root folder: $rootDir" . PHP_EOL; $isGeneratedTempDir = false; if (!isset($outputDir)) { echo PHP_EOL; echo "The --output-dir option was not used, a temporary folder will be necessary." . PHP_EOL; try { $outputDir = \Cs278\Mktemp\temporaryDir('TCPDF-tests.XXXXXXXXX') . DIRECTORY_SEPARATOR; } catch (\Exception $e) { echo $e->getMessage(); exit(-1); } $isGeneratedTempDir = true; } if (!is_dir(realpath($outputDir))) { echo "Could not find output folder: $outputDir" . PHP_EOL; exit(-1); } $outputDir = realpath($outputDir); echo "Output folder: $outputDir" . PHP_EOL; echo PHP_EOL; $testsDir = $rootDir . 'tests' . DIRECTORY_SEPARATOR; echo "Test folder: $testsDir" . PHP_EOL; $testExecutor = new TestExecutor( $phpExecutor, array_keys($phpExtensions), $pdfTools, $outputDir, $testsDir, $verbose ); // Files that should be excluded from the test suite $ignored = array( 'example_006.php', ); // Check if the script is run for specific test files $requestedTests = array(); foreach (array_reverse($argv) as $value) { // This is a crude way to work around how getopt() parses arguments to script if (preg_match('~^(barcodes/)?example_\d[\d_a-z]+\.php$~', $value)) { $requestedTests[] = $value; } } $testRunner = new TestRunner($rootDir . 'examples'); $passed = $testRunner ->withTestExecutor($testExecutor) ->preserveOutputFiles($preserveOutputFiles) ->excludeTests($ignored) ->only($requestedTests) ->filterByGroup($groups) ->stopOn($stopOn) ->runTests($outputDir) ; if (!$preserveOutputFiles && $isGeneratedTempDir) { rmdir($outputDir); } // Final result $testRunner->printSummary(); $exitCode = (!$passed) ? 1 : 0; echo 'Exit code: ' . $exitCode . PHP_EOL; exit($exitCode);