Module: wine Branch: master Commit: 39fcf4ec775ce36fafe871d285beb6a6d9e5aba1 URL: http://source.winehq.org/git/wine.git/?a=commit;h=39fcf4ec775ce36fafe871d285...
Author: Nikolay Sivov nsivov@codeweavers.com Date: Sun Jan 12 22:48:31 2014 +0400
oleaut32/tests: Make it clear which vartypes are tested, skip calls on undefined vartype values.
---
dlls/oleaut32/tests/vartype.c | 154 ++++++++++++++++++++++++++++------------- 1 file changed, 106 insertions(+), 48 deletions(-)
diff --git a/dlls/oleaut32/tests/vartype.c b/dlls/oleaut32/tests/vartype.c index e296e77..d100ad1 100644 --- a/dlls/oleaut32/tests/vartype.c +++ b/dlls/oleaut32/tests/vartype.c @@ -5900,89 +5900,147 @@ static void test_ErrorChangeTypeEx(void) /* VT_EMPTY */ static void test_EmptyChangeTypeEx(void) { - HRESULT hres; - VARIANTARG vSrc, vDst; VARTYPE vt; LCID lcid;
lcid = MAKELCID(MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), SORT_DEFAULT);
- for (vt = 0; vt <= VT_BSTR_BLOB; vt++) + for (vt = VT_EMPTY; vt <= VT_BSTR_BLOB; vt++) { - HRESULT hExpected = DISP_E_BADVARTYPE; + HRESULT hExpected, hres; + VARIANTARG vSrc, vDst;
- VariantInit(&vSrc); - memset(&vDst, 0, sizeof(vDst)); - V_VT(&vDst) = VT_EMPTY; + /* skip for undefined types */ + if ((vt == 15) || (vt > VT_VERSIONED_STREAM && vt < VT_BSTR_BLOB)) + continue;
- if (vt == VT_I8 || vt == VT_UI8) + switch (vt) { + case VT_I8: + case VT_UI8: if (has_i8) hExpected = S_OK; - } - else if (vt == VT_RECORD) - { - hExpected = DISP_E_TYPEMISMATCH; - } - else if (vt == VT_VARIANT || vt == VT_DISPATCH || - vt == VT_UNKNOWN || vt == VT_ERROR) - { + else + hExpected = DISP_E_BADVARTYPE; + break; + case VT_RECORD: + case VT_VARIANT: + case VT_DISPATCH: + case VT_UNKNOWN: + case VT_ERROR: hExpected = DISP_E_TYPEMISMATCH; - } - else if (vt <= VT_UINT && vt != (VARTYPE)15) + break; + case VT_EMPTY: + case VT_NULL: + case VT_I2: + case VT_I4: + case VT_R4: + case VT_R8: + case VT_CY: + case VT_DATE: + case VT_BSTR: + case VT_BOOL: + case VT_DECIMAL: + case VT_I1: + case VT_UI1: + case VT_UI2: + case VT_UI4: + case VT_INT: + case VT_UINT: hExpected = S_OK; + break; + default: + hExpected = DISP_E_BADVARTYPE; + }
- hres = VariantChangeTypeEx(&vDst, &vSrc, lcid, 0, vt); + VariantInit(&vSrc); + V_VT(&vSrc) = VT_EMPTY; + memset(&vDst, 0, sizeof(vDst)); + V_VT(&vDst) = VT_NULL;
- ok(hres == hExpected && (hres != S_OK || V_VT(&vDst) == vt), - "change empty: vt %d expected 0x%08x, got 0x%08x, vt %d\n", - vt, hExpected, hres, V_VT(&vDst)); - if(hres == S_OK) VariantClear(&vDst); + hres = VariantChangeTypeEx(&vDst, &vSrc, lcid, 0, vt); + ok(hres == hExpected, "change empty: vt %d expected 0x%08x, got 0x%08x, vt %d\n", + vt, hExpected, hres, V_VT(&vDst)); + if (hres == S_OK) + { + ok(V_VT(&vDst) == vt, "change empty: vt %d, got %d\n", vt, V_VT(&vDst)); + VariantClear(&vDst); + } } }
/* VT_NULL */ static void test_NullChangeTypeEx(void) { - HRESULT hres; - VARIANTARG vSrc, vDst; VARTYPE vt; LCID lcid;
lcid = MAKELCID(MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), SORT_DEFAULT);
- for (vt = 0; vt <= VT_BSTR_BLOB; vt++) + for (vt = VT_EMPTY; vt <= VT_BSTR_BLOB; vt++) { - HRESULT hExpected = DISP_E_BADVARTYPE; + VARIANTARG vSrc, vDst; + HRESULT hExpected, hres;
- VariantInit(&vSrc); - V_VT(&vSrc) = VT_NULL; - memset(&vDst, 0, sizeof(vDst)); - V_VT(&vDst) = VT_EMPTY; + /* skip for undefined types */ + if ((vt == 15) || (vt > VT_VERSIONED_STREAM && vt < VT_BSTR_BLOB)) + continue;
- if (vt == VT_I8 || vt == VT_UI8) + switch (vt) { - if (has_i8) + case VT_I8: + case VT_UI8: + if (has_i8) + hExpected = DISP_E_TYPEMISMATCH; + else + hExpected = DISP_E_BADVARTYPE; + break; + case VT_NULL: + hExpected = S_OK; + break; + case VT_EMPTY: + case VT_I2: + case VT_I4: + case VT_R4: + case VT_R8: + case VT_CY: + case VT_DATE: + case VT_BSTR: + case VT_DISPATCH: + case VT_ERROR: + case VT_BOOL: + case VT_VARIANT: + case VT_UNKNOWN: + case VT_DECIMAL: + case VT_I1: + case VT_UI1: + case VT_UI2: + case VT_UI4: + case VT_INT: + case VT_UINT: + case VT_RECORD: hExpected = DISP_E_TYPEMISMATCH; + break; + default: + hExpected = DISP_E_BADVARTYPE; } - else if (vt == VT_RECORD) - { - hExpected = DISP_E_TYPEMISMATCH; - } - else if (vt == VT_NULL) - { - hExpected = S_OK; - } - else if (vt == VT_VARIANT || vt == VT_DISPATCH || - vt == VT_UNKNOWN || vt == VT_ERROR || - (vt <= VT_UINT && vt != (VARTYPE)15)) - hExpected = DISP_E_TYPEMISMATCH;
- hres = VariantChangeTypeEx(&vDst, &vSrc, lcid, 0, vt); + VariantInit(&vSrc); + V_VT(&vSrc) = VT_NULL; + memset(&vDst, 0, sizeof(vDst)); + V_VT(&vDst) = VT_EMPTY;
- ok(hres == hExpected && (hres != S_OK || V_VT(&vDst) == vt), - "change null: vt %d expected 0x%08x, got 0x%08x, vt %d\n", + hres = VariantChangeTypeEx(&vDst, &vSrc, lcid, 0, vt); + ok(hres == hExpected, "change null: vt %d expected 0x%08x, got 0x%08x, vt %d\n", vt, hExpected, hres, V_VT(&vDst)); + + /* should work only for VT_NULL -> VT_NULL case */ + if (hres == S_OK) + ok(V_VT(&vDst) == VT_NULL, "change null: VT_NULL expected 0x%08x, got 0x%08x, vt %d\n", + hExpected, hres, V_VT(&vDst)); + else + ok(V_VT(&vDst) == VT_EMPTY, "change null: vt %d expected 0x%08x, got 0x%08x, vt %d\n", + vt, hExpected, hres, V_VT(&vDst)); } }