Fixes Issue #13184 - incremental output getters now return empty strings
This commit is contained in:
parent
a609ca0bd0
commit
3c608ebc29
@ -401,6 +401,11 @@ class Process
|
|||||||
$data = $this->getOutput();
|
$data = $this->getOutput();
|
||||||
|
|
||||||
$latest = substr($data, $this->incrementalOutputOffset);
|
$latest = substr($data, $this->incrementalOutputOffset);
|
||||||
|
|
||||||
|
if (false === $latest) {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
$this->incrementalOutputOffset = strlen($data);
|
$this->incrementalOutputOffset = strlen($data);
|
||||||
|
|
||||||
return $latest;
|
return $latest;
|
||||||
@ -442,6 +447,11 @@ class Process
|
|||||||
$data = $this->getErrorOutput();
|
$data = $this->getErrorOutput();
|
||||||
|
|
||||||
$latest = substr($data, $this->incrementalErrorOutputOffset);
|
$latest = substr($data, $this->incrementalErrorOutputOffset);
|
||||||
|
|
||||||
|
if (false === $latest) {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
$this->incrementalErrorOutputOffset = strlen($data);
|
$this->incrementalErrorOutputOffset = strlen($data);
|
||||||
|
|
||||||
return $latest;
|
return $latest;
|
||||||
|
@ -276,6 +276,37 @@ abstract class AbstractProcessTest extends \PHPUnit_Framework_TestCase
|
|||||||
unlink($lock);
|
unlink($lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testGetEmptyIncrementalErrorOutput()
|
||||||
|
{
|
||||||
|
// use a lock file to toggle between writing ("W") and reading ("R") the
|
||||||
|
// output stream
|
||||||
|
$lock = tempnam(sys_get_temp_dir(), get_class($this).'Lock');
|
||||||
|
file_put_contents($lock, 'W');
|
||||||
|
|
||||||
|
$p = $this->getProcess(sprintf('php -r %s', escapeshellarg('$n = 0; while ($n < 3) { if (\'W\' === file_get_contents('.var_export($lock, true).')) { file_put_contents(\'php://stderr\', \'ERROR\'); $n++; file_put_contents('.var_export($lock, true).', \'R\'); } usleep(100); }')));
|
||||||
|
|
||||||
|
$p->start();
|
||||||
|
|
||||||
|
$shouldWrite = false;
|
||||||
|
|
||||||
|
while ($p->isRunning()) {
|
||||||
|
if ('R' === file_get_contents($lock)) {
|
||||||
|
if (!$shouldWrite) {
|
||||||
|
$this->assertLessThanOrEqual(1, preg_match_all('/ERROR/', $p->getIncrementalOutput(), $matches));
|
||||||
|
$shouldWrite = true;
|
||||||
|
} else {
|
||||||
|
$this->assertSame('', $p->getIncrementalOutput());
|
||||||
|
|
||||||
|
file_put_contents($lock, 'W');
|
||||||
|
$shouldWrite = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
usleep(100);
|
||||||
|
}
|
||||||
|
|
||||||
|
unlink($lock);
|
||||||
|
}
|
||||||
|
|
||||||
public function testGetOutput()
|
public function testGetOutput()
|
||||||
{
|
{
|
||||||
$p = $this->getProcess(sprintf('php -r %s', escapeshellarg('$n = 0; while ($n < 3) { echo \' foo \'; $n++; }')));
|
$p = $this->getProcess(sprintf('php -r %s', escapeshellarg('$n = 0; while ($n < 3) { echo \' foo \'; $n++; }')));
|
||||||
@ -305,6 +336,37 @@ abstract class AbstractProcessTest extends \PHPUnit_Framework_TestCase
|
|||||||
unlink($lock);
|
unlink($lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testGetEmptyIncrementalOutput()
|
||||||
|
{
|
||||||
|
// use a lock file to toggle between writing ("W") and reading ("R") the
|
||||||
|
// output stream
|
||||||
|
$lock = tempnam(sys_get_temp_dir(), get_class($this).'Lock');
|
||||||
|
file_put_contents($lock, 'W');
|
||||||
|
|
||||||
|
$p = $this->getProcess(sprintf('php -r %s', escapeshellarg('$n = 0; while ($n < 3) { if (\'W\' === file_get_contents('.var_export($lock, true).')) { echo \' foo \'; $n++; file_put_contents('.var_export($lock, true).', \'R\'); } usleep(100); }')));
|
||||||
|
|
||||||
|
$p->start();
|
||||||
|
|
||||||
|
$shouldWrite = false;
|
||||||
|
|
||||||
|
while ($p->isRunning()) {
|
||||||
|
if ('R' === file_get_contents($lock)) {
|
||||||
|
if (!$shouldWrite) {
|
||||||
|
$this->assertLessThanOrEqual(1, preg_match_all('/foo/', $p->getIncrementalOutput(), $matches));
|
||||||
|
$shouldWrite = true;
|
||||||
|
} else {
|
||||||
|
$this->assertSame('', $p->getIncrementalOutput());
|
||||||
|
|
||||||
|
file_put_contents($lock, 'W');
|
||||||
|
$shouldWrite = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
usleep(100);
|
||||||
|
}
|
||||||
|
|
||||||
|
unlink($lock);
|
||||||
|
}
|
||||||
|
|
||||||
public function testZeroAsOutput()
|
public function testZeroAsOutput()
|
||||||
{
|
{
|
||||||
if ('\\' === DIRECTORY_SEPARATOR) {
|
if ('\\' === DIRECTORY_SEPARATOR) {
|
||||||
|
Reference in New Issue
Block a user