[dali_1.4.20] Merge branch 'devel/master'
[platform/core/uifw/dali-toolkit.git] / automated-tests / src / dali-toolkit / utc-Dali-WebView.cpp
1 /*
2  * Copyright (c) 2018 Samsung Electronics Co., Ltd.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  *
16  */
17
18 #include <iostream>
19 #include <stdlib.h>
20
21 #include <dali-toolkit-test-suite-utils.h>
22 #include "dali-toolkit-test-utils/toolkit-timer.h"
23
24 #include <dali.h>
25 #include <dali/integration-api/events/key-event-integ.h>
26 #include <dali/integration-api/events/touch-event-integ.h>
27 #include <dali-toolkit/public-api/focus-manager/keyboard-focus-manager.h>
28 #include <dali-toolkit/devel-api/controls/web-view/web-view.h>
29
30
31 using namespace Dali;
32 using namespace Toolkit;
33
34 namespace
35 {
36
37 const char* const TEST_URL1( "http://www.somewhere.valid1.com" );
38 const char* const TEST_URL2( "http://www.somewhere.valid2.com" );
39
40 static int gPageLoadStartedCallbackCalled = 0;
41 static int gPageLoadFinishedCallbackCalled = 0;
42 static int gEvaluateJavaScriptCallbackCalled = 0;
43 static bool gTouched = false;
44
45 struct CallbackFunctor
46 {
47   CallbackFunctor(bool* callbackFlag)
48   : mCallbackFlag( callbackFlag )
49   {
50   }
51
52   void operator()()
53   {
54     *mCallbackFlag = true;
55   }
56   bool* mCallbackFlag;
57 };
58
59 static void OnPageLoadStarted( WebView view, const std::string& url )
60 {
61   gPageLoadStartedCallbackCalled++;
62 }
63
64 static void OnPageLoadFinished( WebView view, const std::string& url )
65 {
66   gPageLoadFinishedCallbackCalled++;
67 }
68
69 static void OnPageLoadError( WebView view, const std::string& url, WebView::LoadErrorCode errorCode )
70 {
71 }
72
73 static void OnEvaluateJavaScript( const std::string& result )
74 {
75   gEvaluateJavaScriptCallbackCalled++;
76 }
77
78 static bool OnTouched( Actor actor, const Dali::TouchData& touch )
79 {
80   gTouched = true;
81   return true;
82 }
83
84 } // namespace
85
86 void web_view_startup(void)
87 {
88   test_return_value = TET_UNDEF;
89 }
90
91 void web_view_cleanup(void)
92 {
93   test_return_value = TET_PASS;
94 }
95
96 int UtcDaliWebViewBasics(void)
97 {
98   ToolkitTestApplication application;
99
100   // Copy and Assignment Test
101   tet_infoline( "UtcDaliWebViewBasic Copy and Assignment Test" );
102   WebView view = WebView::New();
103   DALI_TEST_CHECK( view );
104
105   WebView copy( view );
106   DALI_TEST_CHECK( view == copy );
107
108   WebView assign;
109   DALI_TEST_CHECK( !assign );
110
111   assign = copy;
112   DALI_TEST_CHECK( assign == view );
113
114
115   // DownCast Test
116   tet_infoline( "UtcDaliWebViewBasic DownCast Test" );
117   BaseHandle handle(view);
118
119   WebView view2 = WebView::DownCast( handle );
120   DALI_TEST_CHECK( view );
121   DALI_TEST_CHECK( view2 );
122   DALI_TEST_CHECK( view == view2 );
123
124
125   // TypeRegistry Test
126   tet_infoline( "UtcDaliWebViewBasic TypeRegistry Test" );
127   TypeRegistry typeRegistry = TypeRegistry::Get();
128   DALI_TEST_CHECK( typeRegistry );
129
130   TypeInfo typeInfo = typeRegistry.GetTypeInfo( "WebView" );
131   DALI_TEST_CHECK( typeInfo );
132
133   BaseHandle handle2 = typeInfo.CreateInstance();
134   DALI_TEST_CHECK( handle2 );
135
136   WebView view3 = WebView::DownCast( handle2 );
137   DALI_TEST_CHECK( view3 );
138
139   END_TEST;
140 }
141
142 int UtcDaliWebViewPageNavigation(void)
143 {
144   ToolkitTestApplication application;
145
146   WebView view = WebView::New();
147   view.SetAnchorPoint( AnchorPoint::TOP_LEFT );
148   view.SetParentOrigin( ParentOrigin::TOP_LEFT );
149   view.SetPosition( 0, 0 );
150   view.SetSize( 800, 600 );
151   Stage::GetCurrent().Add( view );
152   application.SendNotification();
153   application.Render();
154   DALI_TEST_CHECK( view );
155
156   ConnectionTracker* testTracker = new ConnectionTracker();
157   view.PageLoadStartedSignal().Connect( &OnPageLoadStarted );
158   view.PageLoadFinishedSignal().Connect( &OnPageLoadFinished );
159   view.PageLoadErrorSignal().Connect( &OnPageLoadError );
160   bool signal1 = false;
161   bool signal2 = false;
162   bool signal3 = false;
163   view.ConnectSignal( testTracker, "pageLoadStarted", CallbackFunctor(&signal1) );
164   view.ConnectSignal( testTracker, "pageLoadFinished", CallbackFunctor(&signal2) );
165   view.ConnectSignal( testTracker, "invalidname", CallbackFunctor(&signal3) );
166   DALI_TEST_EQUALS( gPageLoadStartedCallbackCalled, 0, TEST_LOCATION );
167   DALI_TEST_EQUALS( gPageLoadFinishedCallbackCalled, 0, TEST_LOCATION );
168
169
170   view.LoadUrl( TEST_URL1 );
171   view.GetNaturalSize();
172   Test::EmitGlobalTimerSignal();
173   DALI_TEST_EQUALS( view.CanGoBack(), false, TEST_LOCATION );
174   DALI_TEST_EQUALS( gPageLoadStartedCallbackCalled, 1, TEST_LOCATION );
175   DALI_TEST_EQUALS( gPageLoadFinishedCallbackCalled, 1, TEST_LOCATION );
176   DALI_TEST_CHECK( signal1 & signal2 );
177   DALI_TEST_CHECK( !signal3 );
178
179   view.LoadUrl( TEST_URL2 );
180   view.Suspend();
181   view.SetSize( 400, 300 );
182   application.SendNotification();
183   application.Render();
184   Test::EmitGlobalTimerSignal();
185   view.Resume();
186   DALI_TEST_EQUALS( view.CanGoBack(), true, TEST_LOCATION );
187   DALI_TEST_EQUALS( view.CanGoForward(), false, TEST_LOCATION );
188   DALI_TEST_EQUALS( gPageLoadStartedCallbackCalled, 2, TEST_LOCATION );
189   DALI_TEST_EQUALS( gPageLoadFinishedCallbackCalled, 2, TEST_LOCATION );
190
191   view.GoBack();
192   Test::EmitGlobalTimerSignal();
193   DALI_TEST_CHECK( !view.CanGoBack() );
194   DALI_TEST_CHECK( view.CanGoForward() );
195
196   view.GoForward();
197   Test::EmitGlobalTimerSignal();
198   DALI_TEST_CHECK( view.CanGoBack() );
199   DALI_TEST_CHECK( !view.CanGoForward() );
200
201   view.Reload();
202   view.StopLoading();
203   view.ClearHistory();
204   view.ClearCache();
205   view.ClearCookies();
206   Test::EmitGlobalTimerSignal();
207   DALI_TEST_CHECK( !view.CanGoBack() );
208   DALI_TEST_CHECK( !view.CanGoForward() );
209
210   END_TEST;
211 }
212
213 int UtcDaliWebViewTouchAndKeys(void)
214 {
215   ToolkitTestApplication application;
216
217   WebView view = WebView::New();
218   view.SetAnchorPoint( AnchorPoint::TOP_LEFT );
219   view.SetParentOrigin( ParentOrigin::TOP_LEFT );
220   view.SetPosition( 0, 0 );
221   view.SetSize( 800, 600 );
222
223   Stage::GetCurrent().Add( view );
224   application.SendNotification();
225   application.Render();
226
227   view.GetNaturalSize();
228   view.TouchSignal().Connect( &OnTouched );
229
230   // Touch event
231   Dali::Integration::TouchEvent event;
232   Dali::Integration::Point pointDown, pointUp;
233
234   event = Dali::Integration::TouchEvent();
235   pointDown.SetState( PointState::DOWN );
236   pointDown.SetScreenPosition( Vector2( 10, 10 ) );
237   event.AddPoint( pointDown );
238   application.ProcessEvent( event );
239
240   event = Dali::Integration::TouchEvent();
241   pointUp.SetState( PointState::UP );
242   pointUp.SetScreenPosition( Vector2( 10, 10 ) );
243   event.AddPoint( pointUp );
244   application.ProcessEvent( event );
245
246   // Key event
247   Toolkit::KeyboardFocusManager::Get().SetCurrentFocusActor( view );
248   application.ProcessEvent( Integration::KeyEvent( "", "", "", DALI_KEY_ESCAPE, 0, 0, Integration::KeyEvent::Down, "", "", Device::Class::NONE, Device::Subclass::NONE ) );
249   application.SendNotification();
250
251   DALI_TEST_CHECK( gTouched );
252   DALI_TEST_CHECK( view );
253
254   END_TEST;
255 }
256
257 int UtcDaliWebViewProperty1(void)
258 {
259   // URL
260   ToolkitTestApplication application;
261
262   WebView view = WebView::New();
263   DALI_TEST_CHECK( view );
264
265   std::string local;
266   view.SetProperty( WebView::Property::URL, TEST_URL1 );
267   Property::Value val = view.GetProperty( WebView::Property::URL );
268   DALI_TEST_CHECK( val.Get( local ) );
269   DALI_TEST_EQUALS( local, TEST_URL1, TEST_LOCATION );
270
271   END_TEST;
272 }
273
274 int UtcDaliWebViewProperty2(void)
275 {
276   // CACHE_MODEL
277   ToolkitTestApplication application;
278
279   WebView view = WebView::New();
280   DALI_TEST_CHECK( view );
281
282   const std::string kDefaultValue = "DOCUMENT_VIEWER";
283   const WebView::CacheModel::Type kTestEnum = WebView::CacheModel::PRIMARY_WEB_BROWSER;
284   const std::string kTestValue = "PRIMARY_WEB_BROWSER";
285
286   // Check default value
287   std::string output;
288   Property::Value value = view.GetProperty( WebView::Property::CACHE_MODEL );
289   DALI_TEST_CHECK( value.Get( output ) );
290   DALI_TEST_EQUALS( output, kDefaultValue, TEST_LOCATION );
291
292   // Check Set/GetProperty
293   view.SetProperty( WebView::Property::CACHE_MODEL, kTestEnum );
294   value = view.GetProperty( WebView::Property::CACHE_MODEL );
295   DALI_TEST_CHECK( value.Get( output ) );
296   DALI_TEST_EQUALS( output, kTestValue, TEST_LOCATION );
297
298   view.SetProperty( WebView::Property::CACHE_MODEL, kTestValue );
299   value = view.GetProperty( WebView::Property::CACHE_MODEL );
300   DALI_TEST_CHECK( value.Get( output ) );
301   DALI_TEST_EQUALS( output, kTestValue, TEST_LOCATION );
302
303   END_TEST;
304 }
305
306 int UtcDaliWebViewProperty3(void)
307 {
308   // COOKIE_ACCEPT_POLICY
309   ToolkitTestApplication application;
310
311   WebView view = WebView::New();
312   DALI_TEST_CHECK( view );
313
314   const std::string kDefaultValue = "NO_THIRD_PARTY";
315   const WebView::CookieAcceptPolicy::Type kTestEnum = WebView::CookieAcceptPolicy::NEVER;
316   const std::string kTestValue = "NEVER";
317
318   // Check default value
319   std::string output;
320   Property::Value value = view.GetProperty( WebView::Property::COOKIE_ACCEPT_POLICY );
321   DALI_TEST_CHECK( value.Get( output ) );
322   DALI_TEST_EQUALS( output, kDefaultValue, TEST_LOCATION );
323
324   // Check Set/GetProperty
325   view.SetProperty( WebView::Property::COOKIE_ACCEPT_POLICY, kTestEnum );
326   value = view.GetProperty( WebView::Property::COOKIE_ACCEPT_POLICY );
327   DALI_TEST_CHECK( value.Get( output ) );
328   DALI_TEST_EQUALS( output, kTestValue, TEST_LOCATION );
329
330   view.SetProperty( WebView::Property::COOKIE_ACCEPT_POLICY, kTestValue );
331   value = view.GetProperty( WebView::Property::COOKIE_ACCEPT_POLICY );
332   DALI_TEST_CHECK( value.Get( output ) );
333   DALI_TEST_EQUALS( output, kTestValue, TEST_LOCATION );
334
335   END_TEST;
336 }
337
338 int UtcDaliWebViewProperty4(void)
339 {
340   // USER_AGENT
341   ToolkitTestApplication application;
342
343   WebView view = WebView::New();
344   DALI_TEST_CHECK( view );
345
346   const std::string kDefaultValue;
347   const std::string kTestValue = "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36";
348
349   // Check default value
350   std::string output;
351   Property::Value value = view.GetProperty( WebView::Property::USER_AGENT );
352   DALI_TEST_CHECK( value.Get( output ) );
353   DALI_TEST_EQUALS( output, kDefaultValue, TEST_LOCATION );
354
355   // Check Set/GetProperty
356   view.SetProperty( WebView::Property::USER_AGENT, kTestValue );
357   value = view.GetProperty( WebView::Property::USER_AGENT );
358   DALI_TEST_CHECK( value.Get( output ) );
359   DALI_TEST_EQUALS( output, kTestValue, TEST_LOCATION );
360
361   END_TEST;
362 }
363
364 int UtcDaliWebViewProperty5(void)
365 {
366   // ENABLE_JAVASCRIPT
367   ToolkitTestApplication application;
368
369   WebView view = WebView::New();
370   DALI_TEST_CHECK( view );
371
372   const bool kDefaultValue = true;
373   const bool kTestValue = false;
374
375   // Check default value
376   bool output;
377   Property::Value value = view.GetProperty( WebView::Property::ENABLE_JAVASCRIPT );
378   DALI_TEST_CHECK( value.Get( output ) );
379   DALI_TEST_EQUALS( output, kDefaultValue, TEST_LOCATION );
380
381   // Check Set/GetProperty
382   view.SetProperty( WebView::Property::ENABLE_JAVASCRIPT, kTestValue );
383   value = view.GetProperty( WebView::Property::ENABLE_JAVASCRIPT );
384   DALI_TEST_CHECK( value.Get( output ) );
385   DALI_TEST_EQUALS( output, kTestValue, TEST_LOCATION );
386
387   END_TEST;
388 }
389
390 int UtcDaliWebViewProperty6(void)
391 {
392   // LOAD_IMAGES_AUTOMATICALLY
393   ToolkitTestApplication application;
394
395   WebView view = WebView::New();
396   DALI_TEST_CHECK( view );
397
398   const bool kDefaultValue = true;
399   const bool kTestValue = false;
400
401   // Check default value
402   bool output;
403   Property::Value value = view.GetProperty( WebView::Property::LOAD_IMAGES_AUTOMATICALLY );
404   DALI_TEST_CHECK( value.Get( output ) );
405   DALI_TEST_EQUALS( output, kDefaultValue, TEST_LOCATION );
406
407   // Check Set/GetProperty
408   view.SetProperty( WebView::Property::LOAD_IMAGES_AUTOMATICALLY, kTestValue );
409   value = view.GetProperty( WebView::Property::LOAD_IMAGES_AUTOMATICALLY );
410   DALI_TEST_CHECK( value.Get( output ) );
411   DALI_TEST_EQUALS( output, kTestValue, TEST_LOCATION );
412
413   END_TEST;
414 }
415
416 int UtcDaliWebViewProperty7(void)
417 {
418   // DEFAULT_TEXT_ENCODING_NAME
419   ToolkitTestApplication application;
420
421   WebView view = WebView::New();
422   DALI_TEST_CHECK( view );
423
424   const std::string kDefaultValue;
425   const std::string kTestValue = "UTF-8";
426
427   // Check default value
428   std::string output;
429   Property::Value value = view.GetProperty( WebView::Property::DEFAULT_TEXT_ENCODING_NAME );
430   DALI_TEST_CHECK( value.Get( output ) );
431   DALI_TEST_EQUALS( output, kDefaultValue, TEST_LOCATION );
432
433   // Check Set/GetProperty
434   view.SetProperty( WebView::Property::DEFAULT_TEXT_ENCODING_NAME, kTestValue );
435   value = view.GetProperty( WebView::Property::DEFAULT_TEXT_ENCODING_NAME );
436   DALI_TEST_CHECK( value.Get( output ) );
437   DALI_TEST_EQUALS( output, kTestValue, TEST_LOCATION );
438
439   END_TEST;
440 }
441
442 int UtcDaliWebViewProperty8(void)
443 {
444   // DEFAULT_FONT_SIZE
445   ToolkitTestApplication application;
446
447   WebView view = WebView::New();
448   DALI_TEST_CHECK( view );
449
450   const int kDefaultValue = 16;
451   const int kTestValue = 26;
452
453   // Check default value
454   int output;
455   Property::Value value = view.GetProperty( WebView::Property::DEFAULT_FONT_SIZE );
456   DALI_TEST_CHECK( value.Get( output ) );
457   DALI_TEST_EQUALS( output, kDefaultValue, TEST_LOCATION );
458
459   // Check Set/GetProperty
460   view.SetProperty( WebView::Property::DEFAULT_FONT_SIZE, kTestValue );
461   value = view.GetProperty( WebView::Property::DEFAULT_FONT_SIZE );
462   DALI_TEST_CHECK( value.Get( output ) );
463   DALI_TEST_EQUALS( output, kTestValue, TEST_LOCATION );
464
465   END_TEST;
466 }
467
468 int UtcDaliWebViewEvaluteJavaScript(void)
469 {
470   ToolkitTestApplication application;
471
472   WebView view = WebView::New( "ko-KR", "Asia/Seoul" );
473
474   view.LoadHTMLString( "<body>Hello World!</body>" );
475   view.EvaluateJavaScript( "jsObject.postMessage('Hello')" );
476   view.EvaluateJavaScript( "jsObject.postMessage('World')", OnEvaluateJavaScript );
477   Test::EmitGlobalTimerSignal();
478
479   DALI_TEST_EQUALS( gEvaluateJavaScriptCallbackCalled, 1, TEST_LOCATION );
480
481   END_TEST;
482 }
483
484
485 int UtcDaliWebViewMethodsForCoverage(void)
486 {
487   ToolkitTestApplication application;
488
489   WebView view = WebView::New( "ko-KR", "Asia/Seoul" );
490
491   view.LoadHTMLString( "<body>Hello World!</body>" );
492   view.AddJavaScriptMessageHandler( "jsObject",
493     []( const std::string& arg ) {
494     }
495   );
496
497   DALI_TEST_CHECK( view );
498
499   END_TEST;
500 }