diff --git a/src/libs/utils/filepath.cpp b/src/libs/utils/filepath.cpp index d2a6e7fc8b1..0c49bf4fe47 100644 --- a/src/libs/utils/filepath.cpp +++ b/src/libs/utils/filepath.cpp @@ -721,7 +721,11 @@ FilePath FilePath::parentDir() const FilePath FilePath::absolutePath() const { - const FilePath parentPath = isAbsolutePath() ? parentDir() : FilePath::currentWorkingPath().resolvePath(*this).parentDir(); + if (!needsDevice() && isEmpty()) + return *this; + const FilePath parentPath = isAbsolutePath() + ? parentDir() + : FilePath::currentWorkingPath().resolvePath(*this).parentDir(); return parentPath.isEmpty() ? *this : parentPath; } @@ -729,6 +733,8 @@ FilePath FilePath::absoluteFilePath() const { if (isAbsolutePath()) return *this; + if (!needsDevice() && isEmpty()) + return *this; return FilePath::currentWorkingPath().resolvePath(*this); } diff --git a/tests/auto/utils/fileutils/tst_fileutils.cpp b/tests/auto/utils/fileutils/tst_fileutils.cpp index 02a43d63948..ddbbd5647b3 100644 --- a/tests/auto/utils/fileutils/tst_fileutils.cpp +++ b/tests/auto/utils/fileutils/tst_fileutils.cpp @@ -46,6 +46,9 @@ private slots: void relativePath_data(); void relativePath(); + void absoluteFilePath_data(); + void absoluteFilePath(); + void fromToString_data(); void fromToString(); @@ -370,6 +373,26 @@ void tst_fileutils::schemeAndHostLength() QCOMPARE(actual, result); } +void tst_fileutils::absoluteFilePath_data() +{ + QTest::addColumn("path"); + QTest::addColumn("result"); + + QTest::newRow("absolute1") << FilePath::fromString("/") << FilePath::fromString("/"); + QTest::newRow("absolute2") << FilePath::fromString("C:/a/b") << FilePath::fromString("C:/a/b"); + QTest::newRow("absolute3") << FilePath::fromString("/a/b") << FilePath::fromString("/a/b"); + QTest::newRow("default-constructed") << FilePath() << FilePath(); + QTest::newRow("relative") << FilePath::fromString("a/b") + << FilePath::fromString(QDir::currentPath() + "/a/b"); +} + +void tst_fileutils::absoluteFilePath() +{ + QFETCH(FilePath, path); + QFETCH(FilePath, result); + QCOMPARE(path.absoluteFilePath(), result); +} + void tst_fileutils::toString_data() { QTest::addColumn("scheme");