aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Kandeler <christian.kandeler@qt.io>2017-11-01 14:52:55 +0100
committerChristian Kandeler <christian.kandeler@qt.io>2017-11-01 15:26:38 +0000
commit6534ed02c9878c4fa02dea5cc646e0e7f1696cbd (patch)
treef6389f139c70593fba2aa7b2bcdf6e404ae3967f
parent47e4f740cae4a9edc364c26fd1312c9070080558 (diff)
Fix File.move() and add autotest
This function did not work for even the simplest case, which went unnoticed as there was no test coverage whatsoever. Problems fixed: - The operation failed if the destination file did *not* exist. - The operation failed if the source file was not readable. Task-number: QBS-1216 Change-Id: I7b4ed7493d36d19807ed9a72f113b929565f7f4b Reviewed-by: Jake Petroules <jake.petroules@qt.io>
-rw-r--r--src/lib/corelib/jsextensions/file.cpp7
-rw-r--r--tests/auto/blackbox/testdata/jsextensions-file/file.qbs7
-rw-r--r--tests/auto/blackbox/tst_blackbox.cpp5
3 files changed, 13 insertions, 6 deletions
diff --git a/src/lib/corelib/jsextensions/file.cpp b/src/lib/corelib/jsextensions/file.cpp
index 4368c4f1b..e59798563 100644
--- a/src/lib/corelib/jsextensions/file.cpp
+++ b/src/lib/corelib/jsextensions/file.cpp
@@ -258,13 +258,8 @@ QScriptValue File::js_move(QScriptContext *context, QScriptEngine *engine)
.arg(sourceFile, targetFile));
}
- if (!QFile(sourceFile).isReadable())
- return context->throwError(QString(QLatin1String("Could not move '%1' to '%2': "
- "Source file is not accessible."))
- .arg(sourceFile, targetFile));
-
QFile f(targetFile);
- if (overwrite && !f.remove())
+ if (overwrite && f.exists() && !f.remove())
return context->throwError(QString(QLatin1String("Could not move '%1' to '%2': %3"))
.arg(sourceFile, targetFile, f.errorString()));
diff --git a/tests/auto/blackbox/testdata/jsextensions-file/file.qbs b/tests/auto/blackbox/testdata/jsextensions-file/file.qbs
index 5d6ce07ca..2b0ec8de1 100644
--- a/tests/auto/blackbox/testdata/jsextensions-file/file.qbs
+++ b/tests/auto/blackbox/testdata/jsextensions-file/file.qbs
@@ -42,6 +42,13 @@ Product {
entries = File.directoryEntries(product.sourceDirectory, File.Dirs | File.NoDotAndDotDot);
if (entries.length < 1 || !entries.contains("zePath"))
throw new Error("Directory did not contain only zePath");
+ var moveSource = FileInfo.joinPaths(product.sourceDirectory, "tomove.txt");
+ var moveTarget = FileInfo.joinPaths(product.sourceDirectory, "moved.txt");
+ File.move(moveSource, moveTarget);
+ if (File.exists(moveSource))
+ throw new Error("Moved file still exists under old name");
+ if (!File.exists(moveTarget))
+ throw new Error("Moved file does not exist under new name");
};
return [cmd];
}
diff --git a/tests/auto/blackbox/tst_blackbox.cpp b/tests/auto/blackbox/tst_blackbox.cpp
index a893c4525..3abd5e3b3 100644
--- a/tests/auto/blackbox/tst_blackbox.cpp
+++ b/tests/auto/blackbox/tst_blackbox.cpp
@@ -3316,6 +3316,11 @@ void TestBlackbox::compilerDefinesByLanguage()
void TestBlackbox::jsExtensionsFile()
{
QDir::setCurrent(testDataDir + "/jsextensions-file");
+ QFile fileToMove("tomove.txt");
+ QVERIFY2(fileToMove.open(QIODevice::WriteOnly), qPrintable(fileToMove.errorString()));
+ fileToMove.close();
+ fileToMove.setPermissions(fileToMove.permissions() & ~(QFile::ReadUser | QFile::ReadOwner
+ | QFile::ReadGroup | QFile::ReadOther));
QbsRunParameters params(QStringList() << "-f" << "file.qbs");
QCOMPARE(runQbs(params), 0);
QVERIFY(!QFileInfo("original.txt").exists());