19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2007 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 1703cb98aecfeef0b0894f69987f8b4a15c02501f3Amith Yamasanipackage com.android.server.content; 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.ArrayList; 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.database.ContentObserver; 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.net.Uri; 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Handler; 2416aa9736175f5bbe924a6e5587a2ca47c2dd702bChristopher Tateimport android.os.UserHandle; 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.test.AndroidTestCase; 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2703cb98aecfeef0b0894f69987f8b4a15c02501f3Amith Yamasaniimport com.android.server.content.ContentService.ObserverCall; 2803cb98aecfeef0b0894f69987f8b4a15c02501f3Amith Yamasaniimport com.android.server.content.ContentService.ObserverNode; 2903cb98aecfeef0b0894f69987f8b4a15c02501f3Amith Yamasani 30002ffad599964653186c01f8e07fadc82dc0aceeFred Quintanapublic class ObserverNodeTest extends AndroidTestCase { 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static class TestObserver extends ContentObserver { 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public TestObserver() { 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super(new Handler()); 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 36002ffad599964653186c01f8e07fadc82dc0aceeFred Quintana 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void testUri() { 3816aa9736175f5bbe924a6e5587a2ca47c2dd702bChristopher Tate final int myUserHandle = UserHandle.myUserId(); 3916aa9736175f5bbe924a6e5587a2ca47c2dd702bChristopher Tate 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ObserverNode root = new ObserverNode(""); 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Uri[] uris = new Uri[] { 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Uri.parse("content://c/a/"), 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Uri.parse("content://c/"), 44002ffad599964653186c01f8e07fadc82dc0aceeFred Quintana Uri.parse("content://x/"), 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Uri.parse("content://c/b/"), 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Uri.parse("content://c/a/a1/1/"), 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Uri.parse("content://c/a/a1/2/"), 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Uri.parse("content://c/b/1/"), 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Uri.parse("content://c/b/2/"), 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 51002ffad599964653186c01f8e07fadc82dc0aceeFred Quintana 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int[] nums = new int[] {4, 7, 1, 4, 2, 2, 3, 3}; 53002ffad599964653186c01f8e07fadc82dc0aceeFred Quintana 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // special case 5516aa9736175f5bbe924a6e5587a2ca47c2dd702bChristopher Tate root.addObserverLocked(uris[0], new TestObserver().getContentObserver(), false, root, 5616aa9736175f5bbe924a6e5587a2ca47c2dd702bChristopher Tate 0, 0, myUserHandle); 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for(int i = 1; i < uris.length; i++) { 5816aa9736175f5bbe924a6e5587a2ca47c2dd702bChristopher Tate root.addObserverLocked(uris[i], new TestObserver().getContentObserver(), true, root, 5916aa9736175f5bbe924a6e5587a2ca47c2dd702bChristopher Tate 0, 0, myUserHandle); 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 61002ffad599964653186c01f8e07fadc82dc0aceeFred Quintana 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ArrayList<ObserverCall> calls = new ArrayList<ObserverCall>(); 63002ffad599964653186c01f8e07fadc82dc0aceeFred Quintana 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = nums.length - 1; i >=0; --i) { 6516aa9736175f5bbe924a6e5587a2ca47c2dd702bChristopher Tate root.collectObserversLocked(uris[i], 0, null, false, myUserHandle, calls); 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals(nums[i], calls.size()); 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project calls.clear(); 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 70002ffad599964653186c01f8e07fadc82dc0aceeFred Quintana 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void testUriNotNotify() { 7216aa9736175f5bbe924a6e5587a2ca47c2dd702bChristopher Tate final int myUserHandle = UserHandle.myUserId(); 7316aa9736175f5bbe924a6e5587a2ca47c2dd702bChristopher Tate 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ObserverNode root = new ObserverNode(""); 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Uri[] uris = new Uri[] { 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Uri.parse("content://c/"), 77002ffad599964653186c01f8e07fadc82dc0aceeFred Quintana Uri.parse("content://x/"), 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Uri.parse("content://c/a/"), 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Uri.parse("content://c/b/"), 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Uri.parse("content://c/a/1/"), 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Uri.parse("content://c/a/2/"), 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Uri.parse("content://c/b/1/"), 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Uri.parse("content://c/b/2/"), 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int[] nums = new int[] {7, 1, 3, 3, 1, 1, 1, 1}; 86002ffad599964653186c01f8e07fadc82dc0aceeFred Quintana 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for(int i = 0; i < uris.length; i++) { 8816aa9736175f5bbe924a6e5587a2ca47c2dd702bChristopher Tate root.addObserverLocked(uris[i], new TestObserver().getContentObserver(), false, root, 8916aa9736175f5bbe924a6e5587a2ca47c2dd702bChristopher Tate 0, 0, myUserHandle); 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 91002ffad599964653186c01f8e07fadc82dc0aceeFred Quintana 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ArrayList<ObserverCall> calls = new ArrayList<ObserverCall>(); 93002ffad599964653186c01f8e07fadc82dc0aceeFred Quintana 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = uris.length - 1; i >=0; --i) { 9516aa9736175f5bbe924a6e5587a2ca47c2dd702bChristopher Tate root.collectObserversLocked(uris[i], 0, null, false, myUserHandle, calls); 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project assertEquals(nums[i], calls.size()); 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project calls.clear(); 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 101