File indexing completed on 2024-04-14 04:36:19

0001 /*
0002     SPDX-FileCopyrightText: 2019-2021 Volker Krause <vkrause@kde.org>
0003     SPDX-License-Identifier: LGPL-2.0-or-later
0004 */
0005 
0006 #ifndef TESTHELPERS_H
0007 #define TESTHELPERS_H
0008 
0009 #include <QFile>
0010 #include <QJsonDocument>
0011 #include <QProcess>
0012 #include <QTest>
0013 
0014 namespace Test {
0015     QByteArray readFile(const QString &fn)
0016     {
0017         QFile f(fn);
0018         f.open(QFile::ReadOnly | QFile::Text);
0019         return f.readAll();
0020     }
0021 
0022     template <typename T>
0023     inline bool compareJson(const QString &refFile, const T &output, const T &ref)
0024     {
0025         if (output != ref) {
0026             QFile failFile(refFile + QLatin1String(".fail"));
0027             failFile.open(QFile::WriteOnly);
0028             failFile.write(QJsonDocument(output).toJson());
0029             failFile.close();
0030 
0031             QProcess proc;
0032             proc.setProcessChannelMode(QProcess::ForwardedChannels);
0033             proc.start(QStringLiteral("diff"), {QStringLiteral("-u"), refFile, failFile.fileName()});
0034             if (!proc.waitForFinished()) {
0035                 // e.g. Windows CI not having diff
0036                 qDebug() << "Actual:";
0037                 qDebug().noquote() << output;
0038                 qDebug() << "Expected:";
0039                 qDebug().noquote() << ref;
0040             }
0041             return false;
0042         }
0043         return true;
0044     }
0045 }
0046 
0047 #endif