19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/*
29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project
39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License.
69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at
79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and
149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License.
159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.widget;
189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
19d4a4729c0cac582a2dcec7c8cfb316b81885a0f0Tom Taylorimport com.android.common.ArrayListCursor;
209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport com.google.android.collect.Lists;
219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.Context;
239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.database.Cursor;
249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.test.AndroidTestCase;
259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.test.suitebuilder.annotation.SmallTest;
269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.ArrayList;
289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.Random;
299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/**
319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This is a series of tests of basic API contracts for SimpleCursorAdapter.  It is
329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * incomplete and can use work.
339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * NOTE:  This contract holds for underlying cursor types too and these should
359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * be extracted into a set of tests that can be run on any descendant of CursorAdapter.
369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class SimpleCursorAdapterTest extends AndroidTestCase {
389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    String[] mFrom;
409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    int[] mTo;
419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    int mLayout;
429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    Context mContext;
439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ArrayList<ArrayList> mData2x2;
459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    Cursor mCursor2x2;
469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Set up basic columns and cursor for the tests
499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @Override
519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void setUp() throws Exception {
529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        super.setUp();
539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // all the pieces needed for the various tests
559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mFrom = new String[]{"Column1", "Column2"};
569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mTo = new int[]{com.android.internal.R.id.text1, com.android.internal.R.id.text2};
579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mLayout = com.android.internal.R.layout.simple_list_item_2;
589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mContext = getContext();
599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // raw data for building a basic test cursor
619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mData2x2 = createTestList(2, 2);
629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mCursor2x2 = new ArrayListCursor(mFrom, mData2x2);
639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Borrowed from CursorWindowTest.java
679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private ArrayList<ArrayList> createTestList(int rows, int cols) {
699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        ArrayList<ArrayList> list = Lists.newArrayList();
709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Random generator = new Random();
719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        for (int i = 0; i < rows; i++) {
739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            ArrayList<Integer> col = Lists.newArrayList();
749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            list.add(col);
759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            for (int j = 0; j < cols; j++) {
769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                // generate random number
779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                Integer r = generator.nextInt();
789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                col.add(r);
799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return list;
829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Test creating with a live cursor
869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @SmallTest
889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void testCreateLive() {
899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        SimpleCursorAdapter ca = new SimpleCursorAdapter(mContext, mLayout, mCursor2x2, mFrom, mTo);
909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // Now see if we can pull 2 rows from the adapter
929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        assertEquals(2, ca.getCount());
939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Test creating with a null cursor
979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @SmallTest
999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void testCreateNull() {
1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        SimpleCursorAdapter ca = new SimpleCursorAdapter(mContext, mLayout, null, mFrom, mTo);
1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // The adapter should report zero rows
1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        assertEquals(0, ca.getCount());
1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Test changeCursor() with live cursor
1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @SmallTest
1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void testChangeCursorLive() {
1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        SimpleCursorAdapter ca = new SimpleCursorAdapter(mContext, mLayout, mCursor2x2, mFrom, mTo);
1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // Now see if we can pull 2 rows from the adapter
1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        assertEquals(2, ca.getCount());
1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // now put in a different cursor (5 rows)
1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        ArrayList<ArrayList> data2 = createTestList(5, 2);
1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Cursor c2 = new ArrayListCursor(mFrom, data2);
1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        ca.changeCursor(c2);
1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // Now see if we can pull 5 rows from the adapter
1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        assertEquals(5, ca.getCount());
1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Test changeCursor() with null cursor
1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @SmallTest
1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void testChangeCursorNull() {
1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        SimpleCursorAdapter ca = new SimpleCursorAdapter(mContext, mLayout, mCursor2x2, mFrom, mTo);
1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // Now see if we can pull 2 rows from the adapter
1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        assertEquals(2, ca.getCount());
1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // now put in null
1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        ca.changeCursor(null);
1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // The adapter should report zero rows
1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        assertEquals(0, ca.getCount());
1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Test changeCursor() with differing column layout.  This confirms that the Adapter can
1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * deal with cursors that have the same essential data (as defined by the original mFrom
1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * array) but it's OK if the physical structure of the cursor changes (columns rearranged).
1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @SmallTest
1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void testChangeCursorColumns() {
1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        TestSimpleCursorAdapter ca = new TestSimpleCursorAdapter(mContext, mLayout, mCursor2x2,
1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mFrom, mTo);
1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // check columns of original - mFrom and mTo should line up
1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int[] columns = ca.getConvertedFrom();
1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        assertEquals(columns[0], 0);
1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        assertEquals(columns[1], 1);
1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // Now make a new cursor with similar data but rearrange the columns
1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        String[] swappedFrom = new String[]{"Column2", "Column1"};
1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Cursor c2 = new ArrayListCursor(swappedFrom, mData2x2);
1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        ca.changeCursor(c2);
1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        assertEquals(2, ca.getCount());
1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // check columns to see if rearrangement tracked (should be swapped now)
1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        columns = ca.getConvertedFrom();
1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        assertEquals(columns[0], 1);
1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        assertEquals(columns[1], 0);
1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Test that you can safely construct with a null cursor *and* null to/from arrays.
1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * This is new functionality added in 12/2008.
1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @SmallTest
1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void testNullConstructor() {
1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        SimpleCursorAdapter ca = new SimpleCursorAdapter(mContext, mLayout, null, null, null);
1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        assertEquals(0, ca.getCount());
1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Test going from a null cursor to a non-null cursor *and* setting the to/from arrays
1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * This is new functionality added in 12/2008.
1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @SmallTest
1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void testChangeNullToMapped() {
1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        TestSimpleCursorAdapter ca = new TestSimpleCursorAdapter(mContext, mLayout, null, null, null);
1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        assertEquals(0, ca.getCount());
1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        ca.changeCursorAndColumns(mCursor2x2, mFrom, mTo);
1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        assertEquals(2, ca.getCount());
1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // check columns of original - mFrom and mTo should line up
1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int[] columns = ca.getConvertedFrom();
1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        assertEquals(2, columns.length);
1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        assertEquals(0, columns[0]);
1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        assertEquals(1, columns[1]);
1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int[] viewIds = ca.getTo();
1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        assertEquals(2, viewIds.length);
1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        assertEquals(com.android.internal.R.id.text1, viewIds[0]);
1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        assertEquals(com.android.internal.R.id.text2, viewIds[1]);
2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Test going from one mapping to a different mapping
2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * This is new functionality added in 12/2008.
2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @SmallTest
2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void testChangeMapping() {
2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        TestSimpleCursorAdapter ca = new TestSimpleCursorAdapter(mContext, mLayout, mCursor2x2,
2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mFrom, mTo);
2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        assertEquals(2, ca.getCount());
2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // Now create a new configuration with same cursor and just one column mapped
2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        String[] singleFrom = new String[]{"Column1"};
2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int[] singleTo = new int[]{com.android.internal.R.id.text1};
2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        ca.changeCursorAndColumns(mCursor2x2, singleFrom, singleTo);
2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // And examine the results, make sure they're still consistent
2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int[] columns = ca.getConvertedFrom();
2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        assertEquals(1, columns.length);
2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        assertEquals(0, columns[0]);
2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int[] viewIds = ca.getTo();
2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        assertEquals(1, viewIds.length);
2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        assertEquals(com.android.internal.R.id.text1, viewIds[0]);
2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // And again, same cursor, different map
2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        singleFrom = new String[]{"Column2"};
2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        singleTo = new int[]{com.android.internal.R.id.text2};
2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        ca.changeCursorAndColumns(mCursor2x2, singleFrom, singleTo);
2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // And examine the results, make sure they're still consistent
2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        columns = ca.getConvertedFrom();
2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        assertEquals(1, columns.length);
2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        assertEquals(1, columns[0]);
2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        viewIds = ca.getTo();
2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        assertEquals(1, viewIds.length);
2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        assertEquals(com.android.internal.R.id.text2, viewIds[0]);
2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * This is simply a way to sneak a look at the protected mFrom() array.  A more API-
2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * friendly way to do this would be to mock out a View and a ViewBinder and exercise
2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * it via those seams.
2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private static class TestSimpleCursorAdapter extends SimpleCursorAdapter {
2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public TestSimpleCursorAdapter(Context context, int layout, Cursor c,
2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                String[] from, int[] to) {
2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            super(context, layout, c, from, to);
2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int[] getConvertedFrom() {
2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return mFrom;
2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int[] getTo() {
2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return mTo;
2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
260