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"