1 /** 2 * Copyright (C) 2001-2015 Klaralvdalens Datakonsult AB. All rights reserved. 3 * 4 * This file is part of the KD Chart library. 5 * 6 * This program is free software; you can redistribute it and/or 7 * modify it under the terms of the GNU General Public License as 8 * published by the Free Software Foundation; either version 2 of 9 * the License, or (at your option) any later version. 10 * 11 * This program is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 * GNU General Public License for more details. 15 * 16 * You should have received a copy of the GNU General Public License 17 * along with this program. If not, see <https://www.gnu.org/licenses/>. 18 */ 19 20 #include <QtTest/QtTest> 21 #include <KChartChart> 22 #include <KChartGlobal> 23 #include <KChartBarDiagram> 24 #include <KChartLineDiagram> 25 #include <KChartCartesianCoordinatePlane> 26 #include <KChartCartesianAxis> 27 28 #include <TableModel.h> 29 30 using namespace KChart; 31 32 class TestAxisOwnership: public QObject { 33 Q_OBJECT 34 private Q_SLOTS: 35 initTestCase()36 void initTestCase() 37 { 38 m_chart = new Chart(nullptr); 39 m_bars = new BarDiagram(); 40 m_lines = new LineDiagram(); 41 m_tableModel = new TableModel( this ); 42 m_tableModel->loadFromCSV( ":/data" ); 43 m_bars->setModel( m_tableModel ); 44 m_lines->setModel( m_tableModel ); 45 m_chart->coordinatePlane()->replaceDiagram( m_bars ); 46 m_chart->coordinatePlane()->addDiagram( m_lines ); 47 } 48 testIntialOwnership()49 void testIntialOwnership() 50 { 51 m_axis = new CartesianAxis( m_bars ); 52 QCOMPARE( m_axis->diagram(), static_cast<const AbstractDiagram*>( m_bars ) ); 53 QVERIFY( m_axis->observedBy( m_bars ) ); 54 } 55 testTakingOwnership()56 void testTakingOwnership() 57 { 58 m_axis = new CartesianAxis(); 59 m_bars->addAxis( m_axis ); 60 QCOMPARE( m_axis->diagram(), static_cast<const AbstractDiagram*>( m_bars ) ); 61 QVERIFY( m_axis->observedBy( m_bars ) ); 62 QVERIFY( !m_axis->observedBy( m_lines ) ); 63 } 64 testGivingUpOwnership()65 void testGivingUpOwnership() 66 { 67 m_axis = new CartesianAxis(); 68 m_bars->addAxis( m_axis ); 69 m_lines->addAxis( m_axis ); 70 QCOMPARE( m_axis->diagram(), static_cast<const AbstractDiagram*>( m_bars ) ); 71 QVERIFY( m_axis->observedBy( m_bars ) ); 72 QVERIFY( m_axis->observedBy( m_lines ) ); 73 m_bars->takeAxis( m_axis ); 74 QCOMPARE( m_axis->diagram(), static_cast<const AbstractDiagram*>( m_lines ) ); 75 QVERIFY( m_axis->observedBy( m_lines ) ); 76 QVERIFY( !m_axis->observedBy( m_bars ) ); 77 } 78 testReplacing()79 void testReplacing() 80 { 81 m_axis = new CartesianAxis; 82 m_lines->addAxis( m_axis ); 83 m_chart->coordinatePlane()->takeDiagram( m_bars ); 84 QVERIFY( m_axis->observedBy( m_lines ) ); 85 QVERIFY( !m_axis->observedBy( m_bars ) ); 86 QPointer<LineDiagram> p( m_lines); 87 m_chart->coordinatePlane()->replaceDiagram( m_bars, m_lines ); 88 QVERIFY( !p ); 89 AbstractDiagram * nullDiagram = nullptr; 90 QCOMPARE( m_axis->diagram(), static_cast<const AbstractDiagram*>( nullDiagram ) ); 91 QVERIFY( !m_axis->observedBy( m_bars ) ); 92 } 93 testReplacingWithPropagation()94 void testReplacingWithPropagation() 95 { 96 initTestCase(); 97 m_axis = new CartesianAxis; 98 m_lines->addAxis( m_axis ); 99 m_bars->addAxis( m_axis ); 100 m_chart->coordinatePlane()->takeDiagram( m_bars ); 101 QCOMPARE( m_axis->diagram(), static_cast<const AbstractDiagram*>( m_lines ) ); 102 QVERIFY( m_axis->observedBy( m_bars ) ); 103 QPointer<LineDiagram> p( m_lines); 104 m_chart->coordinatePlane()->replaceDiagram( m_bars, m_lines ); 105 QVERIFY( !p ); 106 QCOMPARE( m_axis->diagram(), static_cast<const AbstractDiagram*>( m_bars ) ); 107 QVERIFY( m_axis->observedBy( m_bars ) ); 108 } 109 testAxisDeletion()110 void testAxisDeletion() 111 { 112 initTestCase(); 113 m_axis = new CartesianAxis; 114 m_lines->addAxis( m_axis ); 115 CartesianAxisList list = m_lines->axes(); 116 QVERIFY( !list.isEmpty() ); 117 delete m_axis; 118 list = m_lines->axes(); 119 QVERIFY( list.isEmpty() ); 120 } 121 testAxisDeletionAndUnregister()122 void testAxisDeletionAndUnregister() 123 { 124 initTestCase(); 125 m_axis = new CartesianAxis; 126 m_lines->addAxis( m_axis ); 127 m_bars->addAxis( m_axis ); 128 CartesianAxisList list = m_lines->axes(); 129 QVERIFY( !list.isEmpty() ); 130 delete m_axis; 131 list = m_lines->axes(); 132 QVERIFY( list.isEmpty() ); 133 list = m_bars->axes(); 134 QVERIFY( list.isEmpty() ); 135 } 136 testFreeStanding()137 void testFreeStanding() 138 { 139 initTestCase(); 140 m_axis = new CartesianAxis; 141 m_bars->addAxis( m_axis ); 142 BarDiagram *bars2 = new BarDiagram; 143 bars2->setModel( m_tableModel ); 144 m_chart->coordinatePlane()->replaceDiagram( bars2 ); 145 m_axis->sizeHint(); 146 } 147 cleanupTestCase()148 void cleanupTestCase() 149 { 150 } 151 152 private: 153 Chart *m_chart; 154 BarDiagram *m_bars; 155 LineDiagram *m_lines; 156 CartesianAxis *m_axis; 157 TableModel *m_tableModel; 158 159 }; 160 161 QTEST_MAIN(TestAxisOwnership) 162 163 #include "main.moc" 164