From 3baa96f6b10fe412a4394b6a6e7c1c049b538756 Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Fri, 30 Sep 2016 16:28:07 +0300 Subject: Fix crash on PieChartItem deletion MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The PieChartItem wasn't properly disconnected at the time it was removed from the chart and scheduled for deletion with deleteLater. Change-Id: Idf6bcabaef2961b1d7ff658a3e5bcf91fe928873 Reviewed-by: Tomi Korpipää Reviewed-by: Mika Salmela Reviewed-by: Miikka Heikkinen --- src/charts/chartitem.cpp | 5 +++++ src/charts/chartitem_p.h | 2 ++ src/charts/chartpresenter.cpp | 2 +- src/charts/piechart/piechartitem.cpp | 27 ++++++++++++++++++--------- src/charts/piechart/piechartitem_p.h | 2 ++ 5 files changed, 28 insertions(+), 10 deletions(-) diff --git a/src/charts/chartitem.cpp b/src/charts/chartitem.cpp index 8bdf68a3..1b745559 100644 --- a/src/charts/chartitem.cpp +++ b/src/charts/chartitem.cpp @@ -39,6 +39,11 @@ AbstractDomain* ChartItem::domain() const return m_series->domain(); } +void ChartItem::cleanup() +{ + disconnect(); +} + void ChartItem::handleDomainUpdated() { qWarning() << __FUNCTION__<< "Slot not implemented"; diff --git a/src/charts/chartitem_p.h b/src/charts/chartitem_p.h index b64a8ce6..833fc60f 100644 --- a/src/charts/chartitem_p.h +++ b/src/charts/chartitem_p.h @@ -44,6 +44,8 @@ class ChartItem : public ChartElement public: ChartItem(QAbstractSeriesPrivate *series,QGraphicsItem* item); AbstractDomain* domain() const; + virtual void cleanup(); + public Q_SLOTS: virtual void handleDomainUpdated(); diff --git a/src/charts/chartpresenter.cpp b/src/charts/chartpresenter.cpp index 96fcefee..b95a1268 100644 --- a/src/charts/chartpresenter.cpp +++ b/src/charts/chartpresenter.cpp @@ -138,7 +138,7 @@ void ChartPresenter::handleSeriesRemoved(QAbstractSeries *series) { ChartItem *chart = series->d_ptr->m_item.take(); chart->hide(); - chart->disconnect(); + chart->cleanup(); series->disconnect(chart); chart->deleteLater(); if (chart->animation()) diff --git a/src/charts/piechart/piechartitem.cpp b/src/charts/piechart/piechartitem.cpp index 273125de..a2ce330f 100644 --- a/src/charts/piechart/piechartitem.cpp +++ b/src/charts/piechart/piechartitem.cpp @@ -60,15 +60,7 @@ PieChartItem::PieChartItem(QPieSeries *series, QGraphicsItem* item) PieChartItem::~PieChartItem() { - // slices deleted automatically through QGraphicsItem - if (m_series) { - m_series->disconnect(this); - QPieSeriesPrivate::fromSeries(m_series)->disconnect(this); - } - foreach (QPieSlice *slice, m_sliceItems.keys()) { - slice->disconnect(this); - QPieSlicePrivate::fromSlice(slice)->disconnect(this); - } + cleanup(); } void PieChartItem::setAnimation(PieAnimation *animation) @@ -81,6 +73,23 @@ ChartAnimation *PieChartItem::animation() const return m_animation; } +void PieChartItem::cleanup() +{ + ChartItem::cleanup(); + + // slice items deleted automatically through QGraphicsItem + if (m_series) { + m_series->disconnect(this); + QPieSeriesPrivate::fromSeries(m_series)->disconnect(this); + m_series = 0; + } + foreach (QPieSlice *slice, m_sliceItems.keys()) { + slice->disconnect(this); + QPieSlicePrivate::fromSlice(slice)->disconnect(this); + } + m_sliceItems.clear(); +} + void PieChartItem::handleDomainUpdated() { QRectF rect(QPointF(0,0),domain()->size()); diff --git a/src/charts/piechart/piechartitem_p.h b/src/charts/piechart/piechartitem_p.h index 98593ba1..dc115e64 100644 --- a/src/charts/piechart/piechartitem_p.h +++ b/src/charts/piechart/piechartitem_p.h @@ -71,6 +71,8 @@ public Q_SLOTS: void setAnimation(PieAnimation *animation); ChartAnimation *animation() const; + // From ChartItem + void cleanup(); private: PieSliceData updateSliceGeometry(QPieSlice *slice); -- cgit v1.2.3 From 0f471b6a71038f86a7ae4c420c9caaa3713e575e Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Fri, 30 Sep 2016 16:30:19 +0300 Subject: Make 'make check' run all of the autotests MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Previously, only the qml-qtquicktest would be run when 'make check' was executed, because the C++ tests were not identified as test cases. Change-Id: Ic263bcc8f13bdf154d6e8a93c8126ce3cb3b005c Reviewed-by: Mika Salmela Reviewed-by: Tomi Korpipää Reviewed-by: Miikka Heikkinen --- tests/auto/auto.pri | 1 + tests/auto/qml-qtquicktest/qml-qtquicktest.pro | 1 + 2 files changed, 2 insertions(+) diff --git a/tests/auto/auto.pri b/tests/auto/auto.pri index a04f5b23..946b0e4a 100644 --- a/tests/auto/auto.pri +++ b/tests/auto/auto.pri @@ -2,6 +2,7 @@ error( "Couldn't find the tests.pri file!" ) } +CONFIG += testcase QT += testlib widgets !contains(TARGET, ^tst_.*):TARGET = $$join(TARGET,,"tst_") diff --git a/tests/auto/qml-qtquicktest/qml-qtquicktest.pro b/tests/auto/qml-qtquicktest/qml-qtquicktest.pro index d9a1e74f..d4919c1d 100644 --- a/tests/auto/qml-qtquicktest/qml-qtquicktest.pro +++ b/tests/auto/qml-qtquicktest/qml-qtquicktest.pro @@ -4,6 +4,7 @@ TEMPLATE = app CONFIG += warn_on qmltestcase +CONFIG -= testcase SOURCES += main.cpp OTHER_FILES += tst_*.qml DEFINES += QUICK_TEST_SOURCE_DIR=\"\\\"$$PWD\\\"\" -- cgit v1.2.3 From 25a7f3a6e747ff06b9fd1b759255b455baa85c77 Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Mon, 3 Oct 2016 17:58:09 +0300 Subject: Fix autotests MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Hover signal tests: Hover signals are randomly failing on various platforms when run on virtual machines, so we skip them for now. When tested manually with an actual mouse, hover signals work just fine, but synthetic mouse move generation doesn't seem to be reliable. QAreaSeries: Hide axes so they don't confuse pixel color checks. QPieSeries: Removed unnecessary window activation check that had nothing to do with the test case and was causing it to fail on some systems. Changed the button size in mouse event skip test to get rid of a warning of minimum size in Windows. Also added processEvents calls to the skip test to minimize impact on the test case. Change-Id: Ia5914c547cbe58facb3a96c448cbbf3998d4a757 Reviewed-by: Tomi Korpipää Reviewed-by: Miikka Heikkinen --- tests/auto/inc/tst_definitions.h | 10 +++++++++- tests/auto/qareaseries/tst_qareaseries.cpp | 3 +++ tests/auto/qbarseries/tst_qbarseries.cpp | 1 + tests/auto/qchartview/tst_qchartview.cpp | 3 +++ tests/auto/qhorizontalbarseries/tst_qhorizontalbarseries.cpp | 1 + .../tst_qhorizontalpercentbarseries.cpp | 1 + .../tst_qhorizontalstackedbarseries.cpp | 1 + tests/auto/qlegend/tst_qlegend.cpp | 3 ++- tests/auto/qpercentbarseries/tst_qpercentbarseries.cpp | 1 + tests/auto/qpieseries/tst_qpieseries.cpp | 8 +------- tests/auto/qpieslice/tst_qpieslice.cpp | 1 + tests/auto/qstackedbarseries/tst_qstackedbarseries.cpp | 1 + 12 files changed, 25 insertions(+), 9 deletions(-) diff --git a/tests/auto/inc/tst_definitions.h b/tests/auto/inc/tst_definitions.h index 66b6e100..292a3166 100644 --- a/tests/auto/inc/tst_definitions.h +++ b/tests/auto/inc/tst_definitions.h @@ -55,14 +55,16 @@ QT_END_NAMESPACE #define SKIP_IF_CANNOT_TEST_MOUSE_EVENTS() { \ do { \ QPushButton b; \ - b.resize(100, 100); \ + b.resize(120, 100); \ b.show(); \ QTest::qWaitForWindowShown(&b); \ QSignalSpy spy(&b, SIGNAL(clicked())); \ QTest::mouseClick(&b, Qt::LeftButton, 0, b.rect().center()); \ + QApplication::processEvents(); \ if (spy.count() == 0) \ QSKIP("Cannot test mouse events in this environment"); \ } while (0); \ + QApplication::processEvents(); \ } #define SKIP_ON_POLAR() { \ @@ -75,6 +77,12 @@ QT_END_NAMESPACE QSKIP("Test not supported by cartesian chart"); \ } +// Synthetic mouse moves do not trigger hover events reliably in many virtual machines, +// so we skip tests involving mouse moves. + #define SKIP_IF_FLAKY_MOUSE_MOVE() { \ + QSKIP("Skipping test with synthetic mouse moves."); \ + } + static inline bool isPolarTest() { static bool isPolar = false; diff --git a/tests/auto/qareaseries/tst_qareaseries.cpp b/tests/auto/qareaseries/tst_qareaseries.cpp index e03989c0..258ea4f2 100644 --- a/tests/auto/qareaseries/tst_qareaseries.cpp +++ b/tests/auto/qareaseries/tst_qareaseries.cpp @@ -125,6 +125,9 @@ void tst_QAreaSeries::dynamicEdgeSeriesChange() m_chart->addSeries(series); series->attachAxis(m_axisX); series->attachAxis(m_axisY); + // Hide axes so they don't confuse color checks + m_axisX->setVisible(false); + m_axisY->setVisible(false); m_view->show(); QTest::qWaitForWindowShown(m_view); diff --git a/tests/auto/qbarseries/tst_qbarseries.cpp b/tests/auto/qbarseries/tst_qbarseries.cpp index bdb094f5..1a75b6b3 100644 --- a/tests/auto/qbarseries/tst_qbarseries.cpp +++ b/tests/auto/qbarseries/tst_qbarseries.cpp @@ -619,6 +619,7 @@ void tst_QBarSeries::mousehovered_data() void tst_QBarSeries::mousehovered() { SKIP_IF_CANNOT_TEST_MOUSE_EVENTS(); + SKIP_IF_FLAKY_MOUSE_MOVE(); QBarSeries* series = new QBarSeries(); diff --git a/tests/auto/qchartview/tst_qchartview.cpp b/tests/auto/qchartview/tst_qchartview.cpp index e7943b92..64592984 100644 --- a/tests/auto/qchartview/tst_qchartview.cpp +++ b/tests/auto/qchartview/tst_qchartview.cpp @@ -135,6 +135,9 @@ void tst_QChartView::rubberBand_data() void tst_QChartView::rubberBand() { + SKIP_IF_CANNOT_TEST_MOUSE_EVENTS(); + SKIP_IF_FLAKY_MOUSE_MOVE(); + QFETCH(QChartView::RubberBands, rubberBand); QFETCH(int, Xcount); QFETCH(int, Ycount); diff --git a/tests/auto/qhorizontalbarseries/tst_qhorizontalbarseries.cpp b/tests/auto/qhorizontalbarseries/tst_qhorizontalbarseries.cpp index 99c204da..292ad3df 100644 --- a/tests/auto/qhorizontalbarseries/tst_qhorizontalbarseries.cpp +++ b/tests/auto/qhorizontalbarseries/tst_qhorizontalbarseries.cpp @@ -566,6 +566,7 @@ void tst_QHorizontalBarSeries::mousehovered_data() void tst_QHorizontalBarSeries::mousehovered() { SKIP_IF_CANNOT_TEST_MOUSE_EVENTS(); + SKIP_IF_FLAKY_MOUSE_MOVE(); QHorizontalBarSeries* series = new QHorizontalBarSeries(); diff --git a/tests/auto/qhorizontalpercentbarseries/tst_qhorizontalpercentbarseries.cpp b/tests/auto/qhorizontalpercentbarseries/tst_qhorizontalpercentbarseries.cpp index baae3a24..0e0b9b85 100644 --- a/tests/auto/qhorizontalpercentbarseries/tst_qhorizontalpercentbarseries.cpp +++ b/tests/auto/qhorizontalpercentbarseries/tst_qhorizontalpercentbarseries.cpp @@ -313,6 +313,7 @@ void tst_QHorizontalPercentBarSeries::mousehovered_data() void tst_QHorizontalPercentBarSeries::mousehovered() { SKIP_IF_CANNOT_TEST_MOUSE_EVENTS(); + SKIP_IF_FLAKY_MOUSE_MOVE(); QHorizontalPercentBarSeries* series = new QHorizontalPercentBarSeries(); diff --git a/tests/auto/qhorizontalstackedbarseries/tst_qhorizontalstackedbarseries.cpp b/tests/auto/qhorizontalstackedbarseries/tst_qhorizontalstackedbarseries.cpp index c78222c9..8d83166c 100644 --- a/tests/auto/qhorizontalstackedbarseries/tst_qhorizontalstackedbarseries.cpp +++ b/tests/auto/qhorizontalstackedbarseries/tst_qhorizontalstackedbarseries.cpp @@ -317,6 +317,7 @@ void tst_QHorizontalStackedBarSeries::mousehovered_data() void tst_QHorizontalStackedBarSeries::mousehovered() { SKIP_IF_CANNOT_TEST_MOUSE_EVENTS(); + SKIP_IF_FLAKY_MOUSE_MOVE(); QHorizontalStackedBarSeries* series = new QHorizontalStackedBarSeries(); diff --git a/tests/auto/qlegend/tst_qlegend.cpp b/tests/auto/qlegend/tst_qlegend.cpp index 2c7ba11c..dc6670c5 100644 --- a/tests/auto/qlegend/tst_qlegend.cpp +++ b/tests/auto/qlegend/tst_qlegend.cpp @@ -498,8 +498,9 @@ void tst_QLegend::xyMarkerPropertiesScatter() void tst_QLegend::markerSignals() { SKIP_ON_POLAR(); - SKIP_IF_CANNOT_TEST_MOUSE_EVENTS(); + SKIP_IF_FLAKY_MOUSE_MOVE(); + QChart *chart = newQChartOrQPolarChart(); QLegend *legend = chart->legend(); diff --git a/tests/auto/qpercentbarseries/tst_qpercentbarseries.cpp b/tests/auto/qpercentbarseries/tst_qpercentbarseries.cpp index 841482b4..d2dea4b2 100644 --- a/tests/auto/qpercentbarseries/tst_qpercentbarseries.cpp +++ b/tests/auto/qpercentbarseries/tst_qpercentbarseries.cpp @@ -315,6 +315,7 @@ void tst_QPercentBarSeries::mousehovered_data() void tst_QPercentBarSeries::mousehovered() { SKIP_IF_CANNOT_TEST_MOUSE_EVENTS(); + SKIP_IF_FLAKY_MOUSE_MOVE(); QPercentBarSeries* series = new QPercentBarSeries(); diff --git a/tests/auto/qpieseries/tst_qpieseries.cpp b/tests/auto/qpieseries/tst_qpieseries.cpp index 0453679f..2ba9af50 100644 --- a/tests/auto/qpieseries/tst_qpieseries.cpp +++ b/tests/auto/qpieseries/tst_qpieseries.cpp @@ -555,6 +555,7 @@ void tst_qpieseries::hoverSignal() // Just for different signals. SKIP_IF_CANNOT_TEST_MOUSE_EVENTS(); + SKIP_IF_FLAKY_MOUSE_MOVE(); // add some slices m_series->append("slice 1", 1); @@ -568,13 +569,6 @@ void tst_qpieseries::hoverSignal() m_view->show(); QTest::qWaitForWindowShown(m_view); - // try to ensure focus - QApplication::setActiveWindow(m_view); - m_view->setFocus(); - QApplication::processEvents(); - QVERIFY(m_view->isActiveWindow()); - QVERIFY(m_view->hasFocus()); - // move inside the slices m_series->setPieSize(1.0); QRectF pieRect = m_view->chart()->plotArea(); diff --git a/tests/auto/qpieslice/tst_qpieslice.cpp b/tests/auto/qpieslice/tst_qpieslice.cpp index 7298be3d..7259bfed 100644 --- a/tests/auto/qpieslice/tst_qpieslice.cpp +++ b/tests/auto/qpieslice/tst_qpieslice.cpp @@ -271,6 +271,7 @@ void tst_qpieslice::hoverSignal() // Just for different signals. SKIP_IF_CANNOT_TEST_MOUSE_EVENTS(); + SKIP_IF_FLAKY_MOUSE_MOVE(); // add some slices QPieSeries *series = new QPieSeries(); diff --git a/tests/auto/qstackedbarseries/tst_qstackedbarseries.cpp b/tests/auto/qstackedbarseries/tst_qstackedbarseries.cpp index cb22a106..eed7fe16 100644 --- a/tests/auto/qstackedbarseries/tst_qstackedbarseries.cpp +++ b/tests/auto/qstackedbarseries/tst_qstackedbarseries.cpp @@ -317,6 +317,7 @@ void tst_QStackedBarSeries::mousehovered_data() void tst_QStackedBarSeries::mousehovered() { SKIP_IF_CANNOT_TEST_MOUSE_EVENTS(); + SKIP_IF_FLAKY_MOUSE_MOVE(); QStackedBarSeries* series = new QStackedBarSeries(); -- cgit v1.2.3 From af8709305d0f6fc899cb8c9dd19c7c2cc67a6d4b Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Fri, 25 Nov 2016 15:48:07 +0200 Subject: Move axis hiding to areaseries test init so it affects all test cases Change-Id: I2434a0b8c862997dd1ffc1ac2556a766d45417b8 Reviewed-by: Mika Salmela Reviewed-by: Miikka Heikkinen --- tests/auto/qareaseries/tst_qareaseries.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/auto/qareaseries/tst_qareaseries.cpp b/tests/auto/qareaseries/tst_qareaseries.cpp index 258ea4f2..16fa94b3 100644 --- a/tests/auto/qareaseries/tst_qareaseries.cpp +++ b/tests/auto/qareaseries/tst_qareaseries.cpp @@ -78,6 +78,9 @@ void tst_QAreaSeries::init() m_axisY = new QValueAxis; m_axisX->setRange(0, 4); m_axisY->setRange(0, 10); + // Hide axes so they don't confuse color checks + m_axisX->setVisible(false); + m_axisY->setVisible(false); m_chart->addAxis(m_axisX, Qt::AlignBottom); m_chart->addAxis(m_axisY, Qt::AlignRight); } @@ -125,9 +128,6 @@ void tst_QAreaSeries::dynamicEdgeSeriesChange() m_chart->addSeries(series); series->attachAxis(m_axisX); series->attachAxis(m_axisY); - // Hide axes so they don't confuse color checks - m_axisX->setVisible(false); - m_axisY->setVisible(false); m_view->show(); QTest::qWaitForWindowShown(m_view); -- cgit v1.2.3