You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
359 lines
13 KiB
359 lines
13 KiB
<?php
|
|
|
|
/*
|
|
* @copyright NetMonsters <team@netmonsters.ru>
|
|
* @link http://netmonsters.ru
|
|
* @package Majestic
|
|
* @subpackage UnitTests
|
|
* @since 2011-10-28
|
|
*
|
|
* Unit tests for CommandProfiler class
|
|
*/
|
|
|
|
require_once dirname(__FILE__) . '/../../../Registry.php';
|
|
require_once dirname(__FILE__) . '/../../../Config.php';
|
|
require_once dirname(__FILE__) . '/../../../exception/GeneralException.php';
|
|
require_once dirname(__FILE__) . '/../../../util/FirePHPCore-0.3.2/lib/FirePHPCore/fb.php';
|
|
require_once dirname(__FILE__) . '/../../../util/profiler/Profiler.php';
|
|
|
|
/**
|
|
* @TODO: Profiler->getJson() hardly depends on FB library
|
|
*/
|
|
class ProfilerTest extends PHPUnit_Framework_TestCase
|
|
{
|
|
|
|
public function run(PHPUnit_Framework_TestResult $result = NULL)
|
|
{
|
|
$this->setPreserveGlobalState(false);
|
|
return parent::run($result);
|
|
}
|
|
|
|
public function setUp()
|
|
{
|
|
set_new_overload(array($this, 'newCallback'));
|
|
}
|
|
|
|
/**
|
|
* @runInSeparateProcess
|
|
*/
|
|
public function testGetInstaceNoDebug()
|
|
{
|
|
Config::set('PROFILER', false);
|
|
$this->setExpectedException('GeneralException', 'Need turn PROFILER before use.');
|
|
Profiler::getInstance();
|
|
}
|
|
|
|
/**
|
|
* @runInSeparateProcess
|
|
*/
|
|
public function testGetInstance()
|
|
{
|
|
Config::set('PROFILER', true);
|
|
$profiler = Profiler::getInstance();
|
|
$this->assertInstanceOf('Profiler', $profiler);
|
|
$this->assertSame($profiler, Profiler::getInstance());
|
|
}
|
|
|
|
/**
|
|
* @runInSeparateProcess
|
|
*/
|
|
public function testProfilerCommand()
|
|
{
|
|
Config::set('PROFILER', true);
|
|
$this->getMock('CommandProfiler', array('getType', 'getCommand', 'getElapsed'), array(), 'CommandProfilerMock', false);
|
|
$profiler = Profiler::getInstance();
|
|
$cmdProfiler = $profiler->profilerCommand('command', 'type');
|
|
$this->assertInstanceOf('CommandProfiler', $cmdProfiler);
|
|
}
|
|
|
|
/**
|
|
* @runInSeparateProcess
|
|
*/
|
|
public function testStartEndNoCommandProfiler()
|
|
{
|
|
Config::set('PROFILER', true);
|
|
Config::set('PROFILER_DETAILS', true);
|
|
$profiler = Profiler::getInstance();
|
|
$profiler->start();
|
|
$result = $profiler->end('<body></body>');
|
|
$this->assertNotEquals('<body></body>', $result);
|
|
$this->assertStringStartsWith('<body>', $result);
|
|
$this->assertStringEndsWith(']<br/></div></body>', $result);
|
|
$this->assertContains('<div style="clear:both; font:12px monospace; margin: 5px; white-space: pre;">', $result);
|
|
|
|
|
|
$this->assertSame('html', $profiler->end('html'));
|
|
}
|
|
|
|
/**
|
|
* @runInSeparateProcess
|
|
*/
|
|
public function testStartEndWithCommandProfiler()
|
|
{
|
|
Config::set('PROFILER', true);
|
|
Config::set('PROFILER_DETAILS', true);
|
|
|
|
$this->getMock('CommandProfiler', array('getType', 'getCommand', 'getElapsed'), array(), 'CommandProfilerMock', false);
|
|
$profiler = Profiler::getInstance();
|
|
|
|
$profiler->start();
|
|
$cmdProfiler = $profiler->profilerCommand('command', 'type');
|
|
$this->assertNotNull($cmdProfiler);
|
|
$result = $profiler->end('<body></body>');
|
|
$this->assertNotEquals('<body></body>', $result);
|
|
$this->assertStringEndsNotWith(']<br/></div></body>', $result);
|
|
$this->assertContains('Queries: 1 [0 ms]<br/>() [0ms] <br/>', $result);
|
|
}
|
|
|
|
/**
|
|
* @runInSeparateProcess
|
|
*/
|
|
public function testStartEndWithCommandProfilerWithNonDetails()
|
|
{
|
|
Config::set('PROFILER', true);
|
|
Config::set('PROFILER_DETAILS', false);
|
|
|
|
$this->getMock('CommandProfiler', array('getType', 'getCommand', 'getElapsed'), array(), 'CommandProfilerMock', false);
|
|
$profiler = Profiler::getInstance();
|
|
$profiler->start();
|
|
$result = $profiler->end('<body></body>');
|
|
$this->assertNotEquals('<body></body>', $result);
|
|
$this->assertContains('Queries not counted.', $result);
|
|
}
|
|
|
|
/**
|
|
* @runInSeparateProcess
|
|
*/
|
|
public function testStartEndWithCommandProfilerWithNonDetailsButExistingQueries()
|
|
{
|
|
Config::set('PROFILER', true);
|
|
Config::set('PROFILER_DETAILS', false);
|
|
|
|
$this->getMock('CommandProfiler', array('getType', 'getCommand', 'getElapsed'), array(), 'CommandProfilerMock', false);
|
|
$profiler = Profiler::getInstance();
|
|
$profiler->start();
|
|
$cmdProfiler = $profiler->profilerCommand('command', 'type');
|
|
$result = $profiler->end('<body></body>');
|
|
$this->assertNotEquals('<body></body>', $result);
|
|
$this->assertStringEndsNotWith(']<br/></div></body>', $result);
|
|
$this->assertContains('Queries: 1', $result);
|
|
}
|
|
|
|
/**
|
|
* @runInSeparateProcess
|
|
*/
|
|
public function testStartEndWithCommandProfilerWithDetailsButNonQueries()
|
|
{
|
|
Config::set('PROFILER', true);
|
|
Config::set('PROFILER_DETAILS', true);
|
|
|
|
$this->getMock('CommandProfiler', array('getType', 'getCommand', 'getElapsed'), array(), 'CommandProfilerMock', false);
|
|
$profiler = Profiler::getInstance();
|
|
$profiler->start();
|
|
$result = $profiler->end('<body></body>');
|
|
$this->assertNotEquals('<body></body>', $result);
|
|
$this->assertStringEndsWith(']<br/></div></body>', $result);
|
|
$this->assertContains('Queries: 0', $result);
|
|
}
|
|
|
|
/**
|
|
* @runInSeparateProcess
|
|
*/
|
|
public function testGetJSON()
|
|
{
|
|
Config::set('PROFILER', true);
|
|
Config::set('PROFILER_DETAILS', true);
|
|
|
|
$this->getMock('CommandProfiler', array('getType', 'getCommand', 'getElapsed'), array(), 'CommandProfilerMock', false);
|
|
$profiler = Profiler::getInstance();
|
|
$cmdProfiler = $profiler->profilerCommand('command', 'type');
|
|
$fire_php_mock = $this->getMockBuilder('FirePHP')
|
|
->disableOriginalConstructor()
|
|
->setMethods(array('__construct', 'fb'))
|
|
->getMock();
|
|
$fire_php_mock->expects($this->exactly(2))
|
|
->method('fb')
|
|
->with($this->anything(), $this->logicalAnd($this->logicalXor($this->anything(), $this->stringContains('Queries not'))), $this->logicalXor($this->anything(), $this->stringContains('Queries: 0'))); // Expected "Queries: 1"
|
|
$reflection_property = new ReflectionProperty('FirePHP', 'instance');
|
|
$reflection_property->setAccessible(true);
|
|
$reflection_property->setValue($fire_php_mock);
|
|
$this->assertNull($profiler->getJson());
|
|
}
|
|
|
|
/**
|
|
* @runInSeparateProcess
|
|
*/
|
|
public function testGetJSONWithNonDetails()
|
|
{
|
|
Config::set('PROFILER', true);
|
|
Config::set('PROFILER_DETAILS', false);
|
|
|
|
$this->getMock('CommandProfiler', array('getType', 'getCommand', 'getElapsed'), array(), 'CommandProfilerMock', false);
|
|
$profiler = Profiler::getInstance();
|
|
$fire_php_mock = $this->getMockBuilder('FirePHP')
|
|
->disableOriginalConstructor()
|
|
->setMethods(array('__construct', 'fb'))
|
|
->getMock();
|
|
$fire_php_mock->expects($this->exactly(2))
|
|
->method('fb')
|
|
->with($this->anything(), $this->logicalAnd($this->logicalXor($this->anything(), $this->stringContains('Queries: 1'))), $this->logicalXor($this->anything(), $this->stringContains('Queries: 0'))); // expected "Queries not counted"
|
|
$reflection_property = new ReflectionProperty('FirePHP', 'instance');
|
|
$reflection_property->setAccessible(true);
|
|
$reflection_property->setValue($fire_php_mock);
|
|
$this->assertNull($profiler->getJson());
|
|
}
|
|
|
|
/**
|
|
* @runInSeparateProcess
|
|
*/
|
|
public function testGetJSONWithNonDetailsButExistingQueries()
|
|
{
|
|
Config::set('PROFILER', true);
|
|
Config::set('PROFILER_DETAILS', false);
|
|
|
|
$this->getMock('CommandProfiler', array('getType', 'getCommand', 'getElapsed'), array(), 'CommandProfilerMock', false);
|
|
$profiler = Profiler::getInstance();
|
|
$cmdProfiler = $profiler->profilerCommand('command', 'type');
|
|
$fire_php_mock = $this->getMockBuilder('FirePHP')
|
|
->disableOriginalConstructor()
|
|
->setMethods(array('__construct', 'fb'))
|
|
->getMock();
|
|
$fire_php_mock->expects($this->exactly(2))
|
|
->method('fb')
|
|
->with($this->anything(), $this->logicalAnd($this->logicalXor($this->anything(), $this->stringContains('Queries not counted'))), $this->logicalXor($this->anything(), $this->stringContains('Queries: 0'))); // expected "Queries: 1"
|
|
$reflection_property = new ReflectionProperty('FirePHP', 'instance');
|
|
$reflection_property->setAccessible(true);
|
|
$reflection_property->setValue($fire_php_mock);
|
|
$this->assertNull($profiler->getJson());
|
|
}
|
|
|
|
/**
|
|
* @runInSeparateProcess
|
|
*/
|
|
public function testGetJSONWithDetailsButNonQueries()
|
|
{
|
|
Config::set('PROFILER', true);
|
|
Config::set('PROFILER_DETAILS', true);
|
|
|
|
$this->getMock('CommandProfiler', array('getType', 'getCommand', 'getElapsed'), array(), 'CommandProfilerMock', false);
|
|
$profiler = Profiler::getInstance();
|
|
$fire_php_mock = $this->getMockBuilder('FirePHP')
|
|
->disableOriginalConstructor()
|
|
->setMethods(array('__construct', 'fb'))
|
|
->getMock();
|
|
$fire_php_mock->expects($this->exactly(2))
|
|
->method('fb')
|
|
->with($this->anything(), $this->logicalAnd($this->logicalXor($this->anything(), $this->stringContains('Queries not counted'))), $this->logicalXor($this->anything(), $this->stringContains('Queries: 1'))); // expected "Queries: 0"
|
|
$reflection_property = new ReflectionProperty('FirePHP', 'instance');
|
|
$reflection_property->setAccessible(true);
|
|
$reflection_property->setValue($fire_php_mock);
|
|
$this->assertNull($profiler->getJson());
|
|
}
|
|
|
|
/**
|
|
* @runInSeparateProcess
|
|
*/
|
|
public function testGetCLI()
|
|
{
|
|
Config::set('PROFILER', true);
|
|
Config::set('PROFILER_DETAILS', true);
|
|
|
|
$this->getMock('CommandProfiler', array('getType', 'getCommand', 'getElapsed'), array(), 'CommandProfilerMock', false);
|
|
$profiler = Profiler::getInstance();
|
|
$cmdProfiler = $profiler->profilerCommand('command', 'type');
|
|
$result = $profiler->getCli();
|
|
$this->assertNotNull($result);
|
|
$this->assertContains('Queries: 1', Profiler::getInstance()->getCli());
|
|
}
|
|
|
|
/**
|
|
* @runInSeparateProcess
|
|
*/
|
|
public function testGetCLIWithNonDetails()
|
|
{
|
|
Config::set('PROFILER', true);
|
|
Config::set('PROFILER_DETAILS', false);
|
|
|
|
$this->getMock('CommandProfiler', array('getType', 'getCommand', 'getElapsed'), array(), 'CommandProfilerMock', false);
|
|
$profiler = Profiler::getInstance();
|
|
$result = $profiler->getCli();
|
|
$this->assertNotNull($result);
|
|
$this->assertContains('Queries not counted', Profiler::getInstance()->getCli());
|
|
}
|
|
|
|
/**
|
|
* @runInSeparateProcess
|
|
*/
|
|
public function testGetCLIWithNonDetailsButExistingQueries()
|
|
{
|
|
Config::set('PROFILER', true);
|
|
Config::set('PROFILER_DETAILS', false);
|
|
|
|
$this->getMock('CommandProfiler', array('getType', 'getCommand', 'getElapsed'), array(), 'CommandProfilerMock', false);
|
|
$profiler = Profiler::getInstance();
|
|
$cmdProfiler = $profiler->profilerCommand('command', 'type');
|
|
$result = $profiler->getCli();
|
|
$this->assertNotNull($result);
|
|
$this->assertContains('Queries: 1', Profiler::getInstance()->getCli());
|
|
}
|
|
|
|
/**
|
|
* @runInSeparateProcess
|
|
*/
|
|
public function testGetCLIWithDetailsButNonQueries()
|
|
{
|
|
Config::set('PROFILER', true);
|
|
Config::set('PROFILER_DETAILS', true);
|
|
|
|
$this->getMock('CommandProfiler', array('getType', 'getCommand', 'getElapsed'), array(), 'CommandProfilerMock', false);
|
|
$profiler = Profiler::getInstance();
|
|
$result = $profiler->getCli();
|
|
$this->assertNotNull($result);
|
|
$this->assertContains('Queries: 0', Profiler::getInstance()->getCli());
|
|
}
|
|
|
|
public function tearDown()
|
|
{
|
|
// if (!is_null(Config::get('DEBUG'))) {
|
|
// $debug = Config::get('DEBUG') ? 'TRUE' : 'FALSE';
|
|
// echo PHP_EOL . __CLASS__ . ' ' . $debug . PHP_EOL;
|
|
// } else {
|
|
// echo PHP_EOL . __CLASS__ . ' ' . 'DEBUG NOT DEFINED' . PHP_EOL;
|
|
// }
|
|
unset_new_overload();
|
|
}
|
|
|
|
protected function newCallback($className)
|
|
{
|
|
switch ($className) {
|
|
case 'CommandProfiler':
|
|
return 'CommandProfilerMock';
|
|
default:
|
|
return $className;
|
|
}
|
|
}
|
|
}
|
|
//
|
|
//
|
|
//class CommandProfilerMock
|
|
//{
|
|
//
|
|
// public function __construct($type, $command)
|
|
// {
|
|
// }
|
|
//
|
|
// public function getCommand()
|
|
// {
|
|
// return 'command';
|
|
// }
|
|
//
|
|
// public function getType()
|
|
// {
|
|
// return 'type';
|
|
// }
|
|
//
|
|
// public function getElapsed()
|
|
// {
|
|
// return 10;
|
|
// }
|
|
//}
|