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"