File indexing completed on 2024-05-05 05:53:09

0001 /*
0002  * SPDX-License-Identifier: GPL-3.0-or-later
0003  * SPDX-FileCopyrightText: 2020 Johan Ouwerkerk <jm.ouwerkerk@gmail.com>
0004  */
0005 #include "base32/base32.h"
0006 
0007 #include <QTest>
0008 #include <QtDebug>
0009 
0010 class Base32ValidationTest: public QObject
0011 {
0012     Q_OBJECT
0013 private Q_SLOTS:
0014     void testValidSample(void);
0015     void testValidSample_data(void);
0016     void testInvalidSample(void);
0017     void testInvalidSample_data(void);
0018 };
0019 
0020 static void define_valid_test_case(const QString &base32, size_t expected)
0021 {
0022     static const QString testCase(QLatin1String("'%1'"));
0023     QTest::newRow(qPrintable(testCase.arg(base32))) << base32 << expected;
0024 }
0025 
0026 static void define_invalid_test_case(char *testCase, const QString &input)
0027 {
0028     QTest::newRow(testCase) << input;
0029 }
0030 
0031 void Base32ValidationTest::testValidSample(void)
0032 {
0033     QFETCH(QString, input);
0034     QFETCH(size_t, expected);
0035     QCOMPARE(base32::validate(input), std::optional<size_t>(expected));
0036 }
0037 
0038 void Base32ValidationTest::testInvalidSample(void)
0039 {
0040     QFETCH(QString, input);
0041     QVERIFY2(!base32::validate(input), "invalid input should be rejected");
0042 }
0043 
0044 void Base32ValidationTest::testValidSample_data(void)
0045 {
0046     QTest::addColumn<QString>("input");
0047     QTest::addColumn<size_t>("expected");
0048 
0049     define_valid_test_case(QLatin1String("IFBEGRAK"), 5);
0050     define_valid_test_case(QLatin1String("GIYDCNQ="), 4);
0051     define_valid_test_case(QLatin1String("AAAQE==="), 3);
0052     define_valid_test_case(QLatin1String("HU6Q===="), 2);
0053     define_valid_test_case(QLatin1String("H4======"), 1);
0054 
0055     define_valid_test_case(QLatin1String(""), 0);
0056 }
0057 
0058 void Base32ValidationTest::testInvalidSample_data(void)
0059 {
0060     QTest::addColumn<QString>("input");
0061 
0062     define_invalid_test_case("without any padding", QLatin1String("ZZ"));
0063     define_invalid_test_case("too little padding", QLatin1String("ZZ==="));
0064     define_invalid_test_case("padding only", QLatin1String("========"));
0065     define_invalid_test_case("embedded spaces", QLatin1String("ZZ \n===="));
0066     define_invalid_test_case("invalid base32 (1)", QLatin1String("1AABBCCD"));
0067     define_invalid_test_case("invalid base32 (8)", QLatin1String("AABBCC8D"));
0068     define_invalid_test_case("invalid base32 (@)", QLatin1String("AABBCCD@"));
0069 }
0070 
0071 QTEST_APPLESS_MAIN(Base32ValidationTest)
0072 
0073 #include "base32-validate.moc"