Something went wrong. Try again.
Reactos
Something went wrong. Try again.
C++
at master
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248/* * PROJECT: ReactOS API Tests * LICENSE: GPL-2.0+ (https://spdx.org/licenses/GPL-2.0+) * PURPOSE: Test for SHEnumClassesOfCategories * COPYRIGHT: Copyright 2019 Serge Gautherie <reactos-git_serge_171003@gautherie.fr> */
/*TODO, if they make sense:* Test more than 1 Implemented/Required. And maybe not "matching" ones.* Check pEnumGUID after S_OK cases.*/
#include <apitest.h>
#include <shlobj.h>#include <atlbase.h>
typedef HRESULT (WINAPI *SHENUMCLASSESOFCATEGORIES)(ULONG cImplemented, CATID *pImplemented, ULONG cRequired, CATID *pRequired, IEnumGUID **out);
static SHENUMCLASSESOFCATEGORIES pSHEnumClassesOfCategories;
START_TEST(SHEnumClassesOfCategories){ HRESULT hr; HMODULE hbrowseui; CATID CategoryImplemented, CategoryRequired; CComPtr<IEnumGUID> pEnumGUID;
// Set up.
hbrowseui = LoadLibraryA("browseui.dll"); ok(hbrowseui != NULL, "LoadLibraryA() failed\n"); if (!hbrowseui) { skip("No dll\n"); return; }
pSHEnumClassesOfCategories = (SHENUMCLASSESOFCATEGORIES)GetProcAddress(hbrowseui, MAKEINTRESOURCEA(136)); ok(pSHEnumClassesOfCategories != NULL, "GetProcAddress() failed\n"); if (!pSHEnumClassesOfCategories) { skip("No function, as on NT 6.1+\n"); return; }
// Test (mostly) invalid arguments.
// Implemented, '(ULONG)-1, NULL'. // Keep this odd case, as ReactOS used to "implement" it.
// hr = pSHEnumClassesOfCategories((ULONG)-1, NULL, 0, NULL, NULL); // ok_long(hr, E_INVALIDARG); hr = pSHEnumClassesOfCategories((ULONG)-1, NULL, 0, NULL, &pEnumGUID); ok_long(hr, E_INVALIDARG);
CategoryRequired = CATID_DeskBand; // hr = pSHEnumClassesOfCategories((ULONG)-1, NULL, 1, &CategoryRequired, NULL); // ok_long(hr, E_INVALIDARG); hr = pSHEnumClassesOfCategories((ULONG)-1, NULL, 1, &CategoryRequired, &pEnumGUID); ok_long(hr, E_INVALIDARG);
// Implemented, '0, NULL'.
// hr = pSHEnumClassesOfCategories(0, NULL, 0, NULL, NULL); // ok_long(hr, E_INVALIDARG); hr = pSHEnumClassesOfCategories(0, NULL, 0, NULL, &pEnumGUID); ok_long(hr, E_INVALIDARG);
// CategoryRequired = CATID_DeskBand; // hr = pSHEnumClassesOfCategories(0, NULL, 1, &CategoryRequired, NULL); // ok_long(hr, E_INVALIDARG); // The following case duplicates a later one. // hr = pSHEnumClassesOfCategories(0, NULL, 1, &CategoryRequired, &pEnumGUID); // ok_long(hr, S_OK); // ok(CategoryRequired == CATID_DeskBand, "CategoryRequired was modified\n"); // pEnumGUID = NULL;
// Implemented, '0, &CategoryImplemented'.
CategoryImplemented = CATID_DeskBand; // hr = pSHEnumClassesOfCategories(0, &CategoryImplemented, 0, NULL, NULL); // ok_long(hr, E_INVALIDARG); hr = pSHEnumClassesOfCategories(0, &CategoryImplemented, 0, NULL, &pEnumGUID); ok_long(hr, E_INVALIDARG);
CategoryRequired = CATID_DeskBand; // hr = pSHEnumClassesOfCategories(0, &CategoryImplemented, 1, &CategoryRequired, NULL); // ok_long(hr, E_INVALIDARG); hr = pSHEnumClassesOfCategories(0, &CategoryImplemented, 1, &CategoryRequired, &pEnumGUID); ok_long(hr, S_OK); ok(CategoryImplemented == CATID_DeskBand, "CategoryImplemented was modified\n"); ok(CategoryRequired == CATID_DeskBand, "CategoryRequired was modified\n"); pEnumGUID = NULL;
CategoryRequired = CATID_InfoBand; // hr = pSHEnumClassesOfCategories(0, &CategoryImplemented, 1, &CategoryRequired, NULL); // ok_long(hr, E_INVALIDARG); hr = pSHEnumClassesOfCategories(0, &CategoryImplemented, 1, &CategoryRequired, &pEnumGUID); ok_long(hr, S_OK); ok(CategoryImplemented == CATID_DeskBand, "CategoryImplemented was modified\n"); ok(CategoryRequired == CATID_InfoBand, "CategoryRequired was modified\n"); pEnumGUID = NULL;
// Implemented, '1, NULL'.
// hr = pSHEnumClassesOfCategories(1, NULL, 0, NULL, NULL); // ok_long(hr, E_INVALIDARG); hr = pSHEnumClassesOfCategories(1, NULL, 0, NULL, &pEnumGUID); ok_long(hr, E_INVALIDARG);
CategoryRequired = CATID_DeskBand; // hr = pSHEnumClassesOfCategories(1, NULL, 1, &CategoryRequired, NULL); // ok_long(hr, E_INVALIDARG); hr = pSHEnumClassesOfCategories(1, NULL, 1, &CategoryRequired, &pEnumGUID); ok_long(hr, E_INVALIDARG);
// Required, '0, &CategoryRequired'.
CategoryRequired = CATID_DeskBand;
CategoryImplemented = CATID_DeskBand; // hr = pSHEnumClassesOfCategories(1, &CategoryImplemented, 0, &CategoryRequired, NULL); // ok_long(hr, E_INVALIDARG); hr = pSHEnumClassesOfCategories(1, &CategoryImplemented, 0, &CategoryRequired, &pEnumGUID); ok_long(hr, S_OK); ok(CategoryImplemented == CATID_DeskBand, "CategoryImplemented was modified\n"); ok(CategoryRequired == CATID_DeskBand, "CategoryRequired was modified\n"); pEnumGUID = NULL;
CategoryImplemented = CATID_InfoBand; // hr = pSHEnumClassesOfCategories(1, &CategoryImplemented, 0, &CategoryRequired, NULL); // ok_long(hr, E_INVALIDARG); hr = pSHEnumClassesOfCategories(1, &CategoryImplemented, 0, &CategoryRequired, &pEnumGUID); ok_long(hr, S_OK); ok(CategoryImplemented == CATID_InfoBand, "CategoryImplemented was modified\n"); ok(CategoryRequired == CATID_DeskBand, "CategoryRequired was modified\n"); pEnumGUID = NULL;
// Required, '1, NULL'.
// hr = pSHEnumClassesOfCategories(0, NULL, 1, NULL, NULL); // ok_long(hr, E_INVALIDARG); hr = pSHEnumClassesOfCategories(0, NULL, 1, NULL, &pEnumGUID); ok_long(hr, E_INVALIDARG);
CategoryImplemented = CATID_DeskBand; // hr = pSHEnumClassesOfCategories(1, &CategoryImplemented, 1, NULL, NULL); // ok_long(hr, E_INVALIDARG); hr = pSHEnumClassesOfCategories(1, &CategoryImplemented, 1, NULL, &pEnumGUID); ok_long(hr, E_INVALIDARG);
// Out, 'NULL'. // Previous similar checks are commented out, for usual use.
CategoryImplemented = CATID_DeskBand; hr = pSHEnumClassesOfCategories(1, &CategoryImplemented, 0, NULL, NULL); ok_long(hr, E_INVALIDARG);
CategoryRequired = CATID_DeskBand; hr = pSHEnumClassesOfCategories(1, &CategoryImplemented, 1, &CategoryRequired, NULL); ok_long(hr, E_INVALIDARG);
// Test success. // CATID_* from sdk/include/psdk/shlguid.h. // See also modules/rostests/winetests/shlwapi/clsid.c.
// Each CATID, as Implemented.
CategoryImplemented = CATID_BrowsableShellExt; hr = pSHEnumClassesOfCategories(1, &CategoryImplemented, 0, NULL, &pEnumGUID); ok_long(hr, S_OK); ok(CategoryImplemented == CATID_BrowsableShellExt, "CategoryImplemented was modified\n"); pEnumGUID = NULL;
CategoryImplemented = CATID_BrowseInPlace; hr = pSHEnumClassesOfCategories(1, &CategoryImplemented, 0, NULL, &pEnumGUID); ok_long(hr, S_OK); ok(CategoryImplemented == CATID_BrowseInPlace, "CategoryImplemented was modified\n"); pEnumGUID = NULL;
CategoryImplemented = CATID_DeskBand; hr = pSHEnumClassesOfCategories(1, &CategoryImplemented, 0, NULL, &pEnumGUID); ok_long(hr, S_OK); ok(CategoryImplemented == CATID_DeskBand, "CategoryImplemented was modified\n"); pEnumGUID = NULL;
CategoryImplemented = CATID_InfoBand; hr = pSHEnumClassesOfCategories(1, &CategoryImplemented, 0, NULL, &pEnumGUID); ok_long(hr, S_OK); ok(CategoryImplemented == CATID_InfoBand, "CategoryImplemented was modified\n"); pEnumGUID = NULL;
CategoryImplemented = CATID_CommBand; hr = pSHEnumClassesOfCategories(1, &CategoryImplemented, 0, NULL, &pEnumGUID); ok_long(hr, S_OK); ok(CategoryImplemented == CATID_CommBand, "CategoryImplemented was modified\n"); pEnumGUID = NULL;
// Each CATID, as Required.
CategoryRequired = CATID_BrowsableShellExt; hr = pSHEnumClassesOfCategories(0, NULL, 1, &CategoryRequired, &pEnumGUID); ok_long(hr, S_OK); ok(CategoryRequired == CATID_BrowsableShellExt, "CategoryRequired was modified\n"); pEnumGUID = NULL;
CategoryRequired = CATID_BrowseInPlace; hr = pSHEnumClassesOfCategories(0, NULL, 1, &CategoryRequired, &pEnumGUID); ok_long(hr, S_OK); ok(CategoryRequired == CATID_BrowseInPlace, "CategoryRequired was modified\n"); pEnumGUID = NULL;
CategoryRequired = CATID_DeskBand; hr = pSHEnumClassesOfCategories(0, NULL, 1, &CategoryRequired, &pEnumGUID); ok_long(hr, S_OK); ok(CategoryRequired == CATID_DeskBand, "CategoryRequired was modified\n"); pEnumGUID = NULL;
CategoryRequired = CATID_InfoBand; hr = pSHEnumClassesOfCategories(0, NULL, 1, &CategoryRequired, &pEnumGUID); ok_long(hr, S_OK); ok(CategoryRequired == CATID_InfoBand, "CategoryRequired was modified\n"); pEnumGUID = NULL;
CategoryRequired = CATID_CommBand; hr = pSHEnumClassesOfCategories(0, NULL, 1, &CategoryRequired, &pEnumGUID); ok_long(hr, S_OK); ok(CategoryRequired == CATID_CommBand, "CategoryRequired was modified\n"); pEnumGUID = NULL;
// Same CATID, as Implemented and Required.
CategoryImplemented = CATID_DeskBand; CategoryRequired = CATID_DeskBand; hr = pSHEnumClassesOfCategories(1, &CategoryImplemented, 1, &CategoryRequired, &pEnumGUID); ok_long(hr, S_OK); ok(CategoryImplemented == CATID_DeskBand, "CategoryImplemented was modified\n"); ok(CategoryRequired == CATID_DeskBand, "CategoryRequired was modified\n"); pEnumGUID = NULL;
// Clean up.
ok(FreeLibrary(hbrowseui) != 0, "FreeLibrary() failed\n");}