Module: wine Branch: master Commit: d3ce29449b0caf39ee6e96a2da52cf23a670e956 URL: http://source.winehq.org/git/wine.git/?a=commit;h=d3ce29449b0caf39ee6e96a2da...
Author: Hans Leidekker hans@codeweavers.com Date: Wed Aug 26 08:45:53 2015 +0200
msi: Implement Installer::SummaryInformation.
---
dlls/msi/automation.c | 36 ++++++++++++++++++++++++++++++++---- dlls/msi/tests/automation.c | 33 ++++++++++++++++++++++++++++++++- 2 files changed, 64 insertions(+), 5 deletions(-)
diff --git a/dlls/msi/automation.c b/dlls/msi/automation.c index 01765cb..e974387 100644 --- a/dlls/msi/automation.c +++ b/dlls/msi/automation.c @@ -1832,13 +1832,41 @@ static HRESULT InstallerImpl_SummaryInformation(WORD wFlags, EXCEPINFO* pExcepInfo, UINT* puArgErr) { - if (!(wFlags & DISPATCH_METHOD)) + UINT ret; + HRESULT hr; + MSIHANDLE hsuminfo; + IDispatch *dispatch; + VARIANTARG varg0, varg1; + + if (!(wFlags & DISPATCH_PROPERTYGET)) return DISP_E_MEMBERNOTFOUND;
- FIXME("\n"); + VariantInit(&varg0); + hr = DispGetParam(pDispParams, 0, VT_BSTR, &varg0, puArgErr); + if (FAILED(hr)) + return hr;
- VariantInit(pVarResult); - return S_OK; + VariantInit(&varg1); + hr = DispGetParam(pDispParams, 1, VT_I4, &varg1, puArgErr); + if (FAILED(hr)) + return hr; + + V_VT(pVarResult) = VT_DISPATCH; + + ret = MsiGetSummaryInformationW(0, V_BSTR(&varg0), V_I4(&varg1), &hsuminfo); + if (ret != ERROR_SUCCESS) + { + hr = DISP_E_EXCEPTION; + goto done; + } + + hr = create_summaryinfo(hsuminfo, &dispatch); + if (SUCCEEDED(hr)) + V_DISPATCH(pVarResult) = dispatch; + +done: + VariantClear(&varg0); + return hr; }
static HRESULT InstallerImpl_UILevel(WORD wFlags, diff --git a/dlls/msi/tests/automation.c b/dlls/msi/tests/automation.c index 016b1a2..e31527f 100644 --- a/dlls/msi/tests/automation.c +++ b/dlls/msi/tests/automation.c @@ -1128,6 +1128,25 @@ static HRESULT Installer_UILevelPut(int level) return invoke(pInstaller, "UILevel", DISPATCH_PROPERTYPUT, &dispparams, &varresult, VT_EMPTY); }
+static HRESULT Installer_SummaryInformation(BSTR PackagePath, int UpdateCount, IDispatch **pSumInfo) +{ + VARIANT varresult; + VARIANTARG vararg[2]; + DISPPARAMS dispparams = {vararg, NULL, sizeof(vararg)/sizeof(VARIANTARG), 0}; + HRESULT hr; + + VariantInit(&vararg[1]); + V_VT(&vararg[1]) = VT_BSTR; + V_BSTR(&vararg[1]) = SysAllocString(PackagePath); + VariantInit(&vararg[0]); + V_VT(&vararg[0]) = VT_I4; + V_I4(&vararg[0]) = UpdateCount; + + hr = invoke(pInstaller, "SummaryInformation", DISPATCH_PROPERTYGET, &dispparams, &varresult, VT_DISPATCH); + *pSumInfo = V_DISPATCH(&varresult); + return hr; +} + static HRESULT Session_Installer(IDispatch *pSession, IDispatch **pInst) { VARIANT varresult; @@ -2602,7 +2621,7 @@ static void test_Installer(void) static const WCHAR szIntegerDataException[] = { 'I','n','t','e','g','e','r','D','a','t','a',',','F','i','e','l','d',0 }; WCHAR szPath[MAX_PATH]; HRESULT hr; - IDispatch *pSession = NULL, *pDatabase = NULL, *pRecord = NULL, *pStringList = NULL; + IDispatch *pSession = NULL, *pDatabase = NULL, *pRecord = NULL, *pStringList = NULL, *pSumInfo = NULL; int iValue, iCount;
if (!pInstaller) return; @@ -2678,6 +2697,18 @@ static void test_Installer(void) IDispatch_Release(pDatabase); }
+ /* Installer::SummaryInformation */ + hr = Installer_SummaryInformation(szPath, 0, &pSumInfo); + ok(hr == S_OK, "Installer_SummaryInformation failed, hresult 0x%08x\n", hr); + if (hr == S_OK) + { + test_SummaryInfo(pSumInfo, summary_info, sizeof(summary_info)/sizeof(msi_summary_info), TRUE); + IDispatch_Release(pSumInfo); + } + + hr = Installer_SummaryInformation(NULL, 0, &pSumInfo); + ok(hr == DISP_E_EXCEPTION, "Installer_SummaryInformation failed, hresult 0x%08x\n", hr); + /* Installer::RegistryValue */ test_Installer_RegistryValue();