##// END OF EJS Templates
Updated license headers...
Updated license headers Updated new license headers and added missing ones to qdoc files. Change-Id: I9f2af2a8b44c3ebf19fd494628dfaa8775a47b06 Reviewed-by: Miikka Heikkinen <miikka.heikkinen@theqtcompany.com>

File last commit:

r2740:377e4516d036
r2740:377e4516d036
Show More
tst_qpercentbarseries.cpp
1025 lines | 38.4 KiB | text/x-c | CppLexer
/ tests / auto / qpercentbarseries / tst_qpercentbarseries.cpp
sauimone
stacked and percent bar unit tests
r1116 /****************************************************************************
**
Titta Heikkala
Update copyright year...
r2688 ** Copyright (C) 2014 Digia Plc
sauimone
stacked and percent bar unit tests
r1116 ** All rights reserved.
Titta Heikkala
Updated license headers...
r2740 ** For any questions to Digia, please use contact form at http://qt.io
sauimone
stacked and percent bar unit tests
r1116 **
Titta Heikkala
Updated license headers...
r2740 ** This file is part of the Qt Charts module.
sauimone
stacked and percent bar unit tests
r1116 **
Titta Heikkala
Updated license headers...
r2740 ** Licensees holding valid commercial license for Qt may use this file in
** accordance with the Qt License Agreement provided with the Software
** or, alternatively, in accordance with the terms contained in a written
** agreement between you and Digia.
sauimone
stacked and percent bar unit tests
r1116 **
** If you have questions regarding the use of this file, please use
Titta Heikkala
Updated license headers...
r2740 ** contact form at http://qt.io
sauimone
stacked and percent bar unit tests
r1116 **
****************************************************************************/
#include <QtTest/QtTest>
Titta Heikkala
Fix include syntax...
r2714 #include <QtCharts/QPercentBarSeries>
#include <QtCharts/QBarSet>
#include <QtCharts/QChartView>
#include <QtCharts/QChart>
Jani Honkonen
autotests: try to fix bar hover failures in bamboo
r1466 #include "tst_definitions.h"
sauimone
stacked and percent bar unit tests
r1116
Titta Heikkala
Qt Charts project file structure change...
r2712 QT_CHARTS_USE_NAMESPACE
sauimone
stacked and percent bar unit tests
r1116
sauimone
mouse click test cases for barcharts. Fixed found error
r1145 Q_DECLARE_METATYPE(QBarSet*)
Titta Heikkala
Added possibility to show series value...
r2689 Q_DECLARE_METATYPE(QAbstractBarSeries::LabelsPosition)
sauimone
mouse click test cases for barcharts. Fixed found error
r1145
sauimone
stacked and percent bar unit tests
r1116 class tst_QPercentBarSeries : public QObject
{
Q_OBJECT
public slots:
void initTestCase();
void cleanupTestCase();
void init();
void cleanup();
private slots:
void qpercentbarseries_data();
void qpercentbarseries();
void type_data();
void type();
Titta Heikkala
Added possibility to show series value...
r2689 void setLabelsFormat();
void setLabelsPosition();
sauimone
mouse hover test cases for barcharts
r1146 void mouseclicked_data();
void mouseclicked();
void mousehovered_data();
void mousehovered();
Titta Heikkala
Fix assert failure with percent bar series...
r2690 void zeroValuesInSeries();
Titta Heikkala
Add pressed, released and doubleClicked signals...
r2739 void mousePressed();
void mouseReleased();
void mouseDoubleClicked();
sauimone
stacked and percent bar unit tests
r1116
private:
QPercentBarSeries* m_barseries;
};
void tst_QPercentBarSeries::initTestCase()
{
sauimone
mouse click test cases for barcharts. Fixed found error
r1145 qRegisterMetaType<QBarSet*>("QBarSet*");
Titta Heikkala
Added possibility to show series value...
r2689 qRegisterMetaType<QAbstractBarSeries::LabelsPosition>("QAbstractBarSeries::LabelsPosition");
sauimone
stacked and percent bar unit tests
r1116 }
void tst_QPercentBarSeries::cleanupTestCase()
{
Miikka Heikkinen
Plugged some memory leaks....
r2733 QTest::qWait(1); // Allow final deleteLaters to run
sauimone
stacked and percent bar unit tests
r1116 }
void tst_QPercentBarSeries::init()
{
m_barseries = new QPercentBarSeries();
}
void tst_QPercentBarSeries::cleanup()
{
delete m_barseries;
m_barseries = 0;
}
void tst_QPercentBarSeries::qpercentbarseries_data()
{
}
void tst_QPercentBarSeries::qpercentbarseries()
{
QPercentBarSeries *barseries = new QPercentBarSeries();
QVERIFY(barseries != 0);
Miikka Heikkinen
Plugged some memory leaks....
r2733 delete barseries;
sauimone
stacked and percent bar unit tests
r1116 }
void tst_QPercentBarSeries::type_data()
{
}
void tst_QPercentBarSeries::type()
{
QVERIFY(m_barseries->type() == QAbstractSeries::SeriesTypePercentBar);
}
sauimone
mouse hover test cases for barcharts
r1146 void tst_QPercentBarSeries::mouseclicked_data()
sauimone
mouse click test cases for barcharts. Fixed found error
r1145 {
}
Titta Heikkala
Added possibility to show series value...
r2689 void tst_QPercentBarSeries::setLabelsFormat()
{
QSignalSpy labelsFormatSpy(m_barseries, SIGNAL(labelsFormatChanged(QString)));
QCOMPARE(m_barseries->labelsFormat(), QString());
QString format("(@value)");
m_barseries->setLabelsFormat(format);
TRY_COMPARE(labelsFormatSpy.count(), 1);
QList<QVariant> arguments = labelsFormatSpy.takeFirst();
QVERIFY(arguments.at(0).toString() == format);
QCOMPARE(m_barseries->labelsFormat(), format);
m_barseries->setLabelsFormat(QString());
TRY_COMPARE(labelsFormatSpy.count(), 1);
arguments = labelsFormatSpy.takeFirst();
QVERIFY(arguments.at(0).toString() == QString());
QCOMPARE(m_barseries->labelsFormat(), QString());
}
void tst_QPercentBarSeries::setLabelsPosition()
{
QSignalSpy labelsPositionSpy(m_barseries,
SIGNAL(labelsPositionChanged(QAbstractBarSeries::LabelsPosition)));
QCOMPARE(m_barseries->labelsPosition(), QPercentBarSeries::LabelsCenter);
m_barseries->setLabelsPosition(QPercentBarSeries::LabelsInsideEnd);
TRY_COMPARE(labelsPositionSpy.count(), 1);
QList<QVariant> arguments = labelsPositionSpy.takeFirst();
QVERIFY(arguments.at(0).value<QAbstractBarSeries::LabelsPosition>()
== QPercentBarSeries::LabelsInsideEnd);
QCOMPARE(m_barseries->labelsPosition(), QPercentBarSeries::LabelsInsideEnd);
m_barseries->setLabelsPosition(QPercentBarSeries::LabelsInsideBase);
TRY_COMPARE(labelsPositionSpy.count(), 1);
arguments = labelsPositionSpy.takeFirst();
QVERIFY(arguments.at(0).value<QAbstractBarSeries::LabelsPosition>()
== QPercentBarSeries::LabelsInsideBase);
QCOMPARE(m_barseries->labelsPosition(), QPercentBarSeries::LabelsInsideBase);
m_barseries->setLabelsPosition(QPercentBarSeries::LabelsOutsideEnd);
TRY_COMPARE(labelsPositionSpy.count(), 1);
arguments = labelsPositionSpy.takeFirst();
QVERIFY(arguments.at(0).value<QAbstractBarSeries::LabelsPosition>()
== QPercentBarSeries::LabelsOutsideEnd);
QCOMPARE(m_barseries->labelsPosition(), QPercentBarSeries::LabelsOutsideEnd);
m_barseries->setLabelsPosition(QPercentBarSeries::LabelsCenter);
TRY_COMPARE(labelsPositionSpy.count(), 1);
arguments = labelsPositionSpy.takeFirst();
QVERIFY(arguments.at(0).value<QAbstractBarSeries::LabelsPosition>()
== QPercentBarSeries::LabelsCenter);
QCOMPARE(m_barseries->labelsPosition(), QPercentBarSeries::LabelsCenter);
}
sauimone
mouse hover test cases for barcharts
r1146 void tst_QPercentBarSeries::mouseclicked()
sauimone
mouse click test cases for barcharts. Fixed found error
r1145 {
sauimone
added SKIP_IF_CANNOT_TEST_MOUSE_EVENTS macro to barseries tests
r2066 SKIP_IF_CANNOT_TEST_MOUSE_EVENTS();
sauimone
mouse click test cases for barcharts. Fixed found error
r1145 QPercentBarSeries* series = new QPercentBarSeries();
QBarSet* set1 = new QBarSet(QString("set 1"));
*set1 << 10 << 10 << 10;
sauimone
Renamed appendBarSet to append, removeBarSet to remove
r1194 series->append(set1);
sauimone
mouse click test cases for barcharts. Fixed found error
r1145
QBarSet* set2 = new QBarSet(QString("set 2"));
*set2 << 10 << 10 << 10;
sauimone
Renamed appendBarSet to append, removeBarSet to remove
r1194 series->append(set2);
sauimone
mouse click test cases for barcharts. Fixed found error
r1145
sauimone
bar test update. Tests now calculate expected layout from charts plot area and use that instead of precalculated QPointF magic numbers
r2073 QList<QBarSet*> barSets = series->barSets();
Jani Honkonen
normalize signal/slot signatures
r2110 QSignalSpy seriesSpy(series,SIGNAL(clicked(int,QBarSet*)));
sauimone
mouse click test cases for barcharts. Fixed found error
r1145
QChartView view(new QChart());
view.resize(400,300);
view.chart()->addSeries(series);
view.show();
QTest::qWaitForWindowShown(&view);
sauimone
bar test update. Tests now calculate expected layout from charts plot area and use that instead of precalculated QPointF magic numbers
r2073 // 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;
}
}
sauimone
mouse click test cases for barcharts. Fixed found error
r1145 //====================================================================================
sauimone
bar test update. Tests now calculate expected layout from charts plot area and use that instead of precalculated QPointF magic numbers
r2073 // barset 1, bar 0
QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, layout.at(0).center().toPoint());
sauimone
mouse click test cases for barcharts. Fixed found error
r1145 QCoreApplication::processEvents(QEventLoop::AllEvents, 1000);
QCOMPARE(seriesSpy.count(), 1);
QList<QVariant> seriesSpyArg = seriesSpy.takeFirst();
sauimone
removed double signal emitting from barseries/set
r1563 QCOMPARE(qvariant_cast<QBarSet*>(seriesSpyArg.at(1)), set1);
QVERIFY(seriesSpyArg.at(0).type() == QVariant::Int);
QVERIFY(seriesSpyArg.at(0).toInt() == 0);
sauimone
mouse click test cases for barcharts. Fixed found error
r1145
//====================================================================================
sauimone
bar test update. Tests now calculate expected layout from charts plot area and use that instead of precalculated QPointF magic numbers
r2073 // barset 1, bar 1
QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, layout.at(2).center().toPoint());
sauimone
mouse click test cases for barcharts. Fixed found error
r1145 QCoreApplication::processEvents(QEventLoop::AllEvents, 1000);
QCOMPARE(seriesSpy.count(), 1);
seriesSpyArg = seriesSpy.takeFirst();
sauimone
removed double signal emitting from barseries/set
r1563 QCOMPARE(qvariant_cast<QBarSet*>(seriesSpyArg.at(1)), set1);
QVERIFY(seriesSpyArg.at(0).type() == QVariant::Int);
QVERIFY(seriesSpyArg.at(0).toInt() == 1);
sauimone
mouse click test cases for barcharts. Fixed found error
r1145
//====================================================================================
sauimone
bar test update. Tests now calculate expected layout from charts plot area and use that instead of precalculated QPointF magic numbers
r2073 // barset 1, bar 2
QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, layout.at(4).center().toPoint());
sauimone
mouse click test cases for barcharts. Fixed found error
r1145 QCoreApplication::processEvents(QEventLoop::AllEvents, 1000);
QCOMPARE(seriesSpy.count(), 1);
seriesSpyArg = seriesSpy.takeFirst();
sauimone
removed double signal emitting from barseries/set
r1563 QCOMPARE(qvariant_cast<QBarSet*>(seriesSpyArg.at(1)), set1);
QVERIFY(seriesSpyArg.at(0).type() == QVariant::Int);
QVERIFY(seriesSpyArg.at(0).toInt() == 2);
sauimone
mouse click test cases for barcharts. Fixed found error
r1145
//====================================================================================
sauimone
bar test update. Tests now calculate expected layout from charts plot area and use that instead of precalculated QPointF magic numbers
r2073 // barset 2, bar 0
QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, layout.at(1).center().toPoint());
sauimone
mouse click test cases for barcharts. Fixed found error
r1145 QCoreApplication::processEvents(QEventLoop::AllEvents, 1000);
QCOMPARE(seriesSpy.count(), 1);
seriesSpyArg = seriesSpy.takeFirst();
sauimone
removed double signal emitting from barseries/set
r1563 QCOMPARE(qvariant_cast<QBarSet*>(seriesSpyArg.at(1)), set2);
QVERIFY(seriesSpyArg.at(0).type() == QVariant::Int);
QVERIFY(seriesSpyArg.at(0).toInt() == 0);
sauimone
mouse click test cases for barcharts. Fixed found error
r1145
//====================================================================================
sauimone
bar test update. Tests now calculate expected layout from charts plot area and use that instead of precalculated QPointF magic numbers
r2073 // barset 2, bar 1
QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, layout.at(3).center().toPoint());
sauimone
mouse click test cases for barcharts. Fixed found error
r1145 QCoreApplication::processEvents(QEventLoop::AllEvents, 1000);
QCOMPARE(seriesSpy.count(), 1);
seriesSpyArg = seriesSpy.takeFirst();
sauimone
removed double signal emitting from barseries/set
r1563 QCOMPARE(qvariant_cast<QBarSet*>(seriesSpyArg.at(1)), set2);
QVERIFY(seriesSpyArg.at(0).type() == QVariant::Int);
QVERIFY(seriesSpyArg.at(0).toInt() == 1);
sauimone
mouse click test cases for barcharts. Fixed found error
r1145
//====================================================================================
sauimone
bar test update. Tests now calculate expected layout from charts plot area and use that instead of precalculated QPointF magic numbers
r2073 // barset 2, bar 2
QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, layout.at(5).center().toPoint());
sauimone
mouse click test cases for barcharts. Fixed found error
r1145 QCoreApplication::processEvents(QEventLoop::AllEvents, 1000);
QCOMPARE(seriesSpy.count(), 1);
seriesSpyArg = seriesSpy.takeFirst();
sauimone
removed double signal emitting from barseries/set
r1563 QCOMPARE(qvariant_cast<QBarSet*>(seriesSpyArg.at(1)), set2);
QVERIFY(seriesSpyArg.at(0).type() == QVariant::Int);
QVERIFY(seriesSpyArg.at(0).toInt() == 2);
sauimone
mouse click test cases for barcharts. Fixed found error
r1145 }
sauimone
stacked and percent bar unit tests
r1116
sauimone
mouse hover test cases for barcharts
r1146 void tst_QPercentBarSeries::mousehovered_data()
{
}
void tst_QPercentBarSeries::mousehovered()
{
sauimone
added SKIP_IF_CANNOT_TEST_MOUSE_EVENTS macro to barseries tests
r2066 SKIP_IF_CANNOT_TEST_MOUSE_EVENTS();
sauimone
mouse hover test cases for barcharts
r1146 QPercentBarSeries* series = new QPercentBarSeries();
QBarSet* set1 = new QBarSet(QString("set 1"));
*set1 << 10 << 10 << 10;
sauimone
Renamed appendBarSet to append, removeBarSet to remove
r1194 series->append(set1);
sauimone
mouse hover test cases for barcharts
r1146
QBarSet* set2 = new QBarSet(QString("set 2"));
*set2 << 10 << 10 << 10;
sauimone
Renamed appendBarSet to append, removeBarSet to remove
r1194 series->append(set2);
sauimone
mouse hover test cases for barcharts
r1146
sauimone
bar test update. Tests now calculate expected layout from charts plot area and use that instead of precalculated QPointF magic numbers
r2073 QList<QBarSet*> barSets = series->barSets();
Titta Heikkala
Add hovered signal with index for bar charts...
r2600 QSignalSpy seriesIndexSpy(series, SIGNAL(hovered(bool, int, QBarSet*)));
QSignalSpy setIndexSpy1(set1, SIGNAL(hovered(bool, int)));
QSignalSpy setIndexSpy2(set2, SIGNAL(hovered(bool, int)));
sauimone
mouse hover test cases for barcharts
r1146
QChartView view(new QChart());
view.resize(400,300);
view.chart()->addSeries(series);
view.show();
QTest::qWaitForWindowShown(&view);
sauimone
barseries autotest update
r1287 //this is hack since view does not get events otherwise
view.setMouseTracking(true);
sauimone
bar test update. Tests now calculate expected layout from charts plot area and use that instead of precalculated QPointF magic numbers
r2073 // 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 rectHeight = barSets.at(set)->at(i) * percentage * scaleY;
QRectF rect(xPos, yPos-rectHeight, rectWidth, rectHeight);
layout.append(rect);
yPos -= rectHeight;
}
}
sauimone
mouse hover test cases for barcharts
r1146 //=======================================================================
// move mouse to left border
sauimone
bar test update. Tests now calculate expected layout from charts plot area and use that instead of precalculated QPointF magic numbers
r2073 QTest::mouseMove(view.viewport(), QPoint(0, layout.at(0).center().y()));
Jani Honkonen
autotests: try to fix bar hover failures in bamboo
r1466 QCoreApplication::processEvents(QEventLoop::AllEvents, 10000);
Titta Heikkala
Add hovered signal with index for bar charts...
r2600 TRY_COMPARE(seriesIndexSpy.count(), 0);
sauimone
mouse hover test cases for barcharts
r1146
//=======================================================================
// move mouse on top of set1
sauimone
bar test update. Tests now calculate expected layout from charts plot area and use that instead of precalculated QPointF magic numbers
r2073 QTest::mouseMove(view.viewport(), layout.at(0).center().toPoint());
Titta Heikkala
Add hovered signal with index for bar charts...
r2600 TRY_COMPARE(seriesIndexSpy.count(), 1);
TRY_COMPARE(setIndexSpy1.count(), 1);
TRY_COMPARE(setIndexSpy2.count(), 0);
sauimone
mouse hover test cases for barcharts
r1146
Titta Heikkala
Add hovered signal with index for bar charts...
r2600 QList<QVariant> seriesIndexSpyArg = seriesIndexSpy.takeFirst();
QCOMPARE(qvariant_cast<QBarSet*>(seriesIndexSpyArg.at(2)), set1);
QVERIFY(seriesIndexSpyArg.at(0).type() == QVariant::Bool);
QVERIFY(seriesIndexSpyArg.at(0).toBool() == true);
QList<QVariant> setIndexSpyArg = setIndexSpy1.takeFirst();
QVERIFY(setIndexSpyArg.at(0).type() == QVariant::Bool);
QVERIFY(setIndexSpyArg.at(0).toBool() == true);
sauimone
mouse hover test cases for barcharts
r1146 //=======================================================================
// move mouse from top of set1 to top of set2
sauimone
bar test update. Tests now calculate expected layout from charts plot area and use that instead of precalculated QPointF magic numbers
r2073 QTest::mouseMove(view.viewport(), layout.at(1).center().toPoint());
Titta Heikkala
Add hovered signal with index for bar charts...
r2600 TRY_COMPARE(seriesIndexSpy.count(), 2);
TRY_COMPARE(setIndexSpy1.count(), 1);
TRY_COMPARE(setIndexSpy2.count(), 1);
sauimone
mouse hover test cases for barcharts
r1146
// should leave set1
Titta Heikkala
Add hovered signal with index for bar charts...
r2600 seriesIndexSpyArg = seriesIndexSpy.takeFirst();
QCOMPARE(qvariant_cast<QBarSet*>(seriesIndexSpyArg.at(2)), set1);
QVERIFY(seriesIndexSpyArg.at(0).type() == QVariant::Bool);
QVERIFY(seriesIndexSpyArg.at(0).toBool() == false);
setIndexSpyArg = setIndexSpy1.takeFirst();
QVERIFY(setIndexSpyArg.at(0).type() == QVariant::Bool);
QVERIFY(setIndexSpyArg.at(0).toBool() == false);
sauimone
mouse hover test cases for barcharts
r1146 // should enter set2
Titta Heikkala
Add hovered signal with index for bar charts...
r2600 seriesIndexSpyArg = seriesIndexSpy.takeFirst();
QCOMPARE(qvariant_cast<QBarSet*>(seriesIndexSpyArg.at(2)), set2);
QVERIFY(seriesIndexSpyArg.at(0).type() == QVariant::Bool);
QVERIFY(seriesIndexSpyArg.at(0).toBool() == true);
setIndexSpyArg = setIndexSpy2.takeFirst();
QVERIFY(setIndexSpyArg.at(0).type() == QVariant::Bool);
QVERIFY(setIndexSpyArg.at(0).toBool() == true);
sauimone
mouse hover test cases for barcharts
r1146 //=======================================================================
// move mouse from top of set2 to background
sauimone
bar test update. Tests now calculate expected layout from charts plot area and use that instead of precalculated QPointF magic numbers
r2073 QTest::mouseMove(view.viewport(), QPoint(layout.at(1).center().x(), 0));
Titta Heikkala
Add hovered signal with index for bar charts...
r2600 TRY_COMPARE(seriesIndexSpy.count(), 1);
TRY_COMPARE(setIndexSpy1.count(), 0);
TRY_COMPARE(setIndexSpy2.count(), 1);
sauimone
mouse hover test cases for barcharts
r1146
sauimone
barseries autotest update
r1287 // should leave set2
Titta Heikkala
Add hovered signal with index for bar charts...
r2600 seriesIndexSpyArg = seriesIndexSpy.takeFirst();
QCOMPARE(qvariant_cast<QBarSet*>(seriesIndexSpyArg.at(2)), set2);
QVERIFY(seriesIndexSpyArg.at(0).type() == QVariant::Bool);
QVERIFY(seriesIndexSpyArg.at(0).toBool() == false);
setIndexSpyArg = setIndexSpy2.takeFirst();
QVERIFY(setIndexSpyArg.at(0).type() == QVariant::Bool);
QVERIFY(setIndexSpyArg.at(0).toBool() == false);
//=======================================================================
// move mouse on top of set1, bar0 to check the index (hover into set1)
QTest::mouseMove(view.viewport(), layout.at(0).center().toPoint());
TRY_COMPARE(seriesIndexSpy.count(), 1);
TRY_COMPARE(setIndexSpy1.count(), 1);
TRY_COMPARE(setIndexSpy2.count(), 0);
//should enter set1, bar0
seriesIndexSpyArg = seriesIndexSpy.takeFirst();
QCOMPARE(qvariant_cast<QBarSet*>(seriesIndexSpyArg.at(2)), set1);
QVERIFY(seriesIndexSpyArg.at(0).type() == QVariant::Bool);
QVERIFY(seriesIndexSpyArg.at(0).toBool() == true);
QVERIFY(seriesIndexSpyArg.at(1).type() == QVariant::Int);
QVERIFY(seriesIndexSpyArg.at(1).toInt() == 0);
setIndexSpyArg = setIndexSpy1.takeFirst();
QVERIFY(setIndexSpyArg.at(0).type() == QVariant::Bool);
QVERIFY(setIndexSpyArg.at(0).toBool() == true);
QVERIFY(setIndexSpyArg.at(1).type() == QVariant::Int);
QVERIFY(setIndexSpyArg.at(1).toInt() == 0);
//=======================================================================
// move mouse on top of set2, bar0 to check the index (hover out set1,
// hover in set2)
QTest::mouseMove(view.viewport(), layout.at(1).center().toPoint());
TRY_COMPARE(seriesIndexSpy.count(), 2);
TRY_COMPARE(setIndexSpy1.count(), 1);
TRY_COMPARE(setIndexSpy2.count(), 1);
//should leave set1, bar0
seriesIndexSpyArg = seriesIndexSpy.takeFirst();
QCOMPARE(qvariant_cast<QBarSet*>(seriesIndexSpyArg.at(2)), set1);
QVERIFY(seriesIndexSpyArg.at(0).type() == QVariant::Bool);
QVERIFY(seriesIndexSpyArg.at(0).toBool() == false);
QVERIFY(seriesIndexSpyArg.at(1).type() == QVariant::Int);
QVERIFY(seriesIndexSpyArg.at(1).toInt() == 0);
setIndexSpyArg = setIndexSpy1.takeFirst();
QVERIFY(setIndexSpyArg.at(0).type() == QVariant::Bool);
QVERIFY(setIndexSpyArg.at(0).toBool() == false);
QVERIFY(setIndexSpyArg.at(1).type() == QVariant::Int);
QVERIFY(setIndexSpyArg.at(1).toInt() == 0);
//should enter set2, bar0
seriesIndexSpyArg = seriesIndexSpy.takeFirst();
QCOMPARE(qvariant_cast<QBarSet*>(seriesIndexSpyArg.at(2)), set2);
QVERIFY(seriesIndexSpyArg.at(0).type() == QVariant::Bool);
QVERIFY(seriesIndexSpyArg.at(0).toBool() == true);
QVERIFY(seriesIndexSpyArg.at(1).type() == QVariant::Int);
QVERIFY(seriesIndexSpyArg.at(1).toInt() == 0);
setIndexSpyArg = setIndexSpy2.takeFirst();
QVERIFY(setIndexSpyArg.at(0).type() == QVariant::Bool);
QVERIFY(setIndexSpyArg.at(0).toBool() == true);
QVERIFY(setIndexSpyArg.at(1).type() == QVariant::Int);
QVERIFY(setIndexSpyArg.at(1).toInt() == 0);
//=======================================================================
// move mouse on top of set1, bar1 to check the index (hover out set2,
// hover in set1)
QTest::mouseMove(view.viewport(), layout.at(2).center().toPoint());
TRY_COMPARE(seriesIndexSpy.count(), 2);
TRY_COMPARE(setIndexSpy1.count(), 1);
TRY_COMPARE(setIndexSpy2.count(), 1);
//should leave set2, bar0
seriesIndexSpyArg = seriesIndexSpy.takeFirst();
QCOMPARE(qvariant_cast<QBarSet*>(seriesIndexSpyArg.at(2)), set2);
QVERIFY(seriesIndexSpyArg.at(0).type() == QVariant::Bool);
QVERIFY(seriesIndexSpyArg.at(0).toBool() == false);
QVERIFY(seriesIndexSpyArg.at(1).type() == QVariant::Int);
QVERIFY(seriesIndexSpyArg.at(1).toInt() == 0);
setIndexSpyArg = setIndexSpy2.takeFirst();
QVERIFY(setIndexSpyArg.at(0).type() == QVariant::Bool);
QVERIFY(setIndexSpyArg.at(0).toBool() == false);
QVERIFY(setIndexSpyArg.at(1).type() == QVariant::Int);
QVERIFY(setIndexSpyArg.at(1).toInt() == 0);
//should enter set1, bar1
seriesIndexSpyArg = seriesIndexSpy.takeFirst();
QCOMPARE(qvariant_cast<QBarSet*>(seriesIndexSpyArg.at(2)), set1);
QVERIFY(seriesIndexSpyArg.at(0).type() == QVariant::Bool);
QVERIFY(seriesIndexSpyArg.at(0).toBool() == true);
QVERIFY(seriesIndexSpyArg.at(1).type() == QVariant::Int);
QVERIFY(seriesIndexSpyArg.at(1).toInt() == 1);
setIndexSpyArg = setIndexSpy1.takeFirst();
QVERIFY(setIndexSpyArg.at(0).type() == QVariant::Bool);
QVERIFY(setIndexSpyArg.at(0).toBool() == true);
QVERIFY(setIndexSpyArg.at(1).type() == QVariant::Int);
QVERIFY(setIndexSpyArg.at(1).toInt() == 1);
//=======================================================================
// move mouse between set1 and set2 (hover out set1)
QTest::mouseMove(view.viewport(), QPoint((layout.at(3).right() + layout.at(4).left()) /2,
layout.at(2).top()));
QCoreApplication::processEvents(QEventLoop::AllEvents, 1000);
TRY_COMPARE(seriesIndexSpy.count(), 1);
TRY_COMPARE(setIndexSpy1.count(), 1);
TRY_COMPARE(setIndexSpy2.count(), 0);
//should leave set1, bar1
seriesIndexSpyArg = seriesIndexSpy.takeFirst();
QCOMPARE(qvariant_cast<QBarSet*>(seriesIndexSpyArg.at(2)), set1);
QVERIFY(seriesIndexSpyArg.at(0).type() == QVariant::Bool);
QVERIFY(seriesIndexSpyArg.at(0).toBool() == false);
QVERIFY(seriesIndexSpyArg.at(1).type() == QVariant::Int);
QVERIFY(seriesIndexSpyArg.at(1).toInt() == 1);
setIndexSpyArg = setIndexSpy1.takeFirst();
QVERIFY(setIndexSpyArg.at(0).type() == QVariant::Bool);
QVERIFY(setIndexSpyArg.at(0).toBool() == false);
QVERIFY(setIndexSpyArg.at(1).type() == QVariant::Int);
QVERIFY(setIndexSpyArg.at(1).toInt() == 1);
//=======================================================================
// move mouse on top of set2, bar1 to check the index (hover in set2)
QTest::mouseMove(view.viewport(), layout.at(3).center().toPoint());
TRY_COMPARE(seriesIndexSpy.count(), 1);
TRY_COMPARE(setIndexSpy1.count(), 0);
TRY_COMPARE(setIndexSpy2.count(), 1);
//should enter set2, bar1
seriesIndexSpyArg = seriesIndexSpy.takeFirst();
QCOMPARE(qvariant_cast<QBarSet*>(seriesIndexSpyArg.at(2)), set2);
QVERIFY(seriesIndexSpyArg.at(0).type() == QVariant::Bool);
QVERIFY(seriesIndexSpyArg.at(0).toBool() == true);
QVERIFY(seriesIndexSpyArg.at(1).type() == QVariant::Int);
QVERIFY(seriesIndexSpyArg.at(1).toInt() == 1);
setIndexSpyArg = setIndexSpy2.takeFirst();
QVERIFY(setIndexSpyArg.at(0).type() == QVariant::Bool);
QVERIFY(setIndexSpyArg.at(0).toBool() == true);
QVERIFY(setIndexSpyArg.at(1).type() == QVariant::Int);
QVERIFY(setIndexSpyArg.at(1).toInt() == 1);
//=======================================================================
// move mouse between set1 and set2 (hover out set2)
QTest::mouseMove(view.viewport(), QPoint((layout.at(3).right() + layout.at(4).left()) /2,
layout.at(2).top()));
QCoreApplication::processEvents(QEventLoop::AllEvents, 1000);
TRY_COMPARE(seriesIndexSpy.count(), 1);
TRY_COMPARE(setIndexSpy1.count(), 0);
TRY_COMPARE(setIndexSpy2.count(), 1);
//should leave set1, bar1
seriesIndexSpyArg = seriesIndexSpy.takeFirst();
QCOMPARE(qvariant_cast<QBarSet*>(seriesIndexSpyArg.at(2)), set2);
QVERIFY(seriesIndexSpyArg.at(0).type() == QVariant::Bool);
QVERIFY(seriesIndexSpyArg.at(0).toBool() == false);
QVERIFY(seriesIndexSpyArg.at(1).type() == QVariant::Int);
QVERIFY(seriesIndexSpyArg.at(1).toInt() == 1);
setIndexSpyArg = setIndexSpy2.takeFirst();
QVERIFY(setIndexSpyArg.at(0).type() == QVariant::Bool);
QVERIFY(setIndexSpyArg.at(0).toBool() == false);
QVERIFY(setIndexSpyArg.at(1).type() == QVariant::Int);
QVERIFY(setIndexSpyArg.at(1).toInt() == 1);
sauimone
mouse hover test cases for barcharts
r1146 }
Titta Heikkala
Fix assert failure with percent bar series...
r2690 void tst_QPercentBarSeries::zeroValuesInSeries()
{
QPercentBarSeries *series = new QPercentBarSeries();
QBarSet *set1 = new QBarSet(QString("set 1"));
*set1 << 100 << 0.0 << 10;
series->append(set1);
QBarSet *set2 = new QBarSet(QString("set 2"));
*set2 << 0.0 << 0.0 << 70;
series->append(set2);
QChartView view(new QChart());
view.chart()->addSeries(series);
view.chart()->createDefaultAxes();
view.show();
QTest::qWaitForWindowShown(&view);
}
Titta Heikkala
Add pressed, released and doubleClicked signals...
r2739 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);
}
sauimone
stacked and percent bar unit tests
r1116 QTEST_MAIN(tst_QPercentBarSeries)
#include "tst_qpercentbarseries.moc"