Bad usage of ok() macro in tests
Yann Droneaud
yann at droneaud.fr
Wed Feb 24 08:47:56 CST 2010
Hi,
While trying to manage to fix warning about unused values, I've found a
problem about some usages of ok() macro.
ok() macros is defined in include/wine/test.h as:
#define ok_(file, line) (winetest_set_location(file, line),
0) ? 0 : winetest_ok
#define ok ok_(__FILE__, __LINE__)
One good example:
ok( val != NULL, "Invalid value\n");
is expanded as
(winetest_set_location(file, line), 0) ? 0 : winetest_ok(val != NULL,
"Invalid value\n");
One bad example:
if (!ok( val != NULL, "Invalid value\n"))
is expanded as
if (!(winetest_set_location(file, line), 0) ? 0 : winetest_ok(val !=
NULL, "Invalid value\n"))
And is then evaluated as
1) if ( !(0) ? 0 : winetest_ok(val != NULL, "Invalid value\n"))
2) if ( 1 ? 0 : winetest_ok(val != NULL, "Invalid value\n"))
^
ouch !
3) if (0)
So this is pretty useless.
Hopefully, this is only of limited use in wine test suite: find . -type
d -name tests | xargs grep -r '[=\!][[:space:](]*ok[[:space:]]*('
returns only four cases:
./dlls/user32/tests/scroll.c: if ( !ok( hMainWnd != NULL, "Failed to
create parent window. Tests aborted.\n" ) )
./dlls/kernel32/tests/file.c: !ok( UnlockFile( handle, 100, 0, 10,
0 ), "UnlockFile 100,10 failed\n" );
./dlls/comctl32/tests/treeview.c: if ( !ok(hMainWnd != NULL, "Failed
to create parent window. Tests aborted.\n") )
./dlls/shell32/tests/autocomplete.c: if(!ok(hMainWnd != NULL, "Failed
to create parent window. Tests aborted.\n"))
There's only 3 case with a real problem. The fourth is something very
strange: the !ok() in ./dlls/kernel32/tests/file.c seems to be a typo,
or someone wanted to disable the test.
Regards.
--
Yann Droneaud
More information about the wine-devel
mailing list