diff --git a/tests/TestSpeedTrap.php b/tests/TestSpeedTrap.php index b900d09b3b0e75ce048746a36aec27db3ea04bb6..1d2fd297702d01754e5c7860281ff8bb10deb5b7 100644 --- a/tests/TestSpeedTrap.php +++ b/tests/TestSpeedTrap.php @@ -24,16 +24,19 @@ */ class TestSpeedTrap extends PHPUnit_Util_Printer implements PHPUnit_Framework_TestListener { protected static $_speed_trapped_test = [], - $_speed_limit = 3; + $_speed_limit = 0.1; protected $_trapped_test = []; public static function printSpeedTrappedTests() { - $emot = count(self::$_speed_trapped_test) > 0 ? '😣' : '😄'; - print $emot.' SpeedTrap: ' . self::$_speed_limit . ' seconds.'; - foreach(self::$_speed_trapped_test as $test_name => $speed ) - self::printError($test_name, $speed); + if(!$_trapped = self::sortTrapped()) + return; + + $_high_score_in_seconds = self::getHighScore($_trapped); + $_high_score_speed_test = self::getHighSpeedTest($_trapped); + + self::renderScore($_high_score_in_seconds, $_high_score_speed_test); } /** @@ -44,7 +47,7 @@ class TestSpeedTrap extends PHPUnit_Util_Printer implements PHPUnit_Framework_T public function endTest(PHPUnit_Framework_Test $test, $length) { if ($length > self::$_speed_limit) - self::$_speed_trapped_test[$test->getName()] = round($length, 2); + $this->collect(['name' => $test->getName(), 'speed' => $length]); } /** @@ -109,5 +112,44 @@ END; public function endTestSuite(PHPUnit_Framework_TestSuite $suite) {} public function addRiskyTest(PHPUnit_Framework_Test $test, Exception $e, $time) {} + + + protected function collect($trapped) { + self::$_speed_trapped_test[floor($trapped['speed'])][$trapped['name']] = round($trapped['speed'], 2); + } + + + protected static function sortTrapped() { + if(!count(self::$_speed_trapped_test)) + return false; + + krsort(self::$_speed_trapped_test); + reset(self::$_speed_trapped_test); + return self::$_speed_trapped_test; + } + + + protected static function getHighScore($trapped_tests) { + return key($trapped_tests); + } + + + protected static function getHighSpeedTest($trapped_tests) { + $high_score_tests = current($trapped_tests); + arsort($high_score_tests); + return $high_score_tests; + } + + + protected static function renderScore($high_score_in_second, $high_score_tests) { + $emot = count($high_score_tests) > 1 ? '😣' : '😄'; + $header = $emot.' SpeedTrap score: ' . $high_score_in_second . ' seconds.'; + print <<<END + +$header +END; + foreach($high_score_tests as $test_name => $speed ) + self::printError($test_name, $speed); + } } ?> \ No newline at end of file