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