1f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau/*
2f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau * Copyright (C) 2010 The Android Open Source Project
3f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau *
4f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau * Licensed under the Apache License, Version 2.0 (the "License");
5f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau * you may not use this file except in compliance with the License.
6f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau * You may obtain a copy of the License at
7f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau *
8f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau *      http://www.apache.org/licenses/LICENSE-2.0
9f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau *
10f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau * Unless required by applicable law or agreed to in writing, software
11f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau * distributed under the License is distributed on an "AS IS" BASIS,
12f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau * See the License for the specific language governing permissions and
14f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau * limitations under the License.
15f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau */
16f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau
17f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Laupackage com.android.camera.stress;
18f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau
19f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lauimport com.android.camera.Camera;
20f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lauimport com.android.camera.VideoCamera;
21f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lauimport com.android.camera.stress.TestUtil;
22f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau
23f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lauimport android.app.Activity;
24f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lauimport android.app.Instrumentation;
25f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lauimport android.content.Intent;
26f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lauimport android.test.ActivityInstrumentationTestCase2;
27f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lauimport android.test.suitebuilder.annotation.LargeTest;
28f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lauimport android.util.Log;
29f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lauimport android.view.KeyEvent;
30f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau
31f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lauimport com.android.camera.stress.ImageCapture;
32f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lauimport com.android.camera.stress.CameraStressTestRunner;
33f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau/**
34f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau * Junit / Instrumentation test case for camera test
35f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau *
36f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau * Running the test suite:
37f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau *
38f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau * adb shell am instrument \
39f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau *    -e class com.android.camera.stress.VideoCapture \
40f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau *    -w com.google.android.camera.tests/android.test.InstrumentationTestRunner
41f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau *
42f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau */
43f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau
44f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Laupublic class VideoCapture extends ActivityInstrumentationTestCase2 <VideoCamera> {
45f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau    private String TAG = "VideoCapture";
46f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau    private static final long WAIT_FOR_PREVIEW = 1500; //1.5 seconds
47f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau    private static final long WAIT_FOR_SWITCH_CAMERA = 3000; //2 seconds
48f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau
49f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau    // Private intent extras which control the camera facing.
50f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau    private final static String EXTRAS_CAMERA_FACING =
51f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau        "android.intent.extras.CAMERA_FACING";
52f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau
53f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau    private TestUtil testUtil = new TestUtil();
54f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau
55f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau    public VideoCapture() {
56f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau        super(VideoCamera.class);
57f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau    }
58f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau
59f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau    @Override
60f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau    protected void setUp() throws Exception {
61f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau        testUtil.prepareOutputFile();
62f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau        super.setUp();
63f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau    }
64f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau
65f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau    @Override
66f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau    protected void tearDown() throws Exception {
67f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau        testUtil.closeOutputFile();
68f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau        super.tearDown();
69f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau    }
70f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau
71f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau    @LargeTest
72f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau    public void captureVideos(String reportTag, Instrumentation inst) throws Exception{
73f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau        boolean memoryResult = false;
74f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau        int total_num_of_videos = CameraStressTestRunner.mVideoIterations;
75f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau        int video_duration = CameraStressTestRunner.mVideoDuration;
76f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau        testUtil.writeReportHeader(reportTag, total_num_of_videos);
77f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau
78f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau        for (int i = 0; i < total_num_of_videos; i++) {
79f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau            Thread.sleep(WAIT_FOR_PREVIEW);
80f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau            // record a video
81f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau            inst.sendCharacterSync(KeyEvent.KEYCODE_CAMERA);
82f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau            Thread.sleep(video_duration);
83f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau            inst.sendCharacterSync(KeyEvent.KEYCODE_CAMERA);
84f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau            testUtil.writeResult(i);
85f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau        }
86f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau    }
87f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau
88f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau    @LargeTest
89f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau    public void testBackVideoCapture() throws Exception {
90f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau        Instrumentation inst = getInstrumentation();
91f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau        Intent intent = new Intent();
92f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau
93f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau        intent.setClass(getInstrumentation().getTargetContext(), VideoCamera.class);
94f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
95f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau        intent.putExtra(EXTRAS_CAMERA_FACING,
96f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau                android.hardware.Camera.CameraInfo.CAMERA_FACING_BACK);
97f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau        Activity act = inst.startActivitySync(intent);
98f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau        Thread.sleep(WAIT_FOR_SWITCH_CAMERA);
99f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau        captureVideos("Back Camera Video Capture\n", inst);
100f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau        act.finish();
101f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau    }
102f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau
103f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau    @LargeTest
104f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau    public void testFrontVideoCapture() throws Exception {
105f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau        Instrumentation inst = getInstrumentation();
106f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau        Intent intent = new Intent();
107f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau
108f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau        intent.setClass(getInstrumentation().getTargetContext(), VideoCamera.class);
109f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
110f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau        intent.putExtra(EXTRAS_CAMERA_FACING,
111f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau                android.hardware.Camera.CameraInfo.CAMERA_FACING_FRONT);
112f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau        Activity act = inst.startActivitySync(intent);
113f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau        Thread.sleep(WAIT_FOR_SWITCH_CAMERA);
114f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau        captureVideos("Front Camera Video Capture\n", inst);
115f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau        act.finish();
116f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau    }
117f6069b16aea54fa33976c1ee4bf8654fd4518fc6Yu Shan Emily Lau}
118