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.cpp360
1 files changed, 360 insertions, 0 deletions
diff --git a/tests/auto/qaudiocapturesource/tst_qaudiocapturesource.cpp b/tests/auto/qaudiocapturesource/tst_qaudiocapturesource.cpp
new file mode 100644
index 000000000..c8d9d3d7d
--- /dev/null
+++ b/tests/auto/qaudiocapturesource/tst_qaudiocapturesource.cpp
@@ -0,0 +1,360 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the Qt Mobility Components.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** GNU Lesser General Public License Usage
+** This file may be used under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation and
+** appearing in the file LICENSE.LGPL included in the packaging of this
+** file. Please review the following information to ensure the GNU Lesser
+** General Public License version 2.1 requirements will be met:
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU General
+** Public License version 3.0 as published by the Free Software Foundation
+** and appearing in the file LICENSE.GPL included in the packaging of this
+** file. Please review the following information to ensure the GNU General
+** Public License version 3.0 requirements will be met:
+** http://www.gnu.org/copyleft/gpl.html.
+**
+** Other Usage
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtTest/QtTest>
+#include <QDebug>
+
+#include <qaudioformat.h>
+
+#include <qaudiocapturesource.h>
+#include <qaudioencodercontrol.h>
+#include <qmediarecordercontrol.h>
+#include <qaudioendpointselector.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;
+};
+
+
+class tst_QAudioCaptureSource: public QObject
+{
+ Q_OBJECT
+
+public slots:
+ void initTestCase();
+ void cleanupTestCase();
+
+private slots:
+ //void testNullService();
+ //void testNullControl();
+ void testAudioSource();
+ void testOptions();
+ void testDevices();
+
+private:
+ QAudioCaptureSource *audiosource;
+ MockAudioSourceService *mockAudioSourceService;
+ MockProvider *mockProvider;
+};
+
+void tst_QAudioCaptureSource::initTestCase()
+{
+ mockAudioSourceService = new MockAudioSourceService;
+ mockProvider = new MockProvider(mockAudioSourceService);
+}
+
+void tst_QAudioCaptureSource::cleanupTestCase()
+{
+ delete audiosource;
+ delete mockProvider;
+}
+/*
+void tst_QAudioCaptureSource::testNullService()
+{
+ MockProvider provider(0);
+ QAudioCaptureSource source(0, &provider);
+
+ QCOMPARE(source.audioInputs().size(), 0);
+ QCOMPARE(source.defaultAudioInput(), QString());
+ QCOMPARE(source.activeAudioInput(), QString());
+}
+*/
+/*
+void tst_QAudioCaptureSource::testNullControl()
+{
+ MockAudioSourceService service;
+ service.hasAudioDeviceControl = false;
+ MockProvider provider(&service);
+ QAudioCaptureSource source(0, &provider);
+
+ QCOMPARE(source.audioInputs().size(), 0);
+ QCOMPARE(source.defaultAudioInput(), QString());
+ QCOMPARE(source.activeAudioInput(), QString());
+
+ QCOMPARE(source.audioDescription("blah"), QString());
+
+ QSignalSpy deviceNameSpy(&source, SIGNAL(activeAudioInputChanged(QString)));
+
+ source.setAudioInput("blah");
+ QCOMPARE(deviceNameSpy.count(), 0);
+}
+*/
+void tst_QAudioCaptureSource::testAudioSource()
+{
+ audiosource = new QAudioCaptureSource(0, mockProvider);
+
+ QCOMPARE(audiosource->service(),(QMediaService *) mockAudioSourceService);
+}
+
+void tst_QAudioCaptureSource::testOptions()
+{
+ const QString codec(QLatin1String("mp3"));
+
+ 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);
+}
+
+void tst_QAudioCaptureSource::testDevices()
+{
+ 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");
+
+ QSignalSpy checkSignal(audiosource, SIGNAL(activeAudioInputChanged(QString)));
+ audiosource->setAudioInput("device2");
+ QVERIFY(audiosource->activeAudioInput().compare("device2") == 0);
+ QVERIFY(checkSignal.count() == 1);
+}
+
+QTEST_MAIN(tst_QAudioCaptureSource)
+
+#include "tst_qaudiocapturesource.moc"