1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107
|
/*
* SPDX-License-Identifier: GPL-3.0-or-later
* SPDX-FileCopyrightText: 2020 Johan Ouwerkerk <jm.ouwerkerk@gmail.com>
*/
#include "uri/uri.h"
#include <QList>
#include <QTest>
#include <QtDebug>
class PercentEncodingTest : public QObject // clazy:exclude=ctor-missing-parent-argument
{
Q_OBJECT
private Q_SLOTS:
void testValidString(void);
void testValidString_data(void);
void testValidByteArray(void);
void testValidByteArray_data(void);
void testInvalidString(void);
void testInvalidString_data(void);
void testInvalidByteArray(void);
void testInvalidByteArray_data(void);
};
void PercentEncodingTest::testValidString(void)
{
QFETCH(QByteArray, input);
const std::optional<QString> result = uri::decodePercentEncoding(input);
QVERIFY2(result, "should decode valid input successfully");
QTEST(*result, "expected");
}
void PercentEncodingTest::testValidString_data(void)
{
QTest::addColumn<QByteArray>("input");
QTest::addColumn<QString>("expected");
QList<QByteArray> validStringInputs = QList<QByteArray>() << QByteArray("%3A");
QStringList validStringOutputs = QStringList() << QStringLiteral(":");
int i = 0;
for (const auto &input : std::as_const(validStringInputs)) {
QTest::newRow(input.constData()) << input << validStringOutputs[i];
i++;
}
}
void PercentEncodingTest::testValidByteArray(void)
{
QFETCH(QByteArray, input);
const std::optional<QByteArray> result = uri::fromPercentEncoding(input);
QVERIFY2(result, "should decode valid input successfully");
QTEST(*result, "expected");
}
void PercentEncodingTest::testValidByteArray_data(void)
{
QTest::addColumn<QByteArray>("input");
QTest::addColumn<QByteArray>("expected");
QList<QByteArray> validByteArrayInputs = QList<QByteArray>() << QByteArray("%01") << QByteArray("%3A") << QByteArray("%00")
<< QByteArray("a%20valid%20sample") << QByteArray("%2f") << QByteArray("embedded%00works");
QList<QByteArray> validByteArrayOutputs = QList<QByteArray>()
<< QByteArray("\x1") << QByteArray(":") << QByteArray("Z").replace('Z', '\0') << QByteArray("a valid sample") << QByteArray("/")
<< QByteArray("embeddedZworks").replace('Z', '\0');
int i = 0;
for (const auto &input : std::as_const(validByteArrayInputs)) {
QTest::newRow(input.constData()) << input << validByteArrayOutputs[i];
i++;
}
}
void PercentEncodingTest::testInvalidString(void)
{
QFETCH(QByteArray, input);
QVERIFY2(!uri::decodePercentEncoding(input), "should reject invalid input");
}
void PercentEncodingTest::testInvalidString_data(void)
{
QTest::addColumn<QByteArray>("input");
QList<QByteArray> invalidStringInputs = QList<QByteArray>()
<< QByteArray("%ff broken multibyte (no 0 in leading char)") << QByteArray("%cf broken multibyte (next char not marked)")
<< QByteArray("%c0%7f broken multibyte (over long)") << QByteArray("truncated multibyte %c0");
for (const auto &input : std::as_const(invalidStringInputs)) {
QTest::newRow(input.constData()) << input;
}
}
void PercentEncodingTest::testInvalidByteArray(void)
{
QFETCH(QByteArray, input);
QVERIFY2(!uri::fromPercentEncoding(input), "should reject invalid input");
}
void PercentEncodingTest::testInvalidByteArray_data(void)
{
QTest::addColumn<QByteArray>("input");
QList<QByteArray> invalidByteArrayInputs = QList<QByteArray>() << QByteArray("%") << QByteArray("invalid%") << QByteArray("%G5") << QByteArray("%5");
for (const auto &input : std::as_const(invalidByteArrayInputs)) {
QTest::newRow(input.constData()) << input;
}
}
QTEST_APPLESS_MAIN(PercentEncodingTest)
#include "percent-encoding.moc"
|