removed reliance on dali-adaptor
[platform/core/uifw/dali-core.git] / automated-tests / src / dali-unmanaged / utc-Dali-DynamicsBody.cpp
1 /*
2  * Copyright (c) 2014 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 #include <dali/public-api/dali-core.h>
21 #include <dali-test-suite-utils.h>
22
23
24 int UtcDaliDynamicsBodyConstructor(void)
25 {
26   tet_infoline("UtcDaliDynamicsBodyConstructor - DynamicsBody::DynamicsBody()");
27
28   TestApplication application;
29
30   // start up
31   application.SendNotification();
32   application.Render();
33   application.Render();
34
35   // Default constructor - create an uninitialized handle
36   DynamicsBody body;
37   DALI_TEST_CHECK( !body );
38
39   // create world and actor
40   DynamicsWorldConfig worldConfig(DynamicsWorldConfig::New());
41   DynamicsWorld world( Stage::GetCurrent().InitializeDynamics(worldConfig) );
42
43   if( !world )
44   {
45     // cannot create dynamics world, log failure and exit
46     DALI_TEST_CHECK( false );
47     END_TEST;
48   }
49
50   DynamicsBodyConfig bodyConfig(DynamicsBodyConfig::New());
51   Actor actor(Actor::New());
52
53   // enable dynamics on the actor to create the Dynamicsbody
54   actor.EnableDynamics(bodyConfig);
55
56   // initialize handle
57   body = actor.GetDynamicsBody();
58
59   DALI_TEST_CHECK( body );
60   END_TEST;
61 }
62
63 int UtcDaliDynamicsBodyGetMass(void)
64 {
65   TestApplication application;
66
67   // start up
68   application.SendNotification();
69   application.Render();
70   application.Render();
71
72   const float testMass = 1.23f;
73
74   DynamicsWorldConfig worldConfig(DynamicsWorldConfig::New());
75   DynamicsWorld world( Stage::GetCurrent().InitializeDynamics(worldConfig) );
76
77   if( !world )
78   {
79     // cannot create dynamics world, log failure and exit
80     DALI_TEST_CHECK( false );
81     END_TEST;
82   }
83
84   DynamicsBodyConfig bodyConfig(DynamicsBodyConfig::New());
85   bodyConfig.SetMass(testMass);
86   Actor actor(Actor::New());
87
88   // enable dynamics on the actor to create the Dynamicsbody
89   actor.EnableDynamics(bodyConfig);
90
91   tet_infoline("UtcDaliDynamicsBodyGetMass - DynamicsBody::GetMass");
92   DALI_TEST_EQUALS( testMass, actor.GetDynamicsBody().GetMass(), Math::MACHINE_EPSILON_0, TEST_LOCATION );
93   END_TEST;
94 }
95
96 int UtcDaliDynamicsBodyGetElasticity(void)
97 {
98   TestApplication application;
99
100   // start up
101   application.SendNotification();
102   application.Render();
103   application.Render();
104
105   const float testElasticity = 1.23f;
106
107   DynamicsWorldConfig worldConfig(DynamicsWorldConfig::New());
108   DynamicsWorld world( Stage::GetCurrent().InitializeDynamics(worldConfig) );
109
110   if( !world )
111   {
112     // cannot create dynamics world, log failure and exit
113     DALI_TEST_CHECK( false );
114     END_TEST;
115   }
116
117   DynamicsBodyConfig bodyConfig(DynamicsBodyConfig::New());
118   bodyConfig.SetElasticity(testElasticity);
119   Actor actor(Actor::New());
120
121   // enable dynamics on the actor to create the Dynamicsbody
122   actor.EnableDynamics(bodyConfig);
123
124   tet_infoline("UtcDaliDynamicsBodyGetMass - DynamicsBody::GetElasticity");
125   DALI_TEST_EQUALS( testElasticity, actor.GetDynamicsBody().GetElasticity(), Math::MACHINE_EPSILON_0, TEST_LOCATION );
126   END_TEST;
127 }
128
129 int UtcDaliDynamicsBodySetLinearVelocity(void)
130 {
131   tet_infoline("UtcDaliDynamicsBodySetLinearVelocity - DynamicsBody::SetLinearVelocity");
132
133   TestApplication application;
134   TraceCallStack& trace( application.GetPlatform().GetTrace() );
135   trace.Enable( true );
136
137   // start up
138   application.SendNotification();
139   application.Render();
140   application.Render();
141
142   DynamicsWorldConfig worldConfig(DynamicsWorldConfig::New());
143   DynamicsWorld world( Stage::GetCurrent().InitializeDynamics(worldConfig) );
144
145   if( !world )
146   {
147     // cannot create dynamics world, log failure and exit
148     DALI_TEST_CHECK( false );
149     END_TEST;
150   }
151
152   DynamicsBodyConfig bodyConfig(DynamicsBodyConfig::New());
153   Actor actor(Actor::New());
154
155   // enable dynamics on the actor to create the Dynamicsbody
156   actor.EnableDynamics(bodyConfig);
157
158   DynamicsBody body(actor.GetDynamicsBody());
159   body.SetLinearVelocity(Vector3::ONE);
160
161   DALI_TEST_CHECK( ! trace.FindMethod( "DynamicsBody::SetLinearVelocity" ) );
162
163   // update
164   application.SendNotification();
165   application.Render();
166   application.Render();
167
168   DALI_TEST_CHECK( trace.FindMethod( "DynamicsBody::SetLinearVelocity" ) );
169   END_TEST;
170 }
171
172 int UtcDaliDynamicsBodySetAngularVelocity(void)
173 {
174   tet_infoline("UtcDaliDynamicsBodySetAngularVelocity - DynamicsBody::SetAngularVelocity");
175
176   TestApplication application;
177   TraceCallStack& trace( application.GetPlatform().GetTrace() );
178   trace.Enable( true );
179
180   // start up
181   application.SendNotification();
182   application.Render();
183   application.Render();
184
185   DynamicsWorldConfig worldConfig(DynamicsWorldConfig::New());
186   DynamicsWorld world( Stage::GetCurrent().InitializeDynamics(worldConfig) );
187
188   if( !world )
189   {
190     // cannot create dynamics world, log failure and exit
191     DALI_TEST_CHECK( false );
192     END_TEST;
193   }
194
195   DynamicsBodyConfig bodyConfig(DynamicsBodyConfig::New());
196   Actor actor(Actor::New());
197
198   // enable dynamics on the actor to create the Dynamicsbody
199   actor.EnableDynamics(bodyConfig);
200
201   DynamicsBody body(actor.GetDynamicsBody());
202   body.SetAngularVelocity(Vector3::ONE);
203
204   DALI_TEST_CHECK( ! trace.FindMethod( "DynamicsBody::SetAngularVelocity" ) );
205
206   // update
207   application.SendNotification();
208   application.Render();
209   application.Render();
210
211   DALI_TEST_CHECK( trace.FindMethod( "DynamicsBody::SetAngularVelocity" ) );
212   END_TEST;
213 }
214
215 int UtcDaliDynamicsBodySetKinematic(void)
216 {
217   TestApplication application;
218
219   // start up
220   application.SendNotification();
221   application.Render();
222   application.Render();
223
224   const float testMass = 1.0f;
225   DynamicsWorldConfig worldConfig(DynamicsWorldConfig::New());
226   DynamicsWorld world( Stage::GetCurrent().InitializeDynamics(worldConfig) );
227
228   if( !world )
229   {
230     // cannot create dynamics world, log failure and exit
231     DALI_TEST_CHECK( false );
232     END_TEST;
233   }
234
235   DynamicsBodyConfig bodyConfig(DynamicsBodyConfig::New());
236   bodyConfig.SetMass(testMass);
237   Actor actor(Actor::New());
238
239   // enable dynamics on the actor to create the Dynamicsbody
240   actor.EnableDynamics(bodyConfig);
241
242   DynamicsBody body(actor.GetDynamicsBody());
243
244   DALI_TEST_EQUALS( testMass, body.GetMass(), Math::MACHINE_EPSILON_0, TEST_LOCATION );
245
246   tet_infoline("UtcDaliDynamicsBodySetKinematic - DynamicsBody::SetKinematic(true)");
247   body.SetKinematic(true);
248
249   DALI_TEST_CHECK( body.IsKinematic() );
250   DALI_TEST_EQUALS( 0.0f, body.GetMass(), Math::MACHINE_EPSILON_0, TEST_LOCATION );
251
252   tet_infoline("UtcDaliDynamicsBodySetKinematic - DynamicsBody::SetKinematic(false)");
253   body.SetKinematic(false);
254   DALI_TEST_CHECK( !body.IsKinematic() );
255   DALI_TEST_EQUALS( testMass, body.GetMass(), Math::MACHINE_EPSILON_0, TEST_LOCATION );
256   END_TEST;
257 }
258
259 int UtcDaliDynamicsBodyIsKinematic(void)
260 {
261   TestApplication application;
262
263   // start up
264   application.SendNotification();
265   application.Render();
266   application.Render();
267
268   const float testMass = 1.0f;
269   DynamicsWorldConfig worldConfig(DynamicsWorldConfig::New());
270   DynamicsWorld world( Stage::GetCurrent().InitializeDynamics(worldConfig) );
271
272   if( !world )
273   {
274     // cannot create dynamics world, log failure and exit
275     DALI_TEST_CHECK( false );
276     END_TEST;
277   }
278
279   DynamicsBodyConfig bodyConfig(DynamicsBodyConfig::New());
280   bodyConfig.SetMass(testMass);
281   Actor actor(Actor::New());
282
283   // enable dynamics on the actor to create the Dynamicsbody
284   actor.EnableDynamics(bodyConfig);
285
286   DynamicsBody body(actor.GetDynamicsBody());
287
288   DALI_TEST_EQUALS( testMass, body.GetMass(), Math::MACHINE_EPSILON_0, TEST_LOCATION );
289
290   tet_infoline("UtcDaliDynamicsBodySetKinematic - DynamicsBody::IsSetKinematic");
291   body.SetKinematic(true);
292
293   DALI_TEST_CHECK( body.IsKinematic() );
294   body.SetKinematic(false);
295   DALI_TEST_CHECK( !body.IsKinematic() );
296   END_TEST;
297 }
298
299 int UtcDaliDynamicsBodySetSleepEnabled(void)
300 {
301   tet_infoline("UtcDaliDynamicsBodySetSleepEnabled");
302
303   TestApplication application;
304   TraceCallStack& trace( application.GetPlatform().GetTrace() );
305   trace.Enable( true );
306
307   // start up
308   application.SendNotification();
309   application.Render();
310   application.Render();
311
312   DynamicsWorldConfig worldConfig(DynamicsWorldConfig::New());
313   DynamicsWorld world( Stage::GetCurrent().InitializeDynamics(worldConfig) );
314
315   if( !world )
316   {
317     // cannot create dynamics world, log failure and exit
318     DALI_TEST_CHECK( false );
319     END_TEST;
320   }
321
322   DynamicsBodyConfig bodyConfig(DynamicsBodyConfig::New());
323   Actor actor(Actor::New());
324
325   // enable dynamics on the actor to create the Dynamicsbody
326   actor.EnableDynamics(bodyConfig);
327
328   DynamicsBody body(actor.GetDynamicsBody());
329
330   // SleepEnabled true by default
331   DALI_TEST_CHECK( body.GetSleepEnabled() );
332   body.SetSleepEnabled(false);
333
334   DALI_TEST_CHECK( ! trace.FindMethod( "DynamicsBody::SetSleepEnabled" ) );
335
336   // update
337   application.SendNotification();
338   application.Render();
339   application.Render();
340
341   DALI_TEST_CHECK( trace.FindMethod( "DynamicsBody::SetSleepEnabled" ) );
342
343   DALI_TEST_CHECK( ! body.GetSleepEnabled() );
344   END_TEST;
345 }
346
347 int UtcDaliDynamicsBodyGetSleepEnabled(void)
348 {
349   tet_infoline("UtcDaliDynamicsBodyGetSleepEnabled");
350
351   TestApplication application;
352
353   // start up
354   application.SendNotification();
355   application.Render();
356   application.Render();
357
358   DynamicsWorldConfig worldConfig(DynamicsWorldConfig::New());
359   DynamicsWorld world( Stage::GetCurrent().InitializeDynamics(worldConfig) );
360
361   if( !world )
362   {
363     // cannot create dynamics world, log failure and exit
364     DALI_TEST_CHECK( false );
365     END_TEST;
366   }
367
368   DynamicsBodyConfig bodyConfig(DynamicsBodyConfig::New());
369   Actor actor(Actor::New());
370
371   // enable dynamics on the actor to create the Dynamicsbody
372   actor.EnableDynamics(bodyConfig);
373
374   DynamicsBody body(actor.GetDynamicsBody());
375
376   // SleepEnabled true by default
377   DALI_TEST_CHECK( body.GetSleepEnabled() );
378   body.SetSleepEnabled(false);
379   DALI_TEST_CHECK( !body.GetSleepEnabled() );
380   END_TEST;
381 }
382
383 int UtcDaliDynamicsBodyWakeUp(void)
384 {
385   tet_infoline("UtcDaliDynamicsBodyWakeUp");
386
387   TestApplication application;
388   TraceCallStack& trace( application.GetPlatform().GetTrace() );
389   trace.Enable( true );
390
391   // start up
392   application.SendNotification();
393   application.Render();
394   application.Render();
395
396   DynamicsWorldConfig worldConfig(DynamicsWorldConfig::New());
397   DynamicsWorld world( Stage::GetCurrent().InitializeDynamics(worldConfig) );
398
399   if( !world )
400   {
401     // cannot create dynamics world, log failure and exit
402     DALI_TEST_CHECK( false );
403     END_TEST;
404   }
405
406   DynamicsBodyConfig bodyConfig(DynamicsBodyConfig::New());
407   Actor actor(Actor::New());
408
409   // enable dynamics on the actor to create the Dynamicsbody
410   actor.EnableDynamics(bodyConfig);
411
412   DynamicsBody body(actor.GetDynamicsBody());
413
414   body.WakeUp();
415
416   DALI_TEST_CHECK( ! trace.FindMethod( "DynamicsBody::WakeUp" ) );
417
418   // update
419   application.SendNotification();
420   application.Render();
421   application.Render();
422
423   DALI_TEST_CHECK( trace.FindMethod( "DynamicsBody::WakeUp" ) );
424   END_TEST;
425 }
426
427 int UtcDaliDynamicsBodyAddAnchor(void)
428 {
429   tet_infoline("UtcDaliDynamicsBodyAddAnchor - DynamicsBody::AddAnchor()");
430
431   TestApplication application;
432
433   DynamicsWorldConfig worldConfig(DynamicsWorldConfig::New());
434   worldConfig.SetType(DynamicsWorldConfig::SOFT);
435   DynamicsWorld world( Stage::GetCurrent().InitializeDynamics(worldConfig) );
436
437   if( !world )
438   {
439     // cannot create dynamics world, log failure and exit
440     DALI_TEST_CHECK( false );
441     END_TEST;
442   }
443
444   Actor rootActor(Actor::New());
445   world.SetRootActor(rootActor);
446   Stage::GetCurrent().Add(rootActor);
447
448   DynamicsBodyConfig softConfig( DynamicsBodyConfig::New() );
449   softConfig.SetType(DynamicsBodyConfig::SOFT);
450   Cloth mesh(Cloth::New(10.0f, 10.0f, 10, 10));
451   DynamicsShape meshShape(DynamicsShape::NewMesh(mesh));
452   softConfig.SetShape( meshShape );
453   softConfig.SetMass(1.0f);
454   MeshActor softActor(MeshActor::New(mesh));
455
456   rootActor.Add(softActor);
457   softActor.EnableDynamics(softConfig);
458   DynamicsBody softBody(softActor.GetDynamicsBody());
459
460   DynamicsBodyConfig anchorConfig(DynamicsBodyConfig::New());
461   anchorConfig.SetMass(0.0f);
462   Actor anchor(Actor::New());
463   rootActor.Add(anchor);
464   anchor.EnableDynamics(anchorConfig);
465   DynamicsBody anchorBody(anchor.GetDynamicsBody());
466   anchorBody.SetKinematic(true);
467   try
468   {
469     softBody.AddAnchor(0, anchorBody, false);
470
471     DALI_TEST_CHECK(true)
472   }
473   catch(Dali::DaliException& e)
474   {
475     tet_printf("Assertion %s failed at %s\n", e.mCondition.c_str(), e.mLocation.c_str());
476     DALI_TEST_CHECK( false );
477   }
478
479   rootActor.Remove(softActor);
480   rootActor.Remove(anchor);
481   Stage::GetCurrent().Remove(rootActor);
482   softActor.DisableDynamics();
483   anchor.DisableDynamics();
484   END_TEST;
485 }
486
487 int UtcDaliDynamicsBodyConserveVolume(void)
488 {
489   tet_infoline("UtcDaliDynamicsBodyConserveVolume");
490
491   TestApplication application;
492
493   // start up
494   application.SendNotification();
495   application.Render();
496   application.Render();
497
498   DynamicsWorldConfig worldConfig(DynamicsWorldConfig::New());
499   DynamicsWorld world( Stage::GetCurrent().InitializeDynamics(worldConfig) );
500
501   if( !world )
502   {
503     // cannot create dynamics world, log failure and exit
504     DALI_TEST_CHECK( false );
505     END_TEST;
506   }
507
508   DynamicsBodyConfig bodyConfig(DynamicsBodyConfig::New());
509   Actor actor(Actor::New());
510
511   // enable dynamics on the actor to create the Dynamicsbody
512   actor.EnableDynamics(bodyConfig);
513
514   DynamicsBody body(actor.GetDynamicsBody());
515
516   body.ConserveVolume(false);
517   DALI_TEST_CHECK( true );
518   END_TEST;
519 }
520
521 int UtcDaliDynamicsBodyConserveShape(void)
522 {
523   tet_infoline("UtcDaliDynamicsBodyConserveShape");
524
525   TestApplication application;
526
527   // start up
528   application.SendNotification();
529   application.Render();
530   application.Render();
531
532   DynamicsWorldConfig worldConfig(DynamicsWorldConfig::New());
533   DynamicsWorld world( Stage::GetCurrent().InitializeDynamics(worldConfig) );
534
535   if( !world )
536   {
537     // cannot create dynamics world, log failure and exit
538     DALI_TEST_CHECK( false );
539     END_TEST;
540   }
541
542   DynamicsBodyConfig bodyConfig(DynamicsBodyConfig::New());
543   Actor actor(Actor::New());
544
545   // enable dynamics on the actor to create the Dynamicsbody
546   actor.EnableDynamics(bodyConfig);
547
548   DynamicsBody body(actor.GetDynamicsBody());
549
550   body.ConserveShape(false);
551   DALI_TEST_CHECK( true );
552   END_TEST;
553 }