diff --git a/spine-cpp/spine-cpp-unit-tests/CMakeLists.txt b/spine-cpp/spine-cpp-unit-tests/CMakeLists.txt index 02a2500e6..17a5f1907 100755 --- a/spine-cpp/spine-cpp-unit-tests/CMakeLists.txt +++ b/spine-cpp/spine-cpp-unit-tests/CMakeLists.txt @@ -3,42 +3,16 @@ project(spine_cpp_unit_test) set(CMAKE_INSTALL_PREFIX "./") set(CMAKE_VERBOSE_MAKEFILE ON) -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_CRT_SECURE_NO_WARNINGS -DKANJI_MEMTRACE -DUSE_CPP11_MUTEX -std=c++11") +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -stdlib=libc++ ") -######################################################### -# set includes -######################################################### include_directories(../spine-cpp/include teamcity minicppunit tests memory) -######################################################### -# Add Sources -######################################################### -set(MINICPP_SRC - minicppunit/MiniCppUnit.cxx +set(SRC + src/main.cpp + src/TestHarness.cpp ) -set(TEAMCITY_SRC - teamcity/teamcity_cppunit.cpp - teamcity/teamcity_messages.cpp -) - -set(TEST_SRC - tests/SpineEventMonitor.cpp - tests/EmptyTestFixture.cpp - tests/C_InterfaceTestFixture.cpp - tests/CPP_InterfaceTestFixture.cpp - tests/MemoryTestFixture.cpp -) - -set(MEMLEAK_SRC - memory/KMemory.cpp - memory/KString.cpp -) - -######################################################### -# setup main project -######################################################### -add_executable(spine_cpp_unit_test main.cpp ${MINICPP_SRC} ${TEAMCITY_SRC} ${TEST_SRC} ${MEMLEAK_SRC}) +add_executable(spine_cpp_unit_test ${SRC}) target_link_libraries(spine_cpp_unit_test spine-cpp) diff --git a/spine-cpp/spine-cpp-unit-tests/main.cpp b/spine-cpp/spine-cpp-unit-tests/main.cpp deleted file mode 100755 index 3cfa5fcd4..000000000 --- a/spine-cpp/spine-cpp-unit-tests/main.cpp +++ /dev/null @@ -1,110 +0,0 @@ -// SexyKanjiTestSuite.cpp : Defines the entry point for the console application. -// - -#include "MiniCppUnit.hxx" - -#ifdef WIN32 -#include -#else -#include -#endif // WIN32 - -#include -#include "KString.h" -#include - -#include "spine/Extension.h" - -#include "KMemory.h" // last include - -using namespace Spine; - -class KanjiSpineExtension : public DefaultSpineExtension -{ -public: - static KanjiSpineExtension* getInstance(); - - virtual ~KanjiSpineExtension(); - - virtual void* spineAlloc(size_t size, const char* file, int line); - - virtual void* spineCalloc(size_t num, size_t size, const char* file, int line); - - virtual void* spineRealloc(void* ptr, size_t size, const char* file, int line); - - virtual void spineFree(void* mem); - -protected: - KanjiSpineExtension(); -}; - -KanjiSpineExtension* KanjiSpineExtension::getInstance() -{ - static KanjiSpineExtension ret; - return &ret; -} - -KanjiSpineExtension::~KanjiSpineExtension() -{ - // Empty -} - -void* KanjiSpineExtension::spineAlloc(size_t size, const char* file, int line) -{ - return _kanjimalloc(size); -} - -void* KanjiSpineExtension::spineCalloc(size_t num, size_t size, const char* file, int line) -{ - void* ptr = _kanjimalloc(num * size, file, line); - if (ptr) - { - memset(ptr, 0, num * size); - } - - return ptr; -} - -void* KanjiSpineExtension::spineRealloc(void* ptr, size_t size, const char* file, int line) -{ - return _kanjirealloc(ptr, size); -} - -void KanjiSpineExtension::spineFree(void* mem) -{ - _kanjifree(mem); -} - -KanjiSpineExtension::KanjiSpineExtension() : DefaultSpineExtension() -{ - // Empty -} - -int main(int argc, char* argv[]) -{ - SpineExtension::setInstance(KanjiSpineExtension::getInstance()); - - // Start Timing - time_t start_time, end_time; - time(&start_time); - - /* Set working directory to current location for opening test data */ -#ifdef WIN32 - _chdir( GetFileDir(argv[0], false).c_str() ); -#else - chdir(GetFileDir(argv[0], false).c_str()); -#endif - - // Run Test Suite - if(JetBrains::underTeamcity()) gTeamCityListener.startSuite("Spine-CPP Test Suite"); - int ret_val = TestFixtureFactory::theInstance().runTests() ? 0 : -1; - if(JetBrains::underTeamcity()) gTeamCityListener.endSuite("Spine-CPP Test Suite"); - - // End Timing - time(&end_time); - double secs = difftime(end_time,start_time); - printf("\n\n%i minutes and %i seconds of your life taken from you by these tests.\n", ((int)secs) / 60, ((int)secs) % 60); - - return ret_val; -} - diff --git a/spine-cpp/spine-cpp-unit-tests/memory/KMemory.cpp b/spine-cpp/spine-cpp-unit-tests/memory/KMemory.cpp deleted file mode 100755 index a21cbafba..000000000 --- a/spine-cpp/spine-cpp-unit-tests/memory/KMemory.cpp +++ /dev/null @@ -1,303 +0,0 @@ -#include -#include -#include -#include -#include - -#include "KString.h" - -#include "KMemory.h" // last include - -/////////////////////////////////////////////////////////////////////////////// -// -// KANJI_DUMP_LEAKED_MEM will print out the memory block that was leaked. -// This is helpful when leaked objects have string identifiers. -// -/////////////////////////////////////////////////////////////////////////////// -//#define KANJI_DUMP_LEAKED_MEM - - -/////////////////////////////////////////////////////////////////////////////// -// -// KANJI_TRACK_MEM_USAGE will print out all memory allocations. -// -/////////////////////////////////////////////////////////////////////////////// -//#define KANJI_TRACK_MEM_USAGE - - - -/////////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////////// -// Our memory system is thread-safe, but instead of linking massive libraries, -// we attempt to use C++11 std::mutex. -#ifdef USE_CPP11_MUTEX_DISABLED -#include -typedef std::recursive_mutex KSysLock; // rentrant -struct KAutoLock { - KAutoLock(KSysLock& lock) :mLock(lock) { mLock.lock(); } // acquire - ~KAutoLock() { mLock.unlock(); } // release - - KSysLock& mLock; -}; -#else // Fallback to unsafe. don't spawn threads -typedef int KSysLock; -struct KAutoLock { - KAutoLock(KSysLock) {} // acquire - ~KAutoLock() {} // release -}; -#endif - - - -/////////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////////// -struct KANJI_ALLOC_INFO -{ - size_t size; - std::string file; - int line; -}; -static bool showLeaks = false; -class KAllocMap : public std::map -{ -public: - KSysLock crit; - static bool allocMapValid; - -public: - KAllocMap() { allocMapValid = true; } - ~KAllocMap() - { - if (showLeaks) - KMemoryDumpUnfreed(); - - allocMapValid = false; - } -}; -bool KAllocMap::allocMapValid = false; -static KAllocMap allocMap; // once this static object destructs, it dumps unfreed memory - - -/////////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////////// -#ifdef KANJI_TRACK_MEM_USAGE -void KMemoryDumpUsage(); // forward declaration -class KAllocStat -{ -public: - typedef std::map allocCount; // [size] = count - typedef std::map, allocCount> allocInfo; // [file, line] = allocCount - - allocInfo memInfo; - static bool allocMapValid; - -public: - - KAllocStat() - { - allocMapValid = true; - } - ~KAllocStat() - { - if (showLeaks) - KMemoryDumpUsage(); - - allocMapValid = false; - } - void addTrack(const char* fname, int lnum, int asize) - { - allocCount& info = memInfo[std::pair(fname, lnum)]; - info[asize]++; - } -}; -bool KAllocStat::allocMapValid = false; -static KAllocStat allocStat; -#endif // KANJI_TRACK_MEM_USAGE - - - -/////////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////////// -extern void KMemoryAddTrack( void* addr, size_t asize, const char* fname, int lnum ) -{ - if (!KAllocMap::allocMapValid || asize == 0) - return; - - KAutoLock aCrit(allocMap.crit); - showLeaks = true; - - KANJI_ALLOC_INFO& info = allocMap[addr]; - info.file = fname; - info.line = lnum; - info.size = asize; - -#ifdef KANJI_TRACK_MEM_USAGE - if (KAllocStat::allocMapValid) - allocStat.addTrack(fname, lnum, asize); -#endif -}; - -/////////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////////// -void KMemoryRemoveTrack(void* addr) -{ - if (!KAllocMap::allocMapValid) - return; - - KAutoLock aCrit(allocMap.crit); - KAllocMap::iterator anItr = allocMap.find(addr); - if (anItr != allocMap.end()) - allocMap.erase(anItr); -}; - -/////////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////////// -void KMemoryDumpUnfreed() -{ - if (!KAllocMap::allocMapValid) - return; - - KAutoLock aCrit(allocMap.crit); // prevent modification of the map while iterating - - size_t totalSize = 0; - char buf[8192]; - - FILE* f = fopen("mem_leaks.txt", "wt"); - if (!f) - return; - - time_t aTime = time(NULL); - sprintf(buf, "Memory Leak Report for %s\n", asctime(localtime(&aTime))); - fprintf(f, "%s", buf); - KOutputDebug(DEBUGLVL, "\n"); - KOutputDebug(INFOLVL, buf); - for(KAllocMap::iterator i = allocMap.begin(); i != allocMap.end(); ++i) - { - sprintf(buf, "%s(%d) : Leak %u byte%s @0x%08X\n", i->second.file.c_str(), i->second.line, i->second.size, i->second.size > 1 ? "s" : "", (size_t)i->first); - KOutputDebug(ERRORLVL, buf); - fprintf(f, "%s", buf); - -#ifdef KANJI_DUMP_LEAKED_MEM - unsigned char* data = (unsigned char*)i->first; - int count = 0; - char hex_dump[1024]; - char ascii_dump[1024]; - - for (int index = 0; index < i->second.size; index++) - { - unsigned char _c = *data; - - if (count == 0) - sprintf(hex_dump, "\t%02X ", _c); - else - sprintf(hex_dump, "%s%02X ", hex_dump, _c); // technically, this is undefined behavior - - if ((_c < 32) || (_c > 126)) - _c = '.'; - - if (count == 7) - sprintf(ascii_dump, "%s%c ", ascii_dump, _c); - else - sprintf(ascii_dump, "%s%c", count == 0 ? "\t" : ascii_dump, _c); // technically, this is undefined behavior - - - if (++count == 16) - { - count = 0; - sprintf(buf, "%s\t%s\n", hex_dump, ascii_dump); - fprintf(f, buf); - - memset((void*)hex_dump, 0, 1024); - memset((void*)ascii_dump, 0, 1024); - } - - data++; - } - - if (count != 0) - { - fprintf(f, hex_dump); - for (int index = 0; index < 16 - count; index++) - fprintf(f, "\t"); - - fprintf(f, ascii_dump); - - for (int index = 0; index < 16 - count; index++) - fprintf(f, "."); - } - - count = 0; - fprintf(f, "\n\n"); - memset((void*)hex_dump, 0, 1024); - memset((void*)ascii_dump, 0, 1024); - -#endif // KANJI_DUMP_LEAKED_MEM - - totalSize += i->second.size; - } - - ErrorLevel lvl = (totalSize > 0) ? ERRORLVL : INFOLVL; - - sprintf(buf, "-----------------------------------------------------------\n"); - fprintf(f, "%s", buf); - KOutputDebug(lvl, buf); - sprintf(buf, "Total Unfreed: %u bytes (%luKB)\n\n", totalSize, totalSize / 1024); - KOutputDebug(lvl, buf); - fprintf(f, "%s", buf); - fclose(f); -} - -#ifdef KANJI_TRACK_MEM_USAGE -void KMemoryDumpUsage() -{ - if (!KAllocStat::allocMapValid) - return; - - char buf[8192]; - FILE* f = fopen("mem_usage.txt", "wt"); - - time_t aTime = time(NULL); - sprintf(buf, "Memory Usage Report for %s\n", asctime(localtime(&aTime))); - if (f) fprintf(f, "%s", buf); - KOutputDebug("\n"); - KOutputDebug(buf); - - for(KAllocStat::allocInfo::iterator i = allocStat.memInfo.begin(); i != allocStat.memInfo.end(); ++i) - { - int aBytesTotal = 0; - int aCallsTotal = 0; - for (KAllocStat::allocCount::iterator index = i->second.begin(); index != i->second.end(); ++index) - { - aBytesTotal += index->first; - aCallsTotal += index->second; - sprintf(buf, "%s(%d) : %d bytes (%d %s)\n", i->first.first.c_str(), i->first.second, index->first, index->second, index->second == 1 ? "call" : "calls"); - if (f) fprintf(f, "%s", buf); - KOutputDebug(buf); - } - - if (i->second.size() > 1) - { - sprintf(buf, " %s(%d) : %d KB total (%d calls)\n", i->first.first.c_str(), i->first.second, aBytesTotal / 1024, aCallsTotal); - if (f) fprintf(f, "%s", buf); - KOutputDebug(buf); - } - } - if (f) fclose(f); -} -#endif // KANJI_TRACK_MEM_USAGE - -size_t KMemoryAllocated() -{ - if (!KAllocMap::allocMapValid) - return 0; - - KAutoLock aCrit(allocMap.crit); - - size_t size = 0; - for(auto i = allocMap.begin(); i != allocMap.end(); ++i) - { - KANJI_ALLOC_INFO& info = i->second; - size += info.size; - } - return size; -} diff --git a/spine-cpp/spine-cpp-unit-tests/memory/KMemory.h b/spine-cpp/spine-cpp-unit-tests/memory/KMemory.h deleted file mode 100755 index 470a5db7d..000000000 --- a/spine-cpp/spine-cpp-unit-tests/memory/KMemory.h +++ /dev/null @@ -1,189 +0,0 @@ -#ifndef __KANJIMEMORY_H__ -#define __KANJIMEMORY_H__ - -#include -#include - -#if defined(_DEBUG) && !defined(KANJI_MEMTRACE) -#define KANJI_MEMTRACE -#endif - -#ifdef WIN32 -#pragma warning(disable : 4595) -#endif - -////////////////////////////////////////////////////////////////////////// -// HOW TO USE THIS FILE -// -// In the desired .CPP file (NOT header file), AFTER ALL of your -// #include declarations, do a #include "KMemory.h" or whatever you renamed -// this file to. It's very important that you do it only in the .cpp and -// after every other include file, otherwise it won't compile. The memory leaks -// will appear in a file called mem_leaks.txt and they will also be printed out -// in the output window when the program exits. -// -////////////////////////////////////////////////////////////////////////// - -#ifndef SAFE_DELETE -#define SAFE_DELETE(pPtr) { if(pPtr) delete pPtr; pPtr = 0; } -#endif - -#ifndef SCOPED_AUTO_SAFE_DELETE -template -class ScopedAutoDeletePointerHelper -{ -public: - ScopedAutoDeletePointerHelper(T pPtr) : _pPtr(pPtr) {} - ~ScopedAutoDeletePointerHelper() { SAFE_DELETE(_pPtr); } - - T _pPtr; -}; -#define SCOPED_AUTO_SAFE_DELETE(p) ScopedAutoDeletePointerHelper anAutoDelete##p(p); -#endif - -#ifndef SAFE_DELETE_ARRAY -#define SAFE_DELETE_ARRAY(pPtr) { if(pPtr) delete [] pPtr; pPtr = 0; } -#endif - -extern void KMemoryDumpUnfreed(); -extern size_t KMemoryAllocated(); - -#ifdef WIN32 -#define KMEM_CALLTYPE __cdecl -#else -#define KMEM_CALLTYPE -#endif - -#ifdef __APPLE__ -#define KMEM_THROWSPEC throw(std::bad_alloc) -#define KMEM_THROWS_BADALLOC -#include -#else -#define KMEM_THROWSPEC -#endif - -#if defined(KANJI_MEMTRACE) - -///////////////////////////////////////////// -// DO NOT CALL THESE TWO METHODS DIRECTLY // -///////////////////////////////////////////// - -extern void KMemoryAddTrack(void* addr, size_t asize, const char* fname, int lnum); -extern void KMemoryRemoveTrack(void* addr); - -//Replacement for the standard malloc/free, records size of allocation and the file/line number it was on -inline void* _kanjimalloc (size_t size, const char* file, int line) -{ - void* ptr = (void*)malloc(size); - KMemoryAddTrack(ptr, size, file, line); - return(ptr); -} - -inline void* _kanjimalloc (size_t size) -{ - return _kanjimalloc(size, "", 0); -} - -inline void _kanjifree (void* ptr) -{ - KMemoryRemoveTrack(ptr); - free(ptr); -} - -inline void* _kanjirealloc (void* ptr, size_t size, const char* file, int line) -{ - void* ptr2 = (void*)realloc(ptr, size); - if (ptr2) - { - KMemoryRemoveTrack(ptr); - KMemoryAddTrack(ptr2, size, file, line); - } - return ptr2; -} - -inline void* _kanjirealloc (void* ptr, size_t size) -{ - return _kanjirealloc(ptr, size, "", 0); -} - -#define kanjimalloc(size) _kanjimalloc((size), __FILE__, __LINE__) -#define kanjifree _kanjifree -#define kanjirealloc(ptr, size) _kanjirealloc(ptr, size, __FILE__, __LINE__) - -//Replacement for the standard "new" operator, records size of allocation and the file/line number it was on -inline void* KMEM_CALLTYPE operator new(size_t size, const char* file, int line) -{ - void* ptr = (void*)malloc(size); - KMemoryAddTrack(ptr, size, file, line); - return(ptr); -} - -//Same as above, but for arrays -inline void* KMEM_CALLTYPE operator new[](size_t size, const char* file, int line) -{ - void* ptr = (void*)malloc(size); - KMemoryAddTrack(ptr, size, file, line); - return(ptr); -} - - -// These single argument new operators allow vc6 apps to compile without errors -inline void* KMEM_CALLTYPE operator new(size_t size) KMEM_THROWSPEC -{ - void* ptr = (void*)malloc(size); -#ifdef KMEM_THROWS_BADALLOC - if(!ptr) throw std::bad_alloc(); -#endif - return(ptr); -} - -inline void* KMEM_CALLTYPE operator new[](size_t size) KMEM_THROWSPEC -{ - void* ptr = (void*)malloc(size); -#ifdef KMEM_THROWS_BADALLOC - if(!ptr) throw std::bad_alloc(); -#endif // KMEM_THROWS_BADALLOC - return(ptr); -} - - -//custom delete operators -inline void KMEM_CALLTYPE operator delete(void* p) throw() -{ - KMemoryRemoveTrack(p); - free(p); -} - -inline void KMEM_CALLTYPE operator delete[](void* p) throw() -{ - KMemoryRemoveTrack(p); - free(p); -} - -//needed in case in the constructor of the class we're newing, it throws an exception -inline void KMEM_CALLTYPE operator delete(void* pMem, const char* file, int line) -{ - free(pMem); -} - -inline void KMEM_CALLTYPE operator delete[](void* pMem, const char* file, int line) -{ - free(pMem); -} - -#define KDEBUG_NEW new(__FILE__, __LINE__) -#define new KDEBUG_NEW - -#else // KANJI_MEMTRACE NOT DEFINED - -#define kanjimalloc malloc -#define kanjifree free -#define kanjirealloc realloc - -inline void* _kanjimalloc(size_t size) { return malloc(size); } -inline void _kanjifree(void* ptr) { free(ptr); } -inline void* _kanjirealloc(void* ptr, size_t size) { return realloc(ptr, size); } - -#endif // KANJI_MEMTRACE - -#endif // __KANJIMEMORY_H__ \ No newline at end of file diff --git a/spine-cpp/spine-cpp-unit-tests/memory/KString.cpp b/spine-cpp/spine-cpp-unit-tests/memory/KString.cpp deleted file mode 100755 index bd7aef664..000000000 --- a/spine-cpp/spine-cpp-unit-tests/memory/KString.cpp +++ /dev/null @@ -1,185 +0,0 @@ -#include "KString.h" -#include - -#include "MiniCppUnit.hxx" - -/////////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////////// -// String Helper - -static std::string vasprintf(const char* fmt, va_list argv) -{ - std::string result; - va_list argv_copy; // vsnprintf modifies argv, need copy -#ifndef va_copy - argv_copy = argv; -#else - va_copy(argv_copy, argv); -#endif - - int len = vsnprintf(NULL, 0, fmt, argv_copy); - if (len > 0 && len < 255) - { - // cover 90% of all calls - char str[256] = { 0 }; - int len2 = vsnprintf(str, 255, fmt, argv); - result = str; - } - else if (len > 0) - { - char* str = static_cast(alloca(len + 1)); // alloca on stack, space for null-termination - int len2 = vsnprintf(str, len + 1, fmt, argv); - result = str; - } - return result; -} - - -static void reportWarning(const std::string& warnStr) -{ - if (JetBrains::underTeamcity()) - gTeamCityListener.messages.messageWarning(warnStr); - else - fprintf(stderr, "%s", warnStr.c_str()); -} - -static void reportError(const std::string& errorStr) -{ - if (JetBrains::underTeamcity()) - gTeamCityListener.messages.messageError(errorStr); - else - fprintf(stderr, "%s", errorStr.c_str()); -} - -static void reportInfo(const std::string& infoStr) -{ - if (JetBrains::underTeamcity()) - gTeamCityListener.messages.messageNormal(infoStr); - else - fprintf(stderr, "%s", infoStr.c_str()); -} - -static void reportDebug(const std::string& debugStr) -{ - fprintf(stderr, "%s", debugStr.c_str()); -} - -static void report(ErrorLevel level, const std::string& Str) -{ - switch (level) { - case WARNLVL: reportWarning(Str); break; - case ERRORLVL: reportError(Str); break; - case INFOLVL: reportInfo(Str); break; - case DEBUGLVL: reportDebug(Str); break; - } -} - -void KOutputDebug(ErrorLevel lvl, const char* fmt ...) -{ - va_list argList; - va_start(argList, fmt); - std::string str = vasprintf(fmt, argList); - va_end(argList); - - report(lvl, str); -} - -#define K_MAX(a,b) ((a>b) ? a : b) - -std::string GetFileName(const std::string& thePath, bool noExtension) -{ - int aLastSlash = K_MAX((int)thePath.rfind('\\'), (int)thePath.rfind('/')); - - if (noExtension) - { - int aLastDot = (int)thePath.rfind('.'); - if (aLastDot > aLastSlash) - return thePath.substr(aLastSlash + 1, aLastDot - aLastSlash - 1); - } - - if (aLastSlash == -1) - return thePath; - else - return thePath.substr(aLastSlash + 1); -} - -std::string GetFileDir(const std::string& thePath, bool withSlash) -{ - int aLastSlash = K_MAX((int)thePath.rfind(('\\')), (int)thePath.rfind(('/'))); - - if (aLastSlash == -1) - return (""); - else - { - if (withSlash) - return thePath.substr(0, aLastSlash + 1); - else - return thePath.substr(0, aLastSlash); - } -} - -std::string GetFileExt(const std::string& thePath) -{ - std::string::size_type idx = thePath.find_last_of('.'); - - if (idx != std::string::npos) - return thePath.substr(idx + 1); - - return (""); -} - -/** - * g_ascii_strcasecmp: - * @s1: string to compare with @s2. - * @s2: string to compare with @s1. - * - * Compare two strings, ignoring the case of ASCII characters. - * - * Unlike the BSD strcasecmp() function, this only recognizes standard - * ASCII letters and ignores the locale, treating all non-ASCII - * bytes as if they are not letters. - * - * This function should be used only on strings that are known to be - * in encodings where the bytes corresponding to ASCII letters always - * represent themselves. This includes UTF-8 and the ISO-8859-* - * charsets, but not for instance double-byte encodings like the - * Windows Codepage 932, where the trailing bytes of double-byte - * characters include all ASCII letters. If you compare two CP932 - * strings using this function, you will get false matches. - * - * Return value: an integer less than, equal to, or greater than - * zero if @s1 is found, respectively, to be less than, - * to match, or to be greater than @s2. - **/ -static int g_ascii_compare_caseless(const char* s1, const char* s2) -{ -#define TOUPPER(c) (((c) >= 'a' && (c) <= 'z') ? (c) - 'a' + 'A' : (c)) -#define TOLOWER(c) (((c) >= 'A' && (c) <= 'Z') ? (c) - 'A' + 'a' : (c)) -#define g_return_val_if_fail(expr,val) { if (!(expr)) return (val); } - - int c1, c2; - - g_return_val_if_fail(s1 != NULL, 0); - g_return_val_if_fail(s2 != NULL, 0); - - while (*s1 && *s2) - { - c1 = (int)(unsigned char)TOLOWER(*s1); - c2 = (int)(unsigned char)TOLOWER(*s2); - if (c1 != c2) - return (c1 - c2); - s1++; s2++; - } - - return (((int)(unsigned char)* s1) - ((int)(unsigned char)* s2)); - -#undef g_return_val_if_fail -#undef TOUPPER -#undef TOLOWER -} - - -int CompareNoCase(const std::string & str1, const std::string & str2) -{ - return g_ascii_compare_caseless(str1.c_str(), str2.c_str()); -} diff --git a/spine-cpp/spine-cpp-unit-tests/memory/KString.h b/spine-cpp/spine-cpp-unit-tests/memory/KString.h deleted file mode 100755 index 32a27cb44..000000000 --- a/spine-cpp/spine-cpp-unit-tests/memory/KString.h +++ /dev/null @@ -1,19 +0,0 @@ -#pragma once - -#include - -// Error reporting with levels similar to Android and are automatically forwarded to Continuous integration server -enum ErrorLevel { - WARNLVL, - ERRORLVL, - INFOLVL, - DEBUGLVL -}; - -extern void KOutputDebug(ErrorLevel lvl, const char* fmt ...); - -extern std::string GetFileName(const std::string& thePath, bool noExtension); -extern std::string GetFileDir(const std::string& thePath, bool withSlash); -extern std::string GetFileExt(const std::string& thePath); - -extern int CompareNoCase(const std::string& str1, const std::string& str2); diff --git a/spine-cpp/spine-cpp-unit-tests/minicppunit/MiniCppUnit.cxx b/spine-cpp/spine-cpp-unit-tests/minicppunit/MiniCppUnit.cxx deleted file mode 100755 index f14e790fb..000000000 --- a/spine-cpp/spine-cpp-unit-tests/minicppunit/MiniCppUnit.cxx +++ /dev/null @@ -1,279 +0,0 @@ -/* - * Copyright (c) 2003-2004 Pau Arumí & David García - * - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - */ - -#include "MiniCppUnit.hxx" - -JetBrains::TeamcityProgressListener gTeamCityListener; -bool gUseTeamCity = false; - -#include -#include -#include - -#define MIN(a,b) ((a < b) ? a : b) -#define MAX(a,b) ((a > b) ? a : b) - -TestsListener::TestsListener() : _currentTestName(0) -{ - _executed=_failed=_exceptions=0; - gUseTeamCity = JetBrains::underTeamcity(); -} - -TestsListener& TestsListener::theInstance() -{ - static TestsListener instancia; - return instancia; -} - -std::stringstream& TestsListener::errorsLog() -{ - if (_currentTestName) - { - _log << "\n" << errmsgTag_nameOfTest() << (*_currentTestName) << "\n"; - } - return _log; -} - -std::string TestsListener::logString() -{ - std::string aRetornar = _log.str(); - _log.str(""); - return aRetornar; -} -void TestsListener::currentTestName( std::string& name) -{ - _currentTestName = &name; - - if(gUseTeamCity)gTeamCityListener.startTest(name); -} -void TestsListener::testHasRun() // started -{ - std::cout << "."; - theInstance()._executed++; -} - -void TestsListener::testHasPassed() // finished without errors -{ - if(gUseTeamCity) - gTeamCityListener.endTest(*(theInstance()._currentTestName)); -} - -void TestsListener::testHasFailed(const char* reason, const char* file, int line) -{ - if(gUseTeamCity) - { - gTeamCityListener.addFailure(JetBrains::TestFailure(*(theInstance()._currentTestName), "", JetBrains::SourceLine(file, line), reason)); - gTeamCityListener.endTest(*(theInstance()._currentTestName)); - } - - std::cout << "F"; - theInstance()._failed++; - throw TestFailedException(); -} -void TestsListener::testHasThrown() -{ - if(gUseTeamCity) - { - gTeamCityListener.addFailure(JetBrains::TestFailure(*(theInstance()._currentTestName), "", JetBrains::SourceLine(), "Exception")); - gTeamCityListener.endTest(*(theInstance()._currentTestName)); - } - std::cout << "E"; - theInstance()._exceptions++; -} -std::string TestsListener::summary() -{ - std::ostringstream os; - os << "\nSummary:\n" - << Assert::bold() << "\tExecuted Tests: " - << _executed << Assert::normal() << std::endl - << Assert::green() << "\tPassed Tests: " - << (_executed-_failed-_exceptions) - << Assert::normal() << std::endl; - if (_failed > 0) - { - os << Assert::red() << "\tFailed Tests: " - << _failed << Assert::normal() << std::endl; - } - if (_exceptions > 0) - { - os << Assert::yellow() << "\tUnexpected exceptions: " - << _exceptions << Assert::normal() << std::endl; - } - os << std::endl; - return os.str(); -} -bool TestsListener::allTestsPassed() -{ - return !theInstance()._exceptions && !theInstance()._failed; -} - - - -void Assert::assertTrue(char* strExpression, bool expression, - const char* file, int linia) -{ - if (!expression) - { - TestsListener::theInstance().errorsLog() << "\n" - << errmsgTag_testFailedIn() << file - << errmsgTag_inLine() << linia << "\n" - << errmsgTag_failedExpression() - << bold() << strExpression << normal() << "\n"; - TestsListener::theInstance().testHasFailed(strExpression, file, linia); - } -} - -void Assert::assertTrueMissatge(char* strExpression, bool expression, - const char* missatge, const char* file, int linia) -{ - if (!expression) - { - TestsListener::theInstance().errorsLog() << "\n" - << errmsgTag_testFailedIn() << file - << errmsgTag_inLine() << linia << "\n" - << errmsgTag_failedExpression() - << bold() << strExpression << "\n" - << missatge<< normal() << "\n"; - TestsListener::theInstance().testHasFailed(strExpression, file, linia); - } -} - - - -void Assert::assertEquals( const char * expected, const char * result, - const char* file, int linia ) -{ - assertEquals(std::string(expected), std::string(result), - file, linia); - -} -void Assert::assertEquals( const bool& expected, const bool& result, - const char* file, int linia ) -{ - assertEquals( - (expected?"true":"false"), - (result?"true":"false"), - file, linia); -} - -// floating point numbers comparisons taken -// from c/c++ users journal. dec 04 pag 10 -bool isNaN(double x) -{ - bool b1 = (x < 0.0); - bool b2 = (x >= 0.0); - return !(b1 || b2); -} - -double scaledEpsilon(const double& expected, const double& fuzzyEpsilon ) -{ - const double aa = fabs(expected)+1; - return (std::isinf(aa))? fuzzyEpsilon: fuzzyEpsilon * aa; -} -bool fuzzyEquals(double expected, double result, double fuzzyEpsilon) -{ - return (expected==result) || ( fabs(expected-result) <= scaledEpsilon(expected, fuzzyEpsilon) ); -} -void Assert::assertEquals( const double& expected, const double& result, - const char* file, int linia ) -{ - const double fuzzyEpsilon = 0.000001; - assertEqualsEpsilon( expected, result, fuzzyEpsilon, file, linia ); -} - -void Assert::assertEquals( const float& expected, const float& result, - const char* file, int linia ) -{ - assertEquals((double)expected, (double)result, file, linia); -} -void Assert::assertEquals( const long double& expected, const long double& result, - const char* file, int linia ) -{ - assertEquals((double)expected, (double)result, file, linia); -} -void Assert::assertEqualsEpsilon( const double& expected, const double& result, const double& epsilon, - const char* file, int linia ) -{ - if (isNaN(expected) && isNaN(result) ) return; - if (!isNaN(expected) && !isNaN(result) && fuzzyEquals(expected, result, epsilon) ) return; - - std::stringstream anError; - anError - << errmsgTag_testFailedIn() << file - << errmsgTag_inLine() << linia << "\n" - << errmsgTag_expected() - << bold() << expected << normal() << " " - << errmsgTag_butWas() - << bold() << result << normal() << "\n"; - - TestsListener::theInstance().errorsLog() << anError.str(); - - TestsListener::theInstance().testHasFailed(anError.str().c_str(), file, linia); -} - -int Assert::notEqualIndex( const std::string & one, const std::string & other ) -{ - int end = MIN(one.length(), other.length()); - for ( int index = 0; index < end; index++ ) - if (one[index] != other[index] ) - return index; - return end; -} - - -/** - * we overload the assert with string doing colored diffs - * - * MS Visual6 doesn't allow string by reference :-( - */ -void Assert::assertEquals( const std::string expected, const std::string result, - const char* file, int linia ) -{ - if(expected == result) - return; - - int indexDiferent = notEqualIndex(expected, result); - - std::stringstream anError; - anError - << file << ", linia: " << linia << "\n" - << errmsgTag_expected() << "\n" << blue() - << expected.substr(0,indexDiferent) - << green() << expected.substr(indexDiferent) - << normal() << "\n" - << errmsgTag_butWas() << blue() << "\n" - << result.substr(0,indexDiferent) - << red() << result.substr(indexDiferent) - << normal() << std::endl; - - TestsListener::theInstance().errorsLog() << anError.str(); - - TestsListener::theInstance().testHasFailed(anError.str().c_str(), file, linia); -} -void Assert::fail(const char* motiu, const char* file, int linia) -{ - TestsListener::theInstance().errorsLog() << - file << errmsgTag_inLine() << linia << "\n" << - "Reason: " << motiu << "\n"; - - TestsListener::theInstance().testHasFailed(motiu, file, linia); -} - - diff --git a/spine-cpp/spine-cpp-unit-tests/minicppunit/MiniCppUnit.hxx b/spine-cpp/spine-cpp-unit-tests/minicppunit/MiniCppUnit.hxx deleted file mode 100755 index 7ce3d8fd6..000000000 --- a/spine-cpp/spine-cpp-unit-tests/minicppunit/MiniCppUnit.hxx +++ /dev/null @@ -1,504 +0,0 @@ -/* - * Copyright (c) 2003-2004 Pau Arum� & David Garc�a - * - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - */ - -#ifndef MiniCppUnit_hxx -#define MiniCppUnit_hxx - -/** - * @mainpage - * miniCppUnit - * (C) 2003-2006 Pau Arumi & David Garcia - * - * @version 2.5 2006-03-14 - * - MS Visual compatibility: SConstruct ccflags, usage example, #ifdefs - * @version 2.4 2006-03-14 - * - exit test case after first failure - * - double and float comparison with fuzzy equals (using scalable epsilon) - * - have into account not a numbers - * - new ASSERT_EQUALS_EPSILON macro - * - more colors, and disabled when comiled in MS Visual - * - removed catalan location. - * - UsageExample.cxx now uses all macros and features - * @version 2.3 2006-02-13 added usage example and SConstruct - * @version 2.2 2004-11-28 code in english and tests suites - * @version 2.1 2004-11-04 char* especialization - * @version 2.0 2004-10-26 TestsFactory - * @version 1.0 2003-10-28 initial - * - * Example of use: - * - * @code - * #include "MiniCppUnit.hxx" - * class MyTests : public TestFixture - * { - * public: - * TEST_FIXTURE( MyTests ) - * { - * CAS_DE_TEST( testAddition ); - * // etc - * } - * void testAddition() - * { - * ASSERT_EQUALS( 4, 1+1+2 ); - * } - * // etc - * }; - * - * REGISTER_FIXTURE( MyTests ); - * @endcode - * @code - * int main() - * { - * return TestFixtureFactory::theInstance().runTests() ? 0 : -1; - * } - * @endcode - * Good things: - * - * - it's a tiny framework made up of two or three src files. - * => no need to install as a library - * - object oriented and makes use of several GoF patterns - * - very simple usage. Just needs to learn very few C macros - * - string asserts are simpler to use than cppunit - * - string asserts are enhanced with coloured diffs - * - concrete test classes are totally decoupled via static factory - * => no src file have to include them all. - * - it have test suite hierarchies - * - compatible with non-standard compliant VisualC6 - * (though not necessary good ;) - */ - -#include -#include -#include -#include - -#if _MSC_VER < 1300 -/** necesary for Visual 6 which don't define std::min */ -namespace std -{ - template T min(const T& a, const T& b) { return a < b ? a: b; } -} -#endif - -#include "../teamcity/teamcity_cppunit.h" - -extern JetBrains::TeamcityProgressListener gTeamCityListener; - -/** - * A singleton class. - * Receives tests results and stores messages to the test log - * for later listing. - * It's a singleton for an easy global access from the 'Asserts' - * methods but it is probably asking for a refactoring in order to limit - * access only to TestFixtures - */ -class TestsListener -{ -public: - /** accessor to the global (static) singleton instance */ - static TestsListener& theInstance(); - std::stringstream& errorsLog(); - std::string logString(); - void currentTestName( std::string& name); - static void testHasRun(); - static void testHasPassed(); - static void testHasFailed(const char* reason, const char* file, int line); - static void testHasThrown(); - /** the human readable summary of run tests*/ - std::string summary(); - /** returns wheather all run tests have passed */ - static bool allTestsPassed(); - -private: - static const char* errmsgTag_nameOfTest() { return "Test failed: "; } - - /** constructor private: force the singleton to be wellbehaved ! */ - TestsListener(); - - std::string* _currentTestName; - std::stringstream _log; - unsigned _executed; - unsigned _failed; - unsigned _exceptions; -}; - -class TestFailedException -{ -}; - -/** - * Abstract class with interface that allows run a test. That is runTest - * and name. It is implemented by TestFixture and TestCase - * - * It does the 'Component' role in the 'Composite' patten - **/ -class Test -{ -public: - virtual ~Test(){} - /** run the test: exercice the code and check results*/ - virtual void runTest() = 0; - /** the test human-readable name */ - virtual std::string name() const = 0; -}; - - -/** - * This class is just a placeholder for all assert functions --as static methods. - * It is meant for being used just by the assert macros - */ -class Assert -{ - static const char * errmsgTag_testFailedIn() { return "Test failed in "; } - static const char * errmsgTag_inLine() { return ", line: "; }; - static const char * errmsgTag_failedExpression() { return "Failed expression: "; } - static const char * errmsgTag_expected() { return "Expected: "; } - static const char * errmsgTag_butWas() { return "But was: "; } - -public: -#ifdef _MSC_VER - static const char * blue() { return ""; } - static const char * green() { return ""; } - static const char * red() { return ""; } - static const char * normal() { return ""; } - static const char * bold() { return ""; } - static const char * yellow() { return ""; } -#else - static const char * blue() { return "\033[36;1m"; } - static const char * green() { return "\033[32;1m"; } - static const char * red() { return "\033[31;1m"; } - static const char * normal() { return "\033[0m"; } - static const char * bold() { return "\033[" "1m"; } - static const char * yellow() { return "\033[93;1m"; } -#endif - template - static void assertEquals( const AType& expected, const AType& result, - const char* file="", int linia=0 ) - { - if(expected != result) - { - std::stringstream anError; - - anError - << file << ", linia: " << linia << "\n" - << errmsgTag_expected() << " " << expected << " " - << errmsgTag_butWas() << " " << result << "\n"; - - // TestsListener::theInstance().errorsLog() << anError; - - TestsListener::theInstance().testHasFailed(anError.str().c_str(), file, linia); - } - } - - static void assertTrue(char* strExpression, bool expression, - const char* file="", int linia=0); - - static void assertTrueMissatge(char* strExpression, bool expression, - const char* missatge, const char* file="", int linia=0); - - static void assertEquals( const char * expected, const char * result, - const char* file="", int linia=0 ); - - static void assertEquals( const bool& expected, const bool& result, - const char* file="", int linia=0 ); - - static void assertEquals( const double& expected, const double& result, - const char* file="", int linia=0 ); - - static void assertEquals( const float& expected, const float& result, - const char* file="", int linia=0 ); - - static void assertEquals( const long double& expected, const long double& result, - const char* file="", int linia=0 ); - - static void assertEqualsEpsilon( const double& expected, const double& result, const double& epsilon, - const char* file="", int linia=0 ); - - static int notEqualIndex( const std::string & one, const std::string & other ); - - /** - * we overload the assert with string doing colored diffs - * - * MS Visual6 doesn't allow string by reference :-( - */ - static void assertEquals( const std::string expected, const std::string result, - const char* file="", int linia=0 ); - - static void fail(const char* motiu, const char* file="", int linia=0); - - -}; - -/** - * A TestFixture is a class that contain TestCases --which corresponds to - * ConcreteTestFixture methods-- common objects uder tests, and setUp and - * tearDown methods which are automatically executed before and after each - * test case. - * - * Is the base class of ConcreteFixtures implemented by the framework user - * - * It does the 'Composite' role in the 'Composite' GoF pattern. - * Its composite children are TestCases, which wrapps the test methods. - * - * It is a template class parametrized by ConcreteTestFixture so that it can - * instantiate TestCase objects templatized with this same parameter: it needs the - * concrete class type for calling its non-static methods. - */ -template -class TestFixture : public Test -{ -protected: - - typedef ConcreteTestFixture ConcreteFixture; - typedef void(ConcreteTestFixture::*TestCaseMethod)(); - - /** - * Wrapper for the test methods of concrete TestFixtures. - * - * Makes the 'Leave' role in the 'Composite' GoF pattern because can't be - * be a composition of other tests. - * - * It's also a case of 'Command' pattern because it encapsules in an object - * certain functionality whose execution depends on some deferred entity. - */ - class TestCase : public Test - { - public: - TestCase(ConcreteFixture* parent, TestCaseMethod method, const std::string & name) : - _parent(parent), - _testCaseMethod(method), - _name(name) - { - } - /** calls TestFixture method. setUp and tearDown methods are called by - * its parent TestFixture (in its runTest method). - * it is robust to unexpected exceptions (throw) */ - void runTest() - { - TestsListener::theInstance().testHasRun(); - TestsListener::theInstance().currentTestName(_name); - try - { - (_parent->*_testCaseMethod)(); - TestsListener::theInstance().testHasPassed(); - } - catch( std::exception& error ) - { - TestsListener::theInstance().testHasThrown(); - TestsListener::theInstance().errorsLog() - << "std::exception catched by MiniCppUnit: \n" - << "what() : " - << Assert::yellow() << error.what() - << Assert::normal() << "\n"; - } - catch ( TestFailedException& ) //just for skiping current test case - { - // the assert() calls testHasFailed() - } - catch(...) - { - TestsListener::theInstance().testHasThrown(); - TestsListener::theInstance().errorsLog() - << "non standard exception catched by MiniCppUnit.\n"; - } - } - - /** the TestFixture method hame */ - std::string name() const - { - return _name; - } - - private: - ConcreteFixture* _parent; - TestCaseMethod _testCaseMethod; - std::string _name; - }; - //------------- end of class TestCase ---------------------------- - -private: - - typedef std::list TestCases; - TestCases _testCases; - std::string _name; - - void testsList() const - { - std::cout << "\n+ " << name() << "\n"; - for( TestCases::const_iterator it=_testCases.begin(); - it!=_testCases.end(); it++ ) - std::cout << " - "<< (*it)->name() << "\n"; - } - - -public: - virtual void setUp() {} - virtual void tearDown() {} - - std::string name() const - { - return _name; - }; - - TestFixture(const std::string& name="A text fixture") : _name(name) - { - } - - void afegeixCasDeTest(ConcreteFixture* parent, TestCaseMethod method, const char* name) - { - TestCase* casDeTest = new TestCase(parent, method, _name + "::" + name); - _testCases.push_back( casDeTest ); - } - /** calls each test after setUp and tearDown TestFixture methods */ - void runTest() - { - testsList(); - TestCases::iterator it; - for( it=_testCases.begin(); it!=_testCases.end(); it++) - { - setUp(); - (*it)->runTest(); - tearDown(); - } - } - /** TestCase that wrapps TestFixture methods are dynamically created and owned by - * the TestFixture. So here we clean it up*/ - virtual ~TestFixture() - { - TestCases::iterator it; - for( it =_testCases.begin(); it!=_testCases.end(); it++) - delete (*it); - } -}; - - -/** - * This class is aimed to hold a creator method for each concrete TestFixture - */ -class TestFixtureFactory -{ -private: - /** Well behaved singleton: - * Don't allow instantiation apart from theInstance(), so private ctr.*/ - TestFixtureFactory() - { - } - typedef Test* (*FixtureCreator)(); - std::list _creators; -public: - /** Accessor to the (static) singleton instance */ - static TestFixtureFactory& theInstance() - { - static TestFixtureFactory theFactory; - return theFactory; - } - bool runTests() - { - std::list::iterator it; - for(it=_creators.begin(); it!=_creators.end(); it++) - { - FixtureCreator creator = *it; - Test* test = creator(); - test->runTest(); - delete test; - } - std::string errors = TestsListener::theInstance().logString(); - if (errors!="") std::cout << "\n\nError Details:\n" << errors; - std::cout << TestsListener::theInstance().summary(); - - return TestsListener::theInstance().allTestsPassed(); - } - void addFixtureCreator(FixtureCreator creator) - { - _creators.push_back( creator ); - } - -}; - -/** - * Macro a usar despr�s de cada classe de test - */ -#define REGISTER_FIXTURE( ConcreteTestFixture ) \ -\ -Test* Creador##ConcreteTestFixture() { return new ConcreteTestFixture; } \ -\ -class Registrador##ConcreteTestFixture \ -{ \ -public: \ - Registrador##ConcreteTestFixture() \ - { \ - TestFixtureFactory::theInstance().addFixtureCreator( \ - Creador##ConcreteTestFixture); \ - } \ -}; \ -static Registrador##ConcreteTestFixture estatic##ConcreteTestFixture; - - -/** - * Assert macros to use in test methods. An assert is a test condition - * we want to check. - */ -#define ASSERT_EQUALS( expected, result) \ - Assert::assertEquals( expected, result, __FILE__, __LINE__ ); - -#define ASSERT_EQUALS_EPSILON( expected, result, epsilon) \ - Assert::assertEqualsEpsilon( expected, result, epsilon, __FILE__, __LINE__ ); - -#define ASSERT( exp ) \ - Assert::assertTrue(#exp, exp, __FILE__, __LINE__); - -#define ASSERT_MESSAGE( exp, message ) \ - Assert::assertTrueMissatge(#exp, exp, message, __FILE__, __LINE__); - -#define FAIL( why ) \ - Assert::fail(#why, __FILE__, __LINE__); - -/** - * Macros that allows to write the constructor of the concrete TestFixture. - * What the constructor does is agregate a wrapper for each test case (method) - * As easy to write as this: - * - * @code - * class MyTests : public TestFixture - * { - * public: - * TEST_FIXTURE( MyTests ) - * { - * TEST_CASE( test ); - * // etc - * } - * void test() - * { - * ASSERT_EQUALS( 4, 1+1+2 ); - * } - * @endcode - */ - -#define TEST_FIXTURE( ConcreteFixture ) \ - ConcreteFixture() : TestFixture( #ConcreteFixture ) - -#define TEST_CASE( methodName ) \ - afegeixCasDeTest( this, &ConcreteFixture::methodName, #methodName ); - - - - - -#endif // MiniCppUnit_hxx diff --git a/spine-cpp/spine-cpp-unit-tests/spine_unit_test/spine_unit_test.xcodeproj/project.pbxproj b/spine-cpp/spine-cpp-unit-tests/spine_unit_test/spine_unit_test.xcodeproj/project.pbxproj deleted file mode 100644 index b3171bc62..000000000 --- a/spine-cpp/spine-cpp-unit-tests/spine_unit_test/spine_unit_test.xcodeproj/project.pbxproj +++ /dev/null @@ -1,831 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 48; - objects = { - -/* Begin PBXBuildFile section */ - BB4E38561FD9C85600709FF2 /* spineboy-ess.json in CopyFiles */ = {isa = PBXBuildFile; fileRef = BB4E38541FD9C85600709FF2 /* spineboy-ess.json */; }; - BB4E38571FD9C85600709FF2 /* spineboy.atlas in CopyFiles */ = {isa = PBXBuildFile; fileRef = BB4E38551FD9C85600709FF2 /* spineboy.atlas */; }; - BB4E385A1FD9C86400709FF2 /* raptor.atlas in CopyFiles */ = {isa = PBXBuildFile; fileRef = BB4E38581FD9C86400709FF2 /* raptor.atlas */; }; - BB4E385B1FD9C86400709FF2 /* raptor-pro.json in CopyFiles */ = {isa = PBXBuildFile; fileRef = BB4E38591FD9C86400709FF2 /* raptor-pro.json */; }; - BB4E385E1FD9C87700709FF2 /* goblins-pro.json in CopyFiles */ = {isa = PBXBuildFile; fileRef = BB4E385C1FD9C87600709FF2 /* goblins-pro.json */; }; - BB4E385F1FD9C87700709FF2 /* goblins.atlas in CopyFiles */ = {isa = PBXBuildFile; fileRef = BB4E385D1FD9C87700709FF2 /* goblins.atlas */; }; - BB6017131FD9289A009BD546 /* main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB6017121FD9289A009BD546 /* main.cpp */; }; - BB6017A21FD928AC009BD546 /* Attachment.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB6017671FD928AC009BD546 /* Attachment.cpp */; }; - BB6017A31FD928AC009BD546 /* Skeleton.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB6017681FD928AC009BD546 /* Skeleton.cpp */; }; - BB6017A41FD928AC009BD546 /* TranslateTimeline.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB6017691FD928AC009BD546 /* TranslateTimeline.cpp */; }; - BB6017A51FD928AC009BD546 /* Extension.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB60176A1FD928AC009BD546 /* Extension.cpp */; }; - BB6017A61FD928AC009BD546 /* Updatable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB60176B1FD928AC009BD546 /* Updatable.cpp */; }; - BB6017A71FD928AC009BD546 /* Bone.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB60176C1FD928AC009BD546 /* Bone.cpp */; }; - BB6017A81FD928AC009BD546 /* AtlasAttachmentLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB60176D1FD928AC009BD546 /* AtlasAttachmentLoader.cpp */; }; - BB6017A91FD928AC009BD546 /* EventTimeline.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB60176E1FD928AC009BD546 /* EventTimeline.cpp */; }; - BB6017AA1FD928AC009BD546 /* PathConstraint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB60176F1FD928AC009BD546 /* PathConstraint.cpp */; }; - BB6017AB1FD928AC009BD546 /* VertexAttachment.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB6017701FD928AC009BD546 /* VertexAttachment.cpp */; }; - BB6017AC1FD928AC009BD546 /* TextureLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB6017711FD928AC009BD546 /* TextureLoader.cpp */; }; - BB6017AD1FD928AC009BD546 /* SkeletonData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB6017721FD928AC009BD546 /* SkeletonData.cpp */; }; - BB6017AE1FD928AC009BD546 /* TransformConstraintTimeline.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB6017731FD928AC009BD546 /* TransformConstraintTimeline.cpp */; }; - BB6017AF1FD928AC009BD546 /* IkConstraint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB6017741FD928AC009BD546 /* IkConstraint.cpp */; }; - BB6017B01FD928AC009BD546 /* CurveTimeline.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB6017751FD928AC009BD546 /* CurveTimeline.cpp */; }; - BB6017B11FD928AC009BD546 /* AnimationStateData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB6017761FD928AC009BD546 /* AnimationStateData.cpp */; }; - BB6017B21FD928AC009BD546 /* Constraint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB6017771FD928AC009BD546 /* Constraint.cpp */; }; - BB6017B31FD928AC009BD546 /* BoundingBoxAttachment.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB6017781FD928AC009BD546 /* BoundingBoxAttachment.cpp */; }; - BB6017B41FD928AC009BD546 /* PathAttachment.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB6017791FD928AC009BD546 /* PathAttachment.cpp */; }; - BB6017B51FD928AC009BD546 /* MeshAttachment.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB60177A1FD928AC009BD546 /* MeshAttachment.cpp */; }; - BB6017B61FD928AC009BD546 /* TransformConstraint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB60177B1FD928AC009BD546 /* TransformConstraint.cpp */; }; - BB6017B71FD928AC009BD546 /* Skin.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB60177C1FD928AC009BD546 /* Skin.cpp */; }; - BB6017B81FD928AC009BD546 /* RTTI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB60177D1FD928AC009BD546 /* RTTI.cpp */; }; - BB6017B91FD928AC009BD546 /* MathUtil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB60177E1FD928AC009BD546 /* MathUtil.cpp */; }; - BB6017BA1FD928AC009BD546 /* IkConstraintData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB60177F1FD928AC009BD546 /* IkConstraintData.cpp */; }; - BB6017BB1FD928AC009BD546 /* Atlas.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB6017801FD928AC009BD546 /* Atlas.cpp */; }; - BB6017BC1FD928AC009BD546 /* ClippingAttachment.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB6017811FD928AC009BD546 /* ClippingAttachment.cpp */; }; - BB6017BD1FD928AC009BD546 /* PathConstraintData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB6017821FD928AC009BD546 /* PathConstraintData.cpp */; }; - BB6017BE1FD928AC009BD546 /* Timeline.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB6017831FD928AC009BD546 /* Timeline.cpp */; }; - BB6017BF1FD928AC009BD546 /* SkeletonBinary.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB6017841FD928AC009BD546 /* SkeletonBinary.cpp */; }; - BB6017C01FD928AC009BD546 /* ScaleTimeline.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB6017851FD928AC009BD546 /* ScaleTimeline.cpp */; }; - BB6017C11FD928AC009BD546 /* LinkedMesh.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB6017861FD928AC009BD546 /* LinkedMesh.cpp */; }; - BB6017C21FD928AC009BD546 /* PointAttachment.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB6017871FD928AC009BD546 /* PointAttachment.cpp */; }; - BB6017C31FD928AC009BD546 /* RegionAttachment.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB6017881FD928AC009BD546 /* RegionAttachment.cpp */; }; - BB6017C41FD928AC009BD546 /* DeformTimeline.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB6017891FD928AC009BD546 /* DeformTimeline.cpp */; }; - BB6017C51FD928AC009BD546 /* Animation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB60178A1FD928AC009BD546 /* Animation.cpp */; }; - BB6017C61FD928AC009BD546 /* AttachmentLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB60178B1FD928AC009BD546 /* AttachmentLoader.cpp */; }; - BB6017C71FD928AC009BD546 /* DrawOrderTimeline.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB60178C1FD928AC009BD546 /* DrawOrderTimeline.cpp */; }; - BB6017C81FD928AC009BD546 /* AttachmentTimeline.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB60178D1FD928AC009BD546 /* AttachmentTimeline.cpp */; }; - BB6017C91FD928AC009BD546 /* EventData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB60178E1FD928AC009BD546 /* EventData.cpp */; }; - BB6017CA1FD928AC009BD546 /* PathConstraintSpacingTimeline.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB60178F1FD928AC009BD546 /* PathConstraintSpacingTimeline.cpp */; }; - BB6017CB1FD928AC009BD546 /* PathConstraintPositionTimeline.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB6017901FD928AC009BD546 /* PathConstraintPositionTimeline.cpp */; }; - BB6017CC1FD928AC009BD546 /* TransformConstraintData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB6017911FD928AC009BD546 /* TransformConstraintData.cpp */; }; - BB6017CD1FD928AC009BD546 /* SkeletonClipping.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB6017921FD928AC009BD546 /* SkeletonClipping.cpp */; }; - BB6017CE1FD928AC009BD546 /* TwoColorTimeline.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB6017931FD928AC009BD546 /* TwoColorTimeline.cpp */; }; - BB6017CF1FD928AC009BD546 /* Slot.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB6017941FD928AC009BD546 /* Slot.cpp */; }; - BB6017D01FD928AC009BD546 /* AnimationState.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB6017951FD928AC009BD546 /* AnimationState.cpp */; }; - BB6017D11FD928AC009BD546 /* SkeletonJson.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB6017961FD928AC009BD546 /* SkeletonJson.cpp */; }; - BB6017D21FD928AC009BD546 /* BoneData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB6017971FD928AC009BD546 /* BoneData.cpp */; }; - BB6017D31FD928AC009BD546 /* IkConstraintTimeline.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB6017981FD928AC009BD546 /* IkConstraintTimeline.cpp */; }; - BB6017D41FD928AC009BD546 /* Event.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB6017991FD928AC009BD546 /* Event.cpp */; }; - BB6017D51FD928AC009BD546 /* RotateTimeline.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB60179A1FD928AC009BD546 /* RotateTimeline.cpp */; }; - BB6017D61FD928AC009BD546 /* PathConstraintMixTimeline.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB60179B1FD928AC009BD546 /* PathConstraintMixTimeline.cpp */; }; - BB6017D71FD928AC009BD546 /* Triangulator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB60179C1FD928AC009BD546 /* Triangulator.cpp */; }; - BB6017D81FD928AC009BD546 /* Json.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB60179D1FD928AC009BD546 /* Json.cpp */; }; - BB6017D91FD928AC009BD546 /* SkeletonBounds.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB60179E1FD928AC009BD546 /* SkeletonBounds.cpp */; }; - BB6017DA1FD928AC009BD546 /* SlotData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB60179F1FD928AC009BD546 /* SlotData.cpp */; }; - BB6017DB1FD928AC009BD546 /* ShearTimeline.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB6017A01FD928AC009BD546 /* ShearTimeline.cpp */; }; - BB6017DC1FD928AC009BD546 /* ColorTimeline.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB6017A11FD928AC009BD546 /* ColorTimeline.cpp */; }; - BB6017E21FD928F7009BD546 /* KMemory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB6017E01FD928F6009BD546 /* KMemory.cpp */; }; - BB6017E31FD928F7009BD546 /* KString.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB6017E11FD928F6009BD546 /* KString.cpp */; }; - BB6017E71FD929D0009BD546 /* MiniCppUnit.cxx in Sources */ = {isa = PBXBuildFile; fileRef = BB6017E61FD929D0009BD546 /* MiniCppUnit.cxx */; }; - BB6017EE1FD929F4009BD546 /* teamcity_cppunit.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB6017EA1FD929F4009BD546 /* teamcity_cppunit.cpp */; }; - BB6017EF1FD929F4009BD546 /* teamcity_messages.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB6017ED1FD929F4009BD546 /* teamcity_messages.cpp */; }; - BB6018081FD92AF4009BD546 /* SpineEventMonitor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB6017FD1FD92AF3009BD546 /* SpineEventMonitor.cpp */; }; -/* End PBXBuildFile section */ - -/* Begin PBXCopyFilesBuildPhase section */ - BB4E38471FD9C72600709FF2 /* CopyFiles */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = testdata/spineboy; - dstSubfolderSpec = 16; - files = ( - BB4E38561FD9C85600709FF2 /* spineboy-ess.json in CopyFiles */, - BB4E38571FD9C85600709FF2 /* spineboy.atlas in CopyFiles */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - BB4E384A1FD9C79D00709FF2 /* CopyFiles */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = testdata/raptor; - dstSubfolderSpec = 16; - files = ( - BB4E385A1FD9C86400709FF2 /* raptor.atlas in CopyFiles */, - BB4E385B1FD9C86400709FF2 /* raptor-pro.json in CopyFiles */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - BB4E384B1FD9C79E00709FF2 /* CopyFiles */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = testdata/goblins; - dstSubfolderSpec = 16; - files = ( - BB4E385E1FD9C87700709FF2 /* goblins-pro.json in CopyFiles */, - BB4E385F1FD9C87700709FF2 /* goblins.atlas in CopyFiles */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - BB60170D1FD9289A009BD546 /* CopyFiles */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = /usr/share/man/man1/; - dstSubfolderSpec = 0; - files = ( - ); - runOnlyForDeploymentPostprocessing = 1; - }; -/* End PBXCopyFilesBuildPhase section */ - -/* Begin PBXFileReference section */ - BB4E38541FD9C85600709FF2 /* spineboy-ess.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; name = "spineboy-ess.json"; path = "../../../examples/spineboy/export/spineboy-ess.json"; sourceTree = ""; }; - BB4E38551FD9C85600709FF2 /* spineboy.atlas */ = {isa = PBXFileReference; lastKnownFileType = text; name = spineboy.atlas; path = ../../../examples/spineboy/export/spineboy.atlas; sourceTree = ""; }; - BB4E38581FD9C86400709FF2 /* raptor.atlas */ = {isa = PBXFileReference; lastKnownFileType = text; name = raptor.atlas; path = ../../../examples/raptor/export/raptor.atlas; sourceTree = ""; }; - BB4E38591FD9C86400709FF2 /* raptor-pro.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; name = "raptor-pro.json"; path = "../../../examples/raptor/export/raptor-pro.json"; sourceTree = ""; }; - BB4E385C1FD9C87600709FF2 /* goblins-pro.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; name = "goblins-pro.json"; path = "../../../examples/goblins/export/goblins-pro.json"; sourceTree = ""; }; - BB4E385D1FD9C87700709FF2 /* goblins.atlas */ = {isa = PBXFileReference; lastKnownFileType = text; name = goblins.atlas; path = ../../../examples/goblins/export/goblins.atlas; sourceTree = ""; }; - BB60170F1FD9289A009BD546 /* spine_unit_test */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = spine_unit_test; sourceTree = BUILT_PRODUCTS_DIR; }; - BB6017121FD9289A009BD546 /* main.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = main.cpp; sourceTree = ""; }; - BB60171C1FD928AC009BD546 /* DeformTimeline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DeformTimeline.h; sourceTree = ""; }; - BB60171D1FD928AC009BD546 /* Animation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Animation.h; sourceTree = ""; }; - BB60171E1FD928AC009BD546 /* EventData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EventData.h; sourceTree = ""; }; - BB60171F1FD928AC009BD546 /* SlotData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SlotData.h; sourceTree = ""; }; - BB6017201FD928AC009BD546 /* PathConstraintMixTimeline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PathConstraintMixTimeline.h; sourceTree = ""; }; - BB6017211FD928AC009BD546 /* SkeletonClipping.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SkeletonClipping.h; sourceTree = ""; }; - BB6017221FD928AC009BD546 /* Pool.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Pool.h; sourceTree = ""; }; - BB6017231FD928AC009BD546 /* TimelineType.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TimelineType.h; sourceTree = ""; }; - BB6017241FD928AC009BD546 /* TextureLoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TextureLoader.h; sourceTree = ""; }; - BB6017251FD928AC009BD546 /* PositionMode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PositionMode.h; sourceTree = ""; }; - BB6017261FD928AC009BD546 /* RTTI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RTTI.h; sourceTree = ""; }; - BB6017271FD928AC009BD546 /* PathAttachment.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PathAttachment.h; sourceTree = ""; }; - BB6017281FD928AC009BD546 /* MixDirection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MixDirection.h; sourceTree = ""; }; - BB6017291FD928AC009BD546 /* CurveTimeline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CurveTimeline.h; sourceTree = ""; }; - BB60172A1FD928AC009BD546 /* PointAttachment.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PointAttachment.h; sourceTree = ""; }; - BB60172B1FD928AC009BD546 /* Event.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Event.h; sourceTree = ""; }; - BB60172C1FD928AC009BD546 /* Bone.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Bone.h; sourceTree = ""; }; - BB60172D1FD928AC009BD546 /* Atlas.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Atlas.h; sourceTree = ""; }; - BB60172E1FD928AC009BD546 /* DrawOrderTimeline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DrawOrderTimeline.h; sourceTree = ""; }; - BB60172F1FD928AC009BD546 /* TransformConstraintTimeline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TransformConstraintTimeline.h; sourceTree = ""; }; - BB6017301FD928AC009BD546 /* IkConstraintTimeline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IkConstraintTimeline.h; sourceTree = ""; }; - BB6017311FD928AC009BD546 /* VertexAttachment.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VertexAttachment.h; sourceTree = ""; }; - BB6017321FD928AC009BD546 /* AttachmentType.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AttachmentType.h; sourceTree = ""; }; - BB6017331FD928AC009BD546 /* RotateMode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RotateMode.h; sourceTree = ""; }; - BB6017341FD928AC009BD546 /* ClippingAttachment.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ClippingAttachment.h; sourceTree = ""; }; - BB6017351FD928AC009BD546 /* PathConstraintPositionTimeline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PathConstraintPositionTimeline.h; sourceTree = ""; }; - BB6017361FD928AC009BD546 /* RotateTimeline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RotateTimeline.h; sourceTree = ""; }; - BB6017371FD928AC009BD546 /* Triangulator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Triangulator.h; sourceTree = ""; }; - BB6017381FD928AC009BD546 /* RegionAttachment.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RegionAttachment.h; sourceTree = ""; }; - BB6017391FD928AC009BD546 /* Attachment.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Attachment.h; sourceTree = ""; }; - BB60173A1FD928AC009BD546 /* HashMap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HashMap.h; sourceTree = ""; }; - BB60173B1FD928AC009BD546 /* TransformConstraint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TransformConstraint.h; sourceTree = ""; }; - BB60173C1FD928AC009BD546 /* TransformMode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TransformMode.h; sourceTree = ""; }; - BB60173D1FD928AC009BD546 /* SkeletonJson.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SkeletonJson.h; sourceTree = ""; }; - BB60173E1FD928AC009BD546 /* IkConstraintData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IkConstraintData.h; sourceTree = ""; }; - BB60173F1FD928AC009BD546 /* MixPose.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MixPose.h; sourceTree = ""; }; - BB6017401FD928AC009BD546 /* AnimationStateData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AnimationStateData.h; sourceTree = ""; }; - BB6017411FD928AC009BD546 /* TwoColorTimeline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TwoColorTimeline.h; sourceTree = ""; }; - BB6017421FD928AC009BD546 /* Skeleton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Skeleton.h; sourceTree = ""; }; - BB6017431FD928AC009BD546 /* ColorTimeline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ColorTimeline.h; sourceTree = ""; }; - BB6017441FD928AC009BD546 /* SpacingMode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SpacingMode.h; sourceTree = ""; }; - BB6017451FD928AC009BD546 /* Vertices.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Vertices.h; sourceTree = ""; }; - BB6017461FD928AC009BD546 /* Constraint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Constraint.h; sourceTree = ""; }; - BB6017471FD928AC009BD546 /* LinkedMesh.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LinkedMesh.h; sourceTree = ""; }; - BB6017481FD928AC009BD546 /* ShearTimeline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ShearTimeline.h; sourceTree = ""; }; - BB6017491FD928AC009BD546 /* Json.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Json.h; sourceTree = ""; }; - BB60174A1FD928AC009BD546 /* AttachmentLoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AttachmentLoader.h; sourceTree = ""; }; - BB60174B1FD928AC009BD546 /* Skin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Skin.h; sourceTree = ""; }; - BB60174C1FD928AC009BD546 /* AttachmentTimeline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AttachmentTimeline.h; sourceTree = ""; }; - BB60174D1FD928AC009BD546 /* SkeletonBinary.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SkeletonBinary.h; sourceTree = ""; }; - BB60174E1FD928AC009BD546 /* SkeletonData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SkeletonData.h; sourceTree = ""; }; - BB60174F1FD928AC009BD546 /* ContainerUtil.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ContainerUtil.h; sourceTree = ""; }; - BB6017501FD928AC009BD546 /* PathConstraintData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PathConstraintData.h; sourceTree = ""; }; - BB6017511FD928AC009BD546 /* Updatable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Updatable.h; sourceTree = ""; }; - BB6017521FD928AC009BD546 /* TransformConstraintData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TransformConstraintData.h; sourceTree = ""; }; - BB6017531FD928AC009BD546 /* Extension.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Extension.h; sourceTree = ""; }; - BB6017541FD928AC009BD546 /* BlendMode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BlendMode.h; sourceTree = ""; }; - BB6017551FD928AC009BD546 /* PathConstraint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PathConstraint.h; sourceTree = ""; }; - BB6017561FD928AC009BD546 /* PathConstraintSpacingTimeline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PathConstraintSpacingTimeline.h; sourceTree = ""; }; - BB6017571FD928AC009BD546 /* ScaleTimeline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScaleTimeline.h; sourceTree = ""; }; - BB6017581FD928AC009BD546 /* IkConstraint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IkConstraint.h; sourceTree = ""; }; - BB6017591FD928AC009BD546 /* BoundingBoxAttachment.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BoundingBoxAttachment.h; sourceTree = ""; }; - BB60175A1FD928AC009BD546 /* MathUtil.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MathUtil.h; sourceTree = ""; }; - BB60175B1FD928AC009BD546 /* Vector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Vector.h; sourceTree = ""; }; - BB60175C1FD928AC009BD546 /* SkeletonBounds.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SkeletonBounds.h; sourceTree = ""; }; - BB60175D1FD928AC009BD546 /* Timeline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Timeline.h; sourceTree = ""; }; - BB60175E1FD928AC009BD546 /* Slot.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Slot.h; sourceTree = ""; }; - BB60175F1FD928AC009BD546 /* BoneData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BoneData.h; sourceTree = ""; }; - BB6017601FD928AC009BD546 /* TranslateTimeline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TranslateTimeline.h; sourceTree = ""; }; - BB6017611FD928AC009BD546 /* AnimationState.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AnimationState.h; sourceTree = ""; }; - BB6017621FD928AC009BD546 /* MeshAttachment.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MeshAttachment.h; sourceTree = ""; }; - BB6017631FD928AC009BD546 /* AtlasAttachmentLoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AtlasAttachmentLoader.h; sourceTree = ""; }; - BB6017641FD928AC009BD546 /* EventTimeline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EventTimeline.h; sourceTree = ""; }; - BB6017671FD928AC009BD546 /* Attachment.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Attachment.cpp; sourceTree = ""; }; - BB6017681FD928AC009BD546 /* Skeleton.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Skeleton.cpp; sourceTree = ""; }; - BB6017691FD928AC009BD546 /* TranslateTimeline.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TranslateTimeline.cpp; sourceTree = ""; }; - BB60176A1FD928AC009BD546 /* Extension.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Extension.cpp; sourceTree = ""; }; - BB60176B1FD928AC009BD546 /* Updatable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Updatable.cpp; sourceTree = ""; }; - BB60176C1FD928AC009BD546 /* Bone.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Bone.cpp; sourceTree = ""; }; - BB60176D1FD928AC009BD546 /* AtlasAttachmentLoader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AtlasAttachmentLoader.cpp; sourceTree = ""; }; - BB60176E1FD928AC009BD546 /* EventTimeline.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = EventTimeline.cpp; sourceTree = ""; }; - BB60176F1FD928AC009BD546 /* PathConstraint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PathConstraint.cpp; sourceTree = ""; }; - BB6017701FD928AC009BD546 /* VertexAttachment.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = VertexAttachment.cpp; sourceTree = ""; }; - BB6017711FD928AC009BD546 /* TextureLoader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TextureLoader.cpp; sourceTree = ""; }; - BB6017721FD928AC009BD546 /* SkeletonData.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SkeletonData.cpp; sourceTree = ""; }; - BB6017731FD928AC009BD546 /* TransformConstraintTimeline.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TransformConstraintTimeline.cpp; sourceTree = ""; }; - BB6017741FD928AC009BD546 /* IkConstraint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IkConstraint.cpp; sourceTree = ""; }; - BB6017751FD928AC009BD546 /* CurveTimeline.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CurveTimeline.cpp; sourceTree = ""; }; - BB6017761FD928AC009BD546 /* AnimationStateData.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AnimationStateData.cpp; sourceTree = ""; }; - BB6017771FD928AC009BD546 /* Constraint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Constraint.cpp; sourceTree = ""; }; - BB6017781FD928AC009BD546 /* BoundingBoxAttachment.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = BoundingBoxAttachment.cpp; sourceTree = ""; }; - BB6017791FD928AC009BD546 /* PathAttachment.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PathAttachment.cpp; sourceTree = ""; }; - BB60177A1FD928AC009BD546 /* MeshAttachment.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MeshAttachment.cpp; sourceTree = ""; }; - BB60177B1FD928AC009BD546 /* TransformConstraint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TransformConstraint.cpp; sourceTree = ""; }; - BB60177C1FD928AC009BD546 /* Skin.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Skin.cpp; sourceTree = ""; }; - BB60177D1FD928AC009BD546 /* RTTI.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RTTI.cpp; sourceTree = ""; }; - BB60177E1FD928AC009BD546 /* MathUtil.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MathUtil.cpp; sourceTree = ""; }; - BB60177F1FD928AC009BD546 /* IkConstraintData.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IkConstraintData.cpp; sourceTree = ""; }; - BB6017801FD928AC009BD546 /* Atlas.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Atlas.cpp; sourceTree = ""; }; - BB6017811FD928AC009BD546 /* ClippingAttachment.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ClippingAttachment.cpp; sourceTree = ""; }; - BB6017821FD928AC009BD546 /* PathConstraintData.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PathConstraintData.cpp; sourceTree = ""; }; - BB6017831FD928AC009BD546 /* Timeline.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Timeline.cpp; sourceTree = ""; }; - BB6017841FD928AC009BD546 /* SkeletonBinary.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SkeletonBinary.cpp; sourceTree = ""; }; - BB6017851FD928AC009BD546 /* ScaleTimeline.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ScaleTimeline.cpp; sourceTree = ""; }; - BB6017861FD928AC009BD546 /* LinkedMesh.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = LinkedMesh.cpp; sourceTree = ""; }; - BB6017871FD928AC009BD546 /* PointAttachment.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PointAttachment.cpp; sourceTree = ""; }; - BB6017881FD928AC009BD546 /* RegionAttachment.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RegionAttachment.cpp; sourceTree = ""; }; - BB6017891FD928AC009BD546 /* DeformTimeline.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DeformTimeline.cpp; sourceTree = ""; }; - BB60178A1FD928AC009BD546 /* Animation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Animation.cpp; sourceTree = ""; }; - BB60178B1FD928AC009BD546 /* AttachmentLoader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AttachmentLoader.cpp; sourceTree = ""; }; - BB60178C1FD928AC009BD546 /* DrawOrderTimeline.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DrawOrderTimeline.cpp; sourceTree = ""; }; - BB60178D1FD928AC009BD546 /* AttachmentTimeline.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AttachmentTimeline.cpp; sourceTree = ""; }; - BB60178E1FD928AC009BD546 /* EventData.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = EventData.cpp; sourceTree = ""; }; - BB60178F1FD928AC009BD546 /* PathConstraintSpacingTimeline.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PathConstraintSpacingTimeline.cpp; sourceTree = ""; }; - BB6017901FD928AC009BD546 /* PathConstraintPositionTimeline.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PathConstraintPositionTimeline.cpp; sourceTree = ""; }; - BB6017911FD928AC009BD546 /* TransformConstraintData.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TransformConstraintData.cpp; sourceTree = ""; }; - BB6017921FD928AC009BD546 /* SkeletonClipping.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SkeletonClipping.cpp; sourceTree = ""; }; - BB6017931FD928AC009BD546 /* TwoColorTimeline.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TwoColorTimeline.cpp; sourceTree = ""; }; - BB6017941FD928AC009BD546 /* Slot.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Slot.cpp; sourceTree = ""; }; - BB6017951FD928AC009BD546 /* AnimationState.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AnimationState.cpp; sourceTree = ""; }; - BB6017961FD928AC009BD546 /* SkeletonJson.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SkeletonJson.cpp; sourceTree = ""; }; - BB6017971FD928AC009BD546 /* BoneData.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = BoneData.cpp; sourceTree = ""; }; - BB6017981FD928AC009BD546 /* IkConstraintTimeline.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IkConstraintTimeline.cpp; sourceTree = ""; }; - BB6017991FD928AC009BD546 /* Event.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Event.cpp; sourceTree = ""; }; - BB60179A1FD928AC009BD546 /* RotateTimeline.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RotateTimeline.cpp; sourceTree = ""; }; - BB60179B1FD928AC009BD546 /* PathConstraintMixTimeline.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PathConstraintMixTimeline.cpp; sourceTree = ""; }; - BB60179C1FD928AC009BD546 /* Triangulator.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Triangulator.cpp; sourceTree = ""; }; - BB60179D1FD928AC009BD546 /* Json.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Json.cpp; sourceTree = ""; }; - BB60179E1FD928AC009BD546 /* SkeletonBounds.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SkeletonBounds.cpp; sourceTree = ""; }; - BB60179F1FD928AC009BD546 /* SlotData.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SlotData.cpp; sourceTree = ""; }; - BB6017A01FD928AC009BD546 /* ShearTimeline.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ShearTimeline.cpp; sourceTree = ""; }; - BB6017A11FD928AC009BD546 /* ColorTimeline.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ColorTimeline.cpp; sourceTree = ""; }; - BB6017DE1FD928F6009BD546 /* KMemory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KMemory.h; sourceTree = ""; }; - BB6017DF1FD928F6009BD546 /* KString.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KString.h; sourceTree = ""; }; - BB6017E01FD928F6009BD546 /* KMemory.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = KMemory.cpp; sourceTree = ""; }; - BB6017E11FD928F6009BD546 /* KString.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = KString.cpp; sourceTree = ""; }; - BB6017E51FD929D0009BD546 /* MiniCppUnit.hxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = MiniCppUnit.hxx; sourceTree = ""; }; - BB6017E61FD929D0009BD546 /* MiniCppUnit.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MiniCppUnit.cxx; sourceTree = ""; }; - BB6017E91FD929F4009BD546 /* teamcity_cppunit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = teamcity_cppunit.h; sourceTree = ""; }; - BB6017EA1FD929F4009BD546 /* teamcity_cppunit.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = teamcity_cppunit.cpp; sourceTree = ""; }; - BB6017EB1FD929F4009BD546 /* teamcity_messages.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = teamcity_messages.h; sourceTree = ""; }; - BB6017EC1FD929F4009BD546 /* README.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.txt; sourceTree = ""; }; - BB6017ED1FD929F4009BD546 /* teamcity_messages.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = teamcity_messages.cpp; sourceTree = ""; }; - BB6017F01FD92A5B009BD546 /* SimpleTest.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SimpleTest.h; sourceTree = ""; }; - BB6017FC1FD92AF3009BD546 /* SpineEventMonitor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SpineEventMonitor.h; sourceTree = ""; }; - BB6017FD1FD92AF3009BD546 /* SpineEventMonitor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SpineEventMonitor.cpp; sourceTree = ""; }; - BBFB507F1FDAF6CD005B22B6 /* MemoryTest.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MemoryTest.h; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - BB60170C1FD9289A009BD546 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - BB6017061FD9289A009BD546 = { - isa = PBXGroup; - children = ( - BB4E385C1FD9C87600709FF2 /* goblins-pro.json */, - BB4E385D1FD9C87700709FF2 /* goblins.atlas */, - BB4E38591FD9C86400709FF2 /* raptor-pro.json */, - BB4E38581FD9C86400709FF2 /* raptor.atlas */, - BB4E38541FD9C85600709FF2 /* spineboy-ess.json */, - BB4E38551FD9C85600709FF2 /* spineboy.atlas */, - BB6017F11FD92AF3009BD546 /* tests */, - BB6017E81FD929F4009BD546 /* teamcity */, - BB6017E41FD929D0009BD546 /* minicppunit */, - BB6017DD1FD928F6009BD546 /* memory */, - BB6017191FD928AC009BD546 /* spine-cpp */, - BB6017111FD9289A009BD546 /* spine_unit_test */, - BB6017101FD9289A009BD546 /* Products */, - ); - sourceTree = ""; - }; - BB6017101FD9289A009BD546 /* Products */ = { - isa = PBXGroup; - children = ( - BB60170F1FD9289A009BD546 /* spine_unit_test */, - ); - name = Products; - sourceTree = ""; - }; - BB6017111FD9289A009BD546 /* spine_unit_test */ = { - isa = PBXGroup; - children = ( - BB6017121FD9289A009BD546 /* main.cpp */, - BB6017F01FD92A5B009BD546 /* SimpleTest.h */, - BBFB507F1FDAF6CD005B22B6 /* MemoryTest.h */, - ); - path = spine_unit_test; - sourceTree = ""; - }; - BB6017191FD928AC009BD546 /* spine-cpp */ = { - isa = PBXGroup; - children = ( - BB60171A1FD928AC009BD546 /* include */, - BB6017651FD928AC009BD546 /* src */, - ); - name = "spine-cpp"; - path = "../../spine-cpp"; - sourceTree = ""; - }; - BB60171A1FD928AC009BD546 /* include */ = { - isa = PBXGroup; - children = ( - BB60171B1FD928AC009BD546 /* spine */, - ); - path = include; - sourceTree = ""; - }; - BB60171B1FD928AC009BD546 /* spine */ = { - isa = PBXGroup; - children = ( - BB60171D1FD928AC009BD546 /* Animation.h */, - BB6017611FD928AC009BD546 /* AnimationState.h */, - BB6017401FD928AC009BD546 /* AnimationStateData.h */, - BB60172D1FD928AC009BD546 /* Atlas.h */, - BB6017631FD928AC009BD546 /* AtlasAttachmentLoader.h */, - BB6017391FD928AC009BD546 /* Attachment.h */, - BB60174A1FD928AC009BD546 /* AttachmentLoader.h */, - BB60174C1FD928AC009BD546 /* AttachmentTimeline.h */, - BB6017321FD928AC009BD546 /* AttachmentType.h */, - BB6017541FD928AC009BD546 /* BlendMode.h */, - BB60172C1FD928AC009BD546 /* Bone.h */, - BB60175F1FD928AC009BD546 /* BoneData.h */, - BB6017591FD928AC009BD546 /* BoundingBoxAttachment.h */, - BB6017341FD928AC009BD546 /* ClippingAttachment.h */, - BB6017431FD928AC009BD546 /* ColorTimeline.h */, - BB6017461FD928AC009BD546 /* Constraint.h */, - BB60174F1FD928AC009BD546 /* ContainerUtil.h */, - BB6017291FD928AC009BD546 /* CurveTimeline.h */, - BB60171C1FD928AC009BD546 /* DeformTimeline.h */, - BB60172E1FD928AC009BD546 /* DrawOrderTimeline.h */, - BB60172B1FD928AC009BD546 /* Event.h */, - BB60171E1FD928AC009BD546 /* EventData.h */, - BB6017641FD928AC009BD546 /* EventTimeline.h */, - BB6017531FD928AC009BD546 /* Extension.h */, - BB60173A1FD928AC009BD546 /* HashMap.h */, - BB6017581FD928AC009BD546 /* IkConstraint.h */, - BB60173E1FD928AC009BD546 /* IkConstraintData.h */, - BB6017301FD928AC009BD546 /* IkConstraintTimeline.h */, - BB6017491FD928AC009BD546 /* Json.h */, - BB6017471FD928AC009BD546 /* LinkedMesh.h */, - BB60175A1FD928AC009BD546 /* MathUtil.h */, - BB6017621FD928AC009BD546 /* MeshAttachment.h */, - BB6017281FD928AC009BD546 /* MixDirection.h */, - BB60173F1FD928AC009BD546 /* MixPose.h */, - BB6017271FD928AC009BD546 /* PathAttachment.h */, - BB6017551FD928AC009BD546 /* PathConstraint.h */, - BB6017501FD928AC009BD546 /* PathConstraintData.h */, - BB6017201FD928AC009BD546 /* PathConstraintMixTimeline.h */, - BB6017351FD928AC009BD546 /* PathConstraintPositionTimeline.h */, - BB6017561FD928AC009BD546 /* PathConstraintSpacingTimeline.h */, - BB60172A1FD928AC009BD546 /* PointAttachment.h */, - BB6017221FD928AC009BD546 /* Pool.h */, - BB6017251FD928AC009BD546 /* PositionMode.h */, - BB6017381FD928AC009BD546 /* RegionAttachment.h */, - BB6017331FD928AC009BD546 /* RotateMode.h */, - BB6017361FD928AC009BD546 /* RotateTimeline.h */, - BB6017261FD928AC009BD546 /* RTTI.h */, - BB6017571FD928AC009BD546 /* ScaleTimeline.h */, - BB6017481FD928AC009BD546 /* ShearTimeline.h */, - BB6017421FD928AC009BD546 /* Skeleton.h */, - BB60174D1FD928AC009BD546 /* SkeletonBinary.h */, - BB60175C1FD928AC009BD546 /* SkeletonBounds.h */, - BB6017211FD928AC009BD546 /* SkeletonClipping.h */, - BB60174E1FD928AC009BD546 /* SkeletonData.h */, - BB60173D1FD928AC009BD546 /* SkeletonJson.h */, - BB60174B1FD928AC009BD546 /* Skin.h */, - BB60175E1FD928AC009BD546 /* Slot.h */, - BB60171F1FD928AC009BD546 /* SlotData.h */, - BB6017441FD928AC009BD546 /* SpacingMode.h */, - BB6017241FD928AC009BD546 /* TextureLoader.h */, - BB60175D1FD928AC009BD546 /* Timeline.h */, - BB6017231FD928AC009BD546 /* TimelineType.h */, - BB60173B1FD928AC009BD546 /* TransformConstraint.h */, - BB6017521FD928AC009BD546 /* TransformConstraintData.h */, - BB60172F1FD928AC009BD546 /* TransformConstraintTimeline.h */, - BB60173C1FD928AC009BD546 /* TransformMode.h */, - BB6017601FD928AC009BD546 /* TranslateTimeline.h */, - BB6017371FD928AC009BD546 /* Triangulator.h */, - BB6017411FD928AC009BD546 /* TwoColorTimeline.h */, - BB6017511FD928AC009BD546 /* Updatable.h */, - BB60175B1FD928AC009BD546 /* Vector.h */, - BB6017311FD928AC009BD546 /* VertexAttachment.h */, - BB6017451FD928AC009BD546 /* Vertices.h */, - ); - path = spine; - sourceTree = ""; - }; - BB6017651FD928AC009BD546 /* src */ = { - isa = PBXGroup; - children = ( - BB6017661FD928AC009BD546 /* spine */, - ); - path = src; - sourceTree = ""; - }; - BB6017661FD928AC009BD546 /* spine */ = { - isa = PBXGroup; - children = ( - BB60178A1FD928AC009BD546 /* Animation.cpp */, - BB6017951FD928AC009BD546 /* AnimationState.cpp */, - BB6017761FD928AC009BD546 /* AnimationStateData.cpp */, - BB6017801FD928AC009BD546 /* Atlas.cpp */, - BB60176D1FD928AC009BD546 /* AtlasAttachmentLoader.cpp */, - BB6017671FD928AC009BD546 /* Attachment.cpp */, - BB60178B1FD928AC009BD546 /* AttachmentLoader.cpp */, - BB60178D1FD928AC009BD546 /* AttachmentTimeline.cpp */, - BB60176C1FD928AC009BD546 /* Bone.cpp */, - BB6017971FD928AC009BD546 /* BoneData.cpp */, - BB6017781FD928AC009BD546 /* BoundingBoxAttachment.cpp */, - BB6017811FD928AC009BD546 /* ClippingAttachment.cpp */, - BB6017A11FD928AC009BD546 /* ColorTimeline.cpp */, - BB6017771FD928AC009BD546 /* Constraint.cpp */, - BB6017751FD928AC009BD546 /* CurveTimeline.cpp */, - BB6017891FD928AC009BD546 /* DeformTimeline.cpp */, - BB60178C1FD928AC009BD546 /* DrawOrderTimeline.cpp */, - BB6017991FD928AC009BD546 /* Event.cpp */, - BB60178E1FD928AC009BD546 /* EventData.cpp */, - BB60176E1FD928AC009BD546 /* EventTimeline.cpp */, - BB60176A1FD928AC009BD546 /* Extension.cpp */, - BB6017741FD928AC009BD546 /* IkConstraint.cpp */, - BB60177F1FD928AC009BD546 /* IkConstraintData.cpp */, - BB6017981FD928AC009BD546 /* IkConstraintTimeline.cpp */, - BB60179D1FD928AC009BD546 /* Json.cpp */, - BB6017861FD928AC009BD546 /* LinkedMesh.cpp */, - BB60177E1FD928AC009BD546 /* MathUtil.cpp */, - BB60177A1FD928AC009BD546 /* MeshAttachment.cpp */, - BB6017791FD928AC009BD546 /* PathAttachment.cpp */, - BB60176F1FD928AC009BD546 /* PathConstraint.cpp */, - BB6017821FD928AC009BD546 /* PathConstraintData.cpp */, - BB60179B1FD928AC009BD546 /* PathConstraintMixTimeline.cpp */, - BB6017901FD928AC009BD546 /* PathConstraintPositionTimeline.cpp */, - BB60178F1FD928AC009BD546 /* PathConstraintSpacingTimeline.cpp */, - BB6017871FD928AC009BD546 /* PointAttachment.cpp */, - BB6017881FD928AC009BD546 /* RegionAttachment.cpp */, - BB60179A1FD928AC009BD546 /* RotateTimeline.cpp */, - BB60177D1FD928AC009BD546 /* RTTI.cpp */, - BB6017851FD928AC009BD546 /* ScaleTimeline.cpp */, - BB6017A01FD928AC009BD546 /* ShearTimeline.cpp */, - BB6017681FD928AC009BD546 /* Skeleton.cpp */, - BB6017841FD928AC009BD546 /* SkeletonBinary.cpp */, - BB60179E1FD928AC009BD546 /* SkeletonBounds.cpp */, - BB6017921FD928AC009BD546 /* SkeletonClipping.cpp */, - BB6017721FD928AC009BD546 /* SkeletonData.cpp */, - BB6017961FD928AC009BD546 /* SkeletonJson.cpp */, - BB60177C1FD928AC009BD546 /* Skin.cpp */, - BB6017941FD928AC009BD546 /* Slot.cpp */, - BB60179F1FD928AC009BD546 /* SlotData.cpp */, - BB6017711FD928AC009BD546 /* TextureLoader.cpp */, - BB6017831FD928AC009BD546 /* Timeline.cpp */, - BB60177B1FD928AC009BD546 /* TransformConstraint.cpp */, - BB6017911FD928AC009BD546 /* TransformConstraintData.cpp */, - BB6017731FD928AC009BD546 /* TransformConstraintTimeline.cpp */, - BB6017691FD928AC009BD546 /* TranslateTimeline.cpp */, - BB60179C1FD928AC009BD546 /* Triangulator.cpp */, - BB6017931FD928AC009BD546 /* TwoColorTimeline.cpp */, - BB60176B1FD928AC009BD546 /* Updatable.cpp */, - BB6017701FD928AC009BD546 /* VertexAttachment.cpp */, - ); - path = spine; - sourceTree = ""; - }; - BB6017DD1FD928F6009BD546 /* memory */ = { - isa = PBXGroup; - children = ( - BB6017DE1FD928F6009BD546 /* KMemory.h */, - BB6017DF1FD928F6009BD546 /* KString.h */, - BB6017E01FD928F6009BD546 /* KMemory.cpp */, - BB6017E11FD928F6009BD546 /* KString.cpp */, - ); - name = memory; - path = ../memory; - sourceTree = ""; - }; - BB6017E41FD929D0009BD546 /* minicppunit */ = { - isa = PBXGroup; - children = ( - BB6017E51FD929D0009BD546 /* MiniCppUnit.hxx */, - BB6017E61FD929D0009BD546 /* MiniCppUnit.cxx */, - ); - name = minicppunit; - path = ../minicppunit; - sourceTree = ""; - }; - BB6017E81FD929F4009BD546 /* teamcity */ = { - isa = PBXGroup; - children = ( - BB6017E91FD929F4009BD546 /* teamcity_cppunit.h */, - BB6017EA1FD929F4009BD546 /* teamcity_cppunit.cpp */, - BB6017EB1FD929F4009BD546 /* teamcity_messages.h */, - BB6017EC1FD929F4009BD546 /* README.txt */, - BB6017ED1FD929F4009BD546 /* teamcity_messages.cpp */, - ); - name = teamcity; - path = ../teamcity; - sourceTree = ""; - }; - BB6017F11FD92AF3009BD546 /* tests */ = { - isa = PBXGroup; - children = ( - BB6017FC1FD92AF3009BD546 /* SpineEventMonitor.h */, - BB6017FD1FD92AF3009BD546 /* SpineEventMonitor.cpp */, - ); - name = tests; - path = ../tests; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - BB60170E1FD9289A009BD546 /* spine_unit_test */ = { - isa = PBXNativeTarget; - buildConfigurationList = BB6017161FD9289A009BD546 /* Build configuration list for PBXNativeTarget "spine_unit_test" */; - buildPhases = ( - BB60170B1FD9289A009BD546 /* Sources */, - BB60170C1FD9289A009BD546 /* Frameworks */, - BB60170D1FD9289A009BD546 /* CopyFiles */, - BB4E38471FD9C72600709FF2 /* CopyFiles */, - BB4E384A1FD9C79D00709FF2 /* CopyFiles */, - BB4E384B1FD9C79E00709FF2 /* CopyFiles */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = spine_unit_test; - productName = spine_unit_test; - productReference = BB60170F1FD9289A009BD546 /* spine_unit_test */; - productType = "com.apple.product-type.tool"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - BB6017071FD9289A009BD546 /* Project object */ = { - isa = PBXProject; - attributes = { - LastUpgradeCheck = 0920; - ORGANIZATIONNAME = "Noctis Games"; - TargetAttributes = { - BB60170E1FD9289A009BD546 = { - CreatedOnToolsVersion = 9.2; - ProvisioningStyle = Automatic; - }; - }; - }; - buildConfigurationList = BB60170A1FD9289A009BD546 /* Build configuration list for PBXProject "spine_unit_test" */; - compatibilityVersion = "Xcode 8.0"; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - en, - ); - mainGroup = BB6017061FD9289A009BD546; - productRefGroup = BB6017101FD9289A009BD546 /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - BB60170E1FD9289A009BD546 /* spine_unit_test */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXSourcesBuildPhase section */ - BB60170B1FD9289A009BD546 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - BB6017CB1FD928AC009BD546 /* PathConstraintPositionTimeline.cpp in Sources */, - BB6017CD1FD928AC009BD546 /* SkeletonClipping.cpp in Sources */, - BB6017B51FD928AC009BD546 /* MeshAttachment.cpp in Sources */, - BB6017C01FD928AC009BD546 /* ScaleTimeline.cpp in Sources */, - BB6017D01FD928AC009BD546 /* AnimationState.cpp in Sources */, - BB6017A31FD928AC009BD546 /* Skeleton.cpp in Sources */, - BB6017BA1FD928AC009BD546 /* IkConstraintData.cpp in Sources */, - BB6017EE1FD929F4009BD546 /* teamcity_cppunit.cpp in Sources */, - BB6017CA1FD928AC009BD546 /* PathConstraintSpacingTimeline.cpp in Sources */, - BB6017C91FD928AC009BD546 /* EventData.cpp in Sources */, - BB6017B41FD928AC009BD546 /* PathAttachment.cpp in Sources */, - BB6017A91FD928AC009BD546 /* EventTimeline.cpp in Sources */, - BB6017A21FD928AC009BD546 /* Attachment.cpp in Sources */, - BB6017C81FD928AC009BD546 /* AttachmentTimeline.cpp in Sources */, - BB6017E21FD928F7009BD546 /* KMemory.cpp in Sources */, - BB6017E71FD929D0009BD546 /* MiniCppUnit.cxx in Sources */, - BB6017DA1FD928AC009BD546 /* SlotData.cpp in Sources */, - BB6017BE1FD928AC009BD546 /* Timeline.cpp in Sources */, - BB6017BF1FD928AC009BD546 /* SkeletonBinary.cpp in Sources */, - BB6017131FD9289A009BD546 /* main.cpp in Sources */, - BB6017B21FD928AC009BD546 /* Constraint.cpp in Sources */, - BB6017A41FD928AC009BD546 /* TranslateTimeline.cpp in Sources */, - BB6017A71FD928AC009BD546 /* Bone.cpp in Sources */, - BB6017DC1FD928AC009BD546 /* ColorTimeline.cpp in Sources */, - BB6017AE1FD928AC009BD546 /* TransformConstraintTimeline.cpp in Sources */, - BB6017BB1FD928AC009BD546 /* Atlas.cpp in Sources */, - BB6017C21FD928AC009BD546 /* PointAttachment.cpp in Sources */, - BB6017C11FD928AC009BD546 /* LinkedMesh.cpp in Sources */, - BB6017A61FD928AC009BD546 /* Updatable.cpp in Sources */, - BB6017DB1FD928AC009BD546 /* ShearTimeline.cpp in Sources */, - BB6017C31FD928AC009BD546 /* RegionAttachment.cpp in Sources */, - BB6017D71FD928AC009BD546 /* Triangulator.cpp in Sources */, - BB6017EF1FD929F4009BD546 /* teamcity_messages.cpp in Sources */, - BB6017D61FD928AC009BD546 /* PathConstraintMixTimeline.cpp in Sources */, - BB6017CC1FD928AC009BD546 /* TransformConstraintData.cpp in Sources */, - BB6017C71FD928AC009BD546 /* DrawOrderTimeline.cpp in Sources */, - BB6017B61FD928AC009BD546 /* TransformConstraint.cpp in Sources */, - BB6017BC1FD928AC009BD546 /* ClippingAttachment.cpp in Sources */, - BB6017B81FD928AC009BD546 /* RTTI.cpp in Sources */, - BB6017A51FD928AC009BD546 /* Extension.cpp in Sources */, - BB6017C41FD928AC009BD546 /* DeformTimeline.cpp in Sources */, - BB6017A81FD928AC009BD546 /* AtlasAttachmentLoader.cpp in Sources */, - BB6017AA1FD928AC009BD546 /* PathConstraint.cpp in Sources */, - BB6017B71FD928AC009BD546 /* Skin.cpp in Sources */, - BB6017D21FD928AC009BD546 /* BoneData.cpp in Sources */, - BB6017C61FD928AC009BD546 /* AttachmentLoader.cpp in Sources */, - BB6017CF1FD928AC009BD546 /* Slot.cpp in Sources */, - BB6017B91FD928AC009BD546 /* MathUtil.cpp in Sources */, - BB6017B11FD928AC009BD546 /* AnimationStateData.cpp in Sources */, - BB6018081FD92AF4009BD546 /* SpineEventMonitor.cpp in Sources */, - BB6017E31FD928F7009BD546 /* KString.cpp in Sources */, - BB6017D41FD928AC009BD546 /* Event.cpp in Sources */, - BB6017D81FD928AC009BD546 /* Json.cpp in Sources */, - BB6017CE1FD928AC009BD546 /* TwoColorTimeline.cpp in Sources */, - BB6017AD1FD928AC009BD546 /* SkeletonData.cpp in Sources */, - BB6017D11FD928AC009BD546 /* SkeletonJson.cpp in Sources */, - BB6017D31FD928AC009BD546 /* IkConstraintTimeline.cpp in Sources */, - BB6017AF1FD928AC009BD546 /* IkConstraint.cpp in Sources */, - BB6017AC1FD928AC009BD546 /* TextureLoader.cpp in Sources */, - BB6017C51FD928AC009BD546 /* Animation.cpp in Sources */, - BB6017B01FD928AC009BD546 /* CurveTimeline.cpp in Sources */, - BB6017BD1FD928AC009BD546 /* PathConstraintData.cpp in Sources */, - BB6017D91FD928AC009BD546 /* SkeletonBounds.cpp in Sources */, - BB6017B31FD928AC009BD546 /* BoundingBoxAttachment.cpp in Sources */, - BB6017D51FD928AC009BD546 /* RotateTimeline.cpp in Sources */, - BB6017AB1FD928AC009BD546 /* VertexAttachment.cpp in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin XCBuildConfiguration section */ - BB6017141FD9289A009BD546 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_IDENTITY = "-"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.13; - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = macosx; - }; - name = Debug; - }; - BB6017151FD9289A009BD546 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGN_IDENTITY = "-"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.13; - MTL_ENABLE_DEBUG_INFO = NO; - SDKROOT = macosx; - }; - name = Release; - }; - BB6017171FD9289A009BD546 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - CODE_SIGN_STYLE = Automatic; - HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../spine-cpp/include\""; - OTHER_LDFLAGS = "-DKANJI_MEMTRACE"; - PRODUCT_NAME = "$(TARGET_NAME)"; - }; - name = Debug; - }; - BB6017181FD9289A009BD546 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - CODE_SIGN_STYLE = Automatic; - HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../spine-cpp/include\""; - OTHER_LDFLAGS = "-DKANJI_MEMTRACE"; - PRODUCT_NAME = "$(TARGET_NAME)"; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - BB60170A1FD9289A009BD546 /* Build configuration list for PBXProject "spine_unit_test" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - BB6017141FD9289A009BD546 /* Debug */, - BB6017151FD9289A009BD546 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - BB6017161FD9289A009BD546 /* Build configuration list for PBXNativeTarget "spine_unit_test" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - BB6017171FD9289A009BD546 /* Debug */, - BB6017181FD9289A009BD546 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = BB6017071FD9289A009BD546 /* Project object */; -} diff --git a/spine-cpp/spine-cpp-unit-tests/spine_unit_test/spine_unit_test.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/spine-cpp/spine-cpp-unit-tests/spine_unit_test/spine_unit_test.xcodeproj/project.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index af455f762..000000000 --- a/spine-cpp/spine-cpp-unit-tests/spine_unit_test/spine_unit_test.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/spine-cpp/spine-cpp-unit-tests/src/TestHarness.cpp b/spine-cpp/spine-cpp-unit-tests/src/TestHarness.cpp new file mode 100644 index 000000000..03e0d2ba3 --- /dev/null +++ b/spine-cpp/spine-cpp-unit-tests/src/TestHarness.cpp @@ -0,0 +1,84 @@ +/****************************************************************************** + * Spine Runtimes Software License v2.5 + * + * Copyright (c) 2013-2016, Esoteric Software + * All rights reserved. + * + * You are granted a perpetual, non-exclusive, non-sublicensable, and + * non-transferable license to use, install, execute, and perform the Spine + * Runtimes software and derivative works solely for personal or internal + * use. Without the written permission of Esoteric Software (see Section 2 of + * the Spine Software License Agreement), you may not (a) modify, translate, + * adapt, or develop new applications using the Spine Runtimes or otherwise + * create derivative works or improvements of the Spine Runtimes or (b) remove, + * delete, alter, or obscure any trademarks or any copyright, trademark, patent, + * or other intellectual property or proprietary rights notices on or in the + * Software, including any copy thereof. Redistributions in binary or source + * form must include this license and terms. + * + * THIS SOFTWARE IS PROVIDED BY ESOTERIC SOFTWARE "AS IS" AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO + * EVENT SHALL ESOTERIC SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, BUSINESS INTERRUPTION, OR LOSS OF + * USE, DATA, OR PROFITS) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER + * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + *****************************************************************************/ + + +#include "TestHarness.h" + +void *Spine::TestSpineExtension::_alloc(size_t size, const char *file, int line) { + void* result = DefaultSpineExtension::_alloc(size, file, line); + allocated.push_back(Allocation(result, size, file, line)); + return result; +} + +void *Spine::TestSpineExtension::_calloc(size_t size, const char *file, int line) { + void* result = DefaultSpineExtension::_calloc(size, file, line); + allocated.push_back(Allocation(result, size, file, line)); + return result; +} + +void *Spine::TestSpineExtension::_realloc(void *ptr, size_t size, const char *file, int line) { + void* result = DefaultSpineExtension::_realloc(ptr, size, file, line); + + for (std::vector::iterator it = allocated.begin(); it != allocated.end(); it++) { + if (it->address == ptr) { + it->address = result; + it->size = size; + it->fileName = file; + it->line = line; + return result; + } + } + + allocated.push_back(Allocation(result, size, file, line)); + return result; +} + +void Spine::TestSpineExtension::_free(void *mem, const char *file, int line) { + DefaultSpineExtension::_free(mem, file, line); + + for (std::vector::iterator it = allocated.begin(); it != allocated.end(); it++) { + if (it->address == mem) { + allocated.erase(it); + return; + } + } + + printf("%s:%i (address %p): Double free or not allocatedö through SpineExtension", file, line, mem); +} + +void Spine::TestSpineExtension::reportLeaks() { + for (std::vector::iterator it = allocated.begin(); it != allocated.end(); it++) { + printf("\"%s:%i (%zu bytes at %p)\n", it->fileName, it->line, it->size, it->address); + } +} + +void Spine::TestSpineExtension::clearAllocations() { + allocated.resize(0); +} diff --git a/spine-cpp/spine-cpp-unit-tests/src/TestHarness.h b/spine-cpp/spine-cpp-unit-tests/src/TestHarness.h new file mode 100644 index 000000000..ee40045ed --- /dev/null +++ b/spine-cpp/spine-cpp-unit-tests/src/TestHarness.h @@ -0,0 +1,72 @@ +/****************************************************************************** + * Spine Runtimes Software License v2.5 + * + * Copyright (c) 2013-2016, Esoteric Software + * All rights reserved. + * + * You are granted a perpetual, non-exclusive, non-sublicensable, and + * non-transferable license to use, install, execute, and perform the Spine + * Runtimes software and derivative works solely for personal or internal + * use. Without the written permission of Esoteric Software (see Section 2 of + * the Spine Software License Agreement), you may not (a) modify, translate, + * adapt, or develop new applications using the Spine Runtimes or otherwise + * create derivative works or improvements of the Spine Runtimes or (b) remove, + * delete, alter, or obscure any trademarks or any copyright, trademark, patent, + * or other intellectual property or proprietary rights notices on or in the + * Software, including any copy thereof. Redistributions in binary or source + * form must include this license and terms. + * + * THIS SOFTWARE IS PROVIDED BY ESOTERIC SOFTWARE "AS IS" AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO + * EVENT SHALL ESOTERIC SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, BUSINESS INTERRUPTION, OR LOSS OF + * USE, DATA, OR PROFITS) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER + * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + *****************************************************************************/ + + +#ifndef SPINE_TESTHARNESS_H +#define SPINE_TESTHARNESS_H + +#include +#include + +namespace Spine { + struct Allocation { + void* address; + size_t size; + const char* fileName; + int line; + + Allocation() : Allocation (0, 0, 0, 0) { + } + + Allocation(void* a, size_t s, const char* f, int l) : address(a), size(s), fileName(f), line(l) { + } + }; + + class TestSpineExtension: public DefaultSpineExtension { + public: + void reportLeaks (); + void clearAllocations(); + + protected: + virtual void* _alloc(size_t size, const char* file, int line); + + virtual void* _calloc(size_t size, const char* file, int line); + + virtual void* _realloc(void* ptr, size_t size, const char* file, int line); + + virtual void _free(void* mem, const char* file, int line); + + private: + std::vector allocated; + }; +} + + +#endif //SPINE_TESTHARNESS_H diff --git a/spine-cpp/spine-cpp-unit-tests/src/main.cpp b/spine-cpp/spine-cpp-unit-tests/src/main.cpp new file mode 100644 index 000000000..1221ad9e5 --- /dev/null +++ b/spine-cpp/spine-cpp-unit-tests/src/main.cpp @@ -0,0 +1,51 @@ +/****************************************************************************** + * Spine Runtimes Software License v2.5 + * + * Copyright (c) 2013-2016, Esoteric Software + * All rights reserved. + * + * You are granted a perpetual, non-exclusive, non-sublicensable, and + * non-transferable license to use, install, execute, and perform the Spine + * Runtimes software and derivative works solely for personal or internal + * use. Without the written permission of Esoteric Software (see Section 2 of + * the Spine Software License Agreement), you may not (a) modify, translate, + * adapt, or develop new applications using the Spine Runtimes or otherwise + * create derivative works or improvements of the Spine Runtimes or (b) remove, + * delete, alter, or obscure any trademarks or any copyright, trademark, patent, + * or other intellectual property or proprietary rights notices on or in the + * Software, including any copy thereof. Redistributions in binary or source + * form must include this license and terms. + * + * THIS SOFTWARE IS PROVIDED BY ESOTERIC SOFTWARE "AS IS" AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO + * EVENT SHALL ESOTERIC SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, BUSINESS INTERRUPTION, OR LOSS OF + * USE, DATA, OR PROFITS) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER + * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + *****************************************************************************/ + +#include +#include + +#include "TestHarness.h" + +#define SPINEBOY_JSON "testdata/spineboy/spineboy-ess.json" +#define SPINEBOY_ATLAS "testdata/spineboy/spineboy.atlas" + +using namespace Spine; + +int main (int argc, char** argv) { + TestSpineExtension* ext = new TestSpineExtension(); + SpineExtension::setInstance(ext); + + Atlas* atlas = new (__FILE__, __LINE__) Atlas(SPINEBOY_ATLAS, 0); + + + delete atlas; + + ext->reportLeaks(); +} \ No newline at end of file diff --git a/spine-cpp/spine-cpp-unit-tests/teamcity/README.txt b/spine-cpp/spine-cpp-unit-tests/teamcity/README.txt deleted file mode 100755 index 04f7914b9..000000000 --- a/spine-cpp/spine-cpp-unit-tests/teamcity/README.txt +++ /dev/null @@ -1,30 +0,0 @@ -CppUnit listener for TeamCity ------------------------------ - -To report your tests result to TeamCity server -include teamcity_messages.* teamcity_cppunit.* -to your project and modify "main" function -as shown in example.cpp -(around JetBrains::underTeamcity and JetBrains::TeamcityProgressListener) - -Technical details ------------------ - -Reporting implemented by writing TeamCity service messages to stdout. - -See -http://www.jetbrains.net/confluence/display/TCD3/Build+Script+Interaction+with+TeamCity -for more details. - -Contact information -------------------- - -Mail to teamcity-feedback@jetbrains.com or see other options at - -http://www.jetbrains.com/support/teamcity - -License -------- - -Apache, version 2.0 -http://www.apache.org/licenses/LICENSE-2.0 diff --git a/spine-cpp/spine-cpp-unit-tests/teamcity/teamcity_cppunit.cpp b/spine-cpp/spine-cpp-unit-tests/teamcity/teamcity_cppunit.cpp deleted file mode 100755 index 86f163b9c..000000000 --- a/spine-cpp/spine-cpp-unit-tests/teamcity/teamcity_cppunit.cpp +++ /dev/null @@ -1,82 +0,0 @@ -/* Copyright 2011 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * $Revision: 88625 $ -*/ - -#include - -#include "teamcity_cppunit.h" - -using namespace std; - -namespace JetBrains { - -TeamcityProgressListener::TeamcityProgressListener() -{ - flowid = getFlowIdFromEnvironment(); -} - -TeamcityProgressListener::TeamcityProgressListener(const std::string& _flowid) -{ - flowid = _flowid; -} - -void TeamcityProgressListener::startTest(const std::string& test) { - messages.testStarted(test, flowid); -} - -static string sourceLine2string(const SourceLine &sline) { - stringstream ss; - - ss << sline.fileName << ":" << sline.lineNumber; - - return ss.str(); -} - -void TeamcityProgressListener::addFailure(const TestFailure &failure) -{ - - string details = failure.details; - - if (failure.sourceLine.isValid()) { - details.append(" at "); - details.append(sourceLine2string(failure.sourceLine)); - details.append("\n"); - } - - messages.testFailed( - failure.testName, - failure.description, - details, - flowid - ); -} - -void TeamcityProgressListener::endTest(const std::string& test) -{ - messages.testFinished(test, -1, flowid); -} - -void TeamcityProgressListener::startSuite(const std::string& test) -{ - messages.suiteStarted(test, flowid); -} - -void TeamcityProgressListener::endSuite(const std::string& test) -{ - messages.suiteFinished(test, flowid); -} - -} diff --git a/spine-cpp/spine-cpp-unit-tests/teamcity/teamcity_cppunit.h b/spine-cpp/spine-cpp-unit-tests/teamcity/teamcity_cppunit.h deleted file mode 100755 index 7541a5186..000000000 --- a/spine-cpp/spine-cpp-unit-tests/teamcity/teamcity_cppunit.h +++ /dev/null @@ -1,83 +0,0 @@ -/* Copyright 2011 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * $Revision: 88625 $ -*/ - -#pragma once - -#include - -#include "teamcity_messages.h" - -namespace JetBrains { - - class SourceLine - { - public: - SourceLine():lineNumber(-1){} - SourceLine(const std::string& theFile, int theLineNum):fileName(theFile),lineNumber(theLineNum){} - ~SourceLine(){} - - std::string fileName; - int lineNumber; - bool isValid() const {return (!fileName.empty() && lineNumber > -1);} - }; - - class TestFailure - { - public: - std::string details; - SourceLine sourceLine; - std::string testName; - std::string description; - public: - TestFailure(){} - ~TestFailure(){} - - TestFailure(const std::string& theTestName, const std::string& theDetails, SourceLine theSourcelLine, const std::string& theDescription) - { - testName = theTestName; - details = theDetails; - sourceLine = theSourcelLine; - description = theDescription; - } - }; - - class TeamcityProgressListener - { - public: - TeamcityMessages messages; - public: - TeamcityProgressListener(const std::string& _flowid); - TeamcityProgressListener(); - ~TeamcityProgressListener(){} - - void startTest(const std::string& test); - void addFailure(const TestFailure &failure); - void endTest(const std::string& test); - void startSuite(const std::string& test); - void endSuite(const std::string& test); - - private: - std::string flowid; - - // Prevents the use of the copy constructor. - TeamcityProgressListener(const TeamcityProgressListener ©); - - // Prevents the use of the copy operator. - void operator =(const TeamcityProgressListener ©); - }; - -} \ No newline at end of file diff --git a/spine-cpp/spine-cpp-unit-tests/teamcity/teamcity_messages.cpp b/spine-cpp/spine-cpp-unit-tests/teamcity/teamcity_messages.cpp deleted file mode 100755 index 6f88d1ee9..000000000 --- a/spine-cpp/spine-cpp-unit-tests/teamcity/teamcity_messages.cpp +++ /dev/null @@ -1,174 +0,0 @@ -/* Copyright 2011 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * $Revision: 88625 $ -*/ - -#include -#include - -#include "teamcity_messages.h" - -using namespace std; - -namespace JetBrains { - -std::string getFlowIdFromEnvironment() { - const char *flowId = getenv("TEAMCITY_PROCESS_FLOW_ID"); - return flowId == NULL ? "" : flowId; -} - -bool underTeamcity() { - return getenv("TEAMCITY_PROJECT_NAME") != NULL; -} - -TeamcityMessages::TeamcityMessages() -: m_out(&cout) -{} - -void TeamcityMessages::setOutput(ostream &out) { - m_out = &out; -} - -string TeamcityMessages::escape(string s) { - string result; - - for (size_t i = 0; i < s.length(); i++) { - char c = s[i]; - - switch (c) { - case '\n': result.append("|n"); break; - case '\r': result.append("|r"); break; - case '\'': result.append("|'"); break; - case '|': result.append("||"); break; - case ']': result.append("|]"); break; - default: result.append(&c, 1); - } - } - - return result; -} - -void TeamcityMessages::openMsg(const string &name) { - // endl for http://jetbrains.net/tracker/issue/TW-4412 - *m_out << endl << "##teamcity[" << name; -} - -void TeamcityMessages::closeMsg() { - *m_out << "]"; - // endl for http://jetbrains.net/tracker/issue/TW-4412 - *m_out << endl; - m_out->flush(); -} - -void TeamcityMessages::writeProperty(string name, string value) { - *m_out << " " << name << "='" << escape(value) << "'"; -} - -void TeamcityMessages::suiteStarted(string name, string flowid) { - openMsg("testSuiteStarted"); - writeProperty("name", name); - if(flowid.length() > 0) { - writeProperty("flowId", flowid); - } - - closeMsg(); -} - -void TeamcityMessages::suiteFinished(string name, string flowid) { - openMsg("testSuiteFinished"); - writeProperty("name", name); - if(flowid.length() > 0) { - writeProperty("flowId", flowid); - } - - closeMsg(); -} - -void TeamcityMessages::testStarted(string name, string flowid) { - openMsg("testStarted"); - writeProperty("name", name); - if(flowid.length() > 0) { - writeProperty("flowId", flowid); - } - - closeMsg(); -} - -void TeamcityMessages::testFinished(string name, int durationMs, string flowid) { - openMsg("testFinished"); - - writeProperty("name", name); - - if(flowid.length() > 0) { - writeProperty("flowId", flowid); - } - - if(durationMs >= 0) { - stringstream out; - out << durationMs; - writeProperty("duration", out.str()); - } - - closeMsg(); -} - -void TeamcityMessages::testFailed(string name, string message, string details, string flowid) { - openMsg("testFailed"); - writeProperty("name", name); - writeProperty("message", message); - writeProperty("details", details); - if(flowid.length() > 0) { - writeProperty("flowId", flowid); - } - - closeMsg(); -} - -void TeamcityMessages::testIgnored(std::string name, std::string message, string flowid) { - openMsg("testIgnored"); - writeProperty("name", name); - writeProperty("message", message); - if(flowid.length() > 0) { - writeProperty("flowId", flowid); - } - - closeMsg(); -} - -void TeamcityMessages::messageError(const std::string& text) -{ - openMsg("message"); - writeProperty("text", text); - writeProperty("status", "ERROR"); - closeMsg(); -} - -void TeamcityMessages::messageWarning(const std::string& text) -{ - openMsg("message"); - writeProperty("text", text); - writeProperty("status", "WARNING"); - closeMsg(); -} - -void TeamcityMessages::messageNormal(const std::string& text) -{ - openMsg("message"); - writeProperty("text", text); - writeProperty("status", "NORMAL"); - closeMsg(); -} - -} diff --git a/spine-cpp/spine-cpp-unit-tests/teamcity/teamcity_messages.h b/spine-cpp/spine-cpp-unit-tests/teamcity/teamcity_messages.h deleted file mode 100755 index 36ad80797..000000000 --- a/spine-cpp/spine-cpp-unit-tests/teamcity/teamcity_messages.h +++ /dev/null @@ -1,59 +0,0 @@ -/* Copyright 2011 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * $Revision: 88625 $ -*/ - -#ifndef H_TEAMCITY_MESSAGES -#define H_TEAMCITY_MESSAGES - -#include -#include - -namespace JetBrains { - -std::string getFlowIdFromEnvironment(); -bool underTeamcity(); - -class TeamcityMessages { - std::ostream *m_out; - -protected: - std::string escape(std::string s); - - void openMsg(const std::string &name); - void writeProperty(std::string name, std::string value); - void closeMsg(); - -public: - TeamcityMessages(); - - void setOutput(std::ostream &); - - void suiteStarted(std::string name, std::string flowid = ""); - void suiteFinished(std::string name, std::string flowid = ""); - - void testStarted(std::string name, std::string flowid = ""); - void testFailed(std::string name, std::string message, std::string details, std::string flowid = ""); - void testIgnored(std::string name, std::string message, std::string flowid = ""); - void testFinished(std::string name, int durationMs = -1, std::string flowid = ""); - - void messageError(const std::string& text); - void messageWarning(const std::string& text); - void messageNormal(const std::string& text); -}; - -} - -#endif /* H_TEAMCITY_MESSAGES */ diff --git a/spine-cpp/spine-cpp-unit-tests/tests/CPP_InterfaceTestFixture.cpp b/spine-cpp/spine-cpp-unit-tests/tests/CPP_InterfaceTestFixture.cpp deleted file mode 100755 index dde75c363..000000000 --- a/spine-cpp/spine-cpp-unit-tests/tests/CPP_InterfaceTestFixture.cpp +++ /dev/null @@ -1,48 +0,0 @@ -////////////////////////////////////////////////////////////////////// -// filename: C_InterfaceTestFixture.cpp -// -// notes: There is no C++ interface! -// -///////////////////////////////////////////////////////////////////// - -#include "CPP_InterfaceTestFixture.h" - -CPP_InterfaceTestFixture::~CPP_InterfaceTestFixture() -{ - finalize(); -} - -void CPP_InterfaceTestFixture::initialize() -{ - // on a Per- Fixture Basis, before Test execution -} - -void CPP_InterfaceTestFixture::finalize() -{ - // on a Per- Fixture Basis, after all tests pass/fail -} - -void CPP_InterfaceTestFixture::setUp() -{ - // Setup on Per-Test Basis -} - -void CPP_InterfaceTestFixture::tearDown() -{ - // Tear Down on Per-Test Basis -} - -void CPP_InterfaceTestFixture::spineboyTestCase() -{ - // There is no C++ interface. -} - -void CPP_InterfaceTestFixture::raptorTestCase() -{ - // There is no C++ interface. -} - -void CPP_InterfaceTestFixture::goblinsTestCase() -{ - // No c++ interface -} diff --git a/spine-cpp/spine-cpp-unit-tests/tests/CPP_InterfaceTestFixture.h b/spine-cpp/spine-cpp-unit-tests/tests/CPP_InterfaceTestFixture.h deleted file mode 100755 index 8dc5fed36..000000000 --- a/spine-cpp/spine-cpp-unit-tests/tests/CPP_InterfaceTestFixture.h +++ /dev/null @@ -1,47 +0,0 @@ -#pragma once -////////////////////////////////////////////////////////////////////// -// filename: C_InterfaceTestFixture.h -// -// purpose: Run example animations for regression testing -// on "C++" interface to make sure modifications to "C" -// interface doesn't cause memory leaks or regression -// errors. -///////////////////////////////////////////////////////////////////// - -#include "MiniCppUnit.hxx" -#include "TestOptions.h" - -class CPP_InterfaceTestFixture : public TestFixture < CPP_InterfaceTestFixture > -{ -public: - TEST_FIXTURE(CPP_InterfaceTestFixture){ - TEST_CASE(spineboyTestCase); - TEST_CASE(raptorTestCase); - TEST_CASE(goblinsTestCase); - - initialize(); - } - - virtual ~CPP_InterfaceTestFixture(); - - ////////////////////////////////////////////////////////////////////////// - // Test Cases - ////////////////////////////////////////////////////////////////////////// -public: - void spineboyTestCase(); - void raptorTestCase(); - void goblinsTestCase(); - - ////////////////////////////////////////////////////////////////////////// - // test fixture setup - ////////////////////////////////////////////////////////////////////////// - void initialize(); - void finalize(); -public: - virtual void setUp(); - virtual void tearDown(); - -}; -#if defined(gForceAllTests) || defined(gCPPInterfaceTestFixture) -REGISTER_FIXTURE(CPP_InterfaceTestFixture); -#endif diff --git a/spine-cpp/spine-cpp-unit-tests/tests/C_InterfaceTestFixture.cpp b/spine-cpp/spine-cpp-unit-tests/tests/C_InterfaceTestFixture.cpp deleted file mode 100755 index b6576bb7f..000000000 --- a/spine-cpp/spine-cpp-unit-tests/tests/C_InterfaceTestFixture.cpp +++ /dev/null @@ -1,175 +0,0 @@ -#include "C_InterfaceTestFixture.h" -#include "SpineEventMonitor.h" - -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include - -#include -#include -#include - -#include -#include -#include - -#include - -#include "KMemory.h" // last include - -#define SPINEBOY_JSON "testdata/spineboy/spineboy-ess.json" -#define SPINEBOY_ATLAS "testdata/spineboy/spineboy.atlas" - -#define RAPTOR_JSON "testdata/raptor/raptor-pro.json" -#define RAPTOR_ATLAS "testdata/raptor/raptor.atlas" - -#define GOBLINS_JSON "testdata/goblins/goblins-pro.json" -#define GOBLINS_ATLAS "testdata/goblins/goblins.atlas" - -#define MAX_RUN_TIME 6000 // equal to about 100 seconds of execution - -void C_InterfaceTestFixture::setUp() -{ -} - -void C_InterfaceTestFixture::tearDown() -{ -} - -static Spine::SkeletonData* readSkeletonJsonData(const char* filename, Atlas* atlas) -{ - using namespace Spine; - - Vector atlasArray; - atlasArray.push_back(atlas); - - SkeletonJson* skeletonJson = NEW(SkeletonJson); - new (skeletonJson) SkeletonJson(atlasArray); - ASSERT(skeletonJson != 0); - - SkeletonData* skeletonData = skeletonJson->readSkeletonDataFile(filename); - ASSERT(skeletonData != 0); - - DESTROY(SkeletonJson, skeletonJson); - - return skeletonData; -} - -typedef std::vector AnimList; - -static size_t enumerateAnimations(AnimList& outList, SkeletonData* skeletonData) -{ - if (skeletonData) - { - for (int n = 0; n < skeletonData->getAnimations().size(); n++) - { - outList.push_back(skeletonData->getAnimations()[n]->getName()); - } - } - - return outList.size(); -} - -class MyTextureLoader : public TextureLoader -{ - virtual void load(AtlasPage& page, std::string path) - { - page.rendererObject = NULL; - page.width = 2048; - page.height = 2048; - } - - virtual void unload(void* texture) - { - // TODO - } -}; - -static void testRunner(const char* jsonName, const char* atlasName) -{ - /////////////////////////////////////////////////////////////////////////// - // Global Animation Information - MyTextureLoader myTextureLoader; - Atlas* atlas = NEW(Atlas); - new (atlas) Atlas(atlasName, myTextureLoader); - ASSERT(atlas != 0); - - SkeletonData* skeletonData = readSkeletonJsonData(jsonName, atlas); - ASSERT(skeletonData != 0); - - AnimationStateData* stateData = NEW(AnimationStateData); - new (stateData) AnimationStateData(skeletonData); - ASSERT(stateData != 0); - stateData->setDefaultMix(0.2f); // force mixing - - /////////////////////////////////////////////////////////////////////////// - // Animation Instance - Skeleton* skeleton = NEW(Skeleton); - new (skeleton) Skeleton(skeletonData); - ASSERT(skeleton != 0); - - AnimationState* state = NEW(AnimationState); - new (state) AnimationState(stateData); - ASSERT(state != 0); - - /////////////////////////////////////////////////////////////////////////// - // Run animation - skeleton->setToSetupPose(); - SpineEventMonitor eventMonitor(state); - - AnimList anims; // Let's chain all the animations together as a test - size_t count = enumerateAnimations(anims, skeletonData); - if (count > 0) - { - state->setAnimation(0, anims[0].c_str(), false); - } - - for (size_t i = 1; i < count; ++i) - { - state->addAnimation(0, anims[i].c_str(), false, 0.0f); - } - - // Run Loop - for (int i = 0; i < MAX_RUN_TIME && eventMonitor.isAnimationPlaying(); ++i) - { - const float timeSlice = 1.0f / 60.0f; - skeleton->update(timeSlice); - state->update(timeSlice); - state->apply(*skeleton); - } - - /////////////////////////////////////////////////////////////////////////// - // Dispose Instance - DESTROY(Skeleton, skeleton); - DESTROY(AnimationState, state); - - /////////////////////////////////////////////////////////////////////////// - // Dispose Global - DESTROY(AnimationStateData, stateData); - DESTROY(SkeletonData, skeletonData); - DESTROY(Atlas, atlas); -} - -void C_InterfaceTestFixture::spineboyTestCase() -{ - testRunner(SPINEBOY_JSON, SPINEBOY_ATLAS); -} - -void C_InterfaceTestFixture::raptorTestCase() -{ - testRunner(RAPTOR_JSON, RAPTOR_ATLAS); -} - -void C_InterfaceTestFixture::goblinsTestCase() -{ - testRunner(GOBLINS_JSON, GOBLINS_ATLAS); -} diff --git a/spine-cpp/spine-cpp-unit-tests/tests/C_InterfaceTestFixture.h b/spine-cpp/spine-cpp-unit-tests/tests/C_InterfaceTestFixture.h deleted file mode 100755 index 2f30d2bea..000000000 --- a/spine-cpp/spine-cpp-unit-tests/tests/C_InterfaceTestFixture.h +++ /dev/null @@ -1,33 +0,0 @@ -#pragma once -////////////////////////////////////////////////////////////////////// -// filename: C_InterfaceTestFixture.h -// -// purpose: Run example animations for regression testing -// on "C" interface -///////////////////////////////////////////////////////////////////// - -#include "TestOptions.h" -#include "MiniCppUnit.hxx" - -class C_InterfaceTestFixture : public TestFixture -{ -public: - TEST_FIXTURE(C_InterfaceTestFixture) - { - // enable/disable individual tests here - TEST_CASE(spineboyTestCase); - TEST_CASE(raptorTestCase); - TEST_CASE(goblinsTestCase); - } - -public: - virtual void setUp(); - virtual void tearDown(); - - void spineboyTestCase(); - void raptorTestCase(); - void goblinsTestCase(); -}; -#if defined(gForceAllTests) || defined(gCInterfaceTestFixture) -REGISTER_FIXTURE(C_InterfaceTestFixture); -#endif \ No newline at end of file diff --git a/spine-cpp/spine-cpp-unit-tests/tests/EmptyTestFixture.cpp b/spine-cpp/spine-cpp-unit-tests/tests/EmptyTestFixture.cpp deleted file mode 100755 index d2260b7d5..000000000 --- a/spine-cpp/spine-cpp-unit-tests/tests/EmptyTestFixture.cpp +++ /dev/null @@ -1,25 +0,0 @@ -#include "EmptyTestFixture.h" - -#include "KMemory.h" // Last include - - -void EmptyTestFixture::setUp() -{ -} - -void EmptyTestFixture::tearDown() -{ -} - -void EmptyTestFixture::emptyTestCase_1() -{ - // char* pLeak = new char[256]; // test leak detector -} - -void EmptyTestFixture::emptyTestCase_2() -{ -} - -void EmptyTestFixture::emptyTestCase_3() -{ -} diff --git a/spine-cpp/spine-cpp-unit-tests/tests/EmptyTestFixture.h b/spine-cpp/spine-cpp-unit-tests/tests/EmptyTestFixture.h deleted file mode 100755 index c11cfd5f2..000000000 --- a/spine-cpp/spine-cpp-unit-tests/tests/EmptyTestFixture.h +++ /dev/null @@ -1,26 +0,0 @@ -#pragma once -#include "TestOptions.h" -#include "MiniCppUnit.hxx" - -class EmptyTestFixture : public TestFixture -{ -public: - TEST_FIXTURE(EmptyTestFixture) - { - // enable/disable individual tests here - TEST_CASE(emptyTestCase_1); - TEST_CASE(emptyTestCase_2); - TEST_CASE(emptyTestCase_3); - } - -public: - virtual void setUp(); - virtual void tearDown(); - - void emptyTestCase_1(); - void emptyTestCase_2(); - void emptyTestCase_3(); -}; -#if defined(gForceAllTests) || defined(gEmptyTestFixture) -REGISTER_FIXTURE(EmptyTestFixture); -#endif \ No newline at end of file diff --git a/spine-cpp/spine-cpp-unit-tests/tests/MemoryTest.h b/spine-cpp/spine-cpp-unit-tests/tests/MemoryTest.h deleted file mode 100644 index ed8705012..000000000 --- a/spine-cpp/spine-cpp-unit-tests/tests/MemoryTest.h +++ /dev/null @@ -1,444 +0,0 @@ -// -// MemoryTest.h -// spine_unit_test -// -// Created by Stephen Gowen on 12/8/17. -// Copyright © 2017 Noctis Games. All rights reserved. -// - -#ifndef MemoryTest_h -#define MemoryTest_h - -#include "SpineEventMonitor.h" - -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include - -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -#include "KMemory.h" // last include - -#define SPINEBOY_JSON "testdata/spineboy/spineboy-ess.json" -#define SPINEBOY_ATLAS "testdata/spineboy/spineboy.atlas" - -#define MAX_RUN_TIME 6000 // equal to about 100 seconds of execution - -namespace Spine -{ - class MemoryTest - { - public: - class MyTextureLoader : public TextureLoader - { - virtual void load(AtlasPage& page, std::string path) - { - page.rendererObject = NULL; - page.width = 2048; - page.height = 2048; - } - - virtual void unload(void* texture) - { - // TODO - } - }; - - ////////////////////////////////////////////////////////////////////////// - // Helper methods - static SkeletonData* readSkeletonJsonData(const char* filename, Atlas* atlas) - { - Vector atlasArray; - atlasArray.push_back(atlas); - - SkeletonJson* skeletonJson = NEW(SkeletonJson); - new (skeletonJson) SkeletonJson(atlasArray); - assert(skeletonJson != 0); - - SkeletonData* skeletonData = skeletonJson->readSkeletonDataFile(filename); - assert(skeletonData != 0); - - DESTROY(SkeletonJson, skeletonJson); - - return skeletonData; - } - - static void loadSpineboyExample(Atlas* &atlas, SkeletonData* &skeletonData, AnimationStateData* &stateData, Skeleton* &skeleton, AnimationState* &state) - { - /////////////////////////////////////////////////////////////////////////// - // Global Animation Information - static MyTextureLoader myTextureLoader; - atlas = NEW(Atlas); - new (atlas) Atlas(SPINEBOY_ATLAS, myTextureLoader); - assert(atlas != 0); - - skeletonData = readSkeletonJsonData(SPINEBOY_JSON, atlas); - assert(skeletonData != 0); - - stateData = NEW(AnimationStateData); - new (stateData) AnimationStateData(*skeletonData); - assert(stateData != 0); - stateData->setDefaultMix(0.2f); // force mixing - - /////////////////////////////////////////////////////////////////////////// - // Animation Instance - skeleton = NEW(Skeleton); - new (skeleton) Skeleton(*skeletonData); - assert(skeleton != 0); - - state = NEW(AnimationState); - new (state) AnimationState(*stateData); - assert(state != 0); - } - - static void disposeAll(Skeleton* skeleton, AnimationState* state, AnimationStateData* stateData, SkeletonData* skeletonData, Atlas* atlas) - { - /////////////////////////////////////////////////////////////////////////// - // Dispose Instance - DESTROY(Skeleton, skeleton); - DESTROY(AnimationState, state); - - /////////////////////////////////////////////////////////////////////////// - // Dispose Global - DESTROY(AnimationStateData, stateData); - DESTROY(SkeletonData, skeletonData); - DESTROY(Atlas, atlas); - } - - ////////////////////////////////////////////////////////////////////////// - // Reproduce Memory leak as described in Issue #776 - // https://github.com/EsotericSoftware/spine-runtimes/issues/776 - static void reproduceIssue_776() - { - Atlas* atlas = NULL; - SkeletonData* skeletonData = NULL; - AnimationStateData* stateData = NULL; - Skeleton* skeleton = NULL; - AnimationState* state = NULL; - - ////////////////////////////////////////////////////////////////////////// - // Initialize Animations - loadSpineboyExample(atlas, skeletonData, stateData, skeleton, state); - - /////////////////////////////////////////////////////////////////////////// - // Run animation - skeleton->setToSetupPose(); - InterruptMonitor eventMonitor(state); - - // Interrupt the animation on this specific sequence of spEventType(s) - eventMonitor - .AddInterruptEvent(EventType_Interrupt, "jump") - .AddInterruptEvent(EventType_Start); - - state->setAnimation(0, "walk", true); - state->addAnimation(0, "jump", false, 0.0f); - state->addAnimation(0, "run", true, 0.0f); - state->addAnimation(0, "jump", false, 3.0f); - state->addAnimation(0, "walk", true, 0.0f); - state->addAnimation(0, "idle", false, 1.0f); - - for (int i = 0; i < MAX_RUN_TIME && eventMonitor.isAnimationPlaying(); ++i) - { - const float timeSlice = 1.0f / 60.0f; - skeleton->update(timeSlice); - state->update(timeSlice); - state->apply(*skeleton); - } - - ////////////////////////////////////////////////////////////////////////// - // Cleanup Animations - disposeAll(skeleton, state, stateData, skeletonData, atlas); - } - - static void reproduceIssue_777() - { - Atlas* atlas = NULL; - SkeletonData* skeletonData = NULL; - AnimationStateData* stateData = NULL; - Skeleton* skeleton = NULL; - AnimationState* state = NULL; - - ////////////////////////////////////////////////////////////////////////// - // Initialize Animations - loadSpineboyExample(atlas, skeletonData, stateData, skeleton, state); - - /////////////////////////////////////////////////////////////////////////// - // Run animation - skeleton->setToSetupPose(); - SpineEventMonitor eventMonitor(state); - - // Set Animation and Play for 5 frames - state->setAnimation(0, "walk", true); - for (int i = 0; i < 5; ++i) - { - const float timeSlice = 1.0f / 60.0f; - skeleton->update(timeSlice); - state->update(timeSlice); - state->apply(*skeleton); - } - - // Change animation twice in a row - state->setAnimation(0, "walk", false); - state->setAnimation(0, "run", false); - - // run normal update - for (int i = 0; i < 5; ++i) - { - const float timeSlice = 1.0f / 60.0f; - skeleton->update(timeSlice); - state->update(timeSlice); - state->apply(*skeleton); - } - - // Now we'd lose mixingFrom (the first "walk" entry we set above) and should leak - state->setAnimation(0, "run", false); - - ////////////////////////////////////////////////////////////////////////// - // Cleanup Animations - disposeAll(skeleton, state, stateData, skeletonData, atlas); - } - - static void spineAnimStateHandler(AnimationState* state, EventType type, TrackEntry* entry, Event* event) - { - if (type == EventType_Complete) - { - state->setAnimation(0, "walk", false); - state->update(0); - state->apply(*skeleton); - } - } - - static void reproduceIssue_Loop() - { - Atlas* atlas = NULL; - SkeletonData* skeletonData = NULL; - AnimationStateData* stateData = NULL; - AnimationState* state = NULL; - - ////////////////////////////////////////////////////////////////////////// - // Initialize Animations - loadSpineboyExample(atlas, skeletonData, stateData, skeleton, state); - - /////////////////////////////////////////////////////////////////////////// - - if (state) - { - state->setOnAnimationEventFunc(spineAnimStateHandler); - } - - state->setAnimation(0, "walk", false); - - // run normal update - for (int i = 0; i < 50; ++i) - { - const float timeSlice = 1.0f / 60.0f; - skeleton->update(timeSlice); - state->update(timeSlice); - state->apply(*skeleton); - } - - disposeAll(skeleton, state, stateData, skeletonData, atlas); - } - - static void triangulator() - { - Triangulator* triangulator = NEW(Triangulator); - new (triangulator) Triangulator(); - - Vector polygon; - polygon.reserve(16); - polygon.push_back(0); - polygon.push_back(0); - polygon.push_back(100); - polygon.push_back(0); - polygon.push_back(100); - polygon.push_back(100); - polygon.push_back(0); - polygon.push_back(100); - - Vector triangles = triangulator->triangulate(polygon); - assert(triangles.size() == 6); - assert(triangles[0] == 3); - assert(triangles[1] == 0); - assert(triangles[2] == 1); - assert(triangles[3] == 3); - assert(triangles[4] == 1); - assert(triangles[5] == 2); - - Vector< Vector *> polys = triangulator->decompose(polygon, triangles); - assert(polys.size() == 1); - assert(polys[0]->size() == 8); - - assert(polys[0]->operator[](0) == 0); - assert(polys[0]->operator[](1) == 100); - assert(polys[0]->operator[](2) == 0); - assert(polys[0]->operator[](3) == 0); - assert(polys[0]->operator[](4) == 100); - assert(polys[0]->operator[](5) == 0); - assert(polys[0]->operator[](6) == 100); - assert(polys[0]->operator[](7) == 100); - - DESTROY(Triangulator, triangulator); - } - - static void skeletonClipper() - { - Atlas* atlas = NULL; - SkeletonData* skeletonData = NULL; - AnimationStateData* stateData = NULL; - Skeleton* skeleton = NULL; - AnimationState* state = NULL; - - ////////////////////////////////////////////////////////////////////////// - // Initialize Animations - loadSpineboyExample(atlas, skeletonData, stateData, skeleton, state); - - SkeletonClipping* clipping = NEW(SkeletonClipping); - new (clipping) SkeletonClipping(); - - BoneData* boneData = NEW(BoneData); - new (boneData) BoneData(0, "bone", 0); - - Bone* bone = NEW(Bone); - new(bone) Bone(*boneData, *skeleton, NULL); - - bone->setA(1); - bone->setB(0); - bone->setC(0); - bone->setD(1); - bone->setWorldX(0); - bone->setWorldY(0); - - SlotData* slotData = NEW(SlotData); - new (slotData) SlotData(0, "slot", *boneData); - - Slot* slot = NEW(Slot); - new(slot) Slot(*slotData, *bone); - - ClippingAttachment* clip = NEW(ClippingAttachment); - new(clip) ClippingAttachment("clipping"); - - clip->setEndSlot(slotData); - clip->setWorldVerticesLength(4 * 2); - - Vector clipVertices; - clipVertices.reserve(8); - clipVertices.setSize(8); - - clip->setVertices(clipVertices); - clip->getVertices()[0] = 0; - clip->getVertices()[1] = 50; - clip->getVertices()[2] = 100; - clip->getVertices()[3] = 50; - clip->getVertices()[4] = 100; - clip->getVertices()[5] = 70; - clip->getVertices()[6] = 0; - clip->getVertices()[7] = 70; - - clipping->clipStart(*slot, clip); - - Vector vertices; - vertices.reserve(16); - vertices.push_back(0); - vertices.push_back(0); - vertices.push_back(100); - vertices.push_back(0); - vertices.push_back(50); - vertices.push_back(150); - - Vector uvs; - uvs.reserve(16); - uvs.push_back(0); - uvs.push_back(0); - uvs.push_back(1); - uvs.push_back(0); - uvs.push_back(0.5f); - uvs.push_back(1); - - Vector indices; - indices.reserve(16); - indices.push_back(0); - indices.push_back(1); - indices.push_back(2); - - clipping->clipTriangles(vertices, static_cast(vertices.size()), indices, static_cast(indices.size()), uvs); - - float expectedVertices[8] = { 83.333328, 50.000000, 76.666664, 70.000000, 23.333334, 70.000000, 16.666672, 50.000000 }; - assert(clipping->getClippedVertices().size() == 8); - for (int i = 0; i < clipping->getClippedVertices().size(); i++) - { - assert(abs(clipping->getClippedVertices()[i] - expectedVertices[i]) < 0.001); - } - - float expectedUVs[8] = { 0.833333f, 0.333333, 0.766667, 0.466667, 0.233333, 0.466667, 0.166667, 0.333333 }; - assert(clipping->getClippedUVs().size() == 8); - for (int i = 0; i < clipping->getClippedUVs().size(); i++) - { - assert(abs(clipping->getClippedUVs()[i] - expectedUVs[i]) < 0.001); - } - - short expectedIndices[6] = { 0, 1, 2, 0, 2, 3 }; - assert(clipping->getClippedTriangles().size() == 6); - for (int i = 0; i < clipping->getClippedTriangles().size(); i++) - { - assert(clipping->getClippedTriangles()[i] == expectedIndices[i]); - } - - DESTROY(SlotData, slotData); - DESTROY(Slot, slot); - DESTROY(BoneData, boneData); - DESTROY(Bone, bone); - DESTROY(ClippingAttachment, clip); - DESTROY(SkeletonClipping, clipping); - - ////////////////////////////////////////////////////////////////////////// - // Cleanup Animations - disposeAll(skeleton, state, stateData, skeletonData, atlas); - } - - static void test() - { - reproduceIssue_776(); - reproduceIssue_777(); - reproduceIssue_Loop(); - triangulator(); - skeletonClipper(); - } - - private: - static Skeleton* skeleton; - - // ctor, copy ctor, and assignment should be private in a Singleton - MemoryTest(); - MemoryTest(const MemoryTest&); - MemoryTest& operator=(const MemoryTest&); - }; -} - -Skeleton* MemoryTest::skeleton = NULL; - -#endif /* MemoryTest_h */ diff --git a/spine-cpp/spine-cpp-unit-tests/tests/MemoryTestFixture.cpp b/spine-cpp/spine-cpp-unit-tests/tests/MemoryTestFixture.cpp deleted file mode 100755 index e69de29bb..000000000 diff --git a/spine-cpp/spine-cpp-unit-tests/tests/MemoryTestFixture.h b/spine-cpp/spine-cpp-unit-tests/tests/MemoryTestFixture.h deleted file mode 100755 index e69de29bb..000000000 diff --git a/spine-cpp/spine-cpp-unit-tests/tests/SimpleTest.h b/spine-cpp/spine-cpp-unit-tests/tests/SimpleTest.h deleted file mode 100644 index 5f09bba0d..000000000 --- a/spine-cpp/spine-cpp-unit-tests/tests/SimpleTest.h +++ /dev/null @@ -1,197 +0,0 @@ -// -// SimpleTest.h -// spine_unit_test -// -// Created by Stephen Gowen on 11/9/17. -// Copyright © 2017 Noctis Games. All rights reserved. -// - -#ifndef SimpleTest_h -#define SimpleTest_h - -#include "SpineEventMonitor.h" - -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include - -#include -#include -#include - -#include -#include -#include - -#include - -#include "KMemory.h" // last include - -#define SPINEBOY_JSON "testdata/spineboy/spineboy-ess.json" -#define SPINEBOY_ATLAS "testdata/spineboy/spineboy.atlas" - -#define RAPTOR_JSON "testdata/raptor/raptor-pro.json" -#define RAPTOR_ATLAS "testdata/raptor/raptor.atlas" - -#define GOBLINS_JSON "testdata/goblins/goblins-pro.json" -#define GOBLINS_ATLAS "testdata/goblins/goblins.atlas" - -#define MAX_RUN_TIME 6000 // equal to about 100 seconds of execution - -namespace Spine -{ - class SimpleTest - { - public: - static SkeletonData* readSkeletonJsonData(const char* filename, Atlas* atlas) - { - Vector atlasArray; - atlasArray.push_back(atlas); - - SkeletonJson* skeletonJson = NEW(SkeletonJson); - new (skeletonJson) SkeletonJson(atlasArray); - assert(skeletonJson != 0); - - SkeletonData* skeletonData = skeletonJson->readSkeletonDataFile(filename); - assert(skeletonData != 0); - - DESTROY(SkeletonJson, skeletonJson); - - return skeletonData; - } - - typedef std::vector AnimList; - - static size_t enumerateAnimations(AnimList& outList, SkeletonData* skeletonData) - { - if (skeletonData) - { - for (int n = 0; n < skeletonData->getAnimations().size(); n++) - { - outList.push_back(skeletonData->getAnimations()[n]->getName()); - } - } - - return outList.size(); - } - - class MyTextureLoader : public TextureLoader - { - virtual void load(AtlasPage& page, std::string path) - { - page.rendererObject = NULL; - page.width = 2048; - page.height = 2048; - } - - virtual void unload(void* texture) - { - // TODO - } - }; - - static void testRunner(const char* jsonName, const char* atlasName) - { - /////////////////////////////////////////////////////////////////////////// - // Global Animation Information - MyTextureLoader myTextureLoader; - Atlas* atlas = NEW(Atlas); - new (atlas) Atlas(atlasName, myTextureLoader); - assert(atlas != 0); - - SkeletonData* skeletonData = readSkeletonJsonData(jsonName, atlas); - assert(skeletonData != 0); - - AnimationStateData* stateData = NEW(AnimationStateData); - new (stateData) AnimationStateData(*skeletonData); - assert(stateData != 0); - stateData->setDefaultMix(0.2f); // force mixing - - /////////////////////////////////////////////////////////////////////////// - // Animation Instance - Skeleton* skeleton = NEW(Skeleton); - new (skeleton) Skeleton(*skeletonData); - assert(skeleton != 0); - - AnimationState* state = NEW(AnimationState); - new (state) AnimationState(*stateData); - assert(state != 0); - - /////////////////////////////////////////////////////////////////////////// - // Run animation - skeleton->setToSetupPose(); - SpineEventMonitor eventMonitor(state); - - AnimList anims; // Let's chain all the animations together as a test - size_t count = enumerateAnimations(anims, skeletonData); - if (count > 0) - { - state->setAnimation(0, anims[0].c_str(), false); - } - - for (size_t i = 1; i < count; ++i) - { - state->addAnimation(0, anims[i].c_str(), false, 0.0f); - } - - // Run Loop - for (int i = 0; i < MAX_RUN_TIME && eventMonitor.isAnimationPlaying(); ++i) - { - const float timeSlice = 1.0f / 60.0f; - skeleton->update(timeSlice); - state->update(timeSlice); - state->apply(*skeleton); - } - - /////////////////////////////////////////////////////////////////////////// - // Dispose Instance - DESTROY(Skeleton, skeleton); - DESTROY(AnimationState, state); - - /////////////////////////////////////////////////////////////////////////// - // Dispose Global - DESTROY(AnimationStateData, stateData); - DESTROY(SkeletonData, skeletonData); - DESTROY(Atlas, atlas); - } - - static void spineboyTestCase() - { - testRunner(SPINEBOY_JSON, SPINEBOY_ATLAS); - } - - static void raptorTestCase() - { - testRunner(RAPTOR_JSON, RAPTOR_ATLAS); - } - - static void goblinsTestCase() - { - testRunner(GOBLINS_JSON, GOBLINS_ATLAS); - } - - static void test() - { - spineboyTestCase(); - raptorTestCase(); - goblinsTestCase(); - } - - private: - // ctor, copy ctor, and assignment should be private in a Singleton - SimpleTest(); - SimpleTest(const SimpleTest&); - SimpleTest& operator=(const SimpleTest&); - }; -} - -#endif /* SimpleTest_h */ diff --git a/spine-cpp/spine-cpp-unit-tests/tests/SpineEventMonitor.cpp b/spine-cpp/spine-cpp-unit-tests/tests/SpineEventMonitor.cpp deleted file mode 100755 index 9506e354c..000000000 --- a/spine-cpp/spine-cpp-unit-tests/tests/SpineEventMonitor.cpp +++ /dev/null @@ -1,181 +0,0 @@ -#include "SpineEventMonitor.h" - -#include "KString.h" - -#include -#include - -#include "KMemory.h" // Last include - -using namespace Spine; - -SpineEventMonitor::SpineEventMonitor(AnimationState* _pAnimationState /*= nullptr*/) -{ - bLogging = false; - RegisterListener(_pAnimationState); -} - -SpineEventMonitor::~SpineEventMonitor() -{ - pAnimState = 0; -} - -void SpineEventMonitor::RegisterListener(AnimationState * _pAnimationState) -{ - if (_pAnimationState) - { - _pAnimationState->setRendererObject(this); - _pAnimationState->setOnAnimationEventFunc(&SpineEventMonitor::spineAnimStateHandler); - } - pAnimState = _pAnimationState; -} - -bool SpineEventMonitor::isAnimationPlaying() -{ - if (pAnimState) - { - return pAnimState->getCurrent(0) != NULL; - } - return false; -} - -void SpineEventMonitor::spineAnimStateHandler(AnimationState* state, EventType type, TrackEntry* entry, Event* event) -{ - if (state && state->getRendererObject()) - { - SpineEventMonitor* pEventMonitor = (SpineEventMonitor*)state->getRendererObject(); - pEventMonitor->OnSpineAnimationStateEvent(state, type, entry, event); - } -} - -void SpineEventMonitor::OnSpineAnimationStateEvent(AnimationState* state, EventType type, TrackEntry* entry, Event* event) -{ - const char* eventName = 0; - if (state == pAnimState) - { - // only monitor ours - switch(type) - { - case EventType_Start: eventName = "EventType_Start"; break; - case EventType_Interrupt: eventName = "EventType_Interrupt"; break; - case EventType_End: eventName = "EventType_End"; break; - case EventType_Complete: eventName = "EventType_Complete"; break; - case EventType_Dispose: eventName = "EventType_Dispose"; break; - case EventType_Event: eventName = "EventType_Event"; break; - default: - break; - } - - if (bLogging && eventName && entry && entry->getAnimation()) - KOutputDebug(DEBUGLVL, "[%s : '%s']\n", eventName, entry->getAnimation()->getName().c_str());//*/ - } -} - -InterruptMonitor::InterruptMonitor(AnimationState * _pAnimationState): - SpineEventMonitor(_pAnimationState) -{ - bForceInterrupt = false; - mEventStackCursor = 0; // cursor used to track events -} - -bool InterruptMonitor::isAnimationPlaying() -{ - return !bForceInterrupt && SpineEventMonitor::isAnimationPlaying(); -} - -// Stops the animation on any occurance of the spEventType -InterruptMonitor& InterruptMonitor::AddInterruptEvent(int theEventType) -{ - InterruptEvent ev; - ev.mEventType = theEventType; - mEventStack.push_back(ev); - return *this; -} - -// Stops the animation when the [spEventType : 'animationName'] occurs -InterruptMonitor& InterruptMonitor::AddInterruptEvent(int theEventType, const std::string & theAnimationName) -{ - InterruptEvent ev; - ev.mEventType = theEventType; - ev.mAnimName = theAnimationName; - mEventStack.push_back(ev); - return *this; -} - -// stops the first encounter of spEventType on the specified TrackEntry -InterruptMonitor& InterruptMonitor::AddInterruptEvent(int theEventType, TrackEntry * theTrackEntry) -{ - InterruptEvent ev; - ev.mEventType = theEventType; - ev.mTrackEntry = theTrackEntry; - mEventStack.push_back(ev); - return *this; -} - -// Stops on the first SP_ANIMATION_EVENT with the string payload of 'theEventTriggerName' -InterruptMonitor& InterruptMonitor::AddInterruptEventTrigger(const std::string & theEventTriggerName) -{ - InterruptEvent ev; - ev.mEventType = EventType_Event; - ev.mEventName = theEventTriggerName; - mEventStack.push_back(ev); - return *this; -} - -void InterruptMonitor::OnSpineAnimationStateEvent(AnimationState * state, EventType type, TrackEntry * trackEntry, Event * event) -{ - SpineEventMonitor::OnSpineAnimationStateEvent(state, type, trackEntry, event); - - if (mEventStackCursor < mEventStack.size()) - { - if (mEventStack[mEventStackCursor].matches(state, type, trackEntry, event)) - { - ++mEventStackCursor; - } - - if (mEventStackCursor >= mEventStack.size()) - { - bForceInterrupt = true; - OnMatchingComplete(); - } - } -} - -inline bool InterruptMonitor::InterruptEvent::matches(AnimationState * state, EventType type, TrackEntry * trackEntry, Event * event) -{ - // Must match EventType {EventType_Start, EventType_Interrupt, EventType_End, EventType_Complete, EventType_Dispose, EventType_Event } - if (mEventType == type) - { - // Looking for specific TrackEntry by pointer - if (mTrackEntry != 0) - { - return mTrackEntry == trackEntry; - } - - // looking for Animation Track by name - if (!mAnimName.empty()) - { - if (trackEntry && trackEntry->getAnimation()) - { - if (CompareNoCase(trackEntry->getAnimation()->getName(), mAnimName) == 0) - { - return true; - } - } - return false; - } - - // looking for Event String Text - if (!mEventName.empty()) - { - if (event) - { - return (CompareNoCase(event->getStringValue(), mEventName) == 0); - } - return false; - } - - return true; // waiting for ANY spEventType that matches - } - return false; -} diff --git a/spine-cpp/spine-cpp-unit-tests/tests/SpineEventMonitor.h b/spine-cpp/spine-cpp-unit-tests/tests/SpineEventMonitor.h deleted file mode 100755 index 4590a1e6e..000000000 --- a/spine-cpp/spine-cpp-unit-tests/tests/SpineEventMonitor.h +++ /dev/null @@ -1,121 +0,0 @@ -////////////////////////////////////////////////////////////////////// -// filename: SpineEventMonitor.h -// -// purpose: Monitor spAnimationState Events -///////////////////////////////////////////////////////////////////// - -#pragma once - -#include -#include - -#include - -using namespace Spine; - -////////////////////////////////////////////////////////////////////// -// class: SpineEventMonitor -// -// purpose: Monitor spAnimationState Events and report when there -// are no more TrackEntry(s) waiting to play on track 0; -// -// Also allows for debug printing of Events to console. -///////////////////////////////////////////////////////////////////// -class SpineEventMonitor -{ -public: - SpineEventMonitor(AnimationState* _pAnimationState = 0); - virtual ~SpineEventMonitor(); - - void RegisterListener(AnimationState* _pAnimationState); - - void SetDebugLogging(bool val) { bLogging = val; } - bool GetDebugLogging() { return bLogging; } - - virtual bool isAnimationPlaying(); - -protected: - static void spineAnimStateHandler(AnimationState* state, EventType type, TrackEntry* entry, Event* event); - virtual void OnSpineAnimationStateEvent(AnimationState* state, EventType type, TrackEntry* entry, Event* event); - -protected: - AnimationState *pAnimState; - bool bLogging; -}; - -////////////////////////////////////////////////////////////////////// -// class: InterruptMonitor -// -// purpose: Allows a programmer to interrupt/stop the updating -// of an animation based on a specific sequence of -// events generated by the animation. -///////////////////////////////////////////////////////////////////// -class InterruptMonitor : public SpineEventMonitor -{ -private: - struct InterruptEvent - { - InterruptEvent() { - mEventType = -1; // invalid - mTrackEntry = 0; - } - - bool matches(AnimationState* state, EventType type, TrackEntry* trackEntry, Event* event); - - std::string mAnimName; - int mEventType; - TrackEntry* mTrackEntry; - std::string mEventName; - }; - typedef std::vector InterruptEventStack; - - -public: - InterruptMonitor(AnimationState* _pAnimationState = 0); - ~InterruptMonitor() {} - - virtual bool isAnimationPlaying() override; - -public: - InterruptMonitor& AddInterruptEvent(int theEventType); - InterruptMonitor& AddInterruptEvent(int theEventType, const std::string& theAnimationName); - InterruptMonitor& AddInterruptEvent(int theEventType, TrackEntry* theTrackEntry); - InterruptMonitor& AddInterruptEventTrigger(const std::string& theEventTriggerName); - -protected: - virtual void OnSpineAnimationStateEvent(AnimationState* state, EventType type, TrackEntry* trackEntry, Event* event) override; - virtual void OnMatchingComplete() {} - -protected: - bool bForceInterrupt; - InterruptEventStack mEventStack; // must match these events in this order - size_t mEventStackCursor; -}; - -/* - -EXAMPLE -======= - -SpineEventMonitor eventMonitor(state); -eventMonitor.SetDebugLogging(true); - -while(eventMonitor.isAnimationPlaying()){ - // update... -} - - - -EXAMPLE -======= - -InterruptMonitor eventMonitor(state); -eventMonitor.SetDebugLogging(true); - -// Interrupt the animation on this specific sequence of spEventType(s) -eventMonitor - .AddInterruptEvent(SP_ANIMATION_INTERRUPT, "jump") // First, wait for INTERRUPT signal on the 'jump' animation TrackEntry - .AddInterruptEvent(SP_ANIMATION_START); // Then, stop on any following START signal - - -*/ diff --git a/spine-cpp/spine-cpp-unit-tests/tests/TestFixtureGenerator/CPP_InterfaceTestFixture.cpp b/spine-cpp/spine-cpp-unit-tests/tests/TestFixtureGenerator/CPP_InterfaceTestFixture.cpp deleted file mode 100755 index 9c2a964a9..000000000 --- a/spine-cpp/spine-cpp-unit-tests/tests/TestFixtureGenerator/CPP_InterfaceTestFixture.cpp +++ /dev/null @@ -1,26 +0,0 @@ -#include "CPP_InterfaceTestFixture.h" - -CPP_InterfaceTestFixture::~CPP_InterfaceTestFixture() -{ - finalize(); -} - -void CPP_InterfaceTestFixture::initialize() -{ - // on a Per- Fixture Basis, before Test execution -} - -void CPP_InterfaceTestFixture::finalize() -{ - // on a Per- Fixture Basis, after all tests pass/fail -} - -void CPP_InterfaceTestFixture::setUp() -{ - // Setup on Per-Test Basis -} - -void CPP_InterfaceTestFixture::tearDown() -{ - // Tear Down on Per-Test Basis -} diff --git a/spine-cpp/spine-cpp-unit-tests/tests/TestFixtureGenerator/CPP_InterfaceTestFixture.h b/spine-cpp/spine-cpp-unit-tests/tests/TestFixtureGenerator/CPP_InterfaceTestFixture.h deleted file mode 100755 index 5fcb99c79..000000000 --- a/spine-cpp/spine-cpp-unit-tests/tests/TestFixtureGenerator/CPP_InterfaceTestFixture.h +++ /dev/null @@ -1,30 +0,0 @@ -#pragma once -#include "MiniCppUnit.hxx" - -class CPP_InterfaceTestFixture : public TestFixture < CPP_InterfaceTestFixture > -{ -public: - TEST_FIXTURE(CPP_InterfaceTestFixture){ - //TEST_CASE(parseJSON); - - initialize(); - } - - virtual ~CPP_InterfaceTestFixture(); - - ////////////////////////////////////////////////////////////////////////// - // Test Cases - ////////////////////////////////////////////////////////////////////////// -public: - // void parseJSON(); - - ////////////////////////////////////////////////////////////////////////// - // test fixture setup - ////////////////////////////////////////////////////////////////////////// - void initialize(); - void finalize(); -public: - virtual void setUp(); - virtual void tearDown(); -}; -REGISTER_FIXTURE(CPP_InterfaceTestFixture); \ No newline at end of file diff --git a/spine-cpp/spine-cpp-unit-tests/tests/TestFixtureGenerator/_TestFixture.cpp b/spine-cpp/spine-cpp-unit-tests/tests/TestFixtureGenerator/_TestFixture.cpp deleted file mode 100755 index 67780f31a..000000000 --- a/spine-cpp/spine-cpp-unit-tests/tests/TestFixtureGenerator/_TestFixture.cpp +++ /dev/null @@ -1,26 +0,0 @@ -#include "[[FIXTURE_TYPE]].h" - -[[FIXTURE_TYPE]]::~[[FIXTURE_TYPE]]() -{ - finalize(); -} - -void [[FIXTURE_TYPE]]::initialize() -{ - // on a Per- Fixture Basis, before Test execution -} - -void [[FIXTURE_TYPE]]::finalize() -{ - // on a Per- Fixture Basis, after all tests pass/fail -} - -void [[FIXTURE_TYPE]]::setUp() -{ - // Setup on Per-Test Basis -} - -void [[FIXTURE_TYPE]]::tearDown() -{ - // Tear Down on Per-Test Basis -} diff --git a/spine-cpp/spine-cpp-unit-tests/tests/TestFixtureGenerator/_TestFixture.h b/spine-cpp/spine-cpp-unit-tests/tests/TestFixtureGenerator/_TestFixture.h deleted file mode 100755 index 3103cda85..000000000 --- a/spine-cpp/spine-cpp-unit-tests/tests/TestFixtureGenerator/_TestFixture.h +++ /dev/null @@ -1,30 +0,0 @@ -#pragma once -#include "MiniCppUnit.hxx" - -class [[FIXTURE_TYPE]] : public TestFixture < [[FIXTURE_TYPE]] > -{ -public: - TEST_FIXTURE([[FIXTURE_TYPE]]){ - //TEST_CASE(parseJSON); - - initialize(); - } - - virtual ~[[FIXTURE_TYPE]](); - - ////////////////////////////////////////////////////////////////////////// - // Test Cases - ////////////////////////////////////////////////////////////////////////// -public: - // void parseJSON(); - - ////////////////////////////////////////////////////////////////////////// - // test fixture setup - ////////////////////////////////////////////////////////////////////////// - void initialize(); - void finalize(); -public: - virtual void setUp(); - virtual void tearDown(); -}; -REGISTER_FIXTURE([[FIXTURE_TYPE]]); \ No newline at end of file diff --git a/spine-cpp/spine-cpp-unit-tests/tests/TestFixtureGenerator/fnr.exe b/spine-cpp/spine-cpp-unit-tests/tests/TestFixtureGenerator/fnr.exe deleted file mode 100755 index 548fc5d91..000000000 Binary files a/spine-cpp/spine-cpp-unit-tests/tests/TestFixtureGenerator/fnr.exe and /dev/null differ diff --git a/spine-cpp/spine-cpp-unit-tests/tests/TestFixtureGenerator/makeFixture.bat b/spine-cpp/spine-cpp-unit-tests/tests/TestFixtureGenerator/makeFixture.bat deleted file mode 100755 index 634154a29..000000000 --- a/spine-cpp/spine-cpp-unit-tests/tests/TestFixtureGenerator/makeFixture.bat +++ /dev/null @@ -1,17 +0,0 @@ -@echo off -if "%1"=="" goto blank - -copy "_TestFixture.cpp" "%1TestFixture.cpp" -copy "_TestFixture.h" "%1TestFixture.h" - - -fnr --cl --find "[[FIXTURE_TYPE]]" --replace "%1TestFixture" --fileMask "%1TestFixture.cpp" --dir %cd% -fnr --cl --find "[[FIXTURE_TYPE]]" --replace "%1TestFixture" --fileMask "%1TestFixture.h" --dir %cd% - -goto done - -:blank -echo Usage: -echo %~n0 FixtureTypeName - -:done \ No newline at end of file diff --git a/spine-cpp/spine-cpp-unit-tests/tests/TestOptions.h b/spine-cpp/spine-cpp-unit-tests/tests/TestOptions.h deleted file mode 100755 index 7f00ffbb7..000000000 --- a/spine-cpp/spine-cpp-unit-tests/tests/TestOptions.h +++ /dev/null @@ -1,32 +0,0 @@ -#pragma once - -////////////////////////////////////////////////////////////////////////// -// Force all Tests to 'ON.' Use this for final 'Regression' Testing. - -//#define gForceAllTests - -//#define TURN_ON_ALL_TESTS // Comment this line out to switch to fast testing only - -#ifdef TURN_ON_ALL_TESTS -////////////////////////////////////////////////////////////////////////// -// All tests are ON by default, but you can turn off individual tests. - -#define gEmptyTestFixture -#define gCInterfaceTestFixture -#define gCPPInterfaceTestFixture -#define gMemoryTestFixture - - -#else - -////////////////////////////////////////////////////////////////////////// -// Slow Tests are disabled by default. Use this section to turn on -// Individual tests. -#define gEmptyTestFixture // Fast - -#define gCInterfaceTestFixture // slow -#define gCPPInterfaceTestFixture // fast - -#define gMemoryTestFixture // medium - -#endif \ No newline at end of file diff --git a/spine-cpp/spine-cpp-unit-tests/tests/main.cpp b/spine-cpp/spine-cpp-unit-tests/tests/main.cpp deleted file mode 100644 index 5ed9971da..000000000 --- a/spine-cpp/spine-cpp-unit-tests/tests/main.cpp +++ /dev/null @@ -1,119 +0,0 @@ -// -// main.cpp -// spine_unit_test -// -// Created by Stephen Gowen on 12/7/17. -// Copyright © 2017 Noctis Games. All rights reserved. -// - -#ifdef WIN32 -#include -#else -#include -#endif // WIN32 - -#include -#include "KString.h" -#include - -#include "spine/Extension.h" - -#include "SimpleTest.h" -#include "MemoryTest.h" - -#include "KMemory.h" // last include - -using namespace Spine; - -class KanjiSpineExtension : public DefaultSpineExtension -{ -public: - static KanjiSpineExtension* getInstance(); - - virtual ~KanjiSpineExtension(); - - virtual void* spineAlloc(size_t size, const char* file, int line); - - virtual void* spineCalloc(size_t num, size_t size, const char* file, int line); - - virtual void* spineRealloc(void* ptr, size_t size, const char* file, int line); - - virtual void spineFree(void* mem); - -protected: - KanjiSpineExtension(); -}; - -KanjiSpineExtension* KanjiSpineExtension::getInstance() -{ - static KanjiSpineExtension ret; - return &ret; -} - -KanjiSpineExtension::~KanjiSpineExtension() -{ - // Empty -} - -void* KanjiSpineExtension::spineAlloc(size_t size, const char* file, int line) -{ - return _kanjimalloc(size); -} - -void* KanjiSpineExtension::spineCalloc(size_t num, size_t size, const char* file, int line) -{ - void* ptr = spineAlloc(num * size, file, line); - if (ptr) - { - memset(ptr, 0, num * size); - } - - return ptr; -} - -void* KanjiSpineExtension::spineRealloc(void* ptr, size_t size, const char* file, int line) -{ - return _kanjirealloc(ptr, size); -} - -void KanjiSpineExtension::spineFree(void* mem) -{ - _kanjifree(mem); -} - -KanjiSpineExtension::KanjiSpineExtension() : DefaultSpineExtension() -{ - // Empty -} - -double timeNow() -{ - timespec lTimeVal; - clock_gettime(CLOCK_MONOTONIC, &lTimeVal); - return lTimeVal.tv_sec + (lTimeVal.tv_nsec * 1.0e-9); -} - -int main(int argc, char* argv[]) -{ - SpineExtension::setInstance(KanjiSpineExtension::getInstance()); - - double startTime = timeNow(); - - /* Set working directory to current location for opening test data */ -#ifdef WIN32 - _chdir( GetFileDir(argv[0], false).c_str() ); -#else - chdir(GetFileDir(argv[0], false).c_str()); -#endif - - SimpleTest::test(); - MemoryTest::test(); - - // End Timing - double endTime = timeNow(); - double timeElapsed = (endTime - startTime); - printf("\n\n%i minutes and %i seconds of your life taken from you by these tests.\n", ((int)timeElapsed) / 60, ((int)timeElapsed) % 60); - printf("timeElapsed: %f \n", timeElapsed); - - return 0; -} diff --git a/spine-cpp/spine-cpp/include/spine/Atlas.h b/spine-cpp/spine-cpp/include/spine/Atlas.h index d6d5dfad9..3a425df9c 100644 --- a/spine-cpp/spine-cpp/include/spine/Atlas.h +++ b/spine-cpp/spine-cpp/include/spine/Atlas.h @@ -94,11 +94,11 @@ namespace Spine { class TextureLoader; - class Atlas : SpineObject { + class Atlas : public SpineObject { public: - Atlas(const char* path, TextureLoader& textureLoader); + Atlas(const char* path, TextureLoader* textureLoader); - Atlas(const char* data, int length, const char* dir, TextureLoader& textureLoader); + Atlas(const char* data, int length, const char* dir, TextureLoader* textureLoader); ~Atlas(); @@ -114,7 +114,7 @@ namespace Spine { private: Vector _pages; Vector _regions; - TextureLoader& _textureLoader; + TextureLoader* _textureLoader; void load(const char* begin, int length, const char* dir); diff --git a/spine-cpp/spine-cpp/include/spine/Extension.h b/spine-cpp/spine-cpp/include/spine/Extension.h index bf38862d4..556e83794 100644 --- a/spine-cpp/spine-cpp/include/spine/Extension.h +++ b/spine-cpp/spine-cpp/include/spine/Extension.h @@ -33,22 +33,6 @@ #include -// #define SPINE_EXTENSION (SpineExtension::getInstance()) - -/* All allocation uses these. */ -/* -#define MALLOC(TYPE,COUNT) ((TYPE*)SPINE_EXTENSION->spineAlloc(sizeof(TYPE) * (COUNT), __FILE__, __LINE__)) -#define CALLOC(TYPE,COUNT) ((TYPE*)SPINE_EXTENSION->spineCalloc(COUNT, sizeof(TYPE), __FILE__, __LINE__)) -#define NEW(TYPE) CALLOC(TYPE,1) -#define REALLOC(PTR,TYPE,COUNT) ((TYPE*)SPINE_EXTENSION->spineRealloc(PTR, sizeof(TYPE) * (COUNT), __FILE__, __LINE__)) -*/ - -/* Frees memory. Can be used on const types. */ -// #define FREE(VALUE) SPINE_EXTENSION->spinefree(VALUE) - -/* Call destructor and then frees memory. Can be used on const types. */ -// #define DESTROY(TYPE,VALUE) VALUE->~TYPE(); SPINE_EXTENSION->spinefree(VALUE) - namespace Spine { class SpineExtension { public: @@ -64,8 +48,8 @@ namespace Spine { return (T*)getInstance()->_realloc(ptr, sizeof(T) * num, file, line); } - template static void free(T* ptr) { - getInstance()->_free((void*)ptr); + template static void free(T* ptr, const char* file, int line) { + getInstance()->_free((void*)ptr, file, line); } static char* readFile(const char* path, int* length) { @@ -87,18 +71,19 @@ namespace Spine { virtual void* _realloc(void* ptr, size_t size, const char* file, int line) = 0; /// If you provide a spineAllocFunc, you should also provide a spineFreeFunc - virtual void _free(void* mem) = 0; + virtual void _free(void* mem, const char* file, int line) = 0; virtual char* _readFile(const char* path, int* length); SpineExtension(); - + private: static SpineExtension* _instance; }; class DefaultSpineExtension : public SpineExtension { public: + DefaultSpineExtension(); virtual ~DefaultSpineExtension(); protected: @@ -108,9 +93,7 @@ namespace Spine { virtual void* _realloc(void* ptr, size_t size, const char* file, int line); - virtual void _free(void* mem); - - DefaultSpineExtension(); + virtual void _free(void* mem, const char* file, int line); }; } diff --git a/spine-cpp/spine-cpp/include/spine/HashMap.h b/spine-cpp/spine-cpp/include/spine/HashMap.h index 1beb41c62..428fec23c 100755 --- a/spine-cpp/spine-cpp/include/spine/HashMap.h +++ b/spine-cpp/spine-cpp/include/spine/HashMap.h @@ -130,7 +130,7 @@ namespace Spine { size_t index = hash(key); - Entry* entry = new Entry(); + Entry* entry = new (__FILE__, __LINE__) Entry(); entry->_key = key; entry->_value = value; diff --git a/spine-cpp/spine-cpp/include/spine/Pool.h b/spine-cpp/spine-cpp/include/spine/Pool.h index 43aa0651e..7f4df82de 100644 --- a/spine-cpp/spine-cpp/include/spine/Pool.h +++ b/spine-cpp/spine-cpp/include/spine/Pool.h @@ -57,7 +57,7 @@ namespace Spine { return ret; } else { - T* ret = new T(); + T* ret = new (__FILE__, __LINE__) T(); return ret; } diff --git a/spine-cpp/spine-cpp/include/spine/SpineObject.h b/spine-cpp/spine-cpp/include/spine/SpineObject.h index 45d987770..a79e0d049 100644 --- a/spine-cpp/spine-cpp/include/spine/SpineObject.h +++ b/spine-cpp/spine-cpp/include/spine/SpineObject.h @@ -36,8 +36,7 @@ namespace Spine { class SpineObject { public: - void* operator new(size_t sz); - void* operator new(size_t sz, void* p); + void* operator new(size_t sz, const char* file, int line); void operator delete(void* p); }; } diff --git a/spine-cpp/spine-cpp/include/spine/Vector.h b/spine-cpp/spine-cpp/include/spine/Vector.h index 17fb7bc13..48ff57d2a 100644 --- a/spine-cpp/spine-cpp/include/spine/Vector.h +++ b/spine-cpp/spine-cpp/include/spine/Vector.h @@ -50,31 +50,11 @@ namespace Spine { if (_capacity > 0) { _buffer = allocate(_capacity); for (size_t i = 0; i < _size; ++i) { - construct(_buffer + i, inVector._buffer[i]); + _buffer[i] = inVector._buffer[i]; } } } - Vector& operator=(Vector& inVector) { - if (this != &inVector) { - clear(); - deallocate(_buffer); - _buffer = NULL; - - _size = inVector._size; - _capacity = inVector._capacity; - - if (_capacity > 0) { - _buffer = allocate(_capacity); - for (size_t i = 0; i < _size; ++i) { - construct(_buffer + i, inVector._buffer[i]); - } - } - } - - return *this; - } - ~Vector() { clear(); deallocate(_buffer); @@ -105,7 +85,7 @@ namespace Spine { reserve(); } - construct(_buffer + _size++, inValue); + _buffer[_size++] = inValue; } void insert(size_t inIndex, const T& inValue) { @@ -116,11 +96,10 @@ namespace Spine { } for (size_t i = ++_size - 1; i > inIndex; --i) { - construct(_buffer + i, _buffer[i - 1]); - destroy(_buffer + (i - 1)); + _buffer[i] = _buffer[i - 1]; } - construct(_buffer + inIndex, inValue); + _buffer[inIndex] = inValue; } void erase(size_t inIndex) { @@ -133,15 +112,9 @@ namespace Spine { std::swap(_buffer[i], _buffer[i + 1]); } } - - destroy(_buffer + _size); } void clear() { - for (size_t i = 0; i < _size; ++i) { - destroy(_buffer + (_size - 1 - i)); - } - _size = 0; } @@ -212,20 +185,9 @@ namespace Spine { void deallocate(T* buffer) { if (_buffer) { - SpineExtension::free(buffer); + SpineExtension::free(buffer, __FILE__, __LINE__); } } - - void construct(T* buffer, const T& val) { - /// This is a placement new operator - /// which basically means we are contructing a new object - /// using pre-allocated memory - new (buffer) T(val); - } - - void destroy(T* buffer) { - buffer->~T(); - } }; } diff --git a/spine-cpp/spine-cpp/src/spine/AnimationState.cpp b/spine-cpp/spine-cpp/src/spine/AnimationState.cpp index 7bace3609..0c286bc98 100644 --- a/spine-cpp/spine-cpp/src/spine/AnimationState.cpp +++ b/spine-cpp/spine-cpp/src/spine/AnimationState.cpp @@ -216,11 +216,11 @@ namespace Spine { } EventQueue* EventQueue::newEventQueue(AnimationState& state, Pool& trackEntryPool) { - return new EventQueue(state, trackEntryPool); + return new (__FILE__, __LINE__) EventQueue(state, trackEntryPool); } EventQueueEntry* EventQueue::newEventQueueEntry(EventType eventType, TrackEntry* entry, Event* event) { - return new EventQueueEntry(eventType, entry, event); + return new (__FILE__, __LINE__) EventQueueEntry(eventType, entry, event); } EventQueue::EventQueue(AnimationState& state, Pool& trackEntryPool) : _state(state), _trackEntryPool(trackEntryPool), _drainDisabled(false) { diff --git a/spine-cpp/spine-cpp/src/spine/Atlas.cpp b/spine-cpp/spine-cpp/src/spine/Atlas.cpp index 8fdab3fe3..8a8ca5006 100644 --- a/spine-cpp/spine-cpp/src/spine/Atlas.cpp +++ b/spine-cpp/spine-cpp/src/spine/Atlas.cpp @@ -37,7 +37,7 @@ #include namespace Spine { - Atlas::Atlas(const char* path, TextureLoader& textureLoader) : _textureLoader(textureLoader) { + Atlas::Atlas(const char* path, TextureLoader* textureLoader) : _textureLoader(textureLoader) { int dirLength; char *dir; int length; @@ -58,11 +58,11 @@ namespace Spine { load(data, length, dir); } - SpineExtension::free(data); - SpineExtension::free(dir); + SpineExtension::free(data, __FILE__, __LINE__); + SpineExtension::free(dir, __FILE__, __LINE__); } - Atlas::Atlas(const char* data, int length, const char* dir, TextureLoader& textureLoader) : _textureLoader(textureLoader) { + Atlas::Atlas(const char* data, int length, const char* dir, TextureLoader* textureLoader) : _textureLoader(textureLoader) { load(data, length, dir); } @@ -91,8 +91,9 @@ namespace Spine { } void Atlas::dispose() { + if (!_textureLoader) return; for (size_t i = 0, n = _pages.size(); i < n; ++i) { - _textureLoader.unload(_pages[i]->rendererObject); + _textureLoader->unload(_pages[i]->rendererObject); } } @@ -123,9 +124,9 @@ namespace Spine { } strcpy(path + dirLength + needsSlash, name); - page = new AtlasPage(std::string(name)); + page = new (__FILE__, __LINE__) AtlasPage(std::string(name)); - SpineExtension::free(name); + SpineExtension::free(name, __FILE__, __LINE__); int tupleVal = readTuple(&begin, end, tuple); assert(tupleVal == 2); @@ -160,17 +161,20 @@ namespace Spine { } } - _textureLoader.load(*page, std::string(path)); + if (_textureLoader) _textureLoader->load(*page, std::string(path)); - SpineExtension::free(path); + SpineExtension::free(path, __FILE__, __LINE__); _pages.push_back(page); } else { - AtlasRegion* region = new AtlasRegion(); + AtlasRegion* region = new (__FILE__, __LINE__) AtlasRegion(); region->page = page; - region->name = mallocString(&str); + + char* name = mallocString(&str); + region->name = std::string(name); + SpineExtension::free(name, __FILE__, __LINE__); assert(readValue(&begin, end, &str)); region->rotate = equals(&str, "true"); diff --git a/spine-cpp/spine-cpp/src/spine/AtlasAttachmentLoader.cpp b/spine-cpp/spine-cpp/src/spine/AtlasAttachmentLoader.cpp index fbc0ab18e..d7c2e0550 100644 --- a/spine-cpp/spine-cpp/src/spine/AtlasAttachmentLoader.cpp +++ b/spine-cpp/spine-cpp/src/spine/AtlasAttachmentLoader.cpp @@ -53,7 +53,7 @@ namespace Spine { AtlasRegion& region = *regionP; - RegionAttachment* attachmentP = new RegionAttachment(name); + RegionAttachment* attachmentP = new (__FILE__, __LINE__) RegionAttachment(name); RegionAttachment& attachment = *attachmentP; attachment._rendererObject = regionP; @@ -74,7 +74,7 @@ namespace Spine { AtlasRegion& region = *regionP; - MeshAttachment* attachmentP = new MeshAttachment(name); + MeshAttachment* attachmentP = new (__FILE__, __LINE__) MeshAttachment(name); MeshAttachment& attachment = *attachmentP; attachment._rendererObject = regionP; @@ -94,19 +94,19 @@ namespace Spine { } BoundingBoxAttachment* AtlasAttachmentLoader::newBoundingBoxAttachment(Skin& skin, std::string name) { - return new BoundingBoxAttachment(name); + return new (__FILE__, __LINE__) BoundingBoxAttachment(name); } PathAttachment* AtlasAttachmentLoader::newPathAttachment(Skin& skin, std::string name) { - return new PathAttachment(name); + return new (__FILE__, __LINE__) PathAttachment(name); } PointAttachment* AtlasAttachmentLoader::newPointAttachment(Skin& skin, std::string name) { - return new PointAttachment(name); + return new (__FILE__, __LINE__) PointAttachment(name); } ClippingAttachment* AtlasAttachmentLoader::newClippingAttachment(Skin& skin, std::string name) { - return new ClippingAttachment(name); + return new (__FILE__, __LINE__) ClippingAttachment(name); } AtlasRegion* AtlasAttachmentLoader::findRegion(std::string name) { diff --git a/spine-cpp/spine-cpp/src/spine/Extension.cpp b/spine-cpp/spine-cpp/src/spine/Extension.cpp index 9a0bfd7b3..27aa764b2 100644 --- a/spine-cpp/spine-cpp/src/spine/Extension.cpp +++ b/spine-cpp/spine-cpp/src/spine/Extension.cpp @@ -94,8 +94,8 @@ namespace Spine { return ::realloc(ptr, size); } - void DefaultSpineExtension::_free(void* mem) { - free(mem); + void DefaultSpineExtension::_free(void* mem, const char* file, int line) { + ::free(mem); } DefaultSpineExtension::DefaultSpineExtension() : SpineExtension() { diff --git a/spine-cpp/spine-cpp/src/spine/Json.cpp b/spine-cpp/spine-cpp/src/spine/Json.cpp index bcc82f9a1..c3732d804 100644 --- a/spine-cpp/spine-cpp/src/spine/Json.cpp +++ b/spine-cpp/spine-cpp/src/spine/Json.cpp @@ -119,11 +119,11 @@ namespace Spine { } if (_valueString) { - SpineExtension::free(_valueString); + SpineExtension::free(_valueString, __FILE__, __LINE__); } if (_name) { - SpineExtension::free(_name); + SpineExtension::free(_name, __FILE__, __LINE__); } if (_next) { @@ -415,7 +415,7 @@ namespace Spine { return value + 1; /* empty array. */ } - item->_child = child = new Json(NULL); + item->_child = child = new (__FILE__, __LINE__) Json(NULL); if (!item->_child) { return NULL; /* memory fail */ } @@ -429,7 +429,7 @@ namespace Spine { item->_size = 1; while (*value == ',') { - Json *new_item = new Json(NULL); + Json *new_item = new (__FILE__, __LINE__) Json(NULL); if (!new_item) { return NULL; /* memory fail */ } @@ -471,7 +471,7 @@ namespace Spine { return value + 1; /* empty array. */ } - item->_child = child = new Json(NULL); + item->_child = child = new (__FILE__, __LINE__) Json(NULL); if (!item->_child) { return NULL; } @@ -494,7 +494,7 @@ namespace Spine { item->_size = 1; while (*value == ',') { - Json *new_item = new Json(NULL); + Json *new_item = new (__FILE__, __LINE__) Json(NULL); if (!new_item) { return NULL; /* memory fail */ } diff --git a/spine-cpp/spine-cpp/src/spine/Skeleton.cpp b/spine-cpp/spine-cpp/src/spine/Skeleton.cpp index a59be5599..23f4255f4 100644 --- a/spine-cpp/spine-cpp/src/spine/Skeleton.cpp +++ b/spine-cpp/spine-cpp/src/spine/Skeleton.cpp @@ -71,11 +71,11 @@ namespace Spine { Bone* bone; if (data->getParent() == NULL) { - bone = new Bone(*data, *this, NULL); + bone = new (__FILE__, __LINE__) Bone(*data, *this, NULL); } else { Bone* parent = _bones[data->getParent()->getIndex()]; - bone = new Bone(*data, *this, parent); + bone = new (__FILE__, __LINE__) Bone(*data, *this, parent); parent->getChildren().push_back(bone); } @@ -88,7 +88,7 @@ namespace Spine { SlotData* data = (*i); Bone* bone = _bones[data->getBoneData().getIndex()]; - Slot* slot = new Slot(*data, *bone); + Slot* slot = new (__FILE__, __LINE__) Slot(*data, *bone); _slots.push_back(slot); _drawOrder.push_back(slot); @@ -98,7 +98,7 @@ namespace Spine { for (IkConstraintData** i = _data.getIkConstraints().begin(); i != _data.getIkConstraints().end(); ++i) { IkConstraintData* data = (*i); - IkConstraint* constraint = new IkConstraint(*data, *this); + IkConstraint* constraint = new (__FILE__, __LINE__) IkConstraint(*data, *this); _ikConstraints.push_back(constraint); } @@ -107,7 +107,7 @@ namespace Spine { for (TransformConstraintData** i = _data.getTransformConstraints().begin(); i != _data.getTransformConstraints().end(); ++i) { TransformConstraintData* data = (*i); - TransformConstraint* constraint = new TransformConstraint(*data, *this); + TransformConstraint* constraint = new (__FILE__, __LINE__) TransformConstraint(*data, *this); _transformConstraints.push_back(constraint); } @@ -116,7 +116,7 @@ namespace Spine { for (PathConstraintData** i = _data.getPathConstraints().begin(); i != _data.getPathConstraints().end(); ++i) { PathConstraintData* data = (*i); - PathConstraint* constraint = new PathConstraint(*data, *this); + PathConstraint* constraint = new (__FILE__, __LINE__) PathConstraint(*data, *this); _pathConstraints.push_back(constraint); } diff --git a/spine-cpp/spine-cpp/src/spine/SkeletonBinary.cpp b/spine-cpp/spine-cpp/src/spine/SkeletonBinary.cpp index ba9b25fff..2ab05b83c 100644 --- a/spine-cpp/spine-cpp/src/spine/SkeletonBinary.cpp +++ b/spine-cpp/spine-cpp/src/spine/SkeletonBinary.cpp @@ -106,7 +106,7 @@ namespace Spine { TransformMode_NoScaleOrReflection }; - SkeletonBinary::SkeletonBinary(Atlas& atlasArray) : _attachmentLoader(new AtlasAttachmentLoader(atlasArray)), _error(), _scale(1), _ownsLoader(true) { + SkeletonBinary::SkeletonBinary(Atlas& atlasArray) : _attachmentLoader(new (__FILE__, __LINE__) AtlasAttachmentLoader(atlasArray)), _error(), _scale(1), _ownsLoader(true) { } @@ -126,21 +126,21 @@ namespace Spine { int i, ii, nonessential; SkeletonData* skeletonData; - DataInput* input = new DataInput(); + DataInput* input = new (__FILE__, __LINE__) DataInput(); input->cursor = binary; input->end = binary + length; _linkedMeshes.clear(); - skeletonData = new SkeletonData(); + skeletonData = new (__FILE__, __LINE__) SkeletonData(); char* skeletonData_hash = readString(input); skeletonData->_hash = std::string(skeletonData_hash); - SpineExtension::free(skeletonData_hash); + SpineExtension::free(skeletonData_hash, __FILE__, __LINE__); char* skeletonData_version = readString(input); skeletonData->_version = std::string(skeletonData_version); - SpineExtension::free(skeletonData_version); + SpineExtension::free(skeletonData_version, __FILE__, __LINE__); skeletonData->_width = readFloat(input); skeletonData->_height = readFloat(input); @@ -150,7 +150,7 @@ namespace Spine { if (nonessential) { /* Skip images path & fps */ readFloat(input); - SpineExtension::free(readString(input)); + SpineExtension::free(readString(input), __FILE__, __LINE__); } /* Bones. */ @@ -163,9 +163,9 @@ namespace Spine { const char* name = readString(input); BoneData* parent = i == 0 ? 0 : skeletonData->_bones[readVarint(input, 1)]; - data = new BoneData(i, std::string(name), parent); + data = new (__FILE__, __LINE__) BoneData(i, std::string(name), parent); - SpineExtension::free(name); + SpineExtension::free(name, __FILE__, __LINE__); data->_rotation = readFloat(input); data->_x = readFloat(input) * _scale; @@ -212,9 +212,9 @@ namespace Spine { const char* slotName = readString(input); BoneData* boneData = skeletonData->_bones[readVarint(input, 1)]; - SlotData* slotData = new SlotData(i, std::string(slotName), *boneData); + SlotData* slotData = new (__FILE__, __LINE__) SlotData(i, std::string(slotName), *boneData); - SpineExtension::free(slotName); + SpineExtension::free(slotName, __FILE__, __LINE__); readColor(input, &slotData->_r, &slotData->_g, &slotData->_b, &slotData->_a); r = readByte(input); g = readByte(input); @@ -227,7 +227,7 @@ namespace Spine { } char* slotData_attachmentName = readString(input); slotData->_attachmentName = std::string(slotData_attachmentName); - SpineExtension::free(slotData_attachmentName); + SpineExtension::free(slotData_attachmentName, __FILE__, __LINE__); slotData->_blendMode = static_cast(readVarint(input, 1)); skeletonData->_slots[i] = slotData; @@ -240,11 +240,11 @@ namespace Spine { for (i = 0; i < ikConstraintsCount; ++i) { const char* name = readString(input); - IkConstraintData* data = new IkConstraintData(std::string(name)); + IkConstraintData* data = new (__FILE__, __LINE__) IkConstraintData(std::string(name)); data->_order = readVarint(input, 1); - SpineExtension::free(name); + SpineExtension::free(name, __FILE__, __LINE__); int bonesCount = readVarint(input, 1); data->_bones.reserve(bonesCount); data->_bones.setSize(bonesCount); @@ -265,10 +265,10 @@ namespace Spine { for (i = 0; i < transformConstraintsCount; ++i) { const char* name = readString(input); - TransformConstraintData* data = new TransformConstraintData(std::string(name)); + TransformConstraintData* data = new (__FILE__, __LINE__) TransformConstraintData(std::string(name)); data->_order = readVarint(input, 1); - SpineExtension::free(name); + SpineExtension::free(name, __FILE__, __LINE__); int bonesCount = readVarint(input, 1); data->_bones.reserve(bonesCount); data->_bones.setSize(bonesCount); @@ -299,10 +299,10 @@ namespace Spine { for (i = 0; i < pathConstraintsCount; ++i) { const char* name = readString(input); - PathConstraintData* data = new PathConstraintData(std::string(name)); + PathConstraintData* data = new (__FILE__, __LINE__) PathConstraintData(std::string(name)); data->_order = readVarint(input, 1); - SpineExtension::free(name); + SpineExtension::free(name, __FILE__, __LINE__); int bonesCount = readVarint(input, 1); data->_bones.reserve(bonesCount); @@ -349,7 +349,7 @@ namespace Spine { for (i = skeletonData->_defaultSkin ? 1 : 0; i < skeletonData->_skins.size(); ++i) { const char* skinName = readString(input); skeletonData->_skins[i] = readSkin(input, skinName, skeletonData, nonessential); - SpineExtension::free(skinName); + SpineExtension::free(skinName, __FILE__, __LINE__); } /* Linked meshes. */ @@ -380,13 +380,13 @@ namespace Spine { skeletonData->_events.setSize(eventsCount); for (i = 0; i < eventsCount; ++i) { const char* name = readString(input); - EventData* eventData = new EventData(std::string(name)); - SpineExtension::free(name); + EventData* eventData = new (__FILE__, __LINE__) EventData(std::string(name)); + SpineExtension::free(name, __FILE__, __LINE__); eventData->_intValue = readVarint(input, 0); eventData->_floatValue = readFloat(input); const char* eventData_stringValue = readString(input); eventData->_stringValue = std::string(eventData_stringValue); - SpineExtension::free(eventData_stringValue); + SpineExtension::free(eventData_stringValue, __FILE__, __LINE__); skeletonData->_events[i] = eventData; } @@ -397,7 +397,7 @@ namespace Spine { for (i = 0; i < animationsCount; ++i) { const char* name = readString(input); Animation* animation = readAnimation(name, input, skeletonData); - SpineExtension::free(name); + SpineExtension::free(name, __FILE__, __LINE__); if (!animation) { delete input; delete skeletonData; @@ -420,7 +420,7 @@ namespace Spine { return NULL; } skeletonData = readSkeletonData((unsigned char*)binary, length); - SpineExtension::free(binary); + SpineExtension::free(binary, __FILE__, __LINE__); return skeletonData; } @@ -522,7 +522,7 @@ namespace Spine { return NULL; } - skin = new Skin(std::string(skinName)); + skin = new (__FILE__, __LINE__) Skin(std::string(skinName)); for (i = 0; i < slotCount; ++i) { int slotIndex = readVarint(input, 1); @@ -532,7 +532,7 @@ namespace Spine { if (attachment) { skin->addAttachment(slotIndex, std::string(name), attachment); } - SpineExtension::free(name); + SpineExtension::free(name, __FILE__, __LINE__); } } @@ -571,7 +571,7 @@ namespace Spine { region->updateOffset(); if (freeName) { - SpineExtension::free(name); + SpineExtension::free(name, __FILE__, __LINE__); } return region; @@ -585,7 +585,7 @@ namespace Spine { readInt(input); } if (freeName) { - SpineExtension::free(name); + SpineExtension::free(name, __FILE__, __LINE__); } return box; @@ -620,7 +620,7 @@ namespace Spine { } if (freeName) { - SpineExtension::free(name); + SpineExtension::free(name, __FILE__, __LINE__); } return mesh; @@ -645,15 +645,15 @@ namespace Spine { mesh->_height = readFloat(input) * _scale; } - LinkedMesh* linkedMesh = new LinkedMesh(mesh, std::string(skinName), slotIndex, std::string(parent)); + LinkedMesh* linkedMesh = new (__FILE__, __LINE__) LinkedMesh(mesh, std::string(skinName), slotIndex, std::string(parent)); _linkedMeshes.push_back(linkedMesh); if (freeName) { - SpineExtension::free(name); + SpineExtension::free(name, __FILE__, __LINE__); } - SpineExtension::free(skinName); - SpineExtension::free(parent); + SpineExtension::free(skinName, __FILE__, __LINE__); + SpineExtension::free(parent, __FILE__, __LINE__); return mesh; } @@ -677,7 +677,7 @@ namespace Spine { } if (freeName) { - SpineExtension::free(name); + SpineExtension::free(name, __FILE__, __LINE__); } return path; @@ -709,7 +709,7 @@ namespace Spine { clip->_endSlot = skeletonData->_slots[endSlotIndex]; if (freeName) { - SpineExtension::free(name); + SpineExtension::free(name, __FILE__, __LINE__); } return clip; @@ -717,7 +717,7 @@ namespace Spine { } if (freeName) { - SpineExtension::free(name); + SpineExtension::free(name, __FILE__, __LINE__); } return NULL; @@ -800,19 +800,19 @@ namespace Spine { int frameCount = readVarint(input, true); switch (timelineType) { case SLOT_ATTACHMENT: { - AttachmentTimeline* timeline = new AttachmentTimeline(frameCount); + AttachmentTimeline* timeline = new (__FILE__, __LINE__) AttachmentTimeline(frameCount); timeline->_slotIndex = slotIndex; for (int frameIndex = 0; frameIndex < frameCount; ++frameIndex) { const char* attachmentName = readString(input); timeline->setFrame(frameIndex, readFloat(input), std::string(attachmentName)); - SpineExtension::free(attachmentName); + SpineExtension::free(attachmentName, __FILE__, __LINE__); } timelines.push_back(timeline); duration = MAX(duration, timeline->_frames[frameCount - 1]); break; } case SLOT_COLOR: { - ColorTimeline* timeline = new ColorTimeline(frameCount); + ColorTimeline* timeline = new (__FILE__, __LINE__) ColorTimeline(frameCount); timeline->_slotIndex = slotIndex; for (int frameIndex = 0; frameIndex < frameCount; ++frameIndex) { float time = readFloat(input); @@ -831,7 +831,7 @@ namespace Spine { break; } case SLOT_TWO_COLOR: { - TwoColorTimeline* timeline = new TwoColorTimeline(frameCount); + TwoColorTimeline* timeline = new (__FILE__, __LINE__) TwoColorTimeline(frameCount); timeline->_slotIndex = slotIndex; for (int frameIndex = 0; frameIndex < frameCount; ++frameIndex) { float time = readFloat(input); @@ -871,7 +871,7 @@ namespace Spine { int frameCount = readVarint(input, true); switch (timelineType) { case BONE_ROTATE: { - RotateTimeline* timeline = new RotateTimeline(frameCount); + RotateTimeline* timeline = new (__FILE__, __LINE__) RotateTimeline(frameCount); timeline->_boneIndex = boneIndex; for (int frameIndex = 0; frameIndex < frameCount; ++frameIndex) { timeline->setFrame(frameIndex, readFloat(input), readFloat(input)); @@ -889,13 +889,13 @@ namespace Spine { TranslateTimeline* timeline; float timelineScale = 1; if (timelineType == BONE_SCALE) { - timeline = new ScaleTimeline(frameCount); + timeline = new (__FILE__, __LINE__) ScaleTimeline(frameCount); } else if (timelineType == BONE_SHEAR) { - timeline = new ShearTimeline(frameCount); + timeline = new (__FILE__, __LINE__) ShearTimeline(frameCount); } else { - timeline = new TranslateTimeline(frameCount); + timeline = new (__FILE__, __LINE__) TranslateTimeline(frameCount); timelineScale = scale; } timeline->_boneIndex = boneIndex; @@ -922,7 +922,7 @@ namespace Spine { for (int i = 0, n = readVarint(input, true); i < n; ++i) { int index = readVarint(input, true); int frameCount = readVarint(input, true); - IkConstraintTimeline* timeline = new IkConstraintTimeline(frameCount); + IkConstraintTimeline* timeline = new (__FILE__, __LINE__) IkConstraintTimeline(frameCount); timeline->_ikConstraintIndex = index; for (int frameIndex = 0; frameIndex < frameCount; ++frameIndex) { timeline->setFrame(frameIndex, readFloat(input), readFloat(input), readSByte(input)); @@ -938,7 +938,7 @@ namespace Spine { for (int i = 0, n = readVarint(input, true); i < n; ++i) { int index = readVarint(input, true); int frameCount = readVarint(input, true); - TransformConstraintTimeline* timeline = new TransformConstraintTimeline(frameCount); + TransformConstraintTimeline* timeline = new (__FILE__, __LINE__) TransformConstraintTimeline(frameCount); timeline->_transformConstraintIndex = index; for (int frameIndex = 0; frameIndex < frameCount; ++frameIndex) { timeline->setFrame(frameIndex, readFloat(input), readFloat(input), readFloat(input), readFloat(input), readFloat(input)); @@ -963,14 +963,14 @@ namespace Spine { PathConstraintPositionTimeline* timeline; float timelineScale = 1; if (timelineType == PATH_SPACING) { - timeline = new PathConstraintSpacingTimeline(frameCount); + timeline = new (__FILE__, __LINE__) PathConstraintSpacingTimeline(frameCount); if (data->_spacingMode == SpacingMode_Length || data->_spacingMode == SpacingMode_Fixed) { timelineScale = scale; } } else { - timeline = new PathConstraintPositionTimeline(frameCount); + timeline = new (__FILE__, __LINE__) PathConstraintPositionTimeline(frameCount); if (data->_positionMode == PositionMode_Fixed) { timelineScale = scale; @@ -988,7 +988,7 @@ namespace Spine { break; } case PATH_MIX: { - PathConstraintMixTimeline* timeline = new PathConstraintMixTimeline(frameCount); + PathConstraintMixTimeline* timeline = new (__FILE__, __LINE__) PathConstraintMixTimeline(frameCount); timeline->_pathConstraintIndex = index; for (int frameIndex = 0; frameIndex < frameCount; ++frameIndex) { @@ -1017,11 +1017,11 @@ namespace Spine { if (!baseAttachment) { ContainerUtil::cleanUpVectorOfPointers(timelines); setError("Attachment not found: ", attachmentName); - SpineExtension::free(attachmentName); + SpineExtension::free(attachmentName, __FILE__, __LINE__); return NULL; } - SpineExtension::free(attachmentName); + SpineExtension::free(attachmentName, __FILE__, __LINE__); VertexAttachment* attachment = static_cast(baseAttachment); @@ -1031,7 +1031,7 @@ namespace Spine { int frameCount = readVarint(input, true); - DeformTimeline* timeline = new DeformTimeline(frameCount); + DeformTimeline* timeline = new (__FILE__, __LINE__) DeformTimeline(frameCount); timeline->_slotIndex = slotIndex; timeline->_attachment = attachment; @@ -1088,7 +1088,7 @@ namespace Spine { // Draw order timeline. int drawOrderCount = readVarint(input, true); if (drawOrderCount > 0) { - DrawOrderTimeline* timeline = new DrawOrderTimeline(drawOrderCount); + DrawOrderTimeline* timeline = new (__FILE__, __LINE__) DrawOrderTimeline(drawOrderCount); int slotCount = static_cast(skeletonData->_slots.size()); for (int i = 0; i < drawOrderCount; ++i) { @@ -1135,12 +1135,12 @@ namespace Spine { // Event timeline. int eventCount = readVarint(input, true); if (eventCount > 0) { - EventTimeline* timeline =new EventTimeline(eventCount); + EventTimeline* timeline = new (__FILE__, __LINE__) EventTimeline(eventCount); for (int i = 0; i < eventCount; ++i) { float time = readFloat(input); EventData* eventData = skeletonData->_events[readVarint(input, true)]; - Event* event = new Event(time, *eventData); + Event* event = new (__FILE__, __LINE__) Event(time, *eventData); event->_intValue = readVarint(input, false); event->_floatValue = readFloat(input); @@ -1148,7 +1148,7 @@ namespace Spine { const char* event_stringValue = freeString ? readString(input) : eventData->_stringValue.c_str(); event->_stringValue = std::string(event_stringValue); if (freeString) { - SpineExtension::free(event_stringValue); + SpineExtension::free(event_stringValue, __FILE__, __LINE__); } timeline->setFrame(i, event); } @@ -1157,7 +1157,7 @@ namespace Spine { duration = MAX(duration, timeline->_frames[eventCount - 1]); } - return new Animation(std::string(name), timelines, duration); + return new (__FILE__, __LINE__) Animation(std::string(name), timelines, duration); } void SkeletonBinary::readCurve(DataInput* input, int frameIndex, CurveTimeline* timeline) { diff --git a/spine-cpp/spine-cpp/src/spine/SkeletonBounds.cpp b/spine-cpp/spine-cpp/src/spine/SkeletonBounds.cpp index e4bf6c333..d826b3c2c 100644 --- a/spine-cpp/spine-cpp/src/spine/SkeletonBounds.cpp +++ b/spine-cpp/spine-cpp/src/spine/SkeletonBounds.cpp @@ -68,7 +68,7 @@ namespace Spine { _polygonPool.erase(poolCount - 1); } else { - Polygon* polygonP = new Polygon(); + Polygon* polygonP = new (__FILE__, __LINE__) Polygon(); } _polygons.push_back(polygonP); diff --git a/spine-cpp/spine-cpp/src/spine/SkeletonJson.cpp b/spine-cpp/spine-cpp/src/spine/SkeletonJson.cpp index 09252d237..2718c6fc8 100644 --- a/spine-cpp/spine-cpp/src/spine/SkeletonJson.cpp +++ b/spine-cpp/spine-cpp/src/spine/SkeletonJson.cpp @@ -86,7 +86,7 @@ #endif namespace Spine { - SkeletonJson::SkeletonJson(Atlas& atlas) : _attachmentLoader(new AtlasAttachmentLoader(atlas)), _scale(1), _ownsLoader(true) { + SkeletonJson::SkeletonJson(Atlas& atlas) : _attachmentLoader(new (__FILE__, __LINE__) AtlasAttachmentLoader(atlas)), _scale(1), _ownsLoader(true) { } SkeletonJson::SkeletonJson(AttachmentLoader* attachmentLoader) : _attachmentLoader(attachmentLoader), _scale(1), _ownsLoader(false) { @@ -112,7 +112,7 @@ namespace Spine { skeletonData = readSkeletonData(json); - SpineExtension::free(json); + SpineExtension::free(json, __FILE__, __LINE__); return skeletonData; } @@ -125,14 +125,14 @@ namespace Spine { _error.clear(); _linkedMeshes.clear(); - root = new Json(json); + root = new (__FILE__, __LINE__) Json(json); if (!root) { setError(NULL, "Invalid skeleton JSON: ", Json::getError()); return NULL; } - skeletonData = new SkeletonData(); + skeletonData = new (__FILE__, __LINE__) SkeletonData(); skeleton = Json::getItem(root, "skeleton"); if (skeleton) { @@ -162,7 +162,7 @@ namespace Spine { } } - data = new BoneData(bonesCount, Json::getString(boneMap, "name", 0), parent); + data = new (__FILE__, __LINE__) BoneData(bonesCount, Json::getString(boneMap, "name", 0), parent); data->_length = Json::getFloat(boneMap, "length", 0) * _scale; data->_x = Json::getFloat(boneMap, "x", 0) * _scale; @@ -214,7 +214,7 @@ namespace Spine { return NULL; } - data = new SlotData(i, Json::getString(slotMap, "name", 0), *boneData); + data = new (__FILE__, __LINE__) SlotData(i, Json::getString(slotMap, "name", 0), *boneData); color = Json::getString(slotMap, "color", 0); if (color) { @@ -264,7 +264,7 @@ namespace Spine { for (constraintMap = ik->_child, i = 0; constraintMap; constraintMap = constraintMap->_next, ++i) { const char* targetName; - IkConstraintData* data = new IkConstraintData(Json::getString(constraintMap, "name", 0)); + IkConstraintData* data = new (__FILE__, __LINE__) IkConstraintData(Json::getString(constraintMap, "name", 0)); data->_order = Json::getInt(constraintMap, "order", 0); @@ -304,7 +304,7 @@ namespace Spine { for (constraintMap = transform->_child, i = 0; constraintMap; constraintMap = constraintMap->_next, ++i) { const char* name; - TransformConstraintData* data = new TransformConstraintData(Json::getString(constraintMap, "name", 0)); + TransformConstraintData* data = new (__FILE__, __LINE__) TransformConstraintData(Json::getString(constraintMap, "name", 0)); data->_order = Json::getInt(constraintMap, "order", 0); @@ -356,7 +356,7 @@ namespace Spine { const char* name; const char* item; - PathConstraintData* data = new PathConstraintData(Json::getString(constraintMap, "name", 0)); + PathConstraintData* data = new (__FILE__, __LINE__) PathConstraintData(Json::getString(constraintMap, "name", 0)); data->_order = Json::getInt(constraintMap, "order", 0); @@ -437,7 +437,7 @@ namespace Spine { Json *attachmentsMap; Json *curves; - Skin* skin = new Skin(skinMap->_name); + Skin* skin = new (__FILE__, __LINE__) Skin(skinMap->_name); skeletonData->_skins[skinsIndex++] = skin; if (strcmp(skinMap->_name, "default") == 0) { @@ -567,7 +567,7 @@ namespace Spine { } else { mesh->_inheritDeform = Json::getInt(attachmentMap, "deform", 1); - LinkedMesh* linkedMesh = new LinkedMesh(mesh, std::string(Json::getString(attachmentMap, "skin", 0)), slotIndex, std::string(entry->_valueString)); + LinkedMesh* linkedMesh = new (__FILE__, __LINE__) LinkedMesh(mesh, std::string(Json::getString(attachmentMap, "skin", 0)), slotIndex, std::string(entry->_valueString)); _linkedMeshes.push_back(linkedMesh); } break; @@ -661,7 +661,7 @@ namespace Spine { skeletonData->_events.reserve(events->_size); skeletonData->_events.setSize(events->_size); for (eventMap = events->_child, i = 0; eventMap; eventMap = eventMap->_next, ++i) { - EventData* eventData = new EventData(std::string(eventMap->_name)); + EventData* eventData = new (__FILE__, __LINE__) EventData(std::string(eventMap->_name)); eventData->_intValue = Json::getInt(eventMap, "int", 0); eventData->_floatValue = Json::getFloat(eventMap, "float", 0); @@ -796,7 +796,7 @@ namespace Spine { for (timelineMap = slotMap->_child; timelineMap; timelineMap = timelineMap->_next) { if (strcmp(timelineMap->_name, "attachment") == 0) { - AttachmentTimeline *timeline = new AttachmentTimeline(timelineMap->_size); + AttachmentTimeline *timeline = new (__FILE__, __LINE__) AttachmentTimeline(timelineMap->_size); timeline->_slotIndex = slotIndex; @@ -811,7 +811,7 @@ namespace Spine { } else if (strcmp(timelineMap->_name, "color") == 0) { - ColorTimeline *timeline = new ColorTimeline(timelineMap->_size); + ColorTimeline *timeline = new (__FILE__, __LINE__) ColorTimeline(timelineMap->_size); timeline->_slotIndex = slotIndex; @@ -826,7 +826,7 @@ namespace Spine { } else if (strcmp(timelineMap->_name, "twoColor") == 0) { - TwoColorTimeline *timeline = new TwoColorTimeline(timelineMap->_size); + TwoColorTimeline *timeline = new (__FILE__, __LINE__) TwoColorTimeline(timelineMap->_size); timeline->_slotIndex = slotIndex; @@ -862,7 +862,7 @@ namespace Spine { for (timelineMap = boneMap->_child; timelineMap; timelineMap = timelineMap->_next) { if (strcmp(timelineMap->_name, "rotate") == 0) { - RotateTimeline *timeline = new RotateTimeline(timelineMap->_size); + RotateTimeline *timeline = new (__FILE__, __LINE__) RotateTimeline(timelineMap->_size); timeline->_boneIndex = boneIndex; @@ -882,13 +882,13 @@ namespace Spine { float timelineScale = isTranslate ? _scale: 1; TranslateTimeline *timeline = 0; if (isScale) { - timeline = new ScaleTimeline(timelineMap->_size); + timeline = new (__FILE__, __LINE__) ScaleTimeline(timelineMap->_size); } else if (isTranslate) { - timeline = new TranslateTimeline(timelineMap->_size); + timeline = new (__FILE__, __LINE__) TranslateTimeline(timelineMap->_size); } else if (isShear) { - timeline = new ShearTimeline(timelineMap->_size); + timeline = new (__FILE__, __LINE__) ShearTimeline(timelineMap->_size); } timeline->_boneIndex = boneIndex; @@ -913,7 +913,7 @@ namespace Spine { /** IK constraint timelines. */ for (constraintMap = ik ? ik->_child : 0; constraintMap; constraintMap = constraintMap->_next) { IkConstraintData* constraint = skeletonData->findIkConstraint(constraintMap->_name); - IkConstraintTimeline *timeline = new IkConstraintTimeline(constraintMap->_size); + IkConstraintTimeline *timeline = new (__FILE__, __LINE__) IkConstraintTimeline(constraintMap->_size); for (frameIndex = 0; frameIndex < static_cast(skeletonData->_ikConstraints.size()); ++frameIndex) { if (constraint == skeletonData->_ikConstraints[frameIndex]) { @@ -933,7 +933,7 @@ namespace Spine { /** Transform constraint timelines. */ for (constraintMap = transform ? transform->_child : 0; constraintMap; constraintMap = constraintMap->_next) { TransformConstraintData* constraint = skeletonData->findTransformConstraint(constraintMap->_name); - TransformConstraintTimeline *timeline = new TransformConstraintTimeline(constraintMap->_size); + TransformConstraintTimeline *timeline = new (__FILE__, __LINE__) TransformConstraintTimeline(constraintMap->_size); for (frameIndex = 0; frameIndex < skeletonData->_transformConstraints.size(); ++frameIndex) { if (constraint == skeletonData->_transformConstraints[frameIndex]) { @@ -975,14 +975,14 @@ namespace Spine { PathConstraintPositionTimeline* timeline; float timelineScale = 1; if (strcmp(timelineName, "spacing") == 0) { - timeline = new PathConstraintSpacingTimeline(timelineMap->_size); + timeline = new (__FILE__, __LINE__) PathConstraintSpacingTimeline(timelineMap->_size); if (data->_spacingMode == SpacingMode_Length || data->_spacingMode == SpacingMode_Fixed) { timelineScale = _scale; } } else { - timeline = new PathConstraintPositionTimeline(timelineMap->_size); + timeline = new (__FILE__, __LINE__) PathConstraintPositionTimeline(timelineMap->_size); if (data->_positionMode == PositionMode_Fixed) { timelineScale = _scale; @@ -999,7 +999,7 @@ namespace Spine { duration = MAX(duration, timeline->_frames[(timelineMap->_size - 1) * PathConstraintPositionTimeline::ENTRIES]); } else if (strcmp(timelineName, "mix") == 0) { - PathConstraintMixTimeline* timeline = new PathConstraintMixTimeline(timelineMap->_size); + PathConstraintMixTimeline* timeline = new (__FILE__, __LINE__) PathConstraintMixTimeline(timelineMap->_size); timeline->_pathConstraintIndex = constraintIndex; for (valueMap = timelineMap->_child, frameIndex = 0; valueMap; valueMap = valueMap->_next, ++frameIndex) { timeline->setFrame(frameIndex, Json::getFloat(valueMap, "time", 0), Json::getFloat(valueMap, "rotateMix", 1), Json::getFloat(valueMap, "translateMix", 1)); @@ -1041,7 +1041,7 @@ namespace Spine { tempDeform.push_back(0); } - timeline = new DeformTimeline(timelineMap->_size); + timeline = new (__FILE__, __LINE__) DeformTimeline(timelineMap->_size); timeline->_slotIndex = slotIndex; timeline->_attachment = attachment; @@ -1091,7 +1091,7 @@ namespace Spine { /** Draw order timeline. */ if (drawOrder) { - DrawOrderTimeline* timeline = new DrawOrderTimeline(drawOrder->_size); + DrawOrderTimeline* timeline = new (__FILE__, __LINE__) DrawOrderTimeline(drawOrder->_size); for (valueMap = drawOrder->_child, frameIndex = 0; valueMap; valueMap = valueMap->_next, ++frameIndex) { int ii; @@ -1145,7 +1145,7 @@ namespace Spine { /** Event timeline. */ if (events) { - EventTimeline* timeline = new EventTimeline(events->_size); + EventTimeline* timeline = new (__FILE__, __LINE__) EventTimeline(events->_size); for (valueMap = events->_child, frameIndex = 0; valueMap; valueMap = valueMap->_next, ++frameIndex) { Event* event; @@ -1156,7 +1156,7 @@ namespace Spine { return NULL; } - event = new Event(Json::getFloat(valueMap, "time", 0), *eventData); + event = new (__FILE__, __LINE__) Event(Json::getFloat(valueMap, "time", 0), *eventData); event->_intValue = Json::getInt(valueMap, "int", eventData->_intValue); event->_floatValue = Json::getFloat(valueMap, "float", eventData->_floatValue); event->_stringValue = Json::getString(valueMap, "string", eventData->_stringValue.c_str()); @@ -1167,7 +1167,7 @@ namespace Spine { duration = MAX(duration, timeline->_frames[events->_size - 1]); } - return new Animation(std::string(root->_name), timelines, duration); + return new (__FILE__, __LINE__) Animation(std::string(root->_name), timelines, duration); } void SkeletonJson::readVertices(Json* attachmentMap, VertexAttachment* attachment, int verticesLength) { diff --git a/spine-cpp/spine-cpp/src/spine/SpineObject.cpp b/spine-cpp/spine-cpp/src/spine/SpineObject.cpp index dff95a888..cab14625f 100644 --- a/spine-cpp/spine-cpp/src/spine/SpineObject.cpp +++ b/spine-cpp/spine-cpp/src/spine/SpineObject.cpp @@ -29,7 +29,16 @@ *****************************************************************************/ #include +#include namespace Spine { + void *SpineObject::operator new(size_t sz, const char* file, int line) { + return SpineExtension::alloc(sz, file, line); + } + + void SpineObject::operator delete(void *p) { + ((SpineObject*)p)->~SpineObject(); + SpineExtension::free(p, __FILE__, __LINE__); + } } \ No newline at end of file diff --git a/spine-sfml/c/CMakeLists.txt b/spine-sfml/c/CMakeLists.txt index 40e2f36c4..2d5bdcd93 100644 --- a/spine-sfml/c/CMakeLists.txt +++ b/spine-sfml/c/CMakeLists.txt @@ -1,48 +1,4 @@ cmake_minimum_required(VERSION 2.8.9) -# -# First download and extract SFML 2.3.2 for the respective OS we are on -# -set(DEPS_DIR "${CMAKE_CURRENT_LIST_DIR}/dependencies/") -message(${DEPS_DIR}) -if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin") - set(SFML_URL "http://www.sfml-dev.org/files/SFML-2.4.1-osx-clang.tar.gz") - set(SFML_DIR ${DEPS_DIR}/SFML-2.4.1-osx-clang) - if (NOT EXISTS "${SFML_DIR}") - message("Downloading SFML for Mac OS X") - file(DOWNLOAD "${SFML_URL}" "${DEPS_DIR}/sfml.tar.gz") - execute_process( - COMMAND ${CMAKE_COMMAND} -E tar xzf ${DEPS_DIR}/sfml.tar.gz - WORKING_DIRECTORY ${DEPS_DIR} - ) - # copy freetype over to Frameworks/ so rpath resoultion works - execute_process( - COMMAND ${CMAKE_COMMAND} -E copy_directory ${SFML_DIR}/extlibs/freetype.framework ${SFML_DIR}/Frameworks/freetype.framework - WORKING_DIRECTORY ${SFML_DIR} - ) - endif() -elseif (${CMAKE_SYSTEM_NAME} MATCHES "Linux") - set(SFML_URL "http://www.sfml-dev.org/files/SFML-2.4.1-linux-gcc-64-bit.tar.gz") - set(SFML_DIR ${DEPS_DIR}/SFML-2.4.1) - if (NOT EXISTS ${SFML_DIR}) - message("Downloading SFML for Linux 64-bit") - file(DOWNLOAD "${SFML_URL}" "${DEPS_DIR}/sfml.tar.gz") - execute_process( - COMMAND ${CMAKE_COMMAND} -E tar xzf ${DEPS_DIR}/sfml.tar.gz - WORKING_DIRECTORY ${DEPS_DIR} - ) - endif() -else() - set(SFML_URL "http://www.sfml-dev.org/files/SFML-2.4.1-windows-vc14-32-bit.zip") - set(SFML_DIR ${DEPS_DIR}/SFML-2.4.1) - if (NOT EXISTS ${SFML_DIR}) - message("Downloading SFML for Windows 32-bit") - file(DOWNLOAD "${SFML_URL}" "${DEPS_DIR}/sfml.zip") - execute_process( - COMMAND ${CMAKE_COMMAND} -E tar x ${DEPS_DIR}/sfml.zip - WORKING_DIRECTORY ${DEPS_DIR} - ) - endif() -endif() # Define spine-sfml library include_directories(src ${SFML_DIR}/include)