// Copyright (C) 2024 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only #include #include class tst_xyseries : public QObject { Q_OBJECT private slots: void initTestCase(); void cleanupTestCase(); void init(); void cleanup(); void initialProperties(); void initializeProperties(); void selectDeselect(); void appendInsertRemove(); void replaceAtClear(); void find(); void take(); private: // QXYSeries is uncreatable, so testing is done through QScatterSeries QScatterSeries *m_series; }; void tst_xyseries::initTestCase() {} void tst_xyseries::cleanupTestCase() {} void tst_xyseries::init() { m_series = new QScatterSeries(); } void tst_xyseries::cleanup() { delete m_series; } void tst_xyseries::initialProperties() { QVERIFY(m_series); // Properties from QXYSeries QCOMPARE(m_series->color(), QColor(Qt::transparent)); QCOMPARE(m_series->selectedColor(), QColor(Qt::transparent)); } void tst_xyseries::initializeProperties() { QVERIFY(m_series); m_series->setColor("#ff0000"); m_series->setSelectedColor("#0000ff"); QCOMPARE(m_series->color(), "#ff0000"); QCOMPARE(m_series->selectedColor(), "#0000ff"); } void tst_xyseries::selectDeselect() { QVERIFY(m_series); QList points = {{0, 0}, {1, 1}, {2, 2}}; QList allselected = {0, 1, 2}; m_series->append(points); QCOMPARE(m_series->selectedPoints(), {}); m_series->selectAllPoints(); QCOMPARE(m_series->selectedPoints().size(), allselected.size()); for (int i = 0; i < allselected.size(); i++) { QCOMPARE(m_series->selectedPoints().contains(allselected[i]), true); } m_series->deselectAllPoints(); QCOMPARE(m_series->selectedPoints(), {}); m_series->selectPoints(allselected); QCOMPARE(m_series->selectedPoints().size(), allselected.size()); for (int i = 0; i < allselected.size(); i++) { QCOMPARE(m_series->selectedPoints().contains(allselected[i]), true); } m_series->toggleSelection(allselected); QCOMPARE(m_series->selectedPoints(), {}); } void tst_xyseries::appendInsertRemove() { QVERIFY(m_series); QSignalSpy updateSpy(m_series, &QXYSeries::update); QSignalSpy pointAddedSpy(m_series, &QXYSeries::pointAdded); QSignalSpy pointsAddedSpy(m_series, &QXYSeries::pointsAdded); QSignalSpy pointRemovedSpy(m_series, &QXYSeries::pointRemoved); QSignalSpy pointsRemovedSpy(m_series, &QXYSeries::pointsRemoved); QList points = {{0, 0}, {1, 1}, {2, 2}}; QList morepoints = {{3, 3}, {4, 4}, {5, 5}}; QList allpoints = {{0, 0}, {1, 1}, {2, 2}, {3, 3}, {4, 4}, {5, 5}}; QList mixedpoints = {{0, 0}, {3, 3}, {1, 1}, {4, 4}, {2, 2}, {5, 5}}; QCOMPARE(updateSpy.count(), 0); // Append 3 for (int i = 0; i < points.count(); ++i) m_series->append(points[i]); QCOMPARE(updateSpy.count(), 3); QCOMPARE(m_series->points(), points); QCOMPARE(pointAddedSpy.size(), 3); // Append 3 more m_series->append(morepoints); QCOMPARE(updateSpy.count(), 4); QCOMPARE(m_series->points(), allpoints); QCOMPARE(pointsAddedSpy.size(), 1); // Remove the first 3 one by one for (int i = 2; i >= 0; --i) m_series->remove(i); QCOMPARE(updateSpy.count(), 7); QCOMPARE(m_series->points(), morepoints); QCOMPARE(pointRemovedSpy.size(), 3); // Insert them in between m_series->insert(0, points[0]); m_series->insert(2, points[1]); m_series->insert(4, points[2]); QCOMPARE(updateSpy.count(), 10); QCOMPARE(m_series->points(), mixedpoints); QCOMPARE(pointAddedSpy.size(), 6); // Remove first 3 m_series->removeMultiple(0, 3); QCOMPARE(updateSpy.count(), 11); QCOMPARE(m_series->count(), 3); QCOMPARE(pointsRemovedSpy.size(), 1); // Append 3 by qreals for (int i = 10; i < 13; ++i) m_series->append(i, i); QCOMPARE(updateSpy.count(), 14); QCOMPARE(m_series->count(), 6); QCOMPARE(pointAddedSpy.size(), 9); // Remove 3 by qreals for (int i = 10; i < 13; ++i) m_series->remove(i, i); QCOMPARE(updateSpy.count(), 17); QCOMPARE(m_series->count(), 3); QCOMPARE(pointRemovedSpy.size(), 6); } void tst_xyseries::replaceAtClear() { QVERIFY(m_series); QList points = {{0, 0}, {1, 1}, {2, 2}}; QList morepoints = {{3, 3}, {4, 4}, {5, 5}}; m_series->append(points); for (int i = 0; i < m_series->count(); ++i) QCOMPARE(m_series->at(i), points[i]); for (int i = 0; i < m_series->count(); ++i) m_series->replace(i, morepoints[i]); for (int i = 0; i < m_series->count(); ++i) QCOMPARE(m_series->at(i), morepoints[i]); m_series->clear(); QCOMPARE(m_series->count(), 0); } void tst_xyseries::find() { QVERIFY(m_series); QList points = {{1, 4}, {9, 2}, {3, 7}, {9, 2}, {8, 8}}; m_series->append(points); auto sPoints = m_series->points(); QCOMPARE(sPoints, points); auto item1 = m_series->find({9, 2}); auto item2 = m_series->find({1, 4}); auto item3 = m_series->find({8, 8}); auto item4 = m_series->find({300, 8}); QCOMPARE(item1, 1); QCOMPARE(item2, 0); QCOMPARE(item3, 4); QCOMPARE(item4, -1); } void tst_xyseries::take() { QVERIFY(m_series); QList points = {{1, 4}, {9, 2}, {3, 7}, {9, 2}, {8, 8}}; m_series->append(points); QCOMPARE(m_series->count(), 5); QVERIFY(!m_series->take({100, 100})); QCOMPARE(m_series->count(), 5); QVERIFY(m_series->take({3, 7})); QCOMPARE(m_series->count(), 4); } QTEST_MAIN(tst_xyseries) #include "tst_xyseries.moc"