2 // Copyright (c) 2014 Samsung Electronics Co., Ltd.
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
8 // http://floralicense.org/license/
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.
22 #include <dali/public-api/dali-core.h>
24 #include <dali-test-suite-utils.h>
29 static void Startup();
30 static void Cleanup();
33 void (*tet_startup)() = Startup;
34 void (*tet_cleanup)() = Cleanup;
37 static void UtcDaliDynamicsBodyConstructor();
38 static void UtcDaliDynamicsBodyGetMass();
39 static void UtcDaliDynamicsBodyGetElasticity();
40 static void UtcDaliDynamicsBodySetLinearVelocity();
41 static void UtcDaliDynamicsBodySetAngularVelocity();
42 static void UtcDaliDynamicsBodySetKinematic();
43 static void UtcDaliDynamicsBodyIsKinematic();
44 static void UtcDaliDynamicsBodySetSleepEnabled();
45 static void UtcDaliDynamicsBodyGetSleepEnabled();
46 static void UtcDaliDynamicsBodyWakeUp();
47 static void UtcDaliDynamicsBodyAddAnchor();
48 static void UtcDaliDynamicsBodyConserveVolume();
49 static void UtcDaliDynamicsBodyConserveShape();
52 POSITIVE_TC_IDX = 0x01,
56 // Add test functionality for all APIs in the class (Positive and Negative)
58 struct tet_testlist tet_testlist[] =
60 { UtcDaliDynamicsBodyConstructor, POSITIVE_TC_IDX },
61 { UtcDaliDynamicsBodyGetMass, POSITIVE_TC_IDX },
62 { UtcDaliDynamicsBodyGetElasticity, POSITIVE_TC_IDX },
63 { UtcDaliDynamicsBodySetLinearVelocity, POSITIVE_TC_IDX },
64 { UtcDaliDynamicsBodySetAngularVelocity, POSITIVE_TC_IDX },
65 { UtcDaliDynamicsBodySetKinematic, POSITIVE_TC_IDX },
66 { UtcDaliDynamicsBodyIsKinematic, POSITIVE_TC_IDX },
67 { UtcDaliDynamicsBodySetSleepEnabled, POSITIVE_TC_IDX },
68 { UtcDaliDynamicsBodyGetSleepEnabled, POSITIVE_TC_IDX },
69 { UtcDaliDynamicsBodyWakeUp, POSITIVE_TC_IDX },
70 { UtcDaliDynamicsBodyAddAnchor, POSITIVE_TC_IDX },
71 { UtcDaliDynamicsBodyConserveVolume, POSITIVE_TC_IDX },
72 { UtcDaliDynamicsBodyConserveShape, POSITIVE_TC_IDX },
77 // Called only once before first test is run.
82 // Called only once after last test is run
87 void UtcDaliDynamicsBodyConstructor()
89 tet_infoline("UtcDaliDynamicsBodyConstructor - DynamicsBody::DynamicsBody()");
91 TestApplication application;
94 application.SendNotification();
98 // Default constructor - create an uninitialized handle
100 DALI_TEST_CHECK( !body );
102 // create world and actor
103 DynamicsWorldConfig worldConfig(DynamicsWorldConfig::New());
104 DynamicsWorld world( Stage::GetCurrent().InitializeDynamics(worldConfig) );
108 // cannot create dynamics world, log failure and exit
109 DALI_TEST_CHECK( false );
113 DynamicsBodyConfig bodyConfig(DynamicsBodyConfig::New());
114 Actor actor(Actor::New());
116 // enable dynamics on the actor to create the Dynamicsbody
117 actor.EnableDynamics(bodyConfig);
120 body = actor.GetDynamicsBody();
122 DALI_TEST_CHECK( body );
125 void UtcDaliDynamicsBodyGetMass()
127 TestApplication application;
130 application.SendNotification();
131 application.Render();
132 application.Render();
134 const float testMass = 1.23f;
136 DynamicsWorldConfig worldConfig(DynamicsWorldConfig::New());
137 DynamicsWorld world( Stage::GetCurrent().InitializeDynamics(worldConfig) );
141 // cannot create dynamics world, log failure and exit
142 DALI_TEST_CHECK( false );
146 DynamicsBodyConfig bodyConfig(DynamicsBodyConfig::New());
147 bodyConfig.SetMass(testMass);
148 Actor actor(Actor::New());
150 // enable dynamics on the actor to create the Dynamicsbody
151 actor.EnableDynamics(bodyConfig);
153 tet_infoline("UtcDaliDynamicsBodyGetMass - DynamicsBody::GetMass");
154 DALI_TEST_EQUALS( testMass, actor.GetDynamicsBody().GetMass(), Math::MACHINE_EPSILON_0, TEST_LOCATION );
157 void UtcDaliDynamicsBodyGetElasticity()
159 TestApplication application;
162 application.SendNotification();
163 application.Render();
164 application.Render();
166 const float testElasticity = 1.23f;
168 DynamicsWorldConfig worldConfig(DynamicsWorldConfig::New());
169 DynamicsWorld world( Stage::GetCurrent().InitializeDynamics(worldConfig) );
173 // cannot create dynamics world, log failure and exit
174 DALI_TEST_CHECK( false );
178 DynamicsBodyConfig bodyConfig(DynamicsBodyConfig::New());
179 bodyConfig.SetElasticity(testElasticity);
180 Actor actor(Actor::New());
182 // enable dynamics on the actor to create the Dynamicsbody
183 actor.EnableDynamics(bodyConfig);
185 tet_infoline("UtcDaliDynamicsBodyGetMass - DynamicsBody::GetElasticity");
186 DALI_TEST_EQUALS( testElasticity, actor.GetDynamicsBody().GetElasticity(), Math::MACHINE_EPSILON_0, TEST_LOCATION );
189 void UtcDaliDynamicsBodySetLinearVelocity()
191 tet_infoline("UtcDaliDynamicsBodySetLinearVelocity - DynamicsBody::SetLinearVelocity");
193 TestApplication application;
196 application.SendNotification();
197 application.Render();
198 application.Render();
200 DynamicsWorldConfig worldConfig(DynamicsWorldConfig::New());
201 DynamicsWorld world( Stage::GetCurrent().InitializeDynamics(worldConfig) );
205 // cannot create dynamics world, log failure and exit
206 DALI_TEST_CHECK( false );
210 DynamicsBodyConfig bodyConfig(DynamicsBodyConfig::New());
211 Actor actor(Actor::New());
213 // enable dynamics on the actor to create the Dynamicsbody
214 actor.EnableDynamics(bodyConfig);
216 DynamicsBody body(actor.GetDynamicsBody());
217 body.SetLinearVelocity(Vector3::ONE);
219 DALI_TEST_CHECK( true );
222 void UtcDaliDynamicsBodySetAngularVelocity()
224 tet_infoline("UtcDaliDynamicsBodySetAngularVelocity - DynamicsBody::SetAngularVelocity");
226 TestApplication application;
229 application.SendNotification();
230 application.Render();
231 application.Render();
233 DynamicsWorldConfig worldConfig(DynamicsWorldConfig::New());
234 DynamicsWorld world( Stage::GetCurrent().InitializeDynamics(worldConfig) );
238 // cannot create dynamics world, log failure and exit
239 DALI_TEST_CHECK( false );
243 DynamicsBodyConfig bodyConfig(DynamicsBodyConfig::New());
244 Actor actor(Actor::New());
246 // enable dynamics on the actor to create the Dynamicsbody
247 actor.EnableDynamics(bodyConfig);
249 DynamicsBody body(actor.GetDynamicsBody());
250 body.SetAngularVelocity(Vector3::ONE);
252 DALI_TEST_CHECK( true );
255 void UtcDaliDynamicsBodySetKinematic()
257 TestApplication application;
260 application.SendNotification();
261 application.Render();
262 application.Render();
264 const float testMass = 1.0f;
265 DynamicsWorldConfig worldConfig(DynamicsWorldConfig::New());
266 DynamicsWorld world( Stage::GetCurrent().InitializeDynamics(worldConfig) );
270 // cannot create dynamics world, log failure and exit
271 DALI_TEST_CHECK( false );
275 DynamicsBodyConfig bodyConfig(DynamicsBodyConfig::New());
276 bodyConfig.SetMass(testMass);
277 Actor actor(Actor::New());
279 // enable dynamics on the actor to create the Dynamicsbody
280 actor.EnableDynamics(bodyConfig);
282 DynamicsBody body(actor.GetDynamicsBody());
284 DALI_TEST_EQUALS( testMass, body.GetMass(), Math::MACHINE_EPSILON_0, TEST_LOCATION );
286 tet_infoline("UtcDaliDynamicsBodySetKinematic - DynamicsBody::SetKinematic(true)");
287 body.SetKinematic(true);
289 DALI_TEST_CHECK( body.IsKinematic() );
290 DALI_TEST_EQUALS( 0.0f, body.GetMass(), Math::MACHINE_EPSILON_0, TEST_LOCATION );
292 tet_infoline("UtcDaliDynamicsBodySetKinematic - DynamicsBody::SetKinematic(false)");
293 body.SetKinematic(false);
294 DALI_TEST_CHECK( !body.IsKinematic() );
295 DALI_TEST_EQUALS( testMass, body.GetMass(), Math::MACHINE_EPSILON_0, TEST_LOCATION );
298 void UtcDaliDynamicsBodyIsKinematic()
300 TestApplication application;
303 application.SendNotification();
304 application.Render();
305 application.Render();
307 const float testMass = 1.0f;
308 DynamicsWorldConfig worldConfig(DynamicsWorldConfig::New());
309 DynamicsWorld world( Stage::GetCurrent().InitializeDynamics(worldConfig) );
313 // cannot create dynamics world, log failure and exit
314 DALI_TEST_CHECK( false );
318 DynamicsBodyConfig bodyConfig(DynamicsBodyConfig::New());
319 bodyConfig.SetMass(testMass);
320 Actor actor(Actor::New());
322 // enable dynamics on the actor to create the Dynamicsbody
323 actor.EnableDynamics(bodyConfig);
325 DynamicsBody body(actor.GetDynamicsBody());
327 DALI_TEST_EQUALS( testMass, body.GetMass(), Math::MACHINE_EPSILON_0, TEST_LOCATION );
329 tet_infoline("UtcDaliDynamicsBodySetKinematic - DynamicsBody::IsSetKinematic");
330 body.SetKinematic(true);
332 DALI_TEST_CHECK( body.IsKinematic() );
333 body.SetKinematic(false);
334 DALI_TEST_CHECK( !body.IsKinematic() );
337 void UtcDaliDynamicsBodySetSleepEnabled()
339 tet_infoline("UtcDaliDynamicsBodySetSleepEnabled");
341 TestApplication application;
344 application.SendNotification();
345 application.Render();
346 application.Render();
348 DynamicsWorldConfig worldConfig(DynamicsWorldConfig::New());
349 DynamicsWorld world( Stage::GetCurrent().InitializeDynamics(worldConfig) );
353 // cannot create dynamics world, log failure and exit
354 DALI_TEST_CHECK( false );
358 DynamicsBodyConfig bodyConfig(DynamicsBodyConfig::New());
359 Actor actor(Actor::New());
361 // enable dynamics on the actor to create the Dynamicsbody
362 actor.EnableDynamics(bodyConfig);
364 DynamicsBody body(actor.GetDynamicsBody());
366 // SleepEnabled true by default
367 DALI_TEST_CHECK( body.GetSleepEnabled() );
368 body.SetSleepEnabled(false);
369 DALI_TEST_CHECK( !body.GetSleepEnabled() );
372 void UtcDaliDynamicsBodyGetSleepEnabled()
374 tet_infoline("UtcDaliDynamicsBodyGetSleepEnabled");
376 TestApplication application;
379 application.SendNotification();
380 application.Render();
381 application.Render();
383 DynamicsWorldConfig worldConfig(DynamicsWorldConfig::New());
384 DynamicsWorld world( Stage::GetCurrent().InitializeDynamics(worldConfig) );
388 // cannot create dynamics world, log failure and exit
389 DALI_TEST_CHECK( false );
393 DynamicsBodyConfig bodyConfig(DynamicsBodyConfig::New());
394 Actor actor(Actor::New());
396 // enable dynamics on the actor to create the Dynamicsbody
397 actor.EnableDynamics(bodyConfig);
399 DynamicsBody body(actor.GetDynamicsBody());
401 // SleepEnabled true by default
402 DALI_TEST_CHECK( body.GetSleepEnabled() );
403 body.SetSleepEnabled(false);
404 DALI_TEST_CHECK( !body.GetSleepEnabled() );
407 void UtcDaliDynamicsBodyWakeUp()
409 tet_infoline("UtcDaliDynamicsBodyWakeUp");
411 TestApplication application;
414 application.SendNotification();
415 application.Render();
416 application.Render();
418 DynamicsWorldConfig worldConfig(DynamicsWorldConfig::New());
419 DynamicsWorld world( Stage::GetCurrent().InitializeDynamics(worldConfig) );
423 // cannot create dynamics world, log failure and exit
424 DALI_TEST_CHECK( false );
428 DynamicsBodyConfig bodyConfig(DynamicsBodyConfig::New());
429 Actor actor(Actor::New());
431 // enable dynamics on the actor to create the Dynamicsbody
432 actor.EnableDynamics(bodyConfig);
434 DynamicsBody body(actor.GetDynamicsBody());
437 DALI_TEST_CHECK( true );
440 void UtcDaliDynamicsBodyAddAnchor()
442 tet_infoline("UtcDaliDynamicsBodyAddAnchor - DynamicsBody::AddAnchor()");
444 TestApplication application;
446 DynamicsWorldConfig worldConfig(DynamicsWorldConfig::New());
447 worldConfig.SetType(DynamicsWorldConfig::SOFT);
448 DynamicsWorld world( Stage::GetCurrent().InitializeDynamics(worldConfig) );
452 // cannot create dynamics world, log failure and exit
453 DALI_TEST_CHECK( false );
457 Actor rootActor(Actor::New());
458 world.SetRootActor(rootActor);
459 Stage::GetCurrent().Add(rootActor);
461 DynamicsBodyConfig softConfig( DynamicsBodyConfig::New() );
462 softConfig.SetType(DynamicsBodyConfig::SOFT);
463 Mesh mesh(Mesh::NewPlane(10.0f, 10.0f, 10, 10));
464 DynamicsShape meshShape(DynamicsShape::NewMesh(mesh));
465 softConfig.SetShape( meshShape );
466 softConfig.SetMass(1.0f);
467 MeshActor softActor(MeshActor::New(mesh));
469 rootActor.Add(softActor);
470 softActor.EnableDynamics(softConfig);
471 DynamicsBody softBody(softActor.GetDynamicsBody());
473 DynamicsBodyConfig anchorConfig(DynamicsBodyConfig::New());
474 anchorConfig.SetMass(0.0f);
475 Actor anchor(Actor::New());
476 rootActor.Add(anchor);
477 anchor.EnableDynamics(anchorConfig);
478 DynamicsBody anchorBody(anchor.GetDynamicsBody());
479 anchorBody.SetKinematic(true);
482 softBody.AddAnchor(0, anchorBody, false);
484 DALI_TEST_CHECK(true)
486 catch(Dali::DaliException& e)
488 tet_printf("Assertion %s failed at %s\n", e.mCondition.c_str(), e.mLocation.c_str());
489 DALI_TEST_CHECK( false );
492 rootActor.Remove(softActor);
493 rootActor.Remove(anchor);
494 Stage::GetCurrent().Remove(rootActor);
495 softActor.DisableDynamics();
496 anchor.DisableDynamics();
499 void UtcDaliDynamicsBodyConserveVolume()
501 tet_infoline("UtcDaliDynamicsBodyConserveVolume");
503 TestApplication application;
506 application.SendNotification();
507 application.Render();
508 application.Render();
510 DynamicsWorldConfig worldConfig(DynamicsWorldConfig::New());
511 DynamicsWorld world( Stage::GetCurrent().InitializeDynamics(worldConfig) );
515 // cannot create dynamics world, log failure and exit
516 DALI_TEST_CHECK( false );
520 DynamicsBodyConfig bodyConfig(DynamicsBodyConfig::New());
521 Actor actor(Actor::New());
523 // enable dynamics on the actor to create the Dynamicsbody
524 actor.EnableDynamics(bodyConfig);
526 DynamicsBody body(actor.GetDynamicsBody());
528 body.ConserveVolume(false);
529 DALI_TEST_CHECK( true );
532 void UtcDaliDynamicsBodyConserveShape()
534 tet_infoline("UtcDaliDynamicsBodyConserveShape");
536 TestApplication application;
539 application.SendNotification();
540 application.Render();
541 application.Render();
543 DynamicsWorldConfig worldConfig(DynamicsWorldConfig::New());
544 DynamicsWorld world( Stage::GetCurrent().InitializeDynamics(worldConfig) );
548 // cannot create dynamics world, log failure and exit
549 DALI_TEST_CHECK( false );
553 DynamicsBodyConfig bodyConfig(DynamicsBodyConfig::New());
554 Actor actor(Actor::New());
556 // enable dynamics on the actor to create the Dynamicsbody
557 actor.EnableDynamics(bodyConfig);
559 DynamicsBody body(actor.GetDynamicsBody());
561 body.ConserveShape(false);
562 DALI_TEST_CHECK( true );