diff options
author | Christian Kamm <mail@ckamm.de> | 2018-01-10 13:40:02 +0300 |
---|---|---|
committer | ckamm <mail@ckamm.de> | 2018-01-10 15:36:00 +0300 |
commit | 7d70f1becb646040e2428c12bca9ec28596a50f8 (patch) | |
tree | 4d3d166928eec83ff8453e8ffbd533c78948830a /test | |
parent | a476c5420a0e7f2e6a9b1a76db3b9c1f0af40f08 (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.cpp | 50 |
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) |