summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@qt.io>2020-04-30 10:30:40 +0200
committerLars Knoll <lars.knoll@qt.io>2020-05-14 07:48:55 +0200
commit13af1312f7416dd23baf512dcb9e51dce3d936fc (patch)
tree64ec3db34cc4df585724ec7ca9d2c91f7915ed60 /tests
parenta639bcda1e42f48fa32885ede77f9fd320ce731c (diff)
Add QStringConverter::encodingForData()
Add method that tries to determine the encoding of the data from an initial byte order mark. Change-Id: I348c51a3d4db9b434af53359b739a7e17acfc760 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Diffstat (limited to 'tests')
-rw-r--r--tests/auto/corelib/text/qstringconverter/tst_qstringconverter.cpp58
1 files changed, 58 insertions, 0 deletions
diff --git a/tests/auto/corelib/text/qstringconverter/tst_qstringconverter.cpp b/tests/auto/corelib/text/qstringconverter/tst_qstringconverter.cpp
index f0e794e910..3f4bbb413f 100644
--- a/tests/auto/corelib/text/qstringconverter/tst_qstringconverter.cpp
+++ b/tests/auto/corelib/text/qstringconverter/tst_qstringconverter.cpp
@@ -65,6 +65,9 @@ private slots:
void nameForEncoding_data();
void nameForEncoding();
+
+ void encodingForData_data();
+ void encodingForData();
};
void tst_QStringConverter::constructByName()
@@ -1664,6 +1667,61 @@ void tst_QStringConverter::nameForEncoding()
QCOMPARE(n, name);
}
+void tst_QStringConverter::encodingForData_data()
+{
+ QTest::addColumn<QByteArray>("encoded");
+ QTest::addColumn<std::optional<QStringConverter::Encoding>>("encoding");
+
+
+ QTest::newRow("utf8 bom")
+ << QByteArray("\xef\xbb\xbfhello")
+ << std::optional<QStringConverter::Encoding>(QStringConverter::Utf8);
+ QTest::newRow("utf8 nobom")
+ << QByteArray("hello")
+ << std::optional<QStringConverter::Encoding>();
+
+ QTest::newRow("utf16 bom be")
+ << QByteArray("\xfe\xff\0h\0e\0l", 8)
+ << std::optional<QStringConverter::Encoding>(QStringConverter::Utf16BE);
+ QTest::newRow("utf16 bom le")
+ << QByteArray("\xff\xfeh\0e\0l\0", 8)
+ << std::optional<QStringConverter::Encoding>(QStringConverter::Utf16LE);
+ QTest::newRow("utf16 nobom be")
+ << QByteArray("\0<\0e\0l", 6)
+ << std::optional<QStringConverter::Encoding>(QStringConverter::Utf16BE);
+ QTest::newRow("utf16 nobom le")
+ << QByteArray("<\0e\0l\0", 6)
+ << std::optional<QStringConverter::Encoding>(QStringConverter::Utf16LE);
+ QTest::newRow("utf16 nobom no match")
+ << QByteArray("h\0e\0l\0", 6)
+ << std::optional<QStringConverter::Encoding>();
+
+ QTest::newRow("utf32 bom be")
+ << QByteArray("\0\0\xfe\xff\0\0\0h\0\0\0e\0\0\0l", 16)
+ << std::optional<QStringConverter::Encoding>(QStringConverter::Utf32BE);
+ QTest::newRow("utf32 bom le")
+ << QByteArray("\xff\xfe\0\0h\0\0\0e\0\0\0l\0\0\0", 16)
+ << std::optional<QStringConverter::Encoding>(QStringConverter::Utf32LE);
+ QTest::newRow("utf32 nobom be")
+ << QByteArray("\0\0\0<\0\0\0e\0\0\0l", 12)
+ << std::optional<QStringConverter::Encoding>(QStringConverter::Utf32BE);
+ QTest::newRow("utf32 nobom")
+ << QByteArray("<\0\0\0e\0\0\0l\0\0\0", 12)
+ << std::optional<QStringConverter::Encoding>(QStringConverter::Utf32LE);
+ QTest::newRow("utf32 nobom no match")
+ << QByteArray("\0\0\0h\0\0\0e\0\0\0l", 12)
+ << std::optional<QStringConverter::Encoding>();
+}
+
+void tst_QStringConverter::encodingForData()
+{
+ QFETCH(QByteArray, encoded);
+ QFETCH(std::optional<QStringConverter::Encoding>, encoding);
+
+ auto e = QStringConverter::encodingForData(encoded.constData(), encoded.size(), char16_t('<'));
+ QCOMPARE(e, encoding);
+}
+
class LoadAndConvert: public QRunnable
{
public: