168 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
		
		
			
		
	
	
			168 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| 
								 | 
							
								<?php
							 | 
						||
| 
								 | 
							
								namespace Consolidation\Log;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								use Psr\Log\LogLevel;
							 | 
						||
| 
								 | 
							
								use Symfony\Component\Console\Output\BufferedOutput;
							 | 
						||
| 
								 | 
							
								use Symfony\Component\Console\Output\OutputInterface;
							 | 
						||
| 
								 | 
							
								use PHPUnit\Framework\TestCase;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								use Consolidation\TestUtils\TestDataPermuter;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class LoggerVerbosityAndStyleTests extends TestCase
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								  protected $output;
							 | 
						||
| 
								 | 
							
								  protected $logger;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  function setup(): void {
							 | 
						||
| 
								 | 
							
								    $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::EMERGENCY,
							 | 
						||
| 
								 | 
							
								        'The planet is melting. Consume less.',
							 | 
						||
| 
								 | 
							
								        ' [emergency] The planet is melting. Consume less.',
							 | 
						||
| 
								 | 
							
								      ],
							 | 
						||
| 
								 | 
							
								      [
							 | 
						||
| 
								 | 
							
								        '\Consolidation\Log\UnstyledLogOutputStyler',
							 | 
						||
| 
								 | 
							
								        $TEST_ALL_LOG_LEVELS,
							 | 
						||
| 
								 | 
							
								        LogLevel::ALERT,
							 | 
						||
| 
								 | 
							
								        'Masks required.',
							 | 
						||
| 
								 | 
							
								        ' [alert] Masks required.',
							 | 
						||
| 
								 | 
							
								      ],
							 | 
						||
| 
								 | 
							
								      [
							 | 
						||
| 
								 | 
							
								        '\Consolidation\Log\UnstyledLogOutputStyler',
							 | 
						||
| 
								 | 
							
								        $TEST_ALL_LOG_LEVELS,
							 | 
						||
| 
								 | 
							
								        LogLevel::CRITICAL,
							 | 
						||
| 
								 | 
							
								        'Reactor meltdown imminent.',
							 | 
						||
| 
								 | 
							
								        ' [critical] Reactor meltdown imminent.',
							 | 
						||
| 
								 | 
							
								      ],
							 | 
						||
| 
								 | 
							
								      [
							 | 
						||
| 
								 | 
							
								        '\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\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.",
							 | 
						||
| 
								 | 
							
								      ],
							 | 
						||
| 
								 | 
							
								    ]);
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  /**
							 | 
						||
| 
								 | 
							
								   * 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 ");
							 | 
						||
| 
								 | 
							
								    $outputText = preg_replace('#\r\n#ms', "\n", $outputText);
							 | 
						||
| 
								 | 
							
								    $expected = preg_replace('#\r\n#ms', "\n", $expected);
							 | 
						||
| 
								 | 
							
								    $this->assertEquals($expected, $outputText);
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								}
							 |