[SHELL32_APITEST] -Add some tests for SHParseDisplayName for CORE-12882.
[reactos.git] / rostests / apitests / comctl32 / button.c
index 0a68021..85e4f5e 100644 (file)
@@ -486,59 +486,77 @@ static void FlushMessages()
     }
 }
 
-MSG_ENTRY erase_sequence[]={
+MSG_ENTRY paint_sequence[]={
     {2, WM_PAINT, POST},
     {1, WM_ERASEBKGND},
     {1, WM_PRINTCLIENT},
     {1, WM_CTLCOLORBTN},
-    {1, WM_NOTIFY, SENT, 0, -12},
-    {1, WM_NOTIFY, SENT, 0, -12},
+    {1, WM_NOTIFY, SENT, 0, NM_CUSTOMDRAW},
+    {1, WM_NOTIFY, SENT, 0, NM_CUSTOMDRAW},
     {0,0}};
 
-MSG_ENTRY erase_nonthemed_sequence[]={
+MSG_ENTRY paint_nonthemed_sequence[]={
     {2, WM_PAINT, POST},
     {1, WM_CTLCOLORBTN},
-    {1, WM_NOTIFY, SENT, 0, -12},
-    {1, WM_NOTIFY, SENT, 0, -12},
+    {1, WM_NOTIFY, SENT, 0, NM_CUSTOMDRAW},
+    {1, WM_NOTIFY, SENT, 0, NM_CUSTOMDRAW},
+    {0,0}};
+
+MSG_ENTRY redraw_sequence[]={
+    {2, WM_PAINT, POST},
+    {2, WM_ERASEBKGND},
+    {1, WM_ERASEBKGND},
+    {1, WM_PRINTCLIENT},
+    {1, WM_CTLCOLORBTN},
+    {1, WM_NOTIFY, SENT, 0, NM_CUSTOMDRAW},
+    {1, WM_NOTIFY, SENT, 0, NM_CUSTOMDRAW},
+    {0,0}};
+
+MSG_ENTRY redraw_nonthemed_sequence[]={
+    {2, WM_PAINT, POST},
+    {2, WM_ERASEBKGND},
+    {1, WM_CTLCOLORBTN},
+    {1, WM_NOTIFY, SENT, 0, NM_CUSTOMDRAW},
+    {1, WM_NOTIFY, SENT, 0, NM_CUSTOMDRAW},
     {0,0}};
 
 MSG_ENTRY printclnt_nonthemed_sequence[]={
     {2, WM_PRINTCLIENT},
     {1, WM_CTLCOLORBTN},
-    {1, WM_NOTIFY, SENT, 0, -12},
-    {1, WM_NOTIFY, SENT, 0, -12},
+    {1, WM_NOTIFY, SENT, 0, NM_CUSTOMDRAW},
+    {1, WM_NOTIFY, SENT, 0, NM_CUSTOMDRAW},
     {0,0}};
 
 MSG_ENTRY printclnt_sequence[]={
     {2, WM_PRINTCLIENT},
     {1, WM_CTLCOLORBTN},
-    {1, WM_NOTIFY, SENT, 0, -12},
+    {1, WM_NOTIFY, SENT, 0, NM_CUSTOMDRAW},
     {0,0}};
 
 MSG_ENTRY pseudomove_sequence[]={
     {2, WM_MOUSEMOVE},
-    {1, WM_NOTIFY, SENT, 0, -1249},
+    {1, WM_NOTIFY, SENT, 0, BCN_HOTITEMCHANGE},
     {2, WM_MOUSELEAVE, POST},
-    {1, WM_NOTIFY, SENT, 0, -1249},
+    {1, WM_NOTIFY, SENT, 0, BCN_HOTITEMCHANGE},
     {2, WM_PAINT, POST},
     {2, WM_ERASEBKGND},
     {1, WM_ERASEBKGND},
     {1, WM_PRINTCLIENT},
     {1, WM_CTLCOLORBTN},
-    {1, WM_NOTIFY, SENT, 0, -12},
-    {1, WM_NOTIFY, SENT, 0, -12},
+    {1, WM_NOTIFY, SENT, 0, NM_CUSTOMDRAW},
+    {1, WM_NOTIFY, SENT, 0, NM_CUSTOMDRAW},
     {0,0}};
 
 MSG_ENTRY pseudomove_nonthemed_sequence[]={
     {2, WM_MOUSEMOVE},
-    {1, WM_NOTIFY, SENT, 0, -1249},
+    {1, WM_NOTIFY, SENT, 0, BCN_HOTITEMCHANGE},
     {2, WM_MOUSELEAVE, POST},
-    {1, WM_NOTIFY, SENT, 0, -1249},
+    {1, WM_NOTIFY, SENT, 0, BCN_HOTITEMCHANGE},
     {2, WM_PAINT, POST},
     {2, WM_ERASEBKGND},
     {1, WM_CTLCOLORBTN},
-    {1, WM_NOTIFY, SENT, 0, -12},
-    {1, WM_NOTIFY, SENT, 0, -12},
+    {1, WM_NOTIFY, SENT, 0, NM_CUSTOMDRAW},
+    {1, WM_NOTIFY, SENT, 0, NM_CUSTOMDRAW},
     {0,0}};
 
 MSG_ENTRY pseudohover_sequence[]={
@@ -554,14 +572,14 @@ MSG_ENTRY mouseenter_sequence[]={
     {2, WM_SETCURSOR},
     {1, WM_SETCURSOR},
     {2, WM_MOUSEMOVE, POST},
-    {1, WM_NOTIFY, SENT, 0, -1249},
+    {1, WM_NOTIFY, SENT, 0, BCN_HOTITEMCHANGE},
     {2, WM_PAINT, POST},
     {2, WM_ERASEBKGND},
     {1, WM_ERASEBKGND},
     {1, WM_PRINTCLIENT},
     {1, WM_CTLCOLORBTN},
-    {1, WM_NOTIFY, SENT, 0, -12},
-    {1, WM_NOTIFY, SENT, 0, -12},
+    {1, WM_NOTIFY, SENT, 0, NM_CUSTOMDRAW},
+    {1, WM_NOTIFY, SENT, 0, NM_CUSTOMDRAW},
     {0,0}};
 
 MSG_ENTRY mouseenter_nonthemed_sequence[]={
@@ -569,12 +587,12 @@ MSG_ENTRY mouseenter_nonthemed_sequence[]={
     {2, WM_SETCURSOR},
     {1, WM_SETCURSOR},
     {2, WM_MOUSEMOVE, POST},
-    {1, WM_NOTIFY, SENT, 0, -1249},
+    {1, WM_NOTIFY, SENT, 0, BCN_HOTITEMCHANGE},
     {2, WM_PAINT, POST},
     {2, WM_ERASEBKGND},
     {1, WM_CTLCOLORBTN},
-    {1, WM_NOTIFY, SENT, 0, -12},
-    {1, WM_NOTIFY, SENT, 0, -12},
+    {1, WM_NOTIFY, SENT, 0, NM_CUSTOMDRAW},
+    {1, WM_NOTIFY, SENT, 0, NM_CUSTOMDRAW},
     {0,0}};
 
 MSG_ENTRY mousemove_sequence[]={
@@ -586,29 +604,32 @@ MSG_ENTRY mousemove_sequence[]={
 
 MSG_ENTRY mouseleave_sequence[]={
     {2, WM_MOUSELEAVE, POST},
-    {1, WM_NOTIFY, SENT, 0, -1249},
+    {1, WM_NOTIFY, SENT, 0, BCN_HOTITEMCHANGE},
     {2, WM_PAINT, POST},
     {2, WM_ERASEBKGND},
     {1, WM_ERASEBKGND},
     {1, WM_PRINTCLIENT},
     {1, WM_CTLCOLORBTN},
-    {1, WM_NOTIFY, SENT, 0, -12},
-    {1, WM_NOTIFY, SENT, 0, -12},
+    {1, WM_NOTIFY, SENT, 0, NM_CUSTOMDRAW},
+    {1, WM_NOTIFY, SENT, 0, NM_CUSTOMDRAW},
     {0,0}};
 
 MSG_ENTRY mouseleave_nonthemed_sequence[]={
     {2, WM_MOUSELEAVE, POST},
-    {1, WM_NOTIFY, SENT, 0, -1249},
+    {1, WM_NOTIFY, SENT, 0, BCN_HOTITEMCHANGE},
     {2, WM_PAINT, POST},
     {2, WM_ERASEBKGND},
     {1, WM_CTLCOLORBTN},
-    {1, WM_NOTIFY, SENT, 0, -12},
-    {1, WM_NOTIFY, SENT, 0, -12},
+    {1, WM_NOTIFY, SENT, 0, NM_CUSTOMDRAW},
+    {1, WM_NOTIFY, SENT, 0, NM_CUSTOMDRAW},
     {0,0}};
 
 void Test_MessagesNonThemed()
 {
+    DWORD state;
+
     MOVE_CURSOR(0,0);
+    EMPTY_CACHE();
 
     RegisterSimpleClass(TestProc, L"testClass");
     hWnd1 = CreateWindowW(L"testClass", L"Test parent", WS_POPUP | WS_VISIBLE, 100, 100, 200, 200, 0, NULL, NULL, NULL);
@@ -637,11 +658,15 @@ void Test_MessagesNonThemed()
 
     RedrawWindow(hWnd2, NULL, NULL, RDW_INTERNALPAINT);
     FlushMessages();
-    COMPARE_CACHE(erase_nonthemed_sequence);
+    COMPARE_CACHE(paint_nonthemed_sequence);
 
     RedrawWindow(hWnd2, NULL, NULL, RDW_INVALIDATE);
     FlushMessages();
-    COMPARE_CACHE(erase_nonthemed_sequence);
+    COMPARE_CACHE(paint_nonthemed_sequence);
+
+    RedrawWindow(hWnd2, NULL, NULL, RDW_ERASE | RDW_INVALIDATE);
+    FlushMessages();
+    COMPARE_CACHE(redraw_nonthemed_sequence);
 
     SendMessageW(hWnd2, WM_PRINTCLIENT, 0, PRF_ERASEBKGND);
     FlushMessages();
@@ -659,27 +684,46 @@ void Test_MessagesNonThemed()
     FlushMessages();
     COMPARE_CACHE(pseudoleave_sequence);
 
+    state = SendMessageW(hWnd2, BM_GETSTATE,0,0);
+    ok(state == 0, "Expected state 0, got %lu", state);
+    EMPTY_CACHE();
+
     MOVE_CURSOR(150,150);
     FlushMessages();
     COMPARE_CACHE(mouseenter_nonthemed_sequence);
 
+    state = SendMessageW(hWnd2, BM_GETSTATE,0,0);
+    ok(state == BST_HOT, "Expected state BST_HOT, got %lu", state);
+    EMPTY_CACHE();
+
     MOVE_CURSOR(151,151);
     FlushMessages();
     COMPARE_CACHE(mousemove_sequence);
 
+    state = SendMessageW(hWnd2, BM_GETSTATE,0,0);
+    ok(state == BST_HOT, "Expected state BST_HOT, got %lu", state);
+    EMPTY_CACHE();
+
     MOVE_CURSOR(0,0);
     FlushMessages();
     COMPARE_CACHE(empty_chain);
     FlushMessages();
     COMPARE_CACHE(mouseleave_nonthemed_sequence);
 
+    state = SendMessageW(hWnd2, BM_GETSTATE,0,0);
+    ok(state == 0, "Expected state 0, got %lu", state);
+    EMPTY_CACHE();
+
     DestroyWindow(hWnd1);
     DestroyWindow(hWnd2);
 }
 
 void Test_MessagesThemed()
 {
+    DWORD state;
+
     MOVE_CURSOR(0,0);
+    EMPTY_CACHE();
 
     RegisterSimpleClass(TestProc, L"testClass");
     hWnd1 = CreateWindowW(L"testClass", L"Test parent", WS_POPUP | WS_VISIBLE, 100, 100, 200, 200, 0, NULL, NULL, NULL);
@@ -706,16 +750,24 @@ void Test_MessagesThemed()
 
     RedrawWindow(hWnd2, NULL, NULL, RDW_INTERNALPAINT);
     FlushMessages();
-    COMPARE_CACHE(erase_sequence);
+    COMPARE_CACHE(paint_sequence);
 
     RedrawWindow(hWnd2, NULL, NULL, RDW_INVALIDATE);
     FlushMessages();
-    COMPARE_CACHE(erase_sequence);
+    COMPARE_CACHE(paint_sequence);
+
+    RedrawWindow(hWnd2, NULL, NULL, RDW_ERASE | RDW_INVALIDATE);
+    FlushMessages();
+    COMPARE_CACHE(redraw_sequence);
 
     SendMessageW(hWnd2, WM_PRINTCLIENT, 0, PRF_ERASEBKGND);
     FlushMessages();
     COMPARE_CACHE(printclnt_sequence);
 
+    SendMessageW(hWnd2, WM_PRINTCLIENT, 0, PRF_CLIENT);
+    FlushMessages();
+    COMPARE_CACHE(printclnt_sequence);
+
     SendMessageW(hWnd2, WM_MOUSEMOVE, 0, 0);
     FlushMessages();
     COMPARE_CACHE(pseudomove_sequence);
@@ -728,20 +780,36 @@ void Test_MessagesThemed()
     FlushMessages();
     COMPARE_CACHE(pseudoleave_sequence);
 
+    state = SendMessageW(hWnd2, BM_GETSTATE,0,0);
+    ok(state == 0, "Expected state 0, got %lu", state);
+    EMPTY_CACHE();
+
     MOVE_CURSOR(150,150);
     FlushMessages();
     COMPARE_CACHE(mouseenter_sequence);
 
+    state = SendMessageW(hWnd2, BM_GETSTATE,0,0);
+    ok(state == BST_HOT, "Expected state BST_HOT, got %lu", state);
+    EMPTY_CACHE();
+
     MOVE_CURSOR(151,151);
     FlushMessages();
     COMPARE_CACHE(mousemove_sequence);
 
+    state = SendMessageW(hWnd2, BM_GETSTATE,0,0);
+    ok(state == BST_HOT, "Expected state BST_HOT, got %lu", state);
+    EMPTY_CACHE();
+
     MOVE_CURSOR(0,0);
     FlushMessages();
     COMPARE_CACHE(empty_chain);
     FlushMessages();
     COMPARE_CACHE(mouseleave_sequence);
 
+    state = SendMessageW(hWnd2, BM_GETSTATE,0,0);
+    ok(state == 0, "Expected state 0, got %lu", state);
+    EMPTY_CACHE();
+
     DestroyWindow(hWnd1);
     DestroyWindow(hWnd2);
 }