##// END OF EJS Templates
more work on colorbar axis, stuck with qtchart mecanism
more work on colorbar axis, stuck with qtchart mecanism

File last commit:

r0:5db0360e1259 default
r2:192d35dac363 default
Show More
tst_qchart.cpp
1092 lines | 33.8 KiB | text/x-c | CppLexer
winter
first init : ColorMapChart added to QtCharts
r0 /****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the Qt Charts module of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:GPL$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 or (at your option) any later version
** approved by the KDE Free Qt Foundation. The licenses are as published by
** the Free Software Foundation and appearing in the file LICENSE.GPL3
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
** $QT_END_LICENSE$
**
****************************************************************************/
#include <QtTest/QtTest>
#include <QtCharts/QChartView>
#include <QtCharts/QLineSeries>
#include <QtCharts/QAreaSeries>
#include <QtCharts/QScatterSeries>
#include <QtCharts/QSplineSeries>
#include <QtCharts/QPieSeries>
#include <QtCharts/QAbstractBarSeries>
#include <QtCharts/QBarSeries>
#include <QtCharts/QPercentBarSeries>
#include <QtCharts/QStackedBarSeries>
#include <QtCharts/QValueAxis>
#include <QtCharts/QBarCategoryAxis>
#include "tst_definitions.h"
QT_CHARTS_USE_NAMESPACE
Q_DECLARE_METATYPE(QAbstractAxis *)
Q_DECLARE_METATYPE(QValueAxis *)
Q_DECLARE_METATYPE(QBarCategoryAxis *)
Q_DECLARE_METATYPE(QAbstractSeries *)
Q_DECLARE_METATYPE(QChart::AnimationOption)
Q_DECLARE_METATYPE(QBrush)
Q_DECLARE_METATYPE(QPen)
Q_DECLARE_METATYPE(QChart::ChartTheme)
class tst_QChart : public QObject
{
Q_OBJECT
public slots:
void initTestCase();
void cleanupTestCase();
void init();
void cleanup();
private slots:
void qchart_data();
void qchart();
void addSeries_data();
void addSeries();
void animationOptions_data();
void animationOptions();
void animationDuration();
void animationCurve_data();
void animationCurve();
void axisX_data();
void axisX();
void axisY_data();
void axisY();
void backgroundBrush_data();
void backgroundBrush();
void backgroundPen_data();
void backgroundPen();
void isBackgroundVisible_data();
void isBackgroundVisible();
void plotAreaBackgroundBrush_data();
void plotAreaBackgroundBrush();
void plotAreaBackgroundPen_data();
void plotAreaBackgroundPen();
void isPlotAreaBackgroundVisible_data();
void isPlotAreaBackgroundVisible();
void legend_data();
void legend();
void plotArea_data();
void plotArea();
void removeAllSeries_data();
void removeAllSeries();
void removeSeries_data();
void removeSeries();
void scroll_right_data();
void scroll_right();
void scroll_left_data();
void scroll_left();
void scroll_up_data();
void scroll_up();
void scroll_down_data();
void scroll_down();
void theme_data();
void theme();
void title_data();
void title();
void titleBrush_data();
void titleBrush();
void titleFont_data();
void titleFont();
void zoomIn_data();
void zoomIn();
void zoomOut_data();
void zoomOut();
void zoomReset();
void createDefaultAxesForLineSeries_data();
void createDefaultAxesForLineSeries();
void axisPolarOrientation();
void backgroundRoundness();
private:
void createTestData();
private:
QChartView* m_view;
QChart* m_chart;
};
void tst_QChart::initTestCase()
{
}
void tst_QChart::cleanupTestCase()
{
QTest::qWait(1); // Allow final deleteLaters to run
}
void tst_QChart::init()
{
m_view = new QChartView(newQChartOrQPolarChart());
m_chart = m_view->chart();
}
void tst_QChart::cleanup()
{
delete m_view;
m_view = 0;
m_chart = 0;
}
void tst_QChart::createTestData()
{
QLineSeries* series0 = new QLineSeries(this);
*series0 << QPointF(0, 0) << QPointF(100, 100);
m_chart->addSeries(series0);
m_view->show();
QTest::qWaitForWindowShown(m_view);
}
void tst_QChart::qchart_data()
{
}
void tst_QChart::qchart()
{
QVERIFY(m_chart);
QVERIFY(m_chart->legend());
QVERIFY(m_chart->legend()->isVisible());
QCOMPARE(m_chart->animationOptions(), QChart::NoAnimation);
QCOMPARE(m_chart->animationDuration(), 1000);
QCOMPARE(m_chart->animationEasingCurve(), QEasingCurve(QEasingCurve::OutQuart));
QVERIFY(!m_chart->axisX());
QVERIFY(!m_chart->axisY());
QVERIFY(m_chart->backgroundBrush()!=QBrush());
QVERIFY(m_chart->backgroundPen()!=QPen());
QCOMPARE(m_chart->isBackgroundVisible(), true);
QVERIFY(m_chart->plotArea().top()==0);
QVERIFY(m_chart->plotArea().left()==0);
QVERIFY(m_chart->plotArea().right()==0);
QVERIFY(m_chart->plotArea().bottom()==0);
QCOMPARE(m_chart->theme(), QChart::ChartThemeLight);
QCOMPARE(m_chart->title(), QString());
//QCOMPARE(m_chart->titleBrush(),QBrush());
//QCOMPARE(m_chart->titleFont(),QFont());
m_chart->removeAllSeries();
m_chart->scroll(0,0);
m_chart->zoomIn();
m_chart->zoomIn(QRectF());
m_chart->zoomOut();
m_view->show();
QVERIFY(m_chart->plotArea().top()>0);
QVERIFY(m_chart->plotArea().left()>0);
QVERIFY(m_chart->plotArea().right()>0);
QVERIFY(m_chart->plotArea().bottom()>0);
}
void tst_QChart::addSeries_data()
{
QTest::addColumn<QAbstractSeries *>("series");
QAbstractSeries* line = new QLineSeries(this);
QAbstractSeries* area = new QAreaSeries(new QLineSeries(this));
QAbstractSeries* scatter = new QScatterSeries(this);
QAbstractSeries* spline = new QSplineSeries(this);
QTest::newRow("lineSeries") << line;
QTest::newRow("areaSeries") << area;
QTest::newRow("scatterSeries") << scatter;
QTest::newRow("splineSeries") << spline;
if (!isPolarTest()) {
QAbstractSeries* pie = new QPieSeries(this);
QAbstractSeries* bar = new QBarSeries(this);
QAbstractSeries* percent = new QPercentBarSeries(this);
QAbstractSeries* stacked = new QStackedBarSeries(this);
QTest::newRow("pieSeries") << pie;
QTest::newRow("barSeries") << bar;
QTest::newRow("percentBarSeries") << percent;
QTest::newRow("stackedBarSeries") << stacked;
}
}
void tst_QChart::addSeries()
{
QFETCH(QAbstractSeries *, series);
m_view->show();
QTest::qWaitForWindowShown(m_view);
QVERIFY(!series->chart());
QCOMPARE(m_chart->series().count(), 0);
m_chart->addSeries(series);
QCOMPARE(m_chart->series().count(), 1);
QCOMPARE(m_chart->series().first(), series);
QVERIFY(series->chart() == m_chart);
m_chart->createDefaultAxes();
if(series->type()!=QAbstractSeries::SeriesTypePie){
QVERIFY(m_chart->axisY(series));
QVERIFY(m_chart->axisX(series));
}else{
QVERIFY(!m_chart->axisY(series));
QVERIFY(!m_chart->axisX(series));
}
m_chart->removeSeries(series);
QVERIFY(!series->chart());
QCOMPARE(m_chart->series().count(), 0);
delete series;
}
void tst_QChart::animationOptions_data()
{
QTest::addColumn<QChart::AnimationOption>("animationOptions");
QTest::newRow("AllAnimations") << QChart::AllAnimations;
QTest::newRow("NoAnimation") << QChart::NoAnimation;
QTest::newRow("GridAxisAnimations") << QChart::GridAxisAnimations;
QTest::newRow("SeriesAnimations") << QChart::SeriesAnimations;
}
void tst_QChart::animationOptions()
{
createTestData();
QFETCH(QChart::AnimationOption, animationOptions);
m_chart->setAnimationOptions(animationOptions);
QCOMPARE(m_chart->animationOptions(), animationOptions);
}
void tst_QChart::animationDuration()
{
createTestData();
m_chart->setAnimationDuration(2000);
QVERIFY(m_chart->animationDuration() == 2000);
}
void tst_QChart::animationCurve_data()
{
QTest::addColumn<QEasingCurve>("animationCurve");
QTest::newRow("Linear") << QEasingCurve(QEasingCurve::Linear);
QTest::newRow("InCubic") << QEasingCurve(QEasingCurve::InCubic);
QTest::newRow("OutSine") << QEasingCurve(QEasingCurve::OutSine);
QTest::newRow("OutInBack") << QEasingCurve(QEasingCurve::OutInBack);
}
void tst_QChart::animationCurve()
{
createTestData();
QFETCH(QEasingCurve, animationCurve);
m_chart->setAnimationEasingCurve(animationCurve);
QCOMPARE(m_chart->animationEasingCurve(), animationCurve);
}
void tst_QChart::axisX_data()
{
QTest::addColumn<QAbstractAxis*>("axis");
QTest::addColumn<QAbstractSeries *>("series");
QTest::newRow("categories,lineSeries") << (QAbstractAxis*) new QBarCategoryAxis() << (QAbstractSeries*) new QLineSeries(this);
QTest::newRow("categories,areaSeries") << (QAbstractAxis*) new QBarCategoryAxis() << (QAbstractSeries*) new QAreaSeries(new QLineSeries(this));
QTest::newRow("categories,scatterSeries") << (QAbstractAxis*) new QBarCategoryAxis() << (QAbstractSeries*) new QScatterSeries(this);
QTest::newRow("categories,splineSeries") << (QAbstractAxis*) new QBarCategoryAxis() << (QAbstractSeries*) new QSplineSeries(this);
if (!isPolarTest()) {
QTest::newRow("categories,pieSeries") << (QAbstractAxis*) new QBarCategoryAxis() << (QAbstractSeries*) new QPieSeries(this);
QTest::newRow("categories,barSeries") << (QAbstractAxis*) new QBarCategoryAxis() << (QAbstractSeries*) new QBarSeries(this);
QTest::newRow("categories,percentBarSeries") << (QAbstractAxis*) new QBarCategoryAxis() << (QAbstractSeries*) new QPercentBarSeries(this);
QTest::newRow("categories,stackedBarSeries") << (QAbstractAxis*) new QBarCategoryAxis() << (QAbstractSeries*) new QStackedBarSeries(this);
}
QTest::newRow("value,lineSeries") << (QAbstractAxis*) new QValueAxis() << (QAbstractSeries*) new QLineSeries(this);
QTest::newRow("value,areaSeries") << (QAbstractAxis*) new QValueAxis() << (QAbstractSeries*) new QAreaSeries(new QLineSeries(this));
QTest::newRow("value,scatterSeries") << (QAbstractAxis*) new QValueAxis() << (QAbstractSeries*) new QScatterSeries(this);
QTest::newRow("value,splineSeries") << (QAbstractAxis*) new QValueAxis() << (QAbstractSeries*) new QSplineSeries(this);
if (!isPolarTest()) {
QTest::newRow("value,pieSeries") << (QAbstractAxis*) new QValueAxis() << (QAbstractSeries*) new QPieSeries(this);
QTest::newRow("value,barSeries") << (QAbstractAxis*) new QValueAxis() << (QAbstractSeries*) new QBarSeries(this);
QTest::newRow("value,percentBarSeries") << (QAbstractAxis*) new QValueAxis() << (QAbstractSeries*) new QPercentBarSeries(this);
QTest::newRow("value,stackedBarSeries") << (QAbstractAxis*) new QValueAxis() << (QAbstractSeries*) new QStackedBarSeries(this);
}
}
void tst_QChart::axisX()
{
QFETCH(QAbstractAxis*, axis);
QFETCH(QAbstractSeries*, series);
QVERIFY(!m_chart->axisX());
m_view->show();
QTest::qWaitForWindowShown(m_view);
m_chart->addSeries(series);
m_chart->setAxisX(axis,series);
QVERIFY(m_chart->axisX(series)==axis);
}
void tst_QChart::axisY_data()
{
axisX_data();
}
void tst_QChart::axisY()
{
QFETCH(QAbstractAxis*, axis);
QFETCH(QAbstractSeries*, series);
QVERIFY(!m_chart->axisY());
m_view->show();
QTest::qWaitForWindowShown(m_view);
m_chart->addSeries(series);
m_chart->setAxisY(axis,series);
QVERIFY(m_chart->axisY(series)==axis);
}
void tst_QChart::backgroundBrush_data()
{
QTest::addColumn<QBrush>("backgroundBrush");
QTest::newRow("null") << QBrush();
QTest::newRow("blue") << QBrush(Qt::blue);
QTest::newRow("white") << QBrush(Qt::white);
QTest::newRow("black") << QBrush(Qt::black);
}
void tst_QChart::backgroundBrush()
{
QFETCH(QBrush, backgroundBrush);
m_chart->setBackgroundBrush(backgroundBrush);
QCOMPARE(m_chart->backgroundBrush(), backgroundBrush);
}
void tst_QChart::backgroundPen_data()
{
QTest::addColumn<QPen>("backgroundPen");
QTest::newRow("null") << QPen();
QTest::newRow("blue") << QPen(Qt::blue);
QTest::newRow("white") << QPen(Qt::white);
QTest::newRow("black") << QPen(Qt::black);
}
void tst_QChart::backgroundPen()
{
QFETCH(QPen, backgroundPen);
m_chart->setBackgroundPen(backgroundPen);
QCOMPARE(m_chart->backgroundPen(), backgroundPen);
}
void tst_QChart::isBackgroundVisible_data()
{
QTest::addColumn<bool>("isBackgroundVisible");
QTest::newRow("true") << true;
QTest::newRow("false") << false;
}
void tst_QChart::isBackgroundVisible()
{
QFETCH(bool, isBackgroundVisible);
m_chart->setBackgroundVisible(isBackgroundVisible);
QCOMPARE(m_chart->isBackgroundVisible(), isBackgroundVisible);
}
void tst_QChart::plotAreaBackgroundBrush_data()
{
QTest::addColumn<QBrush>("plotAreaBackgroundBrush");
QTest::newRow("null") << QBrush();
QTest::newRow("blue") << QBrush(Qt::blue);
QTest::newRow("white") << QBrush(Qt::white);
QTest::newRow("black") << QBrush(Qt::black);
}
void tst_QChart::plotAreaBackgroundBrush()
{
QFETCH(QBrush, plotAreaBackgroundBrush);
m_chart->setPlotAreaBackgroundBrush(plotAreaBackgroundBrush);
QCOMPARE(m_chart->plotAreaBackgroundBrush(), plotAreaBackgroundBrush);
}
void tst_QChart::plotAreaBackgroundPen_data()
{
QTest::addColumn<QPen>("plotAreaBackgroundPen");
QTest::newRow("null") << QPen();
QTest::newRow("blue") << QPen(Qt::blue);
QTest::newRow("white") << QPen(Qt::white);
QTest::newRow("black") << QPen(Qt::black);
}
void tst_QChart::plotAreaBackgroundPen()
{
QFETCH(QPen, plotAreaBackgroundPen);
m_chart->setPlotAreaBackgroundPen(plotAreaBackgroundPen);
QCOMPARE(m_chart->plotAreaBackgroundPen(), plotAreaBackgroundPen);
}
void tst_QChart::isPlotAreaBackgroundVisible_data()
{
QTest::addColumn<bool>("isPlotAreaBackgroundVisible");
QTest::newRow("true") << true;
QTest::newRow("false") << false;
}
void tst_QChart::isPlotAreaBackgroundVisible()
{
QFETCH(bool, isPlotAreaBackgroundVisible);
m_chart->setPlotAreaBackgroundVisible(isPlotAreaBackgroundVisible);
QCOMPARE(m_chart->isPlotAreaBackgroundVisible(), isPlotAreaBackgroundVisible);
}
void tst_QChart::legend_data()
{
}
void tst_QChart::legend()
{
QLegend *legend = m_chart->legend();
QVERIFY(legend);
QVERIFY(!m_chart->legend()->reverseMarkers());
// Colors related signals
QSignalSpy colorSpy(legend, SIGNAL(colorChanged(QColor)));
QSignalSpy borderColorSpy(legend, SIGNAL(borderColorChanged(QColor)));
QSignalSpy labelColorSpy(legend, SIGNAL(labelColorChanged(QColor)));
// colorChanged
legend->setColor(QColor("aliceblue"));
QCOMPARE(colorSpy.count(), 1);
QBrush b = legend->brush();
b.setColor(QColor("aqua"));
legend->setBrush(b);
QCOMPARE(colorSpy.count(), 2);
// borderColorChanged
legend->setBorderColor(QColor("aliceblue"));
QCOMPARE(borderColorSpy.count(), 1);
QPen p = legend->pen();
p.setColor(QColor("aqua"));
legend->setPen(p);
QCOMPARE(borderColorSpy.count(), 2);
// labelColorChanged
legend->setLabelColor(QColor("lightsalmon"));
QCOMPARE(labelColorSpy.count(), 1);
b = legend->labelBrush();
b.setColor(QColor("lightseagreen"));
legend->setLabelBrush(b);
QCOMPARE(labelColorSpy.count(), 2);
// fontChanged
QSignalSpy fontSpy(legend, SIGNAL(fontChanged(QFont)));
QFont f = legend->font();
f.setBold(!f.bold());
legend->setFont(f);
QCOMPARE(fontSpy.count(), 1);
// reverseMarkersChanged
QSignalSpy reverseMarkersSpy(legend, SIGNAL(reverseMarkersChanged(bool)));
QCOMPARE(reverseMarkersSpy.count(), 0);
legend->setReverseMarkers();
QCOMPARE(reverseMarkersSpy.count(), 1);
QVERIFY(legend->reverseMarkers());
}
void tst_QChart::plotArea_data()
{
}
void tst_QChart::plotArea()
{
createTestData();
QRectF rect = m_chart->geometry();
QVERIFY(m_chart->plotArea().isValid());
QVERIFY(m_chart->plotArea().height() < rect.height());
QVERIFY(m_chart->plotArea().width() < rect.width());
}
void tst_QChart::removeAllSeries_data()
{
}
void tst_QChart::removeAllSeries()
{
QLineSeries* series0 = new QLineSeries(this);
QLineSeries* series1 = new QLineSeries(this);
QLineSeries* series2 = new QLineSeries(this);
QSignalSpy deleteSpy1(series0, SIGNAL(destroyed()));
QSignalSpy deleteSpy2(series1, SIGNAL(destroyed()));
QSignalSpy deleteSpy3(series2, SIGNAL(destroyed()));
m_chart->addSeries(series0);
m_chart->addSeries(series1);
m_chart->addSeries(series2);
m_view->show();
QTest::qWaitForWindowShown(m_view);
m_chart->createDefaultAxes();
QCOMPARE(m_chart->axes().count(), 2);
QVERIFY(m_chart->axisY(series0)!=0);
QVERIFY(m_chart->axisY(series1)!=0);
QVERIFY(m_chart->axisY(series2)!=0);
m_chart->removeAllSeries();
QCOMPARE(m_chart->axes().count(), 2);
QVERIFY(m_chart->axisX() != 0);
QVERIFY(m_chart->axisY() != 0);
QCOMPARE(deleteSpy1.count(), 1);
QCOMPARE(deleteSpy2.count(), 1);
QCOMPARE(deleteSpy3.count(), 1);
}
void tst_QChart::removeSeries_data()
{
axisX_data();
}
void tst_QChart::removeSeries()
{
QFETCH(QAbstractAxis *, axis);
QFETCH(QAbstractSeries *, series);
QSignalSpy deleteSpy(series, SIGNAL(destroyed()));
m_view->show();
QTest::qWaitForWindowShown(m_view);
if(!axis) axis = m_chart->axisY();
m_chart->addSeries(series);
m_chart->setAxisY(axis,series);
QCOMPARE(m_chart->axisY(series),axis);
m_chart->removeSeries(series);
QCOMPARE(m_chart->axes().count(), 1);
QVERIFY(m_chart->axisY() != 0);
QVERIFY(m_chart->axisY(series)==0);
QCOMPARE(deleteSpy.count(), 0);
delete series;
}
void tst_QChart::scroll_right_data()
{
QTest::addColumn<QAbstractSeries *>("series");
QLineSeries* series0 = new QLineSeries(this);
*series0 << QPointF(0, 0) << QPointF(100, 100);
QTest::newRow("lineSeries") << (QAbstractSeries*) series0;
}
void tst_QChart::scroll_right()
{
QFETCH(QAbstractSeries *, series);
m_chart->addSeries(series);
m_chart->createDefaultAxes();
m_view->show();
QTest::qWaitForWindowShown(m_view);
QAbstractAxis * axis = m_chart->axisX();
QVERIFY(axis!=0);
switch(axis->type())
{
case QAbstractAxis::AxisTypeValue:{
QValueAxis* vaxis = qobject_cast<QValueAxis*>(axis);
QVERIFY(vaxis!=0);
qreal min = vaxis->min();
qreal max = vaxis->max();
QVERIFY(max>min);
m_chart->scroll(50, 0);
QVERIFY(min<vaxis->min());
QVERIFY(max<vaxis->max());
break;
}
case QAbstractAxis::AxisTypeBarCategory:{
QBarCategoryAxis* caxis = qobject_cast<QBarCategoryAxis*>(axis);
QVERIFY(caxis!=0);
qreal min = caxis->min().toDouble();
qreal max = caxis->max().toDouble();
m_chart->scroll(50, 0);
QVERIFY(min<caxis->min().toDouble());
QVERIFY(max<caxis->max().toDouble());
break;
}
default:
qFatal("Unsupported type");
break;
}
}
void tst_QChart::scroll_left_data()
{
scroll_right_data();
}
void tst_QChart::scroll_left()
{
QFETCH(QAbstractSeries *, series);
m_chart->addSeries(series);
m_chart->createDefaultAxes();
m_view->show();
QTest::qWaitForWindowShown(m_view);
QAbstractAxis * axis = m_chart->axisX();
QVERIFY(axis!=0);
switch(axis->type())
{
case QAbstractAxis::AxisTypeValue:{
QValueAxis* vaxis = qobject_cast<QValueAxis*>(axis);
QVERIFY(vaxis!=0);
qreal min = vaxis->min();
qreal max = vaxis->max();
m_chart->scroll(-50, 0);
QVERIFY(min>vaxis->min());
QVERIFY(max>vaxis->max());
break;
}
case QAbstractAxis::AxisTypeBarCategory:{
QBarCategoryAxis* caxis = qobject_cast<QBarCategoryAxis*>(axis);
QVERIFY(caxis!=0);
qreal min = caxis->min().toDouble();
qreal max = caxis->max().toDouble();
m_chart->scroll(-50, 0);
QVERIFY(min>caxis->min().toDouble());
QVERIFY(max>caxis->max().toDouble());
break;
}
default:
qFatal("Unsupported type");
break;
}
}
void tst_QChart::scroll_up_data()
{
scroll_right_data();
}
void tst_QChart::scroll_up()
{
QFETCH(QAbstractSeries *, series);
m_chart->addSeries(series);
m_chart->createDefaultAxes();
m_view->show();
QTest::qWaitForWindowShown(m_view);
QAbstractAxis * axis = m_chart->axisY();
QVERIFY(axis!=0);
switch(axis->type())
{
case QAbstractAxis::AxisTypeValue:{
QValueAxis* vaxis = qobject_cast<QValueAxis*>(axis);
QVERIFY(vaxis!=0);
qreal min = vaxis->min();
qreal max = vaxis->max();
m_chart->scroll(0, 50);
QVERIFY(min<vaxis->min());
QVERIFY(max<vaxis->max());
break;
}
case QAbstractAxis::AxisTypeBarCategory:{
QBarCategoryAxis* caxis = qobject_cast<QBarCategoryAxis*>(axis);
QVERIFY(caxis!=0);
qreal min = caxis->min().toDouble();
qreal max = caxis->max().toDouble();
m_chart->scroll(0, 50);
QVERIFY(min<caxis->min().toDouble());
QVERIFY(max<caxis->max().toDouble());
break;
}
default:
qFatal("Unsupported type");
break;
}
}
void tst_QChart::scroll_down_data()
{
scroll_right_data();
}
void tst_QChart::scroll_down()
{
QFETCH(QAbstractSeries *, series);
m_chart->addSeries(series);
m_chart->createDefaultAxes();
m_view->show();
QTest::qWaitForWindowShown(m_view);
QAbstractAxis * axis = m_chart->axisY();
QVERIFY(axis!=0);
switch(axis->type())
{
case QAbstractAxis::AxisTypeValue:{
QValueAxis* vaxis = qobject_cast<QValueAxis*>(axis);
QVERIFY(vaxis!=0);
qreal min = vaxis->min();
qreal max = vaxis->max();
m_chart->scroll(0, -50);
QVERIFY(min>vaxis->min());
QVERIFY(max>vaxis->max());
break;
}
case QAbstractAxis::AxisTypeBarCategory:{
QBarCategoryAxis* caxis = qobject_cast<QBarCategoryAxis*>(axis);
QVERIFY(caxis!=0);
qreal min = caxis->min().toDouble();
qreal max = caxis->max().toDouble();
m_chart->scroll(0, -50);
QVERIFY(min>caxis->min().toDouble());
QVERIFY(max>caxis->max().toDouble());
break;
}
default:
qFatal("Unsupported type");
break;
}
}
void tst_QChart::theme_data()
{
QTest::addColumn<QChart::ChartTheme>("theme");
QTest::newRow("ChartThemeBlueCerulean") << QChart::ChartThemeBlueCerulean;
QTest::newRow("ChartThemeBlueIcy") << QChart::ChartThemeBlueIcy;
QTest::newRow("ChartThemeBlueNcs") << QChart::ChartThemeBlueNcs;
QTest::newRow("ChartThemeBrownSand") << QChart::ChartThemeBrownSand;
QTest::newRow("ChartThemeDark") << QChart::ChartThemeDark;
QTest::newRow("hartThemeHighContrast") << QChart::ChartThemeHighContrast;
QTest::newRow("ChartThemeLight") << QChart::ChartThemeLight;
QTest::newRow("ChartThemeQt") << QChart::ChartThemeQt;
}
void tst_QChart::theme()
{
QFETCH(QChart::ChartTheme, theme);
createTestData();
m_chart->setTheme(theme);
QVERIFY(m_chart->theme()==theme);
}
void tst_QChart::title_data()
{
QTest::addColumn<QString>("title");
QTest::newRow("null") << QString();
QTest::newRow("foo") << QString("foo");
}
void tst_QChart::title()
{
QFETCH(QString, title);
m_chart->setTitle(title);
QCOMPARE(m_chart->title(), title);
}
void tst_QChart::titleBrush_data()
{
QTest::addColumn<QBrush>("titleBrush");
QTest::newRow("null") << QBrush();
QTest::newRow("blue") << QBrush(Qt::blue);
QTest::newRow("white") << QBrush(Qt::white);
QTest::newRow("black") << QBrush(Qt::black);
}
void tst_QChart::titleBrush()
{
QFETCH(QBrush, titleBrush);
m_chart->setTitleBrush(titleBrush);
QCOMPARE(m_chart->titleBrush().color(), titleBrush.color());
}
void tst_QChart::titleFont_data()
{
QTest::addColumn<QFont>("titleFont");
QTest::newRow("null") << QFont();
QTest::newRow("courier") << QFont("Courier", 8, QFont::Bold, true);
}
void tst_QChart::titleFont()
{
QFETCH(QFont, titleFont);
m_chart->setTitleFont(titleFont);
QCOMPARE(m_chart->titleFont(), titleFont);
}
void tst_QChart::zoomIn_data()
{
QTest::addColumn<QRectF>("rect");
QTest::newRow("null") << QRectF();
QTest::newRow("100x100") << QRectF(10,10,100,100);
QTest::newRow("200x200") << QRectF(10,10,200,200);
}
void tst_QChart::zoomIn()
{
QFETCH(QRectF, rect);
createTestData();
m_chart->createDefaultAxes();
QRectF marigns = m_chart->plotArea();
rect.adjust(marigns.left(),marigns.top(),-marigns.right(),-marigns.bottom());
QValueAxis* axisX = qobject_cast<QValueAxis*>(m_chart->axisX());
QVERIFY(axisX!=0);
QValueAxis* axisY = qobject_cast<QValueAxis*>(m_chart->axisY());
QVERIFY(axisY!=0);
qreal minX = axisX->min();
qreal minY = axisY->min();
qreal maxX = axisX->max();
qreal maxY = axisY->max();
m_chart->zoomIn(rect);
if(rect.isValid()){
QVERIFY(minX<axisX->min());
QVERIFY(maxX>axisX->max());
QVERIFY(minY<axisY->min());
QVERIFY(maxY>axisY->max());
}
}
void tst_QChart::zoomOut_data()
{
}
void tst_QChart::zoomOut()
{
createTestData();
m_chart->createDefaultAxes();
QValueAxis* axisX = qobject_cast<QValueAxis*>(m_chart->axisX());
QVERIFY(axisX!=0);
QValueAxis* axisY = qobject_cast<QValueAxis*>(m_chart->axisY());
QVERIFY(axisY!=0);
qreal minX = axisX->min();
qreal minY = axisY->min();
qreal maxX = axisX->max();
qreal maxY = axisY->max();
m_chart->zoomIn();
QVERIFY(minX < axisX->min());
QVERIFY(maxX > axisX->max());
QVERIFY(minY < axisY->min());
QVERIFY(maxY > axisY->max());
m_chart->zoomOut();
// min x may be a zero value
if (qFuzzyIsNull(minX))
QVERIFY(qFuzzyIsNull(axisX->min()));
else
QCOMPARE(minX, axisX->min());
// min y may be a zero value
if (qFuzzyIsNull(minY))
QVERIFY(qFuzzyIsNull(axisY->min()));
else
QCOMPARE(minY, axisY->min());
QVERIFY(maxX == axisX->max());
QVERIFY(maxY == axisY->max());
}
void tst_QChart::zoomReset()
{
createTestData();
m_chart->createDefaultAxes();
QValueAxis *axisX = qobject_cast<QValueAxis *>(m_chart->axisX());
QVERIFY(axisX != 0);
QValueAxis *axisY = qobject_cast<QValueAxis *>(m_chart->axisY());
QVERIFY(axisY != 0);
qreal minX = axisX->min();
qreal minY = axisY->min();
qreal maxX = axisX->max();
qreal maxY = axisY->max();
QVERIFY(!m_chart->isZoomed());
m_chart->zoomIn();
QVERIFY(m_chart->isZoomed());
QVERIFY(minX < axisX->min());
QVERIFY(maxX > axisX->max());
QVERIFY(minY < axisY->min());
QVERIFY(maxY > axisY->max());
m_chart->zoomReset();
// Reset after zoomIn should restore originals
QVERIFY(!m_chart->isZoomed());
QVERIFY(minX == axisX->min());
QVERIFY(maxX == axisX->max());
QVERIFY(minY == axisY->min());
QVERIFY(maxY == axisY->max());
m_chart->zoomOut();
QVERIFY(m_chart->isZoomed());
QVERIFY(minX > axisX->min());
QVERIFY(maxX < axisX->max());
QVERIFY(minY > axisY->min());
QVERIFY(maxY < axisY->max());
m_chart->zoomReset();
// Reset after zoomOut should restore originals
QVERIFY(!m_chart->isZoomed());
QVERIFY(minX == axisX->min());
QVERIFY(maxX == axisX->max());
QVERIFY(minY == axisY->min());
QVERIFY(maxY == axisY->max());
axisX->setRange(234, 345);
axisY->setRange(345, 456);
minX = axisX->min();
minY = axisY->min();
maxX = axisX->max();
maxY = axisY->max();
QVERIFY(!m_chart->isZoomed());
m_chart->zoomReset();
// Reset without zoom should not change anything
QVERIFY(!m_chart->isZoomed());
QVERIFY(minX == axisX->min());
QVERIFY(maxX == axisX->max());
QVERIFY(minY == axisY->min());
QVERIFY(maxY == axisY->max());
}
void tst_QChart::createDefaultAxesForLineSeries_data()
{
QTest::addColumn<qreal>("series1minX");
QTest::addColumn<qreal>("series1midX");
QTest::addColumn<qreal>("series1maxX");
QTest::addColumn<qreal>("series2minX");
QTest::addColumn<qreal>("series2midX");
QTest::addColumn<qreal>("series2maxX");
QTest::addColumn<qreal>("overallminX");
QTest::addColumn<qreal>("overallmaxX");
QTest::addColumn<qreal>("series1minY");
QTest::addColumn<qreal>("series1midY");
QTest::addColumn<qreal>("series1maxY");
QTest::addColumn<qreal>("series2minY");
QTest::addColumn<qreal>("series2midY");
QTest::addColumn<qreal>("series2maxY");
QTest::addColumn<qreal>("overallminY");
QTest::addColumn<qreal>("overallmaxY");
QTest::newRow("series1hasMinAndMax") << (qreal)1.0 << (qreal)2.0 << (qreal)3.0 << (qreal)1.1 << (qreal)1.7 << (qreal)2.9 << (qreal)1.0 << (qreal)3.0
<< (qreal)1.0 << (qreal)2.0 << (qreal)3.0 << (qreal)1.1 << (qreal)1.7 << (qreal)2.9 << (qreal)1.0 << (qreal)3.0;
QTest::newRow("series2hasMinAndMax") << (qreal)1.1 << (qreal)2.0 << (qreal)2.9 << (qreal)1.0 << (qreal)1.7 << (qreal)3.0 << (qreal)1.0 << (qreal)3.0
<< (qreal)1.1 << (qreal)2.0 << (qreal)2.9 << (qreal)1.0 << (qreal)1.7 << (qreal)3.0 << (qreal)1.0 << (qreal)3.0;
QTest::newRow("series1hasMinAndMaxX_series2hasMinAndMaxY") << (qreal)1.0 << (qreal)2.0 << (qreal)3.0 << (qreal)1.1 << (qreal)1.7 << (qreal)2.9 << (qreal)1.0 << (qreal)3.0
<< (qreal)1.1 << (qreal)2.0 << (qreal)2.9 << (qreal)1.0 << (qreal)2.0 << (qreal)3.0 << (qreal)1.0 << (qreal)3.0;
QTest::newRow("series1hasMin_series2hasMax") << (qreal)1.0 << (qreal)2.0 << (qreal)2.9 << (qreal)1.1 << (qreal)1.7 << (qreal)3.0 << (qreal)1.0 << (qreal)3.0
<< (qreal)1.0 << (qreal)2.0 << (qreal)2.9 << (qreal)1.1 << (qreal)1.7 << (qreal)3.0 << (qreal)1.0 << (qreal)3.0;
QTest::newRow("bothSeriesHaveSameMinAndMax") << (qreal)1.0 << (qreal)2.0 << (qreal)2.9 << (qreal)1.1 << (qreal)1.7 << (qreal)3.0 << (qreal)1.0 << (qreal)3.0
<< (qreal)1.1 << (qreal)1.1 << (qreal)1.1 << (qreal)1.1 << (qreal)1.1 << (qreal)1.1 << (qreal)0.6 << (qreal)1.6;
}
void tst_QChart::createDefaultAxesForLineSeries()
{
QFETCH(qreal, series1minX);
QFETCH(qreal, series1midX);
QFETCH(qreal, series1maxX);
QFETCH(qreal, series2minX);
QFETCH(qreal, series2midX);
QFETCH(qreal, series2maxX);
QFETCH(qreal, series1minY);
QFETCH(qreal, series1midY);
QFETCH(qreal, series1maxY);
QFETCH(qreal, series2minY);
QFETCH(qreal, series2midY);
QFETCH(qreal, series2maxY);
QFETCH(qreal, overallminX);
QFETCH(qreal, overallmaxX);
QFETCH(qreal, overallminY);
QFETCH(qreal, overallmaxY);
QLineSeries* series1 = new QLineSeries(this);
series1->append(series1minX, series1minY);
series1->append(series1midX, series1midY);
series1->append(series1maxX, series1maxY);
QLineSeries* series2 = new QLineSeries(this);
series2->append(series2minX, series2minY);
series2->append(series2midX, series2midY);
series2->append(series2maxX, series2maxY);
QChart *chart = newQChartOrQPolarChart();
chart->addSeries(series1);
chart->addSeries(series2);
chart->createDefaultAxes();
QValueAxis *xAxis = (QValueAxis *)chart->axisX();
QCOMPARE(xAxis->min(), overallminX);
QCOMPARE(xAxis->max(), overallmaxX);
QValueAxis *yAxis = (QValueAxis *)chart->axisY();
QCOMPARE(yAxis->min(), overallminY);
QCOMPARE(yAxis->max(), overallmaxY);
QLineSeries *series3 = new QLineSeries(this);
// Numbers clearly out of existing range
series3->append(0, 0);
series3->append(100, 100);
// Adding a new series should not change the axes as they have not been told to update
chart->addSeries(series3);
QCOMPARE(xAxis->min(), overallminX);
QCOMPARE(xAxis->max(), overallmaxX);
QCOMPARE(yAxis->min(), overallminY);
QCOMPARE(yAxis->max(), overallmaxY);
delete chart;
}
void tst_QChart::axisPolarOrientation()
{
QLineSeries* series1 = new QLineSeries(this);
series1->append(1, 2);
series1->append(2, 4);
series1->append(3, 8);
QPolarChart chart;
chart.addSeries(series1);
QValueAxis *xAxis = new QValueAxis();
QValueAxis *yAxis = new QValueAxis();
chart.addAxis(xAxis, QPolarChart::PolarOrientationAngular);
chart.addAxis(yAxis, QPolarChart::PolarOrientationRadial);
QList<QAbstractAxis *> xAxes = chart.axes(QPolarChart::PolarOrientationAngular);
QList<QAbstractAxis *> yAxes = chart.axes(QPolarChart::PolarOrientationRadial);
QCOMPARE(xAxes.size(), 1);
QCOMPARE(yAxes.size(), 1);
QCOMPARE(xAxes[0], xAxis);
QCOMPARE(yAxes[0], yAxis);
QCOMPARE(chart.axisPolarOrientation(xAxes[0]), QPolarChart::PolarOrientationAngular);
QCOMPARE(chart.axisPolarOrientation(yAxes[0]), QPolarChart::PolarOrientationRadial);
}
void tst_QChart::backgroundRoundness()
{
createTestData();
m_chart->createDefaultAxes();
m_chart->setBackgroundRoundness(100.0);
QVERIFY(m_chart->backgroundRoundness() == 100.0);
}
QTEST_MAIN(tst_QChart)
#include "tst_qchart.moc"