This repository has been archived by the owner on Jun 25, 2018. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
init test with phpunit on travis - bis
- Loading branch information
1 parent
49a048f
commit 2c2bdf3
Showing
2 changed files
with
205 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,205 @@ | ||
#!/usr/bin/env php | ||
<?php | ||
|
||
/* | ||
* This file is part of the Symfony package. | ||
* | ||
* (c) Fabien Potencier <fabien@symfony.com> | ||
* | ||
* For the full copyright and license information, please view the LICENSE | ||
* file that was distributed with this source code. | ||
*/ | ||
|
||
// Please update when phpunit needs to be reinstalled with fresh deps: | ||
// Cache-Id-Version: 2016-03-25 09:45 UTC | ||
|
||
use Symfony\Component\Process\ProcessUtils; | ||
|
||
error_reporting(-1); | ||
require __DIR__.'/src/Symfony/Component/Process/ProcessUtils.php'; | ||
|
||
// PHPUnit 4.8 does not support PHP 7, while 5.1 requires PHP 5.6+ | ||
$PHPUNIT_VERSION = PHP_VERSION_ID >= 50600 ? '5.1' : '4.8'; | ||
$PHPUNIT_DIR = __DIR__.'/.phpunit'; | ||
$PHP = defined('PHP_BINARY') ? PHP_BINARY : 'php'; | ||
$PHP = ProcessUtils::escapeArgument($PHP); | ||
if ('phpdbg' === PHP_SAPI) { | ||
$PHP .= ' -qrr'; | ||
} | ||
|
||
$COMPOSER = file_exists($COMPOSER = __DIR__.'/composer.phar') || ($COMPOSER = rtrim('\\' === DIRECTORY_SEPARATOR ? preg_replace('/[\r\n].*/', '', `where.exe composer.phar`) : `which composer.phar`)) | ||
? $PHP.' '.ProcessUtils::escapeArgument($COMPOSER) | ||
: 'composer'; | ||
|
||
if (!file_exists("$PHPUNIT_DIR/phpunit-$PHPUNIT_VERSION/phpunit") || md5_file(__FILE__) !== @file_get_contents("$PHPUNIT_DIR/.$PHPUNIT_VERSION.md5")) { | ||
// Build a standalone phpunit without symfony/yaml | ||
|
||
$oldPwd = getcwd(); | ||
@mkdir($PHPUNIT_DIR); | ||
chdir($PHPUNIT_DIR); | ||
if (file_exists("phpunit-$PHPUNIT_VERSION")) { | ||
passthru(sprintf('\\' === DIRECTORY_SEPARATOR ? '(del /S /F /Q %s & rmdir %1$s) >nul': 'rm -rf %s', "phpunit-$PHPUNIT_VERSION")); | ||
} | ||
if (extension_loaded('openssl') && ini_get('allow_url_fopen')) { | ||
stream_copy_to_stream(fopen("https://github.com/sebastianbergmann/phpunit/archive/$PHPUNIT_VERSION.zip", 'rb'), fopen("$PHPUNIT_VERSION.zip", 'wb')); | ||
} else { | ||
@unlink("$PHPUNIT_VERSION.zip"); | ||
passthru("wget https://github.com/sebastianbergmann/phpunit/archive/$PHPUNIT_VERSION.zip"); | ||
} | ||
$zip = new ZipArchive(); | ||
$zip->open("$PHPUNIT_VERSION.zip"); | ||
$zip->extractTo(getcwd()); | ||
$zip->close(); | ||
chdir("phpunit-$PHPUNIT_VERSION"); | ||
passthru("$COMPOSER remove --no-update symfony/yaml"); | ||
passthru("$COMPOSER require --dev --no-update symfony/phpunit-bridge \">=3.1@dev\""); | ||
passthru("$COMPOSER install --prefer-dist --no-progress --ansi", $exit); | ||
if ($exit) { | ||
exit($exit); | ||
} | ||
file_put_contents('phpunit', <<<'EOPHP' | ||
<?php | ||
define('PHPUNIT_COMPOSER_INSTALL', __DIR__.'/vendor/autoload.php'); | ||
$loader = require PHPUNIT_COMPOSER_INSTALL; | ||
if (getenv('SYMFONY_PHPUNIT_OVERLOAD') && file_exists(__DIR__.'/../../src/Symfony/Bridge/PhpUnit')) { | ||
$loader->addPsr4('Symfony\\Bridge\\PhpUnit\\', array('src/Symfony/Bridge/PhpUnit'), true); | ||
} | ||
unset($loader); | ||
Symfony\Bridge\PhpUnit\TextUI\Command::main(); | ||
|
||
EOPHP | ||
); | ||
chdir('..'); | ||
file_put_contents(".$PHPUNIT_VERSION.md5", md5_file(__FILE__)); | ||
chdir($oldPwd); | ||
|
||
} | ||
|
||
$cmd = array_map('Symfony\Component\Process\ProcessUtils::escapeArgument', $argv); | ||
$exit = 0; | ||
|
||
if (isset($argv[1]) && 'symfony' === $argv[1]) { | ||
array_shift($cmd); | ||
} | ||
|
||
$cmd[0] = sprintf('%s %s --colors=always', $PHP, ProcessUtils::escapeArgument("$PHPUNIT_DIR/phpunit-$PHPUNIT_VERSION/phpunit")); | ||
$cmd = str_replace('%', '%%', implode(' ', $cmd)).' %1$s'; | ||
|
||
if ('\\' === DIRECTORY_SEPARATOR) { | ||
$cmd = 'cmd /v:on /d /c "('.$cmd.')%2$s"'; | ||
} else { | ||
$cmd .= '%2$s'; | ||
} | ||
|
||
if (isset($argv[1]) && 'symfony' === $argv[1]) { | ||
// Find Symfony components in plain php for Windows portability | ||
|
||
$oldPwd = getcwd(); | ||
chdir(__DIR__); | ||
$finder = new RecursiveDirectoryIterator('src/Symfony', FilesystemIterator::KEY_AS_FILENAME | FilesystemIterator::UNIX_PATHS); | ||
$finder = new RecursiveIteratorIterator($finder); | ||
$finder->setMaxDepth(3); | ||
|
||
$skippedTests = isset($_SERVER['SYMFONY_PHPUNIT_SKIPPED_TESTS']) ? $_SERVER['SYMFONY_PHPUNIT_SKIPPED_TESTS'] : false; | ||
$runningProcs = array(); | ||
|
||
foreach ($finder as $file => $fileInfo) { | ||
if ('phpunit.xml.dist' === $file) { | ||
$component = dirname($fileInfo->getPathname()); | ||
|
||
// Run phpunit tests in parallel | ||
|
||
if ($skippedTests) { | ||
putenv("SYMFONY_PHPUNIT_SKIPPED_TESTS=$component/$skippedTests"); | ||
} | ||
|
||
$c = ProcessUtils::escapeArgument($component); | ||
|
||
if ($proc = proc_open(sprintf($cmd, $c, " > $c/phpunit.stdout 2> $c/phpunit.stderr"), array(), $pipes)) { | ||
$runningProcs[$component] = $proc; | ||
} else { | ||
$exit = 1; | ||
echo "\033[41mKO\033[0m $component\n\n"; | ||
} | ||
} | ||
} | ||
chdir($oldPwd); | ||
|
||
// Fixes for colors support on appveyor | ||
// See https://github.com/appveyor/ci/issues/373 | ||
$colorFixes = array( | ||
array("S\033[0m\033[0m\033[36m\033[1mS", "E\033[0m\033[0m\033[31m\033[1mE", "I\033[0m\033[0m\033[33m\033[1mI", "F\033[0m\033[0m\033[41m\033[37mF"), | ||
array("SS", "EE", "II", "FF"), | ||
); | ||
$colorFixes[0] = array_merge($colorFixes[0], $colorFixes[0]); | ||
$colorFixes[1] = array_merge($colorFixes[1], $colorFixes[1]); | ||
|
||
while ($runningProcs) { | ||
usleep(300000); | ||
$terminatedProcs = array(); | ||
foreach ($runningProcs as $component => $proc) { | ||
$procStatus = proc_get_status($proc); | ||
if (!$procStatus['running']) { | ||
$terminatedProcs[$component] = $procStatus['exitcode']; | ||
unset($runningProcs[$component]); | ||
proc_close($proc); | ||
} | ||
} | ||
|
||
foreach ($terminatedProcs as $component => $procStatus) { | ||
foreach (array('out', 'err') as $file) { | ||
$file = "$component/phpunit.std$file"; | ||
|
||
if ('\\' === DIRECTORY_SEPARATOR) { | ||
$h = fopen($file, 'rb'); | ||
while (false !== $line = fgets($h)) { | ||
echo str_replace($colorFixes[0], $colorFixes[1], preg_replace( | ||
'/(\033\[[0-9]++);([0-9]++m)(?:(.)(\033\[0m))?/', | ||
"$1m\033[$2$3$4$4", | ||
$line | ||
)); | ||
} | ||
fclose($h); | ||
} else { | ||
readfile($file); | ||
} | ||
unlink($file); | ||
} | ||
|
||
// Fail on any individual component failures but ignore STATUS_STACK_BUFFER_OVERRUN (-1073740791/0xC0000409) and STATUS_ACCESS_VIOLATION (-1073741819/0xC0000005) on Windows when APCu is enabled | ||
if ($procStatus && ('\\' !== DIRECTORY_SEPARATOR || !extension_loaded('apcu') || !ini_get('apc.enable_cli') || (-1073740791 !== $procStatus && -1073741819 !== $procStatus))) { | ||
$exit = $procStatus; | ||
echo "\033[41mKO\033[0m $component\n\n"; | ||
} else { | ||
echo "\033[32mOK\033[0m $component\n\n"; | ||
} | ||
} | ||
} | ||
} elseif (!isset($argv[1]) || 'install' !== $argv[1]) { | ||
// Run regular phpunit in a subprocess | ||
|
||
$errFile = tempnam(sys_get_temp_dir(), 'phpunit.stderr.'); | ||
if ($proc = proc_open(sprintf($cmd, '', ' 2> '.ProcessUtils::escapeArgument($errFile)), array(1 => array('pipe', 'w')), $pipes)) { | ||
stream_copy_to_stream($pipes[1], STDOUT); | ||
fclose($pipes[1]); | ||
$exit = proc_close($proc); | ||
|
||
readfile($errFile); | ||
unlink($errFile); | ||
} | ||
|
||
if (!file_exists($component = array_pop($argv))) { | ||
$component = basename(getcwd()); | ||
} | ||
|
||
if ($exit) { | ||
echo "\033[41mKO\033[0m $component\n\n"; | ||
} else { | ||
echo "\033[32mOK\033[0m $component\n\n"; | ||
} | ||
} | ||
|
||
exit($exit); |
File renamed without changes.