• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2015 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 package android.databinding.testapp;
17 
18 import android.databinding.ObservableArrayList;
19 import android.databinding.testapp.databinding.BasicBindingBinding;
20 
21 import android.databinding.ObservableList;
22 import android.databinding.ObservableList.OnListChangedCallback;
23 
24 import java.util.ArrayList;
25 
26 public class ObservableArrayListTest extends BaseDataBinderTest<BasicBindingBinding> {
27 
28     private static final int ALL = 0;
29 
30     private static final int CHANGE = 1;
31 
32     private static final int INSERT = 2;
33 
34     private static final int MOVE = 3;
35 
36     private static final int REMOVE = 4;
37 
38     private ObservableList<String> mObservable;
39 
40     private ArrayList<ListChange> mNotifications = new ArrayList<>();
41 
42     private OnListChangedCallback mListener = new OnListChangedCallback() {
43         @Override
44         public void onChanged(ObservableList sender) {
45             mNotifications.add(new ListChange(ALL, 0, 0));
46         }
47 
48         @Override
49         public void onItemRangeChanged(ObservableList sender, int start, int count) {
50             mNotifications.add(new ListChange(CHANGE, start, count));
51         }
52 
53         @Override
54         public void onItemRangeInserted(ObservableList sender, int start, int count) {
55             mNotifications.add(new ListChange(INSERT, start, count));
56         }
57 
58         @Override
59         public void onItemRangeMoved(ObservableList sender, int from, int to, int count) {
60             mNotifications.add(new ListChange(MOVE, from, to, count));
61         }
62 
63         @Override
64         public void onItemRangeRemoved(ObservableList sender, int start, int count) {
65             mNotifications.add(new ListChange(REMOVE, start, count));
66         }
67     };
68 
69     private static class ListChange {
70 
ListChange(int change, int start, int count)71         public ListChange(int change, int start, int count) {
72             this.start = start;
73             this.count = count;
74             this.from = 0;
75             this.to = 0;
76             this.change = change;
77         }
78 
ListChange(int change, int from, int to, int count)79         public ListChange(int change, int from, int to, int count) {
80             this.from = from;
81             this.to = to;
82             this.count = count;
83             this.start = 0;
84             this.change = change;
85         }
86 
87         public final int start;
88 
89         public final int count;
90 
91         public final int from;
92 
93         public final int to;
94 
95         public final int change;
96     }
97 
ObservableArrayListTest()98     public ObservableArrayListTest() {
99         super(BasicBindingBinding.class);
100     }
101 
102     @Override
setUp()103     protected void setUp() throws Exception {
104         mNotifications.clear();
105         mObservable = new ObservableArrayList<>();
106     }
107 
testAddListener()108     public void testAddListener() {
109         mObservable.add("Hello");
110         assertTrue(mNotifications.isEmpty());
111         mObservable.addOnListChangedCallback(mListener);
112         mObservable.add("World");
113         assertFalse(mNotifications.isEmpty());
114     }
115 
testRemoveListener()116     public void testRemoveListener() {
117         // test there is no exception when the listener isn't there
118         mObservable.removeOnListChangedCallback(mListener);
119 
120         mObservable.addOnListChangedCallback(mListener);
121         mObservable.add("Hello");
122         mNotifications.clear();
123         mObservable.removeOnListChangedCallback(mListener);
124         mObservable.add("World");
125         assertTrue(mNotifications.isEmpty());
126 
127         // test there is no exception when the listener isn't there
128         mObservable.removeOnListChangedCallback(mListener);
129     }
130 
testAdd()131     public void testAdd() {
132         OnListChangedCallback listChangedListener = new OnListChangedCallback() {
133             @Override
134             public void onChanged(ObservableList sender) {
135             }
136 
137             @Override
138             public void onItemRangeChanged(ObservableList sender, int i, int i1) {
139 
140             }
141 
142             @Override
143             public void onItemRangeInserted(ObservableList sender, int i, int i1) {
144 
145             }
146 
147             @Override
148             public void onItemRangeMoved(ObservableList sender, int i, int i1, int i2) {
149 
150             }
151 
152             @Override
153             public void onItemRangeRemoved(ObservableList sender, int i, int i1) {
154             }
155         };
156         mObservable.addOnListChangedCallback(mListener);
157         mObservable.addOnListChangedCallback(listChangedListener);
158         mObservable.add("Hello");
159         assertEquals(1, mNotifications.size());
160         ListChange change = mNotifications.get(0);
161         assertEquals(INSERT, change.change);
162         assertEquals(0, change.start);
163         assertEquals(1, change.count);
164         assertEquals("Hello", mObservable.get(0));
165     }
166 
testInsert()167     public void testInsert() {
168         mObservable.addOnListChangedCallback(mListener);
169         mObservable.add("Hello");
170         mObservable.add(0, "World");
171         mObservable.add(1, "Dang");
172         mObservable.add(3, "End");
173         assertEquals(4, mObservable.size());
174         assertEquals("World", mObservable.get(0));
175         assertEquals("Dang", mObservable.get(1));
176         assertEquals("Hello", mObservable.get(2));
177         assertEquals("End", mObservable.get(3));
178         assertEquals(4, mNotifications.size());
179         ListChange change = mNotifications.get(1);
180         assertEquals(INSERT, change.change);
181         assertEquals(0, change.start);
182         assertEquals(1, change.count);
183     }
184 
testAddAll()185     public void testAddAll() {
186         ArrayList<String> toAdd = new ArrayList<>();
187         toAdd.add("Hello");
188         toAdd.add("World");
189         mObservable.add("First");
190         mObservable.addOnListChangedCallback(mListener);
191         mObservable.addAll(toAdd);
192         assertEquals(3, mObservable.size());
193         assertEquals("Hello", mObservable.get(1));
194         assertEquals("World", mObservable.get(2));
195         assertEquals(1, mNotifications.size());
196         ListChange change = mNotifications.get(0);
197         assertEquals(INSERT, change.change);
198         assertEquals(1, change.start);
199         assertEquals(2, change.count);
200     }
201 
testInsertAll()202     public void testInsertAll() {
203         ArrayList<String> toAdd = new ArrayList<>();
204         toAdd.add("Hello");
205         toAdd.add("World");
206         mObservable.add("First");
207         mObservable.addOnListChangedCallback(mListener);
208         mObservable.addAll(0, toAdd);
209         assertEquals(3, mObservable.size());
210         assertEquals("Hello", mObservable.get(0));
211         assertEquals("World", mObservable.get(1));
212         assertEquals(1, mNotifications.size());
213         ListChange change = mNotifications.get(0);
214         assertEquals(INSERT, change.change);
215         assertEquals(0, change.start);
216         assertEquals(2, change.count);
217     }
218 
testClear()219     public void testClear() {
220         mObservable.add("Hello");
221         mObservable.add("World");
222         mObservable.addOnListChangedCallback(mListener);
223         mObservable.clear();
224         assertEquals(1, mNotifications.size());
225         ListChange change = mNotifications.get(0);
226         assertEquals(REMOVE, change.change);
227         assertEquals(0, change.start);
228         assertEquals(2, change.count);
229 
230         mObservable.clear();
231         // No notification when nothing is cleared.
232         assertEquals(1, mNotifications.size());
233     }
234 
testRemoveIndex()235     public void testRemoveIndex() {
236         mObservable.add("Hello");
237         mObservable.add("World");
238         mObservable.addOnListChangedCallback(mListener);
239         assertEquals("Hello", mObservable.remove(0));
240         assertEquals(1, mNotifications.size());
241         ListChange change = mNotifications.get(0);
242         assertEquals(REMOVE, change.change);
243         assertEquals(0, change.start);
244         assertEquals(1, change.count);
245     }
246 
testRemoveObject()247     public void testRemoveObject() {
248         mObservable.add("Hello");
249         mObservable.add("World");
250         mObservable.addOnListChangedCallback(mListener);
251         assertTrue(mObservable.remove("Hello"));
252         assertEquals(1, mNotifications.size());
253         ListChange change = mNotifications.get(0);
254         assertEquals(REMOVE, change.change);
255         assertEquals(0, change.start);
256         assertEquals(1, change.count);
257 
258         assertFalse(mObservable.remove("Hello"));
259         // nothing removed, don't notify
260         assertEquals(1, mNotifications.size());
261     }
262 
testSet()263     public void testSet() {
264         mObservable.add("Hello");
265         mObservable.add("World");
266         mObservable.addOnListChangedCallback(mListener);
267         assertEquals("Hello", mObservable.set(0, "Goodbye"));
268         assertEquals("Goodbye", mObservable.get(0));
269         assertEquals(2, mObservable.size());
270         ListChange change = mNotifications.get(0);
271         assertEquals(CHANGE, change.change);
272         assertEquals(0, change.start);
273         assertEquals(1, change.count);
274     }
275 }
276