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