/* * This software is in the public domain, furnished "as is", without technical * support, and with no warranty, express or implied, as to its usefulness for * any purpose. * */ #include #include "testutils/syncenginetestutils.h" #include using namespace OCC; class TestSyncDelete : public QObject { Q_OBJECT private Q_SLOTS: void initTestCase_data() { QTest::addColumn("vfsMode"); QTest::addColumn("filesAreDehydrated"); QTest::newRow("Vfs::Mode::Off") << Vfs::Mode::Off << false; if (VfsPluginManager::instance().isVfsPluginAvailable(Vfs::Mode::WindowsCfApi)) { QTest::newRow("Vfs::Mode::WindowsCfApi dehydrated") << Vfs::Mode::WindowsCfApi << true; // TODO: the hydrated version will fail due to an issue in the winvfs plugin, so leave it disabled for now. // QTest::newRow("Vfs::Mode::WindowsCfApi hydrated") << Vfs::Mode::WindowsCfApi << false; } else if (Utility::isWindows()) { qWarning("Skipping Vfs::Mode::WindowsCfApi"); } } void testDeleteDirectoryWithNewFile() { QFETCH_GLOBAL(Vfs::Mode, vfsMode); QFETCH_GLOBAL(bool, filesAreDehydrated); FakeFolder fakeFolder(FileInfo::A12_B12_C12_S12(), vfsMode, filesAreDehydrated); // Remove a directory on the server with new files on the client fakeFolder.remoteModifier().remove(QStringLiteral("A")); fakeFolder.localModifier().insert(QStringLiteral("A/hello.txt")); // Symetry fakeFolder.localModifier().remove(QStringLiteral("B")); fakeFolder.remoteModifier().insert(QStringLiteral("B/hello.txt")); QVERIFY(fakeFolder.applyLocalModificationsAndSync()); // A/a1 must be gone because the directory was removed on the server, but hello.txt must be there QVERIFY(!fakeFolder.currentRemoteState().find(QStringLiteral("A/a1"))); QVERIFY(fakeFolder.currentRemoteState().find(QStringLiteral("A/hello.txt"))); // Symetry QVERIFY(!fakeFolder.currentRemoteState().find(QStringLiteral("B/b1"))); QVERIFY(fakeFolder.currentRemoteState().find(QStringLiteral("B/hello.txt"))); QCOMPARE(fakeFolder.currentLocalState(), fakeFolder.currentRemoteState()); } void issue1329() { QFETCH_GLOBAL(Vfs::Mode, vfsMode); QFETCH_GLOBAL(bool, filesAreDehydrated); FakeFolder fakeFolder(FileInfo::A12_B12_C12_S12(), vfsMode, filesAreDehydrated); fakeFolder.localModifier().remove(QStringLiteral("B")); QVERIFY(fakeFolder.applyLocalModificationsAndSync()); QCOMPARE(fakeFolder.currentLocalState(), fakeFolder.currentRemoteState()); // Add a directory that was just removed in the previous sync: fakeFolder.localModifier().mkdir(QStringLiteral("B")); fakeFolder.localModifier().insert(QStringLiteral("B/b1")); QVERIFY(fakeFolder.applyLocalModificationsAndSync()); QVERIFY(fakeFolder.currentRemoteState().find(QStringLiteral("B/b1"))); QCOMPARE(fakeFolder.currentLocalState(), fakeFolder.currentRemoteState()); } }; QTEST_GUILESS_MAIN(TestSyncDelete) #include "testsyncdelete.moc"