diff options
Diffstat (limited to 'tests/AndroidTests/src/com/android/unit_tests/SettingsProviderTest.java')
-rw-r--r-- | tests/AndroidTests/src/com/android/unit_tests/SettingsProviderTest.java | 147 |
1 files changed, 147 insertions, 0 deletions
diff --git a/tests/AndroidTests/src/com/android/unit_tests/SettingsProviderTest.java b/tests/AndroidTests/src/com/android/unit_tests/SettingsProviderTest.java new file mode 100644 index 0000000..8b1db97 --- /dev/null +++ b/tests/AndroidTests/src/com/android/unit_tests/SettingsProviderTest.java @@ -0,0 +1,147 @@ +/* + * 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, '*')); + } +} |