|
|
@@ -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)
|