1e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar/* 2e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar * Copyright (C) 2015 The Android Open Source Project 3e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar * Licensed under the Apache License, Version 2.0 (the "License"); 4e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar * you may not use this file except in compliance with the License. 5e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar * You may obtain a copy of the License at 6e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar * http://www.apache.org/licenses/LICENSE-2.0 7e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar * Unless required by applicable law or agreed to in writing, software 8e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar * distributed under the License is distributed on an "AS IS" BASIS, 9e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 10e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar * See the License for the specific language governing permissions and 11e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar * limitations under the License. 12e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar */ 13e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar 14e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyarpackage android.databinding.testapp; 15e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar 1620c7182163d99575d382e065f5a5fe45ed6b87e2George Mountimport android.databinding.testapp.BR; 17e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyarimport android.databinding.testapp.databinding.MultiArgAdapterTestBinding; 18e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyarimport android.test.UiThreadTest; 1920c7182163d99575d382e065f5a5fe45ed6b87e2George Mount 2020c7182163d99575d382e065f5a5fe45ed6b87e2George Mountimport static android.databinding.testapp.adapter.MultiArgTestAdapter.MultiBindingClass1; 2120c7182163d99575d382e065f5a5fe45ed6b87e2George Mountimport static android.databinding.testapp.adapter.MultiArgTestAdapter.MultiBindingClass2; 2220c7182163d99575d382e065f5a5fe45ed6b87e2George Mountimport static android.databinding.testapp.adapter.MultiArgTestAdapter.join; 23e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar 24e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyarpublic class MultiArgAdapterTest extends BaseDataBinderTest<MultiArgAdapterTestBinding> { 25e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar 26e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar public MultiArgAdapterTest() { 27e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar super(MultiArgAdapterTestBinding.class); 28e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar } 29e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar 30e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar @UiThreadTest 31e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar public void testMultiArgIsCalled() { 323f73e3149732132c02f5d19aab7b5da429794058Yigit Boyar initBinder(); 33e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar MultiBindingClass1 obj1 = new MultiBindingClass1(); 34e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar MultiBindingClass2 obj2 = new MultiBindingClass2(); 35e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar MultiBindingClass1 obj3 = new MultiBindingClass1(); 36e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar MultiBindingClass2 obj4 = new MultiBindingClass2(); 37e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar obj1.setValue("a", false); 38e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar obj2.setValue("b", false); 39e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar obj3.setValue("c", false); 40e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar obj4.setValue("d", false); 41e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar mBinder.setObj1(obj1); 42e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar mBinder.setObj2(obj2); 43e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar mBinder.setObj3(obj3); 44e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar mBinder.setObj4(obj4); 45e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar mBinder.executePendingBindings(); 46e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar 47e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar assertEquals(mBinder.merged.getText().toString(), join(obj1, obj2)); 48e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar assertEquals(mBinder.view2.getText().toString(), join(obj2)); 49e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar assertEquals(mBinder.view3.getText().toString(), join(obj3)); 50e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar assertEquals(mBinder.view4.getText().toString(), join(obj4)); 51e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar String prev2 = mBinder.view2.getText().toString(); 52e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar String prevValue = mBinder.merged.getText().toString(); 53e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar obj1.setValue("o", false); 54e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar mBinder.executePendingBindings(); 55e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar assertEquals(prevValue, mBinder.merged.getText().toString()); 56e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar obj2.setValue("p", false); 57e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar mBinder.executePendingBindings(); 58e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar assertEquals(prevValue, mBinder.merged.getText().toString()); 59e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar // now invalidate obj1 only, obj2 should be evaluated as well 60e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar obj1.notifyPropertyChanged(BR._all); 61e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar String prev3 = mBinder.view3.getText().toString(); 62e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar String prev4 = mBinder.view4.getText().toString(); 63e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar obj3.setValue("q", false); 64e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar obj4.setValue("r", false); 65e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar mBinder.executePendingBindings(); 66e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar assertEquals(join(obj1, obj2), mBinder.merged.getText().toString()); 67e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar assertEquals("obj2 should not be re-evaluated", prev2, mBinder.view2.getText().toString()); 68e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar // make sure 3 and 4 are not invalidated 69e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar assertEquals("obj3 should not be re-evaluated", prev3, mBinder.view3.getText().toString()); 70e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar assertEquals("obj4 should not be re-evaluated", prev4, mBinder.view4.getText().toString()); 71e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar } 7220c7182163d99575d382e065f5a5fe45ed6b87e2George Mount 7320c7182163d99575d382e065f5a5fe45ed6b87e2George Mount @UiThreadTest 7420c7182163d99575d382e065f5a5fe45ed6b87e2George Mount public void testSetWithOldValues() throws Throwable { 7520c7182163d99575d382e065f5a5fe45ed6b87e2George Mount initBinder(); 7620c7182163d99575d382e065f5a5fe45ed6b87e2George Mount MultiBindingClass1 obj1 = new MultiBindingClass1(); 7720c7182163d99575d382e065f5a5fe45ed6b87e2George Mount MultiBindingClass2 obj2 = new MultiBindingClass2(); 7820c7182163d99575d382e065f5a5fe45ed6b87e2George Mount MultiBindingClass1 obj3 = new MultiBindingClass1(); 7920c7182163d99575d382e065f5a5fe45ed6b87e2George Mount MultiBindingClass2 obj4 = new MultiBindingClass2(); 8020c7182163d99575d382e065f5a5fe45ed6b87e2George Mount obj1.setValue("a", false); 8120c7182163d99575d382e065f5a5fe45ed6b87e2George Mount obj2.setValue("b", false); 8220c7182163d99575d382e065f5a5fe45ed6b87e2George Mount obj3.setValue("c", false); 8320c7182163d99575d382e065f5a5fe45ed6b87e2George Mount obj4.setValue("d", false); 8420c7182163d99575d382e065f5a5fe45ed6b87e2George Mount mBinder.setObj1(obj1); 8520c7182163d99575d382e065f5a5fe45ed6b87e2George Mount mBinder.setObj2(obj2); 8620c7182163d99575d382e065f5a5fe45ed6b87e2George Mount mBinder.setObj3(obj3); 8720c7182163d99575d382e065f5a5fe45ed6b87e2George Mount mBinder.setObj4(obj4); 8820c7182163d99575d382e065f5a5fe45ed6b87e2George Mount mBinder.executePendingBindings(); 8920c7182163d99575d382e065f5a5fe45ed6b87e2George Mount 9020c7182163d99575d382e065f5a5fe45ed6b87e2George Mount assertEquals("null -> a", mBinder.view7.getText().toString()); 9120c7182163d99575d382e065f5a5fe45ed6b87e2George Mount assertEquals("null, null -> a, b", mBinder.view8.getText().toString()); 9220c7182163d99575d382e065f5a5fe45ed6b87e2George Mount 9320c7182163d99575d382e065f5a5fe45ed6b87e2George Mount obj1.setValue("x", true); 9420c7182163d99575d382e065f5a5fe45ed6b87e2George Mount obj2.setValue("y", true); 9520c7182163d99575d382e065f5a5fe45ed6b87e2George Mount mBinder.executePendingBindings(); 9620c7182163d99575d382e065f5a5fe45ed6b87e2George Mount 9720c7182163d99575d382e065f5a5fe45ed6b87e2George Mount assertEquals("a -> x", mBinder.view7.getText().toString()); 9820c7182163d99575d382e065f5a5fe45ed6b87e2George Mount assertEquals("a, b -> x, y", mBinder.view8.getText().toString()); 9920c7182163d99575d382e065f5a5fe45ed6b87e2George Mount 10020c7182163d99575d382e065f5a5fe45ed6b87e2George Mount obj1.setValue("x", true); 10120c7182163d99575d382e065f5a5fe45ed6b87e2George Mount obj2.setValue("y", true); 10220c7182163d99575d382e065f5a5fe45ed6b87e2George Mount mBinder.executePendingBindings(); 10320c7182163d99575d382e065f5a5fe45ed6b87e2George Mount 10420c7182163d99575d382e065f5a5fe45ed6b87e2George Mount // Calls setter 10520c7182163d99575d382e065f5a5fe45ed6b87e2George Mount assertEquals("x -> x", mBinder.view7.getText().toString()); 10620c7182163d99575d382e065f5a5fe45ed6b87e2George Mount assertEquals("x, y -> x, y", mBinder.view8.getText().toString()); 10720c7182163d99575d382e065f5a5fe45ed6b87e2George Mount 10820c7182163d99575d382e065f5a5fe45ed6b87e2George Mount obj2.setValue("z", true); 10920c7182163d99575d382e065f5a5fe45ed6b87e2George Mount mBinder.executePendingBindings(); 11020c7182163d99575d382e065f5a5fe45ed6b87e2George Mount 11120c7182163d99575d382e065f5a5fe45ed6b87e2George Mount // only the two-arg value changed 11220c7182163d99575d382e065f5a5fe45ed6b87e2George Mount assertEquals("x -> x", mBinder.view7.getText().toString()); 11320c7182163d99575d382e065f5a5fe45ed6b87e2George Mount assertEquals("x, y -> x, z", mBinder.view8.getText().toString()); 11420c7182163d99575d382e065f5a5fe45ed6b87e2George Mount } 115e9b33bac04bb1ce1444d7f1744fcec1ecd3a57daYigit Boyar} 116