Hi Bernhard,
On 06/30/14 19:15, Bernhard Reiter wrote:
diff --git a/dlls/imagehlp/tests/image.c b/dlls/imagehlp/tests/image.c index e008b0b..d93130c 100644 --- a/dlls/imagehlp/tests/image.c +++ b/dlls/imagehlp/tests/image.c @@ -31,6 +31,9 @@ static HMODULE hImageHlp;
static BOOL (WINAPI *pImageGetDigestStream)(HANDLE, DWORD, DIGEST_FUNCTION, DIGEST_HANDLE); +static BOOL (WINAPI *pBindImageEx)(DWORD Flags, PCSTR ImageName,
PCSTR DllPath, PCSTR SymbolPath,
PIMAGEHLP_STATUS_ROUTINE StatusRoutine);
/* minimal PE file image */ #define VA_START 0x400000 @@ -149,6 +152,9 @@ struct expected_update_accum BOOL todo; };
+static int status_routine_called[14] = {0};
static BOOL WINAPI accumulating_stream_output(DIGEST_HANDLE handle, BYTE *pb, DWORD cb) { @@ -273,6 +279,52 @@ static void update_checksum(void) bin.nt_headers.OptionalHeader.CheckSum = sum; }
+BOOL WINAPI TestingStatusRoutine(IMAGEHLP_STATUS_REASON reason, PSTR ImageName, PSTR DllName,
ULONG_PTR Va, ULONG_PTR Parameter)
+{
Make it static.
- char kernel32_path[MAX_PATH];
- status_routine_called[reason]++;
- todo_wine ok((reason == BindImportModule) || (reason == BindImportProcedure) ||
(reason == BindForwarderNOT), "expected reason to be one of BindImportModule, "
"BindImportProcedure, or BindForwarderNOT, got %d\n", reason);
How about moving that to the switch that you need anyway?
- switch(reason)
- {
case BindOutOfMemory:
case BindRvaToVaFailed:
case BindNoRoomInImage:
case BindImportModuleFailed:
case BindImportProcedureFailed:
break;
How about
default: ok(0, "...");
case BindImportModule:
ok(!strcmp(DllName, "KERNEL32.DLL"), "expected DllName to be KERNEL32.DLL, got %s\n",
DllName);
break;
case BindImportProcedure:
GetSystemDirectoryA(kernel32_path, MAX_PATH);
strcat(kernel32_path, "\\KERNEL32.DLL");
ok(!lstrcmpiA(DllName, kernel32_path), "expected DllName to be %s, got %s\n",
kernel32_path, DllName);
ok(!strcmp((LPSTR)Parameter, "ExitProcess"),
"expected Parameter to be ExitProcess, got %s\n", (LPSTR)Parameter);
break;
case BindForwarder:
case BindForwarderNOT:
case BindImageModified:
case BindExpandFileHeaders:
case BindImageComplete:
case BindMismatchedSymbols:
case BindSymbolsNotUpdated:
break;
- }
Same here. You really need cases for expected values.
- return TRUE;
+}
static void test_get_digest_stream(void) { BOOL ret; @@ -329,6 +381,54 @@ static void test_get_digest_stream(void) DeleteFileA(temp_file); }
+static void test_bind_image_ex(void) +{
- BOOL ret;
- HANDLE file;
- char temp_file[MAX_PATH];
- DWORD count;
- /* Call with a non-existant file */
- SetLastError(0xdeadbeef);
- ret = pBindImageEx(BIND_NO_BOUND_IMPORTS | BIND_NO_UPDATE | BIND_ALL_IMAGES, temp_file, NULL,
NULL, (void *)TestingStatusRoutine);
- todo_wine ok(!ret && ((GetLastError() == ERROR_FILE_NOT_FOUND) ||
(GetLastError() == ERROR_INVALID_PARAMETER)),
"expected ERROR_FILE_NOT_FOUND or ERROR_INVALID_PARAMETER, got %d\n",
GetLastError());
- file = create_temp_file(temp_file);
- if (file == INVALID_HANDLE_VALUE)
- {
skip("couldn't create temp file\n");
return;
- }
- WriteFile(file, &bin, sizeof(bin), &count, NULL);
- FlushFileBuffers(file);
- CloseHandle(file);
- /* Finally, call with a proper PE file */
- SetLastError(0xdeadbeef);
- ret = pBindImageEx(BIND_NO_BOUND_IMPORTS | BIND_NO_UPDATE | BIND_ALL_IMAGES, temp_file, NULL,
NULL, (void *)TestingStatusRoutine);
- ok(ret, "BindImageEx failed: %d\n", GetLastError());
- todo_wine ok(status_routine_called[BindImportModule] == 1,
"Expected StatusRoutine to be called once with reason BindImportModule, "
"but it was called %d times\n", status_routine_called[BindImportModule]);
- /* Under wvistau64 (64 bit image), w2008s64 (64 bit image) and w7pro64 (64 bit image),
* StatusRoutine is called with reason BindForwarderNOT instead of BindImportProcedure. */
Please avoid such comments. Testbot VM names are not related to the code nor permanent.
Cheers, Jacek