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"