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"