mirror of
https://github.com/nillerusr/source-engine.git
synced 2026-08-08 01:39:36 +00:00
1
This commit is contained in:
@@ -0,0 +1,111 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// Purpose: Unit test program for DMX testing (testing the Notify subsystem)
|
||||
//
|
||||
// $NoKeywords: $
|
||||
//=============================================================================//
|
||||
|
||||
#include "unitlib/unitlib.h"
|
||||
#include "datamodel/dmelement.h"
|
||||
#include "datamodel/idatamodel.h"
|
||||
#include "tier1/utlbuffer.h"
|
||||
#include "filesystem.h"
|
||||
#include "datamodel/dmehandle.h"
|
||||
#include "tier2/tier2.h"
|
||||
|
||||
class CNotifyTest : public IDmNotify
|
||||
{
|
||||
public:
|
||||
CNotifyTest() : m_nValueCount(0), m_nTopologyCount(0), m_nArrayCount(0) {}
|
||||
|
||||
virtual void NotifyDataChanged( const char *pReason, int nNotifySource, int nNotifyFlags )
|
||||
{
|
||||
if ( nNotifyFlags & NOTIFY_CHANGE_ATTRIBUTE_VALUE )
|
||||
{
|
||||
m_nValueCount++;
|
||||
}
|
||||
if ( nNotifyFlags & NOTIFY_CHANGE_ATTRIBUTE_ARRAY_SIZE )
|
||||
{
|
||||
m_nArrayCount++;
|
||||
}
|
||||
if ( nNotifyFlags & NOTIFY_CHANGE_TOPOLOGICAL )
|
||||
{
|
||||
m_nTopologyCount++;
|
||||
}
|
||||
}
|
||||
|
||||
int m_nTopologyCount;
|
||||
int m_nArrayCount;
|
||||
int m_nValueCount;
|
||||
};
|
||||
|
||||
|
||||
DEFINE_TESTCASE_NOSUITE( DmxNotifyTest )
|
||||
{
|
||||
Msg( "Running dmx notify tests...\n" );
|
||||
|
||||
CNotifyTest test1, test2;
|
||||
|
||||
DmFileId_t fileid = g_pDataModel->FindOrCreateFileId( "<RunNotifyTests>" );
|
||||
|
||||
g_pDataModel->InstallNotificationCallback( &test1 );
|
||||
|
||||
CDmElement *element = NULL;
|
||||
|
||||
{
|
||||
CUndoScopeGuard guard( NOTIFY_SOURCE_APPLICATION, 0, "create" );
|
||||
element = CreateElement< CDmElement >( "test", fileid );
|
||||
}
|
||||
|
||||
Shipping_Assert( test1.m_nTopologyCount == 1 );
|
||||
Shipping_Assert( test1.m_nArrayCount == 0 );
|
||||
|
||||
g_pDataModel->Undo();
|
||||
|
||||
Shipping_Assert( test1.m_nTopologyCount == 2 );
|
||||
Shipping_Assert( test1.m_nArrayCount == 0 );
|
||||
|
||||
{
|
||||
CNotifyScopeGuard notify( "test1", NOTIFY_SOURCE_APPLICATION, 0, &test2 );
|
||||
CDisableUndoScopeGuard guard;
|
||||
element = CreateElement< CDmElement >( "test", fileid );
|
||||
}
|
||||
|
||||
Shipping_Assert( test1.m_nTopologyCount == 3 );
|
||||
Shipping_Assert( test1.m_nArrayCount == 0 );
|
||||
Shipping_Assert( test2.m_nTopologyCount == 1 );
|
||||
Shipping_Assert( test2.m_nArrayCount == 0 );
|
||||
|
||||
{
|
||||
CDisableUndoScopeGuard guard;
|
||||
|
||||
// NOTE: Nested scope guards referring to the same callback shouldn't double call it
|
||||
CNotifyScopeGuard notify( "test2", NOTIFY_SOURCE_APPLICATION, 0, &test2 );
|
||||
{
|
||||
CNotifyScopeGuard notify( "test3", NOTIFY_SOURCE_APPLICATION, 0, &test2 );
|
||||
DestroyElement( element );
|
||||
}
|
||||
}
|
||||
|
||||
Shipping_Assert( test1.m_nTopologyCount == 4 );
|
||||
Shipping_Assert( test1.m_nArrayCount == 0 );
|
||||
Shipping_Assert( test2.m_nTopologyCount == 2 );
|
||||
Shipping_Assert( test2.m_nArrayCount == 0 );
|
||||
|
||||
{
|
||||
CUndoScopeGuard guard( NOTIFY_SOURCE_APPLICATION, 0, "create" );
|
||||
{
|
||||
element = CreateElement< CDmElement >( "test", fileid );
|
||||
element->SetValue( "test", 1.0f );
|
||||
}
|
||||
guard.Abort();
|
||||
}
|
||||
|
||||
Shipping_Assert( test1.m_nTopologyCount == 4 );
|
||||
Shipping_Assert( test1.m_nArrayCount == 0 );
|
||||
Shipping_Assert( test2.m_nTopologyCount == 2 );
|
||||
Shipping_Assert( test2.m_nArrayCount == 0 );
|
||||
|
||||
g_pDataModel->RemoveNotificationCallback( &test1 );
|
||||
g_pDataModel->RemoveFileId( fileid );
|
||||
}
|
||||
Reference in New Issue
Block a user