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
1972f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringertimport android.content.Context;
2072f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringertimport android.content.Intent;
2172f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringertimport android.graphics.drawable.Drawable;
2272f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringertimport android.net.Uri;
2372f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringertimport android.os.Bundle;
2472f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringertimport android.test.AndroidTestCase;
2572f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringertimport android.test.MoreAsserts;
2672f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringertimport android.test.suitebuilder.annotation.LargeTest;
2772f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert
2872f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringertimport java.util.concurrent.Executor;
2972f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringertimport java.util.concurrent.Executors;
3072f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert
3172f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert/**
3272f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert * Tests for {@link MultiSourceCorpus}.
3372f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert */
3472f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert@LargeTest
3572f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringertpublic class MultiSourceCorpusTest extends AndroidTestCase {
3672f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert
3772f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert    protected MultiSourceCorpus mCorpus;
3872f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert
3972f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert    @Override
4072f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert    protected void setUp() throws Exception {
4172f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert        super.setUp();
4272f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert
4396c7058210699c82445169048b7c0fdfb16f59eeBjorn Bringert        Config config = new Config(getContext());
449a3f0f73437fad172a510e85064fc300523476ecBjorn Bringert        // Using a single thread to make the test deterministic
459a3f0f73437fad172a510e85064fc300523476ecBjorn Bringert        Executor executor = Executors.newSingleThreadExecutor();
4696c7058210699c82445169048b7c0fdfb16f59eeBjorn Bringert        mCorpus = new SkeletonMultiSourceCorpus(getContext(), config, executor,
4772f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert                MockSource.SOURCE_1, MockSource.SOURCE_2);
4872f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert    }
4972f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert
5072f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert    public void testGetSources() {
5172f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert        MoreAsserts.assertContentsInOrder(mCorpus.getSources(),
5272f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert                MockSource.SOURCE_1, MockSource.SOURCE_2);
5372f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert    }
5472f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert
5572f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert    public void testGetSuggestions() {
5672f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert        ListSuggestionCursor expected = concatSuggestionCursors("foo",
57cd1e3ba5f7c3f5242345ff6f674281e3d6366e24Mathew Inwood                MockSource.SOURCE_1.getSuggestions("foo", 50, false),
58cd1e3ba5f7c3f5242345ff6f674281e3d6366e24Mathew Inwood                MockSource.SOURCE_2.getSuggestions("foo", 50, false));
59cd1e3ba5f7c3f5242345ff6f674281e3d6366e24Mathew Inwood        CorpusResult observed = mCorpus.getSuggestions("foo", 50, false);
6072f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert        SuggestionCursorUtil.assertSameSuggestions(expected, observed);
6172f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert    }
6272f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert
63f3f70e5ae88f06ff6dabdec9e7c71a19ca1e7108Bjorn Bringert    public void testIncludeInAll() {
64f3f70e5ae88f06ff6dabdec9e7c71a19ca1e7108Bjorn Bringert        assertTrue(mCorpus.includeInAll());
65f3f70e5ae88f06ff6dabdec9e7c71a19ca1e7108Bjorn Bringert    }
66f3f70e5ae88f06ff6dabdec9e7c71a19ca1e7108Bjorn Bringert
6772f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert    private static ListSuggestionCursor concatSuggestionCursors(String query,
6872f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert            SuggestionCursor... cursors) {
6972f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert        ListSuggestionCursor out = new ListSuggestionCursor("foo");
7072f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert        for (SuggestionCursor cursor : cursors) {
7172f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert            int count = cursor.getCount();
7272f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert            for (int i = 0; i < count; i++) {
7372f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert                out.add(new SuggestionPosition(cursor, i));
7472f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert            }
7572f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert        }
7672f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert        return out;
7772f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert    }
7872f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert
7972f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert    private static class SkeletonMultiSourceCorpus extends MultiSourceCorpus {
8072f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert
8196c7058210699c82445169048b7c0fdfb16f59eeBjorn Bringert        public SkeletonMultiSourceCorpus(Context context, Config config, Executor executor,
8296c7058210699c82445169048b7c0fdfb16f59eeBjorn Bringert                Source... sources) {
8396c7058210699c82445169048b7c0fdfb16f59eeBjorn Bringert            super(context, config, executor, sources);
8472f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert        }
8572f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert
8672f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert        public Intent createSearchIntent(String query, Bundle appData) {
8772f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert            return null;
8872f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert        }
8972f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert
9072f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert        public Intent createVoiceSearchIntent(Bundle appData) {
9172f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert            return null;
9272f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert        }
9372f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert
9472f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert        public Drawable getCorpusIcon() {
9572f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert            return null;
9672f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert        }
9772f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert
9872f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert        public Uri getCorpusIconUri() {
9972f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert            return null;
10072f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert        }
10172f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert
10272f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert        public CharSequence getHint() {
10372f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert            return null;
10472f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert        }
10572f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert
10672f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert        public CharSequence getLabel() {
10772f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert            return null;
10872f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert        }
10972f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert
110cd1e3ba5f7c3f5242345ff6f674281e3d6366e24Mathew Inwood        @Override
11172f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert        public int getQueryThreshold() {
11272f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert            return 0;
11372f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert        }
11472f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert
11572f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert        public CharSequence getSettingsDescription() {
11672f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert            return null;
11772f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert        }
11872f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert
11972f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert        public boolean isWebCorpus() {
12072f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert            return false;
12172f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert        }
12272f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert
123cd1e3ba5f7c3f5242345ff6f674281e3d6366e24Mathew Inwood        @Override
12472f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert        public boolean queryAfterZeroResults() {
12572f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert            return false;
12672f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert        }
12772f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert
128cd1e3ba5f7c3f5242345ff6f674281e3d6366e24Mathew Inwood        @Override
12972f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert        public boolean voiceSearchEnabled() {
13072f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert            return false;
13172f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert        }
13272f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert
13372f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert        public String getName() {
13472f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert            return "SkeletonMultiSourceCorpus";
13572f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert        }
13672f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert
13772f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert    }
13872f9b08ce84d0e13daf2d1c112d4e6d1d3ada045Bjorn Bringert}
139