File indexing completed on 2024-05-12 15:53:54

0001 /**
0002  * Copyright (C) 2001-2015 Klaralvdalens Datakonsult AB.  All rights reserved.
0003  *
0004  * This file is part of the KD Chart library.
0005  *
0006  * This program is free software; you can redistribute it and/or
0007  * modify it under the terms of the GNU General Public License as
0008  * published by the Free Software Foundation; either version 2 of
0009  * the License, or (at your option) any later version.
0010  *
0011  * This program is distributed in the hope that it will be useful,
0012  * but WITHOUT ANY WARRANTY; without even the implied warranty of
0013  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
0014  * GNU General Public License for more details.
0015  *
0016  * You should have received a copy of the GNU General Public License
0017  * along with this program.  If not, see <https://www.gnu.org/licenses/>.
0018  */
0019 
0020 #include <QtTest/QtTest>
0021 #include <KChartChart>
0022 #include <KChartGlobal>
0023 #include <KChartBarDiagram>
0024 #include <KChartCartesianCoordinatePlane>
0025 #include <KChartMeasure>
0026 
0027 #include <TableModel.h>
0028 
0029 using namespace KChart;
0030 
0031 class TestMeasure : public QObject {
0032   Q_OBJECT
0033 private Q_SLOTS:
0034 
0035   void initTestCase()
0036   {
0037       m_chart = new Chart(nullptr);
0038       m_model = new TableModel( this );
0039       m_model->loadFromCSV( ":/data" );
0040       m_bars = new BarDiagram();
0041       m_bars->setModel( m_model );
0042       m_chart->coordinatePlane()->replaceDiagram( m_bars );
0043       m_chart->setGeometry(100,100, 300,200);
0044       m_chart->show();
0045   }
0046 
0047   void testMeasureCalculationModeAbsolute()
0048   {
0049       KChart::Measure m( 100.0 );
0050       m.setCalculationMode( KChartEnums::MeasureCalculationModeAbsolute );
0051       QCOMPARE(
0052           m.calculatedValue(nullptr, KChartEnums::MeasureOrientationAuto),
0053           100.0 );
0054   }
0055 
0056   void testMeasureCalculationModeRelativeHorizontalOrientation()
0057   {
0058       KChart::Measure m(
0059           100.0,
0060           KChartEnums::MeasureCalculationModeRelative,
0061           KChartEnums::MeasureOrientationHorizontal );
0062       m.setReferenceArea( m_chart );
0063       QCOMPARE(
0064           m.calculatedValue(nullptr, KChartEnums::MeasureOrientationAuto),
0065           m_chart->size().width() / 10.0 );
0066   }
0067 
0068   void testMeasureCalculationModeRelativeVerticalOrientation()
0069   {
0070       KChart::Measure m(
0071           100.0,
0072           KChartEnums::MeasureCalculationModeRelative,
0073           KChartEnums::MeasureOrientationVertical );
0074       m.setReferenceArea( m_chart );
0075       QCOMPARE(
0076           m.calculatedValue(nullptr, KChartEnums::MeasureOrientationAuto),
0077           m_chart->size().height() / 10.0 );
0078   }
0079 
0080   void testMeasureCalculationModeAuto()
0081   {
0082       KChart::Measure m( 100.0 );
0083       m.setCalculationMode( KChartEnums::MeasureCalculationModeAuto );
0084       QCOMPARE(
0085           m.calculatedValue(m_chart, KChartEnums::MeasureOrientationHorizontal),
0086           m_chart->size().width() / 10.0 );
0087       QCOMPARE(
0088           m.calculatedValue(m_chart, KChartEnums::MeasureOrientationVertical),
0089           m_chart->size().height() / 10.0 );
0090       QCOMPARE(
0091           m.calculatedValue(m_chart, KChartEnums::MeasureOrientationMinimum),
0092           qMin( m_chart->size().width(), m_chart->size().height() ) / 10.0 );
0093       QCOMPARE(
0094           m.calculatedValue(m_chart, KChartEnums::MeasureOrientationMaximum),
0095           qMax( m_chart->size().width(), m_chart->size().height() ) / 10.0 );
0096   }
0097 
0098   void testMeasureCalculationModeAutoArea()
0099   {
0100       KChart::Measure m(
0101           100.0,
0102           KChartEnums::MeasureCalculationModeAutoArea,
0103           KChartEnums::MeasureOrientationHorizontal );
0104       QCOMPARE(
0105           m.calculatedValue(m_chart, KChartEnums::MeasureOrientationAuto),
0106           m_chart->size().width() / 10.0 );
0107       m.setReferenceOrientation( KChartEnums::MeasureOrientationVertical );
0108       QCOMPARE(
0109           m.calculatedValue(m_chart, KChartEnums::MeasureOrientationAuto),
0110           m_chart->size().height() / 10.0 );
0111       m.setReferenceOrientation( KChartEnums::MeasureOrientationMinimum );
0112       QCOMPARE(
0113           m.calculatedValue(m_chart, KChartEnums::MeasureOrientationAuto),
0114           qMin( m_chart->size().width(), m_chart->size().height() ) / 10.0 );
0115       m.setReferenceOrientation( KChartEnums::MeasureOrientationMaximum );
0116       QCOMPARE(
0117           m.calculatedValue(m_chart, KChartEnums::MeasureOrientationAuto),
0118           qMax( m_chart->size().width(), m_chart->size().height() ) / 10.0 );
0119   }
0120 
0121   void testMeasureAutoOrientation()
0122   {
0123       KChart::Measure m(
0124           100.0,
0125           KChartEnums::MeasureCalculationModeAutoOrientation,
0126           KChartEnums::MeasureOrientationAuto );
0127       m.setReferenceArea( m_chart );
0128       QCOMPARE(
0129           m.calculatedValue(nullptr, KChartEnums::MeasureOrientationHorizontal),
0130           m_chart->size().width() / 10.0 );
0131       QCOMPARE(
0132           m.calculatedValue(nullptr, KChartEnums::MeasureOrientationVertical),
0133           m_chart->size().height() / 10.0 );
0134       QCOMPARE(
0135           m.calculatedValue(nullptr, KChartEnums::MeasureOrientationMinimum),
0136           qMin( m_chart->size().width(), m_chart->size().height() ) / 10.0 );
0137       QCOMPARE(
0138           m.calculatedValue(nullptr, KChartEnums::MeasureOrientationMaximum),
0139           qMax( m_chart->size().width(), m_chart->size().height() ) / 10.0 );
0140   }
0141 
0142 
0143   void cleanupTestCase()
0144   {
0145   }
0146 
0147 private:
0148     Chart *m_chart;
0149     BarDiagram *m_bars;
0150     TableModel *m_model;
0151 
0152 };
0153 
0154 QTEST_MAIN(TestMeasure)
0155 
0156 #include "main.moc"