reactos/modules/rostests/apitests/gdi32/SetWindowExtEx.c
Katayama Hirofumi MZ 234a78e09f
[ROSTESTS][GDI32_APITEST] Follow up of #1457 (#1458)
Thanks, @SergeGautherie.
2019-04-03 20:42:21 +09:00

323 lines
10 KiB
C

/*
* PROJECT: ReactOS api tests
* LICENSE: GPL - See COPYING in the top level directory
* PURPOSE: Test for SetWindowExtEx
* PROGRAMMERS: Timo Kreuzer
* Katayama Hirofumi MZ
*/
#include "precomp.h"
void Test_SetWindowExtEx()
{
HDC hDC;
BOOL ret;
SIZE WindowExt, ViewportExt;
//PGDI_TABLE_ENTRY pEntry;
//DC_ATTR* pDC_Attr;
hDC = CreateCompatibleDC(0);
ok(hDC != NULL, "CreateCompatibleDC failed. Skipping tests.\n");
if (hDC == NULL) return;
SetLastError(0);
ret = SetWindowExtEx(0, 0, 0, NULL);
ok_err(ERROR_INVALID_HANDLE);
ok_int(ret, 0);
SetLastError(0);
ret = SetWindowExtEx((HDC)0x1234, 0, 0, NULL);
ok_err(ERROR_INVALID_HANDLE);
ok_int(ret, 0);
SetLastError(0);
ret = SetWindowExtEx((HDC)0x10000, 0, 0, NULL);
ok_err(ERROR_INVALID_PARAMETER);
ok_int(ret, 0);
SetLastError(0);
ret = SetWindowExtEx((HDC)0x210000, 0, 0, NULL); // GDILoObjType_LO_ALTDC_TYPE
ok_err(ERROR_INVALID_HANDLE);
ok_int(ret, 0);
SetLastError(0);
ret = SetWindowExtEx((HDC)0x260000, 0, 0, NULL); // GDILoObjType_LO_METAFILE16_TYPE
ok_err(ERROR_INVALID_HANDLE);
ok_int(ret, 0);
SetLastError(0);
ret = SetWindowExtEx((HDC)0x460000, 0, 0, NULL); // GDILoObjType_LO_METAFILE_TYPE
ok_err(ERROR_INVALID_HANDLE);
ok_int(ret, 0);
SetLastError(0);
ret = SetWindowExtEx((HDC)0x660000, 0, 0, NULL); // GDILoObjType_LO_METADC16_TYPE
ok_err(ERROR_INVALID_HANDLE);
ok_int(ret, 0);
SetLastError(0);
ret = SetWindowExtEx(hDC, 0, 0, NULL);
ok_err(0);
ok_int(ret, 1);
/* Test 16 bit handle */
SetLastError(0);
ret = SetWindowExtEx((HDC)((ULONG_PTR)hDC & 0xffff), 0, 0, NULL);
ok_err(ERROR_INVALID_HANDLE);
ok_int(ret, 0);
WindowExt.cx = 1234;
WindowExt.cy = 6789;
SetLastError(0);
ret = SetWindowExtEx(0, 0, 0, &WindowExt);
ok_err(ERROR_INVALID_HANDLE);
ok_int(ret, 0);
ok_long(WindowExt.cx, 1234);
ok_long(WindowExt.cy, 6789);
DeleteDC(hDC);
/* Test with a deleted DC */
SetLastError(0);
ret = SetWindowExtEx(hDC, 0, 0, NULL);
ok_err(ERROR_INVALID_PARAMETER);
ok_int(ret, 0);
hDC = CreateCompatibleDC(0);
ok(hDC != NULL, "CreateCompatibleDC failed. Skipping tests.\n");
if (hDC == NULL) return;
//pEntry = GdiHandleTable + GDI_HANDLE_GET_INDEX(hDC);
//pDC_Attr = pEntry->UserData;
//ASSERT(pDC_Attr);
/* Test setting 0 extents without changing the map mode (MM_TEXT) */
ret = SetWindowExtEx(hDC, 0, 0, &WindowExt);
ok_int(ret, 1);
ok_long(WindowExt.cx, 1);
ok_long(WindowExt.cy, 1);
/* Test setting proper extents without changing the map mode (MM_TEXT) */
WindowExt.cx = WindowExt.cy = 0;
ret = SetWindowExtEx(hDC, 10, 20, &WindowExt);
ok_int(ret, 1);
ok_long(WindowExt.cx, 1);
ok_long(WindowExt.cy, 1);
/* Values should not be changed */
WindowExt.cx = WindowExt.cy = 0;
ret = SetWindowExtEx(hDC, 40, 30, &WindowExt);
ok_int(ret, 1);
ok_long(WindowExt.cx, 1);
ok_long(WindowExt.cy, 1);
/* Check the viewport */
GetViewportExtEx(hDC, &ViewportExt);
ok_long(ViewportExt.cx, 1);
ok_long(ViewportExt.cy, 1);
/* Test setting in isotropic mode with 0 extents */
SetMapMode(hDC, MM_ISOTROPIC);
WindowExt.cx = WindowExt.cy = 0;
ret = SetWindowExtEx(hDC, 0, 0, &WindowExt);
ok_int(ret, 0);
//ok_long(WindowExt.cx, 3600);
//ok_long(WindowExt.cy, 2700);
ret = SetWindowExtEx(hDC, 100, 0, &WindowExt);
ok_int(ret, 0);
ret = SetWindowExtEx(hDC, 0, 100, &WindowExt);
ok_int(ret, 0);
/* Test setting in isotropic mode */
ret = SetWindowExtEx(hDC, 21224, 35114, &WindowExt);
ok_int(ret, 1);
//ok_long(WindowExt.cx, 3600);
//ok_long(WindowExt.cy, 2700);
/* Values should be changed */
ret = SetWindowExtEx(hDC,
4 * GetDeviceCaps(GetDC(0), HORZRES),
-4 * GetDeviceCaps(GetDC(0), VERTRES),
&WindowExt);
ok_int(ret, 1);
ok_long(WindowExt.cx, 21224);
ok_long(WindowExt.cy, 35114);
/* Check the viewport, should be the same */
GetViewportExtEx(hDC, &ViewportExt);
ok_long(ViewportExt.cx, GetDeviceCaps(GetDC(0), HORZRES));
ok_long(ViewportExt.cy, -GetDeviceCaps(GetDC(0), VERTRES));
/* again isotropic mode with 1:1 res */
ret = SetWindowExtEx(hDC, 123, 123, &WindowExt);
ok_int(ret, 1);
ok_long(WindowExt.cx, 4 * GetDeviceCaps(GetDC(0), HORZRES));
ok_long(WindowExt.cy, -4 * GetDeviceCaps(GetDC(0), VERTRES));
/* Test flXform */
//TEST(pDC_Attr->flXform & PAGE_EXTENTS_CHANGED);
/* Check the viewport from the dcattr, without going through gdi */
//ok_long(pDC_Attr->szlViewportExt.cx, GetDeviceCaps(GetDC(0), HORZRES));
//ok_long(pDC_Attr->szlViewportExt.cy, -GetDeviceCaps(GetDC(0), VERTRES));
/* Check the viewport with gdi, should not be the same */
GetViewportExtEx(hDC, &ViewportExt);
ok_long(ViewportExt.cx, GetDeviceCaps(GetDC(0), VERTRES));
ok_long(ViewportExt.cy, -GetDeviceCaps(GetDC(0), VERTRES));
/* Test flXform */
//TEST(pDC_Attr->flXform & PAGE_EXTENTS_CHANGED);
/* again isotropic mode with 3:1 res */
ret = SetWindowExtEx(hDC, 300, 100, &WindowExt);
ok_int(ret, 1);
ok_long(WindowExt.cx, 123);
ok_long(WindowExt.cy, 123);
/* Check the viewport now, should not be the same */
GetViewportExtEx(hDC, &ViewportExt);
ok_long(ViewportExt.cx, GetDeviceCaps(GetDC(0), VERTRES));
ok_long(ViewportExt.cy, -GetDeviceCaps(GetDC(0), VERTRES) / 3);
/* again isotropic mode with 1:3 res */
SetViewportExtEx(hDC, 6000, 3000, 0);
ret = SetWindowExtEx(hDC, 200, 600, &WindowExt);
ok_int(ret, 1);
ok_long(WindowExt.cx, 300);
ok_long(WindowExt.cy, 100);
/* Check the viewport now, should not be the same */
GetViewportExtEx(hDC, &ViewportExt);
ok_long(ViewportExt.cx, 1000);
ok_long(ViewportExt.cy, 3000);
/* Test setting in anisotropic mode */
SetMapMode(hDC, MM_ANISOTROPIC);
ret = SetWindowExtEx(hDC, 80, 60, &WindowExt);
ok_int(ret, 1);
ok_long(WindowExt.cx, 200);
ok_long(WindowExt.cy, 600);
/* Values should be changed */
ret = SetWindowExtEx(hDC, 500, 500, &WindowExt);
ok_int(ret, 1);
ok_long(WindowExt.cx, 80);
ok_long(WindowExt.cy, 60);
/* Check the viewport */
GetViewportExtEx(hDC, &ViewportExt);
ok_long(ViewportExt.cx, 1000);
ok_long(ViewportExt.cy, 3000);
/* Test setting in low metric mode */
SetMapMode(hDC, MM_LOMETRIC);
ret = SetWindowExtEx(hDC, 120, 90, &WindowExt);
ok_int(ret, 1);
//ok_long(WindowExt.cx, 3600);
//ok_long(WindowExt.cy, 2700);
/* Values should not be changed */
WindowExt.cx = WindowExt.cy = 0;
ret = SetWindowExtEx(hDC, 900, 700, &WindowExt);
ok_int(ret, 1);
//ok_long(WindowExt.cx, 3600);
//ok_long(WindowExt.cy, 2700);
/* Check the viewport */
GetViewportExtEx(hDC, &ViewportExt);
ok_long(ViewportExt.cx, GetDeviceCaps(GetDC(0), HORZRES));
ok_long(ViewportExt.cy, -GetDeviceCaps(GetDC(0), VERTRES));
/* Test setting in high metric mode */
SetMapMode(hDC, MM_HIMETRIC);
ret = SetWindowExtEx(hDC, 120, 90, &WindowExt);
ok_int(ret, 1);
//ok_long(WindowExt.cx, 36000);
//ok_long(WindowExt.cy, 27000);
/* Values should not be changed */
WindowExt.cx = WindowExt.cy = 0;
ret = SetWindowExtEx(hDC, 500, 300, &WindowExt);
ok_int(ret, 1);
//ok_long(WindowExt.cx, 36000);
//ok_long(WindowExt.cy, 27000);
/* Check the viewport */
GetViewportExtEx(hDC, &ViewportExt);
ok_long(ViewportExt.cx, GetDeviceCaps(GetDC(0), HORZRES));
ok_long(ViewportExt.cy, -GetDeviceCaps(GetDC(0), VERTRES));
/* Test setting in low english mode */
SetMapMode(hDC, MM_LOENGLISH);
ret = SetWindowExtEx(hDC, 320, 290, &WindowExt);
ok_int(ret, 1);
//ok_long(WindowExt.cx, 1417);
//ok_long(WindowExt.cy, 1063);
/* Values should not be changed */
WindowExt.cx = WindowExt.cy = 0;
ret = SetWindowExtEx(hDC, 560, 140, &WindowExt);
ok_int(ret, 1);
//ok_long(WindowExt.cx, 1417);
//ok_long(WindowExt.cy, 1063);
/* Check the viewport */
GetViewportExtEx(hDC, &ViewportExt);
ok_long(ViewportExt.cx, GetDeviceCaps(GetDC(0), HORZRES));
ok_long(ViewportExt.cy, -GetDeviceCaps(GetDC(0), VERTRES));
/* Test setting in high english mode */
SetMapMode(hDC, MM_HIENGLISH);
ret = SetWindowExtEx(hDC, 320, 290, &WindowExt);
ok_int(ret, 1);
//ok_long(WindowExt.cx, 14173);
//ok_long(WindowExt.cy, 10630);
/* Values should not be changed */
WindowExt.cx = WindowExt.cy = 0;
ret = SetWindowExtEx(hDC, 1560, 1140, &WindowExt);
ok_int(ret, 1);
//ok_long(WindowExt.cx, 14173);
//ok_long(WindowExt.cy, 10630);
/* Check the viewport */
GetViewportExtEx(hDC, &ViewportExt);
ok_long(ViewportExt.cx, GetDeviceCaps(GetDC(0), HORZRES));
ok_long(ViewportExt.cy, -GetDeviceCaps(GetDC(0), VERTRES));
/* Test setting in twips mode */
SetMapMode(hDC, MM_TWIPS);
ret = SetWindowExtEx(hDC, 3320, 3290, &WindowExt);
ok_int(ret, 1);
//ok_long(WindowExt.cx, 20409);
//ok_long(WindowExt.cy, 15307);
/* Values should not be changed */
WindowExt.cx = WindowExt.cy = 0;
ret = SetWindowExtEx(hDC, 4560, 4140, &WindowExt);
ok_int(ret, 1);
//ok_long(WindowExt.cx, 20409);
//ok_long(WindowExt.cy, 15307);
/* Check the viewport */
GetViewportExtEx(hDC, &ViewportExt);
ok_long(ViewportExt.cx, GetDeviceCaps(GetDC(0), HORZRES));
ok_long(ViewportExt.cy, -GetDeviceCaps(GetDC(0), VERTRES));
/* test manually modifying the dcattr, should go to tests for GetViewportExtEx */
SetMapMode(hDC, MM_ISOTROPIC);
ret = SetWindowExtEx(hDC, 420, 4140, &WindowExt);
//pDC_Attr->szlWindowExt.cx = 0;
GetViewportExtEx(hDC, &ViewportExt);
//ok_long(pDC_Attr->szlWindowExt.cx, 0);
//ok_long(ViewportExt.cx, 0);
DeleteDC(hDC);
}
START_TEST(SetWindowExtEx)
{
Test_SetWindowExtEx();
}