1c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount/*
2c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount * Copyright (C) 2016 The Android Open Source Project
3c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount *
4c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount * Licensed under the Apache License, Version 2.0 (the "License");
5c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount * you may not use this file except in compliance with the License.
6c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount * You may obtain a copy of the License at
7c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount *
8c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount *      http://www.apache.org/licenses/LICENSE-2.0
9c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount *
10c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount * Unless required by applicable law or agreed to in writing, software
11c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount * distributed under the License is distributed on an "AS IS" BASIS,
12c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount * See the License for the specific language governing permissions and
14c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount * limitations under the License.
15c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount */
16c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount
17c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mountpackage android.databinding.testapp;
18c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount
19c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mountimport android.databinding.ViewStubProxy;
20c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mountimport android.databinding.testapp.databinding.ListenersWithDotBinding;
21c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mountimport android.databinding.testapp.vo.ListenerBindingObject;
22c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mountimport android.databinding.testapp.vo.ListenerBindingObject.Inner;
23c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mountimport android.test.UiThreadTest;
24c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mountimport android.view.View;
25c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount
26c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mountpublic class ListenerWithDotTest extends BaseDataBinderTest<ListenersWithDotBinding> {
27c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount    private ListenerBindingObject mBindingObject;
28c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount
29c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount    public ListenerWithDotTest() {
30c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount        super(ListenersWithDotBinding.class);
31c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount    }
32c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount
33c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount    @Override
34c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount    protected void setUp() throws Exception {
35c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount        mBindingObject = new ListenerBindingObject(getActivity());
36c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount        super.setUp();
37c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount        initBinder(new Runnable() {
38c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount            @Override
39c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount            public void run() {
40c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount                mBinder.setObj(mBindingObject);
41c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount            }
42c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount        });
43c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount        ListenerBindingObject.lastClick = 0;
44c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount    }
45c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount
46c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount    @UiThreadTest
47c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount    public void testInstanceClick() throws Throwable {
48c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount        View view = mBinder.click1;
49c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount        assertEquals(0, ListenerBindingObject.lastClick);
50c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount        view.callOnClick();
51c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount        assertEquals(1, ListenerBindingObject.lastClick);
52c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount    }
53c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount
54c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount    @UiThreadTest
55c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount    public void testStaticClick() throws Throwable {
56c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount        View view = mBinder.click2;
57c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount        assertEquals(0, ListenerBindingObject.lastClick);
58c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount        view.callOnClick();
59c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount        assertEquals(2, ListenerBindingObject.lastClick);
60c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount    }
61c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount
62c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount    @UiThreadTest
63c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount    public void testInstanceClickTwoArgs() throws Throwable {
64c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount        View view = mBinder.click3;
65c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount        assertEquals(0, ListenerBindingObject.lastClick);
66c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount        view.callOnClick();
67c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount        assertEquals(3, ListenerBindingObject.lastClick);
68c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount        assertTrue(view.isClickable());
69c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount        ListenerBindingObject.lastClick = 0;
70c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount        mBindingObject.clickable.set(false);
71c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount        mBinder.executePendingBindings();
72c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount        assertFalse(view.isClickable());
73c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount        mBindingObject.useOne.set(true);
74c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount        mBinder.executePendingBindings();
75c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount        assertFalse(view.isClickable());
76c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount        mBindingObject.clickable.set(true);
77c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount        mBinder.executePendingBindings();
78c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount        view.callOnClick();
79c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount        assertEquals(1, ListenerBindingObject.lastClick);
80c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount    }
81c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount
82c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount    @UiThreadTest
83c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount    public void testStaticClickTwoArgs() throws Throwable {
84c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount        View view = mBinder.click4;
85c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount        assertEquals(0, ListenerBindingObject.lastClick);
86c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount        view.callOnClick();
87c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount        assertEquals(4, ListenerBindingObject.lastClick);
88c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount        assertTrue(view.isClickable());
89c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount        ListenerBindingObject.lastClick = 0;
90c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount        mBindingObject.clickable.set(false);
91c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount        mBinder.executePendingBindings();
92c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount        assertFalse(view.isClickable());
93c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount        view.setClickable(true);
94c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount        view.callOnClick();
95c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount        assertEquals(4, ListenerBindingObject.lastClick);
96c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount    }
97c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount
98c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount    @UiThreadTest
99c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount    public void testClickExpression() throws Throwable {
100c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount        View view = mBinder.click5;
101c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount        assertEquals(0, ListenerBindingObject.lastClick);
102c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount        view.callOnClick();
103c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount        assertEquals(2, ListenerBindingObject.lastClick);
104c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount        ListenerBindingObject.lastClick = 0;
105c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount        mBindingObject.useOne.set(true);
106c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount        mBinder.executePendingBindings();
107c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount        view.callOnClick();
108c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount        assertEquals(1, ListenerBindingObject.lastClick);
109c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount    }
110c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount
111c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount    @UiThreadTest
112c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount    public void testInflateListener() throws Throwable {
113c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount        ViewStubProxy viewStubProxy = mBinder.viewStub;
114c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount        assertFalse(viewStubProxy.isInflated());
115c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount        assertFalse(mBindingObject.inflateCalled);
116c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount        viewStubProxy.getViewStub().inflate();
117c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount        assertTrue(mBindingObject.inflateCalled);
118c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount        assertTrue(viewStubProxy.isInflated());
119c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount    }
120c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount
121c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount    @UiThreadTest
122c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount    public void testBaseObservableClick() throws Throwable {
123c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount        View view = mBinder.click6;
124c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount        Inner inner = new Inner();
125c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount        mBinder.setObj2(inner);
126c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount        mBinder.executePendingBindings();
127c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount        assertFalse(inner.clicked);
128c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount        view.callOnClick();
129c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount        assertTrue(inner.clicked);
130c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount    }
131c0c1dab0b6254e4d27f18c37a72a9e7952e958a0George Mount}
132