1716ba89e7f459f49ea85070d4710c1d79d715298George Mount/*
2716ba89e7f459f49ea85070d4710c1d79d715298George Mount * Copyright (C) 2015 The Android Open Source Project
3716ba89e7f459f49ea85070d4710c1d79d715298George Mount * Licensed under the Apache License, Version 2.0 (the "License");
4716ba89e7f459f49ea85070d4710c1d79d715298George Mount * you may not use this file except in compliance with the License.
5716ba89e7f459f49ea85070d4710c1d79d715298George Mount * You may obtain a copy of the License at
6716ba89e7f459f49ea85070d4710c1d79d715298George Mount *      http://www.apache.org/licenses/LICENSE-2.0
7716ba89e7f459f49ea85070d4710c1d79d715298George Mount * Unless required by applicable law or agreed to in writing, software
8716ba89e7f459f49ea85070d4710c1d79d715298George Mount * distributed under the License is distributed on an "AS IS" BASIS,
9716ba89e7f459f49ea85070d4710c1d79d715298George Mount * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10716ba89e7f459f49ea85070d4710c1d79d715298George Mount * See the License for the specific language governing permissions and
11716ba89e7f459f49ea85070d4710c1d79d715298George Mount * limitations under the License.
12716ba89e7f459f49ea85070d4710c1d79d715298George Mount */
13716ba89e7f459f49ea85070d4710c1d79d715298George Mount
14716ba89e7f459f49ea85070d4710c1d79d715298George Mountpackage android.databinding.testapp;
15716ba89e7f459f49ea85070d4710c1d79d715298George Mount
16716ba89e7f459f49ea85070d4710c1d79d715298George Mountimport android.databinding.ViewStubProxy;
17716ba89e7f459f49ea85070d4710c1d79d715298George Mountimport android.databinding.testapp.databinding.ListenersBinding;
18716ba89e7f459f49ea85070d4710c1d79d715298George Mountimport android.databinding.testapp.vo.ListenerBindingObject;
19ec3f23a318203a54ad6aea658ea452948087b73bGeorge Mountimport android.databinding.testapp.vo.ListenerBindingObject.Inner;
20716ba89e7f459f49ea85070d4710c1d79d715298George Mountimport android.test.UiThreadTest;
21716ba89e7f459f49ea85070d4710c1d79d715298George Mountimport android.view.View;
22716ba89e7f459f49ea85070d4710c1d79d715298George Mount
23716ba89e7f459f49ea85070d4710c1d79d715298George Mountpublic class ListenerTest extends BaseDataBinderTest<ListenersBinding> {
24716ba89e7f459f49ea85070d4710c1d79d715298George Mount    private ListenerBindingObject mBindingObject;
25716ba89e7f459f49ea85070d4710c1d79d715298George Mount
26716ba89e7f459f49ea85070d4710c1d79d715298George Mount    public ListenerTest() {
27716ba89e7f459f49ea85070d4710c1d79d715298George Mount        super(ListenersBinding.class);
28716ba89e7f459f49ea85070d4710c1d79d715298George Mount    }
29716ba89e7f459f49ea85070d4710c1d79d715298George Mount
30716ba89e7f459f49ea85070d4710c1d79d715298George Mount    @Override
31716ba89e7f459f49ea85070d4710c1d79d715298George Mount    protected void setUp() throws Exception {
32716ba89e7f459f49ea85070d4710c1d79d715298George Mount        mBindingObject = new ListenerBindingObject(getActivity());
33716ba89e7f459f49ea85070d4710c1d79d715298George Mount        super.setUp();
34716ba89e7f459f49ea85070d4710c1d79d715298George Mount        initBinder(new Runnable() {
35716ba89e7f459f49ea85070d4710c1d79d715298George Mount            @Override
36716ba89e7f459f49ea85070d4710c1d79d715298George Mount            public void run() {
37716ba89e7f459f49ea85070d4710c1d79d715298George Mount                mBinder.setObj(mBindingObject);
38716ba89e7f459f49ea85070d4710c1d79d715298George Mount            }
39716ba89e7f459f49ea85070d4710c1d79d715298George Mount        });
40716ba89e7f459f49ea85070d4710c1d79d715298George Mount        ListenerBindingObject.lastClick = 0;
41716ba89e7f459f49ea85070d4710c1d79d715298George Mount    }
42716ba89e7f459f49ea85070d4710c1d79d715298George Mount
43716ba89e7f459f49ea85070d4710c1d79d715298George Mount    @UiThreadTest
44716ba89e7f459f49ea85070d4710c1d79d715298George Mount    public void testInstanceClick() throws Throwable {
45716ba89e7f459f49ea85070d4710c1d79d715298George Mount        View view = mBinder.click1;
46716ba89e7f459f49ea85070d4710c1d79d715298George Mount        assertEquals(0, ListenerBindingObject.lastClick);
47716ba89e7f459f49ea85070d4710c1d79d715298George Mount        view.callOnClick();
48716ba89e7f459f49ea85070d4710c1d79d715298George Mount        assertEquals(1, ListenerBindingObject.lastClick);
49716ba89e7f459f49ea85070d4710c1d79d715298George Mount    }
50716ba89e7f459f49ea85070d4710c1d79d715298George Mount
51716ba89e7f459f49ea85070d4710c1d79d715298George Mount    @UiThreadTest
52716ba89e7f459f49ea85070d4710c1d79d715298George Mount    public void testStaticClick() throws Throwable {
53716ba89e7f459f49ea85070d4710c1d79d715298George Mount        View view = mBinder.click2;
54716ba89e7f459f49ea85070d4710c1d79d715298George Mount        assertEquals(0, ListenerBindingObject.lastClick);
55716ba89e7f459f49ea85070d4710c1d79d715298George Mount        view.callOnClick();
56716ba89e7f459f49ea85070d4710c1d79d715298George Mount        assertEquals(2, ListenerBindingObject.lastClick);
57716ba89e7f459f49ea85070d4710c1d79d715298George Mount    }
58716ba89e7f459f49ea85070d4710c1d79d715298George Mount
59716ba89e7f459f49ea85070d4710c1d79d715298George Mount    @UiThreadTest
60716ba89e7f459f49ea85070d4710c1d79d715298George Mount    public void testInstanceClickTwoArgs() throws Throwable {
61716ba89e7f459f49ea85070d4710c1d79d715298George Mount        View view = mBinder.click3;
62716ba89e7f459f49ea85070d4710c1d79d715298George Mount        assertEquals(0, ListenerBindingObject.lastClick);
63716ba89e7f459f49ea85070d4710c1d79d715298George Mount        view.callOnClick();
64716ba89e7f459f49ea85070d4710c1d79d715298George Mount        assertEquals(3, ListenerBindingObject.lastClick);
65716ba89e7f459f49ea85070d4710c1d79d715298George Mount        assertTrue(view.isClickable());
66716ba89e7f459f49ea85070d4710c1d79d715298George Mount        ListenerBindingObject.lastClick = 0;
67716ba89e7f459f49ea85070d4710c1d79d715298George Mount        mBindingObject.clickable.set(false);
68716ba89e7f459f49ea85070d4710c1d79d715298George Mount        mBinder.executePendingBindings();
69716ba89e7f459f49ea85070d4710c1d79d715298George Mount        assertFalse(view.isClickable());
70716ba89e7f459f49ea85070d4710c1d79d715298George Mount        mBindingObject.useOne.set(true);
71716ba89e7f459f49ea85070d4710c1d79d715298George Mount        mBinder.executePendingBindings();
72716ba89e7f459f49ea85070d4710c1d79d715298George Mount        assertFalse(view.isClickable());
73716ba89e7f459f49ea85070d4710c1d79d715298George Mount        mBindingObject.clickable.set(true);
74716ba89e7f459f49ea85070d4710c1d79d715298George Mount        mBinder.executePendingBindings();
75716ba89e7f459f49ea85070d4710c1d79d715298George Mount        view.callOnClick();
76716ba89e7f459f49ea85070d4710c1d79d715298George Mount        assertEquals(1, ListenerBindingObject.lastClick);
77716ba89e7f459f49ea85070d4710c1d79d715298George Mount    }
78716ba89e7f459f49ea85070d4710c1d79d715298George Mount
79716ba89e7f459f49ea85070d4710c1d79d715298George Mount    @UiThreadTest
80716ba89e7f459f49ea85070d4710c1d79d715298George Mount    public void testStaticClickTwoArgs() throws Throwable {
81716ba89e7f459f49ea85070d4710c1d79d715298George Mount        View view = mBinder.click4;
82716ba89e7f459f49ea85070d4710c1d79d715298George Mount        assertEquals(0, ListenerBindingObject.lastClick);
83716ba89e7f459f49ea85070d4710c1d79d715298George Mount        view.callOnClick();
84716ba89e7f459f49ea85070d4710c1d79d715298George Mount        assertEquals(4, ListenerBindingObject.lastClick);
85716ba89e7f459f49ea85070d4710c1d79d715298George Mount        assertTrue(view.isClickable());
86716ba89e7f459f49ea85070d4710c1d79d715298George Mount        ListenerBindingObject.lastClick = 0;
87716ba89e7f459f49ea85070d4710c1d79d715298George Mount        mBindingObject.clickable.set(false);
88716ba89e7f459f49ea85070d4710c1d79d715298George Mount        mBinder.executePendingBindings();
89716ba89e7f459f49ea85070d4710c1d79d715298George Mount        assertFalse(view.isClickable());
90716ba89e7f459f49ea85070d4710c1d79d715298George Mount        view.setClickable(true);
91716ba89e7f459f49ea85070d4710c1d79d715298George Mount        view.callOnClick();
92716ba89e7f459f49ea85070d4710c1d79d715298George Mount        assertEquals(4, ListenerBindingObject.lastClick);
93716ba89e7f459f49ea85070d4710c1d79d715298George Mount    }
94716ba89e7f459f49ea85070d4710c1d79d715298George Mount
95716ba89e7f459f49ea85070d4710c1d79d715298George Mount    @UiThreadTest
96716ba89e7f459f49ea85070d4710c1d79d715298George Mount    public void testClickExpression() throws Throwable {
97716ba89e7f459f49ea85070d4710c1d79d715298George Mount        View view = mBinder.click5;
98716ba89e7f459f49ea85070d4710c1d79d715298George Mount        assertEquals(0, ListenerBindingObject.lastClick);
99716ba89e7f459f49ea85070d4710c1d79d715298George Mount        view.callOnClick();
100716ba89e7f459f49ea85070d4710c1d79d715298George Mount        assertEquals(2, ListenerBindingObject.lastClick);
101716ba89e7f459f49ea85070d4710c1d79d715298George Mount        ListenerBindingObject.lastClick = 0;
102716ba89e7f459f49ea85070d4710c1d79d715298George Mount        mBindingObject.useOne.set(true);
103716ba89e7f459f49ea85070d4710c1d79d715298George Mount        mBinder.executePendingBindings();
104716ba89e7f459f49ea85070d4710c1d79d715298George Mount        view.callOnClick();
105716ba89e7f459f49ea85070d4710c1d79d715298George Mount        assertEquals(1, ListenerBindingObject.lastClick);
106716ba89e7f459f49ea85070d4710c1d79d715298George Mount    }
107716ba89e7f459f49ea85070d4710c1d79d715298George Mount
108716ba89e7f459f49ea85070d4710c1d79d715298George Mount    @UiThreadTest
109716ba89e7f459f49ea85070d4710c1d79d715298George Mount    public void testInflateListener() throws Throwable {
110716ba89e7f459f49ea85070d4710c1d79d715298George Mount        ViewStubProxy viewStubProxy = mBinder.viewStub;
111716ba89e7f459f49ea85070d4710c1d79d715298George Mount        assertFalse(viewStubProxy.isInflated());
112716ba89e7f459f49ea85070d4710c1d79d715298George Mount        assertFalse(mBindingObject.inflateCalled);
113716ba89e7f459f49ea85070d4710c1d79d715298George Mount        viewStubProxy.getViewStub().inflate();
114716ba89e7f459f49ea85070d4710c1d79d715298George Mount        assertTrue(mBindingObject.inflateCalled);
115716ba89e7f459f49ea85070d4710c1d79d715298George Mount        assertTrue(viewStubProxy.isInflated());
116716ba89e7f459f49ea85070d4710c1d79d715298George Mount    }
117ec3f23a318203a54ad6aea658ea452948087b73bGeorge Mount
118ec3f23a318203a54ad6aea658ea452948087b73bGeorge Mount    @UiThreadTest
119ec3f23a318203a54ad6aea658ea452948087b73bGeorge Mount    public void testBaseObservableClick() throws Throwable {
120ec3f23a318203a54ad6aea658ea452948087b73bGeorge Mount        View view = mBinder.click6;
121ec3f23a318203a54ad6aea658ea452948087b73bGeorge Mount        Inner inner = new Inner();
122ec3f23a318203a54ad6aea658ea452948087b73bGeorge Mount        mBinder.setObj2(inner);
123ec3f23a318203a54ad6aea658ea452948087b73bGeorge Mount        mBinder.executePendingBindings();
124ec3f23a318203a54ad6aea658ea452948087b73bGeorge Mount        assertFalse(inner.clicked);
125ec3f23a318203a54ad6aea658ea452948087b73bGeorge Mount        view.callOnClick();
126ec3f23a318203a54ad6aea658ea452948087b73bGeorge Mount        assertTrue(inner.clicked);
127ec3f23a318203a54ad6aea658ea452948087b73bGeorge Mount    }
128716ba89e7f459f49ea85070d4710c1d79d715298George Mount}
129