package org.wikipedia.search;
import org.junit.Test;
import org.wikipedia.WikipediaApp;
import org.wikipedia.dataclient.WikiSite;
import org.wikipedia.testlib.TestLatch;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.is;
import static org.hamcrest.Matchers.notNullValue;
import static org.hamcrest.Matchers.nullValue;
import static org.wikipedia.test.TestUtil.runOnMainSync;
/**
* Tests for full text search.
*/
public class FullSearchArticlesTaskTest {
private static final int BATCH_SIZE = 12;
private static final WikiSite WIKI = WikiSite.forLanguageCode("en");
/** Have to use enwiki since I don't think there are any Wikidata descriptions for testwiki. */
@Test public void testFullTextSearchWithResults() throws Throwable {
final TestLatch latch = new TestLatch();
runOnMainSync(new Runnable() {
@Override
public void run() {
WikipediaApp app = WikipediaApp.getInstance();
new FullSearchArticlesTask(app.getAPIForSite(WIKI), WIKI, "test", BATCH_SIZE, null, false) {
@Override
public void onFinish(SearchResults results) {
assertThat(results, notNullValue());
assertThat(results.getResults().size(), is(BATCH_SIZE));
assertThat(results.getSuggestion(), nullValue());
assertThat(results.getContinueOffset(), notNullValue());
for (SearchResult result : results.getResults()) {
if (result.getPageTitle().getPrefixedText().equals("Test")) {
assertThat(result.getPageTitle().getDescription(), is("Wikipedia disambiguation page"));
}
}
latch.countDown();
}
}.execute();
}
});
latch.await();
}
// TODO: move to TitleSearchTest once we have it
// @Test public void testFullTextSearchWithSuggestion() throws Throwable {
// startActivity(new Intent(), null, null);
// final CountDownLatch completionLatch = new CountDownLatch(1);
// runTestOnUiThread(new Runnable() {
// @Override
// public void run() {
// WikipediaApp app = WikipediaApp.getInstance();
// new FullSearchArticlesTask(app.getAPIForSite(WIKI), WIKI, "teest", BATCH_SIZE, null) { // small typo should produce a suggestion
// @Override
// public void onFinish(SearchResults results) {
// assertNotNull(results);
// assertEquals(results.getSuggestion(), "test");
// completionLatch.countDown();
// }
// }.execute();
// }
// });
// assertTrue(completionLatch.await(TASK_COMPLETION_TIMEOUT, TimeUnit.MILLISECONDS));
// }
@Test public void testEmptyResults() throws Throwable {
final TestLatch latch = new TestLatch();
runOnMainSync(new Runnable() {
@Override
public void run() {
WikipediaApp app = WikipediaApp.getInstance();
new FullSearchArticlesTask(app.getAPIForSite(WIKI), WIKI, "jkfsdfpefdsfwoirpoik", BATCH_SIZE, null, false) { // total gibberish, should not exist on enwiki
@Override
public void onFinish(SearchResults results) {
assertThat(results, notNullValue());
assertThat(results.getResults().size(), is(0));
assertThat(results.getSuggestion(), is(""));
assertThat(results.getContinueOffset(), nullValue());
latch.countDown();
}
}.execute();
}
});
latch.await();
}
}