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 <hjk@qt.io>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
This commit is contained in:
Eike Ziller
2022-10-07 15:52:41 +02:00
parent 5e786d444d
commit ce9da99528
2 changed files with 10 additions and 0 deletions

View File

@@ -1630,6 +1630,8 @@ bool FilePath::isRelativePath() const
return false; return false;
if (path().size() > 1 && isWindowsDriveLetter(path()[0]) && path().at(1) == ':') if (path().size() > 1 && isWindowsDriveLetter(path()[0]) && path().at(1) == ':')
return false; return false;
if (path().startsWith(":/")) // QRC
return false;
return true; return true;
} }

View File

@@ -161,6 +161,8 @@ void tst_fileutils::parentDir_data()
<< "//server/directory/file" << "//server/directory" << ""; << "//server/directory/file" << "//server/directory" << "";
QTest::newRow("//server/directory") << "//server/directory" << "//server/" << ""; QTest::newRow("//server/directory") << "//server/directory" << "//server/" << "";
QTest::newRow("//server") << "//server" << "" << ""; QTest::newRow("//server") << "//server" << "" << "";
QTest::newRow("qrc") << ":/foo/bar.txt" << ":/foo" << "";
} }
void tst_fileutils::parentDir() void tst_fileutils::parentDir()
@@ -199,6 +201,8 @@ void tst_fileutils::isChildOf_data()
<< "//server/directory" << "//server/directory/file" << true; << "//server/directory" << "//server/directory/file" << true;
QTest::newRow("//server/directory") QTest::newRow("//server/directory")
<< "//server" << "//server/directory" << true; << "//server" << "//server/directory" << true;
QTest::newRow("qrc") << ":/foo/bar" << ":/foo/bar/blah" << true;
} }
void tst_fileutils::isChildOf() 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("slashes at end 2") << "/a/b//" << 1 << "b//";
QTest::newRow("root only 1") << "/" << 0 << ""; QTest::newRow("root only 1") << "/" << 0 << "";
QTest::newRow("root only 2") << "/" << 1 << "/"; 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() void tst_fileutils::fileName()
@@ -384,6 +390,8 @@ void tst_fileutils::absoluteFilePath_data()
QTest::newRow("default-constructed") << FilePath() << FilePath(); QTest::newRow("default-constructed") << FilePath() << FilePath();
QTest::newRow("relative") << FilePath::fromString("a/b") QTest::newRow("relative") << FilePath::fromString("a/b")
<< FilePath::fromString(QDir::currentPath() + "/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() void tst_fileutils::absoluteFilePath()