Module: wine Branch: master Commit: 8dee2df6628f301e4c936d35d69ef83b443c81c4 URL: https://source.winehq.org/git/wine.git/?a=commit;h=8dee2df6628f301e4c936d35d...
Author: Daniel Lehman dlehman@esri.com Date: Thu May 3 11:47:58 2018 -0700
advapi32/tests: Add RegNotifyChangeKeyValue tests.
Signed-off-by: Daniel Lehman dlehman@esri.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
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 6d8f90a..d975301 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 */