code_coverage_manager.test.php

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

PHP
632
字号
					\$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,			44 => -2,			45 => -2,			46 => -2,			47 => -2,			48 => 1,			49 => 1,		 	50 => -1,			51 => 1,			52 => 1,			53 => -2,			54 => -2,			55 => 1,			56 => 1,			57 => 1,			58 => 1,			59 => -1,			60 => 1,			61 => 1,			62 => -2,		 	63 => -2,			64 => 1,			65 => -2,			66 => 1,			67 => -1,			68 => -2,			69 => -1,			70 => -1,			71 => 1,			72 => -2,		);		$expected = array(			0 => 'ignored',			1 => 'ignored',			2 => 'ignored',			3 => 'ignored',			4 => 'ignored',			5 => 'ignored show start realstart',			6 => 'ignored show',			7 => 'ignored show',			8 => 'uncovered show',			9 => 'ignored show',			10 => 'ignored show',			11 => 'ignored show end',			12 => 'ignored',			13 => 'ignored show start',			14 => 'covered show',			15 => 'covered show',			16 => 'uncovered show',			17 => 'covered show show',			18 => 'covered show show',			19 => 'uncovered show',			20 => 'covered show',			21 => 'ignored show',			22 => 'ignored show end',			23 => 'ignored',			24 => 'ignored',			25 => 'ignored show start',			26 => 'ignored show',			27 => 'covered show',			28 => 'uncovered show',			29 => 'covered show',			30 => 'covered show',			31 => 'ignored show end',			32 => 'ignored',			33 => 'ignored',			34 => 'ignored',			35 => 'ignored',			36 => 'ignored',		 	37 => 'ignored',			38 => 'ignored',			39 => 'ignored',			40 => 'ignored show start',			41 => 'ignored show',			42 => 'ignored show',			43 => 'uncovered show',			41 => 'ignored show',			42 => 'ignored show',			43 => 'uncovered show',			44 => 'ignored show',			45 => 'ignored show',			46 => 'ignored show',			47 => 'ignored show',			48 => 'covered show',			49 => 'covered show',		 	50 => 'uncovered show',			51 => 'covered show',			52 => 'covered show',			53 => 'ignored show end',			54 => 'ignored',			55 => 'covered',			56 => 'covered show start',			57 => 'covered show',			58 => 'covered show',			59 => 'uncovered show',			60 => 'covered show',			61 => 'covered show',			62 => 'ignored show end',		 	63 => 'ignored',			64 => 'covered show start',			65 => 'ignored show',			66 => 'covered show show',			67 => 'uncovered show',			68 => 'ignored show',			69 => 'uncovered show',			70 => 'uncovered show',			71 => 'covered show',			72 => 'ignored show end',		);		$execCodeLines = range(0, 72);		$result = explode("</div>", $report = $manager->reportCaseHtmlDiff($testObjectFile, $coverageData, $execCodeLines, 3));		foreach ($result as $line) {			preg_match('/<span class="line-num">(.*?)<\/span>/', $line, $matches);			if (!isset($matches[1])) {				continue;			}			$num = $matches[1];			$class = $expected[$num];			$pattern = '/<div class="code-line '.$class.'">/';			$this->assertTrue(preg_match($pattern, $line), $num.': '.$line." fails");		}	}/** * testArrayStrrpos method *  * @access public * @return void */	function testArrayStrrpos() {		$manager =& CodeCoverageManager::getInstance();		$a = array(			'apples',			'bananas',			'oranges'		);		$this->assertEqual(1, $manager->__array_strpos($a, 'ba', true));		$this->assertEqual(2, $manager->__array_strpos($a, 'range', true));		$this->assertEqual(0, $manager->__array_strpos($a, 'pp', true));		$this->assertFalse($manager->__array_strpos('', 'ba', true));		$this->assertFalse($manager->__array_strpos(false, 'ba', true));		$this->assertFalse($manager->__array_strpos(array(), 'ba', true));		$a = array(			'rang',			'orange',			'oranges'		);		$this->assertEqual(0, $manager->__array_strpos($a, 'rang'));		$this->assertEqual(2, $manager->__array_strpos($a, 'rang', true));		$this->assertEqual(1, $manager->__array_strpos($a, 'orange', false));		$this->assertEqual(1, $manager->__array_strpos($a, 'orange'));		$this->assertEqual(2, $manager->__array_strpos($a, 'orange', true));	}/** * testGetExecutableLines method *  * @access public * @return void */	function testGetExecutableLines() {		$manager =& CodeCoverageManager::getInstance();		$code = <<<HTML			\$manager =& CodeCoverageManager::getInstance();HTML;		$result = $manager->__getExecutableLines($code);		foreach ($result as $line) {			$this->assertNotIdentical($line, '');		}		$code = <<<HTML		{		}		<?php?>		?>		<?}{{}}(())		@codeCoverageIgnoreStart		some		more		code		here		@codeCoverageIgnoreEndHTML;		$result = $manager->__getExecutableLines($code);		foreach ($result as $line) {			$this->assertIdentical(trim($line), '');		}	}	function testCalculateCodeCoverage() {		$manager =& CodeCoverageManager::getInstance();		$data = array(			'25' => array(100, 25),			'50' => array(100, 50),			'0' => array(0, 0),			'0' => array(100, 0),			'100' => array(100, 100),		);		foreach ($data as $coverage => $lines) {			$this->assertEqual($coverage, $manager->__calcCoverage($lines[0], $lines[1]));		}		$manager->__calcCoverage(100, 1000);		$this->assertError();	}}?>

⌨️ 快捷键说明

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