--- /dev/null
+/*
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/*
+ * Return FALSE if no default mail client is installed.
+ */
+static BOOL HaveDefaultMailClient(void)
+{
+ HKEY Key;
+ DWORD Type, Size;
+ BYTE Buffer[64];
+ BOOL HasHKCUKey;
+
+ /* We check the default value of both HKCU\Software\Clients\Mail and
+ * HKLM\Software\Clients\Mail, if one of them is present there is a default
+ * mail client. If neither of these keys is present, we might be running
+ * on an old Windows version (W95, NT4) and we assume a default mail client
+ * might be available. Only if one of the keys is present, but there is
+ * no default value do we assume there is no default client. */
+ if (RegOpenKeyExA(HKEY_CURRENT_USER, "SOFTWARE\\Clients\\Mail", 0, KEY_QUERY_VALUE, &Key) == ERROR_SUCCESS)
+ {
+ Size = sizeof(Buffer);
+ /* Any return value besides ERROR_FILE_NOT_FOUND (including success,
+ ERROR_MORE_DATA) indicates the value is present */
+ if (RegQueryValueExA(Key, NULL, NULL, &Type, Buffer, &Size) != ERROR_FILE_NOT_FOUND)
+ {
+ RegCloseKey(Key);
+ return TRUE;
+ }
+ RegCloseKey(Key);
+ HasHKCUKey = TRUE;
+ }
+ else
+ HasHKCUKey = FALSE;
+
+ if (RegOpenKeyExA(HKEY_LOCAL_MACHINE, "SOFTWARE\\Clients\\Mail", 0, KEY_QUERY_VALUE, &Key) == ERROR_SUCCESS)
+ {
+ Size = sizeof(Buffer);
+ if (RegQueryValueExA(Key, NULL, NULL, &Type, Buffer, &Size) != ERROR_FILE_NOT_FOUND)
+ {
+ RegCloseKey(Key);
+ return TRUE;
+ }
+ RegCloseKey(Key);
+ return FALSE;
+ }
+
+ return ! HasHKCUKey;
+}
#include "initguid.h"
#include "mapiutil.h"
#include "mapitags.h"
+#include "mapi32_test.h"
static HMODULE hMapi32 = 0;
}
res = pUlPropSize(&pv);
- ok(res == exp || broken(!res) /* Win9x */,
+ ok(res == exp,
"pt= %d: Expected %d, got %d\n", pt, exp, res);
}
}
pvRight.Value.lpszA = szFull;
bRet = pFPropContainsProp(&pvLeft, &pvRight, FL_FULLSTRING);
- ok(bRet == TRUE || broken(!bRet) /* Win9x */, "(full,full)[] match failed\n");
+ ok(bRet == TRUE, "(full,full)[] match failed\n");
pvRight.Value.lpszA = szPrefix;
bRet = pFPropContainsProp(&pvLeft, &pvRight, FL_FULLSTRING);
ok(bRet == FALSE, "(full,prefix)[] match failed\n");
bRet = pFPropContainsProp(&pvLeft, &pvRight, FL_PREFIX);
ok(bRet == TRUE, "(full,prefix)[PREFIX] match failed\n");
bRet = pFPropContainsProp(&pvLeft, &pvRight, FL_SUBSTRING);
- ok(bRet == TRUE || broken(!bRet) /* Win9x */, "(full,prefix)[SUBSTRING] match failed\n");
+ ok(bRet == TRUE, "(full,prefix)[SUBSTRING] match failed\n");
pvRight.Value.lpszA = szPrefixLower;
bRet = pFPropContainsProp(&pvLeft, &pvRight, FL_PREFIX);
ok(bRet == FALSE, "(full,prefixlow)[PREFIX] match failed\n");
bRet = pFPropContainsProp(&pvLeft, &pvRight, FL_SUBSTRING);
ok(bRet == FALSE, "(full,prefixlow)[SUBSTRING] match failed\n");
bRet = pFPropContainsProp(&pvLeft, &pvRight, FL_PREFIX|FL_IGNORECASE);
- ok(bRet == TRUE || broken(!bRet) /* Win9x */, "(full,prefixlow)[PREFIX|IGNORECASE] match failed\n");
+ ok(bRet == TRUE, "(full,prefixlow)[PREFIX|IGNORECASE] match failed\n");
bRet = pFPropContainsProp(&pvLeft, &pvRight, FL_SUBSTRING|FL_IGNORECASE);
- ok(bRet == TRUE || broken(!bRet) /* Win9x */, "(full,prefixlow)[SUBSTRING|IGNORECASE] match failed\n");
+ ok(bRet == TRUE, "(full,prefixlow)[SUBSTRING|IGNORECASE] match failed\n");
pvRight.Value.lpszA = szSubstring;
bRet = pFPropContainsProp(&pvLeft, &pvRight, FL_FULLSTRING);
ok(bRet == FALSE, "(full,substr)[] match failed\n");
bRet = pFPropContainsProp(&pvLeft, &pvRight, FL_PREFIX);
ok(bRet == FALSE, "(full,substr)[PREFIX] match failed\n");
bRet = pFPropContainsProp(&pvLeft, &pvRight, FL_SUBSTRING);
- ok(bRet == TRUE || broken(!bRet) /* Win9x */, "(full,substr)[SUBSTRING] match failed\n");
+ ok(bRet == TRUE, "(full,substr)[SUBSTRING] match failed\n");
pvRight.Value.lpszA = szSubstringLower;
bRet = pFPropContainsProp(&pvLeft, &pvRight, FL_PREFIX);
ok(bRet == FALSE, "(full,substrlow)[PREFIX] match failed\n");
bRet = pFPropContainsProp(&pvLeft, &pvRight, FL_PREFIX|FL_IGNORECASE);
ok(bRet == FALSE, "(full,substrlow)[PREFIX|IGNORECASE] match failed\n");
bRet = pFPropContainsProp(&pvLeft, &pvRight, FL_SUBSTRING|FL_IGNORECASE);
- ok(bRet == TRUE || broken(!bRet) /* Win9x */, "(full,substrlow)[SUBSTRING|IGNORECASE] match failed\n");
+ ok(bRet == TRUE, "(full,substrlow)[SUBSTRING|IGNORECASE] match failed\n");
pvRight.Value.lpszA = szFullLower;
bRet = pFPropContainsProp(&pvLeft, &pvRight, FL_FULLSTRING|FL_IGNORECASE);
- ok(bRet == TRUE || broken(!bRet) /* Win9x */, "(full,fulllow)[IGNORECASE] match failed\n");
+ ok(bRet == TRUE, "(full,fulllow)[IGNORECASE] match failed\n");
pvLeft.ulPropTag = pvRight.ulPropTag = PT_BINARY;
pvLeft.Value.bin.lpb = (LPBYTE)szFull;
pvLeft.Value.bin.cb = pvRight.Value.bin.cb = strlen(szFull);
bRet = pFPropContainsProp(&pvLeft, &pvRight, FL_FULLSTRING);
- ok(bRet == TRUE || broken(!bRet) /* Win9x */, "bin(full,full)[] match failed\n");
+ ok(bRet == TRUE, "bin(full,full)[] match failed\n");
pvRight.Value.bin.lpb = (LPBYTE)szPrefix;
pvRight.Value.bin.cb = strlen(szPrefix);
bRet = pFPropContainsProp(&pvLeft, &pvRight, FL_FULLSTRING);
ok(bRet == FALSE, "bin(full,prefix)[] match failed\n");
bRet = pFPropContainsProp(&pvLeft, &pvRight, FL_PREFIX);
- ok(bRet == TRUE || broken(!bRet) /* Win9x */, "bin(full,prefix)[PREFIX] match failed\n");
+ ok(bRet == TRUE, "bin(full,prefix)[PREFIX] match failed\n");
bRet = pFPropContainsProp(&pvLeft, &pvRight, FL_SUBSTRING);
- ok(bRet == TRUE || broken(!bRet) /* Win9x */, "bin(full,prefix)[SUBSTRING] match failed\n");
+ ok(bRet == TRUE, "bin(full,prefix)[SUBSTRING] match failed\n");
pvRight.Value.bin.lpb = (LPBYTE)szPrefixLower;
pvRight.Value.bin.cb = strlen(szPrefixLower);
bRet = pFPropContainsProp(&pvLeft, &pvRight, FL_PREFIX);
bRet = pFPropContainsProp(&pvLeft, &pvRight, FL_PREFIX);
ok(bRet == FALSE, "bin(full,substr)[PREFIX] match failed\n");
bRet = pFPropContainsProp(&pvLeft, &pvRight, FL_SUBSTRING);
- ok(bRet == TRUE || broken(!bRet) /* Win9x */, "bin(full,substr)[SUBSTRING] match failed\n");
+ ok(bRet == TRUE, "bin(full,substr)[SUBSTRING] match failed\n");
pvRight.Value.bin.lpb = (LPBYTE)szSubstringLower;
pvRight.Value.bin.cb = strlen(szSubstringLower);
bRet = pFPropContainsProp(&pvLeft, &pvRight, FL_PREFIX);
}
bRet = pFPropCompareProp(&pvLeft, FPCProp_Results[j].relOp, &pvRight);
- ok(bRet == bExp || broken(!bRet) /* Win9x */,
+ ok(bRet == bExp,
"pt %d (%d,%d,%s): expected %d, got %d\n", ptTypes[i],
FPCProp_Results[j].lVal, FPCProp_Results[j].rVal,
relops[FPCProp_Results[j].relOp], bExp, bRet);
}
iRet = pLPropCompareProp(&pvLeft, &pvRight);
- ok(iRet == iExp || broken(iRet == 0) /* Win9x */,
+ ok(iRet == iExp,
"pt %d (%d,%d): expected %d, got %d\n", ptTypes[i],
LPCProp_Results[j].lVal, LPCProp_Results[j].rVal, iExp, iRet);
}
pvProp.ulPropTag = ptTypes[i];
pRet = pPpropFindProp(&pvProp, 1u, ptTypes[i]);
- ok(pRet == &pvProp || broken(pRet != &pvProp) /* Win9x */,
+ ok(pRet == &pvProp,
"PpropFindProp[%d]: Didn't find existing propery\n",
ptTypes[i]);
pvProp.ulPropTag = PROP_TAG(ptTypes[i], 1u);
pRet = pLpValFindProp(PROP_TAG(ptTypes[i], 1u), 1u, &pvProp);
- ok(pRet == &pvProp || broken(pRet != &pvProp) /* Win9x */,
+ ok(pRet == &pvProp,
"LpValFindProp[%d]: Didn't find existing propery id/type\n",
ptTypes[i]);
ptTypes[i]);
pRet = pLpValFindProp(PROP_TAG(PT_NULL, 1u), 1u, &pvProp);
- ok(pRet == &pvProp || broken(pRet != &pvProp) /* Win9x */,
+ ok(pRet == &pvProp,
"LpValFindProp[%d]: Didn't find existing propery id\n",
ptTypes[i]);
}
if (bBad)
ok(res != 0, "pt= %d: Expected non-zero, got 0\n", pt);
else
- ok(res == 0 || broken(res) /* Win9x */,
+ ok(res == 0,
"pt= %d: Expected zero, got %d\n", pt, res);
}
}
if (bBad)
ok(res != 0, "pt= %d: Expected non-zero, got 0\n", pt);
else
- ok(res == 0 || broken(res) /* Win9x */,
+ ok(res == 0,
"pt= %d: Expected zero, got %d\n", pt, res);
}
}
if (bBad)
ok(res != 0, "pt= %d: Expected non-zero, got 0\n", pt);
else
- ok(res == 0 || broken(res) /* Win9x */,
+ ok(res == 0,
"pt= %d: Expected zero, got %d\n", pt, res);
}
}
{
SCODE ret;
+ if (!HaveDefaultMailClient())
+ {
+ win_skip("No default mail client installed\n");
+ return;
+ }
+
if(!InitFuncPtrs())
{
win_skip("Needed functions are not available\n");
FreeLibrary(hMapi32);
return;
}
+ else if ((ret == E_FAIL) && (GetLastError() == ERROR_INVALID_HANDLE))
+ {
+ win_skip("ScInitMapiUtil doesn't work on some Win98 and WinME systems\n");
+ FreeLibrary(hMapi32);
+ return;
+ }
test_PropCopyMore();
test_UlPropSize();