Files
reactos/modules/rostests/apitests/shell32/SHShouldShowWizards.cpp
Carl J. Bialorucki b86422cd4b [SHELL32_APITEST] Several fixes (#8266)
Fix the shell32 apitests so that they pass on Windows Server 2003 - Windows 10. Many of these fixes are for Vista+, but the most important fixes are for ShellExecCmdLine and FindExecutable which had issues closing windows after tests and deleting test files. Failing to delete these files breaks the other test (i.e. running ShellExecCmdLine would break FindExecutable and vis-versa.)
2025-07-29 14:06:13 -06:00

123 lines
4.3 KiB
C++

/*
* PROJECT: ReactOS API tests
* LICENSE: GPL-2.0+ (https://spdx.org/licenses/GPL-2.0+)
* PURPOSE: Test for SHShouldShowWizards
* COPYRIGHT: Copyright 2025 Katayama Hirofumi MZ (katayama.hirofumi.mz@gmail.com)
*/
#include "shelltest.h"
#include <undocshell.h>
#include <versionhelpers.h>
class CDummyClass
: public IServiceProvider
, public IShellBrowser
{
public:
CDummyClass() { }
IUnknown *GetUnknown()
{
return static_cast<IServiceProvider *>(this);
}
// *** IUnknown methods ***
STDMETHODIMP QueryInterface(REFIID riid, VOID **ppvObj) override
{
if (riid == IID_IUnknown || riid == IID_IServiceProvider)
{
AddRef();
*ppvObj = static_cast<IServiceProvider *>(this);
return S_OK;
}
return E_NOINTERFACE;
}
STDMETHODIMP_(ULONG) AddRef() override
{
return 1;
}
STDMETHODIMP_(ULONG) Release() override
{
return 1;
}
// *** IOleWindow methods ***
STDMETHODIMP GetWindow(HWND *phwnd) override { return E_NOTIMPL; }
STDMETHODIMP ContextSensitiveHelp(BOOL fEnterMode) override { return E_NOTIMPL; }
// *** IShellBrowser methods ***
STDMETHODIMP InsertMenusSB(HMENU hmenuShared, LPOLEMENUGROUPWIDTHS lpMenuWidths) override { return E_NOTIMPL; }
STDMETHODIMP SetMenuSB(HMENU hmenuShared, HOLEMENU holemenuRes, HWND hwndActiveObject) override { return E_NOTIMPL; }
STDMETHODIMP RemoveMenusSB(HMENU hmenuShared) override { return E_NOTIMPL; }
STDMETHODIMP SetStatusTextSB(LPCOLESTR pszStatusText) override { return E_NOTIMPL; }
STDMETHODIMP EnableModelessSB(BOOL fEnable) override { return E_NOTIMPL; }
STDMETHODIMP TranslateAcceleratorSB(MSG *pmsg, WORD wID) override { return E_NOTIMPL; }
STDMETHODIMP BrowseObject(LPCITEMIDLIST pidl, UINT wFlags) override { return E_NOTIMPL; }
STDMETHODIMP GetViewStateStream(DWORD grfMode, IStream **ppStrm) override { return E_NOTIMPL; }
STDMETHODIMP GetControlWindow(UINT id, HWND *lphwnd) override { return E_NOTIMPL; }
STDMETHODIMP SendControlMsg(UINT id, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT *pret) override { return E_NOTIMPL; }
STDMETHODIMP QueryActiveShellView(struct IShellView **ppshv) override { return E_NOTIMPL; }
STDMETHODIMP OnViewWindowActive(struct IShellView *ppshv) override { return E_NOTIMPL; }
STDMETHODIMP SetToolbarItems(LPTBBUTTON lpButtons, UINT nButtons, UINT uFlags) override { return E_NOTIMPL; }
// *** IServiceProvider methods ***
STDMETHODIMP QueryService(REFGUID guidService, REFIID riid, void **ppvObject) override
{
if (riid == IID_IShellBrowser)
{
AddRef();
*ppvObject = static_cast<IShellBrowser *>(this);
return S_OK;
}
return E_FAIL;
}
};
static VOID SetShowWizardsTEST(BOOL bValue)
{
DWORD dwValue = bValue;
SHRegSetUSValueW(L"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced",
L"ShowWizardsTEST", REG_DWORD, &dwValue, sizeof(dwValue), SHREGSET_FORCE_HKCU);
}
START_TEST(SHShouldShowWizards)
{
// Save old values
SHELLSTATE state;
SHGetSetSettings(&state, SSF_WEBVIEW, FALSE);
BOOL bOldWebView = state.fWebView;
BOOL bOldTestValue = SHRegGetBoolUSValueW(
L"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced",
L"ShowWizardsTEST",
FALSE,
FALSE);
CDummyClass dummy;
HRESULT hr;
state.fWebView = FALSE;
SHGetSetSettings(&state, SSF_WEBVIEW, TRUE);
SetShowWizardsTEST(FALSE);
hr = SHShouldShowWizards(dummy.GetUnknown());
ok_hex(hr, (GetNTVersion() >= _WIN32_WINNT_WIN8) ? S_FALSE : S_OK);
SetShowWizardsTEST(TRUE);
hr = SHShouldShowWizards(dummy.GetUnknown());
ok_hex(hr, (GetNTVersion() >= _WIN32_WINNT_WIN8) ? S_FALSE : S_OK);
state.fWebView = TRUE;
SHGetSetSettings(&state, SSF_WEBVIEW, TRUE);
SetShowWizardsTEST(FALSE);
hr = SHShouldShowWizards(dummy.GetUnknown());
ok_hex(hr, S_FALSE);
SetShowWizardsTEST(TRUE);
hr = SHShouldShowWizards(dummy.GetUnknown());
ok_hex(hr, (GetNTVersion() >= _WIN32_WINNT_WIN7) ? S_FALSE : S_OK);
// Restore old values
state.fWebView = bOldWebView;
SHGetSetSettings(&state, SSF_WEBVIEW, TRUE);
SetShowWizardsTEST(bOldTestValue);
}