File indexing completed on 2024-05-12 04:20:14

0001 /**
0002  * SPDX-FileCopyrightText: 2001-2015 Klaralvdalens Datakonsult AB. All rights reserved.
0003  *
0004  * This file is part of the KD Chart library.
0005  *
0006  * SPDX-License-Identifier: GPL-2.0-or-later
0007  */
0008 
0009 #include <QtTest/QtTest>
0010 #include <KChartChart>
0011 #include <KChartGlobal>
0012 #include <KChartBarDiagram>
0013 #include <KChartLineDiagram>
0014 #include <KChartCartesianCoordinatePlane>
0015 #include <KChartCartesianAxis>
0016 
0017 #include <TableModel.h>
0018 
0019 using namespace KChart;
0020 
0021 class TestAxisOwnership: public QObject {
0022   Q_OBJECT
0023 private Q_SLOTS:
0024 
0025   void initTestCase()
0026   {
0027       m_chart = new Chart(nullptr);
0028       m_bars = new BarDiagram();
0029       m_lines = new LineDiagram();
0030       m_tableModel = new TableModel( this );
0031       m_tableModel->loadFromCSV( ":/data" );
0032       m_bars->setModel( m_tableModel );
0033       m_lines->setModel( m_tableModel );
0034       m_chart->coordinatePlane()->replaceDiagram( m_bars );
0035       m_chart->coordinatePlane()->addDiagram( m_lines );
0036   }
0037 
0038   void testIntialOwnership()
0039   {
0040       m_axis = new CartesianAxis( m_bars );
0041       QCOMPARE( m_axis->diagram(), static_cast<const AbstractDiagram*>( m_bars ) );
0042       QVERIFY( m_axis->observedBy( m_bars ) );
0043   }
0044 
0045   void testTakingOwnership()
0046   {
0047       m_axis = new CartesianAxis();
0048       m_bars->addAxis( m_axis );
0049       QCOMPARE( m_axis->diagram(), static_cast<const AbstractDiagram*>( m_bars ) );
0050       QVERIFY( m_axis->observedBy( m_bars ) );
0051       QVERIFY( !m_axis->observedBy( m_lines ) );
0052   }
0053 
0054   void testGivingUpOwnership()
0055   {
0056       m_axis = new CartesianAxis();
0057       m_bars->addAxis( m_axis );
0058       m_lines->addAxis( m_axis );
0059       QCOMPARE( m_axis->diagram(), static_cast<const AbstractDiagram*>( m_bars ) );
0060       QVERIFY( m_axis->observedBy( m_bars ) );
0061       QVERIFY( m_axis->observedBy( m_lines ) );
0062       m_bars->takeAxis( m_axis );
0063       QCOMPARE( m_axis->diagram(), static_cast<const AbstractDiagram*>( m_lines ) );
0064       QVERIFY( m_axis->observedBy( m_lines ) );
0065       QVERIFY( !m_axis->observedBy( m_bars ) );
0066   }
0067 
0068   void testReplacing()
0069   {
0070       m_axis = new CartesianAxis;
0071       m_lines->addAxis( m_axis );
0072       m_chart->coordinatePlane()->takeDiagram( m_bars );
0073       QVERIFY( m_axis->observedBy( m_lines ) );
0074       QVERIFY( !m_axis->observedBy( m_bars ) );
0075       QPointer<LineDiagram> p( m_lines);
0076       m_chart->coordinatePlane()->replaceDiagram( m_bars, m_lines );
0077       QVERIFY( !p );
0078       AbstractDiagram * nullDiagram = nullptr;
0079       QCOMPARE( m_axis->diagram(), static_cast<const AbstractDiagram*>( nullDiagram ) );
0080       QVERIFY( !m_axis->observedBy( m_bars ) );
0081   }
0082 
0083   void testReplacingWithPropagation()
0084   {
0085       initTestCase();
0086       m_axis = new CartesianAxis;
0087       m_lines->addAxis( m_axis );
0088       m_bars->addAxis( m_axis );
0089       m_chart->coordinatePlane()->takeDiagram( m_bars );
0090       QCOMPARE( m_axis->diagram(), static_cast<const AbstractDiagram*>( m_lines ) );
0091       QVERIFY( m_axis->observedBy( m_bars ) );
0092       QPointer<LineDiagram> p( m_lines);
0093       m_chart->coordinatePlane()->replaceDiagram( m_bars, m_lines );
0094       QVERIFY( !p );
0095       QCOMPARE( m_axis->diagram(), static_cast<const AbstractDiagram*>( m_bars ) );
0096       QVERIFY( m_axis->observedBy( m_bars ) );
0097   }
0098 
0099   void testAxisDeletion()
0100   {
0101       initTestCase();
0102       m_axis = new CartesianAxis;
0103       m_lines->addAxis( m_axis );
0104       CartesianAxisList list = m_lines->axes();
0105       QVERIFY( !list.isEmpty() );
0106       delete m_axis;
0107       list = m_lines->axes();
0108       QVERIFY( list.isEmpty() );
0109   }
0110 
0111   void testAxisDeletionAndUnregister()
0112   {
0113       initTestCase();
0114       m_axis = new CartesianAxis;
0115       m_lines->addAxis( m_axis );
0116       m_bars->addAxis( m_axis );
0117       CartesianAxisList list = m_lines->axes();
0118       QVERIFY( !list.isEmpty() );
0119       delete m_axis;
0120       list = m_lines->axes();
0121       QVERIFY( list.isEmpty() );
0122       list = m_bars->axes();
0123       QVERIFY( list.isEmpty() );
0124   }
0125 
0126   void testFreeStanding()
0127   {
0128       initTestCase();
0129       m_axis = new CartesianAxis;
0130       m_bars->addAxis( m_axis );
0131       BarDiagram *bars2 = new BarDiagram;
0132       bars2->setModel( m_tableModel );
0133       m_chart->coordinatePlane()->replaceDiagram( bars2 );
0134       m_axis->sizeHint();
0135   }
0136 
0137   void cleanupTestCase()
0138   {
0139   }
0140 
0141 private:
0142   Chart *m_chart;
0143   BarDiagram *m_bars;
0144   LineDiagram *m_lines;
0145   CartesianAxis *m_axis;
0146   TableModel *m_tableModel;
0147 
0148 };
0149 
0150 QTEST_MAIN(TestAxisOwnership)
0151 
0152 #include "main.moc"