diff options
author | Lars Knoll <lars.knoll@qt.io> | 2020-04-30 10:30:40 +0200 |
---|---|---|
committer | Lars Knoll <lars.knoll@qt.io> | 2020-05-14 07:48:55 +0200 |
commit | 13af1312f7416dd23baf512dcb9e51dce3d936fc (patch) | |
tree | 64ec3db34cc4df585724ec7ca9d2c91f7915ed60 /tests | |
parent | a639bcda1e42f48fa32885ede77f9fd320ce731c (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.cpp | 58 |
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: |