DragonNest/Client/DnTableVerifier/multitable_id_duplicate_test.cpp

166 lines
10 KiB
C++
Raw Normal View History

2024-12-20 16:56:44 +08:00
<EFBFBD><EFBFBD>#include "StdAfx.h"
#include "multitable_id_duplicate_test.h"
multitable_id_duplicate_test::multitable_id_duplicate_test(void)
{
}
multitable_id_duplicate_test::~multitable_id_duplicate_test(void)
{
}
// <EFBFBD><EFBFBD> ¸<EFBFBD> ȹ<EFBFBD><EFBFBD> <EFBFBD>0<EFBFBD>T<EFBFBD>/t<EFBFBD><EFBFBD>
void multitable_id_duplicate_test::SetUp( void )
{
}
void multitable_id_duplicate_test::TearDown( void )
{
}
// ¸<EFBFBD> <EFBFBD><EFBFBD> ȴ<EFBFBD><EFBFBD><EFBFBD> t<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>0<EFBFBD>T<EFBFBD>/t<EFBFBD><EFBFBD>
void multitable_id_duplicate_test::SetUpTestCase( void )
{
}
void multitable_id_duplicate_test::TearDownTestCase( void )
{
}
TEST_F( multitable_id_duplicate_test, TABLE_ID_DUPLICATE_TEST )
{
string strTableFileName;
vector<string> vlExtFilesToVerify;
vector<std::string> tokens;
string delimiters = ";";
TokenizeA( g_strTableName, tokens, delimiters );
std::vector<std::string>::iterator iter = tokens.begin();
for ( ; iter != tokens.end(); ++iter)
{
vlExtFilesToVerify.push_back( *iter );
}
int iNumExtToVerify = (int)vlExtFilesToVerify.size();
for( int iIndex = 0; iIndex < iNumExtToVerify; ++iIndex )
{
strTableFileName = vlExtFilesToVerify.at( iIndex );
strTableFileName.append( ".dnt" );
vector<string> vlFilePathsToVerify;
string strTableFullPath;
GatherConcernedExt( strTableFileName.c_str(), vlFilePathsToVerify, strTableFullPath );
// <EFBFBD><EFBFBD>D<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> (Ӥ<EFBFBD><EFBFBD> X՘<EFBFBD>ij <EFBFBD><EFBFBD><EFBFBD><EFBFBD>t<EFBFBD> t<EFBFBD> L<EFBFBD>t<EFBFBD><EFBFBD>@<EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>t<EFBFBD> D<EFBFBD>Ȳ<EFBFBD><EFBFBD>\<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>`<EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
if( vlFilePathsToVerify.empty() )
continue;
// vlFilePathsToVerify X<EFBFBD> x<EFBFBD>q<EFBFBD><EFBFBD><EFBFBD>. D<EFBFBD>t<EFBFBD><EFBFBD><EFBFBD> ɩ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>D<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> t<EFBFBD><EFBFBD><EFBFBD> D<EFBFBD>t<EFBFBD><EFBFBD><EFBFBD> <EFBFBD>Ő<EFBFBD> L<EFBFBD>t<EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>x<EFBFBD><EFBFBD><EFBFBD> L<EFBFBD><EFBFBD>0<EFBFBD> <EFBFBD>t<EFBFBD>.
// -1 t<EFBFBD>t<EFBFBD> _ <EFBFBD> <EFBFBD>Ŕ<EFBFBD> <EFBFBD>Ƙ<EFBFBD> L<EFBFBD>t<EFBFBD><EFBFBD> <EFBFBD>.
vector<string> vlFilePaths = vlFilePathsToVerify;
int iTableFilePathIndex = -1;
// <EFBFBD><EFBFBD>L<EFBFBD><EFBFBD><EFBFBD> 0<EFBFBD>\<EFBFBD> \<EFBFBD>ܴt<EFBFBD><EFBFBD> D<EFBFBD>t<EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>l<EFBFBD>X<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> ɩ<EFBFBD>t<EFBFBD><EFBFBD> \<EFBFBD>ܴ\<EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD>.
DNTableFileFormat* pSox = new DNTableFileFormat;
pSox->Load( strTableFileName.c_str(), false );
// ̹}<EFBFBD> <EFBFBD>Ƙ<EFBFBD> L<EFBFBD>t<EFBFBD><EFBFBD> <EFBFBD><<EFBFBD>\<EFBFBD> <EFBFBD>|<EFBFBD>t<EFBFBD> <EFBFBD>X<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD>t<EFBFBD> <EFBFBD>¬<EFBFBD><EFBFBD><EFBFBD> <EFBFBD> <EFBFBD><EFBFBD> ]<EFBFBD> <EFBFBD>|<EFBFBD>D<EFBFBD> 0<EFBFBD><EFBFBD><<EFBFBD>\<EFBFBD> <EFBFBD>̬<EFBFBD>\<EFBFBD><EFBFBD><EFBFBD>.
if( 0 == pSox->GetFieldCount() )
{
delete pSox;
pSox = new DNTableFileFormat;
pSox->Load( vlFilePathsToVerify.back().c_str(), false );
// D<EFBFBD>P<EFBFBD><EFBFBD><EFBFBD><EFBFBD>t<EFBFBD> <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> ]<EFBFBD> <EFBFBD>|<EFBFBD>@<EFBFBD> <EFBFBD>p<EFBFBD>\<EFBFBD><EFBFBD><EFBFBD>.
vlFilePathsToVerify.pop_back();
iTableFilePathIndex = (int)vlFilePaths.size()-1;
}
multimap<int, int> mmapIDToTableNameIndex;
set<int> setItemIDs;
for( int i = 0; i < pSox->GetItemCount(); ++i )
{
setItemIDs.insert( pSox->GetItemID( i ) );
mmapIDToTableNameIndex.insert( make_pair( pSox->GetItemID( i ), iTableFilePathIndex ) );
}
TCHAR atcTableSeriesFileName[ MAX_PATH ] = { 0 };
TCHAR atcTableFileName[ MAX_PATH ] = { 0 };
TCHAR atcFileName[ MAX_PATH ] = { 0 };
TCHAR atcFileExt[ MAX_PATH ] = { 0 };
TCHAR atcBuf[ 256 ] = { 0 };
for( DWORD i=0; i< vlFilePathsToVerify.size(); i++ )
{
DNTableFileFormat* pAddition = new DNTableFileFormat;
pAddition->Load( vlFilePathsToVerify[ i ].c_str(), false );
if( pSox->GetFieldCount() != pAddition->GetFieldCount() )
{
MultiByteToWideChar( CP_ACP, 0, strTableFileName.c_str(), -1, atcTableSeriesFileName, MAX_PATH );
MultiByteToWideChar( CP_ACP, 0, vlFilePathsToVerify[ i ].c_str(), -1, atcTableFileName, MAX_PATH );
_stprintf_s( atcBuf, _T("{TableSeriesName:%s, TableFilePath:%s, Note:L<>t<EFBFBD><14> <08>t<EFBFBD><14> /<2F><18><00> <>Ȳ<EFBFBD><C8B2>.}"), atcTableSeriesFileName, atcTableFileName );
SCOPED_TRACE( atcBuf );
EXPECT_TRUE( pSox->GetFieldCount() == pAddition->GetFieldCount() );
continue;
}
set<int> setAdditionItemIDs;
for( int k = 0; k < pAddition->GetItemCount(); ++k )
setAdditionItemIDs.insert( pAddition->GetItemID( k ) );
vector<int> vlIntersection;
set_intersection( setItemIDs.begin(), setItemIDs.end(),
setAdditionItemIDs.begin(), setAdditionItemIDs.end(),
back_inserter( vlIntersection ) );
for( int k = 0; k < (int)vlIntersection.size(); ++k )
{
// <EFBFBD><EFBFBD><EFBFBD> L<EFBFBD>t<EFBFBD><EFBFBD> <EFBFBD>|<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>x<EFBFBD><EFBFBD>?
pair<multimap<int, int>::iterator, multimap<int, int>::iterator> iter_pair = mmapIDToTableNameIndex.equal_range( vlIntersection.at(k) );
multimap<int, int>::iterator iter = iter_pair.first;
string strExistingIDFilePath;
if( -1 < iter->second )
strExistingIDFilePath = vlFilePaths.at( iter->second );
else
strExistingIDFilePath = strTableFileName;
MultiByteToWideChar( CP_ACP, 0, strExistingIDFilePath.c_str(), -1, atcTableSeriesFileName, MAX_PATH );
MultiByteToWideChar( CP_ACP, 0, vlFilePathsToVerify[ i ].c_str(), -1, atcTableFileName, MAX_PATH );
//_stprintf_s( atcBuf, _T("{ExistingFilePath:%s, TableFilePath:%s, ID:%d, Note:L<>t<EFBFBD><14> D<>t<EFBFBD><14><00> <11><><EFBFBD><18><>ŵ<EFBFBD>Ȳ<EFBFBD><C8B2>.}"), atcTableSeriesFileName,
// atcTableFileName, vlIntersection.at(k) );
_tsplitpath_s( atcTableFileName, NULL, 0, NULL, 0, atcFileName, _countof(atcFileName), atcFileExt, _countof(atcFileName) );
tstring strFileName( atcFileName );
strFileName += atcFileExt;
_stprintf_s( atcBuf, _T("{TablenName:%s, Index:%d, Note:L<>t<EFBFBD><14> D<>t<EFBFBD><14><00> <11><><EFBFBD><18><>ŵ<EFBFBD>Ȳ<EFBFBD><C8B2>.}"), strFileName.c_str(), vlIntersection.at(k) );
SCOPED_TRACE( atcBuf );
EXPECT_TRUE( vlIntersection.empty() );
}
for( int k = 0; k < pAddition->GetItemCount(); ++k )
{
setItemIDs.insert( pAddition->GetItemID( k ) );
mmapIDToTableNameIndex.insert( make_pair( pAddition->GetItemID( k ), i ) );
}
delete pAddition;
}
delete pSox;
}
}
//INSTANTIATE_TEST_CASE_P( SELECTED_TABLE, multitable_id_duplicate_test, ValuesIn() );