Upload package dali_0.9.11.
[platform/core/uifw/dali-core.git] / automated-tests / TET / dali-test-suite / actors / utc-Dali-Stage.cpp
1 //
2 // Copyright (c) 2014 Samsung Electronics Co., Ltd.
3 //
4 // Licensed under the Flora License, Version 1.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://floralicense.org/license/
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 #include <iostream>
18
19 #include <stdlib.h>
20 #include <tet_api.h>
21
22 #include <dali/public-api/dali-core.h>
23 #include <dali/integration-api/events/key-event-integ.h>
24 #include <dali/integration-api/events/touch-event-integ.h>
25
26 #include <dali-test-suite-utils.h>
27
28 using namespace Dali;
29 using namespace std;
30
31 static void Startup();
32 static void Cleanup();
33
34 extern "C"
35 {
36   void (*tet_startup)() = Startup;
37   void (*tet_cleanup)() = Cleanup;
38 }
39
40 enum
41 {
42   POSITIVE_TC_IDX = 0x01,
43   NEGATIVE_TC_IDX,
44 };
45
46 #define MAX_NUMBER_OF_TESTS 10000
47 extern "C" {
48   struct tet_testlist tet_testlist[MAX_NUMBER_OF_TESTS];
49 }
50
51 // Add test functionality for all APIs in the class (Positive and Negative)
52 TEST_FUNCTION( UtcDaliStageDefaultConstructor, POSITIVE_TC_IDX );
53 TEST_FUNCTION( UtcDaliStageDestructor, POSITIVE_TC_IDX );
54 TEST_FUNCTION( UtcDaliStageGetCurrent, POSITIVE_TC_IDX );
55 TEST_FUNCTION( UtcDaliStageIsInstalled, POSITIVE_TC_IDX );
56 TEST_FUNCTION( UtcDaliStageAdd, POSITIVE_TC_IDX );
57 TEST_FUNCTION( UtcDaliStageRemove, POSITIVE_TC_IDX );
58 TEST_FUNCTION( UtcDaliStageGetSize, POSITIVE_TC_IDX );
59 TEST_FUNCTION( UtcDaliStageGetLayerCount, POSITIVE_TC_IDX );
60 TEST_FUNCTION( UtcDaliStageGetLayer, POSITIVE_TC_IDX );
61 TEST_FUNCTION( UtcDaliStageGetRootLayer, POSITIVE_TC_IDX );
62 TEST_FUNCTION( UtcDaliStageSetBackgroundColor, POSITIVE_TC_IDX );
63 TEST_FUNCTION( UtcDaliStageGetBackgroundColor, POSITIVE_TC_IDX );
64 TEST_FUNCTION( UtcDaliStageGetDpi01, POSITIVE_TC_IDX );
65 TEST_FUNCTION( UtcDaliStageGetDpi02, POSITIVE_TC_IDX );
66 TEST_FUNCTION( UtcDaliStageGetDpi03, POSITIVE_TC_IDX );
67 TEST_FUNCTION( UtcDaliStageInitializeDynamics, POSITIVE_TC_IDX );
68 TEST_FUNCTION( UtcDaliStageGetDynamicsWorld, POSITIVE_TC_IDX );
69 TEST_FUNCTION( UtcDaliStageTerminateDynamics, POSITIVE_TC_IDX );
70 TEST_FUNCTION( UtcDaliStageKeepRendering, POSITIVE_TC_IDX );
71 TEST_FUNCTION( UtcDaliStageEventProcessingFinished, POSITIVE_TC_IDX );
72 TEST_FUNCTION( UtcDaliStageSignalKeyEvent, POSITIVE_TC_IDX );
73 TEST_FUNCTION( UtcDaliStageTouchedSignal, POSITIVE_TC_IDX );
74
75 namespace
76 {
77
78 /**
79  * Functor for EventProcessingFinished signal
80  */
81 struct EventProcessingFinishedFunctor
82 {
83   /**
84    * @param[in] eventProcessingFinished reference to a boolean variable used to check if signal has been called.
85    */
86   EventProcessingFinishedFunctor( bool& eventProcessingFinished )
87   : mEventProcessingFinished( eventProcessingFinished )
88   {}
89
90   void operator()()
91   {
92     mEventProcessingFinished = true;
93   }
94
95   bool& mEventProcessingFinished;
96 };
97
98 // Stores data that is populated in the key-event callback and will be read by the TET cases
99 struct KeyEventSignalData
100 {
101   KeyEventSignalData()
102   : functorCalled(false)
103   {}
104
105   void Reset()
106   {
107     functorCalled = false;
108
109     receivedKeyEvent.keyModifier = 0;
110     receivedKeyEvent.keyPressedName.clear();
111     receivedKeyEvent.keyPressed.clear();
112   }
113
114   bool functorCalled;
115   KeyEvent receivedKeyEvent;
116 };
117
118 // Functor that sets the data when called
119 struct KeyEventReceivedFunctor
120 {
121   KeyEventReceivedFunctor( KeyEventSignalData& data ) : signalData( data ) { }
122
123   bool operator()( const KeyEvent& keyEvent )
124   {
125     signalData.functorCalled = true;
126     signalData.receivedKeyEvent = keyEvent;
127
128     return true;
129   }
130
131   KeyEventSignalData& signalData;
132 };
133
134 // Stores data that is populated in the touched signal callback and will be read by the TET cases
135 struct TouchedSignalData
136 {
137   TouchedSignalData()
138   : functorCalled(false)
139   {}
140
141   void Reset()
142   {
143     functorCalled = false;
144
145     receivedTouchEvent.points.clear();
146     receivedTouchEvent.time = 0;
147   }
148
149   bool functorCalled;
150   TouchEvent receivedTouchEvent;
151 };
152
153 // Functor that sets the data when touched signal is received
154 struct TouchedFunctor
155 {
156   TouchedFunctor( TouchedSignalData& data ) : signalData( data ) { }
157
158   void operator()( const TouchEvent& touch )
159   {
160     signalData.functorCalled = true;
161     signalData.receivedTouchEvent = touch;
162   }
163
164   TouchedSignalData& signalData;
165 };
166
167 bool DummyTouchCallback( Actor actor, const TouchEvent& touch )
168 {
169   return true;
170 }
171
172 } // unnamed namespace
173
174 // Called only once before first test is run.
175 static void Startup()
176 {
177   // THERE IS NO MAINLOOP IN THE TEST APPLICATION
178 }
179
180 // Called only once after last test is run
181 static void Cleanup()
182 {
183 }
184
185 static void UtcDaliStageDefaultConstructor()
186 {
187   TestApplication application;
188   Stage stage;
189
190   DALI_TEST_CHECK(!stage);
191 }
192
193 static void UtcDaliStageDestructor()
194 {
195   TestApplication application;
196   Stage* stage = new Stage();
197   delete stage;
198   stage = NULL;
199
200   DALI_TEST_CHECK( true );
201 }
202
203 static void UtcDaliStageGetCurrent()
204 {
205   TestApplication application;
206   Stage stage = Stage::GetCurrent();
207
208   DALI_TEST_CHECK(stage);
209 }
210
211 static void UtcDaliStageIsInstalled()
212 {
213   DALI_TEST_CHECK(!Stage::IsInstalled());
214
215   TestApplication application;
216
217   Stage::GetCurrent();
218
219   DALI_TEST_CHECK(Stage::IsInstalled());
220 }
221
222 static void UtcDaliStageAdd()
223 {
224   TestApplication application;
225
226   Stage stage = Stage::GetCurrent();
227
228   Actor actor = Actor::New();
229   DALI_TEST_CHECK(!actor.OnStage());
230
231   stage.Add(actor);
232   DALI_TEST_CHECK(actor.OnStage());
233 }
234
235 static void UtcDaliStageRemove()
236 {
237   TestApplication application;
238
239   Stage stage = Stage::GetCurrent();
240
241   Actor actor = Actor::New();
242   DALI_TEST_CHECK(!actor.OnStage());
243
244   stage.Add(actor);
245   DALI_TEST_CHECK(actor.OnStage());
246
247   stage.Remove(actor);
248   DALI_TEST_CHECK(!actor.OnStage());
249 }
250
251 static void UtcDaliStageGetSize()
252 {
253   TestApplication application;
254
255   Stage stage = Stage::GetCurrent();
256
257   Vector2 size = stage.GetSize();
258
259   DALI_TEST_EQUALS(size.width,  static_cast<float>(TestApplication::DEFAULT_SURFACE_WIDTH),  TEST_LOCATION);
260   DALI_TEST_EQUALS(size.height, static_cast<float>(TestApplication::DEFAULT_SURFACE_HEIGHT), TEST_LOCATION);
261 }
262
263 static void UtcDaliStageGetDpi01()
264 {
265   TestApplication application; // Initializes core DPI to default values
266
267   Stage stage = Stage::GetCurrent();
268
269   // Test the default DPI.
270   Vector2 dpi = stage.GetDpi();
271   DALI_TEST_EQUALS(dpi.x, static_cast<float>(TestApplication::DEFAULT_HORIZONTAL_DPI), TEST_LOCATION);
272   DALI_TEST_EQUALS(dpi.y, static_cast<float>(TestApplication::DEFAULT_VERTICAL_DPI),   TEST_LOCATION);
273 }
274
275 static void UtcDaliStageGetDpi02()
276 {
277   TestApplication application; // Initializes core DPI to default values
278
279   // Test that setting core DPI explicitly also sets up the Stage's DPI.
280   application.GetCore().SetDpi(200, 180);
281
282   Stage stage = Stage::GetCurrent();
283   Vector2 dpi = stage.GetDpi();
284   DALI_TEST_EQUALS(dpi.x, 200.0f, TEST_LOCATION);
285   DALI_TEST_EQUALS(dpi.y, 180.0f, TEST_LOCATION);
286 }
287
288
289 static void UtcDaliStageGetDpi03()
290 {
291   TestApplication application(480, 800, 72.0f, 120.0f); // Initializes core DPI with specific values
292
293   Stage stage = Stage::GetCurrent();
294
295   // Test that setting core DPI explicitly also sets up the Stage's DPI.
296   Vector2 dpi = stage.GetDpi();
297   DALI_TEST_EQUALS(dpi.x, 72.0f, TEST_LOCATION);
298   DALI_TEST_EQUALS(dpi.y, 120.0f, TEST_LOCATION);
299 }
300
301 static void UtcDaliStageInitializeDynamics()
302 {
303   TestApplication application;
304
305   Stage stage = Stage::GetCurrent();
306
307   DALI_TEST_CHECK( !stage.InitializeDynamics( DynamicsWorldConfig::New() ) );
308 }
309
310 static void UtcDaliStageGetDynamicsWorld()
311 {
312   TestApplication application;
313
314   Stage stage = Stage::GetCurrent();
315
316   DALI_TEST_CHECK( !stage.GetDynamicsWorld() );
317 }
318
319 static void UtcDaliStageTerminateDynamics()
320 {
321   TestApplication application;
322
323   Stage stage = Stage::GetCurrent();
324
325   stage.TerminateDynamics();
326
327   DALI_TEST_CHECK( !stage.GetDynamicsWorld() );
328 }
329
330 static void UtcDaliStageGetLayerCount()
331 {
332   TestApplication application;
333
334   Stage stage = Stage::GetCurrent();
335
336   // Initially we have a default layer
337   DALI_TEST_EQUALS(stage.GetLayerCount(), 1u, TEST_LOCATION);
338
339   Layer layer = Layer::New();
340   stage.Add(layer);
341
342   DALI_TEST_EQUALS(stage.GetLayerCount(), 2u, TEST_LOCATION);
343 }
344
345 static void UtcDaliStageGetLayer()
346 {
347   TestApplication application;
348
349   Stage stage = Stage::GetCurrent();
350
351   Layer rootLayer = stage.GetLayer(0);
352   DALI_TEST_CHECK(rootLayer);
353
354   Layer layer = Layer::New();
355   stage.Add(layer);
356
357   Layer sameLayer = stage.GetLayer(1);
358   DALI_TEST_CHECK(layer == sameLayer);
359 }
360
361
362 static void UtcDaliStageGetRootLayer()
363 {
364   TestApplication application;
365
366   Stage stage = Stage::GetCurrent();
367
368   Layer rootLayer = stage.GetLayer(0);
369   DALI_TEST_CHECK( rootLayer );
370
371   Layer layer = Layer::New();
372   stage.Add( layer );
373   layer.LowerToBottom();
374
375   DALI_TEST_CHECK( stage.GetRootLayer() == rootLayer );
376 }
377
378 static void UtcDaliStageSetBackgroundColor()
379 {
380   TestApplication application;
381
382   Stage stage = Stage::GetCurrent();
383
384   Vector4 testColor(0.1f, 0.2f, 0.3f, 1.0f);
385   stage.SetBackgroundColor(testColor);
386
387   DALI_TEST_EQUALS(testColor, stage.GetBackgroundColor(), TEST_LOCATION);
388 }
389
390 static void UtcDaliStageGetBackgroundColor()
391 {
392   TestApplication application;
393
394   Stage stage = Stage::GetCurrent();
395
396   DALI_TEST_EQUALS(Stage::DEFAULT_BACKGROUND_COLOR, stage.GetBackgroundColor(), TEST_LOCATION);
397 }
398
399 static void UtcDaliStageKeepRendering()
400 {
401   TestApplication application;
402
403   Stage stage = Stage::GetCurrent();
404
405   // Run core until it wants to sleep
406   bool keepUpdating( true );
407   while ( keepUpdating )
408   {
409     application.SendNotification();
410     keepUpdating = application.Render(1000.0f /*1 second*/);
411   }
412
413   // Force rendering for the next 5 seconds
414   stage.KeepRendering( 5.0f );
415
416   application.SendNotification();
417
418   // Test that core wants to sleep after 10 seconds
419   keepUpdating = application.Render(1000.0f /*1 second*/);
420   DALI_TEST_CHECK( keepUpdating );
421   keepUpdating = application.Render(1000.0f /*2 seconds*/);
422   DALI_TEST_CHECK( keepUpdating );
423   keepUpdating = application.Render(1000.0f /*3 seconds*/);
424   DALI_TEST_CHECK( keepUpdating );
425   keepUpdating = application.Render(1000.0f /*4 seconds*/);
426   DALI_TEST_CHECK( keepUpdating );
427   keepUpdating = application.Render(1000.0f /*5 seconds*/);
428   DALI_TEST_CHECK( !keepUpdating );
429 }
430
431 static void UtcDaliStageEventProcessingFinished()
432 {
433   TestApplication application;
434   Stage stage = Stage::GetCurrent();
435
436   bool eventProcessingFinished = false;
437   EventProcessingFinishedFunctor functor( eventProcessingFinished );
438   stage.EventProcessingFinishedSignal().Connect( &application, functor );
439
440   Actor actor( Actor::New() );
441   stage.Add( actor );
442
443   application.SendNotification();
444   application.Render();
445
446   DALI_TEST_CHECK( eventProcessingFinished );
447
448 }
449
450 static void UtcDaliStageSignalKeyEvent()
451 {
452   TestApplication application;
453   Stage stage = Stage::GetCurrent();
454
455   KeyEventSignalData data;
456   KeyEventReceivedFunctor functor( data );
457   stage.KeyEventSignal().Connect( &application, functor );
458
459   Integration::KeyEvent event( "i","i", 0, 0, 0, Integration::KeyEvent::Down );
460   application.ProcessEvent( event );
461
462   DALI_TEST_EQUALS( true, data.functorCalled, TEST_LOCATION );
463   DALI_TEST_CHECK( event.keyModifier == data.receivedKeyEvent.keyModifier );
464   DALI_TEST_CHECK( event.keyName == data.receivedKeyEvent.keyPressedName );
465   DALI_TEST_CHECK( event.keyString == data.receivedKeyEvent.keyPressed );
466   DALI_TEST_CHECK( event.state == static_cast<Integration::KeyEvent::State>(data.receivedKeyEvent.state) );
467
468   data.Reset();
469
470   Integration::KeyEvent event2( "i","i", 0, 0, 0, Integration::KeyEvent::Up );
471   application.ProcessEvent( event2 );
472
473   DALI_TEST_EQUALS( true, data.functorCalled, TEST_LOCATION );
474   DALI_TEST_CHECK( event2.keyModifier == data.receivedKeyEvent.keyModifier );
475   DALI_TEST_CHECK( event2.keyName == data.receivedKeyEvent.keyPressedName );
476   DALI_TEST_CHECK( event2.keyString == data.receivedKeyEvent.keyPressed );
477   DALI_TEST_CHECK( event2.state == static_cast<Integration::KeyEvent::State>(data.receivedKeyEvent.state) );
478
479   data.Reset();
480
481   Integration::KeyEvent event3( "a","a", 0, 0, 0, Integration::KeyEvent::Down );
482   application.ProcessEvent( event3 );
483
484   DALI_TEST_EQUALS( true, data.functorCalled, TEST_LOCATION );
485   DALI_TEST_CHECK( event3.keyModifier == data.receivedKeyEvent.keyModifier );
486   DALI_TEST_CHECK( event3.keyName == data.receivedKeyEvent.keyPressedName );
487   DALI_TEST_CHECK( event3.keyString == data.receivedKeyEvent.keyPressed );
488   DALI_TEST_CHECK( event3.state == static_cast<Integration::KeyEvent::State>(data.receivedKeyEvent.state) );
489
490   data.Reset();
491
492   Integration::KeyEvent event4( "a","a", 0, 0, 0, Integration::KeyEvent::Up );
493   application.ProcessEvent( event4 );
494
495   DALI_TEST_EQUALS( true, data.functorCalled, TEST_LOCATION );
496   DALI_TEST_CHECK( event4.keyModifier == data.receivedKeyEvent.keyModifier );
497   DALI_TEST_CHECK( event4.keyName == data.receivedKeyEvent.keyPressedName );
498   DALI_TEST_CHECK( event4.keyString == data.receivedKeyEvent.keyPressed );
499   DALI_TEST_CHECK( event4.state == static_cast<Integration::KeyEvent::State>(data.receivedKeyEvent.state) );
500 }
501
502 void UtcDaliStageTouchedSignal()
503 {
504   TestApplication application;
505   Stage stage = Stage::GetCurrent();
506
507   TouchedSignalData data;
508   TouchedFunctor functor( data );
509   stage.TouchedSignal().Connect( &application, functor );
510
511   // Render and notify
512   application.SendNotification();
513   application.Render();
514
515   // NO ACTORS, SINGLE TOUCH, DOWN, MOTION THEN UP
516   {
517     Integration::TouchEvent touchEvent;
518     touchEvent.points.push_back( TouchPoint( 0, TouchPoint::Down, 10.0f, 10.0f ) );
519     application.ProcessEvent( touchEvent );
520
521     DALI_TEST_EQUALS( true, data.functorCalled, TEST_LOCATION );
522     DALI_TEST_CHECK( data.receivedTouchEvent.GetPointCount() != 0 );
523     DALI_TEST_CHECK( !data.receivedTouchEvent.points[0].hitActor );
524     data.Reset();
525
526     touchEvent.points[0].state = TouchPoint::Motion;
527     touchEvent.points[0].screen.x = 12.0f; // Some motion
528     application.ProcessEvent( touchEvent );
529
530     DALI_TEST_EQUALS( false, data.functorCalled, TEST_LOCATION );
531     data.Reset();
532
533     touchEvent.points[0].state = TouchPoint::Up;
534     application.ProcessEvent( touchEvent );
535
536     DALI_TEST_EQUALS( true, data.functorCalled, TEST_LOCATION );
537     DALI_TEST_CHECK( data.receivedTouchEvent.GetPointCount() != 0 );
538     DALI_TEST_CHECK( !data.receivedTouchEvent.points[0].hitActor );
539     data.Reset();
540   }
541
542   // Add an actor to the scene
543
544   Actor actor = Actor::New();
545   actor.SetSize( 100.0f, 100.0f );
546   actor.SetAnchorPoint( AnchorPoint::TOP_LEFT );
547   actor.SetParentOrigin( ParentOrigin::TOP_LEFT );
548   actor.TouchedSignal().Connect( &DummyTouchCallback );
549   stage.Add( actor );
550
551   // Render and notify
552   application.SendNotification();
553   application.Render();
554
555   // ACTOR ON SCENE, SINGLE TOUCH, DOWN IN ACTOR, MOTION THEN UP OUTSIDE ACTOR
556   {
557     Integration::TouchEvent touchEvent;
558     touchEvent.points.push_back( TouchPoint( 0, TouchPoint::Down, 10.0f, 10.0f ) );
559     application.ProcessEvent( touchEvent );
560
561     DALI_TEST_EQUALS( true, data.functorCalled, TEST_LOCATION );
562     DALI_TEST_CHECK( data.receivedTouchEvent.GetPointCount() != 0 );
563     DALI_TEST_CHECK( data.receivedTouchEvent.points[0].hitActor == actor );
564     data.Reset();
565
566     touchEvent.points[0].state = TouchPoint::Motion;
567     touchEvent.points[0].screen.x = 150.0f; // Some motion
568     application.ProcessEvent( touchEvent );
569
570     DALI_TEST_EQUALS( false, data.functorCalled, TEST_LOCATION );
571     data.Reset();
572
573     touchEvent.points[0].state = TouchPoint::Up;
574     application.ProcessEvent( touchEvent );
575
576     DALI_TEST_EQUALS( true, data.functorCalled, TEST_LOCATION );
577     DALI_TEST_CHECK( data.receivedTouchEvent.GetPointCount() != 0 );
578     DALI_TEST_CHECK( !data.receivedTouchEvent.points[0].hitActor );
579     data.Reset();
580   }
581
582   // INTERRUPTED BEFORE DOWN AND INTERRUPTED AFTER DOWN
583   {
584     Integration::TouchEvent touchEvent;
585     touchEvent.points.push_back( TouchPoint( 0, TouchPoint::Interrupted, 10.0f, 10.0f ) );
586     application.ProcessEvent( touchEvent );
587
588     DALI_TEST_EQUALS( true, data.functorCalled, TEST_LOCATION );
589     DALI_TEST_CHECK( data.receivedTouchEvent.GetPointCount() != 0 );
590     DALI_TEST_CHECK( !data.receivedTouchEvent.points[0].hitActor );
591     DALI_TEST_CHECK( data.receivedTouchEvent.points[0].state == TouchPoint::Interrupted );
592     data.Reset();
593
594     touchEvent.points[0].state = TouchPoint::Down;
595     application.ProcessEvent( touchEvent );
596
597     DALI_TEST_EQUALS( true, data.functorCalled, TEST_LOCATION );
598     DALI_TEST_CHECK( data.receivedTouchEvent.GetPointCount() != 0 );
599     DALI_TEST_CHECK( data.receivedTouchEvent.points[0].hitActor == actor );
600     DALI_TEST_CHECK( data.receivedTouchEvent.points[0].state == TouchPoint::Down );
601     data.Reset();
602
603     touchEvent.points[0].state = TouchPoint::Interrupted;
604     application.ProcessEvent( touchEvent );
605
606     DALI_TEST_EQUALS( true, data.functorCalled, TEST_LOCATION );
607     DALI_TEST_CHECK( data.receivedTouchEvent.GetPointCount() != 0 );
608     DALI_TEST_CHECK( !data.receivedTouchEvent.points[0].hitActor );
609     DALI_TEST_CHECK( data.receivedTouchEvent.points[0].state == TouchPoint::Interrupted );
610     data.Reset();
611   }
612
613   // MULTIPLE TOUCH, SHOULD ONLY RECEIVE TOUCH ON FIRST DOWN AND LAST UP
614   {
615     Integration::TouchEvent touchEvent;
616
617     // 1st point
618     touchEvent.points.push_back( TouchPoint( 0, TouchPoint::Down, 10.0f, 10.0f ) );
619     application.ProcessEvent( touchEvent );
620     DALI_TEST_EQUALS( true, data.functorCalled, TEST_LOCATION );
621     data.Reset();
622
623     // 2nd point
624     touchEvent.points[0].state = TouchPoint::Stationary;
625     touchEvent.points.push_back( TouchPoint( 1, TouchPoint::Down, 50.0f, 50.0f ) );
626     application.ProcessEvent( touchEvent );
627     DALI_TEST_EQUALS( false, data.functorCalled, TEST_LOCATION );
628     data.Reset();
629
630     // Primary point is up
631     touchEvent.points[0].state = TouchPoint::Up;
632     touchEvent.points[1].state = TouchPoint::Stationary;
633     application.ProcessEvent( touchEvent );
634     DALI_TEST_EQUALS( false, data.functorCalled, TEST_LOCATION );
635     data.Reset();
636
637     // Remove 1st point now, 2nd point is now in motion
638     touchEvent.points.erase( touchEvent.points.begin() );
639     touchEvent.points[0].state = TouchPoint::Motion;
640     touchEvent.points[0].screen.x = 150.0f;
641     application.ProcessEvent( touchEvent );
642     DALI_TEST_EQUALS( false, data.functorCalled, TEST_LOCATION );
643     data.Reset();
644
645     // Final point Up
646     touchEvent.points[0].state = TouchPoint::Up;
647     application.ProcessEvent( touchEvent );
648     DALI_TEST_EQUALS( true, data.functorCalled, TEST_LOCATION );
649     data.Reset();
650   }
651 }