summaryrefslogtreecommitdiff
path: root/www/wiki/extensions/SemanticMediaWiki/tests/phpunit/Integration/SpecialAskTest.php
diff options
context:
space:
mode:
Diffstat (limited to 'www/wiki/extensions/SemanticMediaWiki/tests/phpunit/Integration/SpecialAskTest.php')
-rw-r--r--www/wiki/extensions/SemanticMediaWiki/tests/phpunit/Integration/SpecialAskTest.php122
1 files changed, 122 insertions, 0 deletions
diff --git a/www/wiki/extensions/SemanticMediaWiki/tests/phpunit/Integration/SpecialAskTest.php b/www/wiki/extensions/SemanticMediaWiki/tests/phpunit/Integration/SpecialAskTest.php
new file mode 100644
index 00000000..653aeaeb
--- /dev/null
+++ b/www/wiki/extensions/SemanticMediaWiki/tests/phpunit/Integration/SpecialAskTest.php
@@ -0,0 +1,122 @@
+<?php
+
+namespace SMW\Tests\Integration;
+
+use DOMDocument;
+use SMW\MediaWiki\Specials\SpecialAsk;
+use SMW\Tests\TestEnvironment;
+
+/**
+ * @group semantic-mediawiki
+ *
+ * @license GNU GPL v2+
+ * @since 2.4
+ *
+ * @author Stephan Gambke
+ */
+class SpecialAskTest extends \PHPUnit_Framework_TestCase {
+
+ private $oldRequestValues;
+ private $oldBodyText;
+ private $testEnvironment;
+
+ protected function setUp() {
+ parent::setUp();
+
+ $this->testEnvironment = new TestEnvironment(
+ [
+ 'smwgSpecialAskFormSubmitMethod' => SMW_SASK_SUBMIT_GET
+ ]
+ );
+ }
+
+ protected function tearDown() {
+ $this->testEnvironment->tearDown();
+ parent::tearDown();
+ }
+
+ /**
+ * @dataProvider provideTestData
+ * @param $params
+ */
+ public function testProducesWellformedHtml( $params ) {
+
+ $this->setupGlobals( $params );
+
+ $special = new SpecialAsk();
+ $special->execute( null );
+
+ $html = $GLOBALS['wgOut']->getHtml();
+ $html = '<!DOCTYPE html><html><body>' . $html . '</body></html>';
+
+ // Known tags DOMDocument has issues with
+ $html = str_replace( [ '<nowiki>', '</nowiki>' ], '', $html );
+
+ $document = new DOMDocument();
+
+ // https://stackoverflow.com/questions/6090667/php-domdocument-errors-warnings-on-html5-tags
+ libxml_use_internal_errors(true);
+ $result = $document->loadHTML( $html );
+ libxml_clear_errors();
+
+ $this->assertTrue( $result );
+
+ $result = $document->loadXML( $html );
+ $this->assertTrue( $result );
+
+ $this->restoreGlobals( $params );
+ }
+
+ /**
+ * @return array
+ */
+ public function provideTestData() {
+ return [
+ [ [ 'eq' => 'yes', 'q' => '' ] ],
+ [ [ 'eq' => 'no', 'q' => '[[]]' ] ],
+ ];
+ }
+
+ /**
+ * @param array $params
+ */
+ protected function setupGlobals( $params ) {
+ global $wgOut, $wgRequest;
+
+ $this->oldRequestValues = [];
+
+ foreach ( $params as $key => $value ) {
+
+ $oldVal = $wgRequest->getText( $key, null );
+ if ( $oldVal !== null ) {
+ $this->oldRequestValues[$key] = $oldVal;
+ }
+
+ $wgRequest->setVal( $key, $value );
+ }
+
+ $this->oldBodyText = $wgOut->getHTML();
+ $wgOut->clearHTML();
+ }
+
+ /**
+ * @param array $params
+ */
+ protected function restoreGlobals( $params ) {
+ global $wgOut, $wgRequest;
+
+ foreach ( $params as $key => $value ) {
+ if ( method_exists( $wgRequest, 'unsetVal' ) ) {
+ $wgRequest->unsetVal( $key );
+ } else {
+ $wgRequest->setVal( $key, null );
+ }
+ }
+ foreach ( $this->oldRequestValues as $key => $value ) {
+ $wgRequest->setVal( $key, $value );
+ }
+
+ $wgOut->clearHTML();
+ $wgOut->addHTML( $this->oldBodyText );
+ }
+}