From ce9da995284863031203f373b5acdb9fac2e2029 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Fri, 7 Oct 2022 15:52:41 +0200 Subject: [PATCH] FilePath: Fix isRelativePath for QRC paths Implicitly fixing methods like absoluteFilePath too. Fixes e.g. JSON wizards that are registered from a plugin QRC file, like McuSupport wizards (run with McuSupport plugin enabled and create a "Application (Qt for MCU)" application). Change-Id: I296ba1c5eb63c9eb27f9a55e65019125faf546ea Reviewed-by: hjk Reviewed-by: Qt CI Bot Reviewed-by: --- src/libs/utils/filepath.cpp | 2 ++ tests/auto/utils/fileutils/tst_fileutils.cpp | 8 ++++++++ 2 files changed, 10 insertions(+) diff --git a/src/libs/utils/filepath.cpp b/src/libs/utils/filepath.cpp index 0f9d245142c..02335910ec9 100644 --- a/src/libs/utils/filepath.cpp +++ b/src/libs/utils/filepath.cpp @@ -1630,6 +1630,8 @@ bool FilePath::isRelativePath() const return false; if (path().size() > 1 && isWindowsDriveLetter(path()[0]) && path().at(1) == ':') return false; + if (path().startsWith(":/")) // QRC + return false; return true; } diff --git a/tests/auto/utils/fileutils/tst_fileutils.cpp b/tests/auto/utils/fileutils/tst_fileutils.cpp index f93aa74a58d..0522b320575 100644 --- a/tests/auto/utils/fileutils/tst_fileutils.cpp +++ b/tests/auto/utils/fileutils/tst_fileutils.cpp @@ -161,6 +161,8 @@ void tst_fileutils::parentDir_data() << "//server/directory/file" << "//server/directory" << ""; QTest::newRow("//server/directory") << "//server/directory" << "//server/" << ""; QTest::newRow("//server") << "//server" << "" << ""; + + QTest::newRow("qrc") << ":/foo/bar.txt" << ":/foo" << ""; } void tst_fileutils::parentDir() @@ -199,6 +201,8 @@ void tst_fileutils::isChildOf_data() << "//server/directory" << "//server/directory/file" << true; QTest::newRow("//server/directory") << "//server" << "//server/directory" << true; + + QTest::newRow("qrc") << ":/foo/bar" << ":/foo/bar/blah" << true; } void tst_fileutils::isChildOf() @@ -243,6 +247,8 @@ void tst_fileutils::fileName_data() QTest::newRow("slashes at end 2") << "/a/b//" << 1 << "b//"; QTest::newRow("root only 1") << "/" << 0 << ""; QTest::newRow("root only 2") << "/" << 1 << "/"; + QTest::newRow("qrc 0") << ":/foo/bar" << 0 << "bar"; + QTest::newRow("qrc with root") << ":/foo/bar" << 1 << ":/foo/bar"; } void tst_fileutils::fileName() @@ -384,6 +390,8 @@ void tst_fileutils::absoluteFilePath_data() QTest::newRow("default-constructed") << FilePath() << FilePath(); QTest::newRow("relative") << FilePath::fromString("a/b") << FilePath::fromString(QDir::currentPath() + "/a/b"); + QTest::newRow("qrc") << FilePath::fromString(":/foo/bar.txt") + << FilePath::fromString(":/foo/bar.txt"); } void tst_fileutils::absoluteFilePath()