|
|
//
// Author: DebiM
// Date: March 97. Revised for Beta2 in Nov 97.
// File: csdrtgc.cxx
//
// Class Store DRTs
//
// This source file contains DRTs for Class Store App Access
// CClassAccess::IClassAccess
//
//
// It tests the following Class Store functionality
//
// GetAppInfo()
// CsEnumApps()
//
//
//
//---------------------------------------------------------------------
#include "csdrt.hxx"
extern BOOL fVerbose; extern BOOL fMultiStore; extern IClassAccess *pIClassAccess;
extern GUID TestClsid1, TestClsid2, TestClsid3, TestClsid4, TestClsid5; extern Sname TestPackName4, TestFileExt1, TestFileExt4, TestMimeType2; extern Sname TestOtherProgID2, TestProgId1, TestProgId3; extern WCHAR szLookupPackageName [];
extern BOOL fClassInfoVerify;
//
// Routines to verify that the App Package returned is as expected.
//
HRESULT AssertPackage(INSTALLINFO *pInstallInfo) { // Code Path should be present
VerifyPackage (pInstallInfo->pszScriptPath != NULL, L"Script Path Missing"); // Script should be present
#if 0
VerifyPackage (pInstallInfo->cScriptLen != 0, L"Script Missing"); for (UINT i=0; i < pInstallInfo->cScriptLen; i++) { VerifyPackage (pInstallInfo->pScript[i] == i%128, L"Script Content Wrong"); } #endif
// ReleaseInstallInfo(pInstallInfo);
return S_OK; }
void ReleaseObj(PACKAGEDISPINFO obj) { ReleasePackageInfo(&obj); }
void VerbosePrintObj(PACKAGEDISPINFO obj) { }
//
// Routine to call GetAppInfo() with different class spec.
//
HRESULT CallClassSpecInfo (uCLSSPEC *pclsspec, INSTALLINFO *pInstallInfo) { QUERYCONTEXT QryContext; HRESULT hr;
QryContext.dwContext = CLSCTX_INPROC_SERVER + CLSCTX_LOCAL_SERVER; QryContext.Locale = GetThreadLocale(); GetDefaultPlatform(&QryContext.Platform); QryContext.dwVersionHi = 0; QryContext.dwVersionLo = 0;
hr = pIClassAccess->GetAppInfo( pclsspec, &QryContext, pInstallInfo);
if (!SUCCEEDED(hr)) return hr;
PrintInstallInfo(pInstallInfo);
return hr; }
//
// This routine calls GetAppInfo() for a FileExtension
//
HRESULT LookupByFileext (LPOLESTR pExt, INSTALLINFO *pInstallInfo) { HRESULT hr; uCLSSPEC clsspec;
clsspec.tyspec = TYSPEC_FILEEXT; clsspec.tagged_union.pFileExt = pExt;
hr = CallClassSpecInfo(&clsspec, pInstallInfo); if (!SUCCEEDED(hr)) { VerbosePrint("....... GetClassSpecInfo (EXT=%S) returned 0x%x\n", pExt, hr); return hr; } return S_OK; }
//
// This routine calls GetAppInfo() for a Clsid
//
HRESULT LookupByClsid (GUID Clsid, INSTALLINFO *pInstallInfo) { HRESULT hr; uCLSSPEC clsspec;
clsspec.tyspec = TYSPEC_CLSID; memcpy(&clsspec.tagged_union.clsid, &Clsid, sizeof(GUID));
hr = CallClassSpecInfo(&clsspec, pInstallInfo);
if (!SUCCEEDED(hr)) { VerbosePrint("....... GetClassSpecInfo (CLSID=) returned 0x%x\n", hr); return hr; } return S_OK; }
//
// This routine calls GetAppInfo() for a MimeType
//
HRESULT LookupByMimeType (LPOLESTR pMimeType, INSTALLINFO *pInstallInfo) { HRESULT hr; uCLSSPEC clsspec;
clsspec.tyspec = TYSPEC_MIMETYPE; clsspec.tagged_union.pMimeType = pMimeType;
hr = CallClassSpecInfo(&clsspec, pInstallInfo);
if (!SUCCEEDED(hr)) { VerbosePrint("....... GetClassSpecInfo (MimeType=%S) returned 0x%x\n", pMimeType, hr); return hr; } return S_OK; }
//
// This routine calls GetAppInfo() for a Progid
//
HRESULT LookupByProgid (LPOLESTR pProgId, INSTALLINFO *pInstallInfo) { HRESULT hr; uCLSSPEC clsspec;
clsspec.tyspec = TYSPEC_PROGID; clsspec.tagged_union.pProgId = pProgId;
hr = CallClassSpecInfo (&clsspec, pInstallInfo);
if (!SUCCEEDED(hr)) { VerbosePrint("....... GetClassSpecInfo (ProgId=%S) returned 0x%x\n", pProgId, hr); return hr; } return S_OK; }
//
// This routine calls GetAppInfo() by Name of Package
//
HRESULT LookupByName (LPOLESTR pName, INSTALLINFO *pInstallInfo) { HRESULT hr; uCLSSPEC clsspec;
clsspec.tyspec = TYSPEC_PACKAGENAME; clsspec.tagged_union.pPackageName = pName;
hr = CallClassSpecInfo (&clsspec, pInstallInfo); if (!SUCCEEDED(hr)) { VerbosePrint("....... GetClassSpecInfo (PackageName=%S) returned 0x%x\n", pName, hr); return hr; } return S_OK; }
//
// This routine calls GetClassInfo() for a TypeLib
//
HRESULT LookupByTlbid (GUID TlbId, INSTALLINFO *pInstallInfo) { HRESULT hr; uCLSSPEC clsspec;
clsspec.tyspec = TYSPEC_TYPELIB; memcpy(&clsspec.tagged_union.typelibID, &TlbId, sizeof(GUID));
hr = CallClassSpecInfo (&clsspec, pInstallInfo); if (!SUCCEEDED(hr)) { VerbosePrint("....... GetClassSpecInfo (Tlb) returned 0x%x\n", hr); return hr; } return S_OK; }
void HandleEnumResult(UINT cElt, UINT cFound, HRESULT hr, PACKAGEDISPINFO PackageInfo[]) { if (fVerbose) { if ((hr != S_OK) && (hr != S_FALSE)) { printf ("..........Next(%d) returned error = 0x%x.\n", cElt, hr); } else { printf ("..........Next(%d) returned %d packages. hr = 0x%x.\n", cElt, cFound, hr); for (UINT i = 0; i < cFound; i++) { printf ("..........PackageInfo[%d].pszPackageName = %S, Flags=%d\n", i, PackageInfo[i].pszPackageName, PackageInfo[i].dwActFlags); ReleasePackageInfo(&PackageInfo[i]); } } } }
PACKAGEDISPINFO PackageDisp[3];
// DoCoEnumApps Test
HRESULT DoCoEnumAppsTest() { PACKAGEDISPINFO PackageInfo[30]; ULONG cFound; HRESULT hr; IEnumPackage *pIEnumPackage = NULL;
VerbosePrint("...... CsEnumApps(All Platform & Locale).\n"); hr = CsEnumApps( NULL, NULL, NULL, APPINFO_ALLLOCALE | APPINFO_ALLPLATFORM, &pIEnumPackage );
if (hr != S_OK) { printf ("CsEnumApps returned error = 0x%x.\n", hr); return hr; }
memset (&PackageInfo[0], 0, sizeof(PACKAGEDISPINFO) * 30);
VerbosePrint("......... Next(6)\n"); hr = pIEnumPackage->Next(6, &PackageInfo[0], &cFound ); HandleEnumResult(6, cFound, hr, &PackageInfo[0]);
VerbosePrint("......... Next(4)\n"); hr = pIEnumPackage->Next(4, &PackageInfo[0], &cFound ); HandleEnumResult(4, cFound, hr, &PackageInfo[0]);
pIEnumPackage->Release();
pIEnumPackage = NULL;
VerbosePrint("...... CsEnumApps(All Platform & Locale, Wildcard=*2*2*)\n"); hr = CsEnumApps( L"*2*2*", NULL, NULL, APPINFO_ALLLOCALE | APPINFO_ALLPLATFORM, &pIEnumPackage );
if (hr != S_OK) { printf ("CsEnumApps returned error = 0x%x.\n", hr); return hr; }
if (fClassInfoVerify) { DWORD cgot; EnumTests(pIEnumPackage, 3, &cgot, PackageDisp, 3, TRUE); } else { memset (&PackageInfo[0], 0, sizeof(PACKAGEDISPINFO) * 30); VerbosePrint("......... Next(6)\n"); hr = pIEnumPackage->Next(6, &PackageInfo[0], &cFound ); HandleEnumResult(6, cFound, hr, &PackageInfo[0]); } pIEnumPackage->Release();
pIEnumPackage = NULL;
VerbosePrint("...... CsEnumApps(ASSIGNED & MSI ONLY)\n"); hr = CsEnumApps( NULL, NULL, NULL, APPINFO_ASSIGNED | APPINFO_MSI, &pIEnumPackage );
if (hr != S_OK) { printf ("CsEnumApps returned error = 0x%x.\n", hr); return hr; }
if (fClassInfoVerify) { DWORD cgot; EnumTests(pIEnumPackage, 3, &cgot, PackageDisp, 3, TRUE); } else { memset (&PackageInfo[0], 0, sizeof(PACKAGEDISPINFO) * 30); VerbosePrint("......... Next(6)\n"); hr = pIEnumPackage->Next(6, &PackageInfo[0], &cFound ); HandleEnumResult(6, cFound, hr, &PackageInfo[0]); }
pIEnumPackage->Release(); pIEnumPackage = NULL;
VerbosePrint("...... CsEnumApps(PUBLISHED & VISIBLE ONLY)\n"); hr = CsEnumApps( NULL, NULL, NULL, APPINFO_PUBLISHED | APPINFO_VISIBLE, &pIEnumPackage );
if (hr != S_OK) { printf ("CsEnumApps returned error = 0x%x.\n", hr); return hr; }
if (fClassInfoVerify) { DWORD cgot; EnumTests(pIEnumPackage, 3, &cgot, PackageDisp, 3, TRUE); } else { memset (&PackageInfo[0], 0, sizeof(PACKAGEDISPINFO) * 30); VerbosePrint("......... Next(6)\n"); hr = pIEnumPackage->Next(6, &PackageInfo[0], &cFound ); HandleEnumResult(6, cFound, hr, &PackageInfo[0]); } pIEnumPackage->Release(); return hr; }
extern PACKAGEDETAIL PackageDetail1, PackageDetail2, PackageDetail3, PackageDetail4;
HRESULT DoClassInfoTest() {
INSTALLINFO InstallInfo; HRESULT hr = S_OK, hr2;
//By Package Name
VerbosePrint("...... Lookup by Package Name.\n"); hr = LookupByName (TestPackName4, &InstallInfo); if (fClassInfoVerify) if (!Compare(InstallInfo, *(PackageDetail3.pInstallInfo))) printf("!!!Members of InstallInfo not matching\n\n");
ReleaseInstallInfo(&InstallInfo);
//FileExt1
VerbosePrint("...... Lookup by FileExt1.\n"); hr2 = LookupByFileext (TestFileExt1, &InstallInfo); if (SUCCEEDED(hr2)) { // Check expected values
//
hr2 = AssertPackage(&InstallInfo); if (fClassInfoVerify) if (!Compare(InstallInfo, *(PackageDetail1.pInstallInfo))) printf("!!!Members of InstallInfo not matching\n\n"); } if (!SUCCEEDED(hr2)) hr = hr2;
ReleaseInstallInfo(&InstallInfo);
//Clsid1
VerbosePrint("...... Lookup by Clsid1.\n"); hr2 = LookupByClsid (TestClsid1, &InstallInfo); if (SUCCEEDED(hr2)) { // Check expected values
//
hr2 = AssertPackage(&InstallInfo); if (fClassInfoVerify) if ((!Compare(InstallInfo, *(PackageDetail1.pInstallInfo))) && (!Compare(InstallInfo, *(PackageDetail2.pInstallInfo)))) printf("!!!Members of InstallInfo not matching\n\n"); } if (!SUCCEEDED(hr2)) hr = hr2;
ReleaseInstallInfo(&InstallInfo);
//ProgId1
VerbosePrint("...... Lookup by ProgId1.\n"); hr2 = LookupByProgid (TestProgId1, &InstallInfo); if (SUCCEEDED(hr2)) { //
// Check expected values
//
hr2 = AssertPackage(&InstallInfo); if (fClassInfoVerify) if ((!Compare(InstallInfo, *(PackageDetail1.pInstallInfo))) && (!Compare(InstallInfo, *(PackageDetail2.pInstallInfo)))) printf("!!!Members of InstallInfo not matching\n\n"); } if (!SUCCEEDED(hr2)) hr = hr2;
ReleaseInstallInfo(&InstallInfo);
//Clsid2
VerbosePrint("...... Lookup by Clsid2.\n"); hr2 = LookupByClsid (TestClsid2, &InstallInfo); if (SUCCEEDED(hr2)) { //
// Check expected values
//
hr2 = AssertPackage(&InstallInfo); if (fClassInfoVerify) if (!Compare(InstallInfo, *(PackageDetail1.pInstallInfo))) printf("!!!Members of InstallInfo not matching\n\n"); } if (!SUCCEEDED(hr2)) hr = hr2;
ReleaseInstallInfo(&InstallInfo);
//ProgId3
VerbosePrint("...... Lookup by ProgId3.\n"); hr2 = LookupByProgid (TestProgId3, &InstallInfo); if (SUCCEEDED(hr2)) { //
// Check expected values
//
hr2 = AssertPackage(&InstallInfo); if (fClassInfoVerify) if (!Compare(InstallInfo, *(PackageDetail2.pInstallInfo))) printf("!!!Members of InstallInfo not matching\n\n"); } if (!SUCCEEDED(hr2)) hr = hr2;
ReleaseInstallInfo(&InstallInfo);
//TestOtherProgID2
VerbosePrint("...... Lookup by OtherProgId2.\n"); hr2 = LookupByProgid (TestOtherProgID2, &InstallInfo); if (SUCCEEDED(hr2)) { //
// Check expected values
//
hr2 = AssertPackage(&InstallInfo); if (fClassInfoVerify) if ((!Compare(InstallInfo, *(PackageDetail1.pInstallInfo))) && (!Compare(InstallInfo, *(PackageDetail2.pInstallInfo)))) printf("!!!Members of InstallInfo not matching\n\n"); } if (!SUCCEEDED(hr2)) hr = hr2;
ReleaseInstallInfo(&InstallInfo);
if (!fMultiStore) return hr;
VerbosePrint(".... Looking in Second Store.\n");
//FileExt4
VerbosePrint("...... Lookup by FileExt4.\n"); hr = LookupByFileext (TestFileExt4, &InstallInfo); if (SUCCEEDED(hr)) { // Check expected values
//
hr2 = AssertPackage(&InstallInfo); if (fClassInfoVerify) if ((!Compare(InstallInfo, *(PackageDetail1.pInstallInfo))) && (!Compare(InstallInfo, *(PackageDetail3.pInstallInfo)))) printf("!!!Members of InstallInfo not matching\n\n"); } ReleaseInstallInfo(&InstallInfo);
// Clsid4
// Should get two packages now !!
VerbosePrint("...... Lookup by Clsid4.\n"); hr2 = LookupByClsid (TestClsid4, &InstallInfo); if (SUCCEEDED(hr2)) { //
// Check expected values
//
hr2 = AssertPackage(&InstallInfo); } if (!SUCCEEDED(hr2)) hr = hr2;
ReleaseInstallInfo(&InstallInfo);
// Tlbid1
VerbosePrint("...... Lookup by Tlbid1.\n"); hr2 = LookupByTlbid (TestClsid1, &InstallInfo); if (SUCCEEDED(hr2)) { //
// Check expected values
//
hr2 = AssertPackage(&InstallInfo); } if (!SUCCEEDED(hr2)) hr = hr2;
ReleaseInstallInfo(&InstallInfo);
// Tlbid2
VerbosePrint("...... Lookup by Tlbid2.\n"); hr2 = LookupByTlbid (TestClsid2, &InstallInfo); if (SUCCEEDED(hr2)) { //
// Check expected values
//
//AssertPackage(&InstallInfo);
} if (!SUCCEEDED(hr2)) hr = hr2;
ReleaseInstallInfo(&InstallInfo);
// Clsid5
VerbosePrint("...... Lookup by Clsid5.\n"); hr2 = LookupByClsid (TestClsid5, &InstallInfo); if (SUCCEEDED(hr2)) { //
// Check expected values
//
hr2 = AssertPackage(&InstallInfo); } if (!SUCCEEDED(hr2)) hr = hr2;
ReleaseInstallInfo(&InstallInfo); return hr; }
|