15cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount/* 25cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount * Copyright (C) 2015 The Android Open Source Project 35cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount * 45cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount * Licensed under the Apache License, Version 2.0 (the "License"); 55cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount * you may not use this file except in compliance with the License. 65cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount * You may obtain a copy of the License at 75cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount * 85cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount * http://www.apache.org/licenses/LICENSE-2.0 95cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount * 105cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount * Unless required by applicable law or agreed to in writing, software 115cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount * distributed under the License is distributed on an "AS IS" BASIS, 125cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 135cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount * See the License for the specific language governing permissions and 145cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount * limitations under the License. 155cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount */ 16fead9ca09b117136b35bc5bf137340a754f9edddGeorge Mountpackage android.databinding.testapp; 175cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount 18fead9ca09b117136b35bc5bf137340a754f9edddGeorge Mountimport android.databinding.ObservableArrayList; 192e2043d30f95585de2069e1cbb23e022ab0e71c4George Mountimport android.databinding.testapp.databinding.BasicBindingBinding; 205cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount 21fead9ca09b117136b35bc5bf137340a754f9edddGeorge Mountimport android.databinding.ObservableList; 22722fe711207a37783dfa7142284b0ebe5bd503fbGeorge Mountimport android.databinding.ObservableList.OnListChangedCallback; 235cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount 245cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mountimport java.util.ArrayList; 255cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount 264c5cc009bcbcfb19e33fb19db5ec80f83f7b3326George Mountpublic class ObservableArrayListTest extends BaseDataBinderTest<BasicBindingBinding> { 275cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount 285cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount private static final int ALL = 0; 295cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount 305cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount private static final int CHANGE = 1; 315cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount 325cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount private static final int INSERT = 2; 335cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount 345cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount private static final int MOVE = 3; 355cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount 365cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount private static final int REMOVE = 4; 375cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount 385cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount private ObservableList<String> mObservable; 395cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount 405cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount private ArrayList<ListChange> mNotifications = new ArrayList<>(); 415cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount 42722fe711207a37783dfa7142284b0ebe5bd503fbGeorge Mount private OnListChangedCallback mListener = new OnListChangedCallback() { 435cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount @Override 44722fe711207a37783dfa7142284b0ebe5bd503fbGeorge Mount public void onChanged(ObservableList sender) { 455cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount mNotifications.add(new ListChange(ALL, 0, 0)); 465cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount } 475cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount 485cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount @Override 49722fe711207a37783dfa7142284b0ebe5bd503fbGeorge Mount public void onItemRangeChanged(ObservableList sender, int start, int count) { 505cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount mNotifications.add(new ListChange(CHANGE, start, count)); 515cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount } 525cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount 535cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount @Override 54722fe711207a37783dfa7142284b0ebe5bd503fbGeorge Mount public void onItemRangeInserted(ObservableList sender, int start, int count) { 555cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount mNotifications.add(new ListChange(INSERT, start, count)); 565cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount } 575cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount 585cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount @Override 59722fe711207a37783dfa7142284b0ebe5bd503fbGeorge Mount public void onItemRangeMoved(ObservableList sender, int from, int to, int count) { 605cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount mNotifications.add(new ListChange(MOVE, from, to, count)); 615cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount } 625cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount 635cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount @Override 64722fe711207a37783dfa7142284b0ebe5bd503fbGeorge Mount public void onItemRangeRemoved(ObservableList sender, int start, int count) { 655cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount mNotifications.add(new ListChange(REMOVE, start, count)); 665cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount } 675cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount }; 685cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount 695cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount private static class ListChange { 705cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount 715cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount public ListChange(int change, int start, int count) { 725cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount this.start = start; 735cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount this.count = count; 745cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount this.from = 0; 755cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount this.to = 0; 765cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount this.change = change; 775cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount } 785cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount 795cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount public ListChange(int change, int from, int to, int count) { 805cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount this.from = from; 815cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount this.to = to; 825cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount this.count = count; 835cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount this.start = 0; 845cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount this.change = change; 855cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount } 865cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount 875cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount public final int start; 885cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount 895cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount public final int count; 905cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount 915cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount public final int from; 925cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount 935cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount public final int to; 945cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount 955cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount public final int change; 965cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount } 975cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount 985cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount public ObservableArrayListTest() { 994c5cc009bcbcfb19e33fb19db5ec80f83f7b3326George Mount super(BasicBindingBinding.class); 1005cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount } 1015cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount 1025cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount @Override 1035cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount protected void setUp() throws Exception { 1045cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount mNotifications.clear(); 1055cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount mObservable = new ObservableArrayList<>(); 1065cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount } 1075cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount 1085cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount public void testAddListener() { 1095cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount mObservable.add("Hello"); 1105cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount assertTrue(mNotifications.isEmpty()); 111722fe711207a37783dfa7142284b0ebe5bd503fbGeorge Mount mObservable.addOnListChangedCallback(mListener); 1125cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount mObservable.add("World"); 1135cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount assertFalse(mNotifications.isEmpty()); 1145cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount } 1155cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount 1165cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount public void testRemoveListener() { 1175cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount // test there is no exception when the listener isn't there 118722fe711207a37783dfa7142284b0ebe5bd503fbGeorge Mount mObservable.removeOnListChangedCallback(mListener); 1195cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount 120722fe711207a37783dfa7142284b0ebe5bd503fbGeorge Mount mObservable.addOnListChangedCallback(mListener); 1215cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount mObservable.add("Hello"); 1225cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount mNotifications.clear(); 123722fe711207a37783dfa7142284b0ebe5bd503fbGeorge Mount mObservable.removeOnListChangedCallback(mListener); 1245cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount mObservable.add("World"); 1255cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount assertTrue(mNotifications.isEmpty()); 1265cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount 1275cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount // test there is no exception when the listener isn't there 128722fe711207a37783dfa7142284b0ebe5bd503fbGeorge Mount mObservable.removeOnListChangedCallback(mListener); 1295cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount } 1305cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount 1315cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount public void testAdd() { 132722fe711207a37783dfa7142284b0ebe5bd503fbGeorge Mount OnListChangedCallback listChangedListener = new OnListChangedCallback() { 13365bf08e7cd0acc5e13ab131433e35981d4416a79George Mount @Override 134722fe711207a37783dfa7142284b0ebe5bd503fbGeorge Mount public void onChanged(ObservableList sender) { 13565bf08e7cd0acc5e13ab131433e35981d4416a79George Mount } 13665bf08e7cd0acc5e13ab131433e35981d4416a79George Mount 13765bf08e7cd0acc5e13ab131433e35981d4416a79George Mount @Override 138722fe711207a37783dfa7142284b0ebe5bd503fbGeorge Mount public void onItemRangeChanged(ObservableList sender, int i, int i1) { 13965bf08e7cd0acc5e13ab131433e35981d4416a79George Mount 14065bf08e7cd0acc5e13ab131433e35981d4416a79George Mount } 14165bf08e7cd0acc5e13ab131433e35981d4416a79George Mount 14265bf08e7cd0acc5e13ab131433e35981d4416a79George Mount @Override 143722fe711207a37783dfa7142284b0ebe5bd503fbGeorge Mount public void onItemRangeInserted(ObservableList sender, int i, int i1) { 14465bf08e7cd0acc5e13ab131433e35981d4416a79George Mount 14565bf08e7cd0acc5e13ab131433e35981d4416a79George Mount } 14665bf08e7cd0acc5e13ab131433e35981d4416a79George Mount 14765bf08e7cd0acc5e13ab131433e35981d4416a79George Mount @Override 148722fe711207a37783dfa7142284b0ebe5bd503fbGeorge Mount public void onItemRangeMoved(ObservableList sender, int i, int i1, int i2) { 14965bf08e7cd0acc5e13ab131433e35981d4416a79George Mount 15065bf08e7cd0acc5e13ab131433e35981d4416a79George Mount } 15165bf08e7cd0acc5e13ab131433e35981d4416a79George Mount 15265bf08e7cd0acc5e13ab131433e35981d4416a79George Mount @Override 153722fe711207a37783dfa7142284b0ebe5bd503fbGeorge Mount public void onItemRangeRemoved(ObservableList sender, int i, int i1) { 15465bf08e7cd0acc5e13ab131433e35981d4416a79George Mount } 15565bf08e7cd0acc5e13ab131433e35981d4416a79George Mount }; 156722fe711207a37783dfa7142284b0ebe5bd503fbGeorge Mount mObservable.addOnListChangedCallback(mListener); 157722fe711207a37783dfa7142284b0ebe5bd503fbGeorge Mount mObservable.addOnListChangedCallback(listChangedListener); 1585cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount mObservable.add("Hello"); 1595cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount assertEquals(1, mNotifications.size()); 1605cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount ListChange change = mNotifications.get(0); 1615cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount assertEquals(INSERT, change.change); 1625cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount assertEquals(0, change.start); 1635cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount assertEquals(1, change.count); 1645cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount assertEquals("Hello", mObservable.get(0)); 1655cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount } 1665cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount 1675cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount public void testInsert() { 168722fe711207a37783dfa7142284b0ebe5bd503fbGeorge Mount mObservable.addOnListChangedCallback(mListener); 1695cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount mObservable.add("Hello"); 1705cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount mObservable.add(0, "World"); 1715cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount mObservable.add(1, "Dang"); 1725cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount mObservable.add(3, "End"); 1735cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount assertEquals(4, mObservable.size()); 1745cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount assertEquals("World", mObservable.get(0)); 1755cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount assertEquals("Dang", mObservable.get(1)); 1765cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount assertEquals("Hello", mObservable.get(2)); 1775cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount assertEquals("End", mObservable.get(3)); 1785cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount assertEquals(4, mNotifications.size()); 1795cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount ListChange change = mNotifications.get(1); 1805cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount assertEquals(INSERT, change.change); 1815cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount assertEquals(0, change.start); 1825cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount assertEquals(1, change.count); 1835cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount } 1845cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount 1855cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount public void testAddAll() { 1865cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount ArrayList<String> toAdd = new ArrayList<>(); 1875cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount toAdd.add("Hello"); 1885cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount toAdd.add("World"); 1895cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount mObservable.add("First"); 190722fe711207a37783dfa7142284b0ebe5bd503fbGeorge Mount mObservable.addOnListChangedCallback(mListener); 1915cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount mObservable.addAll(toAdd); 1925cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount assertEquals(3, mObservable.size()); 1935cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount assertEquals("Hello", mObservable.get(1)); 1945cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount assertEquals("World", mObservable.get(2)); 1955cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount assertEquals(1, mNotifications.size()); 1965cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount ListChange change = mNotifications.get(0); 1975cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount assertEquals(INSERT, change.change); 1985cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount assertEquals(1, change.start); 1995cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount assertEquals(2, change.count); 2005cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount } 2015cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount 2025cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount public void testInsertAll() { 2035cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount ArrayList<String> toAdd = new ArrayList<>(); 2045cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount toAdd.add("Hello"); 2055cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount toAdd.add("World"); 2065cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount mObservable.add("First"); 207722fe711207a37783dfa7142284b0ebe5bd503fbGeorge Mount mObservable.addOnListChangedCallback(mListener); 2085cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount mObservable.addAll(0, toAdd); 2095cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount assertEquals(3, mObservable.size()); 2105cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount assertEquals("Hello", mObservable.get(0)); 2115cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount assertEquals("World", mObservable.get(1)); 2125cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount assertEquals(1, mNotifications.size()); 2135cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount ListChange change = mNotifications.get(0); 2145cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount assertEquals(INSERT, change.change); 2155cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount assertEquals(0, change.start); 2165cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount assertEquals(2, change.count); 2175cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount } 2185cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount 2195cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount public void testClear() { 2205cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount mObservable.add("Hello"); 2215cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount mObservable.add("World"); 222722fe711207a37783dfa7142284b0ebe5bd503fbGeorge Mount mObservable.addOnListChangedCallback(mListener); 2235cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount mObservable.clear(); 2245cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount assertEquals(1, mNotifications.size()); 2255cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount ListChange change = mNotifications.get(0); 2265cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount assertEquals(REMOVE, change.change); 2275cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount assertEquals(0, change.start); 2285cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount assertEquals(2, change.count); 2295cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount 2305cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount mObservable.clear(); 2315cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount // No notification when nothing is cleared. 2325cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount assertEquals(1, mNotifications.size()); 2335cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount } 2345cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount 2355cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount public void testRemoveIndex() { 2365cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount mObservable.add("Hello"); 2375cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount mObservable.add("World"); 238722fe711207a37783dfa7142284b0ebe5bd503fbGeorge Mount mObservable.addOnListChangedCallback(mListener); 2395cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount assertEquals("Hello", mObservable.remove(0)); 2405cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount assertEquals(1, mNotifications.size()); 2415cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount ListChange change = mNotifications.get(0); 2425cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount assertEquals(REMOVE, change.change); 2435cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount assertEquals(0, change.start); 2445cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount assertEquals(1, change.count); 2455cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount } 2465cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount 2475cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount public void testRemoveObject() { 2485cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount mObservable.add("Hello"); 2495cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount mObservable.add("World"); 250722fe711207a37783dfa7142284b0ebe5bd503fbGeorge Mount mObservable.addOnListChangedCallback(mListener); 2515cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount assertTrue(mObservable.remove("Hello")); 2525cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount assertEquals(1, mNotifications.size()); 2535cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount ListChange change = mNotifications.get(0); 2545cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount assertEquals(REMOVE, change.change); 2555cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount assertEquals(0, change.start); 2565cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount assertEquals(1, change.count); 2575cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount 2585cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount assertFalse(mObservable.remove("Hello")); 2595cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount // nothing removed, don't notify 2605cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount assertEquals(1, mNotifications.size()); 2615cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount } 2625cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount 2635cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount public void testSet() { 2645cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount mObservable.add("Hello"); 2655cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount mObservable.add("World"); 266722fe711207a37783dfa7142284b0ebe5bd503fbGeorge Mount mObservable.addOnListChangedCallback(mListener); 2675cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount assertEquals("Hello", mObservable.set(0, "Goodbye")); 2685cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount assertEquals("Goodbye", mObservable.get(0)); 2695cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount assertEquals(2, mObservable.size()); 2705cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount ListChange change = mNotifications.get(0); 2715cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount assertEquals(CHANGE, change.change); 2725cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount assertEquals(0, change.start); 2735cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount assertEquals(1, change.count); 2745cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount } 2755cc4e7270573c2c1a101fdade15287b405cf7d9cGeorge Mount} 276