File indexing completed on 2024-04-21 05:54:06
0001 /** 0002 * SPDX-FileCopyrightText: 2021 by Alexander Stippich <a.stippich@gmx.net> 0003 * 0004 * SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL 0005 */ 0006 0007 #include <memory> 0008 0009 #include <QTest> 0010 #include <QSignalSpy> 0011 #include <QTemporaryFile> 0012 #include <QPageSize> 0013 #include <QUrl> 0014 0015 #include "../src/SkanpageUtils.h" 0016 #include "../src/DocumentSaver.h" 0017 #include "../src/OCREngine.h" 0018 0019 class DocumentSaverTest : public QObject 0020 { 0021 Q_OBJECT 0022 0023 SkanpageUtils::DocumentPages testDocument; 0024 SkanpageUtils::DocumentPages testDocumentOCRSerif; 0025 SkanpageUtils::DocumentPages testDocumentOCRSans; 0026 0027 private Q_SLOTS: 0028 void initTestCase(); 0029 void testPDFWriter(); 0030 void testPDFOCRWriter(); 0031 }; 0032 0033 void DocumentSaverTest::initTestCase() 0034 { 0035 QImage image(QFINDTESTDATA("images/test150.jpg")); 0036 QPageSize pageSize = QPageSize(QPageSize::A4); 0037 int rotation = 0; 0038 for (int i = 0; i < 5; i++) { 0039 QTemporaryFile *tempImageFile = new QTemporaryFile(); 0040 tempImageFile->open(); 0041 image.save(tempImageFile, "PNG"); 0042 tempImageFile->close(); 0043 testDocument.append({std::shared_ptr<QTemporaryFile>(tempImageFile), pageSize, 150, rotation}); 0044 rotation += 90; 0045 if (rotation >= 360) { 0046 rotation = 0; 0047 } 0048 } 0049 QTemporaryFile *tempImageFile = new QTemporaryFile(); 0050 tempImageFile->open(); 0051 image.save(tempImageFile, "PNG"); 0052 tempImageFile->close(); 0053 testDocument.append({std::shared_ptr<QTemporaryFile>(tempImageFile), pageSize, 150, 90}); 0054 QTemporaryFile *tempImageFile2 = new QTemporaryFile(); 0055 tempImageFile2->open(); 0056 image.save(tempImageFile2, "PNG"); 0057 tempImageFile2->close(); 0058 testDocument.append({std::shared_ptr<QTemporaryFile>(tempImageFile2), pageSize, 150, 90}); 0059 QTemporaryFile *tempImageFile3 = new QTemporaryFile(); 0060 tempImageFile3->open(); 0061 image.save(tempImageFile3, "PNG"); 0062 tempImageFile3->close(); 0063 testDocument.append({std::shared_ptr<QTemporaryFile>(tempImageFile3), pageSize, 150, 270}); 0064 QTemporaryFile *tempImageFile4 = new QTemporaryFile(); 0065 tempImageFile4->open(); 0066 image.save(tempImageFile4, "PNG"); 0067 tempImageFile4->close(); 0068 testDocument.append({std::shared_ptr<QTemporaryFile>(tempImageFile4), pageSize, 150, 180}); 0069 QTemporaryFile *tempImageFile5 = new QTemporaryFile(); 0070 tempImageFile5->open(); 0071 image.save(tempImageFile5, "PNG"); 0072 tempImageFile5->close(); 0073 testDocument.append({std::shared_ptr<QTemporaryFile>(tempImageFile5), pageSize, 150, 180}); 0074 QTemporaryFile *tempImageFile6 = new QTemporaryFile(); 0075 tempImageFile6->open(); 0076 image.save(tempImageFile6, "PNG"); 0077 tempImageFile6->close(); 0078 testDocument.append({std::shared_ptr<QTemporaryFile>(tempImageFile6), pageSize, 150, 0}); 0079 QTemporaryFile *tempImageFile7 = new QTemporaryFile(); 0080 tempImageFile7->open(); 0081 image.save(tempImageFile7, "PNG"); 0082 tempImageFile7->close(); 0083 testDocument.append({std::shared_ptr<QTemporaryFile>(tempImageFile7), pageSize, 150, 0}); 0084 0085 QImage imageOCRSerif(QFINDTESTDATA("images/testOCRSerif150.jpg")); 0086 QImage imageOCRSerifFlipped(QFINDTESTDATA("images/testOCRSerif150Flipped.jpg")); 0087 QImage imageOCRSerifRight(QFINDTESTDATA("images/testOCRSerif150Right.jpg")); 0088 QImage imageOCRSerifLeft(QFINDTESTDATA("images/testOCRSerif150Left.jpg")); 0089 rotation = 0; 0090 for (int i = 0; i < 5; i++) { 0091 QTemporaryFile *tempImageFile8 = new QTemporaryFile(); 0092 tempImageFile8->open(); 0093 imageOCRSerif.save(tempImageFile8, "PNG"); 0094 tempImageFile8->close(); 0095 testDocumentOCRSerif.append({std::shared_ptr<QTemporaryFile>(tempImageFile8), pageSize, 150, rotation}); 0096 rotation += 90; 0097 if (rotation >= 360) { 0098 rotation = 0; 0099 } 0100 } 0101 for (int i = 0; i < 5; i++) { 0102 QTemporaryFile *tempImageFile9 = new QTemporaryFile(); 0103 tempImageFile9->open(); 0104 imageOCRSerifFlipped.save(tempImageFile9, "PNG"); 0105 tempImageFile9->close(); 0106 testDocumentOCRSerif.append({std::shared_ptr<QTemporaryFile>(tempImageFile9), pageSize, 150, rotation}); 0107 rotation += 90; 0108 if (rotation >= 360) { 0109 rotation = 0; 0110 } 0111 } 0112 QSizeF pageSizeMM = pageSize.size(QPageSize::Millimeter); 0113 QPageSize pageSizeLandscape = QPageSize(QSizeF(pageSizeMM.height(), pageSizeMM.width()), QPageSize::Millimeter); 0114 QTemporaryFile *tempImageFileRight = new QTemporaryFile(); 0115 tempImageFileRight->open(); 0116 imageOCRSerifRight.save(tempImageFileRight, "PNG"); 0117 tempImageFileRight->close(); 0118 testDocumentOCRSerif.append({std::shared_ptr<QTemporaryFile>(tempImageFileRight), pageSizeLandscape, 150, 90}); 0119 QTemporaryFile *tempImageFileLeft = new QTemporaryFile(); 0120 tempImageFileLeft->open(); 0121 imageOCRSerifLeft.save(tempImageFileLeft, "PNG"); 0122 tempImageFileLeft->close(); 0123 testDocumentOCRSerif.append({std::shared_ptr<QTemporaryFile>(tempImageFileLeft), pageSizeLandscape, 150, 270}); 0124 0125 QImage imageOCRSans(QFINDTESTDATA("images/testOCRSans150.jpg")); 0126 rotation = 0; 0127 for (int i = 0; i < 5; i++) { 0128 QTemporaryFile *tempImageFile10 = new QTemporaryFile(); 0129 tempImageFile10->open(); 0130 imageOCRSans.save(tempImageFile10, "PNG"); 0131 tempImageFile10->close(); 0132 testDocumentOCRSans.append({std::shared_ptr<QTemporaryFile>(tempImageFile10), pageSize, 150, rotation}); 0133 rotation += 90; 0134 if (rotation >= 360) { 0135 rotation = 0; 0136 } 0137 } 0138 } 0139 0140 void DocumentSaverTest::testPDFWriter() 0141 { 0142 DocumentSaver tempSaver; 0143 QSignalSpy spy(&tempSaver, &DocumentSaver::fileSaved); 0144 0145 tempSaver.saveDocument(QUrl::fromLocalFile(QStringLiteral("temp.pdf")), testDocument, SkanpageUtils::EntireDocument, QString()); 0146 spy.wait(); 0147 } 0148 0149 void DocumentSaverTest::testPDFOCRWriter() 0150 { 0151 DocumentSaver tempSaver; 0152 OCREngine ocrEngine; 0153 ocrEngine.setColor(Qt::red); 0154 tempSaver.setOCREngine(&ocrEngine); 0155 QSignalSpy spy(&tempSaver, &DocumentSaver::fileSaved); 0156 tempSaver.saveDocument(QUrl::fromLocalFile(QStringLiteral("tempOCRSerif.pdf")), testDocumentOCRSerif, SkanpageUtils::OCRDocument, QString()); 0157 spy.wait(); 0158 0159 tempSaver.saveDocument(QUrl::fromLocalFile(QStringLiteral("tempOCRSans.pdf")), testDocumentOCRSans, SkanpageUtils::OCRDocument, QString()); 0160 spy.wait(); 0161 } 0162 0163 QTEST_MAIN(DocumentSaverTest) 0164 0165 #include "documentSaverTest.moc"