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.
217 lines
5.4 KiB
217 lines
5.4 KiB
//+--------------------------------------------------------------
|
|
//
|
|
// Microsoft Windows
|
|
// Copyright (C) Microsoft Corporation, 1992 - 1996.
|
|
//
|
|
// File: drt.cxx
|
|
//
|
|
// Contents: DRT main routine
|
|
//
|
|
//---------------------------------------------------------------
|
|
|
|
#include "headers.cxx"
|
|
#include "../../h/dbg.hxx"
|
|
|
|
#include "tests.hxx"
|
|
#include "illeg.hxx"
|
|
|
|
// Test flags and type
|
|
typedef ULONG FLAGS;
|
|
|
|
#define TF_NONE 0x00000000
|
|
|
|
// Suppression flags
|
|
#define TF_SUPPRESS 0x0000FFFF
|
|
#define TFS_ILLEGITIMATE 0x00000001
|
|
#define TFS_16BIT 0x00000002
|
|
|
|
// Enabling flags
|
|
#define TF_ENABLE 0xFFFF0000
|
|
#define TFE_DIRECT 0x00010000
|
|
#define TFE_ANY (TFE_DIRECT)
|
|
|
|
// Pointer to a test function
|
|
typedef void (*TestFn)(void);
|
|
|
|
static struct
|
|
{
|
|
char *pszName;
|
|
char *pszDesc;
|
|
TestFn tfn;
|
|
FLAGS flags;
|
|
} tests[] =
|
|
{
|
|
"Create", "Creation",
|
|
t_create, TFE_ANY,
|
|
"Open", "Opening",
|
|
t_open, TFE_ANY,
|
|
"AddRef", "AddRef/Release",
|
|
t_addref, TFE_ANY,
|
|
"DModify", "Direct modifications",
|
|
t_dmodify, TFE_DIRECT,
|
|
"Stat", "Stat",
|
|
t_stat, TFE_ANY,
|
|
"Stream", "Stream operations",
|
|
t_stream, TFE_ANY,
|
|
"Enum", "Enumerator operations",
|
|
t_enum, TFE_ANY,
|
|
"StgCopyTo", "IStorage::CopyTo",
|
|
t_stgcopyto, TFE_ANY,
|
|
"MoveCopy", "IStorage::MoveElementTo",
|
|
t_movecopy, TFE_ANY,
|
|
"ILockBytes", "ILockBytes usage",
|
|
t_ilb, TFE_ANY,
|
|
"StgMisc", "Miscellaneous Stg functions",
|
|
t_stgmisc, TFE_ANY,
|
|
"IllStg", "Illegitimate IStorage calls",
|
|
i_storage, TFE_ANY | TFS_ILLEGITIMATE,
|
|
"IllStm", "Illegitimate IStream calls",
|
|
i_stream, TFE_ANY | TFS_ILLEGITIMATE,
|
|
"IllEnum", "Illegitimate enumerator calls",
|
|
i_enum, TFE_ANY | TFS_ILLEGITIMATE
|
|
};
|
|
#define NTESTS (sizeof(tests)/sizeof(tests[0]))
|
|
|
|
DWORD dwRootDenyWrite = STGM_SHARE_DENY_WRITE;
|
|
BOOL fVerbose = FALSE;
|
|
OLECHAR atcDrtDocfile[_MAX_PATH];
|
|
|
|
static BOOL fRun[NTESTS];
|
|
#ifdef FLAT
|
|
static FLAGS flTests = TF_NONE;
|
|
#else
|
|
static FLAGS flTests = TF_NONE | TFS_16BIT;
|
|
#endif
|
|
|
|
static void Initialize(void)
|
|
{
|
|
SetData();
|
|
}
|
|
|
|
static void Uninitialize(void)
|
|
{
|
|
UnsetData();
|
|
}
|
|
|
|
static int FindTest(char *pszName)
|
|
{
|
|
int i, cchName;
|
|
|
|
cchName = strlen(pszName);
|
|
for (i = 0; i<NTESTS; i++)
|
|
if (!_strnicmp(pszName, tests[i].pszName, cchName))
|
|
return i;
|
|
return -1;
|
|
}
|
|
|
|
static void RunTests(void)
|
|
{
|
|
int i;
|
|
|
|
for (i = 0; i<NTESTS; i++)
|
|
// For a test to run:
|
|
// 1) fRun[test] must be TRUE
|
|
// 2) No suppression flags can be set that are not set in flTests
|
|
// 3) At least one enabling flag must be set that is set in flTests
|
|
if (fRun[i] &&
|
|
(tests[i].flags & ~flTests & TF_SUPPRESS) == 0 &&
|
|
(tests[i].flags & flTests & TF_ENABLE) != 0)
|
|
{
|
|
out("\n----- Test #%2d - %s -----\n", i+1, tests[i].pszDesc);
|
|
tests[i].tfn();
|
|
CleanData();
|
|
}
|
|
}
|
|
|
|
static void Usage(void)
|
|
{
|
|
int i;
|
|
|
|
printf("Usage: drt [options]\n");
|
|
printf("Options are:\n");
|
|
printf(" -h - This message\n");
|
|
printf(" -d - Suppress direct tests\n");
|
|
printf(" -i - Enable illegitimate tests\n");
|
|
printf(" -v - Display test output\n");
|
|
printf(" -#[+|-]<number> - Turn test <number> on (+) or off (-)\n");
|
|
printf(" No number means all\n");
|
|
printf(" -n[+|-]<prefix> - Turn test <prefix> on or off\n");
|
|
printf(" -N<file> - Set file to use for tests\n");
|
|
printf("Prefix can be any prefix of:\n");
|
|
printf("HR=%lx\n", E_INVALIDARG);
|
|
for (i = 0; i<NTESTS; i++)
|
|
printf(" %s\n", tests[i].pszName);
|
|
exit(1);
|
|
}
|
|
|
|
int __cdecl main(int argc, char **argv)
|
|
{
|
|
int i, iTest;
|
|
BOOL fDirect = TRUE;
|
|
|
|
// change the following line to set mem check breakpoints
|
|
// on win32, using debug CRT.
|
|
//_CrtSetBreakAlloc();
|
|
|
|
for (i = 0; i<NTESTS; i++)
|
|
fRun[i] = TRUE;
|
|
ATOOLE(pszDRTDF, atcDrtDocfile, _MAX_PATH);
|
|
while (--argc>0)
|
|
{
|
|
if (**++argv == '-')
|
|
{
|
|
switch(argv[0][1])
|
|
{
|
|
case '#':
|
|
if (sscanf(argv[0]+3, "%d", &iTest) != 1)
|
|
iTest = -1;
|
|
else
|
|
iTest--;
|
|
for (i = 0; i<NTESTS; i++)
|
|
if (iTest == -1 || iTest == i)
|
|
fRun[i] = argv[0][2] == '+';
|
|
break;
|
|
case 'd':
|
|
fDirect = FALSE;
|
|
break;
|
|
case 'i':
|
|
flTests |= TFS_ILLEGITIMATE;
|
|
break;
|
|
case 'n':
|
|
iTest = FindTest(argv[0]+3);
|
|
if (iTest >= 0)
|
|
fRun[iTest] = argv[0][2] == '+';
|
|
break;
|
|
case 'N':
|
|
ATOOLE(argv[0]+2, atcDrtDocfile, _MAX_PATH);
|
|
break;
|
|
case 'v':
|
|
fVerbose = TRUE;
|
|
break;
|
|
|
|
case 'h':
|
|
default:
|
|
Usage();
|
|
}
|
|
}
|
|
else
|
|
Usage();
|
|
}
|
|
|
|
Initialize();
|
|
|
|
if (fDirect)
|
|
{
|
|
out("\n---------- Direct ----------\n");
|
|
dwRootDenyWrite = STGM_SHARE_EXCLUSIVE;
|
|
flTests |= TFE_DIRECT;
|
|
RunTests();
|
|
flTests &= ~TFE_DIRECT;
|
|
}
|
|
|
|
printf("Storage DRT - PASSED\n");
|
|
|
|
Uninitialize();
|
|
|
|
return(0);
|
|
}
|