Subversion Repositories SmartDukaan

Rev

Blame | Last modification | View Log | RSS feed

<?php
/**
 * Test case for HtmlCoverageReport
 *
 * PHP5
 *
 * CakePHP(tm) : 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(tm) Project
 * @package       Cake.Test.Case.TestSuite
 * @since         CakePHP(tm) v 2.0
 * @license       http://www.opensource.org/licenses/mit-license.php MIT License
 */

App::uses('HtmlCoverageReport', 'TestSuite/Coverage');
App::uses('CakeBaseReporter', 'TestSuite/Reporter');

/**
 * Class HtmlCoverageReportTest
 *
 * @package       Cake.Test.Case.TestSuite
 */
class HtmlCoverageReportTest extends CakeTestCase {

/**
 * setUp
 *
 * @return void
 */
        public function setUp() {
                parent::setUp();
                App::build(array(
                        'Plugin' => array(CAKE . 'Test' . DS . 'test_app' . DS . 'Plugin' . DS)
                ), App::RESET);
                CakePlugin::load(array('TestPlugin'));
                $reporter = new CakeBaseReporter();
                $reporter->params = array('app' => false, 'plugin' => false, 'group' => false);
                $coverage = array();
                $this->Coverage = new HtmlCoverageReport($coverage, $reporter);
        }

/**
 * test getting the path filters.
 *
 * @return void
 */
        public function testGetPathFilter() {
                $this->Coverage->appTest = false;
                $result = $this->Coverage->getPathFilter();
                $this->assertEquals(CAKE, $result);

                $this->Coverage->appTest = true;
                $result = $this->Coverage->getPathFilter();
                $this->assertEquals(ROOT . DS . APP_DIR . DS, $result);

                $this->Coverage->appTest = false;
                $this->Coverage->pluginTest = 'TestPlugin';
                $result = $this->Coverage->getPathFilter();
                $this->assertEquals(CakePlugin::path('TestPlugin'), $result);
        }

/**
 * test filtering coverage data.
 *
 * @return void
 */
        public function testFilterCoverageDataByPathRemovingElements() {
                $data = array(
                        CAKE . 'dispatcher.php' => array(
                                10 => -1,
                                12 => 1
                        ),
                        APP . 'app_model.php' => array(
                                50 => 1,
                                52 => -1
                        )
                );
                $this->Coverage->setCoverage($data);
                $result = $this->Coverage->filterCoverageDataByPath(CAKE);
                $this->assertTrue(isset($result[CAKE . 'dispatcher.php']));
                $this->assertFalse(isset($result[APP . 'app_model.php']));
        }

/**
 * test generating HTML reports from file arrays.
 *
 * @return void
 */
        public function testGenerateDiff() {
                $file = array(
                        'line 1',
                        'line 2',
                        'line 3',
                        'line 4',
                        'line 5',
                        'line 6',
                        'line 7',
                        'line 8',
                        'line 9',
                        'line 10',
                );
                $coverage = array(
                        1 => array(array('id' => 'HtmlCoverageReportTest::testGenerateDiff')),
                        2 => -2,
                        3 => array(array('id' => 'HtmlCoverageReportTest::testGenerateDiff')),
                        4 => array(array('id' => 'HtmlCoverageReportTest::testGenerateDiff')),
                        5 => -1,
                        6 => array(array('id' => 'HtmlCoverageReportTest::testGenerateDiff')),
                        7 => array(array('id' => 'HtmlCoverageReportTest::testGenerateDiff')),
                        8 => array(array('id' => 'HtmlCoverageReportTest::testGenerateDiff')),
                        9 => -1,
                        10 => array(array('id' => 'HtmlCoverageReportTest::testGenerateDiff'))
                );
                $result = $this->Coverage->generateDiff('myfile.php', $file, $coverage);
                $this->assertRegExp('/myfile\.php Code coverage\: \d+\.?\d*\%/', $result);
                $this->assertRegExp('/<div class="code-coverage-results" id\="coverage\-myfile\.php"/', $result);
                $this->assertRegExp('/<pre>/', $result);
                foreach ($file as $i => $line) {
                        $this->assertTrue(strpos($line, $result) !== 0, 'Content is missing ' . $i);
                        $class = 'covered';
                        if (in_array($i + 1, array(5, 9, 2))) {
                                $class = 'uncovered';
                        }
                        if ($i + 1 === 2) {
                                $class .= ' dead';
                        }
                        $this->assertTrue(strpos($class, $result) !== 0, 'Class name is wrong ' . $i);
                }
        }

/**
 * Test that coverage works with phpunit 3.6 as the data formats from coverage are totally different.
 *
 * @return void
 */
        public function testPhpunit36Compatibility() {
                $file = array(
                        'line 1',
                        'line 2',
                        'line 3',
                        'line 4',
                        'line 5',
                        'line 6',
                        'line 7',
                        'line 8',
                        'line 9',
                        'line 10',
                );
                $coverage = array(
                        1 => array('HtmlCoverageReportTest::testGenerateDiff'),
                        2 => null,
                        3 => array('HtmlCoverageReportTest::testGenerateDiff'),
                        4 => array('HtmlCoverageReportTest::testGenerateDiff'),
                        5 => array(),
                        6 => array('HtmlCoverageReportTest::testGenerateDiff'),
                        7 => array('HtmlCoverageReportTest::testGenerateDiff'),
                        8 => array('HtmlCoverageReportTest::testGenerateDiff'),
                        9 => array(),
                        10 => array('HtmlCoverageReportTest::testSomething', 'HtmlCoverageReportTest::testGenerateDiff')
                );

                $result = $this->Coverage->generateDiff('myfile.php', $file, $coverage);
                $this->assertRegExp('/myfile\.php Code coverage\: \d+\.?\d*\%/', $result);
                $this->assertRegExp('/<div class="code-coverage-results" id\="coverage\-myfile\.php"/', $result);
                $this->assertRegExp('/<pre>/', $result);
                foreach ($file as $i => $line) {
                        $this->assertTrue(strpos($line, $result) !== 0, 'Content is missing ' . $i);
                        $class = 'covered';
                        if (in_array($i + 1, array(5, 9, 2))) {
                                $class = 'uncovered';
                        }
                        if ($i + 1 === 2) {
                                $class .= ' dead';
                        }
                        $this->assertTrue(strpos($class, $result) !== 0, 'Class name is wrong ' . $i);
                }
        }

/**
 * test that covering methods show up as title attributes for lines.
 *
 * @return void
 */
        public function testCoveredLinesTitleAttributes() {
                $file = array(
                        'line 1',
                        'line 2',
                        'line 3',
                        'line 4',
                        'line 5',
                );

                $coverage = array(
                        1 => array(array('id' => 'HtmlCoverageReportTest::testAwesomeness')),
                        2 => -2,
                        3 => array(array('id' => 'HtmlCoverageReportTest::testCakeIsSuperior')),
                        4 => array(array('id' => 'HtmlCoverageReportTest::testOther')),
                        5 => -1
                );

                $result = $this->Coverage->generateDiff('myfile.php', $file, $coverage);

                $this->assertTrue(
                        strpos($result, "title=\"Covered by:\nHtmlCoverageReportTest::testAwesomeness\n\"><span class=\"line-num\">1") !== false,
                        'Missing method coverage for line 1'
                );
                $this->assertTrue(
                        strpos($result, "title=\"Covered by:\nHtmlCoverageReportTest::testCakeIsSuperior\n\"><span class=\"line-num\">3") !== false,
                        'Missing method coverage for line 3'
                );
                $this->assertTrue(
                        strpos($result, "title=\"Covered by:\nHtmlCoverageReportTest::testOther\n\"><span class=\"line-num\">4") !== false,
                        'Missing method coverage for line 4'
                );
                $this->assertTrue(
                        strpos($result, "title=\"\"><span class=\"line-num\">5") !== false,
                        'Coverage report is wrong for line 5'
                );
        }

/**
 * tearDown
 *
 * @return void
 */
        public function tearDown() {
                CakePlugin::unload();
                unset($this->Coverage);
                parent::tearDown();
        }
}