165 lines
4.7 KiB
PHP
165 lines
4.7 KiB
PHP
<?php
|
|
namespace Consolidation\Log;
|
|
|
|
use Psr\Log\LogLevel;
|
|
use Symfony\Component\Console\Output\BufferedOutput;
|
|
use Symfony\Component\Console\Output\OutputInterface;
|
|
|
|
use Consolidation\TestUtils\TestDataPermuter;
|
|
|
|
class LoggerVerbosityAndStyleTests extends \PHPUnit_Framework_TestCase
|
|
{
|
|
protected $output;
|
|
protected $logger;
|
|
|
|
function setup() {
|
|
$this->output = new BufferedOutput();
|
|
//$this->output->setVerbosity(OutputInterface::VERBOSITY_VERY_VERBOSE);
|
|
$this->logger = new Logger($this->output);
|
|
}
|
|
|
|
public static function logTestValues()
|
|
{
|
|
/**
|
|
* Use TEST_ALL_LOG_LEVELS to ensure that output is the same
|
|
* in instances where the output does not vary by log level.
|
|
*/
|
|
$TEST_ALL_LOG_LEVELS = [
|
|
OutputInterface::VERBOSITY_DEBUG,
|
|
OutputInterface::VERBOSITY_VERY_VERBOSE,
|
|
OutputInterface::VERBOSITY_VERBOSE,
|
|
OutputInterface::VERBOSITY_NORMAL
|
|
];
|
|
|
|
// Tests that return the same value for multiple inputs
|
|
// may use the expandProviderDataArrays method, and list
|
|
// repeated scalars as array values. All permutations of
|
|
// all array items will be calculated, and one test will
|
|
// be generated for each one.
|
|
return TestDataPermuter::expandProviderDataArrays([
|
|
[
|
|
'\Consolidation\Log\UnstyledLogOutputStyler',
|
|
$TEST_ALL_LOG_LEVELS,
|
|
LogLevel::ERROR,
|
|
'Do not enter - wrong way.',
|
|
' [error] Do not enter - wrong way.',
|
|
],
|
|
[
|
|
'\Consolidation\Log\UnstyledLogOutputStyler',
|
|
$TEST_ALL_LOG_LEVELS,
|
|
LogLevel::WARNING,
|
|
'Steep grade.',
|
|
' [warning] Steep grade.',
|
|
],
|
|
[
|
|
'\Consolidation\Log\UnstyledLogOutputStyler',
|
|
[
|
|
OutputInterface::VERBOSITY_DEBUG,
|
|
OutputInterface::VERBOSITY_VERY_VERBOSE,
|
|
OutputInterface::VERBOSITY_VERBOSE,
|
|
],
|
|
LogLevel::NOTICE,
|
|
'No loitering.',
|
|
' [notice] No loitering.',
|
|
],
|
|
[
|
|
'\Consolidation\Log\UnstyledLogOutputStyler',
|
|
OutputInterface::VERBOSITY_NORMAL,
|
|
LogLevel::NOTICE,
|
|
'No loitering.',
|
|
'',
|
|
],
|
|
[
|
|
'\Consolidation\Log\UnstyledLogOutputStyler',
|
|
OutputInterface::VERBOSITY_DEBUG,
|
|
LogLevel::INFO,
|
|
'Scenic route.',
|
|
' [info] Scenic route.',
|
|
],
|
|
[
|
|
'\Consolidation\Log\UnstyledLogOutputStyler',
|
|
OutputInterface::VERBOSITY_DEBUG,
|
|
LogLevel::DEBUG,
|
|
'Counter incremented.',
|
|
' [debug] Counter incremented.',
|
|
],
|
|
[
|
|
'\Consolidation\Log\UnstyledLogOutputStyler',
|
|
[
|
|
OutputInterface::VERBOSITY_VERY_VERBOSE,
|
|
OutputInterface::VERBOSITY_VERBOSE,
|
|
OutputInterface::VERBOSITY_NORMAL
|
|
],
|
|
LogLevel::DEBUG,
|
|
'Counter incremented.',
|
|
'',
|
|
],
|
|
[
|
|
'\Consolidation\Log\UnstyledLogOutputStyler',
|
|
$TEST_ALL_LOG_LEVELS,
|
|
ConsoleLogLevel::SUCCESS,
|
|
'It worked!',
|
|
' [success] It worked!',
|
|
],
|
|
[
|
|
'\Consolidation\Log\LogOutputStyler',
|
|
OutputInterface::VERBOSITY_NORMAL,
|
|
ConsoleLogLevel::SUCCESS,
|
|
'It worked!',
|
|
' [success] It worked!',
|
|
],
|
|
[
|
|
'\Consolidation\Log\SymfonyLogOutputStyler',
|
|
OutputInterface::VERBOSITY_DEBUG,
|
|
LogLevel::WARNING,
|
|
'Steep grade.',
|
|
"\n [WARNING] Steep grade.",
|
|
],
|
|
[
|
|
'\Consolidation\Log\SymfonyLogOutputStyler',
|
|
OutputInterface::VERBOSITY_DEBUG,
|
|
LogLevel::NOTICE,
|
|
'No loitering.',
|
|
"\n ! [NOTE] No loitering.",
|
|
],
|
|
[
|
|
'\Consolidation\Log\SymfonyLogOutputStyler',
|
|
OutputInterface::VERBOSITY_DEBUG,
|
|
LogLevel::INFO,
|
|
'Scenic route.',
|
|
"\n ! [NOTE] Scenic route.",
|
|
],
|
|
[
|
|
'\Consolidation\Log\SymfonyLogOutputStyler',
|
|
OutputInterface::VERBOSITY_DEBUG,
|
|
LogLevel::DEBUG,
|
|
'Counter incremented.',
|
|
"\n ! [NOTE] Counter incremented.",
|
|
],
|
|
[
|
|
'\Consolidation\Log\SymfonyLogOutputStyler',
|
|
OutputInterface::VERBOSITY_NORMAL,
|
|
ConsoleLogLevel::SUCCESS,
|
|
'It worked!',
|
|
"\n [OK] It worked!",
|
|
],
|
|
]);
|
|
}
|
|
|
|
/**
|
|
* This is our only test method. It accepts all of the
|
|
* permuted data from the data provider, and runs one
|
|
* test on each one.
|
|
*
|
|
* @dataProvider logTestValues
|
|
*/
|
|
function testLogging($styleClass, $verbocity, $level, $message, $expected) {
|
|
$logStyler = new $styleClass;
|
|
$this->logger->setLogOutputStyler($logStyler);
|
|
$this->output->setVerbosity($verbocity);
|
|
$this->logger->log($level, $message);
|
|
$outputText = rtrim($this->output->fetch(), "\n\r\t ");
|
|
$this->assertEquals($expected, $outputText);
|
|
}
|
|
}
|