diff options
author | Christian Kandeler <christian.kandeler@qt.io> | 2017-11-01 14:52:55 +0100 |
---|---|---|
committer | Christian Kandeler <christian.kandeler@qt.io> | 2017-11-01 15:26:38 +0000 |
commit | 6534ed02c9878c4fa02dea5cc646e0e7f1696cbd (patch) | |
tree | f6389f139c70593fba2aa7b2bcdf6e404ae3967f | |
parent | 47e4f740cae4a9edc364c26fd1312c9070080558 (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.cpp | 7 | ||||
-rw-r--r-- | tests/auto/blackbox/testdata/jsextensions-file/file.qbs | 7 | ||||
-rw-r--r-- | tests/auto/blackbox/tst_blackbox.cpp | 5 |
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()); |