https://git.reactos.org/?p=reactos.git;a=commitdiff;h=8bf795ff7642831ab7427…
commit 8bf795ff7642831ab7427baadc1fe9e105e2435f
Author: Katayama Hirofumi MZ <katayama.hirofumi.mz(a)gmail.com>
AuthorDate: Thu Apr 4 10:44:52 2019 +0900
Commit: GitHub <noreply(a)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 },