File indexing completed on 2024-04-28 05:50:04
0001 /* 0002 * SPDX-License-Identifier: GPL-3.0-or-later 0003 * SPDX-FileCopyrightText: 2020 Johan Ouwerkerk <jm.ouwerkerk@gmail.com> 0004 */ 0005 #include "uri/uri.h" 0006 0007 #include <QTest> 0008 #include <QVector> 0009 #include <QtDebug> 0010 0011 class PercentEncodingTest: public QObject // clazy:exclude=ctor-missing-parent-argument 0012 { 0013 Q_OBJECT 0014 private Q_SLOTS: 0015 void testValidString(void); 0016 void testValidString_data(void); 0017 void testValidByteArray(void); 0018 void testValidByteArray_data(void); 0019 void testInvalidString(void); 0020 void testInvalidString_data(void); 0021 void testInvalidByteArray(void); 0022 void testInvalidByteArray_data(void); 0023 }; 0024 0025 void PercentEncodingTest::testValidString(void) 0026 { 0027 QFETCH(QByteArray, input); 0028 const std::optional<QString> result = uri::decodePercentEncoding(input); 0029 QVERIFY2(result, "should decode valid input successfully"); 0030 QTEST(*result, "expected"); 0031 } 0032 0033 void PercentEncodingTest::testValidString_data(void) 0034 { 0035 QTest::addColumn<QByteArray>("input"); 0036 QTest::addColumn<QString>("expected"); 0037 QVector<QByteArray> validStringInputs = QVector<QByteArray>() << QByteArray("%3A"); 0038 QStringList validStringOutputs = QStringList() << QStringLiteral(":"); 0039 int i = 0; 0040 for (const auto &input : qAsConst(validStringInputs)) { 0041 QTest::newRow(input.constData()) << input << validStringOutputs[i]; 0042 i++; 0043 } 0044 } 0045 0046 void PercentEncodingTest::testValidByteArray(void) 0047 { 0048 QFETCH(QByteArray, input); 0049 const std::optional<QByteArray> result = uri::fromPercentEncoding(input); 0050 QVERIFY2(result, "should decode valid input successfully"); 0051 QTEST(*result, "expected"); 0052 } 0053 0054 void PercentEncodingTest::testValidByteArray_data(void) 0055 { 0056 QTest::addColumn<QByteArray>("input"); 0057 QTest::addColumn<QByteArray>("expected"); 0058 0059 QVector<QByteArray> validByteArrayInputs = QVector<QByteArray>() 0060 << QByteArray("%01") 0061 << QByteArray("%3A") 0062 << QByteArray("%00") 0063 << QByteArray("a%20valid%20sample") 0064 << QByteArray("%2f") 0065 << QByteArray("embedded%00works"); 0066 0067 QVector<QByteArray> validByteArrayOutputs = QVector<QByteArray>() 0068 << QByteArray("\x1") 0069 << QByteArray(":") 0070 << QByteArray("Z").replace('Z', '\0') 0071 << QByteArray("a valid sample") 0072 << QByteArray("/") 0073 << QByteArray("embeddedZworks").replace('Z', '\0'); 0074 0075 int i = 0; 0076 for (const auto &input : qAsConst(validByteArrayInputs)) { 0077 QTest::newRow(input.constData()) << input << validByteArrayOutputs[i]; 0078 i++; 0079 } 0080 } 0081 0082 void PercentEncodingTest::testInvalidString(void) 0083 { 0084 QFETCH(QByteArray, input); 0085 QVERIFY2(!uri::decodePercentEncoding(input), "should reject invalid input"); 0086 } 0087 0088 void PercentEncodingTest::testInvalidString_data(void) 0089 { 0090 QTest::addColumn<QByteArray>("input"); 0091 QVector<QByteArray> invalidStringInputs = QVector<QByteArray>() 0092 << QByteArray("%ff broken multibyte (no 0 in leading char)") 0093 << QByteArray("%cf broken multibyte (next char not marked)") 0094 << QByteArray("%c0%7f broken multibyte (over long)") 0095 << QByteArray("truncated multibyte %c0"); 0096 for (const auto &input : std::as_const(invalidStringInputs)) { 0097 QTest::newRow(input.constData()) << input; 0098 } 0099 } 0100 0101 void PercentEncodingTest::testInvalidByteArray(void) 0102 { 0103 QFETCH(QByteArray, input); 0104 QVERIFY2(!uri::fromPercentEncoding(input), "should reject invalid input"); 0105 } 0106 0107 void PercentEncodingTest::testInvalidByteArray_data(void) 0108 { 0109 QTest::addColumn<QByteArray>("input"); 0110 QVector<QByteArray> invalidByteArrayInputs = QVector<QByteArray>() 0111 << QByteArray("%") 0112 << QByteArray("invalid%") 0113 << QByteArray("%G5") 0114 << QByteArray("%5"); 0115 for (const auto &input : qAsConst(invalidByteArrayInputs)) { 0116 QTest::newRow(input.constData()) << input; 0117 } 0118 } 0119 0120 QTEST_APPLESS_MAIN(PercentEncodingTest) 0121 0122 #include "percent-encoding.moc"