Home | History | Annotate | Download | only in cts
      1 /*
      2  * Copyright (C) 2008 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 
     17 package android.widget.cts;
     18 
     19 import static junit.framework.Assert.assertTrue;
     20 
     21 import static org.junit.Assert.assertEquals;
     22 import static org.junit.Assert.assertFalse;
     23 import static org.junit.Assert.assertNotNull;
     24 import static org.junit.Assert.assertNull;
     25 import static org.junit.Assert.assertSame;
     26 
     27 import android.content.Context;
     28 import android.database.Cursor;
     29 import android.database.MatrixCursor;
     30 import android.support.test.InstrumentationRegistry;
     31 import android.support.test.annotation.UiThreadTest;
     32 import android.support.test.filters.MediumTest;
     33 import android.support.test.runner.AndroidJUnit4;
     34 import android.view.LayoutInflater;
     35 import android.view.View;
     36 import android.view.ViewGroup;
     37 import android.widget.ResourceCursorAdapter;
     38 
     39 import org.junit.Before;
     40 import org.junit.Test;
     41 import org.junit.runner.RunWith;
     42 
     43 /**
     44  * Test {@link ResourceCursorAdapter}.
     45  */
     46 @MediumTest
     47 @RunWith(AndroidJUnit4.class)
     48 public class ResourceCursorAdapterTest {
     49     private ResourceCursorAdapter mResourceCursorAdapter;
     50 
     51     private Context mContext;
     52 
     53     private ViewGroup mParent;
     54 
     55     private Cursor mCursor;
     56 
     57     @Before
     58     public void setup() {
     59         mContext = InstrumentationRegistry.getTargetContext();
     60         LayoutInflater layoutInflater = (LayoutInflater) mContext.getSystemService(
     61                 Context.LAYOUT_INFLATER_SERVICE);
     62         mParent = (ViewGroup) layoutInflater.inflate(R.layout.cursoradapter_host, null);
     63         mCursor = createTestCursor(3, 3);
     64     }
     65 
     66     @UiThreadTest
     67     @Test
     68     public void testConstructor() {
     69         MockResourceCursorAdapter adapter = new MockResourceCursorAdapter(mContext, -1, null);
     70         // the default is true
     71         assertTrue(adapter.isAutoRequery());
     72         assertNull(adapter.getCursor());
     73 
     74         adapter = new MockResourceCursorAdapter(mContext, R.layout.cursoradapter_item0, mCursor);
     75         // the default is true
     76         assertTrue(adapter.isAutoRequery());
     77         assertSame(mCursor, adapter.getCursor());
     78 
     79         adapter = new MockResourceCursorAdapter(mContext,
     80                 R.layout.cursoradapter_item0, mCursor, false);
     81         assertFalse(adapter.isAutoRequery());
     82         assertSame(mCursor, adapter.getCursor());
     83     }
     84 
     85     @UiThreadTest
     86     @Test
     87     public void testSetViewResource() {
     88         mResourceCursorAdapter = new MockResourceCursorAdapter(mContext,
     89                 R.layout.cursoradapter_item0, mCursor);
     90 
     91         View result = mResourceCursorAdapter.newView(null, null, mParent);
     92         assertNotNull(result);
     93         assertEquals(R.id.cursorAdapter_item0, result.getId());
     94 
     95         // set the new view resource
     96         mResourceCursorAdapter.setViewResource(R.layout.cursoradapter_item1);
     97         result = mResourceCursorAdapter.newView(null, null, mParent);
     98         assertNotNull(result);
     99         assertEquals(R.id.cursorAdapter_item1, result.getId());
    100     }
    101 
    102     @UiThreadTest
    103     @Test
    104     public void testSetDropDownViewResource() {
    105         mResourceCursorAdapter = new MockResourceCursorAdapter(mContext,
    106                 R.layout.cursoradapter_item0, mCursor);
    107 
    108         View result = mResourceCursorAdapter.newDropDownView(null, null, mParent);
    109         assertNotNull(result);
    110         // the original dropdown'layout is set in constructor
    111         assertEquals(R.id.cursorAdapter_item0, result.getId());
    112 
    113         // set the dropdown to new layout
    114         mResourceCursorAdapter.setDropDownViewResource(R.layout.cursoradapter_item1);
    115 
    116         // the dropdown changes
    117         result = mResourceCursorAdapter.newDropDownView(null, null, mParent);
    118         assertNotNull(result);
    119         assertEquals(R.id.cursorAdapter_item1, result.getId());
    120 
    121         // the view does not change
    122         result = mResourceCursorAdapter.newView(null, null, mParent);
    123         assertNotNull(result);
    124         assertEquals(R.id.cursorAdapter_item0, result.getId());
    125     }
    126 
    127     // parameters Context and Cursor are never read in the method
    128     @UiThreadTest
    129     @Test
    130     public void testNewDropDownView() {
    131         mResourceCursorAdapter = new MockResourceCursorAdapter(mContext,
    132                 R.layout.cursoradapter_item0, mCursor);
    133         View result = mResourceCursorAdapter.newDropDownView(null, null, mParent);
    134         assertNotNull(result);
    135         assertEquals(R.id.cursorAdapter_item0, result.getId());
    136 
    137         mResourceCursorAdapter = new MockResourceCursorAdapter(mContext,
    138                 R.layout.cursoradapter_item1, mCursor);
    139         result = mResourceCursorAdapter.newDropDownView(null, null, mParent);
    140         assertNotNull(result);
    141         assertEquals(R.id.cursorAdapter_item1, result.getId());
    142     }
    143 
    144     // The parameters Context and Cursor are never read in the method
    145     @UiThreadTest
    146     @Test
    147     public void testNewView() {
    148         mResourceCursorAdapter = new MockResourceCursorAdapter(mContext,
    149                 R.layout.cursoradapter_item0, mCursor);
    150         View result = mResourceCursorAdapter.newView(null, null, mParent);
    151         assertNotNull(result);
    152         assertEquals(R.id.cursorAdapter_item0, result.getId());
    153 
    154         mResourceCursorAdapter = new MockResourceCursorAdapter(mContext,
    155                 R.layout.cursoradapter_item1, mCursor);
    156         result = mResourceCursorAdapter.newView(null, null, mParent);
    157         assertNotNull(result);
    158         assertEquals(R.id.cursorAdapter_item1, result.getId());
    159     }
    160 
    161     /**
    162      * Creates the test cursor.
    163      *
    164      * @param colCount the column count
    165      * @param rowCount the row count
    166      * @return the cursor
    167      */
    168     @SuppressWarnings("unchecked")
    169     private Cursor createTestCursor(int colCount, int rowCount) {
    170         String[] columns = new String[colCount + 1];
    171         for (int i = 0; i < colCount; i++) {
    172             columns[i] = "column" + i;
    173         }
    174         columns[colCount] = "_id";
    175 
    176         MatrixCursor cursor = new MatrixCursor(columns, rowCount);
    177         Object[] row = new Object[colCount + 1];
    178         for (int i = 0; i < rowCount; i++) {
    179             for (int j = 0; j < colCount; j++) {
    180                 row[j] = "" + i + "" + j;
    181             }
    182             row[colCount] = i;
    183             cursor.addRow(row);
    184         }
    185         return cursor;
    186     }
    187 
    188     private static class MockResourceCursorAdapter extends ResourceCursorAdapter {
    189         private final boolean mAutoRequery;
    190 
    191         public MockResourceCursorAdapter(Context context, int layout, Cursor c) {
    192             super(context, layout, c);
    193 
    194             // Default is true.
    195             mAutoRequery = true;
    196         }
    197 
    198         public MockResourceCursorAdapter(Context context, int layout,
    199                 Cursor c, boolean autoRequery) {
    200             super(context, layout, c, autoRequery);
    201 
    202             mAutoRequery = autoRequery;
    203         }
    204 
    205         @Override
    206         public void bindView(View view, Context context, Cursor cursor) {
    207         }
    208 
    209         public boolean isAutoRequery() {
    210             return mAutoRequery;
    211         }
    212     }
    213 }
    214