Author: tkreuzer Date: Sat Aug 4 20:45:12 2007 New Revision: 28160
URL: http://svn.reactos.org/svn/reactos?rev=28160&view=rev Log: - implement quick 'n dirty HTML api status output - change test function return type to INT - add ASSERT macro - include some more headers
Modified: trunk/rostests/apitests/apitest.c trunk/rostests/apitests/apitest.h trunk/rostests/apitests/w32knapi/ntdd/NtGdiDdCreateDirectDrawObject.c trunk/rostests/apitests/w32knapi/ntdd/NtGdiDdDeleteDirectDrawObject.c trunk/rostests/apitests/w32knapi/ntdd/NtGdiDdQueryDirectDrawObject.c trunk/rostests/apitests/w32knapi/ntgdi/NtGdiArcInternal.c trunk/rostests/apitests/w32knapi/ntgdi/NtGdiGetBitmapBits.c trunk/rostests/apitests/w32knapi/ntgdi/NtGdiSetBitmapBits.c trunk/rostests/apitests/w32knapi/ntuser/NtUserCountClipboardFormats.c trunk/rostests/apitests/w32knapi/testlist.c trunk/rostests/apitests/w32knapi/w32knapi.c trunk/rostests/apitests/w32knapi/w32knapi.h
Modified: trunk/rostests/apitests/apitest.c URL: http://svn.reactos.org/svn/reactos/trunk/rostests/apitests/apitest.c?rev=281... ============================================================================== --- trunk/rostests/apitests/apitest.c (original) +++ trunk/rostests/apitests/apitest.c Sat Aug 4 20:45:12 2007 @@ -1,24 +1,74 @@ #include "apitest.h"
+const char szFileHeader[] = "<html><head><style>\ntd.red {color:red}\ntd.green{color:green}\n</style>\n</head>\n<body>\n<head>\n"; +const char szTableHeader[] = "<table width = '800'><tr><th align='left'>Function</th><th align='left'>Status</th><th align='left'>Tests (all/passed/failed)</th><th align='left'>Regressions</th></tr>"; +const char szFileFooter[] = "</table></body></html>"; + void -OutputUsage(LPWSTR pszExe) +OutputUsage(LPWSTR pszName) { printf("\nUsage:\n\n"); - printf("%ls <TestName> - perform individual test\n", pszExe); - printf("%ls all - perform all tests\n", pszExe); - printf("%ls status - create api status file\n", pszExe); - printf("%ls -r ... - perform regression testing\n", pszExe); + printf("%ls.exe <TestName> - perform individual test\n", pszName); + printf("%ls.exe all - perform all tests\n", pszName); + printf("%ls.exe status - create api status file\n", pszName); + printf("%ls.exe -r ... - perform regression testing\n", pszName); printf("\n"); }
+BOOL +WriteFileHeader(UINT hFile, LPWSTR pszModule) +{ + char szHeader[100]; + + write(hFile, szFileHeader, strlen(szFileHeader)); + sprintf(szHeader, "<H1>Test results for %ls</H1>", pszModule); + write(hFile, szHeader, strlen(szHeader)); + write(hFile, szTableHeader, strlen(szTableHeader)); + return TRUE; +} + +BOOL +WriteRow(UINT hFile, LPWSTR pszFunction, PTESTINFO pti) +{ + char szLine[500]; + + sprintf(szLine, "<tr><td>%ls</td>", pszFunction); + + switch(pti->nApiStatus) + { + case APISTATUS_NOT_FOUND: + strcat(szLine, "<td class='red'>not found</td>"); + break; + case APISTATUS_UNIMPLEMENTED: + strcat(szLine, "<td class='red'>unimplemented</td>"); + break; + case APISTATUS_ASSERTION_FAILED: + strcat(szLine, "<td class='red'>assertion failed</td>"); + break; + case APISTATUS_REGRESSION: + strcat(szLine, "<td class='red'>Regression!</td>"); + break; + case APISTATUS_NORMAL: + strcat(szLine, "<td class='green'>Implemented</td>"); + break; + } + + sprintf(szLine + strlen(szLine), "<td>%d / %d / %d</td><td>%d</td></tr>\n", + pti->passed+pti->failed, pti->passed, pti->failed, pti->rfailed); + + write(hFile, szLine, strlen(szLine)); + return TRUE; +} + int -TestMain(LPWSTR pszExe) +TestMain(LPWSTR pszName, LPWSTR pszModule) { INT argc, i, j; LPWSTR *argv; TESTINFO ti; INT opassed, ofailed, orfailed; BOOL bAll, bStatus; + UINT hFile = 0;
ti.bRegress = FALSE; bAll = FALSE; @@ -29,7 +79,7 @@
if (argc < 2) { - OutputUsage(pszExe); + OutputUsage(pszName); return 0; }
@@ -53,8 +103,16 @@
if (bStatus) { - printf("Output of API status is unimplemented.\n"); - return 0; + ti.bRegress = TRUE; + char szOutputFile[MAX_PATH]; + wsprintf(szOutputFile, "%ls.html", pszName); + hFile = open(szOutputFile, O_CREAT | O_TRUNC | O_RDWR, 00700); + if (hFile == -1) + { + printf("Could not create output file.\n"); + return 0; + } + WriteFileHeader(hFile, pszModule); }
for (i = 0; i < NumTests(); i++) @@ -69,15 +127,22 @@ if (!IsFunctionPresent(TestList[i].Test)) { printf("Function %ls was not found!\n", TestList[i].Test); + ti.nApiStatus = APISTATUS_NOT_FOUND; } else { printf("Executing test: %ls\n", TestList[i].Test); - TestList[i].Proc(&ti); + ti.nApiStatus = TestList[i].Proc(&ti); opassed += ti.passed; ofailed += ti.failed; orfailed += ti.rfailed; printf(" tests: %d, passed: %d, failed: %d\n\n", ti.passed+ti.failed, ti.passed, ti.failed); + } + if (bStatus) + { + if (ti.rfailed > 0) + ti.nApiStatus = APISTATUS_REGRESSION; + WriteRow(hFile, TestList[i].Test, &ti); } break; } @@ -94,5 +159,11 @@ if (ti.bRegress) return ti.rfailed;
+ if (bStatus) + { + write(hFile, szFileFooter, strlen(szFileFooter)); + close(hFile); + } + return ti.failed; }
Modified: trunk/rostests/apitests/apitest.h URL: http://svn.reactos.org/svn/reactos/trunk/rostests/apitests/apitest.h?rev=281... ============================================================================== --- trunk/rostests/apitests/apitest.h (original) +++ trunk/rostests/apitests/apitest.h Sat Aug 4 20:45:12 2007 @@ -4,11 +4,16 @@ #define WINVER 0x501
#include <stdlib.h> - #include <stdarg.h> #include <stdio.h> +#include <fcntl.h> #include <windows.h>
+#define APISTATUS_NORMAL 0 +#define APISTATUS_NOT_FOUND 1 +#define APISTATUS_UNIMPLEMENTED 2 +#define APISTATUS_ASSERTION_FAILED 3 +#define APISTATUS_REGRESSION 4
/* type definitions */
@@ -18,9 +23,10 @@ INT failed; INT rfailed; BOOL bRegress; + INT nApiStatus; } TESTINFO, *PTESTINFO;
-typedef BOOL (*TESTPROC)(PTESTINFO); +typedef INT (*TESTPROC)(PTESTINFO);
typedef struct tagTEST { @@ -77,7 +83,14 @@ }
-int TestMain(LPWSTR pszExe); +#define ASSERT(x) \ + if (!(x)) \ + { \ + printf("Assertion failed in %s:%d (%s)\n", __FILE__, __LINE__, #x);\ + return APISTATUS_ASSERTION_FAILED; \ + } + +int TestMain(LPWSTR pszExe, LPWSTR pszModule); extern TESTENTRY TestList[]; INT NumTests(void); BOOL IsFunctionPresent(LPWSTR lpszFunction);
Modified: trunk/rostests/apitests/w32knapi/ntdd/NtGdiDdCreateDirectDrawObject.c URL: http://svn.reactos.org/svn/reactos/trunk/rostests/apitests/w32knapi/ntdd/NtG... ============================================================================== --- trunk/rostests/apitests/w32knapi/ntdd/NtGdiDdCreateDirectDrawObject.c (original) +++ trunk/rostests/apitests/w32knapi/ntdd/NtGdiDdCreateDirectDrawObject.c Sat Aug 4 20:45:12 2007 @@ -10,7 +10,7 @@ return (HANDLE)Syscall(L"NtGdiDdCreateDirectDrawObject", 1, &hdc); }
-BOOL +INT Test_NtGdiDdCreateDirectDrawObject(PTESTINFO pti) { HDC hdc=CreateDCW(L"Display",NULL,NULL,NULL); @@ -21,5 +21,5 @@
DeleteDC(hdc);
- return TRUE; + return APISTATUS_NORMAL; }
Modified: trunk/rostests/apitests/w32knapi/ntdd/NtGdiDdDeleteDirectDrawObject.c URL: http://svn.reactos.org/svn/reactos/trunk/rostests/apitests/w32knapi/ntdd/NtG... ============================================================================== --- trunk/rostests/apitests/w32knapi/ntdd/NtGdiDdDeleteDirectDrawObject.c (original) +++ trunk/rostests/apitests/w32knapi/ntdd/NtGdiDdDeleteDirectDrawObject.c Sat Aug 4 20:45:12 2007 @@ -10,10 +10,10 @@ return (BOOL)Syscall(L"NtGdiDdDeleteDirectDrawObject", 1, &hDirectDrawLocal); }
-BOOL +INT Test_NtGdiDdDeleteDirectDrawObject(PTESTINFO pti) { TEST(NtGdiDdDeleteDirectDrawObject(NULL) == 0);
- return TRUE; + return APISTATUS_NORMAL; }
Modified: trunk/rostests/apitests/w32knapi/ntdd/NtGdiDdQueryDirectDrawObject.c URL: http://svn.reactos.org/svn/reactos/trunk/rostests/apitests/w32knapi/ntdd/NtG... ============================================================================== --- trunk/rostests/apitests/w32knapi/ntdd/NtGdiDdQueryDirectDrawObject.c (original) +++ trunk/rostests/apitests/w32knapi/ntdd/NtGdiDdQueryDirectDrawObject.c Sat Aug 4 20:45:12 2007 @@ -19,9 +19,9 @@ return (HANDLE)Syscall("NtGdiDdQueryDirectDrawObject", 11, &hDirectDrawLocal); } #endif -BOOL +INT Test_NtGdiDdQueryDirectDrawObject(PTESTINFO pti) {
- return TRUE; + return APISTATUS_NORMAL; }
Modified: trunk/rostests/apitests/w32knapi/ntgdi/NtGdiArcInternal.c URL: http://svn.reactos.org/svn/reactos/trunk/rostests/apitests/w32knapi/ntgdi/Nt... ============================================================================== --- trunk/rostests/apitests/w32knapi/ntgdi/NtGdiArcInternal.c (original) +++ trunk/rostests/apitests/w32knapi/ntgdi/NtGdiArcInternal.c Sat Aug 4 20:45:12 2007 @@ -1,6 +1,4 @@ #include "../w32knapi.h" - -typedef int ARCTYPE;
BOOL STDCALL @@ -19,7 +17,7 @@ return (BOOL)Syscall(L"NtGdiArcInternal", 10, &arctype); }
-BOOL +INT Test_NtGdiArcInternal(PTESTINFO pti) { HDC hDC = CreateDCW(L"Display",NULL,NULL,NULL); @@ -53,5 +51,5 @@
DeleteDC(hDC);
- return TRUE; + return APISTATUS_NORMAL; }
Modified: trunk/rostests/apitests/w32knapi/ntgdi/NtGdiGetBitmapBits.c URL: http://svn.reactos.org/svn/reactos/trunk/rostests/apitests/w32knapi/ntgdi/Nt... ============================================================================== --- trunk/rostests/apitests/w32knapi/ntgdi/NtGdiGetBitmapBits.c (original) +++ trunk/rostests/apitests/w32knapi/ntgdi/NtGdiGetBitmapBits.c Sat Aug 4 20:45:12 2007 @@ -10,7 +10,7 @@ }
-BOOL +INT Test_NtGdiGetBitmapBits(PTESTINFO pti) { BYTE Bits[50] = {0,1,2,3,4,5,6,7,8,9}; @@ -70,5 +70,5 @@
DeleteObject(hBitmap);
- return TRUE; + return APISTATUS_NORMAL; }
Modified: trunk/rostests/apitests/w32knapi/ntgdi/NtGdiSetBitmapBits.c URL: http://svn.reactos.org/svn/reactos/trunk/rostests/apitests/w32knapi/ntgdi/Nt... ============================================================================== --- trunk/rostests/apitests/w32knapi/ntgdi/NtGdiSetBitmapBits.c (original) +++ trunk/rostests/apitests/w32knapi/ntgdi/NtGdiSetBitmapBits.c Sat Aug 4 20:45:12 2007 @@ -10,7 +10,7 @@ }
-BOOL +INT Test_NtGdiSetBitmapBits(PTESTINFO pti) { BYTE Bits[50] = {0,1,2,3,4,5,6,7,8,9}; @@ -70,5 +70,5 @@
DeleteObject(hBitmap);
- return TRUE; + return APISTATUS_NORMAL; }
Modified: trunk/rostests/apitests/w32knapi/ntuser/NtUserCountClipboardFormats.c URL: http://svn.reactos.org/svn/reactos/trunk/rostests/apitests/w32knapi/ntuser/N... ============================================================================== --- trunk/rostests/apitests/w32knapi/ntuser/NtUserCountClipboardFormats.c (original) +++ trunk/rostests/apitests/w32knapi/ntuser/NtUserCountClipboardFormats.c Sat Aug 4 20:45:12 2007 @@ -8,11 +8,10 @@ return Syscall(L"NtUserCountClipboardFormats", 0, &p); }
-BOOL +INT Test_NtUserCountClipboardFormats(PTESTINFO pti) { - TEST(NtUserCountClipboardFormats() < 1000); - TEST(TRUE); - return TRUE; + RTEST(NtUserCountClipboardFormats() < 1000); + return APISTATUS_NORMAL; }
Modified: trunk/rostests/apitests/w32knapi/testlist.c URL: http://svn.reactos.org/svn/reactos/trunk/rostests/apitests/w32knapi/testlist... ============================================================================== --- trunk/rostests/apitests/w32knapi/testlist.c (original) +++ trunk/rostests/apitests/w32knapi/testlist.c Sat Aug 4 20:45:12 2007 @@ -7,25 +7,29 @@ #include "ntdd/NtGdiDdQueryDirectDrawObject.c"
#include "ntgdi/NtGdiArcInternal.c" +//#include "ntgdi/NtGdiDoPalette.c" +#include "ntgdi/NtGdiGetBitmapBits.c" #include "ntgdi/NtGdiSetBitmapBits.c" -#include "ntgdi/NtGdiGetBitmapBits.c" +//#include "ntgdi/NtGdiSTROBJ_vEnumStart.c"
#include "ntuser/NtUserCountClipboardFormats.c"
/* The List of tests */ TESTENTRY TestList[] = { - /* DirectDraw */ + /* DirectDraw */ { L"NtGdiDdCreateDirectDrawObject", Test_NtGdiDdCreateDirectDrawObject }, { L"NtGdiDdDeleteDirectDrawObject", Test_NtGdiDdDeleteDirectDrawObject }, { L"NtGdiDdQueryDirectDrawObject", Test_NtGdiDdQueryDirectDrawObject },
- /* ntgdi */ + /* ntgdi */ { L"NtGdiArcInternal", Test_NtGdiArcInternal }, +// { L"NtGdiDoPalette", Test_NtGdiDoPalette }, { L"NtGdiGetBitmapBits", Test_NtGdiGetBitmapBits }, { L"NtGdiSetBitmapBits", Test_NtGdiSetBitmapBits }, +// { L"NtGdiSTROBJ_vEnumStart", Test_NtGdiSTROBJ_vEnumStart },
- /* ntuser */ + /* ntuser */ { L"NtUserCountClipboardFormats", Test_NtUserCountClipboardFormats } };
Modified: trunk/rostests/apitests/w32knapi/w32knapi.c URL: http://svn.reactos.org/svn/reactos/trunk/rostests/apitests/w32knapi/w32knapi... ============================================================================== --- trunk/rostests/apitests/w32knapi/w32knapi.c (original) +++ trunk/rostests/apitests/w32knapi/w32knapi.c Sat Aug 4 20:45:12 2007 @@ -155,7 +155,7 @@
printf("\n");
- TestMain(L"w32knapi.exe"); + TestMain(L"w32knapi", L"win32k.sys Nt-Api");
return 0; }
Modified: trunk/rostests/apitests/w32knapi/w32knapi.h URL: http://svn.reactos.org/svn/reactos/trunk/rostests/apitests/w32knapi/w32knapi... ============================================================================== --- trunk/rostests/apitests/w32knapi/w32knapi.h (original) +++ trunk/rostests/apitests/w32knapi/w32knapi.h Sat Aug 4 20:45:12 2007 @@ -2,7 +2,14 @@ #define _W32KNAPI_H
#include "../apitest.h" + #include <ddk/winddi.h> +#include <ddk/ntddk.h> + +/* Public Win32K Headers */ +#include <win32k/callback.h> +#include <win32k/ntusrtyp.h> +#include <win32k/ntgdityp.h>
#define OS_UNSUPPORTED 0 #define OS_REACTOS 1