Import AllTests.php from CVS HEAD.
authorMichael M Slusarz <slusarz@curecanti.org>
Wed, 23 Dec 2009 01:06:21 +0000 (18:06 -0700)
committerMichael M Slusarz <slusarz@curecanti.org>
Wed, 23 Dec 2009 01:06:21 +0000 (18:06 -0700)
framework/AllTests.php [new file with mode: 0644]

diff --git a/framework/AllTests.php b/framework/AllTests.php
new file mode 100644 (file)
index 0000000..67e2c08
--- /dev/null
@@ -0,0 +1,86 @@
+<?php
+/**
+ * Horde Test Runner
+ *
+ * @category Horde
+ * @package  Horde
+ * @subpackage UnitTests
+ * @author   Chuck Hagenbuch <chuck@horde.org>
+ * @license  http://opensource.org/licenses/bsd-license.php BSD
+ */
+
+if (!defined('PHPUnit_MAIN_METHOD')) {
+    define('PHPUnit_MAIN_METHOD', 'AllTests::main');
+}
+
+require_once 'PHPUnit/Framework/TestSuite.php';
+require_once 'PHPUnit/TextUI/TestRunner.php';
+
+/**
+ * @category Horde
+ * @package  Horde
+ * @subpackage UnitTests
+ * @author   Chuck Hagenbuch <chuck@horde.org>
+ * @license  http://opensource.org/licenses/lgpl-license.php
+ */
+class AllTests
+{
+
+    public static function main()
+    {
+        PHPUnit_TextUI_TestRunner::run(self::suite());
+    }
+
+    public static function suite()
+    {
+        $suite = new PHPUnit_Framework_TestSuite('Horde Test Runner');
+
+        $basedir = dirname(__FILE__);
+        $baseregexp = preg_quote($basedir . DIRECTORY_SEPARATOR, '/');
+
+        // Find all AllTests.php files.
+        foreach (new RecursiveIteratorIterator(new RecursiveDirectoryIterator($basedir)) as $file) {
+            if ($file->isFile() && $file->getFilename() == 'AllTests.php' && $file->getPathname() != __FILE__) {
+                $pathname = $file->getPathname();
+
+                // Include the test suite.
+                require $pathname;
+
+                // Generate possible classnames (namespaced and
+                // non-namespaced, with and without Horde_, _tests_,
+                // and the full tests/Horde/... hierarchy).
+                $class = str_replace(DIRECTORY_SEPARATOR, '_', preg_replace("/^$baseregexp(.*)\.php/", '\\1', $pathname));
+                $class_notests = preg_replace('/_tests?/', '', $class);
+                $class_horde = 'Horde_' . $class;
+                $class_horde_notests = 'Horde_' . $class_notests;
+                $class_pear2 = preg_replace('/' . substr($class, 0, strpos($class, '_')) . '_tests?_/', '', $class);
+                $class_pear2_notests = preg_replace('/\w+_tests?_/', '', $class);
+
+                $classnames = array($class, $class_notests, $class_horde, $class_horde_notests, $class_pear2, $class_pear2_notests);
+                foreach ($classnames as $classname) {
+                    $classnames[] = str_replace('_', '::', $classname);
+                }
+
+                // Look for something with a ::suite() method.
+                foreach ($classnames as $classname) {
+                    // We've already included the AllTests.php file,
+                    // so explicitly disable autoloading in the
+                    // class_exists check. Otherwise we can get all
+                    // kinds of double-define errors.
+                    if (class_exists($classname, false)) {
+                        // Once we've found a usable test suite, add it and move on.
+                        $suite->addTestSuite(call_user_func(array($classname, 'suite')));
+                        break;
+                    }
+                }
+            }
+        }
+
+        return $suite;
+    }
+
+}
+
+if (PHPUnit_MAIN_METHOD == 'AllTests::main') {
+    AllTests::main();
+}