Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/desktop.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorChristian Kamm <mail@ckamm.de>2018-01-10 13:40:02 +0300
committerckamm <mail@ckamm.de>2018-01-10 15:36:00 +0300
commit7d70f1becb646040e2428c12bca9ec28596a50f8 (patch)
tree4d3d166928eec83ff8453e8ffbd533c78948830a /test
parenta476c5420a0e7f2e6a9b1a76db3b9c1f0af40f08 (diff)
Ignore files that can't be encoded for the filesystem
There's an upstream bug where QTextCodec::canEncode returns true even though it should be false. This works around that issue and adds a test. The original work was done in 72809ef5b1aeb578976e4360ed267ac1c4d71ea6 See #6287, #5676, #5719 See https://bugreports.qt.io/browse/QTBUG-6925
Diffstat (limited to 'test')
-rw-r--r--test/testsyncengine.cpp50
1 files changed, 50 insertions, 0 deletions
diff --git a/test/testsyncengine.cpp b/test/testsyncengine.cpp
index 10e5e9acd..22509388f 100644
--- a/test/testsyncengine.cpp
+++ b/test/testsyncengine.cpp
@@ -586,6 +586,56 @@ private slots:
QVERIFY(localFileExists("A/.hidden"));
QVERIFY(fakeFolder.currentRemoteState().find("B/.hidden"));
}
+
+ void testNoLocalEncoding()
+ {
+ auto utf8Locale = QTextCodec::codecForLocale();
+ if (utf8Locale->mibEnum() != 106) {
+ QSKIP("Test only works for UTF8 locale");
+ }
+
+ FakeFolder fakeFolder{ FileInfo::A12_B12_C12_S12() };
+ QVERIFY(fakeFolder.syncOnce());
+ QCOMPARE(fakeFolder.currentLocalState(), fakeFolder.currentRemoteState());
+
+ // Utf8 locale can sync both
+ fakeFolder.remoteModifier().insert("A/tößt");
+ fakeFolder.remoteModifier().insert("A/t𠜎t");
+ QVERIFY(fakeFolder.syncOnce());
+ QVERIFY(fakeFolder.currentLocalState().find("A/tößt"));
+ QVERIFY(fakeFolder.currentLocalState().find("A/t𠜎t"));
+
+ // Try again with a locale that can represent ö but not 𠜎 (4-byte utf8).
+ QTextCodec::setCodecForLocale(QTextCodec::codecForName("ISO-8859-15"));
+ QVERIFY(QTextCodec::codecForLocale()->mibEnum() == 111);
+
+ fakeFolder.remoteModifier().insert("B/tößt");
+ fakeFolder.remoteModifier().insert("B/t𠜎t");
+ QVERIFY(fakeFolder.syncOnce());
+ QVERIFY(fakeFolder.currentLocalState().find("B/tößt"));
+ QVERIFY(!fakeFolder.currentLocalState().find("B/t𠜎t"));
+ QVERIFY(!fakeFolder.currentLocalState().find("B/t?t"));
+ QVERIFY(!fakeFolder.currentLocalState().find("B/t??t"));
+ QVERIFY(!fakeFolder.currentLocalState().find("B/t???t"));
+ QVERIFY(!fakeFolder.currentLocalState().find("B/t????t"));
+ QVERIFY(fakeFolder.syncOnce());
+ QVERIFY(fakeFolder.currentRemoteState().find("B/tößt"));
+ QVERIFY(fakeFolder.currentRemoteState().find("B/t𠜎t"));
+
+ // Try again with plain ascii
+ QTextCodec::setCodecForLocale(QTextCodec::codecForName("ASCII"));
+ QVERIFY(QTextCodec::codecForLocale()->mibEnum() == 3);
+
+ fakeFolder.remoteModifier().insert("C/tößt");
+ QVERIFY(fakeFolder.syncOnce());
+ QVERIFY(!fakeFolder.currentLocalState().find("C/tößt"));
+ QVERIFY(!fakeFolder.currentLocalState().find("C/t??t"));
+ QVERIFY(!fakeFolder.currentLocalState().find("C/t????t"));
+ QVERIFY(fakeFolder.syncOnce());
+ QVERIFY(fakeFolder.currentRemoteState().find("C/tößt"));
+
+ QTextCodec::setCodecForLocale(utf8Locale);
+ }
};
QTEST_GUILESS_MAIN(TestSyncEngine)