File indexing completed on 2024-05-05 04:00:57
0001 /* 0002 SPDX-FileCopyrightText: 2018 Volker Krause <vkrause@kde.org> 0003 0004 SPDX-License-Identifier: MIT 0005 */ 0006 0007 #include "../src/lib/bitvector_p.h" 0008 #include "../src/lib/code128barcode_p.h" 0009 0010 #include <prison.h> 0011 0012 #include <QObject> 0013 #include <QTest> 0014 0015 Q_DECLARE_METATYPE(Prison::BitVector) 0016 0017 using namespace Prison; 0018 0019 class Code128BarcodeTest : public QObject 0020 { 0021 Q_OBJECT 0022 private Q_SLOTS: 0023 void testEncode_data() 0024 { 0025 QTest::addColumn<QByteArray>("input"); 0026 QTest::addColumn<BitVector>("output"); 0027 0028 BitVector v; 0029 QTest::newRow("empty") << QByteArray() << v; 0030 v.appendMSB(1680, 11); 0031 v.appendMSB(1554, 11); 0032 v.appendMSB(1062, 11); 0033 v.appendMSB(1424, 11); 0034 v.appendMSB(1220, 11); 0035 v.appendMSB(6379, 13); 0036 QTest::newRow("all lower") << QByteArray("kde") << v; 0037 v.clear(); 0038 v.appendMSB(1680, 11); 0039 v.appendMSB(1422, 11); 0040 v.appendMSB(1416, 11); 0041 v.appendMSB(1128, 11); 0042 v.appendMSB(1764, 11); 0043 v.appendMSB(6379, 13); 0044 QTest::newRow("all uppper") << QByteArray("KDE") << v; 0045 0046 v.clear(); 0047 v.appendMSB(1680, 11); 0048 v.appendMSB(1614, 11); 0049 v.appendMSB(1764, 11); 0050 v.appendMSB(6379, 13); 0051 QTest::newRow("1 digit") << QByteArray("4") << v; 0052 v.clear(); 0053 v.appendMSB(1692, 11); 0054 v.appendMSB(1464, 11); 0055 v.appendMSB(1134, 11); 0056 v.appendMSB(6379, 13); 0057 QTest::newRow("2 digits") << QByteArray("42") << v; 0058 v.clear(); 0059 v.appendMSB(1680, 11); 0060 v.appendMSB(1614, 11); 0061 v.appendMSB(1650, 11); 0062 v.appendMSB(1650, 11); 0063 v.appendMSB(1124, 11); 0064 v.appendMSB(6379, 13); 0065 QTest::newRow("3 digits") << QByteArray("422") << v; 0066 v.clear(); 0067 v.appendMSB(1692, 11); 0068 v.appendMSB(1464, 11); 0069 v.appendMSB(1902, 11); 0070 v.appendMSB(1782, 11); 0071 v.appendMSB(6379, 13); 0072 QTest::newRow("4 digits") << QByteArray("4223") << v; 0073 0074 v.clear(); 0075 v.appendMSB(1680, 11); 0076 v.appendMSB(1814, 11); 0077 v.appendMSB(1260, 11); 0078 v.appendMSB(1260, 11); 0079 v.appendMSB(1896, 11); 0080 v.appendMSB(1814, 11); 0081 v.appendMSB(6379, 13); 0082 QTest::newRow("mixed") << QByteArray("X00Y") << v; 0083 0084 v.clear(); 0085 v.appendMSB(1668, 11); 0086 v.appendMSB(1292, 11); 0087 v.appendMSB(1292, 11); 0088 v.appendMSB(6379, 13); 0089 QTest::newRow("null") << QByteArray("\0", 1) << v; 0090 v.clear(); 0091 v.appendMSB(1668, 11); 0092 v.appendMSB(1422, 11); 0093 v.appendMSB(1416, 11); 0094 v.appendMSB(1128, 11); 0095 v.appendMSB(1292, 11); 0096 v.appendMSB(1412, 11); 0097 v.appendMSB(6379, 13); 0098 QTest::newRow("Code A only") << QByteArray("KDE\0", 4) << v; 0099 0100 v.clear(); 0101 v.appendMSB(1668, 11); 0102 v.appendMSB(1292, 11); 0103 v.appendMSB(1518, 11); 0104 v.appendMSB(1554, 11); 0105 v.appendMSB(1062, 11); 0106 v.appendMSB(1424, 11); 0107 v.appendMSB(1616, 11); 0108 v.appendMSB(6379, 13); 0109 QTest::newRow("Start A -> Latch B") << QByteArray("\0kde", 4) << v; 0110 v.clear(); 0111 v.appendMSB(1680, 11); 0112 v.appendMSB(1554, 11); 0113 v.appendMSB(1062, 11); 0114 v.appendMSB(1886, 11); 0115 v.appendMSB(1292, 11); 0116 v.appendMSB(1292, 11); 0117 v.appendMSB(1602, 11); 0118 v.appendMSB(6379, 13); 0119 QTest::newRow("Start B -> Latch A") << QByteArray("kd\0\0", 4) << v; 0120 0121 v.clear(); 0122 v.appendMSB(1668, 11); 0123 v.appendMSB(1292, 11); 0124 v.appendMSB(1954, 11); 0125 v.appendMSB(1118, 11); 0126 v.appendMSB(1590, 11); 0127 v.appendMSB(1292, 11); 0128 v.appendMSB(1328, 11); 0129 v.appendMSB(6379, 13); 0130 QTest::newRow("Start A -> Shift B") << QByteArray("\0~@\0", 4) << v; 0131 v.clear(); 0132 v.appendMSB(1680, 11); 0133 v.appendMSB(1974, 11); 0134 v.appendMSB(1954, 11); 0135 v.appendMSB(1292, 11); 0136 v.appendMSB(1310, 11); 0137 v.appendMSB(1844, 11); 0138 v.appendMSB(6379, 13); 0139 QTest::newRow("Start B -> Shift A") << QByteArray("{\0}", 3) << v; 0140 0141 v.clear(); 0142 v.appendMSB(1692, 11); 0143 v.appendMSB(1436, 11); 0144 v.appendMSB(1112, 11); 0145 v.appendMSB(1518, 11); 0146 v.appendMSB(1304, 11); 0147 v.appendMSB(1112, 11); 0148 v.appendMSB(1158, 11); 0149 v.appendMSB(6379, 13); 0150 QTest::newRow("Start C -> Latch B") << QByteArray("1234AB") << v; 0151 v.clear(); 0152 v.appendMSB(1680, 11); 0153 v.appendMSB(1304, 11); 0154 v.appendMSB(1112, 11); 0155 v.appendMSB(1502, 11); 0156 v.appendMSB(1436, 11); 0157 v.appendMSB(1112, 11); 0158 v.appendMSB(1966, 11); 0159 v.appendMSB(6379, 13); 0160 QTest::newRow("Start B -> Latch C") << QByteArray("AB1234") << v; 0161 } 0162 0163 void testEncode() 0164 { 0165 QFETCH(QByteArray, input); 0166 QFETCH(BitVector, output); 0167 0168 Code128Barcode code; 0169 const auto v = code.encode(input); 0170 if (v != output) { 0171 qDebug() << "Actual :" << v; 0172 qDebug() << "Expected:" << output; 0173 } 0174 QCOMPARE(v, output); 0175 } 0176 0177 void testDimension() 0178 { 0179 auto barcode = Prison::Barcode::create(Prison::Code128); 0180 QVERIFY(barcode); 0181 QCOMPARE(barcode->format(), Prison::Code128); 0182 QCOMPARE(barcode->dimensions(), Prison::Barcode::OneDimension); 0183 } 0184 0185 void testSize() 0186 { 0187 auto barcode = Prison::Barcode::create(Prison::Code128); 0188 QVERIFY(barcode); 0189 QCOMPARE(barcode->format(), Prison::Code128); 0190 barcode->setData(QStringLiteral("UNIT TEST")); 0191 QCOMPARE(barcode->minimumSize(), QSize(154, 1)); 0192 QCOMPARE(barcode->preferredSize(1), QSize(308, 50)); 0193 QCOMPARE(barcode->preferredSize(2), QSize(154, 50)); 0194 QCOMPARE(barcode->toImage(barcode->preferredSize(1)).size(), QSize(308, 50)); 0195 QCOMPARE(barcode->toImage({1, 1}).isNull(), true); 0196 } 0197 0198 void testRender_data() 0199 { 0200 QTest::addColumn<QByteArray>("input"); 0201 QTest::addColumn<QString>("refName"); 0202 0203 QTest::newRow("text") << QByteArray("KF5::Prison") << "code128-text.png"; 0204 QTest::newRow("binary") << QByteArray("KDE\x0\x1\x2\x3\x4\x5\x6\x7\x8\x9kde", 16) << "code128-binary.png"; 0205 } 0206 0207 void testRender() 0208 { 0209 QFETCH(QByteArray, input); 0210 QFETCH(QString, refName); 0211 0212 { 0213 auto code = Prison::Barcode::create(Prison::Code128); 0214 QVERIFY(code); 0215 code->setData(QString::fromLatin1(input.constData(), input.size())); 0216 const auto img = code->toImage(code->minimumSize()); 0217 img.save(refName); 0218 0219 QImage ref(QStringLiteral(":/code128/") + refName); 0220 ref = ref.convertToFormat(img.format()); 0221 QCOMPARE(img, ref); 0222 } 0223 0224 { 0225 auto code = Prison::Barcode::create(Prison::Code128); 0226 QVERIFY(code); 0227 code->setData(QString::fromLatin1(input.constData(), input.size())); 0228 const auto img = code->toImage(code->minimumSize()); 0229 img.save(refName); 0230 0231 QImage ref(QStringLiteral(":/code128/") + refName); 0232 ref = ref.convertToFormat(img.format()); 0233 QCOMPARE(img, ref); 0234 } 0235 } 0236 }; 0237 0238 QTEST_APPLESS_MAIN(Code128BarcodeTest) 0239 0240 #include "code128barcodetest.moc"