1adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/* 2adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Licensed to the Apache Software Foundation (ASF) under one or more 3adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * contributor license agreements. See the NOTICE file distributed with 4adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * this work for additional information regarding copyright ownership. 5adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The ASF licenses this file to You under the Apache License, Version 2.0 6adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * (the "License"); you may not use this file except in compliance with 7adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the License. You may obtain a copy of the License at 8adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 10adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 11adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software 12adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 13adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * See the License for the specific language governing permissions and 15adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * limitations under the License. 16adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 17adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 18ab762bb740405d0fefcccf4a0899a234f995be13Narayan Kamathpackage org.apache.harmony.tests.java.util; 19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Observable; 21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Observer; 22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Vector; 23e03b33ae5072a36e38f2d4a02b4ceb92f29d167eNarayan Kamathimport java.util.concurrent.atomic.AtomicReference; 24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic class ObservableTest extends junit.framework.TestCase { 26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project static class TestObserver implements Observer { 28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public Vector objv = new Vector(); 29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int updateCount = 0; 31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void update(Observable observed, Object arg) { 33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ++updateCount; 34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project objv.add(arg); 35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public int updateCount() { 38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return updateCount; 39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project static class DeleteTestObserver implements Observer { 44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int updateCount = 0; 45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project boolean deleteAll = false; 47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public DeleteTestObserver(boolean all) { 49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project deleteAll = all; 50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void update(Observable observed, Object arg) { 53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ++updateCount; 54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (deleteAll) 55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project observed.deleteObservers(); 56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project else 57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project observed.deleteObserver(this); 58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public int updateCount() { 61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return updateCount; 62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project static class TestObservable extends Observable { 67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void doChange() { 68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project setChanged(); 69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void clearChange() { 72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project clearChanged(); 73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Observer observer; 77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project TestObservable observable; 79adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 81229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * java.util.Observable#Observable() 82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_Constructor() { 84adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Test for method java.util.Observable() 85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 86adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Observable ov = new Observable(); 87adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Wrong initial values.", !ov.hasChanged()); 88adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Wrong initial values.", 0, ov.countObservers()); 89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (Exception e) { 90adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("Exception during test : " + e.getMessage()); 91adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 95229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * java.util.Observable#addObserver(java.util.Observer) 96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 97adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_addObserverLjava_util_Observer() { 98adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Test for method void 99adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // java.util.Observable.addObserver(java.util.Observer) 100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project TestObserver test = new TestObserver(); 101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project observable.addObserver(test); 102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Failed to add observer", 1, observable.countObservers()); 103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project observable.addObserver(test); 104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Duplicate observer", 1, observable.countObservers()); 105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Observable o = new Observable(); 107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project o.addObserver(null); 109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("Expected adding a null observer to throw a NPE."); 110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (NullPointerException ex) { 111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // expected; 112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (Throwable ex) { 113adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project fail("Did not expect adding a new observer to throw a " 114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + ex.getClass().getName()); 115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 119229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * java.util.Observable#countObservers() 120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_countObservers() { 122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Test for method int java.util.Observable.countObservers() 123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("New observable had > 0 observers", 0, observable 124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .countObservers()); 125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project observable.addObserver(new TestObserver()); 126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Observable with observer returned other than 1", 1, observable 127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .countObservers()); 128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 131229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * java.util.Observable#deleteObserver(java.util.Observer) 132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_deleteObserverLjava_util_Observer() { 134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Test for method void 135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // java.util.Observable.deleteObserver(java.util.Observer) 136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project observable.addObserver(observer = new TestObserver()); 137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project observable.deleteObserver(observer); 138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Failed to delete observer", 139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 0, observable.countObservers()); 140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project observable.deleteObserver(observer); 141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project observable.deleteObserver(null); 142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 143adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 145229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * java.util.Observable#deleteObservers() 146adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_deleteObservers() { 148adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Test for method void java.util.Observable.deleteObservers() 149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project observable.addObserver(new TestObserver()); 150adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project observable.addObserver(new TestObserver()); 151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project observable.addObserver(new TestObserver()); 152adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project observable.addObserver(new TestObserver()); 153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project observable.addObserver(new TestObserver()); 154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project observable.addObserver(new TestObserver()); 155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project observable.addObserver(new TestObserver()); 156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project observable.addObserver(new TestObserver()); 157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project observable.deleteObservers(); 158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Failed to delete observers", 159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 0, observable.countObservers()); 160adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 161adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 162adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 163229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * java.util.Observable#hasChanged() 164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 165adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_hasChanged() { 166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertFalse(observable.hasChanged()); 167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project observable.addObserver(observer = new TestObserver()); 168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project observable.doChange(); 169adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue(observable.hasChanged()); 170adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_clearChanged() { 173adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertFalse(observable.hasChanged()); 174adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project observable.addObserver(observer = new TestObserver()); 175adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project observable.doChange(); 176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue(observable.hasChanged()); 177adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project observable.clearChange(); 178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertFalse(observable.hasChanged()); 179adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 180adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 181adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 182229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * java.util.Observable#notifyObservers() 183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 184adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_notifyObservers() { 185adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Test for method void java.util.Observable.notifyObservers() 186adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project observable.addObserver(observer = new TestObserver()); 187adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project observable.notifyObservers(); 188adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Notified when unchnaged", 0, ((TestObserver) observer) 189adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .updateCount()); 190adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ((TestObservable) observable).doChange(); 191adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project observable.notifyObservers(); 192adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Failed to notify", 193adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1, ((TestObserver) observer).updateCount()); 194adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 195adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project DeleteTestObserver observer1, observer2; 196adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project observable.deleteObservers(); 197adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project observable.addObserver(observer1 = new DeleteTestObserver(false)); 198adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project observable.addObserver(observer2 = new DeleteTestObserver(false)); 199adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project observable.doChange(); 200adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project observable.notifyObservers(); 201adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Failed to notify all", observer1.updateCount() == 1 202adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project && observer2.updateCount() == 1); 203adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Failed to delete all", 0, observable.countObservers()); 204adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 205adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project observable.addObserver(observer1 = new DeleteTestObserver(false)); 206adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project observable.addObserver(observer2 = new DeleteTestObserver(false)); 207adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project observable.doChange(); 208adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project observable.notifyObservers(); 209adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Failed to notify all 2", observer1.updateCount() == 1 210adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project && observer2.updateCount() == 1); 211adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Failed to delete all 2", 0, observable.countObservers()); 212adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 213adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 214adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 215229e34b182b98e1dba15d3dc6341954986ae2b7aBrian Carlstrom * java.util.Observable#notifyObservers(java.lang.Object) 216adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 217adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void test_notifyObserversLjava_lang_Object() { 218adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Test for method void 219adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // java.util.Observable.notifyObservers(java.lang.Object) 220adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Object obj; 221adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project observable.addObserver(observer = new TestObserver()); 222adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project observable.notifyObservers(); 223adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Notified when unchanged", 0, ((TestObserver) observer) 224adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .updateCount()); 225adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ((TestObservable) observable).doChange(); 226adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project observable.notifyObservers(obj = new Object()); 227adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertEquals("Failed to notify", 228adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1, ((TestObserver) observer).updateCount()); 229adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project assertTrue("Failed to pass Object arg", ((TestObserver) observer).objv 230adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .elementAt(0).equals(obj)); 231adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 232adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 233e03b33ae5072a36e38f2d4a02b4ceb92f29d167eNarayan Kamath static final class AlwaysChangedObservable extends Observable { 234e03b33ae5072a36e38f2d4a02b4ceb92f29d167eNarayan Kamath @Override 235e03b33ae5072a36e38f2d4a02b4ceb92f29d167eNarayan Kamath public boolean hasChanged() { 236e03b33ae5072a36e38f2d4a02b4ceb92f29d167eNarayan Kamath return true; 237e03b33ae5072a36e38f2d4a02b4ceb92f29d167eNarayan Kamath } 238e03b33ae5072a36e38f2d4a02b4ceb92f29d167eNarayan Kamath } 239e03b33ae5072a36e38f2d4a02b4ceb92f29d167eNarayan Kamath 240e03b33ae5072a36e38f2d4a02b4ceb92f29d167eNarayan Kamath // http://b/28797950 241e03b33ae5072a36e38f2d4a02b4ceb92f29d167eNarayan Kamath public void test_observableWithOverridenHasChanged() throws Exception { 242e03b33ae5072a36e38f2d4a02b4ceb92f29d167eNarayan Kamath final AtomicReference<Observable> updated = new AtomicReference<>(); 243e03b33ae5072a36e38f2d4a02b4ceb92f29d167eNarayan Kamath final Observer observer = (observable1, data) -> updated.set(observable1); 244e03b33ae5072a36e38f2d4a02b4ceb92f29d167eNarayan Kamath 245e03b33ae5072a36e38f2d4a02b4ceb92f29d167eNarayan Kamath Observable alwaysChanging = new AlwaysChangedObservable(); 246e03b33ae5072a36e38f2d4a02b4ceb92f29d167eNarayan Kamath alwaysChanging.addObserver(observer); 247e03b33ae5072a36e38f2d4a02b4ceb92f29d167eNarayan Kamath alwaysChanging.notifyObservers(null); 248e03b33ae5072a36e38f2d4a02b4ceb92f29d167eNarayan Kamath assertSame(alwaysChanging, updated.get()); 249e03b33ae5072a36e38f2d4a02b4ceb92f29d167eNarayan Kamath } 250e03b33ae5072a36e38f2d4a02b4ceb92f29d167eNarayan Kamath 251adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 252adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sets up the fixture, for example, open a network connection. This method 253adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * is called before a test is executed. 254adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 255adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected void setUp() { 256adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project observable = new TestObservable(); 257adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 258adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 259adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 260adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Tears down the fixture, for example, close a network connection. This 261adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * method is called after a test is executed. 262adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 263adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected void tearDown() { 264adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 265adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project} 266