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