1b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount/* 2b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount * Copyright (C) 2015 The Android Open Source Project 3b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount * 4b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount * Licensed under the Apache License, Version 2.0 (the "License"); 5b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount * you may not use this file except in compliance with the License. 6b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount * You may obtain a copy of the License at 7b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount * 8b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount * http://www.apache.org/licenses/LICENSE-2.0 9b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount * 10b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount * Unless required by applicable law or agreed to in writing, software 11b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount * distributed under the License is distributed on an "AS IS" BASIS, 12b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount * See the License for the specific language governing permissions and 14b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount * limitations under the License. 15b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount */ 16b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mountpackage android.databinding.testapp; 17b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount 18b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mountimport android.app.Instrumentation; 19b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mountimport android.content.Context; 20b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mountimport android.databinding.testapp.databinding.TwoWayBinding; 21b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mountimport android.databinding.testapp.vo.TwoWayBindingObject; 22b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mountimport android.os.SystemClock; 23b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mountimport android.text.Spannable; 24b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mountimport android.text.SpannableString; 25b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mountimport android.text.style.BackgroundColorSpan; 26b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mountimport android.view.MotionEvent; 27b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mountimport android.view.View; 28b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mountimport android.view.ViewConfiguration; 29b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mountimport android.view.ViewGroup; 30b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mountimport android.widget.EditText; 31b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mountimport android.widget.TabHost.TabSpec; 32b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount 3311df39c91611b9ff2d7c87a9a9829251a015bccfGeorge Mountimport java.util.Calendar; 34b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mountimport java.util.concurrent.CountDownLatch; 35b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mountimport java.util.concurrent.TimeUnit; 36b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount 37b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mountpublic class TwoWayBindingAdapterTest extends BaseDataBinderTest<TwoWayBinding> { 38b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount 39b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount TwoWayBindingObject mBindingObject; 40b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount 41b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount public TwoWayBindingAdapterTest() { 42b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount super(TwoWayBinding.class); 43b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount } 44b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount 45b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount @Override 46b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount protected void setUp() throws Exception { 47b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount super.setUp(); 48b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount initBinder(new Runnable() { 49b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount @Override 50b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount public void run() { 51b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount Context context = getBinder().getRoot().getContext(); 52b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount mBindingObject = new TwoWayBindingObject(context); 53b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount getBinder().setObj(mBindingObject); 54b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount getBinder().executePendingBindings(); 55b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount } 56b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount }); 57b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount } 58b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount 59b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount public void testListViewSelectedItemPosition() throws Throwable { 60b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount makeVisible(mBinder.listView); 61b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount runTestOnUiThread(new Runnable() { 62b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount @Override 63b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount public void run() { 64b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount assertEquals(0, mBindingObject.selectedItemPosition.get()); 65b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount assertEquals(0, mBinder.listView.getSelectedItemPosition()); 66b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount mBinder.listView.setSelection(1); 67b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount } 68b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount }); 69b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount long timeout = SystemClock.uptimeMillis() + 500; 70b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount while (mBindingObject.selectedItemPosition.get() == 0 && 71b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount SystemClock.uptimeMillis() < timeout) { 72b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount Thread.sleep(1); 73b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount } 74b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount runTestOnUiThread(new Runnable() { 75b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount @Override 76b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount public void run() { 77b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount assertEquals(1, mBinder.listView.getSelectedItemPosition()); 78b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount assertEquals(1, mBindingObject.selectedItemPosition.get()); 79b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount } 80b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount }); 81b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount } 82b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount 83b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount private void clickView(final View view, float offsetX) throws Throwable { 84b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount final int[] xy = new int[2]; 85b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount final int[] viewSize = new int[2]; 86b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount do { 87b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount runTestOnUiThread(new Runnable() { 88b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount @Override 89b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount public void run() { 90b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount view.getLocationOnScreen(xy); 91b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount viewSize[0] = view.getWidth(); 92b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount viewSize[1] = view.getHeight(); 93b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount } 94b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount }); 95b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount } while (xy[0] < 0 || xy[1] < 0); 96b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount 97b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount final float x = xy[0] + offsetX; 98b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount final float y = xy[1] + (viewSize[1] / 2f); 99b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount 100b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount Instrumentation inst = getInstrumentation(); 101b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount 102b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount long downTime = SystemClock.uptimeMillis(); 103b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount long eventTime = SystemClock.uptimeMillis(); 104b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount 105b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount MotionEvent event = MotionEvent.obtain(downTime, eventTime, 106b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount MotionEvent.ACTION_DOWN, x, y, 0); 107b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount inst.sendPointerSync(event); 108b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount inst.waitForIdleSync(); 109b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount 110b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount eventTime = SystemClock.uptimeMillis(); 111b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount final int touchSlop = ViewConfiguration.get(view.getContext()).getScaledTouchSlop(); 112b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount event = MotionEvent.obtain(downTime, eventTime, MotionEvent.ACTION_MOVE, 113b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount x + (touchSlop / 2.0f), y + (touchSlop / 2.0f), 0); 114b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount inst.sendPointerSync(event); 115b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount inst.waitForIdleSync(); 116b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount 117b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount eventTime = SystemClock.uptimeMillis(); 118b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount event = MotionEvent.obtain(downTime, eventTime, MotionEvent.ACTION_UP, x, y, 0); 119b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount inst.sendPointerSync(event); 120b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount inst.waitForIdleSync(); 121b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount } 122b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount 123b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount private void clickChild(View view, float offsetX) throws Throwable { 124b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount View childView = view; 125b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount while (childView != null) { 126b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount childView.callOnClick(); 127b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount if (childView instanceof ViewGroup) { 128b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount final ViewGroup viewGroup = (ViewGroup) childView; 129b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount if (viewGroup.getChildCount() > 0) { 130b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount childView = viewGroup.getChildAt(0); 131b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount } else { 132b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount childView = null; 133b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount } 134b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount } else { 135b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount clickView(childView, offsetX); 136b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount childView = null; 137b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount } 138b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount } 139b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount } 140b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount 141b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount public void testCalendarViewDate() throws Throwable { 142b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount makeVisible(mBinder.calendarView); 143b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount runTestOnUiThread(new Runnable() { 144b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount @Override 145b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount public void run() { 14611df39c91611b9ff2d7c87a9a9829251a015bccfGeorge Mount assertTrue(mBindingObject.date.get() != 0); 14711df39c91611b9ff2d7c87a9a9829251a015bccfGeorge Mount assertDatesMatch(mBindingObject.date.get(), mBinder.calendarView.getDate()); 148b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount } 149b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount }); 150b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount final long[] date = new long[2]; 151b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount float offsetX = 0; 152b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount long timeout = SystemClock.uptimeMillis() + 1500; 153b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount do { 154b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount // Just randomly poke at the CalendarView to set the date 155b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount clickChild(mBinder.calendarView, offsetX); 156b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount offsetX += 48; 157b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount runTestOnUiThread(new Runnable() { 158b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount @Override 159b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount public void run() { 160b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount date[0] = mBinder.calendarView.getDate(); 161b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount if (date[1] == 0) { 162b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount date[1] = date[0]; 163b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount } 164b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount } 165b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount }); 166b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount } while (date[0] == date[1] && SystemClock.uptimeMillis() < timeout); 167b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount 168b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount timeout = SystemClock.uptimeMillis() + 100; 169b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount while (mBindingObject.date.get() == 0 && SystemClock.uptimeMillis() < timeout) { 170b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount Thread.sleep(1); 171b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount } 172b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount 17311df39c91611b9ff2d7c87a9a9829251a015bccfGeorge Mount assertDatesMatch(date[0], mBindingObject.date.get()); 17411df39c91611b9ff2d7c87a9a9829251a015bccfGeorge Mount } 17511df39c91611b9ff2d7c87a9a9829251a015bccfGeorge Mount 17611df39c91611b9ff2d7c87a9a9829251a015bccfGeorge Mount public void assertDatesMatch(long expectedTimeMillis, long testTimeMillis) { 17711df39c91611b9ff2d7c87a9a9829251a015bccfGeorge Mount Calendar expected = Calendar.getInstance(); 17811df39c91611b9ff2d7c87a9a9829251a015bccfGeorge Mount expected.setTimeInMillis(expectedTimeMillis); 17911df39c91611b9ff2d7c87a9a9829251a015bccfGeorge Mount Calendar testValue = Calendar.getInstance(); 18011df39c91611b9ff2d7c87a9a9829251a015bccfGeorge Mount testValue.setTimeInMillis(testTimeMillis); 18111df39c91611b9ff2d7c87a9a9829251a015bccfGeorge Mount assertEquals(expected.get(Calendar.YEAR), testValue.get(Calendar.YEAR)); 18211df39c91611b9ff2d7c87a9a9829251a015bccfGeorge Mount assertEquals(expected.get(Calendar.MONTH), testValue.get(Calendar.MONTH)); 18311df39c91611b9ff2d7c87a9a9829251a015bccfGeorge Mount assertEquals(expected.get(Calendar.DAY_OF_MONTH), 18411df39c91611b9ff2d7c87a9a9829251a015bccfGeorge Mount testValue.get(Calendar.DAY_OF_MONTH)); 185b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount } 186b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount 187b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount public void testCheckBoxChecked() throws Throwable { 188b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount makeVisible(mBinder.checkBox); 189b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount runTestOnUiThread(new Runnable() { 190b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount @Override 191b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount public void run() { 192b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount assertFalse(mBindingObject.checked.get()); 193b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount assertFalse(mBinder.checkBox.isChecked()); 194b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount mBinder.checkBox.setChecked(true); 195b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount } 196b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount }); 197b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount 198b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount final long timeout = SystemClock.uptimeMillis() + 500; 199b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount while (!mBindingObject.checked.get() && SystemClock.uptimeMillis() < timeout) { 200b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount Thread.sleep(1); 201b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount } 202b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount 203b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount runTestOnUiThread(new Runnable() { 204b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount @Override 205b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount public void run() { 206b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount assertTrue(mBinder.checkBox.isChecked()); 207b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount assertTrue(mBindingObject.checked.get()); 208b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount } 209b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount }); 210b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount } 211b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount 212b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount private boolean focusOn(final View view) throws Throwable { 213b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount runTestOnUiThread(new Runnable() { 214b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount @Override 215b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount public void run() { 216b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount view.requestFocus(); 217b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount } 218b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount }); 219b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount long timeout = SystemClock.uptimeMillis() + 500; 220b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount final boolean[] focused = new boolean[1]; 221b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount while (SystemClock.uptimeMillis() < timeout) { 222b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount runTestOnUiThread(new Runnable() { 223b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount @Override 224b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount public void run() { 225b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount focused[0] = view.isFocused(); 226b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount } 227b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount }); 228b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount if (focused[0]) { 229b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount return true; 230b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount } 231b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount } 232b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount return false; 233b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount } 234b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount 235b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount public void testNumberPickerNumber() throws Throwable { 236b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount makeVisible(mBinder.textView, mBinder.numberPicker); 237b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount assertTrue(focusOn(mBinder.textView)); 238b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount final EditText[] pickerText = new EditText[1]; 239b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount runTestOnUiThread(new Runnable() { 240b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount @Override 241b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount public void run() { 242b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount assertEquals(1, mBindingObject.number.get()); 243b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount assertEquals(1, mBinder.numberPicker.getValue()); 244b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount for (int i = 0; i < mBinder.numberPicker.getChildCount(); i++) { 245b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount View view = mBinder.numberPicker.getChildAt(i); 246b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount if (view instanceof EditText) { 247b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount pickerText[0] = (EditText) view; 248b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount break; 249b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount } 250b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount } 251b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount } 252b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount }); 253b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount assertNotNull(pickerText[0]); 254b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount assertTrue(focusOn(pickerText[0])); 255b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount runTestOnUiThread(new Runnable() { 256b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount @Override 257b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount public void run() { 258b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount pickerText[0].setText("10"); 259b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount } 260b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount }); 261b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount assertTrue(focusOn(mBinder.textView)); 262b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount 263b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount final long timeout = SystemClock.uptimeMillis() + 10; 264b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount while (mBindingObject.number.get() == 1 && SystemClock.uptimeMillis() < timeout) { 265b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount Thread.sleep(1); 266b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount } 267b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount 268b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount runTestOnUiThread(new Runnable() { 269b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount @Override 270b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount public void run() { 271b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount assertEquals(10, mBinder.numberPicker.getValue()); 272b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount assertEquals(10, mBindingObject.number.get()); 273b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount } 274b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount }); 275b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount } 276b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount 277b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount public void testRatingBarRating() throws Throwable { 278b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount makeVisible(mBinder.ratingBar); 279b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount runTestOnUiThread(new Runnable() { 280b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount @Override 281b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount public void run() { 282b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount assertEquals(1f, mBindingObject.rating.get()); 283b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount assertEquals(1f, mBinder.ratingBar.getRating()); 284b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount mBinder.ratingBar.setRating(2.5f); 285b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount } 286b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount }); 287b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount 288b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount final long timeout = SystemClock.uptimeMillis() + 500; 289b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount while (mBindingObject.rating.get() == 1f && SystemClock.uptimeMillis() < timeout) { 290b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount Thread.sleep(1); 291b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount } 292b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount 293b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount runTestOnUiThread(new Runnable() { 294b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount @Override 295b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount public void run() { 296b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount assertEquals(2.5f, mBinder.ratingBar.getRating()); 297b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount assertEquals(2.5f, mBindingObject.rating.get()); 298b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount } 299b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount }); 300b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount } 301b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount 302b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount public void testSeekBarProgress() throws Throwable { 303b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount makeVisible(mBinder.seekBar); 304b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount runTestOnUiThread(new Runnable() { 305b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount @Override 306b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount public void run() { 307b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount assertEquals(1, mBindingObject.progress.get()); 308b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount assertEquals(1, mBinder.seekBar.getProgress()); 309b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount mBinder.seekBar.setProgress(30); 310b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount } 311b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount }); 312b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount 313b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount final long timeout = SystemClock.uptimeMillis() + 500; 314b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount while (mBindingObject.progress.get() == 1 && SystemClock.uptimeMillis() < timeout) { 315b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount Thread.sleep(1); 316b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount } 317b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount 318b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount runTestOnUiThread(new Runnable() { 319b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount @Override 320b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount public void run() { 321b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount assertEquals(30, mBinder.seekBar.getProgress()); 322b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount assertEquals(30, mBindingObject.progress.get()); 323b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount } 324b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount }); 325b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount } 326b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount 327b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount public void testTabHostCurrentTab() throws Throwable { 328b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount makeVisible(mBinder.tabhost); 329b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount runTestOnUiThread(new Runnable() { 330b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount @Override 331b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount public void run() { 332b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount mBinder.tabhost.setup(); 333b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount TabSpec tab1 = mBinder.tabhost.newTabSpec("Tab1"); 334b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount TabSpec tab2 = mBinder.tabhost.newTabSpec("Tab2"); 335b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount 336b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount tab1.setIndicator("tab1"); 337b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount tab1.setContent(R.id.foo); 338b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount tab2.setIndicator("tab2"); 339b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount tab2.setContent(R.id.bar); 340b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount mBinder.tabhost.addTab(tab1); 341b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount mBinder.tabhost.addTab(tab2); 342b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount mBinder.tabhost.setCurrentTab(1); 343b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount } 344b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount }); 345b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount 346b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount final long timeout = SystemClock.uptimeMillis() + 500; 347b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount while (mBindingObject.currentTab.get() == 0 && SystemClock.uptimeMillis() < timeout) { 348b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount Thread.sleep(1); 349b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount } 350b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount 351b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount runTestOnUiThread(new Runnable() { 352b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount @Override 353b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount public void run() { 354b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount assertEquals(1, mBinder.tabhost.getCurrentTab()); 355b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount assertEquals(1, mBindingObject.currentTab.get()); 356b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount } 357b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount }); 358b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount } 359b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount 360b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount public void testTextViewText() throws Throwable { 361b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount makeVisible(mBinder.textView); 362b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount runTestOnUiThread(new Runnable() { 363b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount @Override 364b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount public void run() { 365b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount assertEquals(null, mBindingObject.text.get()); 366b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount assertEquals("", mBinder.textView.getText().toString()); 367b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount mBinder.textView.setText("Hello World"); 368b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount } 369b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount }); 370b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount 371b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount final long timeout = SystemClock.uptimeMillis() + 500; 372b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount while (mBindingObject.text.get().isEmpty() && SystemClock.uptimeMillis() < timeout) { 373b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount Thread.sleep(1); 374b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount } 375b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount 376b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount runTestOnUiThread(new Runnable() { 377b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount @Override 378b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount public void run() { 379b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount assertEquals("Hello World", mBinder.textView.getText().toString()); 380b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount assertEquals("Hello World", mBindingObject.text.get()); 381b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount } 382b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount }); 383b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount } 384b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount 385b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount public void testDatePicker() throws Throwable { 386b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount makeVisible(mBinder.datePicker); 387b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount runTestOnUiThread(new Runnable() { 388b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount @Override 389b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount public void run() { 390b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount assertEquals(1972, mBindingObject.year.get()); 391b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount assertEquals(9, mBindingObject.month.get()); 392b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount assertEquals(21, mBindingObject.day.get()); 393b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount assertEquals(1972, mBinder.datePicker.getYear()); 394b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount assertEquals(9, mBinder.datePicker.getMonth()); 395b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount assertEquals(21, mBinder.datePicker.getDayOfMonth()); 396b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount mBinder.datePicker.updateDate(2003, 4, 17); 397b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount } 398b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount }); 399b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount 400b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount final long timeout = SystemClock.uptimeMillis() + 500; 401b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount while (mBindingObject.year.get() == 1972 && SystemClock.uptimeMillis() < timeout) { 402b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount Thread.sleep(1); 403b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount } 404b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount 405b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount runTestOnUiThread(new Runnable() { 406b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount @Override 407b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount public void run() { 408b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount assertEquals(2003, mBindingObject.year.get()); 409b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount assertEquals(4, mBindingObject.month.get()); 410b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount assertEquals(17, mBindingObject.day.get()); 411b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount } 412b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount }); 413b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount } 414b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount 415b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount public void testExpressions1() throws Throwable { 416b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount makeVisible(mBinder.expressions1); 417b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount runTestOnUiThread(new Runnable() { 418b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount @Override 419b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount public void run() { 420b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount assertEquals(1972, mBindingObject.year.get()); 421b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount assertEquals(9, mBindingObject.month.get()); 422b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount assertEquals(21, mBindingObject.day.get()); 423b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount assertEquals(1972000, mBinder.expressions1.getYear()); 424b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount assertEquals(2, mBinder.expressions1.getMonth()); 425b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount assertEquals(22, mBinder.expressions1.getDayOfMonth()); 426b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount mBinder.expressions1.updateDate(2003000, 3, 18); 427b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount } 428b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount }); 429b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount 430b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount final long timeout = SystemClock.uptimeMillis() + 500; 431b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount while (mBindingObject.year.get() == 1972 && SystemClock.uptimeMillis() < timeout) { 432b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount Thread.sleep(1); 433b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount } 434b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount 435b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount runTestOnUiThread(new Runnable() { 436b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount @Override 437b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount public void run() { 438b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount assertEquals(2003, mBindingObject.year.get()); 439b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount assertEquals(8, mBindingObject.month.get()); 440b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount assertEquals(17, mBindingObject.day.get()); 441b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount } 442b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount }); 443b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount } 444b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount 445b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount public void testExpressions2() throws Throwable { 446b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount makeVisible(mBinder.expressions2); 447b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount runTestOnUiThread(new Runnable() { 448b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount @Override 449b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount public void run() { 450b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount assertEquals(1972, mBindingObject.year.get()); 451b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount assertEquals(9, mBindingObject.month.get()); 452b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount assertEquals(21, mBindingObject.day.get()); 453b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount assertEquals(1, mBinder.expressions2.getYear()); 454b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount assertEquals(9, mBinder.expressions2.getMonth()); 455b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount assertEquals(21, mBinder.expressions2.getDayOfMonth()); 456b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount mBinder.expressions2.updateDate(2, 4, 17); 457b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount } 458b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount }); 459b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount 460b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount final long timeout = SystemClock.uptimeMillis() + 500; 461b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount while (mBindingObject.year.get() == 1972 && SystemClock.uptimeMillis() < timeout) { 462b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount Thread.sleep(1); 463b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount } 464b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount 465b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount runTestOnUiThread(new Runnable() { 466b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount @Override 467b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount public void run() { 468b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount assertEquals(2000, mBindingObject.year.get()); 469b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount assertEquals(4, mBindingObject.month.get()); 470b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount assertEquals(17, mBindingObject.day.get()); 471b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount } 472b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount }); 473b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount } 474b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount 475b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount public void testExpressions3() throws Throwable { 476b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount makeVisible(mBinder.expressions3); 477b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount runTestOnUiThread(new Runnable() { 478b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount @Override 479b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount public void run() { 480b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount assertEquals((Integer)1, mBindingObject.list.get(1)); 481b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount assertEquals((Integer)2, mBindingObject.map.get("two")); 482b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount assertEquals(2, mBindingObject.array.get()[1]); 483b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount assertEquals(1, mBinder.expressions3.getYear()); 484b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount assertEquals(2, mBinder.expressions3.getMonth()); 485b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount assertEquals(2, mBinder.expressions3.getDayOfMonth()); 486b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount mBinder.expressions3.updateDate(2003, 4, 17); 487b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount } 488b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount }); 489b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount 490b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount final long timeout = SystemClock.uptimeMillis() + 500; 491b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount while (mBindingObject.year.get() == 1972 && SystemClock.uptimeMillis() < timeout) { 492b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount Thread.sleep(1); 493b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount } 494b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount 495b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount runTestOnUiThread(new Runnable() { 496b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount @Override 497b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount public void run() { 498b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount assertEquals((Integer)2003, mBindingObject.list.get(1)); 499b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount assertEquals((Integer)4, mBindingObject.map.get("two")); 500b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount assertEquals(17, mBindingObject.array.get()[1]); 501b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount } 502b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount }); 503b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount } 504b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount 505b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount public void testExpressions4() throws Throwable { 506b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount makeVisible(mBinder.expressions4); 507b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount runTestOnUiThread(new Runnable() { 508b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount @Override 509b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount public void run() { 510b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount assertEquals(1972, mBindingObject.year.get()); 511b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount assertEquals(9, mBindingObject.month.get()); 512b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount assertEquals(21, mBindingObject.day.get()); 513b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount assertEquals(50, mBinder.expressions4.getYear()); 514b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount assertEquals(5, mBinder.expressions4.getMonth()); 515b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount assertEquals(21, mBinder.expressions4.getDayOfMonth()); 516b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount mBinder.expressions4.updateDate(49, 4, 17); 517b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount } 518b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount }); 519b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount 520b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount final long timeout = SystemClock.uptimeMillis() + 500; 521b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount while (mBindingObject.year.get() == 1972 && SystemClock.uptimeMillis() < timeout) { 522b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount Thread.sleep(1); 523b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount } 524b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount 525b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount runTestOnUiThread(new Runnable() { 526b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount @Override 527b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount public void run() { 528b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount assertEquals(2040, mBindingObject.year.get()); 529b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount assertEquals(6, mBindingObject.month.get()); 530b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount assertEquals(17, mBindingObject.day.get()); 531b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount } 532b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount }); 533b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount } 534b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount 535b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount public void testChaining() throws Throwable { 536b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount makeVisible(mBinder.checkBox, mBinder.checkBox2); 537b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount runTestOnUiThread(new Runnable() { 538b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount @Override 539b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount public void run() { 540b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount assertTrue(mBinder.checkBox2.isChecked()); 541b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount mBindingObject.checked.set(true); 542b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount mBinder.executePendingBindings(); 543b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount assertFalse(mBinder.checkBox2.isChecked()); 544b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount } 545b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount }); 546b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount } 547b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount 548b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount public void testTwoWayChaining() throws Throwable { 549b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount makeVisible(mBinder.checkBox3, mBinder.checkBox4); 550b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount runTestOnUiThread(new Runnable() { 551b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount @Override 552b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount public void run() { 553b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount assertFalse(mBinder.checkBox3.isChecked()); 554b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount assertTrue(mBinder.checkBox4.isChecked()); 555b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount mBinder.checkBox3.setChecked(true); 556b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount mBinder.executePendingBindings(); 557b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount assertTrue(mBinder.checkBox3.isChecked()); 558b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount assertFalse(mBinder.checkBox4.isChecked()); 559b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount } 560b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount }); 561b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount } 562b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount 563b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount public void testIncludedTwoWay1() throws Throwable { 564b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount makeVisible(mBinder.included.editText1, mBinder.textView); 565b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount runTestOnUiThread(new Runnable() { 566b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount @Override 567b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount public void run() { 568b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount assertEquals(null, mBindingObject.text.get()); 569b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount assertEquals("", mBinder.textView.getText().toString()); 570b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount assertEquals("", mBinder.included.editText1.getText().toString()); 571b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount mBinder.included.editText1.setText("Hello World"); 572b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount } 573b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount }); 574b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount 575b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount final long timeout = SystemClock.uptimeMillis() + 500; 576b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount while (mBindingObject.text.get().isEmpty() && SystemClock.uptimeMillis() < timeout) { 577b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount Thread.sleep(1); 578b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount } 579b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount 580b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount runTestOnUiThread(new Runnable() { 581b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount @Override 582b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount public void run() { 583b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount assertEquals("Hello World", mBinder.included.editText1.getText().toString()); 584b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount assertEquals("Hello World", mBinder.textView.getText().toString()); 585b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount assertEquals("Hello World", mBindingObject.text.get()); 586b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount } 587b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount }); 588b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount } 589b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount 590b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount public void testIncludedTwoWay2() throws Throwable { 591b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount makeVisible(mBinder.included.editText2, mBinder.textView); 592b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount runTestOnUiThread(new Runnable() { 593b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount @Override 594b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount public void run() { 595b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount assertEquals(null, mBindingObject.text.get()); 596b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount assertEquals("", mBinder.textView.getText().toString()); 597b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount assertEquals("", mBinder.included.editText2.getText().toString()); 598b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount mBinder.included.editText2.setText("Hello World"); 599b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount } 600b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount }); 601b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount 602b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount final long timeout = SystemClock.uptimeMillis() + 500; 603b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount while (mBindingObject.text.get().isEmpty() && SystemClock.uptimeMillis() < timeout) { 604b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount Thread.sleep(1); 605b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount } 606b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount 607b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount runTestOnUiThread(new Runnable() { 608b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount @Override 609b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount public void run() { 610b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount assertEquals("Hello World", mBinder.included.editText2.getText().toString()); 611b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount assertEquals("Hello World", mBinder.textView.getText().toString()); 612b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount assertEquals("Hello World", mBindingObject.text.get()); 613b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount } 614b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount }); 615b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount } 616b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount 617b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount public void testNoEditableLoop() throws Throwable { 618b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount makeVisible(mBinder.editText1, mBinder.editText2); 619b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount 620b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount final SpannableString text = new SpannableString("Hello World Also"); 621b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount BackgroundColorSpan highlight = new BackgroundColorSpan(0xFFFFFF80); 622b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount text.setSpan(highlight, 0, 5, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 623b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount 624b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount mBindingObject.textLatch = new CountDownLatch(2); 625b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount runTestOnUiThread(new Runnable() { 626b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount @Override 627b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount public void run() { 628b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount assertEquals("", mBinder.editText1.getText().toString()); 629b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount assertEquals(0, mBindingObject.text1Changes); 630b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount assertEquals(0, mBindingObject.text2Changes); 631b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount 632b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount // Change the text of one of the controls 633b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount mBinder.editText1.setText("Hello World"); 634b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount } 635b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount }); 636b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount 637b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount assertTrue(mBindingObject.textLatch.await(500, TimeUnit.MILLISECONDS)); 638b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount mBindingObject.textLatch = new CountDownLatch(2); 639b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount 640b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount runTestOnUiThread(new Runnable() { 641b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount @Override 642b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount public void run() { 643b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount assertNotNull(mBindingObject.editText.get()); 644b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount assertEquals("Hello World", mBindingObject.editText.get().toString()); 645b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount // They should both be set 646b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount assertEquals(1, mBindingObject.text1Changes); 647b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount assertEquals(1, mBindingObject.text2Changes); 648b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount 649b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount // Edit the span, but the text remains the same. 650b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount mBinder.editText2.setText(text); 651b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount } 652b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount }); 653b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount 654b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount assertTrue(mBindingObject.textLatch.await(500, TimeUnit.MILLISECONDS)); 655b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount mBindingObject.textLatch = new CountDownLatch(1); 656b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount 657b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount runTestOnUiThread(new Runnable() { 658b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount @Override 659b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount public void run() { 660b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount // The one control should notify a change, but not the other. 661b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount assertEquals(2, mBindingObject.text1Changes); 662b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount assertEquals(2, mBindingObject.text2Changes); 663b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount 664b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount // No more changes should occur 665b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount mBinder.executePendingBindings(); 666b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount } 667b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount }); 668b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount 669b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount assertFalse(mBindingObject.textLatch.await(200, TimeUnit.MILLISECONDS)); 670b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount mBindingObject.textLatch = new CountDownLatch(2); 671b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount 672b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount runTestOnUiThread(new Runnable() { 673b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount @Override 674b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount public void run() { 675b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount // Nothing changed: 676b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount assertEquals(2, mBindingObject.text1Changes); 677b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount assertEquals(2, mBindingObject.text2Changes); 678b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount 679b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount // Now try changing the value to the same thing. Because the 680b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount // value is Spannable, it will set it to the EditText 681b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount // and then get back a String in the onTextChanged. 682b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount mBindingObject.editText.set(text); 683b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount } 684b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount }); 685b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount 686b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount assertTrue(mBindingObject.textLatch.await(500, TimeUnit.MILLISECONDS)); 687b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount 688b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount runTestOnUiThread(new Runnable() { 689b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount @Override 690b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount public void run() { 691b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount assertEquals(3, mBindingObject.text1Changes); 692b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount assertEquals(3, mBindingObject.text2Changes); 693b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount assertEquals("Hello World Also", mBindingObject.editText.get()); 694b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount } 695b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount }); 696b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount } 697b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount 69811df39c91611b9ff2d7c87a9a9829251a015bccfGeorge Mount public void testStringConversions() throws Throwable { 69911df39c91611b9ff2d7c87a9a9829251a015bccfGeorge Mount makeVisible(mBinder.convertBool, mBinder.convertByte, mBinder.convertShort, 70011df39c91611b9ff2d7c87a9a9829251a015bccfGeorge Mount mBinder.convertInt, mBinder.convertLong, mBinder.convertFloat, 70111df39c91611b9ff2d7c87a9a9829251a015bccfGeorge Mount mBinder.convertDouble, mBinder.convertChar); 70211df39c91611b9ff2d7c87a9a9829251a015bccfGeorge Mount runTestOnUiThread(new Runnable() { 70311df39c91611b9ff2d7c87a9a9829251a015bccfGeorge Mount @Override 70411df39c91611b9ff2d7c87a9a9829251a015bccfGeorge Mount public void run() { 70511df39c91611b9ff2d7c87a9a9829251a015bccfGeorge Mount mBinder.convertBool.setText("True"); 70611df39c91611b9ff2d7c87a9a9829251a015bccfGeorge Mount mBinder.convertByte.setText("123"); 70711df39c91611b9ff2d7c87a9a9829251a015bccfGeorge Mount mBinder.convertShort.setText("1234"); 70811df39c91611b9ff2d7c87a9a9829251a015bccfGeorge Mount mBinder.convertInt.setText("12345"); 70911df39c91611b9ff2d7c87a9a9829251a015bccfGeorge Mount mBinder.convertLong.setText("123456"); 71011df39c91611b9ff2d7c87a9a9829251a015bccfGeorge Mount mBinder.convertFloat.setText("1.2345"); 71111df39c91611b9ff2d7c87a9a9829251a015bccfGeorge Mount mBinder.convertDouble.setText("1.23456"); 71211df39c91611b9ff2d7c87a9a9829251a015bccfGeorge Mount mBinder.convertChar.setText("a"); 71311df39c91611b9ff2d7c87a9a9829251a015bccfGeorge Mount } 71411df39c91611b9ff2d7c87a9a9829251a015bccfGeorge Mount }); 71511df39c91611b9ff2d7c87a9a9829251a015bccfGeorge Mount 71611df39c91611b9ff2d7c87a9a9829251a015bccfGeorge Mount final long timeout = SystemClock.uptimeMillis() + 500; 71711df39c91611b9ff2d7c87a9a9829251a015bccfGeorge Mount while (!mBindingObject.booleanField.get() && SystemClock.uptimeMillis() < timeout) { 71811df39c91611b9ff2d7c87a9a9829251a015bccfGeorge Mount Thread.sleep(1); 71911df39c91611b9ff2d7c87a9a9829251a015bccfGeorge Mount } 72011df39c91611b9ff2d7c87a9a9829251a015bccfGeorge Mount getInstrumentation().waitForIdleSync(); 72111df39c91611b9ff2d7c87a9a9829251a015bccfGeorge Mount assertTrue(mBindingObject.booleanField.get()); 72211df39c91611b9ff2d7c87a9a9829251a015bccfGeorge Mount assertEquals(123, mBindingObject.byteField.get()); 72311df39c91611b9ff2d7c87a9a9829251a015bccfGeorge Mount assertEquals(1234, mBindingObject.shortField.get()); 72411df39c91611b9ff2d7c87a9a9829251a015bccfGeorge Mount assertEquals(12345, mBindingObject.intField.get()); 72511df39c91611b9ff2d7c87a9a9829251a015bccfGeorge Mount assertEquals(123456, mBindingObject.longField.get()); 72611df39c91611b9ff2d7c87a9a9829251a015bccfGeorge Mount assertEquals(1.2345f, mBindingObject.floatField.get(), 0.0001f); 72711df39c91611b9ff2d7c87a9a9829251a015bccfGeorge Mount assertEquals(1.23456, mBindingObject.doubleField.get(), 0.000001); 72811df39c91611b9ff2d7c87a9a9829251a015bccfGeorge Mount assertEquals('a', mBindingObject.charField.get()); 72911df39c91611b9ff2d7c87a9a9829251a015bccfGeorge Mount } 73011df39c91611b9ff2d7c87a9a9829251a015bccfGeorge Mount 73111df39c91611b9ff2d7c87a9a9829251a015bccfGeorge Mount public void testBadStringConversions() throws Throwable { 73211df39c91611b9ff2d7c87a9a9829251a015bccfGeorge Mount makeVisible(mBinder.convertBool, mBinder.convertByte, mBinder.convertShort, 73311df39c91611b9ff2d7c87a9a9829251a015bccfGeorge Mount mBinder.convertInt, mBinder.convertLong, mBinder.convertFloat, 73411df39c91611b9ff2d7c87a9a9829251a015bccfGeorge Mount mBinder.convertDouble, mBinder.convertChar); 73511df39c91611b9ff2d7c87a9a9829251a015bccfGeorge Mount mBindingObject.booleanField.set(true); 73611df39c91611b9ff2d7c87a9a9829251a015bccfGeorge Mount mBindingObject.charField.set('1'); 73711df39c91611b9ff2d7c87a9a9829251a015bccfGeorge Mount mBindingObject.byteField.set((byte) 1); 73811df39c91611b9ff2d7c87a9a9829251a015bccfGeorge Mount mBindingObject.shortField.set((short) 12); 73911df39c91611b9ff2d7c87a9a9829251a015bccfGeorge Mount mBindingObject.intField.set(123); 74011df39c91611b9ff2d7c87a9a9829251a015bccfGeorge Mount mBindingObject.longField.set(1234); 74111df39c91611b9ff2d7c87a9a9829251a015bccfGeorge Mount mBindingObject.floatField.set(1.2345f); 74211df39c91611b9ff2d7c87a9a9829251a015bccfGeorge Mount mBindingObject.doubleField.set(1.23456); 74311df39c91611b9ff2d7c87a9a9829251a015bccfGeorge Mount runTestOnUiThread(new Runnable() { 74411df39c91611b9ff2d7c87a9a9829251a015bccfGeorge Mount @Override 74511df39c91611b9ff2d7c87a9a9829251a015bccfGeorge Mount public void run() { 74611df39c91611b9ff2d7c87a9a9829251a015bccfGeorge Mount mBinder.executePendingBindings(); 74711df39c91611b9ff2d7c87a9a9829251a015bccfGeorge Mount mBinder.convertBool.setText("foobar"); 74811df39c91611b9ff2d7c87a9a9829251a015bccfGeorge Mount mBinder.convertByte.setText("fred"); 74911df39c91611b9ff2d7c87a9a9829251a015bccfGeorge Mount mBinder.convertShort.setText("wilma"); 75011df39c91611b9ff2d7c87a9a9829251a015bccfGeorge Mount mBinder.convertInt.setText("barney"); 75111df39c91611b9ff2d7c87a9a9829251a015bccfGeorge Mount mBinder.convertLong.setText("betty"); 75211df39c91611b9ff2d7c87a9a9829251a015bccfGeorge Mount mBinder.convertFloat.setText("pebbles"); 75311df39c91611b9ff2d7c87a9a9829251a015bccfGeorge Mount mBinder.convertDouble.setText("bam-bam"); 75411df39c91611b9ff2d7c87a9a9829251a015bccfGeorge Mount mBinder.convertChar.setText(""); 75511df39c91611b9ff2d7c87a9a9829251a015bccfGeorge Mount } 75611df39c91611b9ff2d7c87a9a9829251a015bccfGeorge Mount }); 75711df39c91611b9ff2d7c87a9a9829251a015bccfGeorge Mount 75811df39c91611b9ff2d7c87a9a9829251a015bccfGeorge Mount final long timeout = SystemClock.uptimeMillis() + 500; 75911df39c91611b9ff2d7c87a9a9829251a015bccfGeorge Mount while (mBindingObject.booleanField.get() && SystemClock.uptimeMillis() < timeout) { 76011df39c91611b9ff2d7c87a9a9829251a015bccfGeorge Mount Thread.sleep(1); 76111df39c91611b9ff2d7c87a9a9829251a015bccfGeorge Mount } 76211df39c91611b9ff2d7c87a9a9829251a015bccfGeorge Mount getInstrumentation().waitForIdleSync(); 76311df39c91611b9ff2d7c87a9a9829251a015bccfGeorge Mount assertFalse(mBindingObject.booleanField.get()); 76411df39c91611b9ff2d7c87a9a9829251a015bccfGeorge Mount assertEquals(1, mBindingObject.byteField.get()); 76511df39c91611b9ff2d7c87a9a9829251a015bccfGeorge Mount assertEquals(12, mBindingObject.shortField.get()); 76611df39c91611b9ff2d7c87a9a9829251a015bccfGeorge Mount assertEquals(123, mBindingObject.intField.get()); 76711df39c91611b9ff2d7c87a9a9829251a015bccfGeorge Mount assertEquals(1234, mBindingObject.longField.get()); 76811df39c91611b9ff2d7c87a9a9829251a015bccfGeorge Mount assertEquals(1.2345f, mBindingObject.floatField.get(), 0.0001f); 76911df39c91611b9ff2d7c87a9a9829251a015bccfGeorge Mount assertEquals(1.23456, mBindingObject.doubleField.get(), 0.00001); 77011df39c91611b9ff2d7c87a9a9829251a015bccfGeorge Mount assertEquals('1', mBindingObject.charField.get()); 77111df39c91611b9ff2d7c87a9a9829251a015bccfGeorge Mount } 77211df39c91611b9ff2d7c87a9a9829251a015bccfGeorge Mount 773b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount private void makeVisible(final View... views) throws Throwable { 774b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount runTestOnUiThread(new Runnable() { 775b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount @Override 776b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount public void run() { 777b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount mBinder.calendarView.setVisibility(View.GONE); 778b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount mBinder.listView.setVisibility(View.GONE); 779b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount mBinder.checkBox.setVisibility(View.GONE); 780b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount mBinder.numberPicker.setVisibility(View.GONE); 781b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount mBinder.ratingBar.setVisibility(View.GONE); 782b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount mBinder.seekBar.setVisibility(View.GONE); 783b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount mBinder.tabhost.setVisibility(View.GONE); 784b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount mBinder.textView.setVisibility(View.GONE); 785b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount mBinder.timePicker.setVisibility(View.GONE); 786b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount mBinder.datePicker.setVisibility(View.GONE); 787b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount mBinder.expressions1.setVisibility(View.GONE); 788b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount mBinder.expressions2.setVisibility(View.GONE); 789b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount mBinder.expressions3.setVisibility(View.GONE); 790b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount mBinder.expressions4.setVisibility(View.GONE); 791b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount mBinder.checkBox2.setVisibility(View.GONE); 792b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount mBinder.checkBox3.setVisibility(View.GONE); 793b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount mBinder.checkBox4.setVisibility(View.GONE); 794b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount mBinder.editText1.setVisibility(View.GONE); 795b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount mBinder.editText2.setVisibility(View.GONE); 796b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount mBinder.included.editText1.setVisibility(View.GONE); 797b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount mBinder.included.editText2.setVisibility(View.GONE); 79811df39c91611b9ff2d7c87a9a9829251a015bccfGeorge Mount mBinder.convertBool.setVisibility(View.GONE); 79911df39c91611b9ff2d7c87a9a9829251a015bccfGeorge Mount mBinder.convertByte.setVisibility(View.GONE); 80011df39c91611b9ff2d7c87a9a9829251a015bccfGeorge Mount mBinder.convertShort.setVisibility(View.GONE); 80111df39c91611b9ff2d7c87a9a9829251a015bccfGeorge Mount mBinder.convertInt.setVisibility(View.GONE); 80211df39c91611b9ff2d7c87a9a9829251a015bccfGeorge Mount mBinder.convertLong.setVisibility(View.GONE); 80311df39c91611b9ff2d7c87a9a9829251a015bccfGeorge Mount mBinder.convertFloat.setVisibility(View.GONE); 80411df39c91611b9ff2d7c87a9a9829251a015bccfGeorge Mount mBinder.convertDouble.setVisibility(View.GONE); 80511df39c91611b9ff2d7c87a9a9829251a015bccfGeorge Mount mBinder.convertChar.setVisibility(View.GONE); 806b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount for (View view : views) { 807b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount view.setVisibility(View.VISIBLE); 808b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount } 809b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount } 810b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount }); 811b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount getInstrumentation().waitForIdleSync(); 812b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount } 813b7eeedbfadec03792551014e9dfa2bd384fc21a3George Mount} 814