Skip to content

Commit

Permalink
Convert Output::write's type to an options arg where verbosity can be…
Browse files Browse the repository at this point in the history
… passed in as well
  • Loading branch information
Seldaek committed Sep 12, 2015
1 parent c11e66c commit 7acbab8
Show file tree
Hide file tree
Showing 4 changed files with 55 additions and 36 deletions.
4 changes: 2 additions & 2 deletions Output/NullOutput.php
Expand Up @@ -98,15 +98,15 @@ public function isDebug()
/**
* {@inheritdoc}
*/
public function writeln($messages, $type = self::OUTPUT_NORMAL)
public function writeln($messages, $options = self::OUTPUT_NORMAL)
{
// do nothing
}

/**
* {@inheritdoc}
*/
public function write($messages, $newline = false, $type = self::OUTPUT_NORMAL)
public function write($messages, $newline = false, $options = self::OUTPUT_NORMAL)
{
// do nothing
}
Expand Down
20 changes: 12 additions & 8 deletions Output/Output.php
Expand Up @@ -121,22 +121,28 @@ public function isDebug()
/**
* {@inheritdoc}
*/
public function writeln($messages, $type = self::OUTPUT_NORMAL)
public function writeln($messages, $options = self::OUTPUT_NORMAL)
{
$this->write($messages, true, $type);
$this->write($messages, true, $options);
}

/**
* {@inheritdoc}
*/
public function write($messages, $newline = false, $type = self::OUTPUT_NORMAL)
public function write($messages, $newline = false, $options = self::OUTPUT_NORMAL)
{
if (self::VERBOSITY_QUIET === $this->verbosity) {
$messages = (array) $messages;

$types = self::OUTPUT_NORMAL | self::OUTPUT_RAW | self::OUTPUT_PLAIN;
$type = $types & $options ?: self::OUTPUT_NORMAL;

$verbosities = self::VERBOSITY_QUIET | self::VERBOSITY_NORMAL | self::VERBOSITY_VERBOSE | self::VERBOSITY_VERY_VERBOSE | self::VERBOSITY_DEBUG;
$verbosity = $verbosities & $options ?: self::VERBOSITY_NORMAL;

if ($verbosity > $this->getVerbosity()) {
return;
}

$messages = (array) $messages;

foreach ($messages as $message) {
switch ($type) {
case OutputInterface::OUTPUT_NORMAL:
Expand All @@ -147,8 +153,6 @@ public function write($messages, $newline = false, $type = self::OUTPUT_NORMAL)
case OutputInterface::OUTPUT_PLAIN:
$message = strip_tags($this->formatter->format($message));
break;
default:
throw new \InvalidArgumentException(sprintf('Unknown output type given (%s)', $type));
}

$this->doWrite($message, $newline);
Expand Down
28 changes: 12 additions & 16 deletions Output/OutputInterface.php
Expand Up @@ -22,40 +22,36 @@
*/
interface OutputInterface
{
const VERBOSITY_QUIET = 0;
const VERBOSITY_NORMAL = 1;
const VERBOSITY_VERBOSE = 2;
const VERBOSITY_VERY_VERBOSE = 3;
const VERBOSITY_DEBUG = 4;
const VERBOSITY_QUIET = 16;
const VERBOSITY_NORMAL = 32;
const VERBOSITY_VERBOSE = 64;
const VERBOSITY_VERY_VERBOSE = 128;
const VERBOSITY_DEBUG = 256;

const OUTPUT_NORMAL = 0;
const OUTPUT_RAW = 1;
const OUTPUT_PLAIN = 2;
const OUTPUT_NORMAL = 1;
const OUTPUT_RAW = 2;
const OUTPUT_PLAIN = 4;

/**
* Writes a message to the output.
*
* @param string|array $messages The message as an array of lines or a single string
* @param bool $newline Whether to add a newline
* @param int $type The type of output (one of the OUTPUT constants)
*
* @throws \InvalidArgumentException When unknown output type is given
* @param int $options A bitmask of options (one of the OUTPUT or VERBOSITY constants), 0 is considered the same as self::OUTPUT_NORMAL | self::VERBOSITY_NORMAL
*
* @api
*/
public function write($messages, $newline = false, $type = self::OUTPUT_NORMAL);
public function write($messages, $newline = false, $options = 0);

/**
* Writes a message to the output and adds a newline at the end.
*
* @param string|array $messages The message as an array of lines of a single string
* @param int $type The type of output (one of the OUTPUT constants)
*
* @throws \InvalidArgumentException When unknown output type is given
* @param int $options A bitmask of options (one of the OUTPUT or VERBOSITY constants), 0 is considered the same as self::OUTPUT_NORMAL | self::VERBOSITY_NORMAL
*
* @api
*/
public function writeln($messages, $type = self::OUTPUT_NORMAL);
public function writeln($messages, $options = 0);

/**
* Sets the verbosity of the output.
Expand Down
39 changes: 29 additions & 10 deletions Tests/Output/OutputTest.php
Expand Up @@ -116,16 +116,6 @@ public function testWriteDecoratedMessage()
$this->assertEquals("\033[33;41;5mfoo\033[39;49;25m\n", $output->output, '->writeln() decorates the output');
}

/**
* @expectedException \InvalidArgumentException
* @expectedExceptionMessage Unknown output type given (24)
*/
public function testWriteWithInvalidOutputType()
{
$output = new TestOutput();
$output->writeln('<foo>foo</foo>', 24);
}

public function testWriteWithInvalidStyle()
{
$output = new TestOutput();
Expand All @@ -138,6 +128,35 @@ public function testWriteWithInvalidStyle()
$output->writeln('<bar>foo</bar>');
$this->assertEquals("<bar>foo</bar>\n", $output->output, '->writeln() do nothing when a style does not exist');
}

/**
* @dataProvider verbosityProvider
*/
public function testWriteWithVerbosityOption($verbosity, $expected, $msg)
{
$output = new TestOutput();

$output->setVerbosity($verbosity);
$output->clear();
$output->write('1', false);
$output->write('2', false, Output::VERBOSITY_QUIET);
$output->write('3', false, Output::VERBOSITY_NORMAL);
$output->write('4', false, Output::VERBOSITY_VERBOSE);
$output->write('5', false, Output::VERBOSITY_VERY_VERBOSE);
$output->write('6', false, Output::VERBOSITY_DEBUG);
$this->assertEquals($expected, $output->output, $msg);
}

public function verbosityProvider()
{
return array(
array(Output::VERBOSITY_QUIET, '2', '->write() in QUIET mode only outputs when an explicit QUIET verbosity is passed'),
array(Output::VERBOSITY_NORMAL, '123', '->write() in NORMAL mode outputs anything below an explicit VERBOSE verbosity'),
array(Output::VERBOSITY_VERBOSE, '1234', '->write() in VERBOSE mode outputs anything below an explicit VERY_VERBOSE verbosity'),
array(Output::VERBOSITY_VERY_VERBOSE, '12345', '->write() in VERY_VERBOSE mode outputs anything below an explicit DEBUG verbosity'),
array(Output::VERBOSITY_DEBUG, '123456', '->write() in DEBUG mode outputs everything'),
);
}
}

class TestOutput extends Output
Expand Down

0 comments on commit 7acbab8

Please sign in to comment.