tst_qchartview.cpp
231 lines
| 6.5 KiB
| text/x-c
|
CppLexer
|
r774 | /**************************************************************************** | ||
** | ||||
|
r2688 | ** Copyright (C) 2014 Digia Plc | ||
|
r774 | ** All rights reserved. | ||
|
r2740 | ** For any questions to Digia, please use contact form at http://qt.io | ||
|
r774 | ** | ||
|
r2740 | ** This file is part of the Qt Charts module. | ||
|
r774 | ** | ||
|
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. | ||||
|
r774 | ** | ||
** If you have questions regarding the use of this file, please use | ||||
|
r2740 | ** contact form at http://qt.io | ||
|
r774 | ** | ||
****************************************************************************/ | ||||
#include <QtTest/QtTest> | ||||
|
r2712 | #include <QtCharts/qchartview.h> | ||
#include <QtCharts/qlineseries.h> | ||||
|
r802 | #include <cmath> | ||
|
r1109 | #include <tst_definitions.h> | ||
|
r2714 | #include <QtCharts/QValueAxis> | ||
|
r774 | |||
|
r2712 | QT_CHARTS_USE_NAMESPACE | ||
|
r774 | |||
Q_DECLARE_METATYPE(QChart*) | ||||
Q_DECLARE_METATYPE(QChartView::RubberBands) | ||||
|
r804 | Q_DECLARE_METATYPE(Qt::Key) | ||
|
r774 | |||
class tst_QChartView : public QObject | ||||
{ | ||||
Q_OBJECT | ||||
public Q_SLOTS: | ||||
void initTestCase(); | ||||
void cleanupTestCase(); | ||||
void init(); | ||||
void cleanup(); | ||||
private Q_SLOTS: | ||||
void qchartview_data(); | ||||
void qchartview(); | ||||
void chart_data(); | ||||
void chart(); | ||||
void rubberBand_data(); | ||||
void rubberBand(); | ||||
|
r2056 | void setChart(); | ||
|
r774 | |||
private: | ||||
QChartView* m_view; | ||||
}; | ||||
void tst_QChartView::initTestCase() | ||||
{ | ||||
|
r804 | //test tracks mouse, give a while to user to relese it | ||
QTest::qWait(1000); | ||||
|
r774 | } | ||
void tst_QChartView::cleanupTestCase() | ||||
{ | ||||
|
r2733 | QTest::qWait(1); // Allow final deleteLaters to run | ||
|
r774 | } | ||
void tst_QChartView::init() | ||||
{ | ||||
|
r2483 | m_view = new QChartView(newQChartOrQPolarChart()); | ||
|
r874 | m_view->chart()->legend()->setVisible(false); | ||
|
r774 | } | ||
void tst_QChartView::cleanup() | ||||
{ | ||||
delete m_view; | ||||
m_view =0; | ||||
} | ||||
void tst_QChartView::qchartview_data() | ||||
{ | ||||
} | ||||
void tst_QChartView::qchartview() | ||||
{ | ||||
QVERIFY(m_view->chart()); | ||||
QCOMPARE(m_view->rubberBand(), QChartView::NoRubberBand); | ||||
|
r802 | m_view->show(); | ||
|
r774 | QTest::qWaitForWindowShown(m_view); | ||
|
r1290 | |||
delete(new QChartView()); | ||||
QChartView view; | ||||
QVERIFY(view.chart()); | ||||
|
r774 | } | ||
void tst_QChartView::chart_data() | ||||
{ | ||||
QTest::addColumn<QChart*>("chart"); | ||||
QTest::newRow("qchart") << new QChart(); | ||||
} | ||||
void tst_QChartView::chart() | ||||
{ | ||||
QFETCH(QChart*, chart); | ||||
QChartView* view = new QChartView(chart); | ||||
QCOMPARE(view->chart(), chart); | ||||
delete view; | ||||
} | ||||
void tst_QChartView::rubberBand_data() | ||||
{ | ||||
QTest::addColumn<QChartView::RubberBands>("rubberBand"); | ||||
|
r802 | QTest::addColumn<int>("Xcount"); | ||
QTest::addColumn<int>("Ycount"); | ||||
|
r1883 | QTest::addColumn<QPoint>("min"); | ||
QTest::addColumn<QPoint>("max"); | ||||
|
r2483 | if (isPolarTest()) { | ||
|
r2742 | QTest::newRow("HorizontalRubberBand") << QChartView::RubberBands(QChartView::HorizontalRubberBand) << 0 << 0 << QPoint(5,5) << QPoint(5,5); | ||
|
r2483 | QTest::newRow("VerticalRubberBand") << QChartView::RubberBands(QChartView::VerticalRubberBand) << 0 << 0 << QPoint(5,5) << QPoint(5,5); | ||
QTest::newRow("RectangleRubberBand") << QChartView::RubberBands(QChartView::RectangleRubberBand) << 0 << 0 << QPoint(5,5) << QPoint(5,5); | ||||
} else { | ||||
|
r2742 | QTest::newRow("HorizontalRubberBand") << QChartView::RubberBands(QChartView::HorizontalRubberBand) << 0 << 1 << QPoint(5,5) << QPoint(5,5); | ||
|
r2483 | QTest::newRow("VerticalRubberBand") << QChartView::RubberBands(QChartView::VerticalRubberBand) << 1 << 0 << QPoint(5,5) << QPoint(5,5); | ||
QTest::newRow("RectangleRubberBand") << QChartView::RubberBands(QChartView::RectangleRubberBand) << 1 << 1 << QPoint(5,5) << QPoint(5,5); | ||||
} | ||||
|
r774 | } | ||
void tst_QChartView::rubberBand() | ||||
{ | ||||
QFETCH(QChartView::RubberBands, rubberBand); | ||||
|
r802 | QFETCH(int, Xcount); | ||
QFETCH(int, Ycount); | ||||
|
r1883 | QFETCH(QPoint, min); | ||
QFETCH(QPoint, max); | ||||
|
r802 | |||
|
r774 | m_view->setRubberBand(rubberBand); | ||
|
r1883 | |||
|
r774 | QCOMPARE(m_view->rubberBand(), rubberBand); | ||
|
r802 | |||
QLineSeries* line = new QLineSeries(); | ||||
|
r914 | *line << QPointF(0, 0) << QPointF(200, 200); | ||
|
r802 | |||
m_view->chart()->addSeries(line); | ||||
|
r1652 | m_view->chart()->createDefaultAxes(); | ||
|
r802 | m_view->show(); | ||
|
r2078 | QTest::qWaitForWindowShown(m_view); | ||
|
r804 | |||
|
r1883 | QRectF plotArea = m_view->chart()->plotArea(); | ||
|
r804 | //this is hack since view does not get events otherwise | ||
|
r802 | m_view->setMouseTracking(true); | ||
|
r1541 | QAbstractAxis* axisY = m_view->chart()->axisY(); | ||
|
r967 | QSignalSpy spy0(axisY, SIGNAL(rangeChanged(qreal,qreal))); | ||
|
r1541 | QAbstractAxis* axisX = m_view->chart()->axisX(); | ||
|
r967 | QSignalSpy spy1(axisX, SIGNAL(rangeChanged(qreal,qreal))); | ||
|
r1883 | QValueAxis* vaxisX = qobject_cast<QValueAxis*>(axisX); | ||
QValueAxis* vaxisY = qobject_cast<QValueAxis*>(axisY); | ||||
int minX = vaxisX->min(); | ||||
int minY = vaxisY->min(); | ||||
int maxX = vaxisX->max(); | ||||
int maxY = vaxisY->max(); | ||||
|
r2078 | // try to ensure focus | ||
QApplication::setActiveWindow(m_view); | ||||
m_view->setFocus(); | ||||
QApplication::processEvents(); | ||||
QVERIFY(m_view->isActiveWindow()); | ||||
QVERIFY(m_view->hasFocus()); | ||||
QTest::mouseMove(m_view->viewport(), min + plotArea.topLeft().toPoint(), 100); | ||||
QTest::mousePress(m_view->viewport(), Qt::LeftButton, 0, min + plotArea.topLeft().toPoint(), 100); | ||||
QTest::mouseMove(m_view->viewport(), plotArea.bottomRight().toPoint() - max, 100); | ||||
QTest::mouseRelease(m_view->viewport(), Qt::LeftButton, 0, plotArea.bottomRight().toPoint() - max, 100); | ||||
QApplication::processEvents(); | ||||
|
r874 | |||
|
r1109 | TRY_COMPARE(spy0.count(), Xcount); | ||
TRY_COMPARE(spy1.count(), Ycount); | ||||
|
r804 | |||
//this is hack since view does not get events otherwise | ||||
m_view->setMouseTracking(false); | ||||
|
r1883 | QVERIFY(vaxisX->min() >= minX ); | ||
QVERIFY(vaxisX->max() <= maxX ); | ||||
QVERIFY(vaxisY->min() >= minY ); | ||||
QVERIFY(vaxisY->max() <= maxY ); | ||||
|
r1652 | |||
|
r804 | } | ||
|
r2056 | void tst_QChartView::setChart() | ||
{ | ||||
QPointer<QChart> oldChart = m_view->chart(); | ||||
QLineSeries *series1 = new QLineSeries(); | ||||
series1->append(0,0); | ||||
series1->append(1,1); | ||||
oldChart->addSeries(series1); | ||||
|
r2483 | QPointer<QChart> newChart = newQChartOrQPolarChart(); | ||
|
r2056 | QLineSeries *series2 = new QLineSeries(); | ||
series2->append(0,1); | ||||
series2->append(1,0); | ||||
newChart->addSeries(series2); | ||||
// show current chart | ||||
m_view->show(); | ||||
QTest::qWaitForWindowShown(m_view); | ||||
QTest::qWait(1000); | ||||
// set new chart | ||||
m_view->setChart(newChart); | ||||
QVERIFY(m_view->chart() == newChart); | ||||
QVERIFY(!oldChart.isNull()); // ownership of the oldChart is released and not deleted | ||||
QTest::qWait(1000); | ||||
// delete the view | ||||
delete m_view; | ||||
m_view = 0; | ||||
QVERIFY(newChart.isNull()); // view owns and deletes it | ||||
QVERIFY(!oldChart.isNull()); // not owned by view | ||||
delete oldChart; | ||||
} | ||||
|
r774 | QTEST_MAIN(tst_QChartView) | ||
#include "tst_qchartview.moc" | ||||