aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--doc/reference/jsextensions/jsextension-fileinfo.qdoc12
-rw-r--r--src/lib/corelib/jsextensions/fileinfoextension.cpp13
-rw-r--r--tests/auto/blackbox/testdata/jsextensions-fileinfo/fileinfo.qbs1
-rw-r--r--tests/auto/blackbox/tst_blackbox.cpp3
4 files changed, 28 insertions, 1 deletions
diff --git a/doc/reference/jsextensions/jsextension-fileinfo.qdoc b/doc/reference/jsextensions/jsextension-fileinfo.qdoc
index 8e847a5ef..967606ea7 100644
--- a/doc/reference/jsextensions/jsextension-fileinfo.qdoc
+++ b/doc/reference/jsextensions/jsextension-fileinfo.qdoc
@@ -44,6 +44,18 @@
\endcode
Returns the file name of \c filePath up to (but not including) the first '.' character.
+ \section2 canonicalPath
+ \code
+ FileInfo.canonicalPath(filePath: string): string
+ \endcode
+ Returns a canonicalized \c filePath, i.e. an absolute path without symbolic
+ links or redundant "." or ".." elements.
+ On Windows, drive substitutions are also resolved.
+
+ It is recommended to use \c{canonicalPath} in only those cases where
+ canonical paths are really necessary. In most cases, \c{cleanPath} should
+ be enough.
+
\section2 cleanPath
\code
FileInfo.cleanPath(filePath: string): string
diff --git a/src/lib/corelib/jsextensions/fileinfoextension.cpp b/src/lib/corelib/jsextensions/fileinfoextension.cpp
index cdc058757..5b30ec35f 100644
--- a/src/lib/corelib/jsextensions/fileinfoextension.cpp
+++ b/src/lib/corelib/jsextensions/fileinfoextension.cpp
@@ -63,6 +63,7 @@ public:
static QScriptValue js_baseName(QScriptContext *context, QScriptEngine *engine);
static QScriptValue js_suffix(QScriptContext *context, QScriptEngine *engine);
static QScriptValue js_completeSuffix(QScriptContext *context, QScriptEngine *engine);
+ static QScriptValue js_canonicalPath(QScriptContext *context, QScriptEngine *engine);
static QScriptValue js_cleanPath(QScriptContext *context, QScriptEngine *engine);
static QScriptValue js_completeBaseName(QScriptContext *context, QScriptEngine *engine);
static QScriptValue js_relativePath(QScriptContext *context, QScriptEngine *engine);
@@ -136,6 +137,16 @@ QScriptValue FileInfoExtension::js_completeSuffix(QScriptContext *context, QScri
return FileInfo::completeSuffix(context->argument(0).toString());
}
+QScriptValue FileInfoExtension::js_canonicalPath(QScriptContext *context, QScriptEngine *engine)
+{
+ Q_UNUSED(engine);
+ if (Q_UNLIKELY(context->argumentCount() < 1)) {
+ return context->throwError(QScriptContext::SyntaxError,
+ Tr::tr("canonicalPath expects 1 argument"));
+ }
+ return QFileInfo(context->argument(0).toString()).canonicalFilePath();
+}
+
QScriptValue FileInfoExtension::js_cleanPath(QScriptContext *context, QScriptEngine *engine)
{
Q_UNUSED(engine);
@@ -281,6 +292,8 @@ void initializeJsExtensionFileInfo(QScriptValue extensionObject)
engine->newFunction(FileInfoExtension::js_suffix));
fileInfoObj.setProperty(QLatin1String("completeSuffix"),
engine->newFunction(FileInfoExtension::js_completeSuffix));
+ fileInfoObj.setProperty(QLatin1String("canonicalPath"),
+ engine->newFunction(FileInfoExtension::js_canonicalPath));
fileInfoObj.setProperty(QLatin1String("cleanPath"),
engine->newFunction(FileInfoExtension::js_cleanPath));
fileInfoObj.setProperty(StringConstants::completeBaseNameProperty(),
diff --git a/tests/auto/blackbox/testdata/jsextensions-fileinfo/fileinfo.qbs b/tests/auto/blackbox/testdata/jsextensions-fileinfo/fileinfo.qbs
index 244f2122e..5d0521c2a 100644
--- a/tests/auto/blackbox/testdata/jsextensions-fileinfo/fileinfo.qbs
+++ b/tests/auto/blackbox/testdata/jsextensions-fileinfo/fileinfo.qbs
@@ -13,6 +13,7 @@ Product {
var output = new TextFile(FileInfo.joinPaths(product.sourceDirectory, "output.txt"),
TextFile.WriteOnly);
output.writeLine(FileInfo.baseName("/tmp/blubb.tar.gz"));
+ output.writeLine(FileInfo.canonicalPath("/usr/local//../bin/"));
output.writeLine(FileInfo.cleanPath("/usr/local//../bin/"));
output.writeLine(FileInfo.completeBaseName("/tmp/blubb.tar.gz"));
output.writeLine(FileInfo.fileName("/tmp/blubb.tar.gz"));
diff --git a/tests/auto/blackbox/tst_blackbox.cpp b/tests/auto/blackbox/tst_blackbox.cpp
index de0e2c26d..380b5dd80 100644
--- a/tests/auto/blackbox/tst_blackbox.cpp
+++ b/tests/auto/blackbox/tst_blackbox.cpp
@@ -4015,10 +4015,11 @@ void TestBlackbox::jsExtensionsFileInfo()
QVERIFY(output.exists());
QVERIFY(output.open(QIODevice::ReadOnly));
const QList<QByteArray> lines = output.readAll().trimmed().split('\n');
- QCOMPARE(lines.size(), 25);
+ QCOMPARE(lines.size(), 26);
int i = 0;
QCOMPARE(lines.at(i++).trimmed().constData(), "blubb");
QCOMPARE(lines.at(i++).trimmed().constData(), "/usr/bin");
+ QCOMPARE(lines.at(i++).trimmed().constData(), "/usr/bin");
QCOMPARE(lines.at(i++).trimmed().constData(), "blubb.tar");
QCOMPARE(lines.at(i++).trimmed().constData(), "blubb.tar.gz");
QCOMPARE(lines.at(i++).trimmed().constData(), "/tmp/blubb.tar.gz");