1a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyar/* 2a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyar * Copyright (C) 2015 The Android Open Source Project 3a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyar * 4a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyar * Licensed under the Apache License, Version 2.0 (the "License"); 5a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyar * you may not use this file except in compliance with the License. 6a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyar * You may obtain a copy of the License at 7a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyar * 8a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyar * http://www.apache.org/licenses/LICENSE-2.0 9a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyar * 10a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyar * Unless required by applicable law or agreed to in writing, software 11a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyar * distributed under the License is distributed on an "AS IS" BASIS, 12a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyar * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyar * See the License for the specific language governing permissions and 14a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyar * limitations under the License. 15a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyar */ 16a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyar 17fead9ca09b117136b35bc5bf137340a754f9edddGeorge Mountpackage android.databinding.multimoduletestapp; 18a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyar 19fead9ca09b117136b35bc5bf137340a754f9edddGeorge Mountimport android.databinding.testlibrary.ObservableInLibrary; 20a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyar 2199a3d3102887d5b4c9c6713cb35d97b478088931Yigit Boyarimport android.databinding.Observable; 22722fe711207a37783dfa7142284b0ebe5bd503fbGeorge Mountimport android.databinding.Observable.OnPropertyChangedCallback; 23a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyarimport android.test.AndroidTestCase; 24a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyar 25a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyarimport java.util.HashMap; 26a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyarimport java.util.Map; 27a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyar 28fead9ca09b117136b35bc5bf137340a754f9edddGeorge Mountimport android.databinding.multimoduletestapp.BR; 29a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyar 30a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyarpublic class EventIdsTest extends AndroidTestCase { 31a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyar public void testLibraryObservable() { 32a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyar ObservableInLibrary observableInLibrary = new ObservableInLibrary(); 33a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyar EventCounter ec = new EventCounter(); 34722fe711207a37783dfa7142284b0ebe5bd503fbGeorge Mount observableInLibrary.addOnPropertyChangedCallback(ec); 35a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyar ec.assertProperty(BR.libField1, 0); 36a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyar ec.assertProperty(BR.libField2, 0); 37a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyar ec.assertProperty(BR.sharedField, 0); 38a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyar 39a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyar observableInLibrary.setLibField1("a"); 40a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyar ec.assertProperty(BR.libField1, 1); 41a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyar ec.assertProperty(BR.libField2, 0); 42a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyar ec.assertProperty(BR.sharedField, 0); 43a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyar 44a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyar observableInLibrary.setLibField2("b"); 45a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyar ec.assertProperty(BR.libField1, 1); 46a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyar ec.assertProperty(BR.libField2, 1); 47a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyar ec.assertProperty(BR.sharedField, 0); 48a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyar 49a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyar observableInLibrary.setSharedField(3); 50a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyar ec.assertProperty(BR.libField1, 1); 51a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyar ec.assertProperty(BR.libField2, 1); 52a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyar ec.assertProperty(BR.sharedField, 1); 53a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyar } 54a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyar 55a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyar public void testAppObservable() { 56a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyar ObservableInMainApp observableInMainApp = new ObservableInMainApp(); 57a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyar EventCounter ec = new EventCounter(); 58722fe711207a37783dfa7142284b0ebe5bd503fbGeorge Mount observableInMainApp.addOnPropertyChangedCallback(ec); 59a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyar ec.assertProperty(BR.appField1, 0); 60a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyar ec.assertProperty(BR.appField2, 0); 61a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyar ec.assertProperty(BR.sharedField, 0); 62a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyar 63a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyar observableInMainApp.setAppField2(3); 64a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyar ec.assertProperty(BR.appField1, 0); 65a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyar ec.assertProperty(BR.appField2, 1); 66a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyar ec.assertProperty(BR.sharedField, 0); 67a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyar 68a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyar observableInMainApp.setAppField1("b"); 69a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyar ec.assertProperty(BR.appField1, 1); 70a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyar ec.assertProperty(BR.appField2, 1); 71a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyar ec.assertProperty(BR.sharedField, 0); 72a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyar 73a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyar observableInMainApp.setSharedField(5); 74a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyar ec.assertProperty(BR.appField1, 1); 75a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyar ec.assertProperty(BR.appField2, 1); 76a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyar ec.assertProperty(BR.sharedField, 1); 77a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyar } 78a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyar 79a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyar public void testExtendingObservable() { 80a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyar ObservableExtendingLib observable = new ObservableExtendingLib(); 81a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyar EventCounter ec = new EventCounter(); 82722fe711207a37783dfa7142284b0ebe5bd503fbGeorge Mount observable.addOnPropertyChangedCallback(ec); 83a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyar 84a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyar ec.assertProperty(BR.childClassField, 0); 85a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyar ec.assertProperty(BR.libField1, 0); 86a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyar ec.assertProperty(BR.libField2, 0); 87a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyar ec.assertProperty(BR.sharedField, 0); 88a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyar 89a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyar observable.setChildClassField("a"); 90a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyar ec.assertProperty(BR.childClassField, 1); 91a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyar ec.assertProperty(BR.libField1, 0); 92a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyar ec.assertProperty(BR.libField2, 0); 93a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyar ec.assertProperty(BR.sharedField, 0); 94a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyar 95a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyar observable.setLibField1("b"); 96a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyar ec.assertProperty(BR.childClassField, 1); 97a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyar ec.assertProperty(BR.libField1, 1); 98a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyar ec.assertProperty(BR.libField2, 0); 99a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyar ec.assertProperty(BR.sharedField, 0); 100a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyar 101a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyar observable.setLibField2("c"); 102a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyar ec.assertProperty(BR.childClassField, 1); 103a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyar ec.assertProperty(BR.libField1, 1); 104a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyar ec.assertProperty(BR.libField2, 1); 105a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyar ec.assertProperty(BR.sharedField, 0); 106a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyar 107a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyar observable.setSharedField(2); 108a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyar ec.assertProperty(BR.childClassField, 1); 109a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyar ec.assertProperty(BR.libField1, 1); 110a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyar ec.assertProperty(BR.libField2, 1); 111a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyar ec.assertProperty(BR.sharedField, 1); 112a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyar } 113a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyar 114722fe711207a37783dfa7142284b0ebe5bd503fbGeorge Mount private static class EventCounter extends OnPropertyChangedCallback { 1150b6d118e6eeb3bc100fc6a6e66016ab812cb2783Yigit Boyar Map<Integer, Integer> mCounter = new HashMap<Integer, Integer>(); 116a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyar 117a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyar @Override 118a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyar public void onPropertyChanged(Observable observable, int propertyId) { 119a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyar mCounter.put(propertyId, get(propertyId) + 1); 120a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyar } 121a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyar 122a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyar public int get(int propertyId) { 123a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyar Integer val = mCounter.get(propertyId); 124a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyar return val == null ? 0 : val; 125a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyar } 126a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyar 127a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyar private void assertProperty(int propertyId, int value) { 128a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyar assertEquals(get(propertyId), value); 129a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyar } 130a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyar } 131a6e4583962e19e8e93b4ca3f9fe3d34560b6d96cYigit Boyar} 132