Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/php-static-scanner-instrumentalization.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/nikic/php-parser/test_old/run.php')
-rw-r--r--vendor/nikic/php-parser/test_old/run.php223
1 files changed, 223 insertions, 0 deletions
diff --git a/vendor/nikic/php-parser/test_old/run.php b/vendor/nikic/php-parser/test_old/run.php
new file mode 100644
index 0000000..c493f2e
--- /dev/null
+++ b/vendor/nikic/php-parser/test_old/run.php
@@ -0,0 +1,223 @@
+<?php
+
+error_reporting(E_ALL | E_STRICT);
+ini_set('short_open_tag', false);
+
+if ('cli' !== php_sapi_name()) {
+ die('This script is designed for running on the command line.');
+}
+
+function showHelp($error) {
+ die($error . "\n\n" .
+<<<OUTPUT
+This script has to be called with the following signature:
+
+ php run.php [--no-progress] testType pathToTestFiles
+
+The test type must be one of: PHP5, PHP7 or Symfony.
+
+The following options are available:
+
+ --no-progress Disables showing which file is currently tested.
+
+OUTPUT
+ );
+}
+
+$options = array();
+$arguments = array();
+
+// remove script name from argv
+array_shift($argv);
+
+foreach ($argv as $arg) {
+ if ('-' === $arg[0]) {
+ $options[] = $arg;
+ } else {
+ $arguments[] = $arg;
+ }
+}
+
+if (count($arguments) !== 2) {
+ showHelp('Too little arguments passed!');
+}
+
+$showProgress = true;
+$verbose = false;
+foreach ($options as $option) {
+ if ($option === '--no-progress') {
+ $showProgress = false;
+ } elseif ($option === '--verbose') {
+ $verbose = true;
+ } else {
+ showHelp('Invalid option passed!');
+ }
+}
+
+$testType = $arguments[0];
+$dir = $arguments[1];
+
+switch ($testType) {
+ case 'Symfony':
+ $version = 'Php5';
+ $fileFilter = function($path) {
+ return preg_match('~\.php(?:\.cache)?$~', $path) && false === strpos($path, 'skeleton');
+ };
+ $codeExtractor = function($file, $code) {
+ return $code;
+ };
+ break;
+ case 'PHP5':
+ case 'PHP7':
+ $version = $testType === 'PHP5' ? 'Php5' : 'Php7';
+ $fileFilter = function($path) {
+ return preg_match('~\.phpt$~', $path);
+ };
+ $codeExtractor = function($file, $code) {
+ if (preg_match('~(?:
+# skeleton files
+ ext.gmp.tests.001
+| ext.skeleton.tests.001
+# multibyte encoded files
+| ext.mbstring.tests.zend_multibyte-01
+| Zend.tests.multibyte.multibyte_encoding_001
+| Zend.tests.multibyte.multibyte_encoding_004
+| Zend.tests.multibyte.multibyte_encoding_005
+# token_get_all bug (https://bugs.php.net/bug.php?id=60097)
+| Zend.tests.bug47516
+# pretty print difference due to INF vs 1e1000
+| ext.standard.tests.general_functions.bug27678
+| tests.lang.bug24640
+# pretty print difference due to nop statements
+| ext.mbstring.tests.htmlent
+| ext.standard.tests.file.fread_basic
+# tests using __halt_compiler as semi reserved keyword
+| Zend.tests.grammar.semi_reserved_001
+| Zend.tests.grammar.semi_reserved_002
+| Zend.tests.grammar.semi_reserved_005
+)\.phpt$~x', $file)) {
+ return null;
+ }
+
+ if (!preg_match('~--FILE--\s*(.*?)--[A-Z]+--~s', $code, $matches)) {
+ return null;
+ }
+ if (preg_match('~--EXPECT(?:F|REGEX)?--\s*(?:Parse|Fatal) error~', $code)) {
+ return null;
+ }
+
+ return $matches[1];
+ };
+ break;
+ default:
+ showHelp('Test type must be one of: PHP5, PHP7 or Symfony');
+}
+
+require_once dirname(__FILE__) . '/../lib/PhpParser/Autoloader.php';
+PhpParser\Autoloader::register();
+
+$parserName = 'PhpParser\Parser\\' . $version;
+$parser = new $parserName(new PhpParser\Lexer\Emulative);
+$prettyPrinter = new PhpParser\PrettyPrinter\Standard;
+$nodeDumper = new PhpParser\NodeDumper;
+
+$parseFail = $ppFail = $compareFail = $count = 0;
+
+$readTime = $parseTime = $ppTime = $reparseTime = $compareTime = 0;
+$totalStartTime = microtime(true);
+
+foreach (new RecursiveIteratorIterator(
+ new RecursiveDirectoryIterator($dir),
+ RecursiveIteratorIterator::LEAVES_ONLY)
+ as $file) {
+ if (!$fileFilter($file)) {
+ continue;
+ }
+
+ $startTime = microtime(true);
+ $code = file_get_contents($file);
+ $readTime += microtime(true) - $startTime;
+
+ if (null === $code = $codeExtractor($file, $code)) {
+ continue;
+ }
+
+ set_time_limit(10);
+
+ ++$count;
+
+ if ($showProgress) {
+ echo substr(str_pad('Testing file ' . $count . ': ' . substr($file, strlen($dir)), 79), 0, 79), "\r";
+ }
+
+ try {
+ $startTime = microtime(true);
+ $stmts = $parser->parse($code);
+ $parseTime += microtime(true) - $startTime;
+
+ $startTime = microtime(true);
+ $code = '<?php' . "\n" . $prettyPrinter->prettyPrint($stmts);
+ $ppTime += microtime(true) - $startTime;
+
+ try {
+ $startTime = microtime(true);
+ $ppStmts = $parser->parse($code);
+ $reparseTime += microtime(true) - $startTime;
+
+ $startTime = microtime(true);
+ $same = $nodeDumper->dump($stmts) == $nodeDumper->dump($ppStmts);
+ $compareTime += microtime(true) - $startTime;
+
+ if (!$same) {
+ echo $file, ":\n Result of initial parse and parse after pretty print differ\n";
+ if ($verbose) {
+ echo "Pretty printer output:\n=====\n$code\n=====\n\n";
+ }
+
+ ++$compareFail;
+ }
+ } catch (PhpParser\Error $e) {
+ echo $file, ":\n Parse of pretty print failed with message: {$e->getMessage()}\n";
+ if ($verbose) {
+ echo "Pretty printer output:\n=====\n$code\n=====\n\n";
+ }
+
+ ++$ppFail;
+ }
+ } catch (PhpParser\Error $e) {
+ echo $file, ":\n Parse failed with message: {$e->getMessage()}\n";
+
+ ++$parseFail;
+ }
+}
+
+if (0 === $parseFail && 0 === $ppFail && 0 === $compareFail) {
+ $exit = 0;
+ echo "\n\n", 'All tests passed.', "\n";
+} else {
+ $exit = 1;
+ echo "\n\n", '==========', "\n\n", 'There were: ', "\n";
+ if (0 !== $parseFail) {
+ echo ' ', $parseFail, ' parse failures.', "\n";
+ }
+ if (0 !== $ppFail) {
+ echo ' ', $ppFail, ' pretty print failures.', "\n";
+ }
+ if (0 !== $compareFail) {
+ echo ' ', $compareFail, ' compare failures.', "\n";
+ }
+}
+
+echo "\n",
+ 'Tested files: ', $count, "\n",
+ "\n",
+ 'Reading files took: ', $readTime, "\n",
+ 'Parsing took: ', $parseTime, "\n",
+ 'Pretty printing took: ', $ppTime, "\n",
+ 'Reparsing took: ', $reparseTime, "\n",
+ 'Comparing took: ', $compareTime, "\n",
+ "\n",
+ 'Total time: ', microtime(true) - $totalStartTime, "\n",
+ 'Maximum memory usage: ', memory_get_peak_usage(true), "\n";
+
+exit($exit);