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::TouchData& 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.TouchSignal().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 UtcDaliWebViewProperty1(void)
260 ToolkitTestApplication application;
262 WebView view = WebView::New();
263 DALI_TEST_CHECK( view );
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 );
274 int UtcDaliWebViewProperty2(void)
277 ToolkitTestApplication application;
279 WebView view = WebView::New();
280 DALI_TEST_CHECK( view );
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";
286 // Check default value
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 );
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 );
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 );
306 int UtcDaliWebViewProperty3(void)
308 // COOKIE_ACCEPT_POLICY
309 ToolkitTestApplication application;
311 WebView view = WebView::New();
312 DALI_TEST_CHECK( view );
314 const std::string kDefaultValue = "NO_THIRD_PARTY";
315 const WebView::CookieAcceptPolicy::Type kTestEnum = WebView::CookieAcceptPolicy::NEVER;
316 const std::string kTestValue = "NEVER";
318 // Check default value
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 );
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 );
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 );
338 int UtcDaliWebViewProperty4(void)
341 ToolkitTestApplication application;
343 WebView view = WebView::New();
344 DALI_TEST_CHECK( view );
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";
349 // Check default value
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 );
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 );
364 int UtcDaliWebViewProperty5(void)
367 ToolkitTestApplication application;
369 WebView view = WebView::New();
370 DALI_TEST_CHECK( view );
372 const bool kDefaultValue = true;
373 const bool kTestValue = false;
375 // Check default value
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 );
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 );
390 int UtcDaliWebViewProperty6(void)
392 // LOAD_IMAGES_AUTOMATICALLY
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::LOAD_IMAGES_AUTOMATICALLY );
404 DALI_TEST_CHECK( value.Get( output ) );
405 DALI_TEST_EQUALS( output, kDefaultValue, TEST_LOCATION );
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 );
416 int UtcDaliWebViewProperty7(void)
418 // DEFAULT_TEXT_ENCODING_NAME
419 ToolkitTestApplication application;
421 WebView view = WebView::New();
422 DALI_TEST_CHECK( view );
424 const std::string kDefaultValue;
425 const std::string kTestValue = "UTF-8";
427 // Check default value
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 );
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 );
442 int UtcDaliWebViewProperty8(void)
445 ToolkitTestApplication application;
447 WebView view = WebView::New();
448 DALI_TEST_CHECK( view );
450 const int kDefaultValue = 16;
451 const int kTestValue = 26;
453 // Check default value
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 );
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 );
468 int UtcDaliWebViewEvaluteJavaScript(void)
470 ToolkitTestApplication application;
472 WebView view = WebView::New( "ko-KR", "Asia/Seoul" );
474 view.LoadHTMLString( "<body>Hello World!</body>" );
475 view.EvaluateJavaScript( "jsObject.postMessage('Hello')" );
476 view.EvaluateJavaScript( "jsObject.postMessage('World')", OnEvaluateJavaScript );
477 Test::EmitGlobalTimerSignal();
479 DALI_TEST_EQUALS( gEvaluateJavaScriptCallbackCalled, 1, TEST_LOCATION );
485 int UtcDaliWebViewMethodsForCoverage(void)
487 ToolkitTestApplication application;
489 WebView view = WebView::New( "ko-KR", "Asia/Seoul" );
491 view.LoadHTMLString( "<body>Hello World!</body>" );
492 view.AddJavaScriptMessageHandler( "jsObject",
493 []( const std::string& arg ) {
497 DALI_TEST_CHECK( view );