public function runUnitTests($tests) { // Build any unit tests $this->make('build-tests'); // Now find all the test programs $root = $this->getProjectRoot(); $test_dir = $root . "/tests/"; $futures = array(); if (!$tests) { $paths = glob($test_dir . "*.t"); } else { $paths = array(); foreach ($tests as $path) { $tpath = preg_replace('/\\.c$/', '.t', $path); if (preg_match("/\\.c\$/", $path) && file_exists($tpath)) { $paths[] = realpath($tpath); } } } foreach ($paths as $test) { $relname = substr($test, strlen($test_dir)); $futures[$relname] = new ExecFuture($test); } $results = array(); $futures = new FutureIterator($futures); foreach ($futures->limit(4) as $test => $future) { list($err, $stdout, $stderr) = $future->resolve(); $results[] = $this->parseTestResults($test, $err, $stdout, $stderr); } return $results; }
public function testAddingFuture() { $future1 = new ExecFuture('cat'); $future2 = new ExecFuture('cat'); $iterator = new FutureIterator(array($future1)); $iterator->limit(2); $results = array(); foreach ($iterator as $future) { if ($future === $future1) { $iterator->addFuture($future2); } $results[] = $future->resolve(); } $this->assertEqual(2, count($results)); }
); $args->parseStandardArguments(); if (posix_isatty(STDIN)) { echo phutil_console_format("%s\n", pht('Usage: %s', "find . -type f -name '*.php' | ./generate_php_symbols.php")); exit(1); } $input = file_get_contents('php://stdin'); $data = array(); $futures = array(); foreach (explode("\n", trim($input)) as $file) { $file = Filesystem::readablePath($file); $data[$file] = Filesystem::readFile($file); $futures[$file] = PhutilXHPASTBinary::getParserFuture($data[$file]); } $futures = new FutureIterator($futures); foreach ($futures->limit(8) as $file => $future) { $tree = XHPASTTree::newFromDataAndResolvedExecFuture($data[$file], $future->resolve()); $root = $tree->getRootNode(); $scopes = array(); $functions = $root->selectDescendantsOfType('n_FUNCTION_DECLARATION'); foreach ($functions as $function) { $name = $function->getChildByIndex(2); // Skip anonymous functions. if (!$name->getConcreteString()) { continue; } print_symbol($file, 'function', $name); } $classes = $root->selectDescendantsOfType('n_CLASS_DECLARATION'); foreach ($classes as $class) { $class_name = $class->getChildByIndex(1);