ExpressionTest.java revision ff1d9e47e2b2b37d66e29a8e5a73f56a628ce56e
15460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao/*
25460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao * Copyright (C) 2015 The Android Open Source Project
35460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao *
45460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao * Licensed under the Apache License, Version 2.0 (the "License");
55460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao * you may not use this file except in compliance with the License.
65460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao * You may obtain a copy of the License at
75460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao *
85460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao *      http://www.apache.org/licenses/LICENSE-2.0
937b74a387bb3993387029859c2d9d051c41c724eStephen Hines *
1037b74a387bb3993387029859c2d9d051c41c724eStephen Hines * Unless required by applicable law or agreed to in writing, software
1137b74a387bb3993387029859c2d9d051c41c724eStephen Hines * distributed under the License is distributed on an "AS IS" BASIS,
1237b74a387bb3993387029859c2d9d051c41c724eStephen Hines * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1337b74a387bb3993387029859c2d9d051c41c724eStephen Hines * See the License for the specific language governing permissions and
1437b74a387bb3993387029859c2d9d051c41c724eStephen Hines * limitations under the License.
1537b74a387bb3993387029859c2d9d051c41c724eStephen Hines */
1637b74a387bb3993387029859c2d9d051c41c724eStephen Hinespackage android.databinding.testapp;
1737b74a387bb3993387029859c2d9d051c41c724eStephen Hines
1837b74a387bb3993387029859c2d9d051c41c724eStephen Hinesimport android.databinding.testapp.databinding.ExpressionTestBinding;
1937b74a387bb3993387029859c2d9d051c41c724eStephen Hinesimport android.test.UiThreadTest;
2037b74a387bb3993387029859c2d9d051c41c724eStephen Hines
2137b74a387bb3993387029859c2d9d051c41c724eStephen Hinespublic class ExpressionTest extends BaseDataBinderTest<ExpressionTestBinding> {
2237b74a387bb3993387029859c2d9d051c41c724eStephen Hines    public ExpressionTest() {
2337b74a387bb3993387029859c2d9d051c41c724eStephen Hines        super(ExpressionTestBinding.class);
2437b74a387bb3993387029859c2d9d051c41c724eStephen Hines    }
2537b74a387bb3993387029859c2d9d051c41c724eStephen Hines
2637b74a387bb3993387029859c2d9d051c41c724eStephen Hines    @Override
2737b74a387bb3993387029859c2d9d051c41c724eStephen Hines    protected void setUp() throws Exception {
2837b74a387bb3993387029859c2d9d051c41c724eStephen Hines        super.setUp();
2937b74a387bb3993387029859c2d9d051c41c724eStephen Hines        initBinder();
3037b74a387bb3993387029859c2d9d051c41c724eStephen Hines    }
3137b74a387bb3993387029859c2d9d051c41c724eStephen Hines
3237b74a387bb3993387029859c2d9d051c41c724eStephen Hines    @UiThreadTest
3337b74a387bb3993387029859c2d9d051c41c724eStephen Hines    public void testOr() throws Throwable {
3437b74a387bb3993387029859c2d9d051c41c724eStephen Hines        // var1 == 0 || var2 == 0 ? "hello" : "world"
3537b74a387bb3993387029859c2d9d051c41c724eStephen Hines        mBinder.setVar1(0);
3637b74a387bb3993387029859c2d9d051c41c724eStephen Hines        mBinder.setVar2(0);
3737b74a387bb3993387029859c2d9d051c41c724eStephen Hines        mBinder.executePendingBindings();
3837b74a387bb3993387029859c2d9d051c41c724eStephen Hines        assertEquals("hello", mBinder.textView0.getText().toString());
3937b74a387bb3993387029859c2d9d051c41c724eStephen Hines        mBinder.setVar2(1);
4037b74a387bb3993387029859c2d9d051c41c724eStephen Hines        mBinder.executePendingBindings();
4137b74a387bb3993387029859c2d9d051c41c724eStephen Hines        assertEquals("hello", mBinder.textView0.getText().toString());
4237b74a387bb3993387029859c2d9d051c41c724eStephen Hines        mBinder.setVar1(1);
4337b74a387bb3993387029859c2d9d051c41c724eStephen Hines        mBinder.setVar2(0);
4487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines        mBinder.executePendingBindings();
450dea6bc96bb52346737966839ac68644f7939f58Stephen Hines        assertEquals("hello", mBinder.textView0.getText().toString());
4687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines        mBinder.setVar2(1);
475460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao        mBinder.executePendingBindings();
480dea6bc96bb52346737966839ac68644f7939f58Stephen Hines        assertEquals("world", mBinder.textView0.getText().toString());
490dea6bc96bb52346737966839ac68644f7939f58Stephen Hines    }
500dea6bc96bb52346737966839ac68644f7939f58Stephen Hines
510dea6bc96bb52346737966839ac68644f7939f58Stephen Hines    @UiThreadTest
520dea6bc96bb52346737966839ac68644f7939f58Stephen Hines    public void testAnd() throws Throwable {
530dea6bc96bb52346737966839ac68644f7939f58Stephen Hines        // var1 == 0 && var2 == 0 ? "hello" : "world"
540dea6bc96bb52346737966839ac68644f7939f58Stephen Hines        mBinder.setVar1(0);
55f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines        mBinder.setVar2(0);
565460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao        mBinder.executePendingBindings();
5737b74a387bb3993387029859c2d9d051c41c724eStephen Hines        assertEquals("hello", mBinder.textView1.getText().toString());
5822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao        mBinder.setVar2(1);
5922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao        mBinder.executePendingBindings();
60f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines        assertEquals("world", mBinder.textView1.getText().toString());
6137b74a387bb3993387029859c2d9d051c41c724eStephen Hines        mBinder.setVar1(1);
62cfcb22478ca64c308df58f9abe6fa2dedb213c16Stephen Hines        mBinder.setVar2(0);
6337b74a387bb3993387029859c2d9d051c41c724eStephen Hines        mBinder.executePendingBindings();
6437b74a387bb3993387029859c2d9d051c41c724eStephen Hines        assertEquals("world", mBinder.textView1.getText().toString());
6522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao        mBinder.setVar2(1);
6622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao        mBinder.executePendingBindings();
6737b74a387bb3993387029859c2d9d051c41c724eStephen Hines        assertEquals("world", mBinder.textView1.getText().toString());
6837b74a387bb3993387029859c2d9d051c41c724eStephen Hines    }
6937b74a387bb3993387029859c2d9d051c41c724eStephen Hines
7022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao    @UiThreadTest
7122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao    public void testBinary() throws Throwable {
7237b74a387bb3993387029859c2d9d051c41c724eStephen Hines        mBinder.setVar1(0);
73f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines        mBinder.setVar2(0);
7437b74a387bb3993387029859c2d9d051c41c724eStephen Hines        mBinder.executePendingBindings();
75f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines        assertEquals("0", mBinder.textView2.getText().toString()); // var1 & var2
765460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao        assertEquals("0", mBinder.textView3.getText().toString()); // var1 | var2
775460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao        assertEquals("0", mBinder.textView4.getText().toString()); // var1 ^ var2
78cedee4b38f4786845183be7f5916dd520a170ae0Shih-wei Liao        mBinder.setVar2(1);
79d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao        mBinder.executePendingBindings();
8037b74a387bb3993387029859c2d9d051c41c724eStephen Hines        assertEquals("0", mBinder.textView2.getText().toString()); // var1 & var2
8137b74a387bb3993387029859c2d9d051c41c724eStephen Hines        assertEquals("1", mBinder.textView3.getText().toString()); // var1 | var2
8237b74a387bb3993387029859c2d9d051c41c724eStephen Hines        assertEquals("1", mBinder.textView4.getText().toString()); // var1 ^ var2
8337b74a387bb3993387029859c2d9d051c41c724eStephen Hines        mBinder.setVar1(1);
8437b74a387bb3993387029859c2d9d051c41c724eStephen Hines        mBinder.executePendingBindings();
8537b74a387bb3993387029859c2d9d051c41c724eStephen Hines        assertEquals("1", mBinder.textView2.getText().toString()); // var1 & var2
8637b74a387bb3993387029859c2d9d051c41c724eStephen Hines        assertEquals("1", mBinder.textView3.getText().toString()); // var1 | var2
8737b74a387bb3993387029859c2d9d051c41c724eStephen Hines        assertEquals("0", mBinder.textView4.getText().toString()); // var1 ^ var2
8837b74a387bb3993387029859c2d9d051c41c724eStephen Hines    }
8937b74a387bb3993387029859c2d9d051c41c724eStephen Hines
9037b74a387bb3993387029859c2d9d051c41c724eStephen Hines    @UiThreadTest
9137b74a387bb3993387029859c2d9d051c41c724eStephen Hines    public void testComparison() throws Throwable {
9237b74a387bb3993387029859c2d9d051c41c724eStephen Hines        mBinder.setVar1(0);
9337b74a387bb3993387029859c2d9d051c41c724eStephen Hines        mBinder.setVar2(0);
9437b74a387bb3993387029859c2d9d051c41c724eStephen Hines        mBinder.executePendingBindings();
9537b74a387bb3993387029859c2d9d051c41c724eStephen Hines        assertEquals("false", mBinder.textView5.getText().toString()); // <
9637b74a387bb3993387029859c2d9d051c41c724eStephen Hines        assertEquals("false", mBinder.textView6.getText().toString()); // >
9737b74a387bb3993387029859c2d9d051c41c724eStephen Hines        assertEquals("true", mBinder.textView7.getText().toString());  // <=
9837b74a387bb3993387029859c2d9d051c41c724eStephen Hines        assertEquals("true", mBinder.textView8.getText().toString());  // >=
9937b74a387bb3993387029859c2d9d051c41c724eStephen Hines        assertEquals("true", mBinder.textView9.getText().toString());  // ==
10037b74a387bb3993387029859c2d9d051c41c724eStephen Hines
10137b74a387bb3993387029859c2d9d051c41c724eStephen Hines        mBinder.setVar2(1);
10237b74a387bb3993387029859c2d9d051c41c724eStephen Hines        mBinder.executePendingBindings();
10337b74a387bb3993387029859c2d9d051c41c724eStephen Hines        assertEquals("true", mBinder.textView5.getText().toString()); // <
10437b74a387bb3993387029859c2d9d051c41c724eStephen Hines        assertEquals("false", mBinder.textView6.getText().toString()); // >
10537b74a387bb3993387029859c2d9d051c41c724eStephen Hines        assertEquals("true", mBinder.textView7.getText().toString());  // <=
10637b74a387bb3993387029859c2d9d051c41c724eStephen Hines        assertEquals("false", mBinder.textView8.getText().toString());  // >=
10737b74a387bb3993387029859c2d9d051c41c724eStephen Hines        assertEquals("false", mBinder.textView9.getText().toString());  // ==
10837b74a387bb3993387029859c2d9d051c41c724eStephen Hines        mBinder.setVar1(1);
10937b74a387bb3993387029859c2d9d051c41c724eStephen Hines        mBinder.setVar2(0);
11037b74a387bb3993387029859c2d9d051c41c724eStephen Hines        mBinder.executePendingBindings();
11137b74a387bb3993387029859c2d9d051c41c724eStephen Hines        assertEquals("false", mBinder.textView5.getText().toString()); // <
11287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines        assertEquals("true", mBinder.textView6.getText().toString()); // >
1135460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao        assertEquals("false", mBinder.textView7.getText().toString());  // <=
11487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines        assertEquals("true", mBinder.textView8.getText().toString());  // >=
1155460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao        assertEquals("false", mBinder.textView9.getText().toString());  // ==
1165460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    }
11737b74a387bb3993387029859c2d9d051c41c724eStephen Hines
11887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines    @UiThreadTest
119d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao    public void testShift() throws Throwable {
12022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao        mBinder.setVar1(-2);
12122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao        mBinder.setVar2(1);
1226f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines        mBinder.executePendingBindings();
12322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao        int var1 = -2;
12422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao        int var2 = 1;
12587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines        assertEquals(String.valueOf(var1 << var2), mBinder.textView10.getText().toString());
1266f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines        assertEquals(String.valueOf(var1 >> var2), mBinder.textView11.getText().toString());
1276f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines        assertEquals(String.valueOf(var1 >>> var2), mBinder.textView12.getText().toString());
1285460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    }
1295460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
13037b74a387bb3993387029859c2d9d051c41c724eStephen Hines    @UiThreadTest
131d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao    public void testUnary() throws Throwable {
132d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao        mBinder.setVar1(2);
133d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao        mBinder.setVar2(1);
134d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao        mBinder.executePendingBindings();
135d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao        int var1 = 2;
136d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao        int var2 = 1;
13787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines        assertEquals("1", mBinder.textView13.getText().toString()); // 2 + -1
138d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao        assertEquals(String.valueOf(var1 + ~var2), mBinder.textView14.getText().toString()); // 2 + ~1
139d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao    }
14087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines    @UiThreadTest
141d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao    public void testInstanceOf() throws Throwable {
142d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao        mBinder.executePendingBindings();
143d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao        assertEquals("true", mBinder.textView15.getText().toString());
144d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao        assertEquals("true", mBinder.textView16.getText().toString());
145d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao        assertEquals("false", mBinder.textView17.getText().toString());
1465460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    }
1475460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
14837b74a387bb3993387029859c2d9d051c41c724eStephen Hines    @UiThreadTest
149f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines    public void testTernaryChain()  throws Throwable {
15037b74a387bb3993387029859c2d9d051c41c724eStephen Hines        mBinder.setBool1(true);
151f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines        mBinder.setBool2(false);
15222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao        mBinder.executePendingBindings();
1536f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines        String appName = getActivity().getResources().getString(R.string.app_name);
154affc150dc44fab1911775a49636d0ce85333b634Zonr Chang        String rain = getActivity().getResources().getString(R.string.rain);
155affc150dc44fab1911775a49636d0ce85333b634Zonr Chang        assertEquals(mBinder.getBool1() ? appName : mBinder.getBool2() ? rain : "",
1566f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines                mBinder.textView18.getText().toString());
157affc150dc44fab1911775a49636d0ce85333b634Zonr Chang    }
158affc150dc44fab1911775a49636d0ce85333b634Zonr Chang
15937b74a387bb3993387029859c2d9d051c41c724eStephen Hines    @UiThreadTest
16037b74a387bb3993387029859c2d9d051c41c724eStephen Hines    public void testBoundTag() throws Throwable {
16122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao        mBinder.setBool1(false);
1625460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao        mBinder.executePendingBindings();
1635460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao        assertEquals("bar", mBinder.textView19.getTag());
16437b74a387bb3993387029859c2d9d051c41c724eStephen Hines        mBinder.setBool1(true);
165d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao        mBinder.executePendingBindings();
16622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao        assertEquals("foo", mBinder.textView19.getTag());
1675460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    }
1685460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
16937b74a387bb3993387029859c2d9d051c41c724eStephen Hines    @UiThreadTest
170d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao    public void testConstantExpression() throws Throwable {
171d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao        mBinder.setVar1(1000);
172d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao        mBinder.setVar2(2000);
17337b74a387bb3993387029859c2d9d051c41c724eStephen Hines        mBinder.executePendingBindings();
17487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines        assertEquals("1000", mBinder.textView20.getText().toString());
1755460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao        assertEquals("2000", mBinder.textView21.getText().toString());
1765460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    }
17737b74a387bb3993387029859c2d9d051c41c724eStephen Hines}
178d0fbbb227051be16931a1aa9b4a7722ac039c698Shih-wei Liao