package com.example.wordbook.provider; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.test.AndroidTestCase; import android.test.RenamingDelegatingContext; /** * DB管理クラステストクラス */ public class WBHelperTest extends AndroidTestCase { /** テスト用接頭辞 */ private static final String TEST_PREFIX = "test_"; /** WBHelper */ private WBHelper mHelper; /* * (非 Javadoc) * * @see android.test.AndroidTestCase#setUp() */ @Override protected void setUp() throws Exception { super.setUp(); Context context = new RenamingDelegatingContext(getContext(), TEST_PREFIX); mHelper = WBHelper.getInstance(context); // クリア SQLiteDatabase db = mHelper.getWritableDatabase(); db.delete(WBData.TABLE_NAME_INFO, null, null); db.close(); } /* * (非 Javadoc) * * @see android.test.AndroidTestCase#tearDown() */ @Override protected void tearDown() throws Exception { super.tearDown(); if (mHelper != null) { mHelper.close(); } mHelper = null; } /** * testGetInstance() */ public void testGetInstance() { // 同一のインスタンスであること assertSame(mHelper, WBHelper.getInstance(getContext())); } /** * testOnCreate() */ public void testOnCreate() { SQLiteDatabase db = mHelper.getWritableDatabase(); // 例外が発生しないこと try { mHelper.onCreate(db); } catch (Exception e) { fail(); } db.close(); } /** * testOnUpgrade() */ public void testOnUpgrade() { SQLiteDatabase db = mHelper.getWritableDatabase(); // 例外が発生しないこと try { mHelper.onUpgrade(db, 1, 2); } catch (Exception e) { fail(); } db.close(); } /** * testInsert() */ public void testInsert() { final int DATA_NUM = 8; ContentValues values = new ContentValues(); values.put(WBData.InfoColumns.INFO_FILE, 0); // 固定 values.put(WBData.InfoColumns.INFO_NUM, 1); values.put(WBData.InfoColumns.INFO_STAT, 2); values.put(WBData.InfoColumns.INFO_LEVEL, 3); values.put(WBData.InfoColumns.INFO_FLAG, 4); values.put(WBData.InfoColumns.INFO_OK, 5); values.put(WBData.InfoColumns.INFO_NG, 6); values.put(WBData.InfoColumns.INFO_QUESTION, "Q"); values.put(WBData.InfoColumns.INFO_ANSWER, "A"); values.put(WBData.InfoColumns.INFO_DATA1, "D1"); values.put(WBData.InfoColumns.INFO_DATA2, "D2"); SQLiteDatabase db = mHelper.getWritableDatabase(); // 挿入行IDの初期値 long id = db.insert(WBData.TABLE_NAME_INFO, null, values); for (int i = 1; i < DATA_NUM; i++) { // 戻り値は挿入行ID long id_new = db.insert(WBData.TABLE_NAME_INFO, null, values); assertEquals(++id, id_new); } // 全項目 String sel = null; String[] arg = null; Cursor c = db.query(WBData.TABLE_NAME_INFO, null, sel, arg, null, null, null); assertEquals(DATA_NUM, c.getCount()); db.close(); } /** * testDelete() */ public void testDelete() { // 偶数項目数=奇数項目数 final int DATA_NUM = 8; ContentValues[] array = new ContentValues[DATA_NUM * 2]; for (int i = 0; i < array.length; i++) { ContentValues values = new ContentValues(); values.put(WBData.InfoColumns.INFO_FILE, i); values.put(WBData.InfoColumns.INFO_NUM, i % 2); // 0 or 1 values.put(WBData.InfoColumns.INFO_STAT, 2); values.put(WBData.InfoColumns.INFO_LEVEL, 3); values.put(WBData.InfoColumns.INFO_FLAG, 4); values.put(WBData.InfoColumns.INFO_OK, 5); values.put(WBData.InfoColumns.INFO_NG, 6); values.put(WBData.InfoColumns.INFO_QUESTION, "Q"); values.put(WBData.InfoColumns.INFO_ANSWER, "A"); values.put(WBData.InfoColumns.INFO_DATA1, "D1"); values.put(WBData.InfoColumns.INFO_DATA2, "D2"); array[i] = values; } SQLiteDatabase db = mHelper.getWritableDatabase(); // 初期化 for (int i = 0; i < array.length; i++) { db.insert(WBData.TABLE_NAME_INFO, null, array[i]); } // 偶数項目 String sel0 = WBData.InfoColumns.INFO_NUM + "=?"; String[] arg0 = new String[] { "0" }; assertEquals(DATA_NUM, db.delete(WBData.TABLE_NAME_INFO, sel0, arg0)); // 奇数項目 String sel1 = WBData.InfoColumns.INFO_NUM + "=?"; String[] arg1 = new String[] { "1" }; assertEquals(DATA_NUM, db.delete(WBData.TABLE_NAME_INFO, sel1, arg1)); // 非存在項目 String sel2 = WBData.InfoColumns.INFO_NUM + "=?"; String[] arg2 = new String[] { "2" }; assertEquals(0, db.delete(WBData.TABLE_NAME_INFO, sel2, arg2)); // 初期化 for (int i = 0; i < array.length; i++) { db.insert(WBData.TABLE_NAME_INFO, null, array[i]); } // 全項目 String sel3 = null; String[] arg3 = null; assertEquals(DATA_NUM * 2, db.delete(WBData.TABLE_NAME_INFO, sel3, arg3)); db.close(); } /** * testUpdate() */ public void testUpdate() { // 偶数項目数=奇数項目数 final int DATA_NUM = 8; ContentValues[] array = new ContentValues[DATA_NUM * 2]; for (int i = 0; i < array.length; i++) { ContentValues values = new ContentValues(); values.put(WBData.InfoColumns.INFO_FILE, i); values.put(WBData.InfoColumns.INFO_NUM, i % 2); // 0 or 1 values.put(WBData.InfoColumns.INFO_STAT, 2); values.put(WBData.InfoColumns.INFO_LEVEL, 3); values.put(WBData.InfoColumns.INFO_FLAG, 4); values.put(WBData.InfoColumns.INFO_OK, 5); values.put(WBData.InfoColumns.INFO_NG, 6); values.put(WBData.InfoColumns.INFO_QUESTION, "Q"); values.put(WBData.InfoColumns.INFO_ANSWER, "A"); values.put(WBData.InfoColumns.INFO_DATA1, "D1"); values.put(WBData.InfoColumns.INFO_DATA2, "D2"); array[i] = values; } // 更新項目 ContentValues update = new ContentValues(); update.put(WBData.InfoColumns.INFO_FILE, 99); // 範囲外指定 update.put(WBData.InfoColumns.INFO_NUM, 99); // 範囲外指定 update.put(WBData.InfoColumns.INFO_STAT, 2); update.put(WBData.InfoColumns.INFO_LEVEL, 3); update.put(WBData.InfoColumns.INFO_FLAG, 4); update.put(WBData.InfoColumns.INFO_OK, 5); update.put(WBData.InfoColumns.INFO_NG, 6); update.put(WBData.InfoColumns.INFO_QUESTION, "Q"); update.put(WBData.InfoColumns.INFO_ANSWER, "A"); update.put(WBData.InfoColumns.INFO_DATA1, "D1"); update.put(WBData.InfoColumns.INFO_DATA2, "D2"); SQLiteDatabase db = mHelper.getWritableDatabase(); // 初期化 for (int i = 0; i < array.length; i++) { db.insert(WBData.TABLE_NAME_INFO, null, array[i]); } // 偶数項目 String sel0 = WBData.InfoColumns.INFO_NUM + "=?"; String[] arg0 = new String[] { "0" }; assertEquals(DATA_NUM, db.update(WBData.TABLE_NAME_INFO, update, sel0, arg0)); // 奇数項目 String sel1 = WBData.InfoColumns.INFO_NUM + "=?"; String[] arg1 = new String[] { "1" }; assertEquals(DATA_NUM, db.update(WBData.TABLE_NAME_INFO, update, sel1, arg1)); // 非存在項目 String sel2 = WBData.InfoColumns.INFO_NUM + "=?"; String[] arg2 = new String[] { "2" }; assertEquals(0, db.update(WBData.TABLE_NAME_INFO, update, sel2, arg2)); // 全項目 String sel3 = null; String[] arg3 = null; assertEquals(DATA_NUM * 2, db.update(WBData.TABLE_NAME_INFO, update, sel3, arg3)); db.close(); } /** * testQuery() */ public void testQuery() { // 偶数項目数=奇数項目数 final int DATA_NUM = 8; ContentValues[] array = new ContentValues[DATA_NUM * 2]; for (int i = 0; i < array.length; i++) { ContentValues values = new ContentValues(); values.put(WBData.InfoColumns.INFO_FILE, i); values.put(WBData.InfoColumns.INFO_NUM, i % 2); // 0 or 1 values.put(WBData.InfoColumns.INFO_STAT, 2); values.put(WBData.InfoColumns.INFO_LEVEL, 3); values.put(WBData.InfoColumns.INFO_FLAG, 4); values.put(WBData.InfoColumns.INFO_OK, 5); values.put(WBData.InfoColumns.INFO_NG, 6); values.put(WBData.InfoColumns.INFO_QUESTION, "Q"); values.put(WBData.InfoColumns.INFO_ANSWER, "A"); values.put(WBData.InfoColumns.INFO_DATA1, "D1"); values.put(WBData.InfoColumns.INFO_DATA2, "D2"); array[i] = values; } // 確認対象キー String k0 = WBData.InfoColumns.INFO_FILE; String k1 = WBData.InfoColumns.INFO_NUM; String k2 = WBData.InfoColumns.INFO_STAT; String k3 = WBData.InfoColumns.INFO_LEVEL; String k4 = WBData.InfoColumns.INFO_FLAG; String k5 = WBData.InfoColumns.INFO_OK; String k6 = WBData.InfoColumns.INFO_NG; String ks0 = WBData.InfoColumns.INFO_QUESTION; String ks1 = WBData.InfoColumns.INFO_ANSWER; String ks2 = WBData.InfoColumns.INFO_DATA1; String ks3 = WBData.InfoColumns.INFO_DATA2; SQLiteDatabase db = mHelper.getWritableDatabase(); // 初期化 for (int i = 0; i < array.length; i++) { db.insert(WBData.TABLE_NAME_INFO, null, array[i]); } // 偶数項目取得 String sel0 = WBData.InfoColumns.INFO_NUM + "=?"; String[] arg0 = new String[] { "0" }; Cursor c0 = db.query(WBData.TABLE_NAME_INFO, null, sel0, arg0, null, null, null); // 項目数一致 assertEquals(DATA_NUM, c0.getCount()); for (int i = 0; i < array.length; i += 2) { // 取得 assertTrue(c0.moveToNext()); // カラム数一致(_id追加) assertEquals(array[i].size() + 1, c0.getColumnCount()); // 内容一致 assertEquals(array[i].get(k0), c0.getInt(c0.getColumnIndex(k0))); assertEquals(array[i].get(k1), c0.getInt(c0.getColumnIndex(k1))); assertEquals(array[i].get(k2), c0.getInt(c0.getColumnIndex(k2))); assertEquals(array[i].get(k3), c0.getInt(c0.getColumnIndex(k3))); assertEquals(array[i].get(k4), c0.getInt(c0.getColumnIndex(k4))); assertEquals(array[i].get(k5), c0.getInt(c0.getColumnIndex(k5))); assertEquals(array[i].get(k6), c0.getInt(c0.getColumnIndex(k6))); assertEquals(array[i].get(ks0), c0.getString(c0.getColumnIndex(ks0))); assertEquals(array[i].get(ks1), c0.getString(c0.getColumnIndex(ks1))); assertEquals(array[i].get(ks2), c0.getString(c0.getColumnIndex(ks2))); assertEquals(array[i].get(ks3), c0.getString(c0.getColumnIndex(ks3))); } // 取得不可 assertFalse(c0.moveToNext()); // 奇数項目取得 String sel1 = WBData.InfoColumns.INFO_NUM + "=?"; String[] arg1 = new String[] { "1" }; Cursor c1 = db.query(WBData.TABLE_NAME_INFO, null, sel1, arg1, null, null, null); // 項目数一致 assertEquals(DATA_NUM, c1.getCount()); for (int i = 1; i < array.length; i += 2) { // 取得 assertTrue(c1.moveToNext()); // カラム数一致(_id追加) assertEquals(array[i].size() + 1, c1.getColumnCount()); // 内容一致 assertEquals(array[i].get(k0), c1.getInt(c1.getColumnIndex(k0))); assertEquals(array[i].get(k1), c1.getInt(c1.getColumnIndex(k1))); assertEquals(array[i].get(k2), c1.getInt(c1.getColumnIndex(k2))); assertEquals(array[i].get(k3), c1.getInt(c1.getColumnIndex(k3))); assertEquals(array[i].get(k4), c1.getInt(c1.getColumnIndex(k4))); assertEquals(array[i].get(k5), c1.getInt(c1.getColumnIndex(k5))); assertEquals(array[i].get(k6), c1.getInt(c1.getColumnIndex(k6))); assertEquals(array[i].get(ks0), c1.getString(c1.getColumnIndex(ks0))); assertEquals(array[i].get(ks1), c1.getString(c1.getColumnIndex(ks1))); assertEquals(array[i].get(ks2), c1.getString(c1.getColumnIndex(ks2))); assertEquals(array[i].get(ks3), c1.getString(c1.getColumnIndex(ks3))); } // 取得不可 assertFalse(c1.moveToNext()); // 非存在項目取得 String sel2 = WBData.InfoColumns.INFO_NUM + "=?"; String[] arg2 = new String[] { "2" }; Cursor c2 = db.query(WBData.TABLE_NAME_INFO, null, sel2, arg2, null, null, null); // 項目数一致 assertEquals(0, c2.getCount()); // 取得不可 assertFalse(c2.moveToNext()); // 全項目取得 String sel3 = null; String[] arg3 = null; Cursor c3 = db.query(WBData.TABLE_NAME_INFO, null, sel3, arg3, null, null, null); // 項目数一致 assertEquals(DATA_NUM * 2, c3.getCount()); for (int i = 0; i < array.length; i++) { // 取得 assertTrue(c3.moveToNext()); // カラム数一致(_id追加) assertEquals(array[i].size() + 1, c3.getColumnCount()); // 内容一致 assertEquals(array[i].get(k0), c3.getInt(c3.getColumnIndex(k0))); assertEquals(array[i].get(k1), c3.getInt(c3.getColumnIndex(k1))); assertEquals(array[i].get(k2), c3.getInt(c3.getColumnIndex(k2))); assertEquals(array[i].get(k3), c3.getInt(c3.getColumnIndex(k3))); assertEquals(array[i].get(k4), c3.getInt(c3.getColumnIndex(k4))); assertEquals(array[i].get(k5), c3.getInt(c3.getColumnIndex(k5))); assertEquals(array[i].get(k6), c3.getInt(c3.getColumnIndex(k6))); assertEquals(array[i].get(ks0), c3.getString(c3.getColumnIndex(ks0))); assertEquals(array[i].get(ks1), c3.getString(c3.getColumnIndex(ks1))); assertEquals(array[i].get(ks2), c3.getString(c3.getColumnIndex(ks2))); assertEquals(array[i].get(ks3), c3.getString(c3.getColumnIndex(ks3))); } // 取得不可 assertFalse(c3.moveToNext()); db.close(); } /** * testQuery_Projection() */ public void testQuery_Projection() { final int DATA_NUM = 8; ContentValues[] array = new ContentValues[DATA_NUM]; for (int i = 0; i < array.length; i++) { ContentValues values = new ContentValues(); values.put(WBData.InfoColumns.INFO_FILE, i); values.put(WBData.InfoColumns.INFO_NUM, 1); values.put(WBData.InfoColumns.INFO_STAT, 2); values.put(WBData.InfoColumns.INFO_LEVEL, 3); values.put(WBData.InfoColumns.INFO_FLAG, 4); values.put(WBData.InfoColumns.INFO_OK, 5); values.put(WBData.InfoColumns.INFO_NG, 6); values.put(WBData.InfoColumns.INFO_QUESTION, "Q"); values.put(WBData.InfoColumns.INFO_ANSWER, "A"); values.put(WBData.InfoColumns.INFO_DATA1, "D1"); values.put(WBData.InfoColumns.INFO_DATA2, "D2"); array[i] = values; } // 確認対象キー String k0 = WBData.InfoColumns.INFO_FILE; String k1 = WBData.InfoColumns.INFO_NUM; String k2 = WBData.InfoColumns.INFO_STAT; String k3 = WBData.InfoColumns.INFO_LEVEL; String k4 = WBData.InfoColumns.INFO_FLAG; String k5 = WBData.InfoColumns.INFO_OK; String k6 = WBData.InfoColumns.INFO_NG; String ks0 = WBData.InfoColumns.INFO_QUESTION; String ks1 = WBData.InfoColumns.INFO_ANSWER; String ks2 = WBData.InfoColumns.INFO_DATA1; String ks3 = WBData.InfoColumns.INFO_DATA2; // 取得列リスト String[] pjt = { k0, k2, k5, k6, ks2, ks3 }; SQLiteDatabase db = mHelper.getWritableDatabase(); // 初期化 for (int i = 0; i < array.length; i++) { db.insert(WBData.TABLE_NAME_INFO, null, array[i]); } // 対象項目(FILE==0)のみ取得 String sel0 = WBData.InfoColumns.INFO_FILE + "=?"; String[] arg0 = new String[] { "0" }; ContentValues cv0 = array[0]; Cursor c0 = db.query(WBData.TABLE_NAME_INFO, pjt, sel0, arg0, null, null, null); assertTrue(c0.moveToNext()); // 取得列の内容が一致 assertEquals(cv0.get(k0), c0.getInt(c0.getColumnIndex(k0))); assertEquals(cv0.get(k2), c0.getInt(c0.getColumnIndex(k2))); assertEquals(cv0.get(k5), c0.getInt(c0.getColumnIndex(k5))); assertEquals(cv0.get(k6), c0.getInt(c0.getColumnIndex(k6))); assertEquals(cv0.get(ks2), c0.getString(c0.getColumnIndex(ks2))); assertEquals(cv0.get(ks3), c0.getString(c0.getColumnIndex(ks3))); // 存在しない場合はindexが-1 assertEquals(-1, c0.getColumnIndex(k1)); assertEquals(-1, c0.getColumnIndex(k3)); assertEquals(-1, c0.getColumnIndex(k4)); assertEquals(-1, c0.getColumnIndex(ks0)); assertEquals(-1, c0.getColumnIndex(ks1)); db.close(); } /** * testQuery_Sort() */ public void testQuery_Sort() { final int DATA_NUM = 8; ContentValues[] array = new ContentValues[DATA_NUM]; for (int i = 0; i < array.length; i++) { ContentValues values = new ContentValues(); values.put(WBData.InfoColumns.INFO_FILE, i); values.put(WBData.InfoColumns.INFO_NUM, array.length - i - 1); // 逆 values.put(WBData.InfoColumns.INFO_STAT, 2); values.put(WBData.InfoColumns.INFO_LEVEL, 3); values.put(WBData.InfoColumns.INFO_FLAG, 4); values.put(WBData.InfoColumns.INFO_OK, 5); values.put(WBData.InfoColumns.INFO_NG, 6); values.put(WBData.InfoColumns.INFO_QUESTION, "Q"); values.put(WBData.InfoColumns.INFO_ANSWER, "A"); values.put(WBData.InfoColumns.INFO_DATA1, "D1"); values.put(WBData.InfoColumns.INFO_DATA2, "D2"); array[i] = values; } // 確認対象キー String k0 = WBData.InfoColumns.INFO_FILE; String k1 = WBData.InfoColumns.INFO_NUM; SQLiteDatabase db = mHelper.getWritableDatabase(); // 初期化 for (int i = 0; i < array.length; i++) { db.insert(WBData.TABLE_NAME_INFO, null, array[i]); } // 全項目取得 String sel = null; String[] arg = null; // デフォルト時は登録順 Cursor c0 = db.query(WBData.TABLE_NAME_INFO, null, sel, arg, null, null, null); for (int i = 0; i < array.length; i++) { ContentValues cv = array[i]; assertTrue(c0.moveToNext()); assertEquals(cv.get(k0), c0.getInt(c0.getColumnIndex(k0))); } // NUM昇順 Cursor c1 = db.query(WBData.TABLE_NAME_INFO, null, sel, arg, null, null, k1 + " ASC"); for (int i = 0; i < array.length; i++) { ContentValues cv = array[array.length - i - 1]; assertTrue(c1.moveToNext()); assertEquals(cv.get(k1), c1.getInt(c1.getColumnIndex(k1))); } // NUM降順 Cursor c2 = db.query(WBData.TABLE_NAME_INFO, null, sel, arg, null, null, k1 + " DESC"); for (int i = 0; i < array.length; i++) { ContentValues cv = array[i]; assertTrue(c2.moveToNext()); assertEquals(cv.get(k1), c2.getInt(c2.getColumnIndex(k1))); } db.close(); } /** * testQuery_Limit() */ public void testQuery_Limit() { final int NUM1 = 8; final int NUM2 = 16; ContentValues[] array = new ContentValues[NUM1 + NUM2]; for (int i = 0; i < array.length; i++) { ContentValues values = new ContentValues(); values.put(WBData.InfoColumns.INFO_FILE, i); values.put(WBData.InfoColumns.INFO_NUM, 1); values.put(WBData.InfoColumns.INFO_STAT, 2); values.put(WBData.InfoColumns.INFO_LEVEL, 3); values.put(WBData.InfoColumns.INFO_FLAG, 4); values.put(WBData.InfoColumns.INFO_OK, 5); values.put(WBData.InfoColumns.INFO_NG, 6); values.put(WBData.InfoColumns.INFO_QUESTION, "Q"); values.put(WBData.InfoColumns.INFO_ANSWER, "A"); values.put(WBData.InfoColumns.INFO_DATA1, "D1"); values.put(WBData.InfoColumns.INFO_DATA2, "D2"); array[i] = values; } SQLiteDatabase db = mHelper.getWritableDatabase(); // 初期化 for (int i = 0; i < array.length; i++) { db.insert(WBData.TABLE_NAME_INFO, null, array[i]); } // 全項目取得 String sel = null; String[] arg = null; // デフォルト時は全て String limit0 = null; Cursor c0 = db.query(WBData.TABLE_NAME_INFO, null, sel, arg, null, null, null, limit0); assertEquals(NUM1 + NUM2, c0.getCount()); // 最初からNUM1まで String limit1 = Integer.toString(0) + "," + Integer.toString(NUM1); Cursor c1 = db.query(WBData.TABLE_NAME_INFO, null, sel, arg, null, null, null, limit1); assertEquals(NUM1, c1.getCount()); // NUM2から最後まで String limit2 = Integer.toString(NUM1) + "," + Integer.toString(NUM2); Cursor c2 = db.query(WBData.TABLE_NAME_INFO, null, sel, arg, null, null, null, limit2); assertEquals(NUM2, c2.getCount()); db.close(); } /** * testQuery_Distinct() */ public void testQuery_Distinct() { // 偶数項目数=奇数項目数 final int DATA_NUM = 8; ContentValues[] array = new ContentValues[DATA_NUM * 2]; for (int i = 0; i < array.length; i++) { ContentValues values = new ContentValues(); values.put(WBData.InfoColumns.INFO_FILE, 0); values.put(WBData.InfoColumns.INFO_NUM, i % 2); // 0 or 1 values.put(WBData.InfoColumns.INFO_STAT, 2); values.put(WBData.InfoColumns.INFO_LEVEL, 3); values.put(WBData.InfoColumns.INFO_FLAG, 4); values.put(WBData.InfoColumns.INFO_OK, 5); values.put(WBData.InfoColumns.INFO_NG, 6); values.put(WBData.InfoColumns.INFO_QUESTION, "Q"); values.put(WBData.InfoColumns.INFO_ANSWER, "A"); values.put(WBData.InfoColumns.INFO_DATA1, "D1"); values.put(WBData.InfoColumns.INFO_DATA2, "D2"); array[i] = values; } // 確認対象キー String k0 = WBData.InfoColumns.INFO_FILE; String k2 = WBData.InfoColumns.INFO_STAT; String k5 = WBData.InfoColumns.INFO_OK; String k6 = WBData.InfoColumns.INFO_NG; String ks2 = WBData.InfoColumns.INFO_DATA1; String ks3 = WBData.InfoColumns.INFO_DATA2; // 取得列リスト String[] pjt = { k0, k2, k5, k6, ks2, ks3 }; SQLiteDatabase db = mHelper.getWritableDatabase(); // 初期化 for (int i = 0; i < array.length; i++) { db.insert(WBData.TABLE_NAME_INFO, null, array[i]); } // 偶数項目取得 String sel0 = WBData.InfoColumns.INFO_NUM + "=?"; String[] arg0 = new String[] { "0" }; // 重複排除 Cursor c0_0 = db.query(true, WBData.TABLE_NAME_INFO, pjt, sel0, arg0, null, null, null, null); assertEquals(1, c0_0.getCount()); // 重複包含 Cursor c0_1 = db.query(false, WBData.TABLE_NAME_INFO, pjt, sel0, arg0, null, null, null, null); assertEquals(DATA_NUM, c0_1.getCount()); // 奇数項目取得 String sel1 = WBData.InfoColumns.INFO_NUM + "=?"; String[] arg1 = new String[] { "1" }; // 重複排除 Cursor c1_0 = db.query(true, WBData.TABLE_NAME_INFO, pjt, sel1, arg1, null, null, null, null); assertEquals(1, c1_0.getCount()); // 重複包含 Cursor c1_1 = db.query(false, WBData.TABLE_NAME_INFO, pjt, sel1, arg1, null, null, null, null); assertEquals(DATA_NUM, c1_1.getCount()); db.close(); } }