summaryrefslogtreecommitdiff
path: root/www/wiki/extensions/SemanticMediaWiki/tests/phpunit/SpecialPageTestCase.php
diff options
context:
space:
mode:
Diffstat (limited to 'www/wiki/extensions/SemanticMediaWiki/tests/phpunit/SpecialPageTestCase.php')
-rw-r--r--www/wiki/extensions/SemanticMediaWiki/tests/phpunit/SpecialPageTestCase.php146
1 files changed, 146 insertions, 0 deletions
diff --git a/www/wiki/extensions/SemanticMediaWiki/tests/phpunit/SpecialPageTestCase.php b/www/wiki/extensions/SemanticMediaWiki/tests/phpunit/SpecialPageTestCase.php
new file mode 100644
index 00000000..ecc8cebc
--- /dev/null
+++ b/www/wiki/extensions/SemanticMediaWiki/tests/phpunit/SpecialPageTestCase.php
@@ -0,0 +1,146 @@
+<?php
+
+namespace SMW\Test;
+
+use FauxRequest;
+use Language;
+use OutputPage;
+use RequestContext;
+use SMW\Tests\Utils\Mock\MockSuperUser;
+use SpecialPage;
+use WebRequest;
+
+/**
+ *
+ * @group SMW
+ * @group SMWExtension
+ * @group medium
+ *
+ * @licence GNU GPL v2+
+ * @since 1.9.0.2
+ *
+ * @author mwjames
+ */
+abstract class SpecialPageTestCase extends \PHPUnit_Framework_TestCase {
+
+ protected $obLevel;
+ protected $store = null;
+
+ protected function setUp() {
+ parent::setUp();
+ $this->obLevel = ob_get_level();
+ }
+
+ protected function tearDown() {
+
+ $obLevel = ob_get_level();
+
+ while ( ob_get_level() > $this->obLevel ) {
+ ob_end_clean();
+ }
+
+ parent::tearDown();
+ }
+
+ /**
+ * @return SpecialPage
+ */
+ protected abstract function getInstance();
+
+ protected function setStore( $store ) {
+ $this->store = $store;
+ }
+
+ /**
+ * Borrowed from \Wikibase\Test\SpecialPageTestBase
+ *
+ * @param string $sub The subpage parameter to call the page with
+ * @param WebRequest $request Web request that may contain URL parameters, etc
+ */
+ protected function execute( $sub = '', WebRequest $request = null, $user = null ) {
+
+ $request = $request === null ? new FauxRequest() : $request;
+ $response = $request->response();
+
+ $page = $this->getInstance();
+
+ if ( $this->store !== null ) {
+ $page->setStore( $this->store );
+ }
+
+ $page->setContext( $this->makeRequestContext(
+ $request,
+ $user,
+ $this->getTitle( $page )
+ ) );
+
+ $out = $page->getOutput();
+
+ ob_start();
+ $page->execute( $sub );
+
+ if ( $out->getRedirect() !== '' ) {
+ $out->output();
+ $text = ob_get_contents();
+ } elseif ( $out->isDisabled() ) {
+ $text = ob_get_contents();
+ } else {
+ $text = $out->getHTML();
+ }
+
+ ob_end_clean();
+
+ $code = $response->getStatusCode();
+
+ if ( $code > 0 ) {
+ $response->header( "Status: " . $code . ' ' . \HttpStatus::getMessage( $code ) );
+ }
+
+ $this->text = $text;
+ $this->response = $response;
+ }
+
+ /**
+ * @return string
+ */
+ protected function getText() {
+ return $this->text;
+ }
+
+ /**
+ * @return FauxResponse
+ */
+ protected function getResponse() {
+ return $this->response;
+ }
+
+ /**
+ * @return RequestContext
+ */
+ private function makeRequestContext( WebRequest $request, $user, $title ) {
+
+ $context = new RequestContext();
+ $context->setRequest( $request );
+
+ $out = new OutputPage( $context );
+ $out->setTitle( $title );
+
+ $context->setOutput( $out );
+ $context->setLanguage( Language::factory( 'en' ) );
+
+ $user = $user === null ? new MockSuperUser() : $user;
+ $context->setUser( $user );
+
+ return $context;
+ }
+
+ /**
+ * Deprecated: Use of SpecialPage::getTitle was deprecated in MediaWiki 1.23
+ *
+ * @return Title
+ */
+ private function getTitle( SpecialPage $page ) {
+ return method_exists( $page, 'getPageTitle') ? $page->getPageTitle() : $page->getTitle();
+ }
+
+}