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

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 <KChartLineDiagram>
0025 #include <KChartCartesianCoordinatePlane>
0026 #include <KChartCartesianAxis>
0027 
0028 #include <TableModel.h>
0029 
0030 using namespace KChart;
0031 
0032 class TestAxisOwnership: public QObject {
0033   Q_OBJECT
0034 private Q_SLOTS:
0035 
0036   void initTestCase()
0037   {
0038       m_chart = new Chart(nullptr);
0039       m_bars = new BarDiagram();
0040       m_lines = new LineDiagram();
0041       m_tableModel = new TableModel( this );
0042       m_tableModel->loadFromCSV( ":/data" );
0043       m_bars->setModel( m_tableModel );
0044       m_lines->setModel( m_tableModel );
0045       m_chart->coordinatePlane()->replaceDiagram( m_bars );
0046       m_chart->coordinatePlane()->addDiagram( m_lines );
0047   }
0048 
0049   void testIntialOwnership()
0050   {
0051       m_axis = new CartesianAxis( m_bars );
0052       QCOMPARE( m_axis->diagram(), static_cast<const AbstractDiagram*>( m_bars ) );
0053       QVERIFY( m_axis->observedBy( m_bars ) );
0054   }
0055 
0056   void testTakingOwnership()
0057   {
0058       m_axis = new CartesianAxis();
0059       m_bars->addAxis( m_axis );
0060       QCOMPARE( m_axis->diagram(), static_cast<const AbstractDiagram*>( m_bars ) );
0061       QVERIFY( m_axis->observedBy( m_bars ) );
0062       QVERIFY( !m_axis->observedBy( m_lines ) );
0063   }
0064 
0065   void testGivingUpOwnership()
0066   {
0067       m_axis = new CartesianAxis();
0068       m_bars->addAxis( m_axis );
0069       m_lines->addAxis( m_axis );
0070       QCOMPARE( m_axis->diagram(), static_cast<const AbstractDiagram*>( m_bars ) );
0071       QVERIFY( m_axis->observedBy( m_bars ) );
0072       QVERIFY( m_axis->observedBy( m_lines ) );
0073       m_bars->takeAxis( m_axis );
0074       QCOMPARE( m_axis->diagram(), static_cast<const AbstractDiagram*>( m_lines ) );
0075       QVERIFY( m_axis->observedBy( m_lines ) );
0076       QVERIFY( !m_axis->observedBy( m_bars ) );
0077   }
0078 
0079   void testReplacing()
0080   {
0081       m_axis = new CartesianAxis;
0082       m_lines->addAxis( m_axis );
0083       m_chart->coordinatePlane()->takeDiagram( m_bars );
0084       QVERIFY( m_axis->observedBy( m_lines ) );
0085       QVERIFY( !m_axis->observedBy( m_bars ) );
0086       QPointer<LineDiagram> p( m_lines);
0087       m_chart->coordinatePlane()->replaceDiagram( m_bars, m_lines );
0088       QVERIFY( !p );
0089       AbstractDiagram * nullDiagram = nullptr;
0090       QCOMPARE( m_axis->diagram(), static_cast<const AbstractDiagram*>( nullDiagram ) );
0091       QVERIFY( !m_axis->observedBy( m_bars ) );
0092   }
0093 
0094   void testReplacingWithPropagation()
0095   {
0096       initTestCase();
0097       m_axis = new CartesianAxis;
0098       m_lines->addAxis( m_axis );
0099       m_bars->addAxis( m_axis );
0100       m_chart->coordinatePlane()->takeDiagram( m_bars );
0101       QCOMPARE( m_axis->diagram(), static_cast<const AbstractDiagram*>( m_lines ) );
0102       QVERIFY( m_axis->observedBy( m_bars ) );
0103       QPointer<LineDiagram> p( m_lines);
0104       m_chart->coordinatePlane()->replaceDiagram( m_bars, m_lines );
0105       QVERIFY( !p );
0106       QCOMPARE( m_axis->diagram(), static_cast<const AbstractDiagram*>( m_bars ) );
0107       QVERIFY( m_axis->observedBy( m_bars ) );
0108   }
0109 
0110   void testAxisDeletion()
0111   {
0112       initTestCase();
0113       m_axis = new CartesianAxis;
0114       m_lines->addAxis( m_axis );
0115       CartesianAxisList list = m_lines->axes();
0116       QVERIFY( !list.isEmpty() );
0117       delete m_axis;
0118       list = m_lines->axes();
0119       QVERIFY( list.isEmpty() );
0120   }
0121 
0122   void testAxisDeletionAndUnregister()
0123   {
0124       initTestCase();
0125       m_axis = new CartesianAxis;
0126       m_lines->addAxis( m_axis );
0127       m_bars->addAxis( m_axis );
0128       CartesianAxisList list = m_lines->axes();
0129       QVERIFY( !list.isEmpty() );
0130       delete m_axis;
0131       list = m_lines->axes();
0132       QVERIFY( list.isEmpty() );
0133       list = m_bars->axes();
0134       QVERIFY( list.isEmpty() );
0135   }
0136 
0137   void testFreeStanding()
0138   {
0139       initTestCase();
0140       m_axis = new CartesianAxis;
0141       m_bars->addAxis( m_axis );
0142       BarDiagram *bars2 = new BarDiagram;
0143       bars2->setModel( m_tableModel );
0144       m_chart->coordinatePlane()->replaceDiagram( bars2 );
0145       m_axis->sizeHint();
0146   }
0147 
0148   void cleanupTestCase()
0149   {
0150   }
0151 
0152 private:
0153   Chart *m_chart;
0154   BarDiagram *m_bars;
0155   LineDiagram *m_lines;
0156   CartesianAxis *m_axis;
0157   TableModel *m_tableModel;
0158 
0159 };
0160 
0161 QTEST_MAIN(TestAxisOwnership)
0162 
0163 #include "main.moc"