#include "stdafx.h" #include "DNUserSession.h" #include "DnBubbleSystem.h" #include "DnObserverEventMessage.h" #include "EtResourceMng.h" #include "DnPlayerActor.h" #include "DnGameRoom.h" #if !defined( _FINAL_BUILD ) && !defined (__COVERITY__) using namespace BubbleSystem; using namespace boost; class BubbleSystem_unittest:public testing::Test { public: static CDnBubbleSystem* s_pBubbleSystem; static CEtResourceMng* m_pResMng; static CDnPlayerActor* s_pPlayerActor; static CDNGameRoom* s_pRoom; protected: virtual void SetUp() { } virtual void TearDown() { s_pBubbleSystem->RemoveAllBubbles(); } static void SetUpTestCase( void ) { m_pResMng = new CEtResourceMng( false, true ); m_pResMng->AddResourcePath( "r:\\gameres\\resource\\ext" ); CDnTableDB::GetInstance().CreateInstance(); CDnTableDB::GetInstance().Initialize(); s_pBubbleSystem = new CDnBubbleSystem; //// Á÷¾÷ È÷½ºÅ丮´Â ¿ì¼± ºí·Ï ex ¸¦ »ç¿ëÇÏ´Â Á÷¾÷À¸·Î °¡Á¤Çϰí ó¸®ÇÑ´Ù. //vector vlJobHistory; //vlJobHistory.push_back( 4 ); // Ŭ·¯¸¯ //vlJobHistory.push_back( 20 ); // ÆÈ¶óµò ////vlJobHistory.push_back( ); // ¾ÆÁ÷ 2Â÷ ÀüÁ÷ ¸ð¸£¹Ç·Î ÆÈ¶óµòÀÌ »ç¿ëÇÑ´Ù°í °¡Á¤Çϰí Å×À̺í ÀÛ¾÷ ÀÓ½Ã·Î ÇØµÒ. // ÃßÈÄ¿¡´Â CDnMonsterActor µµ Áö¿øµÉ ¿¹Á¤. MAGAReqRoomID Packet; memset( &Packet, 0, sizeof(Packet) ); s_pRoom = new CDNGameRoom( NULL, 0, &Packet ); s_pPlayerActor = new CDnPlayerActor( s_pRoom, 1 ); s_pPlayerActor->SetHP( 100 ); s_pBubbleSystem->Initialize( s_pPlayerActor->GetActorHandle() ); } static void TearDownTestCase( void ) { delete s_pBubbleSystem; delete s_pPlayerActor; delete s_pRoom; CDnTableDB::GetInstance().Finalize(); delete m_pResMng; } }; CDnBubbleSystem* BubbleSystem_unittest::s_pBubbleSystem = NULL; CEtResourceMng* BubbleSystem_unittest::m_pResMng = NULL; CDnPlayerActor* BubbleSystem_unittest::s_pPlayerActor = NULL; CDNGameRoom* BubbleSystem_unittest::s_pRoom = NULL; // ºí·Ï ¼º°ø ¸Þ½ÃÁö ó¸® Å×½ºÆ®. TEST_F( BubbleSystem_unittest, BLOCK_SUCCESS_TEST ) { shared_ptr pNotifyEvent( new CDnBlockSuccessMessage ); shared_ptr pBlockSuccessMessage = shared_polymorphic_downcast( pNotifyEvent ); pBlockSuccessMessage->SetSkillID( 3301 ); s_pBubbleSystem->OnEvent( pNotifyEvent ); // ¹öºí Çϳª Ãß°¡ µÊ. EXPECT_EQ( s_pBubbleSystem->GetBubbleCountByTypeID( 100 ), 1 ); } // ÀÏÁ¤ °¹¼ö ÀÌ»óÀÇ ¹öºíÀÌ ½×¿´À» ¶§ ¹öºíÀ» ¼Ò¸ðÇÏ´Â ½ºÅ³ »ç¿ë Å×½ºÆ®. TEST_F( BubbleSystem_unittest, USE_SKILL_TEST ) { shared_ptr pNotifyEvent( new CDnUseSkillMessage ); shared_ptr pSkillUseEvent = shared_polymorphic_downcast( pNotifyEvent ); // Å×ÀÌºí¿¡ Å×½ºÆ®·Î °¡µð¾ð Æ÷½º¸¦ »ç¿ëÇϱâ À§ÇÑ 100¹ø ¹öºíÀ» 10°³ ÇÊ¿äÇϵµ·Ï ¼³Á¤ÇÑ »óÅÂ. // óÀ½¿£ ¾û¶×ÇÑ ½ºÅ³ »ç¿ë. µ¥ÀÌÅÍ¿¡ ¸ÅÄ¡µÇ´Â À̺¥Æ®°¡ ¾øÀ¸¹Ç·Î ¾Æ¹« Àϵµ ÀϾÁö ¾ÊÀ½. pSkillUseEvent->SetSkillID( 3028 ); // ½¯µå ºí·Î¿ì s_pBubbleSystem->OnEvent( pNotifyEvent ); // 100¹ø ¹öºíÀ» 5°³ Ãß°¡Çسõ°í °¡µð¾ð Æ÷½º »ç¿ë. CDnBubbleSystem::S_CREATE_BUBBLE Info; Info.iBubbleTypeID = 100; Info.fDurationTime = 5.0f; s_pBubbleSystem->AddBubble( Info ); s_pBubbleSystem->AddBubble( Info ); s_pBubbleSystem->AddBubble( Info ); s_pBubbleSystem->AddBubble( Info ); s_pBubbleSystem->AddBubble( Info ); // µ¥ÀÌÅÍ¿¡ ¸ÅÄ¡µÇ´Â ½ºÅ³À» »ç¿ë. µ¥ÀÌÅÍ¿¡ Ãß°¡ µÇ¾î Àִ´ë·Î ÁöÁ¤µÈ ¹öºíÀÌ ¼Ò¸ð µÇ¸ç ½ºÅ³ »ç¿ë. pSkillUseEvent->SetSkillID( 3302 ); // °¡µð¾ð Æ÷½º s_pBubbleSystem->OnEvent( pNotifyEvent ); // ¹öºíÀº »ç¿ëµÇÁö ¾Ê¾ÒÀ¸¹Ç·Î 5°³°¡ ±×´ë·Î ³²´Â´Ù. EXPECT_EQ( s_pBubbleSystem->GetBubbleCountByTypeID( 100 ), 5 ); // 100¹ø ¹öºíÀ» 5°³ ´õ Ãß°¡Çؼ­ Á¶°ÇÀ» ÃæÁ·½ÃŲ ÈÄ °¡µð¾ð Æ÷½º »ç¿ë. // 100¹ø ¹öºíÀ» 5°³ Ãß°¡Çسõ°í °¡µð¾ð Æ÷½º »ç¿ë. s_pBubbleSystem->AddBubble( Info ); s_pBubbleSystem->AddBubble( Info ); s_pBubbleSystem->AddBubble( Info ); s_pBubbleSystem->AddBubble( Info ); s_pBubbleSystem->AddBubble( Info ); pSkillUseEvent->SetSkillID( 3302 ); // °¡µð¾ð Æ÷½º s_pBubbleSystem->OnEvent( pNotifyEvent ); EXPECT_EQ( s_pBubbleSystem->GetBubbleCountByTypeID( 100 ), 0 ); } // ƯÁ¤ ½ºÅ³À» °®°í ÀÖ´Â »óÅ¿¡¼­ ´Ù¸¥ ½ºÅ³À» »ç¿ëÇÏ¿© ºí·ÏÀ» ȹµæÇÏ´Â Á¶°ÇÀÏ °æ¿ì Å×½ºÆ®, TEST_F( BubbleSystem_unittest, OWN_THIS_SKILL_TEST ) { // 3301 ¿ÀÅäºí·Ï EX ¸¦ ȹµæÇßÀ» ¶§ 3021 ºí·Ï ½ºÅ³·Î ºí·ÏÀ» ¼º°øÇßÀ» °æ¿ì ƯÁ¤ ¹öºí Ãß°¡. shared_ptr pNotifyEvent( new CDnBlockSuccessMessage ); shared_ptr pBlockSuccessMessage = shared_polymorphic_downcast( pNotifyEvent ); // ±×³É ºí·Ï ¼º°ø. ¾Æ¹« ¹öºíµµ ¾È ¾òÀ½. pBlockSuccessMessage->SetSkillID( 3021 ); s_pBubbleSystem->OnEvent( pNotifyEvent ); EXPECT_EQ( s_pBubbleSystem->GetBubbleCountByTypeID( 100 ), 0 ); // 3301 ¿ÀÅäºí·Ï EX ¸¦ °®°í ÀÖÀ» ¶§ ºí·Ï ¼º°ø. // 100¹ø ¹öºíÀ» ȹµæÇÑ´Ù. s_pPlayerActor->MASkillUser::AddSkill( 3301, 1, CDnSkill::PVE ); s_pBubbleSystem->OnEvent( pNotifyEvent ); EXPECT_EQ( s_pBubbleSystem->GetBubbleCountByTypeID( 100 ), 1 ); // 3301 ¿ÀÅäºí·Ï EX ¸¦ °®°í ÀÖÀ» ¶§ ÆÐ¸µ ¼º°ø. pNotifyEvent.reset( new CDnParringSuccessMessage ); shared_ptr pParringSuccessMessage = shared_polymorphic_downcast( pNotifyEvent ); pParringSuccessMessage->SetSkillID( 3221 ); // ½ºÅĽº ¿Àºê ÆäÀ̽º s_pBubbleSystem->OnEvent( pParringSuccessMessage ); EXPECT_EQ( s_pBubbleSystem->GetBubbleCountByTypeID( 100 ), 2 ); // 3301 ¿ÀÅäºí·Ï EX ¸¦ °®°í ÀÖÀ» ¶§ ÄðŸÀÓ ÆÐ¸µ ¼º°ø. pNotifyEvent.reset( new CDnCooltimeParringSuccessMessage ); shared_ptr pCooltimeParringSuccessMessage = shared_polymorphic_downcast( pNotifyEvent ); pCooltimeParringSuccessMessage->SetSkillID( 3220 ); // ¿¡¾î¸®¾ó ºí·Ï s_pBubbleSystem->OnEvent( pCooltimeParringSuccessMessage ); EXPECT_EQ( s_pBubbleSystem->GetBubbleCountByTypeID( 100 ), 3 ); } // Ãß°¡µÈ ¹öºíÀÌ ÀÏÁ¤ ½Ã°£ ÇÁ·Î¼¼½º¸¦ µ¹¸é¼­ Á¦´ë·Î ¾ø¾îÁö´ÂÁö Å×½ºÆ®. TEST_F( BubbleSystem_unittest, BUBBLE_PROCESS_TEST ) { CDnBubbleSystem::S_CREATE_BUBBLE Info; Info.iBubbleTypeID = 100; Info.fDurationTime = 3.0f; s_pBubbleSystem->AddBubble( Info ); s_pBubbleSystem->AddBubble( Info ); Info.iBubbleTypeID = 101; s_pBubbleSystem->AddBubble( Info ); Info.fDurationTime = 5.0f; s_pBubbleSystem->AddBubble( Info ); Info.fDurationTime = 7.0f; s_pBubbleSystem->AddBubble( Info ); Info.iBubbleTypeID = 102; Info.fDurationTime = 3.0f; s_pBubbleSystem->AddBubble( Info ); Info.fDurationTime = 4.0f; s_pBubbleSystem->AddBubble( Info ); // 10Ãʰ£ ·çÇÁ µ·´Ù. LOCAL_TIME StartTime = timeGetTime(); LOCAL_TIME PrevTime = 0; while( true ) { LOCAL_TIME LocalTime = timeGetTime()-StartTime; float fDelta = float(StartTime - PrevTime) / 1000.0f; s_pBubbleSystem->Process( LocalTime, fDelta ); if( 10000 < timeGetTime() - StartTime ) break; PrevTime = LocalTime; } EXPECT_EQ( s_pBubbleSystem->GetBubbleCountByTypeID( 100 ), 0 ); EXPECT_EQ( s_pBubbleSystem->GetBubbleCountByTypeID( 101 ), 0 ); EXPECT_EQ( s_pBubbleSystem->GetBubbleCountByTypeID( 102 ), 0 ); } #endif // #if !defined( _FINAL_BUILD )