16047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar/* 26047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar * Copyright (C) 2016 The Android Open Source Project 36047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar * 46047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar * Licensed under the Apache License, Version 2.0 (the "License"); 56047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar * you may not use this file except in compliance with the License. 66047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar * You may obtain a copy of the License at 76047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar * 86047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar * http://www.apache.org/licenses/LICENSE-2.0 96047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar * 106047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar * Unless required by applicable law or agreed to in writing, software 116047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar * distributed under the License is distributed on an "AS IS" BASIS, 126047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 136047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar * See the License for the specific language governing permissions and 146047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar * limitations under the License. 156047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar */ 166047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar 176047998943beebd81e0ae1068df39c0cbee38628Yigit Boyarpackage android.databinding.testapp; 186047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar 196047998943beebd81e0ae1068df39c0cbee38628Yigit Boyarimport static org.mockito.Matchers.eq; 206047998943beebd81e0ae1068df39c0cbee38628Yigit Boyarimport static org.mockito.Mockito.any; 216047998943beebd81e0ae1068df39c0cbee38628Yigit Boyarimport static org.mockito.Mockito.mock; 226047998943beebd81e0ae1068df39c0cbee38628Yigit Boyarimport static org.mockito.Mockito.never; 236047998943beebd81e0ae1068df39c0cbee38628Yigit Boyarimport static org.mockito.Mockito.times; 246047998943beebd81e0ae1068df39c0cbee38628Yigit Boyarimport static org.mockito.Mockito.verify; 256047998943beebd81e0ae1068df39c0cbee38628Yigit Boyarimport static org.mockito.Mockito.verifyZeroInteractions; 266047998943beebd81e0ae1068df39c0cbee38628Yigit Boyarimport static org.mockito.Mockito.when; 276047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar 286047998943beebd81e0ae1068df39c0cbee38628Yigit Boyarimport android.annotation.TargetApi; 296047998943beebd81e0ae1068df39c0cbee38628Yigit Boyarimport android.databinding.testapp.databinding.CallbacksBinding; 306047998943beebd81e0ae1068df39c0cbee38628Yigit Boyarimport android.databinding.testapp.vo.CallbackBindingObject; 316047998943beebd81e0ae1068df39c0cbee38628Yigit Boyarimport android.databinding.testapp.vo.NotBindableVo; 326047998943beebd81e0ae1068df39c0cbee38628Yigit Boyarimport android.os.Build; 336047998943beebd81e0ae1068df39c0cbee38628Yigit Boyarimport android.support.test.runner.AndroidJUnit4; 346047998943beebd81e0ae1068df39c0cbee38628Yigit Boyarimport android.view.View; 356047998943beebd81e0ae1068df39c0cbee38628Yigit Boyarimport android.widget.ArrayAdapter; 366047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar 376047998943beebd81e0ae1068df39c0cbee38628Yigit Boyarimport org.hamcrest.CoreMatchers; 386047998943beebd81e0ae1068df39c0cbee38628Yigit Boyarimport org.hamcrest.MatcherAssert; 396047998943beebd81e0ae1068df39c0cbee38628Yigit Boyarimport org.junit.Before; 406047998943beebd81e0ae1068df39c0cbee38628Yigit Boyarimport org.junit.Rule; 416047998943beebd81e0ae1068df39c0cbee38628Yigit Boyarimport org.junit.Test; 426047998943beebd81e0ae1068df39c0cbee38628Yigit Boyarimport org.junit.runner.RunWith; 436047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar 446047998943beebd81e0ae1068df39c0cbee38628Yigit Boyarimport java.util.Arrays; 456047998943beebd81e0ae1068df39c0cbee38628Yigit Boyarimport java.util.concurrent.atomic.AtomicInteger; 466047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar 476047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar@RunWith(AndroidJUnit4.class) 486047998943beebd81e0ae1068df39c0cbee38628Yigit Boyarpublic class CallbackTest { 496047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar @Rule 506047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar public DataBindingTestRule<CallbacksBinding> mBindingRule = new DataBindingTestRule<>( 516047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar R.layout.callbacks 526047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar ); 536047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar 546047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar CallbackBindingObject mObj; 556047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar NotBindableVo mOther; 566047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar CallbacksBinding mBinding; 576047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar 586047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar @Before 596047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar public void setup() throws Throwable { 606047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar mBinding = mBindingRule.getBinding(); 616047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar mObj = mock(CallbackBindingObject.class); 626047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar mOther = new NotBindableVo(); 636047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar mBinding.setObj(mObj); 646047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar mBinding.setOtherObj(mOther); 656047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar mBindingRule.executePending(); 666047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar mBindingRule.runOnUiThread(new Runnable() { 676047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar @Override 686047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar public void run() { 696047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar verifyZeroInteractions(mObj); 706047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar } 716047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar }); 726047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar 736047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar } 746047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar 756047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar @Test 766047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar public void testRegularClick() throws Throwable { 776047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar mBindingRule.runOnUiThread(new Runnable() { 786047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar @Override 796047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar public void run() { 806047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar mBinding.view1.performClick(); 816047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar verify(mObj, times(1)).onClick(); 826047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar verify(mObj, never()).onClick(any(View.class)); 836047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar verify(mObj, never()).onClickWithParam(any(NotBindableVo.class)); 846047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar verify(mObj, never()).onClickWithParam(any(View.class), any(NotBindableVo.class)); 856047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar } 866047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar }); 876047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar } 886047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar 896047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar @Test 906047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar public void testClickWithCallbackArg() throws Throwable { 916047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar mBindingRule.runOnUiThread(new Runnable() { 926047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar @Override 936047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar public void run() { 946047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar mBinding.view2.performClick(); 956047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar verify(mObj, never()).onClick(); 966047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar verify(mObj, times(1)).onClick(mBinding.view2); 976047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar verify(mObj, never()).onClickWithParam(any(NotBindableVo.class)); 986047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar verify(mObj, never()).onClickWithParam(any(View.class), any(NotBindableVo.class)); 996047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar } 1006047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar }); 1016047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar } 1026047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar 1036047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar @Test 1046047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar public void testClickWithAnotherVariableAsArg() throws Throwable { 1056047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar mBindingRule.runOnUiThread(new Runnable() { 1066047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar @Override 1076047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar public void run() { 1086047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar mBinding.view3.performClick(); 1096047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar verify(mObj, never()).onClick(); 1106047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar verify(mObj, never()).onClick(any(View.class)); 1116047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar verify(mObj, times(1)).onClickWithParam(eq(mOther)); 1126047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar verify(mObj, never()).onClickWithParam(any(View.class), any(NotBindableVo.class)); 1136047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar } 1146047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar }); 1156047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar } 1166047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar 1176047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar @Test 1186047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar public void testClickWithViewAndAnotherVariableAsArgs() throws Throwable { 1196047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar mBindingRule.runOnUiThread(new Runnable() { 1206047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar @Override 1216047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar public void run() { 1226047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar mBinding.view4.performClick(); 1236047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar verify(mObj, never()).onClick(); 1246047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar verify(mObj, never()).onClick(any(View.class)); 1256047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar verify(mObj, never()).onClickWithParam(any(NotBindableVo.class)); 1266047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar verify(mObj, times(1)).onClickWithParam(mBinding.view4, mOther); 1276047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar } 1286047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar }); 1296047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar } 1306047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar 1316047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar @Test 1326047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar public void nullObjectInCallback() throws Throwable { 1336047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar mBinding.setObj(null); 1346047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar mBindingRule.executePending(); 1356047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar mBindingRule.runOnUiThread(new Runnable() { 1366047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar @Override 1376047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar public void run() { 1386047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar mBinding.view1.performClick(); 1396047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar mBinding.view2.performClick(); 1406047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar mBinding.view3.performClick(); 1416047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar mBinding.view4.performClick(); 1426047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar 1436047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar MatcherAssert.assertThat(mBinding.view1.performLongClick(), CoreMatchers.is(false)); 1446047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar MatcherAssert.assertThat(mBinding.view2.performLongClick(), CoreMatchers.is(false)); 1456047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar MatcherAssert.assertThat(mBinding.view3.performLongClick(), CoreMatchers.is(false)); 1466047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar MatcherAssert.assertThat(mBinding.view4.performLongClick(), CoreMatchers.is(false)); 1476047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar 1486047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar } 1496047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar }); 1506047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar verifyZeroInteractions(mObj); 1516047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar } 1526047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar 1536047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar // long click 1546047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar @Test 1556047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar public void testRegularLongClick() throws Throwable { 1566047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar mBindingRule.runOnUiThread(new Runnable() { 1576047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar @Override 1586047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar public void run() { 1596047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar when(mObj.onLongClick()).thenReturn(true); 1606047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar MatcherAssert.assertThat(mBinding.view1.performLongClick(), CoreMatchers.is(true)); 1616047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar verify(mObj, times(1)).onLongClick(); 1626047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar verify(mObj, never()).onLongClick(any(View.class)); 1636047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar verify(mObj, never()).onLongClickWithParam(any(NotBindableVo.class)); 1646047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar verify(mObj, never()).onLongClickWithParam(any(View.class), any(NotBindableVo 1656047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar .class)); 1666047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar } 1676047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar }); 1686047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar } 1696047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar 1706047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar @Test 1716047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar public void testLongClickWithCallbackArg() throws Throwable { 1726047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar mBindingRule.runOnUiThread(new Runnable() { 1736047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar @Override 1746047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar public void run() { 1756047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar when(mObj.onLongClick(mBinding.view2)).thenReturn(true); 1766047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar MatcherAssert.assertThat(mBinding.view2.performLongClick(), CoreMatchers.is(true)); 1776047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar verify(mObj, never()).onLongClick(); 1786047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar verify(mObj, times(1)).onLongClick(mBinding.view2); 1796047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar verify(mObj, never()).onLongClickWithParam(any(NotBindableVo.class)); 1806047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar verify(mObj, never()).onLongClickWithParam(any(View.class), any(NotBindableVo 1816047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar .class)); 1826047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar } 1836047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar }); 1846047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar } 1856047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar 1866047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar @Test 1876047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar public void testLongClickWithAnotherVariableAsArg() throws Throwable { 1886047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar mBindingRule.runOnUiThread(new Runnable() { 1896047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar @Override 1906047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar public void run() { 1916047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar when(mObj.onLongClickWithParam(mOther)).thenReturn(true); 1926047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar MatcherAssert.assertThat(mBinding.view3.performLongClick(), CoreMatchers.is(true)); 1936047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar verify(mObj, never()).onLongClick(); 1946047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar verify(mObj, never()).onLongClick(any(View.class)); 1956047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar verify(mObj, times(1)).onLongClickWithParam(mOther); 1966047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar verify(mObj, never()).onLongClickWithParam(any(View.class), any(NotBindableVo 1976047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar .class)); 1986047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar } 1996047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar }); 2006047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar } 2016047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar 2026047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar @Test 2036047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar public void testLongClickWithViewAndAnotherVariableAsArgs() throws Throwable { 2046047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar mBindingRule.runOnUiThread(new Runnable() { 2056047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar @Override 2066047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar public void run() { 2076047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar when(mObj.onLongClickWithParam(mBinding.view4, mOther)).thenReturn(true); 2086047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar MatcherAssert.assertThat(mBinding.view4.performLongClick(), CoreMatchers.is(true)); 2096047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar verify(mObj, never()).onLongClick(); 2106047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar verify(mObj, never()).onLongClick(any(View.class)); 2116047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar verify(mObj, never()).onLongClickWithParam(any(NotBindableVo.class)); 2126047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar verify(mObj, times(1)).onLongClickWithParam(mBinding.view4, mOther); 2136047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar } 2146047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar }); 2156047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar } 2166047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar 2176047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar @Test 2186047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar public void testListViewOnScroll() throws Throwable { 2196047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar final CallbackBindingObject obj2 = mock(CallbackBindingObject.class); 2206047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar mBinding.setObj2(obj2); 2216047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar mBindingRule.executePending(); 2226047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar mBindingRule.runOnUiThread(new Runnable() { 2236047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar @Override 2246047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar public void run() { 2256047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar // this is going to trigger scroll 2266047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar mBinding.listView.setAdapter(new ArrayAdapter<>(mBinding.listView.getContext(), 2276047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar android.R.layout.simple_list_item_1, Arrays.asList("a", "b"))); 2286047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar } 2296047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar }); 2306047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar mBindingRule.runOnUiThread(new Runnable() { 2316047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar @TargetApi(Build.VERSION_CODES.KITKAT) 2326047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar @Override 2336047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar public void run() { 2346047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar // setting listener also calls the callback 2356047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar verify(obj2).onScrolled(); 2366047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar } 2376047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar }); 2386047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar } 2396047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar 2406047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar @Test 2416047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar public void testProgressChange() throws Throwable { 2426047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar mBindingRule.runOnUiThread(new Runnable() { 2436047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar @Override 2446047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar public void run() { 2456047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar mBinding.seekBar.setProgress(20); 2466047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar verify(mObj, times(1)).onProgressChanged(mBinding.seekBar, 20, false); 2476047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar } 2486047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar }); 2496047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar } 2506047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar 2516047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar @Test 2526047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar public void testStaticCallViaClass() throws Throwable { 2536047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar staticCall(mBinding.view5); 2546047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar } 2556047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar 2566047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar @Test 2576047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar public void testStaticCallViaInstance() throws Throwable { 2586047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar staticCall(mBinding.view6); 2596047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar } 2606047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar 2616047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar @Test 2626047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar public void testVariableOverride() throws Throwable { 2636047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar mBindingRule.runOnUiThread(new Runnable() { 2646047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar @Override 2656047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar public void run() { 2666047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar mBinding.view8.performClick(); 2676047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar verify(mObj).onClick(mBinding.view8); 2686047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar } 2696047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar }); 2706047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar } 2716047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar 2726047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar @Test 2736047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar public void testArrayAccess() throws Throwable { 2746047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar final CallbackBindingObject[] objects = new CallbackBindingObject[] { 2756047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar mock(CallbackBindingObject.class), 2766047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar mock(CallbackBindingObject.class), 2776047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar mock(CallbackBindingObject.class), 2786047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar }; 2796047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar mBinding.setObjArr(objects); 2806047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar mBindingRule.executePending(); 2816047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar mBindingRule.runOnUiThread(new Runnable() { 2826047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar @Override 2836047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar public void run() { 2846047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar verifyZeroInteractions(objects); 2856047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar mBinding.view7.performClick(); 2866047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar verify(objects[1]).onClick(mBinding.view7); 2876047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar mBinding.view7.performLongClick(); 2886047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar verify(objects[2]).onLongClick(mBinding.view7); 2896047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar verifyZeroInteractions(objects[0]); 2906047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar } 2916047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar }); 2926047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar } 2936047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar 2946047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar @Test 2956047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar public void testStaticVariableFullPackage() throws Throwable { 2966047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar mBindingRule.runOnUiThread(new Runnable() { 2976047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar @Override 2986047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar public void run() { 2996047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar mBinding.view9.performClick(); 3006047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar verify(mObj).setVisible(View.VISIBLE); 3016047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar } 3026047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar }); 3036047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar } 3046047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar 3056047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar @Test 3066047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar public void testStaticVariableImported() throws Throwable { 3076047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar mBindingRule.runOnUiThread(new Runnable() { 3086047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar @Override 3096047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar public void run() { 3106047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar mBinding.view10.performClick(); 3116047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar verify(mObj).setVisible(NotBindableVo.STATIC_VAL); 3126047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar } 3136047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar }); 3146047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar } 3156047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar 3166047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar @Test 3176047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar public void testTernary1() throws Throwable { 3186047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar mBindingRule.runOnUiThread(new Runnable() { 3196047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar @Override 3206047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar public void run() { 3216047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar mBinding.view11.setFocusable(false); 3226047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar mBinding.view11.performClick(); 3236047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar verify(mObj).onNotFocusable(); 3246047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar verify(mObj, never()).onFocusable(); 3256047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar } 3266047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar }); 3276047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar } 3286047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar 3296047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar @Test 3306047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar public void testTernary2() throws Throwable { 3316047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar mBindingRule.runOnUiThread(new Runnable() { 3326047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar @Override 3336047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar public void run() { 3346047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar mBinding.view11.setFocusable(true); 3356047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar mBinding.view11.performClick(); 3366047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar verify(mObj).onFocusable(); 3376047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar verify(mObj, never()).onNotFocusable(); 3386047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar } 3396047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar }); 3406047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar } 3416047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar 3426047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar @Test 3436047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar public void testTernary3() throws Throwable { 3446047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar mBindingRule.runOnUiThread(new Runnable() { 3456047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar @Override 3466047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar public void run() { 3476047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar mBinding.view11.setFocusable(false); 3486047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar when(mObj.onFocusable()).thenReturn(true, false); 3496047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar when(mObj.onNotFocusable()).thenReturn(false, true); 3506047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar MatcherAssert.assertThat(mBinding.view11.performLongClick(), CoreMatchers.is(false)); 3516047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar MatcherAssert.assertThat(mBinding.view11.performLongClick(), CoreMatchers.is(true)); 3526047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar mBinding.view11.setFocusable(true); 3536047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar MatcherAssert.assertThat(mBinding.view11.performLongClick(), CoreMatchers.is(true)); 3546047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar MatcherAssert.assertThat(mBinding.view11.performLongClick(), CoreMatchers.is(false)); 3556047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar } 3566047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar }); 3576047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar } 3586047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar 3596047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar @Test 3606047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar public void testTernary4() throws Throwable { 3616047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar mBindingRule.runOnUiThread(new Runnable() { 3626047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar @Override 3636047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar public void run() { 3646047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar mBinding.view11.setFocusable(true); 3656047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar mBinding.view11.performClick(); 3666047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar verify(mObj).onFocusable(); 3676047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar verify(mObj, never()).onNotFocusable(); 3686047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar } 3696047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar }); 3706047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar } 3716047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar 3726047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar private void staticCall(final View view) throws Throwable { 3736047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar final AtomicInteger counter = NotBindableVo.sStaticCounter; 3746047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar final int start = counter.get(); 3756047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar mBindingRule.runOnUiThread(new Runnable() { 3766047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar @Override 3776047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar public void run() { 3786047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar view.performClick(); 3796047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar MatcherAssert.assertThat(counter.get(), CoreMatchers.is(start + 1)); 3806047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar MatcherAssert.assertThat(view.performLongClick(), CoreMatchers.is(true)); 3816047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar MatcherAssert.assertThat(counter.get(), CoreMatchers.is(start + 2)); 3826047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar } 3836047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar }); 3846047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar } 3856047998943beebd81e0ae1068df39c0cbee38628Yigit Boyar} 386