mirror of
https://github.com/arcan1s/awesome-widgets.git
synced 2025-04-24 23:47:20 +00:00
add last sources test for playersource
This commit is contained in:
parent
0f1763cb81
commit
71ae832bcd
@ -44,7 +44,7 @@ PlayerSource::PlayerSource(QObject *parent, const QStringList args)
|
|||||||
connect(m_mpdProcess,
|
connect(m_mpdProcess,
|
||||||
static_cast<void (QProcess::*)(int, QProcess::ExitStatus)>(
|
static_cast<void (QProcess::*)(int, QProcess::ExitStatus)>(
|
||||||
&QProcess::finished),
|
&QProcess::finished),
|
||||||
[this](int, QProcess::ExitStatus) { return updateValue(); });
|
[this](int, QProcess::ExitStatus) { return updateMpdValue(); });
|
||||||
m_mpdProcess->waitForFinished(0);
|
m_mpdProcess->waitForFinished(0);
|
||||||
m_mpdCached = defaultInfo();
|
m_mpdCached = defaultInfo();
|
||||||
}
|
}
|
||||||
@ -70,6 +70,27 @@ QVariant PlayerSource::data(QString source)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
QString PlayerSource::getAutoMpris() const
|
||||||
|
{
|
||||||
|
QDBusMessage listServices = QDBusConnection::sessionBus().interface()->call(
|
||||||
|
QDBus::BlockWithGui, QString("ListNames"));
|
||||||
|
if (listServices.arguments().isEmpty())
|
||||||
|
return QString();
|
||||||
|
QStringList arguments = listServices.arguments().first().toStringList();
|
||||||
|
|
||||||
|
for (auto arg : arguments) {
|
||||||
|
if (!arg.startsWith(QString("org.mpris.MediaPlayer2.")))
|
||||||
|
continue;
|
||||||
|
qCInfo(LOG_ESS) << "Service found" << arg;
|
||||||
|
QString service = arg;
|
||||||
|
service.remove(QString("org.mpris.MediaPlayer2."));
|
||||||
|
return service;
|
||||||
|
}
|
||||||
|
|
||||||
|
return QString();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
QVariantMap PlayerSource::initialData(QString source) const
|
QVariantMap PlayerSource::initialData(QString source) const
|
||||||
{
|
{
|
||||||
qCDebug(LOG_ESS) << "Source" << source;
|
qCDebug(LOG_ESS) << "Source" << source;
|
||||||
@ -212,7 +233,30 @@ QStringList PlayerSource::sources() const
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void PlayerSource::updateValue()
|
QString PlayerSource::buildString(const QString ¤t, const QString &value,
|
||||||
|
const int s)
|
||||||
|
{
|
||||||
|
qCDebug(LOG_ESS) << "Current value" << current << "received" << value
|
||||||
|
<< "will be stripped after" << s;
|
||||||
|
|
||||||
|
int index = value.indexOf(current);
|
||||||
|
if ((current.isEmpty()) || ((index + s + 1) > value.count()))
|
||||||
|
return QString("%1").arg(value.left(s), s, QLatin1Char(' '));
|
||||||
|
else
|
||||||
|
return QString("%1").arg(value.mid(index + 1, s), s, QLatin1Char(' '));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
QString PlayerSource::stripString(const QString &value, const int s)
|
||||||
|
{
|
||||||
|
qCDebug(LOG_ESS) << "New value" << value << "will be stripped after" << s;
|
||||||
|
|
||||||
|
return value.count() > s ? QString("%1\u2026").arg(value.left(s - 1))
|
||||||
|
: value.leftJustified(s, QLatin1Char(' '));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void PlayerSource::updateMpdValue()
|
||||||
{
|
{
|
||||||
qCInfo(LOG_ESS) << "Cmd returns" << m_mpdProcess->exitCode();
|
qCInfo(LOG_ESS) << "Cmd returns" << m_mpdProcess->exitCode();
|
||||||
QString qdebug = QTextCodec::codecForMib(106)
|
QString qdebug = QTextCodec::codecForMib(106)
|
||||||
@ -243,6 +287,8 @@ void PlayerSource::updateValue()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
emit(dataReceived(m_mpdCached));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -259,27 +305,6 @@ QVariantHash PlayerSource::defaultInfo() const
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
QString PlayerSource::getAutoMpris() const
|
|
||||||
{
|
|
||||||
QDBusMessage listServices = QDBusConnection::sessionBus().interface()->call(
|
|
||||||
QDBus::BlockWithGui, QString("ListNames"), DBUS_CALL_TIMEOUT);
|
|
||||||
if (listServices.arguments().isEmpty())
|
|
||||||
return QString();
|
|
||||||
QStringList arguments = listServices.arguments().first().toStringList();
|
|
||||||
|
|
||||||
for (auto arg : arguments) {
|
|
||||||
if (!arg.startsWith(QString("org.mpris.MediaPlayer2.")))
|
|
||||||
continue;
|
|
||||||
qCInfo(LOG_ESS) << "Service found" << arg;
|
|
||||||
QString service = arg;
|
|
||||||
service.remove(QString("org.mpris.MediaPlayer2."));
|
|
||||||
return service;
|
|
||||||
}
|
|
||||||
|
|
||||||
return QString();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
QVariantHash PlayerSource::getPlayerMpdInfo(const QString mpdAddress) const
|
QVariantHash PlayerSource::getPlayerMpdInfo(const QString mpdAddress) const
|
||||||
{
|
{
|
||||||
qCDebug(LOG_ESS) << "MPD" << mpdAddress;
|
qCDebug(LOG_ESS) << "MPD" << mpdAddress;
|
||||||
@ -362,26 +387,3 @@ QVariantHash PlayerSource::getPlayerMprisInfo(const QString mpris) const
|
|||||||
|
|
||||||
return info;
|
return info;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
QString PlayerSource::buildString(const QString current, const QString value,
|
|
||||||
const int s) const
|
|
||||||
{
|
|
||||||
qCDebug(LOG_ESS) << "Current value" << current << "received" << value
|
|
||||||
<< "will be stripped after" << s;
|
|
||||||
|
|
||||||
int index = value.indexOf(current);
|
|
||||||
if ((current.isEmpty()) || ((index + s + 1) > value.count()))
|
|
||||||
return QString("%1").arg(value.left(s), s, QLatin1Char(' '));
|
|
||||||
else
|
|
||||||
return QString("%1").arg(value.mid(index + 1, s), s, QLatin1Char(' '));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
QString PlayerSource::stripString(const QString value, const int s) const
|
|
||||||
{
|
|
||||||
qCDebug(LOG_ESS) << "New value" << value << "will be stripped after" << s;
|
|
||||||
|
|
||||||
return value.count() > s ? QString("%1\u2026").arg(value.left(s - 1))
|
|
||||||
: value.leftJustified(s, QLatin1Char(' '));
|
|
||||||
}
|
|
||||||
|
@ -36,22 +36,22 @@ public:
|
|||||||
explicit PlayerSource(QObject *parent, const QStringList args);
|
explicit PlayerSource(QObject *parent, const QStringList args);
|
||||||
virtual ~PlayerSource();
|
virtual ~PlayerSource();
|
||||||
QVariant data(QString source);
|
QVariant data(QString source);
|
||||||
|
QString getAutoMpris() const;
|
||||||
QVariantMap initialData(QString source) const;
|
QVariantMap initialData(QString source) const;
|
||||||
void run();
|
void run();
|
||||||
QStringList sources() const;
|
QStringList sources() const;
|
||||||
|
// additional method to build dynamic tags
|
||||||
|
static QString buildString(const QString ¤t, const QString &value,
|
||||||
|
const int s);
|
||||||
|
static QString stripString(const QString &value, const int s);
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void updateValue();
|
void updateMpdValue();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
inline QVariantHash defaultInfo() const;
|
inline QVariantHash defaultInfo() const;
|
||||||
QString getAutoMpris() const;
|
|
||||||
QVariantHash getPlayerMpdInfo(const QString mpdAddress) const;
|
QVariantHash getPlayerMpdInfo(const QString mpdAddress) const;
|
||||||
QVariantHash getPlayerMprisInfo(const QString mpris) const;
|
QVariantHash getPlayerMprisInfo(const QString mpris) const;
|
||||||
// additional method to build dynamic tags
|
|
||||||
QString buildString(const QString current, const QString value,
|
|
||||||
const int s) const;
|
|
||||||
QString stripString(const QString value, const int s) const;
|
|
||||||
// configuration and values
|
// configuration and values
|
||||||
QString m_mpdAddress;
|
QString m_mpdAddress;
|
||||||
QVariantHash m_mpdCached;
|
QVariantHash m_mpdCached;
|
||||||
|
@ -26,7 +26,7 @@ set(TEST_MODULES
|
|||||||
abstractextitem extquotes extscript extupgrade extweather
|
abstractextitem extquotes extscript extupgrade extweather
|
||||||
abstractformatter datetimeformatter floatformatter noformatter scriptformatter
|
abstractformatter datetimeformatter floatformatter noformatter scriptformatter
|
||||||
extitemaggregator
|
extitemaggregator
|
||||||
batterysource desktopsource gpuloadsource gputempsource hddtempsource networksource processessource)
|
batterysource desktopsource gpuloadsource gputempsource hddtempsource networksource playersource processessource)
|
||||||
foreach (TEST_MODULE ${TEST_MODULES})
|
foreach (TEST_MODULE ${TEST_MODULES})
|
||||||
set(${TEST_MODULE}_HEADERS test${TEST_MODULE}.h)
|
set(${TEST_MODULE}_HEADERS test${TEST_MODULE}.h)
|
||||||
set(${TEST_MODULE}_SOURCES test${TEST_MODULE}.cpp)
|
set(${TEST_MODULE}_SOURCES test${TEST_MODULE}.cpp)
|
||||||
|
@ -40,9 +40,10 @@ void TestDesktopSource::test_sources()
|
|||||||
{
|
{
|
||||||
QCOMPARE(source->sources().count(), 4);
|
QCOMPARE(source->sources().count(), 4);
|
||||||
// FIXME there is segfault here sometimes o_0
|
// FIXME there is segfault here sometimes o_0
|
||||||
// QVERIFY(std::all_of(
|
// QVERIFY(std::all_of(
|
||||||
// source->sources().cbegin(), source->sources().cend(),
|
// source->sources().cbegin(), source->sources().cend(),
|
||||||
// [](const QString &src) { return src.startsWith(QString("desktop/")); }));
|
// [](const QString &src) { return
|
||||||
|
// src.startsWith(QString("desktop/")); }));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
131
sources/test/testplayersource.cpp
Normal file
131
sources/test/testplayersource.cpp
Normal file
@ -0,0 +1,131 @@
|
|||||||
|
/***************************************************************************
|
||||||
|
* This file is part of awesome-widgets *
|
||||||
|
* *
|
||||||
|
* awesome-widgets is free software: you can redistribute it and/or *
|
||||||
|
* modify it under the terms of the GNU General Public License as *
|
||||||
|
* published by the Free Software Foundation, either version 3 of the *
|
||||||
|
* License, or (at your option) any later version. *
|
||||||
|
* *
|
||||||
|
* awesome-widgets is distributed in the hope that it will be useful, *
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||||
|
* GNU General Public License for more details. *
|
||||||
|
* *
|
||||||
|
* You should have received a copy of the GNU General Public License *
|
||||||
|
* along with awesome-widgets. If not, see http://www.gnu.org/licenses/ *
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
#include "testplayersource.h"
|
||||||
|
|
||||||
|
#include <QtTest>
|
||||||
|
|
||||||
|
#include "awtestlibrary.h"
|
||||||
|
#include "playersource.h"
|
||||||
|
|
||||||
|
|
||||||
|
void TestPlayerSource::initTestCase()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void TestPlayerSource::cleanupTestCase()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void TestPlayerSource::_test_sources(const PlayerSource *source)
|
||||||
|
{
|
||||||
|
QVERIFY(source->sources().count() == 11);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void TestPlayerSource::test_buildString()
|
||||||
|
{
|
||||||
|
QString randomString = AWTestLibrary::randomString(40);
|
||||||
|
QString str = PlayerSource::buildString(QString(), randomString, 20);
|
||||||
|
QCOMPARE(str.count(), 20);
|
||||||
|
|
||||||
|
str = PlayerSource::buildString(str, randomString, 20);
|
||||||
|
QCOMPARE(str.count(), 20);
|
||||||
|
QCOMPARE(randomString.indexOf(str), 1);
|
||||||
|
|
||||||
|
str = PlayerSource::buildString(QString(), AWTestLibrary::randomString(10),
|
||||||
|
20);
|
||||||
|
QCOMPARE(str.count(), 20);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void TestPlayerSource::test_stripString()
|
||||||
|
{
|
||||||
|
QString str = PlayerSource::buildString(
|
||||||
|
QString(), AWTestLibrary::randomString(40), 20);
|
||||||
|
QCOMPARE(str.count(), 20);
|
||||||
|
|
||||||
|
str = PlayerSource::buildString(QString(), AWTestLibrary::randomString(10),
|
||||||
|
20);
|
||||||
|
QCOMPARE(str.count(), 20);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void TestPlayerSource::test_autoMpris()
|
||||||
|
{
|
||||||
|
QStringList args(QStringList() << QString("mpris") << mpdAddress
|
||||||
|
<< QString::number(mpdPort)
|
||||||
|
<< QString("auto") << QString::number(10));
|
||||||
|
PlayerSource *source = new PlayerSource(this, args);
|
||||||
|
|
||||||
|
QWARN("Will fail if no MPRIS supported player is run");
|
||||||
|
QVERIFY(!source->getAutoMpris().isEmpty());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void TestPlayerSource::test_mpd()
|
||||||
|
{
|
||||||
|
QStringList args(QStringList() << QString("mpd") << mpdAddress
|
||||||
|
<< QString::number(mpdPort)
|
||||||
|
<< QString("auto") << QString::number(10));
|
||||||
|
PlayerSource *source = new PlayerSource(this, args);
|
||||||
|
_test_sources(source);
|
||||||
|
|
||||||
|
// init spy
|
||||||
|
QSignalSpy spy(source, SIGNAL(dataReceived(const QVariantHash &)));
|
||||||
|
QVariant firstValue = source->data(QString("player/title"));
|
||||||
|
|
||||||
|
// check values
|
||||||
|
QVERIFY(spy.wait(5000));
|
||||||
|
QList<QVariant> arguments = spy.takeFirst();
|
||||||
|
QVariantHash secondValue = arguments.at(0).toHash();
|
||||||
|
|
||||||
|
// actually nothing to test here just print warning if no information found
|
||||||
|
if (secondValue[QString("player/title")].toString() == QString("unknown")) {
|
||||||
|
QWARN("No mpd found");
|
||||||
|
} else {
|
||||||
|
QVERIFY(secondValue[QString("player/progress")].toInt()
|
||||||
|
< secondValue[QString("player/duration")].toInt());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void TestPlayerSource::test_mpris()
|
||||||
|
{
|
||||||
|
QStringList args(QStringList() << QString("mpris") << mpdAddress
|
||||||
|
<< QString::number(mpdPort)
|
||||||
|
<< QString("auto") << QString::number(10));
|
||||||
|
PlayerSource *source = new PlayerSource(this, args);
|
||||||
|
_test_sources(source);
|
||||||
|
|
||||||
|
QString value = source->data(QString("player/title")).toString();
|
||||||
|
int progress = source->data(QString("player/progress")).toInt();
|
||||||
|
int duration = source->data(QString("player/duration")).toInt();
|
||||||
|
|
||||||
|
// actually nothing to test here just print warning if no information found
|
||||||
|
if (value == QString("unknown")) {
|
||||||
|
QWARN("No mpris found");
|
||||||
|
} else {
|
||||||
|
QVERIFY(progress < duration);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
QTEST_MAIN(TestPlayerSource);
|
49
sources/test/testplayersource.h
Normal file
49
sources/test/testplayersource.h
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
/***************************************************************************
|
||||||
|
* This file is part of awesome-widgets *
|
||||||
|
* *
|
||||||
|
* awesome-widgets is free software: you can redistribute it and/or *
|
||||||
|
* modify it under the terms of the GNU General Public License as *
|
||||||
|
* published by the Free Software Foundation, either version 3 of the *
|
||||||
|
* License, or (at your option) any later version. *
|
||||||
|
* *
|
||||||
|
* awesome-widgets is distributed in the hope that it will be useful, *
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||||
|
* GNU General Public License for more details. *
|
||||||
|
* *
|
||||||
|
* You should have received a copy of the GNU General Public License *
|
||||||
|
* along with awesome-widgets. If not, see http://www.gnu.org/licenses/ *
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef TESTPLAYERSOURCE_H
|
||||||
|
#define TESTPLAYERSOURCE_H
|
||||||
|
|
||||||
|
#include <QObject>
|
||||||
|
|
||||||
|
|
||||||
|
class PlayerSource;
|
||||||
|
|
||||||
|
class TestPlayerSource : public QObject
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
private slots:
|
||||||
|
// initialization
|
||||||
|
void initTestCase();
|
||||||
|
void cleanupTestCase();
|
||||||
|
// test
|
||||||
|
void _test_sources(const PlayerSource *source);
|
||||||
|
void test_buildString();
|
||||||
|
void test_stripString();
|
||||||
|
void test_autoMpris();
|
||||||
|
void test_mpd();
|
||||||
|
void test_mpris();
|
||||||
|
|
||||||
|
private:
|
||||||
|
QString mpdAddress = QString("localhost");
|
||||||
|
int mpdPort = 6600;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* TESTPLAYERSOURCE_H */
|
@ -40,16 +40,18 @@ void TestProcessesSource::test_sources()
|
|||||||
{
|
{
|
||||||
QCOMPARE(source->sources().count(), 3);
|
QCOMPARE(source->sources().count(), 3);
|
||||||
// FIXME there is segfault here sometimes o_0
|
// FIXME there is segfault here sometimes o_0
|
||||||
// QVERIFY(std::all_of(
|
// QVERIFY(std::all_of(
|
||||||
// source->sources().cbegin(), source->sources().cend(),
|
// source->sources().cbegin(), source->sources().cend(),
|
||||||
// [](const QString &src) { return src.startsWith(QString("ps/")); }));
|
// [](const QString &src) { return src.startsWith(QString("ps/"));
|
||||||
|
// }));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void TestProcessesSource::test_values()
|
void TestProcessesSource::test_values()
|
||||||
{
|
{
|
||||||
QVERIFY(source->data(QString("ps/running/count")).toInt() > 0);
|
QVERIFY(source->data(QString("ps/running/count")).toInt() > 0);
|
||||||
QVERIFY(source->data(QString("ps/running/list")).toStringList().count() > 0);
|
QVERIFY(source->data(QString("ps/running/list")).toStringList().count()
|
||||||
|
> 0);
|
||||||
QVERIFY(source->data(QString("ps/total/count")).toInt() > 0);
|
QVERIFY(source->data(QString("ps/total/count")).toInt() > 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user