photosgallery/viewframework/medialists/tsrc/ut_glxerrormanager/ut_glxerrormanager.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Thu, 17 Dec 2009 08:45:44 +0200
changeset 0 4e91876724a2
child 18 bcb43dc84c44
permissions -rw-r--r--
Revision: 200949 Kit: 200951

/*
* 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