1b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project/* 2b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project * Copyright (C) 2009 The Android Open Source Project 3b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project * 4b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 5b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project * you may not use this file except in compliance with the License. 6b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project * You may obtain a copy of the License at 7b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project * 8b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 9b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project * 10b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 11b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 12b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project * See the License for the specific language governing permissions and 14b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project * limitations under the License. 15b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project */ 16b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project 177a98363ea167e59a335fe4c832ceee3562bb2c59Owen Linpackage com.android.camera.stress; 187a98363ea167e59a335fe4c832ceee3562bb2c59Owen Lin 197a98363ea167e59a335fe4c832ceee3562bb2c59Owen Linimport com.android.camera.Camera; 20559f5cf9f42c4983eaef9e6e55ff3ba7c406426aWu-cheng Liimport com.android.camera.VideoCamera; 21f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lauimport com.android.camera.stress.CameraStressTestRunner; 22b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project 23b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Projectimport android.app.Instrumentation; 243e2d95456def6a6d6e716af77e4708a15747d2edRay Chenimport android.content.Intent; 25b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Projectimport android.test.ActivityInstrumentationTestCase2; 267a98363ea167e59a335fe4c832ceee3562bb2c59Owen Linimport android.test.suitebuilder.annotation.LargeTest; 27b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Projectimport android.util.Log; 28b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Projectimport android.view.KeyEvent; 29f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lauimport android.app.Activity; 303e2d95456def6a6d6e716af77e4708a15747d2edRay Chen 31b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project/** 32b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project * Junit / Instrumentation test case for camera test 337a98363ea167e59a335fe4c832ceee3562bb2c59Owen Lin * 34a2eceabc9ef5dc61f99518d998f09379baed4abcYu Shan Emily Lau * Running the test suite: 35a2eceabc9ef5dc61f99518d998f09379baed4abcYu Shan Emily Lau * 36a2eceabc9ef5dc61f99518d998f09379baed4abcYu Shan Emily Lau * adb shell am instrument \ 37a2eceabc9ef5dc61f99518d998f09379baed4abcYu Shan Emily Lau * -e class com.android.camera.stress.ImageCapture \ 38f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau * -w com.google.android.camera.tests/android.test.InstrumentationTestRunner 39a2eceabc9ef5dc61f99518d998f09379baed4abcYu Shan Emily Lau * 40b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project */ 41b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project 42b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Projectpublic class ImageCapture extends ActivityInstrumentationTestCase2 <Camera> { 43b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project private String TAG = "ImageCapture"; 44b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project private static final int TOTAL_NUMBER_OF_IMAGECAPTURE = 100; 45cede87fa23b81b49786831e90a175293e9c8bc7cYu Shan Emily Lau private static final long WAIT_FOR_IMAGE_CAPTURE_TO_BE_TAKEN = 1500; //1.5 sedconds 46f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau private static final long WAIT_FOR_SWITCH_CAMERA = 3000; //3 seconds 47cede87fa23b81b49786831e90a175293e9c8bc7cYu Shan Emily Lau 48f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau private TestUtil testUtil = new TestUtil(); 49cede87fa23b81b49786831e90a175293e9c8bc7cYu Shan Emily Lau 50f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau // Private intent extras. 51f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau private final static String EXTRAS_CAMERA_FACING = 52f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau "android.intent.extras.CAMERA_FACING"; 53487f28c139588b69963eb6374228e7e8cf346ca3Yu Shan Emily Lau 54b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project public ImageCapture() { 55559f5cf9f42c4983eaef9e6e55ff3ba7c406426aWu-cheng Li super(Camera.class); 56b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project } 577a98363ea167e59a335fe4c832ceee3562bb2c59Owen Lin 587a98363ea167e59a335fe4c832ceee3562bb2c59Owen Lin @Override 597a98363ea167e59a335fe4c832ceee3562bb2c59Owen Lin protected void setUp() throws Exception { 60f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau testUtil.prepareOutputFile(); 617a98363ea167e59a335fe4c832ceee3562bb2c59Owen Lin super.setUp(); 62b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project } 637a98363ea167e59a335fe4c832ceee3562bb2c59Owen Lin 647a98363ea167e59a335fe4c832ceee3562bb2c59Owen Lin @Override 657a98363ea167e59a335fe4c832ceee3562bb2c59Owen Lin protected void tearDown() throws Exception { 66f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau testUtil.closeOutputFile(); 677a98363ea167e59a335fe4c832ceee3562bb2c59Owen Lin super.tearDown(); 68b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project } 697a98363ea167e59a335fe4c832ceee3562bb2c59Owen Lin 70f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau public void captureImages(String reportTag, Instrumentation inst) { 71e4b210af3f11ecb3e1556a2edc95bc06119bcecbYu Shan Emily Lau int total_num_of_images = CameraStressTestRunner.mImageIterations; 72f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau Log.v(TAG, "no of images = " + total_num_of_images); 73e4b210af3f11ecb3e1556a2edc95bc06119bcecbYu Shan Emily Lau 74487f28c139588b69963eb6374228e7e8cf346ca3Yu Shan Emily Lau //TODO(yslau): Need to integrate the outoput with the central dashboard, 75487f28c139588b69963eb6374228e7e8cf346ca3Yu Shan Emily Lau //write to a txt file as a temp solution 76cede87fa23b81b49786831e90a175293e9c8bc7cYu Shan Emily Lau boolean memoryResult = false; 77f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau KeyEvent focusEvent = new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_FOCUS); 78487f28c139588b69963eb6374228e7e8cf346ca3Yu Shan Emily Lau 79b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project try { 80f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau testUtil.writeReportHeader(reportTag, total_num_of_images); 81e4b210af3f11ecb3e1556a2edc95bc06119bcecbYu Shan Emily Lau for (int i = 0; i < total_num_of_images; i++) { 82b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project Thread.sleep(WAIT_FOR_IMAGE_CAPTURE_TO_BE_TAKEN); 83f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau inst.sendKeySync(focusEvent); 84f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau inst.sendCharacterSync(KeyEvent.KEYCODE_CAMERA); 85b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project Thread.sleep(WAIT_FOR_IMAGE_CAPTURE_TO_BE_TAKEN); 86f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau testUtil.writeResult(i); 87b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project } 88b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project } catch (Exception e) { 89f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau Log.v(TAG, "Got exception: " + e.toString()); 90487f28c139588b69963eb6374228e7e8cf346ca3Yu Shan Emily Lau assertTrue("testImageCapture", false); 91b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project } 92b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project } 937a98363ea167e59a335fe4c832ceee3562bb2c59Owen Lin 94b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project @LargeTest 95f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau public void testBackImageCapture() throws Exception { 96b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project Instrumentation inst = getInstrumentation(); 97f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau Intent intent = new Intent(); 98f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau 99f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau intent.setClass(getInstrumentation().getTargetContext(), Camera.class); 100f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 101f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau intent.putExtra(EXTRAS_CAMERA_FACING, 102f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau android.hardware.Camera.CameraInfo.CAMERA_FACING_BACK); 103f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau Activity act = inst.startActivitySync(intent); 104f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau Thread.sleep(WAIT_FOR_SWITCH_CAMERA); 105f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau captureImages("Back Camera Image Capture\n", inst); 106f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau act.finish(); 107b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project } 108b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project 109f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau @LargeTest 110f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau public void testFrontImageCapture() throws Exception { 111f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau Instrumentation inst = getInstrumentation(); 112f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau Intent intent = new Intent(); 113f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau 114f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau intent.setClass(getInstrumentation().getTargetContext(), Camera.class); 115f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 116f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau intent.putExtra(EXTRAS_CAMERA_FACING, 117f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau android.hardware.Camera.CameraInfo.CAMERA_FACING_FRONT); 118f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau Activity act = inst.startActivitySync(intent); 119f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau Thread.sleep(WAIT_FOR_SWITCH_CAMERA); 120f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau captureImages("Front Camera Image Capture\n", inst); 121f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau act.finish(); 122f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau } 123b64d345c9d51cabce43b5191532a0c185d2a70a5The Android Open Source Project} 124