package org.wikipedia.page; import org.junit.Test; import org.wikipedia.Constants; import org.wikipedia.WikipediaApp; import org.wikipedia.dataclient.WikiSite; import org.wikipedia.search.SearchResult; import org.wikipedia.search.SearchResults; import org.wikipedia.testlib.TestLatch; import java.util.ArrayList; import java.util.List; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.not; import static org.hamcrest.Matchers.notNullValue; import static org.wikipedia.test.TestUtil.runOnMainSync; /** * Tests for getting suggestions for further reading. */ public class SuggestionsTaskTest { private static final WikiSite WIKI = WikiSite.forLanguageCode("en"); // suggestions don't seem to work on testwiki private WikipediaApp app = WikipediaApp.getInstance(); @Test public void testTask() { final TestLatch latch = new TestLatch(); runOnMainSync(new Runnable() { @Override public void run() { new SuggestionsTask(app.getAPIForSite(WIKI), WIKI, "test", false) { @Override public void onFinish(SearchResults results) { assertThat(results, notNullValue()); assertThat(results.getResults().size(), is(Constants.MAX_SUGGESTION_RESULTS)); for (SearchResult result : results.getResults()) { assertThat(result.getPageTitle().getPrefixedText(), not("Test")); } latch.countDown(); } }.execute(); } }); latch.await(); } @Test public void testFilterNoResults() { List<SearchResult> originalResults = new ArrayList<>(); checkFilter(0, originalResults); } @Test public void testFilter1ResultSameAsTitleIgnoreCase() { List<SearchResult> originalResults = new ArrayList<>(); originalResults.add(new SearchResult(new PageTitle("Test", WIKI, null, null))); checkFilter(0, originalResults); } @Test public void testFilter1ResultDifferentFromTitle() { List<SearchResult> originalResults = new ArrayList<>(); originalResults.add(new SearchResult(new PageTitle("something else", WIKI, null, null))); checkFilter(1, originalResults); } @Test public void testFilter4ResultsDifferentFromTitle() { List<SearchResult> originalResults = new ArrayList<>(); originalResults.add(new SearchResult(new PageTitle("something else", WIKI, null, null))); originalResults.add(new SearchResult(new PageTitle("something else", WIKI, null, null))); originalResults.add(new SearchResult(new PageTitle("something else", WIKI, null, null))); originalResults.add(new SearchResult(new PageTitle("something else", WIKI, null, null))); checkFilter(Constants.MAX_SUGGESTION_RESULTS, originalResults); } private void checkFilter(int expected, List<SearchResult> originalResults) { String title = "test"; SearchResults searchResults = new SearchResults(originalResults, null, null); List<SearchResult> filteredList = SearchResults.filter(searchResults, title, false).getResults(); assertThat(expected, is(filteredList.size())); } }