* @group Stub
*/
class SearchEngineTest extends MediaWiki_Setup {
- var $db, $search;
- private $count = 0;
-
- function insertSearchData() {
- $this->insertPage("Main_Page", "This is a main page", 0);
- $this->insertPage('Main_Page', 'This is a talk page to the main page, see [[smithee]]', 1);
- $this->insertPage('Smithee', 'A smithee is one who smiths. See also [[Alan Smithee]]', 0);
- $this->insertPage('Smithee', 'This article sucks.', 1);
- $this->insertPage('Unrelated_page', 'Nothing in this page is about the S word.', 0);
- $this->insertPage('Another_page', 'This page also is unrelated.', 0);
- $this->insertPage('Help', 'Help me!', 4);
- $this->insertPage('Thppt', 'Blah blah', 0);
- $this->insertPage('Alan_Smithee', 'yum', 0);
- $this->insertPage('Pages', 'are food', 0);
- $this->insertPage('DblPageOne', 'ABCDEF', 0);
- $this->insertPage('DblPageTwo', 'ABCDE', 0);
- $this->insertPage('DblPageTwoLow', 'abcde', 0);
- }
+ var $db, $search, $pageList;
- function normalize( $text ) {
- return strtolower(preg_replace("/[^[:alnum:] ]/", " ", $text));
+ function pageExists( $title ) {
+ return false;
}
- function insertPage( $pageName, $text, $ns ) {
- $this->count++;
- $this->db->safeQuery( 'INSERT INTO ! (page_id,page_namespace,page_title,page_latest) VALUES (?,?,?,?)',
- $this->db->tableName( 'page' ), $this->count, $ns, $pageName, $this->count );
- $this->db->safeQuery( 'INSERT INTO ! (rev_id,rev_page) VALUES (?, ?)',
- $this->db->tableName( 'revision' ), $this->count, $this->count );
- $this->db->safeQuery( 'INSERT INTO ! (old_id,old_text) VALUES (?, ?)',
- $this->db->tableName( 'text' ), $this->count, $text );
- $this->db->safeQuery( 'INSERT INTO ! (si_page,si_title,si_text) VALUES (?, ?, ?)',
- $this->db->tableName( 'searchindex' ), $this->count,
- $this->normalize( $pageName ), $this->normalize( $text ) );
+ function insertSearchData() {
+ if( $this->pageExists( 'Not_Main_Page' ) ) {
+ return;
+ }
+ $this->insertPage("Not_Main_Page", "This is not a main page", 0);
+ $this->insertPage('Talk:Not_Main_Page', 'This is not a talk page to the main page, see [[smithee]]', 1);
+ $this->insertPage('Smithee', 'A smithee is one who smiths. See also [[Alan Smithee]]', 0);
+ $this->insertPage('Talk:Smithee', 'This article sucks.', 1);
+ $this->insertPage('Unrelated_page', 'Nothing in this page is about the S word.', 0);
+ $this->insertPage('Another_page', 'This page also is unrelated.', 0);
+ $this->insertPage('Help:Help', 'Help me!', 4);
+ $this->insertPage('Thppt', 'Blah blah', 0);
+ $this->insertPage('Alan_Smithee', 'yum', 0);
+ $this->insertPage('Pages', 'are\'food', 0);
+ $this->insertPage('HalfOneUp', 'AZ', 0);
+ $this->insertPage('FullOneUp', 'AZ', 0);
+ $this->insertPage('HalfTwoLow', 'az', 0);
+ $this->insertPage('FullTwoLow', 'az', 0);
+ $this->insertPage('HalfNumbers', '1234567890', 0);
+ $this->insertPage('FullNumbers', '1234567890', 0);
+ $this->insertPage('DomainName', 'example.com', 0);
}
+ function removeSearchData() {
+ return;
+ while( count($this->pageList) ) {
+ list( $title, $id ) = array_pop( $this->pageList );
+ $article = new Article( $title, $id );
+ $article->doDeleteArticle("Search Test");
+ }
+ }
+
function fetchIds( $results ) {
$matches = array();
while( $row = $results->next() ) {
return $matches;
}
- function testTextSearch() {
- if( is_null( $this->db ) ) {
- $this->markTestIncomplete( "Can't find a database to test with." );
- }
- $this->assertEquals(
- array( 'Smithee' ),
- $this->fetchIds( $this->search->searchText( 'smithee' ) ),
- "Plain search failed" );
+ // Modified version of WikiRevision::importOldRevision()
+ function insertPage( $pageName, $text, $ns ) {
+ $dbw = $this->db;
+ $title = Title::newFromText( $pageName );
+
+ $userId = 0;
+ $userText = 'WikiSysop';
+ $comment = 'Search Test';
+
+ // avoid memory leak...?
+ $linkCache = LinkCache::singleton();
+ $linkCache->clear();
+
+ $article = new Article( $title );
+ $pageId = $article->getId();
+ $created = false;
+ if( $pageId == 0 ) {
+ # must create the page...
+ $pageId = $article->insertOn( $dbw );
+ $created = true;
+ }
+
+ # FIXME: Use original rev_id optionally (better for backups)
+ # Insert the row
+ $revision = new Revision( array(
+ 'page' => $pageId,
+ 'text' => $text,
+ 'comment' => $comment,
+ 'user' => $userId,
+ 'user_text' => $userText,
+ 'timestamp' => 0,
+ 'minor_edit' => false,
+ ) );
+ $revId = $revision->insertOn( $dbw );
+ $changed = $article->updateIfNewerOn( $dbw, $revision );
+
+ $GLOBALS['wgTitle'] = $title;
+ if( $created ) {
+ Article::onArticleCreate( $title );
+ $article->createUpdates( $revision );
+ } elseif( $changed ) {
+ Article::onArticleEdit( $title );
+ $article->editUpdates(
+ $text, $comment, false, 0, $revId );
+ }
+
+ $su = new SearchUpdate($article->getId(), $pageName, $text);
+ $su->doUpdate();
+
+ $this->pageList[] = array( $title, $article->getId() );
+
+ return true;
+ }
+
+ function testFullWidth() {
+ $this->assertEquals(
+ array( 'FullOneUp', 'FullTwoLow', 'HalfOneUp', 'HalfTwoLow' ),
+ $this->fetchIds( $this->search->searchText( 'AZ' ) ),
+ "Search for normalized from Half-width Upper" );
+ $this->assertEquals(
+ array( 'FullOneUp', 'FullTwoLow', 'HalfOneUp', 'HalfTwoLow' ),
+ $this->fetchIds( $this->search->searchText( 'az' ) ),
+ "Search for normalized from Half-width Lower" );
+ $this->assertEquals(
+ array( 'FullOneUp', 'FullTwoLow', 'HalfOneUp', 'HalfTwoLow' ),
+ $this->fetchIds( $this->search->searchText( 'AZ' ) ),
+ "Search for normalized from Full-width Upper" );
+ $this->assertEquals(
+ array( 'FullOneUp', 'FullTwoLow', 'HalfOneUp', 'HalfTwoLow' ),
+ $this->fetchIds( $this->search->searchText( 'az' ) ),
+ "Search for normalized from Full-width Lower" );
+ }
+
+ function testTextSearch() {
+ $this->assertEquals(
+ array( 'Smithee' ),
+ $this->fetchIds( $this->search->searchText( 'smithee' ) ),
+ "Plain search failed" );
}
function testTextPowerSearch() {
- if( is_null( $this->db ) ) {
- $this->markTestIncomplete( "Can't find a database to test with." );
- }
$this->search->setNamespaces( array( 0, 1, 4 ) );
$this->assertEquals(
array(
'Smithee',
- 'Talk:Main Page',
+ 'Talk:Not Main Page',
),
$this->fetchIds( $this->search->searchText( 'smithee' ) ),
"Power search failed" );
}
function testTitleSearch() {
- if( is_null( $this->db ) ) {
- $this->markTestIncomplete( "Can't find a database to test with." );
- }
$this->assertEquals(
array(
'Alan Smithee',
}
function testTextTitlePowerSearch() {
- if( is_null( $this->db ) ) {
- $this->markTestIncomplete( "Can't find a database to test with." );
- }
$this->search->setNamespaces( array( 0, 1, 4 ) );
$this->assertEquals(
array(
}
}
-
-
-