|
|
// csdrtcat.cxx
// This runs the following tests.
// Adds two classes catclsid1, catclsid2
// adds 3 categories
// 1 with 1 desc and locale id.
// 2 with 2 desc and locale id.
// 3 without 1 desc and locale id 2.
//
// register 2 categories in the req. list for catclsid1. (cat1, cat2)
// register 1 impl category in the impl list for catclsid1 (cat3)
//
// register 2 in the the impl for the catclsid2.(cat2, cat3)
//
// unregister 1 cat frm the req list for catclsid1 (cat2)
// register that one for impl list of catclsid1 (cat2)
//
//
// Info tests confirmations as well as tests.
//
// Enumcat result should be two. Match descriptions.
// EnumImplCategories of clsid1 should be 2. (cat2, cat3)
// EnumReqCategories of clsid2 should be zero.
//
// Enumclasses of categories with (req: cat1, cat3) (impl: cat2) should be two.
//
// GetCategoryDesc with the other locale id than the one used in EnumCat. cat2
// with any locale id cat3.
//
// IsClassOfCategories clsid1 impl cat2, req: cat1 answer should be S_OK
//
//
#include "csdrt.hxx"
extern BOOL fVerbose;
GUID catClsid1; GUID catClsid2; GUID testCatid1; GUID testCatid2; GUID testCatid3;
Sname testCatDesc1, testCatDesc2, testCatDesc21, testCatDesc3, TestCatClassDesc1, TestCatClassDesc2; Sname testCatPackName1, testCatPackName2; LCID TestCatLocale1, TestCatLocale2;
LPOLESTR testConstCatDesc1 = L"CS DRT Test Category Desc, 1 (Locale same as Thread)"; LPOLESTR testConstCatDesc2 = L"CS DRT Test Category Desc, 2 (Locale same as Thread)"; LPOLESTR testConstCatDesc21 = L"CS DRT Test Category Desc, 2 (Locale = Thread Locale + 1)"; LPOLESTR testConstCatDesc3 = L"CS DRT Test Category Desc, 3 (Locale = Thread Locale + 1)";
LPOLESTR testConstCatClassDesc1 = L"CS DRT Class id 1 for comcat test"; LPOLESTR testConstCatClassDesc2 = L"CS DRT Class id 2 for comcat test";
LPOLESTR testConstCatPackName1 = L"CS DRT Test Comcat Pack 1"; LPOLESTR testConstCatPackName2 = L"CS DRT Test Comcat Pack 2";
void InitCatTempNames() { CreateGuid(&catClsid1); CreateGuid(&catClsid2);
CreateGuid(&testCatid1); CreateGuid(&testCatid2); CreateGuid(&testCatid3);
CreateUnique(testCatDesc1, testConstCatDesc1); CreateUnique(testCatDesc2, testConstCatDesc2); CreateUnique(testCatDesc21, testConstCatDesc21); CreateUnique(testCatDesc3, testConstCatDesc3);
CreateUnique(TestCatClassDesc1, testConstCatClassDesc1); CreateUnique(TestCatClassDesc2, testConstCatClassDesc2);
TestCatLocale1 = GetThreadLocale(); TestCatLocale2 = 2*TestCatLocale1 + 1;
CreateUnique(testCatPackName1, testConstCatPackName1); CreateUnique(testCatPackName2, testConstCatPackName2); }
void ReleaseObj(GUID obj) { }
void ReleaseObj(CATEGORYINFO obj) { }
HRESULT CreateCatClasses(IClassAdmin *pIClassAdmin1, IClassAdmin *pIClassAdmin2) { // CLASSDETAIL ClassDetail;
// PACKAGEDETAIL PackageDetail;
HRESULT hr = S_OK;
// adding classes--------------------------------
InitCatTempNames();
// memset (&ClassDetail, NULL, sizeof (CLASSDETAIL));
// memcpy (&ClassDetail.Clsid, &catClsid1, sizeof (GUID));
//
// memset(&PackageDetail, 0, sizeof(PACKAGEDETAIL));
// PackageDetail.pActInfo->cClasses = 1;
// PackageDetail.pActInfo->pClasses = (CLASSDETAIL *)CoTaskMemAlloc(sizeof(CLASSDETAIL));
// PackageDetail.pActInfo->pClasses[0] = ClassDetail;
//
// hr = pIClassAdmin1->AddPackage(testCatPackName1, &PackageDetail);
// if (!SUCCEEDED(hr))
// {
// printf ("ERROR! 1. NewPackage() in CatTest returned 0x%x.\n", hr);
// return hr;
// }
//
// PackageDetail.pActInfo->pClasses[0].Clsid = catClsid2;
//
// if (pIClassAdmin2)
// hr = pIClassAdmin2->AddPackage(testCatPackName2, &PackageDetail);
// else
// hr = pIClassAdmin1->AddPackage(testCatPackName2, &PackageDetail);
//
// if (!SUCCEEDED(hr))
// {
// printf ("ERROR! 2. NewPackage() in CatTest returned 0x%x.\n", hr);
// return hr;
// }
return hr; }
HRESULT RegCategories(ICatRegister *pICatRegister1, ICatRegister *pICatRegister2) { HRESULT hr; CATEGORYINFO CategoryInfo;
// adding categories---------------------------
memset (&CategoryInfo, NULL, sizeof (CATEGORYINFO)); memcpy(&CategoryInfo.catid, &testCatid1, sizeof(GUID)); CategoryInfo.lcid = TestCatLocale1; wcscpy(CategoryInfo.szDescription, testCatDesc1);
hr = pICatRegister1->RegisterCategories(1, &CategoryInfo); if (FAILED(hr)) { printf("Error! 1. RegisterCategories in CatTest returned 0x%x.\n", hr); return hr; }
memset (&CategoryInfo, NULL, sizeof (CATEGORYINFO)); memcpy(&CategoryInfo.catid, &testCatid2, sizeof(GUID)); CategoryInfo.lcid = TestCatLocale1; wcscpy(CategoryInfo.szDescription, testCatDesc2);
hr = pICatRegister1->RegisterCategories(1, &CategoryInfo); if (FAILED(hr)) { printf("Error! 2. RegisterCategories in CatTest returned 0x%x.\n", hr); return hr; }
memset (&CategoryInfo, NULL, sizeof (CATEGORYINFO)); memcpy(&CategoryInfo.catid, &testCatid2, sizeof(GUID)); CategoryInfo.lcid = TestCatLocale2; wcscpy(CategoryInfo.szDescription, testCatDesc21);
hr = pICatRegister1->RegisterCategories(1, &CategoryInfo); if (FAILED(hr)) { printf("Error! 3. RegisterCategories in CatTest returned 0x%x.\n", hr); return hr; }
memset (&CategoryInfo, NULL, sizeof (CATEGORYINFO)); memcpy(&CategoryInfo.catid, &testCatid3, sizeof(GUID)); CategoryInfo.lcid = TestCatLocale2; wcscpy(CategoryInfo.szDescription, testCatDesc3);
if (pICatRegister2) hr = pICatRegister2->RegisterCategories(1, &CategoryInfo); else hr = pICatRegister1->RegisterCategories(1, &CategoryInfo);
if (FAILED(hr)) { printf("Error! 4. RegisterCategories in CatTest returned 0x%x.\n", hr); return hr; } return hr; }
HRESULT RegCategoriesWithClasses(ICatRegister *pICatRegister1, ICatRegister *pICatRegister2) { GUID guids[4]; HRESULT hr=S_OK; // registering implemented and required categories.--------------
guids[0] = testCatid1; guids[1] = testCatid2; hr = pICatRegister1->RegisterClassReqCategories(catClsid1, 2, guids); if (FAILED(hr)) { printf("Error! 1. RegisterClassReqCategories in CatTest returned 0x%x.\n", hr); return hr; }
hr = pICatRegister1->RegisterClassImplCategories(catClsid1, 1, &testCatid3); if (FAILED(hr)) { printf("Error! 1. RegisterClassImplCategories in CatTest returned 0x%x.\n", hr); return hr; }
guids[0] = testCatid2; guids[1] = testCatid3; if (pICatRegister2) hr = pICatRegister2->RegisterClassImplCategories(catClsid2, 2, guids); else hr = pICatRegister1->RegisterClassImplCategories(catClsid2, 2, guids);
if (FAILED(hr)) { printf("Error! 2. RegisterClassImplCategories in CatTest returned 0x%x.\n", hr); return hr; }
hr = pICatRegister1->UnRegisterClassReqCategories(catClsid1, 1, &testCatid2); if (FAILED(hr)) { printf("Error! 1. UnRegisterClassReqCategories in CatTest returned 0x%x.\n", hr); return hr; }
hr = pICatRegister1->RegisterClassImplCategories(catClsid1, 1, &testCatid2); if (FAILED(hr)) { printf("Error! 1. RegisterClassImplCategories in CatTest returned 0x%x.\n", hr); return hr; } return hr; } void VerbosePrintObj(CATEGORYINFO catinfo) { VerbosePrint("Description %S\n", catinfo.szDescription); }
void VerbosePrintObj(GUID guid) {
}
HRESULT DoEnumCatsOfClassesTest(ICatInformation *pICatInformation) { HRESULT hr=S_OK; IEnumGUID *pIEnumGUID = NULL; GUID guids[4]; LPOLESTR szDesc; ULONG got;
// Enumerating Implemented Categories-------------------------
hr = pICatInformation->EnumImplCategoriesOfClass(catClsid1, &pIEnumGUID); if (FAILED(hr)) { printf("Error! EnumImplCategoriesOfClass in CatTest returned 0x%x\n", hr); return hr; }
hr = EnumTests<IEnumGUID, GUID>(pIEnumGUID, 2, NULL, 0, 0, FALSE);
// Enumerating Required Categories-------------------------
hr = pICatInformation->EnumReqCategoriesOfClass(catClsid1, &pIEnumGUID); if (FAILED(hr)) { printf("Error! EnumImplCategoriesOfClass in CatTest returned 0x%x\n", hr); return hr; }
if (FAILED(hr)) { printf("Error! EnumReqCategoriesOfClass in CatTest returned 0x%x\n", hr); return hr; }
hr = EnumTests<IEnumGUID, GUID>(pIEnumGUID, 1, NULL, 0, 0, FALSE); return hr; }
HRESULT DoEnumClassesOfCats(ICatInformation *pICatInformation) { HRESULT hr=S_OK; IEnumGUID *pIEnumGUID = NULL; GUID guids[4]; ULONG got;
// Enumerating classes of categories--------------------------------
guids[0] = testCatid1; guids[1] = testCatid3; hr = pICatInformation->EnumClassesOfCategories(1, &testCatid2, 2, guids, &pIEnumGUID); if (FAILED(hr)) { printf("Error! EnumClassesOfCategories in CatTest returned 0x%x\n", hr); return hr; }
EnumTests<IEnumGUID, GUID>(pIEnumGUID, 2, NULL, 0, 0, FALSE); return hr; }
HRESULT CatCleanup(ICatRegister *pICatRegister1, ICatRegister *pICatRegister2) { HRESULT hr; // Removing the categories at the end of the test.-----------------
hr = pICatRegister1->UnRegisterCategories(1, &testCatid1); if (FAILED(hr)) printf ("ERROR! 1. UnRegisterCategories() in CatTest returned 0x%x.\n", hr);
hr = pICatRegister1->UnRegisterCategories(1, &testCatid2); if (FAILED(hr)) printf ("ERROR! 2. UnRegisterCategories() in CatTest returned 0x%x.\n", hr);
if (pICatRegister2) hr = pICatRegister2->UnRegisterCategories(1, &testCatid3); else hr = pICatRegister1->UnRegisterCategories(1, &testCatid3);
if (FAILED(hr)) printf ("ERROR! 3. UnRegisterCategories() in CatTest returned 0x%x.\n", hr); return hr; }
HRESULT CatClassCleanup(IClassAdmin *pIClassAdmin1, IClassAdmin *pIClassAdmin2) { HRESULT hr;
// Removing the classes and at the end of the test.--------------
// hr = pIClassAdmin1->RemovePackage(testCatPackName1, 0);
// if (FAILED(hr))
// printf ("ERROR! 1. RemovePackage() in CatTest returned 0x%x.\n", hr);
if (pIClassAdmin2) hr = pIClassAdmin2->RemovePackage(testCatPackName2, 0); else hr = pIClassAdmin1->RemovePackage(testCatPackName2, 0);
if (FAILED(hr)) printf ("ERROR! 2. RemovePackage() in CatTest returned 0x%x.\n", hr);
return hr; }
HRESULT DoCatTests(IClassAdmin *pIClassAdmin1, IClassAdmin *pIClassAdmin2) { HRESULT hr=S_OK, hr1=S_OK; CATEGORYINFO CategoryInfo; ICatRegister *pICatRegister1=NULL, *pICatRegister2=NULL; ICatInformation *pICatInformation = NULL; IEnumGUID *pIEnumGUID = NULL; GUID guids[4]; LPOLESTR szDesc; ULONG expected, got=0; IEnumCATEGORYINFO *pIEnumCATEGORYINFO = NULL;
VerbosePrint("Creating classes for category test\n\n"); hr = CreateCatClasses(pIClassAdmin1, pIClassAdmin2); if (FAILED(hr)) goto ReleaseAll;
//getting Icatregister interface--------------
hr = pIClassAdmin1->QueryInterface(IID_ICatRegister, (void **)&pICatRegister1); if (FAILED(hr)) { printf("Error! QueryInterface failed for ICatRegister in CatTest returned 0x%x.\n", hr); goto ReleaseAll; }
if (pIClassAdmin2) hr = pIClassAdmin2->QueryInterface(IID_ICatRegister, (void **)&pICatRegister2); if (FAILED(hr)) { printf("Error! QueryInterface failed for ICatRegister in CatTest returned 0x%x.\n", hr); goto ReleaseAll; }
// getting the ICatInformation pointer
hr = CoCreateInstance(CLSID_GblComponentCategoriesMgr, NULL, CLSCTX_INPROC, IID_ICatInformation, (void **)&pICatInformation); if (FAILED(hr)) { printf("**Error! QueryInterface failed for ICatInformation in comcat returned 0x%x.\n", hr); goto ReleaseAll; }
VerbosePrint("\nEnumerating Categories for category test before registering\n\n"); hr = pICatInformation->EnumCategories(TestCatLocale1, &pIEnumCATEGORYINFO); if (FAILED(hr)) { printf("**Error! EnumCategories failed for ICatInformation in comcat returned 0x%x.\n", hr); goto ReleaseAll; }
hr = EnumTests<IEnumCATEGORYINFO, CATEGORYINFO>(pIEnumCATEGORYINFO, 0, &got, 0, 0, FALSE);
if (FAILED(hr)) goto ReleaseAll;
VerbosePrint("\nRegistering Categories for category test\n\n"); hr = RegCategories(pICatRegister1, pICatRegister2); if (FAILED(hr)) goto ReleaseAll;
VerbosePrint("\nRegistering Categories with classes for category test\n\n"); hr = RegCategoriesWithClasses(pICatRegister1, pICatRegister2); if (FAILED(hr)) goto ReleaseAll;
VerbosePrint("\nEnumerating Categories for category test after registering\n\n"); hr = pICatInformation->EnumCategories(TestCatLocale1, &pIEnumCATEGORYINFO); if (FAILED(hr)) { printf("**Error! EnumCategories failed for ICatInformation in comcat returned 0x%x.\n", hr); goto ReleaseAll;
}
hr = EnumTests<IEnumCATEGORYINFO, CATEGORYINFO>(pIEnumCATEGORYINFO, got+3, NULL, 0, 0, FALSE); if (FAILED(hr)) goto ReleaseAll;
VerbosePrint("\nEnumerating Categories of the classes for category test\n\n"); hr = DoEnumCatsOfClassesTest(pICatInformation); if (FAILED(hr)) goto ReleaseAll;
VerbosePrint("\nEnumerating Classes of the categories for category test\n\n");
hr = DoEnumClassesOfCats(pICatInformation); if (FAILED(hr)) goto ReleaseAll;
VerbosePrint("\nTesting IsClassOfCategories for category test\n\n");
hr = pICatInformation->IsClassOfCategories(catClsid1, 1, &testCatid2, -1, NULL); // 1, &testCatid1);
if (hr != S_OK) { printf("Error! IsClassOfCategories in CatTest returned 0x%x\n", hr); goto ReleaseAll; }
// GetCategoryDesc------------------
VerbosePrint("\nCalling GetCategoryDesc for category test\n\n");
hr = pICatInformation->GetCategoryDesc(testCatid2, TestCatLocale2, &szDesc); if (FAILED(hr)) { printf("Error!1. GetCategoryDesc in CatTest returned 0x%x\n", hr); goto ReleaseAll; }
if (wcscmp(szDesc, testCatDesc21) != 0) { printf("Description not matching, Expected: \"%s\", got \"%s\"\n"); goto ReleaseAll; }
CoTaskMemFree(szDesc);
hr = pICatInformation->GetCategoryDesc(testCatid3, TestCatLocale2, &szDesc); if (FAILED(hr)) { printf("Error!2. GetCategoryDesc in CatTest returned 0x%x\n", hr); goto ReleaseAll; }
if (wcscmp(szDesc, testCatDesc3) != 0) { printf("Error!3. Description not matching, Expected: \"%s\", got \"%s\"\n"); goto ReleaseAll; }
CoTaskMemFree(szDesc);
VerbosePrint("\nCleaning up the classes and the categories for category test\n\n");
ReleaseAll: CatCleanup(pICatRegister1, pICatRegister2); CatClassCleanup(pIClassAdmin1, pIClassAdmin2);
if (pICatRegister1) pICatRegister1->Release();
if (pICatRegister2) pICatRegister2->Release();
if (pICatInformation) pICatInformation->Release(); return hr; }
|