2002-11-12 02:13:10 +01:00
|
|
|
/* File generated automatically from tools/winapi/test.dat; do not edit! */
|
|
|
|
/* This file can be copied, modified and distributed without restriction. */
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Unit tests for data structure packing
|
|
|
|
*/
|
|
|
|
|
|
|
|
#define WINVER 0x0501
|
|
|
|
#define _WIN32_IE 0x0501
|
|
|
|
#define _WIN32_WINNT 0x0501
|
|
|
|
|
|
|
|
#define WINE_NOWINSOCK
|
|
|
|
|
2003-09-06 01:08:26 +02:00
|
|
|
#include <stdarg.h>
|
2002-11-12 02:13:10 +01:00
|
|
|
#include "windef.h"
|
2003-09-06 01:08:26 +02:00
|
|
|
#include "winbase.h"
|
2002-11-12 02:13:10 +01:00
|
|
|
#include "urlmon.h"
|
|
|
|
|
|
|
|
#include "wine/test.h"
|
|
|
|
|
|
|
|
/***********************************************************************
|
|
|
|
* Compability macros
|
|
|
|
*/
|
|
|
|
|
|
|
|
#define DWORD_PTR UINT_PTR
|
|
|
|
#define LONG_PTR INT_PTR
|
|
|
|
#define ULONG_PTR UINT_PTR
|
|
|
|
|
|
|
|
/***********************************************************************
|
|
|
|
* Windows API extension
|
|
|
|
*/
|
|
|
|
|
2003-10-24 06:45:35 +02:00
|
|
|
#if defined(_MSC_VER) && (_MSC_VER >= 1300) && defined(__cplusplus)
|
2002-11-12 02:13:10 +01:00
|
|
|
# define FIELD_ALIGNMENT(type, field) __alignof(((type*)0)->field)
|
|
|
|
#elif defined(__GNUC__)
|
|
|
|
# define FIELD_ALIGNMENT(type, field) __alignof__(((type*)0)->field)
|
|
|
|
#else
|
|
|
|
/* FIXME: Not sure if is possible to do without compiler extension */
|
|
|
|
#endif
|
|
|
|
|
2003-10-24 06:45:35 +02:00
|
|
|
#if defined(_MSC_VER) && (_MSC_VER >= 1300) && defined(__cplusplus)
|
2002-11-12 02:13:10 +01:00
|
|
|
# define _TYPE_ALIGNMENT(type) __alignof(type)
|
|
|
|
#elif defined(__GNUC__)
|
|
|
|
# define _TYPE_ALIGNMENT(type) __alignof__(type)
|
|
|
|
#else
|
|
|
|
/*
|
|
|
|
* FIXME: Not sure if is possible to do without compiler extension
|
|
|
|
* (if type is not just a name that is, if so the normal)
|
|
|
|
* TYPE_ALIGNMENT can be used)
|
|
|
|
*/
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#if !defined(TYPE_ALIGNMENT) && defined(_TYPE_ALIGNMENT)
|
|
|
|
# define TYPE_ALIGNMENT _TYPE_ALIGNMENT
|
|
|
|
#endif
|
|
|
|
|
|
|
|
/***********************************************************************
|
|
|
|
* Test helper macros
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifdef FIELD_ALIGNMENT
|
|
|
|
# define TEST_FIELD_ALIGNMENT(type, field, align) \
|
|
|
|
ok(FIELD_ALIGNMENT(type, field) == align, \
|
2003-10-24 06:45:35 +02:00
|
|
|
"FIELD_ALIGNMENT(" #type ", " #field ") == %d (expected " #align ")\n", \
|
2002-11-12 02:13:10 +01:00
|
|
|
FIELD_ALIGNMENT(type, field))
|
|
|
|
#else
|
|
|
|
# define TEST_FIELD_ALIGNMENT(type, field, align) do { } while (0)
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#define TEST_FIELD_OFFSET(type, field, offset) \
|
|
|
|
ok(FIELD_OFFSET(type, field) == offset, \
|
2003-10-24 06:45:35 +02:00
|
|
|
"FIELD_OFFSET(" #type ", " #field ") == %ld (expected " #offset ")\n", \
|
2002-11-12 02:13:10 +01:00
|
|
|
FIELD_OFFSET(type, field))
|
|
|
|
|
|
|
|
#ifdef _TYPE_ALIGNMENT
|
|
|
|
#define TEST__TYPE_ALIGNMENT(type, align) \
|
2004-01-23 03:11:12 +01:00
|
|
|
ok(_TYPE_ALIGNMENT(type) == align, "TYPE_ALIGNMENT(" #type ") == %d (expected " #align ")\n", _TYPE_ALIGNMENT(type))
|
2002-11-12 02:13:10 +01:00
|
|
|
#else
|
|
|
|
# define TEST__TYPE_ALIGNMENT(type, align) do { } while (0)
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifdef TYPE_ALIGNMENT
|
|
|
|
#define TEST_TYPE_ALIGNMENT(type, align) \
|
2003-10-24 06:45:35 +02:00
|
|
|
ok(TYPE_ALIGNMENT(type) == align, "TYPE_ALIGNMENT(" #type ") == %d (expected " #align ")\n", TYPE_ALIGNMENT(type))
|
2002-11-12 02:13:10 +01:00
|
|
|
#else
|
|
|
|
# define TEST_TYPE_ALIGNMENT(type, align) do { } while (0)
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#define TEST_TYPE_SIZE(type, size) \
|
2003-10-24 06:45:35 +02:00
|
|
|
ok(sizeof(type) == size, "sizeof(" #type ") == %d (expected " #size ")\n", sizeof(type))
|
2002-11-12 02:13:10 +01:00
|
|
|
|
|
|
|
/***********************************************************************
|
|
|
|
* Test macros
|
|
|
|
*/
|
|
|
|
|
|
|
|
#define TEST_FIELD(type, field_type, field_name, field_offset, field_size, field_align) \
|
|
|
|
TEST_TYPE_SIZE(field_type, field_size); \
|
|
|
|
TEST_FIELD_ALIGNMENT(type, field_name, field_align); \
|
|
|
|
TEST_FIELD_OFFSET(type, field_name, field_offset); \
|
|
|
|
|
|
|
|
#define TEST_TYPE(type, size, align) \
|
|
|
|
TEST_TYPE_ALIGNMENT(type, align); \
|
|
|
|
TEST_TYPE_SIZE(type, size)
|
|
|
|
|
|
|
|
#define TEST_TYPE_POINTER(type, size, align) \
|
|
|
|
TEST__TYPE_ALIGNMENT(*(type)0, align); \
|
|
|
|
TEST_TYPE_SIZE(*(type)0, size)
|
|
|
|
|
|
|
|
#define TEST_TYPE_SIGNED(type) \
|
2003-10-24 06:45:35 +02:00
|
|
|
ok((type) -1 < 0, "(" #type ") -1 < 0\n");
|
2002-11-12 02:13:10 +01:00
|
|
|
|
|
|
|
#define TEST_TYPE_UNSIGNED(type) \
|
2003-10-24 06:45:35 +02:00
|
|
|
ok((type) -1 > 0, "(" #type ") -1 > 0\n");
|
2002-11-12 02:13:10 +01:00
|
|
|
|
|
|
|
static void test_pack_BINDINFO(void)
|
|
|
|
{
|
|
|
|
/* BINDINFO (pack 4) */
|
|
|
|
TEST_FIELD(BINDINFO, ULONG, cbSize, 0, 4, 4);
|
|
|
|
TEST_FIELD(BINDINFO, LPWSTR, szExtraInfo, 4, 4, 4);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void test_pack_IBindHost(void)
|
|
|
|
{
|
|
|
|
/* IBindHost */
|
|
|
|
}
|
|
|
|
|
|
|
|
static void test_pack_IBindStatusCallback(void)
|
|
|
|
{
|
|
|
|
/* IBindStatusCallback */
|
|
|
|
}
|
|
|
|
|
|
|
|
static void test_pack_IBinding(void)
|
|
|
|
{
|
|
|
|
/* IBinding */
|
|
|
|
}
|
|
|
|
|
|
|
|
static void test_pack_IWinInetHttpInfo(void)
|
|
|
|
{
|
|
|
|
/* IWinInetHttpInfo */
|
|
|
|
}
|
|
|
|
|
|
|
|
static void test_pack_IWinInetInfo(void)
|
|
|
|
{
|
|
|
|
/* IWinInetInfo */
|
|
|
|
}
|
|
|
|
|
|
|
|
static void test_pack(void)
|
|
|
|
{
|
|
|
|
test_pack_BINDINFO();
|
|
|
|
test_pack_IBindHost();
|
|
|
|
test_pack_IBindStatusCallback();
|
|
|
|
test_pack_IBinding();
|
|
|
|
test_pack_IWinInetHttpInfo();
|
|
|
|
test_pack_IWinInetInfo();
|
|
|
|
}
|
|
|
|
|
|
|
|
START_TEST(generated)
|
|
|
|
{
|
|
|
|
test_pack();
|
|
|
|
}
|