Commit 6387476d authored by Zebediah Figura's avatar Zebediah Figura Committed by Alexandre Julliard

msi/tests: Add a test for asynchronous custom actions.

parent 25926905
...@@ -1169,6 +1169,27 @@ UINT WINAPI process2(MSIHANDLE hinst) ...@@ -1169,6 +1169,27 @@ UINT WINAPI process2(MSIHANDLE hinst)
return ERROR_SUCCESS; return ERROR_SUCCESS;
} }
UINT WINAPI async1(MSIHANDLE hinst)
{
HANDLE event = CreateEventA(NULL, TRUE, FALSE, "wine_msi_async_test");
HANDLE event2 = CreateEventA(NULL, TRUE, FALSE, "wine_msi_async_test2");
DWORD r = WaitForSingleObject(event, 10000);
ok(hinst, !r, "wait timed out\n");
SetEvent(event2);
return ERROR_SUCCESS;
}
UINT WINAPI async2(MSIHANDLE hinst)
{
HANDLE event = CreateEventA(NULL, TRUE, FALSE, "wine_msi_async_test");
HANDLE event2 = CreateEventA(NULL, TRUE, FALSE, "wine_msi_async_test2");
DWORD r;
SetEvent(event);
r = WaitForSingleObject(event2, 10000);
ok(hinst, !r, "wait timed out\n");
return ERROR_SUCCESS;
}
static BOOL pf_exists(const char *file) static BOOL pf_exists(const char *file)
{ {
char path[MAX_PATH]; char path[MAX_PATH];
......
...@@ -5,6 +5,8 @@ ...@@ -5,6 +5,8 @@
@ stdcall nested(long) @ stdcall nested(long)
@ stdcall process1(long) @ stdcall process1(long)
@ stdcall process2(long) @ stdcall process2(long)
@ stdcall async1(long)
@ stdcall async2(long)
@ stdcall cf_present(long) @ stdcall cf_present(long)
@ stdcall cf_absent(long) @ stdcall cf_absent(long)
......
...@@ -677,6 +677,8 @@ static const CHAR ca1_install_exec_seq_dat[] = "Action\tCondition\tSequence\n" ...@@ -677,6 +677,8 @@ static const CHAR ca1_install_exec_seq_dat[] = "Action\tCondition\tSequence\n"
"process1\tTEST_PROCESS\t720\n" "process1\tTEST_PROCESS\t720\n"
"process2\tTEST_PROCESS\t721\n" "process2\tTEST_PROCESS\t721\n"
"process_deferred\tTEST_PROCESS\t722\n" "process_deferred\tTEST_PROCESS\t722\n"
"async1\tTEST_ASYNC\t730\n"
"async2\tTEST_ASYNC\t731\n"
"InstallFinalize\t\t800\n"; "InstallFinalize\t\t800\n";
static const CHAR ca1_custom_action_dat[] = "Action\tType\tSource\tTarget\n" static const CHAR ca1_custom_action_dat[] = "Action\tType\tSource\tTarget\n"
...@@ -689,6 +691,8 @@ static const CHAR ca1_custom_action_dat[] = "Action\tType\tSource\tTarget\n" ...@@ -689,6 +691,8 @@ static const CHAR ca1_custom_action_dat[] = "Action\tType\tSource\tTarget\n"
"process1\t1\tcustom.dll\tprocess1\n" "process1\t1\tcustom.dll\tprocess1\n"
"process2\t1\tcustom.dll\tprocess2\n" "process2\t1\tcustom.dll\tprocess2\n"
"process_deferred\t1025\tcustom.dll\tprocess2\n" "process_deferred\t1025\tcustom.dll\tprocess2\n"
"async1\t129\tcustom.dll\tasync1\n"
"async2\t1\tcustom.dll\tasync2\n"
"testretval\t1\tcustom.dll\ttest_retval\n"; "testretval\t1\tcustom.dll\ttest_retval\n";
static const CHAR ca1_test_seq_dat[] = "Action\tCondition\tSequence\n" static const CHAR ca1_test_seq_dat[] = "Action\tCondition\tSequence\n"
...@@ -4129,7 +4133,7 @@ static void test_customaction1(void) ...@@ -4129,7 +4133,7 @@ static void test_customaction1(void)
r = MsiInstallProductA(msifile, "TEST_RETVAL=0"); r = MsiInstallProductA(msifile, "TEST_RETVAL=0");
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r); ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
r = MsiInstallProductA(msifile, "TEST_RETVAL=1626"); /* ERROR_FUNCTION_NOT_CALLED*/ r = MsiInstallProductA(msifile, "TEST_RETVAL=1626"); /* ERROR_FUNCTION_NOT_CALLED */
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r); ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %u\n", r);
r = MsiInstallProductA(msifile, "TEST_RETVAL=1602"); r = MsiInstallProductA(msifile, "TEST_RETVAL=1602");
...@@ -4146,6 +4150,10 @@ static void test_customaction1(void) ...@@ -4146,6 +4150,10 @@ static void test_customaction1(void)
r = MsiInstallProductA(msifile, "TEST_PROCESS=1"); r = MsiInstallProductA(msifile, "TEST_PROCESS=1");
ok(!r, "got %u\n", r); ok(!r, "got %u\n", r);
/* test asynchronous actions (msidbCustomActionTypeAsync) */
r = MsiInstallProductA(msifile, "TEST_ASYNC=1");
ok(!r, "got %u\n", r);
delete_test_files(); delete_test_files();
DeleteFileA(msifile); DeleteFileA(msifile);
DeleteFileA("unus"); DeleteFileA("unus");
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment