summaryrefslogtreecommitdiff
path: root/www/wiki/extensions/SemanticMediaWiki/tests/phpunit/Integration/JSONScript/ParserHtmlTestCaseProcessor.php
diff options
context:
space:
mode:
Diffstat (limited to 'www/wiki/extensions/SemanticMediaWiki/tests/phpunit/Integration/JSONScript/ParserHtmlTestCaseProcessor.php')
-rw-r--r--www/wiki/extensions/SemanticMediaWiki/tests/phpunit/Integration/JSONScript/ParserHtmlTestCaseProcessor.php148
1 files changed, 148 insertions, 0 deletions
diff --git a/www/wiki/extensions/SemanticMediaWiki/tests/phpunit/Integration/JSONScript/ParserHtmlTestCaseProcessor.php b/www/wiki/extensions/SemanticMediaWiki/tests/phpunit/Integration/JSONScript/ParserHtmlTestCaseProcessor.php
new file mode 100644
index 00000000..5e99a630
--- /dev/null
+++ b/www/wiki/extensions/SemanticMediaWiki/tests/phpunit/Integration/JSONScript/ParserHtmlTestCaseProcessor.php
@@ -0,0 +1,148 @@
+<?php
+
+namespace SMW\Tests\Integration\JSONScript;
+
+use SMW\DIWikiPage;
+use SMW\Tests\Utils\UtilityFactory;
+use SMW\Tests\Utils\Validators\HtmlValidator;
+
+/**
+ * @group semantic-mediawiki
+ * @group medium
+ *
+ * @license GNU GPL v2+
+ * @since 3.0
+ *
+ * @author Stephan Gambke
+ */
+class ParserHtmlTestCaseProcessor extends \PHPUnit_Framework_TestCase {
+
+ /**
+ * @var HtmlValidator
+ */
+ private $htmlValidator;
+
+ /**
+ * @var PageReader
+ */
+ private $pageReader;
+
+ /**
+ * @param HtmlValidator $htmlValidator
+ */
+ public function __construct( HtmlValidator $htmlValidator ) {
+ parent::__construct();
+ $this->htmlValidator = $htmlValidator;
+ $this->pageReader = UtilityFactory::getInstance()->newPageReader();
+ }
+
+ /**
+ * @return boolean
+ */
+ public function canUse() {
+ return $this->htmlValidator->canUse();
+ }
+
+ /**
+ * @param array $case
+ */
+ public function process( array $case ) {
+
+ if ( !isset( $case[ 'subject' ] ) ) {
+ return;
+ }
+
+ if ( isset( $case[ 'about' ] ) ) {
+ $this->setName( $case[ 'about' ] );
+ }
+
+ $this->assertParserHtmlOutputForCase( $case );
+ }
+
+ /**
+ * @param array $case
+ */
+ private function assertParserHtmlOutputForCase( array $case ) {
+
+ if ( !isset( $case[ 'assert-output' ] ) ) {
+ return;
+ }
+
+ $outputText = $this->getOutputText( $case );
+
+ if ( $this->isSetAndTrueish( $case[ 'assert-output' ], 'to-be-valid-html' ) ) {
+ $this->htmlValidator->assertThatHtmlIsValid(
+ $outputText,
+ $case[ 'about' ]
+ );
+ }
+
+ if ( $this->isSetAndTrueish( $case[ 'assert-output' ], 'to-contain' ) ) {
+ $this->htmlValidator->assertThatHtmlContains(
+ $case[ 'assert-output' ][ 'to-contain' ],
+ $outputText,
+ $case[ 'about' ]
+ );
+ }
+
+ if ( $this->isSetAndTrueish( $case[ 'assert-output' ], 'not-contain' ) ) {
+ $this->htmlValidator->assertThatHtmlNotContains(
+ $case[ 'assert-output' ][ 'not-contain' ],
+ $outputText,
+ $case[ 'about' ]
+ );
+ }
+ }
+
+ /**
+ * @param array $case
+ * @return string
+ */
+ private function getOutputText( array $case ) {
+
+ $subject = DIWikiPage::newFromText(
+ $case[ 'subject' ],
+ isset( $case[ 'namespace' ] ) ? constant( $case[ 'namespace' ] ) : NS_MAIN
+ );
+
+ $parserOutput = $this->pageReader->getParserOutputFromEdit(
+ $subject->getTitle()
+ );
+
+ if ( !$this->isSetAndTrueish( $case[ 'assert-output' ], [ 'withOutputPageContext', 'onPageView' ] ) ) {
+ return $parserOutput->getText();
+ }
+
+ $context = new \RequestContext();
+ $context->setTitle( $subject->getTitle() );
+
+ if ( $this->isSetAndTrueish( $case[ 'assert-output' ], 'withOutputPageContext' ) ) {
+ // Ensures the OutputPageBeforeHTML hook is run
+ $context->getOutput()->addParserOutput( $parserOutput );
+ } else {
+ \Article::newFromTitle( $subject->getTitle(), $context )->view();
+ }
+
+ return $context->getOutput()->getHTML();
+
+ }
+
+ /**
+ * @param $array
+ * @param string | string[] $keys
+ * @return bool True if any of the $keys is defined in $array and true-ish
+ */
+ private function isSetAndTrueish( $array, $keys ) {
+
+ $keys = (array)$keys;
+
+ foreach ( $keys as $key ) {
+ if ( isset( $array[ $key ] ) && $array[ $key ] ) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+}