19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License. 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 171a44d5dcabc18cd5ef111f732ccff91683a1a093Neal Nguyenpackage android.provider; 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.ContentResolver; 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.ContentUris; 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.ContentValues; 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.Intent; 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.database.Cursor; 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.net.Uri; 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.provider.Settings; 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.test.AndroidTestCase; 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.test.suitebuilder.annotation.MediumTest; 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** Unit test for SettingsProvider. */ 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class SettingsProviderTest extends AndroidTestCase { 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @MediumTest 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void testNameValueCache() { 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ContentResolver r = getContext().getContentResolver(); 34edc5189c33de03f3e2f5f73edc0e007992b933c9Doug Zongker Settings.Secure.putString(r, "test_service", "Value"); 35edc5189c33de03f3e2f5f73edc0e007992b933c9Doug Zongker assertEquals("Value", Settings.Secure.getString(r, "test_service")); 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Make sure the value can be overwritten. 38edc5189c33de03f3e2f5f73edc0e007992b933c9Doug Zongker Settings.Secure.putString(r, "test_service", "New"); 39edc5189c33de03f3e2f5f73edc0e007992b933c9Doug Zongker assertEquals("New", Settings.Secure.getString(r, "test_service")); 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Also that delete works. 42edc5189c33de03f3e2f5f73edc0e007992b933c9Doug Zongker assertEquals(1, r.delete(Settings.Secure.getUriFor("test_service"), null, null)); 43edc5189c33de03f3e2f5f73edc0e007992b933c9Doug Zongker assertEquals(null, Settings.Secure.getString(r, "test_service")); 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Try all the same things in the System table 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Settings.System.putString(r, "test_setting", "Value"); 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals("Value", Settings.System.getString(r, "test_setting")); 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Settings.System.putString(r, "test_setting", "New"); 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals("New", Settings.System.getString(r, "test_setting")); 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals(1, r.delete(Settings.System.getUriFor("test_setting"), null, null)); 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals(null, Settings.System.getString(r, "test_setting")); 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @MediumTest 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void testRowNameContentUri() { 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ContentResolver r = getContext().getContentResolver(); 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals("content://settings/system/test_setting", 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Settings.System.getUriFor("test_setting").toString()); 62d0ca3379c2dd0f987af328baa3fdad69d0a8d70aAmith Yamasani assertEquals("content://settings/secure/test_service", 63edc5189c33de03f3e2f5f73edc0e007992b933c9Doug Zongker Settings.Secure.getUriFor("test_service").toString()); 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // These tables use the row name (not ID) as their content URI. 66edc5189c33de03f3e2f5f73edc0e007992b933c9Doug Zongker Uri tables[] = { Settings.System.CONTENT_URI, Settings.Secure.CONTENT_URI }; 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (Uri table : tables) { 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ContentValues v = new ContentValues(); 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project v.put(Settings.System.NAME, "test_key"); 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project v.put(Settings.System.VALUE, "Test"); 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Uri uri = r.insert(table, v); 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals(table.toString() + "/test_key", uri.toString()); 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Query with a specific URI and no WHERE clause succeeds. 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Cursor c = r.query(uri, null, null, null, null); 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertTrue(c.moveToNext()); 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals("test_key", c.getString(c.getColumnIndex(Settings.System.NAME))); 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals("Test", c.getString(c.getColumnIndex(Settings.System.VALUE))); 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertFalse(c.moveToNext()); 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } finally { 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project c.close(); 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Query with a specific URI and a WHERE clause fails. 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project r.query(uri, null, "1", null, null); 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project fail("UnsupportedOperationException expected"); 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (UnsupportedOperationException e) { 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!e.toString().contains("WHERE clause")) throw e; 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Query with a tablewide URI and a WHERE clause succeeds. 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project c = r.query(table, null, "name='test_key'", null, null); 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertTrue(c.moveToNext()); 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals("test_key", c.getString(c.getColumnIndex(Settings.System.NAME))); 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals("Test", c.getString(c.getColumnIndex(Settings.System.VALUE))); 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertFalse(c.moveToNext()); 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } finally { 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project c.close(); 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project v = new ContentValues(); 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project v.put(Settings.System.VALUE, "Toast"); 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals(1, r.update(uri, v, null, null)); 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project c = r.query(uri, null, null, null, null); 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertTrue(c.moveToNext()); 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals("test_key", c.getString(c.getColumnIndex(Settings.System.NAME))); 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals("Toast", c.getString(c.getColumnIndex(Settings.System.VALUE))); 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertFalse(c.moveToNext()); 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } finally { 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project c.close(); 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals(1, r.delete(uri, null, null)); 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals(null, Settings.System.getString(r, "test_key")); 122edc5189c33de03f3e2f5f73edc0e007992b933c9Doug Zongker assertEquals(null, Settings.Secure.getString(r, "test_key")); 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @MediumTest 1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void testRowNumberContentUri() { 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ContentResolver r = getContext().getContentResolver(); 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // The bookmarks table (and everything else) uses standard row number content URIs. 1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Uri uri = Settings.Bookmarks.add(r, new Intent("TEST"), 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "Test Title", "Test Folder", '*', 123); 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertTrue(ContentUris.parseId(uri) > 0); 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals("TEST", Settings.Bookmarks.getIntentForShortcut(r, '*').getAction()); 1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ContentValues v = new ContentValues(); 1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project v.put(Settings.Bookmarks.INTENT, "#Intent;action=TOAST;end"); 1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals(1, r.update(uri, v, null, null)); 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals("TOAST", Settings.Bookmarks.getIntentForShortcut(r, '*').getAction()); 1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals(1, r.delete(uri, null, null)); 1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals(null, Settings.Bookmarks.getIntentForShortcut(r, '*')); 1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 148