2024-12-21 10:04:04 +08:00
// DnTableVerifier.cpp : Defines the entry point for the console application.
//
// R:\GameRes KOR SkillTable --gtest_filter=skill_data_test.* --gtest_output="xml:result.xml"
# include "stdafx.h"
# include "EtActionCoreMng.h"
wstring g_strResourcePath ;
string g_strResourcePathA ;
map < wstring , string > g_mapExtFolderPath ;
wstring g_strNation ;
string g_strNationExtFolder ;
string g_strTableName ;
extern CEtActionCoreMng g_ActionCoreMng ;
// <20> ش<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ȿ<EFBFBD> <C8BF> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> .
void GatherConcernedExt ( /*IN*/ const char * pTableFileFullName , /*IN OUT*/ vector < string > & vlFilePathsToVerify , /*IN OUT*/ string & strTableFullPath )
{
// <20> 켱 <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ҽ <EFBFBD> <D2BD> <EFBFBD> <20> ִ<EFBFBD> <20> <> <EFBFBD> ̺<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> Ʈ<EFBFBD> <C6AE> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ִ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> Ʈ<EFBFBD> <C6AE> <20> ҷ<EFBFBD> <D2B7> 鿩<EFBFBD> <E9BFA9>
// Ư<> <C6AF> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ִ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> 켱<EFBFBD> ̰<EFBFBD> <20> ű<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ҽ <EFBFBD> <D2BD> <EFBFBD> <20> ִ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ϸ<EFBFBD> <20> ȴ<EFBFBD> .
// _ <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ϸ<EFBFBD> id <20> ߺ <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ̴<EFBFBD> .
string strNationExtFolder = g_strNationExtFolder ;
strTableFullPath . clear ( ) ;
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ext <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ѵ <EFBFBD> .
// <20> <> <EFBFBD> ҽ <EFBFBD> <20> Ŵ<EFBFBD> <C5B4> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ϵ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ˻<EFBFBD> <CBBB> ϵ<EFBFBD> <CFB5> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> Ǿ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> .
//map<wstring, string>::iterator iter = g_mapExtFolderPath.begin();
//for( iter; iter != g_mapExtFolderPath.end(); ++iter )
// CEtResourceMng::GetInstance().AddResourcePath( iter->second.c_str() );
//vector<CFileNameString> vlBaseFileList;
//CEtResourceMng::GetInstance().FindFileListInFolder( g_mapExtFolderPath[ L"KOR" ].c_str(), "*.ext", vlBaseFileList );
vector < CFileNameString > vlTargetNationFileList ;
CEtResourceMng : : GetInstance ( ) . FindFileListInFolder ( strNationExtFolder . c_str ( ) , " *.dnt " , vlTargetNationFileList ) ;
char acTableFileName [ MAX_PATH ] = { 0 } ;
_GetFileName ( acTableFileName , _countof ( acTableFileName ) , pTableFileFullName ) ;
char acFilePrefixToVerify [ MAX_PATH ] = { 0 } ;
_GetFileName ( acFilePrefixToVerify , _countof ( acFilePrefixToVerify ) , pTableFileFullName ) ;
_strlwr_s ( acFilePrefixToVerify ) ;
int nLength = ( int ) strlen ( acFilePrefixToVerify ) ;
acFilePrefixToVerify [ nLength ] = ' _ ' ;
acFilePrefixToVerify [ nLength + 1 ] = 0 ;
vlFilePathsToVerify . clear ( ) ;
vector < string > vlFileNamesToVerify ;
// <20> 켱 Ÿ<> <C5B8> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ϵ<EFBFBD> <CFB5> <EFBFBD> Ǯ <20> н<EFBFBD> <D0BD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> .
for ( DWORD i = 0 ; i < vlTargetNationFileList . size ( ) ; i + + )
{
char acTargetNationFileName [ MAX_PATH ] = { 0 } ;
_GetFileName ( acTargetNationFileName , _countof ( acTargetNationFileName ) , vlTargetNationFileList [ i ] . c_str ( ) ) ;
_strlwr_s ( acTargetNationFileName ) ;
string strTargetNationFileName ( acTargetNationFileName ) ;
string : : size_type iPrefixPos = strTargetNationFileName . find_first_of ( ' _ ' ) ;
string strTargetNationFilePrefix ;
if ( string : : npos ! = iPrefixPos )
strTargetNationFilePrefix = strTargetNationFileName . substr ( 0 , iPrefixPos + 1 ) ;
if ( strTargetNationFilePrefix = = acFilePrefixToVerify )
//if( strstr( acTargetNationFileName, acFilePrefixToVerify ) )
{
CFileNameString szFullPath ;
szFullPath = CEtResourceMng : : GetInstance ( ) . GetFullName ( vlTargetNationFileList [ i ] . c_str ( ) ) ;
vlFilePathsToVerify . push_back ( szFullPath . c_str ( ) ) ;
vlFileNamesToVerify . push_back ( acTargetNationFileName ) ;
}
if ( strTableFullPath . empty ( ) & & ( 0 = = _stricmp ( acTargetNationFileName , acTableFileName ) ) )
{
CFileNameString szFullPath ;
szFullPath = CEtResourceMng : : GetInstance ( ) . GetFullName ( pTableFileFullName ) ;
strTableFullPath . assign ( szFullPath . c_str ( ) ) ;
}
}
//// <20> <> <EFBFBD> ̽<EFBFBD> <20> <> <EFBFBD> ҽ <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ϵ<EFBFBD> <CFB5> <EFBFBD> <20> <> <20> ִ<EFBFBD> <D6B4> <EFBFBD> <20> <> <EFBFBD> ƺ<EFBFBD> <C6BA> <EFBFBD> .
//// <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> ̸<EFBFBD> <CCB8> ̶<EFBFBD> <CCB6> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ҽ <EFBFBD> <D2BD> <EFBFBD> <20> 켱<EFBFBD> ̹Ƿ<CCB9> <20> ߰<EFBFBD> <DFB0> <EFBFBD> <EFBFBD> <EFBFBD> <20> ʴ´ <CAB4> .
//for( DWORD i = 0; i < vlBaseFileList.size(); ++i )
//{
// char acBaseFileName[ MAX_PATH ] = { 0 };
// _GetFileName( acBaseFileName, vlBaseFileList[ i ].c_str() );
// _strlwr_s( acBaseFileName );
// if( strstr( acBaseFileName, acFilePrefixToVerify ) && strcmp( acBaseFileName, acFilePrefixToVerify ) )
// {
// vector<string>::iterator iter = find( vlFileNamesToVerify.begin(), vlFileNamesToVerify.end(), acBaseFileName );
// if( iter == vlFileNamesToVerify.end() )
// {
// CFileNameString szFullPath;
// szFullPath = CEtResourceMng::GetInstance().GetFullName( vlBaseFileList[i].c_str() );
// vlFilePathsToVerify.push_back( szFullPath.c_str() );
// }
// }
// if( strTableFullPath.empty() && (0 == _stricmp( acBaseFileName, acTableFileName )) )
// {
// CFileNameString szFullPath;
// szFullPath = CEtResourceMng::GetInstance().GetFullName( pTableFileFullName );
// strTableFullPath.assign( szFullPath.c_str() );
// }
//}
//// <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> .
//iter = g_mapExtFolderPath.begin();
//for( iter; iter != g_mapExtFolderPath.end(); ++iter )
//{
// if( iter->first != g_strNation )
// CEtResourceMng::GetInstance().RemoveResourcePath( iter->second.c_str() );
//}
}
DNTableFileFormat * LoadExtFile ( const char * pTableFileFullName , char * pInverseSearchLabelFilter /* = NULL*/ )
{
DNTableFileFormat * pTable = NULL ;
vector < string > vlFileSeriesFilePaths ;
string strTableFullPath ;
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ̺<EFBFBD> <CCBA> ̶<EFBFBD> <CCB6> <EFBFBD> ItemTable_Quest, ItemTable_Event, ItemTable_Equipment, ItemTable_Cash <20> ø<EFBFBD> <C3B8> <EFBFBD> <EEBAB0> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> Ƽ <EFBFBD> <20> ε<EFBFBD> <20> <> .
GatherConcernedExt ( pTableFileFullName , vlFileSeriesFilePaths , strTableFullPath ) ;
//_ASSERT( false == strTableFullPath.empty() );
pTable = new DNTableFileFormat ;
pTable - > Load ( strTableFullPath . c_str ( ) ) ;
// dnt <20> <> <EFBFBD> ˿<EFBFBD> <CBBF> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ã<> ƾ<EFBFBD> <20> ϴ°<CFB4> <20> ־<EFBFBD> <D6BE> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> . (GetItemIDListFromField() <20> Լ<EFBFBD> <D4BC> <EFBFBD> ã<> <C3A3> <20> <> )
pTable - > SetGenerationInverseLabel ( pInverseSearchLabelFilter ) ;
for ( int i = 0 ; i < ( int ) vlFileSeriesFilePaths . size ( ) ; + + i )
{
pTable - > Load ( vlFileSeriesFilePaths . at ( i ) . c_str ( ) , false ) ;
}
return pTable ;
}
// <20> ۷ ι <DBB7> ȯ<> <C8AF> <20> <> <EFBFBD> <EFBFBD>
class gtest_global_environment : public : : testing : : Environment
{
virtual void SetUp ( )
{
CEtResourceMng : : CreateInstance ( ) ;
//CEtResourceMng::GetInstance().AddResourcePath( "R:\\GameRes\\Resource\\SharedEffect" );
//CEtResourceMng::GetInstance().AddResourcePath( "R:\\GameRes\\MapData" );
//CEtResourceMng::GetInstance().AddResourcePath( "R:\\GameRes\\MapData\\Resource" );
//CEtResourceMng::GetInstance().AddResourcePath( "R:\\GameRes\\MapData\\Resource\\Prop", true );
//CEtResourceMng::GetInstance().AddResourcePath( "R:\\GameRes\\MapData\\Resource\\Envi" );
//CEtResourceMng::GetInstance().AddResourcePath( "R:\\GameRes\\MapData\\Resource\\Sound", true );
//CEtResourceMng::GetInstance().AddResourcePath( "R:\\GameRes\\Resource" );
//CEtResourceMng::GetInstance().AddResourcePath( "R:\\GameRes\\Resource\\Char", true );
char acBuffer [ MAX_PATH ] = { 0 } ;
WideCharToMultiByte ( CP_ACP , NULL , g_strResourcePath . c_str ( ) , ( int ) _tcslen ( g_strResourcePath . c_str ( ) ) ,
acBuffer , sizeof ( acBuffer ) , NULL , NULL ) ;
string strResourcePath ( acBuffer ) ;
//map<wstring, string>::iterator iter = g_mapExtFolderPath.begin();
//for( iter; iter != g_mapExtFolderPath.end(); ++iter )
// CEtResourceMng::GetInstance().AddResourcePath( iter->second.c_str() );
CEtResourceMng : : GetInstance ( ) . AddResourcePath ( strResourcePath + " \\ Resource \\ Char " , true ) ;
CEtResourceMng : : GetInstance ( ) . AddResourcePath ( g_strNationExtFolder . c_str ( ) ) ;
//CEtResourceMng::GetInstance().AddResourcePathByCodePage( "R:\\GameRes\\Resource\\Ext" );
//CEtResourceMng::GetInstance().AddResourcePath( "R:\\GameRes\\Resource\\Weapon" );
//CEtResourceMng::GetInstance().AddResourcePath( "R:\\GameRes\\Resource\\Item", true );
//CEtResourceMng::GetInstance().AddResourcePath( "R:\\GameRes\\Resource\\Sound", true );
//CEtResourceMng::GetInstance().AddResourcePath( "R:\\GameRes\\Resource\\Particle" );
//CEtResourceMng::GetInstance().AddResourcePath( "R:\\GameRes\\Resource\\UI", true );
//CEtResourceMng::GetInstance().AddResourcePath( "R:\\GameRes\\Resource\\Effect" );
//CEtResourceMng::GetInstance().AddResourcePath( "R:\\GameRes\\Resource\\fonts" );
//CEtResourceMng::GetInstance().AddResourcePath( "R:\\GameRes\\Resource\\Script", true );
//CEtResourceMng::GetInstance().AddResourcePath( "R:\\GameRes\\Resource\\Dmv" );
//CEtResourceMng::GetInstance().AddResourcePathByCodePage( "R:\\GameRes\\Resource\\Npc" );
//CEtResourceMng::GetInstance().AddResourcePathByCodePage( "R:\\GameRes\\Resource\\Quest" );
//CEtResourceMng::GetInstance().AddResourcePath( "R:\\GameRes\\Resource\\StateEffect" );
//CEtResourceMng::GetInstance().AddResourcePath( "R:\\GameRes\\Resource\\UIString" );
g_ActionCoreMng . Initialize ( ) ;
} ;
} ;
// <20> <> <EFBFBD> <EFBFBD> <20> <EFBFBD> Ʈ <20> <> Verifier <20> <> ü<EFBFBD> <C3BC> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ó<> <C3B3> <EFBFBD> ϴ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> .
// R:\GameRes JPN GachaJP --gtest_filter=gachapon_test.* --gtest_output="xml:result.xml"
// [<5B> <> <EFBFBD> ҽ <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ] [<5B> ˻<EFBFBD> <CBBB> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> ] [<5B> ˻<EFBFBD> <CBBB> <EFBFBD> <20> <> <EFBFBD> ̺<EFBFBD> <20> <> <EFBFBD> ϸ<EFBFBD> ] [gtest <20> <> <EFBFBD> ڵ<EFBFBD> ]
// [<5B> ˻<EFBFBD> <CBBB> <EFBFBD> <20> <> <EFBFBD> ̺<EFBFBD> <20> <> <EFBFBD> ϸ<EFBFBD> ] <20> <> multitable id duplicate test <20> <> <20> <> <EFBFBD> 쿣 <20> <> <EFBFBD> õ<EFBFBD> <20> <> <EFBFBD> ̺<EFBFBD> <CCBA> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> Ƽ <EFBFBD> <20> <EFBFBD> Ʈ <20> Ѵ <EFBFBD> . ; <20> <> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ڷ<EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ̺<EFBFBD> <CCBA> <EFBFBD> <20> Է¹´ <DEB4> . (aaa;bbb ...)
// R:\GameRes MAIN aaa;ItemTable --gtest_filter=multitable_id_duplicate_test.* --gtest_output="xml:result.xml"
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> ݿ<EFBFBD> <DDBF> <EFBFBD> <20> ̽<EFBFBD> #26504
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> ̺<EFBFBD> id <20> ߺ <EFBFBD> <20> ˻<EFBFBD> <20> <> <20> <> <EFBFBD> <EFBFBD> <20> <EFBFBD> Ʈ <20> <> <EFBFBD> <EFBFBD> .
// R:\Gameres MAIN EnchantJewelTable;ItemCompoundGroupTable;ItemCompoundTable;ItemDropGroupTable;ItemDropTable;ItemTable;MonsterGroupTable;MonsterSkillTable;MonsterTable;PartsTable;PotentialJewelTable;PotentialTable;SetItemTable;SkillLevelTable;SkillTable;testtable;VehicleTable;WeaponTable --gtest_filter=*.* --gtest_output="xml:D:\testresult.xml
int _tmain ( int argc , _TCHAR * argv [ ] )
{
g_strResourcePath . assign ( argv [ 1 ] ) ;
char acBuffer [ MAX_PATH ] = { 0 } ;
WideCharToMultiByte ( CP_ACP , NULL , g_strResourcePath . c_str ( ) , ( int ) _tcslen ( g_strResourcePath . c_str ( ) ) ,
acBuffer , sizeof ( acBuffer ) , NULL , NULL ) ;
g_strResourcePathA . assign ( acBuffer ) ;
g_mapExtFolderPath . insert ( make_pair ( L " MAIN " , g_strResourcePathA + " \\ Resource \\ Ext " ) ) ;
g_mapExtFolderPath . insert ( make_pair ( L " KOR " , g_strResourcePathA + " \\ Resource_KOR \\ Ext " ) ) ;
g_mapExtFolderPath . insert ( make_pair ( L " JPN " , g_strResourcePathA + " \\ Resource_JPN \\ Ext " ) ) ;
g_mapExtFolderPath . insert ( make_pair ( L " CHN " , g_strResourcePathA + " \\ Resource_CHN \\ Ext " ) ) ;
g_mapExtFolderPath . insert ( make_pair ( L " USA " , g_strResourcePathA + " \\ Resource_USA \\ Ext " ) ) ;
g_mapExtFolderPath . insert ( make_pair ( L " TWN " , g_strResourcePathA + " \\ Resource_TWN \\ Ext " ) ) ;
g_mapExtFolderPath . insert ( make_pair ( L " SIN " , g_strResourcePathA + " \\ Resource_SIN \\ Ext " ) ) ;
g_mapExtFolderPath . insert ( make_pair ( L " THA " , g_strResourcePathA + " \\ Resource_THA \\ Ext " ) ) ;
g_mapExtFolderPath . insert ( make_pair ( L " IDN " , g_strResourcePathA + " \\ Resource_IDN \\ Ext " ) ) ;
g_mapExtFolderPath . insert ( make_pair ( L " RUS " , g_strResourcePathA + " \\ Resource_RUS \\ Ext " ) ) ;
g_mapExtFolderPath . insert ( make_pair ( L " EU " , g_strResourcePathA + " \\ Resource_EU \\ Ext " ) ) ;
// <20> <> <EFBFBD> ڿ<EFBFBD> <DABF> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> Ƽ <DEBE> <20> ߶<EFBFBD> <DFB6> <EFBFBD> <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <20> Ѱ<EFBFBD> <D1B0> <EFBFBD> .
map < wstring , string > : : iterator iter = g_mapExtFolderPath . find ( argv [ 2 ] ) ;
if ( g_mapExtFolderPath . end ( ) ! = iter )
g_strNationExtFolder = iter - > second ;
else
{
_tprintf ( _T ( " [DnTableVerifier] Invalid nation setting!! Running with korea resource path!! \n \n " ) ) ;
g_strNationExtFolder = g_mapExtFolderPath [ L " KOR " ] ;
}
g_strNation = iter - > first ;
char * pTableName = acBuffer ;
int iTableNameLength = ( int ) _tcslen ( argv [ 3 ] ) ;
bool bTableNameBufferAllocated = false ;
if ( sizeof ( acBuffer ) < = iTableNameLength )
{
pTableName = new char [ iTableNameLength + 1 ] ;
bTableNameBufferAllocated = true ;
}
SecureZeroMemory ( pTableName , ( iTableNameLength + 1 ) ) ;
WideCharToMultiByte ( CP_ACP , NULL , argv [ 3 ] , ( int ) _tcslen ( argv [ 3 ] ) ,
pTableName , iTableNameLength , NULL , NULL ) ;
g_strTableName . assign ( pTableName ) ;
: : testing : : AddGlobalTestEnvironment ( new gtest_global_environment ) ;
printf ( " [DnTableVerifier] Running with \" %s \" table folder \n " , g_strNationExtFolder . c_str ( ) ) ;
: : testing : : InitGoogleTest ( & argc , argv ) ;
int iExitCode = RUN_ALL_TESTS ( ) ;
g_ActionCoreMng . Finalize ( ) ;
if ( bTableNameBufferAllocated )
delete [ ] pTableName ;
return iExitCode ;
}