diff options
author | Titta Heikkala <titta.heikkala@theqtcompany.com> | 2014-11-12 10:23:01 +0200 |
---|---|---|
committer | Titta Heikkala <titta.heikkala@theqtcompany.com> | 2014-11-12 13:13:16 +0200 |
commit | f78be8da2422a758e0f50d3ca0cced53f44d0f12 (patch) | |
tree | 91dae2e5066bf548817c32f06c26df425a58f82f /tests/auto | |
parent | 6c4e7f2cd60f47ef5935ed9f21d19bb94db5f048 (diff) |
Add pressed, released and doubleClicked signals
Added pressed, released and doubleClicked signals for all series. The
signals are also added to QPieSlice and QBoxPlotSet.
Change-Id: If94948be439a3b53ed48c02d0092091e836222a4
Task-number: QTRD-2384
Reviewed-by: Miikka Heikkinen <miikka.heikkinen@theqtcompany.com>
Diffstat (limited to 'tests/auto')
-rw-r--r-- | tests/auto/qbarseries/tst_qbarseries.cpp | 407 | ||||
-rw-r--r-- | tests/auto/qhorizontalbarseries/tst_qhorizontalbarseries.cpp | 406 | ||||
-rw-r--r-- | tests/auto/qhorizontalpercentbarseries/tst_qhorizontalpercentbarseries.cpp | 408 | ||||
-rw-r--r-- | tests/auto/qhorizontalstackedbarseries/tst_qhorizontalstackedbarseries.cpp | 421 | ||||
-rw-r--r-- | tests/auto/qlineseries/tst_qlineseries.cpp | 96 | ||||
-rw-r--r-- | tests/auto/qpercentbarseries/tst_qpercentbarseries.cpp | 413 | ||||
-rw-r--r-- | tests/auto/qpieseries/tst_qpieseries.cpp | 136 | ||||
-rw-r--r-- | tests/auto/qpieslice/tst_qpieslice.cpp | 111 | ||||
-rw-r--r-- | tests/auto/qscatterseries/tst_qscatterseries.cpp | 96 | ||||
-rw-r--r-- | tests/auto/qsplineseries/tst_qsplineseries.cpp | 95 | ||||
-rw-r--r-- | tests/auto/qstackedbarseries/tst_qstackedbarseries.cpp | 421 |
11 files changed, 3010 insertions, 0 deletions
diff --git a/tests/auto/qbarseries/tst_qbarseries.cpp b/tests/auto/qbarseries/tst_qbarseries.cpp index 029a445c..9f318ee2 100644 --- a/tests/auto/qbarseries/tst_qbarseries.cpp +++ b/tests/auto/qbarseries/tst_qbarseries.cpp @@ -69,6 +69,9 @@ private slots: void mousehovered(); void clearWithAnimations(); void destruction(); + void mousePressed(); + void mouseReleased(); + void mouseDoubleClicked(); private: QBarSeries* m_barseries; @@ -926,6 +929,410 @@ void tst_QBarSeries::destruction() QCOMPARE(spy1.count(), 1); } +void tst_QBarSeries::mousePressed() +{ + SKIP_IF_CANNOT_TEST_MOUSE_EVENTS(); + + QBarSeries* series = new QBarSeries(); + + QBarSet* set1 = new QBarSet(QString("set 1")); + *set1 << 10 << 10 << 10; + series->append(set1); + + QBarSet* set2 = new QBarSet(QString("set 2")); + *set2 << 10 << 10 << 10; + series->append(set2); + QList<QBarSet*> barSets = series->barSets(); + + QSignalSpy seriesSpy(series,SIGNAL(pressed(int,QBarSet*))); + QSignalSpy setSpy1(set1, SIGNAL(pressed(int))); + QSignalSpy setSpy2(set2, SIGNAL(pressed(int))); + + QChartView view(new QChart()); + view.resize(400,300); + view.chart()->addSeries(series); + view.show(); + QTest::qWaitForWindowShown(&view); + + // Calculate expected layout for bars + QRectF plotArea = view.chart()->plotArea(); + qreal width = plotArea.width(); + qreal height = plotArea.height(); + qreal rangeY = 10; // From 0 to 10 because of maximum value in set is 10 + qreal rangeX = 3; // 3 values per set + qreal scaleY = (height / rangeY); + qreal scaleX = (width / rangeX); + + qreal setCount = series->count(); + qreal domainMinY = 0; // These come from internal domain used by barseries. + qreal domainMinX = -0.5; // No access to domain from outside, so use hard coded values. + qreal rectWidth = (scaleX / setCount) * series->barWidth(); + + QVector<QRectF> layout; + + // 3 = count of values in set + // Note that rects in this vector will be interleaved (set1 bar0, set2 bar0, set1 bar1, set2 bar1, etc.) + for (int i = 0; i < 3; i++) { + qreal yPos = height + scaleY * domainMinY + plotArea.top(); + for (int set = 0; set < setCount; set++) { + qreal xPos = (i - domainMinX) * scaleX + plotArea.left(); + xPos -= series->count()*rectWidth/2; + xPos += set*rectWidth; + + qreal rectHeight = barSets.at(set)->at(i) * scaleY; + QRectF rect(xPos, yPos - rectHeight, rectWidth, rectHeight); + layout.append(rect); + } + } + +//==================================================================================== +// barset 1, bar 0 + QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, layout.at(0).center().toPoint()); + QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); + + QCOMPARE(seriesSpy.count(), 1); + QCOMPARE(setSpy1.count(), 1); + QCOMPARE(setSpy2.count(), 0); + + QList<QVariant> seriesSpyArg = seriesSpy.takeFirst(); + QCOMPARE(qvariant_cast<QBarSet*>(seriesSpyArg.at(1)), set1); + QVERIFY(seriesSpyArg.at(0).type() == QVariant::Int); + QVERIFY(seriesSpyArg.at(0).toInt() == 0); + + QList<QVariant> setSpyArg = setSpy1.takeFirst(); + QVERIFY(setSpyArg.at(0).type() == QVariant::Int); + QVERIFY(setSpyArg.at(0).toInt() == 0); + +//==================================================================================== +// barset 1, bar 1 + QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, layout.at(2).center().toPoint()); + QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); + + QCOMPARE(seriesSpy.count(), 1); + QCOMPARE(setSpy1.count(), 1); + QCOMPARE(setSpy2.count(), 0); + + seriesSpyArg = seriesSpy.takeFirst(); + QCOMPARE(qvariant_cast<QBarSet*>(seriesSpyArg.at(1)), set1); + QVERIFY(seriesSpyArg.at(0).type() == QVariant::Int); + QVERIFY(seriesSpyArg.at(0).toInt() == 1); + + setSpyArg = setSpy1.takeFirst(); + QVERIFY(setSpyArg.at(0).type() == QVariant::Int); + QVERIFY(setSpyArg.at(0).toInt() == 1); + +//==================================================================================== +// barset 1, bar 2 + QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, layout.at(4).center().toPoint()); + QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); + + QCOMPARE(seriesSpy.count(), 1); + QCOMPARE(setSpy1.count(), 1); + QCOMPARE(setSpy2.count(), 0); + + seriesSpyArg = seriesSpy.takeFirst(); + QCOMPARE(qvariant_cast<QBarSet*>(seriesSpyArg.at(1)), set1); + QVERIFY(seriesSpyArg.at(0).type() == QVariant::Int); + QVERIFY(seriesSpyArg.at(0).toInt() == 2); + + setSpyArg = setSpy1.takeFirst(); + QVERIFY(setSpyArg.at(0).type() == QVariant::Int); + QVERIFY(setSpyArg.at(0).toInt() == 2); + +//==================================================================================== +// barset 2, bar 0 + QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, layout.at(1).center().toPoint()); + QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); + + QCOMPARE(seriesSpy.count(), 1); + QCOMPARE(setSpy1.count(), 0); + QCOMPARE(setSpy2.count(), 1); + + seriesSpyArg = seriesSpy.takeFirst(); + QCOMPARE(qvariant_cast<QBarSet*>(seriesSpyArg.at(1)), set2); + QVERIFY(seriesSpyArg.at(0).type() == QVariant::Int); + QVERIFY(seriesSpyArg.at(0).toInt() == 0); + + setSpyArg = setSpy2.takeFirst(); + QVERIFY(setSpyArg.at(0).type() == QVariant::Int); + QVERIFY(setSpyArg.at(0).toInt() == 0); + +//==================================================================================== +// barset 2, bar 1 + QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, layout.at(3).center().toPoint()); + QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); + + QCOMPARE(seriesSpy.count(), 1); + QCOMPARE(setSpy1.count(), 0); + QCOMPARE(setSpy2.count(), 1); + + seriesSpyArg = seriesSpy.takeFirst(); + QCOMPARE(qvariant_cast<QBarSet*>(seriesSpyArg.at(1)), set2); + QVERIFY(seriesSpyArg.at(0).type() == QVariant::Int); + QVERIFY(seriesSpyArg.at(0).toInt() == 1); + + setSpyArg = setSpy2.takeFirst(); + QVERIFY(setSpyArg.at(0).type() == QVariant::Int); + QVERIFY(setSpyArg.at(0).toInt() == 1); + +//==================================================================================== +// barset 2, bar 2 + QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, layout.at(5).center().toPoint()); + QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); + + QCOMPARE(seriesSpy.count(), 1); + QCOMPARE(setSpy1.count(), 0); + QCOMPARE(setSpy2.count(), 1); + + seriesSpyArg = seriesSpy.takeFirst(); + QCOMPARE(qvariant_cast<QBarSet*>(seriesSpyArg.at(1)), set2); + QVERIFY(seriesSpyArg.at(0).type() == QVariant::Int); + QVERIFY(seriesSpyArg.at(0).toInt() == 2); + + setSpyArg = setSpy2.takeFirst(); + QVERIFY(setSpyArg.at(0).type() == QVariant::Int); + QVERIFY(setSpyArg.at(0).toInt() == 2); +} + +void tst_QBarSeries::mouseReleased() +{ + SKIP_IF_CANNOT_TEST_MOUSE_EVENTS(); + + QBarSeries* series = new QBarSeries(); + + QBarSet* set1 = new QBarSet(QString("set 1")); + *set1 << 10 << 10 << 10; + series->append(set1); + + QBarSet* set2 = new QBarSet(QString("set 2")); + *set2 << 10 << 10 << 10; + series->append(set2); + QList<QBarSet*> barSets = series->barSets(); + + QSignalSpy seriesSpy(series,SIGNAL(released(int,QBarSet*))); + QSignalSpy setSpy1(set1, SIGNAL(released(int))); + QSignalSpy setSpy2(set2, SIGNAL(released(int))); + + QChartView view(new QChart()); + view.resize(400,300); + view.chart()->addSeries(series); + view.show(); + QTest::qWaitForWindowShown(&view); + + // Calculate expected layout for bars + QRectF plotArea = view.chart()->plotArea(); + qreal width = plotArea.width(); + qreal height = plotArea.height(); + qreal rangeY = 10; // From 0 to 10 because of maximum value in set is 10 + qreal rangeX = 3; // 3 values per set + qreal scaleY = (height / rangeY); + qreal scaleX = (width / rangeX); + + qreal setCount = series->count(); + qreal domainMinY = 0; // These come from internal domain used by barseries. + qreal domainMinX = -0.5; // No access to domain from outside, so use hard coded values. + qreal rectWidth = (scaleX / setCount) * series->barWidth(); + + QVector<QRectF> layout; + + // 3 = count of values in set + // Note that rects in this vector will be interleaved (set1 bar0, set2 bar0, set1 bar1, set2 bar1, etc.) + for (int i = 0; i < 3; i++) { + qreal yPos = height + scaleY * domainMinY + plotArea.top(); + for (int set = 0; set < setCount; set++) { + qreal xPos = (i - domainMinX) * scaleX + plotArea.left(); + xPos -= series->count()*rectWidth/2; + xPos += set*rectWidth; + + qreal rectHeight = barSets.at(set)->at(i) * scaleY; + QRectF rect(xPos, yPos - rectHeight, rectWidth, rectHeight); + layout.append(rect); + } + } + +//==================================================================================== +// barset 1, bar 0 + QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, layout.at(0).center().toPoint()); + QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); + + QCOMPARE(seriesSpy.count(), 1); + QCOMPARE(setSpy1.count(), 1); + QCOMPARE(setSpy2.count(), 0); + + QList<QVariant> seriesSpyArg = seriesSpy.takeFirst(); + QCOMPARE(qvariant_cast<QBarSet*>(seriesSpyArg.at(1)), set1); + QVERIFY(seriesSpyArg.at(0).type() == QVariant::Int); + QVERIFY(seriesSpyArg.at(0).toInt() == 0); + + QList<QVariant> setSpyArg = setSpy1.takeFirst(); + QVERIFY(setSpyArg.at(0).type() == QVariant::Int); + QVERIFY(setSpyArg.at(0).toInt() == 0); + +//==================================================================================== +// barset 1, bar 1 + QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, layout.at(2).center().toPoint()); + QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); + + QCOMPARE(seriesSpy.count(), 1); + QCOMPARE(setSpy1.count(), 1); + QCOMPARE(setSpy2.count(), 0); + + seriesSpyArg = seriesSpy.takeFirst(); + QCOMPARE(qvariant_cast<QBarSet*>(seriesSpyArg.at(1)), set1); + QVERIFY(seriesSpyArg.at(0).type() == QVariant::Int); + QVERIFY(seriesSpyArg.at(0).toInt() == 1); + + setSpyArg = setSpy1.takeFirst(); + QVERIFY(setSpyArg.at(0).type() == QVariant::Int); + QVERIFY(setSpyArg.at(0).toInt() == 1); + +//==================================================================================== +// barset 1, bar 2 + QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, layout.at(4).center().toPoint()); + QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); + + QCOMPARE(seriesSpy.count(), 1); + QCOMPARE(setSpy1.count(), 1); + QCOMPARE(setSpy2.count(), 0); + + seriesSpyArg = seriesSpy.takeFirst(); + QCOMPARE(qvariant_cast<QBarSet*>(seriesSpyArg.at(1)), set1); + QVERIFY(seriesSpyArg.at(0).type() == QVariant::Int); + QVERIFY(seriesSpyArg.at(0).toInt() == 2); + + setSpyArg = setSpy1.takeFirst(); + QVERIFY(setSpyArg.at(0).type() == QVariant::Int); + QVERIFY(setSpyArg.at(0).toInt() == 2); + +//==================================================================================== +// barset 2, bar 0 + QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, layout.at(1).center().toPoint()); + QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); + + QCOMPARE(seriesSpy.count(), 1); + QCOMPARE(setSpy1.count(), 0); + QCOMPARE(setSpy2.count(), 1); + + seriesSpyArg = seriesSpy.takeFirst(); + QCOMPARE(qvariant_cast<QBarSet*>(seriesSpyArg.at(1)), set2); + QVERIFY(seriesSpyArg.at(0).type() == QVariant::Int); + QVERIFY(seriesSpyArg.at(0).toInt() == 0); + + setSpyArg = setSpy2.takeFirst(); + QVERIFY(setSpyArg.at(0).type() == QVariant::Int); + QVERIFY(setSpyArg.at(0).toInt() == 0); + +//==================================================================================== +// barset 2, bar 1 + QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, layout.at(3).center().toPoint()); + QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); + + QCOMPARE(seriesSpy.count(), 1); + QCOMPARE(setSpy1.count(), 0); + QCOMPARE(setSpy2.count(), 1); + + seriesSpyArg = seriesSpy.takeFirst(); + QCOMPARE(qvariant_cast<QBarSet*>(seriesSpyArg.at(1)), set2); + QVERIFY(seriesSpyArg.at(0).type() == QVariant::Int); + QVERIFY(seriesSpyArg.at(0).toInt() == 1); + + setSpyArg = setSpy2.takeFirst(); + QVERIFY(setSpyArg.at(0).type() == QVariant::Int); + QVERIFY(setSpyArg.at(0).toInt() == 1); + +//==================================================================================== +// barset 2, bar 2 + QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, layout.at(5).center().toPoint()); + QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); + + QCOMPARE(seriesSpy.count(), 1); + QCOMPARE(setSpy1.count(), 0); + QCOMPARE(setSpy2.count(), 1); + + seriesSpyArg = seriesSpy.takeFirst(); + QCOMPARE(qvariant_cast<QBarSet*>(seriesSpyArg.at(1)), set2); + QVERIFY(seriesSpyArg.at(0).type() == QVariant::Int); + QVERIFY(seriesSpyArg.at(0).toInt() == 2); + + setSpyArg = setSpy2.takeFirst(); + QVERIFY(setSpyArg.at(0).type() == QVariant::Int); + QVERIFY(setSpyArg.at(0).toInt() == 2); +} + +void tst_QBarSeries::mouseDoubleClicked() +{ + SKIP_IF_CANNOT_TEST_MOUSE_EVENTS(); + + QBarSeries* series = new QBarSeries(); + + QBarSet* set1 = new QBarSet(QString("set 1")); + *set1 << 10 << 10 << 10; + series->append(set1); + + QBarSet* set2 = new QBarSet(QString("set 2")); + *set2 << 10 << 10 << 10; + series->append(set2); + QList<QBarSet*> barSets = series->barSets(); + + QSignalSpy seriesSpy(series,SIGNAL(doubleClicked(int,QBarSet*))); + QSignalSpy setSpy1(set1, SIGNAL(doubleClicked(int))); + QSignalSpy setSpy2(set2, SIGNAL(doubleClicked(int))); + + QChartView view(new QChart()); + view.resize(400,300); + view.chart()->addSeries(series); + view.show(); + QTest::qWaitForWindowShown(&view); + + // Calculate expected layout for bars + QRectF plotArea = view.chart()->plotArea(); + qreal width = plotArea.width(); + qreal height = plotArea.height(); + qreal rangeY = 10; // From 0 to 10 because of maximum value in set is 10 + qreal rangeX = 3; // 3 values per set + qreal scaleY = (height / rangeY); + qreal scaleX = (width / rangeX); + + qreal setCount = series->count(); + qreal domainMinY = 0; // These come from internal domain used by barseries. + qreal domainMinX = -0.5; // No access to domain from outside, so use hard coded values. + qreal rectWidth = (scaleX / setCount) * series->barWidth(); + + QVector<QRectF> layout; + + // 3 = count of values in set + // Note that rects in this vector will be interleaved (set1 bar0, set2 bar0, set1 bar1, set2 bar1, etc.) + for (int i = 0; i < 3; i++) { + qreal yPos = height + scaleY * domainMinY + plotArea.top(); + for (int set = 0; set < setCount; set++) { + qreal xPos = (i - domainMinX) * scaleX + plotArea.left(); + xPos -= series->count()*rectWidth/2; + xPos += set*rectWidth; + + qreal rectHeight = barSets.at(set)->at(i) * scaleY; + QRectF rect(xPos, yPos - rectHeight, rectWidth, rectHeight); + layout.append(rect); + } + } + + // barset 1, bar 0 + QTest::mouseDClick(view.viewport(), Qt::LeftButton, 0, layout.at(0).center().toPoint()); + QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); + + QCOMPARE(seriesSpy.count(), 1); + QCOMPARE(setSpy1.count(), 1); + QCOMPARE(setSpy2.count(), 0); + + QList<QVariant> seriesSpyArg = seriesSpy.takeFirst(); + QCOMPARE(qvariant_cast<QBarSet*>(seriesSpyArg.at(1)), set1); + QVERIFY(seriesSpyArg.at(0).type() == QVariant::Int); + QVERIFY(seriesSpyArg.at(0).toInt() == 0); + + QList<QVariant> setSpyArg = setSpy1.takeFirst(); + QVERIFY(setSpyArg.at(0).type() == QVariant::Int); + QVERIFY(setSpyArg.at(0).toInt() == 0); +} + QTEST_MAIN(tst_QBarSeries) #include "tst_qbarseries.moc" diff --git a/tests/auto/qhorizontalbarseries/tst_qhorizontalbarseries.cpp b/tests/auto/qhorizontalbarseries/tst_qhorizontalbarseries.cpp index 29bb682f..a209becc 100644 --- a/tests/auto/qhorizontalbarseries/tst_qhorizontalbarseries.cpp +++ b/tests/auto/qhorizontalbarseries/tst_qhorizontalbarseries.cpp @@ -64,6 +64,9 @@ private slots: void mousehovered_data(); void mousehovered(); void clearWithAnimations(); + void mousePressed(); + void mouseReleased(); + void mouseDoubleClicked(); private: QHorizontalBarSeries* m_barseries; @@ -859,6 +862,409 @@ void tst_QHorizontalBarSeries::clearWithAnimations() series->clear(); } +void tst_QHorizontalBarSeries::mousePressed() +{ + SKIP_IF_CANNOT_TEST_MOUSE_EVENTS(); + + QHorizontalBarSeries* series = new QHorizontalBarSeries(); + + QBarSet* set1 = new QBarSet(QString("set 1")); + *set1 << 10 << 10 << 10; + series->append(set1); + + QBarSet* set2 = new QBarSet(QString("set 2")); + *set2 << 10 << 10 << 10; + series->append(set2); + QList<QBarSet*> barSets = series->barSets(); + + QSignalSpy seriesSpy(series,SIGNAL(pressed(int,QBarSet*))); + QSignalSpy setSpy1(set1, SIGNAL(pressed(int))); + QSignalSpy setSpy2(set2, SIGNAL(pressed(int))); + + QChartView view(new QChart()); + view.resize(400,300); + view.chart()->addSeries(series); + view.show(); + QTest::qWaitForWindowShown(&view); + + // Calculate expected layout for bars + QRectF plotArea = view.chart()->plotArea(); + qreal width = plotArea.width(); + qreal height = plotArea.height(); + qreal rangeX = 10; // From 0 to 10 because of maximum value in set is 10 + qreal rangeY = 3; // 3 values per set + qreal scaleY = (height / rangeY); + qreal scaleX = (width / rangeX); + + qreal setCount = series->count(); + qreal domainMinY = -0.5; // These come from internal domain used by barseries. + qreal domainMinX = 0; // No access to domain from outside, so use hard coded values. + qreal rectHeight = (scaleY / setCount) * series->barWidth(); // On horizontal chart barWidth of the barseries means height of the rect. + + QVector<QRectF> layout; + + // 3 = count of values in set + // Note that rects in this vector will be interleaved (set1 bar0, set2 bar0, set1 bar1, set2 bar1, etc.) + for (int i = 0; i < 3; i++) { + qreal xPos = -scaleX * domainMinX + plotArea.left(); + for (int set = 0; set < setCount; set++) { + qreal yPos = plotArea.bottom() + (domainMinY - i) * scaleY; + yPos += setCount*rectHeight/2; + yPos -= set*rectHeight; + + qreal rectWidth = barSets.at(set)->at(i) * scaleX; + QRectF rect(xPos, yPos - rectHeight, rectWidth, rectHeight); + layout.append(rect); + } + } + +//==================================================================================== +// barset 1, bar 0 + QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, layout.at(0).center().toPoint()); + QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); + + QCOMPARE(seriesSpy.count(), 1); + QCOMPARE(setSpy1.count(), 1); + QCOMPARE(setSpy2.count(), 0); + + QList<QVariant> seriesSpyArg = seriesSpy.takeFirst(); + QCOMPARE(qvariant_cast<QBarSet*>(seriesSpyArg.at(1)), set1); + QVERIFY(seriesSpyArg.at(0).type() == QVariant::Int); + QVERIFY(seriesSpyArg.at(0).toInt() == 0); + + QList<QVariant> setSpyArg = setSpy1.takeFirst(); + QVERIFY(setSpyArg.at(0).type() == QVariant::Int); + QVERIFY(setSpyArg.at(0).toInt() == 0); + +//==================================================================================== +// barset 1, bar 1 + QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, layout.at(2).center().toPoint()); + QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); + + QCOMPARE(seriesSpy.count(), 1); + QCOMPARE(setSpy1.count(), 1); + QCOMPARE(setSpy2.count(), 0); + + seriesSpyArg = seriesSpy.takeFirst(); + QCOMPARE(qvariant_cast<QBarSet*>(seriesSpyArg.at(1)), set1); + QVERIFY(seriesSpyArg.at(0).type() == QVariant::Int); + QVERIFY(seriesSpyArg.at(0).toInt() == 1); + + setSpyArg = setSpy1.takeFirst(); + QVERIFY(setSpyArg.at(0).type() == QVariant::Int); + QVERIFY(setSpyArg.at(0).toInt() == 1); + +//==================================================================================== +// barset 1, bar 2 + QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, layout.at(4).center().toPoint()); + QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); + + QCOMPARE(seriesSpy.count(), 1); + QCOMPARE(setSpy1.count(), 1); + QCOMPARE(setSpy2.count(), 0); + + seriesSpyArg = seriesSpy.takeFirst(); + QCOMPARE(qvariant_cast<QBarSet*>(seriesSpyArg.at(1)), set1); + QVERIFY(seriesSpyArg.at(0).type() == QVariant::Int); + QVERIFY(seriesSpyArg.at(0).toInt() == 2); + + setSpyArg = setSpy1.takeFirst(); + QVERIFY(setSpyArg.at(0).type() == QVariant::Int); + QVERIFY(setSpyArg.at(0).toInt() == 2); + +//==================================================================================== +// barset 2, bar 0 + QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, layout.at(1).center().toPoint()); + QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); + + QCOMPARE(seriesSpy.count(), 1); + QCOMPARE(setSpy1.count(), 0); + QCOMPARE(setSpy2.count(), 1); + + seriesSpyArg = seriesSpy.takeFirst(); + QCOMPARE(qvariant_cast<QBarSet*>(seriesSpyArg.at(1)), set2); + QVERIFY(seriesSpyArg.at(0).type() == QVariant::Int); + QVERIFY(seriesSpyArg.at(0).toInt() == 0); + + setSpyArg = setSpy2.takeFirst(); + QVERIFY(setSpyArg.at(0).type() == QVariant::Int); + QVERIFY(setSpyArg.at(0).toInt() == 0); + +//==================================================================================== +// barset 2, bar 1 + QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, layout.at(3).center().toPoint()); + QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); + + QCOMPARE(seriesSpy.count(), 1); + QCOMPARE(setSpy1.count(), 0); + QCOMPARE(setSpy2.count(), 1); + + seriesSpyArg = seriesSpy.takeFirst(); + QCOMPARE(qvariant_cast<QBarSet*>(seriesSpyArg.at(1)), set2); + QVERIFY(seriesSpyArg.at(0).type() == QVariant::Int); + QVERIFY(seriesSpyArg.at(0).toInt() == 1); + + setSpyArg = setSpy2.takeFirst(); + QVERIFY(setSpyArg.at(0).type() == QVariant::Int); + QVERIFY(setSpyArg.at(0).toInt() == 1); + +//==================================================================================== +// barset 2, bar 2 + QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, layout.at(5).center().toPoint()); + QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); + + QCOMPARE(seriesSpy.count(), 1); + QCOMPARE(setSpy1.count(), 0); + QCOMPARE(setSpy2.count(), 1); + + seriesSpyArg = seriesSpy.takeFirst(); + QCOMPARE(qvariant_cast<QBarSet*>(seriesSpyArg.at(1)), set2); + QVERIFY(seriesSpyArg.at(0).type() == QVariant::Int); + QVERIFY(seriesSpyArg.at(0).toInt() == 2); + + setSpyArg = setSpy2.takeFirst(); + QVERIFY(setSpyArg.at(0).type() == QVariant::Int); + QVERIFY(setSpyArg.at(0).toInt() == 2); +} + +void tst_QHorizontalBarSeries::mouseReleased() +{ + SKIP_IF_CANNOT_TEST_MOUSE_EVENTS(); + + QHorizontalBarSeries* series = new QHorizontalBarSeries(); + + QBarSet* set1 = new QBarSet(QString("set 1")); + *set1 << 10 << 10 << 10; + series->append(set1); + + QBarSet* set2 = new QBarSet(QString("set 2")); + *set2 << 10 << 10 << 10; + series->append(set2); + QList<QBarSet*> barSets = series->barSets(); + + QSignalSpy seriesSpy(series,SIGNAL(released(int,QBarSet*))); + QSignalSpy setSpy1(set1, SIGNAL(released(int))); + QSignalSpy setSpy2(set2, SIGNAL(released(int))); + + QChartView view(new QChart()); + view.resize(400,300); + view.chart()->addSeries(series); + view.show(); + QTest::qWaitForWindowShown(&view); + + // Calculate expected layout for bars + QRectF plotArea = view.chart()->plotArea(); + qreal width = plotArea.width(); + qreal height = plotArea.height(); + qreal rangeX = 10; // From 0 to 10 because of maximum value in set is 10 + qreal rangeY = 3; // 3 values per set + qreal scaleY = (height / rangeY); + qreal scaleX = (width / rangeX); + + qreal setCount = series->count(); + qreal domainMinY = -0.5; // These come from internal domain used by barseries. + qreal domainMinX = 0; // No access to domain from outside, so use hard coded values. + qreal rectHeight = (scaleY / setCount) * series->barWidth(); // On horizontal chart barWidth of the barseries means height of the rect. + + QVector<QRectF> layout; + + // 3 = count of values in set + // Note that rects in this vector will be interleaved (set1 bar0, set2 bar0, set1 bar1, set2 bar1, etc.) + for (int i = 0; i < 3; i++) { + qreal xPos = -scaleX * domainMinX + plotArea.left(); + for (int set = 0; set < setCount; set++) { + qreal yPos = plotArea.bottom() + (domainMinY - i) * scaleY; + yPos += setCount*rectHeight/2; + yPos -= set*rectHeight; + + qreal rectWidth = barSets.at(set)->at(i) * scaleX; + QRectF rect(xPos, yPos - rectHeight, rectWidth, rectHeight); + layout.append(rect); + } + } + +//==================================================================================== +// barset 1, bar 0 + QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, layout.at(0).center().toPoint()); + QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); + + QCOMPARE(seriesSpy.count(), 1); + QCOMPARE(setSpy1.count(), 1); + QCOMPARE(setSpy2.count(), 0); + + QList<QVariant> seriesSpyArg = seriesSpy.takeFirst(); + QCOMPARE(qvariant_cast<QBarSet*>(seriesSpyArg.at(1)), set1); + QVERIFY(seriesSpyArg.at(0).type() == QVariant::Int); + QVERIFY(seriesSpyArg.at(0).toInt() == 0); + + QList<QVariant> setSpyArg = setSpy1.takeFirst(); + QVERIFY(setSpyArg.at(0).type() == QVariant::Int); + QVERIFY(setSpyArg.at(0).toInt() == 0); + +//==================================================================================== +// barset 1, bar 1 + QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, layout.at(2).center().toPoint()); + QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); + + QCOMPARE(seriesSpy.count(), 1); + QCOMPARE(setSpy1.count(), 1); + QCOMPARE(setSpy2.count(), 0); + + seriesSpyArg = seriesSpy.takeFirst(); + QCOMPARE(qvariant_cast<QBarSet*>(seriesSpyArg.at(1)), set1); + QVERIFY(seriesSpyArg.at(0).type() == QVariant::Int); + QVERIFY(seriesSpyArg.at(0).toInt() == 1); + + setSpyArg = setSpy1.takeFirst(); + QVERIFY(setSpyArg.at(0).type() == QVariant::Int); + QVERIFY(setSpyArg.at(0).toInt() == 1); + +//==================================================================================== +// barset 1, bar 2 + QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, layout.at(4).center().toPoint()); + QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); + + QCOMPARE(seriesSpy.count(), 1); + QCOMPARE(setSpy1.count(), 1); + QCOMPARE(setSpy2.count(), 0); + + seriesSpyArg = seriesSpy.takeFirst(); + QCOMPARE(qvariant_cast<QBarSet*>(seriesSpyArg.at(1)), set1); + QVERIFY(seriesSpyArg.at(0).type() == QVariant::Int); + QVERIFY(seriesSpyArg.at(0).toInt() == 2); + + setSpyArg = setSpy1.takeFirst(); + QVERIFY(setSpyArg.at(0).type() == QVariant::Int); + QVERIFY(setSpyArg.at(0).toInt() == 2); + +//==================================================================================== +// barset 2, bar 0 + QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, layout.at(1).center().toPoint()); + QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); + + QCOMPARE(seriesSpy.count(), 1); + QCOMPARE(setSpy1.count(), 0); + QCOMPARE(setSpy2.count(), 1); + + seriesSpyArg = seriesSpy.takeFirst(); + QCOMPARE(qvariant_cast<QBarSet*>(seriesSpyArg.at(1)), set2); + QVERIFY(seriesSpyArg.at(0).type() == QVariant::Int); + QVERIFY(seriesSpyArg.at(0).toInt() == 0); + + setSpyArg = setSpy2.takeFirst(); + QVERIFY(setSpyArg.at(0).type() == QVariant::Int); + QVERIFY(setSpyArg.at(0).toInt() == 0); + +//==================================================================================== +// barset 2, bar 1 + QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, layout.at(3).center().toPoint()); + QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); + + QCOMPARE(seriesSpy.count(), 1); + QCOMPARE(setSpy1.count(), 0); + QCOMPARE(setSpy2.count(), 1); + + seriesSpyArg = seriesSpy.takeFirst(); + QCOMPARE(qvariant_cast<QBarSet*>(seriesSpyArg.at(1)), set2); + QVERIFY(seriesSpyArg.at(0).type() == QVariant::Int); + QVERIFY(seriesSpyArg.at(0).toInt() == 1); + + setSpyArg = setSpy2.takeFirst(); + QVERIFY(setSpyArg.at(0).type() == QVariant::Int); + QVERIFY(setSpyArg.at(0).toInt() == 1); + +//==================================================================================== +// barset 2, bar 2 + QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, layout.at(5).center().toPoint()); + QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); + + QCOMPARE(seriesSpy.count(), 1); + QCOMPARE(setSpy1.count(), 0); + QCOMPARE(setSpy2.count(), 1); + + seriesSpyArg = seriesSpy.takeFirst(); + QCOMPARE(qvariant_cast<QBarSet*>(seriesSpyArg.at(1)), set2); + QVERIFY(seriesSpyArg.at(0).type() == QVariant::Int); + QVERIFY(seriesSpyArg.at(0).toInt() == 2); + + setSpyArg = setSpy2.takeFirst(); + QVERIFY(setSpyArg.at(0).type() == QVariant::Int); + QVERIFY(setSpyArg.at(0).toInt() == 2); +} + +void tst_QHorizontalBarSeries::mouseDoubleClicked() +{ + SKIP_IF_CANNOT_TEST_MOUSE_EVENTS(); + + QHorizontalBarSeries* series = new QHorizontalBarSeries(); + + QBarSet* set1 = new QBarSet(QString("set 1")); + *set1 << 10 << 10 << 10; + series->append(set1); + + QBarSet* set2 = new QBarSet(QString("set 2")); + *set2 << 10 << 10 << 10; + series->append(set2); + QList<QBarSet*> barSets = series->barSets(); + + QSignalSpy seriesSpy(series,SIGNAL(doubleClicked(int,QBarSet*))); + QSignalSpy setSpy1(set1, SIGNAL(doubleClicked(int))); + QSignalSpy setSpy2(set2, SIGNAL(doubleClicked(int))); + + QChartView view(new QChart()); + view.resize(400,300); + view.chart()->addSeries(series); + view.show(); + QTest::qWaitForWindowShown(&view); + + // Calculate expected layout for bars + QRectF plotArea = view.chart()->plotArea(); + qreal width = plotArea.width(); + qreal height = plotArea.height(); + qreal rangeX = 10; // From 0 to 10 because of maximum value in set is 10 + qreal rangeY = 3; // 3 values per set + qreal scaleY = (height / rangeY); + qreal scaleX = (width / rangeX); + + qreal setCount = series->count(); + qreal domainMinY = -0.5; // These come from internal domain used by barseries. + qreal domainMinX = 0; // No access to domain from outside, so use hard coded values. + qreal rectHeight = (scaleY / setCount) * series->barWidth(); // On horizontal chart barWidth of the barseries means height of the rect. + + QVector<QRectF> layout; + + // 3 = count of values in set + // Note that rects in this vector will be interleaved (set1 bar0, set2 bar0, set1 bar1, set2 bar1, etc.) + for (int i = 0; i < 3; i++) { + qreal xPos = -scaleX * domainMinX + plotArea.left(); + for (int set = 0; set < setCount; set++) { + qreal yPos = plotArea.bottom() + (domainMinY - i) * scaleY; + yPos += setCount*rectHeight/2; + yPos -= set*rectHeight; + + qreal rectWidth = barSets.at(set)->at(i) * scaleX; + QRectF rect(xPos, yPos - rectHeight, rectWidth, rectHeight); + layout.append(rect); + } + } + + // barset 1, bar 0 + QTest::mouseDClick(view.viewport(), Qt::LeftButton, 0, layout.at(0).center().toPoint()); + QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); + + QCOMPARE(seriesSpy.count(), 1); + QCOMPARE(setSpy1.count(), 1); + QCOMPARE(setSpy2.count(), 0); + + QList<QVariant> seriesSpyArg = seriesSpy.takeFirst(); + QCOMPARE(qvariant_cast<QBarSet*>(seriesSpyArg.at(1)), set1); + QVERIFY(seriesSpyArg.at(0).type() == QVariant::Int); + QVERIFY(seriesSpyArg.at(0).toInt() == 0); + + QList<QVariant> setSpyArg = setSpy1.takeFirst(); + QVERIFY(setSpyArg.at(0).type() == QVariant::Int); + QVERIFY(setSpyArg.at(0).toInt() == 0); +} QTEST_MAIN(tst_QHorizontalBarSeries) #include "tst_qhorizontalbarseries.moc" diff --git a/tests/auto/qhorizontalpercentbarseries/tst_qhorizontalpercentbarseries.cpp b/tests/auto/qhorizontalpercentbarseries/tst_qhorizontalpercentbarseries.cpp index 2c3f4bd8..add938c6 100644 --- a/tests/auto/qhorizontalpercentbarseries/tst_qhorizontalpercentbarseries.cpp +++ b/tests/auto/qhorizontalpercentbarseries/tst_qhorizontalpercentbarseries.cpp @@ -52,6 +52,9 @@ private slots: void mousehovered_data(); void mousehovered(); void zeroValuesInSeries(); + void mousePressed(); + void mouseReleased(); + void mouseDoubleClicked(); private: QHorizontalPercentBarSeries* m_barseries; @@ -604,6 +607,411 @@ void tst_QHorizontalPercentBarSeries::zeroValuesInSeries() QTest::qWaitForWindowShown(&view); } + +void tst_QHorizontalPercentBarSeries::mousePressed() +{ + SKIP_IF_CANNOT_TEST_MOUSE_EVENTS(); + + QHorizontalPercentBarSeries* series = new QHorizontalPercentBarSeries(); + + QBarSet* set1 = new QBarSet(QString("set 1")); + *set1 << 10 << 10 << 10; + series->append(set1); + + QBarSet* set2 = new QBarSet(QString("set 2")); + *set2 << 10 << 10 << 10; + series->append(set2); + QList<QBarSet*> barSets = series->barSets(); + + QSignalSpy seriesSpy(series,SIGNAL(pressed(int,QBarSet*))); + QSignalSpy setSpy1(set1, SIGNAL(pressed(int))); + QSignalSpy setSpy2(set2, SIGNAL(pressed(int))); + + QChartView view(new QChart()); + view.resize(400,300); + view.chart()->addSeries(series); + view.show(); + QTest::qWaitForWindowShown(&view); + + // Calculate expected layout for bars + QRectF plotArea = view.chart()->plotArea(); + qreal width = plotArea.width(); + qreal height = plotArea.height(); + qreal rangeX = 100; // From 0 to 100 because of scaling to 100% + qreal rangeY = 3; // 3 values per set + qreal scaleY = (height / rangeY); + qreal scaleX = (width / rangeX); + + qreal setCount = series->count(); + qreal domainMinY = -0.5; // These come from internal domain used by barseries. + qreal domainMinX = 0; // No access to domain from outside, so use hard coded values. + qreal rectHeight = scaleY * series->barWidth(); // On horizontal chart barWidth of the barseries means height of the rect. + + QVector<QRectF> layout; + + // 3 = count of values in set + // Note that rects in this vector will be interleaved (set1 bar0, set2 bar0, set1 bar1, set2 bar1, etc.) + for (int i = 0; i < 3; i++) { + qreal colSum = 20; // Sum of values in column (10 + 10 in our test case) + qreal percentage = (100 / colSum); + qreal xPos = -scaleX * domainMinX + plotArea.left(); + for (int set = 0; set < setCount; set++) { + qreal yPos = (domainMinY +0.5 -i) * scaleY + plotArea.bottom() - rectHeight/2; + qreal rectWidth = barSets.at(set)->at(i) * percentage * scaleX; + QRectF rect(xPos, yPos - rectHeight, rectWidth, rectHeight); + layout.append(rect); + xPos += rectWidth; + } + } + +//==================================================================================== +// barset 1, bar 0 + QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, layout.at(0).center().toPoint()); + QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); + + QCOMPARE(seriesSpy.count(), 1); + QCOMPARE(setSpy1.count(), 1); + QCOMPARE(setSpy2.count(), 0); + + QList<QVariant> seriesSpyArg = seriesSpy.takeFirst(); + QCOMPARE(qvariant_cast<QBarSet*>(seriesSpyArg.at(1)), set1); + QVERIFY(seriesSpyArg.at(0).type() == QVariant::Int); + QVERIFY(seriesSpyArg.at(0).toInt() == 0); + + QList<QVariant> setSpyArg = setSpy1.takeFirst(); + QVERIFY(setSpyArg.at(0).type() == QVariant::Int); + QVERIFY(setSpyArg.at(0).toInt() == 0); + +//==================================================================================== +// barset 1, bar 1 + QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, layout.at(2).center().toPoint()); + QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); + + QCOMPARE(seriesSpy.count(), 1); + QCOMPARE(setSpy1.count(), 1); + QCOMPARE(setSpy2.count(), 0); + + seriesSpyArg = seriesSpy.takeFirst(); + QCOMPARE(qvariant_cast<QBarSet*>(seriesSpyArg.at(1)), set1); + QVERIFY(seriesSpyArg.at(0).type() == QVariant::Int); + QVERIFY(seriesSpyArg.at(0).toInt() == 1); + + setSpyArg = setSpy1.takeFirst(); + QVERIFY(setSpyArg.at(0).type() == QVariant::Int); + QVERIFY(setSpyArg.at(0).toInt() == 1); + +//==================================================================================== +// barset 1, bar 2 + QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, layout.at(4).center().toPoint()); + QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); + + QCOMPARE(seriesSpy.count(), 1); + QCOMPARE(setSpy1.count(), 1); + QCOMPARE(setSpy2.count(), 0); + + seriesSpyArg = seriesSpy.takeFirst(); + QCOMPARE(qvariant_cast<QBarSet*>(seriesSpyArg.at(1)), set1); + QVERIFY(seriesSpyArg.at(0).type() == QVariant::Int); + QVERIFY(seriesSpyArg.at(0).toInt() == 2); + + setSpyArg = setSpy1.takeFirst(); + QVERIFY(setSpyArg.at(0).type() == QVariant::Int); + QVERIFY(setSpyArg.at(0).toInt() == 2); + +//==================================================================================== +// barset 2, bar 0 + QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, layout.at(1).center().toPoint()); + QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); + + QCOMPARE(seriesSpy.count(), 1); + QCOMPARE(setSpy1.count(), 0); + QCOMPARE(setSpy2.count(), 1); + + seriesSpyArg = seriesSpy.takeFirst(); + QCOMPARE(qvariant_cast<QBarSet*>(seriesSpyArg.at(1)), set2); + QVERIFY(seriesSpyArg.at(0).type() == QVariant::Int); + QVERIFY(seriesSpyArg.at(0).toInt() == 0); + + setSpyArg = setSpy2.takeFirst(); + QVERIFY(setSpyArg.at(0).type() == QVariant::Int); + QVERIFY(setSpyArg.at(0).toInt() == 0); + +//==================================================================================== +// barset 2, bar 1 + QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, layout.at(3).center().toPoint()); + QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); + + QCOMPARE(seriesSpy.count(), 1); + QCOMPARE(setSpy1.count(), 0); + QCOMPARE(setSpy2.count(), 1); + + seriesSpyArg = seriesSpy.takeFirst(); + QCOMPARE(qvariant_cast<QBarSet*>(seriesSpyArg.at(1)), set2); + QVERIFY(seriesSpyArg.at(0).type() == QVariant::Int); + QVERIFY(seriesSpyArg.at(0).toInt() == 1); + + setSpyArg = setSpy2.takeFirst(); + QVERIFY(setSpyArg.at(0).type() == QVariant::Int); + QVERIFY(setSpyArg.at(0).toInt() == 1); + +//==================================================================================== +// barset 2, bar 2 + QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, layout.at(5).center().toPoint()); + QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); + + QCOMPARE(seriesSpy.count(), 1); + QCOMPARE(setSpy1.count(), 0); + QCOMPARE(setSpy2.count(), 1); + + seriesSpyArg = seriesSpy.takeFirst(); + QCOMPARE(qvariant_cast<QBarSet*>(seriesSpyArg.at(1)), set2); + QVERIFY(seriesSpyArg.at(0).type() == QVariant::Int); + QVERIFY(seriesSpyArg.at(0).toInt() == 2); + + setSpyArg = setSpy2.takeFirst(); + QVERIFY(setSpyArg.at(0).type() == QVariant::Int); + QVERIFY(setSpyArg.at(0).toInt() == 2); +} + +void tst_QHorizontalPercentBarSeries::mouseReleased() +{ + SKIP_IF_CANNOT_TEST_MOUSE_EVENTS(); + + QHorizontalPercentBarSeries* series = new QHorizontalPercentBarSeries(); + + QBarSet* set1 = new QBarSet(QString("set 1")); + *set1 << 10 << 10 << 10; + series->append(set1); + + QBarSet* set2 = new QBarSet(QString("set 2")); + *set2 << 10 << 10 << 10; + series->append(set2); + QList<QBarSet*> barSets = series->barSets(); + + QSignalSpy seriesSpy(series,SIGNAL(released(int,QBarSet*))); + QSignalSpy setSpy1(set1, SIGNAL(released(int))); + QSignalSpy setSpy2(set2, SIGNAL(released(int))); + + QChartView view(new QChart()); + view.resize(400,300); + view.chart()->addSeries(series); + view.show(); + QTest::qWaitForWindowShown(&view); + + // Calculate expected layout for bars + QRectF plotArea = view.chart()->plotArea(); + qreal width = plotArea.width(); + qreal height = plotArea.height(); + qreal rangeX = 100; // From 0 to 100 because of scaling to 100% + qreal rangeY = 3; // 3 values per set + qreal scaleY = (height / rangeY); + qreal scaleX = (width / rangeX); + + qreal setCount = series->count(); + qreal domainMinY = -0.5; // These come from internal domain used by barseries. + qreal domainMinX = 0; // No access to domain from outside, so use hard coded values. + qreal rectHeight = scaleY * series->barWidth(); // On horizontal chart barWidth of the barseries means height of the rect. + + QVector<QRectF> layout; + + // 3 = count of values in set + // Note that rects in this vector will be interleaved (set1 bar0, set2 bar0, set1 bar1, set2 bar1, etc.) + for (int i = 0; i < 3; i++) { + qreal colSum = 20; // Sum of values in column (10 + 10 in our test case) + qreal percentage = (100 / colSum); + qreal xPos = -scaleX * domainMinX + plotArea.left(); + for (int set = 0; set < setCount; set++) { + qreal yPos = (domainMinY +0.5 -i) * scaleY + plotArea.bottom() - rectHeight/2; + qreal rectWidth = barSets.at(set)->at(i) * percentage * scaleX; + QRectF rect(xPos, yPos - rectHeight, rectWidth, rectHeight); + layout.append(rect); + xPos += rectWidth; + } + } + +//==================================================================================== +// barset 1, bar 0 + QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, layout.at(0).center().toPoint()); + QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); + + QCOMPARE(seriesSpy.count(), 1); + QCOMPARE(setSpy1.count(), 1); + QCOMPARE(setSpy2.count(), 0); + + QList<QVariant> seriesSpyArg = seriesSpy.takeFirst(); + QCOMPARE(qvariant_cast<QBarSet*>(seriesSpyArg.at(1)), set1); + QVERIFY(seriesSpyArg.at(0).type() == QVariant::Int); + QVERIFY(seriesSpyArg.at(0).toInt() == 0); + + QList<QVariant> setSpyArg = setSpy1.takeFirst(); + QVERIFY(setSpyArg.at(0).type() == QVariant::Int); + QVERIFY(setSpyArg.at(0).toInt() == 0); + +//==================================================================================== +// barset 1, bar 1 + QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, layout.at(2).center().toPoint()); + QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); + + QCOMPARE(seriesSpy.count(), 1); + QCOMPARE(setSpy1.count(), 1); + QCOMPARE(setSpy2.count(), 0); + + seriesSpyArg = seriesSpy.takeFirst(); + QCOMPARE(qvariant_cast<QBarSet*>(seriesSpyArg.at(1)), set1); + QVERIFY(seriesSpyArg.at(0).type() == QVariant::Int); + QVERIFY(seriesSpyArg.at(0).toInt() == 1); + + setSpyArg = setSpy1.takeFirst(); + QVERIFY(setSpyArg.at(0).type() == QVariant::Int); + QVERIFY(setSpyArg.at(0).toInt() == 1); + +//==================================================================================== +// barset 1, bar 2 + QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, layout.at(4).center().toPoint()); + QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); + + QCOMPARE(seriesSpy.count(), 1); + QCOMPARE(setSpy1.count(), 1); + QCOMPARE(setSpy2.count(), 0); + + seriesSpyArg = seriesSpy.takeFirst(); + QCOMPARE(qvariant_cast<QBarSet*>(seriesSpyArg.at(1)), set1); + QVERIFY(seriesSpyArg.at(0).type() == QVariant::Int); + QVERIFY(seriesSpyArg.at(0).toInt() == 2); + + setSpyArg = setSpy1.takeFirst(); + QVERIFY(setSpyArg.at(0).type() == QVariant::Int); + QVERIFY(setSpyArg.at(0).toInt() == 2); + +//==================================================================================== +// barset 2, bar 0 + QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, layout.at(1).center().toPoint()); + QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); + + QCOMPARE(seriesSpy.count(), 1); + QCOMPARE(setSpy1.count(), 0); + QCOMPARE(setSpy2.count(), 1); + + seriesSpyArg = seriesSpy.takeFirst(); + QCOMPARE(qvariant_cast<QBarSet*>(seriesSpyArg.at(1)), set2); + QVERIFY(seriesSpyArg.at(0).type() == QVariant::Int); + QVERIFY(seriesSpyArg.at(0).toInt() == 0); + + setSpyArg = setSpy2.takeFirst(); + QVERIFY(setSpyArg.at(0).type() == QVariant::Int); + QVERIFY(setSpyArg.at(0).toInt() == 0); + +//==================================================================================== +// barset 2, bar 1 + QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, layout.at(3).center().toPoint()); + QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); + + QCOMPARE(seriesSpy.count(), 1); + QCOMPARE(setSpy1.count(), 0); + QCOMPARE(setSpy2.count(), 1); + + seriesSpyArg = seriesSpy.takeFirst(); + QCOMPARE(qvariant_cast<QBarSet*>(seriesSpyArg.at(1)), set2); + QVERIFY(seriesSpyArg.at(0).type() == QVariant::Int); + QVERIFY(seriesSpyArg.at(0).toInt() == 1); + + setSpyArg = setSpy2.takeFirst(); + QVERIFY(setSpyArg.at(0).type() == QVariant::Int); + QVERIFY(setSpyArg.at(0).toInt() == 1); + +//==================================================================================== +// barset 2, bar 2 + QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, layout.at(5).center().toPoint()); + QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); + + QCOMPARE(seriesSpy.count(), 1); + QCOMPARE(setSpy1.count(), 0); + QCOMPARE(setSpy2.count(), 1); + + seriesSpyArg = seriesSpy.takeFirst(); + QCOMPARE(qvariant_cast<QBarSet*>(seriesSpyArg.at(1)), set2); + QVERIFY(seriesSpyArg.at(0).type() == QVariant::Int); + QVERIFY(seriesSpyArg.at(0).toInt() == 2); + + setSpyArg = setSpy2.takeFirst(); + QVERIFY(setSpyArg.at(0).type() == QVariant::Int); + QVERIFY(setSpyArg.at(0).toInt() == 2); +} + +void tst_QHorizontalPercentBarSeries::mouseDoubleClicked() +{ + SKIP_IF_CANNOT_TEST_MOUSE_EVENTS(); + + QHorizontalPercentBarSeries* series = new QHorizontalPercentBarSeries(); + + QBarSet* set1 = new QBarSet(QString("set 1")); + *set1 << 10 << 10 << 10; + series->append(set1); + + QBarSet* set2 = new QBarSet(QString("set 2")); + *set2 << 10 << 10 << 10; + series->append(set2); + QList<QBarSet*> barSets = series->barSets(); + + QSignalSpy seriesSpy(series,SIGNAL(doubleClicked(int,QBarSet*))); + QSignalSpy setSpy1(set1, SIGNAL(doubleClicked(int))); + QSignalSpy setSpy2(set2, SIGNAL(doubleClicked(int))); + + QChartView view(new QChart()); + view.resize(400,300); + view.chart()->addSeries(series); + view.show(); + QTest::qWaitForWindowShown(&view); + + // Calculate expected layout for bars + QRectF plotArea = view.chart()->plotArea(); + qreal width = plotArea.width(); + qreal height = plotArea.height(); + qreal rangeX = 100; // From 0 to 100 because of scaling to 100% + qreal rangeY = 3; // 3 values per set + qreal scaleY = (height / rangeY); + qreal scaleX = (width / rangeX); + + qreal setCount = series->count(); + qreal domainMinY = -0.5; // These come from internal domain used by barseries. + qreal domainMinX = 0; // No access to domain from outside, so use hard coded values. + qreal rectHeight = scaleY * series->barWidth(); // On horizontal chart barWidth of the barseries means height of the rect. + + QVector<QRectF> layout; + + // 3 = count of values in set + // Note that rects in this vector will be interleaved (set1 bar0, set2 bar0, set1 bar1, set2 bar1, etc.) + for (int i = 0; i < 3; i++) { + qreal colSum = 20; // Sum of values in column (10 + 10 in our test case) + qreal percentage = (100 / colSum); + qreal xPos = -scaleX * domainMinX + plotArea.left(); + for (int set = 0; set < setCount; set++) { + qreal yPos = (domainMinY +0.5 -i) * scaleY + plotArea.bottom() - rectHeight/2; + qreal rectWidth = barSets.at(set)->at(i) * percentage * scaleX; + QRectF rect(xPos, yPos - rectHeight, rectWidth, rectHeight); + layout.append(rect); + xPos += rectWidth; + } + } + + // barset 1, bar 0 + QTest::mouseDClick(view.viewport(), Qt::LeftButton, 0, layout.at(0).center().toPoint()); + QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); + + QCOMPARE(seriesSpy.count(), 1); + QCOMPARE(setSpy1.count(), 1); + QCOMPARE(setSpy2.count(), 0); + + QList<QVariant> seriesSpyArg = seriesSpy.takeFirst(); + QCOMPARE(qvariant_cast<QBarSet*>(seriesSpyArg.at(1)), set1); + QVERIFY(seriesSpyArg.at(0).type() == QVariant::Int); + QVERIFY(seriesSpyArg.at(0).toInt() == 0); + + QList<QVariant> setSpyArg = setSpy1.takeFirst(); + QVERIFY(setSpyArg.at(0).type() == QVariant::Int); + QVERIFY(setSpyArg.at(0).toInt() == 0); +} + QTEST_MAIN(tst_QHorizontalPercentBarSeries) #include "tst_qhorizontalpercentbarseries.moc" diff --git a/tests/auto/qhorizontalstackedbarseries/tst_qhorizontalstackedbarseries.cpp b/tests/auto/qhorizontalstackedbarseries/tst_qhorizontalstackedbarseries.cpp index ac6b9b1b..cbf64efc 100644 --- a/tests/auto/qhorizontalstackedbarseries/tst_qhorizontalstackedbarseries.cpp +++ b/tests/auto/qhorizontalstackedbarseries/tst_qhorizontalstackedbarseries.cpp @@ -51,6 +51,9 @@ private slots: void mouseclicked(); void mousehovered_data(); void mousehovered(); + void mousePressed(); + void mouseReleased(); + void mouseDoubleClicked(); private: QHorizontalStackedBarSeries* m_barseries; @@ -594,6 +597,424 @@ void tst_QHorizontalStackedBarSeries::mousehovered() QVERIFY(setIndexSpyArg.at(1).toInt() == 1); } +void tst_QHorizontalStackedBarSeries::mousePressed() +{ + SKIP_IF_CANNOT_TEST_MOUSE_EVENTS(); + + QHorizontalStackedBarSeries* series = new QHorizontalStackedBarSeries(); + + QBarSet* set1 = new QBarSet(QString("set 1")); + *set1 << 10 << 10 << 10; + series->append(set1); + + QBarSet* set2 = new QBarSet(QString("set 2")); + *set2 << 10 << 10 << 10; + series->append(set2); + QList<QBarSet*> barSets = series->barSets(); + + QSignalSpy seriesSpy(series,SIGNAL(pressed(int,QBarSet*))); + QSignalSpy setSpy1(set1, SIGNAL(pressed(int))); + QSignalSpy setSpy2(set2, SIGNAL(pressed(int))); + + QChartView view(new QChart()); + view.resize(400,300); + view.chart()->addSeries(series); + view.show(); + QTest::qWaitForWindowShown(&view); + + // Calculate expected layout for bars + QRectF plotArea = view.chart()->plotArea(); + qreal width = plotArea.width(); + qreal height = plotArea.height(); + qreal rangeY = 3; // 3 values per set + qreal rangeX = 20; // From 0 to 20 because bars are stacked (this should be height of highest stack) + qreal scaleY = (height / rangeY); + qreal scaleX = (width / rangeX); + + qreal setCount = series->count(); + qreal domainMinY = -0.5; // These come from internal domain used by barseries. + qreal domainMinX = 0; // No access to domain from outside, so use hard coded values. + qreal rectHeight = scaleY * series->barWidth(); // On horizontal chart barWidth of the barseries means height of the rect. + + QVector<QRectF> layout; + + // 3 = count of values in set + // Note that rects in this vector will be interleaved (set1 bar0, set2 bar0, set1 bar1, set2 bar1, etc.) + for (int i = 0; i < 3; i++) { + qreal xMax = -scaleX * domainMinX + plotArea.left(); + qreal xMin = -scaleX * domainMinX + plotArea.left(); + for (int set = 0; set < setCount; set++) { + qreal yPos = (domainMinY +0.5 -i) * scaleY + plotArea.bottom() - rectHeight/2; + qreal rectWidth = barSets.at(set)->at(i) * scaleX; + if (rectWidth > 0) { + QRectF rect(xMax, yPos - rectHeight, rectWidth, rectHeight); + layout.append(rect); + xMax += rectWidth; + } else { + QRectF rect(xMin, yPos - rectHeight, rectWidth, rectHeight); + layout.append(rect); + xMin += rectWidth; + } + } + } + +//==================================================================================== +// barset 1, bar 0 + QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, layout.at(0).center().toPoint()); + QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); + + QCOMPARE(seriesSpy.count(), 1); + QCOMPARE(setSpy1.count(), 1); + QCOMPARE(setSpy2.count(), 0); + + QList<QVariant> seriesSpyArg = seriesSpy.takeFirst(); + QCOMPARE(qvariant_cast<QBarSet*>(seriesSpyArg.at(1)), set1); + QVERIFY(seriesSpyArg.at(0).type() == QVariant::Int); + QVERIFY(seriesSpyArg.at(0).toInt() == 0); + + QList<QVariant> setSpyArg = setSpy1.takeFirst(); + QVERIFY(setSpyArg.at(0).type() == QVariant::Int); + QVERIFY(setSpyArg.at(0).toInt() == 0); + +//==================================================================================== +// barset 1, bar 1 + QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, layout.at(2).center().toPoint()); + QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); + + QCOMPARE(seriesSpy.count(), 1); + QCOMPARE(setSpy1.count(), 1); + QCOMPARE(setSpy2.count(), 0); + + seriesSpyArg = seriesSpy.takeFirst(); + QCOMPARE(qvariant_cast<QBarSet*>(seriesSpyArg.at(1)), set1); + QVERIFY(seriesSpyArg.at(0).type() == QVariant::Int); + QVERIFY(seriesSpyArg.at(0).toInt() == 1); + + setSpyArg = setSpy1.takeFirst(); + QVERIFY(setSpyArg.at(0).type() == QVariant::Int); + QVERIFY(setSpyArg.at(0).toInt() == 1); + +//==================================================================================== +// barset 1, bar 2 + QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, layout.at(4).center().toPoint()); + QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); + + QCOMPARE(seriesSpy.count(), 1); + QCOMPARE(setSpy1.count(), 1); + QCOMPARE(setSpy2.count(), 0); + + seriesSpyArg = seriesSpy.takeFirst(); + QCOMPARE(qvariant_cast<QBarSet*>(seriesSpyArg.at(1)), set1); + QVERIFY(seriesSpyArg.at(0).type() == QVariant::Int); + QVERIFY(seriesSpyArg.at(0).toInt() == 2); + + setSpyArg = setSpy1.takeFirst(); + QVERIFY(setSpyArg.at(0).type() == QVariant::Int); + QVERIFY(setSpyArg.at(0).toInt() == 2); + +//==================================================================================== +// barset 2, bar 0 + QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, layout.at(1).center().toPoint()); + QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); + + QCOMPARE(seriesSpy.count(), 1); + QCOMPARE(setSpy1.count(), 0); + QCOMPARE(setSpy2.count(), 1); + + seriesSpyArg = seriesSpy.takeFirst(); + QCOMPARE(qvariant_cast<QBarSet*>(seriesSpyArg.at(1)), set2); + QVERIFY(seriesSpyArg.at(0).type() == QVariant::Int); + QVERIFY(seriesSpyArg.at(0).toInt() == 0); + + setSpyArg = setSpy2.takeFirst(); + QVERIFY(setSpyArg.at(0).type() == QVariant::Int); + QVERIFY(setSpyArg.at(0).toInt() == 0); + +//==================================================================================== +// barset 2, bar 1 + QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, layout.at(3).center().toPoint()); + QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); + + QCOMPARE(seriesSpy.count(), 1); + QCOMPARE(setSpy1.count(), 0); + QCOMPARE(setSpy2.count(), 1); + + seriesSpyArg = seriesSpy.takeFirst(); + QCOMPARE(qvariant_cast<QBarSet*>(seriesSpyArg.at(1)), set2); + QVERIFY(seriesSpyArg.at(0).type() == QVariant::Int); + QVERIFY(seriesSpyArg.at(0).toInt() == 1); + + setSpyArg = setSpy2.takeFirst(); + QVERIFY(setSpyArg.at(0).type() == QVariant::Int); + QVERIFY(setSpyArg.at(0).toInt() == 1); + +//==================================================================================== +// barset 2, bar 2 + QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, layout.at(5).center().toPoint()); + QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); + + QCOMPARE(seriesSpy.count(), 1); + QCOMPARE(setSpy1.count(), 0); + QCOMPARE(setSpy2.count(), 1); + + seriesSpyArg = seriesSpy.takeFirst(); + QCOMPARE(qvariant_cast<QBarSet*>(seriesSpyArg.at(1)), set2); + QVERIFY(seriesSpyArg.at(0).type() == QVariant::Int); + QVERIFY(seriesSpyArg.at(0).toInt() == 2); + + setSpyArg = setSpy2.takeFirst(); + QVERIFY(setSpyArg.at(0).type() == QVariant::Int); + QVERIFY(setSpyArg.at(0).toInt() == 2); +} + +void tst_QHorizontalStackedBarSeries::mouseReleased() +{ + SKIP_IF_CANNOT_TEST_MOUSE_EVENTS(); + + QHorizontalStackedBarSeries* series = new QHorizontalStackedBarSeries(); + + QBarSet* set1 = new QBarSet(QString("set 1")); + *set1 << 10 << 10 << 10; + series->append(set1); + + QBarSet* set2 = new QBarSet(QString("set 2")); + *set2 << 10 << 10 << 10; + series->append(set2); + QList<QBarSet*> barSets = series->barSets(); + + QSignalSpy seriesSpy(series,SIGNAL(released(int,QBarSet*))); + QSignalSpy setSpy1(set1, SIGNAL(released(int))); + QSignalSpy setSpy2(set2, SIGNAL(released(int))); + + QChartView view(new QChart()); + view.resize(400,300); + view.chart()->addSeries(series); + view.show(); + QTest::qWaitForWindowShown(&view); + + // Calculate expected layout for bars + QRectF plotArea = view.chart()->plotArea(); + qreal width = plotArea.width(); + qreal height = plotArea.height(); + qreal rangeY = 3; // 3 values per set + qreal rangeX = 20; // From 0 to 20 because bars are stacked (this should be height of highest stack) + qreal scaleY = (height / rangeY); + qreal scaleX = (width / rangeX); + + qreal setCount = series->count(); + qreal domainMinY = -0.5; // These come from internal domain used by barseries. + qreal domainMinX = 0; // No access to domain from outside, so use hard coded values. + qreal rectHeight = scaleY * series->barWidth(); // On horizontal chart barWidth of the barseries means height of the rect. + + QVector<QRectF> layout; + + // 3 = count of values in set + // Note that rects in this vector will be interleaved (set1 bar0, set2 bar0, set1 bar1, set2 bar1, etc.) + for (int i = 0; i < 3; i++) { + qreal xMax = -scaleX * domainMinX + plotArea.left(); + qreal xMin = -scaleX * domainMinX + plotArea.left(); + for (int set = 0; set < setCount; set++) { + qreal yPos = (domainMinY +0.5 -i) * scaleY + plotArea.bottom() - rectHeight/2; + qreal rectWidth = barSets.at(set)->at(i) * scaleX; + if (rectWidth > 0) { + QRectF rect(xMax, yPos - rectHeight, rectWidth, rectHeight); + layout.append(rect); + xMax += rectWidth; + } else { + QRectF rect(xMin, yPos - rectHeight, rectWidth, rectHeight); + layout.append(rect); + xMin += rectWidth; + } + } + } + +//==================================================================================== +// barset 1, bar 0 + QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, layout.at(0).center().toPoint()); + QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); + + QCOMPARE(seriesSpy.count(), 1); + QCOMPARE(setSpy1.count(), 1); + QCOMPARE(setSpy2.count(), 0); + + QList<QVariant> seriesSpyArg = seriesSpy.takeFirst(); + QCOMPARE(qvariant_cast<QBarSet*>(seriesSpyArg.at(1)), set1); + QVERIFY(seriesSpyArg.at(0).type() == QVariant::Int); + QVERIFY(seriesSpyArg.at(0).toInt() == 0); + + QList<QVariant> setSpyArg = setSpy1.takeFirst(); + QVERIFY(setSpyArg.at(0).type() == QVariant::Int); + QVERIFY(setSpyArg.at(0).toInt() == 0); + +//==================================================================================== +// barset 1, bar 1 + QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, layout.at(2).center().toPoint()); + QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); + + QCOMPARE(seriesSpy.count(), 1); + QCOMPARE(setSpy1.count(), 1); + QCOMPARE(setSpy2.count(), 0); + + seriesSpyArg = seriesSpy.takeFirst(); + QCOMPARE(qvariant_cast<QBarSet*>(seriesSpyArg.at(1)), set1); + QVERIFY(seriesSpyArg.at(0).type() == QVariant::Int); + QVERIFY(seriesSpyArg.at(0).toInt() == 1); + + setSpyArg = setSpy1.takeFirst(); + QVERIFY(setSpyArg.at(0).type() == QVariant::Int); + QVERIFY(setSpyArg.at(0).toInt() == 1); + +//==================================================================================== +// barset 1, bar 2 + QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, layout.at(4).center().toPoint()); + QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); + + QCOMPARE(seriesSpy.count(), 1); + QCOMPARE(setSpy1.count(), 1); + QCOMPARE(setSpy2.count(), 0); + + seriesSpyArg = seriesSpy.takeFirst(); + QCOMPARE(qvariant_cast<QBarSet*>(seriesSpyArg.at(1)), set1); + QVERIFY(seriesSpyArg.at(0).type() == QVariant::Int); + QVERIFY(seriesSpyArg.at(0).toInt() == 2); + + setSpyArg = setSpy1.takeFirst(); + QVERIFY(setSpyArg.at(0).type() == QVariant::Int); + QVERIFY(setSpyArg.at(0).toInt() == 2); + +//==================================================================================== +// barset 2, bar 0 + QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, layout.at(1).center().toPoint()); + QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); + + QCOMPARE(seriesSpy.count(), 1); + QCOMPARE(setSpy1.count(), 0); + QCOMPARE(setSpy2.count(), 1); + + seriesSpyArg = seriesSpy.takeFirst(); + QCOMPARE(qvariant_cast<QBarSet*>(seriesSpyArg.at(1)), set2); + QVERIFY(seriesSpyArg.at(0).type() == QVariant::Int); + QVERIFY(seriesSpyArg.at(0).toInt() == 0); + + setSpyArg = setSpy2.takeFirst(); + QVERIFY(setSpyArg.at(0).type() == QVariant::Int); + QVERIFY(setSpyArg.at(0).toInt() == 0); + +//==================================================================================== +// barset 2, bar 1 + QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, layout.at(3).center().toPoint()); + QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); + + QCOMPARE(seriesSpy.count(), 1); + QCOMPARE(setSpy1.count(), 0); + QCOMPARE(setSpy2.count(), 1); + + seriesSpyArg = seriesSpy.takeFirst(); + QCOMPARE(qvariant_cast<QBarSet*>(seriesSpyArg.at(1)), set2); + QVERIFY(seriesSpyArg.at(0).type() == QVariant::Int); + QVERIFY(seriesSpyArg.at(0).toInt() == 1); + + setSpyArg = setSpy2.takeFirst(); + QVERIFY(setSpyArg.at(0).type() == QVariant::Int); + QVERIFY(setSpyArg.at(0).toInt() == 1); + +//==================================================================================== +// barset 2, bar 2 + QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, layout.at(5).center().toPoint()); + QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); + + QCOMPARE(seriesSpy.count(), 1); + QCOMPARE(setSpy1.count(), 0); + QCOMPARE(setSpy2.count(), 1); + + seriesSpyArg = seriesSpy.takeFirst(); + QCOMPARE(qvariant_cast<QBarSet*>(seriesSpyArg.at(1)), set2); + QVERIFY(seriesSpyArg.at(0).type() == QVariant::Int); + QVERIFY(seriesSpyArg.at(0).toInt() == 2); + + setSpyArg = setSpy2.takeFirst(); + QVERIFY(setSpyArg.at(0).type() == QVariant::Int); + QVERIFY(setSpyArg.at(0).toInt() == 2); +} + +void tst_QHorizontalStackedBarSeries::mouseDoubleClicked() +{ + SKIP_IF_CANNOT_TEST_MOUSE_EVENTS(); + + QHorizontalStackedBarSeries* series = new QHorizontalStackedBarSeries(); + + QBarSet* set1 = new QBarSet(QString("set 1")); + *set1 << 10 << 10 << 10; + series->append(set1); + + QBarSet* set2 = new QBarSet(QString("set 2")); + *set2 << 10 << 10 << 10; + series->append(set2); + QList<QBarSet*> barSets = series->barSets(); + + QSignalSpy seriesSpy(series,SIGNAL(doubleClicked(int,QBarSet*))); + QSignalSpy setSpy1(set1, SIGNAL(doubleClicked(int))); + QSignalSpy setSpy2(set2, SIGNAL(doubleClicked(int))); + + QChartView view(new QChart()); + view.resize(400,300); + view.chart()->addSeries(series); + view.show(); + QTest::qWaitForWindowShown(&view); + + // Calculate expected layout for bars + QRectF plotArea = view.chart()->plotArea(); + qreal width = plotArea.width(); + qreal height = plotArea.height(); + qreal rangeY = 3; // 3 values per set + qreal rangeX = 20; // From 0 to 20 because bars are stacked (this should be height of highest stack) + qreal scaleY = (height / rangeY); + qreal scaleX = (width / rangeX); + + qreal setCount = series->count(); + qreal domainMinY = -0.5; // These come from internal domain used by barseries. + qreal domainMinX = 0; // No access to domain from outside, so use hard coded values. + qreal rectHeight = scaleY * series->barWidth(); // On horizontal chart barWidth of the barseries means height of the rect. + + QVector<QRectF> layout; + + // 3 = count of values in set + // Note that rects in this vector will be interleaved (set1 bar0, set2 bar0, set1 bar1, set2 bar1, etc.) + for (int i = 0; i < 3; i++) { + qreal xMax = -scaleX * domainMinX + plotArea.left(); + qreal xMin = -scaleX * domainMinX + plotArea.left(); + for (int set = 0; set < setCount; set++) { + qreal yPos = (domainMinY +0.5 -i) * scaleY + plotArea.bottom() - rectHeight/2; + qreal rectWidth = barSets.at(set)->at(i) * scaleX; + if (rectWidth > 0) { + QRectF rect(xMax, yPos - rectHeight, rectWidth, rectHeight); + layout.append(rect); + xMax += rectWidth; + } else { + QRectF rect(xMin, yPos - rectHeight, rectWidth, rectHeight); + layout.append(rect); + xMin += rectWidth; + } + } + } + + // barset 1, bar 0 + QTest::mouseDClick(view.viewport(), Qt::LeftButton, 0, layout.at(0).center().toPoint()); + QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); + + QCOMPARE(seriesSpy.count(), 1); + QCOMPARE(setSpy1.count(), 1); + QCOMPARE(setSpy2.count(), 0); + + QList<QVariant> seriesSpyArg = seriesSpy.takeFirst(); + QCOMPARE(qvariant_cast<QBarSet*>(seriesSpyArg.at(1)), set1); + QVERIFY(seriesSpyArg.at(0).type() == QVariant::Int); + QVERIFY(seriesSpyArg.at(0).toInt() == 0); + + QList<QVariant> setSpyArg = setSpy1.takeFirst(); + QVERIFY(setSpyArg.at(0).type() == QVariant::Int); + QVERIFY(setSpyArg.at(0).toInt() == 0); +} QTEST_MAIN(tst_QHorizontalStackedBarSeries) #include "tst_qhorizontalstackedbarseries.moc" diff --git a/tests/auto/qlineseries/tst_qlineseries.cpp b/tests/auto/qlineseries/tst_qlineseries.cpp index aea9ccc9..13f29a14 100644 --- a/tests/auto/qlineseries/tst_qlineseries.cpp +++ b/tests/auto/qlineseries/tst_qlineseries.cpp @@ -36,6 +36,9 @@ public slots: private slots: void qlineseries_data(); void qlineseries(); + void pressedSignal(); + void releasedSignal(); + void doubleClickedSignal(); protected: void pointsVisible_data(); }; @@ -102,6 +105,99 @@ void tst_QLineSeries::qlineseries() QTest::qWaitForWindowShown(m_view); } +void tst_QLineSeries::pressedSignal() +{ + SKIP_IF_CANNOT_TEST_MOUSE_EVENTS(); + + QPointF linePoint(4, 12); + QLineSeries *lineSeries = new QLineSeries(); + lineSeries->append(QPointF(2, 1)); + lineSeries->append(linePoint); + lineSeries->append(QPointF(6, 12)); + + QChartView view; + view.chart()->legend()->setVisible(false); + view.chart()->addSeries(lineSeries); + view.show(); + QTest::qWaitForWindowShown(&view); + + QSignalSpy seriesSpy(lineSeries, SIGNAL(pressed(QPointF))); + + QPointF checkPoint = view.chart()->mapToPosition(linePoint); + QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, checkPoint.toPoint()); + QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); + + QCOMPARE(seriesSpy.count(), 1); + QList<QVariant> seriesSpyArg = seriesSpy.takeFirst(); + // checkPoint is QPointF and for the mouseClick it it's changed to QPoint + // this causes small distinction in decimals so we round it before comparing + QPointF signalPoint = qvariant_cast<QPointF>(seriesSpyArg.at(0)); + QCOMPARE(qRound(signalPoint.x()), qRound(linePoint.x())); + QCOMPARE(qRound(signalPoint.y()), qRound(linePoint.y())); +} + +void tst_QLineSeries::releasedSignal() +{ + SKIP_IF_CANNOT_TEST_MOUSE_EVENTS(); + + QPointF linePoint(4, 12); + QLineSeries *lineSeries = new QLineSeries(); + lineSeries->append(QPointF(2, 20)); + lineSeries->append(linePoint); + lineSeries->append(QPointF(6, 12)); + + QChartView view; + view.chart()->legend()->setVisible(false); + view.chart()->addSeries(lineSeries); + view.show(); + QTest::qWaitForWindowShown(&view); + + QSignalSpy seriesSpy(lineSeries, SIGNAL(released(QPointF))); + + QPointF checkPoint = view.chart()->mapToPosition(linePoint); + QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, checkPoint.toPoint()); + QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); + + QCOMPARE(seriesSpy.count(), 1); + QList<QVariant> seriesSpyArg = seriesSpy.takeFirst(); + // checkPoint is QPointF and for the mouseClick it it's changed to QPoint + // this causes small distinction in decimals so we round it before comparing + QPointF signalPoint = qvariant_cast<QPointF>(seriesSpyArg.at(0)); + QCOMPARE(qRound(signalPoint.x()), qRound(linePoint.x())); + QCOMPARE(qRound(signalPoint.y()), qRound(linePoint.y())); +} + +void tst_QLineSeries::doubleClickedSignal() +{ + SKIP_IF_CANNOT_TEST_MOUSE_EVENTS(); + + QPointF linePoint(4, 12); + QLineSeries *lineSeries = new QLineSeries(); + lineSeries->append(QPointF(2, 20)); + lineSeries->append(linePoint); + lineSeries->append(QPointF(6, 12)); + + QChartView view; + view.chart()->legend()->setVisible(false); + view.chart()->addSeries(lineSeries); + view.show(); + QTest::qWaitForWindowShown(&view); + + QSignalSpy seriesSpy(lineSeries, SIGNAL(doubleClicked(QPointF))); + + QPointF checkPoint = view.chart()->mapToPosition(linePoint); + QTest::mouseDClick(view.viewport(), Qt::LeftButton, 0, checkPoint.toPoint()); + QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); + + QCOMPARE(seriesSpy.count(), 1); + QList<QVariant> seriesSpyArg = seriesSpy.takeFirst(); + // checkPoint is QPointF and for the mouseClick it it's changed to QPoint + // this causes small distinction in decimals so we round it before comparing + QPointF signalPoint = qvariant_cast<QPointF>(seriesSpyArg.at(0)); + QCOMPARE(qRound(signalPoint.x()), qRound(linePoint.x())); + QCOMPARE(qRound(signalPoint.y()), qRound(linePoint.y())); +} + QTEST_MAIN(tst_QLineSeries) #include "tst_qlineseries.moc" diff --git a/tests/auto/qpercentbarseries/tst_qpercentbarseries.cpp b/tests/auto/qpercentbarseries/tst_qpercentbarseries.cpp index e4bab706..a74c6511 100644 --- a/tests/auto/qpercentbarseries/tst_qpercentbarseries.cpp +++ b/tests/auto/qpercentbarseries/tst_qpercentbarseries.cpp @@ -52,6 +52,9 @@ private slots: void mousehovered_data(); void mousehovered(); void zeroValuesInSeries(); + void mousePressed(); + void mouseReleased(); + void mouseDoubleClicked(); private: QPercentBarSeries* m_barseries; @@ -608,6 +611,416 @@ void tst_QPercentBarSeries::zeroValuesInSeries() QTest::qWaitForWindowShown(&view); } +void tst_QPercentBarSeries::mousePressed() +{ + SKIP_IF_CANNOT_TEST_MOUSE_EVENTS(); + + QPercentBarSeries* series = new QPercentBarSeries(); + + QBarSet* set1 = new QBarSet(QString("set 1")); + *set1 << 10 << 10 << 10; + series->append(set1); + + QBarSet* set2 = new QBarSet(QString("set 2")); + *set2 << 10 << 10 << 10; + series->append(set2); + QList<QBarSet*> barSets = series->barSets(); + + QSignalSpy seriesSpy(series,SIGNAL(pressed(int,QBarSet*))); + QSignalSpy setSpy1(set1, SIGNAL(pressed(int))); + QSignalSpy setSpy2(set2, SIGNAL(pressed(int))); + + QChartView view(new QChart()); + view.resize(400,300); + view.chart()->addSeries(series); + view.show(); + QTest::qWaitForWindowShown(&view); + + // Calculate expected layout for bars + QRectF plotArea = view.chart()->plotArea(); + qreal width = plotArea.width(); + qreal height = plotArea.height(); + qreal rangeY = 100; // From 0 to 100 because range is scaled to 100% + qreal rangeX = 3; // 3 values per set + qreal scaleY = (height / rangeY); + qreal scaleX = (width / rangeX); + + qreal setCount = series->count(); + qreal domainMinY = 0; // These come from internal domain used by barseries. + qreal domainMinX = -0.5; // No access to domain from outside, so use hard coded values. + qreal rectWidth = scaleX * series->barWidth(); + + QVector<QRectF> layout; + + // 3 = count of values in set + // Note that rects in this vector will be interleaved (set1 bar0, set2 bar0, set1 bar1, set2 bar1, etc.) + for (int i = 0; i < 3; i++) { + qreal colSum = 20; // Sum of values in column (10 + 10 in our test case) + qreal percentage = (100 / colSum); + qreal yPos = height + scaleY * domainMinY + plotArea.top(); + + for (int set = 0; set < setCount; set++) { + qreal xPos = (i - domainMinX) * scaleX + plotArea.left() - rectWidth/2; + qreal rectHeigth = barSets.at(set)->at(i) * percentage * scaleY; + + QRectF rect(xPos, yPos-rectHeigth, rectWidth, rectHeigth); + layout.append(rect); + yPos -= rectHeigth; + } + } + +//==================================================================================== +// barset 1, bar 0 + QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, layout.at(0).center().toPoint()); + QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); + + QCOMPARE(seriesSpy.count(), 1); + QCOMPARE(setSpy1.count(), 1); + QCOMPARE(setSpy2.count(), 0); + + QList<QVariant> seriesSpyArg = seriesSpy.takeFirst(); + QCOMPARE(qvariant_cast<QBarSet*>(seriesSpyArg.at(1)), set1); + QVERIFY(seriesSpyArg.at(0).type() == QVariant::Int); + QVERIFY(seriesSpyArg.at(0).toInt() == 0); + + QList<QVariant> setSpyArg = setSpy1.takeFirst(); + QVERIFY(setSpyArg.at(0).type() == QVariant::Int); + QVERIFY(setSpyArg.at(0).toInt() == 0); + +//==================================================================================== +// barset 1, bar 1 + QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, layout.at(2).center().toPoint()); + QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); + + QCOMPARE(seriesSpy.count(), 1); + QCOMPARE(setSpy1.count(), 1); + QCOMPARE(setSpy2.count(), 0); + + seriesSpyArg = seriesSpy.takeFirst(); + QCOMPARE(qvariant_cast<QBarSet*>(seriesSpyArg.at(1)), set1); + QVERIFY(seriesSpyArg.at(0).type() == QVariant::Int); + QVERIFY(seriesSpyArg.at(0).toInt() == 1); + + setSpyArg = setSpy1.takeFirst(); + QVERIFY(setSpyArg.at(0).type() == QVariant::Int); + QVERIFY(setSpyArg.at(0).toInt() == 1); + +//==================================================================================== +// barset 1, bar 2 + QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, layout.at(4).center().toPoint()); + QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); + + QCOMPARE(seriesSpy.count(), 1); + QCOMPARE(setSpy1.count(), 1); + QCOMPARE(setSpy2.count(), 0); + + seriesSpyArg = seriesSpy.takeFirst(); + QCOMPARE(qvariant_cast<QBarSet*>(seriesSpyArg.at(1)), set1); + QVERIFY(seriesSpyArg.at(0).type() == QVariant::Int); + QVERIFY(seriesSpyArg.at(0).toInt() == 2); + + setSpyArg = setSpy1.takeFirst(); + QVERIFY(setSpyArg.at(0).type() == QVariant::Int); + QVERIFY(setSpyArg.at(0).toInt() == 2); + +//==================================================================================== +// barset 2, bar 0 + QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, layout.at(1).center().toPoint()); + QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); + + QCOMPARE(seriesSpy.count(), 1); + QCOMPARE(setSpy1.count(), 0); + QCOMPARE(setSpy2.count(), 1); + + seriesSpyArg = seriesSpy.takeFirst(); + QCOMPARE(qvariant_cast<QBarSet*>(seriesSpyArg.at(1)), set2); + QVERIFY(seriesSpyArg.at(0).type() == QVariant::Int); + QVERIFY(seriesSpyArg.at(0).toInt() == 0); + + setSpyArg = setSpy2.takeFirst(); + QVERIFY(setSpyArg.at(0).type() == QVariant::Int); + QVERIFY(setSpyArg.at(0).toInt() == 0); + +//==================================================================================== +// barset 2, bar 1 + QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, layout.at(3).center().toPoint()); + QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); + + QCOMPARE(seriesSpy.count(), 1); + QCOMPARE(setSpy1.count(), 0); + QCOMPARE(setSpy2.count(), 1); + + seriesSpyArg = seriesSpy.takeFirst(); + QCOMPARE(qvariant_cast<QBarSet*>(seriesSpyArg.at(1)), set2); + QVERIFY(seriesSpyArg.at(0).type() == QVariant::Int); + QVERIFY(seriesSpyArg.at(0).toInt() == 1); + + setSpyArg = setSpy2.takeFirst(); + QVERIFY(setSpyArg.at(0).type() == QVariant::Int); + QVERIFY(setSpyArg.at(0).toInt() == 1); + +//==================================================================================== +// barset 2, bar 2 + QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, layout.at(5).center().toPoint()); + QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); + + QCOMPARE(seriesSpy.count(), 1); + QCOMPARE(setSpy1.count(), 0); + QCOMPARE(setSpy2.count(), 1); + + seriesSpyArg = seriesSpy.takeFirst(); + QCOMPARE(qvariant_cast<QBarSet*>(seriesSpyArg.at(1)), set2); + QVERIFY(seriesSpyArg.at(0).type() == QVariant::Int); + QVERIFY(seriesSpyArg.at(0).toInt() == 2); + + setSpyArg = setSpy2.takeFirst(); + QVERIFY(setSpyArg.at(0).type() == QVariant::Int); + QVERIFY(setSpyArg.at(0).toInt() == 2); +} + +void tst_QPercentBarSeries::mouseReleased() +{ + SKIP_IF_CANNOT_TEST_MOUSE_EVENTS(); + + QPercentBarSeries* series = new QPercentBarSeries(); + + QBarSet* set1 = new QBarSet(QString("set 1")); + *set1 << 10 << 10 << 10; + series->append(set1); + + QBarSet* set2 = new QBarSet(QString("set 2")); + *set2 << 10 << 10 << 10; + series->append(set2); + QList<QBarSet*> barSets = series->barSets(); + + QSignalSpy seriesSpy(series,SIGNAL(released(int,QBarSet*))); + QSignalSpy setSpy1(set1, SIGNAL(released(int))); + QSignalSpy setSpy2(set2, SIGNAL(released(int))); + + QChartView view(new QChart()); + view.resize(400,300); + view.chart()->addSeries(series); + view.show(); + QTest::qWaitForWindowShown(&view); + + // Calculate expected layout for bars + QRectF plotArea = view.chart()->plotArea(); + qreal width = plotArea.width(); + qreal height = plotArea.height(); + qreal rangeY = 100; // From 0 to 100 because range is scaled to 100% + qreal rangeX = 3; // 3 values per set + qreal scaleY = (height / rangeY); + qreal scaleX = (width / rangeX); + + qreal setCount = series->count(); + qreal domainMinY = 0; // These come from internal domain used by barseries. + qreal domainMinX = -0.5; // No access to domain from outside, so use hard coded values. + qreal rectWidth = scaleX * series->barWidth(); + + QVector<QRectF> layout; + + // 3 = count of values in set + // Note that rects in this vector will be interleaved (set1 bar0, set2 bar0, set1 bar1, set2 bar1, etc.) + for (int i = 0; i < 3; i++) { + qreal colSum = 20; // Sum of values in column (10 + 10 in our test case) + qreal percentage = (100 / colSum); + qreal yPos = height + scaleY * domainMinY + plotArea.top(); + + for (int set = 0; set < setCount; set++) { + qreal xPos = (i - domainMinX) * scaleX + plotArea.left() - rectWidth/2; + qreal rectHeigth = barSets.at(set)->at(i) * percentage * scaleY; + + QRectF rect(xPos, yPos-rectHeigth, rectWidth, rectHeigth); + layout.append(rect); + yPos -= rectHeigth; + } + } + +//==================================================================================== +// barset 1, bar 0 + QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, layout.at(0).center().toPoint()); + QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); + + QCOMPARE(seriesSpy.count(), 1); + QCOMPARE(setSpy1.count(), 1); + QCOMPARE(setSpy2.count(), 0); + + QList<QVariant> seriesSpyArg = seriesSpy.takeFirst(); + QCOMPARE(qvariant_cast<QBarSet*>(seriesSpyArg.at(1)), set1); + QVERIFY(seriesSpyArg.at(0).type() == QVariant::Int); + QVERIFY(seriesSpyArg.at(0).toInt() == 0); + + QList<QVariant> setSpyArg = setSpy1.takeFirst(); + QVERIFY(setSpyArg.at(0).type() == QVariant::Int); + QVERIFY(setSpyArg.at(0).toInt() == 0); + +//==================================================================================== +// barset 1, bar 1 + QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, layout.at(2).center().toPoint()); + QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); + + QCOMPARE(seriesSpy.count(), 1); + QCOMPARE(setSpy1.count(), 1); + QCOMPARE(setSpy2.count(), 0); + + seriesSpyArg = seriesSpy.takeFirst(); + QCOMPARE(qvariant_cast<QBarSet*>(seriesSpyArg.at(1)), set1); + QVERIFY(seriesSpyArg.at(0).type() == QVariant::Int); + QVERIFY(seriesSpyArg.at(0).toInt() == 1); + + setSpyArg = setSpy1.takeFirst(); + QVERIFY(setSpyArg.at(0).type() == QVariant::Int); + QVERIFY(setSpyArg.at(0).toInt() == 1); + +//==================================================================================== +// barset 1, bar 2 + QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, layout.at(4).center().toPoint()); + QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); + + QCOMPARE(seriesSpy.count(), 1); + QCOMPARE(setSpy1.count(), 1); + QCOMPARE(setSpy2.count(), 0); + + seriesSpyArg = seriesSpy.takeFirst(); + QCOMPARE(qvariant_cast<QBarSet*>(seriesSpyArg.at(1)), set1); + QVERIFY(seriesSpyArg.at(0).type() == QVariant::Int); + QVERIFY(seriesSpyArg.at(0).toInt() == 2); + + setSpyArg = setSpy1.takeFirst(); + QVERIFY(setSpyArg.at(0).type() == QVariant::Int); + QVERIFY(setSpyArg.at(0).toInt() == 2); + +//==================================================================================== +// barset 2, bar 0 + QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, layout.at(1).center().toPoint()); + QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); + + QCOMPARE(seriesSpy.count(), 1); + QCOMPARE(setSpy1.count(), 0); + QCOMPARE(setSpy2.count(), 1); + + seriesSpyArg = seriesSpy.takeFirst(); + QCOMPARE(qvariant_cast<QBarSet*>(seriesSpyArg.at(1)), set2); + QVERIFY(seriesSpyArg.at(0).type() == QVariant::Int); + QVERIFY(seriesSpyArg.at(0).toInt() == 0); + + setSpyArg = setSpy2.takeFirst(); + QVERIFY(setSpyArg.at(0).type() == QVariant::Int); + QVERIFY(setSpyArg.at(0).toInt() == 0); + +//==================================================================================== +// barset 2, bar 1 + QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, layout.at(3).center().toPoint()); + QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); + + QCOMPARE(seriesSpy.count(), 1); + QCOMPARE(setSpy1.count(), 0); + QCOMPARE(setSpy2.count(), 1); + + seriesSpyArg = seriesSpy.takeFirst(); + QCOMPARE(qvariant_cast<QBarSet*>(seriesSpyArg.at(1)), set2); + QVERIFY(seriesSpyArg.at(0).type() == QVariant::Int); + QVERIFY(seriesSpyArg.at(0).toInt() == 1); + + setSpyArg = setSpy2.takeFirst(); + QVERIFY(setSpyArg.at(0).type() == QVariant::Int); + QVERIFY(setSpyArg.at(0).toInt() == 1); + +//==================================================================================== +// barset 2, bar 2 + QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, layout.at(5).center().toPoint()); + QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); + + QCOMPARE(seriesSpy.count(), 1); + QCOMPARE(setSpy1.count(), 0); + QCOMPARE(setSpy2.count(), 1); + + seriesSpyArg = seriesSpy.takeFirst(); + QCOMPARE(qvariant_cast<QBarSet*>(seriesSpyArg.at(1)), set2); + QVERIFY(seriesSpyArg.at(0).type() == QVariant::Int); + QVERIFY(seriesSpyArg.at(0).toInt() == 2); + + setSpyArg = setSpy2.takeFirst(); + QVERIFY(setSpyArg.at(0).type() == QVariant::Int); + QVERIFY(setSpyArg.at(0).toInt() == 2); +} + +void tst_QPercentBarSeries::mouseDoubleClicked() +{ + SKIP_IF_CANNOT_TEST_MOUSE_EVENTS(); + + QPercentBarSeries* series = new QPercentBarSeries(); + + QBarSet* set1 = new QBarSet(QString("set 1")); + *set1 << 10 << 10 << 10; + series->append(set1); + + QBarSet* set2 = new QBarSet(QString("set 2")); + *set2 << 10 << 10 << 10; + series->append(set2); + QList<QBarSet*> barSets = series->barSets(); + + QSignalSpy seriesSpy(series,SIGNAL(doubleClicked(int,QBarSet*))); + QSignalSpy setSpy1(set1, SIGNAL(doubleClicked(int))); + QSignalSpy setSpy2(set2, SIGNAL(doubleClicked(int))); + + QChartView view(new QChart()); + view.resize(400,300); + view.chart()->addSeries(series); + view.show(); + QTest::qWaitForWindowShown(&view); + + // Calculate expected layout for bars + QRectF plotArea = view.chart()->plotArea(); + qreal width = plotArea.width(); + qreal height = plotArea.height(); + qreal rangeY = 100; // From 0 to 100 because range is scaled to 100% + qreal rangeX = 3; // 3 values per set + qreal scaleY = (height / rangeY); + qreal scaleX = (width / rangeX); + + qreal setCount = series->count(); + qreal domainMinY = 0; // These come from internal domain used by barseries. + qreal domainMinX = -0.5; // No access to domain from outside, so use hard coded values. + qreal rectWidth = scaleX * series->barWidth(); + + QVector<QRectF> layout; + + // 3 = count of values in set + // Note that rects in this vector will be interleaved (set1 bar0, set2 bar0, set1 bar1, set2 bar1, etc.) + for (int i = 0; i < 3; i++) { + qreal colSum = 20; // Sum of values in column (10 + 10 in our test case) + qreal percentage = (100 / colSum); + qreal yPos = height + scaleY * domainMinY + plotArea.top(); + + for (int set = 0; set < setCount; set++) { + qreal xPos = (i - domainMinX) * scaleX + plotArea.left() - rectWidth/2; + qreal rectHeigth = barSets.at(set)->at(i) * percentage * scaleY; + + QRectF rect(xPos, yPos-rectHeigth, rectWidth, rectHeigth); + layout.append(rect); + yPos -= rectHeigth; + } + } + + // barset 1, bar 0 + QTest::mouseDClick(view.viewport(), Qt::LeftButton, 0, layout.at(0).center().toPoint()); + QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); + + QCOMPARE(seriesSpy.count(), 1); + QCOMPARE(setSpy1.count(), 1); + QCOMPARE(setSpy2.count(), 0); + + QList<QVariant> seriesSpyArg = seriesSpy.takeFirst(); + QCOMPARE(qvariant_cast<QBarSet*>(seriesSpyArg.at(1)), set1); + QVERIFY(seriesSpyArg.at(0).type() == QVariant::Int); + QVERIFY(seriesSpyArg.at(0).toInt() == 0); + + QList<QVariant> setSpyArg = setSpy1.takeFirst(); + QVERIFY(setSpyArg.at(0).type() == QVariant::Int); + QVERIFY(setSpyArg.at(0).toInt() == 0); +} + QTEST_MAIN(tst_QPercentBarSeries) #include "tst_qpercentbarseries.moc" diff --git a/tests/auto/qpieseries/tst_qpieseries.cpp b/tests/auto/qpieseries/tst_qpieseries.cpp index ce7e8d54..9d975c5a 100644 --- a/tests/auto/qpieseries/tst_qpieseries.cpp +++ b/tests/auto/qpieseries/tst_qpieseries.cpp @@ -57,6 +57,9 @@ private slots: void hoverSignal(); void sliceSeries(); void destruction(); + void pressedSignal(); + void releasedSignal(); + void doubleClickedSignal(); private: void verifyCalculatedData(const QPieSeries &series, bool *ok); @@ -652,6 +655,139 @@ QList<QPoint> tst_qpieseries::slicePoints(QRectF rect) return points; } +void tst_qpieseries::pressedSignal() +{ + // NOTE: + // This test is the same as tst_qpieslice::pressedSignal() + // Just for different signals. + + SKIP_IF_CANNOT_TEST_MOUSE_EVENTS(); + + // add some slices + QPieSlice *s1 = m_series->append("slice 1", 1); + QPieSlice *s2 = m_series->append("slice 2", 1); + QPieSlice *s3 = m_series->append("slice 3", 1); + QPieSlice *s4 = m_series->append("slice 4", 1); + QSignalSpy clickSpy(m_series, SIGNAL(pressed(QPieSlice*))); + + // add series to the chart + m_view->chart()->legend()->setVisible(false); + m_view->chart()->addSeries(m_series); + m_view->show(); + QTest::qWaitForWindowShown(m_view); + + // test maximum size + m_series->setPieSize(1.0); + QRectF pieRect = m_view->chart()->plotArea(); + QList<QPoint> points = slicePoints(pieRect); + QTest::mouseClick(m_view->viewport(), Qt::LeftButton, 0, points.at(0)); + QTest::mouseClick(m_view->viewport(), Qt::LeftButton, 0, points.at(1)); + QTest::mouseClick(m_view->viewport(), Qt::LeftButton, 0, points.at(2)); + QTest::mouseClick(m_view->viewport(), Qt::LeftButton, 0, points.at(3)); + TRY_COMPARE(clickSpy.count(), 4); + QCOMPARE(qvariant_cast<QPieSlice*>(clickSpy.at(0).at(0)), s1); + QCOMPARE(qvariant_cast<QPieSlice*>(clickSpy.at(1).at(0)), s2); + QCOMPARE(qvariant_cast<QPieSlice*>(clickSpy.at(2).at(0)), s3); + QCOMPARE(qvariant_cast<QPieSlice*>(clickSpy.at(3).at(0)), s4); + clickSpy.clear(); + + // test half size + m_series->setPieSize(0.5); + m_series->setVerticalPosition(0.25); + m_series->setHorizontalPosition(0.25); + pieRect = QRectF(m_view->chart()->plotArea().topLeft(), m_view->chart()->plotArea().center()); + points = slicePoints(pieRect); + QTest::mouseClick(m_view->viewport(), Qt::LeftButton, 0, points.at(0)); + QTest::mouseClick(m_view->viewport(), Qt::LeftButton, 0, points.at(1)); + QTest::mouseClick(m_view->viewport(), Qt::LeftButton, 0, points.at(2)); + QTest::mouseClick(m_view->viewport(), Qt::LeftButton, 0, points.at(3)); + TRY_COMPARE(clickSpy.count(), 4); + QCOMPARE(qvariant_cast<QPieSlice*>(clickSpy.at(0).at(0)), s1); + QCOMPARE(qvariant_cast<QPieSlice*>(clickSpy.at(1).at(0)), s2); + QCOMPARE(qvariant_cast<QPieSlice*>(clickSpy.at(2).at(0)), s3); + QCOMPARE(qvariant_cast<QPieSlice*>(clickSpy.at(3).at(0)), s4); +} + +void tst_qpieseries::releasedSignal() +{ + // NOTE: + // This test is the same as tst_qpieslice::pressedSignal() + // Just for different signals. + + SKIP_IF_CANNOT_TEST_MOUSE_EVENTS(); + + // add some slices + QPieSlice *s1 = m_series->append("slice 1", 1); + QPieSlice *s2 = m_series->append("slice 2", 1); + QPieSlice *s3 = m_series->append("slice 3", 1); + QPieSlice *s4 = m_series->append("slice 4", 1); + QSignalSpy clickSpy(m_series, SIGNAL(released(QPieSlice*))); + + // add series to the chart + m_view->chart()->legend()->setVisible(false); + m_view->chart()->addSeries(m_series); + m_view->show(); + QTest::qWaitForWindowShown(m_view); + + // test maximum size + m_series->setPieSize(1.0); + QRectF pieRect = m_view->chart()->plotArea(); + QList<QPoint> points = slicePoints(pieRect); + QTest::mouseClick(m_view->viewport(), Qt::LeftButton, 0, points.at(0)); + QTest::mouseClick(m_view->viewport(), Qt::LeftButton, 0, points.at(1)); + QTest::mouseClick(m_view->viewport(), Qt::LeftButton, 0, points.at(2)); + QTest::mouseClick(m_view->viewport(), Qt::LeftButton, 0, points.at(3)); + TRY_COMPARE(clickSpy.count(), 4); + QCOMPARE(qvariant_cast<QPieSlice*>(clickSpy.at(0).at(0)), s1); + QCOMPARE(qvariant_cast<QPieSlice*>(clickSpy.at(1).at(0)), s2); + QCOMPARE(qvariant_cast<QPieSlice*>(clickSpy.at(2).at(0)), s3); + QCOMPARE(qvariant_cast<QPieSlice*>(clickSpy.at(3).at(0)), s4); + clickSpy.clear(); + + // test half size + m_series->setPieSize(0.5); + m_series->setVerticalPosition(0.25); + m_series->setHorizontalPosition(0.25); + pieRect = QRectF(m_view->chart()->plotArea().topLeft(), m_view->chart()->plotArea().center()); + points = slicePoints(pieRect); + QTest::mouseClick(m_view->viewport(), Qt::LeftButton, 0, points.at(0)); + QTest::mouseClick(m_view->viewport(), Qt::LeftButton, 0, points.at(1)); + QTest::mouseClick(m_view->viewport(), Qt::LeftButton, 0, points.at(2)); + QTest::mouseClick(m_view->viewport(), Qt::LeftButton, 0, points.at(3)); + TRY_COMPARE(clickSpy.count(), 4); + QCOMPARE(qvariant_cast<QPieSlice*>(clickSpy.at(0).at(0)), s1); + QCOMPARE(qvariant_cast<QPieSlice*>(clickSpy.at(1).at(0)), s2); + QCOMPARE(qvariant_cast<QPieSlice*>(clickSpy.at(2).at(0)), s3); + QCOMPARE(qvariant_cast<QPieSlice*>(clickSpy.at(3).at(0)), s4); +} + +void tst_qpieseries::doubleClickedSignal() +{ + // NOTE: + // This test is the same as tst_qpieslice::pressedSignal() + // Just for different signals. + + SKIP_IF_CANNOT_TEST_MOUSE_EVENTS(); + + // add some slices + QPieSlice *s1 = m_series->append("slice 1", 1); + QSignalSpy clickSpy(m_series, SIGNAL(doubleClicked(QPieSlice*))); + + // add series to the chart + m_view->chart()->legend()->setVisible(false); + m_view->chart()->addSeries(m_series); + m_view->show(); + QTest::qWaitForWindowShown(m_view); + + // test maximum size + m_series->setPieSize(1.0); + QRectF pieRect = m_view->chart()->plotArea(); + QList<QPoint> points = slicePoints(pieRect); + QTest::mouseDClick(m_view->viewport(), Qt::LeftButton, 0, points.at(0)); + TRY_COMPARE(clickSpy.count(), 1); + QCOMPARE(qvariant_cast<QPieSlice*>(clickSpy.at(0).at(0)), s1); +} + QTEST_MAIN(tst_qpieseries) #include "tst_qpieseries.moc" diff --git a/tests/auto/qpieslice/tst_qpieslice.cpp b/tests/auto/qpieslice/tst_qpieslice.cpp index 16099cfd..9887d36b 100644 --- a/tests/auto/qpieslice/tst_qpieslice.cpp +++ b/tests/auto/qpieslice/tst_qpieslice.cpp @@ -43,6 +43,9 @@ private slots: void customize(); void clickedSignal(); void hoverSignal(); + void pressedSignal(); + void releasedSignal(); + void doubleClickedSignal(); private: QList<QPoint> slicePoints(QRectF rect); @@ -335,6 +338,114 @@ QList<QPoint> tst_qpieslice::slicePoints(QRectF rect) return points; } +void tst_qpieslice::pressedSignal() +{ + // NOTE: + // This test is the same as tst_qpieseries::pressedSignal() + // Just for different signals. + + SKIP_IF_CANNOT_TEST_MOUSE_EVENTS(); + + // create a pie series + QPieSeries *series = new QPieSeries(); + QPieSlice *s1 = series->append("slice 1", 1); + QPieSlice *s2 = series->append("slice 2", 1); + QPieSlice *s3 = series->append("slice 3", 1); + QPieSlice *s4 = series->append("slice 4", 1); + QSignalSpy clickSpy1(s1, SIGNAL(pressed())); + QSignalSpy clickSpy2(s2, SIGNAL(pressed())); + QSignalSpy clickSpy3(s3, SIGNAL(pressed())); + QSignalSpy clickSpy4(s4, SIGNAL(pressed())); + + // add series to the chart + QChartView view; + view.chart()->legend()->setVisible(false); + view.chart()->addSeries(series); + view.show(); + QTest::qWaitForWindowShown(&view); + + // simulate clicks + series->setPieSize(1.0); + QRectF pieRect = view.chart()->plotArea(); + QList<QPoint> points = slicePoints(pieRect); + QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, points.at(0)); + QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, points.at(1)); + QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, points.at(2)); + QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, points.at(3)); + QCOMPARE(clickSpy1.count(), 1); + QCOMPARE(clickSpy2.count(), 1); + QCOMPARE(clickSpy3.count(), 1); + QCOMPARE(clickSpy4.count(), 1); +} + +void tst_qpieslice::releasedSignal() +{ + // NOTE: + // This test is the same as tst_qpieseries::releasedSignal() + // Just for different signals. + + SKIP_IF_CANNOT_TEST_MOUSE_EVENTS(); + + // create a pie series + QPieSeries *series = new QPieSeries(); + QPieSlice *s1 = series->append("slice 1", 1); + QPieSlice *s2 = series->append("slice 2", 1); + QPieSlice *s3 = series->append("slice 3", 1); + QPieSlice *s4 = series->append("slice 4", 1); + QSignalSpy clickSpy1(s1, SIGNAL(released())); + QSignalSpy clickSpy2(s2, SIGNAL(released())); + QSignalSpy clickSpy3(s3, SIGNAL(released())); + QSignalSpy clickSpy4(s4, SIGNAL(released())); + + // add series to the chart + QChartView view; + view.chart()->legend()->setVisible(false); + view.chart()->addSeries(series); + view.show(); + QTest::qWaitForWindowShown(&view); + + // simulate clicks + series->setPieSize(1.0); + QRectF pieRect = view.chart()->plotArea(); + QList<QPoint> points = slicePoints(pieRect); + QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, points.at(0)); + QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, points.at(1)); + QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, points.at(2)); + QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, points.at(3)); + QCOMPARE(clickSpy1.count(), 1); + QCOMPARE(clickSpy2.count(), 1); + QCOMPARE(clickSpy3.count(), 1); + QCOMPARE(clickSpy4.count(), 1); +} + +void tst_qpieslice::doubleClickedSignal() +{ + // NOTE: + // This test is the same as tst_qpieseries::doubleClickedSignal() + // Just for different signals. + + SKIP_IF_CANNOT_TEST_MOUSE_EVENTS(); + + // create a pie series + QPieSeries *series = new QPieSeries(); + QPieSlice *s1 = series->append("slice 1", 1); + QSignalSpy clickSpy1(s1, SIGNAL(doubleClicked())); + + // add series to the chart + QChartView view; + view.chart()->legend()->setVisible(false); + view.chart()->addSeries(series); + view.show(); + QTest::qWaitForWindowShown(&view); + + // simulate clicks + series->setPieSize(1.0); + QRectF pieRect = view.chart()->plotArea(); + QList<QPoint> points = slicePoints(pieRect); + QTest::mouseDClick(view.viewport(), Qt::LeftButton, 0, points.at(0)); + QCOMPARE(clickSpy1.count(), 1); +} + QTEST_MAIN(tst_qpieslice) #include "tst_qpieslice.moc" diff --git a/tests/auto/qscatterseries/tst_qscatterseries.cpp b/tests/auto/qscatterseries/tst_qscatterseries.cpp index c68d9999..3872c7bf 100644 --- a/tests/auto/qscatterseries/tst_qscatterseries.cpp +++ b/tests/auto/qscatterseries/tst_qscatterseries.cpp @@ -36,6 +36,9 @@ private slots: void qscatterseries_data(); void qscatterseries(); void scatterChangedSignals(); + void pressedSignal(); + void releasedSignal(); + void doubleClickedSignal(); protected: void pointsVisible_data(); @@ -126,6 +129,99 @@ void tst_QScatterSeries::scatterChangedSignals() TRY_COMPARE(colorSpy.count(), 2); } +void tst_QScatterSeries::pressedSignal() +{ + SKIP_IF_CANNOT_TEST_MOUSE_EVENTS(); + + QPointF scatterPoint(4, 12); + QScatterSeries *scatterSeries = new QScatterSeries(); + scatterSeries->append(QPointF(2, 1)); + scatterSeries->append(scatterPoint); + scatterSeries->append(QPointF(6, 12)); + + QChartView view; + view.chart()->legend()->setVisible(false); + view.chart()->addSeries(scatterSeries); + view.show(); + QTest::qWaitForWindowShown(&view); + + QSignalSpy seriesSpy(scatterSeries, SIGNAL(pressed(QPointF))); + + QPointF checkPoint = view.chart()->mapToPosition(scatterPoint); + QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, checkPoint.toPoint()); + QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); + + QCOMPARE(seriesSpy.count(), 1); + QList<QVariant> seriesSpyArg = seriesSpy.takeFirst(); + // checkPoint is QPointF and for the mouseClick it it's changed to QPoint + // this causes small distinction in decimals so we round it before comparing + QPointF signalPoint = qvariant_cast<QPointF>(seriesSpyArg.at(0)); + QCOMPARE(qRound(signalPoint.x()), qRound(scatterPoint.x())); + QCOMPARE(qRound(signalPoint.y()), qRound(scatterPoint.y())); +} + +void tst_QScatterSeries::releasedSignal() +{ + SKIP_IF_CANNOT_TEST_MOUSE_EVENTS(); + + QPointF scatterPoint(4, 12); + QScatterSeries *scatterSeries = new QScatterSeries(); + scatterSeries->append(QPointF(2, 1)); + scatterSeries->append(scatterPoint); + scatterSeries->append(QPointF(6, 12)); + + QChartView view; + view.chart()->legend()->setVisible(false); + view.chart()->addSeries(scatterSeries); + view.show(); + QTest::qWaitForWindowShown(&view); + + QSignalSpy seriesSpy(scatterSeries, SIGNAL(released(QPointF))); + + QPointF checkPoint = view.chart()->mapToPosition(scatterPoint); + QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, checkPoint.toPoint()); + QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); + + QCOMPARE(seriesSpy.count(), 1); + QList<QVariant> seriesSpyArg = seriesSpy.takeFirst(); + // checkPoint is QPointF and for the mouseClick it it's changed to QPoint + // this causes small distinction in decimals so we round it before comparing + QPointF signalPoint = qvariant_cast<QPointF>(seriesSpyArg.at(0)); + QCOMPARE(qRound(signalPoint.x()), qRound(scatterPoint.x())); + QCOMPARE(qRound(signalPoint.y()), qRound(scatterPoint.y())); +} + +void tst_QScatterSeries::doubleClickedSignal() +{ + SKIP_IF_CANNOT_TEST_MOUSE_EVENTS(); + + QPointF scatterPoint(4, 12); + QScatterSeries *scatterSeries = new QScatterSeries(); + scatterSeries->append(QPointF(2, 1)); + scatterSeries->append(scatterPoint); + scatterSeries->append(QPointF(6, 12)); + + QChartView view; + view.chart()->legend()->setVisible(false); + view.chart()->addSeries(scatterSeries); + view.show(); + QTest::qWaitForWindowShown(&view); + + QSignalSpy seriesSpy(scatterSeries, SIGNAL(doubleClicked(QPointF))); + + QPointF checkPoint = view.chart()->mapToPosition(scatterPoint); + QTest::mouseDClick(view.viewport(), Qt::LeftButton, 0, checkPoint.toPoint()); + QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); + + QCOMPARE(seriesSpy.count(), 1); + QList<QVariant> seriesSpyArg = seriesSpy.takeFirst(); + // checkPoint is QPointF and for the mouseClick it it's changed to QPoint + // this causes small distinction in decimals so we round it before comparing + QPointF signalPoint = qvariant_cast<QPointF>(seriesSpyArg.at(0)); + QCOMPARE(qRound(signalPoint.x()), qRound(scatterPoint.x())); + QCOMPARE(qRound(signalPoint.y()), qRound(scatterPoint.y())); +} + QTEST_MAIN(tst_QScatterSeries) #include "tst_qscatterseries.moc" diff --git a/tests/auto/qsplineseries/tst_qsplineseries.cpp b/tests/auto/qsplineseries/tst_qsplineseries.cpp index b72ac81d..8041d28b 100644 --- a/tests/auto/qsplineseries/tst_qsplineseries.cpp +++ b/tests/auto/qsplineseries/tst_qsplineseries.cpp @@ -35,6 +35,9 @@ public slots: private slots: void qsplineseries_data(); void qsplineseries(); + void pressedSignal(); + void releasedSignal(); + void doubleClickedSignal(); protected: void pointsVisible_data(); }; @@ -95,6 +98,98 @@ void tst_QSplineSeries::qsplineseries() QTest::qWaitForWindowShown(m_view); } +void tst_QSplineSeries::pressedSignal() +{ + SKIP_IF_CANNOT_TEST_MOUSE_EVENTS(); + + QPointF splinePoint(4, 12); + QSplineSeries *splineSeries = new QSplineSeries(); + splineSeries->append(QPointF(2, 1)); + splineSeries->append(splinePoint); + splineSeries->append(QPointF(6, 12)); + + QChartView view; + view.chart()->legend()->setVisible(false); + view.chart()->addSeries(splineSeries); + view.show(); + QTest::qWaitForWindowShown(&view); + + QSignalSpy seriesSpy(splineSeries, SIGNAL(pressed(QPointF))); + + QPointF checkPoint = view.chart()->mapToPosition(splinePoint); + QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, checkPoint.toPoint()); + QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); + + QCOMPARE(seriesSpy.count(), 1); + QList<QVariant> seriesSpyArg = seriesSpy.takeFirst(); + // checkPoint is QPointF and for the mouseClick it it's changed to QPoint + // this causes small distinction in decimals so we round it before comparing + QPointF signalPoint = qvariant_cast<QPointF>(seriesSpyArg.at(0)); + QCOMPARE(qRound(signalPoint.x()), qRound(splinePoint.x())); + QCOMPARE(qRound(signalPoint.y()), qRound(splinePoint.y())); +} + +void tst_QSplineSeries::releasedSignal() +{ + SKIP_IF_CANNOT_TEST_MOUSE_EVENTS(); + + QPointF splinePoint(4, 12); + QSplineSeries *splineSeries = new QSplineSeries(); + splineSeries->append(QPointF(2, 20)); + splineSeries->append(splinePoint); + splineSeries->append(QPointF(6, 12)); + + QChartView view; + view.chart()->legend()->setVisible(false); + view.chart()->addSeries(splineSeries); + view.show(); + QTest::qWaitForWindowShown(&view); + + QSignalSpy seriesSpy(splineSeries, SIGNAL(released(QPointF))); + + QPointF checkPoint = view.chart()->mapToPosition(splinePoint); + QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, checkPoint.toPoint()); + QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); + + QCOMPARE(seriesSpy.count(), 1); + QList<QVariant> seriesSpyArg = seriesSpy.takeFirst(); + // checkPoint is QPointF and for the mouseClick it it's changed to QPoint + // this causes small distinction in decimals so we round it before comparing + QPointF signalPoint = qvariant_cast<QPointF>(seriesSpyArg.at(0)); + QCOMPARE(qRound(signalPoint.x()), qRound(splinePoint.x())); + QCOMPARE(qRound(signalPoint.y()), qRound(splinePoint.y())); +} + +void tst_QSplineSeries::doubleClickedSignal() +{ + SKIP_IF_CANNOT_TEST_MOUSE_EVENTS(); + + QPointF splinePoint(4, 12); + QSplineSeries *splineSeries = new QSplineSeries(); + splineSeries->append(QPointF(2, 20)); + splineSeries->append(splinePoint); + splineSeries->append(QPointF(6, 12)); + + QChartView view; + view.chart()->legend()->setVisible(false); + view.chart()->addSeries(splineSeries); + view.show(); + QTest::qWaitForWindowShown(&view); + + QSignalSpy seriesSpy(splineSeries, SIGNAL(doubleClicked(QPointF))); + + QPointF checkPoint = view.chart()->mapToPosition(splinePoint); + QTest::mouseDClick(view.viewport(), Qt::LeftButton, 0, checkPoint.toPoint()); + QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); + + QCOMPARE(seriesSpy.count(), 1); + QList<QVariant> seriesSpyArg = seriesSpy.takeFirst(); + // checkPoint is QPointF and for the mouseClick it it's changed to QPoint + // this causes small distinction in decimals so we round it before comparing + QPointF signalPoint = qvariant_cast<QPointF>(seriesSpyArg.at(0)); + QCOMPARE(qRound(signalPoint.x()), qRound(splinePoint.x())); + QCOMPARE(qRound(signalPoint.y()), qRound(splinePoint.y())); +} QTEST_MAIN(tst_QSplineSeries) #include "tst_qsplineseries.moc" diff --git a/tests/auto/qstackedbarseries/tst_qstackedbarseries.cpp b/tests/auto/qstackedbarseries/tst_qstackedbarseries.cpp index a5df87d2..bda94704 100644 --- a/tests/auto/qstackedbarseries/tst_qstackedbarseries.cpp +++ b/tests/auto/qstackedbarseries/tst_qstackedbarseries.cpp @@ -51,6 +51,9 @@ private slots: void mouseclicked(); void mousehovered_data(); void mousehovered(); + void mousePressed(); + void mouseReleased(); + void mouseDoubleClicked(); private: QStackedBarSeries* m_barseries; @@ -595,6 +598,424 @@ void tst_QStackedBarSeries::mousehovered() QVERIFY(setIndexSpyArg.at(1).toInt() == 1); } +void tst_QStackedBarSeries::mousePressed() +{ + SKIP_IF_CANNOT_TEST_MOUSE_EVENTS(); + + QStackedBarSeries* series = new QStackedBarSeries(); + + QBarSet* set1 = new QBarSet(QString("set 1")); + *set1 << 10 << 10 << 10; + series->append(set1); + + QBarSet* set2 = new QBarSet(QString("set 2")); + *set2 << 10 << 10 << 10; + series->append(set2); + QList<QBarSet*> barSets = series->barSets(); + + QSignalSpy seriesSpy(series,SIGNAL(pressed(int,QBarSet*))); + QSignalSpy setSpy1(set1, SIGNAL(pressed(int))); + QSignalSpy setSpy2(set2, SIGNAL(pressed(int))); + + QChartView view(new QChart()); + view.resize(400,300); + view.chart()->addSeries(series); + view.show(); + QTest::qWaitForWindowShown(&view); + + // Calculate expected layout for bars + QRectF plotArea = view.chart()->plotArea(); + qreal width = plotArea.width(); + qreal height = plotArea.height(); + qreal rangeY = 20; // From 0 to 20 because sets are stacked (this should be height of highest stack) + qreal rangeX = 3; // 3 values per set + qreal scaleY = (height / rangeY); + qreal scaleX = (width / rangeX); + + qreal setCount = series->count(); + qreal domainMinY = 0; // These come from internal domain used by barseries. + qreal domainMinX = -0.5; // No access to domain from outside, so use hard coded values. + qreal rectWidth = scaleX * series->barWidth(); + + QVector<QRectF> layout; + + // 3 = count of values in set + // Note that rects in this vector will be interleaved (set1 bar0, set2 bar0, set1 bar1, set2 bar1, etc.) + for (int i = 0; i < 3; i++) { + qreal yMax = height + scaleY * domainMinY + plotArea.top(); + qreal yMin = height + scaleY * domainMinY + plotArea.top(); + for (int set = 0; set < setCount; set++) { + qreal xPos = (i - domainMinX) * scaleX + plotArea.left() - rectWidth/2; + qreal rectHeight = barSets.at(set)->at(i) * scaleY; + if (rectHeight < 0) { + QRectF rect(xPos, yMax-rectHeight, rectWidth, rectHeight); + layout.append(rect); + yMax -= rectHeight; + } else { + QRectF rect(xPos, yMin-rectHeight, rectWidth, rectHeight); + layout.append(rect); + yMin -= rectHeight; + } + } + } + +//==================================================================================== +// barset 1, bar 0 + QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, layout.at(0).center().toPoint()); + QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); + + QCOMPARE(seriesSpy.count(), 1); + QCOMPARE(setSpy1.count(), 1); + QCOMPARE(setSpy2.count(), 0); + + QList<QVariant> seriesSpyArg = seriesSpy.takeFirst(); + QCOMPARE(qvariant_cast<QBarSet*>(seriesSpyArg.at(1)), set1); + QVERIFY(seriesSpyArg.at(0).type() == QVariant::Int); + QVERIFY(seriesSpyArg.at(0).toInt() == 0); + + QList<QVariant> setSpyArg = setSpy1.takeFirst(); + QVERIFY(setSpyArg.at(0).type() == QVariant::Int); + QVERIFY(setSpyArg.at(0).toInt() == 0); + +//==================================================================================== +// barset 1, bar 1 + QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, layout.at(2).center().toPoint()); + QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); + + QCOMPARE(seriesSpy.count(), 1); + QCOMPARE(setSpy1.count(), 1); + QCOMPARE(setSpy2.count(), 0); + + seriesSpyArg = seriesSpy.takeFirst(); + QCOMPARE(qvariant_cast<QBarSet*>(seriesSpyArg.at(1)), set1); + QVERIFY(seriesSpyArg.at(0).type() == QVariant::Int); + QVERIFY(seriesSpyArg.at(0).toInt() == 1); + + setSpyArg = setSpy1.takeFirst(); + QVERIFY(setSpyArg.at(0).type() == QVariant::Int); + QVERIFY(setSpyArg.at(0).toInt() == 1); + +//==================================================================================== +// barset 1, bar 2 + QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, layout.at(4).center().toPoint()); + QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); + + QCOMPARE(seriesSpy.count(), 1); + QCOMPARE(setSpy1.count(), 1); + QCOMPARE(setSpy2.count(), 0); + + seriesSpyArg = seriesSpy.takeFirst(); + QCOMPARE(qvariant_cast<QBarSet*>(seriesSpyArg.at(1)), set1); + QVERIFY(seriesSpyArg.at(0).type() == QVariant::Int); + QVERIFY(seriesSpyArg.at(0).toInt() == 2); + + setSpyArg = setSpy1.takeFirst(); + QVERIFY(setSpyArg.at(0).type() == QVariant::Int); + QVERIFY(setSpyArg.at(0).toInt() == 2); + +//==================================================================================== +// barset 2, bar 0 + QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, layout.at(1).center().toPoint()); + QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); + + QCOMPARE(seriesSpy.count(), 1); + QCOMPARE(setSpy1.count(), 0); + QCOMPARE(setSpy2.count(), 1); + + seriesSpyArg = seriesSpy.takeFirst(); + QCOMPARE(qvariant_cast<QBarSet*>(seriesSpyArg.at(1)), set2); + QVERIFY(seriesSpyArg.at(0).type() == QVariant::Int); + QVERIFY(seriesSpyArg.at(0).toInt() == 0); + + setSpyArg = setSpy2.takeFirst(); + QVERIFY(setSpyArg.at(0).type() == QVariant::Int); + QVERIFY(setSpyArg.at(0).toInt() == 0); + +//==================================================================================== +// barset 2, bar 1 + QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, layout.at(3).center().toPoint()); + QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); + + QCOMPARE(seriesSpy.count(), 1); + QCOMPARE(setSpy1.count(), 0); + QCOMPARE(setSpy2.count(), 1); + + seriesSpyArg = seriesSpy.takeFirst(); + QCOMPARE(qvariant_cast<QBarSet*>(seriesSpyArg.at(1)), set2); + QVERIFY(seriesSpyArg.at(0).type() == QVariant::Int); + QVERIFY(seriesSpyArg.at(0).toInt() == 1); + + setSpyArg = setSpy2.takeFirst(); + QVERIFY(setSpyArg.at(0).type() == QVariant::Int); + QVERIFY(setSpyArg.at(0).toInt() == 1); + +//==================================================================================== +// barset 2, bar 2 + QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, layout.at(5).center().toPoint()); + QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); + + QCOMPARE(seriesSpy.count(), 1); + QCOMPARE(setSpy1.count(), 0); + QCOMPARE(setSpy2.count(), 1); + + seriesSpyArg = seriesSpy.takeFirst(); + QCOMPARE(qvariant_cast<QBarSet*>(seriesSpyArg.at(1)), set2); + QVERIFY(seriesSpyArg.at(0).type() == QVariant::Int); + QVERIFY(seriesSpyArg.at(0).toInt() == 2); + + setSpyArg = setSpy2.takeFirst(); + QVERIFY(setSpyArg.at(0).type() == QVariant::Int); + QVERIFY(setSpyArg.at(0).toInt() == 2); +} + +void tst_QStackedBarSeries::mouseReleased() +{ + SKIP_IF_CANNOT_TEST_MOUSE_EVENTS(); + + QStackedBarSeries* series = new QStackedBarSeries(); + + QBarSet* set1 = new QBarSet(QString("set 1")); + *set1 << 10 << 10 << 10; + series->append(set1); + + QBarSet* set2 = new QBarSet(QString("set 2")); + *set2 << 10 << 10 << 10; + series->append(set2); + QList<QBarSet*> barSets = series->barSets(); + + QSignalSpy seriesSpy(series,SIGNAL(released(int,QBarSet*))); + QSignalSpy setSpy1(set1, SIGNAL(released(int))); + QSignalSpy setSpy2(set2, SIGNAL(released(int))); + + QChartView view(new QChart()); + view.resize(400,300); + view.chart()->addSeries(series); + view.show(); + QTest::qWaitForWindowShown(&view); + + // Calculate expected layout for bars + QRectF plotArea = view.chart()->plotArea(); + qreal width = plotArea.width(); + qreal height = plotArea.height(); + qreal rangeY = 20; // From 0 to 20 because sets are stacked (this should be height of highest stack) + qreal rangeX = 3; // 3 values per set + qreal scaleY = (height / rangeY); + qreal scaleX = (width / rangeX); + + qreal setCount = series->count(); + qreal domainMinY = 0; // These come from internal domain used by barseries. + qreal domainMinX = -0.5; // No access to domain from outside, so use hard coded values. + qreal rectWidth = scaleX * series->barWidth(); + + QVector<QRectF> layout; + + // 3 = count of values in set + // Note that rects in this vector will be interleaved (set1 bar0, set2 bar0, set1 bar1, set2 bar1, etc.) + for (int i = 0; i < 3; i++) { + qreal yMax = height + scaleY * domainMinY + plotArea.top(); + qreal yMin = height + scaleY * domainMinY + plotArea.top(); + for (int set = 0; set < setCount; set++) { + qreal xPos = (i - domainMinX) * scaleX + plotArea.left() - rectWidth/2; + qreal rectHeight = barSets.at(set)->at(i) * scaleY; + if (rectHeight < 0) { + QRectF rect(xPos, yMax-rectHeight, rectWidth, rectHeight); + layout.append(rect); + yMax -= rectHeight; + } else { + QRectF rect(xPos, yMin-rectHeight, rectWidth, rectHeight); + layout.append(rect); + yMin -= rectHeight; + } + } + } + +//==================================================================================== +// barset 1, bar 0 + QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, layout.at(0).center().toPoint()); + QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); + + QCOMPARE(seriesSpy.count(), 1); + QCOMPARE(setSpy1.count(), 1); + QCOMPARE(setSpy2.count(), 0); + + QList<QVariant> seriesSpyArg = seriesSpy.takeFirst(); + QCOMPARE(qvariant_cast<QBarSet*>(seriesSpyArg.at(1)), set1); + QVERIFY(seriesSpyArg.at(0).type() == QVariant::Int); + QVERIFY(seriesSpyArg.at(0).toInt() == 0); + + QList<QVariant> setSpyArg = setSpy1.takeFirst(); + QVERIFY(setSpyArg.at(0).type() == QVariant::Int); + QVERIFY(setSpyArg.at(0).toInt() == 0); + +//==================================================================================== +// barset 1, bar 1 + QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, layout.at(2).center().toPoint()); + QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); + + QCOMPARE(seriesSpy.count(), 1); + QCOMPARE(setSpy1.count(), 1); + QCOMPARE(setSpy2.count(), 0); + + seriesSpyArg = seriesSpy.takeFirst(); + QCOMPARE(qvariant_cast<QBarSet*>(seriesSpyArg.at(1)), set1); + QVERIFY(seriesSpyArg.at(0).type() == QVariant::Int); + QVERIFY(seriesSpyArg.at(0).toInt() == 1); + + setSpyArg = setSpy1.takeFirst(); + QVERIFY(setSpyArg.at(0).type() == QVariant::Int); + QVERIFY(setSpyArg.at(0).toInt() == 1); + +//==================================================================================== +// barset 1, bar 2 + QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, layout.at(4).center().toPoint()); + QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); + + QCOMPARE(seriesSpy.count(), 1); + QCOMPARE(setSpy1.count(), 1); + QCOMPARE(setSpy2.count(), 0); + + seriesSpyArg = seriesSpy.takeFirst(); + QCOMPARE(qvariant_cast<QBarSet*>(seriesSpyArg.at(1)), set1); + QVERIFY(seriesSpyArg.at(0).type() == QVariant::Int); + QVERIFY(seriesSpyArg.at(0).toInt() == 2); + + setSpyArg = setSpy1.takeFirst(); + QVERIFY(setSpyArg.at(0).type() == QVariant::Int); + QVERIFY(setSpyArg.at(0).toInt() == 2); + +//==================================================================================== +// barset 2, bar 0 + QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, layout.at(1).center().toPoint()); + QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); + + QCOMPARE(seriesSpy.count(), 1); + QCOMPARE(setSpy1.count(), 0); + QCOMPARE(setSpy2.count(), 1); + + seriesSpyArg = seriesSpy.takeFirst(); + QCOMPARE(qvariant_cast<QBarSet*>(seriesSpyArg.at(1)), set2); + QVERIFY(seriesSpyArg.at(0).type() == QVariant::Int); + QVERIFY(seriesSpyArg.at(0).toInt() == 0); + + setSpyArg = setSpy2.takeFirst(); + QVERIFY(setSpyArg.at(0).type() == QVariant::Int); + QVERIFY(setSpyArg.at(0).toInt() == 0); + +//==================================================================================== +// barset 2, bar 1 + QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, layout.at(3).center().toPoint()); + QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); + + QCOMPARE(seriesSpy.count(), 1); + QCOMPARE(setSpy1.count(), 0); + QCOMPARE(setSpy2.count(), 1); + + seriesSpyArg = seriesSpy.takeFirst(); + QCOMPARE(qvariant_cast<QBarSet*>(seriesSpyArg.at(1)), set2); + QVERIFY(seriesSpyArg.at(0).type() == QVariant::Int); + QVERIFY(seriesSpyArg.at(0).toInt() == 1); + + setSpyArg = setSpy2.takeFirst(); + QVERIFY(setSpyArg.at(0).type() == QVariant::Int); + QVERIFY(setSpyArg.at(0).toInt() == 1); + +//==================================================================================== +// barset 2, bar 2 + QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, layout.at(5).center().toPoint()); + QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); + + QCOMPARE(seriesSpy.count(), 1); + QCOMPARE(setSpy1.count(), 0); + QCOMPARE(setSpy2.count(), 1); + + seriesSpyArg = seriesSpy.takeFirst(); + QCOMPARE(qvariant_cast<QBarSet*>(seriesSpyArg.at(1)), set2); + QVERIFY(seriesSpyArg.at(0).type() == QVariant::Int); + QVERIFY(seriesSpyArg.at(0).toInt() == 2); + + setSpyArg = setSpy2.takeFirst(); + QVERIFY(setSpyArg.at(0).type() == QVariant::Int); + QVERIFY(setSpyArg.at(0).toInt() == 2); +} + +void tst_QStackedBarSeries::mouseDoubleClicked() +{ + SKIP_IF_CANNOT_TEST_MOUSE_EVENTS(); + + QStackedBarSeries* series = new QStackedBarSeries(); + + QBarSet* set1 = new QBarSet(QString("set 1")); + *set1 << 10 << 10 << 10; + series->append(set1); + + QBarSet* set2 = new QBarSet(QString("set 2")); + *set2 << 10 << 10 << 10; + series->append(set2); + QList<QBarSet*> barSets = series->barSets(); + + QSignalSpy seriesSpy(series,SIGNAL(doubleClicked(int,QBarSet*))); + QSignalSpy setSpy1(set1, SIGNAL(doubleClicked(int))); + QSignalSpy setSpy2(set2, SIGNAL(doubleClicked(int))); + + QChartView view(new QChart()); + view.resize(400,300); + view.chart()->addSeries(series); + view.show(); + QTest::qWaitForWindowShown(&view); + + // Calculate expected layout for bars + QRectF plotArea = view.chart()->plotArea(); + qreal width = plotArea.width(); + qreal height = plotArea.height(); + qreal rangeY = 20; // From 0 to 20 because sets are stacked (this should be height of highest stack) + qreal rangeX = 3; // 3 values per set + qreal scaleY = (height / rangeY); + qreal scaleX = (width / rangeX); + + qreal setCount = series->count(); + qreal domainMinY = 0; // These come from internal domain used by barseries. + qreal domainMinX = -0.5; // No access to domain from outside, so use hard coded values. + qreal rectWidth = scaleX * series->barWidth(); + + QVector<QRectF> layout; + + // 3 = count of values in set + // Note that rects in this vector will be interleaved (set1 bar0, set2 bar0, set1 bar1, set2 bar1, etc.) + for (int i = 0; i < 3; i++) { + qreal yMax = height + scaleY * domainMinY + plotArea.top(); + qreal yMin = height + scaleY * domainMinY + plotArea.top(); + for (int set = 0; set < setCount; set++) { + qreal xPos = (i - domainMinX) * scaleX + plotArea.left() - rectWidth/2; + qreal rectHeight = barSets.at(set)->at(i) * scaleY; + if (rectHeight < 0) { + QRectF rect(xPos, yMax-rectHeight, rectWidth, rectHeight); + layout.append(rect); + yMax -= rectHeight; + } else { + QRectF rect(xPos, yMin-rectHeight, rectWidth, rectHeight); + layout.append(rect); + yMin -= rectHeight; + } + } + } + + // barset 1, bar 0 + QTest::mouseDClick(view.viewport(), Qt::LeftButton, 0, layout.at(0).center().toPoint()); + QCoreApplication::processEvents(QEventLoop::AllEvents, 1000); + + QCOMPARE(seriesSpy.count(), 1); + QCOMPARE(setSpy1.count(), 1); + QCOMPARE(setSpy2.count(), 0); + + QList<QVariant> seriesSpyArg = seriesSpy.takeFirst(); + QCOMPARE(qvariant_cast<QBarSet*>(seriesSpyArg.at(1)), set1); + QVERIFY(seriesSpyArg.at(0).type() == QVariant::Int); + QVERIFY(seriesSpyArg.at(0).toInt() == 0); + + QList<QVariant> setSpyArg = setSpy1.takeFirst(); + QVERIFY(setSpyArg.at(0).type() == QVariant::Int); + QVERIFY(setSpyArg.at(0).toInt() == 0); +} QTEST_MAIN(tst_QStackedBarSeries) #include "tst_qstackedbarseries.moc" |