package com.android.dialer.dialpad; import android.test.ActivityInstrumentationTestCase2; import android.view.View; import com.android.dialer.DialtactsActivity; import com.android.dialer.R; /** * Tests that rely on instrumenting an actual instance of a {@link DialpadFragment}. */ public class DialpadFragmentInstrumentationTest extends ActivityInstrumentationTestCase2 { private DialtactsActivity mActivity; public DialpadFragmentInstrumentationTest() { super(DialtactsActivity.class); } @Override protected void setUp() throws Exception { super.setUp(); mActivity = getActivity(); } /** * Simulates a long click event on the zero key with a prior onPressed callback. * */ public void testManualLongClickZero_DeletesPreviousCharacter() { final DialpadFragment fragment = showDialpad(); pressAndReleaseKey(9, fragment); getInstrumentation().runOnMainSync(new Runnable() { @Override public void run() { final View zeroKey = findViewByDigit(0, fragment); fragment.onPressed(zeroKey, true); fragment.onLongClick(zeroKey); } }); assertEquals("9+", fragment.getDigitsWidget().getText().toString()); } /** * Simulates a long click event on the zero key without a prior onPressed * callback. */ public void testSystemLongClickZero_PreservesPreviousCharacter() { final DialpadFragment fragment = showDialpad(); pressAndReleaseKey(9, fragment); getInstrumentation().runOnMainSync(new Runnable() { @Override public void run() { final View zeroKey = findViewByDigit(0, fragment); fragment.onLongClick(zeroKey); } }); assertEquals("9+", fragment.getDigitsWidget().getText().toString()); } private DialpadFragment showDialpad() { getInstrumentation().runOnMainSync(new Runnable() { @Override public void run() { mActivity.showDialpad(); } }); getInstrumentation().waitForIdleSync(); return (DialpadFragment) mActivity.getFragmentManager().findFragmentByTag( DialtactsActivity.TAG_DIALPAD_FRAGMENT); } private void pressAndReleaseKey(int digit, final DialpadFragment fragment) { final View dialpadKey = findViewByDigit(digit, fragment); final String digitsBefore = fragment.getDigitsWidget().getText().toString(); getInstrumentation().runOnMainSync(new Runnable() { @Override public void run() { fragment.onPressed(dialpadKey, true); fragment.onPressed(dialpadKey, false); } }); assertEquals(digitsBefore + String.valueOf(digit), fragment.getDigitsWidget().getText().toString()); } private View findViewByDigit(int digit, DialpadFragment fragment) { return fragment.getView().findViewById(getViewIdByDigit(digit)); } private int getViewIdByDigit(int digit) { switch (digit) { case 0: return R.id.zero; case 1: return R.id.one; case 2: return R.id.two; case 3: return R.id.three; case 4: return R.id.four; case 5: return R.id.five; case 6: return R.id.six; case 7: return R.id.seven; case 8: return R.id.eight; case 9: return R.id.nine; default: return 0; } } }