X-Git-Url: https://git.cyclocoop.org/?a=blobdiff_plain;f=includes%2Fspecials%2FSpecialJavaScriptTest.php;h=0e2e7db046215e6bb3662c7ca70ce3eed5987d53;hb=5111bd2def4e63ecc8a2acbf468e5c39029f9efd;hp=37dba537746dc0c2d9067bdd26b1a8672695ce53;hpb=b5656b6953888ceae07889d1e3b96c42d824990e;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/specials/SpecialJavaScriptTest.php b/includes/specials/SpecialJavaScriptTest.php index 37dba53774..0e2e7db046 100644 --- a/includes/specials/SpecialJavaScriptTest.php +++ b/includes/specials/SpecialJavaScriptTest.php @@ -25,12 +25,6 @@ * @ingroup SpecialPage */ class SpecialJavaScriptTest extends SpecialPage { - /** - * @var array Supported frameworks. - */ - private static $frameworks = [ - 'qunit', - ]; public function __construct() { parent::__construct( 'JavaScriptTest' ); @@ -42,102 +36,33 @@ class SpecialJavaScriptTest extends SpecialPage { $this->setHeaders(); $out->disallowUserJs(); - if ( $par === null ) { - // No framework specified - // If only one framework is configured, redirect to it. Otherwise display a list. - if ( count( self::$frameworks ) === 1 ) { - $out->redirect( $this->getPageTitle( self::$frameworks[0] . '/plain' )->getLocalURL() ); - return; - } - $out->setStatusCode( 404 ); - $out->setPageTitle( $this->msg( 'javascripttest' ) ); - $out->addHTML( - $this->msg( 'javascripttest-pagetext-noframework' )->parseAsBlock() - . $this->getFrameworkListHtml() - ); - return; - } - - // Determine framework and mode - $pars = explode( '/', $par, 2 ); - - $framework = $pars[0]; - if ( !in_array( $framework, self::$frameworks ) ) { - // Framework not found - $out->setStatusCode( 404 ); - $out->addHTML( - '
' - . $this->msg( 'javascripttest-pagetext-unknownframework' ) - ->plaintextParams( $par )->parseAsBlock() - . '
' - . $this->getFrameworkListHtml() - ); - return; - } - // This special page is disabled by default ($wgEnableJavaScriptTest), and contains // no sensitive data. In order to allow TestSwarm to embed it into a test client window, // we need to allow iframing of this page. $out->allowClickjacking(); - if ( count( self::$frameworks ) !== 1 ) { - // If there's only one framework, don't set the subtitle since it - // is going to redirect back to this page - $out->setSubtitle( - $this->msg( 'javascripttest-backlink' ) - ->rawParams( Linker::linkKnown( $this->getPageTitle() ) ) - ); - } - // Custom actions - if ( isset( $pars[1] ) ) { - $action = $pars[1]; - if ( !in_array( $action, [ 'export', 'plain' ] ) ) { - $out->setStatusCode( 404 ); - $out->addHTML( - '
' - . $this->msg( 'javascripttest-pagetext-unknownaction' ) - ->plaintextParams( $action )->parseAsBlock() - . '
' - ); - return; - } - $method = $action . ucfirst( $framework ); - $this->$method(); + // Sub resource: Internal JavaScript export bundle for QUnit + if ( $par === 'qunit/export' ) { + $this->exportQUnit(); return; } - $method = 'view' . ucfirst( $framework ); - $this->$method(); - $out->setPageTitle( $this->msg( - 'javascripttest-title', - // Messages: javascripttest-qunit-name - $this->msg( "javascripttest-$framework-name" )->plain() - ) ); - } - - /** - * Get a list of frameworks (including introduction paragraph and links - * to the framework run pages) - * - * @return string HTML - */ - private function getFrameworkListHtml() { - $list = ''; - return $this->msg( 'javascripttest-pagetext-frameworks' )->rawParams( $list ) - ->parseAsBlock(); + // Unknown action + $out->setStatusCode( 404 ); + $out->setPageTitle( $this->msg( 'javascripttest' ) ); + $out->addHTML( + '
' + . $this->msg( 'javascripttest-pagetext-unknownaction' ) + ->plaintextParams( $par )->parseAsBlock() + . '
' + ); } /** @@ -152,37 +77,6 @@ class SpecialJavaScriptTest extends SpecialPage { return "
$summary
"; } - /** - * Run the test suite on the Special page. - * - * Rendered by OutputPage and Skin. - */ - private function viewQUnit() { - $out = $this->getOutput(); - - $modules = $out->getResourceLoader()->getTestModuleNames( 'qunit' ); - - $baseHtml = << -
- -HTML; - - $out->addHTML( $this->getSummaryHtml() . $baseHtml ); - - // The testrunner configures QUnit and essentially depends on it. However, test suites - // are reusable in environments that preload QUnit (or a compatibility interface to - // another framework). Therefore we have to load it ourselves. - $out->addHTML( ResourceLoader::makeInlineScript( - Xml::encodeJsCall( 'mw.loader.using', [ - [ 'jquery.qunit', 'jquery.qunit.completenessTest' ], - new XmlJsCode( - 'function () {' . Xml::encodeJsCall( 'mw.loader.load', [ $modules ] ) . '}' - ) - ] ) - ) ); - } - /** * Generate self-sufficient JavaScript payload to run the tests elsewhere. * @@ -224,7 +118,7 @@ HTML; . 'window.__karma__.loaded = function () {};' . '}'; - // The below is essentially a pure-javascript version of OutputPage::getHeadScripts. + // The below is essentially a pure-javascript version of OutputPage::headElement(). $startup = $rl->makeModuleResponse( $startupContext, [ 'startup' => $rl->getModule( 'startup' ), ] ); @@ -272,7 +166,7 @@ HTML; [ 'raw' => true, 'sync' => true ] ); - $head = implode( "\n", array_merge( $styles['html'], $scripts['html'] ) ); + $head = implode( "\n", [ $styles, $scripts ] ); $summary = $this->getSummaryHtml(); $html = <<