e2ee8e6dc4ac8b181872d952ecc6f0cec7b8b689
[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 bool gTouched = false;
43
44 struct CallbackFunctor
45 {
46   CallbackFunctor(bool* callbackFlag)
47   : mCallbackFlag( callbackFlag )
48   {
49   }
50
51   void operator()()
52   {
53     *mCallbackFlag = true;
54   }
55   bool* mCallbackFlag;
56 };
57
58 static void OnPageLoadStarted( WebView view, const std::string& url )
59 {
60   gPageLoadStartedCallbackCalled++;
61 }
62
63 static void OnPageLoadFinished( WebView view, const std::string& url )
64 {
65   gPageLoadFinishedCallbackCalled++;
66 }
67
68 static bool OnTouched( Actor actor, const Dali::TouchData& touch )
69 {
70   gTouched = true;
71   return true;
72 }
73
74 } // namespace
75
76 void web_view_startup(void)
77 {
78   test_return_value = TET_UNDEF;
79 }
80
81 void web_view_cleanup(void)
82 {
83   test_return_value = TET_PASS;
84 }
85
86 int UtcDaliWebViewBasics(void)
87 {
88   ToolkitTestApplication application;
89
90   // Copy and Assignment Test
91   tet_infoline( "UtcDaliWebViewBasic Copy and Assignment Test" );
92   WebView view = WebView::New();
93   DALI_TEST_CHECK( view );
94
95   WebView copy( view );
96   DALI_TEST_CHECK( view == copy );
97
98   WebView assign;
99   DALI_TEST_CHECK( !assign );
100
101   assign = copy;
102   DALI_TEST_CHECK( assign == view );
103
104
105   // DownCast Test
106   tet_infoline( "UtcDaliWebViewBasic DownCast Test" );
107   BaseHandle handle(view);
108
109   WebView view2 = WebView::DownCast( handle );
110   DALI_TEST_CHECK( view );
111   DALI_TEST_CHECK( view2 );
112   DALI_TEST_CHECK( view == view2 );
113
114
115   // TypeRegistry Test
116   tet_infoline( "UtcDaliWebViewBasic TypeRegistry Test" );
117   TypeRegistry typeRegistry = TypeRegistry::Get();
118   DALI_TEST_CHECK( typeRegistry );
119
120   TypeInfo typeInfo = typeRegistry.GetTypeInfo( "WebView" );
121   DALI_TEST_CHECK( typeInfo );
122
123   BaseHandle handle2 = typeInfo.CreateInstance();
124   DALI_TEST_CHECK( handle2 );
125
126   WebView view3 = WebView::DownCast( handle2 );
127   DALI_TEST_CHECK( view3 );
128
129   END_TEST;
130 }
131
132 int UtcDaliWebViewPageNavigation(void)
133 {
134   ToolkitTestApplication application;
135
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 );
145
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 );
157
158
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 );
168
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 );
179
180   view.GoBack();
181   Test::EmitGlobalTimerSignal();
182   DALI_TEST_CHECK( !view.CanGoBack() );
183   DALI_TEST_CHECK( view.CanGoForward() );
184
185   view.GoForward();
186   Test::EmitGlobalTimerSignal();
187   DALI_TEST_CHECK( view.CanGoBack() );
188   DALI_TEST_CHECK( !view.CanGoForward() );
189
190   view.Reload();
191   view.StopLoading();
192   view.ClearHistory();
193   view.ClearCache();
194   Test::EmitGlobalTimerSignal();
195   DALI_TEST_CHECK( !view.CanGoBack() );
196   DALI_TEST_CHECK( !view.CanGoForward() );
197
198   END_TEST;
199 }
200
201 int UtcDaliWebViewTouchAndKeys(void)
202 {
203   ToolkitTestApplication application;
204
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 );
210
211   Stage::GetCurrent().Add( view );
212   application.SendNotification();
213   application.Render();
214
215   view.GetNaturalSize();
216   view.TouchSignal().Connect( &OnTouched );
217
218   // Touch event
219   Dali::Integration::TouchEvent event;
220   Dali::Integration::Point pointDown, pointUp;
221
222   event = Dali::Integration::TouchEvent();
223   pointDown.SetState( PointState::DOWN );
224   pointDown.SetScreenPosition( Vector2( 10, 10 ) );
225   event.AddPoint( pointDown );
226   application.ProcessEvent( event );
227
228   event = Dali::Integration::TouchEvent();
229   pointUp.SetState( PointState::UP );
230   pointUp.SetScreenPosition( Vector2( 10, 10 ) );
231   event.AddPoint( pointUp );
232   application.ProcessEvent( event );
233
234   // Key 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();
238
239   DALI_TEST_CHECK( gTouched );
240   DALI_TEST_CHECK( view );
241
242   END_TEST;
243 }
244
245 int UtcDaliWebViewProperty1(void)
246 {
247   ToolkitTestApplication application;
248
249   WebView view = WebView::New();
250   DALI_TEST_CHECK( view );
251
252   std::string local;
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 );
257
258   END_TEST;
259 }
260
261 int UtcDaliWebViewMethodsForCoverage(void)
262 {
263   ToolkitTestApplication application;
264
265   WebView view = WebView::New( "ko-KR", "Asia/Seoul" );
266
267   view.LoadHTMLString( "<body>Hello World!</body>" );
268   view.AddJavaScriptInterface( "jsObject", "jsFunction",
269     []( const std::string& arg ) -> std::string {
270       return arg + " World!";
271     }
272   );
273   view.EvaluateJavaScript( "jsObject.jsFunction('Hello')" );
274   view.RemoveJavascriptInterface( "jsObject", "jsFunction" );
275
276   DALI_TEST_CHECK( view );
277
278   END_TEST;
279 }