// Copyright 2009 Google Inc. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package org.npr.android.util; import android.content.ContentValues; import android.content.Context; import android.content.pm.PackageManager; import android.database.DatabaseUtils; import android.database.sqlite.SQLiteDatabase; import android.net.Uri; import android.test.AndroidTestCase; import android.test.IsolatedContext; import android.test.mock.MockContentResolver; import android.test.mock.MockContext; import org.npr.android.util.PlaylistProvider.Items; import org.npr.android.util.PlaylistProvider.PlaylistHelper; import java.io.File; public class PlaylistProviderTest extends AndroidTestCase { private PlaylistProvider provider; PlaylistHelper mockHelper; private SQLiteDatabase db; @Override protected void setUp() throws Exception { super.setUp(); setupDb(); } private void setupDb() { db = SQLiteDatabase.create(null); Context context = new MockContext() { @Override public SQLiteDatabase openOrCreateDatabase(String file, int mode, SQLiteDatabase.CursorFactory factory) { return db; } @Override public File getDatabasePath(String name) { return null; } @Override public int checkUriPermission(Uri uri, String readPermission, String writePermission, int pid, int uid, int modeFlags) { return PackageManager.PERMISSION_GRANTED; } }; provider = new PlaylistProvider(); provider.attachInfo(context, null); MockContentResolver resolver = new MockContentResolver(); // Create the authority for the URI, by removing the 'content://' and any // '/' or path part after that. String authority = PlaylistProvider.CONTENT_URI.toString().substring(10); int pos = authority.indexOf('/'); if (pos > -1) { authority = authority.substring(0, pos); } resolver.addProvider(authority, provider); this.setContext(new IsolatedContext(resolver, context)); assertTrue(this.getContext() instanceof IsolatedContext); assertTrue(this.getContext().getContentResolver() instanceof MockContentResolver); mockHelper = new PlaylistHelper(context) { @Override public synchronized SQLiteDatabase getReadableDatabase() { return db; } }; provider.setHelper(mockHelper); } private void insertRecords() { // Initializes the DB. mockHelper.getWritableDatabase(); ContentValues values = new ContentValues(); values.put(Items.NAME, "A"); values.put(Items.URL, "http://a"); values.put(Items.IS_READ, false); values.put(Items.PLAY_ORDER, 0); db.insertOrThrow(PlaylistProvider.TABLE_NAME, Items.NAME, values); values.clear(); values.put(Items.NAME, "B"); values.put(Items.URL, "http://b"); values.put(Items.IS_READ, false); values.put(Items.PLAY_ORDER, 1); db.insertOrThrow(PlaylistProvider.TABLE_NAME, Items.NAME, values); values.clear(); values.put(Items.NAME, "C"); values.put(Items.URL, "http://c"); values.put(Items.IS_READ, false); values.put(Items.PLAY_ORDER, 2); db.insertOrThrow(PlaylistProvider.TABLE_NAME, Items.NAME, values); assertEquals(3, DatabaseUtils.queryNumEntries(db, PlaylistProvider.TABLE_NAME)); } public void testItemsHaveOrder() { insertRecords(); String[] args = new String[1]; for (int i = 0; i < 3; i++) { args[i] = Integer.toString(i); assertEquals(Integer.toString(i), DatabaseUtils.stringForQuery(db, "SELECT " + Items.PLAY_ORDER + " FROM " + PlaylistProvider.TABLE_NAME + " WHERE " + Items._ID + " = ?", args)); } } public void testInsert() { ContentValues values = new ContentValues(); values.put(Items.NAME, "D"); values.put(Items.URL, "http://d"); values.put(Items.IS_READ, false); values.put(Items.PLAY_ORDER, 2); getContext().getContentResolver().insert(PlaylistProvider.CONTENT_URI, values); assertEquals(1, DatabaseUtils.queryNumEntries(db, PlaylistProvider.TABLE_NAME)); } public void testInsertMultiple() { insertRecords(); ContentValues values = new ContentValues(); values.put(Items.NAME, "D"); values.put(Items.URL, "http://d"); values.put(Items.IS_READ, false); values.put(Items.PLAY_ORDER, 2); getContext().getContentResolver().insert(PlaylistProvider.CONTENT_URI, values); assertEquals(4, DatabaseUtils.queryNumEntries(db, PlaylistProvider.TABLE_NAME)); } }