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