From 3b75bd2dea8a22d0f5a676c066ea5ab089030ec1 Mon Sep 17 00:00:00 2001 From: chinpei215 Date: Sat, 25 Mar 2017 20:18:12 +0900 Subject: [PATCH] Fix risky tests - Fix CakeTestCase::run() to restore original output buffering level - Fix an undefined variable warning in missing_controller.ctp - Fix ViewTest (backport of 92bd86274b64c31ef6034caa74bb168be041b5e0) - Fix ThemeViewTest --- lib/Cake/Test/Case/View/ThemeViewTest.php | 26 +++---- lib/Cake/Test/Case/View/ViewTest.php | 77 +++++++++++++++------ lib/Cake/TestSuite/CakeTestCase.php | 7 ++ lib/Cake/View/Errors/missing_controller.ctp | 2 +- 4 files changed, 78 insertions(+), 34 deletions(-) diff --git a/lib/Cake/Test/Case/View/ThemeViewTest.php b/lib/Cake/Test/Case/View/ThemeViewTest.php index eef252a90..31e5fb0a1 100644 --- a/lib/Cake/Test/Case/View/ThemeViewTest.php +++ b/lib/Cake/Test/Case/View/ThemeViewTest.php @@ -198,7 +198,6 @@ class ThemeViewTest extends CakeTestCase { /** * testMissingView method * - * @expectedException MissingViewException * @return void */ public function testMissingView() { @@ -211,17 +210,18 @@ class ThemeViewTest extends CakeTestCase { $this->Controller->params['pass'] = array('home'); $View = new TestTheme2View($this->Controller); - ob_start(); - $View->getViewFileName('does_not_exist'); - $expected = ob_get_clean(); - $this->assertRegExp("/PagesController::/", $expected); - $this->assertRegExp("/views(\/|\\\)themed(\/|\\\)my_theme(\/|\\\)pages(\/|\\\)does_not_exist.ctp/", $expected); + + try { + $View->getViewFileName('does_not_exist'); + $this->fail('No exception'); + } catch (MissingViewException $e) { + $this->assertContains('Pages' . DS . 'does_not_exist.ctp', $e->getMessage()); + } } /** * testMissingLayout method * - * @expectedException MissingLayoutException * @return void */ public function testMissingLayout() { @@ -232,11 +232,13 @@ class ThemeViewTest extends CakeTestCase { $this->Controller->theme = 'my_theme'; $View = new TestTheme2View($this->Controller); - ob_start(); - $View->getLayoutFileName(); - $expected = ob_get_clean(); - $this->assertRegExp("/Missing Layout/", $expected); - $this->assertRegExp("/views(\/|\\\)themed(\/|\\\)my_theme(\/|\\\)layouts(\/|\\\)whatever.ctp/", $expected); + + try { + $View->getLayoutFileName(); + $this->fail('No exception'); + } catch (MissingLayoutException $e) { + $this->assertContains('Layouts' . DS . 'whatever.ctp', $e->getMessage()); + } } /** diff --git a/lib/Cake/Test/Case/View/ViewTest.php b/lib/Cake/Test/Case/View/ViewTest.php index 8ac8755ec..15829c6a4 100644 --- a/lib/Cake/Test/Case/View/ViewTest.php +++ b/lib/Cake/Test/Case/View/ViewTest.php @@ -625,9 +625,16 @@ class ViewTest extends CakeTestCase { $this->Controller->params['pass'] = array('home'); $View = new TestView($this->Controller); - ob_start(); $View->getViewFileName('does_not_exist'); + } +/** + * Test for missing theme views + * + * @expectedException MissingViewException + * @return void + */ + public function testMissingThemeView() { $this->ThemeController->plugin = null; $this->ThemeController->name = 'Pages'; $this->ThemeController->viewPath = 'Pages'; @@ -653,10 +660,16 @@ class ViewTest extends CakeTestCase { $this->Controller->layout = 'whatever'; $View = new TestView($this->Controller); - ob_start(); $View->getLayoutFileName(); - ob_get_clean(); + } +/** + * Test for missing theme layouts + * + * @expectedException MissingLayoutException + * @return void + */ + public function testMissingThemeLayout() { $this->ThemeController->plugin = null; $this->ThemeController->name = 'Posts'; $this->ThemeController->viewPath = 'posts'; @@ -1512,7 +1525,6 @@ class ViewTest extends CakeTestCase { public static function blockValueProvider() { return array( 'string' => array('A string value'), - 'null' => array(null), 'decimal' => array(1.23456), 'object with __toString' => array(new TestObjectWithToString()), ); @@ -1631,26 +1643,33 @@ class ViewTest extends CakeTestCase { /** * Test that starting the same block twice throws an exception * - * @expectedException CakeException * @return void */ public function testStartBlocksTwice() { - $this->View->start('first'); - echo 'In first '; - $this->View->start('second'); - echo 'In second'; - $this->View->start('first'); + try { + $this->View->start('first'); + $this->View->start('first'); + $this->fail('No exception'); + } catch (CakeException $e) { + ob_end_clean(); + $this->assertTrue(true); + } } /** * Test that an exception gets thrown when you leave a block open at the end * of a view. * - * @expectedException CakeException * @return void */ public function testExceptionOnOpenBlock() { - $this->View->render('open_block'); + try { + $this->View->render('open_block'); + $this->fail('No exception'); + } catch (CakeException $e) { + ob_end_clean(); + $this->assertContains('The "no_close" block was left open', $e->getMessage()); + } } /** @@ -1673,23 +1692,33 @@ TEXT; /** * Make sure that extending the current view with itself causes an exception * - * @expectedException LogicException * @return void */ public function testExtendSelf() { - $this->View->layout = false; - $this->View->render('extend_self'); + try { + $this->View->layout = false; + $this->View->render('extend_self'); + $this->fail('No exception'); + } catch (LogicException $e) { + ob_end_clean(); + $this->assertContains('cannot have views extend themselves', $e->getMessage()); + } } /** * Make sure that extending in a loop causes an exception * - * @expectedException LogicException * @return void */ public function testExtendLoop() { - $this->View->layout = false; - $this->View->render('extend_loop'); + try { + $this->View->layout = false; + $this->View->render('extend_loop'); + $this->fail('No exception'); + } catch (LogicException $e) { + ob_end_clean(); + $this->assertContains('cannot have views extend in a loop', $e->getMessage()); + } } /** @@ -1713,12 +1742,18 @@ TEXT; /** * Extending an element which doesn't exist should throw a missing view exception * - * @expectedException LogicException * @return void */ public function testExtendMissingElement() { - $this->View->layout = false; - $this->View->render('extend_missing_element'); + try { + $this->View->layout = false; + $this->View->render('extend_missing_element'); + $this->fail('No exception'); + } catch (LogicException $e) { + ob_end_clean(); + ob_end_clean(); + $this->assertContains('element', $e->getMessage()); + } } /** diff --git a/lib/Cake/TestSuite/CakeTestCase.php b/lib/Cake/TestSuite/CakeTestCase.php index 94cf73e73..5b537e979 100644 --- a/lib/Cake/TestSuite/CakeTestCase.php +++ b/lib/Cake/TestSuite/CakeTestCase.php @@ -76,6 +76,8 @@ abstract class CakeTestCase extends PHPUnit_Framework_TestCase { * @throws InvalidArgumentException */ public function run(PHPUnit_Framework_TestResult $result = null) { + $level = ob_get_level(); + if (!empty($this->fixtureManager)) { $this->fixtureManager->load($this); } @@ -83,6 +85,11 @@ abstract class CakeTestCase extends PHPUnit_Framework_TestCase { if (!empty($this->fixtureManager)) { $this->fixtureManager->unload($this); } + + for ($i = ob_get_level(); $i < $level; ++$i) { + ob_start(); + } + return $result; } diff --git a/lib/Cake/View/Errors/missing_controller.ctp b/lib/Cake/View/Errors/missing_controller.ctp index 8bfc90b7e..eea951f17 100644 --- a/lib/Cake/View/Errors/missing_controller.ctp +++ b/lib/Cake/View/Errors/missing_controller.ctp @@ -27,7 +27,7 @@ $pluginDot = empty($plugin) ? null : $plugin . '.';

 <?php
-class AppController {
+class AppController {
 
 }