/** * @since 2.2 * * @param QueryTestCaseInterpreter $queryTestCaseInterpreter */ public function processQueryCase(QueryTestCaseInterpreter $queryTestCaseInterpreter) { if (!$queryTestCaseInterpreter->hasCondition()) { $this->markTestSkipped('Found no condition for ' . $queryTestCaseInterpreter->isAbout()); } $description = $this->queryParser->getQueryDescription($queryTestCaseInterpreter->getCondition()); $this->printDescriptionToOutput($queryTestCaseInterpreter->isAbout(), $description); $query = new Query($description, false, false); $query->querymode = $queryTestCaseInterpreter->getQueryMode(); $query->setLimit($queryTestCaseInterpreter->getLimit()); $query->setOffset($queryTestCaseInterpreter->getOffset()); $query->setExtraPrintouts($queryTestCaseInterpreter->getExtraPrintouts()); $query->setSortKeys($queryTestCaseInterpreter->getSortKeys()); $query->setContextPage($queryTestCaseInterpreter->getSubject()); if ($queryTestCaseInterpreter->isRequiredToClearStoreCache()) { $this->getStore()->clear(); } $queryResult = $this->getStore()->getQueryResult($query); $this->printQueryResultToOutput($queryResult); if (is_string($queryResult)) { return; } $this->assertEquals($queryTestCaseInterpreter->getExpectedCount(), $queryResult->getCount(), 'Failed asserting query result count on ' . $queryTestCaseInterpreter->isAbout()); $this->assertCount($queryTestCaseInterpreter->getExpectedErrorCount(), $queryResult->getErrors(), 'Failed asserting error count ' . $queryTestCaseInterpreter->isAbout()); if ($queryTestCaseInterpreter->getExpectedErrorCount() > 0) { return null; } if ($queryTestCaseInterpreter->isFromCache() !== null) { $this->assertEquals($queryTestCaseInterpreter->isFromCache(), $queryResult->isFromCache(), 'Failed asserting isFromCache for ' . $queryTestCaseInterpreter->isAbout()); } $this->queryResultValidator->assertThatQueryResultHasSubjects($queryTestCaseInterpreter->getExpectedSubjects(), $queryResult, $queryTestCaseInterpreter->isAbout()); $this->queryResultValidator->assertThatDataItemIsSet($queryTestCaseInterpreter->getExpectedDataItems(), $queryResult, $queryTestCaseInterpreter->isAbout()); $this->queryResultValidator->assertThatDataValueIsSet($queryTestCaseInterpreter->getExpectedDataValues(), $queryResult, $queryTestCaseInterpreter->isAbout()); }
public function queryProvider() { $subject = DIWikiPage::newFromText('Foo'); #0 $description = new SomeProperty(new DIProperty('Foobar'), new ValueDescription(DIWikiPage::newFromText('Bar'))); $query = new Query($description); $query->setContextPage($subject); $provider[] = array($query, array(DIWikiPage::newFromText('Foo'), DIWikiPage::newFromText('Bar'), 'Foobar#102#' => DIWikiPage::newFromText('Foobar', SMW_NS_PROPERTY))); #1 $description = new SomeProperty(new DIProperty('Foobar'), new ValueDescription(new DIBlob('Bar'))); $query = new Query($description); $query->setContextPage($subject); $provider[] = array($query, array(DIWikiPage::newFromText('Foo'), 'Foobar#102#' => DIWikiPage::newFromText('Foobar', SMW_NS_PROPERTY))); #2 uses inverse property declaration $description = new SomeProperty(new DIProperty('Foobar', true), new ValueDescription(DIWikiPage::newFromText('Bar'))); $query = new Query($description); $query->setContextPage($subject); $provider[] = array($query, array(DIWikiPage::newFromText('Foo'), DIWikiPage::newFromText('Bar'), 'Foobar#102#' => DIWikiPage::newFromText('Foobar', SMW_NS_PROPERTY))); #3 Conjunction $description = new SomeProperty(new DIProperty('Foobar'), new ValueDescription(DIWikiPage::newFromText('Bar'))); $query = new Query(new Conjunction(array($description, new NamespaceDescription(NS_MAIN)))); $query->setContextPage($subject); $provider[] = array($query, array(DIWikiPage::newFromText('Foo'), DIWikiPage::newFromText('Bar'), 'Foobar#102#' => DIWikiPage::newFromText('Foobar', SMW_NS_PROPERTY))); #4 Disjunction $description = new SomeProperty(new DIProperty('Foobar'), new ValueDescription(DIWikiPage::newFromText('Bar'))); $query = new Query(new Disjunction(array($description, new NamespaceDescription(NS_MAIN)))); $query->setContextPage($subject); $provider[] = array($query, array(DIWikiPage::newFromText('Foo'), DIWikiPage::newFromText('Bar'), 'Foobar#102#' => DIWikiPage::newFromText('Foobar', SMW_NS_PROPERTY))); #5 $description = new ClassDescription(DIWikiPage::newFromText('Foocat', NS_CATEGORY)); $query = new Query($description); $query->setContextPage($subject); $provider[] = array($query, array(DIWikiPage::newFromText('Foo'), DIWikiPage::newFromText('Foocat', NS_CATEGORY))); #6 $description = new ConceptDescription(DIWikiPage::newFromText('FooConcept', SMW_NS_CONCEPT)); $query = new Query($description); $query->setContextPage($subject); $provider[] = array($query, array(DIWikiPage::newFromText('Foo'), DIWikiPage::newFromText('FooConcept', SMW_NS_CONCEPT))); #7 Printrequest $pv = \SMWPropertyValue::makeUserProperty('Foobaz'); $description = new SomeProperty(new DIProperty('Foobar', true), new ValueDescription(DIWikiPage::newFromText('Bar'))); $description->addPrintRequest(new PrintRequest(PrintRequest::PRINT_PROP, '', $pv)); $query = new Query($description); $query->setContextPage($subject); $provider[] = array($query, array(DIWikiPage::newFromText('Foo'), DIWikiPage::newFromText('Bar'), DIWikiPage::newFromText('Foobaz', SMW_NS_PROPERTY), 'Foobar#102#' => DIWikiPage::newFromText('Foobar', SMW_NS_PROPERTY))); #8 Inverse printrequest $pv = \SMWPropertyValue::makeUserProperty('Foobaz'); $pv->setInverse(true); $description = new SomeProperty(new DIProperty('Foobar', true), new ValueDescription(DIWikiPage::newFromText('Bar'))); $description->addPrintRequest(new PrintRequest(PrintRequest::PRINT_PROP, '', $pv)); $query = new Query($description); $query->setContextPage($subject); $provider[] = array($query, array(DIWikiPage::newFromText('Foo'), DIWikiPage::newFromText('Bar'), DIWikiPage::newFromText('Foobaz', SMW_NS_PROPERTY), 'Foobar#102#' => DIWikiPage::newFromText('Foobar', SMW_NS_PROPERTY))); #9 SMW_CMP_EQ comparator $description = new SomeProperty(new DIProperty('Foobar'), new ValueDescription(DIWikiPage::newFromText('EQ_Comparator'), null, SMW_CMP_EQ)); $query = new Query($description); $query->setContextPage($subject); $provider[] = array($query, array(DIWikiPage::newFromText('Foo'), DIWikiPage::newFromText('EQ_Comparator'), 'Foobar#102#' => DIWikiPage::newFromText('Foobar', SMW_NS_PROPERTY))); #10 Ignore entity with SMW_CMP_EQ comparator $description = new SomeProperty(new DIProperty('Foobar'), new ValueDescription(DIWikiPage::newFromText('LIKE_Comparator'), null, SMW_CMP_LIKE)); $query = new Query($description); $query->setContextPage($subject); $provider[] = array($query, array(DIWikiPage::newFromText('Foo'), 'Foobar#102#' => DIWikiPage::newFromText('Foobar', SMW_NS_PROPERTY))); return $provider; }