| /* |
| * Copyright (C) 2015 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| package android.databinding.testapp; |
| |
| import android.databinding.ObservableArrayMap; |
| import android.databinding.testapp.databinding.BasicBindingBinding; |
| |
| import android.databinding.ObservableMap; |
| import android.databinding.ObservableMap.OnMapChangedCallback; |
| import android.support.v4.util.ArrayMap; |
| import android.support.v4.util.SimpleArrayMap; |
| |
| import java.util.ArrayList; |
| import java.util.Map; |
| |
| public class ObservableArrayMapTest extends BaseDataBinderTest<BasicBindingBinding> { |
| |
| private ObservableArrayMap<String, String> mObservable; |
| |
| private ArrayList<String> mNotifications = new ArrayList<>(); |
| |
| private OnMapChangedCallback mListener = new OnMapChangedCallback() { |
| @Override |
| public void onMapChanged(ObservableMap observableMap, Object o) { |
| assertEquals(mObservable, observableMap); |
| mNotifications.add((String) o); |
| } |
| }; |
| |
| public ObservableArrayMapTest() { |
| super(BasicBindingBinding.class); |
| } |
| |
| @Override |
| protected void setUp() throws Exception { |
| mNotifications.clear(); |
| mObservable = new ObservableArrayMap<>(); |
| } |
| |
| public void testAddListener() { |
| mObservable.put("Hello", "World"); |
| assertTrue(mNotifications.isEmpty()); |
| mObservable.addOnMapChangedCallback(mListener); |
| mObservable.put("Hello", "Goodbye"); |
| assertFalse(mNotifications.isEmpty()); |
| } |
| |
| public void testRemoveListener() { |
| // test there is no exception when the listener isn't there |
| mObservable.removeOnMapChangedCallback(mListener); |
| |
| mObservable.addOnMapChangedCallback(mListener); |
| mObservable.put("Hello", "World"); |
| mNotifications.clear(); |
| mObservable.removeOnMapChangedCallback(mListener); |
| mObservable.put("World", "Hello"); |
| assertTrue(mNotifications.isEmpty()); |
| |
| // test there is no exception when the listener isn't there |
| mObservable.removeOnMapChangedCallback(mListener); |
| } |
| |
| public void testClear() { |
| mObservable.put("Hello", "World"); |
| mObservable.put("World", "Hello"); |
| mObservable.addOnMapChangedCallback(mListener); |
| mObservable.clear(); |
| assertEquals(1, mNotifications.size()); |
| assertNull(mNotifications.get(0)); |
| assertEquals(0, mObservable.size()); |
| assertTrue(mObservable.isEmpty()); |
| |
| mObservable.clear(); |
| // No notification when nothing is cleared. |
| assertEquals(1, mNotifications.size()); |
| } |
| |
| public void testPut() { |
| mObservable.addOnMapChangedCallback(mListener); |
| mObservable.put("Hello", "World"); |
| assertEquals(1, mNotifications.size()); |
| assertEquals("Hello", mNotifications.get(0)); |
| assertEquals("World", mObservable.get("Hello")); |
| |
| mObservable.put("Hello", "World2"); |
| assertEquals(2, mNotifications.size()); |
| assertEquals("Hello", mNotifications.get(1)); |
| assertEquals("World2", mObservable.get("Hello")); |
| |
| mObservable.put("World", "Hello"); |
| assertEquals(3, mNotifications.size()); |
| assertEquals("World", mNotifications.get(2)); |
| assertEquals("Hello", mObservable.get("World")); |
| } |
| |
| public void testPutAll() { |
| Map<String, String> toAdd = new ArrayMap<>(); |
| toAdd.put("Hello", "World"); |
| toAdd.put("Goodbye", "Cruel World"); |
| mObservable.put("Cruel", "World"); |
| mObservable.addOnMapChangedCallback(mListener); |
| mObservable.putAll(toAdd); |
| assertEquals(3, mObservable.size()); |
| assertEquals("World", mObservable.get("Hello")); |
| assertEquals("Cruel World", mObservable.get("Goodbye")); |
| assertEquals(2, mNotifications.size()); |
| // order is not guaranteed |
| assertTrue(mNotifications.contains("Hello")); |
| assertTrue(mNotifications.contains("Goodbye")); |
| } |
| |
| public void testPutAllSimpleArrayMap() { |
| SimpleArrayMap<String, String> toAdd = new ArrayMap<>(); |
| toAdd.put("Hello", "World"); |
| toAdd.put("Goodbye", "Cruel World"); |
| mObservable.put("Cruel", "World"); |
| mObservable.addOnMapChangedCallback(mListener); |
| mObservable.putAll(toAdd); |
| assertEquals(3, mObservable.size()); |
| assertEquals("World", mObservable.get("Hello")); |
| assertEquals("Cruel World", mObservable.get("Goodbye")); |
| assertEquals(2, mNotifications.size()); |
| // order is not guaranteed |
| assertTrue(mNotifications.contains("Hello")); |
| assertTrue(mNotifications.contains("Goodbye")); |
| } |
| |
| public void testRemove() { |
| mObservable.put("Hello", "World"); |
| mObservable.put("Goodbye", "Cruel World"); |
| mObservable.addOnMapChangedCallback(mListener); |
| assertEquals("World", mObservable.remove("Hello")); |
| assertEquals(1, mNotifications.size()); |
| assertEquals("Hello", mNotifications.get(0)); |
| |
| assertNull(mObservable.remove("Hello")); |
| // nothing removed, don't notify |
| assertEquals(1, mNotifications.size()); |
| } |
| |
| public void testRemoveAll() { |
| ArrayList<String> toRemove = new ArrayList<>(); |
| toRemove.add("Hello"); |
| toRemove.add("Goodbye"); |
| mObservable.put("Hello", "World"); |
| mObservable.put("Goodbye", "Cruel World"); |
| mObservable.put("Cruel", "World"); |
| mObservable.addOnMapChangedCallback(mListener); |
| assertTrue(mObservable.removeAll(toRemove)); |
| assertEquals(2, mNotifications.size()); |
| // order is not guaranteed |
| assertTrue(mNotifications.contains("Hello")); |
| assertTrue(mNotifications.contains("Goodbye")); |
| |
| assertTrue(mObservable.containsKey("Cruel")); |
| |
| // Test nothing removed |
| assertFalse(mObservable.removeAll(toRemove)); |
| assertEquals(2, mNotifications.size()); |
| } |
| |
| public void testRetainAll() { |
| ArrayList<String> toRetain = new ArrayList<>(); |
| toRetain.add("Hello"); |
| toRetain.add("Goodbye"); |
| mObservable.put("Hello", "World"); |
| mObservable.put("Goodbye", "Cruel World"); |
| mObservable.put("Cruel", "World"); |
| mObservable.addOnMapChangedCallback(mListener); |
| assertTrue(mObservable.retainAll(toRetain)); |
| assertEquals(1, mNotifications.size()); |
| assertEquals("Cruel", mNotifications.get(0)); |
| assertTrue(mObservable.containsKey("Hello")); |
| assertTrue(mObservable.containsKey("Goodbye")); |
| |
| // Test nothing removed |
| assertFalse(mObservable.retainAll(toRetain)); |
| assertEquals(1, mNotifications.size()); |
| } |
| |
| public void testRemoveAt() { |
| mObservable.put("Hello", "World"); |
| mObservable.put("Goodbye", "Cruel World"); |
| mObservable.addOnMapChangedCallback(mListener); |
| String key = mObservable.keyAt(0); |
| String value = mObservable.valueAt(0); |
| assertTrue("Hello".equals(key) || "Goodbye".equals(key)); |
| assertEquals(value, mObservable.removeAt(0)); |
| assertEquals(1, mNotifications.size()); |
| assertEquals(key, mNotifications.get(0)); |
| } |
| |
| public void testSetValueAt() { |
| mObservable.put("Hello", "World"); |
| mObservable.addOnMapChangedCallback(mListener); |
| assertEquals("World", mObservable.setValueAt(0, "Cruel World")); |
| assertEquals(1, mNotifications.size()); |
| assertEquals("Hello", mNotifications.get(0)); |
| } |
| } |