1e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount/* 2e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount * Copyright (C) 2015 The Android Open Source Project 3e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount * 4e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount * Licensed under the Apache License, Version 2.0 (the "License"); 5e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount * you may not use this file except in compliance with the License. 6e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount * You may obtain a copy of the License at 7e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount * 8e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount * http://www.apache.org/licenses/LICENSE-2.0 9e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount * 10e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount * Unless required by applicable law or agreed to in writing, software 11e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount * distributed under the License is distributed on an "AS IS" BASIS, 12e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount * See the License for the specific language governing permissions and 14e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount * limitations under the License. 15e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount */ 16e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mountpackage android.databinding.testapp; 17e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount 18e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mountimport android.databinding.DataBindingComponent; 19e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mountimport android.databinding.DataBindingUtil; 20e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mountimport android.databinding.testapp.adapter.InstanceAdapter; 21a128d1c99ea98bb48c45d648906652e3d618d513George Mountimport android.databinding.testapp.adapter.NameClashAdapter; 22a128d1c99ea98bb48c45d648906652e3d618d513George Mountimport android.databinding.testapp.adapter.NameClashAdapter.MyAdapter; 23e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mountimport android.databinding.testapp.databinding.IncludeInstanceAdapterBinding; 24e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mountimport android.databinding.testapp.databinding.InstanceAdapterBinding; 25e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mountimport android.test.UiThreadTest; 26e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mountimport android.widget.TextView; 27e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount 28e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mountpublic class InstanceAdapterTest extends BaseDataBinderTest<InstanceAdapterBinding> { 29e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount public InstanceAdapterTest() { 30e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount super(InstanceAdapterBinding.class); 31e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount } 32e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount 33e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount @Override 34e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount protected void setUp() throws Exception { 35e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount super.setUp(); 36e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount } 37e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount 38e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount private void initNormal() { 39e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount DataBindingUtil.setDefaultComponent(new TestComponent() { 40e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount private InstanceAdapter mInstanceAdapter = new InstanceAdapter("Hello %s %s %s %s"); 41e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount 42e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount @Override 43a128d1c99ea98bb48c45d648906652e3d618d513George Mount public MyAdapter getMyAdapter1() { 44a128d1c99ea98bb48c45d648906652e3d618d513George Mount return null; 45a128d1c99ea98bb48c45d648906652e3d618d513George Mount } 46a128d1c99ea98bb48c45d648906652e3d618d513George Mount 47a128d1c99ea98bb48c45d648906652e3d618d513George Mount @Override 48a128d1c99ea98bb48c45d648906652e3d618d513George Mount public android.databinding.testapp.adapter2.NameClashAdapter.MyAdapter getMyAdapter2() { 49a128d1c99ea98bb48c45d648906652e3d618d513George Mount return null; 50a128d1c99ea98bb48c45d648906652e3d618d513George Mount } 51a128d1c99ea98bb48c45d648906652e3d618d513George Mount 52a128d1c99ea98bb48c45d648906652e3d618d513George Mount @Override 53a128d1c99ea98bb48c45d648906652e3d618d513George Mount public NameClashAdapter getNameClashAdapter1() { 54a128d1c99ea98bb48c45d648906652e3d618d513George Mount return null; 55a128d1c99ea98bb48c45d648906652e3d618d513George Mount } 56a128d1c99ea98bb48c45d648906652e3d618d513George Mount 57a128d1c99ea98bb48c45d648906652e3d618d513George Mount @Override 58a128d1c99ea98bb48c45d648906652e3d618d513George Mount public android.databinding.testapp.adapter2.NameClashAdapter getNameClashAdapter2() { 59a128d1c99ea98bb48c45d648906652e3d618d513George Mount return null; 60a128d1c99ea98bb48c45d648906652e3d618d513George Mount } 61a128d1c99ea98bb48c45d648906652e3d618d513George Mount 62a128d1c99ea98bb48c45d648906652e3d618d513George Mount @Override 63e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount public InstanceAdapter getInstanceAdapter() { 64e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount return mInstanceAdapter; 65e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount } 66e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount }); 67e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount initBinder(); 68e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount mBinder.executePendingBindings(); 69e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount } 70e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount 71e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount @UiThreadTest 72e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount public void testOneAttr() throws Throwable { 73e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount initNormal(); 74e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount mBinder.setStr("World"); 75e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount mBinder.executePendingBindings(); 76e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount assertEquals("Hello World foo bar baz", mBinder.textView1.getText().toString()); 77e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount } 78e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount 79e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount @UiThreadTest 80e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount public void testTwoAttr() throws Throwable { 81e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount initNormal(); 82e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount mBinder.setStr("World"); 83e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount mBinder.executePendingBindings(); 84e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount assertEquals("Hello World baz foo bar", mBinder.textView2.getText().toString()); 85e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount } 86e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount 87e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount @UiThreadTest 88e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount public void testOneAttrOld() throws Throwable { 89e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount initNormal(); 90e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount mBinder.setStr("World"); 91e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount mBinder.executePendingBindings(); 92e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount assertEquals("Hello null World foo bar", mBinder.textView3.getText().toString()); 93e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount mBinder.setStr("Android"); 94e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount mBinder.executePendingBindings(); 95e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount assertEquals("Hello World Android foo bar", mBinder.textView3.getText().toString()); 96e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount } 97e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount 98e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount @UiThreadTest 99e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount public void testTwoAttrOld() throws Throwable { 100e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount initNormal(); 101e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount mBinder.setStr("World"); 102e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount mBinder.executePendingBindings(); 103e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount assertEquals("Hello null baz World baz", mBinder.textView4.getText().toString()); 104e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount mBinder.setStr("Android"); 105e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount mBinder.executePendingBindings(); 106e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount assertEquals("Hello World baz Android baz", mBinder.textView4.getText().toString()); 107e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount } 108e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount 109e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount @UiThreadTest 110e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount public void testRequiredBinding() throws Throwable { 111e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount try { 112e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount InstanceAdapterBinding.inflate(getActivity().getLayoutInflater(), null); 113e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount fail("Binding should fail if a required BindingAdapter is missing."); 114e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount } catch (IllegalStateException e) { 115e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount // Expected exception 116e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount } 117e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount } 118e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount 119e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount @UiThreadTest 120e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount public void testInclude() throws Throwable { 121e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount initNormal(); 122e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount DataBindingComponent component = DataBindingUtil.getDefaultComponent(); 123e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount DataBindingUtil.setDefaultComponent(null); 124e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount IncludeInstanceAdapterBinding binding = IncludeInstanceAdapterBinding.inflate(getActivity().getLayoutInflater(), component); 125e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount binding.setStr("World"); 126e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount binding.executePendingBindings(); 127e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount assertEquals("Hello World foo bar baz", binding.includedLayout.textView1.getText().toString()); 128e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount } 129e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount 130e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount @UiThreadTest 131e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount public void testViewStub() throws Throwable { 132e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount initNormal(); 133e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount DataBindingComponent component = DataBindingUtil.getDefaultComponent(); 134e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount DataBindingUtil.setDefaultComponent(null); 135e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount IncludeInstanceAdapterBinding binding = DataBindingUtil.setContentView(getActivity(), 136e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount R.layout.include_instance_adapter, component); 137e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount binding.setStr("World"); 138e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount binding.executePendingBindings(); 139e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount binding.viewStub.getViewStub().inflate(); 140e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount TextView view = (TextView) binding.viewStub.getRoot().findViewById(R.id.textView1); 141e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount assertEquals("Hello World foo bar baz", view.getText().toString()); 142e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount } 143e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount 144e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount @UiThreadTest 145e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount public void testOneAttrWithComponentStatic() throws Throwable { 146e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount initNormal(); 147e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount mBinder.setStr("World"); 148e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount mBinder.executePendingBindings(); 149e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount assertEquals("World component", mBinder.textView6.getText().toString()); 150e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount } 151e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount 152e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount @UiThreadTest 153e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount public void testOneAttrWithComponentInstance() throws Throwable { 154e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount initNormal(); 155e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount mBinder.setStr("World"); 156e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount mBinder.executePendingBindings(); 157e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount assertEquals("Hello World component bar baz", mBinder.textView7.getText().toString()); 158e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount } 159e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount 160e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount @UiThreadTest 161e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount public void testTwoAttrsWithComponentInstance() throws Throwable { 162e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount initNormal(); 163e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount mBinder.setStr("World"); 164e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount mBinder.executePendingBindings(); 165e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount assertEquals("Hello World foo component bar", mBinder.textView8.getText().toString()); 166e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount } 167e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount} 168