diff -r dec420019252 -r cf5481c2bc0b videocollection/videocollectionwrapper/tsrc/testvideodatacontainer/src/testvideodatacontainer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/videocollection/videocollectionwrapper/tsrc/testvideodatacontainer/src/testvideodatacontainer.cpp Fri Apr 16 14:59:52 2010 +0300 @@ -0,0 +1,594 @@ +/* +* 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: +* +*/ + +// INCLUDES + +#include "testvideodatacontainer.h" +#include "mediaobjectfactory.h" +#include "videocollectionutils.h" +#include +#include +#include + + +#define private public +#include "videodatacontainer.h" +#undef private + +const int MEDIA_COUNT = 10; + +/** + * global qHash function required fo creating hash values for TMPXItemId -keys + */ +inline uint qHash(TMPXItemId key) +{ + QPair keyPair(key.iId1, key.iId2); + + return qHash(keyPair); +} + +// ----------------------------------------------------------------------------- +// main +// ----------------------------------------------------------------------------- +// +int main(int argc, char *argv[]) +{ + Q_UNUSED(argc); + + TestVideoDataContainer tv; + + int res; + if(argc > 1) + { + res = QTest::qExec(&tv, argc, argv); + } + else + { + char *pass[3]; + pass[0] = argv[0]; + pass[1] = "-o"; + pass[2] = "c:\\data\\testvideodatacontainer.txt"; + res = QTest::qExec(&tv, 3, pass); + } + + return res; +} + +// ----------------------------------------------------------------------------- +// initTestCase +// ----------------------------------------------------------------------------- +// +void TestVideoDataContainer::initTestCase() +{ + mTestObject = 0; + mMediaFactory = new MediaObjectFactory(); +} + +// ----------------------------------------------------------------------------- +// cleanupTestCase +// ----------------------------------------------------------------------------- +// +void TestVideoDataContainer::cleanupTestCase() +{ + delete mMediaFactory; +} + +// ----------------------------------------------------------------------------- +// init +// ----------------------------------------------------------------------------- +// +void TestVideoDataContainer::init() +{ + mTestObject = new VideoDataContainer(); +} + +// ----------------------------------------------------------------------------- +// cleanup +// ----------------------------------------------------------------------------- +// +void TestVideoDataContainer::cleanup() +{ + delete mTestObject; +} + +// ----------------------------------------------------------------------------- +// testClear +// ----------------------------------------------------------------------------- +// +void TestVideoDataContainer::testClear() +{ + User::Heap().__DbgMarkStart(); + QVERIFY(mTestObject->count() == 0); + // add few items to container + for(int i = 0; i < MEDIA_COUNT; ++i) + { + mTestObject->append(mMediaFactory->getMedia(i)); + } + QVERIFY(mTestObject->count() == MEDIA_COUNT); + + mTestObject->clear(); + QVERIFY(mTestObject->count() == 0); + int remHeap = User::Heap().__DbgMarkEnd(0); + QVERIFY(remHeap == 0); + + User::Heap().__DbgMarkStart(); + mTestObject->clear(); + remHeap = User::Heap().__DbgMarkEnd(0); + QVERIFY(remHeap == 0); + +} + +// ----------------------------------------------------------------------------- +// testRemove +// ----------------------------------------------------------------------------- +// +void TestVideoDataContainer::testRemove() +{ + // add few items to container (id = i, index = i) + int i; + for(i = 0; i < MEDIA_COUNT; ++i) + { + mTestObject->append(mMediaFactory->getMedia(i)); + } + QVERIFY(mTestObject->count() == MEDIA_COUNT); + + // invalid indexes + mTestObject->remove(-1); + QVERIFY(mTestObject->count() == MEDIA_COUNT); + mTestObject->remove(MEDIA_COUNT); + QVERIFY(mTestObject->count() == MEDIA_COUNT); + + QHash >::const_iterator iter; + // at this point, indexes and ids are in sync + for(i = 0; i < mTestObject->count(); ++i) + { + iter = mTestObject->mMediaData.find(mTestObject->mMediaIds[i]); + QVERIFY(iter != mTestObject->mMediaData.constEnd()); + QVERIFY(iter.key().iId1 == i); + QVERIFY(iter->first == i); + } + + // remove first item + TMPXItemId id(0,0); + mTestObject->remove(id); + QVERIFY(mTestObject->count() == MEDIA_COUNT - 1); + // at this point, indexes after recently removed first + // item have decreased by one (whereas ids increase by one) + for(i = 0; i < mTestObject->count(); ++i) + { + iter = mTestObject->mMediaData.find(mTestObject->mMediaIds[i]); + QVERIFY(iter != mTestObject->mMediaData.constEnd()); + QVERIFY(iter.key().iId1 == i + 1); + QVERIFY(iter->first == i ); + + } + + // reset + mTestObject->clear(); + // (id = i, index = i) + for(int i = 0; i < MEDIA_COUNT; ++i) + { + mTestObject->append(mMediaFactory->getMedia(i)); + } + + // remove from the middle + id.iId1 = MEDIA_COUNT / 2; + mTestObject->remove(id); + QVERIFY(mTestObject->count() == MEDIA_COUNT - 1); + + // at this point, indexes after recently removed middle + // item have decreased by one (whereas ids increase by one) + for(i = 0; i < mTestObject->count(); ++i) + { + iter = mTestObject->mMediaData.find(mTestObject->mMediaIds[i]); + QVERIFY(iter != mTestObject->mMediaData.constEnd()); + if( i < MEDIA_COUNT / 2) + { + QVERIFY(iter.key().iId1 == i); + QVERIFY(iter->first == i); + } + else + { + QVERIFY(iter.key().iId1 == i + 1); + QVERIFY(iter->first == i); + } + } + + + // reset + mTestObject->clear(); + // (id = i, index = i) + for(int i = 0; i < MEDIA_COUNT; ++i) + { + mTestObject->append(mMediaFactory->getMedia(i)); + } + + // remove from the end + id.iId1 = MEDIA_COUNT - 1; + mTestObject->remove(id); + QVERIFY(mTestObject->count() == MEDIA_COUNT - 1); + TMPXItemId checkId; + for(i = 0; i < mTestObject->count(); ++i) + { + checkId.iId1 = i; + checkId.iId2 = 0; + iter = mTestObject->mMediaData.find(checkId); + QVERIFY(iter != mTestObject->mMediaData.constEnd()); + QVERIFY(iter.key().iId1 == i); + QVERIFY(iter->first == i); + } + mTestObject->clear(); + +} + +// ----------------------------------------------------------------------------- +// testAppend +// ----------------------------------------------------------------------------- +// +void TestVideoDataContainer::testAppend() +{ + // append null object + mTestObject->append(0); + QVERIFY(mTestObject->count() == 0); + + // new item + mTestObject->append(mMediaFactory->getMedia(1)); + QVERIFY(mTestObject->count() == 1); + QString name; + VideoCollectionUtils::instance().mediaValue(mTestObject->fromIndex(0), KMPXMediaGeneralTitle, name ); + QVERIFY(name == "MEDIATESTNAME_1"); + + // existing item without data (except id)-> does not overwrite existing + name = ""; + mTestObject->append(mMediaFactory->getMedia(1, MediaDataId)); + QVERIFY(mTestObject->count() == 1); + VideoCollectionUtils::instance().mediaValue(mTestObject->fromIndex(0), KMPXMediaGeneralTitle, name ); + QVERIFY(name == "MEDIATESTNAME_1"); + + // new unexistent item + mTestObject->append(mMediaFactory->getMedia(2)); + QVERIFY(mTestObject->count() == 2); + VideoCollectionUtils::instance().mediaValue(mTestObject->fromIndex(1), KMPXMediaGeneralTitle, name ); + QVERIFY(name == "MEDIATESTNAME_2"); + + // item exists in removed -list + mTestObject->append(mMediaFactory->getMedia(3)); + QVERIFY(mTestObject->count() == 3); + mTestObject->markItemRemoved(2); + mTestObject->append(mMediaFactory->getMedia(3)); + QVERIFY(mTestObject->count() == 2); + + mTestObject->clear(); +} + +// ----------------------------------------------------------------------------- +// testFromIndex +// ----------------------------------------------------------------------------- +// +void TestVideoDataContainer::testFromIndex() +{ + QVERIFY(mTestObject->fromIndex(-1) == 0); + QVERIFY(mTestObject->fromIndex(0) == 0); + QVERIFY(mTestObject->fromIndex(1) == 0); + + // add few items to container (id = i, index = i) + for(int i = 0; i < MEDIA_COUNT; ++i) + { + mTestObject->append(mMediaFactory->getMedia(i)); + } + int id = -1; + QVERIFY(mTestObject->count() == MEDIA_COUNT); + QVERIFY(mTestObject->fromIndex(-1) == 0); + + QVERIFY(mTestObject->fromIndex(0) != 0); + VideoCollectionUtils::instance().mediaValue(mTestObject->fromIndex(0), KMPXMediaGeneralId, id ); + QVERIFY(id == 0); + + QVERIFY(mTestObject->fromIndex(1) != 0); + VideoCollectionUtils::instance().mediaValue(mTestObject->fromIndex(1), KMPXMediaGeneralId, id ); + QVERIFY(id == 1); + + QVERIFY(mTestObject->fromIndex(MEDIA_COUNT-1) != 0); + VideoCollectionUtils::instance().mediaValue(mTestObject->fromIndex(MEDIA_COUNT-1), KMPXMediaGeneralId, id ); + QVERIFY(id == MEDIA_COUNT-1); + + QVERIFY(mTestObject->fromIndex(MEDIA_COUNT) == 0); + mTestObject->clear(); +} + +// ----------------------------------------------------------------------------- +// testIndexOfId +// ----------------------------------------------------------------------------- +// +void TestVideoDataContainer::testIndexOfId() +{ + + QVERIFY(mTestObject->indexOfId(TMPXItemId::InvalidId()) == -1); + QVERIFY(mTestObject->indexOfId(TMPXItemId(0,0)) == -1); + QVERIFY(mTestObject->indexOfId(TMPXItemId(1,0)) == -1); + + // add few items to container (id = i, index = i) + for(int i = 0; i < MEDIA_COUNT; ++i) + { + mTestObject->append(mMediaFactory->getMedia(i)); + } + QVERIFY(mTestObject->indexOfId(TMPXItemId::InvalidId()) == -1); + QVERIFY(mTestObject->indexOfId(TMPXItemId(0,0)) == 0); + QVERIFY(mTestObject->indexOfId(TMPXItemId(1,0)) == 1); + QVERIFY(mTestObject->indexOfId(TMPXItemId(MEDIA_COUNT - 1, 0)) == MEDIA_COUNT - 1); + QVERIFY(mTestObject->indexOfId(TMPXItemId(MEDIA_COUNT, 0)) == -1); + + // remove one item at the middle of the list (id is same than index at this point) + mTestObject->remove(TMPXItemId(MEDIA_COUNT / 2, 0)); + QVERIFY(mTestObject->indexOfId(TMPXItemId(0,0)) == 0); + QVERIFY(mTestObject->indexOfId(TMPXItemId(1,0)) == 1); + QVERIFY(mTestObject->indexOfId(TMPXItemId(MEDIA_COUNT - 1, 0)) == MEDIA_COUNT - 2); + QVERIFY(mTestObject->indexOfId(TMPXItemId(MEDIA_COUNT - 2, 0)) == MEDIA_COUNT - 3); + QVERIFY(mTestObject->indexOfId(TMPXItemId(MEDIA_COUNT, 0)) == -1); + mTestObject->clear(); +} + +// ----------------------------------------------------------------------------- +// testIdFromIndex +// ----------------------------------------------------------------------------- +// +void TestVideoDataContainer::testIdFromIndex() +{ + QVERIFY(mTestObject->idFromIndex(-1) == TMPXItemId::InvalidId()); + QVERIFY(mTestObject->idFromIndex(0) == TMPXItemId::InvalidId()); + QVERIFY(mTestObject->idFromIndex(1) == TMPXItemId::InvalidId()); + // add few items to container (id = i, index = i) + for(int i = 0; i < MEDIA_COUNT; ++i) + { + mTestObject->append(mMediaFactory->getMedia(i)); + } + QVERIFY(mTestObject->idFromIndex(-1) == TMPXItemId::InvalidId()); + QVERIFY(mTestObject->idFromIndex(0).iId1 == 0); + QVERIFY(mTestObject->idFromIndex(1).iId1 == 1); + QVERIFY(mTestObject->idFromIndex(MEDIA_COUNT - 1).iId1 == MEDIA_COUNT - 1); + QVERIFY(mTestObject->idFromIndex(MEDIA_COUNT) == TMPXItemId::InvalidId()); + + // remove one item at the middle of the list (id is same than index at this point) + mTestObject->remove(TMPXItemId(MEDIA_COUNT / 2,0)); + QVERIFY(mTestObject->idFromIndex(0).iId1 == 0); + QVERIFY(mTestObject->idFromIndex(1).iId1 == 1); + QVERIFY(mTestObject->idFromIndex(MEDIA_COUNT - 1) == TMPXItemId::InvalidId()); + QVERIFY(mTestObject->idFromIndex(MEDIA_COUNT - 2).iId1 == MEDIA_COUNT - 1); + QVERIFY(mTestObject->idFromIndex(MEDIA_COUNT) == TMPXItemId::InvalidId()); + mTestObject->clear(); + +} + +// ----------------------------------------------------------------------------- +// testCount +// ----------------------------------------------------------------------------- +// +void TestVideoDataContainer::testCount() +{ + // this is mostly tested in other parts of tests, + // but let's just add few trivial cases + QVERIFY(mTestObject->count() == 0); + + mTestObject->append(mMediaFactory->getMedia(0)); + QVERIFY(mTestObject->count() == 1); + + for(int i = 1; i < MEDIA_COUNT; ++i) + { + mTestObject->append(mMediaFactory->getMedia(i)); + } + QVERIFY(mTestObject->count() == MEDIA_COUNT); + mTestObject->remove(TMPXItemId(MEDIA_COUNT / 2, 0)); + QVERIFY(mTestObject->count() == MEDIA_COUNT - 1); + mTestObject->clear(); +} + +void TestVideoDataContainer::testMarkItemRemoved() +{ + int i; + for(i = 0; i < MEDIA_COUNT; ++i) + { + mTestObject->append(mMediaFactory->getMedia(i)); + } + QVERIFY(mTestObject->count() == MEDIA_COUNT); + + // invalid item at index + QVERIFY(mTestObject->markItemRemoved(MEDIA_COUNT) == TMPXItemId::InvalidId()); + + // item not in removed -list + QVERIFY(mTestObject->count() == MEDIA_COUNT); + TMPXItemId id = mTestObject->idFromIndex(0); + QVERIFY(mTestObject->markItemRemoved(0) == id); + QVERIFY(mTestObject->count() == MEDIA_COUNT - 1); + + // at this point, indexes after recently marked first + // item have decreased by one (whereas ids increase by one) + QHash >::const_iterator iter; + for(i = 0; i < mTestObject->count(); ++i) + { + iter = mTestObject->mMediaData.find(mTestObject->mMediaIds[i]); + QVERIFY(iter != mTestObject->mMediaData.constEnd()); + QVERIFY(iter.key().iId1 == i + 1); + QVERIFY(iter->first == i ); + + } + CMPXMedia *media = 0; + id = mTestObject->idFromIndex(0); + // item already at removed -list + mTestObject->mRemovedMedia[id] = media; + QVERIFY(mTestObject->markItemRemoved(0) == id); + QVERIFY(mTestObject->count() == MEDIA_COUNT - 2); + +} + +void TestVideoDataContainer::testClearRemoved() +{ + int i; + for(i = 0; i < MEDIA_COUNT; ++i) + { + mTestObject->append(mMediaFactory->getMedia(i)); + } + QVERIFY(mTestObject->count() == MEDIA_COUNT); + for(i = MEDIA_COUNT; i >= 0; --i) + { + mTestObject->markItemRemoved(i); + } + QVERIFY(mTestObject->count() == 0); + QVERIFY(mTestObject->mRemovedMedia.count() == MEDIA_COUNT); + + // null idlist provided + QVERIFY(mTestObject->clearRemoved(0) == MEDIA_COUNT); + QVERIFY(mTestObject->count() == 0); + QVERIFY(mTestObject->mRemovedMedia.count() == 0); + + for(i = 0; i < MEDIA_COUNT; ++i) + { + mTestObject->append(mMediaFactory->getMedia(i)); + } + QVERIFY(mTestObject->count() == MEDIA_COUNT); + for(i = MEDIA_COUNT; i >= 0; --i) + { + mTestObject->markItemRemoved(i); + } + QVERIFY(mTestObject->count() == 0); + QVERIFY(mTestObject->mRemovedMedia.count() == MEDIA_COUNT); + + // empty id list + QList idList; + QVERIFY(mTestObject->clearRemoved(&idList) == 0); + QVERIFY(mTestObject->count() == 0); + QVERIFY(mTestObject->mRemovedMedia.count() == MEDIA_COUNT); + + // id list containing some ids + idList.append(TMPXItemId(0,0)); + idList.append(TMPXItemId(MEDIA_COUNT/2,0)); + idList.append(TMPXItemId(MEDIA_COUNT - 1,0)); + idList.append(TMPXItemId(MEDIA_COUNT,0)); + QVERIFY(mTestObject->clearRemoved(&idList) == 3); + QVERIFY(mTestObject->count() == 0); + QVERIFY(mTestObject->mRemovedMedia.count() == MEDIA_COUNT - 3); + +} + +void TestVideoDataContainer::testRestoreRemovedItems() +{ + int i; + for(i = 0; i < MEDIA_COUNT; ++i) + { + mTestObject->append(mMediaFactory->getMedia(i)); + } + QVERIFY(mTestObject->count() == MEDIA_COUNT); + for(i = MEDIA_COUNT; i >= 0; --i) + { + mTestObject->markItemRemoved(i); + } + QVERIFY(mTestObject->count() == 0); + QVERIFY(mTestObject->mRemovedMedia.count() == MEDIA_COUNT); + + // null id list, restores all + QVERIFY(mTestObject->restoreRemovedItems(0) == MEDIA_COUNT); + QVERIFY(mTestObject->count() == MEDIA_COUNT); + QVERIFY(mTestObject->mRemovedMedia.count() == 0); + + for(i = 0; i < MEDIA_COUNT; ++i) + { + mTestObject->append(mMediaFactory->getMedia(i)); + } + QVERIFY(mTestObject->count() == MEDIA_COUNT); + for(i = MEDIA_COUNT; i >= 0; --i) + { + mTestObject->markItemRemoved(i); + } + QVERIFY(mTestObject->count() == 0); + QVERIFY(mTestObject->mRemovedMedia.count() == MEDIA_COUNT); + + // second null id list, restores all + QVERIFY(mTestObject->restoreRemovedItems(0) == MEDIA_COUNT); + QVERIFY(mTestObject->count() == MEDIA_COUNT); + QVERIFY(mTestObject->mRemovedMedia.count() == 0); + + mTestObject->clear(); + for(i = 0; i < MEDIA_COUNT; ++i) + { + mTestObject->append(mMediaFactory->getMedia(i)); + } + QVERIFY(mTestObject->count() == MEDIA_COUNT); + for(i = MEDIA_COUNT; i >= 0; --i) + { + mTestObject->markItemRemoved(i); + } + QVERIFY(mTestObject->count() == 0); + QVERIFY(mTestObject->mRemovedMedia.count() == MEDIA_COUNT); + + QList idList; + // empty list + QVERIFY(mTestObject->restoreRemovedItems(&idList) == 0); + QVERIFY(mTestObject->count() == 0); + QVERIFY(mTestObject->mRemovedMedia.count() == MEDIA_COUNT); + + // some items with collection doesn't match + idList.append(TMPXItemId(0,0)); + idList.append(TMPXItemId(MEDIA_COUNT/2,0)); + idList.append(TMPXItemId(MEDIA_COUNT - 1,0)); + idList.append(TMPXItemId(MEDIA_COUNT,0)); + QVERIFY(mTestObject->restoreRemovedItems(&idList) == 3); + QVERIFY(mTestObject->count() == 3); + QVERIFY(mTestObject->mRemovedMedia.count() == MEDIA_COUNT - 3); + mTestObject->clearRemoved(0); + mTestObject->clear(); + for(i = 0; i < MEDIA_COUNT; ++i) + { + mTestObject->append(mMediaFactory->getMedia(i)); + } + QVERIFY(mTestObject->count() == MEDIA_COUNT); + for(i = MEDIA_COUNT; i >= 0; --i) + { + mTestObject->markItemRemoved(i); + } + QVERIFY(mTestObject->count() == 0); + QVERIFY(mTestObject->mRemovedMedia.count() == MEDIA_COUNT); + + // some items with collection matching + QVERIFY(mTestObject->restoreRemovedItems(&idList) == 3); + QVERIFY(mTestObject->count() == 3); + QVERIFY(mTestObject->mRemovedMedia.count() == MEDIA_COUNT - 3); +} + +void TestVideoDataContainer::testGetRemovedMedia() +{ + int i; + for(i = 0; i < MEDIA_COUNT; ++i) + { + mTestObject->append(mMediaFactory->getMedia(i)); + } + QVERIFY(mTestObject->count() == MEDIA_COUNT); + mTestObject->markItemRemoved(MEDIA_COUNT - 1); + mTestObject->markItemRemoved(MEDIA_COUNT / 2); + mTestObject->markItemRemoved(0); + QVERIFY(mTestObject->count() == MEDIA_COUNT - 3); + QVERIFY(mTestObject->mRemovedMedia.count() == 3); + + CMPXMedia *media = 0; + media = mTestObject->getRemovedMedia(TMPXItemId(1,0)); + QVERIFY(!media); + media = mTestObject->getRemovedMedia(TMPXItemId(0,0)); + QVERIFY(media); + media = 0; + media = mTestObject->getRemovedMedia(TMPXItemId(MEDIA_COUNT - 1,0)); + QVERIFY(media); +} + +// end of file