summaryrefslogtreecommitdiff
path: root/unittests/dmxtest/dmxtestnotify.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'unittests/dmxtest/dmxtestnotify.cpp')
-rw-r--r--unittests/dmxtest/dmxtestnotify.cpp111
1 files changed, 111 insertions, 0 deletions
diff --git a/unittests/dmxtest/dmxtestnotify.cpp b/unittests/dmxtest/dmxtestnotify.cpp
new file mode 100644
index 0000000..e5a24be
--- /dev/null
+++ b/unittests/dmxtest/dmxtestnotify.cpp
@@ -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 );
+}