summaryrefslogtreecommitdiffstats
path: root/tests/auto/qaudiocapturesource/tst_qaudiocapturesource.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/qaudiocapturesource/tst_qaudiocapturesource.cpp')
-rw-r--r--tests/auto/qaudiocapturesource/tst_qaudiocapturesource.cpp282
1 files changed, 63 insertions, 219 deletions
diff --git a/tests/auto/qaudiocapturesource/tst_qaudiocapturesource.cpp b/tests/auto/qaudiocapturesource/tst_qaudiocapturesource.cpp
index 8a40459e4..f798d8f2c 100644
--- a/tests/auto/qaudiocapturesource/tst_qaudiocapturesource.cpp
+++ b/tests/auto/qaudiocapturesource/tst_qaudiocapturesource.cpp
@@ -48,218 +48,16 @@
#include <qaudioencodercontrol.h>
#include <qmediarecordercontrol.h>
#include <qaudioendpointselector.h>
+#include <qaudiodeviceinfo.h>
+#include <qaudioinput.h>
+#include <qmediaobject.h>
//TESTED_COMPONENT=src/multimedia
-QT_USE_NAMESPACE
-class MockAudioEncoderControl : public QAudioEncoderControl
-{
- Q_OBJECT
-public:
- MockAudioEncoderControl(QObject *parent = 0):
- QAudioEncoderControl(parent)
- {
- m_codecs << "audio/pcm" << "audio/mpeg";
- m_descriptions << "Pulse Code Modulation" << "mp3 format";
- m_audioSettings.setCodec("audio/pcm");
- m_audioSettings.setSampleRate(8000);
- m_freqs << 8000 << 11025 << 22050 << 44100;
- }
-
- ~MockAudioEncoderControl() {}
-
- QStringList supportedAudioCodecs() const { return m_codecs; }
- QString codecDescription(const QString &codecName) const { return m_descriptions.at(m_codecs.indexOf(codecName)); }
-
- QStringList supportedEncodingOptions(const QString &) const { return QStringList() << "bitrate"; }
- QVariant encodingOption(const QString &, const QString &) const { return m_optionValue; }
- void setEncodingOption(const QString &, const QString &, const QVariant &value) { m_optionValue = value; }
-
- QList<int> supportedSampleRates(const QAudioEncoderSettings & = QAudioEncoderSettings(),
- bool *continuous = 0) const
- {
- if (continuous)
- *continuous = false;
- return m_freqs;
- }
- QList<int> supportedChannelCounts(const QAudioEncoderSettings & = QAudioEncoderSettings()) const { QList<int> list; list << 1 << 2; return list; }
-
- QAudioEncoderSettings audioSettings() const { return m_audioSettings; }
- void setAudioSettings(const QAudioEncoderSettings &settings) { m_audioSettings = settings;}
-
- QStringList m_codecs;
- QStringList m_descriptions;
-
- QAudioEncoderSettings m_audioSettings;
-
- QList<int> m_freqs;
- QVariant m_optionValue;
-};
-
-class MockMediaRecorderControl : public QMediaRecorderControl
-{
- Q_OBJECT
-public:
- MockMediaRecorderControl(QObject *parent = 0):
- QMediaRecorderControl(parent),
- m_state(QMediaRecorder::StoppedState),
- m_position(0),
- m_muted(false) {}
-
- ~MockMediaRecorderControl() {}
-
- QUrl outputLocation() const { return m_sink; }
- bool setOutputLocation(const QUrl &sink) { m_sink = sink; return true; }
- QMediaRecorder::State state() const { return m_state; }
- qint64 duration() const { return m_position; }
- void applySettings() {}
- bool isMuted() const { return m_muted; }
-
-public slots:
- void record()
- {
- m_state = QMediaRecorder::RecordingState;
- m_position=1;
- emit stateChanged(m_state);
- emit durationChanged(m_position);
- }
- void pause()
- {
- m_state = QMediaRecorder::PausedState;
- emit stateChanged(m_state);
- }
-
- void stop()
- {
- m_position=0;
- m_state = QMediaRecorder::StoppedState;
- emit stateChanged(m_state);
- }
-
- void setMuted(bool muted)
- {
- if (m_muted != muted)
- emit mutedChanged(m_muted = muted);
- }
-
-public:
- QUrl m_sink;
- QMediaRecorder::State m_state;
- qint64 m_position;
- bool m_muted;
-};
-
-class MockAudioEndpointSelector : public QAudioEndpointSelector
-{
- Q_OBJECT
-public:
- MockAudioEndpointSelector(QObject *parent):
- QAudioEndpointSelector(parent)
- {
- m_names << "device1" << "device2" << "device3";
- m_descriptions << "dev1 comment" << "dev2 comment" << "dev3 comment";
- m_audioInput = "device1";
- emit availableEndpointsChanged();
- }
- ~MockAudioEndpointSelector() {};
-
- QList<QString> availableEndpoints() const
- {
- return m_names;
- }
-
- QString endpointDescription(const QString& name) const
- {
- QString desc;
-
- for(int i = 0; i < m_names.count(); i++) {
- if (m_names.at(i).compare(name) == 0) {
- desc = m_descriptions.at(i);
- break;
- }
- }
- return desc;
- }
-
- QString defaultEndpoint() const
- {
- return m_names.at(0);
- }
-
- QString activeEndpoint() const
- {
- return m_audioInput;
- }
-
-public Q_SLOTS:
- void setActiveEndpoint(const QString& name)
- {
- m_audioInput = name;
- emit activeEndpointChanged(name);
- }
-
-private:
- QString m_audioInput;
- QList<QString> m_names;
- QList<QString> m_descriptions;
-};
-
-
-class MockAudioSourceService : public QMediaService
-{
- Q_OBJECT
-
-public:
- MockAudioSourceService(): QMediaService(0), hasAudioDeviceControl(true)
- {
- mockAudioEncoderControl = new MockAudioEncoderControl(this);
- mockMediaRecorderControl = new MockMediaRecorderControl(this);
- mockAudioEndpointSelector = new MockAudioEndpointSelector(this);
- }
-
- ~MockAudioSourceService()
- {
- delete mockAudioEncoderControl;
- delete mockMediaRecorderControl;
- delete mockAudioEndpointSelector;
- }
-
- QMediaControl* requestControl(const char *iid)
- {
- if (qstrcmp(iid, QAudioEncoderControl_iid) == 0)
- return mockAudioEncoderControl;
-
- if (qstrcmp(iid, QMediaRecorderControl_iid) == 0)
- return mockMediaRecorderControl;
-
- if (hasAudioDeviceControl && qstrcmp(iid, QAudioEndpointSelector_iid) == 0)
- return mockAudioEndpointSelector;
-
- return 0;
- }
-
- void releaseControl(QMediaControl*) {}
-
- MockAudioEncoderControl *mockAudioEncoderControl;
- MockMediaRecorderControl *mockMediaRecorderControl;
- MockAudioEndpointSelector *mockAudioEndpointSelector;
- bool hasAudioDeviceControl;
-};
-
-class MockProvider : public QMediaServiceProvider
-{
-public:
- MockProvider(MockAudioSourceService *service):mockService(service) {}
- QMediaService *requestService(const QByteArray&, const QMediaServiceProviderHint &)
- {
- return mockService;
- }
-
- void releaseService(QMediaService *) {}
-
- MockAudioSourceService *mockService;
-};
+#include "mockmediaserviceprovider.h"
+#include "mockmediarecorderservice.h"
+QT_USE_NAMESPACE
class tst_QAudioCaptureSource: public QObject
{
@@ -275,23 +73,26 @@ private slots:
void testAudioSource();
void testOptions();
void testDevices();
+ void testAvailability();
+ void testAvailableAudioInputChangedSignal();
private:
QAudioCaptureSource *audiosource;
- MockAudioSourceService *mockAudioSourceService;
- MockProvider *mockProvider;
+ MockMediaRecorderService *mockMediaRecorderService;
+ MockMediaServiceProvider *mockProvider;
};
void tst_QAudioCaptureSource::initTestCase()
{
- mockAudioSourceService = new MockAudioSourceService;
- mockProvider = new MockProvider(mockAudioSourceService);
+ mockMediaRecorderService = new MockMediaRecorderService;
+ mockProvider = new MockMediaServiceProvider(mockMediaRecorderService);
}
void tst_QAudioCaptureSource::cleanupTestCase()
{
delete audiosource;
delete mockProvider;
+ audiosource = 0;
}
/*
void tst_QAudioCaptureSource::testNullService()
@@ -307,7 +108,7 @@ void tst_QAudioCaptureSource::testNullService()
/*
void tst_QAudioCaptureSource::testNullControl()
{
- MockAudioSourceService service;
+ MockRecorderService service;
service.hasAudioDeviceControl = false;
MockProvider provider(&service);
QAudioCaptureSource source(0, &provider);
@@ -328,31 +129,74 @@ void tst_QAudioCaptureSource::testAudioSource()
{
audiosource = new QAudioCaptureSource(0, mockProvider);
- QCOMPARE(audiosource->service(),(QMediaService *) mockAudioSourceService);
+ QCOMPARE(audiosource->service(),(QMediaService *) mockMediaRecorderService);
}
void tst_QAudioCaptureSource::testOptions()
{
- const QString codec(QLatin1String("mp3"));
+ const QString codec(QLatin1String("audio/mpeg"));
- QStringList options = mockAudioSourceService->mockAudioEncoderControl->supportedEncodingOptions(codec);
- QVERIFY(options.count() == 1);
- mockAudioSourceService->mockAudioEncoderControl->setEncodingOption(codec, options.first(),8000);
- QVERIFY(mockAudioSourceService->mockAudioEncoderControl->encodingOption(codec, options.first()).toInt() == 8000);
+ QStringList options = mockMediaRecorderService->mockAudioEncoderControl->supportedEncodingOptions(codec);
+ QCOMPARE(options.count(), 4);
+ mockMediaRecorderService->mockAudioEncoderControl->setEncodingOption(codec, options.first(),8000);
+ QVERIFY(mockMediaRecorderService->mockAudioEncoderControl->encodingOption(codec, options.first()).toInt() == 8000);
}
void tst_QAudioCaptureSource::testDevices()
{
+ audiosource = new QAudioCaptureSource(0,mockProvider);
QList<QString> devices = audiosource->audioInputs();
QVERIFY(devices.size() > 0);
QVERIFY(devices.at(0).compare("device1") == 0);
QVERIFY(audiosource->audioDescription("device1").compare("dev1 comment") == 0);
QVERIFY(audiosource->defaultAudioInput() == "device1");
+ QVERIFY(audiosource->isAvailable() == true);
QSignalSpy checkSignal(audiosource, SIGNAL(activeAudioInputChanged(QString)));
audiosource->setAudioInput("device2");
QVERIFY(audiosource->activeAudioInput().compare("device2") == 0);
QVERIFY(checkSignal.count() == 1);
+ QVERIFY(audiosource->isAvailable() == true);
+}
+
+void tst_QAudioCaptureSource::testAvailability()
+{
+ MockMediaRecorderService service;
+ service.hasControls = false;
+ MockMediaServiceProvider provider(&service);
+ QAudioCaptureSource source(0, &provider);
+
+ QVERIFY(source.isAvailable() == false);
+ QVERIFY(source.availabilityError() == QtMultimediaKit::ServiceMissingError);
+
+ service.hasControls = true;
+ MockMediaServiceProvider provider2(&service);
+ QAudioCaptureSource source2(0, &provider2);
+
+ QVERIFY(source2.isAvailable() == true);
+ QVERIFY(source2.availabilityError() == QtMultimediaKit::NoError);
+}
+
+void tst_QAudioCaptureSource::testAvailableAudioInputChangedSignal()
+{
+ // The availabilityChangedSignal is implemented in QAudioCaptureSource. SO using it to test the signal.
+ audiosource = new QAudioCaptureSource(0, mockProvider);
+
+ /* Spy the signal availableEndpointChanged and audioInputchanged */
+ QSignalSpy changed(mockMediaRecorderService->mockAudioEndpointSelector, SIGNAL(availableEndpointsChanged()));
+ QSignalSpy audioInputchange(audiosource, SIGNAL(availableAudioInputsChanged()));
+
+ /* Add the end points and verify if the available end point changed signal is emitted. */
+ QMetaObject::invokeMethod(mockMediaRecorderService->mockAudioEndpointSelector, "addEndpoints");
+ QVERIFY(changed.count() == 1);
+ QVERIFY(audioInputchange.count() == 1);
+
+ /* Now try removes */
+ changed.clear();
+ audioInputchange.clear();
+ QMetaObject::invokeMethod(mockMediaRecorderService->mockAudioEndpointSelector, "removeEndpoints");
+ QVERIFY(changed.count() == 1);
+ QVERIFY(audioInputchange.count() == 1);
}
QTEST_MAIN(tst_QAudioCaptureSource)