X-Git-Url: https://git.cyclocoop.org/?a=blobdiff_plain;f=tests%2Fphpunit%2Fincludes%2Fspecials%2FSpecialPageTestBase.php;h=2f091d5d064cc017ddbca74bc9ac3a7f26d1b721;hb=2f29abecadfd93e6fb9250798c31e8d6fbd6f259;hp=48baa8e79eb04cf4f5172b33a222e0ddec8cfaa3;hpb=2a1fcd27c19913394c179cbe8be1a9e981d7f81b;p=lhc%2Fweb%2Fwiklou.git diff --git a/tests/phpunit/includes/specials/SpecialPageTestBase.php b/tests/phpunit/includes/specials/SpecialPageTestBase.php index 48baa8e79e..2f091d5d06 100644 --- a/tests/phpunit/includes/specials/SpecialPageTestBase.php +++ b/tests/phpunit/includes/specials/SpecialPageTestBase.php @@ -60,106 +60,13 @@ abstract class SpecialPageTestBase extends MediaWikiTestCase { $language = null, User $user = null ) { - $context = $this->newContext( $request, $language, $user ); - - $output = new OutputPage( $context ); - $context->setOutput( $output ); - - $page = $this->newSpecialPage(); - $page->setContext( $context ); - $output->setTitle( $page->getPageTitle() ); - - $html = $this->getHTMLFromSpecialPage( $page, $subPage ); - $response = $context->getRequest()->response(); - - if ( $response instanceof FauxResponse ) { - $code = $response->getStatusCode(); - - if ( $code > 0 ) { - $response->header( 'Status: ' . $code . ' ' . HttpStatus::getMessage( $code ) ); - } - } - - return [ $html, $response ]; - } - - /** - * @param WebRequest|null $request - * @param Language|string|null $language - * @param User|null $user - * - * @return DerivativeContext - */ - private function newContext( - WebRequest $request = null, - $language = null, - User $user = null - ) { - $context = new DerivativeContext( RequestContext::getMain() ); - - $context->setRequest( $request ?: new FauxRequest() ); - - if ( $language !== null ) { - $context->setLanguage( $language ); - } - - if ( $user !== null ) { - $context->setUser( $user ); - } - - $this->setEditTokenFromUser( $context ); - - return $context; - } - - /** - * If we are trying to edit and no token is set, supply one. - * - * @param DerivativeContext $context - */ - private function setEditTokenFromUser( DerivativeContext $context ) { - $request = $context->getRequest(); - - // Edits via GET are a security issue and should not succeed. On the other hand, not all - // POST requests are edits, but should ignore unused parameters. - if ( !$request->getCheck( 'wpEditToken' ) && $request->wasPosted() ) { - $request->setVal( 'wpEditToken', $context->getUser()->getEditToken() ); - } - } - - /** - * @param SpecialPage $page - * @param string $subPage - * - * @throws Exception - * @return string HTML - */ - private function getHTMLFromSpecialPage( SpecialPage $page, $subPage ) { - ob_start(); - - try { - $page->execute( $subPage ); - - $output = $page->getOutput(); - - if ( $output->getRedirect() !== '' ) { - $output->output(); - $html = ob_get_contents(); - } elseif ( $output->isDisabled() ) { - $html = ob_get_contents(); - } else { - $html = $output->getHTML(); - } - } catch ( Exception $ex ) { - ob_end_clean(); - - // Re-throw exception after "finally" handling because PHP 5.3 doesn't have "finally". - throw $ex; - } - - ob_end_clean(); - - return $html; + return ( new SpecialPageExecutor() )->executeSpecialPage( + $this->newSpecialPage(), + $subPage, + $request, + $language, + $user + ); } }