oledb32: Use shared convert instance, use a single skip.

This commit is contained in:
Nikolay Sivov 2013-05-05 09:20:02 +04:00 committed by Alexandre Julliard
parent bdc5c3211c
commit ff8fa96bb2
1 changed files with 21 additions and 180 deletions

View File

@ -35,6 +35,7 @@
#include "wine/test.h"
static IDataConvert *convert;
static void test_dcinfo(void)
{
@ -199,14 +200,15 @@ static inline BOOL array_type(DBTYPE type)
static void test_canconvert(void)
{
IDataConvert *convert;
HRESULT hr;
int src_idx, dst_idx;
hr = CoCreateInstance(&CLSID_OLEDB_CONVERSIONLIBRARY, NULL, CLSCTX_INPROC_SERVER, &IID_IDataConvert, (void**)&convert);
if(FAILED(hr))
/* Some older versions of the library don't support several conversions, we'll skip
if we have such a library */
hr = IDataConvert_CanConvert(convert, DBTYPE_EMPTY, DBTYPE_DBTIMESTAMP);
if(hr == S_FALSE)
{
win_skip("Unable to load oledb conversion library\n");
win_skip("Doesn't handle DBTYPE_EMPTY -> DBTYPE_DBTIMESTAMP conversion so skipping\n");
return;
}
@ -216,17 +218,6 @@ static void test_canconvert(void)
if(hr == S_FALSE)
{
win_skip("Doesn't handle DBTYPE_EMPTY -> DBTYPE_DBTIMESTAMP conversion so skipping\n");
IDataConvert_Release(convert);
return;
}
/* Some older versions of the library don't support several conversions, we'll skip
if we have such a library */
hr = IDataConvert_CanConvert(convert, DBTYPE_EMPTY, DBTYPE_DBTIMESTAMP);
if(hr == S_FALSE)
{
win_skip("Doesn't handle DBTYPE_EMPTY -> DBTYPE_DBTIMESTAMP conversion so skipping\n");
IDataConvert_Release(convert);
return;
}
@ -336,13 +327,10 @@ static void test_canconvert(void)
}
IDataConvert_Release(convert);
}
static void test_converttoi2(void)
{
IDataConvert *convert;
HRESULT hr;
signed short dst;
BYTE src[20];
@ -351,13 +339,6 @@ static void test_converttoi2(void)
static const WCHAR ten[] = {'1','0',0};
BSTR b;
hr = CoCreateInstance(&CLSID_OLEDB_CONVERSIONLIBRARY, NULL, CLSCTX_INPROC_SERVER, &IID_IDataConvert, (void**)&convert);
if(FAILED(hr))
{
win_skip("Unable to load oledb conversion library\n");
return;
}
dst_len = dst = 0x1234;
hr = IDataConvert_DataConvert(convert, DBTYPE_EMPTY, DBTYPE_I2, 0, &dst_len, src, &dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
ok(hr == S_OK, "got %08x\n", hr);
@ -651,13 +632,10 @@ todo_wine
ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
ok(dst_len == sizeof(dst), "got %ld\n", dst_len);
ok(dst == 10, "got %08x\n", dst);
IDataConvert_Release(convert);
}
static void test_converttoi4(void)
{
IDataConvert *convert;
HRESULT hr;
INT i4;
BYTE src[20];
@ -666,13 +644,6 @@ static void test_converttoi4(void)
static const WCHAR ten[] = {'1','0',0};
BSTR b;
hr = CoCreateInstance(&CLSID_OLEDB_CONVERSIONLIBRARY, NULL, CLSCTX_INPROC_SERVER, &IID_IDataConvert, (void**)&convert);
if(FAILED(hr))
{
win_skip("Unable to load oledb conversion library\n");
return;
}
i4 = 0x12345678;
dst_len = 0x1234;
hr = IDataConvert_DataConvert(convert, DBTYPE_EMPTY, DBTYPE_I4, 0, &dst_len, src, &i4, sizeof(i4), 0, &dst_status, 0, 0, 0);
@ -913,13 +884,10 @@ todo_wine
ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
ok(dst_len == sizeof(i4), "got %ld\n", dst_len);
ok(i4 == 10, "got %08x\n", i4);
IDataConvert_Release(convert);
}
static void test_converttoi8(void)
{
IDataConvert *convert;
HRESULT hr;
LARGE_INTEGER dst;
BYTE src[20];
@ -928,13 +896,6 @@ static void test_converttoi8(void)
static const WCHAR ten[] = {'1','0',0};
BSTR b;
hr = CoCreateInstance(&CLSID_OLEDB_CONVERSIONLIBRARY, NULL, CLSCTX_INPROC_SERVER, &IID_IDataConvert, (void**)&convert);
if(FAILED(hr))
{
win_skip("Unable to load oledb conversion library\n");
return;
}
dst.QuadPart = 0xcc;
((ULARGE_INTEGER*)src)->QuadPart = 1234;
dst_len = 0x1234;
@ -954,13 +915,10 @@ static void test_converttoi8(void)
ok(dst_len == sizeof(dst), "got %ld\n", dst_len);
ok(dst.QuadPart == 10, "got %d\n", (int)dst.QuadPart);
SysFreeString(b);
IDataConvert_Release(convert);
}
static void test_converttobstr(void)
{
IDataConvert *convert;
HRESULT hr;
BSTR dst;
BYTE src[20];
@ -970,13 +928,6 @@ static void test_converttobstr(void)
VARIANT v;
BSTR b;
hr = CoCreateInstance(&CLSID_OLEDB_CONVERSIONLIBRARY, NULL, CLSCTX_INPROC_SERVER, &IID_IDataConvert, (void**)&convert);
if(FAILED(hr))
{
win_skip("Unable to load oledb conversion library\n");
return;
}
dst_len = 0x1234;
hr = IDataConvert_DataConvert(convert, DBTYPE_EMPTY, DBTYPE_BSTR, 0, &dst_len, src, &dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
ok(hr == S_OK, "got %08x\n", hr);
@ -1026,13 +977,10 @@ static void test_converttobstr(void)
ok(!lstrcmpW(b, dst), "got %s\n", wine_dbgstr_w(dst));
SysFreeString(dst);
SysFreeString(b);
IDataConvert_Release(convert);
}
static void test_converttowstr(void)
{
IDataConvert *convert;
HRESULT hr;
WCHAR dst[100];
BYTE src[20];
@ -1047,14 +995,6 @@ static void test_converttowstr(void)
static const WCHAR hexpacked_w[] = {'W','i','n','e', 0 };
BSTR b;
hr = CoCreateInstance(&CLSID_OLEDB_CONVERSIONLIBRARY, NULL, CLSCTX_INPROC_SERVER, &IID_IDataConvert, (void**)&convert);
if(FAILED(hr))
{
win_skip("Unable to load oledb conversion library\n");
return;
}
memset(dst, 0xcc, sizeof(dst));
dst_len = 0x1234;
hr = IDataConvert_DataConvert(convert, DBTYPE_EMPTY, DBTYPE_WSTR, 0, &dst_len, src, dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
@ -1507,14 +1447,10 @@ static void test_converttowstr(void)
ok(dst_len == 0, "got %ld\n", dst_len);
ok(dst[0] == 0, "not null terminated\n");
ok(dst[1] == 0xcccc, "clobbered buffer\n");
IDataConvert_Release(convert);
}
static void test_converttostr(void)
{
IDataConvert *convert;
HRESULT hr;
char dst[100];
BYTE src[64];
@ -1528,14 +1464,6 @@ static void test_converttostr(void)
static const char hexpacked_a[] = "Wine";
BSTR b;
hr = CoCreateInstance(&CLSID_OLEDB_CONVERSIONLIBRARY, NULL, CLSCTX_INPROC_SERVER, &IID_IDataConvert, (void**)&convert);
if(FAILED(hr))
{
win_skip("Unable to load oledb conversion library\n");
return;
}
memset(dst, 0xcc, sizeof(dst));
dst_len = 0x1234;
hr = IDataConvert_DataConvert(convert, DBTYPE_EMPTY, DBTYPE_STR, 0, &dst_len, src, dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
@ -2012,13 +1940,10 @@ static void test_converttostr(void)
ok(dst_len == 0, "got %ld\n", dst_len);
ok(dst[0] == 0, "not null terminated\n");
ok(dst[1] == (char)0xcc, "clobbered buffer\n");
IDataConvert_Release(convert);
}
static void test_converttobyrefwstr(void)
{
IDataConvert *convert;
HRESULT hr;
WCHAR *dst;
BYTE src[20];
@ -2028,13 +1953,6 @@ static void test_converttobyrefwstr(void)
static const WCHAR fourthreetwoone[] = {'4','3','2','1',0};
BSTR b;
hr = CoCreateInstance(&CLSID_OLEDB_CONVERSIONLIBRARY, NULL, CLSCTX_INPROC_SERVER, &IID_IDataConvert, (void**)&convert);
if(FAILED(hr))
{
win_skip("Unable to load oledb conversion library\n");
return;
}
hr = IDataConvert_DataConvert(convert, DBTYPE_EMPTY, DBTYPE_BYREF | DBTYPE_WSTR, 0, &dst_len, src, &dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
ok(hr == S_OK, "got %08x\n", hr);
ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
@ -2106,26 +2024,16 @@ static void test_converttobyrefwstr(void)
ok(dst_len == 4, "got %ld\n", dst_len);
ok(!lstrcmpW(ten, dst), "got %s\n", wine_dbgstr_w(dst));
CoTaskMemFree(dst);
IDataConvert_Release(convert);
}
static void test_converttoguid(void)
{
IDataConvert *convert;
HRESULT hr;
GUID dst;
BYTE src[20];
DBSTATUS dst_status;
DBLENGTH dst_len;
hr = CoCreateInstance(&CLSID_OLEDB_CONVERSIONLIBRARY, NULL, CLSCTX_INPROC_SERVER, &IID_IDataConvert, (void**)&convert);
if(FAILED(hr))
{
win_skip("Unable to load oledb conversion library\n");
return;
}
dst = IID_IDCInfo;
dst_len = 0x1234;
hr = IDataConvert_DataConvert(convert, DBTYPE_EMPTY, DBTYPE_GUID, 0, &dst_len, src, &dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
@ -2150,26 +2058,16 @@ static void test_converttoguid(void)
ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
ok(dst_len == sizeof(GUID), "got %ld\n", dst_len);
ok(IsEqualGUID(&dst, &IID_IDataConvert), "didn't get IID_IDataConvert\n");
IDataConvert_Release(convert);
}
static void test_converttofiletime(void)
{
IDataConvert *convert;
HRESULT hr;
FILETIME dst;
BYTE src[20];
DBSTATUS dst_status;
DBLENGTH dst_len;
hr = CoCreateInstance(&CLSID_OLEDB_CONVERSIONLIBRARY, NULL, CLSCTX_INPROC_SERVER, &IID_IDataConvert, (void**)&convert);
if(FAILED(hr))
{
win_skip("Unable to load oledb conversion library\n");
return;
}
memset(&dst, 0xcc, sizeof(dst));
((FILETIME *)src)->dwLowDateTime = 0x12345678;
((FILETIME *)src)->dwHighDateTime = 0x9abcdef0;
@ -2185,26 +2083,16 @@ static void test_converttofiletime(void)
ok(dst.dwLowDateTime == 0x12345678, "got %08x\n", dst.dwLowDateTime);
ok(dst.dwHighDateTime == 0x9abcdef0, "got %08x\n", dst.dwHighDateTime);
}
IDataConvert_Release(convert);
}
static void test_converttoui1(void)
{
IDataConvert *convert;
HRESULT hr;
BYTE dst;
BYTE src[20];
DBSTATUS dst_status;
DBLENGTH dst_len;
hr = CoCreateInstance(&CLSID_OLEDB_CONVERSIONLIBRARY, NULL, CLSCTX_INPROC_SERVER, &IID_IDataConvert, (void**)&convert);
if(FAILED(hr))
{
win_skip("Unable to load oledb conversion library\n");
return;
}
dst = 0x12;
dst_len = 0x1234;
hr = IDataConvert_DataConvert(convert, DBTYPE_EMPTY, DBTYPE_UI1, 0, &dst_len, src, &dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
@ -2238,26 +2126,16 @@ static void test_converttoui1(void)
ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
ok(dst_len == sizeof(dst), "got %ld\n", dst_len);
ok(dst == 0xfe, "got %08x\n", dst);
IDataConvert_Release(convert);
}
static void test_converttoui4(void)
{
IDataConvert *convert;
HRESULT hr;
DWORD dst;
BYTE src[20];
DBSTATUS dst_status;
DBLENGTH dst_len;
hr = CoCreateInstance(&CLSID_OLEDB_CONVERSIONLIBRARY, NULL, CLSCTX_INPROC_SERVER, &IID_IDataConvert, (void**)&convert);
if(FAILED(hr))
{
win_skip("Unable to load oledb conversion library\n");
return;
}
dst = 0x12345678;
dst_len = 0x1234;
hr = IDataConvert_DataConvert(convert, DBTYPE_EMPTY, DBTYPE_UI4, 0, &dst_len, src, &dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
@ -2311,26 +2189,16 @@ todo_wine
ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
ok(dst_len == sizeof(dst), "got %ld\n", dst_len);
ok(dst == 0x4321, "got %08x\n", dst);
IDataConvert_Release(convert);
}
static void test_converttor4(void)
{
IDataConvert *convert;
HRESULT hr;
FLOAT dst;
BYTE src[20];
DBSTATUS dst_status;
DBLENGTH dst_len;
hr = CoCreateInstance(&CLSID_OLEDB_CONVERSIONLIBRARY, NULL, CLSCTX_INPROC_SERVER, &IID_IDataConvert, (void**)&convert);
if(FAILED(hr))
{
win_skip("Unable to load oledb conversion library\n");
return;
}
dst = 1.0;
dst_len = 0x1234;
hr = IDataConvert_DataConvert(convert, DBTYPE_EMPTY, DBTYPE_R4, 0, &dst_len, src, &dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
@ -2364,26 +2232,16 @@ static void test_converttor4(void)
ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
ok(dst_len == sizeof(dst), "got %ld\n", dst_len);
ok(dst == 10.0, "got %f\n", dst);
IDataConvert_Release(convert);
}
static void test_converttocy(void)
{
IDataConvert *convert;
HRESULT hr;
CY dst;
BYTE src[20];
DBSTATUS dst_status;
DBLENGTH dst_len;
hr = CoCreateInstance(&CLSID_OLEDB_CONVERSIONLIBRARY, NULL, CLSCTX_INPROC_SERVER, &IID_IDataConvert, (void**)&convert);
if(FAILED(hr))
{
win_skip("Unable to load oledb conversion library\n");
return;
}
dst.int64 = 0xcc;
dst_len = 0x1234;
hr = IDataConvert_DataConvert(convert, DBTYPE_EMPTY, DBTYPE_CY, 0, &dst_len, src, &dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
@ -2417,26 +2275,16 @@ static void test_converttocy(void)
ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
ok(dst_len == sizeof(CY), "got %ld\n", dst_len);
ok(dst.int64 == 1234, "got %d\n", dst.s.Lo);
IDataConvert_Release(convert);
}
static void test_converttoui8(void)
{
IDataConvert *convert;
HRESULT hr;
ULARGE_INTEGER dst;
BYTE src[20];
DBSTATUS dst_status;
DBLENGTH dst_len;
hr = CoCreateInstance(&CLSID_OLEDB_CONVERSIONLIBRARY, NULL, CLSCTX_INPROC_SERVER, &IID_IDataConvert, (void**)&convert);
if(FAILED(hr))
{
win_skip("Unable to load oledb conversion library\n");
return;
}
dst.QuadPart = 0xcc;
dst_len = 0x1234;
hr = IDataConvert_DataConvert(convert, DBTYPE_EMPTY, DBTYPE_UI8, 0, &dst_len, src, &dst, sizeof(dst), 0, &dst_status, 0, 0, 0);
@ -2481,13 +2329,10 @@ todo_wine
ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status);
ok(dst_len == sizeof(dst), "got %ld\n", dst_len);
ok(dst.QuadPart == 1234, "got %d\n", (int)dst.QuadPart);
IDataConvert_Release(convert);
}
static void test_getconversionsize(void)
{
IDataConvert *convert;
DBLENGTH dst_len;
DBLENGTH src_len;
HRESULT hr;
@ -2495,13 +2340,6 @@ static void test_getconversionsize(void)
static WCHAR strW[] = {'t','e','s','t',0};
static char strTest[] = "test";
hr = CoCreateInstance(&CLSID_OLEDB_CONVERSIONLIBRARY, NULL, CLSCTX_INPROC_SERVER, &IID_IDataConvert, (void**)&convert);
if(FAILED(hr))
{
win_skip("Unable to load oledb conversion library\n");
return;
}
/* same way as CanConvert fails here */
dst_len = 0;
hr = IDataConvert_GetConversionSize(convert, DBTYPE_NULL, DBTYPE_BSTR, NULL, &dst_len, NULL);
@ -2556,15 +2394,12 @@ static void test_getconversionsize(void)
hr = IDataConvert_GetConversionSize(convert, DBTYPE_STR, DBTYPE_WSTR, &src_len, &dst_len, strTest);
ok(hr == S_OK, "got 0x%08x\n", hr);
ok(dst_len == 42, "%ld\n", dst_len);
IDataConvert_Release(convert);
}
static void test_converttovar(void)
{
static WCHAR strW[] = {'t','e','s','t',0};
double dvalue = 123.56;
IDataConvert *convert;
DBSTATUS dst_status;
DBLENGTH dst_len;
VARIANT dst;
@ -2575,13 +2410,6 @@ static void test_converttovar(void)
LARGE_INTEGER i8;
VARIANT_BOOL boolean = VARIANT_TRUE;
hr = CoCreateInstance(&CLSID_OLEDB_CONVERSIONLIBRARY, NULL, CLSCTX_INPROC_SERVER, &IID_IDataConvert, (void**)&convert);
if(FAILED(hr))
{
win_skip("Unable to load oledb conversion library\n");
return;
}
V_VT(&dst) = VT_EMPTY;
dst_len = 0;
dst_status = DBSTATUS_S_DEFAULT;
@ -2669,14 +2497,24 @@ static void test_converttovar(void)
cy2 = V_CY(&dst);
ok(S(cy2).Lo == S(cy).Lo && S(cy2).Hi == S(cy).Hi, "got %d,%d\n", S(cy2).Lo, S(cy2).Hi);
IDataConvert_Release(convert);
}
START_TEST(convert)
{
HRESULT hr;
OleInitialize(NULL);
test_dcinfo();
hr = CoCreateInstance(&CLSID_OLEDB_CONVERSIONLIBRARY, NULL, CLSCTX_INPROC_SERVER, &IID_IDataConvert, (void**)&convert);
if(FAILED(hr))
{
win_skip("Unable to create IDataConvert instance, 0x%08x\n", hr);
OleUninitialize();
return;
}
test_canconvert();
test_converttoi2();
test_converttoi4();
@ -2694,5 +2532,8 @@ START_TEST(convert)
test_converttoui8();
test_converttovar();
test_getconversionsize();
IDataConvert_Release(convert);
OleUninitialize();
}