ole32: Add tests for generic composite monikers.

This commit is contained in:
Robert Shearman 2006-05-08 12:41:18 +01:00 committed by Alexandre Julliard
parent caefc34084
commit b011a2ba8f
1 changed files with 124 additions and 16 deletions

View File

@ -22,6 +22,7 @@
#define COBJMACROS #define COBJMACROS
#include <stdarg.h> #include <stdarg.h>
#include <stdio.h>
#include "windef.h" #include "windef.h"
#include "winbase.h" #include "winbase.h"
@ -242,6 +243,58 @@ static const BYTE expected_anti_moniker_comparison_data[] =
0x01,0x00,0x00,0x00, 0x01,0x00,0x00,0x00,
}; };
static const BYTE expected_gc_moniker_marshal_data[] =
{
0x4d,0x45,0x4f,0x57,0x04,0x00,0x00,0x00,
0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x46,
0x09,0x03,0x00,0x00,0x00,0x00,0x00,0x00,
0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x46,
0x00,0x00,0x00,0x00,0x2c,0x01,0x00,0x00,
0x4d,0x45,0x4f,0x57,0x04,0x00,0x00,0x00,
0x0f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x46,
0x04,0x03,0x00,0x00,0x00,0x00,0x00,0x00,
0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x46,
0x00,0x00,0x00,0x00,0x36,0x00,0x00,0x00,
0x02,0x00,0x00,0x00,0x21,0x00,0x05,0x00,
0x00,0x00,0x54,0x65,0x73,0x74,0x00,0x4d,
0x45,0x4f,0x57,0x04,0x00,0x00,0x00,0x0f,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
0x00,0x00,0x00,0x00,0x00,0x00,0x46,0x04,
0x03,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,
0x00,0x00,0x00,0x00,0x00,0x00,0x46,0x00,
0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x02,
0x00,0x00,0x00,0x23,0x00,0x05,0x00,0x00,
0x00,0x57,0x69,0x6e,0x65,0x00,
};
static const BYTE expected_gc_moniker_saved_data[] =
{
0x02,0x00,0x00,0x00,0x04,0x03,0x00,0x00,
0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
0x00,0x00,0x00,0x46,0x02,0x00,0x00,0x00,
0x21,0x00,0x05,0x00,0x00,0x00,0x54,0x65,
0x73,0x74,0x00,0x04,0x03,0x00,0x00,0x00,
0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x00,
0x00,0x00,0x46,0x02,0x00,0x00,0x00,0x23,
0x00,0x05,0x00,0x00,0x00,0x57,0x69,0x6e,
0x65,0x00,
};
static const BYTE expected_gc_moniker_comparison_data[] =
{
0x09,0x03,0x00,0x00,0x00,0x00,0x00,0x00,
0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x46,
0x04,0x03,0x00,0x00,0x00,0x00,0x00,0x00,
0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x46,
0x21,0x00,0x54,0x00,0x45,0x00,0x53,0x00,
0x54,0x00,0x00,0x00,0x04,0x03,0x00,0x00,
0x00,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,
0x00,0x00,0x00,0x46,0x23,0x00,0x57,0x00,
0x49,0x00,0x4e,0x00,0x45,0x00,0x00,0x00,
};
static void test_moniker( static void test_moniker(
const char *testname, IMoniker *moniker, const char *testname, IMoniker *moniker,
const BYTE *expected_moniker_marshal_data, size_t sizeof_expected_moniker_marshal_data, const BYTE *expected_moniker_marshal_data, size_t sizeof_expected_moniker_marshal_data,
@ -288,11 +341,11 @@ static void test_moniker(
{ {
for (i = 0; i < moniker_size; i++) for (i = 0; i < moniker_size; i++)
{ {
if (i % 8 == 0) trace(" "); if (i % 8 == 0) printf(" ");
trace("0x%02x,", buffer[i]); printf("0x%02x,", buffer[i]);
if (i % 8 == 7) trace("\n"); if (i % 8 == 7) printf("\n");
} }
trace("\n"); printf("\n");
} }
IROTData_Release(rotdata); IROTData_Release(rotdata);
@ -331,11 +384,11 @@ static void test_moniker(
{ {
for (i = 0; i < moniker_size; i++) for (i = 0; i < moniker_size; i++)
{ {
if (i % 8 == 0) trace(" "); if (i % 8 == 0) printf(" ");
trace("0x%02x,", moniker_data[i]); printf("0x%02x,", moniker_data[i]);
if (i % 8 == 7) trace("\n"); if (i % 8 == 7) printf("\n");
} }
trace("\n"); printf("\n");
} }
GlobalUnlock(hglobal); GlobalUnlock(hglobal);
@ -363,6 +416,8 @@ static void test_moniker(
testname, sizeof_expected_moniker_marshal_data, moniker_size); testname, sizeof_expected_moniker_marshal_data, moniker_size);
/* then do a byte-by-byte comparison */ /* then do a byte-by-byte comparison */
if (expected_moniker_marshal_data)
{
for (i = 0; i < min(moniker_size, sizeof_expected_moniker_marshal_data); i++) for (i = 0; i < min(moniker_size, sizeof_expected_moniker_marshal_data); i++)
{ {
if (expected_moniker_marshal_data[i] != moniker_data[i]) if (expected_moniker_marshal_data[i] != moniker_data[i])
@ -371,17 +426,18 @@ static void test_moniker(
break; break;
} }
} }
}
ok(same, "%s: Marshaled data differs\n", testname); ok(same, "%s: Marshaled data differs\n", testname);
if (!same) if (!same)
{ {
for (i = 0; i < moniker_size; i++) for (i = 0; i < moniker_size; i++)
{ {
if (i % 8 == 0) trace(" "); if (i % 8 == 0) printf(" ");
trace("0x%02x,", moniker_data[i]); printf("0x%02x,", moniker_data[i]);
if (i % 8 == 7) trace("\n"); if (i % 8 == 7) printf("\n");
} }
trace("\n"); printf("\n");
} }
GlobalUnlock(hglobal); GlobalUnlock(hglobal);
@ -569,6 +625,57 @@ static void test_anti_moniker(void)
IMoniker_Release(moniker); IMoniker_Release(moniker);
} }
static void test_generic_composite_moniker(void)
{
HRESULT hr;
IMoniker *moniker;
IMoniker *moniker1;
IMoniker *moniker2;
DWORD moniker_type;
DWORD hash;
static const WCHAR wszDelimeter1[] = {'!',0};
static const WCHAR wszObjectName1[] = {'T','e','s','t',0};
static const WCHAR wszDelimeter2[] = {'#',0};
static const WCHAR wszObjectName2[] = {'W','i','n','e',0};
hr = CreateItemMoniker(wszDelimeter1, wszObjectName1, &moniker1);
ok_ole_success(hr, CreateItemMoniker);
hr = CreateItemMoniker(wszDelimeter2, wszObjectName2, &moniker2);
ok_ole_success(hr, CreateItemMoniker);
hr = CreateGenericComposite(moniker1, moniker2, &moniker);
ok_ole_success(hr, CreateGenericComposite);
/* FIXME: marshal data test commented out as the written custom marshal
* size in the OBJREF header doesn't match in ours and native don't match,
* probably due to a bug in Microsoft's implementation. */
test_moniker("generic composite moniker", moniker,
NULL /*expected_gc_moniker_marshal_data*/, sizeof(expected_gc_moniker_marshal_data),
expected_gc_moniker_saved_data, sizeof(expected_gc_moniker_saved_data),
expected_gc_moniker_comparison_data, sizeof(expected_gc_moniker_comparison_data));
/* Hashing */
hr = IMoniker_Hash(moniker, &hash);
ok_ole_success(hr, IMoniker_Hash);
todo_wine {
ok(hash == 0xd87,
"Hash value != 0xd87, instead was 0x%08lx\n",
hash);
}
/* IsSystemMoniker test */
hr = IMoniker_IsSystemMoniker(moniker, &moniker_type);
ok_ole_success(hr, IMoniker_IsSystemMoniker);
ok(moniker_type == MKSYS_GENERICCOMPOSITE,
"dwMkSys != MKSYS_GENERICCOMPOSITE, instead was 0x%08lx",
moniker_type);
IMoniker_Release(moniker);
}
START_TEST(moniker) START_TEST(moniker)
{ {
CoInitializeEx(NULL, COINIT_APARTMENTTHREADED); CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
@ -578,6 +685,7 @@ START_TEST(moniker)
test_file_monikers(); test_file_monikers();
test_item_moniker(); test_item_moniker();
test_anti_moniker(); test_anti_moniker();
test_generic_composite_moniker();
/* FIXME: test moniker creation funcs and parsing other moniker formats */ /* FIXME: test moniker creation funcs and parsing other moniker formats */