3 const char szFileHeader1
[] = "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n"
4 "<html xmlns=\"http://www.w3.org/1999/xhtml\">\n"
6 "<meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\" />\n";
7 const char szFileHeader2
[] = "<style type=\"text/css\">\n"
8 "body {font-family: sans-serif;}\n"
9 "table {width: 100%;}\n"
10 "th {text-align: left;}\n"
11 "td.red {color: red;}\n"
12 "td.green {color: green;}\n"
16 const char szTableHeader
[] = "<table><tr><th>Function</th><th>Status</th><th>Tests (all/passed/failed)</th><th>Regressions</th></tr>";
17 const char szFileFooter
[] = "</table></body></html>";
20 OutputUsage(LPWSTR pszName
)
22 printf("\nUsage:\n\n");
23 printf("%ls.exe <TestName> - Perform individual test\n", pszName
);
24 printf("%ls.exe all - Perform all tests\n", pszName
);
25 printf("%ls.exe tests - List the valid test names\n", pszName
);
26 printf("%ls.exe status - Create api status file\n", pszName
);
27 printf("%ls.exe -r ... - Perform regression testing\n", pszName
);
32 WriteFileHeader(HANDLE hFile
, LPDWORD lpdwBytesWritten
, LPWSTR pszModule
)
36 WriteFile(hFile
, szFileHeader1
, strlen(szFileHeader1
), lpdwBytesWritten
, NULL
);
37 sprintf(szHeader
, "<title>%ls Test results</title>", pszModule
);
38 WriteFile(hFile
, szHeader
, strlen(szHeader
), lpdwBytesWritten
, NULL
);
39 WriteFile(hFile
, szFileHeader2
, strlen(szFileHeader2
), lpdwBytesWritten
, NULL
);
41 sprintf(szHeader
, "<h1>Test results for %ls</h1>", pszModule
);
42 WriteFile(hFile
, szHeader
, strlen(szHeader
), lpdwBytesWritten
, NULL
);
44 WriteFile(hFile
, szTableHeader
, strlen(szTableHeader
), lpdwBytesWritten
, NULL
);
50 WriteRow(HANDLE hFile
, LPDWORD lpdwBytesWritten
, LPWSTR pszFunction
, PTESTINFO pti
)
54 sprintf(szLine
, "<tr><td>%ls</td>", pszFunction
);
56 switch(pti
->nApiStatus
)
58 case APISTATUS_NOT_FOUND
:
59 strcat(szLine
, "<td class=\"red\">not found</td>");
61 case APISTATUS_UNIMPLEMENTED
:
62 strcat(szLine
, "<td class=\"red\">unimplemented</td>");
64 case APISTATUS_ASSERTION_FAILED
:
65 strcat(szLine
, "<td class=\"red\">assertion failed</td>");
67 case APISTATUS_REGRESSION
:
68 strcat(szLine
, "<td class=\"red\">Regression!</td>");
70 case APISTATUS_NORMAL
:
71 strcat(szLine
, "<td class=\"green\">Implemented</td>");
75 sprintf(szLine
+ strlen(szLine
), "<td>%d / %d / %d</td><td>%d</td></tr>\n",
76 pti
->passed
+pti
->failed
, pti
->passed
, pti
->failed
, pti
->rfailed
);
78 WriteFile(hFile
, szLine
, strlen(szLine
), lpdwBytesWritten
, NULL
);
84 TestMain(LPWSTR pszName
, LPWSTR pszModule
)
89 INT opassed
, ofailed
, orfailed
;
97 opassed
= ofailed
= orfailed
= 0;
99 argv
= CommandLineToArgvW(GetCommandLineW(), &argc
);
103 OutputUsage(pszName
);
108 for (i
= 1; i
< argc
; i
++)
110 if (_wcsicmp(argv
[i
], L
"-r") == 0)
114 else if (_wcsicmp(argv
[i
], L
"all") == 0)
118 else if (_wcsicmp(argv
[i
], L
"status") == 0)
123 else if (_wcsicmp(argv
[i
], L
"tests") == 0)
125 /* List all the tests and exit */
126 printf("Valid test names:\n\n");
128 for (i
= 0; i
< NumTests(); i
++)
129 printf("%ls\n", TestList
[i
].Test
);
137 WCHAR szOutputFile
[MAX_PATH
];
140 wcscpy(szOutputFile
, pszName
);
141 wcscat(szOutputFile
, L
".html");
142 hFile
= CreateFileW(szOutputFile
, GENERIC_WRITE
, 0, NULL
, CREATE_ALWAYS
, FILE_ATTRIBUTE_NORMAL
, NULL
);
144 if (hFile
== INVALID_HANDLE_VALUE
)
146 printf("Could not create output file.\n");
150 WriteFileHeader(hFile
, &dwBytesWritten
, pszModule
);
153 for (i
= 0; i
< NumTests(); i
++)
155 for (j
= 1; j
< argc
; j
++)
157 if (bAll
|| _wcsicmp(argv
[j
], TestList
[i
].Test
) == 0)
162 if (!IsFunctionPresent(TestList
[i
].Test
))
164 printf("Function %ls was not found!\n", TestList
[i
].Test
);
165 ti
.nApiStatus
= APISTATUS_NOT_FOUND
;
169 printf("Executing test: %ls\n", TestList
[i
].Test
);
170 ti
.nApiStatus
= TestList
[i
].Proc(&ti
);
171 opassed
+= ti
.passed
;
172 ofailed
+= ti
.failed
;
173 orfailed
+= ti
.rfailed
;
174 printf(" tests: %d, passed: %d, failed: %d\n\n", ti
.passed
+ti
.failed
, ti
.passed
, ti
.failed
);
179 ti
.nApiStatus
= APISTATUS_REGRESSION
;
180 WriteRow(hFile
, &dwBytesWritten
, TestList
[i
].Test
, &ti
);
187 printf("Overall:\n");
188 printf(" tests: %d, passed: %d, failed: %d\n\n", opassed
+ofailed
, opassed
, ofailed
);
191 printf(" regressions: %d\n", orfailed
);
196 WriteFile(hFile
, szFileFooter
, strlen(szFileFooter
), &dwBytesWritten
, NULL
);