/** * Copyright (c) 2008, Google Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.calculator2; import android.app.Activity; import android.app.Instrumentation; import android.app.Instrumentation.ActivityMonitor; import android.content.Intent; import android.content.IntentFilter; import android.test.ActivityInstrumentationTestCase; import android.test.suitebuilder.annotation.LargeTest; import android.util.Log; import android.view.KeyEvent; import android.view.View; import android.widget.EditText; import android.widget.Button; import android.widget.LinearLayout; import android.graphics.Rect; import android.test.TouchUtils; import com.android.calculator2.Calculator; import com.android.calculator2.R; import com.android.calculator2.CalculatorDisplay; /** * Instrumentation tests for poking some buttons * */ public class CalculatorHitSomeButtons extends ActivityInstrumentationTestCase <Calculator>{ public boolean setup = false; private static final String TAG = "CalculatorTests"; Calculator mActivity = null; Instrumentation mInst = null; public CalculatorHitSomeButtons() { super("com.android.calculator2", Calculator.class); } @Override protected void setUp() throws Exception { super.setUp(); mActivity = getActivity(); mInst = getInstrumentation(); } @Override protected void tearDown() throws Exception { super.tearDown(); } @LargeTest public void testPressSomeKeys() { Log.v(TAG, "Pressing some keys!"); // Make sure that we clear the output press(KeyEvent.KEYCODE_ENTER); press(KeyEvent.KEYCODE_CLEAR); // 3 + 4 * 5 => 23 press(KeyEvent.KEYCODE_3); press(KeyEvent.KEYCODE_PLUS); press(KeyEvent.KEYCODE_4); press(KeyEvent.KEYCODE_9 | KeyEvent.META_SHIFT_ON); press(KeyEvent.KEYCODE_5); press(KeyEvent.KEYCODE_ENTER); assertEquals(displayVal(), "23"); } @LargeTest public void testTapSomeButtons() { Log.v(TAG, "Tapping some buttons!"); // Make sure that we clear the output tap(R.id.equal); tap(R.id.del); // 567 / 3 => 189 tap(R.id.digit5); tap(R.id.digit6); tap(R.id.digit7); tap(R.id.div); tap(R.id.digit3); tap(R.id.equal); assertEquals(displayVal(), "189"); // make sure we can continue calculations also // 189 - 789 => -600 tap(R.id.minus); tap(R.id.digit7); tap(R.id.digit8); tap(R.id.digit9); tap(R.id.equal); // Careful: the first digit in the expected value is \u2212, not "-" (a hyphen) assertEquals(displayVal(), mActivity.getString(R.string.minus) + "600"); } // helper functions private void press(int keycode) { mInst.sendKeyDownUpSync(keycode); } private boolean tap(int id) { View view = mActivity.findViewById(id); if(view != null) { TouchUtils.clickView(this, view); return true; } return false; } private String displayVal() { CalculatorDisplay display = (CalculatorDisplay) mActivity.findViewById(R.id.display); assertNotNull(display); EditText box = (EditText) display.getCurrentView(); assertNotNull(box); return box.getText().toString(); } }