19189445c0a66d074dcded77b9c7322ef45422727George Mount/* 29189445c0a66d074dcded77b9c7322ef45422727George Mount * Copyright (C) 2015 The Android Open Source Project 39189445c0a66d074dcded77b9c7322ef45422727George Mount * 49189445c0a66d074dcded77b9c7322ef45422727George Mount * Licensed under the Apache License, Version 2.0 (the "License"); 59189445c0a66d074dcded77b9c7322ef45422727George Mount * you may not use this file except in compliance with the License. 69189445c0a66d074dcded77b9c7322ef45422727George Mount * You may obtain a copy of the License at 79189445c0a66d074dcded77b9c7322ef45422727George Mount * 89189445c0a66d074dcded77b9c7322ef45422727George Mount * http://www.apache.org/licenses/LICENSE-2.0 99189445c0a66d074dcded77b9c7322ef45422727George Mount * 109189445c0a66d074dcded77b9c7322ef45422727George Mount * Unless required by applicable law or agreed to in writing, software 119189445c0a66d074dcded77b9c7322ef45422727George Mount * distributed under the License is distributed on an "AS IS" BASIS, 129189445c0a66d074dcded77b9c7322ef45422727George Mount * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139189445c0a66d074dcded77b9c7322ef45422727George Mount * See the License for the specific language governing permissions and 149189445c0a66d074dcded77b9c7322ef45422727George Mount * limitations under the License. 159189445c0a66d074dcded77b9c7322ef45422727George Mount */ 169189445c0a66d074dcded77b9c7322ef45422727George Mountpackage com.android.internal.util; 179189445c0a66d074dcded77b9c7322ef45422727George Mount 189189445c0a66d074dcded77b9c7322ef45422727George Mountimport junit.framework.TestCase; 199189445c0a66d074dcded77b9c7322ef45422727George Mount 209189445c0a66d074dcded77b9c7322ef45422727George Mountimport org.junit.Test; 219189445c0a66d074dcded77b9c7322ef45422727George Mount 229189445c0a66d074dcded77b9c7322ef45422727George Mountimport java.util.ArrayList; 239189445c0a66d074dcded77b9c7322ef45422727George Mount 249189445c0a66d074dcded77b9c7322ef45422727George Mountimport static org.junit.Assert.assertEquals; 259189445c0a66d074dcded77b9c7322ef45422727George Mountimport static org.junit.Assert.assertFalse; 269189445c0a66d074dcded77b9c7322ef45422727George Mountimport static org.junit.Assert.assertNotNull; 279189445c0a66d074dcded77b9c7322ef45422727George Mountimport static org.junit.Assert.assertTrue; 289189445c0a66d074dcded77b9c7322ef45422727George Mount 299189445c0a66d074dcded77b9c7322ef45422727George Mountpublic class CallbackRegistryTest extends TestCase { 309189445c0a66d074dcded77b9c7322ef45422727George Mount 319189445c0a66d074dcded77b9c7322ef45422727George Mount final Integer callback1 = 1; 329189445c0a66d074dcded77b9c7322ef45422727George Mount final Integer callback2 = 2; 339189445c0a66d074dcded77b9c7322ef45422727George Mount final Integer callback3 = 3; 349189445c0a66d074dcded77b9c7322ef45422727George Mount CallbackRegistry<Integer, CallbackRegistryTest, Integer> registry; 359189445c0a66d074dcded77b9c7322ef45422727George Mount int notify1; 369189445c0a66d074dcded77b9c7322ef45422727George Mount int notify2; 379189445c0a66d074dcded77b9c7322ef45422727George Mount int notify3; 389189445c0a66d074dcded77b9c7322ef45422727George Mount int[] deepNotifyCount = new int[300]; 399189445c0a66d074dcded77b9c7322ef45422727George Mount Integer argValue; 409189445c0a66d074dcded77b9c7322ef45422727George Mount 419189445c0a66d074dcded77b9c7322ef45422727George Mount private void addNotifyCount(Integer callback) { 429189445c0a66d074dcded77b9c7322ef45422727George Mount if (callback == callback1) { 439189445c0a66d074dcded77b9c7322ef45422727George Mount notify1++; 449189445c0a66d074dcded77b9c7322ef45422727George Mount } else if (callback == callback2) { 459189445c0a66d074dcded77b9c7322ef45422727George Mount notify2++; 469189445c0a66d074dcded77b9c7322ef45422727George Mount } else if (callback == callback3) { 479189445c0a66d074dcded77b9c7322ef45422727George Mount notify3++; 489189445c0a66d074dcded77b9c7322ef45422727George Mount } 499189445c0a66d074dcded77b9c7322ef45422727George Mount deepNotifyCount[callback]++; 509189445c0a66d074dcded77b9c7322ef45422727George Mount } 519189445c0a66d074dcded77b9c7322ef45422727George Mount 529189445c0a66d074dcded77b9c7322ef45422727George Mount public void testAddListener() { 539189445c0a66d074dcded77b9c7322ef45422727George Mount CallbackRegistry.NotifierCallback<Integer, CallbackRegistryTest, Integer> notifier = 549189445c0a66d074dcded77b9c7322ef45422727George Mount new CallbackRegistry.NotifierCallback<Integer, CallbackRegistryTest, Integer>() { 559189445c0a66d074dcded77b9c7322ef45422727George Mount @Override 569189445c0a66d074dcded77b9c7322ef45422727George Mount public void onNotifyCallback(Integer callback, CallbackRegistryTest sender, 579189445c0a66d074dcded77b9c7322ef45422727George Mount int arg, Integer arg2) { 589189445c0a66d074dcded77b9c7322ef45422727George Mount } 599189445c0a66d074dcded77b9c7322ef45422727George Mount }; 609189445c0a66d074dcded77b9c7322ef45422727George Mount registry = new CallbackRegistry<Integer, CallbackRegistryTest, Integer>(notifier); 619189445c0a66d074dcded77b9c7322ef45422727George Mount Integer callback = 0; 629189445c0a66d074dcded77b9c7322ef45422727George Mount 639189445c0a66d074dcded77b9c7322ef45422727George Mount assertNotNull(registry.copyListeners()); 649189445c0a66d074dcded77b9c7322ef45422727George Mount assertEquals(0, registry.copyListeners().size()); 659189445c0a66d074dcded77b9c7322ef45422727George Mount 669189445c0a66d074dcded77b9c7322ef45422727George Mount registry.add(callback); 679189445c0a66d074dcded77b9c7322ef45422727George Mount ArrayList<Integer> callbacks = registry.copyListeners(); 689189445c0a66d074dcded77b9c7322ef45422727George Mount assertEquals(1, callbacks.size()); 699189445c0a66d074dcded77b9c7322ef45422727George Mount assertEquals(callback, callbacks.get(0)); 709189445c0a66d074dcded77b9c7322ef45422727George Mount 719189445c0a66d074dcded77b9c7322ef45422727George Mount registry.add(callback); 729189445c0a66d074dcded77b9c7322ef45422727George Mount callbacks = registry.copyListeners(); 739189445c0a66d074dcded77b9c7322ef45422727George Mount assertEquals(1, callbacks.size()); 749189445c0a66d074dcded77b9c7322ef45422727George Mount assertEquals(callback, callbacks.get(0)); 759189445c0a66d074dcded77b9c7322ef45422727George Mount 769189445c0a66d074dcded77b9c7322ef45422727George Mount Integer otherListener = 1; 779189445c0a66d074dcded77b9c7322ef45422727George Mount registry.add(otherListener); 789189445c0a66d074dcded77b9c7322ef45422727George Mount callbacks = registry.copyListeners(); 799189445c0a66d074dcded77b9c7322ef45422727George Mount assertEquals(2, callbacks.size()); 809189445c0a66d074dcded77b9c7322ef45422727George Mount assertEquals(callback, callbacks.get(0)); 819189445c0a66d074dcded77b9c7322ef45422727George Mount assertEquals(otherListener, callbacks.get(1)); 829189445c0a66d074dcded77b9c7322ef45422727George Mount 839189445c0a66d074dcded77b9c7322ef45422727George Mount registry.remove(callback); 849189445c0a66d074dcded77b9c7322ef45422727George Mount registry.add(callback); 859189445c0a66d074dcded77b9c7322ef45422727George Mount callbacks = registry.copyListeners(); 869189445c0a66d074dcded77b9c7322ef45422727George Mount assertEquals(2, callbacks.size()); 879189445c0a66d074dcded77b9c7322ef45422727George Mount assertEquals(callback, callbacks.get(1)); 889189445c0a66d074dcded77b9c7322ef45422727George Mount assertEquals(otherListener, callbacks.get(0)); 899189445c0a66d074dcded77b9c7322ef45422727George Mount } 909189445c0a66d074dcded77b9c7322ef45422727George Mount 919189445c0a66d074dcded77b9c7322ef45422727George Mount public void testSimpleNotify() { 929189445c0a66d074dcded77b9c7322ef45422727George Mount CallbackRegistry.NotifierCallback<Integer, CallbackRegistryTest, Integer> notifier = 939189445c0a66d074dcded77b9c7322ef45422727George Mount new CallbackRegistry.NotifierCallback<Integer, CallbackRegistryTest, Integer>() { 949189445c0a66d074dcded77b9c7322ef45422727George Mount @Override 959189445c0a66d074dcded77b9c7322ef45422727George Mount public void onNotifyCallback(Integer callback, CallbackRegistryTest sender, 969189445c0a66d074dcded77b9c7322ef45422727George Mount int arg1, Integer arg) { 979189445c0a66d074dcded77b9c7322ef45422727George Mount assertEquals(arg1, (int) arg); 989189445c0a66d074dcded77b9c7322ef45422727George Mount addNotifyCount(callback); 999189445c0a66d074dcded77b9c7322ef45422727George Mount argValue = arg; 1009189445c0a66d074dcded77b9c7322ef45422727George Mount } 1019189445c0a66d074dcded77b9c7322ef45422727George Mount }; 1029189445c0a66d074dcded77b9c7322ef45422727George Mount registry = new CallbackRegistry<Integer, CallbackRegistryTest, Integer>(notifier); 1039189445c0a66d074dcded77b9c7322ef45422727George Mount registry.add(callback2); 1049189445c0a66d074dcded77b9c7322ef45422727George Mount Integer arg = 1; 1059189445c0a66d074dcded77b9c7322ef45422727George Mount registry.notifyCallbacks(this, arg, arg); 1069189445c0a66d074dcded77b9c7322ef45422727George Mount assertEquals(arg, argValue); 1079189445c0a66d074dcded77b9c7322ef45422727George Mount assertEquals(1, notify2); 1089189445c0a66d074dcded77b9c7322ef45422727George Mount } 1099189445c0a66d074dcded77b9c7322ef45422727George Mount 1109189445c0a66d074dcded77b9c7322ef45422727George Mount public void testRemoveWhileNotifying() { 1119189445c0a66d074dcded77b9c7322ef45422727George Mount CallbackRegistry.NotifierCallback<Integer, CallbackRegistryTest, Integer> notifier = 1129189445c0a66d074dcded77b9c7322ef45422727George Mount new CallbackRegistry.NotifierCallback<Integer, CallbackRegistryTest, Integer>() { 1139189445c0a66d074dcded77b9c7322ef45422727George Mount @Override 1149189445c0a66d074dcded77b9c7322ef45422727George Mount public void onNotifyCallback(Integer callback, CallbackRegistryTest sender, 1159189445c0a66d074dcded77b9c7322ef45422727George Mount int arg1, Integer arg) { 1169189445c0a66d074dcded77b9c7322ef45422727George Mount addNotifyCount(callback); 1179189445c0a66d074dcded77b9c7322ef45422727George Mount if (callback == callback1) { 1189189445c0a66d074dcded77b9c7322ef45422727George Mount registry.remove(callback1); 1199189445c0a66d074dcded77b9c7322ef45422727George Mount registry.remove(callback2); 1209189445c0a66d074dcded77b9c7322ef45422727George Mount } 1219189445c0a66d074dcded77b9c7322ef45422727George Mount } 1229189445c0a66d074dcded77b9c7322ef45422727George Mount }; 1239189445c0a66d074dcded77b9c7322ef45422727George Mount registry = new CallbackRegistry<Integer, CallbackRegistryTest, Integer>(notifier); 1249189445c0a66d074dcded77b9c7322ef45422727George Mount registry.add(callback1); 1259189445c0a66d074dcded77b9c7322ef45422727George Mount registry.add(callback2); 1269189445c0a66d074dcded77b9c7322ef45422727George Mount registry.add(callback3); 1279189445c0a66d074dcded77b9c7322ef45422727George Mount registry.notifyCallbacks(this, 0, null); 1289189445c0a66d074dcded77b9c7322ef45422727George Mount assertEquals(1, notify1); 1299189445c0a66d074dcded77b9c7322ef45422727George Mount assertEquals(1, notify2); 1309189445c0a66d074dcded77b9c7322ef45422727George Mount assertEquals(1, notify3); 1319189445c0a66d074dcded77b9c7322ef45422727George Mount 1329189445c0a66d074dcded77b9c7322ef45422727George Mount ArrayList<Integer> callbacks = registry.copyListeners(); 1339189445c0a66d074dcded77b9c7322ef45422727George Mount assertEquals(1, callbacks.size()); 1349189445c0a66d074dcded77b9c7322ef45422727George Mount assertEquals(callback3, callbacks.get(0)); 1359189445c0a66d074dcded77b9c7322ef45422727George Mount } 1369189445c0a66d074dcded77b9c7322ef45422727George Mount 1379189445c0a66d074dcded77b9c7322ef45422727George Mount public void testDeepRemoveWhileNotifying() { 1389189445c0a66d074dcded77b9c7322ef45422727George Mount CallbackRegistry.NotifierCallback<Integer, CallbackRegistryTest, Integer> notifier = 1399189445c0a66d074dcded77b9c7322ef45422727George Mount new CallbackRegistry.NotifierCallback<Integer, CallbackRegistryTest, Integer>() { 1409189445c0a66d074dcded77b9c7322ef45422727George Mount @Override 1419189445c0a66d074dcded77b9c7322ef45422727George Mount public void onNotifyCallback(Integer callback, CallbackRegistryTest sender, 1429189445c0a66d074dcded77b9c7322ef45422727George Mount int arg1, Integer arg) { 1439189445c0a66d074dcded77b9c7322ef45422727George Mount addNotifyCount(callback); 1449189445c0a66d074dcded77b9c7322ef45422727George Mount registry.remove(callback); 1459189445c0a66d074dcded77b9c7322ef45422727George Mount registry.notifyCallbacks(CallbackRegistryTest.this, arg1, null); 1469189445c0a66d074dcded77b9c7322ef45422727George Mount } 1479189445c0a66d074dcded77b9c7322ef45422727George Mount }; 1489189445c0a66d074dcded77b9c7322ef45422727George Mount registry = new CallbackRegistry<Integer, CallbackRegistryTest, Integer>(notifier); 1499189445c0a66d074dcded77b9c7322ef45422727George Mount registry.add(callback1); 1509189445c0a66d074dcded77b9c7322ef45422727George Mount registry.add(callback2); 1519189445c0a66d074dcded77b9c7322ef45422727George Mount registry.add(callback3); 1529189445c0a66d074dcded77b9c7322ef45422727George Mount registry.notifyCallbacks(this, 0, null); 1539189445c0a66d074dcded77b9c7322ef45422727George Mount assertEquals(1, notify1); 1549189445c0a66d074dcded77b9c7322ef45422727George Mount assertEquals(2, notify2); 1559189445c0a66d074dcded77b9c7322ef45422727George Mount assertEquals(3, notify3); 1569189445c0a66d074dcded77b9c7322ef45422727George Mount 1579189445c0a66d074dcded77b9c7322ef45422727George Mount ArrayList<Integer> callbacks = registry.copyListeners(); 1589189445c0a66d074dcded77b9c7322ef45422727George Mount assertEquals(0, callbacks.size()); 1599189445c0a66d074dcded77b9c7322ef45422727George Mount } 1609189445c0a66d074dcded77b9c7322ef45422727George Mount 1619189445c0a66d074dcded77b9c7322ef45422727George Mount public void testAddRemovedListener() { 1629189445c0a66d074dcded77b9c7322ef45422727George Mount 1639189445c0a66d074dcded77b9c7322ef45422727George Mount CallbackRegistry.NotifierCallback<Integer, CallbackRegistryTest, Integer> notifier = 1649189445c0a66d074dcded77b9c7322ef45422727George Mount new CallbackRegistry.NotifierCallback<Integer, CallbackRegistryTest, Integer>() { 1659189445c0a66d074dcded77b9c7322ef45422727George Mount @Override 1669189445c0a66d074dcded77b9c7322ef45422727George Mount public void onNotifyCallback(Integer callback, CallbackRegistryTest sender, 1679189445c0a66d074dcded77b9c7322ef45422727George Mount int arg1, Integer arg) { 1689189445c0a66d074dcded77b9c7322ef45422727George Mount addNotifyCount(callback); 1699189445c0a66d074dcded77b9c7322ef45422727George Mount if (callback == callback1) { 1709189445c0a66d074dcded77b9c7322ef45422727George Mount registry.remove(callback2); 1719189445c0a66d074dcded77b9c7322ef45422727George Mount } else if (callback == callback3) { 1729189445c0a66d074dcded77b9c7322ef45422727George Mount registry.add(callback2); 1739189445c0a66d074dcded77b9c7322ef45422727George Mount } 1749189445c0a66d074dcded77b9c7322ef45422727George Mount } 1759189445c0a66d074dcded77b9c7322ef45422727George Mount }; 1769189445c0a66d074dcded77b9c7322ef45422727George Mount registry = new CallbackRegistry<Integer, CallbackRegistryTest, Integer>(notifier); 1779189445c0a66d074dcded77b9c7322ef45422727George Mount 1789189445c0a66d074dcded77b9c7322ef45422727George Mount registry.add(callback1); 1799189445c0a66d074dcded77b9c7322ef45422727George Mount registry.add(callback2); 1809189445c0a66d074dcded77b9c7322ef45422727George Mount registry.add(callback3); 1819189445c0a66d074dcded77b9c7322ef45422727George Mount registry.notifyCallbacks(this, 0, null); 1829189445c0a66d074dcded77b9c7322ef45422727George Mount 1839189445c0a66d074dcded77b9c7322ef45422727George Mount ArrayList<Integer> callbacks = registry.copyListeners(); 1849189445c0a66d074dcded77b9c7322ef45422727George Mount assertEquals(3, callbacks.size()); 1859189445c0a66d074dcded77b9c7322ef45422727George Mount assertEquals(callback1, callbacks.get(0)); 1869189445c0a66d074dcded77b9c7322ef45422727George Mount assertEquals(callback3, callbacks.get(1)); 1879189445c0a66d074dcded77b9c7322ef45422727George Mount assertEquals(callback2, callbacks.get(2)); 1889189445c0a66d074dcded77b9c7322ef45422727George Mount assertEquals(1, notify1); 1899189445c0a66d074dcded77b9c7322ef45422727George Mount assertEquals(1, notify2); 1909189445c0a66d074dcded77b9c7322ef45422727George Mount assertEquals(1, notify3); 1919189445c0a66d074dcded77b9c7322ef45422727George Mount } 1929189445c0a66d074dcded77b9c7322ef45422727George Mount 1939189445c0a66d074dcded77b9c7322ef45422727George Mount public void testVeryDeepRemoveWhileNotifying() { 1949189445c0a66d074dcded77b9c7322ef45422727George Mount final Integer[] callbacks = new Integer[deepNotifyCount.length]; 1959189445c0a66d074dcded77b9c7322ef45422727George Mount for (int i = 0; i < callbacks.length; i++) { 1969189445c0a66d074dcded77b9c7322ef45422727George Mount callbacks[i] = i; 1979189445c0a66d074dcded77b9c7322ef45422727George Mount } 1989189445c0a66d074dcded77b9c7322ef45422727George Mount CallbackRegistry.NotifierCallback<Integer, CallbackRegistryTest, Integer> notifier = 1999189445c0a66d074dcded77b9c7322ef45422727George Mount new CallbackRegistry.NotifierCallback<Integer, CallbackRegistryTest, Integer>() { 2009189445c0a66d074dcded77b9c7322ef45422727George Mount @Override 2019189445c0a66d074dcded77b9c7322ef45422727George Mount public void onNotifyCallback(Integer callback, CallbackRegistryTest sender, 2029189445c0a66d074dcded77b9c7322ef45422727George Mount int arg1, Integer arg) { 2039189445c0a66d074dcded77b9c7322ef45422727George Mount addNotifyCount(callback); 2049189445c0a66d074dcded77b9c7322ef45422727George Mount registry.remove(callback); 2059189445c0a66d074dcded77b9c7322ef45422727George Mount registry.remove(callbacks[callbacks.length - callback - 1]); 2069189445c0a66d074dcded77b9c7322ef45422727George Mount registry.notifyCallbacks(CallbackRegistryTest.this, arg1, null); 2079189445c0a66d074dcded77b9c7322ef45422727George Mount } 2089189445c0a66d074dcded77b9c7322ef45422727George Mount }; 2099189445c0a66d074dcded77b9c7322ef45422727George Mount registry = new CallbackRegistry<Integer, CallbackRegistryTest, Integer>(notifier); 2109189445c0a66d074dcded77b9c7322ef45422727George Mount for (int i = 0; i < callbacks.length; i++) { 2119189445c0a66d074dcded77b9c7322ef45422727George Mount registry.add(callbacks[i]); 2129189445c0a66d074dcded77b9c7322ef45422727George Mount } 2139189445c0a66d074dcded77b9c7322ef45422727George Mount registry.notifyCallbacks(this, 0, null); 2149189445c0a66d074dcded77b9c7322ef45422727George Mount for (int i = 0; i < deepNotifyCount.length; i++) { 2159189445c0a66d074dcded77b9c7322ef45422727George Mount int expectedCount = Math.min(i + 1, deepNotifyCount.length - i); 2169189445c0a66d074dcded77b9c7322ef45422727George Mount assertEquals(expectedCount, deepNotifyCount[i]); 2179189445c0a66d074dcded77b9c7322ef45422727George Mount } 2189189445c0a66d074dcded77b9c7322ef45422727George Mount 2199189445c0a66d074dcded77b9c7322ef45422727George Mount ArrayList<Integer> callbackList = registry.copyListeners(); 2209189445c0a66d074dcded77b9c7322ef45422727George Mount assertEquals(0, callbackList.size()); 2219189445c0a66d074dcded77b9c7322ef45422727George Mount } 2229189445c0a66d074dcded77b9c7322ef45422727George Mount 2239189445c0a66d074dcded77b9c7322ef45422727George Mount public void testClear() { 2249189445c0a66d074dcded77b9c7322ef45422727George Mount CallbackRegistry.NotifierCallback<Integer, CallbackRegistryTest, Integer> notifier = 2259189445c0a66d074dcded77b9c7322ef45422727George Mount new CallbackRegistry.NotifierCallback<Integer, CallbackRegistryTest, Integer>() { 2269189445c0a66d074dcded77b9c7322ef45422727George Mount @Override 2279189445c0a66d074dcded77b9c7322ef45422727George Mount public void onNotifyCallback(Integer callback, CallbackRegistryTest sender, 2289189445c0a66d074dcded77b9c7322ef45422727George Mount int arg1, Integer arg) { 2299189445c0a66d074dcded77b9c7322ef45422727George Mount addNotifyCount(callback); 2309189445c0a66d074dcded77b9c7322ef45422727George Mount } 2319189445c0a66d074dcded77b9c7322ef45422727George Mount }; 2329189445c0a66d074dcded77b9c7322ef45422727George Mount registry = new CallbackRegistry<Integer, CallbackRegistryTest, Integer>(notifier); 2339189445c0a66d074dcded77b9c7322ef45422727George Mount for (int i = 0; i < deepNotifyCount.length; i++) { 2349189445c0a66d074dcded77b9c7322ef45422727George Mount registry.add(i); 2359189445c0a66d074dcded77b9c7322ef45422727George Mount } 2369189445c0a66d074dcded77b9c7322ef45422727George Mount registry.clear(); 2379189445c0a66d074dcded77b9c7322ef45422727George Mount 2389189445c0a66d074dcded77b9c7322ef45422727George Mount ArrayList<Integer> callbackList = registry.copyListeners(); 2399189445c0a66d074dcded77b9c7322ef45422727George Mount assertEquals(0, callbackList.size()); 2409189445c0a66d074dcded77b9c7322ef45422727George Mount 2419189445c0a66d074dcded77b9c7322ef45422727George Mount registry.notifyCallbacks(this, 0, null); 2429189445c0a66d074dcded77b9c7322ef45422727George Mount for (int i = 0; i < deepNotifyCount.length; i++) { 2439189445c0a66d074dcded77b9c7322ef45422727George Mount assertEquals(0, deepNotifyCount[i]); 2449189445c0a66d074dcded77b9c7322ef45422727George Mount } 2459189445c0a66d074dcded77b9c7322ef45422727George Mount } 2469189445c0a66d074dcded77b9c7322ef45422727George Mount 2479189445c0a66d074dcded77b9c7322ef45422727George Mount public void testNestedClear() { 2489189445c0a66d074dcded77b9c7322ef45422727George Mount CallbackRegistry.NotifierCallback<Integer, CallbackRegistryTest, Integer> notifier = 2499189445c0a66d074dcded77b9c7322ef45422727George Mount new CallbackRegistry.NotifierCallback<Integer, CallbackRegistryTest, Integer>() { 2509189445c0a66d074dcded77b9c7322ef45422727George Mount @Override 2519189445c0a66d074dcded77b9c7322ef45422727George Mount public void onNotifyCallback(Integer callback, CallbackRegistryTest sender, 2529189445c0a66d074dcded77b9c7322ef45422727George Mount int arg1, Integer arg) { 2539189445c0a66d074dcded77b9c7322ef45422727George Mount addNotifyCount(callback); 2549189445c0a66d074dcded77b9c7322ef45422727George Mount registry.clear(); 2559189445c0a66d074dcded77b9c7322ef45422727George Mount } 2569189445c0a66d074dcded77b9c7322ef45422727George Mount }; 2579189445c0a66d074dcded77b9c7322ef45422727George Mount registry = new CallbackRegistry<Integer, CallbackRegistryTest, Integer>(notifier); 2589189445c0a66d074dcded77b9c7322ef45422727George Mount for (int i = 0; i < deepNotifyCount.length; i++) { 2599189445c0a66d074dcded77b9c7322ef45422727George Mount registry.add(i); 2609189445c0a66d074dcded77b9c7322ef45422727George Mount } 2619189445c0a66d074dcded77b9c7322ef45422727George Mount registry.notifyCallbacks(this, 0, null); 2629189445c0a66d074dcded77b9c7322ef45422727George Mount for (int i = 0; i < deepNotifyCount.length; i++) { 2639189445c0a66d074dcded77b9c7322ef45422727George Mount assertEquals(1, deepNotifyCount[i]); 2649189445c0a66d074dcded77b9c7322ef45422727George Mount } 2659189445c0a66d074dcded77b9c7322ef45422727George Mount 2669189445c0a66d074dcded77b9c7322ef45422727George Mount ArrayList<Integer> callbackList = registry.copyListeners(); 2679189445c0a66d074dcded77b9c7322ef45422727George Mount assertEquals(0, callbackList.size()); 2689189445c0a66d074dcded77b9c7322ef45422727George Mount } 2699189445c0a66d074dcded77b9c7322ef45422727George Mount 2709189445c0a66d074dcded77b9c7322ef45422727George Mount public void testIsEmpty() throws Exception { 2719189445c0a66d074dcded77b9c7322ef45422727George Mount CallbackRegistry.NotifierCallback<Integer, CallbackRegistryTest, Integer> notifier = 2729189445c0a66d074dcded77b9c7322ef45422727George Mount new CallbackRegistry.NotifierCallback<Integer, CallbackRegistryTest, Integer>() { 2739189445c0a66d074dcded77b9c7322ef45422727George Mount @Override 2749189445c0a66d074dcded77b9c7322ef45422727George Mount public void onNotifyCallback(Integer callback, CallbackRegistryTest sender, 2759189445c0a66d074dcded77b9c7322ef45422727George Mount int arg, Integer arg2) { 2769189445c0a66d074dcded77b9c7322ef45422727George Mount } 2779189445c0a66d074dcded77b9c7322ef45422727George Mount }; 2789189445c0a66d074dcded77b9c7322ef45422727George Mount registry = new CallbackRegistry<Integer, CallbackRegistryTest, Integer>(notifier); 2799189445c0a66d074dcded77b9c7322ef45422727George Mount Integer callback = 0; 2809189445c0a66d074dcded77b9c7322ef45422727George Mount 2819189445c0a66d074dcded77b9c7322ef45422727George Mount assertTrue(registry.isEmpty()); 2829189445c0a66d074dcded77b9c7322ef45422727George Mount registry.add(callback); 2839189445c0a66d074dcded77b9c7322ef45422727George Mount assertFalse(registry.isEmpty()); 2849189445c0a66d074dcded77b9c7322ef45422727George Mount } 2859189445c0a66d074dcded77b9c7322ef45422727George Mount 2869189445c0a66d074dcded77b9c7322ef45422727George Mount public void testClone() throws Exception { 2879189445c0a66d074dcded77b9c7322ef45422727George Mount CallbackRegistry.NotifierCallback<Integer, CallbackRegistryTest, Integer> notifier = 2889189445c0a66d074dcded77b9c7322ef45422727George Mount new CallbackRegistry.NotifierCallback<Integer, CallbackRegistryTest, Integer>() { 2899189445c0a66d074dcded77b9c7322ef45422727George Mount @Override 2909189445c0a66d074dcded77b9c7322ef45422727George Mount public void onNotifyCallback(Integer callback, CallbackRegistryTest sender, 2919189445c0a66d074dcded77b9c7322ef45422727George Mount int arg, Integer arg2) { 2929189445c0a66d074dcded77b9c7322ef45422727George Mount } 2939189445c0a66d074dcded77b9c7322ef45422727George Mount }; 2949189445c0a66d074dcded77b9c7322ef45422727George Mount registry = new CallbackRegistry<Integer, CallbackRegistryTest, Integer>(notifier); 2959189445c0a66d074dcded77b9c7322ef45422727George Mount 2969189445c0a66d074dcded77b9c7322ef45422727George Mount assertTrue(registry.isEmpty()); 2979189445c0a66d074dcded77b9c7322ef45422727George Mount CallbackRegistry<Integer, CallbackRegistryTest, Integer> registry2 = registry.clone(); 2989189445c0a66d074dcded77b9c7322ef45422727George Mount Integer callback = 0; 2999189445c0a66d074dcded77b9c7322ef45422727George Mount registry.add(callback); 3009189445c0a66d074dcded77b9c7322ef45422727George Mount assertFalse(registry.isEmpty()); 3019189445c0a66d074dcded77b9c7322ef45422727George Mount assertTrue(registry2.isEmpty()); 3029189445c0a66d074dcded77b9c7322ef45422727George Mount registry2 = registry.clone(); 3039189445c0a66d074dcded77b9c7322ef45422727George Mount assertFalse(registry2.isEmpty()); 3049189445c0a66d074dcded77b9c7322ef45422727George Mount } 3059189445c0a66d074dcded77b9c7322ef45422727George Mount} 306