50 lines
1.4 KiB
PHP
50 lines
1.4 KiB
PHP
<?php
|
|
|
|
use MediaWiki\MediaWikiServices;
|
|
|
|
class MockSearchEngine extends SearchEngine {
|
|
/** @var SearchResult[][] */
|
|
private static $results = [];
|
|
/** @var SearchResultSet[][] */
|
|
private static $interwikiResults = [];
|
|
|
|
public static function clearMockResults() {
|
|
self::$results = [];
|
|
self::$interwikiResults = [];
|
|
}
|
|
|
|
/**
|
|
* @param string $query The query searched for *after* initial
|
|
* transformations have been applied.
|
|
* @param SearchResult[] $results The results to return for $query
|
|
*/
|
|
public static function addMockResults( $query, array $results ) {
|
|
$lc = MediaWikiServices::getInstance()->getLinkCache();
|
|
foreach ( $results as &$result ) {
|
|
// Resolve deferred results; needed to work around T203279
|
|
if ( is_callable( $result ) ) {
|
|
$result = $result();
|
|
}
|
|
|
|
// TODO: better page ids? Does it matter?
|
|
$lc->addGoodLinkObj( mt_rand(), $result->getTitle() );
|
|
}
|
|
self::$results[$query] = $results;
|
|
}
|
|
|
|
/**
|
|
* @param SearchResultSet[][] $interwikiResults
|
|
*/
|
|
public static function setMockInterwikiResults( array $interwikiResults ) {
|
|
self::$interwikiResults = $interwikiResults;
|
|
}
|
|
|
|
protected function doSearchText( $term ) {
|
|
if ( isset( self::$results[ $term ] ) ) {
|
|
$results = array_slice( self::$results[ $term ], $this->offset, $this->limit );
|
|
} else {
|
|
$results = [];
|
|
}
|
|
return new MockSearchResultSet( $results, self::$interwikiResults );
|
|
}
|
|
}
|