code_coverage_manager.test.php

来自「Cake Framwork , Excellent」· PHP 代码 · 共 632 行 · 第 1/2 页

PHP
632
字号
<?php/* SVN FILE: $Id: code_coverage_manager.test.php 7118 2008-06-04 20:49:29Z gwoo $ *//** * Short description for file. * * Long description for file * * PHP versions 4 and 5 * * CakePHP(tm) Tests <https://trac.cakephp.org/wiki/Developement/TestSuite> * Copyright 2005-2008, Cake Software Foundation, Inc. *								1785 E. Sahara Avenue, Suite 490-204 *								Las Vegas, Nevada 89104 * *  Licensed under The Open Group Test Suite License *  Redistributions of files must retain the above copyright notice. * * @filesource * @copyright		Copyright 2005-2008, Cake Software Foundation, Inc. * @link				https://trac.cakephp.org/wiki/Developement/TestSuite CakePHP(tm) Tests * @package			cake.tests * @subpackage		cake.tests.cases.libs * @since			CakePHP(tm) v 1.2.0.4206 * @version			$Revision: 7118 $ * @modifiedby		$LastChangedBy: gwoo $ * @lastmodified	$Date: 2008-06-04 13:49:29 -0700 (Wed, 04 Jun 2008) $ * @license			http://www.opensource.org/licenses/opengroup.php The Open Group Test Suite License */App::import('Core', 'CodeCoverageManager');require_once CAKE . 'tests' . DS . 'lib' . DS . 'cli_reporter.php';require_once CAKE . 'tests' . DS . 'lib' . DS . 'cake_reporter.php';/** * Short description for class. * * @package		cake.tests * @subpackage	cake.tests.cases.libs */class CodeCoverageManagerTest extends UnitTestCase {/** * Skip if XDebug not installed * * @access public */	function skip() {		$this->skipif (!extension_loaded('xdebug'), 'XDebug not installed');	}/** * testNoTestCaseSupplied method *  * @access public * @return void */	function testNoTestCaseSupplied() {		if (php_sapi_name() != 'cli') {			unset($_GET['group']);			CodeCoverageManager::start(substr(md5(microtime()), 0, 5), new CakeHtmlReporter());			CodeCoverageManager::report(false);			$this->assertError();			CodeCoverageManager::start('libs/'.basename(__FILE__), new CakeHtmlReporter());			CodeCoverageManager::report(false);			$this->assertError();			$path = LIBS;			if (strpos(LIBS, ROOT) === false) {				$path = ROOT.DS.LIBS;			}			App::import('Core', 'Folder');			$folder = new Folder();			$folder->cd($path);			$contents = $folder->ls();/** * remove method *  * @param mixed $var  * @access public * @return void */			function remove($var) {				return ($var != basename(__FILE__));			}			$contents[1] = array_filter($contents[1], "remove");			foreach ($contents[1] as $file) {				CodeCoverageManager::start('libs'.DS.$file, new CakeHtmlReporter());				CodeCoverageManager::report(false);				$this->assertNoErrors('libs'.DS.$file);			}		}	}/** * testGetTestObjectFileNameFromTestCaseFile method *  * @access public * @return void */	function testGetTestObjectFileNameFromTestCaseFile() {		$manager =& CodeCoverageManager::getInstance();		$manager->reporter = new CakeHtmlReporter();		$expected = $manager->__testObjectFileFromCaseFile('models/some_file.test.php', true);		$this->assertIdentical(APP.'models'.DS.'some_file.php', $expected);		$expected = $manager->__testObjectFileFromCaseFile('controllers/some_file.test.php', true);		$this->assertIdentical(APP.'controllers'.DS.'some_file.php', $expected);		$expected = $manager->__testObjectFileFromCaseFile('views/some_file.test.php', true);		$this->assertIdentical(APP.'views'.DS.'some_file.php', $expected);		$expected = $manager->__testObjectFileFromCaseFile('behaviors/some_file.test.php', true);		$this->assertIdentical(APP.'models'.DS.'behaviors'.DS.'some_file.php', $expected);		$expected = $manager->__testObjectFileFromCaseFile('components/some_file.test.php', true);		$this->assertIdentical(APP.'controllers'.DS.'components'.DS.'some_file.php', $expected);		$expected = $manager->__testObjectFileFromCaseFile('helpers/some_file.test.php', true);		$this->assertIdentical(APP.'views'.DS.'helpers'.DS.'some_file.php', $expected);		$manager->pluginTest = 'bugs';		$expected = $manager->__testObjectFileFromCaseFile('models/some_file.test.php', false);		$this->assertIdentical(APP.'plugins'.DS.'bugs'.DS.'models'.DS.'some_file.php', $expected);		$manager->pluginTest = false;		$manager->reporter = new CLIReporter;		$expected = $manager->__testObjectFileFromCaseFile('libs/set.test.php', false);		$this->assertIdentical(ROOT.DS.'cake'.DS.'libs'.DS.'set.php', $expected);	}/** * testOfHtmlReport method *  * @access public * @return void */	function testOfHtmlReport() {		$manager =& CodeCoverageManager::getInstance();		$code = <<<PHP/** * Set class *  * @package              cake * @subpackage           cake.tests.cases.libs */		class Set extends Object {		/**		 * Value of the Set object.		 *		 * @var array		 * @access public		 */			var \$value = array();		/**		 * Constructor. Defaults to an empty array.		 *		 * @access public		 */			function __construct() {				if (func_num_args() == 1 && is_array(func_get_arg(0))) {					\$this->value = func_get_arg(0);				} else {					\$this->value = func_get_args();				}			}		/**		 * Returns the contents of the Set object		 *		 * @return array		 * @access public		 */			function &get() {				return \$this->value;			}		/**		 * This function can be thought of as a hybrid between PHP's array_merge and array_merge_recursive. The difference		 * to the two is that if an array key contains another array then the function behaves recursive (unlike array_merge)		 * but does not do if for keys containing strings (unlike array_merge_recursive). See the unit test for more information.		 *		 * Note: This function will work with an unlimited amount of arguments and typecasts non-array parameters into arrays.		 *		 * @param array \$arr1 Array to be merged		 * @param array \$arr2 Array to merge with		 * @return array Merged array		 * @access public		 */			function merge(\$arr1, \$arr2 = null) {				\$args = func_get_args();				if (isset(\$this) && is_a(\$this, 'set')) {					\$backtrace = debug_backtrace();					\$previousCall = strtolower(\$backtrace[1]['class'].'::'.\$backtrace[1]['function']);					if (\$previousCall != 'set::merge') {						\$r =& \$this->value;						array_unshift(\$args, null);					}				}				if (!isset(\$r)) {					\$r = (array)current(\$args);				}				while ((\$arg = next(\$args)) !== false) {					if (is_a(\$arg, 'set')) {						\$arg = \$arg->get();					}					foreach ((array)\$arg as \$key => \$val)	 {						if (is_array(\$val) && isset(\$r[\$key]) && is_array(\$r[\$key])) {							\$r[\$key] = Set::merge(\$r[\$key], \$val);						} elseif (is_int(\$key)) {						} else {							\$r[\$key] = \$val;						}					}				}				return \$r;			}PHP;		$testObjectFile = explode("\n", $code);		$coverageData = array(			0 => 1,			1 => 1,			2 => -2,			3 => -2,			4 => -2,			5 => -2,			6 => -2,			7 => -2,			8 => -1,			9 => -2,			10 => -2,			11 => -2,			12 => -2,			13 => -2,			14 => 1,			15 => 1,			16 => -1,			17 => 1,			18 => 1,			19 => -1,			20 => 1,			21 => -2,			22 => -2,			23 => -2,			24 => -2,			25 => -2,			26 => -2,			27 => 1,			28 => -1,			29 => 1,			30 => 1,			31 => -2,			32 => -2,			33 => -2,			34 => -2,			35 => -2,			36 => -2,		 	37=> -2,			38 => -2,			39 => -2,			40 => -2,			41 => -2,			42 => -2,			43 => -1,		);		$execCodeLines = range(0, 72);		$result = explode("</div>", $report = $manager->reportCaseHtml($testObjectFile, $coverageData, $execCodeLines));		foreach ($result as $num => $line) {			$num++;			if (array_key_exists($num, $coverageData)) {				if ($coverageData[$num] == 1) {					$this->assertTrue(strpos($line, 'covered') !== false, $num.': '.$line." fails");				}				if (!array_key_exists($num, $execCodeLines) || $coverageData[$num] == -2) {					$this->assertTrue(strpos($line, 'ignored') !== false, $num.': '.$line." fails");				}				if ($coverageData[$num] == -1) {					$this->assertTrue(strpos($line, 'uncovered') !== false, $num.': '.$line." fails");				}			}		}	}/** * testOfHtmlDiffReport method *  * @access public * @return void */	function testOfHtmlDiffReport() {		$manager =& CodeCoverageManager::getInstance();		$code = <<<PHP/** * Set class *  * @package              cake * @subpackage           cake.tests.cases.libs */		class Set extends Object {		/**		 * Value of the Set object.		 *		 * @var array		 * @access public		 */			var \$value = array();		/**		 * Constructor. Defaults to an empty array.		 *		 * @access public		 */			function __construct() {				if (func_num_args() == 1 && is_array(func_get_arg(0))) {					\$this->value = func_get_arg(0);				} else {

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?