On Mon, 7 Mar 2005 00:28:13 -0800 (PST), Aaron Arvey aarvey@cs.hmc.edu wrote:
There were 28 failures when I ran the advapi32 tests on windows. All these were in registry.c. Please see http://www.winehq.org/hypermail/wine-devel/2005/02/0045.html and the following responses to find out where/when/why/how these bugs were introduced.
After patch is applied, the registry.c runs without errors on Windows XP and 98. When ran in wine, there are now 28 todos.
Aaron
Changelog:
- dlls/advapi32/tests/registry.c altered tests so that they run under windows
Signed-off-by: Aaron Arvey <aarvey_at_cs.hmc.edu>
Index: dlls/advapi32/tests/registry.c
RCS file: /home/wine/wine/dlls/advapi32/tests/registry.c,v retrieving revision 1.11 diff -u -3 -p -u -r1.11 registry.c --- dlls/advapi32/tests/registry.c 27 Jan 2005 11:15:00 -0000 1.11 +++ dlls/advapi32/tests/registry.c 17 Feb 2005 04:00:13 -0000 @@ -80,6 +80,7 @@ static void test_enum_value(void) DWORD val_count, data_count, type; static const WCHAR foobarW[] = {'f','o','o','b','a','r',0}; static const WCHAR testW[] = {'T','e','s','t',0};
static const WCHAR test1W[] = {'T','e','s','t','1',0}; static const WCHAR xxxW[] = {'x','x','x','x','x','x','x','x',0};
/* check NULL data with zero length */
@@ -105,8 +106,12 @@ static void test_enum_value(void) res = RegEnumValueA( hkey_main, 0, value, &val_count, NULL, &type, data, &data_count ); ok( res == ERROR_MORE_DATA, "expected ERROR_MORE_DATA, got %ld\n", res ); ok( val_count == 2, "val_count set to %ld\n", val_count );
- ok( data_count == 7, "data_count set to %ld instead of 7\n", data_count );
- ok( type == REG_SZ, "type %ld is not REG_SZ\n", type );
- todo_wine{
- ok( data_count == 24, "data_count set to %ld instead of 24\n", data_count );
- }
- todo_wine{
- ok( type == REG_EXPAND_SZ, "type %ld is not REG_EXPAND_SZ\n", type );
- } ok( !strcmp( value, "xxxxxxxxxx" ), "value set to '%s'\n", value ); ok( !strcmp( data, "xxxxxxxxxx" ), "data set to '%s'\n", data );
@@ -120,8 +125,12 @@ static void test_enum_value(void) ok( res == ERROR_MORE_DATA, "expected ERROR_MORE_DATA, got %ld\n", res ); /* Win9x returns 2 as specified by MSDN but NT returns 3... */ ok( val_count == 2 || val_count == 3, "val_count set to %ld\n", val_count );
- ok( data_count == 7, "data_count set to %ld instead of 7\n", data_count );
- ok( type == REG_SZ, "type %ld is not REG_SZ\n", type );
- todo_wine{
- ok( data_count == 24, "data_count set to %ld instead of 24\n", data_count );
- }
- todo_wine{
- ok( type == REG_EXPAND_SZ, "type %ld is not REG_EXPAND_SZ\n", type );
- }
#if 0 /* v5.1.2600.0 (XP Home) does not touch value or data in this case */ ok( !strcmp( value, "Te" ), "value set to '%s' instead of 'Te'\n", value ); @@ -137,8 +146,12 @@ static void test_enum_value(void) res = RegEnumValueA( hkey_main, 0, value, &val_count, NULL, &type, data, &data_count ); ok( res == ERROR_MORE_DATA, "expected ERROR_MORE_DATA, got %ld\n", res ); ok( val_count == 0, "val_count set to %ld\n", val_count );
- ok( data_count == 7, "data_count set to %ld instead of 7\n", data_count );
- ok( type == REG_SZ, "type %ld is not REG_SZ\n", type );
- todo_wine{
- ok( data_count == 24, "data_count set to %ld instead of 24\n", data_count );
- }
- todo_wine{
- ok( type == REG_EXPAND_SZ, "type %ld is not REG_EXPAND_SZ\n", type );
- } ok( !strcmp( value, "xxxxxxxxxx" ), "value set to '%s'\n", value );
#if 0 /* v5.1.2600.0 (XP Home) does not touch data in this case */ @@ -154,8 +167,12 @@ static void test_enum_value(void) res = RegEnumValueA( hkey_main, 0, value, &val_count, NULL, &type, data, &data_count ); ok( res == ERROR_MORE_DATA, "expected ERROR_MORE_DATA, got %ld\n", res ); ok( val_count == 20, "val_count set to %ld\n", val_count );
- ok( data_count == 7, "data_count set to %ld instead of 7\n", data_count );
- ok( type == REG_SZ, "type %ld is not REG_SZ\n", type );
- todo_wine{
- ok( data_count == 24, "data_count set to %ld instead of 24\n", data_count );
- }
- todo_wine{
- ok( type == REG_EXPAND_SZ, "type %ld is not REG_EXPAND_SZ\n", type );
- } ok( !strcmp( value, "xxxxxxxxxx" ), "value set to '%s'\n", value ); ok( !strcmp( data, "xxxxxxxxxx" ), "data set to '%s'\n", data );
@@ -166,12 +183,25 @@ static void test_enum_value(void) strcpy( value, "xxxxxxxxxx" ); strcpy( data, "xxxxxxxxxx" ); res = RegEnumValueA( hkey_main, 0, value, &val_count, NULL, &type, data, &data_count );
- ok( res == ERROR_SUCCESS, "expected ERROR_SUCCESS, got %ld\n", res );
- ok( val_count == 4, "val_count set to %ld instead of 4\n", val_count );
- ok( data_count == 7, "data_count set to %ld instead of 7\n", data_count );
- ok( type == REG_SZ, "type %ld is not REG_SZ\n", type );
- ok( !strcmp( value, "Test" ), "value is '%s' instead of Test\n", value );
- ok( !strcmp( data, "foobar" ), "data is '%s' instead of foobar\n", data );
todo_wine{
ok( res == ERROR_MORE_DATA, "expected ERROR_MORE_DATA, got %ld\n", res );
}
todo_wine{
ok( val_count == 20, "val_count set to %ld instead of 20\n", val_count );
}
todo_wine{
ok( data_count == 24, "data_count set to %ld instead of 24\n", data_count );
}
todo_wine{
ok( type == REG_EXPAND_SZ, "type %ld is not REG_EXPAND_SZ\n", type );
}
todo_wine{
ok( !strcmp( value, "xxxxxxxxxx" ), "value is '%s' instead of xxxxxxxxxx\n", value );
}
todo_wine{
ok( !strcmp( data, "xxxxxxxxxx" ), "data is '%s' instead of xxxxxxxxxx\n", data );
}
/* Unicode tests */
@@ -190,8 +220,12 @@ static void test_enum_value(void) res = RegEnumValueW( hkey_main, 0, valueW, &val_count, NULL, &type, (BYTE*)dataW, &data_count ); ok( res == ERROR_MORE_DATA, "expected ERROR_MORE_DATA, got %ld\n", res ); ok( val_count == 2, "val_count set to %ld\n", val_count );
- ok( data_count == 7*sizeof(WCHAR), "data_count set to %ld instead of 7*sizeof(WCHAR)\n", data_count );
- ok( type == REG_SZ, "type %ld is not REG_SZ\n", type );
- todo_wine{
- ok( data_count == 24*sizeof(WCHAR), "data_count set to %ld instead of 24*sizeof(WCHAR)\n", data_count );
- }
- todo_wine{
- ok( type == REG_EXPAND_SZ, "type %ld is not REG_EXPAND_SZ\n", type );
- } ok( !memcmp( valueW, xxxW, sizeof(xxxW) ), "value modified\n" ); ok( !memcmp( dataW, xxxW, sizeof(xxxW) ), "data modified\n" );
@@ -204,8 +238,12 @@ static void test_enum_value(void) res = RegEnumValueW( hkey_main, 0, valueW, &val_count, NULL, &type, (BYTE*)dataW, &data_count ); ok( res == ERROR_MORE_DATA, "expected ERROR_MORE_DATA, got %ld\n", res ); ok( val_count == 3, "val_count set to %ld\n", val_count );
- ok( data_count == 7*sizeof(WCHAR), "data_count set to %ld instead of 7*sizeof(WCHAR)\n", data_count );
- ok( type == REG_SZ, "type %ld is not REG_SZ\n", type );
- todo_wine{
- ok( data_count == 24*sizeof(WCHAR), "data_count set to %ld instead of 24*sizeof(WCHAR)\n", data_count );
- }
- todo_wine{
- ok( type == REG_EXPAND_SZ, "type %ld is not REG_EXPAND_SZ\n", type );
- } ok( !memcmp( valueW, xxxW, sizeof(xxxW) ), "value modified\n" ); ok( !memcmp( dataW, xxxW, sizeof(xxxW) ), "data modified\n" );
@@ -217,10 +255,18 @@ static void test_enum_value(void) memcpy( dataW, xxxW, sizeof(xxxW) ); res = RegEnumValueW( hkey_main, 0, valueW, &val_count, NULL, &type, (BYTE*)dataW, &data_count ); ok( res == ERROR_MORE_DATA, "expected ERROR_MORE_DATA, got %ld\n", res );
- ok( val_count == 4, "val_count set to %ld instead of 4\n", val_count );
- ok( data_count == 7*sizeof(WCHAR), "data_count set to %ld instead of 7*sizeof(WCHAR)\n", data_count );
- ok( type == REG_SZ, "type %ld is not REG_SZ\n", type );
- ok( !memcmp( valueW, testW, sizeof(testW) ), "value is not 'Test'\n" );
todo_wine{
ok( val_count == 5, "val_count set to %ld instead of 5\n", val_count );
}
todo_wine{
ok( data_count == 24*sizeof(WCHAR), "data_count set to %ld instead of 24*sizeof(WCHAR)\n", data_count );
}
todo_wine{
ok( type == REG_EXPAND_SZ, "type %ld is not REG_EXPAND_SZ\n", type );
}
todo_wine{
ok( !memcmp( valueW, test1W, sizeof(test1W) ), "value is not 'Test1'\n" );
} ok( !memcmp( dataW, xxxW, sizeof(xxxW) ), "data modified\n" );
/* no overflow */
@@ -230,12 +276,25 @@ static void test_enum_value(void) memcpy( valueW, xxxW, sizeof(xxxW) ); memcpy( dataW, xxxW, sizeof(xxxW) ); res = RegEnumValueW( hkey_main, 0, valueW, &val_count, NULL, &type, (BYTE*)dataW, &data_count );
- ok( res == ERROR_SUCCESS, "expected ERROR_SUCCESS, got %ld\n", res );
- ok( val_count == 4, "val_count set to %ld instead of 4\n", val_count );
- ok( data_count == 7*sizeof(WCHAR), "data_count set to %ld instead of 7*sizeof(WCHAR)\n", data_count );
- ok( type == REG_SZ, "type %ld is not REG_SZ\n", type );
- ok( !memcmp( valueW, testW, sizeof(testW) ), "value is not 'Test'\n" );
- ok( !memcmp( dataW, foobarW, sizeof(foobarW) ), "data is not 'foobar'\n" );
- todo_wine{
- ok( res == ERROR_MORE_DATA, "expected ERROR_MORE_DATA, got %ld\n", res );
- }
- todo_wine{
- ok( val_count == 5, "val_count set to %ld instead of 5\n", val_count );
- }
- todo_wine{
- ok( data_count == 24*sizeof(WCHAR), "data_count set to %ld instead of 24*sizeof(WCHAR)\n", data_count );
- }
- todo_wine{
- ok( type == REG_EXPAND_SZ, "type %ld is not REG_EXPAND_SZ\n", type );
- }
- todo_wine{
- ok( !memcmp( valueW, test1W, sizeof(test1W) ), "value is not 'Test1'\n" );
- }
- todo_wine{
- ok( !memcmp( dataW, xxxW, sizeof(xxxW) ), "data modified\n" );
- }
CLEANUP: /* cleanup */ @@ -252,6 +311,12 @@ static void test_query_value_ex() ok(ret == ERROR_SUCCESS, "expected ERROR_SUCCESS, got %ld\n", ret); ok(size == strlen(sTestpath1) + 1, "(%ld,%ld)\n", (DWORD)strlen(sTestpath1) + 1, size); ok(type == REG_SZ, "type %ld is not REG_SZ\n", type);
- ret = RegQueryValueExA(hkey_main, "TestStringNotIn", NULL, &type, NULL, &size);
- ok(ret == ERROR_FILE_NOT_FOUND, "expected ERROR_FILE_NOT_FOUND, got %ld\n", ret);
}
START_TEST(registry)
It would help wine if you could make these tests pass on wine. Also, have a look at the test results at test.winehq.org/data. I see that 26 of the tests fail on 95, 24 fail on 98, and 28 for >= nt4. If you have any questions fixing the reg tests, I'd be glad to help. Make sure to cc wine-devel.