diff options
| author | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
|---|---|---|
| committer | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
| commit | 3bf9df6b2785fa6d951086978a3e66f49427166a (patch) | |
| tree | 2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /unittests/tier1test | |
| download | archived-source-engine-2018-hl2-src-master.tar.xz archived-source-engine-2018-hl2-src-master.zip | |
Diffstat (limited to 'unittests/tier1test')
| -rw-r--r-- | unittests/tier1test/commandbuffertest.cpp | 308 | ||||
| -rw-r--r-- | unittests/tier1test/processtest.cpp | 52 | ||||
| -rw-r--r-- | unittests/tier1test/tier1test.cpp | 47 | ||||
| -rw-r--r-- | unittests/tier1test/tier1test.vpc | 39 | ||||
| -rw-r--r-- | unittests/tier1test/utlstringtest.cpp | 224 |
5 files changed, 670 insertions, 0 deletions
diff --git a/unittests/tier1test/commandbuffertest.cpp b/unittests/tier1test/commandbuffertest.cpp new file mode 100644 index 0000000..e51d647 --- /dev/null +++ b/unittests/tier1test/commandbuffertest.cpp @@ -0,0 +1,308 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: Unit test program for CommandBuffer +// +// $NoKeywords: $ +//=============================================================================// + +#include "unitlib/unitlib.h" +#include "tier1/commandbuffer.h" +#include "tier1/strtools.h" + + +DEFINE_TESTSUITE( CommandBufferTestSuite ) + +DEFINE_TESTCASE( CommandBufferTestSimple, CommandBufferTestSuite ) +{ + Msg( "Simple command buffer test...\n" ); + + CCommandBuffer buffer; + buffer.AddText( "test_command test_arg1 test_arg2" ); + buffer.AddText( "test_command2 test_arg3; test_command3 test_arg4" ); + buffer.AddText( "test_command4\ntest_command5" ); + buffer.AddText( "test_command6 // Comment; test_command7" ); + buffer.AddText( "test_command8 // Comment; test_command9\ntest_command10" ); + buffer.AddText( "test_command11 \"test_arg5 test_arg6\"" ); + buffer.AddText( "test_command12 \"\"" ); + buffer.AddText( "// Comment\ntest_command13\t\t\"test_arg7\"" ); + buffer.AddText( "test_command14\"test_arg8\"test_arg9" ); + buffer.AddText( "test_command15 test_arg10" ); + buffer.AddText( "test_command16 test_arg11:test_arg12" ); + + int argc; + const char **argv; + buffer.BeginProcessingCommands( 1 ); + + argc = buffer.DequeueNextCommand( argv ); + Shipping_Assert( argc == 3 ); + Shipping_Assert( !Q_stricmp( argv[0], "test_command" ) ); + Shipping_Assert( !Q_stricmp( argv[1], "test_arg1" ) ); + Shipping_Assert( !Q_stricmp( argv[2], "test_arg2" ) ); + Shipping_Assert( !Q_stricmp( buffer.ArgS(), "test_arg1 test_arg2" ) ); + + argc = buffer.DequeueNextCommand( argv ); + Shipping_Assert( argc == 2 ); + Shipping_Assert( !Q_stricmp( argv[0], "test_command2" ) ); + Shipping_Assert( !Q_stricmp( argv[1], "test_arg3" ) ); + Shipping_Assert( !Q_stricmp( buffer.ArgS(), "test_arg3" ) ); + + argc = buffer.DequeueNextCommand( argv ); + Shipping_Assert( argc == 2 ); + Shipping_Assert( !Q_stricmp( argv[0], "test_command3" ) ); + Shipping_Assert( !Q_stricmp( argv[1], "test_arg4" ) ); + Shipping_Assert( !Q_stricmp( buffer.ArgS(), "test_arg4" ) ); + + argc = buffer.DequeueNextCommand( argv ); + Shipping_Assert( argc == 1 ); + Shipping_Assert( !Q_stricmp( argv[0], "test_command4" ) ); + Shipping_Assert( !Q_stricmp( buffer.ArgS(), "" ) ); + + argc = buffer.DequeueNextCommand( argv ); + Shipping_Assert( argc == 1 ); + Shipping_Assert( !Q_stricmp( argv[0], "test_command5" ) ); + Shipping_Assert( !Q_stricmp( buffer.ArgS(), "" ) ); + + argc = buffer.DequeueNextCommand( argv ); + Shipping_Assert( argc == 1 ); + Shipping_Assert( !Q_stricmp( argv[0], "test_command6" ) ); + Shipping_Assert( !Q_stricmp( buffer.ArgS(), "" ) ); + + argc = buffer.DequeueNextCommand( argv ); + Shipping_Assert( argc == 1 ); + Shipping_Assert( !Q_stricmp( argv[0], "test_command8" ) ); + Shipping_Assert( !Q_stricmp( buffer.ArgS(), "" ) ); + + argc = buffer.DequeueNextCommand( argv ); + Shipping_Assert( argc == 1 ); + Shipping_Assert( !Q_stricmp( argv[0], "test_command10" ) ); + Shipping_Assert( !Q_stricmp( buffer.ArgS(), "" ) ); + + argc = buffer.DequeueNextCommand( argv ); + Shipping_Assert( argc == 2 ); + Shipping_Assert( !Q_stricmp( argv[0], "test_command11" ) ); + Shipping_Assert( !Q_stricmp( argv[1], "test_arg5 test_arg6" ) ); + Shipping_Assert( !Q_stricmp( buffer.ArgS(), "\"test_arg5 test_arg6\"" ) ); + + argc = buffer.DequeueNextCommand( argv ); + Shipping_Assert( argc == 2 ); + Shipping_Assert( !Q_stricmp( argv[0], "test_command12" ) ); + Shipping_Assert( !Q_stricmp( argv[1], "" ) ); + Shipping_Assert( !Q_stricmp( buffer.ArgS(), "\"\"" ) ); + + argc = buffer.DequeueNextCommand( argv ); + Shipping_Assert( argc == 2 ); + Shipping_Assert( !Q_stricmp( argv[0], "test_command13" ) ); + Shipping_Assert( !Q_stricmp( argv[1], "test_arg7" ) ); + Shipping_Assert( !Q_stricmp( buffer.ArgS(), "\"test_arg7\"" ) ); + + argc = buffer.DequeueNextCommand( argv ); + Shipping_Assert( argc == 3 ); + Shipping_Assert( !Q_stricmp( argv[0], "test_command14" ) ); + Shipping_Assert( !Q_stricmp( argv[1], "test_arg8" ) ); + Shipping_Assert( !Q_stricmp( argv[2], "test_arg9" ) ); + Shipping_Assert( !Q_stricmp( buffer.ArgS(), "\"test_arg8\"test_arg9" ) ); + + argc = buffer.DequeueNextCommand( argv ); + Shipping_Assert( argc == 2 ); + Shipping_Assert( !Q_stricmp( argv[0], "test_command15" ) ); + Shipping_Assert( !Q_stricmp( argv[1], "test_arg10" ) ); + Shipping_Assert( !Q_stricmp( buffer.ArgS(), "test_arg10" ) ); + + argc = buffer.DequeueNextCommand( argv ); + Shipping_Assert( argc == 4 ); + Shipping_Assert( !Q_stricmp( argv[0], "test_command16" ) ); + Shipping_Assert( !Q_stricmp( argv[1], "test_arg11" ) ); + Shipping_Assert( !Q_stricmp( argv[2], ":" ) ); + Shipping_Assert( !Q_stricmp( argv[3], "test_arg12" ) ); + Shipping_Assert( !Q_stricmp( buffer.ArgS(), "test_arg11:test_arg12" ) ); + + argc = buffer.DequeueNextCommand( argv ); + Shipping_Assert( argc == 0 ); + + buffer.EndProcessingCommands( ); +} + + +DEFINE_TESTCASE( CommandBufferTestTiming, CommandBufferTestSuite ) +{ + Msg( "Delayed command buffer test...\n" ); + + CCommandBuffer buffer; + + buffer.AddText( "test_command test_arg1 test_arg2" ); + buffer.AddText( "test_command2 test_arg1 test_arg2 test_arg3", 1 ); + buffer.AddText( "test_command3;wait;test_command4;wait 2;test_command5" ); + + int argc; + const char **argv; + { + buffer.BeginProcessingCommands( 1 ); + + argc = buffer.DequeueNextCommand( argv ); + Shipping_Assert( argc == 3 ); + Shipping_Assert( !Q_stricmp( argv[0], "test_command" ) ); + Shipping_Assert( !Q_stricmp( argv[1], "test_arg1" ) ); + Shipping_Assert( !Q_stricmp( argv[2], "test_arg2" ) ); + + argc = buffer.DequeueNextCommand( argv ); + Shipping_Assert( argc == 1 ); + Shipping_Assert( !Q_stricmp( argv[0], "test_command3" ) ); + + argc = buffer.DequeueNextCommand( argv ); + Shipping_Assert( argc == 0 ); + + buffer.EndProcessingCommands( ); + } + { + buffer.BeginProcessingCommands( 1 ); + + argc = buffer.DequeueNextCommand( argv ); + Shipping_Assert( argc == 4 ); + Shipping_Assert( !Q_stricmp( argv[0], "test_command2" ) ); + Shipping_Assert( !Q_stricmp( argv[1], "test_arg1" ) ); + Shipping_Assert( !Q_stricmp( argv[2], "test_arg2" ) ); + Shipping_Assert( !Q_stricmp( argv[3], "test_arg3" ) ); + + argc = buffer.DequeueNextCommand( argv ); + Shipping_Assert( argc == 1 ); + Shipping_Assert( !Q_stricmp( argv[0], "test_command4" ) ); + + argc = buffer.DequeueNextCommand( argv ); + Shipping_Assert( argc == 0 ); + + buffer.EndProcessingCommands( ); + } + { + buffer.BeginProcessingCommands( 1 ); + + argc = buffer.DequeueNextCommand( argv ); + Shipping_Assert( argc == 0 ); + + buffer.EndProcessingCommands( ); + } + { + buffer.BeginProcessingCommands( 1 ); + + argc = buffer.DequeueNextCommand( argv ); + Shipping_Assert( argc == 1 ); + Shipping_Assert( !Q_stricmp( argv[0], "test_command5" ) ); + + argc = buffer.DequeueNextCommand( argv ); + Shipping_Assert( argc == 0 ); + + buffer.EndProcessingCommands( ); + } +} + + +DEFINE_TESTCASE( CommandBufferTestNested, CommandBufferTestSuite ) +{ + Msg( "Nested command buffer test...\n" ); + + CCommandBuffer buffer; + buffer.AddText( "test_command test_arg1 test_arg2" ); + buffer.AddText( "test_command2 test_arg3 test_arg4 test_arg5", 2 ); + + int argc; + const char **argv; + { + buffer.BeginProcessingCommands( 2 ); + + argc = buffer.DequeueNextCommand( argv ); + Shipping_Assert( argc == 3 ); + Shipping_Assert( !Q_stricmp( argv[0], "test_command" ) ); + Shipping_Assert( !Q_stricmp( argv[1], "test_arg1" ) ); + Shipping_Assert( !Q_stricmp( argv[2], "test_arg2" ) ); + + argc = buffer.DequeueNextCommand( argv ); + Shipping_Assert( argc == 0 ); + + buffer.AddText( "test_command3;test_command4", 1 ); + + argc = buffer.DequeueNextCommand( argv ); + Shipping_Assert( argc == 1 ); + Shipping_Assert( !Q_stricmp( argv[0], "test_command3" ) ); + + argc = buffer.DequeueNextCommand( argv ); + Shipping_Assert( argc == 1 ); + Shipping_Assert( !Q_stricmp( argv[0], "test_command4" ) ); + + argc = buffer.DequeueNextCommand( argv ); + Shipping_Assert( argc == 0 ); + + buffer.EndProcessingCommands( ); + } + { + buffer.BeginProcessingCommands( 1 ); + + argc = buffer.DequeueNextCommand( argv ); + Shipping_Assert( argc == 4 ); + Shipping_Assert( !Q_stricmp( argv[0], "test_command2" ) ); + Shipping_Assert( !Q_stricmp( argv[1], "test_arg3" ) ); + Shipping_Assert( !Q_stricmp( argv[2], "test_arg4" ) ); + Shipping_Assert( !Q_stricmp( argv[3], "test_arg5" ) ); + + argc = buffer.DequeueNextCommand( argv ); + Shipping_Assert( argc == 0 ); + + buffer.EndProcessingCommands( ); + } +} + + +DEFINE_TESTCASE( CommandBufferTestOverflow, CommandBufferTestSuite ) +{ + Msg( "Command buffer overflow test...\n" ); + + CCommandBuffer buffer; + + buffer.LimitArgumentBufferSize( 40 ); + bool bOk = buffer.AddText( "test_command test_arg1 test_arg2" ); // 32 chars + Shipping_Assert( bOk ); + bOk = buffer.AddText( "test_command2 test_arg3 test_arg4 test_arg5", 2 ); // 43 chars + Shipping_Assert( !bOk ); + + int argc; + const char **argv; + { + buffer.BeginProcessingCommands( 1 ); + + argc = buffer.DequeueNextCommand( argv ); + Shipping_Assert( argc == 3 ); + Shipping_Assert( !Q_stricmp( argv[0], "test_command" ) ); + Shipping_Assert( !Q_stricmp( argv[1], "test_arg1" ) ); + Shipping_Assert( !Q_stricmp( argv[2], "test_arg2" ) ); + + bOk = buffer.AddText( "test_command3 test_arg6;wait;test_command4" ); + Shipping_Assert( bOk ); + + // This makes sure that AddText doesn't cause argv to become bogus after + // compacting memory + Shipping_Assert( !Q_stricmp( argv[0], "test_command" ) ); + Shipping_Assert( !Q_stricmp( argv[1], "test_arg1" ) ); + Shipping_Assert( !Q_stricmp( argv[2], "test_arg2" ) ); + + argc = buffer.DequeueNextCommand( argv ); + Shipping_Assert( argc == 2 ); + Shipping_Assert( !Q_stricmp( argv[0], "test_command3" ) ); + Shipping_Assert( !Q_stricmp( argv[1], "test_arg6" ) ); + + argc = buffer.DequeueNextCommand( argv ); + Shipping_Assert( argc == 0 ); + + buffer.EndProcessingCommands( ); + } + { + buffer.BeginProcessingCommands( 1 ); + + argc = buffer.DequeueNextCommand( argv ); + Shipping_Assert( argc == 1 ); + Shipping_Assert( !Q_stricmp( argv[0], "test_command4" ) ); + + argc = buffer.DequeueNextCommand( argv ); + Shipping_Assert( argc == 0 ); + + buffer.EndProcessingCommands( ); + } +} + diff --git a/unittests/tier1test/processtest.cpp b/unittests/tier1test/processtest.cpp new file mode 100644 index 0000000..e83d7dc --- /dev/null +++ b/unittests/tier1test/processtest.cpp @@ -0,0 +1,52 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: Unit test program for processes +// +// $NoKeywords: $ +//=============================================================================// + +#include "unitlib/unitlib.h" +#include "vstdlib/iprocessutils.h" +#include "tier1/strtools.h" +#include "tier1/tier1.h" +#include "tier0/dbg.h" + + +DEFINE_TESTSUITE( ProcessTestSuite ) + +DEFINE_TESTCASE( ProcessTestSimple, ProcessTestSuite ) +{ + Msg( "Simple process test...\n" ); + + ProcessHandle_t hProcess = g_pProcessUtils->StartProcess( "unittests\\testprocess.exe -delay 1.0", true ); + g_pProcessUtils->WaitUntilProcessCompletes( hProcess ); + int nLen = g_pProcessUtils->GetProcessOutputSize( hProcess ); + char *pBuf = (char*)_alloca( nLen ); + g_pProcessUtils->GetProcessOutput( hProcess, pBuf, nLen ); + g_pProcessUtils->CloseProcess( hProcess ); + Shipping_Assert( !Q_stricmp( pBuf, "Test Finished!\n" ) ); +} + + +DEFINE_TESTCASE( ProcessTestBufferOverflow, ProcessTestSuite ) +{ + Msg( "Buffer overflow process test...\n" ); + + ProcessHandle_t hProcess = g_pProcessUtils->StartProcess( "unittests\\testprocess.exe -delay 1.0 -extrabytes 32768", true ); + g_pProcessUtils->WaitUntilProcessCompletes( hProcess ); + int nLen = g_pProcessUtils->GetProcessOutputSize( hProcess ); + Shipping_Assert( nLen == 32768 + 16 ); + char *pBuf = (char*)_alloca( nLen ); + g_pProcessUtils->GetProcessOutput( hProcess, pBuf, nLen ); + g_pProcessUtils->CloseProcess( hProcess ); + Shipping_Assert( !Q_strnicmp( pBuf, "Test Finished!\n", 15 ) ); + + int nEndExtraBytes = 32768; + char *pTest = pBuf + 15; + while( --nEndExtraBytes >= 0 ) + { + Shipping_Assert( *pTest == (( nEndExtraBytes % 10 ) + '0') ); + ++pTest; + } +} + diff --git a/unittests/tier1test/tier1test.cpp b/unittests/tier1test/tier1test.cpp new file mode 100644 index 0000000..2dc85d7 --- /dev/null +++ b/unittests/tier1test/tier1test.cpp @@ -0,0 +1,47 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: Unit test program for testing of tier1 libraries +// +// $NoKeywords: $ +//=============================================================================// + +#include "unitlib/unitlib.h" +#include "tier1/tier1.h" +#include "mathlib/mathlib.h" +#include "tier1/convar.h" +#include "vstdlib/iprocessutils.h" + + +//----------------------------------------------------------------------------- +// Used to connect/disconnect the DLL +//----------------------------------------------------------------------------- +class CTier1TestAppSystem : public CTier1AppSystem< IAppSystem > +{ + typedef CTier1AppSystem< IAppSystem > BaseClass; + +public: + virtual bool Connect( CreateInterfaceFn factory ) + { + if ( !BaseClass::Connect( factory ) ) + return false; + return true; + } + + virtual InitReturnVal_t Init() + { + MathLib_Init( 2.2f, 2.2f, 0.0f, 2.0f ); + + InitReturnVal_t nRetVal = BaseClass::Init(); + if ( nRetVal != INIT_OK ) + return nRetVal; + + return INIT_OK; + } + + virtual void Shutdown() + { + BaseClass::Shutdown(); + } +}; + +USE_UNITTEST_APPSYSTEM( CTier1TestAppSystem ) diff --git a/unittests/tier1test/tier1test.vpc b/unittests/tier1test/tier1test.vpc new file mode 100644 index 0000000..9ba27aa --- /dev/null +++ b/unittests/tier1test/tier1test.vpc @@ -0,0 +1,39 @@ +//----------------------------------------------------------------------------- +// TIER1TEST.VPC +// +// Project Script +//----------------------------------------------------------------------------- + +$Macro SRCDIR "..\.." +$Macro OUTBINDIR "$SRCDIR\..\game\bin\unittests" + +$Include "$SRCDIR\vpc_scripts\source_dll_base.vpc" + +$Configuration +{ + $Compiler + { + $PreprocessorDefinitions "$BASE;TIER1TEST_EXPORTS" + } +} + +$Project "tier1test" +{ + $Folder "Source Files" + { + $File "commandbuffertest.cpp" + $File "processtest.cpp" + $File "tier1test.cpp" + $File "utlstringtest.cpp" + } + + $Folder "Header Files" + { + } + + $Folder "Link Libraries" + { + $Lib mathlib + $Lib unitlib + } +} diff --git a/unittests/tier1test/utlstringtest.cpp b/unittests/tier1test/utlstringtest.cpp new file mode 100644 index 0000000..c0fe872 --- /dev/null +++ b/unittests/tier1test/utlstringtest.cpp @@ -0,0 +1,224 @@ +#include "tier0/dbg.h" +#include "unitlib/unitlib.h" +#include "tier1/utlstring.h" + +DEFINE_TESTSUITE( UtlStringTestSuite ) + +static void ConstructorTests() +{ + CUtlString string; + Shipping_Assert( string.Length() == 0 ); + Shipping_Assert( string.IsEmpty() == true ); + Shipping_Assert( string.GetForModify() && string.GetForModify()[ 0 ] == 0 ); + + CUtlString string2( "shiz" ); + Shipping_Assert( string2.Length() == 4 ); + Shipping_Assert( !V_stricmp( string2.Get(), "shiz" ) ); + + CUtlString string3( "thisstringismuchlongerthantwentywholehugecharacters", 20 ); + Shipping_Assert( string3.Length() == 20 ); +} + +static void BasicFunctionalityTests() +{ + CUtlString empty; + empty.SetLength( 10 ); + Assert( empty.Length() == 10 ); + V_memcpy( empty.GetForModify(), "blah", 4 ); + empty.GetForModify()[ 4 ] = 0; + Assert( empty.Length() == 4 ); + Shipping_Assert( !V_stricmp( empty.Get(), "blah" ) ); + + empty.Clear(); + Shipping_Assert( empty.IsEmpty() ); + empty = "blah"; + Shipping_Assert( !empty.IsEmpty() ); + empty.Purge(); + Shipping_Assert( empty.IsEmpty() ); + + empty = "CaMeLcAsE"; + + Shipping_Assert( empty.IsEqual_CaseSensitive( "CaMeLcAsE" ) ); + Shipping_Assert( empty.IsEqual_CaseInsensitive( "camelCASE" ) ); + + CUtlString copy( empty ); + Shipping_Assert( empty == copy ); + empty.ToLower(); + Shipping_Assert( empty != copy ); + + empty.Append( "271" ); + Shipping_Assert( !V_stricmp( empty.Get(), "camelcase271" ) ); + empty.Append( "35123", 3 ); + Shipping_Assert( !V_stricmp( empty.Get(), "camelcase271351" ) ); + empty.Append( 'A' ); + Shipping_Assert( !V_stricmp( empty.Get(), "camelcase271351A" ) ); + + empty.Append( '/' ); + empty.Append( '\\' ); + Shipping_Assert( !V_stricmp( empty.Get(), "camelcase271351A/\\" ) ); + empty.StripTrailingSlash(); + empty.StripTrailingSlash(); + Shipping_Assert( !V_stricmp( empty.Get(), "camelcase271351A" ) ); + + empty = "sometext"; + empty.SetLength( 4 ); + Shipping_Assert( empty.Get()[ 4 ] == '\0' ); // Check for null terminator + Shipping_Assert( empty.Length() == 4 ); + Shipping_Assert( empty == "some" ); +} + +static void TrimAPITests() +{ + CUtlString orig( " testy " ); + CUtlString orig2( "\n \n\ttesty\t\r\n \n\t\r" ); + CUtlString s; + + s = orig; + s.TrimLeft( ' ' ); + Shipping_Assert( !V_stricmp( s.Get(), "testy " ) ); + + s = orig; + s.TrimRight( ' ' ); + Shipping_Assert( !V_stricmp( s.Get(), " testy" ) ); + + s = orig2; + s.TrimLeft(); + s.TrimRight(); + Shipping_Assert( !V_stricmp( s.Get(), "testy" ) ); + + s = orig; + s.Trim( ' ' ); + Shipping_Assert( !V_stricmp( s.Get(), "testy" ) ); + s = orig2; + s.Trim(); + Shipping_Assert( !V_stricmp( s.Get(), "testy" ) ); +} + +static void OperatorAPITests() +{ + CUtlString orig( "base" ); + CUtlString orig2( "different" ); + + // operator = on CUtlString + orig = orig2; + Shipping_Assert( !V_stricmp( orig.Get(), "different" ) ); + // perator = on const char * + orig = "different2"; + Shipping_Assert( !V_stricmp( orig.Get(), "different2" ) ); + + orig = orig2; + // op == + Shipping_Assert( orig == orig2 ); + orig = "base"; + // op != + Shipping_Assert( orig != orig2 ); + + orig += "1"; + Shipping_Assert( !V_stricmp( orig.Get(), "base1" ) ); + orig2 = "2"; + orig += orig2; + Shipping_Assert( !V_stricmp( orig.Get(), "base12" ) ); + orig += '3'; + Shipping_Assert( !V_stricmp( orig.Get(), "base123" ) ); + // integer + orig += 123; + Shipping_Assert( !V_stricmp( orig.Get(), "base123123" ) ); + orig += 1.5f; + Shipping_Assert( !V_stricmp( orig.Get(), "base1231231.5" ) ); + + orig = "1"; + orig2 = "2"; + CUtlString newString = orig + orig2; + Shipping_Assert( !V_stricmp( newString.Get(), "12" ) ); + newString = orig + "3"; + Shipping_Assert( !V_stricmp( newString.Get(), "13" ) ); + newString = orig + 42; + Shipping_Assert( !V_stricmp( newString.Get(), "142" ) ); + + orig = "this is a long string"; + newString = orig.Slice( 4 ); + Shipping_Assert( !V_stricmp( newString.Get(), " is a long string" ) ); + newString = orig.Slice( 5, 10 ); + Shipping_Assert( !V_stricmp( newString.Get(), "is a " ) ); + + newString = orig.Left( 4 ); + Shipping_Assert( !V_stricmp( newString.Get(), "this" ) ); + newString = orig.Right( 6 ); + Shipping_Assert( !V_stricmp( newString.Get(), "string" ) ); + newString = orig.Replace( 's', 'q' ); + Shipping_Assert( !V_stricmp( newString.Get(), "thiq iq a long qtring" ) ); +} + +static void PatternTests() +{ + CUtlString str( "this is a very long pattern of very long things" ); + CUtlString pattern( "this is*" ); + + Shipping_Assert( str.MatchesPattern( pattern ) ); + + pattern = "notpresent"; + Shipping_Assert( !str.MatchesPattern( pattern ) ); +} + +static void FmtStr( CUtlString &str, const char *pFmt, ... ) +{ + va_list argptr; + va_start( argptr, pFmt ); + str.FormatV( pFmt, argptr ); + va_end( argptr ); +} + +static void FormatTests() +{ + CUtlString str; + str.Format( "%s %s %i", "shiz", "baz", 1 ); + Shipping_Assert( !V_stricmp( str.Get(), "shiz baz 1" ) ); + + FmtStr( str, "blah%i", 3 ); + Shipping_Assert( !V_stricmp( str.Get(), "blah3" ) ); +} + +static void FileNameAPITests() +{ + CUtlString path( "c:\\source2\\game\\source2\\somefile.ext" ); + + CUtlString absPath = path.AbsPath(); + Shipping_Assert( absPath == path ); + CUtlString file = path.UnqualifiedFilename(); + Shipping_Assert( !V_stricmp( file.Get(), "somefile.ext" ) ); + CUtlString dir = path.DirName(); + Shipping_Assert( !V_stricmp( dir.Get(), "c:\\source2\\game\\source2" ) ); + dir = dir.DirName(); + Shipping_Assert( !V_stricmp( dir.Get(), "c:\\source2\\game" ) ); + CUtlString baseName = path.StripExtension(); + Shipping_Assert( !V_stricmp( baseName.Get(), "c:\\source2\\game\\source2\\somefile" ) ); + dir = path.StripFilename(); + Shipping_Assert( !V_stricmp( dir.Get(), "c:\\source2\\game\\source2" ) ); + + file = path.GetBaseFilename(); + Shipping_Assert( !V_stricmp( file.Get(), "somefile" ) ); + CUtlString ext = path.GetExtension(); + Shipping_Assert( !V_stricmp( ext.Get(), "ext" ) ); + + absPath = path.PathJoin( dir.Get(), file.Get() ); + Shipping_Assert( !V_stricmp( absPath.Get(), "c:\\source2\\game\\source2\\somefile" ) ); +} + +DEFINE_TESTCASE( UtlStringTest, UtlStringTestSuite ) +{ + Msg( "Running CUtlString tests\n" ); + + ConstructorTests(); + + BasicFunctionalityTests(); + + TrimAPITests(); + + OperatorAPITests(); + + PatternTests(); + + FormatTests(); + + FileNameAPITests(); +}
\ No newline at end of file |