diff --git a/include/ConfigManager.h b/include/ConfigManager.h index c5ef45b340c..7d542d93cca 100644 --- a/include/ConfigManager.h +++ b/include/ConfigManager.h @@ -74,6 +74,11 @@ class EXPORT ConfigManager return m_workingDir; } + const QString & sourceDir() const + { + return m_srcDir; + } + QString userProjectsDir() const { return workingDir() + PROJECTS_PATH; @@ -253,6 +258,7 @@ class EXPORT ConfigManager QString m_lmmsRcFile; QString m_workingDir; + QString m_srcDir; QString m_dataDir; QString m_artworkDir; QString m_vstDir; diff --git a/src/core/ConfigManager.cpp b/src/core/ConfigManager.cpp index 5cdfe3d97a4..38ddbe89283 100644 --- a/src/core/ConfigManager.cpp +++ b/src/core/ConfigManager.cpp @@ -63,7 +63,12 @@ ConfigManager::ConfigManager() : // If we're in development (lmms is not installed) let's get the source and // binary directories by reading the CMake Cache - QFile cmakeCache(qApp->applicationDirPath() + "/CMakeCache.txt"); + QString appPath = qApp->applicationDirPath(); + // If in tests, get parent directory + if(appPath.endsWith("/tests")) { + appPath = QFileInfo(appPath).dir().currentPath(); + } + QFile cmakeCache(appPath + "/CMakeCache.txt"); if (cmakeCache.exists()) { cmakeCache.open(QFile::ReadOnly); QTextStream stream(&cmakeCache); @@ -76,8 +81,8 @@ ConfigManager::ConfigManager() : QString line = stream.readLine(); if (line.startsWith("lmms_SOURCE_DIR:")) { - QString srcDir = line.section('=', -1).trimmed(); - QDir::addSearchPath("data", srcDir + "/data/"); + m_srcDir = line.section('=', -1).trimmed(); + QDir::addSearchPath("data", m_srcDir + "/data/"); done++; } if (line.startsWith("lmms_BINARY_DIR:")) { diff --git a/tests/src/core/RelativePathsTest.cpp b/tests/src/core/RelativePathsTest.cpp index 544a02d7acc..72e7ff9678e 100644 --- a/tests/src/core/RelativePathsTest.cpp +++ b/tests/src/core/RelativePathsTest.cpp @@ -24,6 +24,7 @@ #include "QTestSuite.h" +#include "ConfigManager.h" #include "SampleBuffer.h" #include @@ -34,8 +35,10 @@ class RelativePathsTest : QTestSuite private slots: void RelativePathComparisonTests() { - QVERIFY(SampleBuffer::tryToMakeRelative(QDir::currentPath() + "/data/samples/drums/kick01.ogg") == "drums/kick01.ogg"); - QVERIFY(SampleBuffer::tryToMakeAbsolute("drums/kick01.ogg") == QDir::currentPath() + "/data/samples/drums/kick01.ogg"); + // Bail if we can't find the source directory + QVERIFY(ConfigManager::inst()->sourceDir() != nullptr); + QVERIFY(SampleBuffer::tryToMakeRelative(ConfigManager::inst()->sourceDir() + "/data/samples/drums/kick01.ogg") == "drums/kick01.ogg"); + QVERIFY(SampleBuffer::tryToMakeAbsolute("drums/kick01.ogg") == ConfigManager::inst()->sourceDir() + "/data/samples/drums/kick01.ogg"); } } RelativePathTests;