https://git.reactos.org/?p=reactos.git;a=commitdiff;h=8bf795ff7642831ab7427b...
commit 8bf795ff7642831ab7427baadc1fe9e105e2435f Author: Katayama Hirofumi MZ katayama.hirofumi.mz@gmail.com AuthorDate: Thu Apr 4 10:44:52 2019 +0900 Commit: GitHub noreply@github.com CommitDate: Thu Apr 4 10:44:52 2019 +0900
[GDI32_APITEST] Add LPtoDP testcase (#1462)
ROSTESTS-320 --- modules/rostests/apitests/gdi32/CMakeLists.txt | 1 + modules/rostests/apitests/gdi32/LPtoDP.c | 316 +++++++++++++++++++++++++ modules/rostests/apitests/gdi32/testlist.c | 2 + 3 files changed, 319 insertions(+)
diff --git a/modules/rostests/apitests/gdi32/CMakeLists.txt b/modules/rostests/apitests/gdi32/CMakeLists.txt index bbeeb4fa0b..caa05d9a11 100644 --- a/modules/rostests/apitests/gdi32/CMakeLists.txt +++ b/modules/rostests/apitests/gdi32/CMakeLists.txt @@ -54,6 +54,7 @@ list(APPEND SOURCE GetTextExtentExPoint.c GetTextFace.c GetTextMetrics.c + LPtoDP.c MaskBlt.c NtGdiAddFontResource.c OffsetClipRgn.c diff --git a/modules/rostests/apitests/gdi32/LPtoDP.c b/modules/rostests/apitests/gdi32/LPtoDP.c new file mode 100644 index 0000000000..e92c0a4e4c --- /dev/null +++ b/modules/rostests/apitests/gdi32/LPtoDP.c @@ -0,0 +1,316 @@ +/* + * PROJECT: ReactOS api tests + * LICENSE: GPL - See COPYING in the top level directory + * PURPOSE: Test for ... + * PROGRAMMERS: Katayama Hirofumi MZ + */ + +#include "precomp.h" + +#define INVALID_POINTER ((PVOID)(ULONG_PTR)0xdeadbeefdeadbeefULL) + +void Test_LPtoDP_Params() +{ + HDC hdc; + POINT apt[2]; + + apt[0].x = 0; + apt[0].y = 0; + apt[1].x = -1000; + apt[1].y = 1000; + + SetLastError(ERROR_SUCCESS); + ok_int(LPtoDP(NULL, NULL, 0), 1); + ok_err(ERROR_SUCCESS); + + ok_int(LPtoDP(NULL, NULL, -1), 1); + ok_err(ERROR_SUCCESS); + + ok_int(LPtoDP(NULL, INVALID_POINTER, -1), 1); + ok_err(ERROR_SUCCESS); + + ok_int(LPtoDP(NULL, NULL, 2), 0); + ok_err(ERROR_INVALID_PARAMETER); + + SetLastError(ERROR_SUCCESS); + ok_int(LPtoDP(NULL, apt, 2), 0); + ok_err(ERROR_INVALID_PARAMETER); + + SetLastError(ERROR_SUCCESS); + ok_int(LPtoDP(NULL, apt, 0), 1); + ok_err(ERROR_SUCCESS); + + SetLastError(ERROR_SUCCESS); + ok_int(LPtoDP(NULL, apt, -2), 1); + ok_err(ERROR_SUCCESS); + + SetLastError(ERROR_SUCCESS); + ok_int(LPtoDP((HDC)-4, apt, -2), 1); + ok_err(ERROR_SUCCESS); + + hdc = GetDC(0); + SetLastError(ERROR_SUCCESS); + ok_int(LPtoDP(hdc, NULL, 2), 1); + ok_err(ERROR_SUCCESS); + + hdc = GetDC(0); + SetLastError(ERROR_SUCCESS); + ok_int(LPtoDP(hdc, INVALID_POINTER, 2), 1); + ok_err(ERROR_SUCCESS); + + + ReleaseDC(0, hdc); +} + +static void GetExtent(HDC hdc, SIZE *psizWnd, SIZE *psizView) +{ + GetWindowExtEx(hdc, psizWnd); + //trace("*psizWnd: (%ld, %ld)\n", psizWnd->cx, psizWnd->cy); + + GetViewportExtEx(hdc, psizView); + //trace("*psizView: (%ld, %ld)\n", psizView->cx, psizView->cy); +} + +void Test_LPtoDP() +{ + HDC hdc; + POINT apt[2]; + XFORM xform; + LONG lLogPixelsX, lLogPixelsY; + SIZE sizWnd, sizView; + LONG xLow, yLow, xHigh, yHigh; + + hdc = CreateCompatibleDC(NULL); + lLogPixelsX = GetDeviceCaps(hdc, LOGPIXELSX); + lLogPixelsY = GetDeviceCaps(hdc, LOGPIXELSY); + trace("lLogPixelsX: %ld\n", lLogPixelsX); + trace("lLogPixelsY: %ld\n", lLogPixelsY); + +//#define MULDIV(a, b, c) (((a) * (b)) / (c)) +#define MULDIV(a, b, c) MulDiv((a), (b), (c)) + + // MM_TEXT + apt[0].x = 100; apt[0].y = 256; apt[1].x = -1000; apt[1].y = 1000; + SetMapMode(hdc, MM_TEXT); + GetExtent(hdc, &sizWnd, &sizView); + ok_int(LPtoDP(hdc, apt, 2), 1); + ok_long(sizWnd.cx, 1); + ok_long(sizWnd.cy, 1); + ok_long(sizView.cx, 1); + ok_long(sizView.cy, 1); + ok_long(apt[0].x, 100); + ok_long(apt[0].y, 256); + ok_long(apt[1].x, -1000); + ok_long(apt[1].y, 1000); + + // MM_LOMETRIC + apt[0].x = 100; apt[0].y = 256; apt[1].x = -1000; apt[1].y = 1000; + SetMapMode(hdc, MM_LOMETRIC); + GetExtent(hdc, &sizWnd, &sizView); + ok_int(LPtoDP(hdc, apt, 2), 1); + ok_long(apt[0].x, MULDIV(100, sizView.cx, sizWnd.cx)); + ok_long(apt[0].y, MULDIV(256, sizView.cy, sizWnd.cy)); + ok_long(apt[1].x, MULDIV(-1000, sizView.cx, sizWnd.cx)); + ok_long(apt[1].y, MULDIV(1000, sizView.cy, sizWnd.cy)); + xLow = apt[0].x; + yLow = apt[0].y; + + // MM_HIMETRIC + apt[0].x = 100; apt[0].y = 256; apt[1].x = -1000; apt[1].y = 1000; + SetMapMode(hdc, MM_HIMETRIC); + GetExtent(hdc, &sizWnd, &sizView); + ok_int(LPtoDP(hdc, apt, 2), 1); + //ok_long(apt[0].x, MULDIV(100, sizView.cx, sizWnd.cx)); + ok_long(apt[0].y, MULDIV(256, sizView.cy, sizWnd.cy)); + //ok_long(apt[1].x, MULDIV(-1000, sizView.cx, sizWnd.cx)); + ok_long(apt[1].y, MULDIV(1000, sizView.cy, sizWnd.cy)); + xHigh = apt[0].x; + yHigh = apt[0].y; + ok(labs(xHigh) <= labs(xLow) / 9 && labs(xLow) / 11 <= labs(xHigh), "%ld, %ld\n", xLow, xHigh); + ok(labs(yHigh) <= labs(yLow) / 9 && labs(yLow) / 11 <= labs(yHigh), "%ld, %ld\n", yLow, yHigh); + + // MM_LOENGLISH + apt[0].x = 100; apt[0].y = 256; apt[1].x = -1000; apt[1].y = 1000; + SetMapMode(hdc, MM_LOENGLISH); + GetExtent(hdc, &sizWnd, &sizView); + ok_int(LPtoDP(hdc, apt, 2), 1); + ok_long(apt[0].x, MULDIV(100, sizView.cx, sizWnd.cx)); + ok_long(apt[0].y, MULDIV(256, sizView.cy, sizWnd.cy)); + ok_long(apt[1].x, MULDIV(-1000, sizView.cx, sizWnd.cx)); + ok_long(apt[1].y, MULDIV(1000, sizView.cy, sizWnd.cy)); + xLow = apt[0].x; + yLow = apt[0].y; + + // MM_HIENGLISH + apt[0].x = 100; apt[0].y = 256; apt[1].x = -1000; apt[1].y = 1000; + SetMapMode(hdc, MM_HIENGLISH); + GetExtent(hdc, &sizWnd, &sizView); + ok_int(LPtoDP(hdc, apt, 2), 1); + ok_long(apt[0].x, MULDIV(100, sizView.cx, sizWnd.cx)); + ok_long(apt[0].y, MULDIV(256, sizView.cy, sizWnd.cy)); + ok_long(apt[1].x, MULDIV(-1000, sizView.cx, sizWnd.cx)); + ok_long(apt[1].y, MULDIV(1000, sizView.cy, sizWnd.cy)); + xHigh = apt[0].x; + yHigh = apt[0].y; + ok(labs(xHigh) <= labs(xLow) / 9 && labs(xLow) / 11 <= labs(xHigh), "%ld, %ld\n", xLow, xHigh); + ok(labs(yHigh) <= labs(yLow) / 9 && labs(yLow) / 11 <= labs(yHigh), "%ld, %ld\n", yLow, yHigh); + + // MM_TWIPS + apt[0].x = 100; apt[0].y = 256; apt[1].x = -1000; apt[1].y = 1000; + SetMapMode(hdc, MM_TWIPS); + GetExtent(hdc, &sizWnd, &sizView); + ok_int(LPtoDP(hdc, apt, 2), 1); + ok_long(apt[0].x, MULDIV(100, sizView.cx, sizWnd.cx)); + ok_long(apt[0].y, MULDIV(256, sizView.cy, sizWnd.cy)); + ok_long(apt[1].x, MULDIV(-1000, sizView.cx, sizWnd.cx)); + ok_long(apt[1].y, MULDIV(1000, sizView.cy, sizWnd.cy)); + + SetGraphicsMode(hdc, GM_ADVANCED); + SetMapMode(hdc, MM_ANISOTROPIC); + + xform.eM11 = 1.; + xform.eM12 = 0.; + xform.eM21 = 0.; + xform.eM22 = 1.; + xform.eDx = 2.; + xform.eDy = 1.; + ok_int(SetWorldTransform(hdc, &xform), 1); + + // eDx == 2, eDy == 1 + apt[0].x = 100; apt[0].y = 256; apt[1].x = -1000; apt[1].y = 1000; + GetExtent(hdc, &sizWnd, &sizView); + ok_int(LPtoDP(hdc, apt, 2), 1); + ok_long(apt[0].x, MULDIV(100 + (LONG)xform.eDx, sizView.cx, sizWnd.cx)); + ok_long(apt[0].y, MULDIV(256 + (LONG)xform.eDy, sizView.cy, sizWnd.cy)); + ok_long(apt[1].x, MULDIV(-1000 - (LONG)xform.eDx, sizView.cx, sizWnd.cx)); + ok_long(apt[1].y, MULDIV(1000 + (LONG)xform.eDy, sizView.cy, sizWnd.cy)); + + // eM11 == 0.0000001 + apt[0].x = 100; apt[0].y = 256; apt[1].x = -1000; apt[1].y = 1000; + xform.eM11 = 0.0000001; + xform.eDx = 0.; + xform.eDy = 0.; + ok_int(SetWorldTransform(hdc, &xform), 1); + GetExtent(hdc, &sizWnd, &sizView); + ok_int(LPtoDP(hdc, apt, 2), 1); + ok_long(apt[0].x, 0); + ok_long(apt[0].y, MULDIV(256, sizView.cy, sizWnd.cy)); + ok_long(apt[1].x, 0); + ok_long(apt[1].y, MULDIV(1000, sizView.cy, sizWnd.cy)); + + // eM11 == 0.5 + apt[0].x = 100; apt[0].y = 256; apt[1].x = -1000; apt[1].y = 1000; + xform.eM11 = 0.5; + xform.eDx = 0.; + xform.eDy = 0.; + ok_int(SetWorldTransform(hdc, &xform), 1); + GetExtent(hdc, &sizWnd, &sizView); + ok_int(LPtoDP(hdc, apt, 2), 1); + ok_long(apt[0].x, MULDIV(100, sizView.cx, sizWnd.cx * 2)); + ok_long(apt[0].y, MULDIV(256, sizView.cy, sizWnd.cy)); + ok_long(apt[1].x, MULDIV(-1000, sizView.cx, sizWnd.cx * 2)); + ok_long(apt[1].y, MULDIV(1000, sizView.cy, sizWnd.cy)); + + // eM11 == 1.164153218404873e-10 + apt[0].x = 100; apt[0].y = 256; apt[1].x = -1000; apt[1].y = 1000; + xform.eM11 = 1.164153218404873e-10; + xform.eDx = 0.; + xform.eDy = 0.; + ok_int(SetWorldTransform(hdc, &xform), 1); + GetExtent(hdc, &sizWnd, &sizView); + ok_int(LPtoDP(hdc, apt, 2), 1); + ok_long(apt[0].x, 0); + ok_long(apt[0].y, MULDIV(256, sizView.cy, sizWnd.cy)); + ok_long(apt[1].x, 0); + ok_long(apt[1].y, MULDIV(1000, sizView.cy, sizWnd.cy)); + + // eM11 == 2.328306437080797e-10 + apt[0].x = 100; apt[0].y = 256; apt[1].x = -1000; apt[1].y = 1000; + xform.eM11 = 2.328306437080797e-10; + xform.eM22 = 1.; + xform.eDx = 0.; + xform.eDy = 0.; + ok_int(SetWorldTransform(hdc, &xform), 1); + GetExtent(hdc, &sizWnd, &sizView); + ok_int(LPtoDP(hdc, apt, 2), 1); + ok_long(apt[0].x, 0); + ok_long(apt[0].y, MULDIV(256, sizView.cy, sizWnd.cy)); + ok_long(apt[1].x, 0); + ok_long(apt[1].y, MULDIV(1000, sizView.cy, sizWnd.cy)); + + // eM22 == 2.328306437080797e-10 + apt[0].x = 100; apt[0].y = 256; apt[1].x = -1000; apt[1].y = 1000; + xform.eM11 = 1.; + xform.eM22 = 2.328306437080797e-10; + xform.eDx = 0.; + xform.eDy = 0.; + ok_int(SetWorldTransform(hdc, &xform), 1); + GetExtent(hdc, &sizWnd, &sizView); + ok_int(LPtoDP(hdc, apt, 2), 1); + //ok_long(apt[0].x, MULDIV(100, sizView.cy, sizWnd.cy)); + ok_long(apt[0].y, 0); + //ok_long(apt[1].x, MULDIV(-1000, sizView.cy, sizWnd.cy)); + ok_long(apt[1].y, 0); + + // eM22 == 1.164153218404873e-10 + apt[0].x = 100; apt[0].y = 256; apt[1].x = -1000; apt[1].y = 1000; + xform.eM11 = 1.; + xform.eM22 = 1.164153218404873e-10; + xform.eDx = 0.; + xform.eDy = 0.; + ok_int(SetWorldTransform(hdc, &xform), 1); + GetExtent(hdc, &sizWnd, &sizView); + ok_int(LPtoDP(hdc, apt, 2), 1); + //ok_long(apt[0].x, MULDIV(100, sizView.cy, sizWnd.cy)); + ok_long(apt[0].y, 0); + //ok_long(apt[1].x, MULDIV(-1000, sizView.cy, sizWnd.cy)); + ok_long(apt[1].y, 0); + + // eM11 == 2.328306437080797e-10, eM22 == 2.328306437080797e-10 + apt[0].x = 100; apt[0].y = 256; apt[1].x = -1000; apt[1].y = 1000; + xform.eM11 = 2.328306437080797e-10; + xform.eM22 = 2.328306437080797e-10; + xform.eDx = 0.; + xform.eDy = 0.; + ok_int(SetWorldTransform(hdc, &xform), 1); + GetExtent(hdc, &sizWnd, &sizView); + ok_int(LPtoDP(hdc, apt, 2), 1); + ok_long(apt[0].x, 0); + ok_long(apt[0].y, 0); + ok_long(apt[1].x, 0); + ok_long(apt[1].y, 0); + + // eM11 == 1.164153218404873e-10, eM22 == 1.164153218404873e-10 + apt[0].x = 100; apt[0].y = 256; apt[1].x = -1000; apt[1].y = 1000; + xform.eM11 = 1.164153218404873e-10; + xform.eM22 = 1.164153218404873e-10; + xform.eDx = 0.; + xform.eDy = 0.; + ok_int(SetWorldTransform(hdc, &xform), 1); + GetExtent(hdc, &sizWnd, &sizView); + ok_int(LPtoDP(hdc, apt, 2), 1); + ok_long(apt[0].x, 0); + ok_long(apt[0].y, 0); + ok_long(apt[1].x, 0); + ok_long(apt[1].y, 0); + + // eM11 == 0.0000001 + apt[0].x = 100; apt[0].y = 256; apt[1].x = -1000; apt[1].y = 1000; + xform.eM11 = 0.0000001; + xform.eM22 = 1.0; + ok_int(SetWorldTransform(hdc, &xform), 1); + GetExtent(hdc, &sizWnd, &sizView); + ok_int(LPtoDP(hdc, apt, 2), 1); + ok_long(apt[0].x, 0); + ok_long(apt[0].y, MULDIV(256, sizView.cy, sizWnd.cy)); + ok_long(apt[1].x, 0); + ok_long(apt[1].y, MULDIV(1000, sizView.cy, sizWnd.cy)); + + DeleteDC(hdc); +} + +START_TEST(LPtoDP) +{ + Test_LPtoDP_Params(); + Test_LPtoDP(); +} diff --git a/modules/rostests/apitests/gdi32/testlist.c b/modules/rostests/apitests/gdi32/testlist.c index 8b9443629e..735621c338 100644 --- a/modules/rostests/apitests/gdi32/testlist.c +++ b/modules/rostests/apitests/gdi32/testlist.c @@ -55,6 +55,7 @@ extern void func_GetStockObject(void); extern void func_GetTextExtentExPoint(void); extern void func_GetTextFace(void); extern void func_GetTextMetrics(void); +extern void func_LPtoDP(void); extern void func_MaskBlt(void); extern void func_NtGdiAddFontResource(void); extern void func_OffsetClipRgn(void); @@ -130,6 +131,7 @@ const struct test winetest_testlist[] = { "GetTextExtentExPoint", func_GetTextExtentExPoint }, { "GetTextMetrics", func_GetTextMetrics }, { "GetTextFace", func_GetTextFace }, + { "LPtoDP", func_LPtoDP }, { "MaskBlt", func_MaskBlt }, { "NtGdiAddFontResource", func_NtGdiAddFontResource}, { "OffsetClipRgn", func_OffsetClipRgn },