tst_qchartview.cpp
225 lines
| 6.0 KiB
| text/x-c
|
CppLexer
Michal Klocek
|
r774 | /**************************************************************************** | ||
** | ||||
** Copyright (C) 2012 Digia Plc | ||||
** All rights reserved. | ||||
** For any questions to Digia, please use contact form at http://qt.digia.com | ||||
** | ||||
** This file is part of the Qt Commercial Charts Add-on. | ||||
** | ||||
** $QT_BEGIN_LICENSE$ | ||||
** Licensees holding valid Qt Commercial licenses may use this file in | ||||
** accordance with the Qt Commercial License Agreement provided with the | ||||
** Software or, alternatively, in accordance with the terms contained in | ||||
** a written agreement between you and Digia. | ||||
** | ||||
** If you have questions regarding the use of this file, please use | ||||
** contact form at http://qt.digia.com | ||||
** $QT_END_LICENSE$ | ||||
** | ||||
****************************************************************************/ | ||||
#include <QtTest/QtTest> | ||||
#include <qchartview.h> | ||||
Michal Klocek
|
r802 | #include <qlineseries.h> | ||
#include <cmath> | ||||
Tero Ahola
|
r1109 | #include <tst_definitions.h> | ||
Marek Rosa
|
r1805 | #include <qvalueaxis.h> | ||
Michal Klocek
|
r774 | |||
QTCOMMERCIALCHART_USE_NAMESPACE | ||||
Q_DECLARE_METATYPE(QChart*) | ||||
Q_DECLARE_METATYPE(QChartView::RubberBands) | ||||
Michal Klocek
|
r804 | Q_DECLARE_METATYPE(Qt::Key) | ||
Michal Klocek
|
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(); | ||||
Jani Honkonen
|
r2056 | void setChart(); | ||
Michal Klocek
|
r774 | |||
private: | ||||
QChartView* m_view; | ||||
}; | ||||
void tst_QChartView::initTestCase() | ||||
{ | ||||
Michal Klocek
|
r804 | //test tracks mouse, give a while to user to relese it | ||
QTest::qWait(1000); | ||||
Michal Klocek
|
r774 | } | ||
void tst_QChartView::cleanupTestCase() | ||||
{ | ||||
} | ||||
void tst_QChartView::init() | ||||
{ | ||||
m_view = new QChartView(new QChart()); | ||||
Michal Klocek
|
r874 | m_view->chart()->legend()->setVisible(false); | ||
Michal Klocek
|
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); | ||||
Michal Klocek
|
r802 | m_view->show(); | ||
Michal Klocek
|
r774 | QTest::qWaitForWindowShown(m_view); | ||
Michal Klocek
|
r1290 | |||
delete(new QChartView()); | ||||
QChartView view; | ||||
QVERIFY(view.chart()); | ||||
Michal Klocek
|
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"); | ||||
Michal Klocek
|
r802 | QTest::addColumn<int>("Xcount"); | ||
QTest::addColumn<int>("Ycount"); | ||||
Michal Klocek
|
r1883 | QTest::addColumn<QPoint>("min"); | ||
QTest::addColumn<QPoint>("max"); | ||||
QTest::newRow("HorizonalRubberBand") << QChartView::RubberBands(QChartView::HorizonalRubberBand) << 0 << 1 << QPoint(5,5) << QPoint(5,5); | ||||
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); | ||||
Michal Klocek
|
r774 | } | ||
void tst_QChartView::rubberBand() | ||||
{ | ||||
QFETCH(QChartView::RubberBands, rubberBand); | ||||
Michal Klocek
|
r802 | QFETCH(int, Xcount); | ||
QFETCH(int, Ycount); | ||||
Michal Klocek
|
r1883 | QFETCH(QPoint, min); | ||
QFETCH(QPoint, max); | ||||
Michal Klocek
|
r802 | |||
Michal Klocek
|
r774 | m_view->setRubberBand(rubberBand); | ||
Michal Klocek
|
r1883 | |||
Michal Klocek
|
r774 | QCOMPARE(m_view->rubberBand(), rubberBand); | ||
Michal Klocek
|
r802 | |||
QLineSeries* line = new QLineSeries(); | ||||
Michal Klocek
|
r914 | *line << QPointF(0, 0) << QPointF(200, 200); | ||
Michal Klocek
|
r802 | |||
m_view->chart()->addSeries(line); | ||||
Michal Klocek
|
r1652 | m_view->chart()->createDefaultAxes(); | ||
Michal Klocek
|
r802 | m_view->show(); | ||
Jani Honkonen
|
r2078 | QTest::qWaitForWindowShown(m_view); | ||
Michal Klocek
|
r804 | |||
Michal Klocek
|
r1883 | QRectF plotArea = m_view->chart()->plotArea(); | ||
Michal Klocek
|
r804 | //this is hack since view does not get events otherwise | ||
Michal Klocek
|
r802 | m_view->setMouseTracking(true); | ||
Michal Klocek
|
r1541 | QAbstractAxis* axisY = m_view->chart()->axisY(); | ||
Michal Klocek
|
r967 | QSignalSpy spy0(axisY, SIGNAL(rangeChanged(qreal,qreal))); | ||
Michal Klocek
|
r1541 | QAbstractAxis* axisX = m_view->chart()->axisX(); | ||
Michal Klocek
|
r967 | QSignalSpy spy1(axisX, SIGNAL(rangeChanged(qreal,qreal))); | ||
Michal Klocek
|
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(); | ||||
Jani Honkonen
|
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(); | ||||
Michal Klocek
|
r874 | |||
Tero Ahola
|
r1109 | TRY_COMPARE(spy0.count(), Xcount); | ||
TRY_COMPARE(spy1.count(), Ycount); | ||||
Michal Klocek
|
r804 | |||
//this is hack since view does not get events otherwise | ||||
m_view->setMouseTracking(false); | ||||
Michal Klocek
|
r1883 | QVERIFY(vaxisX->min() >= minX ); | ||
QVERIFY(vaxisX->max() <= maxX ); | ||||
QVERIFY(vaxisY->min() >= minY ); | ||||
QVERIFY(vaxisY->max() <= maxY ); | ||||
Michal Klocek
|
r1652 | |||
Michal Klocek
|
r804 | } | ||
Jani Honkonen
|
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); | ||||
QPointer<QChart> newChart = new QChart(); | ||||
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; | ||||
} | ||||
Michal Klocek
|
r774 | QTEST_MAIN(tst_QChartView) | ||
#include "tst_qchartview.moc" | ||||