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.
21 #include <dali/public-api/dali-core.h>
22 #include "dali-test-suite-utils/dali-test-suite-utils.h"
26 void handle_test_startup(void)
28 test_return_value = TET_UNDEF;
31 void handle_test_cleanup(void)
33 test_return_value = TET_PASS;
39 Handle ImplicitCopyConstructor(Handle passedByValue)
41 // object + copy + passedByValue, ref count == 3
42 DALI_TEST_CHECK(passedByValue);
45 DALI_TEST_EQUALS(3, passedByValue.GetBaseObject().ReferenceCount(), TEST_LOCATION);
51 void CheckTypeName(const Property::Type& type)
57 DALI_TEST_CHECK( "NONE" == std::string(PropertyTypes::GetName( type ) ) );
60 case Property::BOOLEAN:
62 DALI_TEST_CHECK( "BOOLEAN" == std::string(PropertyTypes::GetName( type ) ) );
67 DALI_TEST_CHECK( "FLOAT" == std::string(PropertyTypes::GetName( type ) ) );
70 case Property::INTEGER:
72 DALI_TEST_CHECK( "INTEGER" == std::string(PropertyTypes::GetName( type ) ) );
75 case Property::UNSIGNED_INTEGER:
77 DALI_TEST_CHECK( "UNSIGNED_INTEGER" == std::string(PropertyTypes::GetName( type ) ) );
80 case Property::VECTOR2:
82 DALI_TEST_CHECK( "VECTOR2" == std::string(PropertyTypes::GetName( type ) ) );
85 case Property::VECTOR3:
87 DALI_TEST_CHECK( "VECTOR3" == std::string(PropertyTypes::GetName( type ) ) );
90 case Property::VECTOR4:
92 DALI_TEST_CHECK( "VECTOR4" == std::string(PropertyTypes::GetName( type ) ) );
95 case Property::MATRIX3:
97 DALI_TEST_CHECK( "MATRIX3" == std::string(PropertyTypes::GetName( type ) ) );
100 case Property::MATRIX:
102 DALI_TEST_CHECK( "MATRIX" == std::string(PropertyTypes::GetName( type ) ) );
105 case Property::RECTANGLE:
107 DALI_TEST_CHECK( "RECTANGLE" == std::string(PropertyTypes::GetName( type ) ) );
110 case Property::ROTATION:
112 DALI_TEST_CHECK( "ROTATION" == std::string(PropertyTypes::GetName( type ) ) );
115 case Property::STRING:
117 DALI_TEST_CHECK( "STRING" == std::string(PropertyTypes::GetName( type ) ) );
120 case Property::ARRAY:
122 DALI_TEST_CHECK( "ARRAY" == std::string(PropertyTypes::GetName( type ) ) );
127 DALI_TEST_CHECK( "MAP" == std::string(PropertyTypes::GetName( type ) ) );
130 case Property::TYPE_COUNT:
132 DALI_TEST_CHECK( "NONE" == std::string(PropertyTypes::GetName( type ) ) );
142 int UtcDaliHandleConstructorVoid(void)
144 TestApplication application;
145 tet_infoline("Testing Dali::Handle::Handle()");
149 DALI_TEST_CHECK(!object);
153 int UtcDaliHandleCopyConstructor(void)
155 TestApplication application;
156 tet_infoline("Testing Dali::Handle::Handle(const Handle&)");
158 // Initialize an object, ref count == 1
159 Handle object = Actor::New();
161 DALI_TEST_EQUALS(1, object.GetBaseObject().ReferenceCount(), TEST_LOCATION);
163 // Copy the object, ref count == 2
165 DALI_TEST_CHECK(copy);
168 DALI_TEST_EQUALS(2, copy.GetBaseObject().ReferenceCount(), TEST_LOCATION);
172 // Pass by value, and return another copy, ref count == 3
173 Handle anotherCopy = ImplicitCopyConstructor(copy);
175 DALI_TEST_CHECK(anotherCopy);
178 DALI_TEST_EQUALS(3, anotherCopy.GetBaseObject().ReferenceCount(), TEST_LOCATION);
182 // anotherCopy out of scope, ref count == 2
183 DALI_TEST_CHECK(copy);
186 DALI_TEST_EQUALS(2, copy.GetBaseObject().ReferenceCount(), TEST_LOCATION);
191 int UtcDaliHandleAssignmentOperator(void)
193 TestApplication application;
194 tet_infoline("Testing Dali::Handle::operator=");
196 Handle object = Actor::New();
198 DALI_TEST_CHECK(object);
199 DALI_TEST_EQUALS(1, object.GetBaseObject().ReferenceCount(), TEST_LOCATION);
202 DALI_TEST_CHECK(!copy);
205 DALI_TEST_CHECK(copy);
206 DALI_TEST_EQUALS(2, copy.GetBaseObject().ReferenceCount(), TEST_LOCATION);
207 DALI_TEST_CHECK(&(copy.GetBaseObject()) == &(object.GetBaseObject()));
211 int UtcDaliHandleSupports(void)
213 tet_infoline("Positive Test Dali::Handle::Supports()");
214 TestApplication application;
216 Actor actor = Actor::New();
217 DALI_TEST_CHECK( true == actor.Supports( Handle::DYNAMIC_PROPERTIES ) );
221 int UtcDaliHandleGetPropertyCount(void)
223 tet_infoline("Positive Test Dali::Handle::GetPropertyCount()");
224 TestApplication application;
226 Actor actor = Actor::New();
227 int defaultPropertyCount( actor.GetPropertyCount() );
229 // Register a dynamic property
230 actor.RegisterProperty( "test-property", float(123.0f) );
231 DALI_TEST_CHECK( (defaultPropertyCount + 1u) == actor.GetPropertyCount() );
235 int UtcDaliHandleGetPropertyName(void)
237 tet_infoline("Positive Test Dali::Handle::GetPropertyName()");
238 TestApplication application;
240 Actor actor = Actor::New();
241 DALI_TEST_CHECK( "parent-origin" == actor.GetPropertyName( Actor::PARENT_ORIGIN ) );
243 // Register a dynamic property
244 std::string name("this-name-should-match");
245 Property::Index index = actor.RegisterProperty( name, float(123.0f) );
246 DALI_TEST_CHECK( name == actor.GetPropertyName( index ) );
251 int UtcDaliHandleGetPropertyIndex(void)
253 tet_infoline("Positive Test Dali::Handle::GetPropertyIndex()");
254 TestApplication application;
256 Actor actor = Actor::New();
257 DALI_TEST_CHECK( Actor::PARENT_ORIGIN == actor.GetPropertyIndex("parent-origin") );
259 // Register a dynamic property
260 std::string name("this-name-should-match");
261 Property::Index index = actor.RegisterProperty( name, float(123.0f) );
262 DALI_TEST_CHECK( index == actor.GetPropertyIndex( name ) );
266 int UtcDaliHandleIsPropertyWritable(void)
268 tet_infoline("Positive Test Dali::Handle::IsPropertyWritable()");
269 TestApplication application;
271 Actor actor = Actor::New();
273 // Actor properties which are writable:
274 DALI_TEST_CHECK( true == actor.IsPropertyWritable( Actor::PARENT_ORIGIN ) );
275 DALI_TEST_CHECK( true == actor.IsPropertyWritable( Actor::PARENT_ORIGIN_X ) );
276 DALI_TEST_CHECK( true == actor.IsPropertyWritable( Actor::PARENT_ORIGIN_Y ) );
277 DALI_TEST_CHECK( true == actor.IsPropertyWritable( Actor::PARENT_ORIGIN_Z ) );
278 DALI_TEST_CHECK( true == actor.IsPropertyWritable( Actor::ANCHOR_POINT ) );
279 DALI_TEST_CHECK( true == actor.IsPropertyWritable( Actor::ANCHOR_POINT_X ) );
280 DALI_TEST_CHECK( true == actor.IsPropertyWritable( Actor::ANCHOR_POINT_Y ) );
281 DALI_TEST_CHECK( true == actor.IsPropertyWritable( Actor::ANCHOR_POINT_Z ) );
282 DALI_TEST_CHECK( true == actor.IsPropertyWritable( Actor::SIZE ) );
283 DALI_TEST_CHECK( true == actor.IsPropertyWritable( Actor::SIZE_WIDTH ) );
284 DALI_TEST_CHECK( true == actor.IsPropertyWritable( Actor::SIZE_HEIGHT ) );
285 DALI_TEST_CHECK( true == actor.IsPropertyWritable( Actor::SIZE_DEPTH ) );
286 DALI_TEST_CHECK( true == actor.IsPropertyWritable( Actor::POSITION ) );
287 DALI_TEST_CHECK( true == actor.IsPropertyWritable( Actor::POSITION_X ) );
288 DALI_TEST_CHECK( true == actor.IsPropertyWritable( Actor::POSITION_Y ) );
289 DALI_TEST_CHECK( true == actor.IsPropertyWritable( Actor::POSITION_Z ) );
290 DALI_TEST_CHECK( true == actor.IsPropertyWritable( Actor::ROTATION ) );
291 DALI_TEST_CHECK( true == actor.IsPropertyWritable( Actor::SCALE ) );
292 DALI_TEST_CHECK( true == actor.IsPropertyWritable( Actor::SCALE_X ) );
293 DALI_TEST_CHECK( true == actor.IsPropertyWritable( Actor::SCALE_Y ) );
294 DALI_TEST_CHECK( true == actor.IsPropertyWritable( Actor::SCALE_Z ) );
295 DALI_TEST_CHECK( true == actor.IsPropertyWritable( Actor::VISIBLE ) );
296 DALI_TEST_CHECK( true == actor.IsPropertyWritable( Actor::COLOR ) );
297 DALI_TEST_CHECK( true == actor.IsPropertyWritable( Actor::COLOR_RED ) );
298 DALI_TEST_CHECK( true == actor.IsPropertyWritable( Actor::COLOR_GREEN ) );
299 DALI_TEST_CHECK( true == actor.IsPropertyWritable( Actor::COLOR_BLUE ) );
300 DALI_TEST_CHECK( true == actor.IsPropertyWritable( Actor::COLOR_ALPHA ) );
302 // World-properties are not writable:
303 DALI_TEST_CHECK( false == actor.IsPropertyWritable( Actor::WORLD_POSITION ) );
304 DALI_TEST_CHECK( false == actor.IsPropertyWritable( Actor::WORLD_ROTATION ) );
305 DALI_TEST_CHECK( false == actor.IsPropertyWritable( Actor::WORLD_SCALE ) );
306 DALI_TEST_CHECK( false == actor.IsPropertyWritable( Actor::WORLD_COLOR ) );
307 DALI_TEST_CHECK( false == actor.IsPropertyWritable( Actor::WORLD_POSITION_X ) );
308 DALI_TEST_CHECK( false == actor.IsPropertyWritable( Actor::WORLD_POSITION_Y ) );
309 DALI_TEST_CHECK( false == actor.IsPropertyWritable( Actor::WORLD_POSITION_Z ) );
314 int UtcDaliHandleIsPropertyAnimatable(void)
316 tet_infoline("Positive Test Dali::Handle::IsPropertyAnimatable()");
317 TestApplication application;
319 Actor actor = Actor::New();
321 // Actor properties which are animatable:
322 DALI_TEST_CHECK( false == actor.IsPropertyAnimatable( Actor::PARENT_ORIGIN ) );
323 DALI_TEST_CHECK( false == actor.IsPropertyAnimatable( Actor::PARENT_ORIGIN_X ) );
324 DALI_TEST_CHECK( false == actor.IsPropertyAnimatable( Actor::PARENT_ORIGIN_Y ) );
325 DALI_TEST_CHECK( false == actor.IsPropertyAnimatable( Actor::PARENT_ORIGIN_Z ) );
326 DALI_TEST_CHECK( false == actor.IsPropertyAnimatable( Actor::ANCHOR_POINT ) );
327 DALI_TEST_CHECK( false == actor.IsPropertyAnimatable( Actor::ANCHOR_POINT_X ) );
328 DALI_TEST_CHECK( false == actor.IsPropertyAnimatable( Actor::ANCHOR_POINT_Y ) );
329 DALI_TEST_CHECK( false == actor.IsPropertyAnimatable( Actor::ANCHOR_POINT_Z ) );
330 DALI_TEST_CHECK( true == actor.IsPropertyAnimatable( Actor::SIZE ) );
331 DALI_TEST_CHECK( true == actor.IsPropertyAnimatable( Actor::SIZE_WIDTH ) );
332 DALI_TEST_CHECK( true == actor.IsPropertyAnimatable( Actor::SIZE_HEIGHT ) );
333 DALI_TEST_CHECK( true == actor.IsPropertyAnimatable( Actor::SIZE_DEPTH ) );
334 DALI_TEST_CHECK( true == actor.IsPropertyAnimatable( Actor::POSITION ) );
335 DALI_TEST_CHECK( true == actor.IsPropertyAnimatable( Actor::POSITION_X ) );
336 DALI_TEST_CHECK( true == actor.IsPropertyAnimatable( Actor::POSITION_Y ) );
337 DALI_TEST_CHECK( true == actor.IsPropertyAnimatable( Actor::POSITION_Z ) );
338 DALI_TEST_CHECK( true == actor.IsPropertyAnimatable( Actor::ROTATION ) );
339 DALI_TEST_CHECK( true == actor.IsPropertyAnimatable( Actor::SCALE ) );
340 DALI_TEST_CHECK( true == actor.IsPropertyAnimatable( Actor::SCALE_X ) );
341 DALI_TEST_CHECK( true == actor.IsPropertyAnimatable( Actor::SCALE_Y ) );
342 DALI_TEST_CHECK( true == actor.IsPropertyAnimatable( Actor::SCALE_Z ) );
343 DALI_TEST_CHECK( true == actor.IsPropertyAnimatable( Actor::VISIBLE ) );
344 DALI_TEST_CHECK( true == actor.IsPropertyAnimatable( Actor::COLOR ) );
345 DALI_TEST_CHECK( true == actor.IsPropertyAnimatable( Actor::COLOR_RED ) );
346 DALI_TEST_CHECK( true == actor.IsPropertyAnimatable( Actor::COLOR_GREEN ) );
347 DALI_TEST_CHECK( true == actor.IsPropertyAnimatable( Actor::COLOR_BLUE ) );
348 DALI_TEST_CHECK( true == actor.IsPropertyAnimatable( Actor::COLOR_ALPHA ) );
350 // World-properties can not be animated
351 DALI_TEST_CHECK( false == actor.IsPropertyAnimatable( Actor::WORLD_POSITION ) );
352 DALI_TEST_CHECK( false == actor.IsPropertyAnimatable( Actor::WORLD_ROTATION ) );
353 DALI_TEST_CHECK( false == actor.IsPropertyAnimatable( Actor::WORLD_SCALE ) );
354 DALI_TEST_CHECK( false == actor.IsPropertyAnimatable( Actor::WORLD_COLOR ) );
355 DALI_TEST_CHECK( false == actor.IsPropertyAnimatable( Actor::WORLD_POSITION_X ) );
356 DALI_TEST_CHECK( false == actor.IsPropertyAnimatable( Actor::WORLD_POSITION_Y ) );
357 DALI_TEST_CHECK( false == actor.IsPropertyAnimatable( Actor::WORLD_POSITION_Z ) );
362 int UtcDaliHandleIsPropertyAConstraintInput(void)
364 TestApplication application;
366 Actor actor = Actor::New();
368 // Actor properties which can be used as a constraint input:
369 DALI_TEST_CHECK( true == actor.IsPropertyAConstraintInput( Actor::PARENT_ORIGIN ) );
370 DALI_TEST_CHECK( true == actor.IsPropertyAConstraintInput( Actor::PARENT_ORIGIN_X ) );
371 DALI_TEST_CHECK( true == actor.IsPropertyAConstraintInput( Actor::PARENT_ORIGIN_Y ) );
372 DALI_TEST_CHECK( true == actor.IsPropertyAConstraintInput( Actor::PARENT_ORIGIN_Z ) );
373 DALI_TEST_CHECK( true == actor.IsPropertyAConstraintInput( Actor::ANCHOR_POINT ) );
374 DALI_TEST_CHECK( true == actor.IsPropertyAConstraintInput( Actor::ANCHOR_POINT_X ) );
375 DALI_TEST_CHECK( true == actor.IsPropertyAConstraintInput( Actor::ANCHOR_POINT_Y ) );
376 DALI_TEST_CHECK( true == actor.IsPropertyAConstraintInput( Actor::ANCHOR_POINT_Z ) );
377 DALI_TEST_CHECK( true == actor.IsPropertyAConstraintInput( Actor::SIZE ) );
378 DALI_TEST_CHECK( true == actor.IsPropertyAConstraintInput( Actor::SIZE_WIDTH ) );
379 DALI_TEST_CHECK( true == actor.IsPropertyAConstraintInput( Actor::SIZE_HEIGHT ) );
380 DALI_TEST_CHECK( true == actor.IsPropertyAConstraintInput( Actor::SIZE_DEPTH ) );
381 DALI_TEST_CHECK( true == actor.IsPropertyAConstraintInput( Actor::POSITION ) );
382 DALI_TEST_CHECK( true == actor.IsPropertyAConstraintInput( Actor::POSITION_X ) );
383 DALI_TEST_CHECK( true == actor.IsPropertyAConstraintInput( Actor::POSITION_Y ) );
384 DALI_TEST_CHECK( true == actor.IsPropertyAConstraintInput( Actor::POSITION_Z ) );
385 DALI_TEST_CHECK( true == actor.IsPropertyAConstraintInput( Actor::ROTATION ) );
386 DALI_TEST_CHECK( true == actor.IsPropertyAConstraintInput( Actor::SCALE ) );
387 DALI_TEST_CHECK( true == actor.IsPropertyAConstraintInput( Actor::SCALE_X ) );
388 DALI_TEST_CHECK( true == actor.IsPropertyAConstraintInput( Actor::SCALE_Y ) );
389 DALI_TEST_CHECK( true == actor.IsPropertyAConstraintInput( Actor::SCALE_Z ) );
390 DALI_TEST_CHECK( true == actor.IsPropertyAConstraintInput( Actor::VISIBLE ) );
391 DALI_TEST_CHECK( true == actor.IsPropertyAConstraintInput( Actor::COLOR ) );
392 DALI_TEST_CHECK( true == actor.IsPropertyAConstraintInput( Actor::COLOR_RED ) );
393 DALI_TEST_CHECK( true == actor.IsPropertyAConstraintInput( Actor::COLOR_GREEN ) );
394 DALI_TEST_CHECK( true == actor.IsPropertyAConstraintInput( Actor::COLOR_BLUE ) );
395 DALI_TEST_CHECK( true == actor.IsPropertyAConstraintInput( Actor::COLOR_ALPHA ) );
396 DALI_TEST_CHECK( true == actor.IsPropertyAConstraintInput( Actor::WORLD_POSITION ) );
397 DALI_TEST_CHECK( true == actor.IsPropertyAConstraintInput( Actor::WORLD_ROTATION ) );
398 DALI_TEST_CHECK( true == actor.IsPropertyAConstraintInput( Actor::WORLD_SCALE ) );
399 DALI_TEST_CHECK( true == actor.IsPropertyAConstraintInput( Actor::WORLD_COLOR ) );
400 DALI_TEST_CHECK( true == actor.IsPropertyAConstraintInput( Actor::WORLD_POSITION_X ) );
401 DALI_TEST_CHECK( true == actor.IsPropertyAConstraintInput( Actor::WORLD_POSITION_Y ) );
402 DALI_TEST_CHECK( true == actor.IsPropertyAConstraintInput( Actor::WORLD_POSITION_Z ) );
404 // Actor properties that cannot be used as a constraint input
405 DALI_TEST_CHECK( false == actor.IsPropertyAConstraintInput( Actor::NAME ) );
406 DALI_TEST_CHECK( false == actor.IsPropertyAConstraintInput( Actor::SENSITIVE ) );
407 DALI_TEST_CHECK( false == actor.IsPropertyAConstraintInput( Actor::LEAVE_REQUIRED ) );
408 DALI_TEST_CHECK( false == actor.IsPropertyAConstraintInput( Actor::INHERIT_ROTATION ) );
409 DALI_TEST_CHECK( false == actor.IsPropertyAConstraintInput( Actor::INHERIT_SCALE ) );
410 DALI_TEST_CHECK( false == actor.IsPropertyAConstraintInput( Actor::COLOR_MODE ) );
411 DALI_TEST_CHECK( false == actor.IsPropertyAConstraintInput( Actor::POSITION_INHERITANCE ) );
412 DALI_TEST_CHECK( false == actor.IsPropertyAConstraintInput( Actor::DRAW_MODE ) );
418 int UtcDaliHandleGetPropertyType(void)
420 tet_infoline("Positive Test Dali::Handle::GetPropertyType()");
421 TestApplication application;
422 unsigned int unsingedIntTest = 33;
424 Actor actor = Actor::New();
425 DALI_TEST_CHECK( Property::VECTOR3 == actor.GetPropertyType( Actor::PARENT_ORIGIN ) );
426 DALI_TEST_CHECK( Property::VECTOR3 == actor.GetPropertyType( Actor::ANCHOR_POINT ) );
427 DALI_TEST_CHECK( Property::VECTOR3 == actor.GetPropertyType( Actor::SIZE ) );
428 DALI_TEST_CHECK( Property::VECTOR3 == actor.GetPropertyType( Actor::POSITION ) );
429 DALI_TEST_CHECK( Property::ROTATION == actor.GetPropertyType( Actor::ROTATION ) );
430 DALI_TEST_CHECK( Property::VECTOR3 == actor.GetPropertyType( Actor::SCALE ) );
431 DALI_TEST_CHECK( Property::BOOLEAN == actor.GetPropertyType( Actor::VISIBLE ) );
432 DALI_TEST_CHECK( Property::VECTOR4 == actor.GetPropertyType( Actor::COLOR ) );
434 // Register some dynamic properties
435 Property::Index boolIndex = actor.RegisterProperty( "bool-property", bool(true) );
436 Property::Index floatIndex = actor.RegisterProperty( "float-property", float(123.0f) );
437 Property::Index intIndex = actor.RegisterProperty( "int-property", 123 );
438 Property::Index vector2Index = actor.RegisterProperty( "vector2-property", Vector2(1.0f, 2.0f) );
439 Property::Index vector3Index = actor.RegisterProperty( "vector3-property", Vector3(1.0f, 2.0f, 3.0f) );
440 Property::Index vector4Index = actor.RegisterProperty( "vector4-property", Vector4(1.0f, 2.0f, 3.0f, 4.0f) );
441 Property::Index rotationIndex = actor.RegisterProperty( "rotation-property", AngleAxis(Degree(180.0f), Vector3::YAXIS) );
443 DALI_TEST_CHECK( Property::BOOLEAN == actor.GetPropertyType( boolIndex ) );
444 DALI_TEST_CHECK( Property::FLOAT == actor.GetPropertyType( floatIndex ) );
445 DALI_TEST_CHECK( Property::INTEGER == actor.GetPropertyType( intIndex ) );
446 DALI_TEST_CHECK( Property::VECTOR2 == actor.GetPropertyType( vector2Index ) );
447 DALI_TEST_CHECK( Property::VECTOR3 == actor.GetPropertyType( vector3Index ) );
448 DALI_TEST_CHECK( Property::VECTOR4 == actor.GetPropertyType( vector4Index ) );
449 DALI_TEST_CHECK( Property::ROTATION == actor.GetPropertyType( rotationIndex ) );
451 // Non animatable properties
452 Property::Index nonAnimStringIndex = actor.RegisterProperty( "man-from-delmonte", std::string("yes"), Property::READ_WRITE);
453 Property::Index nonAnimV2Index = actor.RegisterProperty( "v2", Vector2(1.f, 2.f), Property::READ_WRITE);
454 Property::Index nonAnimV3Index = actor.RegisterProperty( "v3", Vector3(1.f, 2.f, 3.f), Property::READ_WRITE);
455 Property::Index nonAnimV4Index = actor.RegisterProperty( "v4", Vector4(1.f, 2.f, 3.f, 4.f), Property::READ_WRITE);
456 Property::Index nonAnimBooleanIndex = actor.RegisterProperty( "bool", true, Property::READ_WRITE);
457 Property::Index nonAnimFloatIndex = actor.RegisterProperty( "float", 0.f, Property::READ_WRITE);
458 Property::Index nonAnimIntegerIndex = actor.RegisterProperty( "int", 0, Property::READ_WRITE);
459 Property::Index nonAnimUnsignedIntIndex = actor.RegisterProperty( "unsinged-int", unsingedIntTest, Property::READ_WRITE);
461 DALI_TEST_CHECK( nonAnimStringIndex != Property::INVALID_INDEX );
462 DALI_TEST_CHECK( nonAnimV2Index != Property::INVALID_INDEX );
463 DALI_TEST_CHECK( nonAnimV3Index != Property::INVALID_INDEX );
464 DALI_TEST_CHECK( nonAnimV4Index != Property::INVALID_INDEX );
465 DALI_TEST_CHECK( nonAnimBooleanIndex != Property::INVALID_INDEX );
466 DALI_TEST_CHECK( nonAnimFloatIndex != Property::INVALID_INDEX );
467 DALI_TEST_CHECK( nonAnimIntegerIndex != Property::INVALID_INDEX );
468 DALI_TEST_CHECK( nonAnimUnsignedIntIndex != Property::INVALID_INDEX );
470 DALI_TEST_CHECK( Property::STRING == actor.GetPropertyType( nonAnimStringIndex ) );
471 DALI_TEST_CHECK( Property::VECTOR2 == actor.GetPropertyType( nonAnimV2Index ) );
472 DALI_TEST_CHECK( Property::VECTOR3 == actor.GetPropertyType( nonAnimV3Index ) );
473 DALI_TEST_CHECK( Property::VECTOR4 == actor.GetPropertyType( nonAnimV4Index ) );
474 DALI_TEST_CHECK( Property::BOOLEAN == actor.GetPropertyType( nonAnimBooleanIndex ) );
475 DALI_TEST_CHECK( Property::FLOAT == actor.GetPropertyType( nonAnimFloatIndex ) );
476 DALI_TEST_CHECK( Property::INTEGER == actor.GetPropertyType( nonAnimIntegerIndex ) );
477 DALI_TEST_CHECK( Property::UNSIGNED_INTEGER == actor.GetPropertyType( nonAnimUnsignedIntIndex ) );
479 DALI_TEST_CHECK( !actor.IsPropertyAnimatable( nonAnimStringIndex ) );
480 DALI_TEST_CHECK( !actor.IsPropertyAnimatable( nonAnimV2Index ) );
481 DALI_TEST_CHECK( !actor.IsPropertyAnimatable( nonAnimV3Index ) );
482 DALI_TEST_CHECK( !actor.IsPropertyAnimatable( nonAnimV4Index ) );
483 DALI_TEST_CHECK( !actor.IsPropertyAnimatable( nonAnimBooleanIndex ) );
484 DALI_TEST_CHECK( !actor.IsPropertyAnimatable( nonAnimFloatIndex ) );
485 DALI_TEST_CHECK( !actor.IsPropertyAnimatable( nonAnimIntegerIndex ) );
486 DALI_TEST_CHECK( !actor.IsPropertyAnimatable( nonAnimUnsignedIntIndex ) );
488 DALI_TEST_EQUALS( "yes" , actor.GetProperty( nonAnimStringIndex ).Get<std::string>(), TEST_LOCATION );
489 DALI_TEST_EQUALS( Vector2(1.f, 2.f) , actor.GetProperty( nonAnimV2Index ).Get<Vector2>(), TEST_LOCATION );
490 DALI_TEST_EQUALS( Vector3(1.f, 2.f, 3.f) , actor.GetProperty( nonAnimV3Index ).Get<Vector3>(), TEST_LOCATION );
491 DALI_TEST_EQUALS( Vector4(1.f, 2.f, 3.f, 4.f) , actor.GetProperty( nonAnimV4Index ).Get<Vector4>(), TEST_LOCATION );
492 DALI_TEST_EQUALS( true, actor.GetProperty( nonAnimBooleanIndex ).Get<bool>(), TEST_LOCATION );
493 DALI_TEST_EQUALS( 0.f, actor.GetProperty( nonAnimFloatIndex ).Get<float>(), TEST_LOCATION );
494 DALI_TEST_EQUALS( 0, actor.GetProperty( nonAnimIntegerIndex ).Get<int>(), TEST_LOCATION );
495 DALI_TEST_EQUALS( unsingedIntTest, actor.GetProperty( nonAnimUnsignedIntIndex ).Get<unsigned int>(), TEST_LOCATION );
500 int UtcDaliHandleNonAnimtableProperties(void)
502 tet_infoline("Test Non Animatable Properties");
503 TestApplication application;
505 Actor actor = Actor::New();
507 Property::Index nonAnimStringIndex = actor.RegisterProperty( "man-from-delmonte", std::string("no"), Property::READ_WRITE);
509 //// modify writable?
512 actor.SetProperty( nonAnimStringIndex, Property::Value("yes") );
514 catch (Dali::DaliException& e)
516 DALI_TEST_CHECK(!"exception");
519 DALI_TEST_CHECK( "yes" == actor.GetProperty( nonAnimStringIndex ).Get<std::string>() );
521 //// cannot modify read only?
522 Property::Index readonly = actor.RegisterProperty( "float", 0.f, Property::READ_ONLY);
524 DALI_TEST_CHECK(!actor.IsPropertyAnimatable(readonly));
525 DALI_TEST_CHECK(!actor.IsPropertyWritable(readonly));
527 bool exception = false;
530 actor.SetProperty( readonly, Property::Value(1.f) );
532 catch (Dali::DaliException& e)
537 DALI_TEST_CHECK(exception);
539 DALI_TEST_EQUALS( 0.f, actor.GetProperty( readonly ).Get<float>(), TEST_LOCATION );
541 /// animatable can be set
542 Property::Index write_anim = actor.RegisterProperty( "write_float", 0.f, Property::ANIMATABLE);
544 DALI_TEST_CHECK(actor.IsPropertyAnimatable(write_anim));
545 DALI_TEST_CHECK(actor.IsPropertyWritable(write_anim));
550 actor.SetProperty( write_anim, Property::Value(1.f) );
552 catch (Dali::DaliException& e)
557 DALI_TEST_CHECK(!exception);
559 //// animate a non animatable property is a noop?
560 float durationSeconds(2.0f);
561 Animation animation = Animation::New(durationSeconds);
562 bool relativeValue(true);
568 animation.AnimateBy(Property(actor, nonAnimStringIndex), relativeValue, AlphaFunctions::EaseIn);
570 application.SendNotification();
571 application.Render(static_cast<unsigned int>(durationSeconds*0100.0f)/* some progress */);
573 catch (Dali::DaliException& e)
578 DALI_TEST_CHECK(!exception);
579 DALI_TEST_EQUALS( "yes", actor.GetProperty( nonAnimStringIndex ).Get<std::string>(), TEST_LOCATION );
584 int UtcDaliHandleNonAnimtableCompositeProperties(void)
586 tet_infoline("Test Non Animatable Composite Properties");
587 TestApplication application;
589 Actor actor = Actor::New();
591 Property::Value value(Property::ARRAY);
592 Property::Array anArray;
593 DALI_TEST_CHECK( Property::Value(anArray).GetType() == Property::ARRAY ); // 2nd constructor
595 value.AppendItem( Property::Value( 0.f ) );
596 value.AppendItem( "a string" );
597 value.SetItem(0, Property::Value( 5.f )); // exercise SetItem
599 int index = value.AppendItem( Vector3(1,2,3) );
601 DALI_TEST_EQUALS( 2, index, TEST_LOCATION);
602 DALI_TEST_EQUALS( 3, value.GetSize(), TEST_LOCATION);
604 Property::Index propertyIndex = actor.RegisterProperty( "composite", value, Property::READ_WRITE);
606 Property::Value out = actor.GetProperty( propertyIndex );
608 DALI_TEST_CHECK( Property::FLOAT == out.GetItem(0).GetType());
609 DALI_TEST_CHECK( Property::STRING == out.GetItem(1).GetType());
610 DALI_TEST_CHECK( Property::VECTOR3 == out.GetItem(2).GetType());
612 DALI_TEST_EQUALS( 5.f, out.GetItem(0).Get<float>(), TEST_LOCATION);
613 DALI_TEST_EQUALS( "a string", out.GetItem(1).Get<std::string>(), TEST_LOCATION);
614 DALI_TEST_EQUALS( Vector3(1,2,3), out.GetItem(2).Get<Vector3>(), TEST_LOCATION);
617 Property::Value valueMap(Property::MAP);
618 Property::Map aKindofMap;
619 DALI_TEST_CHECK( Property::Value(aKindofMap).GetType() == Property::MAP ); // 2nd constructor
621 valueMap.SetValue("key", 5.f);
622 valueMap.SetValue("2key", "a string");
624 DALI_TEST_EQUALS( true, valueMap.HasKey("key"), TEST_LOCATION);
625 DALI_TEST_EQUALS( "key", valueMap.GetKey(0), TEST_LOCATION);
627 DALI_TEST_EQUALS( true, valueMap.HasKey("2key"), TEST_LOCATION);
628 DALI_TEST_EQUALS( "2key", valueMap.GetKey(1), TEST_LOCATION);
630 DALI_TEST_EQUALS( 5.f, valueMap.GetValue("key").Get<float>(), TEST_LOCATION);
631 DALI_TEST_EQUALS( "a string", valueMap.GetValue("2key").Get<std::string>(), TEST_LOCATION);
633 valueMap.SetItem(0, Property::Value("a string"));
634 valueMap.SetItem(1, Property::Value(5.f));
636 DALI_TEST_EQUALS( 5.f, valueMap.GetValue("2key").Get<float>(), TEST_LOCATION);
637 DALI_TEST_EQUALS( "a string", valueMap.GetValue("key").Get<std::string>(), TEST_LOCATION);
640 valueMap = Property::Value(Property::MAP);
642 valueMap.SetValue("key", 5.f);
643 valueMap.SetValue("2key", "a string");
645 DALI_TEST_EQUALS( 5.f, valueMap.GetItem(0).Get<float>(), TEST_LOCATION);
646 DALI_TEST_EQUALS( "a string", valueMap.GetItem(1).Get<std::string>(), TEST_LOCATION);
648 DALI_TEST_EQUALS( 2, valueMap.GetSize(), TEST_LOCATION);
650 // composite types not animatable
651 bool exception = false;
654 /* Property::Index mapPropertyIndex = */ actor.RegisterProperty( "compositemap", value, Property::ANIMATABLE);
656 catch (Dali::DaliException& e)
659 tet_printf("Assertion %s failed at %s\n", e.mCondition.c_str(), e.mLocation.c_str());
662 DALI_TEST_EQUALS(exception, true, TEST_LOCATION);
665 Property::Value mapOfMaps(Property::MAP);
667 mapOfMaps.SetValue( "key", Property::Value(Property::MAP) );
668 mapOfMaps.SetValue( "2key", "a string" );
670 DALI_TEST_EQUALS( "a string", mapOfMaps.GetValue("2key").Get<std::string>(), TEST_LOCATION);
672 mapOfMaps.GetValue("key").SetValue("subkey", 5.f);
674 DALI_TEST_EQUALS( true, mapOfMaps.GetValue("key").HasKey("subkey"), TEST_LOCATION);
675 DALI_TEST_EQUALS( 5.f, mapOfMaps.GetValue("key").GetValue("subkey").Get<float>(), TEST_LOCATION);
678 Property::Value listOfMaps(Property::ARRAY);
680 listOfMaps.AppendItem( Property::Value(Property::MAP) );
681 listOfMaps.AppendItem( Property::Value(Property::MAP) );
683 listOfMaps.GetItem(0).SetValue("key", 5.f);
684 listOfMaps.GetItem(1).SetValue("key",10.f);
686 DALI_TEST_EQUALS( 5.f, listOfMaps.GetItem(0).GetValue("key").Get<float>(), TEST_LOCATION );
687 DALI_TEST_EQUALS( 10.f, listOfMaps.GetItem(1).GetValue("key").Get<float>(), TEST_LOCATION );
692 int UtcDaliHandleSetProperty01(void)
694 tet_infoline("Positive Test Dali::Handle::SetProperty()");
695 TestApplication application;
697 Actor actor = Actor::New();
698 DALI_TEST_CHECK( ParentOrigin::TOP_LEFT == actor.GetProperty( Actor::PARENT_ORIGIN ).Get<Vector3>() );
700 actor.SetProperty( Actor::PARENT_ORIGIN, ParentOrigin::CENTER );
701 // flush the queue and render once
702 application.SendNotification();
703 application.Render();
704 DALI_TEST_CHECK( ParentOrigin::CENTER == actor.GetProperty( Actor::PARENT_ORIGIN ).Get<Vector3>() );
708 int UtcDaliHandleSetProperty02(void)
710 tet_infoline("Positive Test Dali::Handle::SetProperty()");
711 TestApplication application;
713 Actor actor = Actor::New();
715 DALI_TEST_CHECK( !actor.IsPropertyWritable( Actor::WORLD_POSITION ) );
719 // World position is not writable
720 actor.SetProperty( Actor::WORLD_POSITION, Vector3(1,2,3) );
722 catch (Dali::DaliException& e)
724 tet_printf("Assertion %s failed at %s\n", e.mCondition.c_str(), e.mLocation.c_str());
725 DALI_TEST_ASSERT(e, "IsDefaultPropertyWritable(index) && \"Property is read-only\"", TEST_LOCATION);
731 int UtcDaliHandleRegisterProperty(void)
733 tet_infoline("Positive Test Dali::Handle::RegisterProperty()");
734 TestApplication application;
736 Actor actor = Actor::New();
737 DALI_TEST_CHECK( ParentOrigin::TOP_LEFT == actor.GetProperty( Actor::PARENT_ORIGIN ).Get<Vector3>() );
742 int UtcDaliHandleGetProperty(void)
744 tet_infoline("Positive Test Dali::Handle::GetProperty()");
745 TestApplication application;
747 Actor actor = Actor::New();
749 DALI_TEST_CHECK( ParentOrigin::TOP_LEFT == actor.GetProperty( Actor::PARENT_ORIGIN ).Get<Vector3>() );
750 DALI_TEST_CHECK( AnchorPoint::CENTER == actor.GetProperty( Actor::ANCHOR_POINT ).Get<Vector3>() );
751 DALI_TEST_CHECK( Vector3::ZERO == actor.GetProperty( Actor::SIZE ).Get<Vector3>() );
752 DALI_TEST_CHECK( Vector3::ZERO == actor.GetProperty( Actor::POSITION ).Get<Vector3>() );
753 DALI_TEST_CHECK( Vector3::ONE == actor.GetProperty( Actor::SCALE ).Get<Vector3>() );
754 DALI_TEST_CHECK( true == actor.GetProperty( Actor::VISIBLE ).Get<bool>() );
755 DALI_TEST_CHECK( Color::WHITE == actor.GetProperty( Actor::COLOR ).Get<Vector4>() );
759 int UtcDaliHandleDownCast(void)
761 TestApplication application;
762 tet_infoline("Testing Dali::Handle::DownCast()");
764 Actor actor = Actor::New();
766 BaseHandle baseHandle = actor;
768 Handle handle = Handle::DownCast(baseHandle);
770 DALI_TEST_CHECK( handle );
772 baseHandle = BaseHandle();
774 handle = Handle::DownCast(baseHandle);
776 DALI_TEST_CHECK( !handle );
781 int UtcDaliHandleCreateProperty(void)
783 TestApplication application;
784 tet_infoline("Testing PropertyTypes::GetName()");
786 Property::Type type = Property::NONE;
788 // Value(Value&) ctor and Value(Type&) ctor
789 DALI_TEST_CHECK( Property::Value(Property::Value(type)).GetType() == type );
790 DALI_TEST_CHECK( Property::NONE == type );
793 type = Property::BOOLEAN;
795 DALI_TEST_CHECK( Property::Value(Property::Value(type)).GetType() == type );
796 DALI_TEST_CHECK( PropertyTypes::Get<bool>() == type );
798 type = Property::FLOAT;
800 DALI_TEST_CHECK( Property::Value(Property::Value(type)).GetType() == type );
801 DALI_TEST_CHECK( PropertyTypes::Get<float>() == type );
803 type = Property::INTEGER;
805 DALI_TEST_CHECK( Property::Value(Property::Value(type)).GetType() == type );
806 DALI_TEST_CHECK( PropertyTypes::Get<int>() == type );
808 type = Property::UNSIGNED_INTEGER;
810 DALI_TEST_CHECK( Property::Value(Property::Value(type)).GetType() == type );
811 DALI_TEST_CHECK( PropertyTypes::Get<unsigned int>() == type );
813 type = Property::VECTOR2;
815 DALI_TEST_CHECK( Property::Value(Property::Value(type)).GetType() == type );
816 DALI_TEST_CHECK( PropertyTypes::Get<Vector2>() == type );
818 type = Property::VECTOR3;
820 DALI_TEST_CHECK( Property::Value(Property::Value(type)).GetType() == type );
821 DALI_TEST_CHECK( PropertyTypes::Get<Vector3>() == type );
823 type = Property::VECTOR4;
825 DALI_TEST_CHECK( Property::Value(Property::Value(type)).GetType() == type );
826 DALI_TEST_CHECK( PropertyTypes::Get<Vector4>() == type );
828 type = Property::MATRIX3;
830 DALI_TEST_CHECK( Property::Value(Property::Value(type)).GetType() == type );
831 DALI_TEST_CHECK( PropertyTypes::Get<Matrix3>() == type );
833 type = Property::MATRIX;
835 DALI_TEST_CHECK( Property::Value(Property::Value(type)).GetType() == type );
836 DALI_TEST_CHECK( PropertyTypes::Get<Matrix>() == type );
838 typedef Dali::Rect<int> Rectangle;
839 type = Property::RECTANGLE;
841 DALI_TEST_CHECK( Property::Value(Property::Value(type)).GetType() == type );
842 DALI_TEST_CHECK( PropertyTypes::Get<Rectangle>() == type );
844 type = Property::ROTATION;
846 DALI_TEST_CHECK( Property::Value(Property::Value(type)).GetType() == type );
847 DALI_TEST_CHECK( PropertyTypes::Get<Quaternion>() == type );
849 type = Property::ROTATION;
851 DALI_TEST_CHECK( Property::Value(Property::Value(type)).GetType() == type );
852 DALI_TEST_CHECK( PropertyTypes::Get<AngleAxis>() == type );
854 type = Property::STRING;
856 DALI_TEST_CHECK( Property::Value(Property::Value(type)).GetType() == type );
857 DALI_TEST_CHECK( PropertyTypes::Get<std::string>() == type );
859 type = Property::ARRAY;
861 DALI_TEST_CHECK( Property::Value(Property::Value(type)).GetType() == type );
862 DALI_TEST_CHECK( PropertyTypes::Get<Property::Array>() == type );
864 type = Property::MAP;
866 DALI_TEST_CHECK( Property::Value(Property::Value(type)).GetType() == type );
867 DALI_TEST_CHECK( PropertyTypes::Get<Property::Map>() == type );
871 int UtcDaliHandleGetPropertyGet(void)
873 TestApplication application;
874 tet_infoline("Testing PropertyTypes::GetName()");
876 Property::Value value;
879 value = Property::Value(true);
881 DALI_TEST_CHECK( true == b );
884 value = Property::Value(10.f);
886 DALI_TEST_CHECK( Dali::Equals(10.f, f) );
889 value = Property::Value(10);
891 DALI_TEST_CHECK( 10 == i );
894 value = Property::Value(10U);
896 DALI_TEST_CHECK( 10 == ui );
898 Vector2 v2 = Vector2(0,0);
899 value = Property::Value( Vector2(1,1) );
901 DALI_TEST_CHECK( Vector2(1,1) == v2 );
903 Vector3 v3 = Vector3(0.f,0.f,0.f);
904 value = Property::Value( Vector3(1.f,1.f,1.f) );
906 DALI_TEST_CHECK( Vector3(1.f,1.f,1.f) == v3 );
908 Vector4 v4 = Vector4(0,0,0,0);
909 value = Property::Value( Vector4(1,1,1,1) );
911 DALI_TEST_CHECK( Vector4(1,1,1,1) == v4 );
913 Matrix3 m3 = Matrix3(0.f,0.f,0.f,0.f,0.f,0.f,0.f,0.f,0.f);
914 value = Property::Value( Matrix3::IDENTITY );
916 DALI_TEST_CHECK( Matrix3::IDENTITY == m3 );
918 Matrix m = Matrix(true);
919 value = Property::Value( Matrix::IDENTITY );
921 DALI_TEST_CHECK( Matrix::IDENTITY == m );
923 typedef Dali::Rect<int> Rectangle;
924 Rectangle r = Rectangle(0,0,0,0);
925 value = Property::Value( Rectangle(1,1,1,1) );
927 DALI_TEST_CHECK( Rectangle(1,1,1,1) == r );
929 Quaternion q = Quaternion(0,0,0,0);
930 value = Property::Value( Quaternion(1,1,1,1) );
932 DALI_TEST_CHECK( Quaternion(1,1,1,1) == q );
934 AngleAxis aa = AngleAxis( Degree(0), Vector3(0.f,0.f,0.f) );
935 value = Property::Value( AngleAxis( Radian(Math::PI_2), Vector3::XAXIS ));
937 Quaternion r8(Radian(Degree(aa.angle)), aa.axis);
938 DALI_TEST_EQUALS(r8, Quaternion(Math::PI_2, Vector3::XAXIS), 0.001, TEST_LOCATION);
940 std::string s = "no";
941 value = Property::Value("yes");
943 DALI_TEST_CHECK( "yes" == s );
945 Property::Array array;
946 value = Property::Value(Property::ARRAY);
947 value.AppendItem(10);
950 array[0].Get(getItem);
951 DALI_TEST_CHECK( getItem == 10 );
954 value = Property::Value(Property::MAP);
955 value.SetValue("key", "value");
957 DALI_TEST_CHECK( map.GetKey(0) == "key" );
962 int UtcDaliHandleGetPropertyIndices(void)
964 TestApplication application;
965 Property::IndexContainer indices;
968 Actor actor = Actor::New();
969 actor.GetPropertyIndices( indices );
970 DALI_TEST_CHECK( ! indices.empty() );
971 DALI_TEST_EQUALS( indices.size(), actor.GetPropertyCount(), TEST_LOCATION );
975 int UtcDaliHandleRegisterPropertyTypes(void)
977 TestApplication application;
979 struct PropertyTypeAnimatable
982 Property::Value value;
986 Property::Array array;
989 PropertyTypeAnimatable properties[] =
991 { "Property::BOOLEAN", true, true },
992 { "Property::FLOAT", 1.0f, true },
993 { "Property::INTEGER", 1, true },
994 { "Property::UNSIGNED_INTEGER", 1u, false },
995 { "Property::VECTOR2", Vector2::ONE, true },
996 { "Property::VECTOR3", Vector3::ONE, true },
997 { "Property::VECTOR4", Vector4::ONE, true },
998 { "Property::MATRIX3", Matrix3::IDENTITY, true },
999 { "Property::MATRIX", Matrix::IDENTITY, true },
1000 { "Property::RECTANGLE", Rect<int>(), false },
1001 { "Property::ROTATION", AngleAxis(), true },
1002 { "Property::STRING", std::string("Me"), false },
1003 { "Property::ARRAY", array, false },
1004 { "Property::MAP", map, false },
1006 unsigned int numOfProperties( sizeof( properties ) / sizeof( properties[0] ) );
1008 for ( unsigned int i = 0; i < numOfProperties; ++i )
1010 tet_printf( "Testing: %s\n", properties[i].name );
1012 bool exception = false;
1015 Actor actor = Actor::New();
1016 actor.RegisterProperty( "man-from-delmonte", properties[i].value );
1018 catch (Dali::DaliException& e)
1023 DALI_TEST_CHECK( properties[i].animatable != exception );