1 #ifndef APITESTS_MSGTRACE_H
2 #define APITESTS_MSGTRACE_H
3 
4 typedef enum _MSG_TYPE
5 {
6     SENT,
7     POST,
8     HOOK,
9     EVENT,
10     SENT_RET,
11     MARKER
12 } MSG_TYPE;
13 
14 typedef struct _MSG_ENTRY
15 {
16     int iwnd;
17     UINT msg;
18     MSG_TYPE type;
19     int param1;
20     int param2;
21 } MSG_ENTRY;
22 
23 typedef struct _MSG_CACHE
24 {
25     MSG_ENTRY last_post_message;
26     MSG_ENTRY message_cache[100];
27     int count;
28 } MSG_CACHE;
29 
30 extern MSG_ENTRY empty_chain[];
31 extern MSG_CACHE default_cache;
32 
33 void record_message(MSG_CACHE* cache, int iwnd, UINT message, MSG_TYPE type, int param1,int param2);
34 void compare_cache(MSG_CACHE* cache, const char* file, int line, MSG_ENTRY *msg_chain);
35 void trace_cache(MSG_CACHE* cache, const char* file, int line);
36 void empty_message_cache(MSG_CACHE* cache);
37 
38 /* filter messages that are affected by dwm */
IsDWmMsg(UINT msg)39 static inline BOOL IsDWmMsg(UINT msg)
40 {
41     switch(msg)
42     {
43     case WM_NCPAINT:
44     case WM_ERASEBKGND:
45     case WM_PAINT:
46     case 0x031f:  /*WM_DWMNCRENDERINGCHANGED*/
47         return TRUE;
48     }
49     return FALSE;
50 }
51 
IseKeyMsg(UINT msg)52 static inline BOOL IseKeyMsg(UINT msg)
53 {
54     return (msg == WM_KEYUP || msg == WM_KEYDOWN);
55 }
56 
57 #define COMPARE_CACHE(msg_chain) compare_cache(&default_cache, __FILE__, __LINE__, msg_chain)
58 #define TRACE_CACHE() trace_cache(&default_cache, __FILE__, __LINE__)
59 #define EMPTY_CACHE() empty_message_cache(&default_cache);
60 #define RECORD_MESSAGE(...) record_message(&default_cache, ##__VA_ARGS__);
61 
62 #define COMPARE_CACHE_(cache, msg_chain) compare_cache(cache, __FILE__, __LINE__, msg_chain)
63 #define TRACE_CACHE_(cache) trace_cache(cache, __FILE__, __LINE__)
64 #define EMPTY_CACHE_(cache) empty_message_cache(cache);
65 
66 #define EXPECT_QUEUE_STATUS(expected, notexpected)                                                                              \
67     {                                                                                                                           \
68         DWORD status = HIWORD(GetQueueStatus(QS_ALLEVENTS));                                                                    \
69         ok(((status) & (expected))== (expected),"wrong queue status. expected %li, and got %li\n", (DWORD)(expected), status);  \
70         if(notexpected)                                                                                                         \
71             ok((status & (notexpected))!=(notexpected), "wrong queue status. got non expected %li\n", (DWORD)(notexpected));    \
72     }
73 
74 #endif
75