package org.limewire.ui.swing.search.model; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.concurrent.CopyOnWriteArrayList; import org.jmock.Expectations; import org.jmock.Mockery; import org.limewire.core.api.Category; import org.limewire.core.api.FilePropertyKey; import org.limewire.core.api.library.PropertiableFile; import org.limewire.core.api.search.Search; import org.limewire.core.api.search.SearchCategory; import org.limewire.core.api.search.SearchListener; import org.limewire.core.api.search.SearchResult; import org.limewire.io.GUID; import org.limewire.ui.swing.search.SearchInfo; import org.limewire.ui.swing.util.PropertiableHeadings; import org.limewire.ui.swing.util.SwingUtils; import org.limewire.util.BaseTestCase; import ca.odell.glazedlists.matchers.AbstractMatcherEditor; import ca.odell.glazedlists.matchers.Matcher; import ca.odell.glazedlists.matchers.TextMatcherEditor; import com.google.inject.Provider; /** * Test case for BasicSearchResultsModel. */ public class BasicSearchResultsModelTest extends BaseTestCase { /** Instance of class being tested. */ private BasicSearchResultsModel model; private Provider<PropertiableHeadings> provider; private Mockery context; /** * Constructs a test case for the specified method name. */ public BasicSearchResultsModelTest(String name) { super(name); } @SuppressWarnings("unchecked") @Override protected void setUp() throws Exception { super.setUp(); context = new Mockery(); provider = context.mock(Provider.class); // Create test instance. model = new BasicSearchResultsModel(new TestSearchInfo(), new TestSearch(), provider, null, null); } @Override protected void tearDown() throws Exception { model = null; super.tearDown(); } private void waitForUiThread() { SwingUtils.invokeAndWait(new Runnable() { @Override public void run() { } }); } private void addResult(BasicSearchResultsModel model, SearchResult result) { model.addSearchResult(result); waitForUiThread(); } public void testGroupingByName2UrnsNameComesEarly() { model.addResultListener(new GroupingListEventListener(new SimilarResultsFileNameDetector())); TestSearchResult testResult1 = new TestSearchResult("1", "file name"); TestSearchResult testResult2 = new TestSearchResult("1", "other file"); // other file for urn1 is coming in early TestSearchResult testResult3 = new TestSearchResult("2", "other file"); TestSearchResult testResult4 = new TestSearchResult("1", "file name"); addResult(model, testResult1); addResult(model, testResult2); addResult(model, testResult3); addResult(model, testResult4); List<VisualSearchResult> results = model.getUnfilteredList(); assertEquals(2, results.size()); VisualSearchResult group0 = results.get(0); List<VisualSearchResult> similarResults0 = group0.getSimilarResults(); assertEquals(1, similarResults0.size()); List<SearchResult> coreResults0 = group0.getCoreSearchResults(); assertEquals(3, coreResults0.size()); VisualSearchResult group1 = results.get(1); List<VisualSearchResult> similarResults1 = group1.getSimilarResults(); assertEquals(0, similarResults1.size()); List<SearchResult> coreResults1 = group1.getCoreSearchResults(); assertEquals(1, coreResults1.size()); assertNull(group0.getSimilarityParent()); assertEquals(group0, group1.getSimilarityParent()); } public void testGroupingByName2UrnsNameComesLate() { model.addResultListener(new GroupingListEventListener(new SimilarResultsFileNameDetector())); TestSearchResult testResult1 = new TestSearchResult("1", "file name"); TestSearchResult testResult2 = new TestSearchResult("2", "other file"); TestSearchResult testResult3 = new TestSearchResult("1", "file name"); // other file for urn1 is coming in late TestSearchResult testResult4 = new TestSearchResult("1", "other file"); addResult(model, testResult1); addResult(model, testResult2); addResult(model, testResult3); addResult(model, testResult4); List<VisualSearchResult> results = model.getUnfilteredList(); assertEquals(2, results.size()); VisualSearchResult group0 = results.get(0); List<VisualSearchResult> similarResults0 = group0.getSimilarResults(); assertEquals(group0.toString(), 0, similarResults0.size()); List<SearchResult> coreResults0 = group0.getCoreSearchResults(); assertEquals(3, coreResults0.size()); VisualSearchResult group1 = results.get(1); List<VisualSearchResult> similarResults1 = group1.getSimilarResults(); assertEquals(1, similarResults1.size()); List<SearchResult> coreResults1 = group1.getCoreSearchResults(); assertEquals(1, coreResults1.size()); assertNull(group1.getSimilarityParent()); assertEquals(group1, group0.getSimilarityParent()); } public void testGroupingByName2UrnsNameComesLateMultipleAdds() { model.addResultListener(new GroupingListEventListener(new SimilarResultsFileNameDetector())); TestSearchResult testResult1 = new TestSearchResult("1", "file name"); TestSearchResult testResult2 = new TestSearchResult("2", "other file"); TestSearchResult testResult3 = new TestSearchResult("1", "file name"); TestSearchResult testResult4 = new TestSearchResult("1", "other file"); addResult(model, testResult1); addResult(model, testResult2); addResult(model, testResult3); addResult(model, testResult4); addResult(model, testResult1); addResult(model, testResult2); addResult(model, testResult3); addResult(model, testResult4); addResult(model, testResult1); addResult(model, testResult2); addResult(model, testResult3); addResult(model, testResult4); List<VisualSearchResult> results = model.getUnfilteredList(); assertEquals(2, results.size()); VisualSearchResult group0 = results.get(0); List<VisualSearchResult> similarResults0 = group0.getSimilarResults(); assertEquals(0, similarResults0.size()); List<SearchResult> coreResults0 = group0.getCoreSearchResults(); assertEquals(9, coreResults0.size()); VisualSearchResult group1 = results.get(1); List<VisualSearchResult> similarResults1 = group1.getSimilarResults(); assertEquals(1, similarResults1.size()); List<SearchResult> coreResults1 = group1.getCoreSearchResults(); assertEquals(3, coreResults1.size()); assertNull(group1.getSimilarityParent()); assertEquals(group1, group0.getSimilarityParent()); } public void testGroupByName4Urns() { model.addResultListener(new GroupingListEventListener(new SimilarResultsFileNameDetector())); TestSearchResult testResult1 = new TestSearchResult("1", "other file"); TestSearchResult testResult2 = new TestSearchResult("2", "other file"); TestSearchResult testResult3 = new TestSearchResult("3", "other file"); TestSearchResult testResult4 = new TestSearchResult("4", "other file"); addResult(model, testResult1); addResult(model, testResult2); addResult(model, testResult3); addResult(model, testResult4); List<VisualSearchResult> results = model.getUnfilteredList(); assertEquals(4, results.size()); VisualSearchResult group0 = results.get(0); List<VisualSearchResult> similarResults0 = group0.getSimilarResults(); assertEquals(3, similarResults0.size()); List<SearchResult> coreResults0 = group0.getCoreSearchResults(); assertEquals(1, coreResults0.size()); VisualSearchResult group1 = results.get(1); List<VisualSearchResult> similarResults1 = group1.getSimilarResults(); assertEquals(0, similarResults1.size()); List<SearchResult> coreResults1 = group1.getCoreSearchResults(); assertEquals(1, coreResults1.size()); VisualSearchResult group2 = results.get(2); List<VisualSearchResult> similarResults2 = group2.getSimilarResults(); assertEquals(0, similarResults2.size()); List<SearchResult> coreResults2 = group2.getCoreSearchResults(); assertEquals(1, coreResults2.size()); VisualSearchResult group3 = results.get(3); List<VisualSearchResult> similarResults3 = group3.getSimilarResults(); assertEquals(0, similarResults3.size()); List<SearchResult> coreResults3 = group1.getCoreSearchResults(); assertEquals(1, coreResults3.size()); assertEquals(group0, group1.getSimilarityParent()); assertNull(group0.getSimilarityParent()); assertEquals(group0, group2.getSimilarityParent()); assertEquals(group0, group3.getSimilarityParent()); } public void testGroupingByName3Urns() { model.addResultListener(new GroupingListEventListener(new SimilarResultsFileNameDetector())); TestSearchResult testResult1 = new TestSearchResult("1", "other file"); TestSearchResult testResult2 = new TestSearchResult("1", "blah1 file"); TestSearchResult testResult3 = new TestSearchResult("2", "other file"); TestSearchResult testResult4 = new TestSearchResult("2", "blah2 file"); TestSearchResult testResult5 = new TestSearchResult("3", "other file"); addResult(model, testResult1); addResult(model, testResult2); addResult(model, testResult3); addResult(model, testResult4); addResult(model, testResult5); List<VisualSearchResult> results = model.getUnfilteredList(); assertEquals(3, results.size()); VisualSearchResult group0 = results.get(0); List<VisualSearchResult> similarResults0 = group0.getSimilarResults(); assertEquals(2, similarResults0.size()); List<SearchResult> coreResults0 = group0.getCoreSearchResults(); assertEquals(2, coreResults0.size()); VisualSearchResult group1 = results.get(1); List<VisualSearchResult> similarResults1 = group1.getSimilarResults(); assertEquals(0, similarResults1.size()); List<SearchResult> coreResults1 = group1.getCoreSearchResults(); assertEquals(2, coreResults1.size()); VisualSearchResult group2 = results.get(2); List<VisualSearchResult> similarResults2 = group2.getSimilarResults(); assertEquals(0, similarResults2.size()); List<SearchResult> coreResults2 = group2.getCoreSearchResults(); assertEquals(1, coreResults2.size()); assertNull(group0.getSimilarityParent()); assertEquals(group0, group1.getSimilarityParent()); assertEquals(group0, group2.getSimilarityParent()); } public void testGroupingByName3UrnsNameMatchViaTransitiveProperty() { model.addResultListener(new GroupingListEventListener(new SimilarResultsFileNameDetector())); TestSearchResult testResult1 = new TestSearchResult("1", "blah1 file"); TestSearchResult testResult2 = new TestSearchResult("1", "blah1 file"); TestSearchResult testResult3 = new TestSearchResult("2", "blah2 file"); TestSearchResult testResult4 = new TestSearchResult("2", "blah2 file"); TestSearchResult testResult5 = new TestSearchResult("3", "blah1 file"); TestSearchResult testResult6 = new TestSearchResult("3", "blah2 file"); addResult(model, testResult1); addResult(model, testResult2); addResult(model, testResult3); addResult(model, testResult4); addResult(model, testResult5); addResult(model, testResult6); List<VisualSearchResult> results = model.getUnfilteredList(); assertEquals(3, results.size()); VisualSearchResult group0 = results.get(0); List<VisualSearchResult> similarResults0 = group0.getSimilarResults(); assertEquals(0, similarResults0.size()); List<SearchResult> coreResults0 = group0.getCoreSearchResults(); assertEquals(2, coreResults0.size()); VisualSearchResult group1 = results.get(1); List<VisualSearchResult> similarResults1 = group1.getSimilarResults(); assertEquals(2, similarResults1.size()); List<SearchResult> coreResults1 = group1.getCoreSearchResults(); assertEquals(2, coreResults1.size()); VisualSearchResult group2 = results.get(2); List<VisualSearchResult> similarResults2 = group2.getSimilarResults(); assertEquals(0, similarResults2.size()); List<SearchResult> coreResults2 = group2.getCoreSearchResults(); assertEquals(2, coreResults2.size()); assertNull(group1.getSimilarityParent()); assertEquals(group1, group0.getSimilarityParent()); assertEquals(group1, group2.getSimilarityParent()); } public void testGroupingByName3UrnsNameMatchViaTransitiveProperty3GroupHasMoreFiles() { model.addResultListener(new GroupingListEventListener(new SimilarResultsFileNameDetector())); TestSearchResult testResult1 = new TestSearchResult("1", "blah1 file"); TestSearchResult testResult2 = new TestSearchResult("1", "blah1 file"); TestSearchResult testResult3 = new TestSearchResult("2", "blah2 file"); TestSearchResult testResult4 = new TestSearchResult("2", "blah2 file"); TestSearchResult testResult5 = new TestSearchResult("3", "blah1 file"); TestSearchResult testResult6 = new TestSearchResult("3", "blah2 file"); TestSearchResult testResult7 = new TestSearchResult("3", "blah3 file"); addResult(model, testResult1); addResult(model, testResult2); addResult(model, testResult3); addResult(model, testResult4); addResult(model, testResult5); addResult(model, testResult6); addResult(model, testResult7); List<VisualSearchResult> results = model.getUnfilteredList(); assertEquals(3, results.size()); VisualSearchResult group0 = results.get(0); List<VisualSearchResult> similarResults0 = group0.getSimilarResults(); assertEquals(0, similarResults0.size()); List<SearchResult> coreResults0 = group0.getCoreSearchResults(); assertEquals(2, coreResults0.size()); VisualSearchResult group1 = results.get(1); List<VisualSearchResult> similarResults1 = group1.getSimilarResults(); assertEquals(2, similarResults1.size()); List<SearchResult> coreResults1 = group1.getCoreSearchResults(); assertEquals(2, coreResults1.size()); VisualSearchResult group2 = results.get(2); List<VisualSearchResult> similarResults2 = group2.getSimilarResults(); assertEquals(0, similarResults2.size()); List<SearchResult> coreResults2 = group2.getCoreSearchResults(); assertEquals(3, coreResults2.size()); assertNull(group1.getSimilarityParent()); assertEquals(group1, group2.getSimilarityParent()); assertEquals(group1, group0.getSimilarityParent()); } public void testVisibility() { model.addResultListener(new GroupingListEventListener(new SimilarResultsFileNameDetector())); TestSearchResult testResult1 = new TestSearchResult("1", "blah1 file"); TestSearchResult testResult2 = new TestSearchResult("1", "blah1 file"); TestSearchResult testResult3 = new TestSearchResult("2", "blah1 file"); TestSearchResult testResult4 = new TestSearchResult("2", "blah2 file"); TestSearchResult testResult5 = new TestSearchResult("3", "blah1 file"); TestSearchResult testResult6 = new TestSearchResult("3", "blah2 file"); addResult(model, testResult1); List<VisualSearchResult> results = model.getUnfilteredList(); assertEquals(1, results.size()); VisualSearchResult result0 = results.get(0); assertTrue(result0.isVisible()); assertFalse(result0.isChildrenVisible()); result0.setChildrenVisible(true); assertTrue(result0.isVisible()); assertTrue(result0.isChildrenVisible()); addResult(model, testResult2); assertTrue(result0.isVisible()); assertTrue(result0.isChildrenVisible()); addResult(model, testResult3); assertTrue(result0.isVisible()); assertTrue(result0.isChildrenVisible()); List<VisualSearchResult> children = result0.getSimilarResults(); assertEquals(1, children.size()); VisualSearchResult child = children.get(0); assertTrue(child.isVisible()); result0.setChildrenVisible(false); assertTrue(result0.isVisible()); assertFalse(result0.isChildrenVisible()); assertFalse(child.isVisible()); result0.setChildrenVisible(true); addResult(model, testResult4); addResult(model, testResult5); children = result0.getSimilarResults(); assertEquals(2, children.size()); VisualSearchResult child0 = children.get(0); VisualSearchResult child1 = children.get(1); assertTrue(child0.isVisible()); assertTrue(child1.isVisible()); result0.setChildrenVisible(false); addResult(model, testResult6); children = result0.getSimilarResults(); assertEquals(2, children.size()); child0 = children.get(0); child1 = children.get(1); assertFalse(child0.isVisible()); assertFalse(child1.isVisible()); result0.setChildrenVisible(true); assertTrue(child0.isVisible()); assertTrue(child1.isVisible()); results = model.getUnfilteredList(); assertEquals(3, results.size()); VisualSearchResult group0 = results.get(0); List<VisualSearchResult> similarResults0 = group0.getSimilarResults(); assertEquals(2, similarResults0.size()); List<SearchResult> coreResults0 = group0.getCoreSearchResults(); assertEquals(2, coreResults0.size()); VisualSearchResult group1 = results.get(1); List<VisualSearchResult> similarResults1 = group1.getSimilarResults(); assertEquals(0, similarResults1.size()); List<SearchResult> coreResults1 = group1.getCoreSearchResults(); assertEquals(2, coreResults1.size()); VisualSearchResult group2 = results.get(2); List<VisualSearchResult> similarResults2 = group2.getSimilarResults(); assertEquals(0, similarResults2.size()); List<SearchResult> coreResults2 = group2.getCoreSearchResults(); assertEquals(2, coreResults2.size()); assertNull(group0.getSimilarityParent()); assertEquals(group0, group2.getSimilarityParent()); assertEquals(group0, group1.getSimilarityParent()); } public void testSameNameHyphenNameHyphenName() { Map<FilePropertyKey, Object> properties1 = new HashMap<FilePropertyKey, Object>(); properties1.put(FilePropertyKey.NAME, "test-foo-bar"); SearchResult searchResult1 = new TestSearchResult("1", "test-foo-bar.mp3", properties1); Map<FilePropertyKey, Object> properties2 = new HashMap<FilePropertyKey, Object>(); properties2.put(FilePropertyKey.NAME, "test-foo-bar"); SearchResult searchResult2 = new TestSearchResult("2", "test-foo-bar.mp3", properties2); model.addResultListener(new GroupingListEventListener(new AudioMetaDataSimilarResultsDetector())); addResult(model, searchResult1); addResult(model, searchResult2); List<VisualSearchResult> results = model.getUnfilteredList(); assertEquals(2, results.size()); VisualSearchResult group0 = results.get(0); List<VisualSearchResult> similarResults0 = group0.getSimilarResults(); assertEquals(1, similarResults0.size()); List<SearchResult> coreResults0 = group0.getCoreSearchResults(); assertEquals(1, coreResults0.size()); VisualSearchResult group1 = results.get(1); List<VisualSearchResult> similarResults1 = group1.getSimilarResults(); assertEquals(0, similarResults1.size()); List<SearchResult> coreResults1 = group1.getCoreSearchResults(); assertEquals(1, coreResults1.size()); assertNull(group0.getSimilarityParent()); assertEquals(group0, group1.getSimilarityParent()); } public void testNotSameNameOrButSameTrackMetaData() { Map<FilePropertyKey, Object> properties1 = new HashMap<FilePropertyKey, Object>(); properties1.put(FilePropertyKey.NAME, "test"); SearchResult searchResult1 = new TestSearchResult("1", "test.mp3", properties1); Map<FilePropertyKey, Object> properties2 = new HashMap<FilePropertyKey, Object>(); properties2.put(FilePropertyKey.NAME, "blah123"); properties2.put(FilePropertyKey.TITLE, "test"); SearchResult searchResult2 = new TestSearchResult("2", "blah123.mp3", properties2); model.addResultListener(new GroupingListEventListener(new AudioMetaDataSimilarResultsDetector())); addResult(model, searchResult1); addResult(model, searchResult2); List<VisualSearchResult> results = model.getUnfilteredList(); assertEquals(2, results.size()); VisualSearchResult group0 = results.get(0); List<VisualSearchResult> similarResults0 = group0.getSimilarResults(); assertEquals(0, similarResults0.size()); List<SearchResult> coreResults0 = group0.getCoreSearchResults(); assertEquals(1, coreResults0.size()); VisualSearchResult group1 = results.get(1); List<VisualSearchResult> similarResults1 = group1.getSimilarResults(); assertEquals(0, similarResults1.size()); List<SearchResult> coreResults1 = group1.getCoreSearchResults(); assertEquals(1, coreResults1.size()); //should be no similar results assertNull(group1.getSimilarityParent()); assertNull(group0.getSimilarityParent()); } public void testSameNameOrAlbumAndTrackMetaData() { Map<FilePropertyKey, Object> properties1 = new HashMap<FilePropertyKey, Object>(); properties1.put(FilePropertyKey.NAME, "test-blah"); SearchResult searchResult1 = new TestSearchResult("1", "test-blah.mp3", properties1); Map<FilePropertyKey, Object> properties2 = new HashMap<FilePropertyKey, Object>(); properties2.put(FilePropertyKey.NAME, "blah123"); properties2.put(FilePropertyKey.ALBUM, "test"); properties2.put(FilePropertyKey.TITLE, "blah"); SearchResult searchResult2 = new TestSearchResult("2", "blah123.mp3", properties2); model.addResultListener(new GroupingListEventListener(new AudioMetaDataSimilarResultsDetector())); addResult(model, searchResult1); addResult(model, searchResult2); List<VisualSearchResult> results = model.getUnfilteredList(); assertEquals(2, results.size()); VisualSearchResult group0 = results.get(0); List<VisualSearchResult> similarResults0 = group0.getSimilarResults(); assertEquals(1, similarResults0.size()); List<SearchResult> coreResults0 = group0.getCoreSearchResults(); assertEquals(1, coreResults0.size()); VisualSearchResult group1 = results.get(1); List<VisualSearchResult> similarResults1 = group1.getSimilarResults(); assertEquals(0, similarResults1.size()); List<SearchResult> coreResults1 = group1.getCoreSearchResults(); assertEquals(1, coreResults1.size()); assertNull(group0.getSimilarityParent()); assertEquals(group0, group1.getSimilarityParent()); } public void testSameNameOrArtistAndTrackMetaData() { Map<FilePropertyKey, Object> properties1 = new HashMap<FilePropertyKey, Object>(); properties1.put(FilePropertyKey.NAME, "test-blah"); SearchResult searchResult1 = new TestSearchResult("1", "test-blah.mp3", properties1); Map<FilePropertyKey, Object> properties2 = new HashMap<FilePropertyKey, Object>(); properties2.put(FilePropertyKey.NAME, "blah123"); properties2.put(FilePropertyKey.AUTHOR, "test"); properties2.put(FilePropertyKey.TITLE, "blah"); SearchResult searchResult2 = new TestSearchResult("2", "blah123.mp3", properties2); model.addResultListener(new GroupingListEventListener(new AudioMetaDataSimilarResultsDetector())); addResult(model, searchResult1); addResult(model, searchResult2); List<VisualSearchResult> results = model.getUnfilteredList(); assertEquals(2, results.size()); VisualSearchResult group0 = results.get(0); List<VisualSearchResult> similarResults0 = group0.getSimilarResults(); assertEquals(1, similarResults0.size()); List<SearchResult> coreResults0 = group0.getCoreSearchResults(); assertEquals(1, coreResults0.size()); VisualSearchResult group1 = results.get(1); List<VisualSearchResult> similarResults1 = group1.getSimilarResults(); assertEquals(0, similarResults1.size()); List<SearchResult> coreResults1 = group1.getCoreSearchResults(); assertEquals(1, coreResults1.size()); assertNull(group0.getSimilarityParent()); assertEquals(group0, group1.getSimilarityParent()); } /** Tests method to retrieve filtered search results. */ public void testGetFilteredSearchResults() { // Create test search results. TestSearchResult testResult1 = new TestSearchResult("1", "xray"); TestSearchResult testResult2 = new TestSearchResult("2", "zulu"); TestSearchResult testResult3 = new TestSearchResult("3", "whiskey"); TestSearchResult testResult4 = new TestSearchResult("4", "yankee"); testResult3.setCategory(Category.VIDEO); testResult4.setCategory(Category.IMAGE); addResult(model, testResult1); addResult(model, testResult2); addResult(model, testResult3); addResult(model, testResult4); // Apply category filter. model.setFilterEditor(new AbstractMatcherEditor<VisualSearchResult>() { Matcher<VisualSearchResult> matcher = new Matcher<VisualSearchResult>() { @Override public boolean matches(VisualSearchResult item) { return item.getCategory() == Category.VIDEO; } }; @Override public Matcher<VisualSearchResult> getMatcher() { return matcher; } }); waitForUiThread(); // Get filtered search results. List<VisualSearchResult> filteredList = model.getFilteredSearchResults(); // Verify filtered list. int expectedSize = 1; int actualSize = filteredList.size(); assertEquals("filtered list size", expectedSize, actualSize); } /** Tests method to retrieve sorted and filtered search results. */ public void testGetSortedSearchResults() { final PropertiableHeadings propertiableHeadings = context.mock(PropertiableHeadings.class); context.checking(new Expectations(){ { allowing(provider).get(); will(returnValue(propertiableHeadings)); one(propertiableHeadings).getHeading(with(any(PropertiableFile.class))); will(returnValue("xray")); one(propertiableHeadings).getHeading(with(any(PropertiableFile.class))); will(returnValue("zulu")); one(propertiableHeadings).getHeading(with(any(PropertiableFile.class))); will(returnValue("whiskey")); one(propertiableHeadings).getHeading(with(any(PropertiableFile.class))); will(returnValue("yankee")); } }); // Create test search results. TestSearchResult testResult1 = new TestSearchResult("1", "xray"); TestSearchResult testResult2 = new TestSearchResult("2", "zulu"); TestSearchResult testResult3 = new TestSearchResult("3", "whiskey"); TestSearchResult testResult4 = new TestSearchResult("4", "yankee"); addResult(model, testResult1); addResult(model, testResult2); addResult(model, testResult3); addResult(model, testResult4); // Get sorted search results. model.setSelectedCategory(SearchCategory.ALL); waitForUiThread(); List<VisualSearchResult> sortedList = model.getSortedSearchResults(); // Verify unsorted order. String expectedReturn = "xray"; String actualReturn = sortedList.get(0).getHeading(); assertEquals("unsorted list", expectedReturn, actualReturn); // Apply sort option. model.setSortOption(SortOption.NAME); waitForUiThread(); // Verify sorted order. expectedReturn = "whiskey"; actualReturn = sortedList.get(0).getHeading(); assertEquals("sorted list", expectedReturn, actualReturn); } /** Tests method to set filter editor with filter text. */ public void testSetFilterEditor() { // Create test search results. TestSearchResult testResult1 = new TestSearchResult("1", "xray"); TestSearchResult testResult2 = new TestSearchResult("2", "zulu"); TestSearchResult testResult3 = new TestSearchResult("3", "whiskey"); TestSearchResult testResult4 = new TestSearchResult("4", "yankee"); addResult(model, testResult1); addResult(model, testResult2); addResult(model, testResult3); addResult(model, testResult4); // Get all search results. List<VisualSearchResult> filteredList = model.getFilteredSearchResults(); // Verify unfiltered list. int expectedSize = 4; int actualSize = filteredList.size(); assertEquals("unfiltered list size", expectedSize, actualSize); // Apply filter editor. TextMatcherEditor<VisualSearchResult> editor = new TextMatcherEditor<VisualSearchResult>( new VisualSearchResultTextFilterator()); editor.setFilterText(new String[] {"z"}); model.setFilterEditor(editor); waitForUiThread(); // Verify filtered list. expectedSize = 1; actualSize = filteredList.size(); assertEquals("filtered list size", expectedSize, actualSize); } /** * Test implementation of Search. */ private static class TestSearch implements Search { @Override public void addSearchListener(SearchListener searchListener) { } @Override public void removeSearchListener(SearchListener searchListener) { } @Override public SearchCategory getCategory() { return null; } @Override public void repeat() { } @Override public void start() { } @Override public void stop() { } @Override public CopyOnWriteArrayList<SearchListener> getListenerList() { // TODO Auto-generated method stub return null; } @Override public String getQuery() { // TODO Auto-generated method stub return null; } @Override public GUID getQueryGuid() { // TODO Auto-generated method stub return null; } } /** * Test implementation of SearchInfo. */ private static class TestSearchInfo implements SearchInfo { @Override public String getTitle() { return null; } @Override public Map<FilePropertyKey, String> getAdvancedDetails() { return null; } @Override public SearchCategory getSearchCategory() { return null; } @Override public String getSearchQuery() { return null; } @Override public SearchType getSearchType() { return null; } } }