tizen beta release
[framework/web/webkit-efl.git] / Source / WebKit / efl / tests / src / EwkWacCameraTests.cpp
1 #include <gtest/gtest.h>
2 #include <EWebKit.h>
3 #include <EFLTestLauncher.h>
4
5 #include <Ecore.h>
6 #include <Eina.h>
7
8 #include <stdio.h>
9 #include <string.h>
10
11 using namespace EFLUnitTests;
12
13 static char* getDummyLocalFileUrl()
14 {
15     const char htmlFilePath[] = "/mnt/ums/Downloads/Others/unittest.html";
16     const char htmlFileData[] = "<html><body><p>UNIT TESTS : WAC CAMERA</p></body></html>";
17
18     static char* fileUrl = 0;
19
20     FILE* fp = 0;
21
22     fp = fopen(htmlFilePath, "r");
23     if (!fp) {
24         fp = fopen(htmlFilePath, "w");
25         fwrite(htmlFileData, 1, strlen(htmlFileData), fp);
26     }
27     fclose(fp);
28
29     if (!fileUrl) {
30         int length = strlen(htmlFilePath) + strlen("file://") + 1;
31         fileUrl = (char*)malloc(length);
32         memset(fileUrl, 0x00, length);
33         snprintf(fileUrl, length, "file://%s", htmlFilePath);
34     }
35     return fileUrl;
36 }
37 /*
38  * Test : ewk_view_camera_get_cameras
39  */
40
41 static void onEwkCameraGetCameras(void* data, Evas_Object* webView, void* eventInfo)
42 {
43     CameraArray cameraArray;
44     memset(&cameraArray, 0x00, sizeof(CameraArray));
45     if (ewk_view_camera_get_cameras(&cameraArray)) {
46         if (cameraArray.camera[0])
47             ewk_view_camera_remove_camera(cameraArray.camera[0]);
48         if (cameraArray.camera[1])
49             ewk_view_camera_remove_camera(cameraArray.camera[1]);
50         EXPECT_EQ(cameraArray.length, 2);
51     } else
52         EXPECT_TRUE(false);
53
54     END_TEST();
55 }
56
57 TEST(DISABLED_EwkWacCameraTests, EwkWacCameraGetCamerasTest)
58 {
59     fprintf(stderr, "##### TEST : Get Cameras\n");
60     RUN_TEST(getDummyLocalFileUrl(), onEwkCameraGetCameras, "load,finished", 0);
61 }
62
63 /*
64  * Test : ewk_view_camera_create_preview_node
65  */
66
67 static void EwkWacCameraPreviewCb(JSValueRef element, void* userParam)
68 {
69     if (userParam)
70         ewk_view_camera_remove_camera((Camera_Object)userParam);
71
72     EXPECT_TRUE(true);
73     END_TEST();
74 }
75
76 static void EwkWacCameraErrorCb(int errorcode, void* userParam)
77 {
78     if (userParam)
79         ewk_view_camera_remove_camera((Camera_Object)userParam);
80
81     EXPECT_TRUE(false);
82     END_TEST();
83 }
84
85 static void onEwkWacCameraPreviewTest(void* data, Evas_Object* webView, void* eventInfo)
86 {
87     CameraArray cameraArray;
88     memset(&cameraArray, 0x00, sizeof(CameraArray));
89     fprintf(stderr, "##### 1. ewk_view_camera_get_cameras\n");
90     if (ewk_view_camera_get_cameras(&cameraArray)) {
91         if (cameraArray.camera[1])
92             ewk_view_camera_remove_camera(cameraArray.camera[1]);
93         fprintf(stderr, "##### 2. ewk_view_camera_create_preview_node\n");
94         ewk_view_camera_create_preview_node(cameraArray.camera[0], webView,
95                                             EwkWacCameraPreviewCb, EwkWacCameraErrorCb, cameraArray.camera[0]);
96     } else {
97         EXPECT_EQ(true, false);
98         END_TEST();
99     }
100 }
101
102 TEST(DISABLED_EwkWacCameraTests, EwkWacCameraPreviewTest)
103 {
104     fprintf(stderr, "##### TEST : Create Preview Node\n");
105     RUN_TEST(getDummyLocalFileUrl(), onEwkWacCameraPreviewTest, "load,finished", 0);
106 }
107
108 static void EwkWacCameraImageSuccessCb(const char* filename, void* userParam)
109 {
110     if (userParam)
111         ewk_view_camera_remove_camera((Camera_Object)userParam);
112
113     fprintf(stderr, "##### filename : [%s]\n", filename);
114
115     FILE* fp = 0;
116     fp = fopen(filename, "r");
117
118     EXPECT_NE(fp, (void*)0);
119
120     if (fp)
121         fclose(fp);
122     else
123         fprintf(stderr, "##### Error : the file is not exist\n", filename);
124
125     END_TEST();
126 }
127
128 /*
129  * Test : ewk_view_camera_capture_image
130  */
131
132 static void onEwkWacCameraCaptureImageTest(void* data, Evas_Object* webView, void* eventInfo)
133 {
134     CameraArray cameraArray;
135     memset(&cameraArray, 0x00, sizeof(CameraArray));
136     fprintf(stderr, "##### 1. ewk_view_camera_get_cameras\n");
137     if (ewk_view_camera_get_cameras(&cameraArray)) {
138         fprintf(stderr, "##### 2. ewk_view_camera_capture_image\n");
139         ewk_view_camera_capture_image(cameraArray.camera[0], "/mnt/ums/Downloads/Others/wac_camera_result.jpg", false,
140                                       EwkWacCameraImageSuccessCb, EwkWacCameraErrorCb, cameraArray.camera[0]);
141         if (cameraArray.camera[1])
142             ewk_view_camera_remove_camera(cameraArray.camera[1]);
143     } else {
144         EXPECT_EQ(true, false);
145         END_TEST();
146     }
147 }
148
149
150 TEST(DISABLED_EwkWacCameraTests, EwkWacCameraCaptureImageTest)
151 {
152     fprintf(stderr, "##### TEST : Capture Image\n");
153     RUN_TEST(getDummyLocalFileUrl(), onEwkWacCameraCaptureImageTest, "load,finished", 0);
154 }
155
156 /*
157  * Test : ewk_view_camera_start_video_capture, ewk_view_camera_stop_video_capture
158  */
159
160 static Ecore_Timer* gRecordingVideoTimer = 0;
161 static const int gRecordingLimitedTime = 5;
162
163 static Eina_Bool recordingVideoTimerCallback(void *data)
164 {
165     static int recordingTime = 0;
166
167     recordingTime++;
168
169     fprintf(stderr, "##### Recording ...\n");
170
171     if (recordingTime > gRecordingLimitedTime) {
172         fprintf(stderr, "##### 3. ewk_view_camera_stop_video_capture\n");
173         ewk_view_camera_stop_video_capture((Camera_Object)data);
174         gRecordingVideoTimer = 0;
175         return EINA_FALSE;
176     }
177
178     return EINA_TRUE;
179 }
180
181
182 static void EwkWacCameraVideoSuccessCb(const char* filename, void* userParam)
183 {
184     if (gRecordingVideoTimer > 0) {
185         ecore_timer_del(gRecordingVideoTimer);
186         gRecordingVideoTimer = 0;
187     }
188
189     if (userParam)
190         ewk_view_camera_remove_camera((Camera_Object)userParam);
191
192     fprintf(stderr, "##### filename : [%s]\n", filename);
193
194     FILE* fp = 0;
195     fp = fopen(filename, "r");
196
197     EXPECT_NE(fp, (void*)0);
198
199     if (fp)
200         fclose(fp);
201     else
202         fprintf(stderr, "##### Error : the file is not exist\n", filename);
203
204     END_TEST();
205 }
206
207 static void onEwkWacCameraRecordVideoTest(void* data, Evas_Object* webView, void* eventInfo)
208 {
209     CameraArray cameraArray;
210     memset(&cameraArray, 0x00, sizeof(CameraArray));
211     fprintf(stderr, "##### 1. ewk_view_camera_get_cameras\n");
212     if (ewk_view_camera_get_cameras(&cameraArray)) {
213         fprintf(stderr, "##### 2. ewk_view_camera_start_video_capture\n");
214         ewk_view_camera_start_video_capture(cameraArray.camera[0], "/mnt/ums/Downloads/Others/wac_camera_result.mp4", false,
215                                             EwkWacCameraVideoSuccessCb, EwkWacCameraErrorCb, cameraArray.camera[0]);
216         if (cameraArray.camera[1])
217             ewk_view_camera_remove_camera(cameraArray.camera[1]);
218
219         gRecordingVideoTimer = ecore_timer_add(1.0, recordingVideoTimerCallback, cameraArray.camera[0]);
220     } else {
221         END_TEST();
222         EXPECT_EQ(true, false);
223     }
224 }
225
226 TEST(DISABLED_EwkWacCameraTests, EwkWacCameraRecordVideoTest)
227 {
228     fprintf(stderr, "##### TEST : Record Video\n");
229     RUN_TEST(getDummyLocalFileUrl(), onEwkWacCameraRecordVideoTest, "load,finished", 0);
230 }
231
232
233 /*
234  * Test : ewk_view_camera_start_video_capture, ewk_view_camera_stop_video_capture
235  */
236 static void EwkWacCameraStopVideoSuccessCb(const char* filename, void* userParam)
237 {
238     if (userParam)
239         ewk_view_camera_remove_camera((Camera_Object)userParam);
240
241     fprintf(stderr, "##### success callback - Error : the success callback should not be called\n");
242
243     EXPECT_TRUE(false);
244     END_TEST();
245 }
246
247 static void EwkWacCameraStopErrorCb(int errorcode, void* userParam)
248 {
249     if (userParam)
250         ewk_view_camera_remove_camera((Camera_Object)userParam);
251
252     fprintf(stderr, "##### error callback - Success : this case should call the error callback \n");
253
254     EXPECT_TRUE(true);
255     END_TEST();
256 }
257
258
259 static void onEwkWacCameraStopVideoTest(void* data, Evas_Object* webView, void* eventInfo)
260 {
261     CameraArray cameraArray;
262     memset(&cameraArray, 0x00, sizeof(CameraArray));
263     fprintf(stderr, "##### 1. ewk_view_camera_get_cameras\n");
264     if (ewk_view_camera_get_cameras(&cameraArray)) {
265         fprintf(stderr, "##### 2. ewk_view_camera_start_video_capture\n");
266         ewk_view_camera_start_video_capture(cameraArray.camera[0], "/mnt/ums/Downloads/Others/wac_camera_result.mp4", false,
267                                             EwkWacCameraStopVideoSuccessCb, EwkWacCameraStopErrorCb, cameraArray.camera[0]);
268         fprintf(stderr, "##### 3. ewk_view_camera_stop_video_capture\n");
269         ewk_view_camera_stop_video_capture(cameraArray.camera[0]);
270         if (cameraArray.camera[1])
271             ewk_view_camera_remove_camera(cameraArray.camera[1]);
272     } else {
273        END_TEST();
274         EXPECT_EQ(true, false);
275     }
276 }
277
278 TEST(DISABLED_EwkWacCameraTests, EwkWacCameraStopVideoTest)
279 {
280     fprintf(stderr, "##### TEST : Record Video\n");
281     RUN_TEST(getDummyLocalFileUrl(), onEwkWacCameraStopVideoTest, "load,finished", 0);
282 }
283
284
285 /*
286  * Test : scenario
287  *
288     1. get cameras
289     2. create preview node
290     3. capture image (wac_camera_scenario1.jpg)
291     4. capture image (wac_camera_scenario2.jpg)
292     5. start video recording
293     6. cancel capture image (wac_camera_scenario1.jpg)
294     7. wait for 10 sec using timer
295     8. stop video recording
296  */
297
298
299 static Camera_Operation cameraOp1;
300 static Camera_Operation cameraOp2;
301 static Camera_Operation cameraOp3;
302 static Camera_Operation cameraOp4;
303
304 static const int gWaitingTime = 10;
305
306 static int scenarioSuccessCount = 0;
307
308
309 static void EwkWacCameraScenarioPreviewCb(JSValueRef element, void* userParam)
310 {
311     fprintf(stderr, "##### success callback for ewk_view_camera_create_preview_node\n");
312     scenarioSuccessCount++;
313 }
314
315 static void EwkWacCameraScenarioErrorCb(int errorcode, void* userParam)
316 {
317     fprintf(stderr, "##### error callback\n");
318 }
319
320 static void EwkWacCameraScenarioImgSuccessCb(const char* filename, void* userParam)
321 {
322     fprintf(stderr, "##### success callback - filename : [%s]\n", filename);
323
324     FILE* fp = 0;
325     fp = fopen(filename, "r");
326     if (fp) {
327         fclose(fp);
328         scenarioSuccessCount++;
329     } else
330         fprintf(stderr, "##### Error : the file is not exist\n", filename);
331 }
332
333 static void EwkWacCameraScenarioVideoSuccessCb(const char* filename, void* userParam)
334 {
335     fprintf(stderr, "##### success callback - filename : [%s]\n", filename);
336
337     FILE* fp = 0;
338     fp = fopen(filename, "r");
339     if (fp) {
340         fclose(fp);
341         scenarioSuccessCount++;
342     } else
343         fprintf(stderr, "##### Error : the file is not exist\n", filename);
344
345     EXPECT_EQ(scenarioSuccessCount, 3);
346     END_TEST();
347 }
348
349 static Eina_Bool waitingTimerCallback(void *data)
350 {
351     static int recordingTime = 0;
352
353     recordingTime++;
354
355     fprintf(stderr, "##### waiting [%d] ...\n", recordingTime);
356
357     if (recordingTime > gWaitingTime) {
358         fprintf(stderr, "##### 3. ewk_view_camera_stop_video_capture\n");
359         ewk_view_camera_stop_video_capture((Camera_Object)data);
360         return EINA_FALSE;
361     }
362
363     return EINA_TRUE;
364 }
365
366
367 static void onEwkWacCameraScenario01Test(void* data, Evas_Object* webView, void* eventInfo)
368 {
369     CameraArray cameraArray;
370     memset(&cameraArray, 0x00, sizeof(CameraArray));
371
372     fprintf(stderr, "#####################################\n");
373     fprintf(stderr, "# Scenario \n");
374     fprintf(stderr, "# 1. get cameras\n");
375     fprintf(stderr, "# 2. create preview node\n");
376     fprintf(stderr, "# 3. capture image (wac_camera_scenario1.jpg)\n");
377     fprintf(stderr, "# 4. capture image (wac_camera_scenario2.jpg)\n");
378     fprintf(stderr, "# 5. start video recording\n");
379     fprintf(stderr, "# 6. cancel capture image (wac_camera_scenario1.jpg)\n");
380     fprintf(stderr, "# 7. wait for 10 sec using timer\n");
381     fprintf(stderr, "# 8. stop video recording\n");
382     fprintf(stderr, "#####################################\n\n");
383
384     fprintf(stderr, "##### 1. ewk_view_camera_get_cameras\n");
385     if (ewk_view_camera_get_cameras(&cameraArray)) {
386
387         fprintf(stderr, "##### 2. ewk_view_camera_create_preview_node\n");
388         cameraOp1 = ewk_view_camera_create_preview_node(cameraArray.camera[0], webView,
389                                                         EwkWacCameraScenarioPreviewCb, EwkWacCameraScenarioErrorCb, cameraArray.camera[0]);
390
391         fprintf(stderr, "##### 3. ewk_view_camera_capture_image [1]\n");
392         cameraOp2 = ewk_view_camera_capture_image(cameraArray.camera[0], "/mnt/ums/Downloads/Others/wac_camera_scenario1.jpg", false,
393                                                   EwkWacCameraScenarioImgSuccessCb, EwkWacCameraScenarioErrorCb, cameraArray.camera[0]);
394
395         fprintf(stderr, "##### 4. ewk_view_camera_capture_image [2]\n");
396         cameraOp3 = ewk_view_camera_capture_image(cameraArray.camera[0], "/mnt/ums/Downloads/Others/wac_camera_scenario2.jpg", false,
397                                                   EwkWacCameraScenarioImgSuccessCb, EwkWacCameraScenarioErrorCb, cameraArray.camera[0]);
398
399         fprintf(stderr, "##### 5. ewk_view_camera_start_video_capture\n");
400         cameraOp4 = ewk_view_camera_start_video_capture(cameraArray.camera[0], "/mnt/ums/Downloads/Others/wac_camera_scenario.mp4", false,
401                                                         EwkWacCameraScenarioVideoSuccessCb, EwkWacCameraScenarioErrorCb, cameraArray.camera[0]);
402
403         fprintf(stderr, "##### 6. ewk_view_camera_cancel\n");
404         ewk_view_camera_cancel(cameraArray.camera[0], cameraOp2);
405
406         if (cameraArray.camera[1])
407             ewk_view_camera_remove_camera(cameraArray.camera[1]);
408
409         fprintf(stderr, "##### 7. wait for 10 sec using timer\n");
410         gRecordingVideoTimer = ecore_timer_add(1.0, waitingTimerCallback, cameraArray.camera[0]);
411     } else {
412         END_TEST();
413         EXPECT_EQ(true, false);
414     }
415 }
416
417
418 TEST(DISABLED_EwkWacCameraTests, EwkWacCameraCancelTest)
419 {
420     fprintf(stderr, "##### TEST : Cancel Record Video\n");
421     RUN_TEST(getDummyLocalFileUrl(), onEwkWacCameraScenario01Test, "load,finished", 0);
422 }