diff options
author | Thiago Macieira <thiago.macieira@intel.com> | 2011-09-08 17:40:36 +0200 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-03-30 01:19:59 +0200 |
commit | b75aa795feb476111a0706c52a8ebea8dff7640d (patch) | |
tree | 82a9d6c8daa162e903a62153201fc868ec6b0501 /tests/auto/corelib/io/qurlinternal | |
parent | 73e16b15a6b3dc9838763407665d5797ba5618b2 (diff) |
Refactor the URL recoder a little
Change it to operate on QChar pointers, which gains a little in
performance. This also avoids unnecessary detaching in the QString
source.
In addition, make the output be appended to an existing QString. This
will be useful later when we're reconstructing a URL from its
components.
Change-Id: I7e2f64028277637bd329af5f98001ace253a50c7
Reviewed-by: Lars Knoll <lars.knoll@nokia.com>
Diffstat (limited to 'tests/auto/corelib/io/qurlinternal')
-rw-r--r-- | tests/auto/corelib/io/qurlinternal/tst_qurlinternal.cpp | 38 |
1 files changed, 25 insertions, 13 deletions
diff --git a/tests/auto/corelib/io/qurlinternal/tst_qurlinternal.cpp b/tests/auto/corelib/io/qurlinternal/tst_qurlinternal.cpp index 3761603c28..34b9c94865 100644 --- a/tests/auto/corelib/io/qurlinternal/tst_qurlinternal.cpp +++ b/tests/auto/corelib/io/qurlinternal/tst_qurlinternal.cpp @@ -50,8 +50,8 @@ Q_CORE_EXPORT extern void qt_nameprep(QString *source, int from); Q_CORE_EXPORT extern bool qt_check_std3rules(const QChar *, int); Q_CORE_EXPORT void qt_punycodeEncoder(const QChar *s, int ucLength, QString *output); Q_CORE_EXPORT QString qt_punycodeDecoder(const QString &pc); -Q_CORE_EXPORT QString qt_urlRecode(const QString &component, QUrl::ComponentFormattingOptions encoding, - const ushort *tableModifications = 0); +Q_CORE_EXPORT int qt_urlRecode(QString &appendTo, const QChar *input, const QChar *end, + QUrl::ComponentFormattingOptions encoding, const ushort *tableModifications = 0); QT_END_NAMESPACE // For testsuites @@ -762,7 +762,6 @@ void tst_QUrlInternal::correctEncodedMistakes_data() QTest::addColumn<QString>("input"); QTest::addColumn<QString>("expected"); - QTest::newRow("null") << QString() << QString(); QTest::newRow("empty") << "" << ""; // these contain one invalid percent @@ -808,9 +807,13 @@ void tst_QUrlInternal::correctEncodedMistakes() QFETCH(QString, input); QFETCH(QString, expected); - QString output = qt_urlRecode(input, QUrl::DecodeUnicode); + // prepend some data to be sure that it remains there + QString output = QTest::currentDataTag(); + expected.prepend(output); + + if (!qt_urlRecode(output, input.constData(), input.constData() + input.length(), QUrl::DecodeUnicode)) + output += input; QCOMPARE(output, expected); - QCOMPARE(output.isNull(), expected.isNull()); } static void addUtf8Data(const char *name, const char *data) @@ -893,7 +896,7 @@ void tst_QUrlInternal::encodingRecode_data() addUtf8Data("utf8-3char-2", "\xED\x9F\xBF"); // U+D7FF addUtf8Data("utf8-3char-3", "\xEE\x80\x80"); // U+E000 addUtf8Data("utf8-3char-4", "\xEF\xBF\xBD"); // U+FFFD - addUtf8Data("utf8-2char-1", "\xF0\x90\x80\x80"); // U+10000 + addUtf8Data("utf8-4char-1", "\xF0\x90\x80\x80"); // U+10000 addUtf8Data("utf8-4char-2", "\xF4\x8F\xBF\xBD"); // U+10FFFD // longer UTF-8 sequences, mixed with unreserved @@ -931,9 +934,13 @@ void tst_QUrlInternal::encodingRecode() QFETCH(QString, expected); QFETCH(QUrl::ComponentFormattingOptions, encodingMode); - QString output = qt_urlRecode(input, encodingMode); + // prepend some data to be sure that it remains there + QString output = QTest::currentDataTag(); + expected.prepend(output); + + if (!qt_urlRecode(output, input.constData(), input.constData() + input.length(), encodingMode)) + output += input; QCOMPARE(output, expected); - QCOMPARE(output.isNull(), expected.isNull()); } void tst_QUrlInternal::encodingRecodeInvalidUtf8_data() @@ -957,13 +964,18 @@ void tst_QUrlInternal::encodingRecodeInvalidUtf8() QFETCH(QByteArray, utf8); QString input = utf8.toPercentEncoding(); - QString output; - output = qt_urlRecode(input, QUrl::DecodeUnicode); - QCOMPARE(output, input); + // prepend some data to be sure that it remains there + QString output = QTest::currentDataTag(); + + if (!qt_urlRecode(output, input.constData(), input.constData() + input.length(), QUrl::DecodeUnicode)) + output += input; + QCOMPARE(output, QTest::currentDataTag() + input); // this is just control - output = qt_urlRecode(input, QUrl::FullyEncoded); - QCOMPARE(output, input); + output = QTest::currentDataTag(); + if (!qt_urlRecode(output, input.constData(), input.constData() + input.length(), QUrl::FullyEncoded)) + output += input; + QCOMPARE(output, QTest::currentDataTag() + input); } QTEST_APPLESS_MAIN(tst_QUrlInternal) |