diff options
author | Sergio Ahumada <sergio.ahumada@digia.com> | 2013-09-21 17:32:39 +0200 |
---|---|---|
committer | Sergio Ahumada <sergio.ahumada@digia.com> | 2013-09-21 17:33:15 +0200 |
commit | a5d34b34fbd867bd13ce94cdaf55d96576d4d14d (patch) | |
tree | bb3b8b902f13bda65e49485a789f0eca07329ab5 /tests/auto/corelib/io/qfilesystemwatcher | |
parent | 5957f245c6c77c98d7e90d614c9fe2cdbfe7e8e6 (diff) | |
parent | a23ff58d716f62b02ec825a3ea3c6b07616ee3f0 (diff) |
Merge branch 'stable' into dev
Change-Id: I37d85631ab1165ab91457d8880c4da907a9df73b
Diffstat (limited to 'tests/auto/corelib/io/qfilesystemwatcher')
-rw-r--r-- | tests/auto/corelib/io/qfilesystemwatcher/tst_qfilesystemwatcher.cpp | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/tests/auto/corelib/io/qfilesystemwatcher/tst_qfilesystemwatcher.cpp b/tests/auto/corelib/io/qfilesystemwatcher/tst_qfilesystemwatcher.cpp index 4105a43735..20ef7b5a76 100644 --- a/tests/auto/corelib/io/qfilesystemwatcher/tst_qfilesystemwatcher.cpp +++ b/tests/auto/corelib/io/qfilesystemwatcher/tst_qfilesystemwatcher.cpp @@ -79,6 +79,8 @@ private slots: void QTBUG2331(); void QTBUG2331_data() { basicTest_data(); } + void signalsEmittedAfterFileMoved(); + private: QString m_tempDirPattern; }; @@ -596,5 +598,84 @@ void tst_QFileSystemWatcher::QTBUG2331() QCOMPARE(watcher.directories(), QStringList()); } +class SignalReceiver : public QObject +{ + Q_OBJECT +public: + SignalReceiver(const QDir &moveSrcDir, + const QString &moveDestination, + QFileSystemWatcher *watcher, + QObject *parent = 0) + : QObject(parent), + added(false), + moveSrcDir(moveSrcDir), + moveDestination(QDir(moveDestination)), + watcher(watcher) + {} + +public slots: + void fileChanged(const QString &path) + { + QFileInfo finfo(path); + + QCOMPARE(finfo.absolutePath(), moveSrcDir.absolutePath()); + + if (!added) { + foreach (const QFileInfo &fi, moveDestination.entryInfoList(QDir::Files | QDir::NoSymLinks)) + watcher->addPath(fi.absoluteFilePath()); + added = true; + } + } + +private: + bool added; + QDir moveSrcDir; + QDir moveDestination; + QFileSystemWatcher *watcher; +}; + +// regression test for QTBUG-33211. +// using inotify backend if a file is moved and then added to the watcher +// before all the fileChanged signals are emitted the remaining signals are +// emitted with the destination path instead of the starting path +void tst_QFileSystemWatcher::signalsEmittedAfterFileMoved() +{ + QTemporaryDir temporaryDirectory(m_tempDirPattern); + QVERIFY(temporaryDirectory.isValid()); + QDir testDir(temporaryDirectory.path()); + QVERIFY(testDir.mkdir("movehere")); + QString movePath = testDir.filePath("movehere"); + + for (int i = 0; i < 10; i++) { + QFile f(testDir.filePath(QString("test%1.txt").arg(i))); + QVERIFY(f.open(QIODevice::WriteOnly)); + f.write(QByteArray("i am " + i)); + f.close(); + } + + QFileSystemWatcher watcher; + QVERIFY(watcher.addPath(testDir.path())); + QVERIFY(watcher.addPath(movePath)); + + // add files to watcher + QFileInfoList files = testDir.entryInfoList(QDir::Files | QDir::NoSymLinks); + foreach (const QFileInfo &finfo, files) + QVERIFY(watcher.addPath(finfo.absoluteFilePath())); + + // create the signal receiver + SignalReceiver signalReceiver(testDir, movePath, &watcher); + connect(&watcher, SIGNAL(fileChanged(QString)), &signalReceiver, SLOT(fileChanged(QString))); + + // watch signals + QSignalSpy changedSpy(&watcher, SIGNAL(fileChanged(QString))); + QVERIFY(changedSpy.isValid()); + + // move files to second directory + foreach (const QFileInfo &finfo, files) + QVERIFY(testDir.rename(finfo.fileName(), QString("movehere/%2").arg(finfo.fileName()))); + + QTRY_COMPARE(changedSpy.count(), 10); +} + QTEST_MAIN(tst_QFileSystemWatcher) #include "tst_qfilesystemwatcher.moc" |