2 * Copyright (c) 2020 Samsung Electronics Co., Ltd.
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
21 #include <dali-toolkit-test-suite-utils.h>
22 #include "dali-toolkit-test-utils/toolkit-timer.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>
32 using namespace Toolkit;
37 const char* const TEST_URL1( "http://www.somewhere.valid1.com" );
38 const char* const TEST_URL2( "http://www.somewhere.valid2.com" );
40 static int gPageLoadStartedCallbackCalled = 0;
41 static int gPageLoadFinishedCallbackCalled = 0;
42 static int gEvaluateJavaScriptCallbackCalled = 0;
43 static bool gTouched = false;
45 struct CallbackFunctor
47 CallbackFunctor(bool* callbackFlag)
48 : mCallbackFlag( callbackFlag )
54 *mCallbackFlag = true;
59 static void OnPageLoadStarted( WebView view, const std::string& url )
61 gPageLoadStartedCallbackCalled++;
64 static void OnPageLoadFinished( WebView view, const std::string& url )
66 gPageLoadFinishedCallbackCalled++;
69 static void OnPageLoadError( WebView view, const std::string& url, WebView::LoadErrorCode errorCode )
73 static void OnEvaluateJavaScript( const std::string& result )
75 gEvaluateJavaScriptCallbackCalled++;
78 static bool OnTouched( Actor actor, const Dali::TouchEvent& touch )
86 void web_view_startup(void)
88 test_return_value = TET_UNDEF;
91 void web_view_cleanup(void)
93 test_return_value = TET_PASS;
96 int UtcDaliWebViewBasics(void)
98 ToolkitTestApplication application;
100 // Copy and Assignment Test
101 tet_infoline( "UtcDaliWebViewBasic Copy and Assignment Test" );
102 WebView view = WebView::New();
103 DALI_TEST_CHECK( view );
105 WebView copy( view );
106 DALI_TEST_CHECK( view == copy );
109 DALI_TEST_CHECK( !assign );
112 DALI_TEST_CHECK( assign == view );
116 tet_infoline( "UtcDaliWebViewBasic DownCast Test" );
117 BaseHandle handle(view);
119 WebView view2 = WebView::DownCast( handle );
120 DALI_TEST_CHECK( view );
121 DALI_TEST_CHECK( view2 );
122 DALI_TEST_CHECK( view == view2 );
126 tet_infoline( "UtcDaliWebViewBasic TypeRegistry Test" );
127 TypeRegistry typeRegistry = TypeRegistry::Get();
128 DALI_TEST_CHECK( typeRegistry );
130 TypeInfo typeInfo = typeRegistry.GetTypeInfo( "WebView" );
131 DALI_TEST_CHECK( typeInfo );
133 BaseHandle handle2 = typeInfo.CreateInstance();
134 DALI_TEST_CHECK( handle2 );
136 WebView view3 = WebView::DownCast( handle2 );
137 DALI_TEST_CHECK( view3 );
142 int UtcDaliWebViewPageNavigation(void)
144 ToolkitTestApplication application;
146 WebView view = WebView::New();
147 view.SetProperty( Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT );
148 view.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT );
149 view.SetProperty( Actor::Property::POSITION, Vector2( 0, 0 ));
150 view.SetProperty( Actor::Property::SIZE, Vector2( 800, 600 ) );
151 application.GetScene().Add( view );
152 application.SendNotification();
153 application.Render();
154 DALI_TEST_CHECK( view );
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 );
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 );
179 view.LoadUrl( TEST_URL2 );
181 view.SetProperty( Actor::Property::SIZE, Vector2( 400, 300 ) );
182 application.SendNotification();
183 application.Render();
184 Test::EmitGlobalTimerSignal();
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 );
192 Test::EmitGlobalTimerSignal();
193 DALI_TEST_CHECK( !view.CanGoBack() );
194 DALI_TEST_CHECK( view.CanGoForward() );
197 Test::EmitGlobalTimerSignal();
198 DALI_TEST_CHECK( view.CanGoBack() );
199 DALI_TEST_CHECK( !view.CanGoForward() );
206 Test::EmitGlobalTimerSignal();
207 DALI_TEST_CHECK( !view.CanGoBack() );
208 DALI_TEST_CHECK( !view.CanGoForward() );
213 int UtcDaliWebViewTouchAndKeys(void)
215 ToolkitTestApplication application;
217 WebView view = WebView::New();
218 view.SetProperty( Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT );
219 view.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT );
220 view.SetProperty( Actor::Property::POSITION, Vector2( 0, 0 ));
221 view.SetProperty( Actor::Property::SIZE, Vector2( 800, 600 ) );
223 application.GetScene().Add( view );
224 application.SendNotification();
225 application.Render();
227 view.GetNaturalSize();
228 view.TouchedSignal().Connect( &OnTouched );
231 Dali::Integration::TouchEvent event;
232 Dali::Integration::Point pointDown, pointUp;
234 event = Dali::Integration::TouchEvent();
235 pointDown.SetState( PointState::DOWN );
236 pointDown.SetScreenPosition( Vector2( 10, 10 ) );
237 event.AddPoint( pointDown );
238 application.ProcessEvent( event );
240 event = Dali::Integration::TouchEvent();
241 pointUp.SetState( PointState::UP );
242 pointUp.SetScreenPosition( Vector2( 10, 10 ) );
243 event.AddPoint( pointUp );
244 application.ProcessEvent( 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();
251 DALI_TEST_CHECK( gTouched );
252 DALI_TEST_CHECK( view );
257 int UtcDaliWebViewFocusGainedAndLost(void)
259 ToolkitTestApplication application;
261 WebView view = WebView::New();
262 DALI_TEST_CHECK( view );
264 view.SetProperty( Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT );
265 view.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT );
266 view.SetProperty( Actor::Property::POSITION, Vector2( 0, 0 ));
267 view.SetProperty( Actor::Property::SIZE, Vector2( 800, 600 ) );
269 application.GetScene().Add( view );
270 application.SendNotification();
271 application.Render();
273 view.SetKeyInputFocus();
274 DALI_TEST_CHECK( view.HasKeyInputFocus() );
277 view.ClearKeyInputFocus();
278 DALI_TEST_CHECK( !view.HasKeyInputFocus() );
283 int UtcDaliWebViewProperty1(void)
286 ToolkitTestApplication application;
288 WebView view = WebView::New();
289 DALI_TEST_CHECK( view );
292 view.SetProperty( WebView::Property::URL, TEST_URL1 );
293 Property::Value val = view.GetProperty( WebView::Property::URL );
294 DALI_TEST_CHECK( val.Get( local ) );
295 DALI_TEST_EQUALS( local, TEST_URL1, TEST_LOCATION );
300 int UtcDaliWebViewProperty2(void)
303 ToolkitTestApplication application;
305 WebView view = WebView::New();
306 DALI_TEST_CHECK( view );
308 const std::string kDefaultValue = "DOCUMENT_VIEWER";
309 const WebView::CacheModel::Type kTestEnum = WebView::CacheModel::PRIMARY_WEB_BROWSER;
310 const std::string kTestValue = "PRIMARY_WEB_BROWSER";
312 // Check default value
314 Property::Value value = view.GetProperty( WebView::Property::CACHE_MODEL );
315 DALI_TEST_CHECK( value.Get( output ) );
316 DALI_TEST_EQUALS( output, kDefaultValue, TEST_LOCATION );
318 // Check Set/GetProperty
319 view.SetProperty( WebView::Property::CACHE_MODEL, kTestEnum );
320 value = view.GetProperty( WebView::Property::CACHE_MODEL );
321 DALI_TEST_CHECK( value.Get( output ) );
322 DALI_TEST_EQUALS( output, kTestValue, TEST_LOCATION );
324 view.SetProperty( WebView::Property::CACHE_MODEL, kTestValue );
325 value = view.GetProperty( WebView::Property::CACHE_MODEL );
326 DALI_TEST_CHECK( value.Get( output ) );
327 DALI_TEST_EQUALS( output, kTestValue, TEST_LOCATION );
332 int UtcDaliWebViewProperty3(void)
334 // COOKIE_ACCEPT_POLICY
335 ToolkitTestApplication application;
337 WebView view = WebView::New();
338 DALI_TEST_CHECK( view );
340 const std::string kDefaultValue = "NO_THIRD_PARTY";
341 const WebView::CookieAcceptPolicy::Type kTestEnum = WebView::CookieAcceptPolicy::NEVER;
342 const std::string kTestValue = "NEVER";
344 // Check default value
346 Property::Value value = view.GetProperty( WebView::Property::COOKIE_ACCEPT_POLICY );
347 DALI_TEST_CHECK( value.Get( output ) );
348 DALI_TEST_EQUALS( output, kDefaultValue, TEST_LOCATION );
350 // Check Set/GetProperty
351 view.SetProperty( WebView::Property::COOKIE_ACCEPT_POLICY, kTestEnum );
352 value = view.GetProperty( WebView::Property::COOKIE_ACCEPT_POLICY );
353 DALI_TEST_CHECK( value.Get( output ) );
354 DALI_TEST_EQUALS( output, kTestValue, TEST_LOCATION );
356 view.SetProperty( WebView::Property::COOKIE_ACCEPT_POLICY, kTestValue );
357 value = view.GetProperty( WebView::Property::COOKIE_ACCEPT_POLICY );
358 DALI_TEST_CHECK( value.Get( output ) );
359 DALI_TEST_EQUALS( output, kTestValue, TEST_LOCATION );
364 int UtcDaliWebViewProperty4(void)
367 ToolkitTestApplication application;
369 WebView view = WebView::New();
370 DALI_TEST_CHECK( view );
372 const std::string kDefaultValue;
373 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";
375 // Check default value
377 Property::Value value = view.GetProperty( WebView::Property::USER_AGENT );
378 DALI_TEST_CHECK( value.Get( output ) );
379 DALI_TEST_EQUALS( output, kDefaultValue, TEST_LOCATION );
381 // Check Set/GetProperty
382 view.SetProperty( WebView::Property::USER_AGENT, kTestValue );
383 value = view.GetProperty( WebView::Property::USER_AGENT );
384 DALI_TEST_CHECK( value.Get( output ) );
385 DALI_TEST_EQUALS( output, kTestValue, TEST_LOCATION );
390 int UtcDaliWebViewProperty5(void)
393 ToolkitTestApplication application;
395 WebView view = WebView::New();
396 DALI_TEST_CHECK( view );
398 const bool kDefaultValue = true;
399 const bool kTestValue = false;
401 // Check default value
403 Property::Value value = view.GetProperty( WebView::Property::ENABLE_JAVASCRIPT );
404 DALI_TEST_CHECK( value.Get( output ) );
405 DALI_TEST_EQUALS( output, kDefaultValue, TEST_LOCATION );
407 // Check Set/GetProperty
408 view.SetProperty( WebView::Property::ENABLE_JAVASCRIPT, kTestValue );
409 value = view.GetProperty( WebView::Property::ENABLE_JAVASCRIPT );
410 DALI_TEST_CHECK( value.Get( output ) );
411 DALI_TEST_EQUALS( output, kTestValue, TEST_LOCATION );
416 int UtcDaliWebViewProperty6(void)
418 // LOAD_IMAGES_AUTOMATICALLY
419 ToolkitTestApplication application;
421 WebView view = WebView::New();
422 DALI_TEST_CHECK( view );
424 const bool kDefaultValue = true;
425 const bool kTestValue = false;
427 // Check default value
429 Property::Value value = view.GetProperty( WebView::Property::LOAD_IMAGES_AUTOMATICALLY );
430 DALI_TEST_CHECK( value.Get( output ) );
431 DALI_TEST_EQUALS( output, kDefaultValue, TEST_LOCATION );
433 // Check Set/GetProperty
434 view.SetProperty( WebView::Property::LOAD_IMAGES_AUTOMATICALLY, kTestValue );
435 value = view.GetProperty( WebView::Property::LOAD_IMAGES_AUTOMATICALLY );
436 DALI_TEST_CHECK( value.Get( output ) );
437 DALI_TEST_EQUALS( output, kTestValue, TEST_LOCATION );
442 int UtcDaliWebViewProperty7(void)
444 // DEFAULT_TEXT_ENCODING_NAME
445 ToolkitTestApplication application;
447 WebView view = WebView::New();
448 DALI_TEST_CHECK( view );
450 const std::string kDefaultValue;
451 const std::string kTestValue = "UTF-8";
453 // Check default value
455 Property::Value value = view.GetProperty( WebView::Property::DEFAULT_TEXT_ENCODING_NAME );
456 DALI_TEST_CHECK( value.Get( output ) );
457 DALI_TEST_EQUALS( output, kDefaultValue, TEST_LOCATION );
459 // Check Set/GetProperty
460 view.SetProperty( WebView::Property::DEFAULT_TEXT_ENCODING_NAME, kTestValue );
461 value = view.GetProperty( WebView::Property::DEFAULT_TEXT_ENCODING_NAME );
462 DALI_TEST_CHECK( value.Get( output ) );
463 DALI_TEST_EQUALS( output, kTestValue, TEST_LOCATION );
468 int UtcDaliWebViewProperty8(void)
471 ToolkitTestApplication application;
473 WebView view = WebView::New();
474 DALI_TEST_CHECK( view );
476 const int kDefaultValue = 16;
477 const int kTestValue = 26;
479 // Check default value
481 Property::Value value = view.GetProperty( WebView::Property::DEFAULT_FONT_SIZE );
482 DALI_TEST_CHECK( value.Get( output ) );
483 DALI_TEST_EQUALS( output, kDefaultValue, TEST_LOCATION );
485 // Check Set/GetProperty
486 view.SetProperty( WebView::Property::DEFAULT_FONT_SIZE, kTestValue );
487 value = view.GetProperty( WebView::Property::DEFAULT_FONT_SIZE );
488 DALI_TEST_CHECK( value.Get( output ) );
489 DALI_TEST_EQUALS( output, kTestValue, TEST_LOCATION );
494 int UtcDaliWebViewEvaluteJavaScript(void)
496 ToolkitTestApplication application;
498 WebView view = WebView::New( "ko-KR", "Asia/Seoul" );
500 view.LoadHTMLString( "<body>Hello World!</body>" );
501 view.EvaluateJavaScript( "jsObject.postMessage('Hello')" );
502 view.EvaluateJavaScript( "jsObject.postMessage('World')", OnEvaluateJavaScript );
503 Test::EmitGlobalTimerSignal();
505 DALI_TEST_EQUALS( gEvaluateJavaScriptCallbackCalled, 1, TEST_LOCATION );
511 int UtcDaliWebViewMethodsForCoverage(void)
513 ToolkitTestApplication application;
515 WebView view = WebView::New( "ko-KR", "Asia/Seoul" );
517 view.LoadHTMLString( "<body>Hello World!</body>" );
518 view.AddJavaScriptMessageHandler( "jsObject",
519 []( const std::string& arg ) {
523 DALI_TEST_CHECK( view );