diff options
author | Olivier Goffart <ogoffart@woboq.com> | 2018-01-11 12:46:50 +0300 |
---|---|---|
committer | Olivier Goffart <ogoffart@woboq.com> | 2018-01-11 12:46:50 +0300 |
commit | 9613f6437d5fd87aee349b818a945319369e1cf0 (patch) | |
tree | 9e91dc2bc7caa3d5c6c0af7f0e83b7b3774ecd78 /test | |
parent | 9dc765142cd1181aa95d730b8d8872910275d23e (diff) | |
parent | 7d70f1becb646040e2428c12bca9ec28596a50f8 (diff) |
Merge remote-tracking branch 'origin/2.4'
Conflicts:
src/libsync/networkjobs.cpp
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 54e3a11cb..ff291cc39 100644 --- a/test/testsyncengine.cpp +++ b/test/testsyncengine.cpp @@ -622,6 +622,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) |