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