on xenial help sign in
Fix window state storage tests
commit6931e293c07668a2ccb338225eda02ddab886c39 authorRodney Dawes <dobey@ubports.com> dateTue 28 Jul 2020, 10:23 (6 years ago) parent01fcb7a
4 files changed+16−39
debian/control+1 plugins/Utils/windowstatestorage.cpp+13−31 plugins/Utils/windowstatestorage.h+1−7 tests/plugins/Utils/WindowStateStorageTest.cpp+1−1
debian/control+1
@@ -32,6 +32,7 @@ Build-Depends: cmake,
3232 libqmenumodel-dev (>= 0.2.12),
3333 libqtdbusmock1-dev (>= 0.7),
3434 libqtdbustest1-dev,
35+ libqt5sql5-sqlite,
3536 libqt5svg5-dev,
3637 libqt5xmlpatterns5-dev,
3738 libsystemsettings-dev,
plugins/Utils/windowstatestorage.cpp+13−31
@@ -18,7 +18,6 @@
1818
1919#include <QtConcurrent>
2020#include <QDebug>
21−#include <QFutureSynchronizer>
2221#include <QSqlQuery>
2322#include <QSqlError>
2423#include <QSqlResult>
@@ -33,24 +32,23 @@ inline QString sanitiseString(QString string) {
3332 .remove(QLatin1Char('\\'));
3433}
3534
36−WindowStateStorage::WindowStateStorage(QObject *parent):
35+WindowStateStorage::WindowStateStorage(const QString& dbName, QObject *parent):
3736 QObject(parent)
3837{
3938 const QString dbPath = QStandardPaths::writableLocation(QStandardPaths::GenericCacheLocation) + QStringLiteral("/unity8/");
4039 m_db = QSqlDatabase::addDatabase(QStringLiteral("QSQLITE"));
4140 QDir dir;
4241 dir.mkpath(dbPath);
43− m_db.setDatabaseName(dbPath + "windowstatestorage.sqlite");
42+ if (dbName != nullptr) {
43+ m_db.setDatabaseName(dbName);
44+ } else {
45+ m_db.setDatabaseName(dbPath + "windowstatestorage.sqlite");
46+ }
4447 initdb();
4548}
4649
4750WindowStateStorage::~WindowStateStorage()
4851{
49− QFutureSynchronizer<void> futureSync;
50− for (int i = 0; i < m_asyncQueries.count(); ++i) {
51− futureSync.addFuture(m_asyncQueries[i]);
52− }
53− futureSync.waitForFinished();
5452 m_db.close();
5553}
5654
@@ -110,19 +108,6 @@ int WindowStateStorage::getStage(const QString &appId, int defaultValue) const
110108 return query.value("stage").toInt();
111109}
112110
113−void WindowStateStorage::executeAsyncQuery(const QString &queryString)
114−{
115− QMutexLocker l(&s_mutex);
116− QSqlQuery query;
117−
118− bool ok = query.exec(queryString);
119− if (!ok) {
120− qWarning() << "Error executing query" << queryString
121− << "Driver error:" << query.lastError().driverText()
122− << "Database error:" << query.lastError().databaseText();
123− }
124−}
125−
126111QRect WindowStateStorage::getGeometry(const QString &windowId, const QRect &defaultValue) const
127112{
128113 QString queryString = QStringLiteral("SELECT * FROM geometry WHERE windowId = '%1';")
@@ -171,16 +156,13 @@ void WindowStateStorage::initdb()
171156void WindowStateStorage::saveValue(const QString &queryString)
172157{
173158 QMutexLocker mutexLocker(&s_mutex);
174−
175− QFuture<void> future = QtConcurrent::run(&m_threadPool, executeAsyncQuery, queryString);
176− m_asyncQueries.append(future);
177−
178− QFutureWatcher<void> *futureWatcher = new QFutureWatcher<void>();
179− futureWatcher->setFuture(future);
180− connect(futureWatcher, &QFutureWatcher<void>::finished,
181− this,
182− [=](){ m_asyncQueries.removeAll(futureWatcher->future());
183− futureWatcher->deleteLater(); });
159+ QSqlQuery query;
160+ auto ok = query.exec(queryString);
161+ if (!ok) {
162+ qWarning() << "Error executing query" << queryString
163+ << "Driver error:" << query.lastError().driverText()
164+ << "Database error:" << query.lastError().databaseText();
165+ }
184166}
185167
186168QSqlQuery WindowStateStorage::getValue(const QString &queryString) const
plugins/Utils/windowstatestorage.h+1−7
@@ -17,8 +17,6 @@
1717#include <QObject>
1818#include <QSqlDatabase>
1919#include <QMutex>
20−#include <QFuture>
21−#include <QThreadPool>
2220
2321// unity-api
2422#include <unity/shell/application/Mir.h>
@@ -46,7 +44,7 @@ public:
4644 Q_DECLARE_FLAGS(WindowStates, WindowState)
4745 Q_FLAG(WindowStates)
4846
49− WindowStateStorage(QObject *parent = nullptr);
47+ WindowStateStorage(const QString& dbName = nullptr, QObject *parent = nullptr);
5048 virtual ~WindowStateStorage();
5149
5250 Q_INVOKABLE void saveState(const QString &windowId, WindowState state);
@@ -66,12 +64,8 @@ private:
6664 void saveValue(const QString &queryString);
6765 QSqlQuery getValue(const QString &queryString) const;
6866
69− static void executeAsyncQuery(const QString &queryString);
7067 static QMutex s_mutex;
7168
7269 // NB: This is accessed from threads. Make sure to mutex it.
7370 QSqlDatabase m_db;
74−
75− QList<QFuture<void>> m_asyncQueries;
76− QThreadPool m_threadPool;
7771};
tests/plugins/Utils/WindowStateStorageTest.cpp+1−1
@@ -30,7 +30,7 @@ private Q_SLOTS:
3030
3131 void init()
3232 {
33− storage = new WindowStateStorage(this);
33+ storage = new WindowStateStorage(":memory:", this);
3434 }
3535
3636 void cleanup()