| <?php |
| /* |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| */ |
| |
| // keep BC with PHPUnit versions < 6 |
| if (!class_exists('PHPUnit_Framework_TestSuite')) { |
| class PHPUnit_Framework_TestSuite extends PHPUnit\Framework\TestSuite {} |
| } |
| |
| /** |
| * Generic test suite containing tests based on the provided CLI parameters, |
| * see {@link NetBeansSuite::toRun()} for more information. |
| * |
| * For directory:<br/> |
| * Recursively scans the test-directory and it's |
| * sub-directories. All found unit-tests will be |
| * added and executed. |
| * |
| * For file:<br/> |
| * Just the file is added. |
| * |
| * To run this suite from CLI: phpunit NetBeansSuite.php --run=<file-or-directory> |
| * |
| * <b>WARNING: User changes to this file should be avoided.</b> |
| * |
| * @package NetBeans |
| */ |
| class NetBeansSuite extends PHPUnit_Framework_TestSuite { |
| /** |
| * The name of the environment variable containing the file or directory to be run by PHPUnit. |
| * @see toRun() |
| */ |
| const ENV_RUN = "NB_PHPUNIT_RUN"; |
| |
| /** |
| * Suite factory. |
| * |
| * This function creates a PHPUnit test-suite, |
| * scans the directory for test-cases, |
| * adds all test-cases found and then returns |
| * a test-suite containing all available tests. |
| * |
| * @access public |
| * @static |
| * @return NetBeansSuite |
| */ |
| public static function suite() { |
| $suite = new NetBeansSuite(); |
| foreach (self::toRun() as $file) { |
| $suite->addTestFile($file); |
| } |
| return $suite; |
| } |
| |
| /** |
| * Tries to find {@link #ENV_RUN) in environment variables and returns array of files to be run by PHPUnit |
| * or throws Exception if no such variable found or directory/file does not exist. |
| * |
| * @access private |
| * @static |
| * |
| * @return array an array of files to be run by PHPUnit |
| * @see ENV_RUN |
| */ |
| private static function toRun() { |
| $run = getenv(self::ENV_RUN); |
| if ($run === null) { |
| throw new Exception(sprintf("No environment variable to run (%s) found.", self::ENV_RUN)); |
| } |
| $result = array(); |
| foreach (explode(";", $run) as $part) { |
| if (is_dir($part)) { |
| $result = array_merge($result, self::rglob("*[Tt]est.php", $part.DIRECTORY_SEPARATOR)); |
| } elseif (is_file($part)) { |
| $result[] = $part; |
| } else { |
| throw new Exception(sprintf("Argument '%s' neither file nor directory.", $part)); |
| } |
| } |
| return $result; |
| } |
| |
| /** |
| * Recursive {@link http://php.net/manual/en/function.glob.php glob()}. |
| * |
| * @access private |
| * @static |
| * |
| * @param string $pattern the pattern passed to glob(), default is "*" |
| * @param string $path the path to scan, default is |
| * {@link http://php.net/manual/en/function.getcwd.php the current working directory} |
| * @param int $flags the flags passed to glob() |
| * @return array an array of files in the given path matching the pattern. |
| * @link http://php.net/manual/en/function.glob.php |
| * @link http://php.net/manual/en/function.getcwd.php |
| */ |
| private static function rglob($pattern = '*', $path = '', $flags = 0) { |
| $paths = glob($path.'*', GLOB_MARK | GLOB_ONLYDIR | GLOB_NOSORT) or array(); |
| $files = glob($path.$pattern, $flags) or array(); |
| foreach ($paths as $path) { |
| $files = array_merge($files, self::rglob($pattern, $path, $flags)); |
| } |
| return $files; |
| } |
| } |
| |
| ?> |