[ Index ] |
PHP Cross Reference of phpBB-3.2.11-deutsch |
[Summary view] [Print] [Text view]
1 <?php 2 3 /* 4 * This file is part of the Symfony package. 5 * 6 * (c) Fabien Potencier <fabien@symfony.com> 7 * 8 * For the full copyright and license information, please view the LICENSE 9 * file that was distributed with this source code. 10 */ 11 12 namespace Symfony\Polyfill\Util; 13 14 /** 15 * @author Nicolas Grekas <p@tchwork.com> 16 */ 17 class TestListenerTrait 18 { 19 public static $enabledPolyfills; 20 21 public function startTestSuite($mainSuite) 22 { 23 if (null !== self::$enabledPolyfills) { 24 return; 25 } 26 self::$enabledPolyfills = false; 27 $SkippedTestError = class_exists('PHPUnit\Framework\SkippedTestError') ? 'PHPUnit\Framework\SkippedTestError' : 'PHPUnit_Framework_SkippedTestError'; 28 29 foreach ($mainSuite->tests() as $suite) { 30 $testClass = $suite->getName(); 31 if (!$tests = $suite->tests()) { 32 continue; 33 } 34 $testedClass = new \ReflectionClass($testClass); 35 if (preg_match('{^ \* @requires PHP (.*)}mi', $testedClass->getDocComment(), $m) && version_compare($m[1], \PHP_VERSION, '>')) { 36 continue; 37 } 38 if (!preg_match('/^(.+)\\\\Tests(\\\\.*)Test$/', $testClass, $m)) { 39 $mainSuite->addTest(TestListener::warning('Unknown naming convention for '.$testClass)); 40 continue; 41 } 42 if (!class_exists($m[1].$m[2])) { 43 continue; 44 } 45 $testedClass = new \ReflectionClass($m[1].$m[2]); 46 $bootstrap = new \SplFileObject(\dirname($testedClass->getFileName()).'/bootstrap.php'); 47 $warnings = array(); 48 $defLine = null; 49 50 foreach (new \RegexIterator($bootstrap, '/define\(\'/') as $defLine) { 51 preg_match('/define\(\'(?P<name>.+)\'/', $defLine, $matches); 52 if (\defined($matches['name'])) { 53 continue; 54 } 55 56 try { 57 eval($defLine); 58 } catch (\PHPUnit_Framework_Exception $ex){ 59 $warnings[] = TestListener::warning($ex->getMessage()); 60 } catch (\PHPUnit\Framework\Exception $ex) { 61 $warnings[] = TestListener::warning($ex->getMessage()); 62 } 63 } 64 65 $bootstrap->rewind(); 66 67 foreach (new \RegexIterator($bootstrap, '/return p\\\\'.$testedClass->getShortName().'::/') as $defLine) { 68 if (!preg_match('/^\s*function (?P<name>[^\(]++)(?P<signature>\(.*\)(?: ?: [^ ]++)?) \{ (?<return>return p\\\\'.$testedClass->getShortName().'::[^\(]++)(?P<args>\([^\)]*+\)); \}$/', $defLine, $f)) { 69 $warnings[] = TestListener::warning('Invalid line in bootstrap.php: '.trim($defLine)); 70 continue; 71 } 72 $testNamespace = substr($testClass, 0, strrpos($testClass, '\\')); 73 if (\function_exists($testNamespace.'\\'.$f['name'])) { 74 continue; 75 } 76 77 try { 78 $r = new \ReflectionFunction($f['name']); 79 if ($r->isUserDefined()) { 80 throw new \ReflectionException(); 81 } 82 if ('idn_to_ascii' === $f['name'] || 'idn_to_utf8' === $f['name']) { 83 $defLine = sprintf('return INTL_IDNA_VARIANT_2003 === $variant ? \\%s($domain, $options, $variant) : \\%1$s%s', $f['name'], $f['args']); 84 } elseif (false !== strpos($f['signature'], '&') && 'idn_to_ascii' !== $f['name'] && 'idn_to_utf8' !== $f['name']) { 85 $defLine = sprintf('return \\%s%s', $f['name'], $f['args']); 86 } else { 87 $defLine = sprintf("return \\call_user_func_array('%s', \\func_get_args())", $f['name']); 88 } 89 } catch (\ReflectionException $e) { 90 $defLine = sprintf("throw new \\{$SkippedTestError}('Internal function not found: %s')", $f['name']); 91 } 92 93 eval(<<<EOPHP 94 namespace {$testNamespace}; 95 96 use Symfony\Polyfill\Util\TestListenerTrait; 97 use {$testedClass->getNamespaceName()} as p; 98 99 function {$f['name']}{$f['signature']} 100 { 101 if ('{$testClass}' === TestListenerTrait::\$enabledPolyfills) { 102 {$f['return']}{$f['args']}; 103 } 104 105 {$defLine}; 106 } 107 EOPHP 108 ); 109 } 110 if (!$warnings && null === $defLine) { 111 $warnings[] = new $SkippedTestError('No Polyfills found in bootstrap.php for '.$testClass); 112 } else { 113 $mainSuite->addTest(new TestListener($suite)); 114 } 115 } 116 foreach ($warnings as $w) { 117 $mainSuite->addTest($w); 118 } 119 } 120 121 public function addError($test, \Exception $e, $time) 122 { 123 if (false !== self::$enabledPolyfills) { 124 $r = new \ReflectionProperty('Exception', 'message'); 125 $r->setAccessible(true); 126 $r->setValue($e, 'Polyfills enabled, '.$r->getValue($e)); 127 } 128 } 129 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Wed Nov 11 20:33:01 2020 | Cross-referenced by PHPXref 0.7.1 |