]> scripts.mit.edu Git - autoinstallsdev/mediawiki.git/blobdiff - tests/phpunit/suites/ExtensionsTestSuite.php
MediaWiki 1.30.2
[autoinstallsdev/mediawiki.git] / tests / phpunit / suites / ExtensionsTestSuite.php
diff --git a/tests/phpunit/suites/ExtensionsTestSuite.php b/tests/phpunit/suites/ExtensionsTestSuite.php
new file mode 100644 (file)
index 0000000..02934fa
--- /dev/null
@@ -0,0 +1,51 @@
+<?php
+/**
+ * This test suite runs unit tests registered by extensions.
+ * See https://www.mediawiki.org/wiki/Manual:Hooks/UnitTestsList for details of
+ * how to register your tests.
+ */
+
+class ExtensionsTestSuite extends PHPUnit_Framework_TestSuite {
+       public function __construct() {
+               parent::__construct();
+
+               $paths = [];
+               // Autodiscover extension unit tests
+               $registry = ExtensionRegistry::getInstance();
+               foreach ( $registry->getAllThings() as $info ) {
+                       $paths[] = dirname( $info['path'] ) . '/tests/phpunit';
+               }
+               // Extensions can return a list of files or directories
+               Hooks::run( 'UnitTestsList', [ &$paths ] );
+               foreach ( array_unique( $paths ) as $path ) {
+                       if ( is_dir( $path ) ) {
+                               // If the path is a directory, search for test cases.
+                               // @since 1.24
+                               $suffixes = [ 'Test.php' ];
+                               $fileIterator = new File_Iterator_Facade();
+                               $matchingFiles = $fileIterator->getFilesAsArray( $path, $suffixes );
+                               $this->addTestFiles( $matchingFiles );
+                       } elseif ( file_exists( $path ) ) {
+                               // Add a single test case or suite class
+                               $this->addTestFile( $path );
+                       }
+               }
+               if ( !$paths ) {
+                       $this->addTest( new DummyExtensionsTest( 'testNothing' ) );
+               }
+       }
+
+       public static function suite() {
+               return new self;
+       }
+}
+
+/**
+ * Needed to avoid warnings like 'No tests found in class "ExtensionsTestSuite".'
+ * when no extensions with tests are used.
+ */
+class DummyExtensionsTest extends MediaWikiTestCase {
+       public function testNothing() {
+               $this->assertTrue( true );
+       }
+}