ReactOS 0.4.15-dev-7924-g5949c20
htmllocation.c File Reference
#include "precomp.h"
Include dependency graph for htmllocation.c:

Go to the source code of this file.

Classes

struct  location_test
 

Functions

static int str_eq_wa (LPCWSTR strw, const char *stra)
 
static void test_href (IHTMLLocation *loc, const struct location_test *test)
 
static void test_protocol (IHTMLLocation *loc, const struct location_test *test)
 
static void test_host (IHTMLLocation *loc, const struct location_test *test)
 
static void test_hostname (IHTMLLocation *loc, IHTMLDocument2 *doc, const struct location_test *test)
 
static void test_port (IHTMLLocation *loc, const struct location_test *test)
 
static void test_pathname (IHTMLLocation *loc, const struct location_test *test)
 
static void test_search (IHTMLLocation *loc, const struct location_test *test)
 
static void test_hash (IHTMLLocation *loc, const struct location_test *test)
 
static void perform_test (const struct location_test *test)
 
 START_TEST (htmllocation)
 

Variables

static const struct location_test location_tests []
 

Function Documentation

◆ perform_test()

static void perform_test ( const struct location_test test)
static

Definition at line 275 of file htmllocation.c.

276{
279 IBindCtx *bc;
280 IMoniker *url_mon;
281 IPersistMoniker *persist_mon;
282 IHTMLDocument2 *doc;
283 IHTMLDocument6 *doc6;
284 IHTMLLocation *location;
285
286 hres = CreateBindCtx(0, &bc);
287 ok(hres == S_OK, "%s: CreateBindCtx failed: 0x%08x\n", test->name, hres);
288 if(FAILED(hres))
289 return;
290
291 MultiByteToWideChar(CP_ACP, 0, test->url, -1, url, sizeof(url)/sizeof(WCHAR));
292 hres = CreateURLMoniker(NULL, url, &url_mon);
293 ok(hres == S_OK, "%s: CreateURLMoniker failed: 0x%08x\n", test->name, hres);
294 if(FAILED(hres)){
295 IBindCtx_Release(bc);
296 return;
297 }
298
299 hres = CoCreateInstance(&CLSID_HTMLDocument, NULL,
300 CLSCTX_INPROC_SERVER | CLSCTX_INPROC_HANDLER, &IID_IHTMLDocument2,
301 (void**)&doc);
302 ok(hres == S_OK, "%s: CoCreateInstance failed: 0x%08x\n", test->name, hres);
303 if(FAILED(hres)){
304 IMoniker_Release(url_mon);
305 IBindCtx_Release(bc);
306 return;
307 }
308
309 hres = IHTMLDocument2_QueryInterface(doc, &IID_IHTMLDocument6, (void**)&doc6);
310 if(hres == S_OK){
311 IHTMLDocument6_Release(doc6);
312 }else{
313 win_skip("%s: Could not get IHTMLDocument6, probably too old IE. Requires IE 8+\n", test->name);
314 IMoniker_Release(url_mon);
315 IBindCtx_Release(bc);
316 return;
317 }
318
319 hres = IHTMLDocument2_QueryInterface(doc, &IID_IPersistMoniker,
320 (void**)&persist_mon);
321 ok(hres == S_OK, "%s: IHTMlDocument2_QueryInterface failed: 0x%08x\n", test->name, hres);
322 if(FAILED(hres)){
323 IHTMLDocument2_Release(doc);
324 IMoniker_Release(url_mon);
325 IBindCtx_Release(bc);
326 return;
327 }
328
329 hres = IPersistMoniker_Load(persist_mon, FALSE, url_mon, bc,
331 ok(hres == S_OK, "%s: IPersistMoniker_Load failed: 0x%08x\n", test->name, hres);
332 if(FAILED(hres)){
333 IPersistMoniker_Release(persist_mon);
334 IHTMLDocument2_Release(doc);
335 IMoniker_Release(url_mon);
336 IBindCtx_Release(bc);
337 return;
338 }
339
340 hres = IHTMLDocument2_get_location(doc, &location);
341 ok(hres == S_OK, "%s: IHTMLDocument2_get_location failed: 0x%08x\n", test->name, hres);
342 if(FAILED(hres)){
343 IPersistMoniker_Release(persist_mon);
344 IHTMLDocument2_Release(doc);
345 IMoniker_Release(url_mon);
346 IBindCtx_Release(bc);
347 return;
348 }
349
358
359 IHTMLLocation_Release(location);
360 IPersistMoniker_Release(persist_mon);
361 IHTMLDocument2_Release(doc);
362 IMoniker_Release(url_mon);
363 IBindCtx_Release(bc);
364}
#define ok(value,...)
Definition: atltest.h:57
PBATCH_CONTEXT bc
Definition: batch.c:67
#define NULL
Definition: types.h:112
#define FALSE
Definition: types.h:117
#define CP_ACP
Definition: compat.h:109
#define MultiByteToWideChar
Definition: compat.h:110
HRESULT WINAPI DECLSPEC_HOTPATCH CoCreateInstance(REFCLSID rclsid, LPUNKNOWN pUnkOuter, DWORD dwClsContext, REFIID iid, LPVOID *ppv)
Definition: compobj.c:3325
#define INTERNET_MAX_URL_LENGTH
Definition: session.c:1418
#define S_OK
Definition: intsafe.h:52
#define FAILED(hr)
Definition: intsafe.h:51
#define location(file, line)
Definition: kmtest.h:18
static const WCHAR url[]
Definition: encode.c:1432
HRESULT hres
Definition: protocol.c:465
static enum @1664 test_protocol
static void test_hostname(IHTMLLocation *loc, IHTMLDocument2 *doc, const struct location_test *test)
Definition: htmllocation.c:172
static void test_pathname(IHTMLLocation *loc, const struct location_test *test)
Definition: htmllocation.c:218
static void test_host(IHTMLLocation *loc, const struct location_test *test)
Definition: htmllocation.c:153
static void test_port(IHTMLLocation *loc, const struct location_test *test)
Definition: htmllocation.c:199
static void test_hash(IHTMLLocation *loc, const struct location_test *test)
Definition: htmllocation.c:256
static void test_search(IHTMLLocation *loc, const struct location_test *test)
Definition: htmllocation.c:237
static void test_href(IHTMLLocation *loc, const struct location_test *test)
Definition: htmllocation.c:109
#define STGM_READWRITE
Definition: objbase.h:919
#define STGM_SHARE_EXCLUSIVE
Definition: objbase.h:923
HRESULT WINAPI CreateBindCtx(DWORD reserved, LPBC *ppbc)
Definition: bindctx.c:556
#define test
Definition: rosglue.h:37
#define win_skip
Definition: test.h:160
char * name
Definition: compiler.c:66
HRESULT WINAPI CreateURLMoniker(IMoniker *pmkContext, LPCWSTR szURL, IMoniker **ppmk)
Definition: umon.c:732
__wchar_t WCHAR
Definition: xmlstorage.h:180

Referenced by START_TEST().

◆ START_TEST()

START_TEST ( htmllocation  )

Definition at line 366 of file htmllocation.c.

367{
368 int i;
369
371
372 for(i=0; i < sizeof(location_tests)/sizeof(*location_tests); i++)
374
376}
HRESULT WINAPI CoInitialize(LPVOID lpReserved)
Definition: compobj.c:1964
void WINAPI DECLSPEC_HOTPATCH CoUninitialize(void)
Definition: compobj.c:2067
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
static void perform_test(const struct location_test *test)
Definition: htmllocation.c:275
static const struct location_test location_tests[]
Definition: htmllocation.c:35

◆ str_eq_wa()

static int str_eq_wa ( LPCWSTR  strw,
const char stra 
)
static

Definition at line 98 of file htmllocation.c.

99{
100 CHAR buf[512];
101
102 if(!strw || !stra)
103 return (void*)strw == (void*)stra;
104
105 WideCharToMultiByte(CP_ACP, 0, strw, -1, buf, sizeof(buf), NULL, NULL);
106 return !lstrcmpA(stra, buf);
107}
#define WideCharToMultiByte
Definition: compat.h:111
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
int WINAPI lstrcmpA(LPCSTR lpString1, LPCSTR lpString2)
Definition: lstring.c:18
static const char * strw(LPCWSTR x)
Definition: actctx.c:49
char CHAR
Definition: xmlstorage.h:175

Referenced by test_hash(), test_host(), test_hostname(), test_href(), test_pathname(), test_port(), test_protocol(), and test_search().

◆ test_hash()

static void test_hash ( IHTMLLocation *  loc,
const struct location_test test 
)
static

Definition at line 256 of file htmllocation.c.

257{
259 BSTR str;
260
261 hres = IHTMLLocation_get_hash(loc, NULL);
262 ok(hres == E_POINTER,
263 "%s: get_hash should have failed with E_POINTER (0x%08x), was: 0x%08x\n",
265
266 hres = IHTMLLocation_get_hash(loc, &str);
267 ok(hres == S_OK, "%s: get_hash failed: 0x%08x\n", test->name, hres);
268 if(hres == S_OK)
269 ok(str_eq_wa(str, test->hash),
270 "%s: expected retrieved hash to be L\"%s\", was: %s\n",
271 test->name, test->hash, wine_dbgstr_w(str));
273}
OLECHAR * BSTR
Definition: compat.h:2293
#define wine_dbgstr_w
Definition: kernel32.h:34
static int str_eq_wa(LPCWSTR strw, const char *stra)
Definition: htmllocation.c:98
void WINAPI DECLSPEC_HOTPATCH SysFreeString(BSTR str)
Definition: oleaut.c:271
const WCHAR * str
#define E_POINTER
Definition: winerror.h:2365

Referenced by perform_test().

◆ test_host()

static void test_host ( IHTMLLocation *  loc,
const struct location_test test 
)
static

Definition at line 153 of file htmllocation.c.

154{
156 BSTR str;
157
158 hres = IHTMLLocation_get_host(loc, NULL);
159 ok(hres == E_POINTER,
160 "%s: get_host should have failed with E_POINTER (0x%08x), was: 0x%08x\n",
162
163 hres = IHTMLLocation_get_host(loc, &str);
164 ok(hres == S_OK, "%s: get_host failed: 0x%08x\n", test->name, hres);
165 if(hres == S_OK)
166 ok(str_eq_wa(str, test->host),
167 "%s: expected retrieved host to be L\"%s\", was: %s\n",
168 test->name, test->host, wine_dbgstr_w(str));
170}

Referenced by perform_test().

◆ test_hostname()

static void test_hostname ( IHTMLLocation *  loc,
IHTMLDocument2 *  doc,
const struct location_test test 
)
static

Definition at line 172 of file htmllocation.c.

173{
175 BSTR str;
176
177 hres = IHTMLLocation_get_hostname(loc, NULL);
178 ok(hres == E_POINTER,
179 "%s: get_hostname should have failed with E_POINTER (0x%08x), was: 0x%08x\n",
181
182 hres = IHTMLLocation_get_hostname(loc, &str);
183 ok(hres == S_OK, "%s: get_hostname failed: 0x%08x\n", test->name, hres);
184 if(hres == S_OK)
185 ok(str_eq_wa(str, test->hostname),
186 "%s: expected retrieved hostname to be L\"%s\", was: %s\n",
187 test->name, test->hostname, wine_dbgstr_w(str));
189
190 hres = IHTMLDocument2_get_domain(doc, &str);
191 ok(hres == S_OK, "%s: get_domain failed: 0x%08x\n", test->name, hres);
192 if(hres == S_OK)
193 ok(str_eq_wa(str, test->hostname ? test->hostname : ""),
194 "%s: expected retrieved domain to be L\"%s\", was: %s\n",
195 test->name, test->hostname, wine_dbgstr_w(str));
197}

Referenced by perform_test().

◆ test_href()

static void test_href ( IHTMLLocation *  loc,
const struct location_test test 
)
static

Definition at line 109 of file htmllocation.c.

110{
112 BSTR str;
113
114 hres = IHTMLLocation_get_href(loc, NULL);
115 ok(hres == E_POINTER,
116 "%s: get_href should have failed with E_POINTER (0x%08x), was: 0x%08x\n",
118
119 hres = IHTMLLocation_get_href(loc, &str);
120 ok(hres == S_OK, "%s: get_href failed: 0x%08x\n", test->name, hres);
121 if(hres == S_OK)
122 ok(str_eq_wa(str, test->href),
123 "%s: expected retrieved href to be L\"%s\", was: %s\n",
124 test->name, test->href, wine_dbgstr_w(str));
126
127 hres = IHTMLLocation_toString(loc, &str);
128 ok(hres == S_OK, "%s: toString failed: 0x%08x\n", test->name, hres);
129 ok(str_eq_wa(str, test->href), "%s: toString returned %s, expected %s\n",
130 test->name, wine_dbgstr_w(str), test->href);
132}

Referenced by perform_test().

◆ test_pathname()

static void test_pathname ( IHTMLLocation *  loc,
const struct location_test test 
)
static

Definition at line 218 of file htmllocation.c.

219{
221 BSTR str;
222
223 hres = IHTMLLocation_get_pathname(loc, NULL);
224 ok(hres == E_POINTER,
225 "%s: get_pathname should have failed with E_POINTER (0x%08x), was: 0x%08x\n",
227
228 hres = IHTMLLocation_get_pathname(loc, &str);
229 ok(hres == S_OK, "%s: get_pathname failed: 0x%08x\n", test->name, hres);
230 if(hres == S_OK)
231 ok(str_eq_wa(str, test->pathname),
232 "%s: expected retrieved pathname to be L\"%s\", was: %s\n",
233 test->name, test->pathname, wine_dbgstr_w(str));
235}

Referenced by perform_test().

◆ test_port()

static void test_port ( IHTMLLocation *  loc,
const struct location_test test 
)
static

Definition at line 199 of file htmllocation.c.

200{
202 BSTR str;
203
204 hres = IHTMLLocation_get_port(loc, NULL);
205 ok(hres == E_POINTER,
206 "%s: get_port should have failed with E_POINTER (0x%08x), was: 0x%08x\n",
208
209 hres = IHTMLLocation_get_port(loc, &str);
210 ok(hres == S_OK, "%s: get_port failed: 0x%08x\n", test->name, hres);
211 if(hres == S_OK)
212 ok(str_eq_wa(str, test->port),
213 "%s: expected retrieved port to be L\"%s\", was: %s\n",
214 test->name, test->port, wine_dbgstr_w(str));
216}

Referenced by perform_test().

◆ test_protocol()

static void test_protocol ( IHTMLLocation *  loc,
const struct location_test test 
)
static

Definition at line 134 of file htmllocation.c.

135{
137 BSTR str;
138
139 hres = IHTMLLocation_get_protocol(loc, NULL);
140 ok(hres == E_POINTER,
141 "%s: get_protocol should have failed with E_POINTER (0x%08x), was: 0x%08x\n",
143
144 hres = IHTMLLocation_get_protocol(loc, &str);
145 ok(hres == S_OK, "%s: get_protocol failed: 0x%08x\n", test->name, hres);
146 if(hres == S_OK)
147 ok(str_eq_wa(str, test->protocol),
148 "%s: expected retrieved protocol to be L\"%s\", was: %s\n",
149 test->name, test->protocol, wine_dbgstr_w(str));
151}

◆ test_search()

static void test_search ( IHTMLLocation *  loc,
const struct location_test test 
)
static

Definition at line 237 of file htmllocation.c.

238{
240 BSTR str;
241
242 hres = IHTMLLocation_get_search(loc, NULL);
243 ok(hres == E_POINTER,
244 "%s: get_search should have failed with E_POINTER (0x%08x), was: 0x%08x\n",
246
247 hres = IHTMLLocation_get_search(loc, &str);
248 ok(hres == S_OK, "%s: get_search failed: 0x%08x\n", test->name, hres);
249 if(hres == S_OK)
250 ok(str_eq_wa(str, test->search),
251 "%s: expected retrieved search to be L\"%s\", was: %s\n",
252 test->name, test->search, wine_dbgstr_w(str));
254}

Referenced by perform_test().

Variable Documentation

◆ location_tests

const struct location_test location_tests[]
static

Definition at line 35 of file htmllocation.c.

Referenced by START_TEST().