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 {
}