SuggestionCursorUtil.java revision b83882b9efa37ec0f20a0f1c85cf5ccc93194aee
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
17package com.android.quicksearchbox;
18
19import static com.google.common.base.Objects.equal;
20
21import com.google.common.collect.UnmodifiableIterator;
22
23import java.util.Iterator;
24import java.util.NoSuchElementException;
25
26import junit.framework.Assert;
27
28/**
29 * Test utilities for {@link ShortcutCursor}.
30 */
31public class SuggestionCursorUtil extends Assert {
32
33    public static void assertNoSuggestions(SuggestionCursor suggestions) {
34        assertNoSuggestions("", suggestions);
35    }
36
37    public static void assertNoSuggestions(String message, SuggestionCursor suggestions) {
38        assertNotNull(suggestions);
39        assertEquals(message, 0, suggestions.getCount());
40    }
41
42    public static void assertSameSuggestion(String message, int position,
43            SuggestionCursor expected, SuggestionCursor observed) {
44        assertSameSuggestion(message, expected, position, observed, position);
45    }
46
47    public static void assertSameSuggestion(String message,
48            SuggestionCursor expected, int positionExpected,
49            SuggestionCursor observed, int positionObserved) {
50        message +=  " at positions " + positionExpected + "(expected) "
51                + positionObserved + " (observed)";
52        expected.moveTo(positionExpected);
53        observed.moveTo(positionObserved);
54        assertSuggestionEquals(message, expected, observed);
55    }
56
57    public static void assertSameSuggestions(SuggestionCursor expected, SuggestionCursor observed) {
58        assertSameSuggestions("", expected, observed, false);
59    }
60
61    public static void assertSameSuggestions(SuggestionCursor expected, SuggestionCursor observed,
62            boolean allowExtras) {
63        assertSameSuggestions("", expected, observed, allowExtras);
64    }
65
66    public static void assertSameSuggestions(
67            String message, SuggestionCursor expected, SuggestionCursor observed) {
68        assertSameSuggestions(message, expected, observed, false);
69    }
70
71    public static void assertSameSuggestions(
72            String message, SuggestionCursor expected, SuggestionCursor observed,
73            boolean allowExtras) {
74        assertNotNull(expected + ", observed == null", expected);
75        assertNotNull(message + ", observed == null", observed);
76        if (!allowExtras) {
77            assertEquals(message + ", count", expected.getCount(), observed.getCount());
78        } else {
79            assertTrue(message + "count", expected.getCount() <= observed.getCount());
80        }
81        assertEquals(message + ", userQuery", expected.getUserQuery(), observed.getUserQuery());
82        int count = expected.getCount();
83        for (int i = 0; i < count; i++) {
84            assertSameSuggestion(message, i, expected, observed);
85        }
86    }
87
88    public static void assertSameSuggestionsNoOrder(SuggestionCursor expected,
89            SuggestionCursor observed) {
90        assertSameSuggestionsNoOrder("", expected, observed);
91    }
92
93    public static void assertSameSuggestionsNoOrder(String message,
94            SuggestionCursor expected, SuggestionCursor observed) {
95        for (Suggestion expectedSuggestion : iterable(expected)) {
96            assertContainsSuggestion(expectedSuggestion, observed);
97        }
98        for (Suggestion observedSuggestion : iterable(observed)) {
99            assertContainsSuggestion(observedSuggestion, expected);
100        }
101    }
102
103    public static void assertContainsSuggestion(Suggestion expected, SuggestionCursor observed) {
104        for (Suggestion observedSuggestion : iterable(observed)) {
105            if (checkSuggestionEquals(expected, observedSuggestion)) {
106                return;
107            }
108        }
109        fail(expected + " not found in " + observed);
110    }
111
112    public static Iterable<Suggestion> iterable(final SuggestionCursor cursor) {
113        return new Iterable<Suggestion>() {
114            @Override
115            public Iterator<Suggestion> iterator() {
116                return SuggestionCursorUtil.iterator(cursor);
117            }
118        };
119    }
120
121    public static UnmodifiableIterator<Suggestion> iterator(final SuggestionCursor cursor) {
122        return new UnmodifiableIterator<Suggestion>() {
123            private int mPos = 0;
124
125            @Override
126            public boolean hasNext() {
127                return cursor.getPosition() < cursor.getCount() - 1;
128            }
129            @Override
130            public Suggestion next() {
131                if (!hasNext()) {
132                    throw new NoSuchElementException();
133                }
134                mPos++;
135                return new SuggestionPosition(cursor, mPos);
136            }
137        };
138    }
139
140    public static ListSuggestionCursor slice(SuggestionCursor cursor, int start, int length) {
141        ListSuggestionCursor out = new ListSuggestionCursor(cursor.getUserQuery());
142        for (int i = start; i < start + length; i++) {
143            out.add(new SuggestionPosition(cursor, i));
144        }
145        return out;
146    }
147
148    public static ListSuggestionCursor concat(SuggestionCursor... cursors) {
149        ListSuggestionCursor out = new ListSuggestionCursor(cursors[0].getUserQuery());
150        for (SuggestionCursor cursor : cursors) {
151            for (int i = 0; i < cursor.getCount(); i++) {
152                out.add(new SuggestionPosition(cursor, i));
153            }
154        }
155        return out;
156    }
157
158    public static void assertSuggestionEquals(Suggestion expected, Suggestion observed) {
159        assertSuggestionEquals(null, expected, observed);
160    }
161
162    public static void assertSuggestionEquals(String message, Suggestion expected,
163            Suggestion observed) {
164        assertFieldEquals(message, "source", expected.getSuggestionSource(),
165                observed.getSuggestionSource());
166        assertFieldEquals(message, "shortcutId", expected.getShortcutId(),
167                observed.getShortcutId());
168        assertFieldEquals(message, "spinnerWhileRefreshing", expected.isSpinnerWhileRefreshing(),
169                observed.isSpinnerWhileRefreshing());
170        assertFieldEquals(message, "format", expected.getSuggestionFormat(),
171                observed.getSuggestionFormat());
172        assertFieldEquals(message, "icon1", expected.getSuggestionIcon1(),
173                observed.getSuggestionIcon1());
174        assertFieldEquals(message, "icon2", expected.getSuggestionIcon2(),
175                observed.getSuggestionIcon2());
176        assertFieldEquals(message, "text1", expected.getSuggestionText1(),
177                observed.getSuggestionText1());
178        assertFieldEquals(message, "text2", expected.getSuggestionText2(),
179                observed.getSuggestionText2());
180        assertFieldEquals(message, "text2Url", expected.getSuggestionText2Url(),
181                observed.getSuggestionText2Url());
182        assertFieldEquals(message, "action", expected.getSuggestionIntentAction(),
183                observed.getSuggestionIntentAction());
184        assertFieldEquals(message, "data", expected.getSuggestionIntentDataString(),
185                observed.getSuggestionIntentDataString());
186        assertFieldEquals(message, "extraData", expected.getSuggestionIntentExtraData(),
187                observed.getSuggestionIntentExtraData());
188        assertFieldEquals(message, "query", expected.getSuggestionQuery(),
189                observed.getSuggestionQuery());
190        assertFieldEquals(message, "logType", expected.getSuggestionLogType(),
191                observed.getSuggestionLogType());
192    }
193
194    private static void assertFieldEquals(String message, String field,
195            Object expected, Object observed) {
196        String msg = (message == null) ? field : message + ", " + field;
197        assertEquals(msg, expected, observed);
198    }
199
200    public static void addAll(ListSuggestionCursor to, SuggestionCursor from) {
201        if (from == null) return;
202        int count = from.getCount();
203        for (int i = 0; i < count; i++) {
204            to.add(new SuggestionPosition(from, i));
205        }
206    }
207
208    public static boolean checkSuggestionEquals(Suggestion expected, Suggestion observed) {
209        return equal(expected.getSuggestionSource(), observed.getSuggestionSource())
210                && equal(expected.getShortcutId(), observed.getShortcutId())
211                && equal(expected.isSpinnerWhileRefreshing(), observed.isSpinnerWhileRefreshing())
212                && equal(expected.getSuggestionFormat(), observed.getSuggestionFormat())
213                && equal(expected.getSuggestionIcon1(), observed.getSuggestionIcon1())
214                && equal(expected.getSuggestionIcon2(), observed.getSuggestionIcon2())
215                && equal(expected.getSuggestionText1(), observed.getSuggestionText1())
216                && equal(expected.getSuggestionText2(), observed.getSuggestionText2())
217                && equal(expected.getSuggestionText2Url(), observed.getSuggestionText2Url())
218                && equal(expected.getSuggestionIntentAction(), observed.getSuggestionIntentAction())
219                && equal(expected.getSuggestionIntentDataString(), observed.getSuggestionIntentDataString())
220                && equal(expected.getSuggestionIntentExtraData(), observed.getSuggestionIntentExtraData())
221                && equal(expected.getSuggestionQuery(), observed.getSuggestionQuery())
222                && equal(expected.getSuggestionLogType(), observed.getSuggestionLogType());
223    }
224
225}
226