blob: 786570bec8233e8751ecae0c7ca5d8b4759bdc25 [file] [log] [blame]
/****************************************************************************
**
** 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 <QtTest/QtTest>
#include "qmediaresource.h"
QT_USE_NAMESPACE
class tst_QMediaResource : public QObject
{
Q_OBJECT
private slots:
#if QT_DEPRECATED_SINCE(6, 0)
void constructNull();
void construct_data();
void construct();
void setResolution();
void equality();
void copy();
void assign();
void constructorRequest();
void copyConstructor();
#else
void initTestCase()
{
QSKIP("Skipping this test, QMediaResource is deprecated.");
}
#endif
};
#if QT_DEPRECATED_SINCE(6, 0)
void tst_QMediaResource::constructNull()
{
QMediaResource resource;
QCOMPARE(resource.isNull(), true);
QCOMPARE(resource.url(), QUrl());
QCOMPARE(resource.request(), QNetworkRequest());
QCOMPARE(resource.mimeType(), QString());
QCOMPARE(resource.language(), QString());
QCOMPARE(resource.audioCodec(), QString());
QCOMPARE(resource.videoCodec(), QString());
QCOMPARE(resource.dataSize(), qint64(0));
QCOMPARE(resource.audioBitRate(), 0);
QCOMPARE(resource.sampleRate(), 0);
QCOMPARE(resource.channelCount(), 0);
QCOMPARE(resource.videoBitRate(), 0);
QCOMPARE(resource.resolution(), QSize());
}
void tst_QMediaResource::construct_data()
{
QTest::addColumn<QUrl>("url");
QTest::addColumn<QNetworkRequest>("request");
QTest::addColumn<QString>("mimeType");
QTest::addColumn<QString>("language");
QTest::addColumn<QString>("audioCodec");
QTest::addColumn<QString>("videoCodec");
QTest::addColumn<qint64>("dataSize");
QTest::addColumn<int>("audioBitRate");
QTest::addColumn<int>("sampleRate");
QTest::addColumn<int>("channelCount");
QTest::addColumn<int>("videoBitRate");
QTest::addColumn<QSize>("resolution");
QTest::newRow("audio content")
<< QUrl(QString::fromLatin1("http:://test.com/test.mp3"))
<< QNetworkRequest(QUrl(QString::fromLatin1("http:://test.com/test.mp3")))
<< QString::fromLatin1("audio/mpeg")
<< QString::fromLatin1("eng")
<< QString::fromLatin1("mp3")
<< QString()
<< qint64(5465433)
<< 128000
<< 44100
<< 2
<< 0
<< QSize();
QTest::newRow("image content")
<< QUrl(QString::fromLatin1("http:://test.com/test.jpg"))
<< QNetworkRequest(QUrl(QString::fromLatin1("http:://test.com/test.jpg")))
<< QString::fromLatin1("image/jpeg")
<< QString()
<< QString()
<< QString()
<< qint64(23600)
<< 0
<< 0
<< 0
<< 0
<< QSize(640, 480);
QTest::newRow("video content")
<< QUrl(QString::fromLatin1("http:://test.com/test.mp4"))
<< QNetworkRequest(QUrl(QString::fromLatin1("http:://test.com/test.mp4")))
<< QString::fromLatin1("video/mp4")
<< QString()
<< QString::fromLatin1("aac")
<< QString::fromLatin1("h264")
<< qint64(36245851)
<< 96000
<< 44000
<< 5
<< 750000
<< QSize(720, 576);
QTest::newRow("thumbnail")
<< QUrl(QString::fromLatin1("file::///thumbs/test.png"))
<< QNetworkRequest(QUrl(QString::fromLatin1("file::///thumbs/test.png")))
<< QString::fromLatin1("image/png")
<< QString()
<< QString()
<< QString()
<< qint64(2360)
<< 0
<< 0
<< 0
<< 0
<< QSize(128, 128);
}
void tst_QMediaResource::construct()
{
QFETCH(QUrl, url);
QFETCH(QNetworkRequest, request);
QFETCH(QString, mimeType);
QFETCH(QString, language);
QFETCH(QString, audioCodec);
QFETCH(QString, videoCodec);
QFETCH(qint64, dataSize);
QFETCH(int, audioBitRate);
QFETCH(int, sampleRate);
QFETCH(int, channelCount);
QFETCH(int, videoBitRate);
QFETCH(QSize, resolution);
{
QMediaResource resource(url);
QCOMPARE(resource.isNull(), false);
QCOMPARE(resource.url(), url);
QCOMPARE(resource.mimeType(), QString());
QCOMPARE(resource.language(), QString());
QCOMPARE(resource.audioCodec(), QString());
QCOMPARE(resource.videoCodec(), QString());
QCOMPARE(resource.dataSize(), qint64(0));
QCOMPARE(resource.audioBitRate(), 0);
QCOMPARE(resource.sampleRate(), 0);
QCOMPARE(resource.channelCount(), 0);
QCOMPARE(resource.videoBitRate(), 0);
QCOMPARE(resource.resolution(), QSize());
}
{
QMediaResource resource(url, mimeType);
QCOMPARE(resource.isNull(), false);
QCOMPARE(resource.url(), url);
QCOMPARE(resource.request(), request);
QCOMPARE(resource.mimeType(), mimeType);
QCOMPARE(resource.language(), QString());
QCOMPARE(resource.audioCodec(), QString());
QCOMPARE(resource.videoCodec(), QString());
QCOMPARE(resource.dataSize(), qint64(0));
QCOMPARE(resource.audioBitRate(), 0);
QCOMPARE(resource.sampleRate(), 0);
QCOMPARE(resource.channelCount(), 0);
QCOMPARE(resource.videoBitRate(), 0);
QCOMPARE(resource.resolution(), QSize());
resource.setLanguage(language);
resource.setAudioCodec(audioCodec);
resource.setVideoCodec(videoCodec);
resource.setDataSize(dataSize);
resource.setAudioBitRate(audioBitRate);
resource.setSampleRate(sampleRate);
resource.setChannelCount(channelCount);
resource.setVideoBitRate(videoBitRate);
resource.setResolution(resolution);
QCOMPARE(resource.language(), language);
QCOMPARE(resource.audioCodec(), audioCodec);
QCOMPARE(resource.videoCodec(), videoCodec);
QCOMPARE(resource.dataSize(), dataSize);
QCOMPARE(resource.audioBitRate(), audioBitRate);
QCOMPARE(resource.sampleRate(), sampleRate);
QCOMPARE(resource.channelCount(), channelCount);
QCOMPARE(resource.videoBitRate(), videoBitRate);
QCOMPARE(resource.resolution(), resolution);
}
{
QMediaResource resource(request, mimeType);
QCOMPARE(resource.isNull(), false);
QCOMPARE(resource.url(), url);
QCOMPARE(resource.request(), request);
QCOMPARE(resource.mimeType(), mimeType);
QCOMPARE(resource.language(), QString());
QCOMPARE(resource.audioCodec(), QString());
QCOMPARE(resource.videoCodec(), QString());
QCOMPARE(resource.dataSize(), qint64(0));
QCOMPARE(resource.audioBitRate(), 0);
QCOMPARE(resource.sampleRate(), 0);
QCOMPARE(resource.channelCount(), 0);
QCOMPARE(resource.videoBitRate(), 0);
QCOMPARE(resource.resolution(), QSize());
resource.setLanguage(language);
resource.setAudioCodec(audioCodec);
resource.setVideoCodec(videoCodec);
resource.setDataSize(dataSize);
resource.setAudioBitRate(audioBitRate);
resource.setSampleRate(sampleRate);
resource.setChannelCount(channelCount);
resource.setVideoBitRate(videoBitRate);
resource.setResolution(resolution);
QCOMPARE(resource.language(), language);
QCOMPARE(resource.audioCodec(), audioCodec);
QCOMPARE(resource.videoCodec(), videoCodec);
QCOMPARE(resource.dataSize(), dataSize);
QCOMPARE(resource.audioBitRate(), audioBitRate);
QCOMPARE(resource.sampleRate(), sampleRate);
QCOMPARE(resource.channelCount(), channelCount);
QCOMPARE(resource.videoBitRate(), videoBitRate);
QCOMPARE(resource.resolution(), resolution);
}
}
void tst_QMediaResource::setResolution()
{
QMediaResource resource(
QUrl(QString::fromLatin1("file::///thumbs/test.png")),
QString::fromLatin1("image/png"));
QCOMPARE(resource.resolution(), QSize());
resource.setResolution(QSize(120, 80));
QCOMPARE(resource.resolution(), QSize(120, 80));
resource.setResolution(QSize(-1, 23));
QCOMPARE(resource.resolution(), QSize(-1, 23));
resource.setResolution(QSize(-43, 34));
QCOMPARE(resource.resolution(), QSize(-43, 34));
resource.setResolution(QSize(64, -1));
QCOMPARE(resource.resolution(), QSize(64, -1));
resource.setResolution(QSize(64, -83));
QCOMPARE(resource.resolution(), QSize(64, -83));
resource.setResolution(QSize(-12, -83));
QCOMPARE(resource.resolution(), QSize(-12, -83));
resource.setResolution(QSize());
QCOMPARE(resource.resolution(), QSize(-1, -1));
resource.setResolution(120, 80);
QCOMPARE(resource.resolution(), QSize(120, 80));
resource.setResolution(-1, 23);
QCOMPARE(resource.resolution(), QSize(-1, 23));
resource.setResolution(-43, 34);
QCOMPARE(resource.resolution(), QSize(-43, 34));
resource.setResolution(64, -1);
QCOMPARE(resource.resolution(), QSize(64, -1));
resource.setResolution(64, -83);
QCOMPARE(resource.resolution(), QSize(64, -83));
resource.setResolution(-12, -83);
QCOMPARE(resource.resolution(), QSize(-12, -83));
resource.setResolution(-1, -1);
QCOMPARE(resource.resolution(), QSize());
}
void tst_QMediaResource::equality()
{
QMediaResource resource1(
QUrl(QString::fromLatin1("http://test.com/test.mp4")),
QString::fromLatin1("video/mp4"));
QMediaResource resource2(
QUrl(QString::fromLatin1("http://test.com/test.mp4")),
QString::fromLatin1("video/mp4"));
QMediaResource resource3(
QUrl(QString::fromLatin1("file:///thumbs/test.jpg")));
QMediaResource resource4(
QUrl(QString::fromLatin1("file:///thumbs/test.jpg")));
QMediaResource resource5(
QUrl(QString::fromLatin1("http://test.com/test.mp3")),
QString::fromLatin1("audio/mpeg"));
QNetworkRequest request(QUrl("http://test.com/test.mp3"));
QString requestMimeType("audio/mp3");
QMediaResource requestResource1(request, requestMimeType);
QMediaResource requestResource2(request, requestMimeType);
QCOMPARE(requestResource1 == requestResource2, true);
QCOMPARE(requestResource1 != requestResource2, false);
QCOMPARE(requestResource1 != resource5, true);
QCOMPARE(resource1 == resource2, true);
QCOMPARE(resource1 != resource2, false);
QCOMPARE(resource3 == resource4, true);
QCOMPARE(resource3 != resource4, false);
QCOMPARE(resource1 == resource3, false);
QCOMPARE(resource1 != resource3, true);
QCOMPARE(resource1 == resource5, false);
QCOMPARE(resource1 != resource5, true);
resource1.setAudioCodec(QString::fromLatin1("mp3"));
resource2.setAudioCodec(QString::fromLatin1("aac"));
// Not equal differing audio codecs.
QCOMPARE(resource1 == resource2, false);
QCOMPARE(resource1 != resource2, true);
resource1.setAudioCodec(QString::fromLatin1("aac"));
// Equal.
QCOMPARE(resource1 == resource2, true);
QCOMPARE(resource1 != resource2, false);
resource1.setVideoCodec(QString());
// Equal.
QCOMPARE(resource1 == resource2, true);
QCOMPARE(resource1 != resource2, false);
resource1.setVideoCodec(QString::fromLatin1("h264"));
// Not equal differing video codecs.
QCOMPARE(resource1 == resource2, false);
QCOMPARE(resource1 != resource2, true);
resource2.setVideoCodec(QString::fromLatin1("h264"));
// Equal.
QCOMPARE(resource1 == resource2, true);
QCOMPARE(resource1 != resource2, false);
resource2.setDataSize(0);
// Equal.
QCOMPARE(resource1 == resource2, true);
QCOMPARE(resource1 != resource2, false);
resource1.setDataSize(546423);
// Not equal differing video codecs.
QCOMPARE(resource1 == resource2, false);
QCOMPARE(resource1 != resource2, true);
resource2.setDataSize(546423);
// Equal.
QCOMPARE(resource1 == resource2, true);
QCOMPARE(resource1 != resource2, false);
resource1.setAudioBitRate(96000);
resource1.setSampleRate(48000);
resource2.setSampleRate(44100);
resource1.setChannelCount(0);
resource1.setVideoBitRate(900000);
resource2.setLanguage(QString::fromLatin1("eng"));
// Not equal, audio bit rate, sample rate, video bit rate, and
// language.
QCOMPARE(resource1 == resource2, false);
QCOMPARE(resource1 != resource2, true);
resource2.setAudioBitRate(96000);
resource1.setSampleRate(44100);
// Not equal, differing video bit rate, and language.
QCOMPARE(resource1 == resource2, false);
QCOMPARE(resource1 != resource2, true);
resource2.setVideoBitRate(900000);
resource1.setLanguage(QString::fromLatin1("eng"));
// Equal
QCOMPARE(resource1 == resource2, true);
QCOMPARE(resource1 != resource2, false);
resource1.setResolution(QSize());
// Equal
QCOMPARE(resource1 == resource2, true);
QCOMPARE(resource1 != resource2, false);
resource2.setResolution(-1, -1);
// Equal
QCOMPARE(resource1 == resource2, true);
QCOMPARE(resource1 != resource2, false);
resource1.setResolution(QSize(-640, -480));
// Not equal, differing resolution.
QCOMPARE(resource1 == resource2, false);
QCOMPARE(resource1 != resource2, true);
resource1.setResolution(QSize(640, 480));
resource2.setResolution(QSize(800, 600));
// Not equal, differing resolution.
QCOMPARE(resource1 == resource2, false);
QCOMPARE(resource1 != resource2, true);
resource1.setResolution(800, 600);
// Equal
QCOMPARE(resource1 == resource2, true);
QCOMPARE(resource1 != resource2, false);
/* equality tests for constructor of QMediaresource(QNetworkrequest,mimeType)*/
QNetworkRequest request2(QUrl(QString::fromLatin1("http://test.com/test.mp4")));
QUrl url(QString::fromLatin1("http://test.com/test.mp4"));
QString mimeType(QLatin1String("video/mp4"));
QMediaResource resource6(request2,mimeType);
QMediaResource resource7(request2,mimeType);
QVERIFY(resource6.request()==request2);
QVERIFY(resource6.mimeType()==mimeType);
QVERIFY(resource7.request()==request2);
QVERIFY(resource7.mimeType()==mimeType);
QVERIFY(resource6.request()==resource7.request());
QVERIFY(resource6.mimeType()==resource7.mimeType());
QVERIFY(resource6==resource7);
/*for copy constructor*/
QMediaResource resource8(resource7);
QVERIFY(resource8.request()==request2);
QVERIFY(resource8.mimeType()==mimeType);
QVERIFY(resource7.request()==request2);
QVERIFY(resource7.mimeType()==mimeType);
QVERIFY(resource8.request()==resource7.request());
QVERIFY(resource8.mimeType()==resource7.mimeType());
QVERIFY(resource8==resource7);
/*for assign constructor*/
QMediaResource resource9(request2,mimeType);
QMediaResource resource10=resource9;
QVERIFY(resource10.request()==request2);
QVERIFY(resource10.mimeType()==mimeType);
QVERIFY(resource9.request()==request2);
QVERIFY(resource9.mimeType()==mimeType);
QVERIFY(resource8.request()==resource7.request());
QVERIFY(resource8.mimeType()==resource7.mimeType());
QVERIFY(resource8==resource7);
}
void tst_QMediaResource::copy()
{
const QUrl url(QString::fromLatin1("http://test.com/test.mp4"));
const QString mimeType(QLatin1String("video/mp4"));
const QString amrCodec(QLatin1String("amr"));
const QString mp3Codec(QLatin1String("mp3"));
const QString aacCodec(QLatin1String("aac"));
const QString h264Codec(QLatin1String("h264"));
QMediaResource original(url, mimeType);
original.setAudioCodec(amrCodec);
QMediaResource copy(original);
QCOMPARE(copy.url(), url);
QCOMPARE(copy.mimeType(), mimeType);
QCOMPARE(copy.audioCodec(), amrCodec);
QCOMPARE(original == copy, true);
QCOMPARE(original != copy, false);
original.setAudioCodec(mp3Codec);
QCOMPARE(copy.audioCodec(), amrCodec);
QCOMPARE(original == copy, false);
QCOMPARE(original != copy, true);
copy.setAudioCodec(aacCodec);
copy.setVideoCodec(h264Codec);
QCOMPARE(copy.url(), url);
QCOMPARE(copy.mimeType(), mimeType);
QCOMPARE(original.audioCodec(), mp3Codec);
}
void tst_QMediaResource::assign()
{
const QUrl url(QString::fromLatin1("http://test.com/test.mp4"));
const QString mimeType(QLatin1String("video/mp4"));
const QString amrCodec(QLatin1String("amr"));
const QString mp3Codec(QLatin1String("mp3"));
const QString aacCodec(QLatin1String("aac"));
const QString h264Codec(QLatin1String("h264"));
QNetworkRequest request(QUrl(QString::fromLatin1("http://test.com/test.mp4")));
const qint64 dataSize(23600);
int audioBitRate = 1, sampleRate = 2, channelCount = 3, videoBitRate = 4;
QSize resolution(QSize(640, 480));
QString language("eng");
QMediaResource copy(QUrl(QString::fromLatin1("file:///thumbs/test.jpg")));
QMediaResource original(url, mimeType);
original.setAudioCodec(amrCodec);
copy = original;
QCOMPARE(copy.url(), url);
QCOMPARE(copy.mimeType(), mimeType);
QCOMPARE(copy.audioCodec(), amrCodec);
QCOMPARE(original == copy, true);
QCOMPARE(original != copy, false);
original.setAudioCodec(mp3Codec);
QCOMPARE(copy.audioCodec(), amrCodec);
QCOMPARE(original == copy, false);
QCOMPARE(original != copy, true);
copy.setAudioCodec(aacCodec);
copy.setVideoCodec(h264Codec);
QCOMPARE(copy.url(), url);
QCOMPARE(copy.mimeType(), mimeType);
QCOMPARE(original.audioCodec(), mp3Codec);
/* for constructor of QMediaresource(QNetworkrequest,mimeType)*/
QMediaResource copy1(QNetworkRequest(QUrl(QString::fromLatin1("file:///thumbs/test.jpg"))));
QMediaResource original1(request, mimeType);
original1.setAudioCodec(amrCodec);
original1.setLanguage(QString("eng"));
original1.setVideoCodec(h264Codec);
original1.setDataSize(dataSize);
original1.setAudioBitRate(audioBitRate);
original1.setSampleRate(sampleRate);
original1.setChannelCount(channelCount);
original1.setVideoBitRate(videoBitRate);
original1.setResolution(resolution);
copy1 = original1;
QCOMPARE(original1 == copy1, true);
}
// Constructor for request without passing mimetype.
void tst_QMediaResource::constructorRequest()
{
//Initialise the request and url.
QNetworkRequest request(QUrl(QString::fromLatin1("http:://test.com/test.mp3")));
QUrl url(QString::fromLatin1("http:://test.com/test.mp3"));
// Create the instance with request as parameter.
QMediaResource resource(request);
// Verify all the parameters of objects.
QCOMPARE(resource.isNull(), false);
QCOMPARE(resource.url(), url);
QCOMPARE(resource.request(), request);
QCOMPARE(resource.mimeType(), QString());
QCOMPARE(resource.language(), QString());
QCOMPARE(resource.audioCodec(), QString());
QCOMPARE(resource.videoCodec(), QString());
QCOMPARE(resource.dataSize(), qint64(0));
QCOMPARE(resource.audioBitRate(), 0);
QCOMPARE(resource.sampleRate(), 0);
QCOMPARE(resource.channelCount(), 0);
QCOMPARE(resource.videoBitRate(), 0);
QCOMPARE(resource.resolution(), QSize());
}
// Copy constructor with all the parameter and copy constructor for constructor with request and mimetype as parameter.
void tst_QMediaResource::copyConstructor()
{
// Initialise all the parameters.
const QUrl url(QString::fromLatin1("http://test.com/test.mp4"));
const QString mimeType(QLatin1String("video/mp4"));
const QString amrCodec(QLatin1String("amr"));
const QString h264Codec(QLatin1String("h264"));
const qint64 dataSize(23600);
int audioBitRate = 1, sampleRate = 2, channelCount = 3, videoBitRate = 4;
QSize resolution(QSize(640, 480));
QString language("eng");
// Create the instance with url and mimetype.
QMediaResource original(url, mimeType);
// Set all the parameters.
original.setAudioCodec(amrCodec);
original.setLanguage(QString("eng"));
original.setVideoCodec(h264Codec);
original.setDataSize(dataSize);
original.setAudioBitRate(audioBitRate);
original.setSampleRate(sampleRate);
original.setChannelCount(channelCount);
original.setVideoBitRate(videoBitRate);
original.setResolution(resolution);
// Copy the instance to new object.
QMediaResource copy(original);
// Verify all the parameters of the copied object.
QCOMPARE(copy.url(), url);
QCOMPARE(copy.mimeType(), mimeType);
QCOMPARE(copy.audioCodec(), amrCodec);
QCOMPARE(copy.language(), language );
QCOMPARE(copy.videoCodec(), h264Codec);
QCOMPARE(copy.dataSize(), dataSize);
QCOMPARE(copy.audioBitRate(), audioBitRate);
QCOMPARE(copy.sampleRate(), sampleRate);
QCOMPARE(copy.channelCount(), channelCount);
QCOMPARE(copy.videoBitRate(), videoBitRate);
QCOMPARE(copy.resolution(), resolution);
// Compare both the objects are equal.
QCOMPARE(original == copy, true);
QCOMPARE(original != copy, false);
// Initialise the request parameter.
QNetworkRequest request1(QUrl(QString::fromLatin1("http://test.com/test.mp4")));
// Constructor with rerquest and mimetype.
QMediaResource original1(request1, mimeType);
// Copy the object and verify if both are eqaul or not.
QMediaResource copy1(original1);
QCOMPARE(copy1.url(), url);
QCOMPARE(copy1.mimeType(), mimeType);
QCOMPARE(copy1.request(), request1);
QCOMPARE(original1 == copy1, true);
}
#endif // QT_DEPRECATED_SINCE(6, 0)
QTEST_MAIN(tst_QMediaResource)
#include "tst_qmediaresource.moc"