1 //+--------------------------------------------------------------
2 //
3 // For conditions of distribution and use, see copyright notice
4 // in Flashpix.h
5 //
6 // Copyright (c) 1999 Digital Imaging Group, Inc.
7 //
8 // Contents: DRT main routine
9 //
10 //---------------------------------------------------------------
11
12 #include "headers.cxx"
13 #include "../../h/dbg.hxx"
14
15 #include "tests.hxx"
16 #include "illeg.hxx"
17
18 // Test flags and type
19 typedef ULONG FLAGS;
20
21 #define TF_NONE 0x00000000
22
23 // Suppression flags
24 #define TF_SUPPRESS 0x0000FFFF
25 #define TFS_ILLEGITIMATE 0x00000001
26 #define TFS_16BIT 0x00000002
27
28 // Enabling flags
29 #define TF_ENABLE 0xFFFF0000
30 #define TFE_DIRECT 0x00010000
31 #define TFE_ANY (TFE_DIRECT)
32
33 // Pointer to a test function
34 typedef void (*TestFn)(void);
35
36 static struct
37 {
38 char *pszName;
39 char *pszDesc;
40 TestFn tfn;
41 FLAGS flags;
42 } tests[] =
43 {
44 "Create", "Creation",
45 t_create, TFE_ANY,
46 "Open", "Opening",
47 t_open, TFE_ANY,
48 "AddRef", "AddRef/Release",
49 t_addref, TFE_ANY,
50 "DModify", "Direct modifications",
51 t_dmodify, TFE_DIRECT,
52 "Stat", "Stat",
53 t_stat, TFE_ANY,
54 "Stream", "Stream operations",
55 t_stream, TFE_ANY,
56 "Enum", "Enumerator operations",
57 t_enum, TFE_ANY,
58 "StgCopyTo", "IStorage::CopyTo",
59 t_stgcopyto, TFE_ANY,
60 "MoveCopy", "IStorage::MoveElementTo",
61 t_movecopy, TFE_ANY,
62 "ILockBytes", "ILockBytes usage",
63 t_ilb, TFE_ANY,
64 "StgMisc", "Miscellaneous Stg functions",
65 t_stgmisc, TFE_ANY,
66 "IllStg", "Illegitimate IStorage calls",
67 i_storage, TFE_ANY | TFS_ILLEGITIMATE,
68 "IllStm", "Illegitimate IStream calls",
69 i_stream, TFE_ANY | TFS_ILLEGITIMATE,
70 "IllEnum", "Illegitimate enumerator calls",
71 i_enum, TFE_ANY | TFS_ILLEGITIMATE
72 };
73 #define NTESTS (sizeof(tests)/sizeof(tests[0]))
74
75 DWORD dwRootDenyWrite = STGM_SHARE_DENY_WRITE;
76 BOOL fVerbose = FALSE;
77 OLECHAR atcDrtDocfile[_MAX_PATH];
78
79 static BOOL fRun[NTESTS];
80 #ifdef FLAT
81 static FLAGS flTests = TF_NONE;
82 #else
83 static FLAGS flTests = TF_NONE | TFS_16BIT;
84 #endif
85
Initialize(void)86 static void Initialize(void)
87 {
88 SetData();
89 }
90
Uninitialize(void)91 static void Uninitialize(void)
92 {
93 UnsetData();
94 }
95
FindTest(char * pszName)96 static int FindTest(char *pszName)
97 {
98 int i, cchName;
99
100 cchName = strlen(pszName);
101 for (i = 0; i<NTESTS; i++)
102 if (!_strnicmp(pszName, tests[i].pszName, cchName))
103 return i;
104 return -1;
105 }
106
RunTests(void)107 static void RunTests(void)
108 {
109 int i;
110
111 for (i = 0; i<NTESTS; i++)
112 // For a test to run:
113 // 1) fRun[test] must be TRUE
114 // 2) No suppression flags can be set that are not set in flTests
115 // 3) At least one enabling flag must be set that is set in flTests
116 if (fRun[i] &&
117 (tests[i].flags & ~flTests & TF_SUPPRESS) == 0 &&
118 (tests[i].flags & flTests & TF_ENABLE) != 0)
119 {
120 out("\n----- Test #%2d - %s -----\n", i+1, tests[i].pszDesc);
121 tests[i].tfn();
122 CleanData();
123 }
124 }
125
Usage(void)126 static void Usage(void)
127 {
128 int i;
129
130 printf("Usage: drt [options]\n");
131 printf("Options are:\n");
132 printf(" -h - This message\n");
133 printf(" -d - Suppress direct tests\n");
134 printf(" -i - Enable illegitimate tests\n");
135 printf(" -v - Display test output\n");
136 printf(" -#[+|-]<number> - Turn test <number> on (+) or off (-)\n");
137 printf(" No number means all\n");
138 printf(" -n[+|-]<prefix> - Turn test <prefix> on or off\n");
139 printf(" -N<file> - Set file to use for tests\n");
140 printf("Prefix can be any prefix of:\n");
141 printf("HR=%lx\n", E_INVALIDARG);
142 for (i = 0; i<NTESTS; i++)
143 printf(" %s\n", tests[i].pszName);
144 exit(1);
145 }
146
main(int argc,char ** argv)147 int _CRTAPI1 main(int argc, char **argv)
148 {
149 int i, iTest;
150 BOOL fDirect = TRUE;
151
152 // change the following line to set mem check breakpoints
153 // on win32, using debug CRT.
154 //_CrtSetBreakAlloc();
155
156 for (i = 0; i<NTESTS; i++)
157 fRun[i] = TRUE;
158 ATOOLE(pszDRTDF, atcDrtDocfile, _MAX_PATH);
159 while (--argc>0)
160 {
161 if (**++argv == '-')
162 {
163 switch(argv[0][1])
164 {
165 case '#':
166 if (sscanf(argv[0]+3, "%d", &iTest) != 1)
167 iTest = -1;
168 else
169 iTest--;
170 for (i = 0; i<NTESTS; i++)
171 if (iTest == -1 || iTest == i)
172 fRun[i] = argv[0][2] == '+';
173 break;
174 case 'd':
175 fDirect = FALSE;
176 break;
177 case 'i':
178 flTests |= TFS_ILLEGITIMATE;
179 break;
180 case 'n':
181 iTest = FindTest(argv[0]+3);
182 if (iTest >= 0)
183 fRun[iTest] = argv[0][2] == '+';
184 break;
185 case 'N':
186 ATOOLE(argv[0]+2, atcDrtDocfile, _MAX_PATH);
187 break;
188 case 'v':
189 fVerbose = TRUE;
190 break;
191
192 case 'h':
193 default:
194 Usage();
195 }
196 }
197 else
198 Usage();
199 }
200
201 Initialize();
202
203 if (fDirect)
204 {
205 out("\n---------- Direct ----------\n");
206 dwRootDenyWrite = STGM_SHARE_EXCLUSIVE;
207 flTests |= TFE_DIRECT;
208 RunTests();
209 flTests &= ~TFE_DIRECT;
210 }
211
212 printf("Storage DRT - PASSED\n");
213
214 Uninitialize();
215
216 return(0);
217 }
218