1/*
2 * Copyright (C) 2015 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16package android.databinding.testapp;
17
18import android.databinding.testapp.databinding.ExpressionTestBinding;
19import android.test.UiThreadTest;
20
21public class ExpressionTest extends BaseDataBinderTest<ExpressionTestBinding> {
22    public ExpressionTest() {
23        super(ExpressionTestBinding.class);
24    }
25
26    @Override
27    protected void setUp() throws Exception {
28        super.setUp();
29        initBinder();
30    }
31
32    @UiThreadTest
33    public void testOr() throws Throwable {
34        // var1 == 0 || var2 == 0 ? "hello" : "world"
35        mBinder.setVar1(0);
36        mBinder.setVar2(0);
37        mBinder.executePendingBindings();
38        assertEquals("hello", mBinder.textView0.getText().toString());
39        mBinder.setVar2(1);
40        mBinder.executePendingBindings();
41        assertEquals("hello", mBinder.textView0.getText().toString());
42        mBinder.setVar1(1);
43        mBinder.setVar2(0);
44        mBinder.executePendingBindings();
45        assertEquals("hello", mBinder.textView0.getText().toString());
46        mBinder.setVar2(1);
47        mBinder.executePendingBindings();
48        assertEquals("world", mBinder.textView0.getText().toString());
49    }
50
51    @UiThreadTest
52    public void testAnd() throws Throwable {
53        // var1 == 0 && var2 == 0 ? "hello" : "world"
54        mBinder.setVar1(0);
55        mBinder.setVar2(0);
56        mBinder.executePendingBindings();
57        assertEquals("hello", mBinder.textView1.getText().toString());
58        mBinder.setVar2(1);
59        mBinder.executePendingBindings();
60        assertEquals("world", mBinder.textView1.getText().toString());
61        mBinder.setVar1(1);
62        mBinder.setVar2(0);
63        mBinder.executePendingBindings();
64        assertEquals("world", mBinder.textView1.getText().toString());
65        mBinder.setVar2(1);
66        mBinder.executePendingBindings();
67        assertEquals("world", mBinder.textView1.getText().toString());
68    }
69
70    @UiThreadTest
71    public void testBinary() throws Throwable {
72        mBinder.setVar1(0);
73        mBinder.setVar2(0);
74        mBinder.executePendingBindings();
75        assertEquals("0", mBinder.textView2.getText().toString()); // var1 & var2
76        assertEquals("0", mBinder.textView3.getText().toString()); // var1 | var2
77        assertEquals("0", mBinder.textView4.getText().toString()); // var1 ^ var2
78        mBinder.setVar2(1);
79        mBinder.executePendingBindings();
80        assertEquals("0", mBinder.textView2.getText().toString()); // var1 & var2
81        assertEquals("1", mBinder.textView3.getText().toString()); // var1 | var2
82        assertEquals("1", mBinder.textView4.getText().toString()); // var1 ^ var2
83        mBinder.setVar1(1);
84        mBinder.executePendingBindings();
85        assertEquals("1", mBinder.textView2.getText().toString()); // var1 & var2
86        assertEquals("1", mBinder.textView3.getText().toString()); // var1 | var2
87        assertEquals("0", mBinder.textView4.getText().toString()); // var1 ^ var2
88    }
89
90    @UiThreadTest
91    public void testComparison() throws Throwable {
92        mBinder.setVar1(0);
93        mBinder.setVar2(0);
94        mBinder.executePendingBindings();
95        assertEquals("false", mBinder.textView5.getText().toString()); // <
96        assertEquals("false", mBinder.textView6.getText().toString()); // >
97        assertEquals("true", mBinder.textView7.getText().toString());  // <=
98        assertEquals("true", mBinder.textView8.getText().toString());  // >=
99        assertEquals("true", mBinder.textView9.getText().toString());  // ==
100
101        mBinder.setVar2(1);
102        mBinder.executePendingBindings();
103        assertEquals("true", mBinder.textView5.getText().toString()); // <
104        assertEquals("false", mBinder.textView6.getText().toString()); // >
105        assertEquals("true", mBinder.textView7.getText().toString());  // <=
106        assertEquals("false", mBinder.textView8.getText().toString());  // >=
107        assertEquals("false", mBinder.textView9.getText().toString());  // ==
108        mBinder.setVar1(1);
109        mBinder.setVar2(0);
110        mBinder.executePendingBindings();
111        assertEquals("false", mBinder.textView5.getText().toString()); // <
112        assertEquals("true", mBinder.textView6.getText().toString()); // >
113        assertEquals("false", mBinder.textView7.getText().toString());  // <=
114        assertEquals("true", mBinder.textView8.getText().toString());  // >=
115        assertEquals("false", mBinder.textView9.getText().toString());  // ==
116    }
117
118    @UiThreadTest
119    public void testShift() throws Throwable {
120        mBinder.setVar1(-2);
121        mBinder.setVar2(1);
122        mBinder.executePendingBindings();
123        int var1 = -2;
124        int var2 = 1;
125        assertEquals(String.valueOf(var1 << var2), mBinder.textView10.getText().toString());
126        assertEquals(String.valueOf(var1 >> var2), mBinder.textView11.getText().toString());
127        assertEquals(String.valueOf(var1 >>> var2), mBinder.textView12.getText().toString());
128    }
129
130    @UiThreadTest
131    public void testUnary() throws Throwable {
132        mBinder.setVar1(2);
133        mBinder.setVar2(1);
134        mBinder.executePendingBindings();
135        int var1 = 2;
136        int var2 = 1;
137        assertEquals("1", mBinder.textView13.getText().toString()); // 2 + -1
138        assertEquals(String.valueOf(var1 + ~var2), mBinder.textView14.getText().toString()); // 2 + ~1
139    }
140    @UiThreadTest
141    public void testInstanceOf() throws Throwable {
142        mBinder.executePendingBindings();
143        assertEquals("true", mBinder.textView15.getText().toString());
144        assertEquals("true", mBinder.textView16.getText().toString());
145        assertEquals("false", mBinder.textView17.getText().toString());
146    }
147
148    @UiThreadTest
149    public void testTernaryChain()  throws Throwable {
150        mBinder.setBool1(true);
151        mBinder.setBool2(false);
152        mBinder.executePendingBindings();
153        String appName = getActivity().getResources().getString(R.string.app_name);
154        String rain = getActivity().getResources().getString(R.string.rain);
155        assertEquals(mBinder.getBool1() ? appName : mBinder.getBool2() ? rain : "",
156                mBinder.textView18.getText().toString());
157    }
158
159    @UiThreadTest
160    public void testBoundTag() throws Throwable {
161        mBinder.setBool1(false);
162        mBinder.executePendingBindings();
163        assertEquals("bar", mBinder.textView19.getTag());
164        mBinder.setBool1(true);
165        mBinder.executePendingBindings();
166        assertEquals("foo", mBinder.textView19.getTag());
167    }
168
169    @UiThreadTest
170    public void testConstantExpression() throws Throwable {
171        mBinder.setVar1(1000);
172        mBinder.setVar2(2000);
173        mBinder.executePendingBindings();
174        assertEquals("1000", mBinder.textView20.getText().toString());
175        assertEquals("2000", mBinder.textView21.getText().toString());
176    }
177}
178