You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
388 lines
9.5 KiB
388 lines
9.5 KiB
//+-------------------------------------------------------------------
|
|
// Microsoft OLE
|
|
// Copyright (C) Microsoft Corporation, 1994-1995.
|
|
//
|
|
// File: cmdutest.cxx
|
|
//
|
|
// Contents: Unit test for the CDebugHelp class implementation.
|
|
// Utilizes functions in arghelp.cxx and the CRegistryHelp
|
|
// class.
|
|
//
|
|
// Classes: None
|
|
//
|
|
// History: 28-Nov-94 DeanE Created
|
|
//---------------------------------------------------------------------
|
|
#include <oleworld.hxx>
|
|
|
|
|
|
// Declare the CDebugHelp object
|
|
DH_DECLARE;
|
|
|
|
|
|
// Local Functions
|
|
HRESULT SettingsTest(VOID);
|
|
HRESULT TraceTest(VOID);
|
|
HRESULT LogTest(VOID);
|
|
HRESULT AssertTest(VOID);
|
|
|
|
|
|
// Test TRACE level flags
|
|
#define DH_UTEST_LVL1 0x00001000
|
|
#define DH_UTEST_LVL2 0x08000000
|
|
|
|
|
|
// Results macros
|
|
#define TESTFAIL(msg) \
|
|
printf("FAIL: %s, %ul - %s\n", __FILE__, __LINE__, msg)
|
|
|
|
#define TESTPASS(msg) \
|
|
printf("PASS: %s\n", msg)
|
|
|
|
|
|
// Define the CDebugHelp object
|
|
DH_DEFINE;
|
|
|
|
|
|
//+---------------------------------------------------------------------
|
|
// Function: main
|
|
//
|
|
// Synopsis: Command line test utilizing a CDebugHelp object.
|
|
// Excercises Trace Location, Log Location, Trace Level,
|
|
// Trace and Log output, and Assert functionality. Uses
|
|
// a log created via DH_CREATELOGARGS.
|
|
//
|
|
// Arguments: [argc] - Number of command line arguments.
|
|
// [argv] - Command line arguments.
|
|
//
|
|
// Returns: Zero if no errors, otherwise non-zero
|
|
//
|
|
// History: 28-Nov-94 DeanE Created
|
|
//----------------------------------------------------------------------
|
|
int _cdecl main(int argc, char *argv[])
|
|
{
|
|
HRESULT hr;
|
|
|
|
// First, create a log
|
|
hr = DH_CREATELOGARGS(argc, argv);
|
|
if (FAILED(hr))
|
|
{
|
|
printf("Log creation failed - %lx\n", hr);
|
|
return(1);
|
|
}
|
|
|
|
// Set & retrieve settings
|
|
hr = SettingsTest();
|
|
if (SUCCEEDED(hr))
|
|
{
|
|
TESTPASS("Debug settings");
|
|
}
|
|
else
|
|
{
|
|
TESTFAIL("Debug settings");
|
|
return(1);
|
|
}
|
|
|
|
// Trace output macro tests
|
|
hr = TraceTest();
|
|
if (SUCCEEDED(hr))
|
|
{
|
|
TESTPASS("Trace Output");
|
|
}
|
|
else
|
|
{
|
|
TESTFAIL("Trace Output");
|
|
return(1);
|
|
}
|
|
|
|
// Logging output macro tests
|
|
hr = LogTest();
|
|
if (SUCCEEDED(hr))
|
|
{
|
|
TESTPASS("Log Output");
|
|
}
|
|
else
|
|
{
|
|
TESTFAIL("Log Output");
|
|
return(1);
|
|
}
|
|
|
|
// Assert tests
|
|
hr = AssertTest();
|
|
if (SUCCEEDED(hr))
|
|
{
|
|
TESTPASS("Assert Test");
|
|
}
|
|
else
|
|
{
|
|
TESTFAIL("Assert Test");
|
|
return(1);
|
|
}
|
|
|
|
return(0);
|
|
}
|
|
|
|
|
|
//+---------------------------------------------------------------------
|
|
// Function: SettingsTest
|
|
//
|
|
// Synopsis: Sets and checks (by retrieving) values in the
|
|
// global CDebugHelp object. Assumes a log has been
|
|
// created.
|
|
//
|
|
// Arguments: None.
|
|
//
|
|
// Returns: S_OK if test passes, error code if not.
|
|
//
|
|
// History: 28-Nov-94 DeanE Created
|
|
//----------------------------------------------------------------------
|
|
HRESULT SettingsTest()
|
|
{
|
|
HRESULT hr;
|
|
DWORD fValues;
|
|
|
|
// Set and check Trace Location
|
|
// Set a valid setting - should succeed
|
|
//
|
|
hr = DH_SETTRACELOC(DH_LOC_STDOUT);
|
|
if (SUCCEEDED(hr))
|
|
{
|
|
fValues = DH_GETTRACELOC;
|
|
hr = (fValues & DH_LOC_STDOUT) ? S_OK : E_FAIL;
|
|
}
|
|
|
|
if (FAILED(hr))
|
|
{
|
|
TESTFAIL("DH_SETTRACELOC test - valid setting");
|
|
}
|
|
|
|
|
|
// Set an invalid setting - should fail
|
|
if (SUCCEEDED(hr))
|
|
{
|
|
hr = DH_SETTRACELOC(DH_LOC_NONE);
|
|
if (FAILED(hr))
|
|
{
|
|
hr = S_OK;
|
|
}
|
|
}
|
|
|
|
if (FAILED(hr))
|
|
{
|
|
TESTFAIL("DH_SETTRACELOC test - invalid setting");
|
|
return(hr);
|
|
}
|
|
|
|
// Set and check Log Location
|
|
// Set a valid setting - should succeed
|
|
//
|
|
hr = DH_SETLOGLOC(DH_LOC_STDOUT|DH_LOC_LOG);
|
|
if (SUCCEEDED(hr))
|
|
{
|
|
fValues = DH_GETLOGLOC;
|
|
hr = (fValues & DH_LOC_STDOUT) &&
|
|
(fValues & DH_LOC_LOG) ? S_OK : E_FAIL;
|
|
}
|
|
|
|
if (FAILED(hr))
|
|
{
|
|
TESTFAIL("DH_SETLOGLOC test - valid setting");
|
|
}
|
|
|
|
// Set an invalid setting - should fail
|
|
if (SUCCEEDED(hr))
|
|
{
|
|
hr = DH_SETLOGLOC(DH_LOC_NONE);
|
|
if (FAILED(hr))
|
|
{
|
|
hr = S_OK;
|
|
}
|
|
}
|
|
|
|
if (FAILED(hr))
|
|
{
|
|
TESTFAIL("DH_SETLOGLOC test - invalid setting");
|
|
return(hr);
|
|
}
|
|
|
|
|
|
// Set and check Trace Level
|
|
// Set a valid level - should succeed
|
|
//
|
|
hr = DH_SETLVL(DH_UTEST_LVL1|DH_LVL_TRACE1);
|
|
if (SUCCEEDED(hr))
|
|
{
|
|
fValues = DH_GETTRACELVL;
|
|
hr = (fValues & DH_UTEST_LVL1) &&
|
|
(fValues & DH_LVL_TRACE1) ? S_OK : E_FAIL;
|
|
}
|
|
|
|
if (FAILED(hr))
|
|
{
|
|
TESTFAIL("DH_SETLVL test - valid setting");
|
|
}
|
|
|
|
// Try to turn one of the reserved settings off - should fail
|
|
if (SUCCEEDED(hr))
|
|
{
|
|
hr = DH_SETLVL(DH_GETTRACELVL&~DH_LVL_ERROR);
|
|
if (SUCCEEDED(hr))
|
|
{
|
|
fValues = DH_GETTRACELVL;
|
|
hr = (fValues & DH_LVL_ERROR) ? S_OK : E_FAIL;
|
|
}
|
|
}
|
|
|
|
if (FAILED(hr))
|
|
{
|
|
TESTFAIL("DH_SETLVL - turn reserved off");
|
|
}
|
|
|
|
return(hr);
|
|
}
|
|
|
|
|
|
//+---------------------------------------------------------------------
|
|
// Function: TraceTest
|
|
//
|
|
// Synopsis: Tests TRACE macro outputs of the global CDebugHelp object.
|
|
//
|
|
// Arguments: None.
|
|
//
|
|
// Returns: S_OK if test passes, error code if not.
|
|
//
|
|
// History: 28-Nov-94 DeanE Created
|
|
//----------------------------------------------------------------------
|
|
HRESULT TraceTest()
|
|
{
|
|
HRESULT hr;
|
|
|
|
// Set the Trace Location to STDOUT and the debug terminal so we
|
|
// can see messages
|
|
//
|
|
hr = DH_SETTRACELOC(DH_LOC_STDOUT|DH_LOC_TERM);
|
|
if (FAILED(hr))
|
|
{
|
|
TESTFAIL("Cannot set test trace location");
|
|
return(hr);
|
|
}
|
|
|
|
printf("Six messages should appear\n");
|
|
|
|
// Set a level that should NOT produce a message...
|
|
hr = DH_SETLVL(DH_UTEST_LVL2);
|
|
if (FAILED(hr))
|
|
{
|
|
TESTFAIL("Failure setting test trace level");
|
|
return(hr);
|
|
}
|
|
|
|
// Output a message at a level NOT set
|
|
DH_TRACE((DH_UTEST_LVL1, TEXT("ERROR! Message should not appear!")));
|
|
|
|
// Output simple messages that should appear
|
|
DH_TRACE((DH_LVL_ALWAYS, TEXT("Sample ALWAYS message")));
|
|
DH_TRACE((DH_LVL_ERROR, TEXT("Sample ERROR message")));
|
|
DH_TRACE((DH_UTEST_LVL2, TEXT("Sample USER-DEFINED message")));
|
|
|
|
// Output complex messages
|
|
DH_TRACE((DH_LVL_ALWAYS,
|
|
TEXT("ALWAYS - Expansion File: %s, Line: %lu"),
|
|
TEXT(__FILE__),
|
|
__LINE__));
|
|
|
|
// Output messages with multiple levels set
|
|
hr = DH_SETLVL(DH_UTEST_LVL2 | DH_UTEST_LVL1);
|
|
if (FAILED(hr))
|
|
{
|
|
TESTFAIL("Failure setting multiple trace levels");
|
|
return(hr);
|
|
}
|
|
DH_TRACE((DH_UTEST_LVL1,
|
|
TEXT("Sample MULTI-USER-DEFINED message value: %lx"),
|
|
DH_UTEST_LVL1));
|
|
DH_TRACE((DH_UTEST_LVL2,
|
|
TEXT("Sample MULTI-USER-DEFINED message value: %lx"),
|
|
DH_UTEST_LVL2));
|
|
DH_TRACE((DH_LVL_TRACE4,
|
|
TEXT("ERROR! Message TRACE4 should not appear!")));
|
|
|
|
return(hr);
|
|
}
|
|
|
|
|
|
//+---------------------------------------------------------------------
|
|
// Function: LogTest
|
|
//
|
|
// Synopsis: Tests LOG macro outputs of the global CDebugHelp object.
|
|
//
|
|
// Arguments: None.
|
|
//
|
|
// Returns: S_OK if test passes, error code if not.
|
|
//
|
|
// History: 28-Nov-94 DeanE Created
|
|
//----------------------------------------------------------------------
|
|
HRESULT LogTest()
|
|
{
|
|
HRESULT hr;
|
|
|
|
// Set the Log Location to STDOUT, the log, and the debug
|
|
// terminal so we can see messages
|
|
//
|
|
hr = DH_SETLOGLOC(DH_LOC_STDOUT|DH_LOC_TERM|DH_LOC_LOG);
|
|
if (FAILED(hr))
|
|
{
|
|
TESTFAIL("Cannot set test log location");
|
|
return(hr);
|
|
}
|
|
|
|
// Report a simple PASS, complex FAIL, and statistics
|
|
DH_LOG((LOG_PASS, TEXT("Simple sample PASS")));
|
|
DH_LOG((LOG_FAIL,
|
|
TEXT("Complex sample FAIL %s, %lu"),
|
|
TEXT(__FILE__),
|
|
__LINE__));
|
|
|
|
printf("Correct totals: 1 PASS, 1 FAIL, 0 ABORT\n");
|
|
|
|
DH_LOGSTATS;
|
|
|
|
return(hr);
|
|
}
|
|
|
|
|
|
//+---------------------------------------------------------------------
|
|
// Function: AssertTest
|
|
//
|
|
// Synopsis: Tests ASSERT macro outputs of the global CDebugHelp object.
|
|
//
|
|
// Arguments: None.
|
|
//
|
|
// Returns: S_OK if test passes, error code if not.
|
|
//
|
|
// History: 28-Nov-94 DeanE Created
|
|
//----------------------------------------------------------------------
|
|
HRESULT AssertTest()
|
|
{
|
|
#pragma warning(disable: 4127) // Examined and ignored
|
|
|
|
// Set Lab Mode to ON - we should NOT get any popups
|
|
DH_SETMODE(DH_LABMODE_ON);
|
|
|
|
// Trigger an assert
|
|
DH_ASSERT(!"LABMODE ON - NO POPUP SHOULD APPEAR");
|
|
|
|
|
|
// Set Lab Mode to ON - we should get popups
|
|
DH_SETMODE(DH_LABMODE_OFF);
|
|
|
|
// This assert should NOT trigger
|
|
DH_ASSERT(5 < 6);
|
|
|
|
// Set Lab Mode to OFF - we should get a popup
|
|
DH_ASSERT(!"LABMODE OFF - POPUP SHOULD APPEAR");
|
|
|
|
#pragma warning(default: 4127) // Examined and ignored
|
|
|
|
return(S_OK);
|
|
}
|
|
|