/* * Copyright (C) 2008 The Android Open Source Project * * 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 com.android.unit_tests; import android.content.ContentResolver; import android.content.ContentUris; import android.content.ContentValues; import android.content.Intent; import android.database.Cursor; import android.net.Uri; import android.provider.Settings; import android.test.AndroidTestCase; import android.test.suitebuilder.annotation.MediumTest; /** Unit test for SettingsProvider. */ public class SettingsProviderTest extends AndroidTestCase { @MediumTest public void testNameValueCache() { ContentResolver r = getContext().getContentResolver(); Settings.Gservices.putString(r, "test_service", "Value"); assertEquals("Value", Settings.Gservices.getString(r, "test_service")); // Make sure the value can be overwritten. Settings.Gservices.putString(r, "test_service", "New"); assertEquals("New", Settings.Gservices.getString(r, "test_service")); // Also that delete works. assertEquals(1, r.delete(Settings.Gservices.getUriFor("test_service"), null, null)); assertEquals(null, Settings.Gservices.getString(r, "test_service")); // Try all the same things in the System table Settings.System.putString(r, "test_setting", "Value"); assertEquals("Value", Settings.System.getString(r, "test_setting")); Settings.System.putString(r, "test_setting", "New"); assertEquals("New", Settings.System.getString(r, "test_setting")); assertEquals(1, r.delete(Settings.System.getUriFor("test_setting"), null, null)); assertEquals(null, Settings.System.getString(r, "test_setting")); } @MediumTest public void testRowNameContentUri() { ContentResolver r = getContext().getContentResolver(); assertEquals("content://settings/system/test_setting", Settings.System.getUriFor("test_setting").toString()); assertEquals("content://settings/gservices/test_service", Settings.Gservices.getUriFor("test_service").toString()); // These tables use the row name (not ID) as their content URI. Uri tables[] = { Settings.System.CONTENT_URI, Settings.Gservices.CONTENT_URI }; for (Uri table : tables) { ContentValues v = new ContentValues(); v.put(Settings.System.NAME, "test_key"); v.put(Settings.System.VALUE, "Test"); Uri uri = r.insert(table, v); assertEquals(table.toString() + "/test_key", uri.toString()); // Query with a specific URI and no WHERE clause succeeds. Cursor c = r.query(uri, null, null, null, null); try { assertTrue(c.moveToNext()); assertEquals("test_key", c.getString(c.getColumnIndex(Settings.System.NAME))); assertEquals("Test", c.getString(c.getColumnIndex(Settings.System.VALUE))); assertFalse(c.moveToNext()); } finally { c.close(); } // Query with a specific URI and a WHERE clause fails. try { r.query(uri, null, "1", null, null); fail("UnsupportedOperationException expected"); } catch (UnsupportedOperationException e) { if (!e.toString().contains("WHERE clause")) throw e; } // Query with a tablewide URI and a WHERE clause succeeds. c = r.query(table, null, "name='test_key'", null, null); try { assertTrue(c.moveToNext()); assertEquals("test_key", c.getString(c.getColumnIndex(Settings.System.NAME))); assertEquals("Test", c.getString(c.getColumnIndex(Settings.System.VALUE))); assertFalse(c.moveToNext()); } finally { c.close(); } v = new ContentValues(); v.put(Settings.System.VALUE, "Toast"); assertEquals(1, r.update(uri, v, null, null)); c = r.query(uri, null, null, null, null); try { assertTrue(c.moveToNext()); assertEquals("test_key", c.getString(c.getColumnIndex(Settings.System.NAME))); assertEquals("Toast", c.getString(c.getColumnIndex(Settings.System.VALUE))); assertFalse(c.moveToNext()); } finally { c.close(); } assertEquals(1, r.delete(uri, null, null)); } assertEquals(null, Settings.System.getString(r, "test_key")); assertEquals(null, Settings.Gservices.getString(r, "test_key")); } @MediumTest public void testRowNumberContentUri() { ContentResolver r = getContext().getContentResolver(); // The bookmarks table (and everything else) uses standard row number content URIs. Uri uri = Settings.Bookmarks.add(r, new Intent("TEST"), "Test Title", "Test Folder", '*', 123); assertTrue(ContentUris.parseId(uri) > 0); assertEquals("TEST", Settings.Bookmarks.getIntentForShortcut(r, '*').getAction()); ContentValues v = new ContentValues(); v.put(Settings.Bookmarks.INTENT, "#Intent;action=TOAST;end"); assertEquals(1, r.update(uri, v, null, null)); assertEquals("TOAST", Settings.Bookmarks.getIntentForShortcut(r, '*').getAction()); assertEquals(1, r.delete(uri, null, null)); assertEquals(null, Settings.Bookmarks.getIntentForShortcut(r, '*')); } }