1135e465360dc36f1b9602660e290825d1e1fd00eYorke Leepackage com.android.dialer.dialpad;
2135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee
3135e465360dc36f1b9602660e290825d1e1fd00eYorke Leeimport android.test.ActivityInstrumentationTestCase2;
4135e465360dc36f1b9602660e290825d1e1fd00eYorke Leeimport android.view.View;
5135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee
6135e465360dc36f1b9602660e290825d1e1fd00eYorke Leeimport com.android.dialer.DialtactsActivity;
7135e465360dc36f1b9602660e290825d1e1fd00eYorke Leeimport com.android.dialer.R;
8135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee
9135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee/**
10135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee * Tests that rely on instrumenting an actual instance of a {@link DialpadFragment}.
11135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee */
12135e465360dc36f1b9602660e290825d1e1fd00eYorke Leepublic class DialpadFragmentInstrumentationTest extends
13135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee        ActivityInstrumentationTestCase2<DialtactsActivity> {
14135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee    private DialtactsActivity mActivity;
15135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee
16135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee    public DialpadFragmentInstrumentationTest() {
17135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee        super(DialtactsActivity.class);
18135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee    }
19135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee
20135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee    @Override
21135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee    protected void setUp() throws Exception {
22135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee        super.setUp();
23135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee        mActivity = getActivity();
24135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee    }
25135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee
26135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee    /**
27135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee     * Simulates a long click event on the zero key with a prior onPressed callback.
28135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee     *
29135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee     */
30135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee    public void testManualLongClickZero_DeletesPreviousCharacter() {
31135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee        final DialpadFragment fragment = showDialpad();
32135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee        pressAndReleaseKey(9, fragment);
33135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee
34135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee        getInstrumentation().runOnMainSync(new Runnable() {
35135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee            @Override
36135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee            public void run() {
37135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee                final View zeroKey = findViewByDigit(0, fragment);
38135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee                fragment.onPressed(zeroKey, true);
39135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee                fragment.onLongClick(zeroKey);
40135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee            }
41135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee        });
42135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee
43135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee        assertEquals("9+", fragment.getDigitsWidget().getText().toString());
44135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee    }
45135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee
46135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee    /**
47135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee     * Simulates a long click event on the zero key without a prior onPressed
48135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee     * callback.
49135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee     */
50135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee    public void testSystemLongClickZero_PreservesPreviousCharacter() {
51135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee        final DialpadFragment fragment = showDialpad();
52135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee        pressAndReleaseKey(9, fragment);
53135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee
54135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee        getInstrumentation().runOnMainSync(new Runnable() {
55135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee            @Override
56135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee            public void run() {
57135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee                final View zeroKey = findViewByDigit(0, fragment);
58135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee                fragment.onLongClick(zeroKey);
59135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee            }
60135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee        });
61135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee
62135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee        assertEquals("9+", fragment.getDigitsWidget().getText().toString());
63135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee    }
64135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee
65135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee    private DialpadFragment showDialpad() {
66135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee        getInstrumentation().runOnMainSync(new Runnable() {
67135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee            @Override
68135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee            public void run() {
69135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee                mActivity.showDialpad();
70135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee            }
71135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee        });
72135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee        getInstrumentation().waitForIdleSync();
73135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee        return (DialpadFragment) mActivity.getFragmentManager().findFragmentByTag(
74135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee                DialtactsActivity.TAG_DIALPAD_FRAGMENT);
75135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee    }
76135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee
77135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee    private void pressAndReleaseKey(int digit, final DialpadFragment fragment) {
78135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee        final View dialpadKey = findViewByDigit(digit, fragment);
79135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee        final String digitsBefore = fragment.getDigitsWidget().getText().toString();
80135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee        getInstrumentation().runOnMainSync(new Runnable() {
81135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee            @Override
82135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee            public void run() {
83135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee                fragment.onPressed(dialpadKey, true);
84135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee                fragment.onPressed(dialpadKey, false);
85135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee            }
86135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee        });
87135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee        assertEquals(digitsBefore + String.valueOf(digit),
88135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee                fragment.getDigitsWidget().getText().toString());
89135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee    }
90135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee
91135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee    private View findViewByDigit(int digit, DialpadFragment fragment) {
92135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee        return fragment.getView().findViewById(getViewIdByDigit(digit));
93135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee    }
94135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee
95135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee    private int getViewIdByDigit(int digit) {
96135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee        switch (digit) {
97135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee            case 0:
98135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee                return R.id.zero;
99135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee            case 1:
100135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee                return R.id.one;
101135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee            case 2:
102135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee                return R.id.two;
103135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee            case 3:
104135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee                return R.id.three;
105135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee            case 4:
106135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee                return R.id.four;
107135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee            case 5:
108135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee                return R.id.five;
109135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee            case 6:
110135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee                return R.id.six;
111135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee            case 7:
112135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee                return R.id.seven;
113135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee            case 8:
114135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee                return R.id.eight;
115135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee            case 9:
116135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee                return R.id.nine;
117135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee            default:
118135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee                return 0;
119135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee        }
120135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee    }
121135e465360dc36f1b9602660e290825d1e1fd00eYorke Lee}
122