Blame | Last modification | View Log | Download
<?php/** This file is part of PHPUnit.** (c) Sebastian Bergmann <sebastian@phpunit.de>** For the full copyright and license information, please view the LICENSE* file that was distributed with this source code.*//*** Utility class that can print to STDOUT or write to a file.*/class PHPUnit_Util_Printer{/*** If true, flush output after every write.** @var bool*/protected $autoFlush = false;/*** @var resource*/protected $out;/*** @var string*/protected $outTarget;/*** Constructor.** @param mixed $out** @throws PHPUnit_Framework_Exception*/public function __construct($out = null){if ($out !== null) {if (is_string($out)) {if (strpos($out, 'socket://') === 0) {$out = explode(':', str_replace('socket://', '', $out));if (count($out) != 2) {throw new PHPUnit_Framework_Exception;}$this->out = fsockopen($out[0], $out[1]);} else {if (strpos($out, 'php://') === false &&!is_dir(dirname($out))) {mkdir(dirname($out), 0777, true);}$this->out = fopen($out, 'wt');}$this->outTarget = $out;} else {$this->out = $out;}}}/*** Flush buffer and close output if it's not to a PHP stream*/public function flush(){if ($this->out && strncmp($this->outTarget, 'php://', 6) !== 0) {fclose($this->out);}}/*** Performs a safe, incremental flush.** Do not confuse this function with the flush() function of this class,* since the flush() function may close the file being written to, rendering* the current object no longer usable.*/public function incrementalFlush(){if ($this->out) {fflush($this->out);} else {flush();}}/*** @param string $buffer*/public function write($buffer){if ($this->out) {fwrite($this->out, $buffer);if ($this->autoFlush) {$this->incrementalFlush();}} else {if (PHP_SAPI != 'cli' && PHP_SAPI != 'phpdbg') {$buffer = htmlspecialchars($buffer, ENT_SUBSTITUTE);}print $buffer;if ($this->autoFlush) {$this->incrementalFlush();}}}/*** Check auto-flush mode.** @return bool*/public function getAutoFlush(){return $this->autoFlush;}/*** Set auto-flushing mode.** If set, *incremental* flushes will be done after each write. This should* not be confused with the different effects of this class' flush() method.** @param bool $autoFlush*/public function setAutoFlush($autoFlush){if (is_bool($autoFlush)) {$this->autoFlush = $autoFlush;} else {throw PHPUnit_Util_InvalidArgumentHelper::factory(1, 'boolean');}}}