mirror of
git://source.winehq.org/git/wine.git
synced 2024-10-14 23:27:17 +00:00
tests: Make wine_dbgstr_w available in test.h for all tests.
This commit is contained in:
parent
83172ecc82
commit
ee868cce5b
|
@ -54,23 +54,6 @@
|
||||||
wine_dbgstr_w(expected), wine_dbgstr_w(value)); \
|
wine_dbgstr_w(expected), wine_dbgstr_w(value)); \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
/* A simpler version of wine_dbgstr_w. Note that the returned buffer will be
|
|
||||||
* invalid after 16 calls to this funciton. */
|
|
||||||
static const char *wine_dbgstr_w(LPCWSTR wstr)
|
|
||||||
{
|
|
||||||
static char *buffers[16];
|
|
||||||
static int curr_buffer = 0;
|
|
||||||
|
|
||||||
int size;
|
|
||||||
|
|
||||||
curr_buffer = (curr_buffer + 1) % 16;
|
|
||||||
HeapFree(GetProcessHeap(), 0, buffers[curr_buffer]);
|
|
||||||
size = WideCharToMultiByte(CP_ACP, 0, wstr, -1, NULL, 0, NULL, NULL);
|
|
||||||
buffers[curr_buffer] = HeapAlloc(GetProcessHeap(), 0, size);
|
|
||||||
size = WideCharToMultiByte(CP_ACP, 0, wstr, -1, buffers[curr_buffer], size, NULL, NULL);
|
|
||||||
return buffers[curr_buffer];
|
|
||||||
}
|
|
||||||
|
|
||||||
static HINSTANCE hkernel32;
|
static HINSTANCE hkernel32;
|
||||||
static LPVOID (WINAPI *pVirtualAllocEx)(HANDLE, LPVOID, SIZE_T, DWORD, DWORD);
|
static LPVOID (WINAPI *pVirtualAllocEx)(HANDLE, LPVOID, SIZE_T, DWORD, DWORD);
|
||||||
static BOOL (WINAPI *pVirtualFreeEx)(HANDLE, LPVOID, SIZE_T, DWORD);
|
static BOOL (WINAPI *pVirtualFreeEx)(HANDLE, LPVOID, SIZE_T, DWORD);
|
||||||
|
|
|
@ -28,15 +28,6 @@
|
||||||
|
|
||||||
#include "wine/test.h"
|
#include "wine/test.h"
|
||||||
|
|
||||||
static const char *wine_dbgstr_w(LPCWSTR str)
|
|
||||||
{
|
|
||||||
static char buf[512];
|
|
||||||
if (!str)
|
|
||||||
return "(null)";
|
|
||||||
WideCharToMultiByte(CP_ACP, 0, str, -1, buf, sizeof(buf), NULL, NULL);
|
|
||||||
return buf;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void test_DsMakeSpn(void)
|
static void test_DsMakeSpn(void)
|
||||||
{
|
{
|
||||||
DWORD ret;
|
DWORD ret;
|
||||||
|
|
|
@ -44,86 +44,6 @@ const MYSTRUCT MYSTRUCT_ARRAY[5] = {
|
||||||
{0x5a5b5c5d, ULL_CONST(0x5e5f5051, 0x52535455)},
|
{0x5a5b5c5d, ULL_CONST(0x5e5f5051, 0x52535455)},
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Debugging functions from wine/libs/wine/debug.c */
|
|
||||||
|
|
||||||
/* allocate some tmp string space */
|
|
||||||
/* FIXME: this is not 100% thread-safe */
|
|
||||||
static char *get_tmp_space( int size )
|
|
||||||
{
|
|
||||||
static char *list[32];
|
|
||||||
static long pos;
|
|
||||||
char *ret;
|
|
||||||
int idx;
|
|
||||||
|
|
||||||
idx = ++pos % (sizeof(list)/sizeof(list[0]));
|
|
||||||
if (list[idx])
|
|
||||||
ret = HeapReAlloc( GetProcessHeap(), 0, list[idx], size );
|
|
||||||
else
|
|
||||||
ret = HeapAlloc( GetProcessHeap(), 0, size );
|
|
||||||
if (ret) list[idx] = ret;
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* default implementation of wine_dbgstr_wn */
|
|
||||||
static const char *default_dbgstr_wn( const WCHAR *str, int n )
|
|
||||||
{
|
|
||||||
char *dst, *res;
|
|
||||||
|
|
||||||
if (!HIWORD(str))
|
|
||||||
{
|
|
||||||
if (!str) return "(null)";
|
|
||||||
res = get_tmp_space( 6 );
|
|
||||||
sprintf( res, "#%04x", LOWORD(str) );
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
if (n == -1) n = lstrlenW(str);
|
|
||||||
if (n < 0) n = 0;
|
|
||||||
else if (n > 200) n = 200;
|
|
||||||
dst = res = get_tmp_space( n * 5 + 7 );
|
|
||||||
*dst++ = 'L';
|
|
||||||
*dst++ = '"';
|
|
||||||
while (n-- > 0)
|
|
||||||
{
|
|
||||||
WCHAR c = *str++;
|
|
||||||
switch (c)
|
|
||||||
{
|
|
||||||
case '\n': *dst++ = '\\'; *dst++ = 'n'; break;
|
|
||||||
case '\r': *dst++ = '\\'; *dst++ = 'r'; break;
|
|
||||||
case '\t': *dst++ = '\\'; *dst++ = 't'; break;
|
|
||||||
case '"': *dst++ = '\\'; *dst++ = '"'; break;
|
|
||||||
case '\\': *dst++ = '\\'; *dst++ = '\\'; break;
|
|
||||||
default:
|
|
||||||
if (c >= ' ' && c <= 126)
|
|
||||||
*dst++ = (char)c;
|
|
||||||
else
|
|
||||||
{
|
|
||||||
*dst++ = '\\';
|
|
||||||
sprintf(dst,"%04x",c);
|
|
||||||
dst+=4;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
*dst++ = '"';
|
|
||||||
if (*str)
|
|
||||||
{
|
|
||||||
*dst++ = '.';
|
|
||||||
*dst++ = '.';
|
|
||||||
*dst++ = '.';
|
|
||||||
}
|
|
||||||
*dst = 0;
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
|
|
||||||
const char *wine_dbgstr_wn( const WCHAR *s, int n )
|
|
||||||
{
|
|
||||||
return default_dbgstr_wn(s, n);
|
|
||||||
}
|
|
||||||
|
|
||||||
const char *wine_dbgstr_w( const WCHAR *s )
|
|
||||||
{
|
|
||||||
return default_dbgstr_wn( s, -1 );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#define RELEASEMARSHALDATA WM_USER
|
#define RELEASEMARSHALDATA WM_USER
|
||||||
|
|
||||||
|
|
|
@ -81,15 +81,6 @@ static void init_function_pointers(void)
|
||||||
ok(hr == S_OK, "SHGetMalloc failed %08x\n", hr);
|
ok(hr == S_OK, "SHGetMalloc failed %08x\n", hr);
|
||||||
}
|
}
|
||||||
|
|
||||||
static const char *wine_dbgstr_w(LPCWSTR str)
|
|
||||||
{
|
|
||||||
static char buf[512];
|
|
||||||
if (!str)
|
|
||||||
return "(null)";
|
|
||||||
WideCharToMultiByte(CP_ACP, 0, str, -1, buf, sizeof(buf), NULL, NULL);
|
|
||||||
return buf;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void test_ParseDisplayName(void)
|
static void test_ParseDisplayName(void)
|
||||||
{
|
{
|
||||||
HRESULT hr;
|
HRESULT hr;
|
||||||
|
|
|
@ -62,6 +62,9 @@ extern void winetest_end_todo( const char* platform );
|
||||||
extern int winetest_get_mainargs( char*** pargv );
|
extern int winetest_get_mainargs( char*** pargv );
|
||||||
extern void winetest_wait_child_process( HANDLE process );
|
extern void winetest_wait_child_process( HANDLE process );
|
||||||
|
|
||||||
|
extern const char *wine_dbgstr_wn( const WCHAR *str, int n );
|
||||||
|
static inline const char *wine_dbgstr_w( const WCHAR *s ) { return wine_dbgstr_wn( s, -1 ); }
|
||||||
|
|
||||||
#ifdef STANDALONE
|
#ifdef STANDALONE
|
||||||
#define START_TEST(name) \
|
#define START_TEST(name) \
|
||||||
static void func_##name(void); \
|
static void func_##name(void); \
|
||||||
|
@ -196,6 +199,8 @@ typedef struct
|
||||||
int current_line; /* line of current check */
|
int current_line; /* line of current check */
|
||||||
int todo_level; /* current todo nesting level */
|
int todo_level; /* current todo nesting level */
|
||||||
int todo_do_loop;
|
int todo_do_loop;
|
||||||
|
char *str_pos; /* position in debug buffer */
|
||||||
|
char strings[2000]; /* buffer for debug strings */
|
||||||
} tls_data;
|
} tls_data;
|
||||||
static DWORD tls_index;
|
static DWORD tls_index;
|
||||||
|
|
||||||
|
@ -208,13 +213,33 @@ static tls_data* get_tls_data(void)
|
||||||
data=TlsGetValue(tls_index);
|
data=TlsGetValue(tls_index);
|
||||||
if (!data)
|
if (!data)
|
||||||
{
|
{
|
||||||
data=HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(tls_data));
|
data=HeapAlloc(GetProcessHeap(), 0, sizeof(tls_data));
|
||||||
|
data->todo_level = 0;
|
||||||
|
data->str_pos = data->strings;
|
||||||
TlsSetValue(tls_index,data);
|
TlsSetValue(tls_index,data);
|
||||||
}
|
}
|
||||||
SetLastError(last_error);
|
SetLastError(last_error);
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* allocate some tmp space for a string */
|
||||||
|
static char *get_temp_buffer( size_t n )
|
||||||
|
{
|
||||||
|
tls_data *data = get_tls_data();
|
||||||
|
char *res = data->str_pos;
|
||||||
|
|
||||||
|
if (res + n >= &data->strings[sizeof(data->strings)]) res = data->strings;
|
||||||
|
data->str_pos = res + n;
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* release extra space that we requested in gimme1() */
|
||||||
|
static void release_temp_buffer( char *ptr, size_t size )
|
||||||
|
{
|
||||||
|
tls_data *data = get_tls_data();
|
||||||
|
data->str_pos = ptr + size;
|
||||||
|
}
|
||||||
|
|
||||||
static void exit_process( int code )
|
static void exit_process( int code )
|
||||||
{
|
{
|
||||||
fflush( stdout );
|
fflush( stdout );
|
||||||
|
@ -407,6 +432,62 @@ void winetest_wait_child_process( HANDLE process )
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const char *wine_dbgstr_wn( const WCHAR *str, int n )
|
||||||
|
{
|
||||||
|
char *dst, *res;
|
||||||
|
size_t size;
|
||||||
|
|
||||||
|
if (!((ULONG_PTR)str >> 16))
|
||||||
|
{
|
||||||
|
if (!str) return "(null)";
|
||||||
|
res = get_temp_buffer( 6 );
|
||||||
|
sprintf( res, "#%04x", LOWORD(str) );
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
if (n == -1)
|
||||||
|
{
|
||||||
|
const WCHAR *end = str;
|
||||||
|
while (*end) end++;
|
||||||
|
n = end - str;
|
||||||
|
}
|
||||||
|
if (n < 0) n = 0;
|
||||||
|
size = 12 + min( 300, n * 5 );
|
||||||
|
dst = res = get_temp_buffer( size );
|
||||||
|
*dst++ = 'L';
|
||||||
|
*dst++ = '"';
|
||||||
|
while (n-- > 0 && dst <= res + size - 10)
|
||||||
|
{
|
||||||
|
WCHAR c = *str++;
|
||||||
|
switch (c)
|
||||||
|
{
|
||||||
|
case '\n': *dst++ = '\\'; *dst++ = 'n'; break;
|
||||||
|
case '\r': *dst++ = '\\'; *dst++ = 'r'; break;
|
||||||
|
case '\t': *dst++ = '\\'; *dst++ = 't'; break;
|
||||||
|
case '"': *dst++ = '\\'; *dst++ = '"'; break;
|
||||||
|
case '\\': *dst++ = '\\'; *dst++ = '\\'; break;
|
||||||
|
default:
|
||||||
|
if (c >= ' ' && c <= 126)
|
||||||
|
*dst++ = c;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
*dst++ = '\\';
|
||||||
|
sprintf(dst,"%04x",c);
|
||||||
|
dst+=4;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*dst++ = '"';
|
||||||
|
if (n > 0)
|
||||||
|
{
|
||||||
|
*dst++ = '.';
|
||||||
|
*dst++ = '.';
|
||||||
|
*dst++ = '.';
|
||||||
|
}
|
||||||
|
*dst++ = 0;
|
||||||
|
release_temp_buffer( res, dst - res );
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
/* Find a test by name */
|
/* Find a test by name */
|
||||||
static const struct test *find_test( const char *name )
|
static const struct test *find_test( const char *name )
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue