From 9a21e64f19cb467ee17e3889d244aba21b2cc117 Mon Sep 17 00:00:00 2001 From: Arttu Tarkiainen Date: Tue, 5 Oct 2021 13:00:26 +0300 Subject: Add invokable methods for converting paths to/from native separators Task-number: QTIFW-2344 Change-Id: I971e96ed5b1f1e52c5779a04b7edab0952d89d9a Reviewed-by: Qt CI Bot Reviewed-by: Katja Marttila Reviewed-by: Leena Miettinen --- doc/scripting-api/packagemanagercore.qdoc | 21 +++++++++++++++++ src/libs/installer/packagemanagercore.cpp | 27 ++++++++++++++++++++++ src/libs/installer/packagemanagercore.h | 3 +++ .../packagemanagercore/tst_packagemanagercore.cpp | 22 ++++++++++++++++++ 4 files changed, 73 insertions(+) diff --git a/doc/scripting-api/packagemanagercore.qdoc b/doc/scripting-api/packagemanagercore.qdoc index e51b0ec17..ea32a59b7 100644 --- a/doc/scripting-api/packagemanagercore.qdoc +++ b/doc/scripting-api/packagemanagercore.qdoc @@ -437,6 +437,27 @@ instance without GUI. */ +/*! + \qmlmethod string installer::toNativeSeparators(string path) + + Returns \a path with the '/' separators converted to separators that are + appropriate for the underlying operating system. + + On Unix platforms the returned string is the same as the argument. + + \sa fromNativeSeparators() +*/ + +/*! + \qmlmethod string installer::fromNativeSeparators(string path) + + Returns \a path using '/' as file separator. + + On Unix platforms the returned string is the same as the argument. + + \sa toNativeSeparators() +*/ + /*! \qmlmethod boolean installer::fileExists(string filePath) diff --git a/src/libs/installer/packagemanagercore.cpp b/src/libs/installer/packagemanagercore.cpp index 232024f66..311ac544d 100644 --- a/src/libs/installer/packagemanagercore.cpp +++ b/src/libs/installer/packagemanagercore.cpp @@ -1002,6 +1002,33 @@ QString PackageManagerCore::readConsoleLine(const QString &title, qint64 maxlen) return input; } +/*! + Returns \a path with the '/' separators converted to separators that are + appropriate for the underlying operating system. + + On Unix platforms the returned string is the same as the argument. + + \sa {installer::toNativeSeparators}{installer.toNativeSeparators} + \sa fromNativeSeparators() +*/ +QString PackageManagerCore::toNativeSeparators(const QString &path) +{ + return QDir::toNativeSeparators(path); +} + +/*! + Returns \a path using '/' as file separator. + + On Unix platforms the returned string is the same as the argument. + + \sa {installer::fromNativeSeparators}{installer.fromNativeSeparators} + \sa toNativeSeparators() +*/ +QString PackageManagerCore::fromNativeSeparators(const QString &path) +{ + return QDir::fromNativeSeparators(path); +} + /*! Checks whether the target directory \a targetDirectory exists and has contents: \list diff --git a/src/libs/installer/packagemanagercore.h b/src/libs/installer/packagemanagercore.h index b5ef6304e..6698155c3 100644 --- a/src/libs/installer/packagemanagercore.h +++ b/src/libs/installer/packagemanagercore.h @@ -213,6 +213,9 @@ public: Q_INVOKABLE QString readFile(const QString &filePath, const QString &codecName) const; Q_INVOKABLE QString readConsoleLine(const QString &title = QString(), qint64 maxlen = 0) const; + Q_INVOKABLE QString toNativeSeparators(const QString &path); + Q_INVOKABLE QString fromNativeSeparators(const QString &path); + bool checkTargetDir(const QString &targetDirectory); QString targetDirWarning(const QString &targetDirectory) const; diff --git a/tests/auto/installer/packagemanagercore/tst_packagemanagercore.cpp b/tests/auto/installer/packagemanagercore/tst_packagemanagercore.cpp index a3e86c2f8..aa74d8dbe 100644 --- a/tests/auto/installer/packagemanagercore/tst_packagemanagercore.cpp +++ b/tests/auto/installer/packagemanagercore/tst_packagemanagercore.cpp @@ -370,6 +370,28 @@ private slots: QCOMPARE(core->value("RootDir"), QLatin1String("Overwritten RootDir")); core->deleteLater(); } + + void testToFromNativeSeparators_data() + { + QTest::addColumn("path"); + QTest::newRow("Slash separator") << "a/test/path"; + QTest::newRow("Backslash separator") << "a\\test\\path"; + QTest::newRow("Mixed separators") << "a/test\\path"; + } + + void testToFromNativeSeparators() + { + QFETCH(QString, path); + + PackageManagerCore core; +#ifdef Q_OS_WIN + QCOMPARE(core.toNativeSeparators(path), "a\\test\\path"); + QCOMPARE(core.fromNativeSeparators(path), "a/test/path"); +#else + QCOMPARE(core.toNativeSeparators(path), path); + QCOMPARE(core.fromNativeSeparators(path), path); +#endif + } }; -- cgit v1.2.3