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 gScrollEdgeReachedCallbackCalled = 0;
43 static int gEvaluateJavaScriptCallbackCalled = 0;
44 static bool gTouched = false;
46 struct CallbackFunctor
48 CallbackFunctor(bool* callbackFlag)
49 : mCallbackFlag( callbackFlag )
55 *mCallbackFlag = true;
60 static void OnPageLoadStarted( WebView view, const std::string& url )
62 gPageLoadStartedCallbackCalled++;
65 static void OnPageLoadFinished( WebView view, const std::string& url )
67 gPageLoadFinishedCallbackCalled++;
70 static void OnScrollEdgeReached( WebView view, Dali::WebEnginePlugin::ScrollEdge edge )
72 gScrollEdgeReachedCallbackCalled++;
75 static void OnPageLoadError( WebView view, const std::string& url, WebView::LoadErrorCode errorCode )
79 static void OnEvaluateJavaScript( const std::string& result )
81 gEvaluateJavaScriptCallbackCalled++;
84 static bool OnTouched( Actor actor, const Dali::TouchEvent& touch )
92 void web_view_startup(void)
94 test_return_value = TET_UNDEF;
97 void web_view_cleanup(void)
99 test_return_value = TET_PASS;
102 int UtcDaliWebViewBasics(void)
104 ToolkitTestApplication application;
106 // Copy and Assignment Test
107 tet_infoline( "UtcDaliWebViewBasic Copy and Assignment Test" );
108 WebView view = WebView::New();
109 DALI_TEST_CHECK( view );
111 WebView copy( view );
112 DALI_TEST_CHECK( view == copy );
115 DALI_TEST_CHECK( !assign );
118 DALI_TEST_CHECK( assign == view );
122 tet_infoline( "UtcDaliWebViewBasic DownCast Test" );
123 BaseHandle handle(view);
125 WebView view2 = WebView::DownCast( handle );
126 DALI_TEST_CHECK( view );
127 DALI_TEST_CHECK( view2 );
128 DALI_TEST_CHECK( view == view2 );
132 tet_infoline( "UtcDaliWebViewBasic TypeRegistry Test" );
133 TypeRegistry typeRegistry = TypeRegistry::Get();
134 DALI_TEST_CHECK( typeRegistry );
136 TypeInfo typeInfo = typeRegistry.GetTypeInfo( "WebView" );
137 DALI_TEST_CHECK( typeInfo );
139 BaseHandle handle2 = typeInfo.CreateInstance();
140 DALI_TEST_CHECK( handle2 );
142 WebView view3 = WebView::DownCast( handle2 );
143 DALI_TEST_CHECK( view3 );
148 int UtcDaliWebViewPageNavigation(void)
150 ToolkitTestApplication application;
152 WebView view = WebView::New();
153 view.SetProperty( Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT );
154 view.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT );
155 view.SetProperty( Actor::Property::POSITION, Vector2( 0, 0 ));
156 view.SetProperty( Actor::Property::SIZE, Vector2( 800, 600 ) );
157 application.GetScene().Add( view );
158 application.SendNotification();
159 application.Render();
160 DALI_TEST_CHECK( view );
162 ConnectionTracker* testTracker = new ConnectionTracker();
163 view.PageLoadStartedSignal().Connect( &OnPageLoadStarted );
164 view.PageLoadFinishedSignal().Connect( &OnPageLoadFinished );
165 view.PageLoadErrorSignal().Connect( &OnPageLoadError );
166 bool signal1 = false;
167 bool signal2 = false;
168 bool signal3 = false;
169 view.ConnectSignal( testTracker, "pageLoadStarted", CallbackFunctor(&signal1) );
170 view.ConnectSignal( testTracker, "pageLoadFinished", CallbackFunctor(&signal2) );
171 view.ConnectSignal( testTracker, "invalidname", CallbackFunctor(&signal3) );
172 DALI_TEST_EQUALS( gPageLoadStartedCallbackCalled, 0, TEST_LOCATION );
173 DALI_TEST_EQUALS( gPageLoadFinishedCallbackCalled, 0, TEST_LOCATION );
176 view.LoadUrl( TEST_URL1 );
177 view.GetNaturalSize();
178 Test::EmitGlobalTimerSignal();
179 DALI_TEST_EQUALS( view.CanGoBack(), false, TEST_LOCATION );
180 DALI_TEST_EQUALS( gPageLoadStartedCallbackCalled, 1, TEST_LOCATION );
181 DALI_TEST_EQUALS( gPageLoadFinishedCallbackCalled, 1, TEST_LOCATION );
182 DALI_TEST_CHECK( signal1 & signal2 );
183 DALI_TEST_CHECK( !signal3 );
185 view.LoadUrl( TEST_URL2 );
187 view.SetProperty( Actor::Property::SIZE, Vector2( 400, 300 ) );
188 application.SendNotification();
189 application.Render();
190 Test::EmitGlobalTimerSignal();
192 DALI_TEST_EQUALS( view.CanGoBack(), true, TEST_LOCATION );
193 DALI_TEST_EQUALS( view.CanGoForward(), false, TEST_LOCATION );
194 DALI_TEST_EQUALS( gPageLoadStartedCallbackCalled, 2, TEST_LOCATION );
195 DALI_TEST_EQUALS( gPageLoadFinishedCallbackCalled, 2, TEST_LOCATION );
198 Test::EmitGlobalTimerSignal();
199 DALI_TEST_CHECK( !view.CanGoBack() );
200 DALI_TEST_CHECK( view.CanGoForward() );
203 Test::EmitGlobalTimerSignal();
204 DALI_TEST_CHECK( view.CanGoBack() );
205 DALI_TEST_CHECK( !view.CanGoForward() );
212 Test::EmitGlobalTimerSignal();
213 DALI_TEST_CHECK( !view.CanGoBack() );
214 DALI_TEST_CHECK( !view.CanGoForward() );
219 int UtcDaliWebViewTouchAndKeys(void)
221 ToolkitTestApplication application;
223 WebView view = WebView::New();
224 view.SetProperty( Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT );
225 view.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT );
226 view.SetProperty( Actor::Property::POSITION, Vector2( 0, 0 ));
227 view.SetProperty( Actor::Property::SIZE, Vector2( 800, 600 ) );
229 application.GetScene().Add( view );
230 application.SendNotification();
231 application.Render();
233 view.GetNaturalSize();
234 view.TouchedSignal().Connect( &OnTouched );
237 Dali::Integration::TouchEvent event;
238 Dali::Integration::Point pointDown, pointUp;
240 event = Dali::Integration::TouchEvent();
241 pointDown.SetState( PointState::DOWN );
242 pointDown.SetScreenPosition( Vector2( 10, 10 ) );
243 event.AddPoint( pointDown );
244 application.ProcessEvent( event );
246 event = Dali::Integration::TouchEvent();
247 pointUp.SetState( PointState::UP );
248 pointUp.SetScreenPosition( Vector2( 10, 10 ) );
249 event.AddPoint( pointUp );
250 application.ProcessEvent( event );
253 Toolkit::KeyboardFocusManager::Get().SetCurrentFocusActor( view );
254 application.ProcessEvent( Integration::KeyEvent( "", "", "", DALI_KEY_ESCAPE, 0, 0, Integration::KeyEvent::DOWN, "", "", Device::Class::NONE, Device::Subclass::NONE ) );
255 application.SendNotification();
257 DALI_TEST_CHECK( gTouched );
258 DALI_TEST_CHECK( view );
263 int UtcDaliWebViewFocusGainedAndLost(void)
265 ToolkitTestApplication application;
267 WebView view = WebView::New();
268 DALI_TEST_CHECK( view );
270 view.SetProperty( Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT );
271 view.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT );
272 view.SetProperty( Actor::Property::POSITION, Vector2( 0, 0 ));
273 view.SetProperty( Actor::Property::SIZE, Vector2( 800, 600 ) );
275 application.GetScene().Add( view );
276 application.SendNotification();
277 application.Render();
279 view.SetKeyInputFocus();
280 DALI_TEST_CHECK( view.HasKeyInputFocus() );
283 view.ClearKeyInputFocus();
284 DALI_TEST_CHECK( !view.HasKeyInputFocus() );
289 int UtcDaliWebViewProperty1(void)
292 ToolkitTestApplication application;
294 WebView view = WebView::New();
295 DALI_TEST_CHECK( view );
298 view.SetProperty( WebView::Property::URL, TEST_URL1 );
299 Property::Value val = view.GetProperty( WebView::Property::URL );
300 DALI_TEST_CHECK( val.Get( local ) );
301 DALI_TEST_EQUALS( local, TEST_URL1, TEST_LOCATION );
306 int UtcDaliWebViewProperty2(void)
309 ToolkitTestApplication application;
311 WebView view = WebView::New();
312 DALI_TEST_CHECK( view );
314 const std::string kDefaultValue = "DOCUMENT_VIEWER";
315 const WebView::CacheModel::Type kTestEnum = WebView::CacheModel::PRIMARY_WEB_BROWSER;
316 const std::string kTestValue = "PRIMARY_WEB_BROWSER";
318 // Check default value
320 Property::Value value = view.GetProperty( WebView::Property::CACHE_MODEL );
321 DALI_TEST_CHECK( value.Get( output ) );
322 DALI_TEST_EQUALS( output, kDefaultValue, TEST_LOCATION );
324 // Check Set/GetProperty
325 view.SetProperty( WebView::Property::CACHE_MODEL, kTestEnum );
326 value = view.GetProperty( WebView::Property::CACHE_MODEL );
327 DALI_TEST_CHECK( value.Get( output ) );
328 DALI_TEST_EQUALS( output, kTestValue, TEST_LOCATION );
330 view.SetProperty( WebView::Property::CACHE_MODEL, kTestValue );
331 value = view.GetProperty( WebView::Property::CACHE_MODEL );
332 DALI_TEST_CHECK( value.Get( output ) );
333 DALI_TEST_EQUALS( output, kTestValue, TEST_LOCATION );
338 int UtcDaliWebViewProperty3(void)
340 // COOKIE_ACCEPT_POLICY
341 ToolkitTestApplication application;
343 WebView view = WebView::New();
344 DALI_TEST_CHECK( view );
346 const std::string kDefaultValue = "NO_THIRD_PARTY";
347 const WebView::CookieAcceptPolicy::Type kTestEnum = WebView::CookieAcceptPolicy::NEVER;
348 const std::string kTestValue = "NEVER";
350 // Check default value
352 Property::Value value = view.GetProperty( WebView::Property::COOKIE_ACCEPT_POLICY );
353 DALI_TEST_CHECK( value.Get( output ) );
354 DALI_TEST_EQUALS( output, kDefaultValue, TEST_LOCATION );
356 // Check Set/GetProperty
357 view.SetProperty( WebView::Property::COOKIE_ACCEPT_POLICY, kTestEnum );
358 value = view.GetProperty( WebView::Property::COOKIE_ACCEPT_POLICY );
359 DALI_TEST_CHECK( value.Get( output ) );
360 DALI_TEST_EQUALS( output, kTestValue, TEST_LOCATION );
362 view.SetProperty( WebView::Property::COOKIE_ACCEPT_POLICY, kTestValue );
363 value = view.GetProperty( WebView::Property::COOKIE_ACCEPT_POLICY );
364 DALI_TEST_CHECK( value.Get( output ) );
365 DALI_TEST_EQUALS( output, kTestValue, TEST_LOCATION );
370 int UtcDaliWebViewProperty4(void)
373 ToolkitTestApplication application;
375 WebView view = WebView::New();
376 DALI_TEST_CHECK( view );
378 const std::string kDefaultValue;
379 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";
381 // Check default value
383 Property::Value value = view.GetProperty( WebView::Property::USER_AGENT );
384 DALI_TEST_CHECK( value.Get( output ) );
385 DALI_TEST_EQUALS( output, kDefaultValue, TEST_LOCATION );
387 // Check Set/GetProperty
388 view.SetProperty( WebView::Property::USER_AGENT, kTestValue );
389 value = view.GetProperty( WebView::Property::USER_AGENT );
390 DALI_TEST_CHECK( value.Get( output ) );
391 DALI_TEST_EQUALS( output, kTestValue, TEST_LOCATION );
396 int UtcDaliWebViewProperty5(void)
399 ToolkitTestApplication application;
401 WebView view = WebView::New();
402 DALI_TEST_CHECK( view );
404 const bool kDefaultValue = true;
405 const bool kTestValue = false;
407 // Check default value
409 Property::Value value = view.GetProperty( WebView::Property::ENABLE_JAVASCRIPT );
410 DALI_TEST_CHECK( value.Get( output ) );
411 DALI_TEST_EQUALS( output, kDefaultValue, TEST_LOCATION );
413 // Check Set/GetProperty
414 view.SetProperty( WebView::Property::ENABLE_JAVASCRIPT, kTestValue );
415 value = view.GetProperty( WebView::Property::ENABLE_JAVASCRIPT );
416 DALI_TEST_CHECK( value.Get( output ) );
417 DALI_TEST_EQUALS( output, kTestValue, TEST_LOCATION );
422 int UtcDaliWebViewProperty6(void)
424 // LOAD_IMAGES_AUTOMATICALLY
425 ToolkitTestApplication application;
427 WebView view = WebView::New();
428 DALI_TEST_CHECK( view );
430 const bool kDefaultValue = true;
431 const bool kTestValue = false;
433 // Check default value
435 Property::Value value = view.GetProperty( WebView::Property::LOAD_IMAGES_AUTOMATICALLY );
436 DALI_TEST_CHECK( value.Get( output ) );
437 DALI_TEST_EQUALS( output, kDefaultValue, TEST_LOCATION );
439 // Check Set/GetProperty
440 view.SetProperty( WebView::Property::LOAD_IMAGES_AUTOMATICALLY, kTestValue );
441 value = view.GetProperty( WebView::Property::LOAD_IMAGES_AUTOMATICALLY );
442 DALI_TEST_CHECK( value.Get( output ) );
443 DALI_TEST_EQUALS( output, kTestValue, TEST_LOCATION );
448 int UtcDaliWebViewProperty7(void)
450 // DEFAULT_TEXT_ENCODING_NAME
451 ToolkitTestApplication application;
453 WebView view = WebView::New();
454 DALI_TEST_CHECK( view );
456 const std::string kDefaultValue;
457 const std::string kTestValue = "UTF-8";
459 // Check default value
461 Property::Value value = view.GetProperty( WebView::Property::DEFAULT_TEXT_ENCODING_NAME );
462 DALI_TEST_CHECK( value.Get( output ) );
463 DALI_TEST_EQUALS( output, kDefaultValue, TEST_LOCATION );
465 // Check Set/GetProperty
466 view.SetProperty( WebView::Property::DEFAULT_TEXT_ENCODING_NAME, kTestValue );
467 value = view.GetProperty( WebView::Property::DEFAULT_TEXT_ENCODING_NAME );
468 DALI_TEST_CHECK( value.Get( output ) );
469 DALI_TEST_EQUALS( output, kTestValue, TEST_LOCATION );
474 int UtcDaliWebViewProperty8(void)
477 ToolkitTestApplication application;
479 WebView view = WebView::New();
480 DALI_TEST_CHECK( view );
482 const int kDefaultValue = 16;
483 const int kTestValue = 26;
485 // Check default value
487 Property::Value value = view.GetProperty( WebView::Property::DEFAULT_FONT_SIZE );
488 DALI_TEST_CHECK( value.Get( output ) );
489 DALI_TEST_EQUALS( output, kDefaultValue, TEST_LOCATION );
491 // Check Set/GetProperty
492 view.SetProperty( WebView::Property::DEFAULT_FONT_SIZE, kTestValue );
493 value = view.GetProperty( WebView::Property::DEFAULT_FONT_SIZE );
494 DALI_TEST_CHECK( value.Get( output ) );
495 DALI_TEST_EQUALS( output, kTestValue, TEST_LOCATION );
500 int UtcDaliWebViewProperty9(void)
503 ToolkitTestApplication application;
505 WebView view = WebView::New();
506 DALI_TEST_CHECK( view );
508 // Check default value
509 Dali::Vector2 output = Dali::Vector2::ONE;
510 view.GetProperty( WebView::Property::SCROLL_POSITION ).Get( output );
511 DALI_TEST_CHECK( output.x == 0 && output.y == 0 );
513 // Check Set/GetProperty
514 Dali::Vector2 testValue = Dali::Vector2( 100, 100 );
515 view.SetProperty( WebView::Property::SCROLL_POSITION, testValue );
516 view.GetProperty( WebView::Property::SCROLL_POSITION ).Get( output );
517 DALI_TEST_EQUALS( output, testValue, TEST_LOCATION );
519 // Check default value of scroll size
520 output = Dali::Vector2::ONE;
521 view.GetProperty( WebView::Property::SCROLL_SIZE ).Get( output );
522 DALI_TEST_CHECK( output.x == 500 && output.y == 500 );
524 // Check default value of content size
525 output = Dali::Vector2::ONE;
526 view.GetProperty( WebView::Property::CONTENT_SIZE ).Get( output );
527 DALI_TEST_CHECK( output.x == 500 && output.y == 500 );
532 int UtcDaliWebViewScrollBy(void)
534 ToolkitTestApplication application;
536 WebView view = WebView::New();
537 DALI_TEST_CHECK( view );
540 ConnectionTracker* testTracker = new ConnectionTracker();
541 view.ScrollEdgeReachedSignal().Connect( &OnScrollEdgeReached );
542 bool signal1 = false;
543 view.ConnectSignal( testTracker, "scrollEdgeReached", CallbackFunctor(&signal1) );
544 DALI_TEST_EQUALS( gScrollEdgeReachedCallbackCalled, 0, TEST_LOCATION );
546 view.LoadUrl( TEST_URL1 );
547 Test::EmitGlobalTimerSignal();
549 // set scroll position.
550 Dali::Vector2 output = Dali::Vector2::ONE;
551 Dali::Vector2 testValue = Dali::Vector2( 100, 100 );
552 view.SetProperty( WebView::Property::SCROLL_POSITION, testValue );
553 view.GetProperty( WebView::Property::SCROLL_POSITION ).Get( output );
554 DALI_TEST_EQUALS( output, testValue, TEST_LOCATION );
556 // scroll by and trigger scrollEdgeReached event.
557 view.ScrollBy( 50, 50 );
558 view.GetProperty( WebView::Property::SCROLL_POSITION ).Get( output );
559 DALI_TEST_CHECK( output.x == 150 && output.y == 150 );
560 DALI_TEST_EQUALS( gScrollEdgeReachedCallbackCalled, 1, TEST_LOCATION );
561 DALI_TEST_CHECK( signal1 );
566 int UtcDaliWebViewEvaluteJavaScript(void)
568 ToolkitTestApplication application;
570 WebView view = WebView::New( "ko-KR", "Asia/Seoul" );
572 view.LoadHTMLString( "<body>Hello World!</body>" );
573 view.EvaluateJavaScript( "jsObject.postMessage('Hello')" );
574 view.EvaluateJavaScript( "jsObject.postMessage('World')", OnEvaluateJavaScript );
575 Test::EmitGlobalTimerSignal();
577 DALI_TEST_EQUALS( gEvaluateJavaScriptCallbackCalled, 1, TEST_LOCATION );
583 int UtcDaliWebViewMethodsForCoverage(void)
585 ToolkitTestApplication application;
587 WebView view = WebView::New( "ko-KR", "Asia/Seoul" );
589 view.LoadHTMLString( "<body>Hello World!</body>" );
590 view.AddJavaScriptMessageHandler( "jsObject",
591 []( const std::string& arg ) {
595 DALI_TEST_CHECK( view );