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 com.android.quicksearchbox.util.MockNamedTaskExecutor;
20
21import android.test.AndroidTestCase;
22import android.test.suitebuilder.annotation.MediumTest;
23
24/**
25 * Tests for {@link SourceShortcutRefresher}.
26 */
27@MediumTest
28public class SourceShortcutRefresherTest extends AndroidTestCase {
29
30    private final String mQuery = "foo";
31
32    private MockNamedTaskExecutor mExecutor;
33
34    private SourceShortcutRefresher mRefresher;
35
36    private RefreshListener mListener;
37
38    private Source mSource1;
39
40    private Source mRefreshedSource;
41    private String mRefreshedShortcutId;
42    private SuggestionCursor mRefreshedCursor;
43
44    @Override
45    protected void setUp() throws Exception {
46        mExecutor = new MockNamedTaskExecutor();
47        mRefresher = new SourceShortcutRefresher(mExecutor);
48        mListener = new RefreshListener();
49        mSource1 = new MockRefreshSource("source1");
50        mRefreshedSource = null;
51        mRefreshedShortcutId = null;
52        mRefreshedCursor = null;
53    }
54
55    public void testShouldRefreshTrue() {
56        assertTrue(mRefresher.shouldRefresh(mSource1, "refresh_me"));
57    }
58
59    public void testShouldRefreshFalse() {
60        assertFalse(mRefresher.shouldRefresh(null, "foo"));
61        assertFalse(mRefresher.shouldRefresh(mSource1, null));
62    }
63
64    public void testMarkShortcutRefreshed() {
65        mRefresher.markShortcutRefreshed(mSource1, "refreshed");
66        assertFalse(mRefresher.shouldRefresh(mSource1, "refreshed"));
67        assertTrue(mRefresher.shouldRefresh(mSource1, "not_refreshed"));
68    }
69
70    public void testRefreshNull() {
71        SuggestionData shortcut1 = new SuggestionData(mSource1)
72                .setShortcutId("null_refresh");
73        ListSuggestionCursor shortcuts = new ListSuggestionCursor(mQuery, shortcut1);
74        mRefresher.refresh(shortcuts, mListener);
75        assertTrue(mExecutor.runNext());
76        assertEquals(mSource1, mRefreshedSource);
77        assertEquals("null_refresh", mRefreshedShortcutId);
78        assertEquals(null, mRefreshedCursor);
79    }
80
81    public void testRefreshEmpty() {
82        SuggestionData shortcut1 = new SuggestionData(mSource1)
83                .setShortcutId("empty_refresh");
84        ListSuggestionCursor shortcuts = new ListSuggestionCursor(mQuery, shortcut1);
85        mRefresher.refresh(shortcuts, mListener);
86        assertTrue(mExecutor.runNext());
87        assertEquals(mSource1, mRefreshedSource);
88        assertEquals("empty_refresh", mRefreshedShortcutId);
89        assertEquals(null, mRefreshedCursor);
90    }
91
92    public void testRefreshSuccess() {
93        SuggestionData shortcut1 = new SuggestionData(mSource1)
94                .setShortcutId("success");
95        ListSuggestionCursor shortcuts = new ListSuggestionCursor(mQuery, shortcut1);
96        mRefresher.refresh(shortcuts, mListener);
97        assertTrue(mExecutor.runNext());
98        assertEquals(mSource1, mRefreshedSource);
99        assertEquals("success", mRefreshedShortcutId);
100        SuggestionCursor expected =
101                SuggestionCursorUtil.slice(mSource1.getSuggestions(mQuery, 1, true), 0, 1);
102        SuggestionCursorUtil.assertSameSuggestions(expected, mRefreshedCursor);
103    }
104
105    private class RefreshListener implements ShortcutRefresher.Listener {
106        public void onShortcutRefreshed(Source source, String shortcutId,
107                SuggestionCursor refreshed) {
108            mRefreshedSource = source;
109            mRefreshedShortcutId = shortcutId;
110            mRefreshedCursor = refreshed;
111        }
112    }
113
114    private class MockRefreshSource extends MockSource {
115        public MockRefreshSource(String name) {
116            super(name);
117        }
118
119        @Override
120        public SuggestionCursor refreshShortcut(String shortcutId, String extraData) {
121            if ("null_refresh".equals(shortcutId)) {
122                return null;
123            } else if ("empty_refresh".equals(shortcutId)) {
124                return new ListSuggestionCursor(mQuery);
125            } else {
126                 SuggestionCursor suggestions = getSuggestions(mQuery, 1, true);
127                 return SuggestionCursorUtil.slice(suggestions, 0, 1);
128            }
129        }
130    }
131
132}
133