X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=automated-tests%2Fsrc%2Fdali-toolkit%2Fdali-toolkit-test-utils%2Fdali-test-suite-utils.cpp;h=87750e239af86b5be840dcf13c0cb1fccb161cd5;hp=92d139048b41b60cf5541af84f02b4cb1fb403e0;hb=610495b8647d1a25c98bf0773ccc0dd6d1996263;hpb=c25b3c40178dadf12dc5e8f77c17413df0a55099 diff --git a/automated-tests/src/dali-toolkit/dali-toolkit-test-utils/dali-test-suite-utils.cpp b/automated-tests/src/dali-toolkit/dali-toolkit-test-utils/dali-test-suite-utils.cpp index 92d1390..87750e2 100644 --- a/automated-tests/src/dali-toolkit/dali-toolkit-test-utils/dali-test-suite-utils.cpp +++ b/automated-tests/src/dali-toolkit/dali-toolkit-test-utils/dali-test-suite-utils.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * Copyright (c) 2020 Samsung Electronics Co., Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -15,17 +15,20 @@ * */ +// CLASS HEADER +#include "dali-test-suite-utils.h" + +// EXTERNAL INCLUDES +#include + // INTERNAL INCLUDES #include -#include - -#include "dali-test-suite-utils.h" using namespace Dali; -int test_return_value = TET_UNDEF; +int32_t test_return_value = TET_UNDEF; -void tet_result(int value) +void tet_result(int32_t value) { // First TET_PASS should set to zero // first TET_FAIL should prevent any further TET_PASS from setting back to zero @@ -37,6 +40,8 @@ void tet_result(int value) #define END_TEST \ return ((test_return_value>0)?1:0) +extern "C" +{ void tet_infoline(const char* str) { @@ -50,31 +55,44 @@ void tet_printf(const char *format, ...) vfprintf(stderr, format, arg); va_end(arg); } - -/** - * DALI_TEST_CHECK is a wrapper for tet_result. - * If the condition evaluates to false, then the function & line number is printed. - * @param[in] The boolean expression to check - */ -#define DALI_TEST_CHECK(condition) \ -if ( (condition) ) \ -{ \ - tet_result(TET_PASS); \ -} \ -else \ -{ \ - fprintf(stderr, "%s Failed in %s at line %d\n", __PRETTY_FUNCTION__, __FILE__, __LINE__); \ - tet_result(TET_FAIL); \ } + bool operator==(TimePeriod a, TimePeriod b) { return Equals(a.durationSeconds, b.durationSeconds) && Equals(a.delaySeconds, b.delaySeconds) ; } -std::ostream& operator<< (std::ostream& o, const TimePeriod value) +std::ostream& operator<<( std::ostream& ostream, TimePeriod value ) { - return o << "( Duration:" << value.durationSeconds << " Delay:" << value.delaySeconds << ")"; + return ostream << "( Duration:" << value.durationSeconds << " Delay:" << value.delaySeconds << ")"; +} + +std::ostream& operator<<( std::ostream& ostream, Radian angle ) +{ + ostream << angle.radian; + return ostream; +} + +std::ostream& operator<<( std::ostream& ostream, Degree angle ) +{ + ostream << angle.degree; + return ostream; +} + +void DALI_TEST_EQUALS( const BaseHandle& baseHandle1, const BaseHandle& baseHandle2, const char* location ) +{ + DALI_TEST_EQUALS< const BaseHandle& >( baseHandle1, baseHandle2, location ); +} + +void DALI_TEST_EQUALS( const size_t value1, const uint32_t value2, const char* location ) +{ + DALI_TEST_EQUALS< uint32_t >( ( uint32_t )( value1 ), value2, location ); +} + +void DALI_TEST_EQUALS( const uint32_t value1, const size_t value2, const char* location ) +{ + DALI_TEST_EQUALS< uint32_t >( value1, ( uint32_t )( value2 ), location ); } void DALI_TEST_EQUALS( const Matrix3& matrix1, const Matrix3& matrix2, const char* location) @@ -83,23 +101,28 @@ void DALI_TEST_EQUALS( const Matrix3& matrix1, const Matrix3& matrix2, const cha const float* m2 = matrix2.AsFloat(); bool equivalent = true; - for (int i=0;i<9;++i) + for (int32_t i=0;i<9;++i) { - equivalent &= (m1[i] != m2[i]); + if( ! (fabsf(m1[i] - m2[i])< GetRangedEpsilon(m1[i], m2[i])) ) + { + equivalent = false; + } } - if (!equivalent) + if( !equivalent ) { - fprintf(stderr, "%s, checking\n" - "(%f, %f, %f) (%f, %f, %f)\n" - "(%f, %f, %f) == (%f, %f, %f)\n" - "(%f, %f, %f) (%f, %f, %f)\n", + // Align each float to 1234.67, i.e. 3.6 will be " 3.60" + fprintf( stderr, "%s, checking\n" + "%7.2f %7.2f %7.2f %7.2f %7.2f %7.2f\n" + "%7.2f %7.2f %7.2f == %7.2f %7.2f %7.2f\n" + "%7.2f %7.2f %7.2f %7.2f %7.2f %7.2f\n", location, - m1[0], m1[1], m1[2], m2[0], m2[1], m2[2], - m1[3], m1[4], m1[5], m2[3], m2[4], m2[5], - m1[6], m1[7], m1[8], m2[6], m2[7], m2[8]); + m1[0], m1[3], m1[6], m2[0], m2[3], m2[6], + m1[1], m1[4], m1[7], m2[1], m2[4], m2[7], + m1[2], m1[5], m1[8], m2[2], m2[5], m2[8] ); tet_result(TET_FAIL); + throw("TET_FAIL"); } else { @@ -113,23 +136,25 @@ void DALI_TEST_EQUALS( const Matrix3& matrix1, const Matrix3& matrix2, float eps const float* m2 = matrix2.AsFloat(); bool equivalent = true; - for (int i=0;i<9;++i) + for (int32_t i=0;i<9;++i) { equivalent &= (fabsf(m1[i] - m2[i]) value2 - * @param[in] value1 The first value - * @param[in] value2 The second value - * @param[in] location The TEST_LOCATION macro should be used here - */ -void DALI_TEST_GREATER(unsigned int value1, unsigned int value2, const char* location) -{ - if (!(value1 > value2)) + if( result ) { - fprintf(stderr, "%s, checking %d > %d\n", location, value1, value2); - tet_result(TET_FAIL); + tet_result(TET_PASS); } else { - tet_result(TET_PASS); + tet_result(TET_FAIL); + throw("TET_FAIL"); } } -/** - * Test whether one float value is greater than another. - * Test succeeds if value1 > value2 - * @param[in] value1 The first value - * @param[in] value2 The second value - * @param[in] location The TEST_LOCATION macro should be used here - */ -void DALI_TEST_GREATER( float value1, float value2, const char* location) +void DALI_TEST_EQUALS( const char* str1, const std::string &str2, const char* location) { - if (!(value1 > value2)) - { - fprintf(stderr, "%s, checking %f > %f\n", location, value1, value2); - tet_result(TET_FAIL); - } - else - { - tet_result(TET_PASS); - } + DALI_TEST_EQUALS(str1, str2.c_str(), location); } void DALI_TEST_ASSERT( DaliException& e, std::string conditionSubString, const char* location ) @@ -274,6 +280,7 @@ void DALI_TEST_ASSERT( DaliException& e, std::string conditionSubString, const c { fprintf(stderr, "Expected substring '%s' : actual exception string '%s' : location %s\n", conditionSubString.c_str(), e.condition, location ); tet_result(TET_FAIL); + throw("TET_FAIL"); } else { @@ -303,6 +310,7 @@ void ConstraintAppliedCheck::CheckSignalReceived() { fprintf(stderr, "Expected Applied signal was not received\n" ); tet_result( TET_FAIL ); + throw("TET_FAIL"); } else { @@ -316,6 +324,7 @@ void ConstraintAppliedCheck::CheckSignalNotReceived() { fprintf(stderr, "Unexpected Applied signal was received\n" ); tet_result( TET_FAIL ); + throw("TET_FAIL"); } else { @@ -323,26 +332,49 @@ void ConstraintAppliedCheck::CheckSignalNotReceived() } } -BufferImage CreateBufferImage(int width, int height, const Vector4& color) +namespace Test { - BufferImage image = BufferImage::New(width, height, Pixel::RGBA8888); - PixelBuffer* pixbuf = image.GetBuffer(); +struct ObjectDestructionFunctor +{ + // Create a ObjectDestructionFunctor passing in a Dali::RefObject* to be monitored and a bool variable. + // Create ObjectRegistry instance and connect to the ObjectDestroyedSignal passing in the above functor for the callback. + // Get the ObjectPointer (Actor::GetObjectPtr) of the Actor to be checked for destruction and assign it to the Dali::RefObject* + // Check the bool variable which would be true when object destroyed. + ObjectDestructionFunctor( Dali::RefObject* objectPtr, bool& refObjectDestroyed ) + : refObjectPointerToCheck( objectPtr ), + refObjectDestroyedBoolean( refObjectDestroyed ) + { + refObjectDestroyed = false; + } - // Using a 4x4 image gives a better blend with the GL implementation - // than a 3x3 image - for(size_t i=0; i<16; i++) + void operator()( const Dali::RefObject* objectPointer ) { - pixbuf[i*4+0] = color.r*255; - pixbuf[i*4+1] = color.g*255; - pixbuf[i*4+2] = color.b*255; - pixbuf[i*4+3] = color.a*255; + if ( refObjectPointerToCheck == objectPointer ) + { + refObjectDestroyedBoolean = true; + } } - return image; + Dali::RefObject* refObjectPointerToCheck; + bool& refObjectDestroyedBoolean; +}; + +ObjectDestructionTracker::ObjectDestructionTracker( ObjectRegistry objectRegistry ) +: mObjectRegistry( objectRegistry ), + mRefObjectDestroyed( false) +{ +} + +void ObjectDestructionTracker::Start( Actor actor ) +{ + ObjectDestructionFunctor destructionFunctor( actor.GetObjectPtr(), mRefObjectDestroyed ); + mObjectRegistry.ObjectDestroyedSignal().Connect( this, destructionFunctor ); } -BufferImage CreateBufferImage() +bool ObjectDestructionTracker::IsDestroyed() { - return CreateBufferImage(4, 4, Color::WHITE); + return mRefObjectDestroyed; } + +} // namespace Test