2018-11-23 12:29:20 +00:00
< ? php
namespace Consolidation\Log ;
use Psr\Log\LogLevel ;
use Symfony\Component\Console\Output\BufferedOutput ;
use Symfony\Component\Console\Output\OutputInterface ;
2019-01-24 08:00:03 +00:00
use PHPUnit\Framework\TestCase ;
2018-11-23 12:29:20 +00:00
use Consolidation\TestUtils\TestDataPermuter ;
2019-01-24 08:00:03 +00:00
class LoggerVerbosityAndStyleTests extends TestCase
2018-11-23 12:29:20 +00:00
{
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 );
}
}