photosgallery/viewframework/medialists/tsrc/ut_glxerrormanager/ut_glxerrormanager.cpp
changeset 0 4e91876724a2
child 18 bcb43dc84c44
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/photosgallery/viewframework/medialists/tsrc/ut_glxerrormanager/ut_glxerrormanager.cpp	Thu Dec 17 08:45:44 2009 +0200
@@ -0,0 +1,569 @@
+/*
+* Copyright (c) 2006 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:  Testing GlxErrorManager
+*
+*/
+
+
+
+
+//  CLASS HEADER
+#include "ut_glxerrormanager.h"
+
+//  EXTERNAL INCLUDES
+#include <digia/eunit/eunitmacros.h>
+#include <digia/eunit/eunitdecorators.h>
+
+#include <mpxcollectionmessage.h>
+#include <mpxmedia.h>
+#include <mpxmediaarray.h>
+#include <mpxmediacontainerdefs.h>
+#include <mpxmediacollectiondetaildefs.h>
+#include <mpxmediageneraldefs.h>
+
+#include <glxmediageneraldefs.h>
+//  INTERNAL INCLUDES
+#include "glxmediaid.h"
+#include "glxerrormanager.h"
+#include "glxfetcherrorarray.h"
+#include "glxmedia.h"
+#include "glxcachemanager.h"
+#include "glxmedialist.h"
+
+#include <glxdrmutility.h>
+
+void CGlxDRMUtility::Close()
+    {
+    delete this;
+    }
+    
+TBool CGlxDRMUtility::CheckOpenRightsL(const TDesC&, TBool)
+    {
+    return ETrue;
+    }
+    
+CGlxDRMUtility* CGlxDRMUtility::InstanceL()
+    {
+    CGlxDRMUtility* drm = new(ELeave)CGlxDRMUtility();
+    return drm;
+    }
+    
+TSize CGlxDRMUtility::DRMThumbnailSize(TSize& aSize)
+    {
+    return aSize;
+    }
+    
+CGlxDRMUtility::CGlxDRMUtility()
+    {
+    
+    }
+    
+CGlxDRMUtility::~CGlxDRMUtility()
+    {
+    
+    }
+
+
+// CONSTRUCTION
+ut_glxerrormanager* ut_glxerrormanager::NewL()
+    {
+    ut_glxerrormanager* self = ut_glxerrormanager::NewLC();
+    CleanupStack::Pop();
+
+    return self;
+    }
+
+ut_glxerrormanager* ut_glxerrormanager::NewLC()
+    {
+    ut_glxerrormanager* self = new( ELeave ) ut_glxerrormanager();
+    CleanupStack::PushL( self );
+
+    self->ConstructL();
+
+    return self;
+    }
+
+// Destructor (virtual by CBase)
+ut_glxerrormanager::~ut_glxerrormanager()
+    {
+    }
+
+// Default constructor
+ut_glxerrormanager::ut_glxerrormanager()
+    {
+    }
+
+// Second phase construct
+void ut_glxerrormanager::ConstructL()
+    {
+    // The ConstructL from the base class CEUnitTestSuiteClass must be called.
+    // It generates the test case table.
+    CEUnitTestSuiteClass::ConstructL();
+    }
+
+//  METHODS
+
+
+void ut_glxerrormanager::SetupL(  )
+    {
+    iItem1 = new (ELeave) CGlxMedia(TGlxMediaId(1));
+    
+    iItem2 = new (ELeave) CGlxMedia(TGlxMediaId(2));
+    RArray<TMPXAttribute> attrSet2;
+    CleanupClosePushL(attrSet2);
+    attrSet2.AppendL(KMPXMediaGeneralThumbnail1);
+    attrSet2.AppendL(KMPXMediaGeneralDate);
+    attrSet2.AppendL(KMPXMediaGeneralSize);
+    GlxErrorManager::SetAttributeErrorL(iItem2, attrSet2, KErrGeneral);
+    CleanupStack::PopAndDestroy(&attrSet2);
+    
+    iItem3 = new (ELeave) CGlxMedia(TGlxMediaId(3));
+    RArray<TMPXAttribute> attrSet3;
+    CleanupClosePushL(attrSet3);
+    attrSet3.AppendL(KMPXMediaGeneralThumbnail1);
+    GlxErrorManager::SetAttributeErrorL(iItem3, attrSet3, KErrGeneral);
+    CleanupStack::PopAndDestroy(&attrSet3);
+    
+    iItem4 = new (ELeave) CGlxMedia(TGlxMediaId(4));
+    iItem5 = new (ELeave) CGlxMedia(TGlxMediaId(5));
+
+    iItem6 = new (ELeave) CGlxMedia(TGlxMediaId(6));
+    RArray<TMPXAttribute> attrSet6;
+    CleanupClosePushL(attrSet6);
+    attrSet6.AppendL(KMPXMediaGeneralThumbnail1);
+    GlxErrorManager::SetAttributeErrorL(iItem6, attrSet6, KErrNotSupported);
+    CleanupStack::PopAndDestroy(&attrSet6);
+    }
+    
+
+void ut_glxerrormanager::Teardown(  )
+    {
+    delete iItem1;
+	iItem1 = NULL;
+    delete iItem2;
+	iItem2 = NULL;
+    delete iItem3;
+	iItem3 = NULL;
+    delete iItem4;
+	iItem4 = NULL;
+    delete iItem5;
+	iItem5 = NULL;
+    delete iItem6;
+	iItem6 = NULL;
+    }
+    
+
+// -----------------------------------------------------------------------------
+// ***********************  WARNING ********************************************
+// -----------------------------------------------------------------------------
+// This test may not complete unless the EUnit timeout settings are altered
+// The timeout settings must be more than:
+// KGlxTemporaryErrorValidityPeriodInSeconds * 1.25
+// (Currently, 60 seconds will do it)
+// -----------------------------------------------------------------------------
+//
+void ut_glxerrormanager::T_Test1L(  )
+    {
+    // Check for attribute errors on null item
+    EUNIT_ASSERT_DESC( KErrNone == GlxErrorManager::HasAttributeErrorL(NULL, KMPXMediaGeneralThumbnail1), 
+        "Null item has an error on KMPXMediaIdGeneral attributes");
+
+    EUNIT_ASSERT_DESC( KErrNone == GlxErrorManager::HasAttributeErrorL(iItem1, KMPXMediaGeneralThumbnail1), 
+        "iItem1 has an error on KMPXMediaGeneralThumbnail1");
+    EUNIT_ASSERT_DESC( KErrNone == GlxErrorManager::HasAttributeErrorL(iItem1, KMPXMediaGeneralDate), 
+        "iItem1 has an error on KMPXMediaGeneralDate");
+    EUNIT_ASSERT_DESC( KErrNone == GlxErrorManager::HasAttributeErrorL(iItem1, KMPXMediaGeneralSize), 
+        "iItem1 has an error on KMPXMediaGeneralSize");
+
+    // Check for attribute errors on non errored attribute
+    EUNIT_ASSERT_DESC( KErrNone == GlxErrorManager::HasAttributeErrorL(iItem2, KMPXMediaGeneralTitle), 
+        "iItem2 has an error on KMPXMediaGeneralTitle");
+
+    EUNIT_ASSERT_DESC( KErrNone != GlxErrorManager::HasAttributeErrorL(iItem2, KMPXMediaGeneralThumbnail1), 
+        "iItem2 has no error on KMPXMediaGeneralThumbnail1");
+    EUNIT_ASSERT_DESC( KErrNone != GlxErrorManager::HasAttributeErrorL(iItem2, KMPXMediaGeneralDate), 
+        "iItem2 has no error on KMPXMediaGeneralDate");
+    EUNIT_ASSERT_DESC( KErrNone != GlxErrorManager::HasAttributeErrorL(iItem2, KMPXMediaGeneralSize), 
+        "iItem2 has no error on KMPXMediaGeneralSize");
+    
+    EUNIT_ASSERT_DESC( KErrNone != GlxErrorManager::HasAttributeErrorL(iItem3, KMPXMediaGeneralThumbnail1), 
+        "iItem3 has no error on KMPXMediaGeneralThumbnail1");
+    EUNIT_ASSERT_DESC( KErrNone == GlxErrorManager::HasAttributeErrorL(iItem3, KMPXMediaGeneralDate), 
+        "iItem3 has an error on KMPXMediaGeneralDate");
+    EUNIT_ASSERT_DESC( KErrNone == GlxErrorManager::HasAttributeErrorL(iItem3, KMPXMediaGeneralSize), 
+        "iItem3 has an error on KMPXMediaGeneralSize");
+
+    // Wait for half the validity period
+    User::After(KGlxTemporaryErrorValidityPeriodInSeconds * 1000000 * 1.25);
+
+    // Check for permanent error
+    EUNIT_ASSERT_DESC( KErrNotSupported == GlxErrorManager::HasAttributeErrorL(iItem6, KMPXMediaGeneralThumbnail1), 
+        "iItem6 has no error on KMPXMediaGeneralThumbnail1");
+    }
+
+void ut_glxerrormanager::T_Test2L(  )
+    {
+    RArray<TMPXAttribute> attrSet;
+    CleanupClosePushL(attrSet);
+    
+    // Set errors one by one
+    EUNIT_ASSERT_DESC( KErrNone == GlxErrorManager::HasAttributeErrorL(iItem1, KMPXMediaGeneralThumbnail1), 
+        "iItem1 has an error on KMPXMediaGeneralThumbnail1");
+    EUNIT_ASSERT_DESC( KErrNone == GlxErrorManager::HasAttributeErrorL(iItem1, KMPXMediaGeneralDate), 
+        "iItem1 has an error on KMPXMediaGeneralDate");
+    EUNIT_ASSERT_DESC( KErrNone == GlxErrorManager::HasAttributeErrorL(iItem1, KMPXMediaGeneralSize), 
+        "iItem1 has an error on KMPXMediaGeneralSize");
+        
+    attrSet.Close();            
+    attrSet.AppendL(KMPXMediaGeneralThumbnail1);
+    GlxErrorManager::SetAttributeErrorL(iItem1, attrSet, KErrGeneral);
+
+    EUNIT_ASSERT_DESC( KErrGeneral == GlxErrorManager::HasAttributeErrorL(iItem1, KMPXMediaGeneralThumbnail1), 
+        "iItem1 has wrong error on KMPXMediaGeneralThumbnail1");
+    EUNIT_ASSERT_DESC( KErrNone == GlxErrorManager::HasAttributeErrorL(iItem1, KMPXMediaGeneralDate), 
+        "iItem1 has an error on KMPXMediaGeneralDate");
+    EUNIT_ASSERT_DESC( KErrNone == GlxErrorManager::HasAttributeErrorL(iItem1, KMPXMediaGeneralSize), 
+        "iItem1 has an error on KMPXMediaGeneralSize");
+        
+    attrSet.Close();            
+    attrSet.AppendL(KMPXMediaGeneralDate);
+    GlxErrorManager::SetAttributeErrorL(iItem1, attrSet, KErrGeneral);
+
+    EUNIT_ASSERT_DESC( KErrGeneral == GlxErrorManager::HasAttributeErrorL(iItem1, KMPXMediaGeneralThumbnail1), 
+        "iItem1 has wrong error on KMPXMediaGeneralThumbnail1");
+    EUNIT_ASSERT_DESC( KErrGeneral == GlxErrorManager::HasAttributeErrorL(iItem1, KMPXMediaGeneralDate), 
+        "iItem1 has wrong error on KMPXMediaGeneralDate");
+    EUNIT_ASSERT_DESC( KErrNone == GlxErrorManager::HasAttributeErrorL(iItem1, KMPXMediaGeneralSize), 
+        "iItem1 has an error on KMPXMediaGeneralSize");
+
+    attrSet.Close();            
+    attrSet.AppendL(KMPXMediaGeneralSize);
+    GlxErrorManager::SetAttributeErrorL(iItem1, attrSet, KErrGeneral);
+    
+    EUNIT_ASSERT_DESC( KErrGeneral == GlxErrorManager::HasAttributeErrorL(iItem1, KMPXMediaGeneralThumbnail1), 
+        "iItem1 has wrong error on KMPXMediaGeneralThumbnail1");
+    EUNIT_ASSERT_DESC( KErrGeneral == GlxErrorManager::HasAttributeErrorL(iItem1, KMPXMediaGeneralDate), 
+        "iItem1 has wrong error on KMPXMediaGeneralDate");
+    EUNIT_ASSERT_DESC( KErrGeneral == GlxErrorManager::HasAttributeErrorL(iItem1, KMPXMediaGeneralSize), 
+        "iItem1 has wrong error on KMPXMediaGeneralSize");
+
+
+    // Set many errors in one go
+    EUNIT_ASSERT_DESC( KErrNone == GlxErrorManager::HasAttributeErrorL(iItem4, KMPXMediaGeneralThumbnail1), 
+        "iItem4 has an error on KMPXMediaGeneralThumbnail1");
+    EUNIT_ASSERT_DESC( KErrNone == GlxErrorManager::HasAttributeErrorL(iItem4, KMPXMediaGeneralDate), 
+        "iItem4 has an error on KMPXMediaGeneralDate");
+    EUNIT_ASSERT_DESC( KErrNone == GlxErrorManager::HasAttributeErrorL(iItem4, KMPXMediaGeneralSize), 
+        "iItem4 has an error on KMPXMediaGeneralSize");
+
+    attrSet.Close();            
+    attrSet.AppendL(KMPXMediaGeneralThumbnail1);
+    attrSet.AppendL(KMPXMediaGeneralDate);
+    attrSet.AppendL(KMPXMediaGeneralSize);
+    GlxErrorManager::SetAttributeErrorL(iItem4, attrSet, KErrGeneral);
+
+    EUNIT_ASSERT_DESC( KErrGeneral == GlxErrorManager::HasAttributeErrorL(iItem4, KMPXMediaGeneralThumbnail1), 
+        "iItem4 has wrong error on KMPXMediaGeneralThumbnail1");
+    EUNIT_ASSERT_DESC( KErrGeneral == GlxErrorManager::HasAttributeErrorL(iItem4, KMPXMediaGeneralDate), 
+        "iItem4 has wrong error on KMPXMediaGeneralDate");
+    EUNIT_ASSERT_DESC( KErrGeneral == GlxErrorManager::HasAttributeErrorL(iItem4, KMPXMediaGeneralSize), 
+        "iItem4 has wrong error on KMPXMediaGeneralSize");
+
+    CleanupStack::PopAndDestroy(&attrSet);
+    }
+    
+void ut_glxerrormanager::T_Test3L(  )
+    {
+    // Check for errors on null item
+    EUNIT_ASSERT_DESC( !GlxErrorManager::HasError(NULL), 
+        "Null item has some errors attached");
+
+    EUNIT_ASSERT_DESC( EFalse == GlxErrorManager::HasError(iItem1), 
+        "iItem1 has some errors attached");
+    EUNIT_ASSERT_DESC( ETrue == GlxErrorManager::HasError(iItem2), 
+        "iItem2 has no errors attached");
+    EUNIT_ASSERT_DESC( ETrue == GlxErrorManager::HasError(iItem3), 
+        "iItem3 has no errors attached");
+    EUNIT_ASSERT_DESC( EFalse == GlxErrorManager::HasError(iItem4), 
+        "iItem4 has some errors attached");
+    EUNIT_ASSERT_DESC( EFalse == GlxErrorManager::HasError(iItem5), 
+        "iItem5 has some errors attached");
+
+    // Check for permanent errors
+    EUNIT_ASSERT_DESC( GlxErrorManager::HasError(iItem6), 
+        "iItem6 has no errors attached");
+    }
+    
+void ut_glxerrormanager::T_Test4L(  )
+    {
+    // Check returned error array attribute
+    TMPXAttribute errorAttribute = GlxErrorManager::ErrorAttribute();
+
+    // HACK - error attribute is private, so these should reflect the values used in the error manager implementation
+    EUNIT_ASSERT_DESC(errorAttribute.ContentId() == 0x200071AC && errorAttribute.AttributeId() == 0x01, "Incorrect error attribute");
+    }
+    
+// -----------------------------------------------------------------------------
+// ***********************  WARNING ********************************************
+// -----------------------------------------------------------------------------
+// This test may not complete unless the EUnit timeout settings are altered
+// The timeout settings must be more than:
+// KGlxTemporaryErrorValidityPeriodInSeconds * 1.25
+// (Currently, 60 seconds will do it)
+// -----------------------------------------------------------------------------
+//
+void ut_glxerrormanager::T_Test5L(  )
+    {
+    RArray<TMPXAttribute> attrSet;
+    CleanupClosePushL(attrSet);
+
+    // Clean unused errors on iItem3
+    attrSet.AppendL(KMPXMediaGeneralTitle);
+    GlxErrorManager::ClearExpiredAndUnusedErrorsL(*iItem3, attrSet);
+
+    // HasError should now report false for iItem3
+    EUNIT_ASSERT_DESC( !GlxErrorManager::HasError(iItem3), 
+        "iItem3 has unused errors attached");
+
+    attrSet.Reset();
+    attrSet.AppendL(KMPXMediaGeneralThumbnail1);
+    GlxErrorManager::SetAttributeErrorL(iItem1, attrSet, KErrGeneral);
+    
+    // Wait for half the validity period
+    User::After(KGlxTemporaryErrorValidityPeriodInSeconds * 1000000 / 2);
+    
+    EUNIT_ASSERT_DESC( KErrGeneral == GlxErrorManager::HasAttributeErrorL(iItem1, KMPXMediaGeneralThumbnail1), 
+        "iItem1 has wrong error on KMPXMediaGeneralThumbnail1");
+    EUNIT_ASSERT_DESC( KErrNone == GlxErrorManager::HasAttributeErrorL(iItem1, KMPXMediaGeneralDate), 
+        "iItem1 has an error on KMPXMediaGeneralDate");
+    EUNIT_ASSERT_DESC( KErrNone == GlxErrorManager::HasAttributeErrorL(iItem1, KMPXMediaGeneralSize), 
+        "iItem1 has an error on KMPXMediaGeneralSize");
+
+    attrSet.Reset();
+    attrSet.AppendL(KMPXMediaGeneralDate);
+    GlxErrorManager::SetAttributeErrorL(iItem1, attrSet, KErrGeneral);
+        
+    EUNIT_ASSERT_DESC( KErrGeneral == GlxErrorManager::HasAttributeErrorL(iItem1, KMPXMediaGeneralThumbnail1), 
+        "iItem1 has wrong error on KMPXMediaGeneralThumbnail1");
+    EUNIT_ASSERT_DESC( KErrGeneral == GlxErrorManager::HasAttributeErrorL(iItem1, KMPXMediaGeneralDate), 
+        "iItem1 has wrong error on KMPXMediaGeneralDate");
+    EUNIT_ASSERT_DESC( KErrNone == GlxErrorManager::HasAttributeErrorL(iItem1, KMPXMediaGeneralSize), 
+        "iItem1 has an error on KMPXMediaGeneralSize");
+
+    // Wait for another .75 of the validity period
+    User::After(KGlxTemporaryErrorValidityPeriodInSeconds * 1000000 * 3 / 4);
+
+    EUNIT_ASSERT_DESC( KErrNone == GlxErrorManager::HasAttributeErrorL(iItem1, KMPXMediaGeneralThumbnail1), 
+        "iItem1 has an unexpired error on KMPXMediaGeneralThumbnail1");
+    EUNIT_ASSERT_DESC( KErrGeneral == GlxErrorManager::HasAttributeErrorL(iItem1, KMPXMediaGeneralDate), 
+        "iItem1 has expired error on KMPXMediaGeneralDate");
+    EUNIT_ASSERT_DESC( KErrNone == GlxErrorManager::HasAttributeErrorL(iItem1, KMPXMediaGeneralSize), 
+        "iItem1 has an error on KMPXMediaGeneralSize");
+
+    // HasError should report true for iItem1, since there is still an outstanding error
+    EUNIT_ASSERT_DESC( GlxErrorManager::HasError(iItem1), 
+        "iItem1 has no errors attached");
+
+    // HasError should still report true for iItem2, even though all the errors have expired
+    EUNIT_ASSERT_DESC( GlxErrorManager::HasError(iItem2), 
+        "iItem2 has no errors attached");
+    
+    // But checking HasAttributeErrorL shouldn't find any
+    EUNIT_ASSERT_DESC( KErrNone == GlxErrorManager::HasAttributeErrorL(iItem2, KMPXMediaGeneralThumbnail1), 
+        "iItem2 has an error on KMPXMediaGeneralThumbnail1");
+    EUNIT_ASSERT_DESC( KErrNone == GlxErrorManager::HasAttributeErrorL(iItem2, KMPXMediaGeneralDate), 
+        "iItem2 has an error on KMPXMediaGeneralDate");
+    EUNIT_ASSERT_DESC( KErrNone == GlxErrorManager::HasAttributeErrorL(iItem2, KMPXMediaGeneralSize), 
+        "iItem2 has an error on KMPXMediaGeneralSize");
+
+    // Now we clean iItem1 and iItem2
+    attrSet.Reset();            
+    attrSet.AppendL(KMPXMediaGeneralThumbnail1);
+    attrSet.AppendL(KMPXMediaGeneralDate);
+    attrSet.AppendL(KMPXMediaGeneralSize);
+
+    GlxErrorManager::ClearExpiredAndUnusedErrorsL(*iItem1, attrSet);
+    GlxErrorManager::ClearExpiredAndUnusedErrorsL(*iItem2, attrSet);
+       
+    // HasError should report true for iItem1, since there is still an outstanding error
+    EUNIT_ASSERT_DESC( GlxErrorManager::HasError(iItem1), 
+        "iItem1 has no errors attached");
+
+    // HasError should now report false for iItem2
+    EUNIT_ASSERT_DESC( !GlxErrorManager::HasError(iItem2), 
+        "iItem2 has uncleared errors attached");
+
+    // Check all errors
+    EUNIT_ASSERT_DESC( KErrNone == GlxErrorManager::HasAttributeErrorL(iItem1, KMPXMediaGeneralThumbnail1), 
+        "iItem1 has an error on KMPXMediaGeneralThumbnail1");
+    EUNIT_ASSERT_DESC( KErrGeneral == GlxErrorManager::HasAttributeErrorL(iItem1, KMPXMediaGeneralDate), 
+        "iItem1 has no error on KMPXMediaGeneralDate");
+    EUNIT_ASSERT_DESC( KErrNone == GlxErrorManager::HasAttributeErrorL(iItem1, KMPXMediaGeneralSize), 
+        "iItem1 has an error on KMPXMediaGeneralSize");
+    
+    EUNIT_ASSERT_DESC( KErrNone == GlxErrorManager::HasAttributeErrorL(iItem2, KMPXMediaGeneralThumbnail1), 
+        "iItem2 has an error on KMPXMediaGeneralThumbnail1");
+    EUNIT_ASSERT_DESC( KErrNone == GlxErrorManager::HasAttributeErrorL(iItem2, KMPXMediaGeneralDate), 
+        "iItem2 has an error on KMPXMediaGeneralDate");
+    EUNIT_ASSERT_DESC( KErrNone == GlxErrorManager::HasAttributeErrorL(iItem2, KMPXMediaGeneralSize), 
+        "iItem2 has an error on KMPXMediaGeneralSize");
+
+    // Clean unused errors on iItem1
+    attrSet.Reset();
+    attrSet.AppendL(KMPXMediaGeneralTitle);
+    GlxErrorManager::ClearExpiredAndUnusedErrorsL(*iItem1, attrSet);
+
+    // HasError should now report false for iItem1
+    EUNIT_ASSERT_DESC( !GlxErrorManager::HasError(iItem1), 
+        "iItem1 has unused errors attached");
+
+
+    // Now try ClearExpiredAndUnusedErrorsL with a smaller set of attributes in use
+    attrSet.Reset();            
+    attrSet.AppendL(KMPXMediaGeneralThumbnail1);
+    attrSet.AppendL(KMPXMediaGeneralDate);
+    attrSet.AppendL(KMPXMediaGeneralSize);
+    GlxErrorManager::SetAttributeErrorL(iItem4, attrSet, KErrGeneral);
+
+    EUNIT_ASSERT_DESC( KErrGeneral == GlxErrorManager::HasAttributeErrorL(iItem4, KMPXMediaGeneralThumbnail1), 
+        "iItem4 has wrong error on KMPXMediaGeneralThumbnail1");
+    EUNIT_ASSERT_DESC( KErrGeneral == GlxErrorManager::HasAttributeErrorL(iItem4, KMPXMediaGeneralDate), 
+        "iItem4 has wrong error on KMPXMediaGeneralDate");
+    EUNIT_ASSERT_DESC( KErrGeneral == GlxErrorManager::HasAttributeErrorL(iItem4, KMPXMediaGeneralSize), 
+        "iItem4 has wrong error on KMPXMediaGeneralSize");
+
+    attrSet.Reset();            
+    attrSet.AppendL(KMPXMediaGeneralSize);
+    GlxErrorManager::ClearExpiredAndUnusedErrorsL(*iItem4, attrSet);
+
+    // HasError should report true for iItem4, since there is still an error
+    EUNIT_ASSERT_DESC( GlxErrorManager::HasError(iItem4), 
+        "iItem4 has no errors attached");
+
+    // Only the KMPXMediaGeneralSize error should remain
+    EUNIT_ASSERT_DESC( KErrNone == GlxErrorManager::HasAttributeErrorL(iItem4, KMPXMediaGeneralThumbnail1), 
+        "iItem4 has an error on KMPXMediaGeneralThumbnail1");
+    EUNIT_ASSERT_DESC( KErrNone == GlxErrorManager::HasAttributeErrorL(iItem4, KMPXMediaGeneralDate), 
+        "iItem4 has an error on KMPXMediaGeneralDate");
+    EUNIT_ASSERT_DESC( KErrGeneral == GlxErrorManager::HasAttributeErrorL(iItem4, KMPXMediaGeneralSize), 
+        "iItem4 has wrong error on KMPXMediaGeneralSize");
+
+    // Clear expired and unused errors on item with no errors
+    EUNIT_ASSERT_DESC( !GlxErrorManager::HasError(iItem5), 
+        "iItem5 has some errors attached");
+
+    attrSet.Reset();            
+    attrSet.AppendL(KMPXMediaGeneralThumbnail1);
+    GlxErrorManager::ClearExpiredAndUnusedErrorsL(*iItem5, attrSet);
+
+    EUNIT_ASSERT_DESC( !GlxErrorManager::HasError(iItem5), 
+        "iItem5 has some errors attached");
+
+    // Clear errors on item with permanent errors
+    attrSet.Reset();
+    attrSet.AppendL(KMPXMediaGeneralThumbnail1);
+    GlxErrorManager::ClearExpiredAndUnusedErrorsL(*iItem6, attrSet);
+
+    EUNIT_ASSERT_DESC( GlxErrorManager::HasError(iItem6), 
+        "iItem6 has no errors attached");
+
+    EUNIT_ASSERT_DESC( KErrNotSupported == GlxErrorManager::HasAttributeErrorL(iItem6, KMPXMediaGeneralThumbnail1), 
+        "iItem6 has wrong error on KMPXMediaGeneralThumbnail1");
+
+    // Clear unused errors which are permanent
+    attrSet.Reset();            
+    attrSet.AppendL(KMPXMediaGeneralTitle);
+    GlxErrorManager::ClearExpiredAndUnusedErrorsL(*iItem6, attrSet);
+
+    EUNIT_ASSERT_DESC( !GlxErrorManager::HasError(iItem6), 
+        "iItem6 has some errors attached");
+
+    CleanupStack::PopAndDestroy(&attrSet);
+    }
+
+void ut_glxerrormanager::T_Test6L(  )
+    {
+    // Check for attribute errors on null item
+    EUNIT_ASSERT_DESC( KErrNone == GlxErrorManager::HasAttributeErrorL(NULL, KMPXMediaIdGeneral), 
+        "Null item has an error on KMPXMediaIdGeneral attributes");
+    
+    // Check for KMPXMediaIdGeneral attribute errors on item with no errors
+    EUNIT_ASSERT_DESC( KErrNone == GlxErrorManager::HasAttributeErrorL(iItem1, KMPXMediaIdGeneral), 
+        "iItem1 has an error on KMPXMediaIdGeneral attributes");
+
+    // Check for KGlxMediaIdGeneral attribute errors on item with errors
+    EUNIT_ASSERT_DESC( KErrNone == GlxErrorManager::HasAttributeErrorL(iItem2, KGlxMediaIdGeneral), 
+        "iItem2 has an error on KGlxMediaIdGeneral attributes");
+
+    // Check for KMPXMediaIdGeneral attribute errors on item with errors
+    EUNIT_ASSERT_DESC( KErrNone != GlxErrorManager::HasAttributeErrorL(iItem2, KMPXMediaIdGeneral), 
+        "iItem2 has no error on KMPXMediaIdGeneral attributes");    
+
+    // Check for KMPXMediaIdGeneral attribute errors on item with permanent errors
+    EUNIT_ASSERT_DESC( KErrNone != GlxErrorManager::HasAttributeErrorL(iItem6, KMPXMediaIdGeneral), 
+        "iItem6 has no error on KMPXMediaIdGeneral attributes");    
+    }
+
+//  TEST TABLE
+EUNIT_BEGIN_TEST_TABLE(
+    ut_glxerrormanager,
+    "Testing GlxErrorManager utility class.",
+    "UNIT" )
+
+/*EUNIT_TEST(
+    "HasAttributeError_1L - Test1",
+    "GlxErrorManager",
+    "HasAttributeError_1L",
+    "FUNCTIONALITY",
+    SetupL, T_Test1L, Teardown)*/
+    
+EUNIT_TEST(
+    "SetAttributeErrorL - Test2",
+    "GlxErrorManager",
+    "SetAttributeErrorL",
+    "FUNCTIONALITY",
+    SetupL, T_Test2L, Teardown)
+    
+EUNIT_TEST(
+    "HasError - Test3",
+    "GlxErrorManager",
+    "HasError",
+    "FUNCTIONALITY",
+    SetupL, T_Test3L, Teardown)
+    
+EUNIT_TEST(
+    "ErrorAttribute - Test4",
+    "GlxErrorManager",
+    "ErrorAttribute",
+    "FUNCTIONALITY",
+    SetupL, T_Test4L, Teardown)
+    
+EUNIT_TEST(
+    "ClearExpiredAndUnusedErrorsL - Test5",
+    "GlxErrorManager",
+    "ClearExpiredAndUnusedErrorsL",
+    "FUNCTIONALITY",
+    SetupL, T_Test5L, Teardown)
+
+EUNIT_TEST(
+    "HasAttributeError_2L - Test6",
+    "GlxErrorManager",
+    "HasAttributeError_2L",
+    "FUNCTIONALITY",
+    SetupL, T_Test6L, Teardown)
+    
+
+EUNIT_END_TEST_TABLE
+
+//  END OF FILE