| <?php |
| /** |
| * |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| * |
| * @copyright Copyright (C) 2005-2010 eZ Systems AS. All rights reserved. |
| * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0 |
| * @version //autogentag// |
| * @filesource |
| * @package Debug |
| * @subpackage Tests |
| */ |
| |
| require_once 'test_classes.php'; |
| |
| function testErrorHandler( $errno, $errstr, $errfile, $errline ) |
| { |
| ezcDebug::debugHandler( $errno, $errstr, $errfile, $errline ); |
| return true; |
| } |
| |
| /** |
| * @package Debug |
| * @subpackage Tests |
| */ |
| class ezcDebugTest extends ezcTestCase |
| { |
| private $dbg; |
| |
| protected function setUp() |
| { |
| $this->dbg = ezcDebug::getInstance(); |
| $this->dbg->reset(); |
| $this->dbg->setOutputFormatter( new TestReporter() ); |
| } |
| |
| protected function tearDown() |
| { |
| restore_error_handler(); |
| } |
| |
| public function testGetAccessSuccess() |
| { |
| $this->assertEquals( |
| new ezcDebugOptions(), |
| $this->dbg->options, |
| 'Property $options does not have proper default value.' |
| ); |
| } |
| |
| public function testGetAccessFailures() |
| { |
| try |
| { |
| echo $this->dbg->foobar; |
| $this->fail( 'Exception not thrown on get access to unknown property $foobar.' ); |
| } |
| catch ( ezcBasePropertyNotFoundException $e ) |
| {} |
| } |
| |
| public function testSetAccessSuccess() |
| { |
| $this->assertSetProperty( |
| $this->dbg, |
| 'options', |
| array( new ezcDebugOptions(), ) |
| ); |
| } |
| |
| public function testSetAccessFailure() |
| { |
| $this->assertSetPropertyFails( |
| $this->dbg, |
| 'options', |
| array( null, true, 23, 23.42, 'foobar', array(), new stdClass ) |
| ); |
| |
| try |
| { |
| $this->dbg->foo = 23; |
| $this->fail( 'ezcBasePropertyNotFoundException not throwen on set access to non-existent property.' ); |
| } |
| catch ( ezcBasePropertyNotFoundException $e ) {} |
| } |
| |
| public function testIssetAccessSuccess() |
| { |
| $this->assertTrue( |
| isset( $this->dbg->options ), |
| 'Property $options does not seem to be set.' |
| ); |
| } |
| |
| public function testIssetAccessFailure() |
| { |
| $this->assertFalse( |
| isset( $this->dbg->foobar ), |
| 'Property $foobar seems to be set.' |
| ); |
| } |
| |
| // Messages are already tested in DebugMemoryWriterTest. |
| // Quick test if the basics work. |
| public function testSimpleMessage() |
| { |
| $dbg = $this->dbg; |
| $dbg->log("Running testSimpleMessage", 0, array("source" => "src", "category" => "cat") ); |
| |
| $struct = $dbg->generateOutput(); |
| $this->assertEquals(1, count( $struct[0] ) ); |
| $this->assertEquals("Running testSimpleMessage", $struct[0][0]->message ); |
| } |
| |
| public function testMultipleMessages() |
| { |
| $dbg = $this->dbg; |
| |
| $dbg->log("msg1", 0, array("source" => "src", "category" => "cat") ); |
| $dbg->log("msg2", 0, array("source" => "src", "category" => "cat") ); |
| $dbg->log("msg3", 1, array("source" => "src", "category" => "cat") ); |
| |
| $struct = $dbg->generateOutput(); |
| $this->assertEquals(3, count( $struct[0] ) ); |
| $this->assertEquals("msg1", $struct[0][0]->message ); |
| $this->assertEquals("msg2", $struct[0][1]->message ); |
| $this->assertEquals("msg3", $struct[0][2]->message ); |
| } |
| |
| // Timer is already tested in DebugTimerTest. |
| // Quick test if the basics work. |
| public function testTimers() |
| { |
| $dbg = $this->dbg; |
| $dbg->startTimer("a", "c"); |
| $dbg->stopTimer("a"); |
| |
| $struct = $dbg->generateOutput(); |
| $this->assertEquals(1, count( $struct[1] ) ); |
| $this->assertEquals("a", $struct[1][0]->name ); |
| $this->assertEquals("c", $struct[1][0]->group ); |
| } |
| |
| public function testTimersSwitch() |
| { |
| $dbg = $this->dbg; |
| $dbg->startTimer("a", "c"); |
| $dbg->switchTimer( "b", "a" ); |
| $dbg->stopTimer("b"); |
| |
| $struct = $dbg->generateOutput(); |
| $this->assertEquals(1, count( $struct[1] ) ); |
| $this->assertEquals("a", $struct[1][0]->name ); |
| $this->assertEquals("c", $struct[1][0]->group ); |
| } |
| |
| public function testDefaultTimers() |
| { |
| $dbg = $this->dbg; |
| $dbg->startTimer("a"); |
| $dbg->stopTimer("a"); |
| |
| $struct = $dbg->generateOutput(); |
| |
| $this->assertEquals(1, count( $struct[1] ) ); |
| $this->assertEquals("a", $struct[1][0]->name ); |
| $this->assertEquals("", $struct[1][0]->group ); |
| } |
| |
| public function testDefaultSourceAndCategory() |
| { |
| $dbg = $this->dbg; |
| $dbg->log("bla", 1); |
| |
| $struct = $dbg->generateOutput(); |
| $this->assertEquals(1, count( $struct[0] ) ); |
| $this->assertEquals("default", $struct[0][0]->category ); |
| |
| // Changing the default source from the log. |
| $dbg->getEventLog()->source = "bla"; |
| |
| $dbg->log("bla", 1); |
| $struct = $dbg->generateOutput(); |
| $this->assertEquals(2, count( $struct[0] ) ); |
| $this->assertEquals("bla", $struct[0][1]->source ); |
| } |
| |
| public function testIndependentFromEventLog() |
| { |
| $dbg = $this->dbg; |
| $dbg->log("bla", 1); |
| |
| ezcLog::getInstance()->setMapper( new MyFakeMapper() ); |
| |
| $struct = $dbg->generateOutput(); |
| $this->assertEquals(1, count( $struct[0] ) ); |
| $this->assertEquals("default", $struct[0][0]->category ); |
| |
| $dbg->log("bla", 1); |
| $struct = $dbg->generateOutput(); |
| $this->assertEquals(2, count( $struct[0] ) ); |
| } |
| |
| public function testLogStackTrace() |
| { |
| $dbg = $this->dbg; |
| $dbg->log( "bla", 1, array(), true ); |
| |
| ezcLog::getInstance()->setMapper( new MyFakeMapper() ); |
| |
| $struct = $dbg->generateOutput(); |
| |
| $this->assertType( |
| 'ezcDebugStacktraceIterator', |
| $struct[0][0]->stackTrace |
| ); |
| } |
| |
| public function testDebugErrorHandler() |
| { |
| $beforeTime = time(); |
| |
| set_error_handler( 'testErrorHandler' ); |
| trigger_error( '[Paynet, templates] Cannot load template', E_USER_WARNING ); |
| restore_error_handler(); |
| |
| $afterTime = time(); |
| |
| $struct = $this->dbg->generateOutput(); |
| |
| // Local spefics |
| $this->assertGreaterThanOrEqual( |
| $beforeTime, |
| $struct[0][0]->datetime |
| ); |
| $this->assertLessThanOrEqual( |
| $afterTime, |
| $struct[0][0]->datetime |
| ); |
| |
| // Unify results |
| $struct[0][0]->datetime = null; |
| |
| $fakeStruct = array( |
| array( |
| new ezcDebugStructure(), |
| ), |
| array() |
| ); |
| $fakeStruct[0][0]->message = 'Cannot load template'; |
| $fakeStruct[0][0]->severity = 1; |
| $fakeStruct[0][0]->source = 'Paynet'; |
| $fakeStruct[0][0]->category = 'templates'; |
| $fakeStruct[0][0]->datetime = null; |
| $fakeStruct[0][0]->verbosity = false; |
| $fakeStruct[0][0]->file = __FILE__; |
| $fakeStruct[0][0]->line = 221; |
| |
| $this->assertEquals( |
| $fakeStruct, |
| $struct |
| ); |
| } |
| |
| public function testDebugStructureToString() |
| { |
| $struct = new ezcDebugStructure(); |
| $struct->message = 'Cannot load template'; |
| $struct->severity = 1; |
| $struct->source = 'Paynet'; |
| $struct->category = 'templates'; |
| $struct->datetime = time(); |
| $struct->verbosity = false; |
| $struct->file = __FILE__; |
| $struct->line = 232; |
| |
| $fakeRes = <<<EOT |
| message => {$struct->message} |
| severity => {$struct->severity} |
| source => {$struct->source} |
| category => {$struct->category} |
| datetime => {$struct->datetime} |
| verbosity => {$struct->verbosity} |
| file => {$struct->file} |
| line => {$struct->line} |
| |
| EOT; |
| |
| $this->assertEquals( |
| $fakeRes, |
| $struct->toString() |
| ); |
| } |
| |
| public static function suite() |
| { |
| return new PHPUnit_Framework_TestSuite("ezcDebugTest"); |
| } |
| } |
| ?> |