1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123
|
<?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;
}
}
?>
|