2 * Copyright (c) 2018 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 bool gTouched = false;
44 struct CallbackFunctor
46 CallbackFunctor(bool* callbackFlag)
47 : mCallbackFlag( callbackFlag )
53 *mCallbackFlag = true;
58 static void OnPageLoadStarted( WebView view, const std::string& url )
60 gPageLoadStartedCallbackCalled++;
63 static void OnPageLoadFinished( WebView view, const std::string& url )
65 gPageLoadFinishedCallbackCalled++;
68 static bool OnTouched( Actor actor, const Dali::TouchData& touch )
76 void web_view_startup(void)
78 test_return_value = TET_UNDEF;
81 void web_view_cleanup(void)
83 test_return_value = TET_PASS;
86 int UtcDaliWebViewBasics(void)
88 ToolkitTestApplication application;
90 // Copy and Assignment Test
91 tet_infoline( "UtcDaliWebViewBasic Copy and Assignment Test" );
92 WebView view = WebView::New();
93 DALI_TEST_CHECK( view );
96 DALI_TEST_CHECK( view == copy );
99 DALI_TEST_CHECK( !assign );
102 DALI_TEST_CHECK( assign == view );
106 tet_infoline( "UtcDaliWebViewBasic DownCast Test" );
107 BaseHandle handle(view);
109 WebView view2 = WebView::DownCast( handle );
110 DALI_TEST_CHECK( view );
111 DALI_TEST_CHECK( view2 );
112 DALI_TEST_CHECK( view == view2 );
116 tet_infoline( "UtcDaliWebViewBasic TypeRegistry Test" );
117 TypeRegistry typeRegistry = TypeRegistry::Get();
118 DALI_TEST_CHECK( typeRegistry );
120 TypeInfo typeInfo = typeRegistry.GetTypeInfo( "WebView" );
121 DALI_TEST_CHECK( typeInfo );
123 BaseHandle handle2 = typeInfo.CreateInstance();
124 DALI_TEST_CHECK( handle2 );
126 WebView view3 = WebView::DownCast( handle2 );
127 DALI_TEST_CHECK( view3 );
132 int UtcDaliWebViewPageNavigation(void)
134 ToolkitTestApplication application;
136 WebView view = WebView::New();
137 view.SetAnchorPoint( AnchorPoint::TOP_LEFT );
138 view.SetParentOrigin( ParentOrigin::TOP_LEFT );
139 view.SetPosition( 0, 0 );
140 view.SetSize( 800, 600 );
141 Stage::GetCurrent().Add( view );
142 application.SendNotification();
143 application.Render();
144 DALI_TEST_CHECK( view );
146 ConnectionTracker* testTracker = new ConnectionTracker();
147 view.PageLoadStartedSignal().Connect( &OnPageLoadStarted );
148 view.PageLoadFinishedSignal().Connect( &OnPageLoadFinished );
149 bool signal1 = false;
150 bool signal2 = false;
151 bool signal3 = false;
152 view.ConnectSignal( testTracker, "pageLoadStarted", CallbackFunctor(&signal1) );
153 view.ConnectSignal( testTracker, "pageLoadFinished", CallbackFunctor(&signal2) );
154 view.ConnectSignal( testTracker, "invalidname", CallbackFunctor(&signal3) );
155 DALI_TEST_EQUALS( gPageLoadStartedCallbackCalled, 0, TEST_LOCATION );
156 DALI_TEST_EQUALS( gPageLoadFinishedCallbackCalled, 0, TEST_LOCATION );
159 view.LoadUrl( TEST_URL1 );
160 view.GetNaturalSize();
161 Test::EmitGlobalTimerSignal();
162 DALI_TEST_CHECK( view.GetUrl().find( TEST_URL1 ) != std::string::npos );
163 DALI_TEST_EQUALS( view.CanGoBack(), false, TEST_LOCATION );
164 DALI_TEST_EQUALS( gPageLoadStartedCallbackCalled, 1, TEST_LOCATION );
165 DALI_TEST_EQUALS( gPageLoadFinishedCallbackCalled, 1, TEST_LOCATION );
166 DALI_TEST_CHECK( signal1 & signal2 );
167 DALI_TEST_CHECK( !signal3 );
169 view.LoadUrl( TEST_URL2 );
170 view.SetSize( 400, 300 );
171 application.SendNotification();
172 application.Render();
173 Test::EmitGlobalTimerSignal();
174 DALI_TEST_CHECK( view.GetUrl().find( TEST_URL2 ) != std::string::npos );
175 DALI_TEST_EQUALS( view.CanGoBack(), true, TEST_LOCATION );
176 DALI_TEST_EQUALS( view.CanGoForward(), false, TEST_LOCATION );
177 DALI_TEST_EQUALS( gPageLoadStartedCallbackCalled, 2, TEST_LOCATION );
178 DALI_TEST_EQUALS( gPageLoadFinishedCallbackCalled, 2, TEST_LOCATION );
181 Test::EmitGlobalTimerSignal();
182 DALI_TEST_CHECK( !view.CanGoBack() );
183 DALI_TEST_CHECK( view.CanGoForward() );
186 Test::EmitGlobalTimerSignal();
187 DALI_TEST_CHECK( view.CanGoBack() );
188 DALI_TEST_CHECK( !view.CanGoForward() );
194 Test::EmitGlobalTimerSignal();
195 DALI_TEST_CHECK( !view.CanGoBack() );
196 DALI_TEST_CHECK( !view.CanGoForward() );
201 int UtcDaliWebViewTouchAndKeys(void)
203 ToolkitTestApplication application;
205 WebView view = WebView::New();
206 view.SetAnchorPoint( AnchorPoint::TOP_LEFT );
207 view.SetParentOrigin( ParentOrigin::TOP_LEFT );
208 view.SetPosition( 0, 0 );
209 view.SetSize( 800, 600 );
211 Stage::GetCurrent().Add( view );
212 application.SendNotification();
213 application.Render();
215 view.GetNaturalSize();
216 view.TouchSignal().Connect( &OnTouched );
219 Dali::Integration::TouchEvent event;
220 Dali::Integration::Point pointDown, pointUp;
222 event = Dali::Integration::TouchEvent();
223 pointDown.SetState( PointState::DOWN );
224 pointDown.SetScreenPosition( Vector2( 10, 10 ) );
225 event.AddPoint( pointDown );
226 application.ProcessEvent( event );
228 event = Dali::Integration::TouchEvent();
229 pointUp.SetState( PointState::UP );
230 pointUp.SetScreenPosition( Vector2( 10, 10 ) );
231 event.AddPoint( pointUp );
232 application.ProcessEvent( event );
235 Toolkit::KeyboardFocusManager::Get().SetCurrentFocusActor( view );
236 application.ProcessEvent( Integration::KeyEvent( "", "", "", DALI_KEY_ESCAPE, 0, 0, Integration::KeyEvent::Down, "", "", Device::Class::NONE, Device::Subclass::NONE ) );
237 application.SendNotification();
239 DALI_TEST_CHECK( gTouched );
240 DALI_TEST_CHECK( view );
245 int UtcDaliWebViewProperty1(void)
247 ToolkitTestApplication application;
249 WebView view = WebView::New();
250 DALI_TEST_CHECK( view );
253 view.SetProperty( WebView::Property::URL, TEST_URL1 );
254 Property::Value val = view.GetProperty( WebView::Property::URL );
255 DALI_TEST_CHECK( val.Get( local ) );
256 DALI_TEST_EQUALS( local, TEST_URL1, TEST_LOCATION );
261 int UtcDaliWebViewMethodsForCoverage(void)
263 ToolkitTestApplication application;
265 WebView view = WebView::New( "ko-KR", "Asia/Seoul" );
267 view.LoadHTMLString( "<body>Hello World!</body>" );
268 view.AddJavaScriptMessageHandler( "jsObject",
269 []( const std::string& arg ) {
272 view.EvaluateJavaScript( "jsObject.postMessage('Hello')" );
274 DALI_TEST_CHECK( view );