Something went wrong. Try again.
Reactos
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227/* * PROJECT: ReactOS api tests * LICENSE: GPL - See COPYING in the top level directory * PURPOSE: Test for SelectObject * PROGRAMMERS: Timo Kreuzer */
#include "precomp.h"
HDC hdc1, hdc2;
static voidTest_SelectObject(){ HGDIOBJ hOldObj, hNewObj;// PGDI_TABLE_ENTRY pEntry;// PDC_ATTR pDc_Attr;// HANDLE hcmXform;
/* Get the Dc_Attr for later testing */// pEntry = &GdiHandleTable[GDI_HANDLE_GET_INDEX(hdc1)];// pDc_Attr = pEntry->UserData;// ok(pDc_Attr != NULL, "Skipping tests.\n");// if (pDc_Attr == NULL) return;
/* Test incomplete dc handle doesn't work */ SetLastError(ERROR_SUCCESS); hNewObj = GetStockObject(GRAY_BRUSH); hOldObj = SelectObject((HDC)GDI_HANDLE_GET_INDEX(hdc1), hNewObj); ok_err(ERROR_INVALID_HANDLE); ok(hOldObj == NULL, "\n");// ok(pDc_Attr->hbrush == GetStockObject(WHITE_BRUSH), "\n"); SelectObject(hdc1, hOldObj);
/* Test incomplete hobj handle works */ hNewObj = GetStockObject(GRAY_BRUSH); hOldObj = SelectObject(hdc1, (HGDIOBJ)GDI_HANDLE_GET_INDEX(hNewObj)); ok(hOldObj == GetStockObject(WHITE_BRUSH), "\n");// ok(pDc_Attr->hbrush == hNewObj, "\n"); SelectObject(hdc1, hOldObj);
/* Test wrong hDC handle type */ SetLastError(ERROR_SUCCESS); hNewObj = GetStockObject(GRAY_BRUSH); hdc2 = (HDC)((UINT_PTR)hdc1 & ~GDI_HANDLE_TYPE_MASK); hdc2 = (HDC)((UINT_PTR)hdc2 | GDI_OBJECT_TYPE_PEN); hOldObj = SelectObject(hdc2, hNewObj); ok_err(ERROR_INVALID_HANDLE); ok(hOldObj == NULL, "\n");// RTEST(pDc_Attr->hbrush == GetStockObject(WHITE_BRUSH));
/* Test wrong hobj handle type */ SetLastError(ERROR_SUCCESS); hNewObj = GetStockObject(GRAY_BRUSH); hNewObj = (HGDIOBJ)((UINT_PTR)hNewObj & ~GDI_HANDLE_TYPE_MASK); hNewObj = (HGDIOBJ)((UINT_PTR)hNewObj | GDI_OBJECT_TYPE_PEN); hOldObj = SelectObject(hdc1, hNewObj); ok_err(ERROR_SUCCESS); ok(hOldObj == NULL, "\n");// RTEST(pDc_Attr->hbrush == GetStockObject(WHITE_BRUSH));
SetLastError(ERROR_SUCCESS); hNewObj = (HGDIOBJ)0x00761234; hOldObj = SelectObject(hdc1, hNewObj); ok(hOldObj == NULL, "\n"); ok_err(ERROR_SUCCESS); SelectObject(hdc1, hOldObj);
/* Test DC */ SetLastError(ERROR_SUCCESS); hOldObj = SelectObject(hdc1, GetDC(NULL)); ok(hOldObj == NULL, "\n"); ok_err(ERROR_SUCCESS);
/* Test CLIOBJ */
/* Test PATH */
/* Test PALETTE */ SetLastError(ERROR_SUCCESS); hNewObj = GetStockObject(DEFAULT_PALETTE); hOldObj = SelectObject(hdc1, hNewObj); RTEST(hOldObj == NULL); ok_err(ERROR_INVALID_FUNCTION);
/* Test COLORSPACE */
/* Test FONT */
/* Test PFE */
/* Test BRUSH */ hNewObj = GetStockObject(GRAY_BRUSH); hOldObj = SelectObject(hdc1, hNewObj); RTEST(hOldObj == GetStockObject(WHITE_BRUSH));// RTEST(pDc_Attr->hbrush == hNewObj); RTEST(GDI_HANDLE_GET_TYPE(hOldObj) == GDI_OBJECT_TYPE_BRUSH); SelectObject(hdc1, hOldObj);
/* Test DC_BRUSH */ hNewObj = GetStockObject(DC_BRUSH); hOldObj = SelectObject(hdc1, hNewObj);// RTEST(pDc_Attr->hbrush == hNewObj); SelectObject(hdc1, hOldObj);
/* Test BRUSH color xform */// hcmXform = (HANDLE)pDc_Attr->hcmXform;
/* Test EMF */
/* test METAFILE */ SetLastError(ERROR_SUCCESS); hNewObj = CreateMetaFile(NULL); ok(hNewObj != 0, "failed to create a meta dc\n"); hOldObj = SelectObject(hdc1, hNewObj); RTEST(hOldObj == NULL); ok_err(ERROR_SUCCESS);
/* Test ENHMETAFILE */
/* Test EXTPEN */
/* Test METADC */}
static voidTest_Bitmap(){ HBITMAP hbmp, hbmpInvalid, hbmpOld; BYTE bmBits[4] = {0}; HDC hdcTmp;
hbmp = CreateBitmap(2, 2, 1, 1, &bmBits); hbmpInvalid = CreateBitmap(2, 2, 1, 4, &bmBits); if (!hbmp || !hbmpInvalid) { printf("couldn't create bitmaps, skipping\n"); return; }
hbmpOld = SelectObject(hdc1, hbmp); ok(GDI_HANDLE_GET_TYPE(hbmpOld) == GDI_OBJECT_TYPE_BITMAP, "wrong type\n");
/* Test invalid BITMAP */ ok(SelectObject(hdc1, hbmpInvalid) == NULL, "should fail\n");
/* Test if we get the right bitmap back */ hbmpOld = SelectObject(hdc1, hbmpOld); ok(hbmpOld == hbmp, "didn't get the right bitmap back.\n");
/* Test selecting bitmap into 2 DCs */ hbmpOld = SelectObject(hdc1, hbmp); ok(SelectObject(hdc2, hbmp) == NULL, "Should fail.\n");
/* Test selecting same bitmap twice */ hbmpOld = SelectObject(hdc1, hbmp); ok(hbmpOld == hbmp, "didn't get the right bitmap back.\n"); SelectObject(hdc1, GetStockObject(DEFAULT_BITMAP));
/* Test selecting and then deleting the DC */ hdcTmp = CreateCompatibleDC(NULL); hbmpOld = SelectObject(hdcTmp, hbmp); ok(hbmpOld == GetStockObject(DEFAULT_BITMAP), "didn't get the right bitmap back.\n"); DeleteDC(hdcTmp); hbmpOld = SelectObject(hdc1, hbmp); ok(hbmpOld == GetStockObject(DEFAULT_BITMAP), "didn't get the right bitmap back.\n");
DeleteObject(hbmp); DeleteObject(hbmpInvalid);}
static voidTest_Pen(){ HPEN hpen, hpenOld;
/* Test PEN */ hpen = GetStockObject(GRAY_BRUSH); hpenOld = SelectObject(hdc1, hpen); ok(hpenOld == GetStockObject(WHITE_BRUSH), "Got wrong pen.\n");// RTEST(pDc_Attr->hbrush == hpen); ok(GDI_HANDLE_GET_TYPE(hpenOld) == GDI_OBJECT_TYPE_BRUSH, "wrong type.\n"); SelectObject(hdc1, hpenOld);}
static voidTest_Region(){ HRGN hrgn, hrgnOld;
/* Test REGION */ SetLastError(ERROR_SUCCESS); hrgn = CreateRectRgn(0,0,0,0); hrgnOld = SelectObject(hdc1, hrgn); ok((UINT_PTR)hrgnOld == NULLREGION, "\n"); DeleteObject(hrgn);
hrgn = CreateRectRgn(0,0,10,10); ok((UINT_PTR)SelectObject(hdc1, hrgn) == SIMPLEREGION, "\n"); hrgnOld = CreateRectRgn(5,5,20,20); ok(CombineRgn(hrgn, hrgn, hrgnOld, RGN_OR) == COMPLEXREGION, "\n"); DeleteObject(hrgnOld); ok((UINT_PTR)SelectObject(hdc1, hrgn) == SIMPLEREGION, "\n"); // ??? Why this? DeleteObject(hrgn);// ok(IsHandleValid(hrgn) == TRUE, "\n"); ok_err(ERROR_SUCCESS);}
START_TEST(SelectObject){ hdc1 = CreateCompatibleDC(NULL); hdc2 = CreateCompatibleDC(NULL); if (!hdc1 || !hdc2) { printf("couldn't create DCs, skipping all tests\n"); return; }
Test_SelectObject(); Test_Bitmap(); Test_Pen(); Test_Region();}