2 * Unit tests for misc shdocvw functions
4 * Copyright 2008 Detlef Riekenberg
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
29 #include "wine/test.h"
31 /* ################ */
33 static HMODULE hshdocvw
;
34 static HRESULT (WINAPI
*pURLSubRegQueryA
)(LPCSTR
, LPCSTR
, DWORD
, LPVOID
, DWORD
, DWORD
);
36 static CHAR appdata
[] = "AppData";
37 static CHAR common_appdata
[] = "Common AppData";
38 static CHAR default_page_url
[] = "Default_Page_URL";
39 static CHAR does_not_exist
[] = "does_not_exist";
40 static CHAR regpath_iemain
[] = "Software\\Microsoft\\Internet Explorer\\Main";
41 static CHAR regpath_shellfolders
[] = "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders";
42 static CHAR start_page
[] = "Start Page";
44 /* ################ */
46 static void init_functions(void)
48 hshdocvw
= LoadLibraryA("shdocvw.dll");
49 pURLSubRegQueryA
= (void *) GetProcAddress(hshdocvw
, (LPSTR
) 151);
52 /* ################ */
54 static void test_URLSubRegQueryA(void)
56 CHAR buffer
[INTERNET_MAX_URL_LENGTH
];
61 if (!pURLSubRegQueryA
) {
62 skip("URLSubRegQueryA not found\n");
66 memset(buffer
, '#', sizeof(buffer
)-2);
67 buffer
[sizeof(buffer
)-1] = '\0';
68 /* called by inetcpl.cpl */
69 hr
= pURLSubRegQueryA(regpath_iemain
, default_page_url
, REG_SZ
, buffer
, INTERNET_MAX_URL_LENGTH
, -1);
70 ok(hr
== E_FAIL
|| hr
== S_OK
, "got 0x%x (expected E_FAIL or S_OK)\n", hr
);
72 memset(buffer
, '#', sizeof(buffer
)-2);
73 buffer
[sizeof(buffer
)-1] = '\0';
74 /* called by inetcpl.cpl */
75 hr
= pURLSubRegQueryA(regpath_iemain
, start_page
, REG_SZ
, buffer
, INTERNET_MAX_URL_LENGTH
, -1);
76 len
= lstrlenA(buffer
);
77 /* respect privacy: do not dump the url */
78 ok(hr
== S_OK
, "got 0x%x and %d (expected S_OK)\n", hr
, len
);
80 /* test buffer length: just large enough */
81 memset(buffer
, '#', sizeof(buffer
)-2);
82 buffer
[sizeof(buffer
)-1] = '\0';
83 hr
= pURLSubRegQueryA(regpath_iemain
, start_page
, REG_SZ
, buffer
, len
+1, -1);
84 used
= lstrlenA(buffer
);
85 /* respect privacy: do not dump the url */
86 ok((hr
== S_OK
) && (used
== len
),
87 "got 0x%x and %d (expected S_OK and %d)\n", hr
, used
, len
);
89 /* no space for terminating 0: result is truncated */
90 memset(buffer
, '#', sizeof(buffer
)-2);
91 buffer
[sizeof(buffer
)-1] = '\0';
92 hr
= pURLSubRegQueryA(regpath_iemain
, start_page
, REG_SZ
, buffer
, len
, -1);
93 used
= lstrlenA(buffer
);
94 ok((hr
== S_OK
) && (used
== len
- 1),
95 "got 0x%x and %d (expected S_OK and %d)\n", hr
, used
, len
- 1);
97 /* no space for the complete result: truncate another char */
99 memset(buffer
, '#', sizeof(buffer
)-2);
100 buffer
[sizeof(buffer
)-1] = '\0';
101 hr
= pURLSubRegQueryA(regpath_iemain
, start_page
, REG_SZ
, buffer
, len
-1, -1);
102 used
= lstrlenA(buffer
);
103 ok((hr
== S_OK
) && (used
== (len
- 2)),
104 "got 0x%x and %d (expected S_OK and %d)\n", hr
, used
, len
- 2);
107 /* only space for the terminating 0: function still succeded */
108 memset(buffer
, '#', sizeof(buffer
)-2);
109 buffer
[sizeof(buffer
)-1] = '\0';
110 hr
= pURLSubRegQueryA(regpath_iemain
, start_page
, REG_SZ
, buffer
, 1, -1);
111 used
= lstrlenA(buffer
);
112 ok((hr
== S_OK
) && !used
,
113 "got 0x%x and %d (expected S_OK and 0)\n", hr
, used
);
115 /* size of buffer is 0, but the function still succeed */
116 memset(buffer
, '#', sizeof(buffer
)-2);
117 buffer
[sizeof(buffer
)-1] = '\0';
118 hr
= pURLSubRegQueryA(regpath_iemain
, start_page
, REG_SZ
, buffer
, 0, -1);
119 used
= lstrlenA(buffer
);
120 ok((hr
== S_OK
) && (used
== INTERNET_MAX_URL_LENGTH
- 1),
121 "got 0x%x and %d (expected S_OK and %d)\n", hr
, used
, INTERNET_MAX_URL_LENGTH
-1);
123 /* still succeed without a buffer for the result */
124 hr
= pURLSubRegQueryA(regpath_iemain
, start_page
, REG_SZ
, NULL
, 0, -1);
125 ok(hr
== S_OK
, "got 0x%x (expected S_OK)\n", hr
);
127 /* still succeed, when a length is given without a buffer */
128 hr
= pURLSubRegQueryA(regpath_iemain
, start_page
, REG_SZ
, NULL
, INTERNET_MAX_URL_LENGTH
, -1);
129 ok(hr
== S_OK
, "got 0x%x (expected S_OK)\n", hr
);
131 /* this value does not exist */
132 memset(buffer
, '#', sizeof(buffer
)-2);
133 buffer
[sizeof(buffer
)-1] = '\0';
134 hr
= pURLSubRegQueryA(regpath_iemain
, does_not_exist
, REG_SZ
, buffer
, INTERNET_MAX_URL_LENGTH
, -1);
135 /* random bytes are copied to the buffer */
136 ok((hr
== E_FAIL
), "got 0x%x (expected E_FAIL)\n", hr
);
138 /* the third parameter is ignored. Is it really a type? (data is REG_SZ) */
139 memset(buffer
, '#', sizeof(buffer
)-2);
140 buffer
[sizeof(buffer
)-1] = '\0';
141 hr
= pURLSubRegQueryA(regpath_iemain
, start_page
, REG_DWORD
, buffer
, INTERNET_MAX_URL_LENGTH
, -1);
142 used
= lstrlenA(buffer
);
143 ok((hr
== S_OK
) && (used
== len
),
144 "got 0x%x and %d (expected S_OK and %d)\n", hr
, used
, len
);
146 /* the function works for HKCU and HKLM */
147 memset(buffer
, '#', sizeof(buffer
)-2);
148 buffer
[sizeof(buffer
)-1] = '\0';
149 hr
= pURLSubRegQueryA(regpath_shellfolders
, appdata
, REG_SZ
, buffer
, INTERNET_MAX_URL_LENGTH
, -1);
150 used
= lstrlenA(buffer
);
151 ok(hr
== S_OK
, "got 0x%x and %d (expected S_OK)\n", hr
, used
);
153 memset(buffer
, '#', sizeof(buffer
)-2);
154 buffer
[sizeof(buffer
)-1] = '\0';
155 hr
= pURLSubRegQueryA(regpath_shellfolders
, common_appdata
, REG_SZ
, buffer
, INTERNET_MAX_URL_LENGTH
, -1);
156 used
= lstrlenA(buffer
);
157 ok(hr
== S_OK
, "got 0x%x and %d (expected S_OK)\n", hr
, used
);
159 /* todo: what does the last parameter mean? */
162 /* ################ */
167 test_URLSubRegQueryA();