/**************************************************************************** ** ** Copyright (C) 2016 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:GPL-EXCEPT$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** GNU General Public License Usage ** Alternatively, this file may be used under the terms of the GNU ** General Public License version 3 as published by the Free Software ** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT ** included in the packaging of this file. Please review the following ** information to ensure the GNU General Public License requirements will ** be met: https://www.gnu.org/licenses/gpl-3.0.html. ** ** $QT_END_LICENSE$ ** ****************************************************************************/ //TESTED_COMPONENT=src/multimedia #include #include #include #include QT_USE_NAMESPACE class tst_QMediaPlaylistNavigator : public QObject { Q_OBJECT public slots: void init(); void cleanup(); private slots: void construction(); void setPlaylist(); void linearPlayback(); void loopPlayback(); void currentItemOnce(); void currentItemInLoop(); void randomPlayback(); void testItemAt(); void testNextIndex(); void testPreviousIndex(); void testCurrentIndexChangedSignal(); void testPlaybackModeChangedSignal(); void testSurroundingItemsChangedSignal(); void testActivatedSignal(); }; void tst_QMediaPlaylistNavigator::init() { qRegisterMetaType("QMediaPlaylist::PlaybackMode"); qRegisterMetaType("QMediaContent"); } void tst_QMediaPlaylistNavigator::cleanup() { } void tst_QMediaPlaylistNavigator::construction() { QMediaNetworkPlaylistProvider playlist; QCOMPARE(playlist.mediaCount(), 0); QMediaPlaylistNavigator navigator(&playlist); QVERIFY(navigator.currentItem().isNull()); QCOMPARE(navigator.currentIndex(), -1); } void tst_QMediaPlaylistNavigator::setPlaylist() { QMediaPlaylistNavigator navigator(0); QVERIFY(navigator.playlist() != 0); QCOMPARE(navigator.playlist()->mediaCount(), 0); QCOMPARE(navigator.playlist()->media(0), QMediaContent()); QVERIFY(navigator.playlist()->isReadOnly() ); QMediaNetworkPlaylistProvider playlist; QCOMPARE(playlist.mediaCount(), 0); navigator.setPlaylist(&playlist); QCOMPARE(navigator.playlist(), (QMediaPlaylistProvider*)&playlist); QCOMPARE(navigator.playlist()->mediaCount(), 0); QVERIFY(!navigator.playlist()->isReadOnly() ); } void tst_QMediaPlaylistNavigator::linearPlayback() { QMediaNetworkPlaylistProvider playlist; QMediaPlaylistNavigator navigator(&playlist); navigator.setPlaybackMode(QMediaPlaylist::Sequential); navigator.jump(0); QVERIFY(navigator.currentItem().isNull()); QCOMPARE(navigator.currentIndex(), -1); QMediaContent content1(QUrl(QLatin1String("file:///1"))); playlist.addMedia(content1); navigator.jump(0); QVERIFY(!navigator.currentItem().isNull()); QCOMPARE(navigator.currentIndex(), 0); QCOMPARE(navigator.currentItem(), content1); QCOMPARE(navigator.nextItem(), QMediaContent()); QCOMPARE(navigator.nextItem(2), QMediaContent()); QCOMPARE(navigator.previousItem(), QMediaContent()); QCOMPARE(navigator.previousItem(2), QMediaContent()); QMediaContent content2(QUrl(QLatin1String("file:///2"))); playlist.addMedia(content2); QCOMPARE(navigator.currentIndex(), 0); QCOMPARE(navigator.currentItem(), content1); QCOMPARE(navigator.nextItem(), content2); QCOMPARE(navigator.nextItem(2), QMediaContent()); QCOMPARE(navigator.previousItem(), QMediaContent()); QCOMPARE(navigator.previousItem(2), QMediaContent()); navigator.jump(1); QCOMPARE(navigator.currentIndex(), 1); QCOMPARE(navigator.currentItem(), content2); QCOMPARE(navigator.nextItem(), QMediaContent()); QCOMPARE(navigator.nextItem(2), QMediaContent()); QCOMPARE(navigator.previousItem(), content1); QCOMPARE(navigator.previousItem(2), QMediaContent()); navigator.jump(0); navigator.next(); QCOMPARE(navigator.currentIndex(), 1); navigator.next(); QCOMPARE(navigator.currentIndex(), -1); navigator.next();//jump to the first item QCOMPARE(navigator.currentIndex(), 0); navigator.previous(); QCOMPARE(navigator.currentIndex(), -1); navigator.previous();//jump to the last item QCOMPARE(navigator.currentIndex(), 1); } void tst_QMediaPlaylistNavigator::loopPlayback() { QMediaNetworkPlaylistProvider playlist; QMediaPlaylistNavigator navigator(&playlist); navigator.setPlaybackMode(QMediaPlaylist::Loop); navigator.jump(0); QVERIFY(navigator.currentItem().isNull()); QCOMPARE(navigator.currentIndex(), -1); QMediaContent content1(QUrl(QLatin1String("file:///1"))); playlist.addMedia(content1); navigator.jump(0); QVERIFY(!navigator.currentItem().isNull()); QCOMPARE(navigator.currentIndex(), 0); QCOMPARE(navigator.currentItem(), content1); QCOMPARE(navigator.nextItem(), content1); QCOMPARE(navigator.nextItem(2), content1); QCOMPARE(navigator.previousItem(), content1); QCOMPARE(navigator.previousItem(2), content1); QMediaContent content2(QUrl(QLatin1String("file:///2"))); playlist.addMedia(content2); QCOMPARE(navigator.currentIndex(), 0); QCOMPARE(navigator.currentItem(), content1); QCOMPARE(navigator.nextItem(), content2); QCOMPARE(navigator.nextItem(2), content1); //loop over end of the list QCOMPARE(navigator.previousItem(), content2); QCOMPARE(navigator.previousItem(2), content1); navigator.jump(1); QCOMPARE(navigator.currentIndex(), 1); QCOMPARE(navigator.currentItem(), content2); QCOMPARE(navigator.nextItem(), content1); QCOMPARE(navigator.nextItem(2), content2); QCOMPARE(navigator.previousItem(), content1); QCOMPARE(navigator.previousItem(2), content2); navigator.jump(0); navigator.next(); QCOMPARE(navigator.currentIndex(), 1); navigator.next(); QCOMPARE(navigator.currentIndex(), 0); navigator.previous(); QCOMPARE(navigator.currentIndex(), 1); navigator.previous(); QCOMPARE(navigator.currentIndex(), 0); } void tst_QMediaPlaylistNavigator::currentItemOnce() { QMediaNetworkPlaylistProvider playlist; QMediaPlaylistNavigator navigator(&playlist); navigator.setPlaybackMode(QMediaPlaylist::CurrentItemOnce); QCOMPARE(navigator.playbackMode(), QMediaPlaylist::CurrentItemOnce); QCOMPARE(navigator.currentIndex(), -1); playlist.addMedia(QMediaContent(QUrl(QLatin1String("file:///1")))); playlist.addMedia(QMediaContent(QUrl(QLatin1String("file:///2")))); playlist.addMedia(QMediaContent(QUrl(QLatin1String("file:///3")))); QCOMPARE(navigator.currentIndex(), -1); navigator.next(); QCOMPARE(navigator.currentIndex(), -1); navigator.jump(1); QCOMPARE(navigator.currentIndex(), 1); navigator.next(); QCOMPARE(navigator.currentIndex(), -1); navigator.next(); QCOMPARE(navigator.currentIndex(), -1); navigator.previous(); QCOMPARE(navigator.currentIndex(), -1); navigator.jump(1); navigator.previous(); QCOMPARE(navigator.currentIndex(), -1); } void tst_QMediaPlaylistNavigator::currentItemInLoop() { QMediaNetworkPlaylistProvider playlist; QMediaPlaylistNavigator navigator(&playlist); navigator.setPlaybackMode(QMediaPlaylist::CurrentItemInLoop); QCOMPARE(navigator.playbackMode(), QMediaPlaylist::CurrentItemInLoop); QCOMPARE(navigator.currentIndex(), -1); playlist.addMedia(QMediaContent(QUrl(QLatin1String("file:///1")))); playlist.addMedia(QMediaContent(QUrl(QLatin1String("file:///2")))); playlist.addMedia(QMediaContent(QUrl(QLatin1String("file:///3")))); QCOMPARE(navigator.currentIndex(), -1); navigator.next(); QCOMPARE(navigator.currentIndex(), -1); navigator.jump(1); navigator.next(); QCOMPARE(navigator.currentIndex(), 1); navigator.next(); QCOMPARE(navigator.currentIndex(), 1); navigator.previous(); QCOMPARE(navigator.currentIndex(), 1); navigator.previous(); QCOMPARE(navigator.currentIndex(), 1); } void tst_QMediaPlaylistNavigator::randomPlayback() { QMediaNetworkPlaylistProvider playlist; QMediaPlaylistNavigator navigator(&playlist); navigator.setPlaybackMode(QMediaPlaylist::Random); QCOMPARE(navigator.playbackMode(), QMediaPlaylist::Random); QCOMPARE(navigator.currentIndex(), -1); playlist.addMedia(QMediaContent(QUrl(QLatin1String("file:///1")))); playlist.addMedia(QMediaContent(QUrl(QLatin1String("file:///2")))); playlist.addMedia(QMediaContent(QUrl(QLatin1String("file:///3")))); playlist.shuffle(); QCOMPARE(navigator.currentIndex(), -1); navigator.next(); int pos1 = navigator.currentIndex(); navigator.next(); int pos2 = navigator.currentIndex(); navigator.next(); int pos3 = navigator.currentIndex(); QVERIFY(pos1 != -1); QVERIFY(pos2 != -1); QVERIFY(pos3 != -1); navigator.previous(); QCOMPARE(navigator.currentIndex(), pos2); navigator.next(); QCOMPARE(navigator.currentIndex(), pos3); navigator.next(); int pos4 = navigator.currentIndex(); navigator.previous(); QCOMPARE(navigator.currentIndex(), pos3); navigator.previous(); QCOMPARE(navigator.currentIndex(), pos2); navigator.previous(); QCOMPARE(navigator.currentIndex(), pos1); navigator.previous(); int pos0 = navigator.currentIndex(); QVERIFY(pos0 != -1); navigator.next(); navigator.next(); navigator.next(); navigator.next(); QCOMPARE(navigator.currentIndex(), pos4); } void tst_QMediaPlaylistNavigator::testItemAt() { QMediaNetworkPlaylistProvider playlist; QMediaPlaylistNavigator navigator(&playlist); navigator.setPlaybackMode(QMediaPlaylist::Random); QCOMPARE(navigator.playbackMode(), QMediaPlaylist::Random); QCOMPARE(navigator.currentIndex(), -1); //Adding the media to the playlist QMediaContent content = QMediaContent(QUrl(QLatin1String("file:///1"))); playlist.addMedia(content); //Currently it is not pointing to any index , Returns Null mediacontent QCOMPARE(navigator.currentIndex(), -1); QCOMPARE(navigator.itemAt(navigator.currentIndex()),QMediaContent()); navigator.next(); //Points to the added media int pos1 = navigator.currentIndex(); QCOMPARE(content,navigator.itemAt(pos1)); } void tst_QMediaPlaylistNavigator::testNextIndex() { QMediaNetworkPlaylistProvider playlist; QMediaPlaylistNavigator navigator(&playlist); navigator.setPlaybackMode(QMediaPlaylist::Random); QCOMPARE(navigator.playbackMode(), QMediaPlaylist::Random); QCOMPARE(navigator.currentIndex(), -1); //Adding the media to the playlist playlist.addMedia(QMediaContent(QUrl(QLatin1String("file:///1")))); playlist.addMedia(QMediaContent(QUrl(QLatin1String("file:///2")))); playlist.addMedia(QMediaContent(QUrl(QLatin1String("file:///3")))); playlist.shuffle(); //Currently it is not pointing to any index QCOMPARE(navigator.currentIndex(), -1); navigator.next(); int pos1 = navigator.currentIndex(); //Pointing to the next index navigator.next(); int pos2 = navigator.currentIndex(); navigator.next(); int pos3 = navigator.currentIndex(); //Pointing to the previous index navigator.previous(); QCOMPARE(navigator.nextIndex(1), pos3); navigator.previous(); QCOMPARE(navigator.nextIndex(1), pos2); QCOMPARE(navigator.nextIndex(2), pos3); navigator.previous(); QCOMPARE(navigator.nextIndex(1), pos1); } void tst_QMediaPlaylistNavigator::testPreviousIndex() { QMediaNetworkPlaylistProvider playlist; QMediaPlaylistNavigator navigator(&playlist); navigator.setPlaybackMode(QMediaPlaylist::Random); QCOMPARE(navigator.playbackMode(), QMediaPlaylist::Random); QCOMPARE(navigator.currentIndex(), -1); //Adding the media to the playlist playlist.addMedia(QMediaContent(QUrl(QLatin1String("file:///1")))); playlist.addMedia(QMediaContent(QUrl(QLatin1String("file:///2")))); playlist.addMedia(QMediaContent(QUrl(QLatin1String("file:///3")))); playlist.shuffle(); //Currently it is not pointing to any index QCOMPARE(navigator.currentIndex(), -1); //pointing to next index navigator.next(); int pos1 = navigator.currentIndex(); navigator.next(); int pos2 = navigator.currentIndex(); navigator.next(); int pos3 = navigator.currentIndex(); QCOMPARE(navigator.previousIndex(1), pos2); QCOMPARE(navigator.previousIndex(2), pos1); navigator.next(); QCOMPARE(navigator.previousIndex(1), pos3); } void tst_QMediaPlaylistNavigator::testCurrentIndexChangedSignal() { QMediaNetworkPlaylistProvider playlist; QMediaPlaylistNavigator navigator(&playlist); QCOMPARE(navigator.playbackMode(), QMediaPlaylist::Sequential); QCOMPARE(navigator.currentIndex(), -1); //Creating a QSignalSpy object for currentIndexChanged() signal QSignalSpy spy(&navigator,SIGNAL(currentIndexChanged(int))); QVERIFY(spy.count() == 0); //Adding the media to the playlist playlist.addMedia(QMediaContent(QUrl(QLatin1String("file:///1")))); playlist.addMedia(QMediaContent(QUrl(QLatin1String("file:///2")))); playlist.addMedia(QMediaContent(QUrl(QLatin1String("file:///3")))); //Currently it is not pointing to any index QCOMPARE(navigator.currentIndex(), -1); navigator.next(); QVERIFY(spy.count() == 1); int pos1 = navigator.currentIndex(); //Pointing to the next index navigator.next(); QVERIFY(navigator.previousIndex(1) == pos1); QVERIFY(spy.count() == 2); } void tst_QMediaPlaylistNavigator::testPlaybackModeChangedSignal() { QMediaNetworkPlaylistProvider playlist; QMediaPlaylistNavigator navigator(&playlist); navigator.setPlaybackMode(QMediaPlaylist::Random); QCOMPARE(navigator.playbackMode(), QMediaPlaylist::Random); QCOMPARE(navigator.currentIndex(), -1); //Creating a QSignalSpy object for currentIndexChanged() signal QSignalSpy spy(&navigator,SIGNAL(playbackModeChanged(QMediaPlaylist::PlaybackMode))); QVERIFY(spy.count() == 0); //Adding the media to the playlist playlist.addMedia(QMediaContent(QUrl(QLatin1String("file:///1")))); //set the play back mode to sequential navigator.setPlaybackMode(QMediaPlaylist::Sequential); QCOMPARE(navigator.playbackMode(), QMediaPlaylist::Sequential); QVERIFY(spy.count() == 1); //set the play back mode to loop navigator.setPlaybackMode(QMediaPlaylist::Loop); QCOMPARE(navigator.playbackMode(), QMediaPlaylist::Loop); QVERIFY(spy.count() == 2); } void tst_QMediaPlaylistNavigator::testSurroundingItemsChangedSignal() { QMediaNetworkPlaylistProvider playlist; QMediaPlaylistNavigator navigator(&playlist); navigator.setPlaybackMode(QMediaPlaylist::Random); QCOMPARE(navigator.playbackMode(), QMediaPlaylist::Random); QCOMPARE(navigator.currentIndex(), -1); //Creating a QSignalSpy object for surroundingItemsChanged()signal QSignalSpy spy(&navigator,SIGNAL(surroundingItemsChanged())); QVERIFY(spy.count() == 0); //Adding the media to the playlist playlist.addMedia(QMediaContent(QUrl(QLatin1String("file:///1")))); QVERIFY(spy.count() == 1); //set the play back mode to sequential navigator.setPlaybackMode(QMediaPlaylist::Sequential); QCOMPARE(navigator.playbackMode(), QMediaPlaylist::Sequential); QVERIFY(spy.count() == 2); //Point to the next index navigator.next(); QVERIFY(spy.count() == 3); } void tst_QMediaPlaylistNavigator::testActivatedSignal() { QMediaNetworkPlaylistProvider playlist; QMediaPlaylistNavigator navigator(&playlist); navigator.setPlaybackMode(QMediaPlaylist::Random); QCOMPARE(navigator.playbackMode(), QMediaPlaylist::Random); QCOMPARE(navigator.currentIndex(), -1); //Creating a QSignalSpy object for surroundingItemsChanged()signal QSignalSpy spy(&navigator,SIGNAL(activated(QMediaContent))); QVERIFY(spy.count() == 0); //Adding the media to the playlist playlist.addMedia(QMediaContent(QUrl(QLatin1String("file:///1")))); playlist.addMedia(QMediaContent(QUrl(QLatin1String("file:///2")))); playlist.shuffle(); //Point to the next index navigator.next(); QVERIFY(spy.count() == 1); //Jump to 0th item navigator.jump(0); QVERIFY(spy.count() == 2); //move to previous item navigator.previous(); QVERIFY(spy.count() == 3); } QTEST_MAIN(tst_QMediaPlaylistNavigator) #include "tst_qmediaplaylistnavigator.moc"