+ * @category Horde
+ * @license http://www.horde.org/licenses/bsd BSD
+ * @package Log
+ */
+class Logger implements LoggerInterface
+{
+ /* Serialize version. */
+ public const VERSION = 1;
+
+ /**
+ * Log levels where the keys are the level priorities and the values are
+ * the level names.
+ *
+ * @var LogLevels
+ */
+ protected LogLevels $levels;
+
+ /**
+ * Handler objects.
+ *
+ * @var LogHandler[]
+ */
+ protected $handlers = [];
+
+ /**
+ * Horde_Log_Filter objects.
+ *
+ * @var LogFilter[]
+ */
+ protected $filters = [];
+
+ /**
+ * Constructor.
+ *
+ * @param LogHandler[] $handlers The list of handlers.
+ * TODO: Is defaulting to the null handler any better than defaulting to no handler?
+ * @param LogLevels|null $levels A list of log levels to operate on. Null initializes with the RFC loglevels
+ * @param LogFilter[] $filters A list of global filters to apply before any log handler. Log handlers may have their own filters
+ */
+ public function __construct(array $handlers = [], LogLevels $levels = null, array $filters = [])
+ {
+ if ($levels) {
+ $this->levels = $levels;
+ } else {
+ $levels = LogLevels::initWithCanonicalLevels();
+ }
+ foreach ($handlers as $handler) {
+ $this->addHandler($handler);
+ }
+ foreach ($filters as $filter) {
+ $this->addFilter($filter);
+ }
+ }
+
+ /**
+ * Serialize.
+ *
+ * @return string Serialized representation of this object.
+ */
+ public function serialize()
+ {
+ return serialize([
+ self::VERSION,
+ $this->filters,
+ $this->handlers,
+ ]);
+ }
+
+ /**
+ * Unserialize.
+ *
+ * @param string $data Serialized data.
+ *
+ * @throws LogException
+ */
+ public function unserialize($data): void
+ {
+ $data = @unserialize($data);
+ if (!is_array($data) ||
+ !isset($data[0]) ||
+ ($data[0] != self::VERSION)) {
+ throw new LogException('Cache version change');
+ }
+
+ $this->filters = $data[1];
+ $this->handlers = $data[2];
+ }
+
+ /**
+ * Undefined method handler allows a shortcut:
+ *
+ * $log->levelName('message');
+ * instead of
+ * $log->log('message', Horde_Log_LEVELNAME);
+ * .
+ *
+ * @param string $method Log level name.
+ * @param string|object|stringable $params Message to log.
+ * @param array $context The context for the message.
+ */
+ /* public function __call($method, $params)
+ {
+ TODO: Do we really want to support that mess?
+ We already support the canonic names
+ }*/
+
+ /*
+ The Logger methods.
+ Compared to PSR-3 type hints, we explicitly hint against LogMessage to
+ provide specific behavior. This is why we copy it rather than using the trait
+ */
+ /**
+ * System is unusable.
+ *
+ * @param string|Stringable|LogMessage $message
+ * @param mixed[] $context
+ *
+ * @return void
+ */
+ public function emergency($message, array $context = []): void
+ {
+ $this->log(LogLevel::EMERGENCY, $message, $context);
+ }
+
+ /**
+ * Action must be taken immediately.
+ *
+ * Example: Entire website down, database unavailable, etc. This should
+ * trigger the SMS alerts and wake you up.
+ *
+ * @param string|Stringable|LogMessage $message
+ * @param mixed[] $context
+ *
+ * @return void
+ */
+ public function alert($message, array $context = []): void
+ {
+ $this->log(LogLevel::ALERT, $message, $context);
+ }
+
+ /**
+ * Critical conditions.
+ *
+ * Example: Application component unavailable, unexpected exception.
+ *
+ * @param string|Stringable|LogMessage $message
+ * @param mixed[] $context
+ *
+ * @return void
+ */
+ public function critical($message, array $context = []): void
+ {
+ $this->log(LogLevel::CRITICAL, $message, $context);
+ }
+
+ /**
+ * Runtime errors that do not require immediate action but should typically
+ * be logged and monitored.
+ *
+ * @param string|Stringable|LogMessage $message The message to submit
+ * @param mixed[] $context An array of context
+ *
+ * @return void
+ */
+ public function error($message, array $context = []): void
+ {
+ $this->log(LogLevel::ERROR, $message, $context);
+ }
+
+ /**
+ * Exceptional occurrences that are not errors.
+ *
+ * Example: Use of deprecated APIs, poor use of an API, undesirable things
+ * that are not necessarily wrong.
+ *
+ * @param string|Stringable|LogMessage $message
+ * @param mixed[] $context
+ *
+ * @return void
+ */
+ public function warning($message, array $context = []): void
+ {
+ $this->log(LogLevel::WARNING, $message, $context);
+ }
+
+ /**
+ * Normal but significant events.
+ *
+ * @param string|Stringable|LogMessage $message
+ * @param mixed[] $context
+ *
+ * @return void
+ */
+ public function notice($message, array $context = []): void
+ {
+ $this->log(LogLevel::NOTICE, $message, $context);
+ }
+
+ /**
+ * Interesting events.
+ *
+ * Example: User logs in, SQL logs.
+ *
+ * @param string|Stringable|LogMessage $message
+ * @param mixed[] $context
+ *
+ * @return void
+ */
+ public function info($message, array $context = []): void
+ {
+ $this->log(LogLevel::INFO, $message, $context);
+ }
+
+ /**
+ * Detailed debug information.
+ *
+ * @param string $message
+ * @param mixed[] $context
+ *
+ * @return void
+ */
+ public function debug($message, array $context = []): void
+ {
+ $this->log(LogLevel::DEBUG, $message, $context);
+ }
+ /**
+ * Logs with an arbitrary level.
+ *
+ * @param int|string|LogLevel $level
+ * @param string|Stringable|LogMessage $message
+ * @param mixed[] $context User code supplied additional info
+ *
+ * @return void
+ *
+ * @throws \Psr\Log\InvalidArgumentException
+ */
+ public function log($level, $message, array $context = []): void
+ {
+ $loglevel = null;
+ // Error if the requested level is not present
+ if ($level instanceof LogLevel) {
+ $this->levels->getByCriticality($level->criticality());
+ $this->levels->getByLevelName($level->name());
+ $loglevel = $level;
+ } elseif (is_int($level)) {
+ $loglevel = $this->levels->getByCriticality($level);
+ } elseif (is_string($level)) {
+ $loglevel = $this->levels->getByLevelName($level);
+ }
+ if (is_null($loglevel)) {
+ throw new InvalidArgumentException('Unsupported log level type, try string or numeric');
+ }
+ // Special handling of submitted native LogMessage objects
+ if ($message instanceof LogMessage) {
+ $logMessage = new LogMessage($loglevel, $message->message(), $message->context());
+ $logMessage->mergeContext($context);
+ } else {
+ // The log message will auto-generate context[timestamp] unless missing
+ $logMessage = new LogMessage($loglevel, (string) $message, $context);
+ }
+
+ // Apply any global prefilters, may reject the message
+ foreach ($this->filters as $filter) {
+ if (!$filter->accept($logMessage)) {
+ return;
+ }
+ }
+
+ // Delegate to all registered handlers
+ foreach ($this->handlers as $handler) {
+ // Any processing and interpolation is up to the log handler
+ $handler->log($logMessage);
+ }
+ }
+
+ /**
+ * Add a filter that will be applied before all log handlers.
+ * Before a message will be received by any of the handlers, it
+ * must be accepted by all filters added with this method.
+ *
+ * @param LogFilter $filter Filter to add.
+ */
+ public function addFilter(LogFilter $filter): void
+ {
+ $this->filters[] = $filter;
+ }
+
+ /**
+ * Add a handler. A handler is responsible for taking a log
+ * message and writing it out to storage.
+ *
+ * @param LogHandler $handler Handler to add.
+ */
+ public function addHandler(LogHandler $handler): void
+ {
+ $this->handlers[] = $handler;
+ }
+}
diff --git a/src/LoggerBuilder.php b/src/LoggerBuilder.php
new file mode 100644
index 0000000..1fd4541
--- /dev/null
+++ b/src/LoggerBuilder.php
@@ -0,0 +1,88 @@
+
+ * @category Horde
+ * @license http://www.horde.org/licenses/bsd BSD
+ * @package Log
+ */
+class LoggerBuilder
+{
+ private LogLevels $loglevels;
+ private Logger $logger;
+
+ public function __construct(LogLevels $loglevels = null)
+ {
+ $this->reset($loglevels);
+ }
+ /**
+ * Create an all-new logger instance without any handler or filter
+ *
+ */
+ public function reset(LogLevels $loglevels = null): self
+ {
+ $this->loglevels = $loglevels ?? LogLevels::initWithCanonicalLevels();
+ $this->logger = new Logger([], $loglevels);
+ return $this;
+ }
+
+ /**
+ * Create a custom log level for the current logger
+ *
+ * @param integer $criticality
+ * @param string $name
+ * @return self
+ */
+ public function withLogLevel(int $criticality, string $name): self
+ {
+ $level = new LogLevel($criticality, $name);
+ // The logger and the builder share the reference to the same object
+ // No need for an actual injection into the logger
+ $this->loglevels->register($level);
+ return $this;
+ }
+
+ /**
+ * Add a log handler to a logger
+ *
+ * @param LogHandler $handler
+ * @return self
+ */
+ public function withLogHandler(LogHandler $handler): self
+ {
+ $this->logger->addHandler($handler);
+ return $this;
+ }
+
+ /**
+ * Return a logger
+ *
+ * Resets the builder to default state
+ *
+ * @return Logger
+ */
+ public function build(): Logger
+ {
+ $logger = $this->logger;
+ $this->reset();
+ return $logger;
+ }
+
+ /**
+ * Add a filter
+ *
+ * @param LogFilter $filter
+ * @return self
+ */
+ public function withGlobalFilter(LogFilter $filter): self
+ {
+ return $this;
+ }
+
+}
\ No newline at end of file
diff --git a/src/LoggerInterface.php b/src/LoggerInterface.php
new file mode 100644
index 0000000..acbf869
--- /dev/null
+++ b/src/LoggerInterface.php
@@ -0,0 +1,40 @@
+
+ */
+interface LoggerInterface extends PsrLoggerInterface
+{
+ /**
+ * Add a filter that will be applied before all log handlers.
+ *
+ * Before a message will be received by any of the handlers, it
+ * must be accepted by all filters added with this method.
+ *
+ * @param LogFilter $filter Filter to add.
+ */
+ public function addFilter(LogFilter $filter): void;
+}
diff --git a/test/AllTests.php b/test/AllTests.php
new file mode 100644
index 0000000..1f7a9bf
--- /dev/null
+++ b/test/AllTests.php
@@ -0,0 +1,5 @@
+run();
diff --git a/test/Horde/Log/Filter/ChainingTest.php b/test/Filter/ChainingTest.php
similarity index 75%
rename from test/Horde/Log/Filter/ChainingTest.php
rename to test/Filter/ChainingTest.php
index 9ac92d2..f4c0a0a 100644
--- a/test/Horde/Log/Filter/ChainingTest.php
+++ b/test/Filter/ChainingTest.php
@@ -13,6 +13,11 @@
* @package Log
* @subpackage UnitTests
*/
+namespace Horde\Log\Test\Filter;
+use \PHPUnit\Framework\TestCase;
+use \Horde_Log;
+use \Horde_Log_Logger;
+use \Horde_Log_Handler_Stream;
/**
* @author Mike Naberezny
@@ -22,9 +27,9 @@
* @package Log
* @subpackage UnitTests
*/
-class Horde_Log_Filter_ChainingTest extends PHPUnit_Framework_TestCase
+class ChainingTest extends TestCase
{
- public function setUp()
+ public function setUp(): void
{
date_default_timezone_set('America/New_York');
@@ -33,7 +38,7 @@ public function setUp()
$this->logger->addHandler(new Horde_Log_Handler_Stream($this->log));
}
- public function tearDown()
+ public function tearDown(): void
{
fclose($this->log);
}
@@ -49,8 +54,8 @@ public function testFilterAllHandlers()
rewind($this->log);
$logdata = stream_get_contents($this->log);
- $this->assertNotContains($ignored, $logdata);
- $this->assertContains($logged, $logdata);
+ $this->assertStringNotContainsString($ignored, $logdata);
+ $this->assertStringContainsString($logged, $logdata);
}
@@ -67,13 +72,13 @@ public function testFilterOnSpecificHandler()
rewind($this->log);
$logdata = stream_get_contents($this->log);
- $this->assertContains($warn, $logdata);
- $this->assertContains($err, $logdata);
+ $this->assertStringContainsString($warn, $logdata);
+ $this->assertStringContainsString($err, $logdata);
rewind($log2);
$logdata = stream_get_contents($log2);
- $this->assertContains($err, $logdata);
- $this->assertNotContains($warn, $logdata);
+ $this->assertStringContainsString($err, $logdata);
+ $this->assertStringNotContainsString($warn, $logdata);
}
}
diff --git a/test/Filter/ConstraintFilterTest.php b/test/Filter/ConstraintFilterTest.php
new file mode 100644
index 0000000..b691def
--- /dev/null
+++ b/test/Filter/ConstraintFilterTest.php
@@ -0,0 +1,129 @@
+
+ * @category Horde
+ * @license http://www.horde.org/licenses/bsd BSD
+ * @package Log
+ * @subpackage UnitTests
+ */
+
+namespace Horde\Log\Test\Filter;
+
+use PHPUnit\Framework\TestCase;
+
+use Horde\Log\Filter\ConstraintFilter;
+use Horde\Log\LogMessage;
+use Horde\Log\LogLevel;
+use Horde_Constraint_AlwaysFalse;
+
+class ConstraintFilterTest extends TestCase
+{
+ public function setUp(): void
+ {
+ $this->level1 = new LogLevel(1, 'testName1');
+ $this->level2 = new LogLevel(2, 'testName2');
+ $this->level3 = new LogLevel(3, 'testName3');
+ $this->level4 = new LogLevel(4, 'testName4');
+ $this->message1 = 'testMessage1';
+ $this->message2 = 'required_field';
+ $this->message3 = 'somevalue';
+ $this->message4 = 'multiple required fields';
+ $this->logMessage1 = new LogMessage($this->level1, $this->message1);
+ $this->logMessage2 = new LogMessage($this->level2, $this->message2);
+ $this->logMessage3 = new LogMessage($this->level3, $this->message3, ['customField3' => 'custumValue3']);
+ $this->logMessage4 = new LogMessage($this->level4, $this->message4, ['customField4' => 'custumValue4', 'customField5' => 'custumValue5']);
+ }
+
+ public function testFilterAcceptMultipleRequiredFieldsIfPresent()
+ {
+ $filterator = new ConstraintFilter();
+ $filterator->addRequiredFields('customField4', 'customField5');
+ $this->assertTrue($filterator->accept($this->logMessage4));
+ }
+
+ public function testFilterNotAcceptMultipleRequiredFieldsIfNotPresent()
+ {
+ $filterator = new ConstraintFilter();
+ $filterator->addRequiredFields('customField3', 'customField4');
+ $this->assertFalse($filterator->accept($this->logMessage4));
+ }
+
+
+ public function testFilterDoesNotAcceptWhenRequiredFieldIsMissing()
+ {
+ $filterator = new ConstraintFilter();
+ $filterator->addRequiredField('required_field');
+ $this->assertFalse($filterator->accept($this->logMessage3));
+ }
+
+
+ public function testFilterAcceptsWhenRequiredFieldisPresent()
+ {
+ $filterator = new ConstraintFilter();
+ $filterator->addRequiredField('customField3');
+ $this->assertTrue($filterator->accept($this->logMessage3));
+ }
+
+ public function testFilterAcceptsWhenRegexMatchesField()
+ {
+ $filterator = new ConstraintFilter();
+ $filterator->addRegex('customField3', '/cust*/');
+
+ $this->assertTrue($filterator->accept($this->logMessage3));
+ }
+
+ public function testFilterAcceptsWhenRegex_DOESNOT_MatcheField()
+ {
+ $filterator = new ConstraintFilter();
+ $filterator->addRegex('customField3', '/this value does not exist/');
+
+ $this->assertFalse($filterator->accept($this->logMessage3));
+ }
+
+ private function getConstraintMock($returnVal)
+ {
+ $const = $this->getMockBuilder('Horde_Constraint', array('evaluate'))->getMock();
+ $const->expects($this->once())
+ ->method('evaluate')
+ ->will($this->returnValue($returnVal));
+ return $const;
+ }
+
+ public function testFilterCallsEvalOnAllConstraintsWhenTheyAreAllTrue()
+ {
+ $filterator = new ConstraintFilter();
+ $filterator->addConstraint('context', $this->getConstraintMock(true));
+ $filterator->addConstraint('level', $this->getConstraintMock(true));
+ $filterator->addConstraint('message', $this->getConstraintMock(true));
+ $filterator->addConstraint('dafdfadg234435dafdf', $this->getConstraintMock(true));
+
+ $filterator->accept($this->logMessage3);
+ }
+
+ public function testFilterStopsWhenItFindsAFalseCondition()
+ {
+ $filterator = new ConstraintFilter();
+ $filterator->addConstraint('fieldname', $this->getConstraintMock(true));
+ $filterator->addConstraint('fieldname', $this->getConstraintMock(true));
+ $filterator->addConstraint('fieldname', new Horde_Constraint_AlwaysFalse());
+
+ $const = $this->getMockBuilder('Horde_Constraint', array('evaluate'))->getMock();
+ $const->expects($this->never())
+ ->method('evaluate');
+ $filterator->addConstraint('fieldname', $const);
+ $filterator->accept($this->logMessage3);
+ }
+
+ public function testFilterAcceptCallsConstraintOnNullWhenFieldDoesnotExist()
+ {
+ $filterator = new ConstraintFilter();
+ $const = $this->getMockBuilder('Horde_Constraint', array('evaluate'))->getMock();
+ $const->expects($this->once())
+ ->method('evaluate')
+ ->with(null);
+ $filterator->addConstraint('non existant field', $const);
+ $filterator->accept($this->logMessage2);
+ }
+}
diff --git a/test/Horde/Log/Filter/ConstraintTest.php b/test/Filter/ConstraintTest.php
similarity index 88%
rename from test/Horde/Log/Filter/ConstraintTest.php
rename to test/Filter/ConstraintTest.php
index 19c0e9f..b0ad248 100644
--- a/test/Horde/Log/Filter/ConstraintTest.php
+++ b/test/Filter/ConstraintTest.php
@@ -8,6 +8,10 @@
* @package Log
* @subpackage UnitTests
*/
+namespace Horde\Log\Test\Filter;
+Use \Horde_Test_Case;
+use \Horde_Log_Filter_Constraint;
+use \Horde_Constraint_AlwaysFalse;
/**
* @author James Pepin
@@ -16,7 +20,7 @@
* @package Log
* @subpackage UnitTests
*/
-class Horde_Log_Filter_ConstraintTest extends Horde_Test_Case
+class ConstraintTest extends Horde_Test_Case
{
public function testFilterDoesNotAcceptWhenRequiredFieldIsMissing()
{
@@ -67,7 +71,7 @@ public function testFilterAcceptsWhenRegex_DOESNOT_MatcheField()
private function getConstraintMock($returnVal)
{
- $const = $this->getMock('Horde_Constraint', array('evaluate'));
+ $const = $this->getMockBuilder('Horde_Constraint', array('evaluate'))->getMock();
$const->expects($this->once())
->method('evaluate')
->will($this->returnValue($returnVal));
@@ -90,7 +94,7 @@ public function testFilterStopsWhenItFindsAFalseCondition()
$filterator->addConstraint('fieldname', $this->getConstraintMock(true));
$filterator->addConstraint('fieldname', new Horde_Constraint_AlwaysFalse());
- $const = $this->getMock('Horde_Constraint', array('evaluate'));
+ $const = $this->getMockBuilder('Horde_Constraint', array('evaluate'))->getMock();
$const->expects($this->never())
->method('evaluate');
$filterator->addConstraint('fieldname', $const);
@@ -101,7 +105,7 @@ public function testFilterStopsWhenItFindsAFalseCondition()
public function testFilterAcceptCallsConstraintOnNullWhenFieldDoesnotExist()
{
$filterator = new Horde_Log_Filter_Constraint();
- $const = $this->getMock('Horde_Constraint', array('evaluate'));
+ $const = $this->getMockBuilder('Horde_Constraint', array('evaluate'))->getMock();
$const->expects($this->once())
->method('evaluate')
->with(null);
diff --git a/test/Filter/ExactLevelFilterTest.php b/test/Filter/ExactLevelFilterTest.php
new file mode 100644
index 0000000..ba531b5
--- /dev/null
+++ b/test/Filter/ExactLevelFilterTest.php
@@ -0,0 +1,68 @@
+
+ * @author Chuck Hagenbuch
+ * @category Horde
+ * @license http://www.horde.org/licenses/bsd BSD
+ * @package Log
+ * @subpackage UnitTests
+ */
+
+namespace Horde\Log\Test\Filter;
+use PHPUnit\Framework\TestCase;
+use Horde\Log\Filter\ExactLevelFilter;
+use Horde\Log\LogFilter;
+use Horde\Log\LogLevel;
+use Horde\Log\LogMessage;
+use TypeError;
+
+/**
+ * @author Mike Naberezny
+ * @author Chuck Hagenbuch
+ * @category Horde
+ * @license http://www.horde.org/licenses/bsd BSD
+ * @package Log
+ * @subpackage UnitTests
+ */
+class ExactLevelFilterTest extends TestCase
+{
+ public function setUp(): void
+ {
+ // accept at and only at level 2
+ $this->messageLogLevel1 = new LogLevel(1, 'fatal');
+ $this->messageLogLevel2 = new LogLevel(2, 'error');
+ $this->messageLogLevel3 = new LogLevel(3, 'warn');
+ $this->messageLvl3 = new LogMessage($this->messageLogLevel3, 'test');
+ $this->messageLvl2 = new LogMessage($this->messageLogLevel2, 'error');
+ $this->messageLvl1 = new LogMessage($this->messageLogLevel1, 'test');
+ $this->filter = new ExactLevelFilter(2);
+ $this->filter2 = new ExactLevelFilter(2, 'error');
+ $this->filter3 = new ExactLevelFilter(2, 'ERROR');
+ }
+
+ public function testLevelFilterAccept()
+ {
+ $this->assertTrue($this->filter->accept($this->messageLvl2));
+ $this->assertTrue($this->filter2->accept($this->messageLvl2));
+ }
+
+ public function testLevelFilterReject()
+ {
+ $this->assertFalse($this->filter->accept($this->messageLvl3));
+ $this->assertFalse($this->filter->accept($this->messageLvl1));
+ $this->assertFalse($this->filter2->accept($this->messageLvl1));
+ $this->assertFalse($this->filter3->accept($this->messageLvl2));
+ }
+
+ public function testConstructorThrowsOnInvalidLevel()
+ {
+ $this->expectException(TypeError::class);
+ new ExactLevelFilter('foo','bar');
+ }
+}
diff --git a/test/Horde/Log/Filter/ExactLevelTest.php b/test/Filter/ExactLevelTest.php
similarity index 76%
rename from test/Horde/Log/Filter/ExactLevelTest.php
rename to test/Filter/ExactLevelTest.php
index 3f648bb..88d7328 100644
--- a/test/Horde/Log/Filter/ExactLevelTest.php
+++ b/test/Filter/ExactLevelTest.php
@@ -13,6 +13,10 @@
* @package Log
* @subpackage UnitTests
*/
+namespace Horde\Log\Test\Filter;
+use \PHPUnit\Framework\TestCase;
+use \Horde_Log_Filter_Level;
+use \Horde_Log_Filter_ExactLevel;
/**
* @author Mike Naberezny
@@ -22,9 +26,9 @@
* @package Log
* @subpackage UnitTests
*/
-class Horde_Log_Filter_ExactLevelTest extends PHPUnit_Framework_TestCase
+class ExactLevelTest extends TestCase
{
- public function setUp()
+ public function setUp(): void
{
// accept at and only at level 2
$this->filter = new Horde_Log_Filter_ExactLevel(2);
@@ -43,12 +47,7 @@ public function testLevelFilterReject()
public function testConstructorThrowsOnInvalidLevel()
{
- try {
- new Horde_Log_Filter_Level('foo');
- $this->fail();
- } catch (Exception $e) {
- $this->assertInstanceOf('InvalidArgumentException', $e);
- $this->assertRegExp('/must be an integer/i', $e->getMessage());
- }
+ $this->expectException('InvalidArgumentException');
+ new Horde_Log_Filter_Level('foo');
}
}
diff --git a/test/Horde/Log/Filter/LevelTest.php b/test/Filter/LevelTest.php
similarity index 76%
rename from test/Horde/Log/Filter/LevelTest.php
rename to test/Filter/LevelTest.php
index c9c281e..78ddd63 100644
--- a/test/Horde/Log/Filter/LevelTest.php
+++ b/test/Filter/LevelTest.php
@@ -13,6 +13,9 @@
* @package Log
* @subpackage UnitTests
*/
+namespace Horde\Log\Test\Filter;
+use \PHPUnit\Framework\TestCase;
+use \Horde_Log_Filter_Level;
/**
* @author Mike Naberezny
@@ -22,9 +25,9 @@
* @package Log
* @subpackage UnitTests
*/
-class Horde_Log_Filter_LevelTest extends PHPUnit_Framework_TestCase
+class LevelTest extends TestCase
{
- public function setUp()
+ public function setUp(): void
{
// accept at or below level 2
$this->filter = new Horde_Log_Filter_Level(2);
@@ -43,12 +46,7 @@ public function testLevelFilterReject()
public function testConstructorThrowsOnInvalidLevel()
{
- try {
- new Horde_Log_Filter_Level('foo');
- $this->fail();
- } catch (Exception $e) {
- $this->assertInstanceOf('InvalidArgumentException', $e);
- $this->assertRegExp('/must be an integer/i', $e->getMessage());
- }
+ $this->expectException('InvalidArgumentException');
+ new Horde_Log_Filter_Level('foo');
}
}
diff --git a/test/Filter/MaximumLevelFilterTest.php b/test/Filter/MaximumLevelFilterTest.php
new file mode 100644
index 0000000..0936351
--- /dev/null
+++ b/test/Filter/MaximumLevelFilterTest.php
@@ -0,0 +1,56 @@
+
+ * @author Chuck Hagenbuch
+ * @category Horde
+ * @license http://www.horde.org/licenses/bsd BSD
+ * @package Log
+ * @subpackage UnitTests
+ */
+
+namespace Horde\Log\Test\Filter;
+
+use PHPUnit\Framework\TestCase;
+use Horde\Log\Filter\MaximumLevelFilter;
+use Horde\Log\LogMessage;
+use Horde\Log\LogLevel;
+use TypeError;
+
+class MaximumLevelFilterTest extends TestCase
+{
+ public function setUp(): void
+ {
+ $this->filter = new MaximumLevelFilter(2);
+ }
+
+ public function testLevelFilterAccept()
+ {
+ $level1 = new LogLevel(1, 'testName1');
+ $level2 = new LogLevel(2, 'testName2');
+ $message1 = 'testMessage1';
+ $message2 = 'testMessage2';
+ $logMessage1 = new LogMessage($level1, $message1);
+ $logMessage2 = new LogMessage($level2, $message2);
+ $this->assertTrue($this->filter->accept($logMessage1));
+ $this->assertTrue($this->filter->accept($logMessage2));
+ }
+
+ public function testLevelFilterReject()
+ {
+ $level = new LogLevel(5, 'testName2');
+ $logMessage = new LogMessage($level, "");
+ $this->assertFalse($this->filter->accept($logMessage));
+ }
+
+ public function testConstructorThrowsOnInvalidLevel()
+ {
+ $this->expectException(TypeError::class);
+ new MaximumLevelFilter('testName2');
+ }
+}
diff --git a/test/Filter/MessageFilterTest.php b/test/Filter/MessageFilterTest.php
new file mode 100644
index 0000000..e0c2821
--- /dev/null
+++ b/test/Filter/MessageFilterTest.php
@@ -0,0 +1,51 @@
+
+ * @category Horde
+ * @license http://www.horde.org/licenses/bsd BSD
+ * @package Log
+ * @subpackage UnitTests
+ */
+namespace Horde\Log\Test\Filter;
+
+
+use \PHPUnit\Framework\TestCase;
+use Horde\Log\Filter\MessageFilter;
+use Horde\Log\LogMessage;
+use Horde\Log\LogLevel;
+
+
+
+
+class MessageFilterTest extends TestCase
+{
+
+ public function setUp(): void
+ {
+ $this->level1 = new LogLevel(1, 'testName1');
+ $this->level2 = new LogLevel(2, 'testName2');
+ $this->message1 = "foo accept bar";
+ $this->message2 = "foo reject bar";
+ $this->logMessage1 = new LogMessage($this->level1, $this->message1);
+ $this->logMessage2 = new LogMessage($this->level2, $this->message2);
+ }
+
+ public function testMessageFilterRecognizesInvalidRegularExpression(){
+ $this->expectException('InvalidArgumentException');
+ new MessageFilter('invalid regexp');
+ }
+
+ public function testMessageFilter()
+ {
+ $filter = new MessageFilter('/accept/');
+ $this->assertTrue($filter->accept($this->logMessage1));
+ $this->assertFalse($filter->accept($this->logMessage2));
+ }
+
+}
\ No newline at end of file
diff --git a/test/Horde/Log/Filter/MessageTest.php b/test/Filter/MessageTest.php
similarity index 77%
rename from test/Horde/Log/Filter/MessageTest.php
rename to test/Filter/MessageTest.php
index 4bd8b9c..f07896d 100644
--- a/test/Horde/Log/Filter/MessageTest.php
+++ b/test/Filter/MessageTest.php
@@ -13,6 +13,9 @@
* @package Log
* @subpackage UnitTests
*/
+namespace Horde\Log\Test\Filter;
+use \PHPUnit\Framework\TestCase;
+use \Horde_Log_Filter_Message;
/**
* @author Mike Naberezny
@@ -22,17 +25,13 @@
* @package Log
* @subpackage UnitTests
*/
-class Horde_Log_Filter_MessageTest extends PHPUnit_Framework_TestCase
+class MessageTest extends TestCase
{
public function testMessageFilterRecognizesInvalidRegularExpression()
{
- try {
- $filter = new Horde_Log_Filter_Message('invalid regexp');
- $this->fail();
- } catch (InvalidArgumentException $e) {
- $this->assertRegexp('/invalid reg/i', $e->getMessage());
- }
+ $this->expectException('InvalidArgumentException');
+ new Horde_Log_Filter_Message('invalid regexp');
}
public function testMessageFilter()
diff --git a/test/Filter/MinimumLevelFilterTest.php b/test/Filter/MinimumLevelFilterTest.php
new file mode 100644
index 0000000..e4107b3
--- /dev/null
+++ b/test/Filter/MinimumLevelFilterTest.php
@@ -0,0 +1,56 @@
+filter = new MinimumLevelFilter(2);
+ }
+
+ public function testLevelFilterAccept()
+ {
+ $level1 = new LogLevel(1, 'testName1');
+ $level2 = new LogLevel(2, 'testName2');
+ $message1 = 'testMessage1';
+ $message2 = 'testMessage2';
+ $logMessage1 = new LogMessage($level1, $message1);
+ $logMessage2 = new LogMessage($level2, $message2);
+ $this->assertFalse($this->filter->accept($logMessage1));
+ $this->assertTrue($this->filter->accept($logMessage2));
+ }
+
+ public function testLevelFilterReject()
+ {
+ $level = new LogLevel(5, 'testName2');
+ $logMessage = new LogMessage($level, "");
+ $this->assertTrue($this->filter->accept($logMessage));
+ }
+
+ public function testConstructorThrowsOnInvalidLevel()
+ {
+ $this->expectException(TypeError::class);
+ new MinimumLevelFilter('testName2');
+ }
+}
diff --git a/test/Filter/SuppressFilterTest.php b/test/Filter/SuppressFilterTest.php
new file mode 100644
index 0000000..d8bb8b1
--- /dev/null
+++ b/test/Filter/SuppressFilterTest.php
@@ -0,0 +1,72 @@
+
+ * @category Horde
+ * @license http://www.horde.org/licenses/bsd BSD
+ * @package Log
+ * @subpackage UnitTests
+ */
+namespace Horde\Log\Test\Filter;
+
+use \PHPUnit\Framework\TestCase;
+use Horde\Log\Filter\SuppressFilter;
+use Horde\Log\LogMessage;
+use Horde\Log\LogLevel;
+
+
+
+
+class SuppressFilterTest extends TestCase
+{
+ public function setUp(): void
+ {
+ $this->filter = new SuppressFilter();
+ $this->level1 = new LogLevel(1, 'testName1');
+ $this->level2 = new LogLevel(2, 'testName2');
+ $this->level3 = new LogLevel(3, 'testName3');
+ $this->message1 = "test1";
+ $this->message2 = "test2";
+ $this->message3 = "test3";
+ $this->logMessage1 = new LogMessage($this->level1, $this->message1);
+ $this->logMessage2 = new LogMessage($this->level2, $this->message2);
+ $this->logMessage3 = new LogMessage($this->level3, $this->message3);
+ }
+
+
+ public function testSuppressIsInitiallyOff()
+ {
+ $this->assertTrue($this->filter->accept($this->logMessage1));
+ }
+
+
+ public function testSuppressOn()
+ {
+
+ $this->filter->suppress(true);
+ $this->assertFalse($this->filter->accept($this->logMessage1));
+ $this->assertFalse($this->filter->accept($this->logMessage2));
+ }
+
+ public function testSuppressOff()
+ {
+ $this->filter->suppress(false);
+ $this->assertTrue($this->filter->accept($this->logMessage1));
+ $this->assertTrue($this->filter->accept($this->logMessage2));
+ }
+
+ public function testSuppressCanBeReset()
+ {
+ $this->filter->suppress(true);
+ $this->assertFalse($this->filter->accept($this->logMessage1));
+ $this->filter->suppress(false);
+ $this->assertTrue($this->filter->accept($this->logMessage2));
+ $this->filter->suppress(true);
+ $this->assertFalse($this->filter->accept($this->logMessage3));
+ }
+}
\ No newline at end of file
diff --git a/test/Horde/Log/Filter/SuppressTest.php b/test/Filter/SuppressTest.php
similarity index 90%
rename from test/Horde/Log/Filter/SuppressTest.php
rename to test/Filter/SuppressTest.php
index bf2706c..6786872 100644
--- a/test/Horde/Log/Filter/SuppressTest.php
+++ b/test/Filter/SuppressTest.php
@@ -13,6 +13,9 @@
* @package Log
* @subpackage UnitTests
*/
+namespace Horde\Log\Test\Filter;
+use \PHPUnit\Framework\TestCase;
+use \Horde_Log_Filter_Suppress;
/**
* @author Mike Naberezny
@@ -22,9 +25,9 @@
* @package Log
* @subpackage UnitTests
*/
-class Horde_Log_Filter_SuppressTest extends PHPUnit_Framework_TestCase
+class SuppressTest extends TestCase
{
- public function setUp()
+ public function setUp(): void
{
$this->filter = new Horde_Log_Filter_Suppress();
}
diff --git a/test/Formatter/CliFormatterTest.php b/test/Formatter/CliFormatterTest.php
new file mode 100644
index 0000000..3d182f5
--- /dev/null
+++ b/test/Formatter/CliFormatterTest.php
@@ -0,0 +1,88 @@
+
+ * @category Horde
+ * @license http://www.horde.org/licenses/bsd BSD
+ * @package Log
+ */
+
+namespace Horde\Log\Formatter\Test;
+
+use PHPUnit\Framework\TestCase;
+
+use Horde_Cli;
+use Horde\Log\Formatter\CliFormatter;
+
+use Horde\Log\LogMessage;
+use Horde\Log\LogLevel;
+
+class CliFormatterTest extends TestCase
+{
+ public function setUp(): void
+ {
+ $this->cli = new Horde_Cli();
+
+ $this->level1 = new LogLevel(1, 'Emergency');
+ $this->level2 = new LogLevel(2, 'warning');
+ $this->level3 = new LogLevel(3, 'info');
+ $this->level4 = new LogLevel(4, 'Some other value');
+ $this->message1 = 'this is an emergency!';
+ $this->message2 = 'this is a warning!';
+ $this->message3 = 'some info here!';
+ $this->message4 = 'some other info here!';
+ $this->logMessage1 = new LogMessage($this->level1, $this->message1);
+ $this->logMessage2 = new LogMessage($this->level2, $this->message2);
+ $this->logMessage3 = new LogMessage($this->level3, $this->message3);
+ $this->logMessage4 = new LogMessage($this->level4, $this->message4);
+ }
+
+ public function testDefaultFormat()
+ {
+ $f = new CliFormatter($this->cli);
+ $line = $f->format($this->logMessage1);
+
+ $loglevel = $this->logMessage1->level();
+ $name = $loglevel->name();
+
+ # Note: the cliformatter does not output the value of "Criticallity"
+ // $criticality = $loglevel->criticality();
+
+ $this->assertStringContainsString($this->message1, $line);
+ $this->assertStringContainsString($name, $line);
+ }
+
+ public function testColorSettings()
+ {
+ $f = new CliFormatter($this->cli);
+ $logsarray = [$this->logMessage1, $this->logMessage2, $this->logMessage3, $this->logMessage4];
+
+ foreach ($logsarray as $key => $value) {
+ $line = $f->format($value);
+ $loglevel = $value->level();
+ $name = $loglevel->name();
+ $logmessage = $value->message();
+ $flag = '['. str_pad($name, 7, ' ', STR_PAD_BOTH) . '] ';
+
+ switch ($name) {
+ case 'emergency':
+ $this->assertEquals($this->cli->color('red', $flag) . $logmessage, $line);
+ break;
+ case 'warning':
+ $this->assertEquals($this->cli->color('yellow', $flag) . $logmessage, $line);
+ break;
+ case 'info':
+ $this->assertEquals($this->cli->color('blue', $flag) . $logmessage, $line);
+ break;
+ default:
+ $this->assertEquals($flag . $logmessage, $line);
+ break;
+ }
+ }
+ }
+}
diff --git a/test/Formatter/SimpleFormatterTest.php b/test/Formatter/SimpleFormatterTest.php
new file mode 100644
index 0000000..87540b9
--- /dev/null
+++ b/test/Formatter/SimpleFormatterTest.php
@@ -0,0 +1,40 @@
+ $context ]);
+
+ $logMessage->formatMessage([]);
+
+ $line = $f->format($logMessage);
+
+ /*var_dump ($line);*/
+
+ $this->assertEquals('test message testValue', $line);
+
+ }
+}
\ No newline at end of file
diff --git a/test/Horde/Log/Formatter/SimpleTest.php b/test/Formatter/SimpleTest.php
similarity index 70%
rename from test/Horde/Log/Formatter/SimpleTest.php
rename to test/Formatter/SimpleTest.php
index 37a3c62..28cc377 100644
--- a/test/Horde/Log/Formatter/SimpleTest.php
+++ b/test/Formatter/SimpleTest.php
@@ -13,6 +13,10 @@
* @package Log
* @subpackage UnitTests
*/
+namespace Horde\Log\Test;
+use \PHPUnit\Framework\TestCase;
+use \Horde_Log;
+use \Horde_Log_Formatter_Simple;
/**
* @author Mike Naberezny
@@ -22,17 +26,12 @@
* @package Log
* @subpackage UnitTests
*/
-class Horde_Log_Formatter_SimpleTest extends PHPUnit_Framework_TestCase
+class SimpleTest extends TestCase
{
public function testConstructorThrowsOnBadFormatString()
{
- try {
- new Horde_Log_Formatter_Simple(1);
- $this->fail();
- } catch (Exception $e) {
- $this->assertInstanceOf('InvalidArgumentException', $e);
- $this->assertRegExp('/must be a string/i', $e->getMessage());
- }
+ $this->expectException('InvalidArgumentException');
+ new Horde_Log_Formatter_Simple(1);
}
public function testDefaultFormat()
@@ -42,7 +41,7 @@ public function testDefaultFormat()
'level' => $level = Horde_Log::ALERT,
'levelName' => $levelName = 'ALERT'));
- $this->assertContains($message, $line);
- $this->assertContains($levelName, $line);
+ $this->assertStringContainsString($message, $line);
+ $this->assertStringContainsString($levelName, $line);
}
}
diff --git a/test/Horde/Log/Formatter/XmlTest.php b/test/Formatter/XmlTest.php
similarity index 79%
rename from test/Horde/Log/Formatter/XmlTest.php
rename to test/Formatter/XmlTest.php
index 4857ff8..8c7955f 100644
--- a/test/Horde/Log/Formatter/XmlTest.php
+++ b/test/Formatter/XmlTest.php
@@ -12,6 +12,9 @@
* @license http://www.horde.org/licenses/bsd BSD
* @package Log
*/
+namespace Horde\Log\Formatter\Test;
+use \PHPUnit\Framework\TestCase;
+use \Horde_Log_Formatter_Xml;
/**
* @author Mike Naberezny
@@ -20,9 +23,9 @@
* @license http://www.horde.org/licenses/bsd BSD
* @package Log
*/
-class Horde_Log_Formatter_XmlTest extends PHPUnit_Framework_TestCase
+class XmlTest extends TestCase
{
- public function setUp()
+ public function setUp(): void
{
date_default_timezone_set('America/New_York');
}
@@ -32,8 +35,8 @@ public function testDefaultFormat()
$f = new Horde_Log_Formatter_Xml();
$line = $f->format(array('message' => $message = 'message', 'level' => $level = 1));
- $this->assertContains($message, $line);
- $this->assertContains((string)$level, $line);
+ $this->assertStringContainsString($message, $line);
+ $this->assertStringContainsString((string)$level, $line);
}
public function testXmlDeclarationIsStripped()
@@ -41,7 +44,7 @@ public function testXmlDeclarationIsStripped()
$f = new Horde_Log_Formatter_Xml();
$line = $f->format(array('message' => $message = 'message', 'level' => $level = 1));
- $this->assertNotContains('<\?xml version=', $line);
+ $this->assertStringNotContainsString('<\?xml version=', $line);
}
public function testXmlValidates()
diff --git a/test/Horde/Log/Handler/FirebugTest.php b/test/Handler/FirebugTest.php
similarity index 71%
rename from test/Horde/Log/Handler/FirebugTest.php
rename to test/Handler/FirebugTest.php
index 7a7a7ec..286b56d 100644
--- a/test/Horde/Log/Handler/FirebugTest.php
+++ b/test/Handler/FirebugTest.php
@@ -13,6 +13,11 @@
* @package Log
* @subpackage UnitTests
*/
+namespace Horde\Log\Test\Handler;
+use \PHPUnit\Framework\TestCase;
+use \Horde_Log;
+use \Horde_Log_Handler_Stream;
+use \Horde_Log_Handler_Firebug;
/**
* @author Mike Naberezny
@@ -22,23 +27,18 @@
* @package Log
* @subpackage UnitTests
*/
-class Horde_Log_Handler_FirebugTest extends PHPUnit_Framework_TestCase
+class FirebugTest extends TestCase
{
- public function setUp()
+ public function setUp(): void
{
date_default_timezone_set('America/New_York');
}
public function testSettingBadOptionThrows()
{
- try {
- $handler = new Horde_Log_Handler_Stream('php://memory');
- $handler->setOption('foo', 42);
- $this->fail();
- } catch (Exception $e) {
- $this->assertInstanceOf('Horde_Log_Exception', $e);
- $this->assertRegExp('/unknown option/i', $e->getMessage());
- }
+ $this->expectException('Horde_Log_Exception');
+ $handler = new Horde_Log_Handler_Stream('php://memory');
+ $handler->setOption('foo', 42);
}
public function testWrite()
@@ -55,7 +55,7 @@ public function testWrite()
$date = '\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}-\d{2}:\d{2}';
- $this->assertRegExp("/console.error\(\"$date $levelName: $message\"\);/", $contents);
+ $this->assertMatchesRegularExpression("/console.error\(\"$date $levelName: $message\"\);/", $contents);
}
}
diff --git a/test/Horde/Log/Handler/NullTest.php b/test/Handler/NullTest.php
similarity index 86%
rename from test/Horde/Log/Handler/NullTest.php
rename to test/Handler/NullTest.php
index 64bf442..20d1e2e 100644
--- a/test/Horde/Log/Handler/NullTest.php
+++ b/test/Handler/NullTest.php
@@ -13,6 +13,9 @@
* @package Log
* @subpackage UnitTests
*/
+namespace Horde\Log\Test\Handler;
+use \PHPUnit\Framework\TestCase;
+use \Horde_Log_Handler_Null;
/**
* @author Mike Naberezny
@@ -22,7 +25,7 @@
* @package Log
* @subpackage UnitTests
*/
-class Horde_Log_Handler_NullTest extends PHPUnit_Framework_TestCase
+class NullTest extends TestCase
{
public function testWrite()
{
diff --git a/test/Horde/Log/Handler/StreamTest.php b/test/Handler/StreamTest.php
similarity index 55%
rename from test/Horde/Log/Handler/StreamTest.php
rename to test/Handler/StreamTest.php
index 0759b20..e002c50 100644
--- a/test/Horde/Log/Handler/StreamTest.php
+++ b/test/Handler/StreamTest.php
@@ -13,6 +13,10 @@
* @package Log
* @subpackage UnitTests
*/
+namespace Horde\Log\Test\Handler;
+use \PHPUnit\Framework\TestCase;
+use \Horde_Log_Handler_Stream;
+use \Horde_Log;
/**
* @author Mike Naberezny
@@ -22,70 +26,56 @@
* @package Log
* @subpackage UnitTests
*/
-class Horde_Log_Handler_StreamTest extends PHPUnit_Framework_TestCase
+class StreamTest extends TestCase
{
- public function setUp()
+ public function setUp(): void
{
date_default_timezone_set('America/New_York');
}
public function testConstructorThrowsWhenResourceIsNotStream()
{
+ $this->expectException('Horde_Log_Exception');
$resource = xml_parser_create();
- try {
- new Horde_Log_Handler_Stream($resource);
- $this->fail();
- } catch (Exception $e) {
- $this->assertInstanceOf('Horde_Log_Exception', $e);
- $this->assertRegExp('/not a stream/i', $e->getMessage());
- }
+ new Horde_Log_Handler_Stream($resource);
xml_parser_free($resource);
}
public function testConstructorWithValidStream()
{
$stream = fopen('php://memory', 'a');
- new Horde_Log_Handler_Stream($stream);
+ $this->assertInstanceOf(
+ 'Horde_Log_Handler_Base',
+ new Horde_Log_Handler_Stream($stream)
+ );
}
public function testConstructorWithValidUrl()
{
- new Horde_Log_Handler_Stream('php://memory');
+ $this->assertInstanceOf(
+ 'Horde_Log_Handler_Base',
+ new Horde_Log_Handler_Stream('php://memory')
+ );
}
public function testConstructorThrowsWhenModeSpecifiedForExistingStream()
{
+ $this->expectException('Horde_Log_Exception');
$stream = fopen('php://memory', 'a');
- try {
- new Horde_Log_Handler_Stream($stream, 'w');
- $this->fail();
- } catch (Exception $e) {
- $this->assertInstanceOf('Horde_Log_Exception', $e);
- $this->assertRegExp('/existing stream/i', $e->getMessage());
- }
+ new Horde_Log_Handler_Stream($stream, 'w');
}
public function testConstructorThrowsWhenStreamCannotBeOpened()
{
- try {
- new Horde_Log_Handler_Stream('');
- $this->fail();
- } catch (Exception $e) {
- $this->assertInstanceOf('Horde_Log_Exception', $e);
- $this->assertRegExp('/cannot be opened/i', $e->getMessage());
- }
+ $this->expectException('Horde_Log_Exception');
+ new Horde_Log_Handler_Stream('');
}
public function testSettingBadOptionThrows()
{
- try {
- $handler = new Horde_Log_Handler_Stream('php://memory');
- $handler->setOption('foo', 42);
- $this->fail();
- } catch (Exception $e) {
- $this->assertInstanceOf('Horde_Log_Exception', $e);
- $this->assertRegExp('/unknown option/i', $e->getMessage());
- }
+ $this->expectException('Horde_Log_Exception');
+ $handler = new Horde_Log_Handler_Stream('php://memory');
+ $handler->setOption('foo', 42);
}
public function testWrite()
@@ -104,22 +94,16 @@ public function testWrite()
$date = '\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}-\d{2}:\d{2}';
- $this->assertRegExp("/$date $levelName: $message/", $contents);
+ $this->assertMatchesRegularExpression("/$date $levelName: $message/", $contents);
}
public function testWriteThrowsWhenStreamWriteFails()
{
+ $this->expectException('Horde_Log_Exception');
$stream = fopen('php://memory', 'a');
$handler = new Horde_Log_Handler_Stream($stream);
fclose($stream);
-
- try {
- $handler->write(array('message' => 'foo', 'level' => 1));
- $this->fail();
- } catch (Exception $e) {
- $this->assertInstanceOf('Horde_Log_Exception', $e);
- $this->assertRegExp('/unable to write/i', $e->getMessage());
- }
+ $handler->write(array('message' => 'foo', 'level' => 1));
}
}
diff --git a/test/Horde/Log/AllTests.php b/test/Horde/Log/AllTests.php
deleted file mode 100644
index 49583c8..0000000
--- a/test/Horde/Log/AllTests.php
+++ /dev/null
@@ -1,3 +0,0 @@
-run();
diff --git a/test/Horde/Log/bootstrap.php b/test/Horde/Log/bootstrap.php
deleted file mode 100644
index 4e19e93..0000000
--- a/test/Horde/Log/bootstrap.php
+++ /dev/null
@@ -1,3 +0,0 @@
-
@@ -22,9 +27,9 @@
* @package Log
* @subpackage UnitTests
*/
-class Horde_Log_LogTest extends PHPUnit_Framework_TestCase
+class LogTest extends TestCase
{
- public function setUp()
+ public function setUp(): void
{
date_default_timezone_set('America/New_York');
@@ -40,7 +45,7 @@ public function testHandlerCanBeAddedWithConstructor()
$logger->log($message = 'message-to-long', Horde_Log::INFO);
rewind($this->log);
- $this->assertContains($message, stream_get_contents($this->log));
+ $this->assertStringContainsString($message, stream_get_contents($this->log));
}
public function testaddHandler()
@@ -50,7 +55,7 @@ public function testaddHandler()
$logger->log($message = 'message-to-log', Horde_Log::INFO);
rewind($this->log);
- $this->assertContains($message, stream_get_contents($this->log));
+ $this->assertStringContainsString($message, stream_get_contents($this->log));
}
public function testaddHandlerAddsMultipleHandlers()
@@ -72,9 +77,9 @@ public function testaddHandlerAddsMultipleHandlers()
// verify both handlers were called by the logger
rewind($log1);
- $this->assertContains($message, stream_get_contents($log1));
+ $this->assertStringContainsString($message, stream_get_contents($log1));
rewind($log2);
- $this->assertContains($message, stream_get_contents($log2));
+ $this->assertStringContainsString($message, stream_get_contents($log2));
// prove the two memory streams are different
// and both handlers were indeed called
@@ -84,52 +89,32 @@ public function testaddHandlerAddsMultipleHandlers()
public function testLoggerThrowsWhenNoHandlers()
{
+ $this->expectException('Horde_Log_Exception');
$logger = new Horde_Log_Logger();
- try {
- $logger->log('message', Horde_Log::INFO);
- $this->fail();
- } catch (Horde_Log_Exception $e) {
- $this->assertRegexp('/no handler/i', $e->getMessage());
- }
+ $logger->log('message', Horde_Log::INFO);
}
// Levels
public function testLogThrowsOnBadLogLevel()
{
+ $this->expectException('Horde_Log_Exception');
$logger = new Horde_Log_Logger($this->handler);
- try {
- $logger->log('foo', 42);
- $this->fail();
- } catch (Exception $e) {
- $this->assertInstanceOf('Horde_Log_Exception', $e);
- $this->assertRegExp('/bad log level/i', $e->getMessage());
- }
+ $logger->log('foo', 42);
}
public function testLogThrough__callThrowsOnBadLogLevel()
{
+ $this->expectException('Horde_Log_Exception');
$logger = new Horde_Log_Logger($this->handler);
- try {
- $logger->nonexistantLevel('');
- $this->fail();
- } catch (Exception $e) {
- $this->assertInstanceOf('Horde_Log_Exception', $e);
- $this->assertRegExp('/bad log level/i', $e->getMessage());
- }
+ $logger->nonexistantLevel('');
}
public function testAddingLevelThrowsWhenOverridingBuiltinLogLevel()
{
- try {
- $logger = new Horde_Log_Logger($this->handler);
- $logger->addLevel('WARN', 99);
- $this->fail();
- } catch (Exception $e) {
- $this->assertInstanceOf('Horde_Log_Exception', $e);
- $this->assertRegExp('/existing log level/i', $e->getMessage());
- }
-
+ $this->expectException('Horde_Log_Exception');
+ $logger = new Horde_Log_Logger($this->handler);
+ $logger->addLevel('WARN', 99);
}
public function testAddLogLevel()
@@ -141,7 +126,7 @@ public function testAddLogLevel()
rewind($this->log);
$logdata = stream_get_contents($this->log);
- $this->assertContains($levelName, $logdata);
- $this->assertContains($message, $logdata);
+ $this->assertStringContainsString($levelName, $logdata);
+ $this->assertStringContainsString($message, $logdata);
}
}
diff --git a/test/bootstrap.php b/test/bootstrap.php
new file mode 100644
index 0000000..bde1685
--- /dev/null
+++ b/test/bootstrap.php
@@ -0,0 +1,12 @@
+