From 602f9a366a68afc3e8eb0897bb69366c19bcac8f Mon Sep 17 00:00:00 2001 From: Daniel Lehman Date: Thu, 3 May 2018 11:47:58 -0700 Subject: [PATCH 1/2] advapi32/tests: Add RegNotifyChangeKeyValue tests. Signed-off-by: Daniel Lehman --- dlls/advapi32/tests/registry.c | 44 ++++++++++++++++++++++++++++++++-- 1 file changed, 42 insertions(+), 2 deletions(-) diff --git a/dlls/advapi32/tests/registry.c b/dlls/advapi32/tests/registry.c index 6d8f90add8..d975301e86 100644 --- a/dlls/advapi32/tests/registry.c +++ b/dlls/advapi32/tests/registry.c @@ -3484,7 +3484,7 @@ static DWORD WINAPI notify_change_thread(void *arg) static void test_RegNotifyChangeKeyValue(void) { struct notify_data data; - HKEY key, subkey; + HKEY key, subkey, subsubkey; HANDLE thread; HANDLE event; DWORD dwret; @@ -3495,7 +3495,7 @@ static void test_RegNotifyChangeKeyValue(void) ret = RegCreateKeyA(hkey_main, "TestKey", &key); ok(ret == ERROR_SUCCESS, "expected ERROR_SUCCESS, got %d\n", ret); - ret = RegNotifyChangeKeyValue(key, TRUE, REG_NOTIFY_CHANGE_NAME, event, TRUE); + ret = RegNotifyChangeKeyValue(key, TRUE, REG_NOTIFY_CHANGE_NAME|REG_NOTIFY_CHANGE_LAST_SET, event, TRUE); ok(ret == ERROR_SUCCESS, "expected ERROR_SUCCESS, got %d\n", ret); dwret = WaitForSingleObject(event, 0); ok(dwret == WAIT_TIMEOUT, "expected WAIT_TIMEOUT, got %u\n", dwret); @@ -3505,7 +3505,47 @@ static void test_RegNotifyChangeKeyValue(void) dwret = WaitForSingleObject(event, 0); ok(dwret == WAIT_OBJECT_0, "expected WAIT_OBJECT_0, got %u\n", dwret); + /* watching deeper keys */ + ret = RegNotifyChangeKeyValue(key, TRUE, REG_NOTIFY_CHANGE_NAME|REG_NOTIFY_CHANGE_LAST_SET, event, TRUE); + ok(ret == ERROR_SUCCESS, "expected ERROR_SUCCESS, got %d\n", ret); + dwret = WaitForSingleObject(event, 0); + ok(dwret == WAIT_TIMEOUT, "expected WAIT_TIMEOUT, got %u\n", dwret); + + ret = RegCreateKeyA(subkey, "SubKey", &subsubkey); + ok(ret == ERROR_SUCCESS, "expected ERROR_SUCCESS, got %d\n", ret); + dwret = WaitForSingleObject(event, 0); + ok(dwret == WAIT_OBJECT_0, "expected WAIT_OBJECT_0, got %u\n", dwret); + + /* watching deeper values */ + ret = RegNotifyChangeKeyValue(key, TRUE, REG_NOTIFY_CHANGE_NAME|REG_NOTIFY_CHANGE_LAST_SET, event, TRUE); + ok(ret == ERROR_SUCCESS, "expected ERROR_SUCCESS, got %d\n", ret); + dwret = WaitForSingleObject(event, 0); + ok(dwret == WAIT_TIMEOUT, "expected WAIT_TIMEOUT, got %u\n", dwret); + + ret = RegSetValueA(subsubkey, NULL, REG_SZ, "SubSubKeyValue", 0); + ok(ret == ERROR_SUCCESS, "expected ERROR_SUCCESS, got %d\n", ret); + dwret = WaitForSingleObject(event, 0); + todo_wine ok(dwret == WAIT_OBJECT_0, "expected WAIT_OBJECT_0, got %u\n", dwret); + + /* don't watch deeper values */ + RegCloseKey(key); + ret = RegOpenKeyA(hkey_main, "TestKey", &key); + ok(ret == ERROR_SUCCESS, "expected ERROR_SUCCESS, got %d\n", ret); + + ret = RegNotifyChangeKeyValue(key, FALSE, REG_NOTIFY_CHANGE_NAME|REG_NOTIFY_CHANGE_LAST_SET, event, TRUE); + ok(ret == ERROR_SUCCESS, "expected ERROR_SUCCESS, got %d\n", ret); + dwret = WaitForSingleObject(event, 0); + ok(dwret == WAIT_TIMEOUT, "expected WAIT_TIMEOUT, got %u\n", dwret); + + ret = RegSetValueA(subsubkey, NULL, REG_SZ, "SubSubKeyValueNEW", 0); + ok(ret == ERROR_SUCCESS, "expected ERROR_SUCCESS, got %d\n", ret); + dwret = WaitForSingleObject(event, 0); + ok(dwret == WAIT_TIMEOUT, "expected WAIT_TIMEOUT, got %u\n", dwret); + + RegDeleteKeyA(subkey, "SubKey"); RegDeleteKeyA(key, "SubKey"); + RegCloseKey(subsubkey); + RegCloseKey(subkey); RegCloseKey(key); /* test same thread with REG_NOTIFY_THREAD_AGNOSTIC */ -- 2.17.0