summaryrefslogtreecommitdiffstats
path: root/tests/auto
diff options
context:
space:
mode:
authorThiago Macieira <thiago.macieira@intel.com>2021-09-02 11:44:38 -0700
committerThiago Macieira <thiago.macieira@intel.com>2021-09-06 16:23:02 -0700
commit115d99b7de934f30d52fbcf56ee4ff170377dd26 (patch)
treebd502333067165238f8b26eac02b896a6fb6a442 /tests/auto
parentb6314409028c8407645e694d6c6b2b9b8c6c6447 (diff)
tst_QtJson: add matching escape-generating test
Change-Id: Ie72b0dd0fbe84d2caae0fffd16a11596eb61a90e Reviewed-by: Ievgenii Meshcheriakov <ievgenii.meshcheriakov@qt.io> Reviewed-by: Lars Knoll <lars.knoll@qt.io> Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Diffstat (limited to 'tests/auto')
-rw-r--r--tests/auto/corelib/serialization/json/tst_qtjson.cpp55
1 files changed, 55 insertions, 0 deletions
diff --git a/tests/auto/corelib/serialization/json/tst_qtjson.cpp b/tests/auto/corelib/serialization/json/tst_qtjson.cpp
index 80e6b2166f..ec3e0a97f1 100644
--- a/tests/auto/corelib/serialization/json/tst_qtjson.cpp
+++ b/tests/auto/corelib/serialization/json/tst_qtjson.cpp
@@ -120,6 +120,8 @@ private Q_SLOTS:
void parseEscapes_data();
void parseEscapes();
+ void makeEscapes_data();
+ void makeEscapes();
void assignObjects();
void assignArrays();
@@ -2509,6 +2511,59 @@ void tst_QtJson::parseEscapes()
QCOMPARE(array.first().toString(), result);
}
+void tst_QtJson::makeEscapes_data()
+{
+ QTest::addColumn<QString>("input");
+ QTest::addColumn<QByteArray>("result");
+
+ auto addUnicodeRow = [](char16_t c) {
+ char buf[32]; // more than enough
+ snprintf(buf, std::size(buf), "\\u%04x", c);
+ QTest::addRow("U+%04X", c) << QString(c) << QByteArray(buf);
+ };
+
+
+ QTest::addRow("quote") << "\"" << QByteArray(R"(\")");
+ QTest::addRow("backslash") << "\\" << QByteArray(R"(\\)");
+ //QTest::addRow("slash") << "/" << QByteArray(R"(\/)"); // does not get escaped
+ QTest::addRow("backspace") << "\b" << QByteArray(R"(\b)");
+ QTest::addRow("form-feed") << "\f" << QByteArray(R"(\f)");
+ QTest::addRow("newline") << "\n" << QByteArray(R"(\n)");
+ QTest::addRow("carriage-return") << "\r" << QByteArray(R"(\r)");
+ QTest::addRow("tab") << "\t" << QByteArray(R"(\t)");
+
+ // control characters other than the above
+ for (char16_t c = 0; c < 0x20; ++c) {
+ if (c && strchr("\b\f\n\r\t", c))
+ continue;
+ addUnicodeRow(c);
+ }
+ // unpaired surrogates
+ addUnicodeRow(char16_t(0xd800));
+ addUnicodeRow(char16_t(0xdc00));
+
+ QString improperlyPaired;
+ improperlyPaired.append(char16_t(0xdc00));
+ improperlyPaired.append(char16_t(0xd800));
+ QTest::addRow("inverted-surrogates") << improperlyPaired << QByteArray("\\udc00\\ud800");
+}
+
+void tst_QtJson::makeEscapes()
+{
+ QFETCH(QString, input);
+ QFETCH(QByteArray, result);
+
+ QJsonArray array = { input };
+ QByteArray json = QJsonDocument(array).toJson(QJsonDocument::Compact);
+
+ QVERIFY(json.startsWith("[\""));
+ result.prepend("[\"");
+ QVERIFY(json.endsWith("\"]"));
+ result.append("\"]");
+
+ QCOMPARE(json, result);
+}
+
void tst_QtJson::assignObjects()
{
const char *json =