File indexing completed on 2024-04-14 14:27:03

0001 /*
0002  * This file is part of KQuickCharts
0003  * SPDX-FileCopyrightText: 2019 Arjen Hiemstra <ahiemstra@heimr.nl>
0004  *
0005  * SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
0006  */
0007 
0008 #include <QTest>
0009 
0010 #include "datasource/ArraySource.h"
0011 #include "datasource/MapProxySource.h"
0012 
0013 #define qs QStringLiteral
0014 
0015 class MapProxySourceTest : public QObject
0016 {
0017     Q_OBJECT
0018 
0019 private Q_SLOTS:
0020     void testCreate()
0021     {
0022         // Basic creation should create an empty source.
0023         auto source = new MapProxySource{};
0024 
0025         QCOMPARE(source->itemCount(), 0);
0026         QCOMPARE(source->item(0), QVariant{});
0027         QCOMPARE(source->minimum(), QVariant{});
0028         QCOMPARE(source->maximum(), QVariant{});
0029         QCOMPARE(source->source(), nullptr);
0030     }
0031 
0032     void testWithArray_data()
0033     {
0034         QTest::addColumn<QVariantList>("array");
0035         QTest::addColumn<QVariantMap>("map");
0036         QTest::addColumn<QVariantList>("expected");
0037         QTest::addColumn<QVariant>("minimum");
0038         QTest::addColumn<QVariant>("maximum");
0039 
0040         // clang-format off
0041         QTest::newRow("basic mapping")
0042             << QVariantList{qs("one"), qs("two"), qs("three"), qs("four")}
0043             << QVariantMap{{qs("one"), 4}, {qs("two"), 3}, {qs("three"), 2}, {qs("four"), 1}}
0044             << QVariantList{4, 3, 2, 1}
0045             << QVariant{1}
0046             << QVariant{4};
0047 
0048         QTest::newRow("colors")
0049             << QVariantList{qs("red"), qs("green"), qs("blue"), qs("red"), qs("green"), qs("blue")}
0050             << QVariantMap{{qs("red"), QColor{Qt::red}.rgba()}, {qs("green"), QColor{Qt::green}.rgba()}, {qs("blue"), QColor{Qt::blue}.rgba()}}
0051             << QVariantList{QColor{Qt::red}.rgba(), QColor{Qt::green}.rgba(), QColor{Qt::blue}.rgba(), QColor{Qt::red}.rgba(), QColor{Qt::green}.rgba(), QColor{Qt::blue}.rgba()}
0052             << QVariant{QColor{Qt::blue}.rgba()}
0053             << QVariant{QColor{Qt::red}.rgba()};
0054         // clang-format on
0055     }
0056 
0057     void testWithArray()
0058     {
0059         auto arraySource = new ArraySource{};
0060         QFETCH(QVariantList, array);
0061         arraySource->setArray(array);
0062 
0063         auto mapSource = new MapProxySource{};
0064         mapSource->setSource(arraySource);
0065 
0066         QFETCH(QVariantMap, map);
0067         mapSource->setMap(map);
0068 
0069         QFETCH(QVariantList, expected);
0070         QCOMPARE(mapSource->itemCount(), expected.size());
0071 
0072         for (int i = 0; i < mapSource->itemCount(); ++i) {
0073             QCOMPARE(mapSource->item(i), expected.at(i));
0074         }
0075 
0076         QCOMPARE(mapSource->item(expected.size()), QVariant{});
0077 
0078         QFETCH(QVariant, minimum);
0079         QCOMPARE(mapSource->minimum(), minimum);
0080 
0081         QFETCH(QVariant, maximum);
0082         QCOMPARE(mapSource->maximum(), maximum);
0083     }
0084 };
0085 
0086 QTEST_GUILESS_MAIN(MapProxySourceTest)
0087 
0088 #include "MapProxySourceTest.moc"