propsys/tests: Add tests for PSStringFromPropertyKey.
This commit is contained in:
parent
c50177b1c1
commit
c20908bf56
|
@ -14665,6 +14665,7 @@ wine_fn_config_dll pidgen enable_pidgen
|
|||
wine_fn_config_dll powrprof enable_powrprof powrprof
|
||||
wine_fn_config_dll printui enable_printui
|
||||
wine_fn_config_dll propsys enable_propsys propsys
|
||||
wine_fn_config_test dlls/propsys/tests propsys_test
|
||||
wine_fn_config_dll psapi enable_psapi psapi
|
||||
wine_fn_config_test dlls/psapi/tests psapi_test
|
||||
wine_fn_config_dll pstorec enable_pstorec
|
||||
|
|
|
@ -2534,6 +2534,7 @@ WINE_CONFIG_DLL(pidgen)
|
|||
WINE_CONFIG_DLL(powrprof,,[powrprof])
|
||||
WINE_CONFIG_DLL(printui)
|
||||
WINE_CONFIG_DLL(propsys,,[propsys])
|
||||
WINE_CONFIG_TEST(dlls/propsys/tests)
|
||||
WINE_CONFIG_DLL(psapi,,[psapi])
|
||||
WINE_CONFIG_TEST(dlls/psapi/tests)
|
||||
WINE_CONFIG_DLL(pstorec)
|
||||
|
|
|
@ -0,0 +1,11 @@
|
|||
TOPSRCDIR = @top_srcdir@
|
||||
TOPOBJDIR = ../../..
|
||||
SRCDIR = @srcdir@
|
||||
VPATH = @srcdir@
|
||||
TESTDLL = propsys.dll
|
||||
IMPORTS = propsys
|
||||
|
||||
C_SRCS = \
|
||||
propsys.c
|
||||
|
||||
@MAKE_TEST_RULES@
|
|
@ -0,0 +1,140 @@
|
|||
/*
|
||||
* Unit tests for Windows property system
|
||||
*
|
||||
* Copyright 2010 Andrew Nguyen
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
#define COBJMACROS
|
||||
|
||||
#include <stdarg.h>
|
||||
|
||||
#include "windef.h"
|
||||
#include "winbase.h"
|
||||
#include "objbase.h"
|
||||
#include "propsys.h"
|
||||
#include "initguid.h"
|
||||
#include "wine/test.h"
|
||||
|
||||
DEFINE_GUID(GUID_NULL,0,0,0,0,0,0,0,0,0,0,0);
|
||||
|
||||
static void test_PSStringFromPropertyKey(void)
|
||||
{
|
||||
static const WCHAR fillerW[] = {'X','X','X','X','X','X','X','X','X','X','X','X','X','X','X','X','X','X','X','X',
|
||||
'X','X','X','X','X','X','X','X','X','X','X','X','X','X','X','X','X','X','X','X',
|
||||
'X','X','X','X','X','X','X','X','X','X'};
|
||||
static const WCHAR zero_fillerW[] = {'\0','X','X','X','X','X','X','X','X','X','X','X','X','X','X','X','X','X',
|
||||
'X','X','X','X','X','X','X','X','X','X','X','X','X','X','X','X','X','X',
|
||||
'X','X','X','X','X','X','X','X','X','X','X','X','X','X'};
|
||||
static const WCHAR zero_truncatedW[] = {'\0','0','0','0','0','0','0','0','0','-','0','0','0','0','-','0','0',
|
||||
'0','0','-','0','0','0','0','-','0','0','0','0','0','0','0','0','0',
|
||||
'0','0','0','}',' ','\0','9','X','X','X','X','X','X','X','X','X'};
|
||||
static const WCHAR zero_truncated2W[] = {'\0','0','0','0','0','0','0','0','0','-','0','0','0','0','-','0','0',
|
||||
'0','0','-','0','0','0','0','-','0','0','0','0','0','0','0','0','0',
|
||||
'0','0','0','}',' ','\0','9','2','7','6','9','4','9','2','X','X'};
|
||||
static const WCHAR zero_truncated3W[] = {'\0','0','0','0','0','0','0','0','0','-','0','0','0','0','-','0','0',
|
||||
'0','0','-','0','0','0','0','-','0','0','0','0','0','0','0','0','0',
|
||||
'0','0','0','}',' ','\0','9','2','7','6','9','4','9','2','4','X'};
|
||||
static const WCHAR zero_truncated4W[] = {'\0','0','0','0','0','0','0','0','0','-','0','0','0','0','-','0','0',
|
||||
'0','0','-','0','0','0','0','-','0','0','0','0','0','0','0','0','0',
|
||||
'0','0','0','}',' ','\0','7','X','X','X','X','X','X','X','X','X'};
|
||||
static const WCHAR truncatedW[] = {'{','0','0','0','0','0','0','0','0','-','0','0','0','0','-','0','0','0',
|
||||
'0','-','0','0','0','0','-','0','0','0','0','0','0','0','0','0','0','0',
|
||||
'0','}',' ','\0','9','X','X','X','X','X','X','X','X','X'};
|
||||
static const WCHAR truncated2W[] = {'{','0','0','0','0','0','0','0','0','-','0','0','0','0','-','0','0','0',
|
||||
'0','-','0','0','0','0','-','0','0','0','0','0','0','0','0','0','0','0',
|
||||
'0','}',' ','\0','9','2','7','6','9','4','9','2','X','X'};
|
||||
static const WCHAR truncated3W[] = {'{','0','0','0','0','0','0','0','0','-','0','0','0','0','-','0','0','0',
|
||||
'0','-','0','0','0','0','-','0','0','0','0','0','0','0','0','0','0','0',
|
||||
'0','}',' ','\0','9','2','7','6','9','4','9','2','4','X'};
|
||||
static const WCHAR truncated4W[] = {'{','0','0','0','0','0','0','0','0','-','0','0','0','0','-','0','0','0',
|
||||
'0','-','0','0','0','0','-','0','0','0','0','0','0','0','0','0','0','0',
|
||||
'0','}',' ','\0','7','X','X','X','X','X','X','X','X','X'};
|
||||
static const WCHAR expectedW[] = {'{','0','0','0','0','0','0','0','0','-','0','0','0','0','-','0','0','0',
|
||||
'0','-','0','0','0','0','-','0','0','0','0','0','0','0','0','0','0','0',
|
||||
'0','}',' ','4','2','9','4','9','6','7','2','9','5',0};
|
||||
static const WCHAR expected2W[] = {'{','0','0','0','0','0','0','0','0','-','0','0','0','0','-','0','0','0',
|
||||
'0','-','0','0','0','0','-','0','0','0','0','0','0','0','0','0','0','0',
|
||||
'0','}',' ','1','3','5','7','9','\0','X','X','X','X','X'};
|
||||
static const WCHAR expected3W[] = {'{','0','0','0','0','0','0','0','0','-','0','0','0','0','-','0','0','0',
|
||||
'0','-','0','0','0','0','-','0','0','0','0','0','0','0','0','0','0','0',
|
||||
'0','}',' ','0','\0','X','X','X','X','X','X','X','X','X'};
|
||||
PROPERTYKEY prop = {GUID_NULL, ~0U};
|
||||
PROPERTYKEY prop2 = {GUID_NULL, 13579};
|
||||
PROPERTYKEY prop3 = {GUID_NULL, 0};
|
||||
WCHAR out[PKEYSTR_MAX];
|
||||
HRESULT ret;
|
||||
|
||||
const struct
|
||||
{
|
||||
REFPROPERTYKEY pkey;
|
||||
LPWSTR psz;
|
||||
UINT cch;
|
||||
HRESULT hr_expect;
|
||||
const WCHAR *buf_expect;
|
||||
int hr_broken;
|
||||
HRESULT hr2;
|
||||
int buf_broken;
|
||||
const WCHAR *buf2;
|
||||
} testcases[] =
|
||||
{
|
||||
{NULL, NULL, 0, E_POINTER},
|
||||
{&prop, NULL, 0, E_POINTER},
|
||||
{&prop, NULL, PKEYSTR_MAX, E_POINTER},
|
||||
{NULL, out, 0, HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER), fillerW},
|
||||
{NULL, out, PKEYSTR_MAX, HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER), zero_fillerW, 0, 0, 1, fillerW},
|
||||
{&prop, out, 0, HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER), fillerW},
|
||||
{&prop, out, GUIDSTRING_MAX, HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER), fillerW},
|
||||
{&prop, out, GUIDSTRING_MAX + 1, HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER), fillerW},
|
||||
{&prop, out, GUIDSTRING_MAX + 2, HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER), zero_truncatedW, 1, S_OK, 1, truncatedW},
|
||||
{&prop, out, PKEYSTR_MAX - 2, HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER), zero_truncated2W, 1, S_OK, 1, truncated2W},
|
||||
{&prop, out, PKEYSTR_MAX - 1, HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER), zero_truncated3W, 1, S_OK, 1, truncated3W},
|
||||
{&prop, out, PKEYSTR_MAX, S_OK, expectedW},
|
||||
{&prop2, out, GUIDSTRING_MAX + 2, HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER), zero_truncated4W, 1, S_OK, 1, truncated4W},
|
||||
{&prop2, out, GUIDSTRING_MAX + 6, S_OK, expected2W},
|
||||
{&prop2, out, PKEYSTR_MAX, S_OK, expected2W},
|
||||
{&prop3, out, GUIDSTRING_MAX + 1, HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER), fillerW},
|
||||
{&prop3, out, GUIDSTRING_MAX + 2, S_OK, expected3W},
|
||||
{&prop3, out, PKEYSTR_MAX, S_OK, expected3W},
|
||||
};
|
||||
|
||||
int i;
|
||||
|
||||
for (i = 0; i < sizeof(testcases)/sizeof(testcases[0]); i++)
|
||||
{
|
||||
if (testcases[i].psz)
|
||||
memcpy(testcases[i].psz, fillerW, PKEYSTR_MAX * sizeof(WCHAR));
|
||||
|
||||
ret = PSStringFromPropertyKey(testcases[i].pkey,
|
||||
testcases[i].psz,
|
||||
testcases[i].cch);
|
||||
ok(ret == testcases[i].hr_expect ||
|
||||
broken(testcases[i].hr_broken && ret == testcases[i].hr2), /* Vista/Win2k8 */
|
||||
"[%d] Expected PSStringFromPropertyKey to return 0x%08x, got 0x%08x\n",
|
||||
i, testcases[i].hr_expect, ret);
|
||||
|
||||
if (testcases[i].psz)
|
||||
ok(!memcmp(testcases[i].psz, testcases[i].buf_expect, PKEYSTR_MAX * sizeof(WCHAR)) ||
|
||||
broken(testcases[i].buf_broken &&
|
||||
!memcmp(testcases[i].psz, testcases[i].buf2, PKEYSTR_MAX * sizeof(WCHAR))), /* Vista/Win2k8 */
|
||||
"[%d] Unexpected output contents\n", i);
|
||||
}
|
||||
}
|
||||
|
||||
START_TEST(propsys)
|
||||
{
|
||||
test_PSStringFromPropertyKey();
|
||||
}
|
Loading…
Reference in New Issue