mirror of
https://github.com/nillerusr/source-engine.git
synced 2026-08-07 17:29:36 +00:00
1
This commit is contained in:
@@ -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( );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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 )
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
Reference in New Issue
Block a user