2 * Copyright (c) 2014 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.
20 #include <dali/public-api/dali-core.h>
21 #include <dali-test-suite-utils.h>
24 int UtcDaliDynamicsBodyConstructor(void)
26 #if !defined(DYNAMICS_SUPPORT)
27 tet_infoline("No dynamics support compiled\n");
30 tet_infoline("UtcDaliDynamicsBodyConstructor - DynamicsBody::DynamicsBody()");
31 TestApplication application;
34 application.SendNotification();
38 // Default constructor - create an uninitialized handle
40 DALI_TEST_CHECK( !body );
42 // create world and actor
43 DynamicsWorldConfig worldConfig(DynamicsWorldConfig::New());
44 DynamicsWorld world( Stage::GetCurrent().InitializeDynamics(worldConfig) );
48 // cannot create dynamics world, log failure and exit
49 DALI_TEST_CHECK( false );
53 DynamicsBodyConfig bodyConfig(DynamicsBodyConfig::New());
54 Actor actor(Actor::New());
56 // enable dynamics on the actor to create the Dynamicsbody
57 actor.EnableDynamics(bodyConfig);
60 body = actor.GetDynamicsBody();
62 DALI_TEST_CHECK( body );
66 int UtcDaliDynamicsBodyGetMass(void)
68 #if !defined(DYNAMICS_SUPPORT)
69 tet_infoline("No dynamics support compiled\n");
72 TestApplication application;
75 application.SendNotification();
79 const float testMass = 1.23f;
81 DynamicsWorldConfig worldConfig(DynamicsWorldConfig::New());
82 DynamicsWorld world( Stage::GetCurrent().InitializeDynamics(worldConfig) );
86 // cannot create dynamics world, log failure and exit
87 DALI_TEST_CHECK( false );
91 DynamicsBodyConfig bodyConfig(DynamicsBodyConfig::New());
92 bodyConfig.SetMass(testMass);
93 Actor actor(Actor::New());
95 // enable dynamics on the actor to create the Dynamicsbody
96 actor.EnableDynamics(bodyConfig);
98 tet_infoline("UtcDaliDynamicsBodyGetMass - DynamicsBody::GetMass");
99 DALI_TEST_EQUALS( testMass, actor.GetDynamicsBody().GetMass(), Math::MACHINE_EPSILON_0, TEST_LOCATION );
104 int UtcDaliDynamicsBodyGetElasticity(void)
106 #if !defined(DYNAMICS_SUPPORT)
107 tet_infoline("No dynamics support compiled\n");
110 TestApplication application;
113 application.SendNotification();
114 application.Render();
115 application.Render();
117 const float testElasticity = 1.23f;
119 DynamicsWorldConfig worldConfig(DynamicsWorldConfig::New());
120 DynamicsWorld world( Stage::GetCurrent().InitializeDynamics(worldConfig) );
124 // cannot create dynamics world, log failure and exit
125 DALI_TEST_CHECK( false );
129 DynamicsBodyConfig bodyConfig(DynamicsBodyConfig::New());
130 bodyConfig.SetElasticity(testElasticity);
131 Actor actor(Actor::New());
133 // enable dynamics on the actor to create the Dynamicsbody
134 actor.EnableDynamics(bodyConfig);
136 tet_infoline("UtcDaliDynamicsBodyGetMass - DynamicsBody::GetElasticity");
137 DALI_TEST_EQUALS( testElasticity, actor.GetDynamicsBody().GetElasticity(), Math::MACHINE_EPSILON_0, TEST_LOCATION );
141 int UtcDaliDynamicsBodySetLinearVelocity(void)
143 #if !defined(DYNAMICS_SUPPORT)
144 tet_infoline("No dynamics support compiled\n");
147 tet_infoline("UtcDaliDynamicsBodySetLinearVelocity - DynamicsBody::SetLinearVelocity");
149 TestApplication application;
150 TraceCallStack& trace( application.GetPlatform().GetTrace() );
151 trace.Enable( true );
154 application.SendNotification();
155 application.Render();
156 application.Render();
158 DynamicsWorldConfig worldConfig(DynamicsWorldConfig::New());
159 DynamicsWorld world( Stage::GetCurrent().InitializeDynamics(worldConfig) );
163 // cannot create dynamics world, log failure and exit
164 DALI_TEST_CHECK( false );
168 DynamicsBodyConfig bodyConfig(DynamicsBodyConfig::New());
169 Actor actor(Actor::New());
171 // enable dynamics on the actor to create the Dynamicsbody
172 actor.EnableDynamics(bodyConfig);
174 DynamicsBody body(actor.GetDynamicsBody());
175 body.SetLinearVelocity(Vector3::ONE);
177 DALI_TEST_CHECK( ! trace.FindMethod( "DynamicsBody::SetLinearVelocity" ) );
180 application.SendNotification();
181 application.Render();
182 application.Render();
184 DALI_TEST_CHECK( trace.FindMethod( "DynamicsBody::SetLinearVelocity" ) );
188 int UtcDaliDynamicsBodySetAngularVelocity(void)
190 #if !defined(DYNAMICS_SUPPORT)
191 tet_infoline("No dynamics support compiled\n");
194 tet_infoline("UtcDaliDynamicsBodySetAngularVelocity - DynamicsBody::SetAngularVelocity");
196 TestApplication application;
197 TraceCallStack& trace( application.GetPlatform().GetTrace() );
198 trace.Enable( true );
201 application.SendNotification();
202 application.Render();
203 application.Render();
205 DynamicsWorldConfig worldConfig(DynamicsWorldConfig::New());
206 DynamicsWorld world( Stage::GetCurrent().InitializeDynamics(worldConfig) );
210 // cannot create dynamics world, log failure and exit
211 DALI_TEST_CHECK( false );
215 DynamicsBodyConfig bodyConfig(DynamicsBodyConfig::New());
216 Actor actor(Actor::New());
218 // enable dynamics on the actor to create the Dynamicsbody
219 actor.EnableDynamics(bodyConfig);
221 DynamicsBody body(actor.GetDynamicsBody());
222 body.SetAngularVelocity(Vector3::ONE);
224 DALI_TEST_CHECK( ! trace.FindMethod( "DynamicsBody::SetAngularVelocity" ) );
227 application.SendNotification();
228 application.Render();
229 application.Render();
231 DALI_TEST_CHECK( trace.FindMethod( "DynamicsBody::SetAngularVelocity" ) );
235 int UtcDaliDynamicsBodySetKinematic(void)
237 #if !defined(DYNAMICS_SUPPORT)
238 tet_infoline("No dynamics support compiled\n");
241 TestApplication application;
244 application.SendNotification();
245 application.Render();
246 application.Render();
248 const float testMass = 1.0f;
249 DynamicsWorldConfig worldConfig(DynamicsWorldConfig::New());
250 DynamicsWorld world( Stage::GetCurrent().InitializeDynamics(worldConfig) );
254 // cannot create dynamics world, log failure and exit
255 DALI_TEST_CHECK( false );
259 DynamicsBodyConfig bodyConfig(DynamicsBodyConfig::New());
260 bodyConfig.SetMass(testMass);
261 Actor actor(Actor::New());
263 // enable dynamics on the actor to create the Dynamicsbody
264 actor.EnableDynamics(bodyConfig);
266 DynamicsBody body(actor.GetDynamicsBody());
268 DALI_TEST_EQUALS( testMass, body.GetMass(), Math::MACHINE_EPSILON_0, TEST_LOCATION );
270 tet_infoline("UtcDaliDynamicsBodySetKinematic - DynamicsBody::SetKinematic(true)");
271 body.SetKinematic(true);
273 DALI_TEST_CHECK( body.IsKinematic() );
274 DALI_TEST_EQUALS( 0.0f, body.GetMass(), Math::MACHINE_EPSILON_0, TEST_LOCATION );
276 tet_infoline("UtcDaliDynamicsBodySetKinematic - DynamicsBody::SetKinematic(false)");
277 body.SetKinematic(false);
278 DALI_TEST_CHECK( !body.IsKinematic() );
279 DALI_TEST_EQUALS( testMass, body.GetMass(), Math::MACHINE_EPSILON_0, TEST_LOCATION );
283 int UtcDaliDynamicsBodyIsKinematic(void)
285 #if !defined(DYNAMICS_SUPPORT)
286 tet_infoline("No dynamics support compiled\n");
289 TestApplication application;
292 application.SendNotification();
293 application.Render();
294 application.Render();
296 const float testMass = 1.0f;
297 DynamicsWorldConfig worldConfig(DynamicsWorldConfig::New());
298 DynamicsWorld world( Stage::GetCurrent().InitializeDynamics(worldConfig) );
302 // cannot create dynamics world, log failure and exit
303 DALI_TEST_CHECK( false );
307 DynamicsBodyConfig bodyConfig(DynamicsBodyConfig::New());
308 bodyConfig.SetMass(testMass);
309 Actor actor(Actor::New());
311 // enable dynamics on the actor to create the Dynamicsbody
312 actor.EnableDynamics(bodyConfig);
314 DynamicsBody body(actor.GetDynamicsBody());
316 DALI_TEST_EQUALS( testMass, body.GetMass(), Math::MACHINE_EPSILON_0, TEST_LOCATION );
318 tet_infoline("UtcDaliDynamicsBodySetKinematic - DynamicsBody::IsSetKinematic");
319 body.SetKinematic(true);
321 DALI_TEST_CHECK( body.IsKinematic() );
322 body.SetKinematic(false);
323 DALI_TEST_CHECK( !body.IsKinematic() );
327 int UtcDaliDynamicsBodySetSleepEnabled(void)
329 #if !defined(DYNAMICS_SUPPORT)
330 tet_infoline("No dynamics support compiled\n");
333 tet_infoline("UtcDaliDynamicsBodySetSleepEnabled");
335 TestApplication application;
336 TraceCallStack& trace( application.GetPlatform().GetTrace() );
337 trace.Enable( true );
340 application.SendNotification();
341 application.Render();
342 application.Render();
344 DynamicsWorldConfig worldConfig(DynamicsWorldConfig::New());
345 DynamicsWorld world( Stage::GetCurrent().InitializeDynamics(worldConfig) );
349 // cannot create dynamics world, log failure and exit
350 DALI_TEST_CHECK( false );
354 DynamicsBodyConfig bodyConfig(DynamicsBodyConfig::New());
355 Actor actor(Actor::New());
357 // enable dynamics on the actor to create the Dynamicsbody
358 actor.EnableDynamics(bodyConfig);
360 DynamicsBody body(actor.GetDynamicsBody());
362 // SleepEnabled true by default
363 DALI_TEST_CHECK( body.GetSleepEnabled() );
364 body.SetSleepEnabled(false);
366 DALI_TEST_CHECK( ! trace.FindMethod( "DynamicsBody::SetSleepEnabled" ) );
369 application.SendNotification();
370 application.Render();
371 application.Render();
373 DALI_TEST_CHECK( trace.FindMethod( "DynamicsBody::SetSleepEnabled" ) );
375 DALI_TEST_CHECK( ! body.GetSleepEnabled() );
379 int UtcDaliDynamicsBodyGetSleepEnabled(void)
381 #if !defined(DYNAMICS_SUPPORT)
382 tet_infoline("No dynamics support compiled\n");
385 tet_infoline("UtcDaliDynamicsBodyGetSleepEnabled");
387 TestApplication application;
390 application.SendNotification();
391 application.Render();
392 application.Render();
394 DynamicsWorldConfig worldConfig(DynamicsWorldConfig::New());
395 DynamicsWorld world( Stage::GetCurrent().InitializeDynamics(worldConfig) );
399 // cannot create dynamics world, log failure and exit
400 DALI_TEST_CHECK( false );
404 DynamicsBodyConfig bodyConfig(DynamicsBodyConfig::New());
405 Actor actor(Actor::New());
407 // enable dynamics on the actor to create the Dynamicsbody
408 actor.EnableDynamics(bodyConfig);
410 DynamicsBody body(actor.GetDynamicsBody());
412 // SleepEnabled true by default
413 DALI_TEST_CHECK( body.GetSleepEnabled() );
414 body.SetSleepEnabled(false);
415 DALI_TEST_CHECK( !body.GetSleepEnabled() );
419 int UtcDaliDynamicsBodyWakeUp(void)
421 #if !defined(DYNAMICS_SUPPORT)
422 tet_infoline("No dynamics support compiled\n");
425 tet_infoline("UtcDaliDynamicsBodyWakeUp");
427 TestApplication application;
428 TraceCallStack& trace( application.GetPlatform().GetTrace() );
429 trace.Enable( true );
432 application.SendNotification();
433 application.Render();
434 application.Render();
436 DynamicsWorldConfig worldConfig(DynamicsWorldConfig::New());
437 DynamicsWorld world( Stage::GetCurrent().InitializeDynamics(worldConfig) );
441 // cannot create dynamics world, log failure and exit
442 DALI_TEST_CHECK( false );
446 DynamicsBodyConfig bodyConfig(DynamicsBodyConfig::New());
447 Actor actor(Actor::New());
449 // enable dynamics on the actor to create the Dynamicsbody
450 actor.EnableDynamics(bodyConfig);
452 DynamicsBody body(actor.GetDynamicsBody());
456 DALI_TEST_CHECK( ! trace.FindMethod( "DynamicsBody::WakeUp" ) );
459 application.SendNotification();
460 application.Render();
461 application.Render();
463 DALI_TEST_CHECK( trace.FindMethod( "DynamicsBody::WakeUp" ) );
467 int UtcDaliDynamicsBodyAddAnchor(void)
469 #if !defined(DYNAMICS_SUPPORT)
470 tet_infoline("No dynamics support compiled\n");
473 tet_infoline("UtcDaliDynamicsBodyAddAnchor - DynamicsBody::AddAnchor()");
475 TestApplication application;
477 DynamicsWorldConfig worldConfig(DynamicsWorldConfig::New());
478 worldConfig.SetType(DynamicsWorldConfig::SOFT);
479 DynamicsWorld world( Stage::GetCurrent().InitializeDynamics(worldConfig) );
483 // cannot create dynamics world, log failure and exit
484 DALI_TEST_CHECK( false );
488 Actor rootActor(Actor::New());
489 world.SetRootActor(rootActor);
490 Stage::GetCurrent().Add(rootActor);
492 DynamicsBodyConfig softConfig( DynamicsBodyConfig::New() );
493 softConfig.SetType(DynamicsBodyConfig::SOFT);
494 Cloth mesh(Cloth::New(10.0f, 10.0f, 10, 10));
495 DynamicsShape meshShape(DynamicsShape::NewMesh(mesh));
496 softConfig.SetShape( meshShape );
497 softConfig.SetMass(1.0f);
498 MeshActor softActor(MeshActor::New(mesh));
500 rootActor.Add(softActor);
501 softActor.EnableDynamics(softConfig);
502 DynamicsBody softBody(softActor.GetDynamicsBody());
504 DynamicsBodyConfig anchorConfig(DynamicsBodyConfig::New());
505 anchorConfig.SetMass(0.0f);
506 Actor anchor(Actor::New());
507 rootActor.Add(anchor);
508 anchor.EnableDynamics(anchorConfig);
509 DynamicsBody anchorBody(anchor.GetDynamicsBody());
510 anchorBody.SetKinematic(true);
513 softBody.AddAnchor(0, anchorBody, false);
515 DALI_TEST_CHECK(true)
517 catch(Dali::DaliException& e)
519 DALI_TEST_PRINT_ASSERT( e );
520 DALI_TEST_CHECK( false );
523 rootActor.Remove(softActor);
524 rootActor.Remove(anchor);
525 Stage::GetCurrent().Remove(rootActor);
526 softActor.DisableDynamics();
527 anchor.DisableDynamics();
531 int UtcDaliDynamicsBodyConserveVolume(void)
533 #if !defined(DYNAMICS_SUPPORT)
534 tet_infoline("No dynamics support compiled\n");
537 tet_infoline("UtcDaliDynamicsBodyConserveVolume");
539 TestApplication application;
542 application.SendNotification();
543 application.Render();
544 application.Render();
546 DynamicsWorldConfig worldConfig(DynamicsWorldConfig::New());
547 DynamicsWorld world( Stage::GetCurrent().InitializeDynamics(worldConfig) );
551 // cannot create dynamics world, log failure and exit
552 DALI_TEST_CHECK( false );
556 DynamicsBodyConfig bodyConfig(DynamicsBodyConfig::New());
557 Actor actor(Actor::New());
559 // enable dynamics on the actor to create the Dynamicsbody
560 actor.EnableDynamics(bodyConfig);
562 DynamicsBody body(actor.GetDynamicsBody());
564 body.ConserveVolume(false);
565 DALI_TEST_CHECK( true );
569 int UtcDaliDynamicsBodyConserveShape(void)
571 #if !defined(DYNAMICS_SUPPORT)
572 tet_infoline("No dynamics support compiled\n");
575 tet_infoline("UtcDaliDynamicsBodyConserveShape");
577 TestApplication application;
580 application.SendNotification();
581 application.Render();
582 application.Render();
584 DynamicsWorldConfig worldConfig(DynamicsWorldConfig::New());
585 DynamicsWorld world( Stage::GetCurrent().InitializeDynamics(worldConfig) );
589 // cannot create dynamics world, log failure and exit
590 DALI_TEST_CHECK( false );
594 DynamicsBodyConfig bodyConfig(DynamicsBodyConfig::New());
595 Actor actor(Actor::New());
597 // enable dynamics on the actor to create the Dynamicsbody
598 actor.EnableDynamics(bodyConfig);
600 DynamicsBody body(actor.GetDynamicsBody());
602 body.ConserveShape(false);
603 DALI_TEST_CHECK( true );