the whole shebang
This commit is contained in:
96
vendor/filp/whoops/tests/Whoops/Handler/JsonResponseHandlerTest.php
vendored
Normal file
96
vendor/filp/whoops/tests/Whoops/Handler/JsonResponseHandlerTest.php
vendored
Normal file
@@ -0,0 +1,96 @@
|
||||
<?php
|
||||
/**
|
||||
* Whoops - php errors for cool kids
|
||||
* @author Filipe Dobreira <http://github.com/filp>
|
||||
*/
|
||||
|
||||
namespace Whoops\Handler;
|
||||
use Whoops\TestCase;
|
||||
use Whoops\Handler\JsonResponseHandler;
|
||||
use RuntimeException;
|
||||
|
||||
class JsonResponseHandlerTest extends TestCase
|
||||
{
|
||||
/**
|
||||
* @return Whoops\Handler\JsonResponseHandler
|
||||
*/
|
||||
private function getHandler()
|
||||
{
|
||||
return new JsonResponseHandler;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return RuntimeException
|
||||
*/
|
||||
public function getException($message = 'test message')
|
||||
{
|
||||
return new RuntimeException($message);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param bool $withTrace
|
||||
* @return array
|
||||
*/
|
||||
private function getJsonResponseFromHandler($withTrace = false)
|
||||
{
|
||||
$handler = $this->getHandler();
|
||||
$handler->addTraceToOutput($withTrace);
|
||||
|
||||
$run = $this->getRunInstance();
|
||||
$run->pushHandler($handler);
|
||||
$run->register();
|
||||
|
||||
$exception = $this->getException();
|
||||
ob_start();
|
||||
$run->handleException($exception);
|
||||
$json = json_decode(ob_get_clean(), true);
|
||||
|
||||
// Check that the json response is parse-able:
|
||||
$this->assertEquals(json_last_error(), JSON_ERROR_NONE);
|
||||
|
||||
return $json;
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers Whoops\Handler\JsonResponseHandler::addTraceToOutput
|
||||
* @covers Whoops\Handler\JsonResponseHandler::handle
|
||||
*/
|
||||
public function testReturnsWithoutFrames()
|
||||
{
|
||||
$json = $this->getJsonResponseFromHandler($withTrace = false);
|
||||
|
||||
// Check that the response has the expected keys:
|
||||
$this->assertArrayHasKey('error', $json);
|
||||
$this->assertArrayHasKey('type', $json['error']);
|
||||
$this->assertArrayHasKey('file', $json['error']);
|
||||
$this->assertArrayHasKey('line', $json['error']);
|
||||
|
||||
// Check the field values:
|
||||
$this->assertEquals($json['error']['file'], __FILE__);
|
||||
$this->assertEquals($json['error']['message'], 'test message');
|
||||
$this->assertEquals($json['error']['type'], get_class($this->getException()));
|
||||
|
||||
// Check that the trace is NOT returned:
|
||||
$this->assertArrayNotHasKey('trace', $json['error']);
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers Whoops\Handler\JsonResponseHandler::addTraceToOutput
|
||||
* @covers Whoops\Handler\JsonResponseHandler::handle
|
||||
*/
|
||||
public function testReturnsWithFrames()
|
||||
{
|
||||
$json = $this->getJsonResponseFromHandler($withTrace = true);
|
||||
|
||||
// Check that the trace is returned:
|
||||
$this->assertArrayHasKey('trace', $json['error']);
|
||||
|
||||
// Check that a random frame has the expected fields
|
||||
$traceFrame = reset($json['error']['trace']);
|
||||
$this->assertArrayHasKey('file', $traceFrame);
|
||||
$this->assertArrayHasKey('line', $traceFrame);
|
||||
$this->assertArrayHasKey('function', $traceFrame);
|
||||
$this->assertArrayHasKey('class', $traceFrame);
|
||||
$this->assertArrayHasKey('args', $traceFrame);
|
||||
}
|
||||
}
|
268
vendor/filp/whoops/tests/Whoops/Handler/PrettyPageHandlerTest.php
vendored
Normal file
268
vendor/filp/whoops/tests/Whoops/Handler/PrettyPageHandlerTest.php
vendored
Normal file
@@ -0,0 +1,268 @@
|
||||
<?php
|
||||
/**
|
||||
* Whoops - php errors for cool kids
|
||||
* @author Filipe Dobreira <http://github.com/filp>
|
||||
*/
|
||||
|
||||
namespace Whoops\Handler;
|
||||
use Whoops\TestCase;
|
||||
use Whoops\Handler\PrettyPageHandler;
|
||||
use RuntimeException;
|
||||
use InvalidArgumentException;
|
||||
|
||||
class PrettyPageHandlerTest extends TestCase
|
||||
{
|
||||
/**
|
||||
* @return Whoops\Handler\JsonResponseHandler
|
||||
*/
|
||||
private function getHandler()
|
||||
{
|
||||
return new PrettyPageHandler;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return RuntimeException
|
||||
*/
|
||||
public function getException()
|
||||
{
|
||||
return new RuntimeException;
|
||||
}
|
||||
|
||||
/**
|
||||
* Test that PrettyPageHandle handles the template without
|
||||
* any errors.
|
||||
* @covers Whoops\Handler\PrettyPageHandler::handle
|
||||
*/
|
||||
public function testHandleWithoutErrors()
|
||||
{
|
||||
$run = $this->getRunInstance();
|
||||
$handler = $this->getHandler();
|
||||
|
||||
$run->pushHandler($handler);
|
||||
|
||||
ob_start();
|
||||
$run->handleException($this->getException());
|
||||
ob_get_clean();
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers Whoops\Handler\PrettyPageHandler::setPageTitle
|
||||
* @covers Whoops\Handler\PrettyPageHandler::getPageTitle
|
||||
*/
|
||||
public function testGetSetPageTitle()
|
||||
{
|
||||
$title = 'My Cool Error Handler';
|
||||
$handler = $this->getHandler();
|
||||
$handler->setPageTitle($title);
|
||||
|
||||
$this->assertEquals($title, $handler->getPagetitle());
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers Whoops\Handler\PrettyPageHandler::setResourcesPath
|
||||
* @covers Whoops\Handler\PrettyPageHandler::getResourcesPath
|
||||
*/
|
||||
public function testGetSetResourcesPath()
|
||||
{
|
||||
$path = __DIR__; // guaranteed to be valid!
|
||||
$handler = $this->getHandler();
|
||||
|
||||
$handler->setResourcesPath($path);
|
||||
$this->assertEquals($path, $handler->getResourcesPath());
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers Whoops\Handler\PrettyPageHandler::setResourcesPath
|
||||
* @expectedException InvalidArgumentException
|
||||
*/
|
||||
public function testSetInvalidResourcesPath()
|
||||
{
|
||||
$path = __DIR__ . '/ZIMBABWE'; // guaranteed to be invalid!
|
||||
$this->getHandler()->setResourcesPath($path);
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers Whoops\Handler\PrettyPageHandler::getDataTables
|
||||
* @covers Whoops\Handler\PrettyPageHandler::addDataTable
|
||||
*/
|
||||
public function testGetSetDataTables()
|
||||
{
|
||||
$handler = $this->getHandler();
|
||||
|
||||
// should have no tables by default:
|
||||
$this->assertEmpty($handler->getDataTables());
|
||||
|
||||
$tableOne = array(
|
||||
'ice' => 'cream',
|
||||
'ice-ice' => 'baby'
|
||||
);
|
||||
|
||||
$tableTwo = array(
|
||||
'dolan' =>'pls',
|
||||
'time' => time()
|
||||
);
|
||||
|
||||
$handler->addDataTable('table 1', $tableOne);
|
||||
$handler->addDataTable('table 2', $tableTwo);
|
||||
|
||||
// should contain both tables:
|
||||
$tables = $handler->getDataTables();
|
||||
$this->assertCount(2, $tables);
|
||||
|
||||
$this->assertEquals($tableOne, $tables['table 1']);
|
||||
$this->assertEquals($tableTwo, $tables['table 2']);
|
||||
|
||||
// should contain only table 1
|
||||
$this->assertEquals($tableOne, $handler->getDataTables('table 1'));
|
||||
|
||||
// should return an empty table:
|
||||
$this->assertEmpty($handler->getDataTables('ZIMBABWE!'));
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers Whoops\Handler\PrettyPageHandler::getDataTables
|
||||
* @covers Whoops\Handler\PrettyPageHandler::addDataTableCallback
|
||||
*/
|
||||
public function testSetCallbackDataTables()
|
||||
{
|
||||
$handler = $this->getHandler();
|
||||
|
||||
$this->assertEmpty($handler->getDataTables());
|
||||
$table1 = function() {
|
||||
return array(
|
||||
'hammer' => 'time',
|
||||
'foo' => 'bar',
|
||||
);
|
||||
};
|
||||
$expected1 = array('hammer' => 'time', 'foo' => 'bar');
|
||||
|
||||
$table2 = function() use ($expected1) {
|
||||
return array(
|
||||
'another' => 'table',
|
||||
'this' => $expected1,
|
||||
);
|
||||
};
|
||||
$expected2 = array('another' => 'table', 'this' => $expected1);
|
||||
|
||||
$table3 = create_function('', 'return array("oh my" => "how times have changed!");');
|
||||
$expected3 = array('oh my' => 'how times have changed!');
|
||||
|
||||
// Sanity check, make sure expected values really are correct.
|
||||
$this->assertSame($expected1, $table1());
|
||||
$this->assertSame($expected2, $table2());
|
||||
$this->assertSame($expected3, $table3());
|
||||
|
||||
$handler->addDataTableCallback('table1', $table1);
|
||||
$handler->addDataTableCallback('table2', $table2);
|
||||
$handler->addDataTableCallback('table3', $table3);
|
||||
|
||||
$tables = $handler->getDataTables();
|
||||
$this->assertCount(3, $tables);
|
||||
|
||||
// Supplied callable is wrapped in a closure
|
||||
$this->assertInstanceOf('Closure', $tables['table1']);
|
||||
$this->assertInstanceOf('Closure', $tables['table2']);
|
||||
$this->assertInstanceOf('Closure', $tables['table3']);
|
||||
|
||||
// Run each wrapped callable and check results against expected output.
|
||||
$this->assertEquals($expected1, $tables['table1']());
|
||||
$this->assertEquals($expected2, $tables['table2']());
|
||||
$this->assertEquals($expected3, $tables['table3']());
|
||||
|
||||
$this->assertSame($tables['table1'], $handler->getDataTables('table1'));
|
||||
$this->assertSame($expected1, call_user_func($handler->getDataTables('table1')));
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers Whoops\Handler\PrettyPageHandler::setEditor
|
||||
* @covers Whoops\Handler\PrettyPageHandler::getEditorHref
|
||||
*/
|
||||
public function testSetEditorSimple()
|
||||
{
|
||||
$handler = $this->getHandler();
|
||||
$handler->setEditor('sublime');
|
||||
|
||||
$this->assertEquals(
|
||||
$handler->getEditorHref('/foo/bar.php', 10),
|
||||
'subl://open?url=file://%2Ffoo%2Fbar.php&line=10'
|
||||
);
|
||||
|
||||
$this->assertEquals(
|
||||
$handler->getEditorHref('/foo/with space?.php', 2324),
|
||||
'subl://open?url=file://%2Ffoo%2Fwith%20space%3F.php&line=2324'
|
||||
);
|
||||
|
||||
$this->assertEquals(
|
||||
$handler->getEditorHref('/foo/bar/with-dash.php', 0),
|
||||
'subl://open?url=file://%2Ffoo%2Fbar%2Fwith-dash.php&line=0'
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers Whoops\Handler\PrettyPageHandler::setEditor
|
||||
* @covers Whoops\Handler\PrettyPageHandler::getEditorHref
|
||||
*/
|
||||
public function testSetEditorCallable()
|
||||
{
|
||||
$handler = $this->getHandler();
|
||||
$handler->setEditor(function($file, $line) {
|
||||
$file = rawurlencode($file);
|
||||
$line = rawurlencode($line);
|
||||
return "http://google.com/search/?q=$file:$line";
|
||||
});
|
||||
|
||||
$this->assertEquals(
|
||||
$handler->getEditorHref('/foo/bar.php', 10),
|
||||
'http://google.com/search/?q=%2Ffoo%2Fbar.php:10'
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers Whoops\Handler\PrettyPageHandler::setEditor
|
||||
* @covers Whoops\Handler\PrettyPageHandler::addEditor
|
||||
* @covers Whoops\Handler\PrettyPageHandler::getEditorHref
|
||||
*/
|
||||
public function testAddEditor()
|
||||
{
|
||||
$handler = $this->getHandler();
|
||||
$handler->addEditor('test-editor', function($file, $line) {
|
||||
return "cool beans $file:$line";
|
||||
});
|
||||
|
||||
$handler->setEditor('test-editor');
|
||||
|
||||
$this->assertEquals(
|
||||
$handler->getEditorHref('hello', 20),
|
||||
'cool beans hello:20'
|
||||
);
|
||||
}
|
||||
|
||||
public function testEditorXdebug()
|
||||
{
|
||||
if (!extension_loaded('xdebug')) {
|
||||
$this->markTestSkipped('xdebug is not available');
|
||||
}
|
||||
|
||||
$originalValue = ini_get('xdebug.file_link_format');
|
||||
|
||||
$handler = $this->getHandler();
|
||||
$handler->setEditor('xdebug');
|
||||
|
||||
ini_set('xdebug.file_link_format', '%f:%l');
|
||||
|
||||
$this->assertEquals(
|
||||
'/foo/bar.php:10',
|
||||
$handler->getEditorHref('/foo/bar.php', 10)
|
||||
);
|
||||
|
||||
ini_set('xdebug.file_link_format', 'subl://open?url=%f&line=%l');
|
||||
|
||||
// xdebug doesn't do any URL encoded, matching that behaviour.
|
||||
$this->assertEquals(
|
||||
'subl://open?url=/foo/with space?.php&line=2324',
|
||||
$handler->getEditorHref('/foo/with space?.php', 2324)
|
||||
);
|
||||
|
||||
ini_set('xdebug.file_link_format', $originalValue);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user