assertEquals( $expect, LegacyLogger::interpolate( $message, $context ) ); } public function provideInterpolate() { $e = new \Exception( 'boom!' ); $d = new \DateTime(); return array( array( 'no-op', array(), 'no-op', ), array( 'Hello {world}!', array( 'world' => 'World', ), 'Hello World!', ), array( '{greeting} {user}', array( 'greeting' => 'Goodnight', 'user' => 'Moon', ), 'Goodnight Moon', ), array( 'Oops {key_not_set}', array(), 'Oops {key_not_set}', ), array( '{ not interpolated }', array( 'not interpolated' => 'This should NOT show up in the message', ), '{ not interpolated }', ), array( '{null}', array( 'null' => null, ), '[Null]', ), array( '{bool}', array( 'bool' => true, ), 'true', ), array( '{float}', array( 'float' => 1.23, ), '1.23', ), array( '{array}', array( 'array' => array( 1, 2, 3 ), ), '[Array(3)]', ), array( '{exception}', array( 'exception' => $e, ), '[Exception ' . get_class( $e ) . '( ' . $e->getFile() . ':' . $e->getLine() . ') ' . $e->getMessage() . ']', ), array( '{datetime}', array( 'datetime' => $d, ), $d->format( 'c' ), ), array( '{object}', array( 'object' => new \stdClass, ), '[Object stdClass]', ), ); } /** * @covers LegacyLogger::shouldEmit * @dataProvider provideShouldEmit */ public function testShouldEmit( $level, $config, $expected ) { $this->setMwGlobals( 'wgDebugLogGroups', array( 'fakechannel' => $config ) ); $this->assertEquals( $expected, LegacyLogger::shouldEmit( 'fakechannel', 'some message', $level, array() ) ); } public static function provideShouldEmit() { $dest = array( 'destination' => 'foobar' ); $tests = array( array( LogLevel::DEBUG, $dest, true ), array( LogLevel::WARNING, $dest + array( 'level' => LogLevel::INFO ), true, ), array( LogLevel::INFO, $dest + array( 'level' => LogLevel::CRITICAL ), false, ), ); if ( class_exists( '\Monolog\Logger' ) ) { $tests[] = array( \Monolog\Logger::INFO, $dest + array( 'level' => LogLevel::INFO ), true, ); $tests[] = array( \Monolog\Logger::WARNING, $dest + array( 'level' => LogLevel::EMERGENCY ), false, ); } return $tests; } }