mirror of
https://github.com/silverstripe/silverstripe-framework
synced 2024-10-22 14:05:37 +02:00
Improve CLI use of Debugging tools and test execution.
git-svn-id: svn://svn.silverstripe.com/silverstripe/open/modules/sapphire/trunk@60581 467b73ca-7a2a-4603-9d3b-597d59a354a9
This commit is contained in:
parent
0e0fc7a1cb
commit
0bdc8fad81
@ -51,6 +51,19 @@ class CliDebugView extends DebugView {
|
||||
function writeTrace() {
|
||||
Debug::backtrace();
|
||||
}
|
||||
|
||||
/**
|
||||
* Render the information header for the view
|
||||
*
|
||||
* @param string $title
|
||||
* @param string $title
|
||||
*/
|
||||
public function writeInfo($title, $subtitle, $description=false) {
|
||||
echo wordwrap(strtoupper($title),100) . "\n";
|
||||
echo wordwrap($subtitle,100) . "\n";
|
||||
echo str_repeat('-',min(100,max(strlen($title),strlen($subtitle)))) . "\n";
|
||||
echo wordwrap($description,100) . "\n\n";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
40
dev/CliTestReporter.php
Normal file
40
dev/CliTestReporter.php
Normal file
@ -0,0 +1,40 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Test reporter optimised for CLI (ie, plain-text) output
|
||||
*/
|
||||
class CliTestReporter extends SapphireTestReporter {
|
||||
|
||||
/**
|
||||
* Display error bar if it exists
|
||||
*/
|
||||
public function writeResults() {
|
||||
$passCount = 0;
|
||||
$failCount = 0;
|
||||
$testCount = 0;
|
||||
$errorCount = 0;
|
||||
|
||||
foreach($this->suiteResults['suites'] as $suite) {
|
||||
foreach($suite['tests'] as $test) {
|
||||
$testCount++;
|
||||
($test['status'] == 1) ? $passCount++ : $failCount++;
|
||||
}
|
||||
}
|
||||
$result = ($failCount > 0) ? 'fail' : 'pass';
|
||||
echo "$testCount tests run: $passCount passes, $failCount fails, and 0 exceptions\n\n";
|
||||
}
|
||||
|
||||
public function endTest( PHPUnit_Framework_Test $test, $time) {
|
||||
parent::endTest($test, $time);
|
||||
$this->writeTest($this->currentTest);
|
||||
}
|
||||
|
||||
|
||||
protected function writeTest($test) {
|
||||
if ($test['status'] != 1) {
|
||||
echo $this->testNameToPhrase($test['name']) . "\n". $test['message'] . "\n";
|
||||
echo "In line {$test['exception']['line']} of {$test['exception']['file']}" . "\n\n";
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -75,7 +75,7 @@ class Debug {
|
||||
if(!Director::isLive()) {
|
||||
if($showHeader) {
|
||||
$caller = Debug::caller();
|
||||
if(Director::is_ajax())
|
||||
if(Director::is_ajax() || Director::is_cli())
|
||||
echo "Debug ($caller[class]$caller[type]$caller[function]() in line $caller[line] of " . basename($caller['file']) . ")\n";
|
||||
else
|
||||
echo "<div style=\"background-color: white; text-align: left;\">\n<hr>\n<h3>Debug <span style=\"font-size: 65%\">($caller[class]$caller[type]$caller[function]() \n<span style=\"font-weight:normal\">in line</span> $caller[line] \n<span style=\"font-weight:normal\">of</span> " . basename($caller['file']) . ")</span>\n</h3>\n";
|
||||
@ -83,7 +83,8 @@ class Debug {
|
||||
|
||||
echo Debug::text($val);
|
||||
|
||||
if(!Director::is_ajax()) echo "</div>";
|
||||
if(!Director::is_ajax() && !Director::is_cli()) echo "</div>";
|
||||
else echo "\n\n";
|
||||
}
|
||||
|
||||
}
|
||||
@ -153,7 +154,7 @@ class Debug {
|
||||
} else if (is_object($val)) {
|
||||
$val = var_export($val, true);
|
||||
} else {
|
||||
if(true || !Director::is_ajax()) {
|
||||
if(!Director::is_cli() && !Director::is_ajax()) {
|
||||
$val = "<pre style=\"font-family: Courier new\">" . htmlentities($val) . "</pre>\n";
|
||||
}
|
||||
}
|
||||
|
@ -42,27 +42,27 @@ class SapphireTestReporter implements PHPUnit_Framework_TestListener {
|
||||
* Holds array of suites and total number of tests run
|
||||
* @var array
|
||||
*/
|
||||
private $suiteResults;
|
||||
protected $suiteResults;
|
||||
/**
|
||||
* Holds data of current suite that is been run
|
||||
* @var array
|
||||
*/
|
||||
private $currentSuite;
|
||||
protected $currentSuite;
|
||||
/**
|
||||
* Holds data of current test that is been run
|
||||
* @var array
|
||||
*/
|
||||
private $currentTest;
|
||||
protected $currentTest;
|
||||
/**
|
||||
* Whether PEAR Benchmark_Timer is available for timing
|
||||
* @var boolean
|
||||
*/
|
||||
private $hasTimer;
|
||||
protected $hasTimer;
|
||||
/**
|
||||
* Holds the PEAR Benchmark_Timer object
|
||||
* @var obj Benchmark_Timer
|
||||
*/
|
||||
private $timer;
|
||||
protected $timer;
|
||||
|
||||
/**
|
||||
* Constructor, checks to see availability of PEAR Benchmark_Timer and
|
||||
@ -277,7 +277,7 @@ class SapphireTestReporter implements PHPUnit_Framework_TestListener {
|
||||
|
||||
}
|
||||
|
||||
private function testNameToPhrase($name) {
|
||||
protected function testNameToPhrase($name) {
|
||||
return ucfirst(preg_replace("/([a-z])([A-Z])/", "$1 $2", $name));
|
||||
}
|
||||
|
||||
|
@ -47,7 +47,7 @@ class TestRunner extends Controller {
|
||||
|
||||
function init() {
|
||||
parent::init();
|
||||
if (!self::$default_reporter) self::set_reporter('DebugView');
|
||||
if (!self::$default_reporter) self::set_reporter(Director::is_cli() ? 'CliDebugView' : 'DebugView');
|
||||
}
|
||||
|
||||
public function Link() {
|
||||
@ -126,7 +126,16 @@ class TestRunner extends Controller {
|
||||
restore_error_handler();
|
||||
|
||||
/*, array("reportDirectory" => "/Users/sminnee/phpunit-report")*/
|
||||
$reporter = new SapphireTestReporter();
|
||||
if(Director::is_cli()) $reporter = new CliTestReporter();
|
||||
else $reporter = new SapphireTestReporter();
|
||||
|
||||
self::$default_reporter->writeHeader("Sapphire Test Runner");
|
||||
if (count($classList) > 1) {
|
||||
self::$default_reporter->writeInfo("All Tests", "Running test cases: " . implode(", ", $classList));
|
||||
} else {
|
||||
self::$default_reporter->writeInfo($classList[0], "");
|
||||
}
|
||||
|
||||
$results = new PHPUnit_Framework_TestResult();
|
||||
$results->addListener($reporter);
|
||||
|
||||
@ -139,12 +148,6 @@ class TestRunner extends Controller {
|
||||
//$testResult = PHPUnit_TextUI_TestRunner::run($suite);
|
||||
}
|
||||
|
||||
self::$default_reporter->writeHeader();
|
||||
if (count($classList) > 1) {
|
||||
self::$default_reporter->writeInfo("All Tests", "Running test cases: " . implode(", ", $classList) .")");
|
||||
} else {
|
||||
self::$default_reporter->writeInfo($classList[0], "");
|
||||
}
|
||||
echo '<div class="trace">';
|
||||
$reporter->writeResults();
|
||||
|
||||
@ -154,8 +157,9 @@ class TestRunner extends Controller {
|
||||
Debug::loadErrorHandlers();
|
||||
|
||||
if(!Director::is_cli()) self::$default_reporter->writeFooter();
|
||||
|
||||
// Todo: we should figure out how to pass this data back through Director more cleanly
|
||||
if(Director::is_cli() && ($testResult->failureCount() + $testResult->errorCount()) > 0) exit(2);
|
||||
if(Director::is_cli() && ($results->failureCount() + $results->errorCount()) > 0) exit(2);
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user