1 /* 2 * Copyright (C) 2008 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package android.database.cts; 18 19 20 import android.database.ContentObservable; 21 import android.database.ContentObserver; 22 import android.net.Uri; 23 import android.test.InstrumentationTestCase; 24 25 public class ContentObservableTest extends InstrumentationTestCase { 26 private static final Uri CONTENT_URI = Uri.parse("content://uri"); 27 28 ContentObservable mContentObservable; 29 MyContentObserver mObserver; 30 31 @Override 32 protected void setUp() throws Exception { 33 super.setUp(); 34 35 mContentObservable = new ContentObservable(); 36 mObserver = new MyContentObserver(); 37 } 38 39 public void testNotifyChange() { 40 mContentObservable.registerObserver(mObserver); 41 mObserver.resetStatus(); 42 assertFalse(mObserver.hasChanged()); 43 mContentObservable.notifyChange(false); 44 assertTrue(mObserver.hasChanged()); 45 46 try { 47 mContentObservable.registerObserver(mObserver); 48 fail("Re-registering observer did not cause exception."); 49 } catch (IllegalStateException expected) { 50 // expected 51 } 52 53 try { 54 mContentObservable.registerObserver(null); 55 fail("Registering null observer did not cause exception."); 56 } catch (IllegalArgumentException expected) { 57 // expected 58 } 59 60 MyContentObserver second = new MyContentObserver(); 61 mContentObservable.registerObserver(second); 62 63 mContentObservable.unregisterObserver(mObserver); 64 mObserver.resetStatus(); 65 assertFalse(mObserver.hasChanged()); 66 mContentObservable.notifyChange(false); 67 assertFalse(mObserver.hasChanged()); 68 assertTrue(second.hasChanged()); 69 } 70 71 public void testDispatchChange() { 72 mContentObservable.registerObserver(mObserver); 73 mObserver.resetStatus(); 74 assertFalse(mObserver.hasChanged()); 75 mContentObservable.dispatchChange(false); 76 assertTrue(mObserver.hasChanged()); 77 assertNull(mObserver.getUri()); 78 79 mObserver.resetStatus(); 80 assertFalse(mObserver.hasChanged()); 81 mContentObservable.dispatchChange(true); 82 assertFalse(mObserver.hasChanged()); 83 mObserver.setDeliverSelfNotifications(true); 84 mContentObservable.dispatchChange(true); 85 assertTrue(mObserver.hasChanged()); 86 assertNull(mObserver.getUri()); 87 88 mContentObservable.unregisterObserver(mObserver); 89 mObserver.resetStatus(); 90 assertFalse(mObserver.hasChanged()); 91 mContentObservable.dispatchChange(false); 92 assertFalse(mObserver.hasChanged()); 93 } 94 95 public void testDispatchChangeWithUri() { 96 mContentObservable.registerObserver(mObserver); 97 mObserver.resetStatus(); 98 assertFalse(mObserver.hasChanged()); 99 mContentObservable.dispatchChange(false, CONTENT_URI); 100 assertTrue(mObserver.hasChanged()); 101 assertEquals(CONTENT_URI, mObserver.getUri()); 102 103 mObserver.resetStatus(); 104 assertFalse(mObserver.hasChanged()); 105 mContentObservable.dispatchChange(true, CONTENT_URI); 106 assertFalse(mObserver.hasChanged()); 107 mObserver.setDeliverSelfNotifications(true); 108 mContentObservable.dispatchChange(true, CONTENT_URI); 109 assertTrue(mObserver.hasChanged()); 110 assertEquals(CONTENT_URI, mObserver.getUri()); 111 112 mContentObservable.unregisterObserver(mObserver); 113 mObserver.resetStatus(); 114 assertFalse(mObserver.hasChanged()); 115 mContentObservable.dispatchChange(false, CONTENT_URI); 116 assertFalse(mObserver.hasChanged()); 117 } 118 119 private static class MyContentObserver extends ContentObserver { 120 private boolean mHasChanged = false; 121 private boolean mDeliverSelfNotifications = false; 122 private Uri mUri; 123 124 public MyContentObserver() { 125 super(null); 126 } 127 128 @Override 129 public void onChange(boolean selfChange, Uri uri) { 130 super.onChange(selfChange, uri); 131 mHasChanged = true; 132 mUri = uri; 133 } 134 135 public boolean deliverSelfNotifications() { 136 return mDeliverSelfNotifications ; 137 } 138 139 protected boolean hasChanged() { 140 return mHasChanged; 141 } 142 143 protected void resetStatus() { 144 mHasChanged = false; 145 mUri = null; 146 } 147 148 protected void setDeliverSelfNotifications(boolean b) { 149 mDeliverSelfNotifications = b; 150 } 151 152 protected Uri getUri() { 153 return mUri; 154 } 155 } 156 } 157