Fixes to dlls/shlwapi/tests/
Jakob Eriksson
jakob at vmlinux.org
Wed Sep 24 20:44:11 CDT 2003
Fixes to dlls/shlwapi/tests/shreg.c
Fixes a hang bug which appears when running shlwapi shreg test on
Windows XP.
Also fixes a broken test for SHCopyKey, which did not work on neither XP, NT
nor Wine. Now it works on NT and XP.
Plus four off-by-one fixes where NT and XP differs.
regards,
Jakob
-------------- next part --------------
Index: shreg.c
===================================================================
RCS file: /home/wine/wine/dlls/shlwapi/tests/shreg.c,v
retrieving revision 1.13
diff -u -r1.13 shreg.c
--- shreg.c 5 Sep 2003 23:08:30 -0000 1.13
+++ shreg.c 25 Sep 2003 01:39:31 -0000
@@ -32,9 +32,9 @@
/* Keys used for testing */
#define REG_TEST_KEY "Software\\Wine\\Test"
+#define REG_SRC_KEY "Software\\Wine\\ToBeCopied"
#define REG_CURRENT_VERSION "Software\\Microsoft\\Windows NT\\CurrentVersion"
-static HMODULE hshlwapi;
typedef DWORD (WINAPI *SHCopyKeyA_func)(HKEY,LPCSTR,HKEY,DWORD);
static SHCopyKeyA_func pSHCopyKeyA;
typedef DWORD (WINAPI *SHRegGetPathA_func)(HKEY,LPCSTR,LPCSTR,LPSTR,DWORD);
@@ -50,35 +50,14 @@
static char * sEmptyBuffer ="0123456789";
-/* delete key and all its subkeys */
-static DWORD delete_key( HKEY hkey )
-{
- WCHAR name[MAX_PATH];
- DWORD ret;
-
- while (!(ret = RegEnumKeyW(hkey, 0, name, sizeof(name))))
- {
- HKEY tmp;
- if (!(ret = RegOpenKeyExW( hkey, name, 0, KEY_ENUMERATE_SUB_KEYS, &tmp )))
- {
- ret = delete_key( tmp );
- RegCloseKey( tmp );
- }
- if (ret) break;
- }
- if (ret != ERROR_NO_MORE_ITEMS) return ret;
- RegDeleteKeyA( hkey, NULL );
- return 0;
-}
-
-static HKEY create_test_entries(void)
+static HKEY create_test_entries( const char *prefix )
{
HKEY hKey;
SetEnvironmentVariableA("LONGSYSTEMVAR", "bar");
SetEnvironmentVariableA("FOO", "ImARatherLongButIndeedNeededString");
- ok(!RegCreateKeyA(HKEY_CURRENT_USER, REG_TEST_KEY, &hKey), "RegCreateKeyA failed");
+ ok( !RegCreateKeyA( HKEY_CURRENT_USER, prefix, &hKey ), "RegCreateKeyA failed" );
if (hKey)
{
@@ -170,7 +149,11 @@
*/
dwSize = 6;
ok(! SHQueryValueExA( hKey, "Test3", NULL, NULL, NULL, &dwSize), "SHQueryValueExA failed");
- ok( dwSize == nUsedBuffer2, "(%lu,%lu)", dwSize, nUsedBuffer2);
+ ok(
+ dwSize == nUsedBuffer2 ||
+ (dwSize - 1) == nUsedBuffer2, /* Windows XP sp1 */
+ "(%lu,%lu)" , dwSize, nUsedBuffer2
+ );
/*
@@ -194,7 +177,12 @@
dwRet = SHQueryValueExA( hKey, "Test3", NULL, &dwType, buf, &dwSize);
ok( ERROR_MORE_DATA == dwRet, "ERROR_MORE_DATA");
ok( 0 == strcmp(sEmptyBuffer, buf), "(%s)", buf);
- ok( dwSize == nUsedBuffer2, "(%lu,%lu)" , dwSize, nUsedBuffer2);
+ ok(
+ dwSize == nUsedBuffer2 ||
+ (dwSize - 1) == nUsedBuffer2, /* Windows XP sp1 */
+ "(%lu,%lu)" , dwSize, nUsedBuffer2
+ );
+
ok( dwType == REG_SZ, "(%lu)" , dwType);
/*
@@ -204,9 +192,19 @@
dwSize = sExpLen2 - 4;
dwType = -1;
ok( ERROR_MORE_DATA == SHQueryValueExA( hKey, "Test3", NULL, &dwType, buf, &dwSize), "Expected ERROR_MORE_DATA");
- ok( 0 == strncmp(sExpTestpath2, buf, sExpLen2 - 4 - 1), "(%s)", buf);
- ok( sExpLen2 - 4 - 1 == strlen(buf), "(%s)", buf);
- ok( dwSize == nUsedBuffer2, "(%lu,%lu)" , dwSize, nUsedBuffer2);
+ /* FIXME - what is this above test meant to do exactly? */
+ ok( 0 == strlen( buf ), "(%s)", buf ); /* Windows NT 4.0 sp6 and XP sp1 do return empty strings */
+
+ /* Old, non working test
+ ok( 0 == strncmp(sExpTestpath2, buf, sExpLen2 - 4 - 1), "(%s)", buf);
+ ok( sExpLen2 - 4 - 1 == strlen(buf), "(%s)", buf);
+ */
+
+ ok(
+ dwSize == nUsedBuffer2 ||
+ (dwSize - 1) == nUsedBuffer2, /* Windows XP sp1 */
+ "(%lu,%lu)" , dwSize, nUsedBuffer2
+ );
ok( dwType == REG_SZ, "(%lu)" , dwType);
/*
@@ -215,75 +213,104 @@
strcpy(buf, sEmptyBuffer);
dwSize = 6;
dwType = -1;
- dwRet = SHQueryValueExA( hKey, "Test3", NULL, &dwType, NULL, &dwSize);
- ok( ERROR_SUCCESS == dwRet, "(%lu)", dwRet);
- ok( dwSize == nUsedBuffer2, "(%lu,%lu)" , dwSize, nUsedBuffer2);
- ok( dwType == REG_SZ, "(%lu)" , dwType);
+ dwRet = SHQueryValueExA( hKey, "Test3", NULL, &dwType, NULL, &dwSize );
+ ok( ERROR_SUCCESS == dwRet, "(%lu)", dwRet );
+
+ ok(
+ dwSize == nUsedBuffer2 ||
+ (dwSize - 1) == nUsedBuffer2, /* Windows XP sp1 */
+ "(%lu,%lu)" , dwSize, nUsedBuffer2
+ );
+ ok( dwType == REG_SZ, "(%lu)" , dwType );
RegCloseKey(hKey);
}
-static void test_SHCopyKey(void)
+static void test_SHCopyKey( )
{
- HKEY hKeySrc, hKeyDst;
+ HKEY hKeySrc;
+ HKEY hKeyDest;
- /* Delete existing destination sub keys */
- hKeyDst = NULL;
- if (!RegOpenKeyA(HKEY_CURRENT_USER, REG_TEST_KEY "\\CopyDestination", &hKeyDst) && hKeyDst)
+ /* Requires Internet Explorer 5.0 or later */
+ if (NULL == pSHCopyKeyA)
{
- SHDeleteKeyA(hKeyDst, NULL);
- RegCloseKey(hKeyDst);
- }
- hKeyDst = NULL;
- if (RegCreateKeyA(HKEY_CURRENT_USER, REG_TEST_KEY "\\CopyDestination", &hKeyDst) || !hKeyDst)
- {
- ok(0, "didn't open dest");
- return;
- }
-
- hKeySrc = NULL;
- if (RegOpenKeyA(HKEY_LOCAL_MACHINE, REG_CURRENT_VERSION, &hKeySrc) || !hKeySrc)
- {
- ok(0, "didn't open source");
- return;
+ return;
}
+ hKeySrc = create_test_entries( REG_SRC_KEY );
- if (pSHCopyKeyA)
- ok (!(*pSHCopyKeyA)(hKeyDst, NULL, hKeySrc, 0), "failed copy");
+ /* Delete any existing destination key */
+ SHDeleteKey( HKEY_CURRENT_USER, REG_TEST_KEY "\\CopyDestination" );
- RegCloseKey(hKeySrc);
- RegCloseKey(hKeyDst);
-
- /* Check we copied the sub keys, i.e. AeDebug from the default wine registry */
- hKeyDst = NULL;
- if (RegOpenKeyA(HKEY_CURRENT_USER, REG_TEST_KEY "\\CopyDestination\\AeDebug", &hKeyDst) || !hKeyDst)
- {
- ok(0, "didn't open copy");
- return;
- }
+ hKeyDest = NULL;
+ ok(
+ ERROR_SUCCESS ==
+ RegCreateKeyA(
+ HKEY_CURRENT_USER,
+ REG_TEST_KEY "\\CopyDestination",
+ &hKeyDest
+ ),
+ "did not open dest; RegCreateKeyA failed"
+ );
+ ok( NULL != hKeyDest, "hKeyDest is NULL" );
+
+ ok(
+ ERROR_SUCCESS == (*pSHCopyKeyA)( hKeySrc, NULL, hKeyDest, 0 ),
+ "SHCopyKeyA failed"
+ );
+
+
+ RegCloseKey( hKeySrc );
+ RegCloseKey( hKeyDest );
+
+
+ /* Check we copied the keys */
+ ok(
+ ERROR_SUCCESS ==
+ RegOpenKeyA(
+ HKEY_CURRENT_USER,
+ REG_TEST_KEY "\\CopyDestination",
+ &hKeyDest
+ ),
+ "did not open copy: RegOpenKeyA failed"
+ );
+ ok( NULL != hKeyDest, "did not open dest; hKeyDest is NULL" );
/* And the we copied the values too */
- ok(!SHQueryValueExA(hKeyDst, "Debugger", NULL, NULL, NULL, NULL), "SHQueryValueExA failed");
+ ok(
+ !SHQueryValueExA(hKeyDest, "Test1", NULL, NULL, NULL, NULL),
+ "SHQueryValueExA failed"
+ );
- RegCloseKey(hKeyDst);
+ RegCloseKey( hKeyDest );
}
-START_TEST(shreg)
+START_TEST( shreg )
{
- HKEY hkey = create_test_entries();
- hshlwapi = GetModuleHandleA("shlwapi.dll");
- if (hshlwapi)
- {
- pSHCopyKeyA=(SHCopyKeyA_func)GetProcAddress(hshlwapi,"SHCopyKeyA");
- pSHRegGetPathA=(SHRegGetPathA_func)GetProcAddress(hshlwapi,"SHRegGetPathA");
- }
- test_SHGetValue();
- test_SHQUeryValueEx();
- test_SHGetRegPath();
- test_SHCopyKey();
- delete_key( hkey );
+ HKEY hkey;
+ HMODULE hshlwapi;
+
+ hshlwapi = GetModuleHandleA( "shlwapi.dll" );
+
+ if (NULL == hshlwapi)
+ {
+
+ return;
+ }
+
+ hkey = create_test_entries( REG_TEST_KEY );
+
+ pSHCopyKeyA = (SHCopyKeyA_func) GetProcAddress( hshlwapi, "SHCopyKeyA" );
+ pSHRegGetPathA = (SHRegGetPathA_func) GetProcAddress( hshlwapi, "SHRegGetPathA" );
+
+ test_SHGetValue( );
+ test_SHQUeryValueEx( );
+ test_SHGetRegPath( );
+ test_SHCopyKey( );
+
+ SHDeleteKey( HKEY_CURRENT_USER, REG_TEST_KEY );
+ SHDeleteKey( HKEY_CURRENT_USER, REG_SRC_KEY );
}
More information about the wine-patches
mailing list