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(UINT hFile
, LPWSTR pszModule
)
36 _write(hFile
, szFileHeader1
, strlen(szFileHeader1
));
37 sprintf(szHeader
, "<title>%ls Test results</title>", pszModule
);
38 _write(hFile
, szHeader
, strlen(szHeader
));
39 _write(hFile
, szFileHeader2
, strlen(szFileHeader2
));
41 sprintf(szHeader
, "<h1>Test results for %ls</h1>", pszModule
);
42 _write(hFile
, szHeader
, strlen(szHeader
));
44 _write(hFile
, szTableHeader
, strlen(szTableHeader
));
50 WriteRow(UINT hFile
, 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 _write(hFile
, szLine
, strlen(szLine
));
83 TestMain(LPWSTR pszName
, LPWSTR pszModule
)
88 INT opassed
, ofailed
, orfailed
;
95 opassed
= ofailed
= orfailed
= 0;
97 argv
= CommandLineToArgvW(GetCommandLineW(), &argc
);
101 OutputUsage(pszName
);
106 for (i
= 1; i
< argc
; i
++)
108 if (_wcsicmp(argv
[i
], L
"-r") == 0)
112 else if (_wcsicmp(argv
[i
], L
"all") == 0)
116 else if (_wcsicmp(argv
[i
], L
"status") == 0)
121 else if (_wcsicmp(argv
[i
], L
"tests") == 0)
123 /* List all the tests and exit */
124 printf("Valid test names:\n\n");
126 for (i
= 0; i
< NumTests(); i
++)
127 printf("%ls\n", TestList
[i
].Test
);
136 char szOutputFile
[MAX_PATH
];
137 wsprintf(szOutputFile
, "%ls.html", pszName
);
138 hFile
= _open(szOutputFile
, O_CREAT
| O_TRUNC
| O_RDWR
, 00700);
141 printf("Could not create output file.\n");
144 WriteFileHeader(hFile
, pszModule
);
147 for (i
= 0; i
< NumTests(); i
++)
149 for (j
= 1; j
< argc
; j
++)
151 if (bAll
|| _wcsicmp(argv
[j
], TestList
[i
].Test
) == 0)
156 if (!IsFunctionPresent(TestList
[i
].Test
))
158 printf("Function %ls was not found!\n", TestList
[i
].Test
);
159 ti
.nApiStatus
= APISTATUS_NOT_FOUND
;
163 printf("Executing test: %ls\n", TestList
[i
].Test
);
164 ti
.nApiStatus
= TestList
[i
].Proc(&ti
);
165 opassed
+= ti
.passed
;
166 ofailed
+= ti
.failed
;
167 orfailed
+= ti
.rfailed
;
168 printf(" tests: %d, passed: %d, failed: %d\n\n", ti
.passed
+ti
.failed
, ti
.passed
, ti
.failed
);
173 ti
.nApiStatus
= APISTATUS_REGRESSION
;
174 WriteRow(hFile
, TestList
[i
].Test
, &ti
);
181 printf("Overall:\n");
182 printf(" tests: %d, passed: %d, failed: %d\n\n", opassed
+ofailed
, opassed
, ofailed
);
185 printf(" regressions: %d\n", orfailed
);
190 _write(hFile
, szFileFooter
, strlen(szFileFooter
));