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;
21e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mountimport android.databinding.testapp.databinding.IncludeInstanceAdapterBinding;
22e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mountimport android.databinding.testapp.databinding.InstanceAdapterBinding;
23e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mountimport android.test.UiThreadTest;
24e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mountimport android.widget.TextView;
25e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount
26e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mountpublic class InstanceAdapterTest extends BaseDataBinderTest<InstanceAdapterBinding> {
27e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount    public InstanceAdapterTest() {
28e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount        super(InstanceAdapterBinding.class);
29e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount    }
30e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount
31e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount    @Override
32e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount    protected void setUp() throws Exception {
33e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount        super.setUp();
34e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount    }
35e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount
36e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount    private void initNormal() {
37e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount        DataBindingUtil.setDefaultComponent(new TestComponent() {
38e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount            private InstanceAdapter mInstanceAdapter = new InstanceAdapter("Hello %s %s %s %s");
39e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount
40e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount            @Override
41e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount            public InstanceAdapter getInstanceAdapter() {
42e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount                return mInstanceAdapter;
43e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount            }
44e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount        });
45e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount        initBinder();
46e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount        mBinder.executePendingBindings();
47e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount    }
48e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount
49e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount    @UiThreadTest
50e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount    public void testOneAttr() throws Throwable {
51e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount        initNormal();
52e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount        mBinder.setStr("World");
53e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount        mBinder.executePendingBindings();
54e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount        assertEquals("Hello World foo bar baz", mBinder.textView1.getText().toString());
55e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount    }
56e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount
57e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount    @UiThreadTest
58e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount    public void testTwoAttr() throws Throwable {
59e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount        initNormal();
60e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount        mBinder.setStr("World");
61e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount        mBinder.executePendingBindings();
62e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount        assertEquals("Hello World baz foo bar", mBinder.textView2.getText().toString());
63e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount    }
64e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount
65e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount    @UiThreadTest
66e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount    public void testOneAttrOld() throws Throwable {
67e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount        initNormal();
68e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount        mBinder.setStr("World");
69e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount        mBinder.executePendingBindings();
70e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount        assertEquals("Hello null World foo bar", mBinder.textView3.getText().toString());
71e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount        mBinder.setStr("Android");
72e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount        mBinder.executePendingBindings();
73e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount        assertEquals("Hello World Android foo bar", mBinder.textView3.getText().toString());
74e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount    }
75e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount
76e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount    @UiThreadTest
77e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount    public void testTwoAttrOld() throws Throwable {
78e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount        initNormal();
79e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount        mBinder.setStr("World");
80e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount        mBinder.executePendingBindings();
81e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount        assertEquals("Hello null baz World baz", mBinder.textView4.getText().toString());
82e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount        mBinder.setStr("Android");
83e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount        mBinder.executePendingBindings();
84e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount        assertEquals("Hello World baz Android baz", mBinder.textView4.getText().toString());
85e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount    }
86e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount
87e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount    @UiThreadTest
88e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount    public void testRequiredBinding() throws Throwable {
89e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount        try {
90e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount            InstanceAdapterBinding.inflate(getActivity().getLayoutInflater(), null);
91e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount            fail("Binding should fail if a required BindingAdapter is missing.");
92e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount        } catch (IllegalStateException e) {
93e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount            // Expected exception
94e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount        }
95e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount    }
96e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount
97e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount    @UiThreadTest
98e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount    public void testInclude() throws Throwable {
99e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount        initNormal();
100e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount        DataBindingComponent component = DataBindingUtil.getDefaultComponent();
101e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount        DataBindingUtil.setDefaultComponent(null);
102e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount        IncludeInstanceAdapterBinding binding = IncludeInstanceAdapterBinding.inflate(getActivity().getLayoutInflater(), component);
103e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount        binding.setStr("World");
104e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount        binding.executePendingBindings();
105e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount        assertEquals("Hello World foo bar baz", binding.includedLayout.textView1.getText().toString());
106e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount    }
107e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount
108e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount    @UiThreadTest
109e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount    public void testViewStub() throws Throwable {
110e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount        initNormal();
111e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount        DataBindingComponent component = DataBindingUtil.getDefaultComponent();
112e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount        DataBindingUtil.setDefaultComponent(null);
113e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount        IncludeInstanceAdapterBinding binding = DataBindingUtil.setContentView(getActivity(),
114e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount                R.layout.include_instance_adapter, component);
115e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount        binding.setStr("World");
116e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount        binding.executePendingBindings();
117e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount        binding.viewStub.getViewStub().inflate();
118e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount        TextView view = (TextView) binding.viewStub.getRoot().findViewById(R.id.textView1);
119e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount        assertEquals("Hello World foo bar baz", view.getText().toString());
120e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount    }
121e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount
122e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount    @UiThreadTest
123e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount    public void testOneAttrWithComponentStatic() throws Throwable {
124e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount        initNormal();
125e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount        mBinder.setStr("World");
126e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount        mBinder.executePendingBindings();
127e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount        assertEquals("World component", mBinder.textView6.getText().toString());
128e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount    }
129e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount
130e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount    @UiThreadTest
131e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount    public void testOneAttrWithComponentInstance() throws Throwable {
132e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount        initNormal();
133e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount        mBinder.setStr("World");
134e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount        mBinder.executePendingBindings();
135e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount        assertEquals("Hello World component bar baz", mBinder.textView7.getText().toString());
136e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount    }
137e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount
138e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount    @UiThreadTest
139e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount    public void testTwoAttrsWithComponentInstance() throws Throwable {
140e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount        initNormal();
141e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount        mBinder.setStr("World");
142e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount        mBinder.executePendingBindings();
143e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount        assertEquals("Hello World foo component bar", mBinder.textView8.getText().toString());
144e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount    }
145e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount}
146