1 /* 2 * Copyright (C) 2010 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 package com.android.quicksearchbox; 17 18 import static com.android.quicksearchbox.SuggestionCursorUtil.assertSameSuggestions; 19 import static com.android.quicksearchbox.SuggestionCursorUtil.assertSameSuggestionsNoOrder; 20 import static com.android.quicksearchbox.SuggestionCursorUtil.concat; 21 22 import android.test.AndroidTestCase; 23 import android.test.suitebuilder.annotation.MediumTest; 24 25 import java.util.ArrayList; 26 import java.util.List; 27 28 /** 29 * Tests for {@link ResultPromoter}. 30 */ 31 @MediumTest 32 public class ResultPromoterTest extends AndroidTestCase { 33 34 private static final int MAX_PROMOTED_SUGGESTIONS = 10; 35 36 private String mQuery; 37 38 private Suggestion mS11; 39 private Suggestion mS12; 40 private Suggestion mS21; 41 private Suggestion mS22; 42 private Suggestion mWeb1; 43 private Suggestion mWeb2; 44 45 private CorpusResult mCorpusResult1; 46 private CorpusResult mCorpusResult2; 47 private CorpusResult mCorpusResultWeb; 48 49 private SuggestionCursor mShortcuts; 50 private List<CorpusResult> mCorpusResults; 51 52 @Override 53 protected void setUp() throws Exception { 54 mQuery = "foo"; 55 mS11 = MockSource.SOURCE_1.createSuggestion(mQuery + "_1_1"); 56 mS12 = MockSource.SOURCE_1.createSuggestion(mQuery + "_1_2"); 57 mS21 = MockSource.SOURCE_2.createSuggestion(mQuery + "_1_1"); 58 mS22 = MockSource.SOURCE_2.createSuggestion(mQuery + "_1_2"); 59 mWeb1 = MockSource.WEB_SOURCE.createSuggestion(mQuery + "_web_1"); 60 mWeb2 = MockSource.WEB_SOURCE.createSuggestion(mQuery + "_web_2"); 61 mShortcuts = cursor(mS11, mS12, mS21, mS22, mWeb1, mWeb2); 62 mCorpusResult1 = MockCorpus.CORPUS_1.getSuggestions(mQuery, 10, false); 63 mCorpusResult2 = MockCorpus.CORPUS_2.getSuggestions(mQuery, 10, false); 64 mCorpusResultWeb = MockCorpus.WEB_CORPUS.getSuggestions(mQuery, 10, false); 65 mCorpusResults = new ArrayList<CorpusResult>(); 66 mCorpusResults.add(mCorpusResult1); 67 mCorpusResults.add(mCorpusResult2); 68 mCorpusResults.add(mCorpusResultWeb); 69 } 70 71 public void testOnlyResultShortcutsPromoted() { 72 SuggestionCursor promoted = promoteShortcuts(mShortcuts); 73 SuggestionCursor expected = cursor(mS11, mS12, mS21, mS22); 74 assertSameSuggestions(expected, promoted); 75 } 76 77 public void testOnlyResultSuggestionsPromoted() { 78 SuggestionCursor promoted = promoteSuggestions(mCorpusResults); 79 SuggestionCursor expected = concat(mCorpusResult1, mCorpusResult2); 80 assertSameSuggestionsNoOrder(expected, promoted); 81 } 82 83 private ShortcutPromoter createResultPromoter() { 84 ResultFilter results = new ResultFilter(); 85 return new ShortcutPromoter(config(), 86 new RankAwarePromoter(config(), results, null), results); 87 } 88 89 private ListSuggestionCursor promoteShortcuts(SuggestionCursor shortcuts) { 90 ShortcutPromoter promoter = createResultPromoter(); 91 ListSuggestionCursor promoted = new ListSuggestionCursor(mQuery); 92 promoter.promoteShortcuts(shortcuts, MAX_PROMOTED_SUGGESTIONS, promoted); 93 return promoted; 94 } 95 96 private ListSuggestionCursor promoteSuggestions(List<CorpusResult> suggestions) { 97 ResultFilter results = new ResultFilter(); 98 RankAwarePromoter promoter = new RankAwarePromoter(config(), results, null); 99 ListSuggestionCursor promoted = new ListSuggestionCursor(mQuery); 100 promoter.promoteSuggestions(suggestions, MAX_PROMOTED_SUGGESTIONS, promoted); 101 return promoted; 102 } 103 104 private Config config() { 105 return new Config(getContext()); 106 } 107 108 private SuggestionCursor cursor(Suggestion... suggestions) { 109 return new ListSuggestionCursor(mQuery, suggestions); 110 } 111 112 } 113