21076e2a3982cba60d91dff354ed3c3810dcc2de
[platform/core/uifw/dali-core.git] / automated-tests / src / dali / utc-Dali-Scene.cpp
1 /*
2  * Copyright (c) 2016 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
20 #include <stdlib.h>
21 #include <dali/integration-api/scene.h>
22 #include <dali/integration-api/events/key-event-integ.h>
23 #include <dali/public-api/events/key-event.h>
24 #include <dali/integration-api/events/touch-event-integ.h>
25 #include <dali/integration-api/events/wheel-event-integ.h>
26
27 #include <dali-test-suite-utils.h>
28
29 // Internal headers are allowed here
30
31 namespace
32 {
33
34 const std::string DEFAULT_DEVICE_NAME("hwKeyboard");
35
36 // Functor for EventProcessingFinished signal
37 struct EventProcessingFinishedFunctor
38 {
39   /**
40    * @param[in] eventProcessingFinished reference to a boolean variable used to check if signal has been called.
41    */
42   EventProcessingFinishedFunctor( bool& eventProcessingFinished )
43   : mEventProcessingFinished( eventProcessingFinished )
44   {}
45
46   void operator()()
47   {
48     mEventProcessingFinished = true;
49   }
50
51   bool& mEventProcessingFinished;
52 };
53
54 // Stores data that is populated in the key-event callback and will be read by the TET cases
55 struct KeyEventSignalData
56 {
57   KeyEventSignalData()
58   : functorCalled(false)
59   {}
60
61   void Reset()
62   {
63     functorCalled = false;
64
65     receivedKeyEvent.keyModifier = 0;
66     receivedKeyEvent.keyPressedName.clear();
67     receivedKeyEvent.keyPressed.clear();
68   }
69
70   bool functorCalled;
71   KeyEvent receivedKeyEvent;
72 };
73
74 // Functor that sets the data when called
75 struct KeyEventReceivedFunctor
76 {
77   KeyEventReceivedFunctor( KeyEventSignalData& data ) : signalData( data ) { }
78
79   bool operator()( const KeyEvent& keyEvent )
80   {
81     signalData.functorCalled = true;
82     signalData.receivedKeyEvent = keyEvent;
83
84     return true;
85   }
86
87   KeyEventSignalData& signalData;
88 };
89
90 // Stores data that is populated in the touched signal callback and will be read by the TET cases
91 struct TouchedSignalData
92 {
93   TouchedSignalData()
94   : functorCalled(false)
95   {}
96
97   void Reset()
98   {
99     functorCalled = false;
100
101     receivedTouchEvent.points.clear();
102     receivedTouchEvent.time = 0;
103
104     receivedTouchData.Reset();
105   }
106
107   bool functorCalled;
108   TouchEvent receivedTouchEvent;
109   TouchData receivedTouchData;
110 };
111
112 // Functor that sets the data when touched signal is received
113 struct TouchedFunctor
114 {
115   TouchedFunctor( TouchedSignalData& data ) : signalData( data ) { }
116
117   void operator()( const TouchEvent& touch )
118   {
119     signalData.functorCalled = true;
120     signalData.receivedTouchEvent = touch;
121   }
122
123   TouchedSignalData& signalData;
124 };
125
126 // Functor that sets the data when touched signal is received
127 struct TouchFunctor
128 {
129   TouchFunctor( TouchedSignalData& data ) : signalData( data ) { }
130
131   void operator()( const TouchData& touch )
132   {
133     signalData.functorCalled = true;
134     signalData.receivedTouchData = touch;
135   }
136
137   void operator()()
138   {
139     signalData.functorCalled = true;
140   }
141
142   TouchedSignalData& signalData;
143 };
144
145 // Stores data that is populated in the wheel-event callback and will be read by the TET cases
146 struct WheelEventSignalData
147 {
148   WheelEventSignalData()
149   : functorCalled(false)
150   {}
151
152   void Reset()
153   {
154     functorCalled = false;
155   }
156
157   bool functorCalled;
158   WheelEvent receivedWheelEvent;
159 };
160
161 // Functor that sets the data when wheel-event signal is received
162 struct WheelEventReceivedFunctor
163 {
164   WheelEventReceivedFunctor( WheelEventSignalData& data ) : signalData( data ) { }
165
166   bool operator()( const WheelEvent& wheelEvent )
167   {
168     signalData.functorCalled = true;
169     signalData.receivedWheelEvent = wheelEvent;
170
171     return true;
172   }
173
174   WheelEventSignalData& signalData;
175 };
176
177 void GenerateTouch( TestApplication& application, PointState::Type state, const Vector2& screenPosition )
178 {
179   Integration::TouchEvent touchEvent;
180   Integration::Point point;
181   point.SetState( state );
182   point.SetScreenPosition( screenPosition );
183   touchEvent.points.push_back( point );
184   application.ProcessEvent( touchEvent );
185 }
186
187 bool DummyTouchCallback( Actor actor, const TouchEvent& touch )
188 {
189   return true;
190 }
191
192 } // unnamed namespace
193
194 int UtcDaliSceneAdd(void)
195 {
196   TestApplication application;
197   tet_infoline("Testing Dali::Integration::Scene::Add");
198
199   Dali::Integration::Scene scene = application.GetScene();
200
201   Actor actor = Actor::New();
202   DALI_TEST_CHECK( !actor.OnStage() );
203
204   scene.Add( actor );
205   DALI_TEST_CHECK( actor.OnStage() );
206
207   END_TEST;
208 }
209
210 int UtcDaliSceneRemove(void)
211 {
212   TestApplication application;
213   tet_infoline("Testing Dali::Integration::Scene::Remove");
214
215   Dali::Integration::Scene scene = application.GetScene();
216
217   Actor actor = Actor::New();
218   DALI_TEST_CHECK( !actor.OnStage() );
219
220   scene.Add( actor );
221   DALI_TEST_CHECK( actor.OnStage() );
222
223   scene.Remove(actor);
224   DALI_TEST_CHECK( !actor.OnStage() );
225
226   END_TEST;
227 }
228
229 int UtcDaliSceneGetSize(void)
230 {
231   TestApplication application;
232   tet_infoline("Testing Dali::Integration::Scene::GetSize");
233
234   Dali::Integration::Scene scene = application.GetScene();
235   Size size = scene.GetSize();
236   DALI_TEST_EQUALS( TestApplication::DEFAULT_SURFACE_WIDTH, size.width, TEST_LOCATION );
237   DALI_TEST_EQUALS( TestApplication::DEFAULT_SURFACE_HEIGHT, size.height, TEST_LOCATION );
238
239   END_TEST;
240 }
241
242 int UtcDaliSceneGetDpi(void)
243 {
244   TestApplication application; // Initializes core DPI to default values
245
246   // Test that setting core DPI explicitly also sets up the scene's DPI.
247   Dali::Integration::Scene scene = application.GetScene();
248   scene.SetDpi( Vector2(200.0f, 180.0f) );
249   Vector2 dpi = scene.GetDpi();
250   DALI_TEST_EQUALS( dpi.x, 200.0f, TEST_LOCATION );
251   DALI_TEST_EQUALS( dpi.y, 180.0f, TEST_LOCATION );
252   END_TEST;
253 }
254
255 int UtcDaliSceneGetRenderTaskList(void)
256 {
257   TestApplication application;
258   tet_infoline("Testing Dali::Integration::Scene::GetRenderTaskList");
259
260   Dali::Integration::Scene scene = application.GetScene();
261
262   // Check we get a valid instance.
263   const RenderTaskList& tasks = scene.GetRenderTaskList();
264
265   // There should be 1 task by default.
266   DALI_TEST_EQUALS( tasks.GetTaskCount(), 1u, TEST_LOCATION );
267
268   // RenderTaskList has it's own UTC tests.
269   // But we can confirm that GetRenderTaskList in Stage retrieves the same RenderTaskList each time.
270   RenderTask newTask = scene.GetRenderTaskList().CreateTask();
271
272   DALI_TEST_EQUALS( scene.GetRenderTaskList().GetTask( 1 ), newTask, TEST_LOCATION );
273
274   END_TEST;
275 }
276
277 int UtcDaliSceneGetRootLayer(void)
278 {
279   TestApplication application;
280   tet_infoline("Testing Dali::Integration::Scene::GetRootLayer");
281
282   Dali::Integration::Scene scene = application.GetScene();
283   Layer layer = scene.GetLayer( 0 );
284   DALI_TEST_CHECK( layer );
285
286   // Check that GetRootLayer() correctly retreived layer 0.
287   DALI_TEST_CHECK( scene.GetRootLayer() == layer );
288
289   END_TEST;
290 }
291
292 int UtcDaliSceneGetLayerCount(void)
293 {
294   TestApplication application;
295   tet_infoline("Testing Dali::Integration::Scene::GetLayerCount");
296
297   Dali::Integration::Scene scene = application.GetScene();
298   // Initially we have a default layer
299   DALI_TEST_EQUALS( scene.GetLayerCount(), 1u, TEST_LOCATION );
300
301   Layer layer = Layer::New();
302   scene.Add( layer );
303
304   DALI_TEST_EQUALS( scene.GetLayerCount(), 2u, TEST_LOCATION );
305   END_TEST;
306 }
307
308 int UtcDaliSceneGetLayer(void)
309 {
310   TestApplication application;
311   tet_infoline("Testing Dali::Integration::Scene::GetLayer");
312
313   Dali::Integration::Scene scene = application.GetScene();
314
315   Layer rootLayer = scene.GetLayer( 0 );
316   DALI_TEST_CHECK( rootLayer );
317
318   Layer layer = Layer::New();
319   scene.Add( layer );
320
321   Layer sameLayer = scene.GetLayer( 1 );
322   DALI_TEST_CHECK( layer == sameLayer );
323
324   END_TEST;
325 }
326
327 int UtcDaliSceneGet(void)
328 {
329   TestApplication application;
330   tet_infoline("Testing Dali::Integration::Scene::Get");
331
332   Dali::Integration::Scene scene = application.GetScene();
333
334   Actor actor = Actor::New();
335   DALI_TEST_CHECK( Dali::Integration::Scene() == Dali::Integration::Scene::Get( actor ) );
336
337   scene.Add( actor );
338
339   DALI_TEST_CHECK( scene == Dali::Integration::Scene::Get( actor ) );
340
341   END_TEST;
342 }
343
344 int UtcDaliSceneDiscard(void)
345 {
346   TestApplication application;
347   tet_infoline("Testing Dali::Scene::Discard");
348
349   // Create a new Scene
350   Dali::Integration::Scene scene = Dali::Integration::Scene::New( Vector2( 480.0f, 800.0f ) );
351   DALI_TEST_CHECK( scene );
352
353   // One reference of scene kept here and the other one kept in the Core
354   DALI_TEST_CHECK( scene.GetBaseObject().ReferenceCount() == 2 );
355
356   // Render and notify.
357   application.SendNotification();
358   application.Render(0);
359
360   // Keep the reference of the root layer handle so it will still be alive after the scene is deleted
361   Layer rootLayer = scene.GetRootLayer();
362   DALI_TEST_CHECK( rootLayer );
363   DALI_TEST_CHECK( rootLayer.GetBaseObject().ReferenceCount() == 2 );
364
365   // Request to discard the scene from the Core
366   scene.Discard();
367   DALI_TEST_CHECK( scene.GetBaseObject().ReferenceCount() == 1 );
368
369   // Reset the scene handle
370   scene.Reset();
371
372   // Render and notify.
373   application.SendNotification();
374   application.Render(0);
375
376   // At this point, the scene should have been automatically deleted
377   // To prove this, the ref count of the root layer handle should be decremented to 1
378   DALI_TEST_CHECK( rootLayer.GetBaseObject().ReferenceCount() == 1 );
379
380   // Delete the root layer handle
381   rootLayer.Reset();
382
383   // Render and notify.
384   application.SendNotification();
385   application.Render(0);
386
387   END_TEST;
388 }
389
390 int UtcDaliSceneEventProcessingFinishedP(void)
391 {
392   TestApplication application;
393   Dali::Integration::Scene scene = application.GetScene();
394
395   bool eventProcessingFinished = false;
396   EventProcessingFinishedFunctor functor( eventProcessingFinished );
397   scene.EventProcessingFinishedSignal().Connect( &application, functor );
398
399   Actor actor( Actor::New() );
400   scene.Add( actor );
401
402   application.SendNotification();
403   application.Render();
404
405   DALI_TEST_CHECK( eventProcessingFinished );
406
407   END_TEST;
408 }
409
410 int UtcDaliSceneEventProcessingFinishedN(void)
411 {
412   TestApplication application;
413   Dali::Integration::Scene scene = application.GetScene();
414
415   bool eventProcessingFinished = false;
416   EventProcessingFinishedFunctor functor( eventProcessingFinished );
417   scene.EventProcessingFinishedSignal().Connect( &application, functor );
418
419   Actor actor( Actor::New() );
420   scene.Add( actor );
421
422   // Do not complete event processing and confirm the signal has not been emitted.
423   DALI_TEST_CHECK( !eventProcessingFinished );
424
425   END_TEST;
426 }
427
428 int UtcDaliSceneSignalKeyEventP(void)
429 {
430   TestApplication application;
431   Dali::Integration::Scene scene = application.GetScene();
432
433   KeyEventSignalData data;
434   KeyEventReceivedFunctor functor( data );
435   scene.KeyEventSignal().Connect( &application, functor );
436
437   Integration::KeyEvent event( "i", "", "i", 0, 0, 0, Integration::KeyEvent::Down, "i", DEFAULT_DEVICE_NAME, Device::Class::NONE, Device::Subclass::NONE );
438   application.ProcessEvent( event );
439
440   DALI_TEST_EQUALS( true, data.functorCalled, TEST_LOCATION );
441   DALI_TEST_CHECK( event.keyModifier == data.receivedKeyEvent.keyModifier );
442   DALI_TEST_CHECK( event.keyName == data.receivedKeyEvent.keyPressedName );
443   DALI_TEST_CHECK( event.keyString == data.receivedKeyEvent.keyPressed );
444   DALI_TEST_CHECK( event.state == static_cast<Integration::KeyEvent::State>( data.receivedKeyEvent.state ) );
445
446   data.Reset();
447
448   Integration::KeyEvent event2( "i", "", "i", 0, 0, 0, Integration::KeyEvent::Up, "i", DEFAULT_DEVICE_NAME, Device::Class::NONE, Device::Subclass::NONE );
449   application.ProcessEvent( event2 );
450
451   DALI_TEST_EQUALS( true, data.functorCalled, TEST_LOCATION );
452   DALI_TEST_CHECK( event2.keyModifier == data.receivedKeyEvent.keyModifier );
453   DALI_TEST_CHECK( event2.keyName == data.receivedKeyEvent.keyPressedName );
454   DALI_TEST_CHECK( event2.keyString == data.receivedKeyEvent.keyPressed );
455   DALI_TEST_CHECK( event2.state == static_cast<Integration::KeyEvent::State>( data.receivedKeyEvent.state ) );
456
457   data.Reset();
458
459   Integration::KeyEvent event3( "a", "", "a", 0, 0, 0, Integration::KeyEvent::Down, "a", DEFAULT_DEVICE_NAME, Device::Class::NONE, Device::Subclass::NONE );
460   application.ProcessEvent( event3 );
461
462   DALI_TEST_EQUALS( true, data.functorCalled, TEST_LOCATION );
463   DALI_TEST_CHECK( event3.keyModifier == data.receivedKeyEvent.keyModifier );
464   DALI_TEST_CHECK( event3.keyName == data.receivedKeyEvent.keyPressedName );
465   DALI_TEST_CHECK( event3.keyString == data.receivedKeyEvent.keyPressed );
466   DALI_TEST_CHECK( event3.state == static_cast<Integration::KeyEvent::State>( data.receivedKeyEvent.state ) );
467
468   data.Reset();
469
470   Integration::KeyEvent event4( "a", "", "a", 0, 0, 0, Integration::KeyEvent::Up, "a", DEFAULT_DEVICE_NAME, Device::Class::NONE, Device::Subclass::NONE );
471   application.ProcessEvent( event4 );
472
473   DALI_TEST_EQUALS( true, data.functorCalled, TEST_LOCATION );
474   DALI_TEST_CHECK( event4.keyModifier == data.receivedKeyEvent.keyModifier );
475   DALI_TEST_CHECK( event4.keyName == data.receivedKeyEvent.keyPressedName );
476   DALI_TEST_CHECK( event4.keyString == data.receivedKeyEvent.keyPressed );
477   DALI_TEST_CHECK( event4.state == static_cast<Integration::KeyEvent::State>( data.receivedKeyEvent.state ) );
478   END_TEST;
479 }
480
481 int UtcDaliSceneSignalKeyEventN(void)
482 {
483   TestApplication application;
484   Dali::Integration::Scene scene = application.GetScene();
485
486   KeyEventSignalData data;
487   KeyEventReceivedFunctor functor( data );
488   scene.KeyEventSignal().Connect( &application, functor );
489
490   // Check that a non-pressed key events data is not modified.
491   DALI_TEST_EQUALS( false, data.functorCalled, TEST_LOCATION );
492
493   END_TEST;
494 }
495
496 int UtcDaliSceneTouchSignalP(void)
497 {
498   TestApplication application;
499   Dali::Integration::Scene scene = application.GetScene();
500
501   TouchedSignalData data;
502   TouchFunctor functor( data );
503   scene.TouchSignal().Connect( &application, functor );
504
505   // Render and notify.
506   application.SendNotification();
507   application.Render();
508
509   // Basic test: No actors, single touch (down then up).
510   {
511     GenerateTouch( application, PointState::DOWN, Vector2( 10.0f, 10.0f ) );
512
513     DALI_TEST_EQUALS( true, data.functorCalled, TEST_LOCATION );
514     DALI_TEST_CHECK( data.receivedTouchData.GetPointCount() != 0u );
515     DALI_TEST_CHECK( !data.receivedTouchData.GetHitActor(0) );
516     data.Reset();
517
518     GenerateTouch( application, PointState::UP, Vector2( 10.0f, 10.0f ) );
519
520     DALI_TEST_EQUALS( true, data.functorCalled, TEST_LOCATION );
521     DALI_TEST_CHECK( data.receivedTouchData.GetPointCount() != 0u );
522     DALI_TEST_CHECK( !data.receivedTouchData.GetHitActor(0) );
523     data.Reset();
524   }
525
526   // Add an actor to the scene.
527   Actor actor = Actor::New();
528   actor.SetSize( 100.0f, 100.0f );
529   actor.SetAnchorPoint( AnchorPoint::TOP_LEFT );
530   actor.SetParentOrigin( ParentOrigin::TOP_LEFT );
531   actor.TouchedSignal().Connect( &DummyTouchCallback );
532   scene.Add( actor );
533
534   // Render and notify.
535   application.SendNotification();
536   application.Render();
537
538   // Actor on scene, single touch, down in actor, motion, then up outside actor.
539   {
540     GenerateTouch( application, PointState::DOWN, Vector2( 10.0f, 10.0f ) );
541
542     DALI_TEST_EQUALS( true, data.functorCalled, TEST_LOCATION );
543     DALI_TEST_CHECK( data.receivedTouchData.GetPointCount() != 0u );
544     DALI_TEST_CHECK( data.receivedTouchData.GetHitActor(0) == actor );
545     data.Reset();
546
547     GenerateTouch( application, PointState::MOTION, Vector2( 150.0f, 10.0f ) ); // Some motion
548
549     DALI_TEST_EQUALS( false, data.functorCalled, TEST_LOCATION );
550     data.Reset();
551
552     GenerateTouch( application, PointState::UP, Vector2( 150.0f, 10.0f ) ); // Some motion
553
554     DALI_TEST_EQUALS( true, data.functorCalled, TEST_LOCATION );
555     DALI_TEST_CHECK( data.receivedTouchData.GetPointCount() != 0u );
556     DALI_TEST_CHECK( !data.receivedTouchData.GetHitActor(0) );
557     data.Reset();
558   }
559
560   // Multiple touch. Should only receive a touch on first down and last up.
561   {
562     Integration::TouchEvent touchEvent;
563     Integration::Point point;
564
565     // 1st point
566     point.SetState( PointState::DOWN );
567     point.SetScreenPosition( Vector2( 10.0f, 10.0f ) );
568     touchEvent.points.push_back( point );
569     application.ProcessEvent( touchEvent );
570     DALI_TEST_EQUALS( true, data.functorCalled, TEST_LOCATION );
571     DALI_TEST_EQUALS( data.receivedTouchData.GetPointCount(), 1u, TEST_LOCATION );
572     data.Reset();
573
574     // 2nd point
575     touchEvent.points[0].SetState( PointState::STATIONARY );
576     point.SetDeviceId( 1 );
577     point.SetScreenPosition( Vector2( 50.0f, 50.0f ) );
578     touchEvent.points.push_back( point );
579     application.ProcessEvent( touchEvent );
580     DALI_TEST_EQUALS( false, data.functorCalled, TEST_LOCATION );
581     data.Reset();
582
583     // Primary point is up
584     touchEvent.points[0].SetState( PointState::UP );
585     touchEvent.points[1].SetState( PointState::STATIONARY );
586     application.ProcessEvent( touchEvent );
587     DALI_TEST_EQUALS( false, data.functorCalled, TEST_LOCATION );
588     data.Reset();
589
590     // Remove 1st point now, 2nd point is now in motion
591     touchEvent.points.erase( touchEvent.points.begin() );
592     touchEvent.points[0].SetState( PointState::MOTION );
593     touchEvent.points[0].SetScreenPosition( Vector2( 150.0f, 50.0f ) );
594     application.ProcessEvent( touchEvent );
595     DALI_TEST_EQUALS( false, data.functorCalled, TEST_LOCATION );
596     data.Reset();
597
598     // Final point Up
599     touchEvent.points[0].SetState( PointState::UP );
600     application.ProcessEvent( touchEvent );
601     DALI_TEST_EQUALS( true, data.functorCalled, TEST_LOCATION );
602     DALI_TEST_EQUALS( data.receivedTouchData.GetPointCount(), 1u, TEST_LOCATION );
603     data.Reset();
604   }
605   END_TEST;
606 }
607
608 int UtcDaliSceneTouchSignalN(void)
609 {
610   TestApplication application;
611   Dali::Integration::Scene scene = application.GetScene();
612
613   TouchedSignalData data;
614   TouchFunctor functor( data );
615   scene.TouchSignal().Connect( &application, functor );
616
617   // Render and notify.
618   application.SendNotification();
619   application.Render();
620
621   // Confirm functor not called before there has been any touch event.
622   DALI_TEST_EQUALS( false, data.functorCalled, TEST_LOCATION );
623
624   // No actors, single touch, down, motion then up.
625   {
626     GenerateTouch( application, PointState::DOWN, Vector2( 10.0f, 10.0f ) );
627
628     DALI_TEST_EQUALS( true, data.functorCalled, TEST_LOCATION );
629     DALI_TEST_CHECK( data.receivedTouchData.GetPointCount() != 0u );
630     DALI_TEST_CHECK( !data.receivedTouchData.GetHitActor(0));
631
632     data.Reset();
633
634     // Confirm there is no signal when the touchpoint is only moved.
635     GenerateTouch( application, PointState::MOTION, Vector2( 1200.0f, 10.0f ) ); // Some motion
636
637     DALI_TEST_EQUALS( false, data.functorCalled, TEST_LOCATION );
638     data.Reset();
639
640     // Confirm a following up event generates a signal.
641     GenerateTouch( application, PointState::UP, Vector2( 1200.0f, 10.0f ) );
642
643     DALI_TEST_EQUALS( true, data.functorCalled, TEST_LOCATION );
644     DALI_TEST_CHECK( data.receivedTouchData.GetPointCount() != 0u );
645     DALI_TEST_CHECK( !data.receivedTouchData.GetHitActor(0));
646     data.Reset();
647   }
648
649   // Add an actor to the scene.
650   Actor actor = Actor::New();
651   actor.SetSize( 100.0f, 100.0f );
652   actor.SetAnchorPoint( AnchorPoint::TOP_LEFT );
653   actor.SetParentOrigin( ParentOrigin::TOP_LEFT );
654   actor.TouchedSignal().Connect( &DummyTouchCallback );
655   scene.Add( actor );
656
657   // Render and notify.
658   application.SendNotification();
659   application.Render();
660
661   // Actor on scene. Interrupted before down and interrupted after down.
662   {
663     GenerateTouch( application, PointState::INTERRUPTED, Vector2( 10.0f, 10.0f ) );
664
665     DALI_TEST_EQUALS( true, data.functorCalled, TEST_LOCATION );
666     DALI_TEST_CHECK( data.receivedTouchData.GetPointCount() != 0u );
667     DALI_TEST_CHECK( !data.receivedTouchData.GetHitActor(0) );
668     DALI_TEST_CHECK( data.receivedTouchData.GetState(0) == PointState::INTERRUPTED );
669     data.Reset();
670
671     GenerateTouch( application, PointState::DOWN, Vector2( 10.0f, 10.0f ) );
672
673     DALI_TEST_EQUALS( true, data.functorCalled, TEST_LOCATION );
674     DALI_TEST_CHECK( data.receivedTouchData.GetPointCount() != 0u );
675     DALI_TEST_CHECK( data.receivedTouchData.GetHitActor(0) == actor );
676     DALI_TEST_CHECK( data.receivedTouchData.GetState(0) == PointState::DOWN );
677     data.Reset();
678
679     GenerateTouch( application, PointState::INTERRUPTED, Vector2( 10.0f, 10.0f ) );
680
681     DALI_TEST_EQUALS( true, data.functorCalled, TEST_LOCATION );
682     DALI_TEST_CHECK( data.receivedTouchData.GetPointCount() != 0u );
683     DALI_TEST_CHECK( !data.receivedTouchData.GetHitActor(0) );
684     DALI_TEST_CHECK( data.receivedTouchData.GetState(0) == PointState::INTERRUPTED );
685
686     DALI_TEST_EQUALS( data.receivedTouchData.GetPointCount(), 1u, TEST_LOCATION );
687
688     // Check that getting info about a non-existent point returns an empty handle
689     Actor actor = data.receivedTouchData.GetHitActor( 1 );
690     DALI_TEST_CHECK( !actor );
691
692     data.Reset();
693   }
694
695   END_TEST;
696 }
697
698 int UtcDaliSceneSignalWheelEventP(void)
699 {
700   TestApplication application;
701   Dali::Integration::Scene scene = application.GetScene();
702
703   WheelEventSignalData data;
704   WheelEventReceivedFunctor functor( data );
705   scene.WheelEventSignal().Connect( &application, functor );
706
707   Integration::WheelEvent event( Integration::WheelEvent::CUSTOM_WHEEL, 0, 0u, Vector2( 0.0f, 0.0f ), 1, 1000u );
708   application.ProcessEvent( event );
709
710   DALI_TEST_EQUALS( true, data.functorCalled, TEST_LOCATION );
711   DALI_TEST_CHECK( static_cast< WheelEvent::Type >(event.type) == data.receivedWheelEvent.type );
712   DALI_TEST_CHECK( event.direction == data.receivedWheelEvent.direction );
713   DALI_TEST_CHECK( event.modifiers == data.receivedWheelEvent.modifiers );
714   DALI_TEST_CHECK( event.point == data.receivedWheelEvent.point );
715   DALI_TEST_CHECK( event.z == data.receivedWheelEvent.z );
716   DALI_TEST_CHECK( event.timeStamp == data.receivedWheelEvent.timeStamp );
717
718   data.Reset();
719
720   Integration::WheelEvent event2( Integration::WheelEvent::CUSTOM_WHEEL, 0, 0u, Vector2( 0.0f, 0.0f ), -1, 1000u );
721   application.ProcessEvent( event2 );
722
723   DALI_TEST_EQUALS( true, data.functorCalled, TEST_LOCATION );
724   DALI_TEST_CHECK( static_cast< WheelEvent::Type >(event2.type) == data.receivedWheelEvent.type );
725   DALI_TEST_CHECK( event2.direction == data.receivedWheelEvent.direction );
726   DALI_TEST_CHECK( event2.modifiers == data.receivedWheelEvent.modifiers );
727   DALI_TEST_CHECK( event2.point == data.receivedWheelEvent.point );
728   DALI_TEST_CHECK( event2.z == data.receivedWheelEvent.z );
729   DALI_TEST_CHECK( event2.timeStamp == data.receivedWheelEvent.timeStamp );
730   END_TEST;
731 }
732