Subversion Repositories SmartDukaan

Rev

Blame | Last modification | View Log | RSS feed

<?php
/**
 * CakeTestCaseTest file
 *
 * Test Case for CakeTestCase class
 *
 * CakePHP : Rapid Development Framework (http://cakephp.org)
 * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
 *
 * Licensed under The MIT License
 * For full copyright and license information, please see the LICENSE.txt
 * Redistributions of files must retain the above copyright notice.
 *
 * @copyright     Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
 * @link          http://cakephp.org CakePHP Project
 * @package       Cake.Test.Case.TestSuite
 * @since         CakePHP v 1.2.0.4487
 * @license       http://www.opensource.org/licenses/mit-license.php MIT License
 */

App::uses('Controller', 'Controller');
App::uses('CakeHtmlReporter', 'TestSuite/Reporter');

/**
 * 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 = '<a href="/test.html" class="active">My link</a>';
                $pattern = array(
                        'a' => array('href' => '/test.html', 'class' => 'active'),
                        'My link',
                        '/a'
                );
                $this->assertTags($input, $pattern);

                $input = "<a href='/test.html' class='active'>My link</a>";
                $pattern = array(
                        'a' => array('href' => '/test.html', 'class' => 'active'),
                        'My link',
                        '/a'
                );
                $this->assertTags($input, $pattern);

                $input = "<a href='/test.html' class='active'>My link</a>";
                $pattern = array(
                        'a' => array('href' => 'preg:/.*\.html/', 'class' => 'active'),
                        'My link',
                        '/a'
                );
                $this->assertTags($input, $pattern);

                $input = "<span><strong>Text</strong></span>";
                $pattern = array(
                        '<span',
                        '<strong',
                        'Text',
                        '/strong',
                        '/span'
                );
                $this->assertTags($input, $pattern);

                $input = "<span class='active'><strong>Text</strong></span>";
                $pattern = array(
                        'span' => array('class'),
                        '<strong',
                        'Text',
                        '/strong',
                        '/span'
                );
                $this->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 = '<div attr8="val8" attr6="val6" attr4="val4" attr2="val2"' .
                        ' attr1="val1" attr3="val3" attr5="val5" attr7="val7" />' .
                        'My div' .
                        '</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!";
                $stringClean = "some\nstring\nwith\ndifferent\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!";
                $stringClean = "some\nstring\nwith\ndifferent\nline endings!";

                $this->assertTextStartsNotWith("some\nstring\nwithout", $stringDirty);
        }

/**
 * test assertTextEndsWith()
 *
 * @return void
 */
        public function testAssertTextEndsWith() {
                $stringDirty = "some\nstring\r\nwith\rdifferent\nline endings!";
                $stringClean = "some\nstring\nwith\ndifferent\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!";
                $stringClean = "some\nstring\nwith\ndifferent\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!";
                $stringClean = "some\nstring\nwith\ndifferent\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!";
                $stringClean = "some\nstring\nwith\ndifferent\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->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() 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');
                $TestPluginComment = $this->getMockForModel('TestPlugin.TestPluginComment');

                $result = ClassRegistry::init('TestPlugin.TestPluginComment');
                $this->assertInstanceOf('TestPluginComment', $result);

                $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'), 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');
        }
}