[PATCH 2/5 v2] riched20/tests: Rewrite tests for ITextServices_TxGetNaturalSize().
Jactry Zeng
jzeng at codeweavers.com
Tue May 22 03:31:57 CDT 2018
Superseded patch 146217.
Signed-off-by: Jactry Zeng <jzeng at codeweavers.com>
---
dlls/riched20/tests/txtsrv.c | 87 ++++++++++++++++++--------------------------
1 file changed, 36 insertions(+), 51 deletions(-)
diff --git a/dlls/riched20/tests/txtsrv.c b/dlls/riched20/tests/txtsrv.c
index 88b5adf13c..8893fa6bf5 100644
--- a/dlls/riched20/tests/txtsrv.c
+++ b/dlls/riched20/tests/txtsrv.c
@@ -697,81 +697,66 @@ static void test_TxSetText(void)
ITextHost_Release(host);
}
+#define CHECK_TXGETNATURALSIZE(res,width,height,max_width,min_width,expected_height) \
+ _check_txgetnaturalsize(res, width, height, max_width, min_width, expected_height, __LINE__)
+static void _check_txgetnaturalsize(HRESULT res, LONG width, LONG height, LONG max_width,
+ LONG min_width, LONG expected_height, int line)
+{
+ ok_(__FILE__,line)(res == S_OK, "TxGetNaturalSize failed: 0x%08x.\n", res);
+ ok_(__FILE__,line)(width >= min_width && width <= max_width,
+ "got wrong width: %d, expected: %d <= width <= %d.\n",
+ width, min_width, max_width);
+ ok_(__FILE__,line)(height == expected_height ||
+ height == 18 /* Japanese win7 */, "got wrong height: %d, expected: %d.\n",
+ height, expected_height);
+}
+
static void test_TxGetNaturalSize(void)
{
ITextServices *txtserv;
ITextHost *host;
HRESULT result;
- BOOL ret;
-
- /* This value is used when calling TxGetNaturalSize. MSDN says
- that this is not supported however a null pointer cannot be
- used as it will cause a segmentation violation. The values in
- the structure being pointed to are required to be INT_MAX
- otherwise calculations can give wrong values. */
- const SIZEL psizelExtent = {INT_MAX,INT_MAX};
-
- static const WCHAR oneA[] = {'A',0};
-
- /* Results of measurements */
- LONG xdim, ydim;
-
- /* The device context to do the tests in */
+ SIZEL psizelExtent = {-1,-1};
+ static const WCHAR test_text[] = {'T','e','s','t','S','o','m','e','T','e','x','t',0};
+ LONG width, height;
HDC hdcDraw;
-
- /* Variables with the text metric information */
- INT charwidth_caps_text[26];
- TEXTMETRICA tmInfo_text;
+ HWND hwnd;
+ RECT rect;
if (!init_texthost(&txtserv, &host))
return;
- hdcDraw = GetDC(NULL);
- SaveDC(hdcDraw);
-
- /* Populate the metric strucs */
+ hwnd = CreateWindowExA(0, "static", NULL, WS_POPUP | WS_VISIBLE,
+ 0, 0, 100, 100, 0, 0, 0, NULL);
+ hdcDraw = GetDC(hwnd);
SetMapMode(hdcDraw,MM_TEXT);
- GetTextMetricsA(hdcDraw, &tmInfo_text);
- SetLastError(0xdeadbeef);
- ret = GetCharWidth32A(hdcDraw,'A','Z',charwidth_caps_text);
- if (!ret && GetLastError() == ERROR_CALL_NOT_IMPLEMENTED) {
- win_skip("GetCharWidth32 is not available\n");
- goto cleanup;
- }
-
- /* Make measurements in MM_TEXT */
- SetMapMode(hdcDraw,MM_TEXT);
- xdim = 0; ydim = 0;
- result = ITextServices_TxSetText(txtserv, oneA);
+ result = ITextServices_TxSetText(txtserv, test_text);
ok(result == S_OK, "ITextServices_TxSetText failed (result = %x)\n", result);
if (result != S_OK) {
skip("Could not set text\n");
goto cleanup;
}
- SetLastError(0xdeadbeef);
+ GetClientRect(hwnd, &rect);
+
+ psizelExtent.cx = -1; psizelExtent.cy = -1;
+ width = rect.right - rect.left;
+ height = 0;
result = ITextServices_TxGetNaturalSize(txtserv, DVASPECT_CONTENT,
hdcDraw, NULL, NULL,
TXTNS_FITTOCONTENT, &psizelExtent,
- &xdim, &ydim);
- todo_wine ok(result == S_OK || broken(result == E_FAIL), /* WINXP Arabic Language */
- "TxGetNaturalSize gave unexpected return value (result = %x)\n", result);
- if (result == S_OK) {
- todo_wine ok(ydim == tmInfo_text.tmHeight,
- "Height calculated incorrectly (expected %d, got %d)\n",
- tmInfo_text.tmHeight, ydim);
- /* The native DLL adds one pixel extra when calculating widths. */
- todo_wine ok(xdim >= charwidth_caps_text[0] && xdim <= charwidth_caps_text[0] + 1,
- "Width calculated incorrectly (expected %d {+1}, got %d)\n",
- charwidth_caps_text[0], xdim);
- } else
- skip("TxGetNaturalSize measurements not performed (xdim = %d, ydim = %d, result = %x, error = %x)\n",
- xdim, ydim, result, GetLastError());
+ &width, &height);
+ if (result == E_FAIL)
+ {
+ win_skip("ITextServices_TxGetNaturalSize isn't available on this platform.\n");
+ goto cleanup;
+ }
+ todo_wine CHECK_TXGETNATURALSIZE(result, width, height, 95, 74, 16);
cleanup:
- RestoreDC(hdcDraw,1);
ReleaseDC(NULL,hdcDraw);
+ DestroyWindow(hwnd);
ITextServices_Release(txtserv);
ITextHost_Release(host);
}
--
2.15.1 (Apple Git-101)
More information about the wine-devel
mailing list