Merge "Move static search ranking from DatabaseResultLoader to Search Adapter."

This commit is contained in:
TreeHugger Robot
2017-05-26 18:34:13 +00:00
committed by Android (Google) Code Review
10 changed files with 100 additions and 76 deletions

View File

@@ -45,7 +45,10 @@ import org.mockito.MockitoAnnotations;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Matchers.anyString;
@@ -224,17 +227,19 @@ public class DatabaseResultLoaderTest {
}
@Test
public void testSpecialCaseTwoWords_firstWordMatches_ranksHigher() {
public void testSpecialCaseTwoWords_multipleResults() {
final String caseOne = "Apple pear";
final String caseTwo = "Banana apple";
insertSpecialCase(caseOne);
insertSpecialCase(caseTwo);
DatabaseResultLoader loader = new DatabaseResultLoader(mContext, "App", null);
List<? extends SearchResult> results = loader.loadInBackground();
assertThat(results.get(0).title).isEqualTo(caseOne);
assertThat(results.get(1).title).isEqualTo(caseTwo);
assertThat(results.get(0).rank).isLessThan(results.get(1).rank);
Set<? extends SearchResult> results = loader.loadInBackground();
Set<CharSequence> expectedTitles = new HashSet<>(Arrays.asList(caseOne, caseTwo));
Set<CharSequence> actualTitles = new HashSet<>();
for (SearchResult result : results) {
actualTitles.add(result.title);
}
assertThat(actualTitles).isEqualTo(expectedTitles);
}
private void insertSpecialCase(String specialCase) {

View File

@@ -43,7 +43,9 @@ import org.robolectric.annotation.Config;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import static android.content.pm.ApplicationInfo.FLAG_SYSTEM;
import static android.content.pm.ApplicationInfo.FLAG_UPDATED_SYSTEM_APP;
@@ -185,18 +187,19 @@ public class InstalledAppResultLoaderTest {
}
@Test
public void query_matchingQuery_shouldRankBasedOnSimilarity() {
public void query_matchingQuery_multipleResults() {
final String query = "app";
mLoader = new InstalledAppResultLoader(mContext, mPackageManagerWrapper, query,
mSiteMapManager);
final List<? extends SearchResult> results = mLoader.loadInBackground();
final Set<? extends SearchResult> results = mLoader.loadInBackground();
// List is sorted by rank
assertThat(results.get(0).rank).isAtMost(results.get(1).rank);
assertThat(results.get(0).title).isEqualTo("app4");
assertThat(results.get(1).title).isEqualTo("app");
assertThat(results.get(2).title).isEqualTo("appBuffer");
Set<CharSequence> expectedTitles = new HashSet<>(Arrays.asList("app4", "app", "appBuffer"));
Set<CharSequence> actualTitles = new HashSet<>();
for (SearchResult result : results) {
actualTitles.add(result.title);
}
assertThat(actualTitles).isEqualTo(expectedTitles);
}
@Test

View File

@@ -21,8 +21,8 @@ import android.content.Context;
import com.android.settings.search.InstalledAppResultLoader;
import com.android.settings.search.SearchResult;
import java.util.ArrayList;
import java.util.List;
import java.util.HashSet;
import java.util.Set;
/**
* Mock loader to subvert the requirements of returning data while also driving the Loader
@@ -35,12 +35,12 @@ class MockAppLoader extends InstalledAppResultLoader {
}
@Override
public List<? extends SearchResult> loadInBackground() {
return new ArrayList<>();
public Set<? extends SearchResult> loadInBackground() {
return new HashSet<>();
}
@Override
protected void onDiscardResult(List<? extends SearchResult> result) {
protected void onDiscardResult(Set<? extends SearchResult> result) {
}
}

View File

@@ -21,8 +21,8 @@ import android.content.Context;
import com.android.settings.search.DatabaseResultLoader;
import com.android.settings.search.SearchResult;
import java.util.ArrayList;
import java.util.List;
import java.util.HashSet;
import java.util.Set;
/**
* Mock loader to subvert the requirements of returning data while also driving the Loader
@@ -35,12 +35,12 @@ class MockDBLoader extends DatabaseResultLoader {
}
@Override
public List<? extends SearchResult> loadInBackground() {
return new ArrayList<>();
public Set<? extends SearchResult> loadInBackground() {
return new HashSet<>();
}
@Override
protected void onDiscardResult(List<? extends SearchResult> result) {
protected void onDiscardResult(Set<? extends SearchResult> result) {
}
}

View File

@@ -41,7 +41,7 @@ import org.robolectric.annotation.Config;
import org.robolectric.util.ActivityController;
import org.robolectric.util.ReflectionHelpers;
import java.util.List;
import java.util.Set;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Matchers.any;
@@ -249,7 +249,7 @@ public class SearchFragmentTest {
Robolectric.flushForegroundThreadScheduler();
verify(fragment, times(2)).onLoadFinished(any(Loader.class), any(List.class));
verify(fragment, times(2)).onLoadFinished(any(Loader.class), any(Set.class));
}
@Test

View File

@@ -46,8 +46,10 @@ import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Objects;
import java.util.Set;
import static com.google.common.truth.Truth.assertThat;
@@ -85,7 +87,7 @@ public class SearchResultsAdapterTest {
@Test
public void testSingleSourceMerge_exactCopyReturned() {
ArrayList<SearchResult> intentResults = getIntentSampleResults();
Set<SearchResult> intentResults = getIntentSampleResults();
mAdapter.addSearchResults(intentResults, mLoaderClassName);
mAdapter.displaySearchResults("");
@@ -111,8 +113,10 @@ public class SearchResultsAdapterTest {
@Test
public void testEndToEndSearch_properResultsMerged_correctOrder() {
mAdapter.addSearchResults(getDummyAppResults(), InstalledAppResultLoader.class.getName());
mAdapter.addSearchResults(getDummyDbResults(), DatabaseResultLoader.class.getName());
mAdapter.addSearchResults(new HashSet<SearchResult>(getDummyAppResults()),
InstalledAppResultLoader.class.getName());
mAdapter.addSearchResults(new HashSet<SearchResult>(getDummyDbResults()),
DatabaseResultLoader.class.getName());
int count = mAdapter.displaySearchResults("");
List<SearchResult> results = mAdapter.getSearchResults();
@@ -130,13 +134,16 @@ public class SearchResultsAdapterTest {
List<AppSearchResult> appResults = getDummyAppResults();
List<SearchResult> dbResults = getDummyDbResults();
// Add two individual items
mAdapter.addSearchResults(appResults.subList(0,1),
mAdapter.addSearchResults(new HashSet<SearchResult>(appResults.subList(0, 1)),
InstalledAppResultLoader.class.getName());
mAdapter.addSearchResults(dbResults.subList(0,1), DatabaseResultLoader.class.getName());
mAdapter.addSearchResults(new HashSet<SearchResult>(dbResults.subList(0, 1)),
DatabaseResultLoader.class.getName());
mAdapter.displaySearchResults("");
// Add super-set of items
mAdapter.addSearchResults(appResults, InstalledAppResultLoader.class.getName());
mAdapter.addSearchResults(dbResults, DatabaseResultLoader.class.getName());
mAdapter.addSearchResults(
new HashSet<SearchResult>(appResults), InstalledAppResultLoader.class.getName());
mAdapter.addSearchResults(
new HashSet<SearchResult>(dbResults), DatabaseResultLoader.class.getName());
int count = mAdapter.displaySearchResults("");
List<SearchResult> results = mAdapter.getSearchResults();
@@ -170,13 +177,16 @@ public class SearchResultsAdapterTest {
List<AppSearchResult> appResults = getDummyAppResults();
List<SearchResult> dbResults = getDummyDbResults();
// Add list of items
mAdapter.addSearchResults(appResults, InstalledAppResultLoader.class.getName());
mAdapter.addSearchResults(dbResults, DatabaseResultLoader.class.getName());
mAdapter.addSearchResults(new HashSet<SearchResult>(appResults),
InstalledAppResultLoader.class.getName());
mAdapter.addSearchResults(new HashSet<SearchResult>(dbResults),
DatabaseResultLoader.class.getName());
mAdapter.displaySearchResults("");
// Add subset of items
mAdapter.addSearchResults(appResults.subList(0,1),
mAdapter.addSearchResults(new HashSet<SearchResult>(appResults.subList(0, 1)),
InstalledAppResultLoader.class.getName());
mAdapter.addSearchResults(dbResults.subList(0,1), DatabaseResultLoader.class.getName());
mAdapter.addSearchResults(new HashSet<>(dbResults.subList(0, 1)),
DatabaseResultLoader.class.getName());
int count = mAdapter.displaySearchResults("");
List<SearchResult> results = mAdapter.getSearchResults();
@@ -231,8 +241,8 @@ public class SearchResultsAdapterTest {
return results;
}
private ArrayList<SearchResult> getIntentSampleResults() {
ArrayList<SearchResult> sampleResults = new ArrayList<>();
private Set<SearchResult> getIntentSampleResults() {
Set<SearchResult> sampleResults = new HashSet<>();
ArrayList<String> breadcrumbs = new ArrayList<>();
final Drawable icon = mContext.getDrawable(R.drawable.ic_search_history);
final ResultPayload payload = new ResultPayload(null);