File indexing completed on 2024-04-28 13:26:06
0001 /* 0002 * SPDX-FileCopyrightText: 2018 Frederik Gladhorn <gladhorn@kde.org> 0003 * 0004 * SPDX-License-Identifier: LGPL-2.1-or-later 0005 */ 0006 0007 #include <QCoreApplication> 0008 #include <QObject> 0009 #include <QtTest> 0010 0011 #include "../src/edid.h" 0012 0013 using namespace KScreen; 0014 0015 class TestEdid : public QObject 0016 { 0017 Q_OBJECT 0018 0019 private Q_SLOTS: 0020 void testInvalid(); 0021 void testEdidParser_data(); 0022 void testEdidParser(); 0023 }; 0024 0025 void TestEdid::testInvalid() 0026 { 0027 QScopedPointer<Edid> e(new Edid()); 0028 QCOMPARE(e->isValid(), false); 0029 QCOMPARE(e->name(), QString()); 0030 0031 QScopedPointer<Edid> e2(e->clone()); 0032 QCOMPARE(e2->isValid(), false); 0033 QCOMPARE(e2->name(), QString()); 0034 0035 QScopedPointer<Edid> e3(new Edid("some random data")); 0036 QCOMPARE(e3->isValid(), false); 0037 } 0038 0039 void TestEdid::testEdidParser_data() 0040 { 0041 // The raw edid data 0042 QTest::addColumn<QByteArray>("raw_edid"); 0043 QTest::addColumn<QString>("deviceId"); 0044 QTest::addColumn<QString>("name"); 0045 QTest::addColumn<QString>("pnpId"); 0046 // List of potential vendor names, this depends on the availablility 0047 // of pnp.ids, otherwise it will be a three letter abbreviation. 0048 QTest::addColumn<QStringList>("vendor"); 0049 QTest::addColumn<QString>("serial"); 0050 QTest::addColumn<QString>("eisaId"); 0051 QTest::addColumn<QString>("hash"); 0052 QTest::addColumn<uint>("width"); 0053 QTest::addColumn<uint>("height"); 0054 QTest::addColumn<qreal>("gamma"); 0055 0056 QTest::addColumn<QQuaternion>("red"); 0057 QTest::addColumn<QQuaternion>("green"); 0058 QTest::addColumn<QQuaternion>("blue"); 0059 QTest::addColumn<QQuaternion>("white"); 0060 // clang-format off 0061 QTest::addRow("cor") 0062 << QByteArray::fromBase64("AP///////wAN8iw0AAAAABwVAQOAHRB4CoPVlFdSjCccUFQAAAABAQEBAQEBAQEBAQEBAQEBEhtWWlAAGTAwIDYAJaQQAAAYEhtWWlAAGTAwIDYAJaQQAAAYAAAA/gBBVU8KICAgICAgICAgAAAA/gBCMTMzWFcwMyBWNCAKAIc=") 0063 << QStringLiteral("xrandr-Corollary Inc") 0064 << QStringLiteral("") 0065 << QStringLiteral("COR") 0066 << QStringList({QStringLiteral("COR"), QStringLiteral("Corollary Inc")}) 0067 << QStringLiteral("") 0068 << QStringLiteral("B133XW03 V4") 0069 << QStringLiteral("82266089b3f9da3a8c48de1ec81b09e1") 0070 << 29U << 16U << 2.2 0071 << QQuaternion(1, QVector3D(0.580078, 0.339844, 0)) 0072 << QQuaternion(1, QVector3D(0.320313, 0.549805, 0)) 0073 << QQuaternion(1, QVector3D(0.155273, 0.110352, 0)) 0074 << QQuaternion(1, QVector3D(0.313477, 0.329102, 0)); 0075 0076 QTest::addRow("dell") 0077 << QByteArray::fromBase64("AP///////wAQrBbwTExLQQ4WAQOANCB46h7Frk80sSYOUFSlSwCBgKlA0QBxTwEBAQEBAQEBKDyAoHCwI0AwIDYABkQhAAAaAAAA/wBGNTI1TTI0NUFLTEwKAAAA/ABERUxMIFUyNDEwCiAgAAAA/QA4TB5REQAKICAgICAgAToCAynxUJAFBAMCBxYBHxITFCAVEQYjCQcHZwMMABAAOC2DAQAA4wUDAQI6gBhxOC1AWCxFAAZEIQAAHgEdgBhxHBYgWCwlAAZEIQAAngEdAHJR0B4gbihVAAZEIQAAHowK0Iog4C0QED6WAAZEIQAAGAAAAAAAAAAAAAAAAAAAPg==") 0078 << QStringLiteral("xrandr-Dell Inc.-DELL U2410-F525M245AKLL") 0079 << QStringLiteral("DELL U2410") 0080 << QStringLiteral("DEL") 0081 << QStringList({QStringLiteral("DEL"), QStringLiteral("Dell Inc.")}) 0082 << QStringLiteral("F525M245AKLL") 0083 << QStringLiteral("") 0084 << QStringLiteral("be55eeb5fcc1e775f321c1ae3aa02ef0") 0085 << 52U << 32U << 2.2 0086 << QQuaternion(1, QVector3D(0.679688, 0.308594, 0)) 0087 << QQuaternion(1, QVector3D(0.206055, 0.693359, 0)) 0088 << QQuaternion(1, QVector3D(0.151367, 0.0546875, 0)) 0089 << QQuaternion(1, QVector3D(0.313477, 0.329102, 0)); 0090 0091 QTest::addRow("samsung") << QByteArray::fromBase64("AP///////wBMLcMFMzJGRQkUAQMOMx14Ku6Ro1RMmSYPUFQjCACBAIFAgYCVAKlAswABAQEBAjqAGHE4LUBYLEUA/h8RAAAeAAAA/QA4PB5REQAKICAgICAgAAAA/ABTeW5jTWFzdGVyCiAgAAAA/wBIOU1aMzAyMTk2CiAgAC4=") 0092 << QStringLiteral("xrandr-Samsung Electric Company-SyncMaster-H9MZ302196") 0093 << QStringLiteral("SyncMaster") 0094 << QStringLiteral("SAM") 0095 << QStringList({QStringLiteral("SAM"), QStringLiteral("Samsung Electric Company")}) 0096 << QStringLiteral("H9MZ302196") 0097 << QStringLiteral("") 0098 << QStringLiteral("9384061b2b87ad193f841e07d60e9e1a") 0099 << 51U << 29U << 2.2 0100 << QQuaternion(1, QVector3D(0.639648, 0.328125, 0)) 0101 << QQuaternion(1, QVector3D(0.299805, 0.599609, 0)) 0102 << QQuaternion(1, QVector3D(0.150391, 0.0595703, 0)) 0103 << QQuaternion(1, QVector3D(0.3125, 0.329102, 0)); 0104 0105 QTest::newRow("sharp") 0106 << QByteArray::fromBase64("AP///////wBNEEoUAAAAAB4ZAQSlHRF4Dt5Qo1RMmSYPUFQAAAABAQEBAQEBAQEBAQEBAQEBzZGAoMAINHAwIDUAJqUQAAAYpHSAoMAINHAwIDUAJqUQAAAYAAAA/gBSWE40OYFMUTEzM1oxAAAAAAACQQMoABIAAAsBCiAgAMw=") 0107 << QStringLiteral("xrandr-Sharp Corporation") 0108 << QString() // unsure why, this screen reports no name 0109 << QStringLiteral("SHP") 0110 << QStringList({QStringLiteral("SHP"), QStringLiteral("Sharp Corporation")}) 0111 << QStringLiteral("") 0112 << QStringLiteral("RXN49-LQ133Z1") 0113 << QStringLiteral("3627c3534e4c82871967b57237bf5b83") 0114 << 29U << 17U << 2.2 0115 << QQuaternion(1, QVector3D(0.639648, 0.328125, 0)) 0116 << QQuaternion(1, QVector3D(0.299805, 0.599609, 0)) 0117 << QQuaternion(1, QVector3D(0.149414, 0.0595703, 0)) 0118 << QQuaternion(1, QVector3D(0.3125, 0.328125, 0)); 0119 // clang-format on 0120 } 0121 0122 void TestEdid::testEdidParser() 0123 { 0124 QFETCH(QByteArray, raw_edid); 0125 QFETCH(QString, deviceId); 0126 QFETCH(QString, name); 0127 QFETCH(QString, pnpId); 0128 QFETCH(QStringList, vendor); 0129 QFETCH(QString, serial); 0130 QFETCH(QString, eisaId); 0131 QFETCH(QString, hash); 0132 QFETCH(uint, width); 0133 QFETCH(uint, height); 0134 QFETCH(qreal, gamma); 0135 QFETCH(QQuaternion, red); 0136 QFETCH(QQuaternion, green); 0137 QFETCH(QQuaternion, blue); 0138 QFETCH(QQuaternion, white); 0139 0140 QScopedPointer<Edid> e(new Edid(raw_edid)); 0141 QCOMPARE(e->isValid(), true); 0142 0143 // FIXME: we hard-code all deviceIds as xrandr-something, that makes no sense 0144 QCOMPARE(e->deviceId(), deviceId); 0145 QCOMPARE(e->name(), name); 0146 QCOMPARE(e->pnpId(), pnpId); 0147 // FIXME: needs to return at least the short ID 0148 // QVERIFY2(vendor.contains(e->vendor()), qPrintable(QString::fromLatin1("%1 not in list").arg(e->vendor()))); 0149 QCOMPARE(e->serial(), serial); 0150 QCOMPARE(e->eisaId(), eisaId); 0151 QCOMPARE(e->hash(), hash); 0152 QCOMPARE(e->width(), width); 0153 QCOMPARE(e->height(), height); 0154 QCOMPARE(e->gamma(), gamma); 0155 0156 QVERIFY(qFuzzyCompare(e->red(), red)); 0157 QVERIFY(qFuzzyCompare(e->green(), green)); 0158 QVERIFY(qFuzzyCompare(e->blue(), blue)); 0159 QVERIFY(qFuzzyCompare(e->white(), white)); 0160 } 0161 0162 QTEST_GUILESS_MAIN(TestEdid) 0163 0164 #include "testedid.moc"