172f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert/*
272f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert * Copyright (C) 2010 The Android Open Source Project
372f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert *
472f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert * Licensed under the Apache License, Version 2.0 (the "License");
572f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert * you may not use this file except in compliance with the License.
672f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert * You may obtain a copy of the License at
772f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert *
872f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert *      http://www.apache.org/licenses/LICENSE-2.0
972f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert *
1072f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert * Unless required by applicable law or agreed to in writing, software
1172f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert * distributed under the License is distributed on an "AS IS" BASIS,
1272f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1372f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert * See the License for the specific language governing permissions and
1472f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert * limitations under the License.
1572f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert */
1672f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert
1772f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringertpackage com.android.quicksearchbox;
1872f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert
19b83882b9efa37ec0f20a0f1c85cf5ccc93194aeeBjorn Bringertimport static com.google.common.base.Objects.equal;
20b83882b9efa37ec0f20a0f1c85cf5ccc93194aeeBjorn Bringert
21b83882b9efa37ec0f20a0f1c85cf5ccc93194aeeBjorn Bringertimport com.google.common.collect.UnmodifiableIterator;
22b83882b9efa37ec0f20a0f1c85cf5ccc93194aeeBjorn Bringert
235229b06f00d20aac76cd8519b37f2a579d61c54fMathew Inwoodimport java.util.Collection;
24b83882b9efa37ec0f20a0f1c85cf5ccc93194aeeBjorn Bringertimport java.util.Iterator;
25b83882b9efa37ec0f20a0f1c85cf5ccc93194aeeBjorn Bringertimport java.util.NoSuchElementException;
26b83882b9efa37ec0f20a0f1c85cf5ccc93194aeeBjorn Bringert
2772f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringertimport junit.framework.Assert;
2872f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert
2972f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert/**
3072f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert * Test utilities for {@link ShortcutCursor}.
3172f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert */
3272f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringertpublic class SuggestionCursorUtil extends Assert {
3372f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert
3472f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert    public static void assertNoSuggestions(SuggestionCursor suggestions) {
3572f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert        assertNoSuggestions("", suggestions);
3672f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert    }
3772f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert
3872f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert    public static void assertNoSuggestions(String message, SuggestionCursor suggestions) {
3972f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert        assertNotNull(suggestions);
4072f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert        assertEquals(message, 0, suggestions.getCount());
4172f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert    }
4272f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert
4372f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert    public static void assertSameSuggestion(String message, int position,
4472f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert            SuggestionCursor expected, SuggestionCursor observed) {
4508ff0a7cb6b99db79508fa3124730eb81411bc56Bjorn Bringert        assertSameSuggestion(message, expected, position, observed, position);
4608ff0a7cb6b99db79508fa3124730eb81411bc56Bjorn Bringert    }
4708ff0a7cb6b99db79508fa3124730eb81411bc56Bjorn Bringert
4808ff0a7cb6b99db79508fa3124730eb81411bc56Bjorn Bringert    public static void assertSameSuggestion(String message,
4908ff0a7cb6b99db79508fa3124730eb81411bc56Bjorn Bringert            SuggestionCursor expected, int positionExpected,
5008ff0a7cb6b99db79508fa3124730eb81411bc56Bjorn Bringert            SuggestionCursor observed, int positionObserved) {
5108ff0a7cb6b99db79508fa3124730eb81411bc56Bjorn Bringert        message +=  " at positions " + positionExpected + "(expected) "
5208ff0a7cb6b99db79508fa3124730eb81411bc56Bjorn Bringert                + positionObserved + " (observed)";
5308ff0a7cb6b99db79508fa3124730eb81411bc56Bjorn Bringert        expected.moveTo(positionExpected);
5408ff0a7cb6b99db79508fa3124730eb81411bc56Bjorn Bringert        observed.moveTo(positionObserved);
5508ff0a7cb6b99db79508fa3124730eb81411bc56Bjorn Bringert        assertSuggestionEquals(message, expected, observed);
5672f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert    }
5772f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert
5872f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert    public static void assertSameSuggestions(SuggestionCursor expected, SuggestionCursor observed) {
598749e77dddec9e7984ee86a7be6f5ba4fce44362Bjorn Bringert        assertSameSuggestions("", expected, observed);
6072f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert    }
6172f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert
6272f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert    public static void assertSameSuggestions(
6372f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert            String message, SuggestionCursor expected, SuggestionCursor observed) {
645229b06f00d20aac76cd8519b37f2a579d61c54fMathew Inwood        assertNotNull(message + ", expected == null", expected);
65b83882b9efa37ec0f20a0f1c85cf5ccc93194aeeBjorn Bringert        assertNotNull(message + ", observed == null", observed);
668749e77dddec9e7984ee86a7be6f5ba4fce44362Bjorn Bringert        assertEquals(message + ", count", expected.getCount(), observed.getCount());
6772f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert        assertEquals(message + ", userQuery", expected.getUserQuery(), observed.getUserQuery());
6872f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert        int count = expected.getCount();
6972f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert        for (int i = 0; i < count; i++) {
7072f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert            assertSameSuggestion(message, i, expected, observed);
7172f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert        }
7272f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert    }
7372f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert
74b83882b9efa37ec0f20a0f1c85cf5ccc93194aeeBjorn Bringert    public static void assertSameSuggestionsNoOrder(SuggestionCursor expected,
75b83882b9efa37ec0f20a0f1c85cf5ccc93194aeeBjorn Bringert            SuggestionCursor observed) {
76b83882b9efa37ec0f20a0f1c85cf5ccc93194aeeBjorn Bringert        assertSameSuggestionsNoOrder("", expected, observed);
77b83882b9efa37ec0f20a0f1c85cf5ccc93194aeeBjorn Bringert    }
78b83882b9efa37ec0f20a0f1c85cf5ccc93194aeeBjorn Bringert
79b83882b9efa37ec0f20a0f1c85cf5ccc93194aeeBjorn Bringert    public static void assertSameSuggestionsNoOrder(String message,
80b83882b9efa37ec0f20a0f1c85cf5ccc93194aeeBjorn Bringert            SuggestionCursor expected, SuggestionCursor observed) {
81b83882b9efa37ec0f20a0f1c85cf5ccc93194aeeBjorn Bringert        for (Suggestion expectedSuggestion : iterable(expected)) {
82b83882b9efa37ec0f20a0f1c85cf5ccc93194aeeBjorn Bringert            assertContainsSuggestion(expectedSuggestion, observed);
83b83882b9efa37ec0f20a0f1c85cf5ccc93194aeeBjorn Bringert        }
84b83882b9efa37ec0f20a0f1c85cf5ccc93194aeeBjorn Bringert        for (Suggestion observedSuggestion : iterable(observed)) {
85b83882b9efa37ec0f20a0f1c85cf5ccc93194aeeBjorn Bringert            assertContainsSuggestion(observedSuggestion, expected);
86b83882b9efa37ec0f20a0f1c85cf5ccc93194aeeBjorn Bringert        }
87b83882b9efa37ec0f20a0f1c85cf5ccc93194aeeBjorn Bringert    }
88b83882b9efa37ec0f20a0f1c85cf5ccc93194aeeBjorn Bringert
89b83882b9efa37ec0f20a0f1c85cf5ccc93194aeeBjorn Bringert    public static void assertContainsSuggestion(Suggestion expected, SuggestionCursor observed) {
90b83882b9efa37ec0f20a0f1c85cf5ccc93194aeeBjorn Bringert        for (Suggestion observedSuggestion : iterable(observed)) {
91b83882b9efa37ec0f20a0f1c85cf5ccc93194aeeBjorn Bringert            if (checkSuggestionEquals(expected, observedSuggestion)) {
92b83882b9efa37ec0f20a0f1c85cf5ccc93194aeeBjorn Bringert                return;
93b83882b9efa37ec0f20a0f1c85cf5ccc93194aeeBjorn Bringert            }
94b83882b9efa37ec0f20a0f1c85cf5ccc93194aeeBjorn Bringert        }
95b83882b9efa37ec0f20a0f1c85cf5ccc93194aeeBjorn Bringert        fail(expected + " not found in " + observed);
96b83882b9efa37ec0f20a0f1c85cf5ccc93194aeeBjorn Bringert    }
97b83882b9efa37ec0f20a0f1c85cf5ccc93194aeeBjorn Bringert
98b83882b9efa37ec0f20a0f1c85cf5ccc93194aeeBjorn Bringert    public static Iterable<Suggestion> iterable(final SuggestionCursor cursor) {
99b83882b9efa37ec0f20a0f1c85cf5ccc93194aeeBjorn Bringert        return new Iterable<Suggestion>() {
100b83882b9efa37ec0f20a0f1c85cf5ccc93194aeeBjorn Bringert            @Override
101b83882b9efa37ec0f20a0f1c85cf5ccc93194aeeBjorn Bringert            public Iterator<Suggestion> iterator() {
102b83882b9efa37ec0f20a0f1c85cf5ccc93194aeeBjorn Bringert                return SuggestionCursorUtil.iterator(cursor);
103b83882b9efa37ec0f20a0f1c85cf5ccc93194aeeBjorn Bringert            }
104b83882b9efa37ec0f20a0f1c85cf5ccc93194aeeBjorn Bringert        };
105b83882b9efa37ec0f20a0f1c85cf5ccc93194aeeBjorn Bringert    }
106b83882b9efa37ec0f20a0f1c85cf5ccc93194aeeBjorn Bringert
107b83882b9efa37ec0f20a0f1c85cf5ccc93194aeeBjorn Bringert    public static UnmodifiableIterator<Suggestion> iterator(final SuggestionCursor cursor) {
108b83882b9efa37ec0f20a0f1c85cf5ccc93194aeeBjorn Bringert        return new UnmodifiableIterator<Suggestion>() {
109b83882b9efa37ec0f20a0f1c85cf5ccc93194aeeBjorn Bringert            private int mPos = 0;
110b83882b9efa37ec0f20a0f1c85cf5ccc93194aeeBjorn Bringert
111b83882b9efa37ec0f20a0f1c85cf5ccc93194aeeBjorn Bringert            @Override
112b83882b9efa37ec0f20a0f1c85cf5ccc93194aeeBjorn Bringert            public boolean hasNext() {
113b83882b9efa37ec0f20a0f1c85cf5ccc93194aeeBjorn Bringert                return cursor.getPosition() < cursor.getCount() - 1;
114b83882b9efa37ec0f20a0f1c85cf5ccc93194aeeBjorn Bringert            }
115b83882b9efa37ec0f20a0f1c85cf5ccc93194aeeBjorn Bringert            @Override
116b83882b9efa37ec0f20a0f1c85cf5ccc93194aeeBjorn Bringert            public Suggestion next() {
117b83882b9efa37ec0f20a0f1c85cf5ccc93194aeeBjorn Bringert                if (!hasNext()) {
118b83882b9efa37ec0f20a0f1c85cf5ccc93194aeeBjorn Bringert                    throw new NoSuchElementException();
119b83882b9efa37ec0f20a0f1c85cf5ccc93194aeeBjorn Bringert                }
120b83882b9efa37ec0f20a0f1c85cf5ccc93194aeeBjorn Bringert                mPos++;
121b83882b9efa37ec0f20a0f1c85cf5ccc93194aeeBjorn Bringert                return new SuggestionPosition(cursor, mPos);
122b83882b9efa37ec0f20a0f1c85cf5ccc93194aeeBjorn Bringert            }
123b83882b9efa37ec0f20a0f1c85cf5ccc93194aeeBjorn Bringert        };
124b83882b9efa37ec0f20a0f1c85cf5ccc93194aeeBjorn Bringert    }
125b83882b9efa37ec0f20a0f1c85cf5ccc93194aeeBjorn Bringert
1268749e77dddec9e7984ee86a7be6f5ba4fce44362Bjorn Bringert    public static ListSuggestionCursor slice(SuggestionCursor cursor, int start) {
1278749e77dddec9e7984ee86a7be6f5ba4fce44362Bjorn Bringert        return slice(cursor, start, cursor.getCount() - start);
1288749e77dddec9e7984ee86a7be6f5ba4fce44362Bjorn Bringert    }
1298749e77dddec9e7984ee86a7be6f5ba4fce44362Bjorn Bringert
1306d5cbd67f7a5f824babb5c892b0f30bfd9f4ff23Bjorn Bringert    public static ListSuggestionCursor slice(SuggestionCursor cursor, int start, int length) {
1316d5cbd67f7a5f824babb5c892b0f30bfd9f4ff23Bjorn Bringert        ListSuggestionCursor out = new ListSuggestionCursor(cursor.getUserQuery());
1326d5cbd67f7a5f824babb5c892b0f30bfd9f4ff23Bjorn Bringert        for (int i = start; i < start + length; i++) {
1336d5cbd67f7a5f824babb5c892b0f30bfd9f4ff23Bjorn Bringert            out.add(new SuggestionPosition(cursor, i));
1346d5cbd67f7a5f824babb5c892b0f30bfd9f4ff23Bjorn Bringert        }
1356d5cbd67f7a5f824babb5c892b0f30bfd9f4ff23Bjorn Bringert        return out;
1366d5cbd67f7a5f824babb5c892b0f30bfd9f4ff23Bjorn Bringert    }
13708ff0a7cb6b99db79508fa3124730eb81411bc56Bjorn Bringert
138b83882b9efa37ec0f20a0f1c85cf5ccc93194aeeBjorn Bringert    public static ListSuggestionCursor concat(SuggestionCursor... cursors) {
139b83882b9efa37ec0f20a0f1c85cf5ccc93194aeeBjorn Bringert        ListSuggestionCursor out = new ListSuggestionCursor(cursors[0].getUserQuery());
140b83882b9efa37ec0f20a0f1c85cf5ccc93194aeeBjorn Bringert        for (SuggestionCursor cursor : cursors) {
141b83882b9efa37ec0f20a0f1c85cf5ccc93194aeeBjorn Bringert            for (int i = 0; i < cursor.getCount(); i++) {
142b83882b9efa37ec0f20a0f1c85cf5ccc93194aeeBjorn Bringert                out.add(new SuggestionPosition(cursor, i));
143b83882b9efa37ec0f20a0f1c85cf5ccc93194aeeBjorn Bringert            }
144b83882b9efa37ec0f20a0f1c85cf5ccc93194aeeBjorn Bringert        }
145b83882b9efa37ec0f20a0f1c85cf5ccc93194aeeBjorn Bringert        return out;
146b83882b9efa37ec0f20a0f1c85cf5ccc93194aeeBjorn Bringert    }
147b83882b9efa37ec0f20a0f1c85cf5ccc93194aeeBjorn Bringert
14808ff0a7cb6b99db79508fa3124730eb81411bc56Bjorn Bringert    public static void assertSuggestionEquals(Suggestion expected, Suggestion observed) {
14908ff0a7cb6b99db79508fa3124730eb81411bc56Bjorn Bringert        assertSuggestionEquals(null, expected, observed);
15008ff0a7cb6b99db79508fa3124730eb81411bc56Bjorn Bringert    }
15108ff0a7cb6b99db79508fa3124730eb81411bc56Bjorn Bringert
15208ff0a7cb6b99db79508fa3124730eb81411bc56Bjorn Bringert    public static void assertSuggestionEquals(String message, Suggestion expected,
15308ff0a7cb6b99db79508fa3124730eb81411bc56Bjorn Bringert            Suggestion observed) {
15408ff0a7cb6b99db79508fa3124730eb81411bc56Bjorn Bringert        assertFieldEquals(message, "source", expected.getSuggestionSource(),
15508ff0a7cb6b99db79508fa3124730eb81411bc56Bjorn Bringert                observed.getSuggestionSource());
15608ff0a7cb6b99db79508fa3124730eb81411bc56Bjorn Bringert        assertFieldEquals(message, "shortcutId", expected.getShortcutId(),
15708ff0a7cb6b99db79508fa3124730eb81411bc56Bjorn Bringert                observed.getShortcutId());
15808ff0a7cb6b99db79508fa3124730eb81411bc56Bjorn Bringert        assertFieldEquals(message, "spinnerWhileRefreshing", expected.isSpinnerWhileRefreshing(),
15908ff0a7cb6b99db79508fa3124730eb81411bc56Bjorn Bringert                observed.isSpinnerWhileRefreshing());
16008ff0a7cb6b99db79508fa3124730eb81411bc56Bjorn Bringert        assertFieldEquals(message, "format", expected.getSuggestionFormat(),
16108ff0a7cb6b99db79508fa3124730eb81411bc56Bjorn Bringert                observed.getSuggestionFormat());
16208ff0a7cb6b99db79508fa3124730eb81411bc56Bjorn Bringert        assertFieldEquals(message, "icon1", expected.getSuggestionIcon1(),
16308ff0a7cb6b99db79508fa3124730eb81411bc56Bjorn Bringert                observed.getSuggestionIcon1());
16408ff0a7cb6b99db79508fa3124730eb81411bc56Bjorn Bringert        assertFieldEquals(message, "icon2", expected.getSuggestionIcon2(),
16508ff0a7cb6b99db79508fa3124730eb81411bc56Bjorn Bringert                observed.getSuggestionIcon2());
16608ff0a7cb6b99db79508fa3124730eb81411bc56Bjorn Bringert        assertFieldEquals(message, "text1", expected.getSuggestionText1(),
16708ff0a7cb6b99db79508fa3124730eb81411bc56Bjorn Bringert                observed.getSuggestionText1());
16808ff0a7cb6b99db79508fa3124730eb81411bc56Bjorn Bringert        assertFieldEquals(message, "text2", expected.getSuggestionText2(),
16908ff0a7cb6b99db79508fa3124730eb81411bc56Bjorn Bringert                observed.getSuggestionText2());
17008ff0a7cb6b99db79508fa3124730eb81411bc56Bjorn Bringert        assertFieldEquals(message, "text2Url", expected.getSuggestionText2Url(),
17108ff0a7cb6b99db79508fa3124730eb81411bc56Bjorn Bringert                observed.getSuggestionText2Url());
17208ff0a7cb6b99db79508fa3124730eb81411bc56Bjorn Bringert        assertFieldEquals(message, "action", expected.getSuggestionIntentAction(),
17308ff0a7cb6b99db79508fa3124730eb81411bc56Bjorn Bringert                observed.getSuggestionIntentAction());
17408ff0a7cb6b99db79508fa3124730eb81411bc56Bjorn Bringert        assertFieldEquals(message, "data", expected.getSuggestionIntentDataString(),
17508ff0a7cb6b99db79508fa3124730eb81411bc56Bjorn Bringert                observed.getSuggestionIntentDataString());
17608ff0a7cb6b99db79508fa3124730eb81411bc56Bjorn Bringert        assertFieldEquals(message, "extraData", expected.getSuggestionIntentExtraData(),
17708ff0a7cb6b99db79508fa3124730eb81411bc56Bjorn Bringert                observed.getSuggestionIntentExtraData());
17808ff0a7cb6b99db79508fa3124730eb81411bc56Bjorn Bringert        assertFieldEquals(message, "query", expected.getSuggestionQuery(),
17908ff0a7cb6b99db79508fa3124730eb81411bc56Bjorn Bringert                observed.getSuggestionQuery());
18008ff0a7cb6b99db79508fa3124730eb81411bc56Bjorn Bringert        assertFieldEquals(message, "logType", expected.getSuggestionLogType(),
18108ff0a7cb6b99db79508fa3124730eb81411bc56Bjorn Bringert                observed.getSuggestionLogType());
18208ff0a7cb6b99db79508fa3124730eb81411bc56Bjorn Bringert    }
18308ff0a7cb6b99db79508fa3124730eb81411bc56Bjorn Bringert
18408ff0a7cb6b99db79508fa3124730eb81411bc56Bjorn Bringert    private static void assertFieldEquals(String message, String field,
18508ff0a7cb6b99db79508fa3124730eb81411bc56Bjorn Bringert            Object expected, Object observed) {
18608ff0a7cb6b99db79508fa3124730eb81411bc56Bjorn Bringert        String msg = (message == null) ? field : message + ", " + field;
18708ff0a7cb6b99db79508fa3124730eb81411bc56Bjorn Bringert        assertEquals(msg, expected, observed);
18808ff0a7cb6b99db79508fa3124730eb81411bc56Bjorn Bringert    }
18908ff0a7cb6b99db79508fa3124730eb81411bc56Bjorn Bringert
19008ff0a7cb6b99db79508fa3124730eb81411bc56Bjorn Bringert    public static void addAll(ListSuggestionCursor to, SuggestionCursor from) {
19108ff0a7cb6b99db79508fa3124730eb81411bc56Bjorn Bringert        if (from == null) return;
19208ff0a7cb6b99db79508fa3124730eb81411bc56Bjorn Bringert        int count = from.getCount();
19308ff0a7cb6b99db79508fa3124730eb81411bc56Bjorn Bringert        for (int i = 0; i < count; i++) {
19408ff0a7cb6b99db79508fa3124730eb81411bc56Bjorn Bringert            to.add(new SuggestionPosition(from, i));
19508ff0a7cb6b99db79508fa3124730eb81411bc56Bjorn Bringert        }
19608ff0a7cb6b99db79508fa3124730eb81411bc56Bjorn Bringert    }
197b83882b9efa37ec0f20a0f1c85cf5ccc93194aeeBjorn Bringert
198b83882b9efa37ec0f20a0f1c85cf5ccc93194aeeBjorn Bringert    public static boolean checkSuggestionEquals(Suggestion expected, Suggestion observed) {
199b83882b9efa37ec0f20a0f1c85cf5ccc93194aeeBjorn Bringert        return equal(expected.getSuggestionSource(), observed.getSuggestionSource())
200b83882b9efa37ec0f20a0f1c85cf5ccc93194aeeBjorn Bringert                && equal(expected.getShortcutId(), observed.getShortcutId())
201b83882b9efa37ec0f20a0f1c85cf5ccc93194aeeBjorn Bringert                && equal(expected.isSpinnerWhileRefreshing(), observed.isSpinnerWhileRefreshing())
202b83882b9efa37ec0f20a0f1c85cf5ccc93194aeeBjorn Bringert                && equal(expected.getSuggestionFormat(), observed.getSuggestionFormat())
203b83882b9efa37ec0f20a0f1c85cf5ccc93194aeeBjorn Bringert                && equal(expected.getSuggestionIcon1(), observed.getSuggestionIcon1())
204b83882b9efa37ec0f20a0f1c85cf5ccc93194aeeBjorn Bringert                && equal(expected.getSuggestionIcon2(), observed.getSuggestionIcon2())
205b83882b9efa37ec0f20a0f1c85cf5ccc93194aeeBjorn Bringert                && equal(expected.getSuggestionText1(), observed.getSuggestionText1())
206b83882b9efa37ec0f20a0f1c85cf5ccc93194aeeBjorn Bringert                && equal(expected.getSuggestionText2(), observed.getSuggestionText2())
207b83882b9efa37ec0f20a0f1c85cf5ccc93194aeeBjorn Bringert                && equal(expected.getSuggestionText2Url(), observed.getSuggestionText2Url())
208b83882b9efa37ec0f20a0f1c85cf5ccc93194aeeBjorn Bringert                && equal(expected.getSuggestionIntentAction(), observed.getSuggestionIntentAction())
209b83882b9efa37ec0f20a0f1c85cf5ccc93194aeeBjorn Bringert                && equal(expected.getSuggestionIntentDataString(), observed.getSuggestionIntentDataString())
210b83882b9efa37ec0f20a0f1c85cf5ccc93194aeeBjorn Bringert                && equal(expected.getSuggestionIntentExtraData(), observed.getSuggestionIntentExtraData())
211b83882b9efa37ec0f20a0f1c85cf5ccc93194aeeBjorn Bringert                && equal(expected.getSuggestionQuery(), observed.getSuggestionQuery())
212b83882b9efa37ec0f20a0f1c85cf5ccc93194aeeBjorn Bringert                && equal(expected.getSuggestionLogType(), observed.getSuggestionLogType());
213b83882b9efa37ec0f20a0f1c85cf5ccc93194aeeBjorn Bringert    }
214b83882b9efa37ec0f20a0f1c85cf5ccc93194aeeBjorn Bringert
2155229b06f00d20aac76cd8519b37f2a579d61c54fMathew Inwood    public static void assertSuggestionExtras(String message, SuggestionCursor observed,
2165229b06f00d20aac76cd8519b37f2a579d61c54fMathew Inwood            String extraColumn, Object expectedExtra) {
2175229b06f00d20aac76cd8519b37f2a579d61c54fMathew Inwood        assertNotNull(message + ", observed == null", observed);
2185229b06f00d20aac76cd8519b37f2a579d61c54fMathew Inwood        assertTrue(message + ", no suggestions", observed.getCount() > 0);
2195229b06f00d20aac76cd8519b37f2a579d61c54fMathew Inwood        for (int i = 0; i < observed.getCount(); ++i) {
2205229b06f00d20aac76cd8519b37f2a579d61c54fMathew Inwood            observed.moveTo(i);
2215229b06f00d20aac76cd8519b37f2a579d61c54fMathew Inwood            SuggestionExtras extras = observed.getExtras();
2225229b06f00d20aac76cd8519b37f2a579d61c54fMathew Inwood            assertNotNull(message + ", no extras at position " + i, extras);
2235229b06f00d20aac76cd8519b37f2a579d61c54fMathew Inwood            Collection<String> columns = extras.getExtraColumnNames();
2245229b06f00d20aac76cd8519b37f2a579d61c54fMathew Inwood            assertNotNull(message + ", extras columns is null at position " + i, columns);
2255229b06f00d20aac76cd8519b37f2a579d61c54fMathew Inwood            assertTrue(message + ", column '" + extraColumn +
2265229b06f00d20aac76cd8519b37f2a579d61c54fMathew Inwood                    "' not reported by extras at position " + i, columns.contains(extraColumn));
2275229b06f00d20aac76cd8519b37f2a579d61c54fMathew Inwood            Object extra = extras.getExtra(extraColumn);
2285229b06f00d20aac76cd8519b37f2a579d61c54fMathew Inwood            assertEquals(message + ", extra value", expectedExtra == null ? null :
2295229b06f00d20aac76cd8519b37f2a579d61c54fMathew Inwood                    expectedExtra.toString(), extra);
2305229b06f00d20aac76cd8519b37f2a579d61c54fMathew Inwood        }
2315229b06f00d20aac76cd8519b37f2a579d61c54fMathew Inwood    }
2325229b06f00d20aac76cd8519b37f2a579d61c54fMathew Inwood
23372f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert}
234