Check and fix up bounds in QMediaPlaylist methods.

Change-Id: I665d665139dbe9663b20ecb08fa3dab9cbe3f899
Reviewed-by: Yoann Lopes <yoann.lopes@theqtcompany.com>
This commit is contained in:
Loïc Molinari
2015-08-09 21:35:07 +02:00
committed by Yoann Lopes
parent 414b748b23
commit 475a14ccc3
2 changed files with 133 additions and 6 deletions

View File

@@ -358,7 +358,8 @@ bool QMediaPlaylist::addMedia(const QList<QMediaContent> &items)
bool QMediaPlaylist::insertMedia(int pos, const QMediaContent &content)
{
return d_func()->playlist()->insertMedia(pos, content);
QMediaPlaylistProvider *playlist = d_func()->playlist();
return playlist->insertMedia(qBound(0, pos, playlist->mediaCount()), content);
}
/*!
@@ -369,7 +370,8 @@ bool QMediaPlaylist::insertMedia(int pos, const QMediaContent &content)
bool QMediaPlaylist::insertMedia(int pos, const QList<QMediaContent> &items)
{
return d_func()->playlist()->insertMedia(pos, items);
QMediaPlaylistProvider *playlist = d_func()->playlist();
return playlist->insertMedia(qBound(0, pos, playlist->mediaCount()), items);
}
/*!
@@ -379,8 +381,11 @@ bool QMediaPlaylist::insertMedia(int pos, const QList<QMediaContent> &items)
*/
bool QMediaPlaylist::removeMedia(int pos)
{
Q_D(QMediaPlaylist);
return d->playlist()->removeMedia(pos);
QMediaPlaylistProvider *playlist = d_func()->playlist();
if (pos >= 0 && pos < playlist->mediaCount())
return playlist->removeMedia(pos);
else
return false;
}
/*!
@@ -390,8 +395,13 @@ bool QMediaPlaylist::removeMedia(int pos)
*/
bool QMediaPlaylist::removeMedia(int start, int end)
{
Q_D(QMediaPlaylist);
return d->playlist()->removeMedia(start, end);
QMediaPlaylistProvider *playlist = d_func()->playlist();
start = qMax(0, start);
end = qMin(end, playlist->mediaCount() - 1);
if (start <= end)
return playlist->removeMedia(start, end);
else
return false;
}
/*!

View File

@@ -234,6 +234,71 @@ void tst_QMediaPlaylist::insert()
playlist.insertMedia(1, QList<QMediaContent>());
QCOMPARE(aboutToBeInsertedSignalSpy.count(), 0);
QCOMPARE(insertedSignalSpy.count(), 0);
playlist.clear();
playlist.addMedia(content1);
aboutToBeInsertedSignalSpy.clear();
insertedSignalSpy.clear();
playlist.insertMedia(-10, content2);
QCOMPARE(playlist.media(0), content2);
QCOMPARE(playlist.media(1), content1);
QCOMPARE(aboutToBeInsertedSignalSpy.count(), 1);
QCOMPARE(aboutToBeInsertedSignalSpy.first()[0].toInt(), 0);
QCOMPARE(aboutToBeInsertedSignalSpy.first()[1].toInt(), 0);
QCOMPARE(insertedSignalSpy.count(), 1);
QCOMPARE(insertedSignalSpy.first()[0].toInt(), 0);
QCOMPARE(insertedSignalSpy.first()[1].toInt(), 0);
aboutToBeInsertedSignalSpy.clear();
insertedSignalSpy.clear();
playlist.insertMedia(10, content3);
QCOMPARE(playlist.media(0), content2);
QCOMPARE(playlist.media(1), content1);
QCOMPARE(playlist.media(2), content3);
QCOMPARE(aboutToBeInsertedSignalSpy.count(), 1);
QCOMPARE(aboutToBeInsertedSignalSpy.first()[0].toInt(), 2);
QCOMPARE(aboutToBeInsertedSignalSpy.first()[1].toInt(), 2);
QCOMPARE(insertedSignalSpy.count(), 1);
QCOMPARE(insertedSignalSpy.first()[0].toInt(), 2);
QCOMPARE(insertedSignalSpy.first()[1].toInt(), 2);
aboutToBeInsertedSignalSpy.clear();
insertedSignalSpy.clear();
playlist.insertMedia(-10, QList<QMediaContent>() << content4 << content5);
QCOMPARE(playlist.media(0), content4);
QCOMPARE(playlist.media(1), content5);
QCOMPARE(playlist.media(2), content2);
QCOMPARE(playlist.media(3), content1);
QCOMPARE(playlist.media(4), content3);
QCOMPARE(aboutToBeInsertedSignalSpy.count(), 1);
QCOMPARE(aboutToBeInsertedSignalSpy.first()[0].toInt(), 0);
QCOMPARE(aboutToBeInsertedSignalSpy.first()[1].toInt(), 1);
QCOMPARE(insertedSignalSpy.count(), 1);
QCOMPARE(insertedSignalSpy.first()[0].toInt(), 0);
QCOMPARE(insertedSignalSpy.first()[1].toInt(), 1);
aboutToBeInsertedSignalSpy.clear();
insertedSignalSpy.clear();
QMediaContent content6(QUrl(QLatin1String("file:///6")));
QMediaContent content7(QUrl(QLatin1String("file:///7")));
playlist.insertMedia(10, QList<QMediaContent>() << content6 << content7);
QCOMPARE(playlist.media(0), content4);
QCOMPARE(playlist.media(1), content5);
QCOMPARE(playlist.media(2), content2);
QCOMPARE(playlist.media(3), content1);
QCOMPARE(playlist.media(4), content3);
QCOMPARE(playlist.media(5), content6);
QCOMPARE(playlist.media(6), content7);
QCOMPARE(aboutToBeInsertedSignalSpy.count(), 1);
QCOMPARE(aboutToBeInsertedSignalSpy.first()[0].toInt(), 5);
QCOMPARE(aboutToBeInsertedSignalSpy.first()[1].toInt(), 6);
QCOMPARE(insertedSignalSpy.count(), 1);
QCOMPARE(insertedSignalSpy.first()[0].toInt(), 5);
QCOMPARE(insertedSignalSpy.first()[1].toInt(), 6);
}
@@ -329,6 +394,58 @@ void tst_QMediaPlaylist::removeMedia()
playlist.removeMedia(0,1);
QCOMPARE(playlist.mediaCount(), 1);
QCOMPARE(playlist.media(0), content3);
QCOMPARE(playlist.removeMedia(-1), false);
QCOMPARE(playlist.removeMedia(1), false);
playlist.addMedia(content1);
aboutToBeRemovedSignalSpy.clear();
removedSignalSpy.clear();
playlist.removeMedia(-10, 10);
QCOMPARE(aboutToBeRemovedSignalSpy.count(), 1);
QCOMPARE(aboutToBeRemovedSignalSpy.first()[0].toInt(), 0);
QCOMPARE(aboutToBeRemovedSignalSpy.first()[1].toInt(), 1);
QCOMPARE(removedSignalSpy.count(), 1);
QCOMPARE(removedSignalSpy.first()[0].toInt(), 0);
QCOMPARE(removedSignalSpy.first()[1].toInt(), 1);
playlist.addMedia(content1);
playlist.addMedia(content2);
playlist.addMedia(content3);
aboutToBeRemovedSignalSpy.clear();
removedSignalSpy.clear();
QCOMPARE(playlist.removeMedia(10, -10), false);
QCOMPARE(aboutToBeRemovedSignalSpy.count(), 0);
QCOMPARE(removedSignalSpy.count(), 0);
QCOMPARE(playlist.removeMedia(-10, -5), false);
QCOMPARE(aboutToBeRemovedSignalSpy.count(), 0);
QCOMPARE(removedSignalSpy.count(), 0);
QCOMPARE(playlist.removeMedia(5, 10), false);
QCOMPARE(aboutToBeRemovedSignalSpy.count(), 0);
QCOMPARE(removedSignalSpy.count(), 0);
playlist.removeMedia(1, 10);
QCOMPARE(aboutToBeRemovedSignalSpy.count(), 1);
QCOMPARE(aboutToBeRemovedSignalSpy.first()[0].toInt(), 1);
QCOMPARE(aboutToBeRemovedSignalSpy.first()[1].toInt(), 2);
QCOMPARE(removedSignalSpy.count(), 1);
QCOMPARE(removedSignalSpy.first()[0].toInt(), 1);
QCOMPARE(removedSignalSpy.first()[1].toInt(), 2);
playlist.addMedia(content2);
playlist.addMedia(content3);
aboutToBeRemovedSignalSpy.clear();
removedSignalSpy.clear();
playlist.removeMedia(-10, 1);
QCOMPARE(aboutToBeRemovedSignalSpy.count(), 1);
QCOMPARE(aboutToBeRemovedSignalSpy.first()[0].toInt(), 0);
QCOMPARE(aboutToBeRemovedSignalSpy.first()[1].toInt(), 1);
QCOMPARE(removedSignalSpy.count(), 1);
QCOMPARE(removedSignalSpy.first()[0].toInt(), 0);
QCOMPARE(removedSignalSpy.first()[1].toInt(), 1);
}
void tst_QMediaPlaylist::saveAndLoad()