1b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project/** 2b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project * Copyright (c) 2008, Google Inc. 3b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project * 4b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 5b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project * you may not use this file except in compliance with the License. 6b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project * You may obtain a copy of the License at 7b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project * 8b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 9b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project * 10b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 11b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 12b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project * See the License for the specific language governing permissions and 14b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project * limitations under the License. 15b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project */ 16b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project 17b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Projectpackage com.android.calculator2; 18b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project 19b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Projectimport android.app.Activity; 20b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Projectimport android.app.Instrumentation; 21b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Projectimport android.app.Instrumentation.ActivityMonitor; 22b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Projectimport android.content.Intent; 23b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Projectimport android.content.IntentFilter; 24b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Projectimport android.test.ActivityInstrumentationTestCase; 25b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Projectimport android.test.suitebuilder.annotation.LargeTest; 26b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Projectimport android.util.Log; 27b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Projectimport android.view.KeyEvent; 28b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Projectimport android.view.View; 29b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Projectimport android.widget.EditText; 30b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Projectimport android.widget.Button; 31b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Projectimport android.widget.LinearLayout; 32b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Projectimport android.graphics.Rect; 33b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Projectimport android.test.TouchUtils; 34b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project 35b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Projectimport com.android.calculator2.Calculator; 36b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Projectimport com.android.calculator2.R; 37b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Projectimport com.android.calculator2.CalculatorDisplay; 38b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project 39b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project/** 40b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project * Instrumentation tests for poking some buttons 41b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project * 42b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project */ 43b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project 44b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Projectpublic class CalculatorHitSomeButtons extends ActivityInstrumentationTestCase <Calculator>{ 45b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project public boolean setup = false; 46b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project private static final String TAG = "CalculatorTests"; 47b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project Calculator mActivity = null; 48b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project Instrumentation mInst = null; 49b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project 50b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project public CalculatorHitSomeButtons() { 51b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project super("com.android.calculator2", Calculator.class); 52b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project } 53b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project 54b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project @Override 55b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project protected void setUp() throws Exception { 56b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project super.setUp(); 57b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project 58b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project mActivity = getActivity(); 59b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project mInst = getInstrumentation(); 60b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project } 61b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project 62b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project @Override 63b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project protected void tearDown() throws Exception { 64b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project super.tearDown(); 65b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project } 66b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project 67b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project @LargeTest 68b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project public void testPressSomeKeys() { 69b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project Log.v(TAG, "Pressing some keys!"); 70b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project 71b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project // Make sure that we clear the output 72b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project press(KeyEvent.KEYCODE_ENTER); 73b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project press(KeyEvent.KEYCODE_CLEAR); 74b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project 75b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project // 3 + 4 * 5 => 23 76b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project press(KeyEvent.KEYCODE_3); 77b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project press(KeyEvent.KEYCODE_PLUS); 78b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project press(KeyEvent.KEYCODE_4); 79b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project press(KeyEvent.KEYCODE_9 | KeyEvent.META_SHIFT_ON); 80b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project press(KeyEvent.KEYCODE_5); 81b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project press(KeyEvent.KEYCODE_ENTER); 82b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project 83b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project assertEquals(displayVal(), "23"); 84b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project } 85b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project 86b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project @LargeTest 87b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project public void testTapSomeButtons() { 88b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project Log.v(TAG, "Tapping some buttons!"); 89b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project 90b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project // Make sure that we clear the output 91b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project tap(R.id.equal); 92b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project tap(R.id.del); 93b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project 94b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project // 567 / 3 => 189 95b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project tap(R.id.digit5); 96b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project tap(R.id.digit6); 97b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project tap(R.id.digit7); 98b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project tap(R.id.div); 99b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project tap(R.id.digit3); 100b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project tap(R.id.equal); 101b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project 102b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project assertEquals(displayVal(), "189"); 103b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project 104b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project // make sure we can continue calculations also 105b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project // 189 - 789 => -600 106b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project tap(R.id.minus); 107b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project tap(R.id.digit7); 108b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project tap(R.id.digit8); 109b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project tap(R.id.digit9); 110b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project tap(R.id.equal); 111b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project 112b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project // Careful: the first digit in the expected value is \u2212, not "-" (a hyphen) 113b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project assertEquals(displayVal(), mActivity.getString(R.string.minus) + "600"); 114b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project } 115b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project 116b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project // helper functions 117b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project private void press(int keycode) { 118b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project mInst.sendKeyDownUpSync(keycode); 119b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project } 120b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project 121b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project private boolean tap(int id) { 122b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project View view = mActivity.findViewById(id); 123b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project if(view != null) { 124b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project TouchUtils.clickView(this, view); 125b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project return true; 126b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project } 127b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project return false; 128b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project } 129b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project 130b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project private String displayVal() { 131b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project CalculatorDisplay display = (CalculatorDisplay) mActivity.findViewById(R.id.display); 132b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project assertNotNull(display); 133b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project 134b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project EditText box = (EditText) display.getCurrentView(); 135b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project assertNotNull(box); 136b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project 137b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project return box.getText().toString(); 138b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project } 139b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project} 140b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project 141