getDataSource()->cacheMethods = false; } } /** * CakeTestCaseTest * * @package Cake.Test.Case.TestSuite */ class CakeTestCaseTest extends CakeTestCase { /** * fixtures property * * @var array */ public $fixtures = array('core.post', 'core.author', 'core.test_plugin_comment'); /** * CakeTestCaseTest::setUpBeforeClass() * * @return void */ public static function setUpBeforeClass() { require_once CAKE . 'Test' . DS . 'Fixture' . DS . 'AssertTagsTestCase.php'; require_once CAKE . 'Test' . DS . 'Fixture' . DS . 'FixturizedTestCase.php'; } /** * setUp * * @return void */ public function setUp() { parent::setUp(); $this->Reporter = $this->getMock('CakeHtmlReporter'); } /** * tearDown * * @return void */ public function tearDown() { parent::tearDown(); unset($this->Result); unset($this->Reporter); } /** * testAssertTags * * @return void */ public function testAssertTagsBasic() { $test = new AssertTagsTestCase('testAssertTagsQuotes'); $result = $test->run(); $this->assertEquals(0, $result->errorCount()); $this->assertTrue($result->wasSuccessful()); $this->assertEquals(0, $result->failureCount()); } /** * test assertTags works with single and double quotes * * @return void */ public function testAssertTagsQuoting() { $input = 'My link'; $pattern = array( 'a' => array('href' => '/test.html', 'class' => 'active'), 'My link', '/a' ); $this->assertTags($input, $pattern); $input = "My link"; $pattern = array( 'a' => array('href' => '/test.html', 'class' => 'active'), 'My link', '/a' ); $this->assertTags($input, $pattern); $input = "My link"; $pattern = array( 'a' => array('href' => 'preg:/.*\.html/', 'class' => 'active'), 'My link', '/a' ); $this->assertTags($input, $pattern); $input = "Text"; $pattern = array( 'assertTags($input, $pattern); $input = "Text"; $pattern = array( 'span' => array('class'), 'assertTags($input, $pattern); } /** * Test that assertTags runs quickly. * * @return void */ public function testAssertTagsRuntimeComplexity() { $pattern = array( 'div' => array( 'attr1' => 'val1', 'attr2' => 'val2', 'attr3' => 'val3', 'attr4' => 'val4', 'attr5' => 'val5', 'attr6' => 'val6', 'attr7' => 'val7', 'attr8' => 'val8', ), 'My div', '/div' ); $input = '
' . 'My div' . '
'; $this->assertTags($input, $pattern); } /** * testNumericValuesInExpectationForAssertTags * * @return void */ public function testNumericValuesInExpectationForAssertTags() { $test = new AssertTagsTestCase('testNumericValuesInExpectationForAssertTags'); $result = $test->run(); $this->assertEquals(0, $result->errorCount()); $this->assertTrue($result->wasSuccessful()); $this->assertEquals(0, $result->failureCount()); } /** * testBadAssertTags * * @return void */ public function testBadAssertTags() { $test = new AssertTagsTestCase('testBadAssertTags'); $result = $test->run(); $this->assertEquals(0, $result->errorCount()); $this->assertFalse($result->wasSuccessful()); $this->assertEquals(1, $result->failureCount()); $test = new AssertTagsTestCase('testBadAssertTags2'); $result = $test->run(); $this->assertEquals(0, $result->errorCount()); $this->assertFalse($result->wasSuccessful()); $this->assertEquals(1, $result->failureCount()); } /** * testLoadFixtures * * @return void */ public function testLoadFixtures() { $test = new FixturizedTestCase('testFixturePresent'); $manager = $this->getMock('CakeFixtureManager'); $manager->fixturize($test); $test->fixtureManager = $manager; $manager->expects($this->once())->method('load'); $manager->expects($this->once())->method('unload'); $result = $test->run(); $this->assertEquals(0, $result->errorCount()); $this->assertTrue($result->wasSuccessful()); $this->assertEquals(0, $result->failureCount()); } /** * testLoadFixturesOnDemand * * @return void */ public function testLoadFixturesOnDemand() { $test = new FixturizedTestCase('testFixtureLoadOnDemand'); $test->autoFixtures = false; $manager = $this->getMock('CakeFixtureManager'); $manager->fixturize($test); $test->fixtureManager = $manager; $manager->expects($this->once())->method('loadSingle'); $result = $test->run(); $this->assertEquals(0, $result->errorCount()); } /** * testLoadFixturesOnDemand * * @return void */ public function testUnoadFixturesAfterFailure() { $test = new FixturizedTestCase('testFixtureLoadOnDemand'); $test->autoFixtures = false; $manager = $this->getMock('CakeFixtureManager'); $manager->fixturize($test); $test->fixtureManager = $manager; $manager->expects($this->once())->method('loadSingle'); $result = $test->run(); $this->assertEquals(0, $result->errorCount()); } /** * testThrowException * * @return void */ public function testThrowException() { $test = new FixturizedTestCase('testThrowException'); $test->autoFixtures = false; $manager = $this->getMock('CakeFixtureManager'); $manager->fixturize($test); $test->fixtureManager = $manager; $manager->expects($this->once())->method('unload'); $result = $test->run(); $this->assertEquals(1, $result->errorCount()); } /** * testSkipIf * * @return void */ public function testSkipIf() { $test = new FixturizedTestCase('testSkipIfTrue'); $result = $test->run(); $this->assertEquals(1, $result->skippedCount()); $test = new FixturizedTestCase('testSkipIfFalse'); $result = $test->run(); $this->assertEquals(0, $result->skippedCount()); } /** * Test that CakeTestCase::setUp() backs up values. * * @return void */ public function testSetupBackUpValues() { $this->assertArrayHasKey('debug', $this->_configure); $this->assertArrayHasKey('Plugin', $this->_pathRestore); } /** * test assertTextNotEquals() * * @return void */ public function testAssertTextNotEquals() { $one = "\r\nOne\rTwooo"; $two = "\nOne\nTwo"; $this->assertTextNotEquals($one, $two); } /** * test assertTextEquals() * * @return void */ public function testAssertTextEquals() { $one = "\r\nOne\rTwo"; $two = "\nOne\nTwo"; $this->assertTextEquals($one, $two); } /** * test assertTextStartsWith() * * @return void */ public function testAssertTextStartsWith() { $stringDirty = "some\nstring\r\nwith\rdifferent\nline endings!"; $this->assertStringStartsWith("some\nstring", $stringDirty); $this->assertStringStartsNotWith("some\r\nstring\r\nwith", $stringDirty); $this->assertStringStartsNotWith("some\nstring\nwith", $stringDirty); $this->assertTextStartsWith("some\nstring\nwith", $stringDirty); $this->assertTextStartsWith("some\r\nstring\r\nwith", $stringDirty); } /** * test assertTextStartsNotWith() * * @return void */ public function testAssertTextStartsNotWith() { $stringDirty = "some\nstring\r\nwith\rdifferent\nline endings!"; $this->assertTextStartsNotWith("some\nstring\nwithout", $stringDirty); } /** * test assertTextEndsWith() * * @return void */ public function testAssertTextEndsWith() { $stringDirty = "some\nstring\r\nwith\rdifferent\nline endings!"; $this->assertTextEndsWith("string\nwith\r\ndifferent\rline endings!", $stringDirty); $this->assertTextEndsWith("string\r\nwith\ndifferent\nline endings!", $stringDirty); } /** * test assertTextEndsNotWith() * * @return void */ public function testAssertTextEndsNotWith() { $stringDirty = "some\nstring\r\nwith\rdifferent\nline endings!"; $this->assertStringEndsNotWith("different\nline endings", $stringDirty); $this->assertTextEndsNotWith("different\rline endings", $stringDirty); } /** * test assertTextContains() * * @return void */ public function testAssertTextContains() { $stringDirty = "some\nstring\r\nwith\rdifferent\nline endings!"; $this->assertContains("different", $stringDirty); $this->assertNotContains("different\rline", $stringDirty); $this->assertTextContains("different\rline", $stringDirty); } /** * test assertTextNotContains() * * @return void */ public function testAssertTextNotContains() { $stringDirty = "some\nstring\r\nwith\rdifferent\nline endings!"; $this->assertTextNotContains("different\rlines", $stringDirty); } /** * test getMockForModel() * * @return void */ public function testGetMockForModel() { App::build(array( 'Model' => array( CAKE . 'Test' . DS . 'test_app' . DS . 'Model' . DS ) ), App::RESET); $Post = $this->getMockForModel('Post'); $this->assertEquals('test', $Post->useDbConfig); $this->assertInstanceOf('Post', $Post); $this->assertNull($Post->save(array())); $this->assertNull($Post->find('all')); $this->assertEquals('posts', $Post->useTable); $Post = $this->getMockForModel('Post', array('save')); $this->assertNull($Post->save(array())); $this->assertInternalType('array', $Post->find('all')); } /** * Test getMockForModel on secondary datasources. * * @return void */ public function testGetMockForModelSecondaryDatasource() { App::build(array( 'Plugin' => array(CAKE . 'Test' . DS . 'test_app' . DS . 'Plugin' . DS), 'Model/Datasource/Database' => array( CAKE . 'Test' . DS . 'test_app' . DS . 'Model' . DS . 'Datasource' . DS . 'Database' . DS ) ), App::RESET); CakePlugin::load('TestPlugin'); ConnectionManager::create('test_secondary', array( 'datasource' => 'Database/TestLocalDriver', 'prefix' => '' )); $post = $this->getMockForModel('SecondaryPost', array('save')); $this->assertEquals('test_secondary', $post->useDbConfig); ConnectionManager::drop('test_secondary'); } /** * Test getMockForModel when the model accesses the datasource in the constructor. * * @return void */ public function testGetMockForModelConstructorDatasource() { $post = $this->getMockForModel('ConstructorPost', array('save'), array('ds' => 'test')); $this->assertEquals('test', $post->useDbConfig); } /** * test getMockForModel() with plugin models * * @return void */ public function testGetMockForModelWithPlugin() { App::build(array( 'Plugin' => array( CAKE . 'Test' . DS . 'test_app' . DS . 'Plugin' . DS ) ), App::RESET); CakePlugin::load('TestPlugin'); $this->getMockForModel('TestPlugin.TestPluginAppModel'); $this->getMockForModel('TestPlugin.TestPluginComment'); $result = ClassRegistry::init('TestPlugin.TestPluginComment'); $this->assertInstanceOf('TestPluginComment', $result); $this->assertEquals('test', $result->useDbConfig); $TestPluginComment = $this->getMockForModel('TestPlugin.TestPluginComment', array('save')); $this->assertInstanceOf('TestPluginComment', $TestPluginComment); $TestPluginComment->expects($this->at(0)) ->method('save') ->will($this->returnValue(true)); $TestPluginComment->expects($this->at(1)) ->method('save') ->will($this->returnValue(false)); $this->assertTrue($TestPluginComment->save(array())); $this->assertFalse($TestPluginComment->save(array())); } /** * testGetMockForModelModel * * @return void */ public function testGetMockForModelModel() { $Mock = $this->getMockForModel('Model', array('save', 'setDataSource'), array('name' => 'Comment')); $result = ClassRegistry::init('Comment'); $this->assertInstanceOf('Model', $result); $Mock->expects($this->at(0)) ->method('save') ->will($this->returnValue(true)); $Mock->expects($this->at(1)) ->method('save') ->will($this->returnValue(false)); $this->assertTrue($Mock->save(array())); $this->assertFalse($Mock->save(array())); } /** * testGetMockForModelDoesNotExist * * @expectedException MissingModelException * @expectedExceptionMessage Model IDoNotExist could not be found * @return void */ public function testGetMockForModelDoesNotExist() { $this->getMockForModel('IDoNotExist'); } }