ReactOS  0.4.14-dev-323-g6fe6a88
systray.c
Go to the documentation of this file.
1 /* Unit tests for systray
2  *
3  * Copyright 2007 Mikolaj Zalewski
4  *
5  * This library is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU Lesser General Public
7  * License as published by the Free Software Foundation; either
8  * version 2.1 of the License, or (at your option) any later version.
9  *
10  * This library is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13  * Lesser General Public License for more details.
14  *
15  * You should have received a copy of the GNU Lesser General Public
16  * License along with this library; if not, write to the Free Software
17  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
18  */
19 
20 #ifndef __REACTOS__
21 #define _WIN32_IE 0x600
22 #endif
23 #include <stdarg.h>
24 
25 #include <windows.h>
26 #include "shellapi.h"
27 
28 #include "wine/test.h"
29 
30 
31 static HWND hMainWnd;
32 static BOOL (WINAPI *pShell_NotifyIconW)(DWORD,PNOTIFYICONDATAW);
33 
34 static void test_cbsize(void)
35 {
36  NOTIFYICONDATAA nidA;
37  BOOL ret;
38 
39  if (pShell_NotifyIconW)
40  {
41  NOTIFYICONDATAW nidW;
42 
43  ZeroMemory(&nidW, sizeof(nidW));
45  nidW.hWnd = hMainWnd;
46  nidW.uID = 1;
49  nidW.uCallbackMessage = WM_USER+17;
50  ret = pShell_NotifyIconW(NIM_ADD, &nidW);
51  ok(ret, "NIM_ADD failed!\n");
52  /* using an invalid cbSize does work */
53  nidW.cbSize = 3;
54  nidW.hWnd = hMainWnd;
55  nidW.uID = 1;
56  ret = pShell_NotifyIconW(NIM_DELETE, &nidW);
57  ok( ret || broken(!ret), /* nt4 */ "NIM_DELETE failed!\n");
58  /* as icon doesn't exist anymore - now there will be an error */
59  nidW.cbSize = sizeof(nidW);
60  ok(!pShell_NotifyIconW(NIM_DELETE, &nidW) != !ret, "The icon was not deleted\n");
61  }
62 
63  /* same for Shell_NotifyIconA */
64  ZeroMemory(&nidA, sizeof(nidA));
66  nidA.hWnd = hMainWnd;
67  nidA.uID = 1;
70  nidA.uCallbackMessage = WM_USER+17;
71  ok(Shell_NotifyIconA(NIM_ADD, &nidA), "NIM_ADD failed!\n");
72 
73  /* using an invalid cbSize does work */
74  nidA.cbSize = 3;
75  nidA.hWnd = hMainWnd;
76  nidA.uID = 1;
78  ok(ret, "NIM_DELETE failed!\n");
79  /* as icon doesn't exist anymore - now there will be an error */
80  nidA.cbSize = sizeof(nidA);
81  ok(!Shell_NotifyIconA(NIM_DELETE, &nidA) != !ret, "The icon was not deleted\n");
82 }
83 
84 START_TEST(systray)
85 {
86  WNDCLASSA wc;
87  MSG msg;
88  RECT rc;
89  HMODULE hshell32;
90 
91  hshell32 = GetModuleHandleA("shell32.dll");
92  pShell_NotifyIconW = (void*)GetProcAddress(hshell32, "Shell_NotifyIconW");
93 
95  wc.cbClsExtra = 0;
96  wc.cbWndExtra = 0;
98  wc.hIcon = NULL;
101  wc.lpszMenuName = NULL;
102  wc.lpszClassName = "MyTestWnd";
104  RegisterClassA(&wc);
105 
106  hMainWnd = CreateWindowExA(0, "MyTestWnd", "Blah", WS_OVERLAPPEDWINDOW,
108  GetClientRect(hMainWnd, &rc);
110 
111  test_cbsize();
112 
113  PostQuitMessage(0);
114  while(GetMessageA(&msg,0,0,0)) {
117  }
119 }
#define NIF_MESSAGE
Definition: shellapi.h:102
BOOL WINAPI TranslateMessage(_In_ const MSG *)
LRESULT WINAPI DispatchMessageA(_In_ const MSG *)
#define NOTIFYICONDATAA_V1_SIZE
Definition: shellapi.h:284
TW_UINT32 TW_UINT16 TW_UINT16 MSG
Definition: twain.h:1827
BOOL WINAPI GetMessageA(_Out_ LPMSG, _In_opt_ HWND, _In_ UINT, _In_ UINT)
int cbClsExtra
Definition: winuser.h:3139
#define ZeroMemory
Definition: winbase.h:1642
#define CS_HREDRAW
Definition: winuser.h:648
LPCSTR lpszMenuName
Definition: winuser.h:3145
#define IDI_APPLICATION
Definition: winuser.h:699
HBRUSH hbrBackground
Definition: winuser.h:3144
BOOL WINAPI ShowWindow(_In_ HWND, _In_ int)
char * LPSTR
Definition: xmlstorage.h:182
BOOL WINAPI DestroyWindow(_In_ HWND)
#define COLOR_WINDOW
Definition: winuser.h:908
#define DWORD
Definition: nt_native.h:44
HICON WINAPI LoadIconA(_In_opt_ HINSTANCE, _In_ LPCSTR)
Definition: cursoricon.c:2029
#define IDC_IBEAM
Definition: winuser.h:683
static BOOL(WINAPI *pShell_NotifyIconW)(DWORD
int cbWndExtra
Definition: winuser.h:3140
UINT uCallbackMessage
Definition: shellapi.h:259
unsigned int BOOL
Definition: ntddk_ex.h:94
HCURSOR hCursor
Definition: winuser.h:3143
#define CW_USEDEFAULT
Definition: winuser.h:225
smooth NULL
Definition: ftsmooth.c:416
#define SW_SHOW
Definition: winuser.h:769
#define NIF_ICON
Definition: shellapi.h:103
START_TEST(systray)
Definition: systray.c:84
#define CS_VREDRAW
Definition: winuser.h:653
#define WINAPI
Definition: msvc.h:8
#define NIM_DELETE
Definition: shellapi.h:93
int ret
static HWND hMainWnd
Definition: systray.c:31
HMODULE WINAPI DECLSPEC_HOTPATCH GetModuleHandleA(LPCSTR lpModuleName)
Definition: loader.c:821
LRESULT WINAPI DefWindowProcA(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
LPCSTR lpszClassName
Definition: winuser.h:3146
#define NOTIFYICONDATAW_V1_SIZE
Definition: shellapi.h:285
#define WM_USER
Definition: winuser.h:1877
HCURSOR WINAPI LoadCursorA(_In_opt_ HINSTANCE, _In_ LPCSTR)
Definition: cursoricon.c:2059
#define broken(x)
Definition: _sntprintf.h:21
UINT uCallbackMessage
Definition: shellapi.h:229
UINT style
Definition: winuser.h:3137
BOOL WINAPI GetClientRect(_In_ HWND, _Out_ LPRECT)
HINSTANCE hInstance
Definition: winuser.h:3141
static void test_cbsize(void)
Definition: systray.c:34
#define ok(value,...)
Definition: atltest.h:57
BOOL WINAPI Shell_NotifyIconA(DWORD dwMessage, PNOTIFYICONDATAA pnid)
Definition: systray.cpp:31
WNDPROC lpfnWndProc
Definition: winuser.h:3138
#define NIM_ADD
Definition: shellapi.h:91
#define msg(x)
Definition: auth_time.c:54
HWND WINAPI CreateWindowExA(_In_ DWORD dwExStyle, _In_opt_ LPCSTR lpClassName, _In_opt_ LPCSTR lpWindowName, _In_ DWORD dwStyle, _In_ int X, _In_ int Y, _In_ int nWidth, _In_ int nHeight, _In_opt_ HWND hWndParent, _In_opt_ HMENU hMenu, _In_opt_ HINSTANCE hInstance, _In_opt_ LPVOID lpParam)
#define WS_OVERLAPPEDWINDOW
Definition: pedump.c:637
#define GetProcAddress(x, y)
Definition: compat.h:410
HBRUSH WINAPI GetSysColorBrush(_In_ int)
ATOM WINAPI RegisterClassA(_In_ CONST WNDCLASSA *)
__analysis_noreturn void WINAPI PostQuitMessage(_In_ int)
HICON hIcon
Definition: winuser.h:3142
static PNOTIFYICONDATAW
Definition: systray.c:32