/** * @requires PHP 7 * @ticket https://github.com/sebastianbergmann/php-token-stream/issues/52 */ public function testAnonymousClassesAreHandledCorrectly2() { $ts = new PHP_Token_Stream(TEST_FILES_PATH . 'class_with_method_that_declares_anonymous_class2.php'); $classes = $ts->getClasses(); $this->assertEquals(array('Test'), array_keys($classes)); $this->assertEquals(array('methodOne', 'methodTwo'), array_keys($classes['Test']['methods'])); $this->assertEmpty($ts->getFunctions()); }
public function testSignature() { $ts = new PHP_Token_Stream(TEST_FILES_PATH . 'source5.php'); $f = $ts->getFunctions(); $c = $ts->getClasses(); $i = $ts->getInterfaces(); $this->assertEquals('foo($a, array $b, array $c = array())', $f['foo']['signature']); $this->assertEquals('m($a, array $b, array $c = array())', $c['c']['methods']['m']['signature']); $this->assertEquals('m($a, array $b, array $c = array())', $c['a']['methods']['m']['signature']); $this->assertEquals('m($a, array $b, array $c = array())', $i['i']['methods']['m']['signature']); }
/** * @param \PHP_Token_Stream $tokens */ protected function processFunctions(\PHP_Token_Stream $tokens) { $functions = $tokens->getFunctions(); unset($tokens); $link = $this->getId() . '.html#'; foreach ($functions as $functionName => $function) { $this->functions[$functionName] = ['functionName' => $functionName, 'signature' => $function['signature'], 'startLine' => $function['startLine'], 'executableLines' => 0, 'executedLines' => 0, 'ccn' => $function['ccn'], 'coverage' => 0, 'crap' => 0, 'link' => $link . $function['startLine']]; $this->startLines[$function['startLine']] =& $this->functions[$functionName]; $this->endLines[$function['endLine']] =& $this->functions[$functionName]; } }
/** * Processes whitelisted files that are not covered. */ protected function processUncoveredFilesFromWhitelist() { $data = array(); $uncoveredFiles = array_diff($this->filter->getWhitelist(), array_keys($this->data)); foreach ($uncoveredFiles as $uncoveredFile) { if (!file_exists($uncoveredFile)) { continue; } if ($this->cacheTokens) { $tokens = PHP_Token_Stream_CachingFactory::get($uncoveredFile); } else { $tokens = new PHP_Token_Stream($uncoveredFile); } $classes = $tokens->getClasses(); $interfaces = $tokens->getInterfaces(); $functions = $tokens->getFunctions(); unset($tokens); foreach (array_keys($classes) as $class) { if (class_exists($class, FALSE)) { continue 2; } } unset($classes); foreach (array_keys($interfaces) as $interface) { if (interface_exists($interface, FALSE)) { continue 2; } } unset($interfaces); foreach (array_keys($functions) as $function) { if (function_exists($function)) { continue 2; } } unset($functions); $this->driver->start(); include_once $uncoveredFile; $coverage = $this->driver->stop(); foreach ($coverage as $file => $fileCoverage) { if (!isset($data[$file]) && in_array($file, $uncoveredFiles)) { foreach (array_keys($fileCoverage) as $key) { if ($fileCoverage[$key] == 1) { $fileCoverage[$key] = -1; } } $data[$file] = $fileCoverage; } } } $this->append($data, 'UNCOVERED_FILES_FROM_WHITELIST'); }
/** * @requires PHP 5.6 */ public function testImportedFunctionsAreHandledCorrectly() { $ts = new PHP_Token_Stream(TEST_FILES_PATH . 'classUsesNamespacedFunction.php'); $this->assertEmpty($ts->getFunctions()); }
protected function processFunctions() { if ($this->cacheTokens) { $tokens = PHP_Token_Stream_CachingFactory::get($this->getPath()); } else { $tokens = new PHP_Token_Stream($this->getPath()); } $functions = $tokens->getFunctions(); unset($tokens); if (count($functions) > 0 && !isset($this->classes['*'])) { $this->classes['*'] = array('methods' => array(), 'startLine' => 0, 'executableLines' => 0, 'executedLines' => 0, 'ccn' => 0); } foreach ($functions as $functionName => $function) { $this->classes['*']['methods'][$functionName] = array('signature' => $function['signature'], 'startLine' => $function['startLine'], 'executableLines' => 0, 'executedLines' => 0, 'ccn' => $function['ccn']); $this->startLines[$function['startLine']] =& $this->classes['*']['methods'][$functionName]; $this->endLines[$function['endLine']] =& $this->classes['*']['methods'][$functionName]; } }