From: "谢威" Subject: [2/2] shlwapi/tests: Add wvnsprintfW comformance test Message-Id: Date: Mon, 9 May 2016 15:24:41 +0800

From 24cc4588d1d8cb215ecb1b1aa8624522e1a860b1 Mon Sep 17 00:00:00 2001 From: Wei Xie Date: Mon, 9 May 2016 15:00:35 +0800 Subject: shlwapi: Add wvnsprintfW comformance test Signed-off-by: Wei Xie --- dlls/shlwapi/tests/string.c | 72 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) diff --git a/dlls/shlwapi/tests/string.c b/dlls/shlwapi/tests/string.c index ac14db0..022fc54 100644 --- a/dlls/shlwapi/tests/string.c +++ b/dlls/shlwapi/tests/string.c @@ -68,6 +68,7 @@ static INT (WINAPIV *pwnsprintfW)(LPWSTR,INT,LPCWSTR, ...); static LPWSTR (WINAPI *pStrChrNW)(LPCWSTR,WCHAR,UINT); static BOOL (WINAPI *pStrToInt64ExA)(LPCSTR,DWORD,LONGLONG*); static BOOL (WINAPI *pStrToInt64ExW)(LPCWSTR,DWORD,LONGLONG*); +static INT (WINAPI *pwvnsprintfW)(LPWSTR,INT,LPCWSTR,__ms_va_list); static int strcmpW(const WCHAR *str1, const WCHAR *str2) { @@ -1601,6 +1602,75 @@ static void test_StrCatChainW(void) ok(buf[5] == 'e', "Expected buf[5] = 'e', got %x\n", buf[5]); } +static INT WINAPIV _wvnsprintfW_wrapper(LPWSTR pdest, INT maxlen, LPCWSTR format, ...) +{ + INT ret; + __ms_va_list valist; + __ms_va_start(valist, format); + ret = pwvnsprintfW(pdest, maxlen, format, valist); + __ms_va_end(valist); + return ret; +} + +static void test_wvnsprintfW(void) +{ + INT ret = 0; + WCHAR buffer[10] = {0}; + const WCHAR fmt[] = {'1', '2', '3', '4', '5', '6', '7', '8', '9', '0', 0}; + const WCHAR emptyfmt[] = {0}; + const WCHAR result1[] = {'1', '2', '3', '4', '5', '6', '7', '8', 0}; + const WCHAR result2[] = {'1', '2', '3', '4', '5', '6', '7', '8', '9', 0}; + const WCHAR result3[] = {'1', '2', '3', '4', '5', '6', '7', '8', '9', '0', 0}; + + ret = _wvnsprintfW_wrapper(NULL, 0, fmt); + ok(broken(ret == 0) || ret == -1 /* win7 */, + "Expected wvnsprintfW to return 0 or -1, got %d\n", ret); + + if (0) + { + /* crashes on windows */ + ret = _wvnsprintfW_wrapper(NULL, 3/* >0 */, fmt); + ok(ret == -1, "Expected wvnsprintfW to return -1, got %d\n", ret); + } + + ret = _wvnsprintfW_wrapper(buffer, 0, NULL); + ok(broken(ret == 0) || ret == -1 /* win7 */, + "Expected wvnsprintfW to return 0 or -1, got %d\n", ret); + + ret = _wvnsprintfW_wrapper(buffer, 0, fmt); + ok(broken(ret == 0) || ret == -1 /* win7 */, + "Expected wvnsprintfW to return 0 or -1, got %d1\n", ret); + + if (0) + { + /* crashes on XP */ + ret = _wvnsprintfW_wrapper(buffer, 10, NULL); + ok(ret == -1, "Expected wvnsprintfW to return -1, got %d\n", ret); + } + + ret = _wvnsprintfW_wrapper(buffer, 1, emptyfmt); + todo_wine + ok(ret == 0, "Expected wvnsprintfW to return 0, got %d\n", ret); + + ret = _wvnsprintfW_wrapper(buffer, 10, emptyfmt); + ok(ret == 0, "Expected wvnsprintfW to return 0, got %d\n", ret); + + ret = _wvnsprintfW_wrapper(buffer, sizeof(buffer)/sizeof(buffer[0])-1, fmt); + ok(broken(ret == 8) || ret == -1 /* win7 */, + "Expected wvnsprintfW to return 8 or -1, got %d\n", ret); + ok(lstrcmpW(buffer, result1) == 0, "Wrong result %s\n", wine_dbgstr_w(buffer)); + + ret = _wvnsprintfW_wrapper(buffer, sizeof(buffer)/sizeof(buffer[0]), fmt); + ok(broken(ret == 9) || ret == -1 /* win7 */, + "Expected wvnsprintfW to return 9 or -1, got %d\n", ret); + ok(lstrcmpW(buffer, result2) == 0, "Wrong result %s\n", wine_dbgstr_w(buffer)); + + ret = _wvnsprintfW_wrapper(buffer, sizeof(buffer)/sizeof(buffer[0])+1, fmt); + todo_wine + ok(ret == 10, "Expected wvnsprintfW to return 10, got %d\n", ret); + ok(lstrcmpW(buffer, result3) == 0, "Wrong result %s\n", wine_dbgstr_w(buffer)); +} + START_TEST(string) { HMODULE hShlwapi; @@ -1640,6 +1710,7 @@ START_TEST(string) pwnsprintfW = (void *)GetProcAddress(hShlwapi, "wnsprintfW"); pStrToInt64ExA = (void *)GetProcAddress(hShlwapi, "StrToInt64ExA"); pStrToInt64ExW = (void *)GetProcAddress(hShlwapi, "StrToInt64ExW"); + pwvnsprintfW = (void *)GetProcAddress(hShlwapi, "wvnsprintfW"); test_StrChrA(); test_StrChrW(); @@ -1687,6 +1758,7 @@ START_TEST(string) test_StrStrNW(); test_StrStrNIW(); test_StrCatChainW(); + test_wvnsprintfW(); CoUninitialize(); } -- 2.7.0