File indexing completed on 2024-05-12 05:17:32

0001 /*
0002   SPDX-FileCopyrightText: 2017 Volker Krause <vkrause@kde.org>
0003 
0004    SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #include <KItinerary/ExtractorDocumentNode>
0008 #include <KItinerary/ExtractorDocumentProcessor>
0009 #include <KItinerary/ExtractorEngine>
0010 #include <KItinerary/ExtractorResult>
0011 
0012 #include <QDebug>
0013 #include <QDir>
0014 #include <QFile>
0015 #include <QJsonDocument>
0016 #include <QObject>
0017 #include <QTest>
0018 
0019 using namespace KItinerary;
0020 
0021 class StructuredDataExtractorTest : public QObject
0022 {
0023     Q_OBJECT
0024 private Q_SLOTS:
0025     void testExtract_data()
0026     {
0027         QTest::addColumn<QString>("inputFile");
0028         QTest::addColumn<QString>("jsonFile");
0029 
0030         QDir dir(QStringLiteral(SOURCE_DIR "/structureddata"));
0031         const auto lst = dir.entryList(QStringList(QStringLiteral("*.html")), QDir::Files | QDir::Readable | QDir::NoSymLinks);
0032         for (const auto &file : lst) {
0033             const QString refFile = dir.path() + QLatin1Char('/') + file.left(file.size() - 5) + QStringLiteral(".json");
0034             if (!QFile::exists(refFile)) {
0035                 qDebug() << "reference file" << refFile << "does not exist, skipping test file" << file;
0036                 continue;
0037             }
0038             QTest::newRow(file.toLatin1().constData()) << QString(dir.path() + QLatin1Char('/') +  file) << refFile;
0039         }
0040     }
0041 
0042     void testExtract()
0043     {
0044         QFETCH(QString, inputFile);
0045         QFETCH(QString, jsonFile);
0046 
0047         QFile f(inputFile);
0048         QVERIFY(f.open(QFile::ReadOnly));
0049 
0050         ExtractorEngine engine;
0051         engine.setData(f.readAll());
0052         auto node = engine.rootDocumentNode();
0053         node.processor()->preExtract(node, &engine);
0054 
0055         QFile ref(jsonFile);
0056         QVERIFY(ref.open(QFile::ReadOnly));
0057         const auto doc = QJsonDocument::fromJson(ref.readAll());
0058         QVERIFY(doc.isArray());
0059 
0060         auto data = node.result().jsonLdResult();
0061         if (data != doc.array()) {
0062             qDebug().noquote() << QJsonDocument(data).toJson();
0063         }
0064         QCOMPARE(data, doc.array());
0065     }
0066 };
0067 
0068 QTEST_APPLESS_MAIN(StructuredDataExtractorTest)
0069 
0070 #include "structureddataextractortest.moc"