Merge "Prevent crash when removing duplicates" into oc-dev

This commit is contained in:
TreeHugger Robot
2017-06-01 21:12:10 +00:00
committed by Android (Google) Code Review
2 changed files with 44 additions and 3 deletions

View File

@@ -323,18 +323,18 @@ public class DatabaseResultLoader extends AsyncLoader<List<? extends SearchResul
for (int j = i - 1; j >= 0; j--) { for (int j = i - 1; j >= 0; j--) {
primaryResult = results.get(j); primaryResult = results.get(j);
if (areDuplicateResults(primaryResult, secondaryResult)) { if (areDuplicateResults(primaryResult, secondaryResult)) {
if (primaryResult.viewType != ResultPayload.PayloadType.INTENT) { if (primaryResult.viewType != ResultPayload.PayloadType.INTENT) {
// Case where both payloads are inline // Case where both payloads are inline
results.remove(i); results.remove(i);
break; break;
} else if (secondaryResult.viewType != ResultPayload.PayloadType.INTENT) { } else if (secondaryResult.viewType != ResultPayload.PayloadType.INTENT) {
// Case where only second result is inline // Case where only second result is inline.
results.remove(j); results.remove(j);
i--; // shift the top index to reflect the lower element being removed i--; // shift the top index to reflect the lower element being removed
} else { } else {
// Case where both payloads are intent // Case where both payloads are intent.
results.remove(i); results.remove(i);
break;
} }
} }
} }

View File

@@ -378,6 +378,47 @@ public class DatabaseResultLoaderTest {
assertThat(results.get(3)).isEqualTo(resultFive); assertThat(results.get(3)).isEqualTo(resultFive);
} }
@Test
public void testDeDupe_threeDuplicates_onlyOneStays() {
/*
* Create a list as follows:
* (3) Intent One
* (2) Intent One
* (1) Intent One
*
* After removing duplicates:
* (1) Intent One
*/
List<SearchResult> results = new ArrayList();
IntentPayload intentPayload = new IntentPayload(new Intent());
SearchResult.Builder builder = new SearchResult.Builder();
// Intent One
builder.addTitle(titleOne)
.addSummary(summaryOne)
.addPayload(intentPayload);
SearchResult resultOne = builder.build();
results.add(resultOne);
// Intent Two
builder.addTitle(titleOne)
.addSummary(summaryOne)
.addPayload(intentPayload);
SearchResult resultTwo = builder.build();
results.add(resultTwo);
// Intent Three
builder.addTitle(titleOne)
.addSummary(summaryOne)
.addPayload(intentPayload);
SearchResult resultThree = builder.build();
results.add(resultThree);
loader = new DatabaseResultLoader(mContext, "", null);
loader.removeDuplicates(results);
assertThat(results.size()).isEqualTo(1);
}
@Test @Test
public void testSpecialCaseTwoWords_firstWordMatches_ranksHigher() { public void testSpecialCaseTwoWords_firstWordMatches_ranksHigher() {
final String caseOne = "Apple pear"; final String caseOne = "Apple pear";