Author: tkreuzer
Date: Sun Apr 29 05:43:41 2007
New Revision: 26569
URL:
http://svn.reactos.org/svn/reactos?rev=26569&view=rev
Log:
gdi32_test:
a lot of testcases especially for GetObject
Added:
trunk/rostests/win32/gdi32/
trunk/rostests/win32/gdi32/gdi32_test.c
trunk/rostests/win32/gdi32/gdi32_test.rbuild
trunk/rostests/win32/gdi32/gditest.h
trunk/rostests/win32/gdi32/testlist.c
trunk/rostests/win32/gdi32/tests/
trunk/rostests/win32/gdi32/tests/CreateCompatibleDC.c
trunk/rostests/win32/gdi32/tests/CreatePen.c
trunk/rostests/win32/gdi32/tests/ExtCreatePen.c
trunk/rostests/win32/gdi32/tests/GetObject.c
trunk/rostests/win32/gdi32/tests/GetStockObject.c
trunk/rostests/win32/gdi32/tests/SelectObject.c
trunk/rostests/win32/gdi32/tests/SetDCPenColor.c
trunk/rostests/win32/gdi32/tests/SetSysColors.c
Modified:
trunk/rostests/win32/testsets.rbuild
Added: trunk/rostests/win32/gdi32/gdi32_test.c
URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/win32/gdi32/gdi32_test.c?…
==============================================================================
--- trunk/rostests/win32/gdi32/gdi32_test.c (added)
+++ trunk/rostests/win32/gdi32/gdi32_test.c Sun Apr 29 05:43:41 2007
@@ -1,0 +1,49 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "gditest.h"
+
+int main(int argc, char *argv[])
+{
+ INT Num = NumTests();
+ INT i, j;
+ INT passed, failed, opassed, ofailed;
+
+ opassed = 0;
+ ofailed = 0;
+ printf("GDI tests\n");
+ if (argc > 1)
+ {
+ for (i = 1; i < argc; i++)
+ {
+ for (j = 0; j < NumTests(); j++)
+ {
+ if (stricmp(argv[i], TestList[j].Test) == 0)
+ {
+ passed = 0;
+ failed = 0;
+ TestList[j].Proc(&passed, &failed);
+ opassed += passed;
+ ofailed += failed;
+ printf(" tests: %d, passed: %d, failed: %d\n\n", passed+failed, passed,
failed);
+ }
+ }
+ }
+ }
+ else
+ {
+ for (i = 0; i < Num; i++)
+ {
+ passed = 0;
+ failed = 0;
+ printf("Test: %s\n", TestList[i].Test);
+ TestList[i].Proc(&passed, &failed);
+ opassed += passed;
+ ofailed += failed;
+ printf(" tests: %d, passed: %d, failed: %d\n\n", passed+failed, passed,
failed);
+ }
+ }
+ printf("\nOverall tests: %d, passed: %d, failed: %d\n", opassed+ofailed,
opassed, ofailed);
+
+ return ofailed;
+}
Added: trunk/rostests/win32/gdi32/gdi32_test.rbuild
URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/win32/gdi32/gdi32_test.rb…
==============================================================================
--- trunk/rostests/win32/gdi32/gdi32_test.rbuild (added)
+++ trunk/rostests/win32/gdi32/gdi32_test.rbuild Sun Apr 29 05:43:41 2007
@@ -1,0 +1,10 @@
+<module name="gdi32_test" type="win32cui">
+ <include base="gdi32_test">.</include>
+ <define name="__USE_W32API" />
+ <define name="_WIN32_WINNT">0x0501</define>
+ <library>kernel32</library>
+ <library>user32</library>
+ <library>gdi32</library>
+ <file>gdi32_test.c</file>
+ <file>testlist.c</file>
+</module>
Added: trunk/rostests/win32/gdi32/gditest.h
URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/win32/gdi32/gditest.h?rev…
==============================================================================
--- trunk/rostests/win32/gdi32/gditest.h (added)
+++ trunk/rostests/win32/gdi32/gditest.h Sun Apr 29 05:43:41 2007
@@ -1,0 +1,72 @@
+#ifndef _GDITEST_H
+#define _GDITEST_H
+
+#define WINVER 0x501
+
+//#include <stdio.h>
+#include <stdlib.h>
+
+#include <stdarg.h>
+#include <stdio.h>
+#include <windows.h>
+
+#define TEST(x) \
+ if (x)\
+ {\
+ (*passed)++;\
+ } else {\
+ (*failed)++;\
+ printf("Test failed in file %s line %d\n", __FILE__, __LINE__);\
+ };
+
+#define GDI_HANDLE_INDEX_MASK 0x00003fff // (GDI_HANDLE_COUNT - 1)
+#define GDI_HANDLE_TYPE_MASK 0x007f0000
+#define GDI_HANDLE_STOCK_MASK 0x00800000
+#define GDI_HANDLE_REUSE_MASK 0xff000000
+
+#define GDI_HANDLE_GET_INDEX(h) \
+ (((ULONG_PTR)(h)) & GDI_HANDLE_INDEX_MASK)
+
+#define GDI_HANDLE_GET_TYPE(h) \
+ (((ULONG_PTR)(h)) & GDI_HANDLE_TYPE_MASK)
+
+#define GDI_HANDLE_PEN_TO_BRUSH(h) \
+ (HBRUSH)((((ULONG_PTR)(h)) & ~GDI_HANDLE_TYPE_MASK) | GDI_OBJECT_TYPE_PEN)
+
+
+#define GDI_OBJECT_TYPE_DC 0x00010000
+#define GDI_OBJECT_TYPE_REGION 0x00040000
+#define GDI_OBJECT_TYPE_BITMAP 0x00050000
+#define GDI_OBJECT_TYPE_PALETTE 0x00080000
+#define GDI_OBJECT_TYPE_FONT 0x000a0000
+#define GDI_OBJECT_TYPE_BRUSH 0x00100000
+#define GDI_OBJECT_TYPE_EMF 0x00210000
+#define GDI_OBJECT_TYPE_PEN 0x00300000
+#define GDI_OBJECT_TYPE_EXTPEN 0x00500000
+#define GDI_OBJECT_TYPE_COLORSPACE 0x00090000
+#define GDI_OBJECT_TYPE_METADC 0x00660000
+#define GDI_OBJECT_TYPE_METAFILE 0x00260000
+#define GDI_OBJECT_TYPE_ENHMETAFILE 0x00460000
+/* Following object types made up for ROS */
+#define GDI_OBJECT_TYPE_ENHMETADC 0x00740000
+#define GDI_OBJECT_TYPE_MEMDC 0x00750000
+#define GDI_OBJECT_TYPE_DCE 0x00770000
+#define GDI_OBJECT_TYPE_DONTCARE 0x007f0000
+
+
+/* The type definitions */
+typedef BOOL (*TESTPROC)(INT*, INT*);
+
+typedef struct tagTEST
+{
+ CHAR* Test;
+ TESTPROC Proc;
+} TEST, *PTEST;
+
+
+extern TEST TestList[];
+INT NumTests(void);
+
+#endif /* _GDITEST_H */
+
+/* EOF */
Added: trunk/rostests/win32/gdi32/testlist.c
URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/win32/gdi32/testlist.c?re…
==============================================================================
--- trunk/rostests/win32/gdi32/testlist.c (added)
+++ trunk/rostests/win32/gdi32/testlist.c Sun Apr 29 05:43:41 2007
@@ -1,0 +1,37 @@
+#ifndef _GDITESTLIST_H
+#define _GDITESTLIST_H
+
+#include "gditest.h"
+
+/* include the tests */
+#include "tests/CreateCompatibleDC.c"
+#include "tests/CreatePen.c"
+#include "tests/ExtCreatePen.c"
+#include "tests/GetObject.c"
+#include "tests/GetStockObject.c"
+#include "tests/SelectObject.c"
+#include "tests/SetDCPenColor.c"
+#include "tests/SetSysColors.c"
+
+/* The List of tests */
+TEST TestList[] =
+{
+ { "CreateCompatibleDC", Test_CreateCompatibleDC },
+ { "CreatePen", Test_CreatePen },
+ { "ExtCreatePen", Test_ExtCreatePen },
+ { "GetStockObject", Test_GetStockObject },
+ { "SetSysColors", Test_SetSysColors },
+ { "SelectObject", Test_SelectObject },
+ { "SetDCPenColor", Test_SetDCPenColor },
+ { "GetObject", Test_GetObject }
+};
+
+/* The function that gives us the number of tests */
+INT NumTests(void)
+{
+ return sizeof(TestList) / sizeof(TEST);
+}
+
+#endif /* _GDITESTLIST_H */
+
+/* EOF */
Added: trunk/rostests/win32/gdi32/tests/CreateCompatibleDC.c
URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/win32/gdi32/tests/CreateC…
==============================================================================
--- trunk/rostests/win32/gdi32/tests/CreateCompatibleDC.c (added)
+++ trunk/rostests/win32/gdi32/tests/CreateCompatibleDC.c Sun Apr 29 05:43:41 2007
@@ -1,0 +1,37 @@
+#include "..\gditest.h"
+
+BOOL Test_CreateCompatibleDC(INT* passed, INT* failed)
+{
+ HDC hDCScreen, hOldDC, hDC, hDC2;
+
+ // Create a DC
+ hDCScreen = GetDC(NULL);
+ if (hDCScreen == NULL)
+ {
+ return FALSE;
+ }
+
+ hDC = CreateCompatibleDC(hDCScreen);
+ TEST(hDC != NULL);
+
+ // Test if first selected pen is BLACK_PEN (? or same as screen DC's pen?)
+ TEST(SelectObject(hDC, GetStockObject(DC_PEN)) == GetStockObject(BLACK_PEN));
+ TEST(SelectObject(hDC, GetStockObject(BLACK_PEN)) == GetStockObject(DC_PEN));
+
+ // Test for the starting Color == RGB(0,0,0)
+ TEST(SetDCPenColor(hDC, RGB(1,2,3)) == RGB(0,0,0));
+
+ // Check for reuse counter
+ hOldDC = hDC;
+ DeleteDC(hDC);
+ hDC = CreateCompatibleDC(hDCScreen);
+ hDC2 = CreateCompatibleDC(hOldDC);
+ TEST(hDC2 == NULL);
+ if (hDC2 != NULL) DeleteDC(hDC2);
+
+ // cleanup
+ DeleteDC(hDC);
+
+ ReleaseDC(NULL, hDCScreen);
+ return TRUE;
+}
Added: trunk/rostests/win32/gdi32/tests/CreatePen.c
URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/win32/gdi32/tests/CreateP…
==============================================================================
--- trunk/rostests/win32/gdi32/tests/CreatePen.c (added)
+++ trunk/rostests/win32/gdi32/tests/CreatePen.c Sun Apr 29 05:43:41 2007
@@ -1,0 +1,17 @@
+#include "..\gditest.h"
+
+BOOL
+Test_CreatePen(INT* passed, INT* failed)
+{
+ HPEN hPen;
+
+ hPen = CreatePen(PS_COSMETIC, 1, RGB(1,2,3));
+ if (!hPen) return FALSE;
+
+ /* Test if we have a PEN */
+ TEST(GDI_HANDLE_GET_TYPE(hPen) == GDI_OBJECT_TYPE_PEN);
+
+ DeleteObject(hPen);
+ return TRUE;
+}
+
Added: trunk/rostests/win32/gdi32/tests/ExtCreatePen.c
URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/win32/gdi32/tests/ExtCrea…
==============================================================================
--- trunk/rostests/win32/gdi32/tests/ExtCreatePen.c (added)
+++ trunk/rostests/win32/gdi32/tests/ExtCreatePen.c Sun Apr 29 05:43:41 2007
@@ -1,0 +1,23 @@
+#include "..\gditest.h"
+
+BOOL
+Test_ExtCreatePen(INT* passed, INT* failed)
+{
+ HPEN hPen;
+ LOGBRUSH logbrush;
+
+ logbrush.lbStyle = BS_SOLID;
+ logbrush.lbColor = RGB(1,2,3);
+ logbrush.lbHatch = 0;
+ hPen = ExtCreatePen(PS_COSMETIC, 1,&logbrush, 0, 0);
+ if (!hPen) return FALSE;
+
+ /* Test if we have an EXTPEN */
+ TEST(GDI_HANDLE_GET_TYPE(hPen) == GDI_OBJECT_TYPE_EXTPEN);
+
+
+ DeleteObject(hPen);
+ return TRUE;
+}
+
+
Added: trunk/rostests/win32/gdi32/tests/GetObject.c
URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/win32/gdi32/tests/GetObje…
==============================================================================
--- trunk/rostests/win32/gdi32/tests/GetObject.c (added)
+++ trunk/rostests/win32/gdi32/tests/GetObject.c Sun Apr 29 05:43:41 2007
@@ -1,0 +1,398 @@
+#include "..\gditest.h"
+
+BOOL
+Test_General(INT* passed, INT* failed)
+{
+ /* Test null pointer and invalid handles */
+ SetLastError(ERROR_SUCCESS);
+ TEST(GetObjectA(0, 0, NULL) == 0);
+ TEST(GetObjectA((HANDLE)-1, 0, NULL) == 0);
+ TEST(GetObjectA((HANDLE)0x00380000, 0, NULL) == 0);
+ TEST(GetLastError() == ERROR_SUCCESS);
+
+ SetLastError(ERROR_SUCCESS);
+ TEST(GetObjectA((HANDLE)GDI_OBJECT_TYPE_DC, 0, NULL) == 0);
+ TEST(GetLastError() == ERROR_INVALID_HANDLE);
+ SetLastError(ERROR_SUCCESS);
+ TEST(GetObjectW((HANDLE)GDI_OBJECT_TYPE_DC, 0, NULL) == 0);
+ TEST(GetLastError() == ERROR_INVALID_HANDLE);
+ SetLastError(ERROR_SUCCESS);
+ TEST(GetObjectA((HANDLE)GDI_OBJECT_TYPE_REGION, 0, NULL) == 0);
+ TEST(GetLastError() == ERROR_INVALID_HANDLE);
+ SetLastError(ERROR_SUCCESS);
+ TEST(GetObjectW((HANDLE)GDI_OBJECT_TYPE_REGION, 0, NULL) == 0);
+ TEST(GetLastError() == ERROR_INVALID_HANDLE);
+ SetLastError(ERROR_SUCCESS);
+ TEST(GetObjectA((HANDLE)GDI_OBJECT_TYPE_EMF, 0, NULL) == 0);
+ TEST(GetLastError() == ERROR_INVALID_HANDLE);
+ SetLastError(ERROR_SUCCESS);
+ TEST(GetObjectW((HANDLE)GDI_OBJECT_TYPE_EMF, 0, NULL) == 0);
+ TEST(GetLastError() == ERROR_INVALID_HANDLE);
+ SetLastError(ERROR_SUCCESS);
+ TEST(GetObjectA((HANDLE)GDI_OBJECT_TYPE_METAFILE, 0, NULL) == 0);
+ TEST(GetLastError() == ERROR_INVALID_HANDLE);
+ SetLastError(ERROR_SUCCESS);
+ TEST(GetObjectW((HANDLE)GDI_OBJECT_TYPE_METAFILE, 0, NULL) == 0);
+ TEST(GetLastError() == ERROR_INVALID_HANDLE);
+ SetLastError(ERROR_SUCCESS);
+ TEST(GetObjectA((HANDLE)GDI_OBJECT_TYPE_ENHMETAFILE, 0, NULL) == 0);
+ TEST(GetLastError() == ERROR_INVALID_HANDLE);
+ SetLastError(ERROR_SUCCESS);
+ TEST(GetObjectW((HANDLE)GDI_OBJECT_TYPE_ENHMETAFILE, 0, NULL) == 0);
+ TEST(GetLastError() == ERROR_INVALID_HANDLE);
+
+ return TRUE;
+}
+
+BOOL
+Test_Bitmap(INT* passed, INT* failed)
+{
+ HBITMAP hBitmap;
+ BITMAP bitmap;
+ DIBSECTION dibsection;
+ BYTE bData[100] = {0};
+ BYTE Buffer[100] = {48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,0};
+
+ FillMemory(&bitmap, sizeof(BITMAP), 0x77);
+ hBitmap = CreateBitmap(10,10,1,8,bData);
+ if (!hBitmap) return FALSE;
+
+ SetLastError(ERROR_SUCCESS);
+ TEST(GetObjectA((HANDLE)GDI_OBJECT_TYPE_BITMAP, 0, NULL) == sizeof(BITMAP));
+ TEST(GetObjectW((HANDLE)GDI_OBJECT_TYPE_BITMAP, 0, NULL) == sizeof(BITMAP));
+ TEST(GetObjectA((HANDLE)GDI_OBJECT_TYPE_BITMAP, sizeof(BITMAP), NULL) ==
sizeof(BITMAP));
+ TEST(GetObjectA(hBitmap, sizeof(DIBSECTION), NULL) == sizeof(BITMAP));
+ TEST(GetObjectA(hBitmap, 0, NULL) == sizeof(BITMAP));
+ TEST(GetObjectA((HANDLE)((UINT)hBitmap & 0x0000ffff), 0, NULL) == sizeof(BITMAP));
+ TEST(GetObjectA(hBitmap, 5, NULL) == sizeof(BITMAP));
+ TEST(GetObjectA(hBitmap, -5, NULL) == sizeof(BITMAP));
+ TEST(GetObjectA(hBitmap, 0, Buffer) == 0);
+ TEST(GetObjectA(hBitmap, 5, Buffer) == 0);
+ TEST(GetObjectA(hBitmap, sizeof(BITMAP), &bitmap) == sizeof(BITMAP));
+ TEST(GetObjectA(hBitmap, sizeof(BITMAP)+2, &bitmap) == sizeof(BITMAP));
+ TEST(GetObjectA(hBitmap, sizeof(DIBSECTION), &dibsection) == sizeof(BITMAP));
+ TEST(GetObjectA(hBitmap, -5, &bitmap) == sizeof(BITMAP));
+ TEST(GetLastError() == ERROR_SUCCESS);
+
+ // todo: test invalid handle + buffer
+
+ DeleteObject(hBitmap);
+ return TRUE;
+}
+
+BOOL
+Test_Dibsection(INT* passed, INT* failed)
+{
+ BITMAPINFO bmi = {{sizeof(BITMAPINFOHEADER), 10, 10, 1, 8, BI_RGB, 0, 10, 10, 0,0}};
+ HBITMAP hBitmap;
+ DIBSECTION dibsection;
+ PVOID pData;
+
+ FillMemory(&dibsection, sizeof(DIBSECTION), 0x77);
+ HDC hDC = GetDC(0);
+ hBitmap = CreateDIBSection(hDC, &bmi, DIB_RGB_COLORS, &pData, NULL, 0);
+ if(!hBitmap) return FALSE;
+
+ SetLastError(ERROR_SUCCESS);
+ TEST(GetObject(hBitmap, sizeof(DIBSECTION), NULL) == sizeof(BITMAP));
+ TEST(GetObject(hBitmap, 0, NULL) == sizeof(BITMAP));
+ TEST(GetObject(hBitmap, 5, NULL) == sizeof(BITMAP));
+ TEST(GetObject(hBitmap, -5, NULL) == sizeof(BITMAP));
+ TEST(GetObject(hBitmap, 0, &dibsection) == 0);
+ TEST(GetObject(hBitmap, 5, &dibsection) == 0);
+ TEST(GetObject(hBitmap, sizeof(BITMAP), &dibsection) == sizeof(BITMAP));
+ TEST(GetObject(hBitmap, sizeof(BITMAP)+2, &dibsection) == sizeof(BITMAP));
+ TEST(GetObject(hBitmap, sizeof(DIBSECTION), &dibsection) == sizeof(DIBSECTION));
+ TEST(GetObject(hBitmap, sizeof(DIBSECTION)+2, &dibsection) == sizeof(DIBSECTION));
+ TEST(GetObject(hBitmap, -5, &dibsection) == sizeof(DIBSECTION));
+ TEST(GetLastError() == ERROR_SUCCESS);
+ DeleteObject(hBitmap);
+ ReleaseDC(0, hDC);
+
+ return TRUE;
+}
+
+BOOL Test_Palette(INT* passed, INT* failed)
+{
+ LOGPALETTE logpal;
+ HPALETTE hPalette;
+ WORD wPalette;
+
+ FillMemory(&wPalette, sizeof(WORD), 0x77);
+ logpal.palVersion = 0x0300;
+ logpal.palNumEntries = 1;
+ logpal.palPalEntry[0].peRed = 0;
+ logpal.palPalEntry[0].peGreen = 0;
+ logpal.palPalEntry[0].peBlue = 0;
+ logpal.palPalEntry[0].peFlags = PC_EXPLICIT;
+ hPalette = CreatePalette(&logpal);
+ if (!hPalette) return FALSE;
+
+ SetLastError(ERROR_SUCCESS);
+ TEST(GetObjectA((HANDLE)GDI_OBJECT_TYPE_PALETTE, 0, NULL) == sizeof(WORD));
+ TEST(GetObjectW((HANDLE)GDI_OBJECT_TYPE_PALETTE, 0, NULL) == sizeof(WORD));
+ TEST(GetObject(hPalette, sizeof(WORD), NULL) == sizeof(WORD));
+ TEST(GetObject(hPalette, 0, NULL) == sizeof(WORD));
+ TEST(GetObject(hPalette, 5, NULL) == sizeof(WORD));
+ TEST(GetObject(hPalette, -5, NULL) == sizeof(WORD));
+ TEST(GetObject(hPalette, sizeof(WORD), &wPalette) == sizeof(WORD));
+ TEST(GetObject(hPalette, sizeof(WORD)+2, &wPalette) == sizeof(WORD));
+ TEST(GetObject(hPalette, 0, &wPalette) == 0);
+ TEST(GetObject(hPalette, 1, &wPalette) == 0);
+ TEST(GetObject(hPalette, -1, &wPalette) == sizeof(WORD));
+ TEST(GetLastError() == ERROR_SUCCESS);
+ DeleteObject(hPalette);
+ return TRUE;
+}
+
+BOOL Test_Brush(INT* passed, INT* failed)
+{
+ LOGBRUSH logbrush;
+ HBRUSH hBrush;
+
+ FillMemory(&logbrush, sizeof(LOGBRUSH), 0x77);
+ hBrush = CreateSolidBrush(RGB(1,2,3));
+ if (!hBrush) return FALSE;
+
+ SetLastError(ERROR_SUCCESS);
+ TEST(GetObjectA((HANDLE)GDI_OBJECT_TYPE_BRUSH, 0, NULL) == sizeof(LOGBRUSH));
+ TEST(GetObjectW((HANDLE)GDI_OBJECT_TYPE_BRUSH, 0, NULL) == sizeof(LOGBRUSH));
+ TEST(GetObject(hBrush, sizeof(WORD), NULL) == sizeof(LOGBRUSH));
+ TEST(GetObject(hBrush, 0, NULL) == sizeof(LOGBRUSH));
+ TEST(GetObject(hBrush, 5, NULL) == sizeof(LOGBRUSH));
+ TEST(GetObject(hBrush, -5, NULL) == sizeof(LOGBRUSH));
+
+ TEST(GetObject(hBrush, 0, &logbrush) == 0);
+ TEST(logbrush.lbStyle == 0x77777777);
+ TEST(GetObject(hBrush, 5, &logbrush) == sizeof(LOGBRUSH));
+ TEST(logbrush.lbStyle == 0);
+ TEST(logbrush.lbColor == 0x77777701);
+
+ TEST(GetObject(hBrush, sizeof(LOGBRUSH), &logbrush) == sizeof(LOGBRUSH));
+ TEST(GetObject(hBrush, sizeof(LOGBRUSH)+2, &logbrush) == sizeof(LOGBRUSH));
+ TEST(GetObject(hBrush, -1, &logbrush) == sizeof(LOGBRUSH));
+ // TODO: test all members
+
+ TEST(GetLastError() == ERROR_SUCCESS);
+ DeleteObject(hBrush);
+ return TRUE;
+}
+
+BOOL Test_Pen(INT* passed, INT* failed)
+{
+ LOGPEN logpen;
+ HPEN hPen;
+
+ FillMemory(&logpen, sizeof(LOGPEN), 0x77);
+ hPen = CreatePen(PS_SOLID, 3, RGB(4,5,6));
+ if (!hPen) return FALSE;
+ SetLastError(ERROR_SUCCESS);
+ TEST(GetObjectA((HANDLE)GDI_OBJECT_TYPE_PEN, 0, NULL) == sizeof(LOGPEN));
+ TEST(GetObjectW((HANDLE)GDI_OBJECT_TYPE_PEN, 0, NULL) == sizeof(LOGPEN));
+ TEST(GetObject(hPen, sizeof(BITMAP), NULL) == sizeof(LOGPEN));
+ TEST(GetObject(hPen, 0, NULL) == sizeof(LOGPEN));
+ TEST(GetObject(hPen, 5, NULL) == sizeof(LOGPEN));
+ TEST(GetObject(hPen, -5, NULL) == sizeof(LOGPEN));
+ TEST(GetObject(hPen, sizeof(LOGPEN), &logpen) == sizeof(LOGPEN));
+ TEST(GetObject(hPen, sizeof(LOGPEN)+2, &logpen) == sizeof(LOGPEN));
+ TEST(GetObject(hPen, 0, &logpen) == 0);
+ TEST(GetObject(hPen, 5, &logpen) == 0);
+ TEST(GetObject(hPen, -5, &logpen) == sizeof(LOGPEN));
+ TEST(GetLastError() == ERROR_SUCCESS);
+ DeleteObject(hPen);
+ return TRUE;
+}
+
+BOOL Test_ExtPen(INT* passed, INT* failed)
+{
+ HPEN hPen;
+ EXTLOGPEN extlogpen;
+ LOGBRUSH logbrush;
+
+ SetLastError(ERROR_SUCCESS);
+ TEST(GetObjectA((HANDLE)GDI_OBJECT_TYPE_EXTPEN, 0, NULL) == 0);
+ TEST(GetObjectW((HANDLE)GDI_OBJECT_TYPE_EXTPEN, 0, NULL) == 0);
+ TEST(GetLastError() == ERROR_INVALID_PARAMETER);
+
+ FillMemory(&extlogpen, sizeof(EXTLOGPEN), 0x77);
+ logbrush.lbStyle = BS_SOLID;
+ logbrush.lbColor = RGB(1,2,3);
+ logbrush.lbHatch = 0;
+ hPen = ExtCreatePen(PS_GEOMETRIC | PS_SOLID, 5, &logbrush, 0, NULL);
+
+ TEST(GDI_HANDLE_GET_TYPE(hPen) == GDI_OBJECT_TYPE_EXTPEN);
+ TEST(GetObject((HANDLE)GDI_OBJECT_TYPE_EXTPEN, 0, NULL) == 0);
+ TEST(GetObject(hPen, sizeof(EXTLOGPEN), NULL) == sizeof(EXTLOGPEN)-sizeof(DWORD));
+ TEST(GetObject(hPen, 0, NULL) == sizeof(EXTLOGPEN)-sizeof(DWORD));
+ TEST(GetObject((HANDLE)GDI_HANDLE_GET_INDEX(hPen), 0, NULL) ==
sizeof(EXTLOGPEN)-sizeof(DWORD));
+ TEST(GetObject(hPen, 5, NULL) == sizeof(EXTLOGPEN)-sizeof(DWORD));
+ TEST(GetObject(hPen, -5, NULL) == sizeof(EXTLOGPEN)-sizeof(DWORD));
+ TEST(GetObject(hPen, 0, &extlogpen) == 0);
+ TEST(GetObject(hPen, 4, &extlogpen) == 0);
+
+ /* Nothing should be filled */
+ TEST(extlogpen.elpPenStyle == 0x77777777);
+ TEST(extlogpen.elpWidth == 0x77777777);
+
+ TEST(GetObject(hPen, sizeof(EXTLOGPEN), &extlogpen) ==
sizeof(EXTLOGPEN)-sizeof(DWORD));
+ TEST(GetObject(hPen, sizeof(EXTLOGPEN)+2, &extlogpen) ==
sizeof(EXTLOGPEN)-sizeof(DWORD));
+ TEST(GetObject(hPen, -5, &extlogpen) == sizeof(EXTLOGPEN)-sizeof(DWORD));
+
+ /* test if the fields are filled correctly */
+ TEST(extlogpen.elpPenStyle == PS_GEOMETRIC);
+ TEST(extlogpen.elpWidth == 5);
+ TEST(extlogpen.elpBrushStyle == 0);
+ TEST(extlogpen.elpColor == RGB(1,2,3));
+ TEST(extlogpen.elpHatch == 0);
+ TEST(extlogpen.elpNumEntries == 0);
+ DeleteObject(hPen);
+ return TRUE;
+}
+
+BOOL Test_Font(INT* passed, INT* failed)
+{
+ HFONT hFont;
+ LOGFONTA logfonta;
+ LOGFONTW logfontw;
+ EXTLOGFONTA extlogfonta;
+ EXTLOGFONTW extlogfontw;
+ ENUMLOGFONTEXA enumlogfontexa;
+ ENUMLOGFONTEXW enumlogfontexw;
+ ENUMLOGFONTEXDVA enumlogfontexdva;
+ ENUMLOGFONTEXDVW enumlogfontexdvw;
+ ENUMLOGFONTA enumlogfonta;
+ ENUMLOGFONTW enumlogfontw;
+ BYTE bData[270];
+
+ FillMemory(&logfonta, sizeof(LOGFONTA), 0x77);
+ hFont = CreateFont(8, 8, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE,
+ ANSI_CHARSET, OUT_CHARACTER_PRECIS, CLIP_CHARACTER_PRECIS,
+ ANTIALIASED_QUALITY, DEFAULT_PITCH, "testfont");
+ TEST(hFont);
+
+ SetLastError(ERROR_SUCCESS);
+ TEST(GetObjectA((HANDLE)GDI_OBJECT_TYPE_FONT, 0, NULL) == sizeof(LOGFONTA));
+ TEST(GetObjectW((HANDLE)GDI_OBJECT_TYPE_FONT, 0, NULL) == sizeof(LOGFONTW));
+ TEST(GetObjectA((HANDLE)GDI_OBJECT_TYPE_FONT, sizeof(LOGFONTA), NULL) ==
sizeof(LOGFONTA)); // 60
+ TEST(GetObjectA((HANDLE)GDI_OBJECT_TYPE_FONT, sizeof(ENUMLOGFONTA), NULL) ==
sizeof(LOGFONTA)); // 156
+ TEST(GetObjectA((HANDLE)GDI_OBJECT_TYPE_FONT, sizeof(ENUMLOGFONTEXA), NULL) ==
sizeof(LOGFONTA)); // 188
+ TEST(GetObjectA((HANDLE)GDI_OBJECT_TYPE_FONT, sizeof(EXTLOGFONTA), NULL) ==
sizeof(LOGFONTA)); // 192
+ TEST(GetObjectA((HANDLE)GDI_OBJECT_TYPE_FONT, sizeof(ENUMLOGFONTEXDVA), NULL) ==
sizeof(LOGFONTA)); // 260
+ TEST(GetObjectA((HANDLE)GDI_OBJECT_TYPE_FONT, sizeof(ENUMLOGFONTEXDVA)+1, NULL) ==
sizeof(LOGFONTA)); // 260
+ TEST(GetObjectW((HANDLE)GDI_OBJECT_TYPE_FONT, sizeof(LOGFONTW), NULL) ==
sizeof(LOGFONTW)); // 92
+ TEST(GetObjectW((HANDLE)GDI_OBJECT_TYPE_FONT, sizeof(ENUMLOGFONTW), NULL) ==
sizeof(LOGFONTW)); // 284
+ TEST(GetObjectW((HANDLE)GDI_OBJECT_TYPE_FONT, sizeof(EXTLOGFONTW), NULL) ==
sizeof(LOGFONTW)); // 320
+ TEST(GetObjectW((HANDLE)GDI_OBJECT_TYPE_FONT, sizeof(ENUMLOGFONTEXW), NULL) ==
sizeof(LOGFONTW)); // 348
+ TEST(GetObjectW((HANDLE)GDI_OBJECT_TYPE_FONT, sizeof(ENUMLOGFONTEXDVW), NULL) ==
sizeof(LOGFONTW)); // 420
+ TEST(GetObjectW((HANDLE)GDI_OBJECT_TYPE_FONT, sizeof(ENUMLOGFONTEXDVW)+1, NULL) ==
sizeof(LOGFONTW)); // 356!
+
+ TEST(GetObjectA(hFont, sizeof(LOGFONTA), NULL) == sizeof(LOGFONTA));
+ TEST(GetObjectA(hFont, 0, NULL) == sizeof(LOGFONTA));
+ TEST(GetObjectA(hFont, 5, NULL) == sizeof(LOGFONTA));
+ TEST(GetObjectA(hFont, -5, NULL) == sizeof(LOGFONTA));
+ TEST(GetObjectA(hFont, 0, &logfonta) == 0);
+ TEST(logfonta.lfHeight == 0x77777777);
+
+ TEST(GetObjectA(hFont, 5, &logfonta) == 5);
+ TEST(logfonta.lfHeight == 8);
+ TEST(logfonta.lfWidth == 0x77777708);
+
+ TEST(GetObjectA(hFont, sizeof(LOGFONTA), &logfonta) == sizeof(LOGFONTA)); // 60
+ TEST(GetObjectA(hFont, sizeof(LOGFONTW), &logfontw) == sizeof(LOGFONTA)); // 92
+ TEST(GetObjectA(hFont, sizeof(EXTLOGFONTA), &extlogfonta) == sizeof(EXTLOGFONTA));
// 192
+ TEST(GetObjectA(hFont, sizeof(EXTLOGFONTA)+1, &extlogfonta) ==
sizeof(EXTLOGFONTA)+1); // 192
+ TEST(GetObjectA(hFont, sizeof(EXTLOGFONTW), &extlogfontw) ==
sizeof(ENUMLOGFONTEXDVA)); // 320
+
+ TEST(GetObjectA(hFont, 261, &bData) == 260); // no
+
+ /* LOGFONT / GetObjectW */
+ FillMemory(&logfontw, sizeof(LOGFONTW), 0x77);
+
+ TEST(GetObjectW(hFont, sizeof(LOGFONTW), NULL) == sizeof(LOGFONTW));
+ TEST(GetObjectW(hFont, 0, NULL) == sizeof(LOGFONTW));
+ TEST(GetObjectW(hFont, 5, NULL) == sizeof(LOGFONTW));
+ TEST(GetObjectW(hFont, -5, NULL) == sizeof(LOGFONTW));
+ TEST(GetObjectW(hFont, 0, &logfontw) == 0);
+ TEST(logfontw.lfHeight == 0x77777777);
+
+ TEST(GetObjectW(hFont, 5, &logfontw) == 5);
+ TEST(logfontw.lfHeight == 8);
+ TEST(logfontw.lfWidth == 0x77777708);
+
+ TEST(GetObjectA(hFont, sizeof(LOGFONTA), &logfonta) == sizeof(LOGFONTA)); // 60
+ TEST(logfonta.lfHeight == 8);
+ TEST(GetObjectA(hFont, sizeof(ENUMLOGFONTA), &enumlogfonta) ==
sizeof(ENUMLOGFONTA)); // 156
+ TEST(GetObjectA(hFont, sizeof(ENUMLOGFONTEXA), &enumlogfontexa) ==
sizeof(ENUMLOGFONTEXA)); // 188
+ TEST(GetObjectA(hFont, sizeof(EXTLOGFONTA), &extlogfonta) == sizeof(EXTLOGFONTA));
// 192
+ TEST(GetObjectA(hFont, sizeof(ENUMLOGFONTEXDVA), &enumlogfontexdva) ==
sizeof(ENUMLOGFONTEXDVA)); // 260
+ TEST(GetObjectA(hFont, sizeof(ENUMLOGFONTEXDVA)+1, &enumlogfontexdva) ==
sizeof(ENUMLOGFONTEXDVA)); // 260
+
+ TEST(GetObjectW(hFont, sizeof(LOGFONTW), &logfontw) == sizeof(LOGFONTW)); // 92
+ TEST(GetObjectW(hFont, sizeof(ENUMLOGFONTW), &enumlogfontw) ==
sizeof(ENUMLOGFONTW)); // 284
+ TEST(GetObjectW(hFont, sizeof(EXTLOGFONTW), &extlogfontw) == sizeof(EXTLOGFONTW));
// 320
+ TEST(GetObjectW(hFont, sizeof(ENUMLOGFONTEXW), &enumlogfontexw) ==
sizeof(ENUMLOGFONTEXW)); // 348
+ TEST(GetObjectW(hFont, sizeof(ENUMLOGFONTEXDVW), &enumlogfontexdvw) ==
sizeof(ENUMLOGFONTEXW) + 2*sizeof(DWORD)); // 420
+ TEST(GetObjectW(hFont, sizeof(ENUMLOGFONTEXDVW)+1, &enumlogfontexdvw) ==
sizeof(ENUMLOGFONTEXW) + 2*sizeof(DWORD)); // 356!
+
+ TEST(GetObjectW(hFont, 356, &bData) == 356);
+ TEST(GetLastError() == ERROR_SUCCESS);
+
+ DeleteObject(hFont);
+
+ return TRUE;
+}
+
+BOOL Test_Colorspace(INT* passed, INT* failed)
+{
+ SetLastError(ERROR_SUCCESS);
+ TEST(GetObjectA((HANDLE)GDI_OBJECT_TYPE_COLORSPACE, 0, NULL) == 60);// FIXME: what
structure?
+ TEST(GetLastError() == ERROR_INSUFFICIENT_BUFFER);
+ SetLastError(ERROR_SUCCESS);
+ TEST(GetObjectW((HANDLE)GDI_OBJECT_TYPE_COLORSPACE, 0, NULL) == 0);
+ TEST(GetLastError() == ERROR_INSUFFICIENT_BUFFER);
+
+ return TRUE;
+}
+
+BOOL Test_MetaDC(INT* passed, INT* failed)
+{
+ /* Windows does not SetLastError() on a metadc, but it doesn't seem to do anything
with it */
+ HDC hMetaDC;
+ BYTE buffer[100];
+
+ hMetaDC = CreateMetaFile(NULL);
+ if(!hMetaDC) return FALSE;
+ if(((UINT)hMetaDC & GDI_HANDLE_TYPE_MASK) != GDI_OBJECT_TYPE_METADC) return FALSE;
+
+ SetLastError(ERROR_SUCCESS);
+ TEST(GetObjectA((HANDLE)GDI_OBJECT_TYPE_METADC, 0, NULL) == 0);
+ TEST(GetObjectA((HANDLE)GDI_OBJECT_TYPE_METADC, 100, &buffer) == 0);
+ TEST(GetObjectA(hMetaDC, 0, NULL) == 0);
+ TEST(GetObjectA(hMetaDC, 100, &buffer) == 0);
+ TEST(GetLastError() == ERROR_SUCCESS);
+ return TRUE;
+}
+
+BOOL Test_GetObject(INT* passed, INT* failed)
+{
+
+ HRGN hRgn;
+ hRgn = CreateRectRgn(0,0,5,5);
+ SetLastError(ERROR_SUCCESS);
+ TEST(GetObjectW(hRgn, 0, NULL) == 0);
+ TEST(GetLastError() == ERROR_INVALID_HANDLE);
+ DeleteObject(hRgn);
+
+ Test_Font(passed, failed);
+ Test_Colorspace(passed, failed);
+ Test_General(passed, failed);
+ Test_Bitmap(passed, failed);
+ Test_Dibsection(passed, failed);
+ Test_Palette(passed, failed);
+ Test_Brush(passed, failed);
+ Test_Pen(passed, failed);
+// Test_ExtPpen(passed, failed); // not implemented yet in ROS
+ Test_MetaDC(passed, failed);
+
+ return TRUE;
+}
Added: trunk/rostests/win32/gdi32/tests/GetStockObject.c
URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/win32/gdi32/tests/GetStoc…
==============================================================================
--- trunk/rostests/win32/gdi32/tests/GetStockObject.c (added)
+++ trunk/rostests/win32/gdi32/tests/GetStockObject.c Sun Apr 29 05:43:41 2007
@@ -1,0 +1,26 @@
+#include "..\gditest.h"
+
+BOOL Test_GetStockObject(INT* passed, INT* failed)
+{
+ /* Test limits and error */
+ SetLastError(ERROR_SUCCESS);
+ TEST(GetStockObject(0) != NULL);
+ TEST(GetStockObject(21) != NULL);
+ TEST(GetStockObject(-1) == NULL);
+ TEST(GetStockObject(9) == NULL);
+ TEST(GetStockObject(22) == NULL);
+ TEST(GetLastError() == ERROR_SUCCESS);
+
+ /* Test for the stock bit */
+ TEST((UINT)GetStockObject(WHITE_BRUSH) && GDI_HANDLE_STOCK_MASK);
+
+ /* Test for correct types */
+ TEST(GDI_HANDLE_GET_TYPE(GetStockObject(WHITE_BRUSH)) == GDI_OBJECT_TYPE_BRUSH);
+ TEST(GDI_HANDLE_GET_TYPE(GetStockObject(DC_BRUSH)) == GDI_OBJECT_TYPE_BRUSH);
+ TEST(GDI_HANDLE_GET_TYPE(GetStockObject(WHITE_PEN)) == GDI_OBJECT_TYPE_PEN);
+ TEST(GDI_HANDLE_GET_TYPE(GetStockObject(DC_PEN)) == GDI_OBJECT_TYPE_PEN);
+ TEST(GDI_HANDLE_GET_TYPE(GetStockObject(ANSI_VAR_FONT)) == GDI_OBJECT_TYPE_FONT);
+ TEST(GDI_HANDLE_GET_TYPE(GetStockObject(DEFAULT_PALETTE)) == GDI_OBJECT_TYPE_PALETTE);
+
+ return TRUE;
+}
Added: trunk/rostests/win32/gdi32/tests/SelectObject.c
URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/win32/gdi32/tests/SelectO…
==============================================================================
--- trunk/rostests/win32/gdi32/tests/SelectObject.c (added)
+++ trunk/rostests/win32/gdi32/tests/SelectObject.c Sun Apr 29 05:43:41 2007
@@ -1,0 +1,7 @@
+#include "..\gditest.h"
+
+BOOL Test_SelectObject(INT* passed, INT* failed)
+{
+ return TRUE;
+}
+
Added: trunk/rostests/win32/gdi32/tests/SetDCPenColor.c
URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/win32/gdi32/tests/SetDCPe…
==============================================================================
--- trunk/rostests/win32/gdi32/tests/SetDCPenColor.c (added)
+++ trunk/rostests/win32/gdi32/tests/SetDCPenColor.c Sun Apr 29 05:43:41 2007
@@ -1,0 +1,42 @@
+#include "..\gditest.h"
+
+BOOL Test_SetDCPenColor(INT* passed, INT* failed)
+{
+ HDC hScreenDC, hDC;
+
+ // Test an incorrect DC
+ TEST(SetDCPenColor(0, RGB(0,0,0)) == CLR_INVALID);
+
+ // Get the Screen DC
+ hScreenDC = GetDC(NULL);
+ if (hScreenDC == NULL) return FALSE;
+
+ // Test the screen DC
+ SetDCPenColor(hScreenDC, RGB(1,2,3));
+ TEST(SetDCPenColor(hScreenDC, RGB(4,5,6)) == RGB(1,2,3));
+
+ // Create a new DC
+ hDC = CreateCompatibleDC(hScreenDC);
+ ReleaseDC(0, hScreenDC);
+ if (hDC == NULL)
+ {
+ return FALSE;
+ }
+
+ // Select the DC_PEN and check if the pen returned by a new call is DC_PEN
+ SelectObject(hDC, GetStockObject(DC_PEN));
+ TEST(SelectObject(hDC, GetStockObject(BLACK_PEN)) == GetStockObject(DC_PEN));
+
+ // Test an incorrect color, yes windows sets the color!
+ SetDCPenColor(hDC, 0x21123456);
+ TEST(SetDCPenColor(hDC, RGB(0,0,0)) == 0x21123456);
+
+ // Test CLR_INVALID, it sets CLR_INVALID!
+ SetDCPenColor(hDC, CLR_INVALID);
+ TEST(SetDCPenColor(hDC, RGB(0,0,0)) == CLR_INVALID);
+
+ // Delete the DC
+ DeleteDC(hDC);
+
+ return TRUE;
+}
Added: trunk/rostests/win32/gdi32/tests/SetSysColors.c
URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/win32/gdi32/tests/SetSysC…
==============================================================================
--- trunk/rostests/win32/gdi32/tests/SetSysColors.c (added)
+++ trunk/rostests/win32/gdi32/tests/SetSysColors.c Sun Apr 29 05:43:41 2007
@@ -1,0 +1,32 @@
+#include "..\gditest.h"
+
+#define NUM_SYSCOLORS 31
+
+BOOL Test_SetSysColors(INT* passed, INT* failed)
+{
+ INT i;
+ INT nElements[NUM_SYSCOLORS];
+ COLORREF crOldColors[NUM_SYSCOLORS];
+ COLORREF crColors[3] = {RGB(212, 208, 200),2,3};
+
+return TRUE; // This is because codeblocks doesn't like changing syscolors ;-(
+
+ /* First save the Old colors */
+ for (i = 0; i < NUM_SYSCOLORS; i++)
+ {
+ nElements[i] = i;
+ crOldColors[i] = GetSysColor(i);
+ }
+
+ TEST((UINT)SetSysColors(0, nElements, crColors) == 1);
+ TEST((UINT)SetSysColors(1, nElements, crColors) == 1);
+ TEST((UINT)SetSysColors(2, nElements, crColors) == 1);
+
+ /* try more than NUM_SYSCOLORS */
+ TEST((UINT)SetSysColors(55, nElements, crColors) == 1);
+
+ /* restore old SysColors */
+ SetSysColors(NUM_SYSCOLORS, nElements, crOldColors);
+
+ return TRUE;
+}
Modified: trunk/rostests/win32/testsets.rbuild
URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/win32/testsets.rbuild?rev…
==============================================================================
--- trunk/rostests/win32/testsets.rbuild (original)
+++ trunk/rostests/win32/testsets.rbuild Sun Apr 29 05:43:41 2007
@@ -3,6 +3,9 @@
<group>
<directory name="cmd">
<xi:include href="cmd/cmd_test.rbuild" />
+</directory>
+<directory name="gdi32">
+ <xi:include href="gdi32/gdi32_test.rbuild" />
</directory>
<directory name="kernel32">
<xi:include href="kernel32/directory.rbuild" />