#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) { } // ¸Å Å×½ºÆ® ¸¶´Ù ÃʱâÈ­/ÇØÁ¦ void multitable_id_duplicate_test::SetUp( void ) { } void multitable_id_duplicate_test::TearDown( void ) { } // Å×½ºÆ® ÄÉÀ̽º Àüü¿¡ ÇØ´çÇÏ´Â ÃʱâÈ­/ÇØÁ¦ 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 vlExtFilesToVerify; vector tokens; string delimiters = ";"; TokenizeA( g_strTableName, tokens, delimiters ); std::vector::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 vlFilePathsToVerify; string strTableFullPath; GatherConcernedExt( strTableFileName.c_str(), vlFilePathsToVerify, strTableFullPath ); // ¸ð¾ÆÁø Ç® ÆÐ½º°¡ Çϳªµµ ¾ø´Ù¸é ÀÌ Å×À̺íÀº ³ª´²Áø °ÍÀÌ ¾Æ´Ï¹Ç·Î °ËÁõÇÒ Çʿ䰡 ¾ø´Ù. if( vlFilePathsToVerify.empty() ) continue; // vlFilePathsToVerify ÀÇ À妽º. ¾ÆÀ̵𰡠ÁßøµÇ¾úÀ» °æ¿ì ÇØ´ç ¾ÆÀ̵𰡠¾î´À Å×À̺í Ãâ½ÅÀÎÁö ¾Ë¾Æ³»±â À§ÇØ. // -1 À̸é _ °¡ ¾ø´Â ¿ø·¡ Å×À̺í À̸§. vector vlFilePaths = vlFilePathsToVerify; int iTableFilePathIndex = -1; // óÀ½¿¡ µû·Î ·ÎµåÇØ¼­ ¾ÆÀ̵ð Áߺ¹ üũÇϰí ÈÄ¿¡ ÁßÃ¸ÇØ¼­ ·ÎµåÇÑ ÈÄ ·çÇÁ ¹Ýº¹. DNTableFileFormat* pSox = new DNTableFileFormat; pSox->Load( strTableFileName.c_str(), false ); // ¸¸¾à ¿ø·¡ Å×À̺í À̸§À¸·Î ÆÄÀÏÀÌ Á¸ÀçÇÏÁö ¾Ê´Â´Ù¸é ½Ã¸®Áî Áß ¸Ç ³¡ ÆÄÀÏÀ» ±âÁØÀ¸·Î ó¸®ÇÑ´Ù. if( 0 == pSox->GetFieldCount() ) { delete pSox; pSox = new DNTableFileFormat; pSox->Load( vlFilePathsToVerify.back().c_str(), false ); // ºñ±³´ë»óÀÌ µÇ´Â ¸Ç ³¡ ÆÄÀÏÀº Á¦°ÅÇÑ´Ù. vlFilePathsToVerify.pop_back(); iTableFilePathIndex = (int)vlFilePaths.size()-1; } multimap mmapIDToTableNameIndex; set 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:Å×ÀÌºí ·¹ÀÌºí °¹¼ö°¡ ´Ù¸¨´Ï´Ù.}"), atcTableSeriesFileName, atcTableFileName ); SCOPED_TRACE( atcBuf ); EXPECT_TRUE( pSox->GetFieldCount() == pAddition->GetFieldCount() ); continue; } set setAdditionItemIDs; for( int k = 0; k < pAddition->GetItemCount(); ++k ) setAdditionItemIDs.insert( pAddition->GetItemID( k ) ); vector vlIntersection; set_intersection( setItemIDs.begin(), setItemIDs.end(), setAdditionItemIDs.begin(), setAdditionItemIDs.end(), back_inserter( vlIntersection ) ); for( int k = 0; k < (int)vlIntersection.size(); ++k ) { // ¾îµð Å×ÀÌºí ÆÄÀÏ Ãâ½ÅÀΰ¡? pair::iterator, multimap::iterator> iter_pair = mmapIDToTableNameIndex.equal_range( vlIntersection.at(k) ); multimap::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:Å×ÀÌºí ¾ÆÀ̵𰡠Áߺ¹µÇ¾ú½À´Ï´Ù.}"), 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:Å×ÀÌºí ¾ÆÀ̵𰡠Áߺ¹µÇ¾ú½À´Ï´Ù.}"), 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() );