diff options
Diffstat (limited to 'unittests/dmxtest/dmxtest_vcdtodme.cpp')
| -rw-r--r-- | unittests/dmxtest/dmxtest_vcdtodme.cpp | 110 |
1 files changed, 110 insertions, 0 deletions
diff --git a/unittests/dmxtest/dmxtest_vcdtodme.cpp b/unittests/dmxtest/dmxtest_vcdtodme.cpp new file mode 100644 index 0000000..900b310 --- /dev/null +++ b/unittests/dmxtest/dmxtest_vcdtodme.cpp @@ -0,0 +1,110 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +// $NoKeywords: $ +// +//=============================================================================// + +#include "unitlib/unitlib.h" +#include "datamodel/dmelement.h" +#include "movieobjects/movieobjects.h" +#include "datamodel/idatamodel.h" +#include "tier1/utlbuffer.h" +#include "filesystem.h" +#include "movieobjects/dmelog.h" +#include "choreoscene.h" +#include "choreoevent.h" +#include "iscenetokenprocessor.h" +#include "tier1/tokenreader.h" +#include "characterset.h" +#include "movieobjects/dmx_to_vcd.h" +#include "tier3/scenetokenprocessor.h" +#include "tier2/tier2.h" + +char const *vcdtestfile = "dmxtest.vcd"; + +void RunSceneToDmxTests( CChoreoScene *scene ) +{ + DmFileId_t fileid = g_pDataModel->FindOrCreateFileId( scene->GetFilename() ); + CDmeFilmClip *dmx = CreateElement< CDmeFilmClip >( scene->GetFilename(), fileid ); + Assert( dmx ); + + bool success = ConvertSceneToDmx( scene, dmx ); + Assert( success ); + + CChoreoScene *scene2 = new CChoreoScene( NULL ); + scene2->SetFileName( scene->GetFilename() ); + + success = ConvertDmxToScene( dmx, scene2 ); + Assert( success ); + + char sz[ 512 ]; + Q_StripExtension( scene->GetFilename(), sz, sizeof( sz ) ); + Q_strncat( sz, "_2.vcd", sizeof( sz ), COPY_ALL_CHARACTERS ); + scene2->SaveToFile( sz ); + + delete scene2; + + g_pDataModel->RemoveFileId( fileid ); +} + +DEFINE_TESTCASE_NOSUITE( DmxTestVcdToDme ) +{ + Msg( "Running .vcd (faceposer) to dmx tests\n" ); + +#ifdef _DEBUG + int nStartingCount = g_pDataModel->GetAllocatedElementCount(); +#endif + + CDisableUndoScopeGuard guard; + + g_pDmElementFramework->BeginEdit(); + + const char *pFileName = vcdtestfile; + char pFullPathName[ MAX_PATH ]; + char pDir[ MAX_PATH ]; + if ( g_pFullFileSystem->GetCurrentDirectory( pDir, sizeof( pDir ) ) ) + { + V_ComposeFileName( pDir, vcdtestfile, pFullPathName, sizeof( pFullPathName ) ); + V_RemoveDotSlashes( pFullPathName ); + pFileName = pFullPathName; + } + + CUtlBuffer buf; + if ( g_pFullFileSystem->ReadFile( pFileName, NULL, buf ) ) + { + SetTokenProcessorBuffer( (char *)buf.Base() ); + CChoreoScene *scene = ChoreoLoadScene( pFileName, NULL, GetTokenProcessor(), NULL ); + if ( scene ) + { + RunSceneToDmxTests( scene ); + delete scene; + } + } + else + { + Msg( "Unable to load test file '%s'\n", pFileName ); + } + + g_pDataModel->ClearUndo(); + +#ifdef _DEBUG + int nEndingCount = g_pDataModel->GetAllocatedElementCount(); + AssertEquals( nEndingCount, nStartingCount ); + if ( nEndingCount != nStartingCount ) + { + for ( DmElementHandle_t hElement = g_pDataModel->FirstAllocatedElement() ; + hElement != DMELEMENT_HANDLE_INVALID; + hElement = g_pDataModel->NextAllocatedElement( hElement ) ) + { + CDmElement *pElement = g_pDataModel->GetElement( hElement ); + Assert( pElement ); + if ( !pElement ) + return; + + Msg( "[%s : %s] in memory\n", pElement->GetName(), pElement->GetTypeString() ); + } + } +#endif +}
\ No newline at end of file |