[PROPSYS_WINETEST] Sync with Wine 3.0. CORE-14225
[reactos.git] / modules / rostests / winetests / propsys / propsys.c
index 7539537..f226c16 100644 (file)
@@ -890,6 +890,217 @@ static void test_intconversions(void)
     ok(llval == -7, "got wrong value %s\n", wine_dbgstr_longlong(llval));
 }
 
+static void test_PropVariantToBoolean(void)
+{
+    static WCHAR str_0[] = {'0',0};
+    static WCHAR str_1[] = {'1',0};
+    static WCHAR str_7[] = {'7',0};
+    static WCHAR str_n7[] = {'-','7',0};
+    static WCHAR str_true[] = {'t','r','u','e',0};
+    static WCHAR str_true2[] = {'#','T','R','U','E','#',0};
+    static WCHAR str_true_case[] = {'t','R','U','e',0};
+    static WCHAR str_false[] = {'f','a','l','s','e',0};
+    static WCHAR str_false2[] = {'#','F','A','L','S','E','#',0};
+    static WCHAR str_true_space[] = {'t','r','u','e',' ',0};
+    static WCHAR str_yes[] = {'y','e','s',0};
+    PROPVARIANT propvar;
+    HRESULT hr;
+    BOOL val;
+
+    /* VT_BOOL */
+    propvar.vt = VT_BOOL;
+    propvar.u.boolVal = VARIANT_FALSE;
+    val = TRUE;
+    hr = PropVariantToBoolean(&propvar, &val);
+    ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+    ok(val == FALSE, "Unexpected value %d\n", val);
+
+    propvar.vt = VT_BOOL;
+    propvar.u.boolVal = 1;
+    val = TRUE;
+    hr = PropVariantToBoolean(&propvar, &val);
+    ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+    ok(val == FALSE, "Unexpected value %d\n", val);
+
+    propvar.vt = VT_BOOL;
+    propvar.u.boolVal = VARIANT_TRUE;
+    val = FALSE;
+    hr = PropVariantToBoolean(&propvar, &val);
+    ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+    ok(val == TRUE, "Unexpected value %d\n", val);
+
+    /* VT_EMPTY */
+    propvar.vt = VT_EMPTY;
+    propvar.u.boolVal = VARIANT_TRUE;
+    val = TRUE;
+    hr = PropVariantToBoolean(&propvar, &val);
+    ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+    ok(val == FALSE, "Unexpected value %d\n", val);
+
+    /* test integer conversion */
+    propvar.vt = VT_I4;
+    propvar.u.lVal = 0;
+    val = TRUE;
+    hr = PropVariantToBoolean(&propvar, &val);
+    ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+    ok(val == FALSE, "Unexpected value %d\n", val);
+
+    propvar.vt = VT_I4;
+    propvar.u.lVal = 1;
+    val = FALSE;
+    hr = PropVariantToBoolean(&propvar, &val);
+    ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+    ok(val == TRUE, "Unexpected value %d\n", val);
+
+    propvar.vt = VT_I4;
+    propvar.u.lVal = 67;
+    val = FALSE;
+    hr = PropVariantToBoolean(&propvar, &val);
+    ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+    ok(val == TRUE, "Unexpected value %d\n", val);
+
+    propvar.vt = VT_I4;
+    propvar.u.lVal = -67;
+    val = FALSE;
+    hr = PropVariantToBoolean(&propvar, &val);
+    ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+    ok(val == TRUE, "Unexpected value %d\n", val);
+
+    /* test string conversion */
+    propvar.vt = VT_LPWSTR;
+    propvar.u.pwszVal = str_0;
+    val = TRUE;
+    hr = PropVariantToBoolean(&propvar, &val);
+    ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+    ok(val == FALSE, "Unexpected value %d\n", val);
+
+    propvar.vt = VT_LPWSTR;
+    propvar.u.pwszVal = str_1;
+    val = FALSE;
+    hr = PropVariantToBoolean(&propvar, &val);
+    ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+    ok(val == TRUE, "Unexpected value %d\n", val);
+
+    propvar.vt = VT_LPWSTR;
+    propvar.u.pwszVal = str_7;
+    val = FALSE;
+    hr = PropVariantToBoolean(&propvar, &val);
+    ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+    ok(val == TRUE, "Unexpected value %d\n", val);
+
+    propvar.vt = VT_LPWSTR;
+    propvar.u.pwszVal = str_n7;
+    val = FALSE;
+    hr = PropVariantToBoolean(&propvar, &val);
+    ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+    ok(val == TRUE, "Unexpected value %d\n", val);
+
+    propvar.vt = VT_LPWSTR;
+    propvar.u.pwszVal = str_true;
+    val = FALSE;
+    hr = PropVariantToBoolean(&propvar, &val);
+    ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+    ok(val == TRUE, "Unexpected value %d\n", val);
+
+    propvar.vt = VT_LPWSTR;
+    propvar.u.pwszVal = str_true_case;
+    val = FALSE;
+    hr = PropVariantToBoolean(&propvar, &val);
+    ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+    ok(val == TRUE, "Unexpected value %d\n", val);
+
+    propvar.vt = VT_LPWSTR;
+    propvar.u.pwszVal = str_true2;
+    val = FALSE;
+    hr = PropVariantToBoolean(&propvar, &val);
+    ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+    ok(val == TRUE, "Unexpected value %d\n", val);
+
+    propvar.vt = VT_LPWSTR;
+    propvar.u.pwszVal = str_false;
+    val = TRUE;
+    hr = PropVariantToBoolean(&propvar, &val);
+    ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+    ok(val == FALSE, "Unexpected value %d\n", val);
+
+    propvar.vt = VT_LPWSTR;
+    propvar.u.pwszVal = str_false2;
+    val = TRUE;
+    hr = PropVariantToBoolean(&propvar, &val);
+    ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+    ok(val == FALSE, "Unexpected value %d\n", val);
+
+    propvar.vt = VT_LPWSTR;
+    propvar.u.pwszVal = str_true_space;
+    val = TRUE;
+    hr = PropVariantToBoolean(&propvar, &val);
+    ok(hr == DISP_E_TYPEMISMATCH, "Unexpected hr %#x.\n", hr);
+    ok(val == FALSE, "Unexpected value %d\n", val);
+
+    propvar.vt = VT_LPWSTR;
+    propvar.u.pwszVal = str_yes;
+    val = TRUE;
+    hr = PropVariantToBoolean(&propvar, &val);
+    ok(hr == DISP_E_TYPEMISMATCH, "Unexpected hr %#x.\n", hr);
+    ok(val == FALSE, "Unexpected value %d\n", val);
+
+    propvar.vt = VT_LPWSTR;
+    propvar.u.pwszVal = NULL;
+    val = TRUE;
+    hr = PropVariantToBoolean(&propvar, &val);
+    ok(hr == DISP_E_TYPEMISMATCH, "Unexpected hr %#x.\n", hr);
+    ok(val == FALSE, "Unexpected value %d\n", val);
+
+    /* VT_LPSTR */
+    propvar.vt = VT_LPSTR;
+    propvar.u.pszVal = (char *)"#TruE#";
+    val = TRUE;
+    hr = PropVariantToBoolean(&propvar, &val);
+    ok(hr == DISP_E_TYPEMISMATCH, "Unexpected hr %#x.\n", hr);
+    ok(val == FALSE, "Unexpected value %d\n", val);
+
+    propvar.vt = VT_LPSTR;
+    propvar.u.pszVal = (char *)"#TRUE#";
+    val = FALSE;
+    hr = PropVariantToBoolean(&propvar, &val);
+    ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+    ok(val == TRUE, "Unexpected value %d\n", val);
+
+    propvar.vt = VT_LPSTR;
+    propvar.u.pszVal = (char *)"tRUe";
+    val = FALSE;
+    hr = PropVariantToBoolean(&propvar, &val);
+    ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+    ok(val == TRUE, "Unexpected value %d\n", val);
+
+    propvar.vt = VT_LPSTR;
+    propvar.u.pszVal = (char *)"#FALSE#";
+    val = TRUE;
+    hr = PropVariantToBoolean(&propvar, &val);
+    ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+    ok(val == FALSE, "Unexpected value %d\n", val);
+
+    propvar.vt = VT_LPSTR;
+    propvar.u.pszVal = (char *)"fALSe";
+    val = TRUE;
+    hr = PropVariantToBoolean(&propvar, &val);
+    ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+    ok(val == FALSE, "Unexpected value %d\n", val);
+
+    propvar.vt = VT_LPSTR;
+    propvar.u.pszVal = (char *)"1";
+    val = FALSE;
+    hr = PropVariantToBoolean(&propvar, &val);
+    ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+    ok(val == TRUE, "Unexpected value %d\n", val);
+
+    propvar.vt = VT_LPSTR;
+    propvar.u.pszVal = (char *)"-1";
+    hr = PropVariantToBoolean(&propvar, &val);
+    ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+    ok(val == TRUE, "Unexpected value %d\n", val);
+}
+
 static void test_PropVariantChangeType_LPWSTR(void)
 {
     PROPVARIANT dest, src;
@@ -938,4 +1149,5 @@ START_TEST(propsys)
     test_PropVariantCompare();
     test_intconversions();
     test_PropVariantChangeType_LPWSTR();
+    test_PropVariantToBoolean();
 }