File indexing completed on 2024-04-14 15:37:31

0001 /*
0002  * SPDX-FileCopyrightText: 2014 Daniel Vratil <dvratil@redhat.com>
0003  *
0004  * SPDX-License-Identifier: LGPL-2.1-or-later
0005  *
0006  */
0007 
0008 #include <QObject>
0009 #include <QtTest>
0010 #include <cstdint>
0011 #include <utility>
0012 
0013 #include "../src/configserializer_p.h"
0014 #include "../src/mode.h"
0015 #include "../src/output.h"
0016 #include "../src/screen.h"
0017 #include "../src/types.h"
0018 
0019 class TestConfigSerializer : public QObject
0020 {
0021     Q_OBJECT
0022 
0023 public:
0024     TestConfigSerializer()
0025     {
0026     }
0027 
0028 private Q_SLOTS:
0029     void testSerializePoint()
0030     {
0031         const QPoint point(42, 24);
0032 
0033         const QJsonObject obj = KScreen::ConfigSerializer::serializePoint(point);
0034         QVERIFY(!obj.isEmpty());
0035 
0036         QCOMPARE(obj[QLatin1String("x")].toInt(), point.x());
0037         QCOMPARE(obj[QLatin1String("y")].toInt(), point.y());
0038     }
0039 
0040     void testSerializeSize()
0041     {
0042         const QSize size(800, 600);
0043 
0044         const QJsonObject obj = KScreen::ConfigSerializer::serializeSize(size);
0045         QVERIFY(!obj.isEmpty());
0046 
0047         QCOMPARE(obj[QLatin1String("width")].toInt(), size.width());
0048         QCOMPARE(obj[QLatin1String("height")].toInt(), size.height());
0049     }
0050 
0051     void testSerializeList()
0052     {
0053         QStringList stringList;
0054         stringList << QStringLiteral("Item 1") << QStringLiteral("Item 2") << QStringLiteral("Item 3") << QStringLiteral("Item 4");
0055 
0056         QJsonArray arr = KScreen::ConfigSerializer::serializeList<QString>(stringList);
0057         QCOMPARE(arr.size(), stringList.size());
0058 
0059         for (int i = 0; i < arr.size(); ++i) {
0060             QCOMPARE(arr.at(i).toString(), stringList.at(i));
0061         }
0062 
0063         QList<int> intList;
0064         intList << 4 << 3 << 2 << 1;
0065 
0066         arr = KScreen::ConfigSerializer::serializeList<int>(intList);
0067         QCOMPARE(arr.size(), intList.size());
0068 
0069         for (int i = 0; i < arr.size(); ++i) {
0070             QCOMPARE(arr.at(i).toInt(), intList[i]);
0071         }
0072     }
0073 
0074     void testSerializeScreen()
0075     {
0076         KScreen::ScreenPtr screen(new KScreen::Screen);
0077         screen->setId(12);
0078         screen->setMinSize(QSize(360, 360));
0079         screen->setMaxSize(QSize(8192, 8192));
0080         screen->setCurrentSize(QSize(3600, 1280));
0081         screen->setMaxActiveOutputsCount(3);
0082 
0083         const QJsonObject obj = KScreen::ConfigSerializer::serializeScreen(screen);
0084         QVERIFY(!obj.isEmpty());
0085 
0086         QCOMPARE(obj[QLatin1String("id")].toInt(), screen->id());
0087         QCOMPARE(obj[QLatin1String("maxActiveOutputsCount")].toInt(), screen->maxActiveOutputsCount());
0088         const QJsonObject minSize = obj[QLatin1String("minSize")].toObject();
0089         QCOMPARE(minSize[QLatin1String("width")].toInt(), screen->minSize().width());
0090         QCOMPARE(minSize[QLatin1String("height")].toInt(), screen->minSize().height());
0091         const QJsonObject maxSize = obj[QLatin1String("maxSize")].toObject();
0092         QCOMPARE(maxSize[QLatin1String("width")].toInt(), screen->maxSize().width());
0093         QCOMPARE(maxSize[QLatin1String("height")].toInt(), screen->maxSize().height());
0094         const QJsonObject currSize = obj[QLatin1String("currentSize")].toObject();
0095         QCOMPARE(currSize[QLatin1String("width")].toInt(), screen->currentSize().width());
0096         QCOMPARE(currSize[QLatin1String("height")].toInt(), screen->currentSize().height());
0097     }
0098 
0099     void testSerializeMode()
0100     {
0101         KScreen::ModePtr mode(new KScreen::Mode);
0102         mode->setId(QStringLiteral("755"));
0103         mode->setName(QStringLiteral("1280x1024"));
0104         mode->setRefreshRate(50.666);
0105         mode->setSize(QSize(1280, 1024));
0106 
0107         const QJsonObject obj = KScreen::ConfigSerializer::serializeMode(mode);
0108         QVERIFY(!obj.isEmpty());
0109 
0110         QCOMPARE(obj[QLatin1String("id")].toString(), mode->id());
0111         QCOMPARE(obj[QLatin1String("name")].toString(), mode->name());
0112         QCOMPARE((float)obj[QLatin1String("refreshRate")].toDouble(), mode->refreshRate());
0113         const QJsonObject size = obj[QLatin1String("size")].toObject();
0114         QCOMPARE(size[QLatin1String("width")].toInt(), mode->size().width());
0115         QCOMPARE(size[QLatin1String("height")].toInt(), mode->size().height());
0116     }
0117 
0118     void testSerializeOutput()
0119     {
0120         KScreen::ModeList modes;
0121         KScreen::ModePtr mode(new KScreen::Mode);
0122         mode->setId(QStringLiteral("1"));
0123         mode->setName(QStringLiteral("800x600"));
0124         mode->setSize(QSize(800, 600));
0125         mode->setRefreshRate(50.4);
0126         modes.insert(mode->id(), mode);
0127 
0128         KScreen::OutputPtr output(new KScreen::Output);
0129         output->setId(60);
0130         output->setName(QStringLiteral("LVDS-0"));
0131         output->setType(KScreen::Output::Panel);
0132         output->setIcon(QString());
0133         output->setModes(modes);
0134         output->setPos(QPoint(1280, 0));
0135         output->setSize(mode->size());
0136         output->setRotation(KScreen::Output::None);
0137         output->setCurrentModeId(QStringLiteral("1"));
0138         output->setPreferredModes(QStringList() << QStringLiteral("1"));
0139         output->setConnected(true);
0140         output->setEnabled(true);
0141         output->setPriority(1);
0142         output->setClones(QList<int>() << 50 << 60);
0143         output->setSizeMm(QSize(310, 250));
0144 
0145         const QJsonObject obj = KScreen::ConfigSerializer::serializeOutput(output);
0146         QVERIFY(!obj.isEmpty());
0147 
0148         QCOMPARE(obj[QLatin1String("id")].toInt(), output->id());
0149         QCOMPARE(obj[QLatin1String("name")].toString(), output->name());
0150         QCOMPARE(static_cast<KScreen::Output::Type>(obj[QLatin1String("type")].toInt()), output->type());
0151         QCOMPARE(obj[QLatin1String("icon")].toString(), output->icon());
0152         const QJsonArray arr = obj[QLatin1String("modes")].toArray();
0153         QCOMPARE(arr.size(), output->modes().count());
0154 
0155         QJsonObject pos = obj[QLatin1String("pos")].toObject();
0156         QCOMPARE(pos[QLatin1String("x")].toInt(), output->pos().x());
0157         QCOMPARE(pos[QLatin1String("y")].toInt(), output->pos().y());
0158         const QJsonObject size = obj[QLatin1String("size")].toObject();
0159         QCOMPARE(size[QLatin1String("width")].toInt(), output->size().width());
0160         QCOMPARE(size[QLatin1String("height")].toInt(), output->size().height());
0161 
0162         QCOMPARE(static_cast<KScreen::Output::Rotation>(obj[QLatin1String("rotation")].toInt()), output->rotation());
0163         QCOMPARE(obj[QLatin1String("currentModeId")].toString(), output->currentModeId());
0164         QCOMPARE(obj[QLatin1String("connected")].toBool(), output->isConnected());
0165         QCOMPARE(obj[QLatin1String("enabled")].toBool(), output->isEnabled());
0166         QCOMPARE(obj[QLatin1String("priority")].toInt(), output->priority());
0167         const QJsonArray clones = obj[QLatin1String("clones")].toArray();
0168         QCOMPARE(clones.size(), output->clones().count());
0169         for (int i = 0; i < clones.size(); ++i) {
0170             QCOMPARE(clones[i].toInt(), output->clones()[i]);
0171         }
0172         const QJsonObject sizeMm = obj[QLatin1String("sizeMM")].toObject();
0173         QCOMPARE(sizeMm[QLatin1String("width")].toInt(), output->sizeMm().width());
0174         QCOMPARE(sizeMm[QLatin1String("height")].toInt(), output->sizeMm().height());
0175     }
0176 };
0177 
0178 QTEST_MAIN(TestConfigSerializer)
0179 
0180 #include "testconfigserializer.moc"