--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/contentstorage/casrv/cawidgetscanner/tsrc/t_cawidgetscanner/src/t_cawidgetscanner.cpp Thu Sep 16 12:11:40 2010 +0100
@@ -0,0 +1,1025 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+/*
+ * T_cahswidgetscanner.cpp
+ *
+ * Created on: 2009-09-16
+ * Author:
+ */
+
+// CLASS HEADER
+
+
+#include <ecom/ecom.h>
+#include <QScopedPointer>
+#include <utf.h>
+#include <xml/dom/xmlengdocument.h>
+#include <XQConversions>
+#include <usif/sif/sifcommon.h>
+#include <usif/sif/sif.h>
+#include <xmlengelement.h>
+#include <driveinfo.h>
+
+#include "t_cawidgetscanner.h"
+#include "cawidgetscannertestutils.h"
+#include "waitactive.h"
+#include "casrvengutils.h"
+#include "castorageproxy.h"
+#include "casrvmanager.h"
+#include "casrvplugin.h"
+#include "cainnerentry.h"
+#include "cainnerquery.h"
+#include "caarraycleanup.inl"
+#include "testconsts.h"
+#include "cadef.h"
+#include "castorage_global.h"
+
+#include "cawidgetscannerparser.h"
+#include "cawidgetstoragehandler.h"
+#include "cawidgetscannerplugin.h"
+#include "cawidgetscannerdef.h"
+#include "WidgetScannerUtils.h"
+
+
+#include "t_cainstaller.h"
+
+const TUid KHsWidgetPluginUid = {0x20026FB1};
+const TInt installedUid = 0x20053785;
+
+_LIT8( KSisxMimeType, "x-epoc/x-sisx-app" );
+_LIT( KTestLibrary, "C:\\private\\20022F35\\import\\widgetregistry\\20053785\\testwidget" );
+_LIT8( KWidgetUID, "testwidgetprovider.dll" );
+_LIT( KWidgetLibrary2, "C:\\private\\20022F35\\import\\widgetregistry\\20053785\\testwidget22" );
+_LIT( KWidgetLibrary3, "C:\\private\\20022F35\\import\\widgetregistry\\20053785\\testwidget33" );
+
+_LIT( KWidget1PackageName, "c:\\testing\\data\\Installs\\validwidget1.SISX" );
+_LIT( KWidget2PackageName, "c:\\testing\\data\\Installs\\validwidget2.SISX" );
+_LIT( KWidget3PackageName, "c:\\testing\\data\\Installs\\validwidget3.SISX" );
+_LIT( KWidget4PackageName, "c:\\testing\\data\\Installs\\validwidget4.SISX" );
+_LIT( KWidget1ManifestName, "C:\\private\\20022F35\\import\\widgetregistry\\20053785\\validwidget1.manifest" );
+_LIT( KWidget2ManifestName, "C:\\private\\20022F35\\import\\widgetregistry\\20053785\\validwidget2.manifest" );
+_LIT( KWidget3ManifestName, "C:\\private\\20022F35\\import\\widgetregistry\\20053785\\validwidget3.manifest" );
+_LIT( KWidget4ManifestName, "C:\\private\\20022F35\\import\\widgetregistry\\20053785\\validwidget4.manifest" );
+_LIT( KWidgetQmFolder, "c:\\resource\\qt\\translations\\" );
+_LIT( KWidgetQmFolderAndFile, "c:\\resource\\qt\\translations\\" );
+_LIT( KWidgetQmFile, "c:\\testing\\data\\t_cawidgetscanner\\widgettranslation_en_GB.qm" );
+_LIT( KWidgetUri1, "testwidget" );
+_LIT( KWidgetUri2, "testwidget22" );
+_LIT( KWidgetUri3, "testwidget33" );
+_LIT( KWidgetUri4, "testwidget44" );
+_LIT( KTranslationFileNameAsInManifest, "widgettranslation" );
+
+template <typename RClass>
+struct RClassDeleter
+{
+ static inline void cleanup(RClass *ptr)
+ {
+ ptr->Close();
+ }
+};
+
+typedef QScopedPointer<RBuf,
+ RClassDeleter<RBuf> > RBufGuard;
+typedef QScopedPointer<RBuf8,
+ RClassDeleter<RBuf8> > RBuf8Guard;
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void T_CaWidgetScanner::WaitL(TInt aMicroSec)
+ {
+ CWaitActive* wait = CWaitActive::NewL();
+ wait->Wait(aMicroSec);
+ delete wait;
+ }
+
+void T_CaWidgetScanner::initTestCase()
+ {
+ const TUid KWidgetHandlerPluginUid = {0x20028707};
+ TRAPD(err,
+ iTestUtils = CTestUtils::NewL();
+ iTestUtils->CopyDb();
+
+ // remove hswidget
+ iStorage = CCaStorageProxy::NewL();
+ iSrvEngUtils = CCaSrvEngUtils::NewL();
+ iScr = new Usif::RSoftwareComponentRegistry;
+ User::LeaveIfError(iScr->Connect());
+
+ iFs.Connect();
+ iImportPath.CreateL( KMaxPath );
+
+ createImportDirectoryL();
+
+ iInstaller = T_CaInstaller::NewL();
+ TPluginParams params;
+ params.engUtils = iSrvEngUtils;
+ params.storageProxy = iStorage;
+ params.softwareRegistry = iScr;
+ iPlugin = iTestUtils->LoadPluginL( KWidgetHandlerPluginUid, ¶ms);
+
+ );
+ }
+
+void T_CaWidgetScanner::cleanupTestCase()
+ {
+ QTest::qWait(5000);
+
+ iTestUtils->RemoveL(KTestDbDest);
+ delete iPlugin;
+ delete iInstaller;
+ delete iStorage;
+ iStorage = NULL;
+ delete iTestUtils;
+ iTestUtils = NULL;
+ delete iSrvEngUtils;
+ iSrvEngUtils = NULL;
+ iScr->Close();
+ delete iScr;
+ iScr = NULL;
+ iFs.Close();
+ REComSession::FinalClose();
+ iImportPath.Close();
+ iWidgetScanFolder.Close();
+
+ iWidgetScanFile1.Close();
+ }
+
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void T_CaWidgetScanner::init()
+ {
+ }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void T_CaWidgetScanner::cleanup()
+ {
+ QTest::qWait(100);
+ }
+
+
+
+void T_CaWidgetScanner::createImportDirectoryL()
+ {
+ //create "parsed" directory if it doesn't exist yet;
+ // create directory on C: drive
+ iWidgetScanFolder.Close();
+ iWidgetScanFile1.Close();
+ iWidgetScanFolder.CreateL(KMaxPath);
+ iWidgetScanFile1.CreateL(KMaxPath);
+ iWidgetScanFolder.Append( KPrivate );
+ iWidgetScanFolder.Append( KHSWidgetScanFolder );
+ iWidgetScanFile1.Append(iWidgetScanFolder);
+ iWidgetScanFile1.Append(KManifestFile1);
+ }
+
+//
+// TESTS --------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+
+void T_CaWidgetScanner::testPluginNewL()
+{
+//Check only if plugin was created correctly
+ QVERIFY( iPlugin != NULL);
+}
+
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+
+
+void T_CaWidgetScanner::testAddWidget()
+ {
+ bool widgetExistsInStorage(false);
+ TInt err(KErrNone);
+
+
+ TRAP_IGNORE(iInstaller->InstallL(KWidget1PackageName));
+
+ QTest::qWait(3000);
+
+ TRAP_IGNORE(widgetExistsInStorage = ( iTestUtils->WidgetExistsInStorageL(
+ KAttrWidgetLibrary, KTestLibrary, iStorage ) != EFalse ));
+
+ // clean after test
+ TRAP_IGNORE(iInstaller->UninstallL(KWidget1ManifestName))
+ QTest::qWait(3000);
+
+ QVERIFY(widgetExistsInStorage);
+ }
+
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void T_CaWidgetScanner::testUpdateWidget()
+ {
+ TInt err(KErrNone);
+
+ TRAP(err,
+ testUpdateWidgetTrapped()
+ );
+ }
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void T_CaWidgetScanner::testUpdateWidgetTrapped()
+ {
+ TInt err(KErrNone);
+
+ TInt expectedCount(0);
+ TInt actualCount(0);
+ bool widgetAExistsInStorage(false);
+ bool widgetBExistsInStorage(false);
+
+ iInstaller->InstallL(KWidget2PackageName);
+
+ QTest::qWait(3000);
+
+ expectedCount = iTestUtils->WidgetsCountL(iStorage);
+
+ widgetAExistsInStorage = (iTestUtils->WidgetExistsInStorageL(
+ KAttrWidgetLibrary, KWidgetLibrary2, iStorage) != FALSE);
+
+
+ iInstaller->InstallL(KWidget3PackageName);
+ QTest::qWait(3000);
+
+ widgetBExistsInStorage = (iTestUtils->WidgetExistsInStorageL(
+ KAttrWidgetUri, KWidgetUri2, iStorage) != FALSE);
+
+ actualCount = iTestUtils->WidgetsCountL(iStorage);
+ TRAP_IGNORE(iInstaller->UninstallL(KWidget2ManifestName))
+ QTest::qWait(3000);
+ TRAP_IGNORE(iInstaller->UninstallL(KWidget3ManifestName))
+ QTest::qWait(3000);
+
+ QCOMPARE(err, KErrNone);
+ QVERIFY(widgetAExistsInStorage);
+ QVERIFY(widgetBExistsInStorage);
+ QCOMPARE(actualCount, expectedCount);
+ }
+
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void T_CaWidgetScanner::testRemoveMmcWidget()
+ {
+ TInt err(KErrNone);
+ TInt id(KErrNotFound);
+ bool widgetExistsInStorage(false);
+ bool mmcIdAttributeSet1(false);
+ bool mmcIdAttributeSet2(false);
+
+ TRAP(err,
+
+ //test
+ iInstaller->InstallL(KWidget1PackageName);
+ QTest::qWait(3000);
+
+ id = AppendMmcIdL(_L("TestWidget"));
+
+ mmcIdAttributeSet1 = MmcAttributeSetL(id);
+
+ // after unistall mmc id should be removed
+ iInstaller->UninstallL(KWidget1ManifestName);
+
+ QTest::qWait(3000);
+
+ mmcIdAttributeSet2 = MmcAttributeSetL(id);
+
+ );
+
+ QCOMPARE(err, KErrNone);
+ QVERIFY(mmcIdAttributeSet1);
+ QVERIFY(!mmcIdAttributeSet2);
+ }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void T_CaWidgetScanner::testUpdateTheSameWidget()
+ {
+ TInt err(KErrNone);
+ TRAP(err,
+ testUpdateTheSameWidgetTrapped()
+ );
+
+ }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void T_CaWidgetScanner::testUpdateTheSameWidgetTrapped()
+ {
+ _LIT( KWText, "TestWidget" );
+ TUint flags0(0U);
+ TUint flags1(0U);
+ TUint flags2(0U);
+ TInt err(KErrNone);
+ TInt expectedCount(0);
+ TInt actualCount(0);
+
+ iInstaller->InstallL( KWidget1PackageName );
+
+ QTest::qWait(3000);
+
+ flags0 = iTestUtils->GetWidgetFlagsL( KWText, iStorage );
+
+ expectedCount = iTestUtils->WidgetsCountL( iStorage );
+
+ CCaWidgetDescription* widget = iTestUtils->GetWidgetEntryL( KWText, iStorage );
+
+ if (widget == NULL)
+ {
+ User::Leave(KErrNotFound);
+ }
+
+ CleanupStack::PushL( widget );
+ CCaInnerEntry* innerEntry = widget->GetEntryLC();
+ iStorage->TouchL( innerEntry );
+ QTest::qWait( 500 );
+
+ flags1 = iTestUtils->GetWidgetFlagsL( KWText, iStorage );
+
+ iInstaller->InstallL( KWidget1PackageName );
+ QTest::qWait(3000);
+
+ flags2 = iTestUtils->GetWidgetFlagsL( KWText, iStorage );
+
+ actualCount = iTestUtils->WidgetsCountL(iStorage);
+
+ CleanupStack::PopAndDestroy( innerEntry );
+ CleanupStack::PopAndDestroy( widget );
+
+
+ // clean after test
+ iInstaller->UninstallL(KWidget1ManifestName);
+ QTest::qWait(3000);
+// QCOMPARE(err, KErrNone);
+ QVERIFY( ~(flags0 & EUsed) );
+ QVERIFY( (flags1 & EUsed) );
+ QVERIFY( ~(flags2 & EUsed) );
+ QCOMPARE(actualCount, expectedCount);
+ }
+
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void T_CaWidgetScanner::testUpdateMmcRemoveInsertTrapped()
+ {
+ _LIT( KWTextCanNotTranslate, "txt_applib_subtitle_downloads" );
+ TPluginParams params;
+ params.engUtils = 0;
+ params.storageProxy = iStorage;
+ params.softwareRegistry = iScr;
+ _LIT( KWTextTranslated, "Downloads" );
+ TUint flags0(0U);
+ TUint flags1(0U);
+ TUint flags2(0U);
+ TUint flags3(0U);
+ TInt err(KErrNone);
+
+
+
+ iTestUtils->Copy( KWidgetQmFile, KWidgetQmFolder );
+
+ CCaWidgetStorageHandler* handler = CCaWidgetStorageHandler::NewL(
+ iStorage, *iScr, iFs );
+
+ iInstaller->InstallL( KWidget2PackageName );
+ QTest::qWait(3000);
+ //get translated widget
+ RBuf widgetName;
+ widgetName.CreateL( KWTextTranslated );
+ CCaWidgetDescription* widget = iTestUtils->GetWidgetEntryL(
+ KWTextTranslated, iStorage );
+ if( !widget )
+ {
+ widgetName.Close();
+ widgetName.CreateL( KWTextCanNotTranslate );
+ //qm file has not found
+ widget = iTestUtils->GetWidgetEntryL(
+ KWTextCanNotTranslate, iStorage );
+ }
+ flags0 = iTestUtils->GetWidgetFlagsL( widgetName, iStorage );
+ CleanupStack::PushL( widget );
+ CCaInnerEntry* innerEntry = widget->GetEntryLC();
+ iStorage->TouchL( innerEntry );
+ QTest::qWait( 500 );
+
+ flags1 = iTestUtils->GetWidgetFlagsL( widgetName, iStorage );
+
+ CCaWidgetDescription* widget2 = iTestUtils->GetWidgetEntryL( widgetName, iStorage );
+ CleanupStack::PushL( widget2 );
+
+ // set missing
+ handler->SetMissingFlagL( widget2 );
+ flags2 = iTestUtils->GetWidgetFlagsL( widgetName, iStorage );
+
+ iInstaller->InstallL( KWidget2PackageName );
+ QTest::qWait( 4000 );
+
+ flags3 = iTestUtils->GetWidgetFlagsL( widgetName, iStorage );
+ widgetName.Close();
+ CleanupStack::PopAndDestroy( widget2 );
+ CleanupStack::PopAndDestroy( innerEntry );
+ CleanupStack::PopAndDestroy( widget );
+ iTestUtils->RemoveL( KWidgetQmFolderAndFile );
+
+
+ // clean after test
+ iInstaller->UninstallL(KWidget2ManifestName);
+
+ QTest::qWait(3000);
+ QCOMPARE(err, KErrNone);
+ QVERIFY( ~(flags0 & EUsed) );
+ QVERIFY( flags1 & EUsed );
+ QVERIFY( ~(flags1 & EMissing) );
+ QVERIFY( flags2 & EUsed );
+ QVERIFY( flags2 & EMissing );
+ QVERIFY( flags3 & ~EUsed );
+ QVERIFY( flags3 & ~EMissing );
+ }
+
+void T_CaWidgetScanner::testUpdateMmcRemoveInsert()
+ {
+ TInt err(KErrNone);
+ TRAP(err,
+ testUpdateMmcRemoveInsertTrapped()
+ );
+ }
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void T_CaWidgetScanner::testRemoveWidget()
+ {
+ TInt err(KErrNone);
+ bool widgetExistedInStorage(false);
+ bool widgetRemovedFromStorage(false);
+
+
+ TRAP(err,
+
+ iInstaller->InstallL(KWidget1PackageName);
+
+ QTest::qWait(3000);
+
+ widgetExistedInStorage =( iTestUtils->WidgetExistsInStorageL(
+ KAttrWidgetLibrary, KTestLibrary, iStorage ) != FALSE);
+
+ iInstaller->UninstallL(KWidget1ManifestName);
+
+ QTest::qWait(3000);
+
+ widgetRemovedFromStorage = ((iTestUtils->WidgetExistsInStorageL(
+ KAttrWidgetLibrary, KTestLibrary, iStorage )) != FALSE);
+
+
+ );
+
+ QCOMPARE(err, KErrNone);
+ QVERIFY(widgetExistedInStorage);
+ QVERIFY(widgetRemovedFromStorage);
+ }
+
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void T_CaWidgetScanner::testSetMissingFlag()
+ {
+ _LIT( KWText, "TestWidget" );
+
+ TInt err(KErrNone);
+ TUint flags(0U);
+
+ TRAP(err,
+
+ CCaWidgetStorageHandler* handler = CCaWidgetStorageHandler::NewL(
+ iStorage, *iScr, iFs);
+ iInstaller->InstallL(KWidget1PackageName);
+ QTest::qWait(3000);
+
+ CCaWidgetDescription* widget = iTestUtils->GetWidgetEntryL( KWText, iStorage);
+ handler->SetMissingFlagL( widget );
+ delete widget;
+
+ flags = iTestUtils->GetWidgetFlagsL(KWText, iStorage);
+
+ delete handler;
+ );
+
+ // clean after test
+ TRAP_IGNORE(iInstaller->UninstallL(KWidget1ManifestName));
+ QTest::qWait(3000);
+ QCOMPARE(err, KErrNone);
+ QVERIFY( flags & EMissing );
+ QVERIFY( ~(flags & EVisible) );
+ }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void T_CaWidgetScanner::testSetLocalizationsL()
+ {
+ CCaWidgetDescription* widget = CCaWidgetDescription::NewLC();
+ widget->SetUriL(KWidgetUri1());
+ widget->SetTranslationFileNameL(KTranslationFileNameAsInManifest());
+ widget->SetTitleL( _L("txt_applib_subtitle_downloads") );
+
+ widget->LocalizeTextsL();
+
+ QVERIFY(!widget->GetStringIdTitle().Compare(_L("txt_applib_subtitle_downloads")));
+ QVERIFY(!widget->GetStringIdDescription().Compare( KNullDesC ));
+
+ RPointerArray<CCaLocalizationEntry> resultContainer;
+ CleanupResetAndDestroyPushL( resultContainer );
+ iStorage->GetLocalizationsL( resultContainer );
+ int a = resultContainer.Count();
+ resultContainer.Reset();
+
+ CCaWidgetStorageHandler* handler = CCaWidgetStorageHandler::NewL(
+ iStorage, *iScr, iFs );
+
+ widget->SetStringidTitleL( _L("titleId") );
+ handler->SetLocalizationsL( widget, 2000 );
+
+ iStorage->GetLocalizationsL( resultContainer );
+ int b = resultContainer.Count();
+
+ QCOMPARE( a+1, b );
+
+ delete handler;
+ CleanupStack::PopAndDestroy( &resultContainer );
+ CleanupStack::PopAndDestroy( widget );
+ }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void T_CaWidgetScanner::testUtils()
+ {
+ RBuf mmcId;
+ mmcId.CleanupClosePushL();
+ mmcId.CreateL(KMassStorageIdLength);
+ WidgetScannerUtils::CurrentMmcId(iFs, mmcId);
+ TInt mmcDrive;
+ if( DriveInfo::GetDefaultDrive( DriveInfo::EDefaultRemovableMassStorage,
+ mmcDrive ) == KErrNone )
+ {
+ QVERIFY(mmcId.Length() > 0);
+ }
+
+ CleanupStack::PopAndDestroy( &mmcId );
+ }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void T_CaWidgetScanner::testParsePreviewImageName()
+{
+ TInt err(KErrNone);
+ TChar drive = 'c';
+
+ RBuf expectedPreviewFileName;
+ RBufGuard expectedPreviewFileNameGuard(&expectedPreviewFileName);
+
+ QScopedPointer < CCaWidgetScannerParser > parser;
+ QScopedPointer < CCaWidgetDescription > widgetDescriptor;
+ QT_TRAP_THROWING(parser.reset(CCaWidgetScannerParser::NewL(iFs)));
+ QT_TRAP_THROWING(widgetDescriptor.reset( CCaWidgetDescription::NewL()) );
+
+ _LIT8( KPreviewFileName8, "preview.png" );
+ _LIT( KPreviewFileName, "preview.png" );
+ _LIT( KWidgetPackageId, "12345678" );
+
+ TXmlEngElement element;
+
+ TRAP(err,
+ RXmlEngDOMImplementation domImpl;
+ CleanupClosePushL(domImpl);
+ domImpl.OpenL();
+ RXmlEngDocument doc;
+ CleanupClosePushL(doc);
+ doc.OpenL(domImpl);
+ TXmlEngElement element =
+ doc.CreateDocumentElementL(KPreviewImageElementName());
+ element.AddTextL(KPreviewFileName8());
+ parser->ParsePreviewImageNameL( element, KWidgetPackageId(),
+ widgetDescriptor.data(), drive);
+ CleanupStack::PopAndDestroy(&doc);
+ CleanupStack::PopAndDestroy(&domImpl);
+ );
+
+
+ QCOMPARE(err, KErrNone);
+
+ TRAP(err,
+ HBufC *manifestPath = parser->GetManifestDirectoryPathLC(
+ KWidgetPackageId(), drive );
+ expectedPreviewFileName.CreateL(manifestPath->Length() +
+ KPreviewFileName().Length());
+ expectedPreviewFileName.Append(*manifestPath);
+ expectedPreviewFileName.Append(KPreviewFileName());
+ CleanupStack::PopAndDestroy( manifestPath );
+ );
+ QCOMPARE(err, KErrNone);
+ {
+ const QString exp = XQConversions::s60DescToQString(expectedPreviewFileName);
+ const QString act =
+ XQConversions::s60DescToQString(
+ widgetDescriptor->GetPreviewImageName());
+ QCOMPARE(exp, act);
+ }
+
+ RBuf expectedPreviewSkinId;
+ RBufGuard expectedPreviewSkinIdGuard(&expectedPreviewSkinId);
+
+ _LIT8( KPreviewSkinId, "skin_id" );
+
+ TRAP(err,
+ RXmlEngDOMImplementation domImpl;
+ CleanupClosePushL(domImpl);
+ domImpl.OpenL();
+ RXmlEngDocument doc;
+ CleanupClosePushL(doc);
+ doc.OpenL(domImpl);
+
+ TXmlEngElement element =
+ doc.CreateDocumentElementL(KPreviewImageElementName());
+ element.AddTextL(KPreviewSkinId());
+ parser->ParsePreviewImageNameL( element, KWidgetPackageId(),
+ widgetDescriptor.data(), drive);
+ CleanupStack::PopAndDestroy(&doc);
+ CleanupStack::PopAndDestroy(&domImpl);
+ );
+
+ QCOMPARE(err, KErrNone);
+
+ TRAP(err,
+ expectedPreviewSkinId.Assign(
+ CnvUtfConverter::ConvertToUnicodeFromUtf8L(KPreviewSkinId()));
+ );
+ QCOMPARE(err, KErrNone);
+ {
+ const QString exp = XQConversions::s60DescToQString(expectedPreviewSkinId);
+ const QString act =
+ XQConversions::s60DescToQString(
+ widgetDescriptor->GetPreviewImageName());
+
+ QCOMPARE(exp, act);
+ }
+
+ RBuf8 attributeValueTooLong;
+ RBuf8Guard attributeValueTooLongGuard(&attributeValueTooLong);
+ attributeValueTooLong.CreateL(KCaMaxAttrValueLen + 1);
+
+ for (int i = KCaMaxAttrValueLen; i >= 0 ; --i)
+ {
+ attributeValueTooLong.Append(_L8("a"));
+ }
+
+ TRAP(err,
+ RXmlEngDOMImplementation domImpl;
+ CleanupClosePushL(domImpl);
+ domImpl.OpenL();
+ RXmlEngDocument doc;
+ CleanupClosePushL(doc);
+ doc.OpenL(domImpl);
+
+ TXmlEngElement element =
+ doc.CreateDocumentElementL(KPreviewImageElementName());
+ element.AddTextL(attributeValueTooLong);
+
+ parser->ParsePreviewImageNameL( element, KWidgetPackageId(),
+ widgetDescriptor.data(), drive);
+ CleanupStack::PopAndDestroy(&doc);
+ CleanupStack::PopAndDestroy(&domImpl);
+ );
+
+ QCOMPARE(err, KErrNone);
+ {
+ QCOMPARE(widgetDescriptor->GetPreviewImageName().Length(),
+ KCaMaxAttrValueLen + 1);
+ }
+
+ TRAP(err,
+ RXmlEngDOMImplementation domImpl;
+ CleanupClosePushL(domImpl);
+ domImpl.OpenL();
+ RXmlEngDocument doc;
+ CleanupClosePushL(doc);
+ doc.OpenL(domImpl);
+
+ TXmlEngElement element =
+ doc.CreateDocumentElementL(KPreviewImageElementName());
+ element.AddTextL(KNullDesC8);
+
+ parser->ParsePreviewImageNameL( element, KWidgetPackageId(),
+ widgetDescriptor.data(), drive);
+ CleanupStack::PopAndDestroy(&doc);
+ CleanupStack::PopAndDestroy(&domImpl);
+ );
+
+ QCOMPARE(err, KErrNone);
+ {
+ const QString exp = XQConversions::s60DescToQString(KNullDesC);;
+ const QString act = XQConversions::s60DescToQString(
+ widgetDescriptor->GetPreviewImageName());
+ QCOMPARE(exp, act);
+ }
+}
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+void T_CaWidgetScanner::testParseIconName()
+{
+ TInt err(KErrNone);
+
+ TChar drive = 'c';
+
+ RBuf expectedIconFileName;
+ RBufGuard expectedIconFileNameGuard(&expectedIconFileName);
+
+ QScopedPointer < CCaWidgetScannerParser > parser;
+ QScopedPointer < CCaWidgetDescription > widgetDescriptor;
+ QT_TRAP_THROWING(parser.reset(CCaWidgetScannerParser::NewL(iFs)));
+ QT_TRAP_THROWING(widgetDescriptor.reset( CCaWidgetDescription::NewL()) );
+
+ _LIT8( KIconName8, "preview.png" );
+ _LIT( KIconName, "preview.png" );
+ _LIT( KWidgetPackageId, "12345678" );
+ TXmlEngElement element;
+
+ TRAP(err,
+ RXmlEngDOMImplementation domImpl;
+ CleanupClosePushL(domImpl);
+ domImpl.OpenL();
+ RXmlEngDocument doc;
+ CleanupClosePushL(doc);
+ doc.OpenL(domImpl);
+ TXmlEngElement element =
+ doc.CreateDocumentElementL(KIcon());
+ element.AddTextL(KIconName8());
+ parser->ParseIconL( element, KWidgetPackageId(), widgetDescriptor.data(), drive );
+ CleanupStack::PopAndDestroy(&doc);
+ CleanupStack::PopAndDestroy(&domImpl);
+ );
+
+
+ QCOMPARE(err, KErrNone);
+
+ TRAP(err,
+ HBufC *manifestPath = parser->GetManifestDirectoryPathLC( KWidgetPackageId(), drive );
+ expectedIconFileName.CreateL(manifestPath->Length() + KIconName().Length());
+ expectedIconFileName.Append(*manifestPath);
+ expectedIconFileName.Append(KIconName());
+ CleanupStack::PopAndDestroy(manifestPath);
+ );
+ QCOMPARE(err, KErrNone);
+ {
+ const QString exp = XQConversions::s60DescToQString(expectedIconFileName);
+ const QString act =
+ XQConversions::s60DescToQString(
+ widgetDescriptor->GetIconUri());
+ QCOMPARE(exp, act);
+ }
+
+ RBuf expectedIconSkinId;
+ RBufGuard expectedIconSkinIdGuard(&expectedIconSkinId);
+
+ _LIT8( KIconSkinId, "skin_id" );
+
+ TRAP(err,
+ RXmlEngDOMImplementation domImpl;
+ CleanupClosePushL(domImpl);
+ domImpl.OpenL();
+ RXmlEngDocument doc;
+ CleanupClosePushL(doc);
+ doc.OpenL(domImpl);
+
+ TXmlEngElement element =
+ doc.CreateDocumentElementL(KIcon());
+ element.AddTextL(KIconSkinId());
+
+ parser->ParseIconL(element, KWidgetPackageId(), widgetDescriptor.data(), drive);
+ CleanupStack::PopAndDestroy(&doc);
+ CleanupStack::PopAndDestroy(&domImpl);
+ );
+
+ QCOMPARE(err, KErrNone);
+
+ TRAP(err,
+ expectedIconSkinId.Assign(
+ CnvUtfConverter::ConvertToUnicodeFromUtf8L(KIconSkinId()));
+ );
+ QCOMPARE(err, KErrNone);
+ {
+ const QString exp = XQConversions::s60DescToQString(expectedIconSkinId);
+ const QString act =
+ XQConversions::s60DescToQString(
+ widgetDescriptor->GetIconUri());
+
+ QCOMPARE(exp, act);
+ }
+
+ RBuf8 veryLongAttributeValue;
+ RBuf8Guard veryLongAttributeValueGuard(&veryLongAttributeValue);
+ veryLongAttributeValue.CreateL(KCaMaxAttrValueLen + 1);
+
+ for (int i = KCaMaxAttrValueLen; i >= 0 ; --i)
+ {
+ veryLongAttributeValue.Append(_L8("a"));
+ }
+
+ TRAP(err,
+ RXmlEngDOMImplementation domImpl;
+ CleanupClosePushL(domImpl);
+ domImpl.OpenL();
+ RXmlEngDocument doc;
+ CleanupClosePushL(doc);
+ doc.OpenL(domImpl);
+
+ TXmlEngElement element =
+ doc.CreateDocumentElementL(KIcon());
+ element.AddTextL(veryLongAttributeValue);
+
+ parser->ParseIconL(element, KWidgetPackageId(), widgetDescriptor.data(), drive );
+ CleanupStack::PopAndDestroy(&doc);
+ CleanupStack::PopAndDestroy(&domImpl);
+ );
+
+ QCOMPARE(err, KErrNone);
+
+ {
+ QCOMPARE(widgetDescriptor->GetIconUri().Length(),
+ KCaMaxAttrValueLen + 1);
+ }
+
+ TRAP(err,
+ RXmlEngDOMImplementation domImpl;
+ CleanupClosePushL(domImpl);
+ domImpl.OpenL();
+ RXmlEngDocument doc;
+ CleanupClosePushL(doc);
+ doc.OpenL(domImpl);
+
+ TXmlEngElement element =
+ doc.CreateDocumentElementL(KIcon());
+ element.AddTextL(KNullDesC8);
+
+ parser->ParseIconL(element, KWidgetPackageId(), widgetDescriptor.data(), drive );
+ CleanupStack::PopAndDestroy(&doc);
+ CleanupStack::PopAndDestroy(&domImpl);
+ );
+
+ QCOMPARE(err, KErrNone);
+ {
+ const QString exp = XQConversions::s60DescToQString(KNullDesC);;
+ const QString act = XQConversions::s60DescToQString(
+ widgetDescriptor->GetIconUri());
+ QCOMPARE(exp, act);
+ }
+}
+
+void T_CaWidgetScanner::testCloneWidgetDescriptionL()
+{
+ QScopedPointer<CCaWidgetDescription> descriptionA;
+ QT_TRAP_THROWING(descriptionA.reset(CCaWidgetDescription::NewL()));
+ QScopedPointer<CCaWidgetDescription> descriptionB(
+ descriptionA->CloneL());
+
+ QVERIFY(descriptionA->Compare(*descriptionB)
+ != static_cast<TInt>(EFalse));
+
+ _LIT( KTestDescription, "GetDescription()" );
+
+ QT_TRAP_THROWING(
+ descriptionA->SetDescriptionL( KTestDescription )
+ )
+
+ QVERIFY(descriptionA->Compare(*descriptionB)
+ == static_cast<TInt>(EFalse));
+
+ QScopedPointer<CCaWidgetDescription> descriptionC(
+ descriptionA->CloneL());
+
+ QVERIFY(descriptionA->Compare(*descriptionC)
+ != static_cast<TInt>(EFalse));
+
+ QVERIFY(descriptionA->GetDescription().Compare( KTestDescription ) == 0);
+}
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+TInt T_CaWidgetScanner::AppendMmcIdL(const TDesC& aText)
+ {
+ //get mmc id
+ RBuf mmcId;
+ mmcId.CleanupClosePushL();
+ mmcId.CreateL(_L("mass_storage"));
+
+ //append mmc id to the entry
+ CCaInnerQuery* query = CCaInnerQuery::NewLC();
+ CDesC16ArrayFlat* widgetType = new ( ELeave ) CDesC16ArrayFlat(
+ KGranularityOne );
+ CleanupStack::PushL( widgetType );
+ widgetType->AppendL( KCaTypeWidget );
+ query->SetEntryTypeNames( widgetType );//transfers ownership to query
+ CleanupStack::Pop( widgetType );
+
+ RPointerArray<CCaInnerEntry> entries;
+ CleanupResetAndDestroyPushL( entries );
+ iStorage->GetEntriesL( query, entries );
+ TInt id(0);
+ for( TInt i = 0; i < entries.Count(); i++ )
+ {
+ if(entries[i]->GetText().Compare(aText)==0)
+ {
+ entries[i]->AddAttributeL(KCaAttrMmcId, mmcId);
+ id = entries[i]->GetId();
+ iStorage->AddL(entries[i]);
+ break;
+ }
+ }
+ CleanupStack::PopAndDestroy( &entries );
+ CleanupStack::PopAndDestroy( query );
+ CleanupStack::PopAndDestroy( &mmcId );
+ return id;
+ }
+
+// ---------------------------------------------------------------------------
+//
+// ---------------------------------------------------------------------------
+//
+TBool T_CaWidgetScanner::MmcAttributeSetL(TInt aId)
+ {
+ TBool result(EFalse);
+ CCaInnerQuery* query = CCaInnerQuery::NewLC();
+ RArray<TInt> ids;
+ CleanupClosePushL(ids);
+ ids.AppendL(aId);
+ query->SetIdsL(ids);
+ CleanupStack::PopAndDestroy(&ids);
+ RPointerArray<CCaInnerEntry> entries;
+ CleanupResetAndDestroyPushL( entries );
+ iStorage->GetEntriesL( query, entries );
+ if (entries.Count() == 1)
+ {
+ TPtrC temp(KNullDesC);
+ result = entries[0]->FindAttribute(KCaAttrMmcId, temp);
+ }
+ CleanupStack::PopAndDestroy( &entries );
+ CleanupStack::PopAndDestroy( query );
+
+ return result;
+ }
+
+
+
+
+
+QTEST_MAIN(T_CaWidgetScanner);