diff options
Diffstat (limited to 'www/wiki/extensions/SemanticMediaWiki/tests/phpunit/Integration/JSONScript/QueryTestCaseInterpreter.php')
-rw-r--r-- | www/wiki/extensions/SemanticMediaWiki/tests/phpunit/Integration/JSONScript/QueryTestCaseInterpreter.php | 297 |
1 files changed, 297 insertions, 0 deletions
diff --git a/www/wiki/extensions/SemanticMediaWiki/tests/phpunit/Integration/JSONScript/QueryTestCaseInterpreter.php b/www/wiki/extensions/SemanticMediaWiki/tests/phpunit/Integration/JSONScript/QueryTestCaseInterpreter.php new file mode 100644 index 00000000..77fa3e7c --- /dev/null +++ b/www/wiki/extensions/SemanticMediaWiki/tests/phpunit/Integration/JSONScript/QueryTestCaseInterpreter.php @@ -0,0 +1,297 @@ +<?php + +namespace SMW\Tests\Integration\JSONScript; + +use SMW\DataTypeRegistry; +use SMW\DataValueFactory; +use SMW\DIProperty; +use SMW\DIWikiPage; +use SMW\Query\PrintRequest as PrintRequest; +use SMW\Tests\Utils\UtilityFactory; +use SMWDataItem as DataItem; + +/** + * @license GNU GPL v2+ + * @since 2.2 + * + * @author mwjames + */ +class QueryTestCaseInterpreter { + + /** + * @var array + */ + private $contents; + + /** + * @since 2.2 + * + * @param array $contents + */ + public function __construct( array $contents ) { + $this->contents = $contents; + } + + /** + * @since 2.2 + * + * @return boolean + */ + public function hasCondition() { + return isset( $this->contents['condition'] ); + } + + /** + * @since 2.2 + * + * @return string + */ + public function getCondition() { + return $this->hasCondition() ? $this->contents['condition'] : ''; + } + + /** + * @since 2.2 + * + * @return string + */ + public function isAbout() { + return isset( $this->contents['about'] ) ? $this->contents['about'] : 'no description'; + } + + /** + * @since 2.2 + * + * @return integer + */ + public function getQueryMode() { + return isset( $this->contents['parameters']['querymode'] ) ? constant( $this->contents['parameters']['querymode'] ) : \SMWQuery::MODE_INSTANCES; + } + + /** + * @since 2.2 + * + * @return integer + */ + public function getLimit() { + return isset( $this->contents['parameters']['limit'] ) ? (int)$this->contents['parameters']['limit'] : 100; + } + + /** + * @since 2.2 + * + * @return integer + */ + public function getOffset() { + return isset( $this->contents['parameters']['offset'] ) ? (int)$this->contents['parameters']['offset'] : 0; + } + + /** + * @since 2.5 + * + * @return DIWikiPage|null + */ + public function getSubject() { + return isset( $this->contents['subject'] ) ? DIWikiPage::newFromText( $this->contents['subject'] ) : null; + } + + /** + * @since 2.5 + * + * @return boolean + */ + public function isFromCache() { + return isset( $this->contents['assert-queryresult']['isFromCache'] ) ? (bool)$this->contents['assert-queryresult']['isFromCache'] : null; + } + + /** + * @since 2.2 + * + * @return array + */ + public function getExtraPrintouts() { + + $extraPrintouts = []; + + if ( !isset( $this->contents['printouts'] ) || $this->contents['printouts'] === [] ) { + return $extraPrintouts; + } + + foreach ( $this->contents['printouts'] as $printout ) { + + $label = null; + + if ( strpos( $printout, '#') !== false ) { + list( $printout, $label ) = explode( '#', $printout ); + } + + $extraPrintouts[] = new PrintRequest( + PrintRequest::PRINT_PROP, + $label, + DataValueFactory::getInstance()->newPropertyValueByLabel( $printout ) + ); + } + + return $extraPrintouts; + } + + /** + * @since 2.2 + * + * @return integer + */ + public function getSortKeys() { + + if ( isset( $this->contents['parameters']['sort'] ) ) { + + if ( is_array( $this->contents['parameters']['sort'] ) ) { + return $this->contents['parameters']['sort']; + } + + return [ $this->contents['parameters']['sort'] => 'DESC' ]; + } + + return []; + } + + /** + * @since 2.3 + * + * @return boolean + */ + public function isRequiredToClearStoreCache() { + return isset( $this->contents['store']['clear-cache'] ) && $this->contents['store']['clear-cache']; + } + + /** + * @since 2.2 + * + * @return integer + */ + public function getExpectedCount() { + return isset( $this->contents['assert-queryresult']['count'] ) ? (int)$this->contents['assert-queryresult']['count'] : 0; + } + + /** + * @since 2.2 + * + * @return DIWikiPage[] + */ + public function getExpectedSubjects() { + + $subjects = []; + + if ( !isset( $this->contents['assert-queryresult']['results'] ) ) { + return $subjects; + } + + foreach ( $this->contents['assert-queryresult']['results'] as $hashName ) { + $subjects[] = DIWikiPage::doUnserialize( str_replace( ' ', '_', $hashName ) ); + } + + return $subjects; + } + + /** + * @since 2.2 + * + * @return DataItem[] + */ + public function getExpectedDataItems() { + + $dataItems = []; + + if ( !isset( $this->contents['assert-queryresult']['dataitems'] ) ) { + return $dataItems; + } + + foreach ( $this->contents['assert-queryresult']['dataitems'] as $dataitem ) { + $dataItems[] = DataItem::newFromSerialization( + DataTypeRegistry::getInstance()->getDataItemId( $dataitem['type'] ), + $dataitem['value'] + ); + } + + return $dataItems; + } + + /** + * @since 2.2 + * + * @return DataValues[] + */ + public function getExpectedDataValues() { + + $dataValues = []; + + if ( !isset( $this->contents['assert-queryresult']['datavalues'] ) ) { + return $dataValues; + } + + foreach ( $this->contents['assert-queryresult']['datavalues'] as $datavalue ) { + $dataValues[] = DataValueFactory::getInstance()->newDataValueByProperty( + DIProperty::newFromUserLabel( $datavalue['property'] ), + $datavalue['value'] + ); + } + + return $dataValues; + } + + /** + * @since 2.2 + * + * @return integer + */ + public function getExpectedErrorCount() { + + if ( !isset( $this->contents['assert-queryresult']['error'] ) ) { + return -1; + } + + return $this->contents['assert-queryresult']['error']; + } + + /** + * @since 2.2 + * + * @return string + */ + public function fetchTextFromOutputSubject() { + + if ( !isset( $this->contents['subject'] ) ) { + return ''; + } + + $title = \Title::newFromText( $this->contents['subject'] ); + $parserOutput = UtilityFactory::getInstance()->newPageReader()->getEditInfo( $title )->output; + + return $parserOutput->getText(); + } + + /** + * @since 2.2 + * + * @return array + */ + public function getExpectedFormatOuputFor( $id ) { + + $output = []; + + if ( !isset( $this->contents['assert-output'] ) || !isset( $this->contents['assert-output'][$id] ) ) { + return $output; + } + + return $this->contents['assert-output'][$id]; + } + + /** + * @since 2.2 + * + * @return [] + */ + public function getExpectedConceptCache() { + return isset( $this->contents['conceptcache'] ) ? $this->contents['conceptcache'] : []; + } + +} |