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

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 
0022 #include <KChartWidget>
0023 #include <KChartGlobal>
0024 //#include <KChartBarDiagram>
0025 //#include <KChartLineDiagram>
0026 //#include <KChartCartesianCoordinatePlane>
0027 //#include <KChartPolarCoordinatePlane>
0028 #include <KChartLegend>
0029 //#include <KChartHeaderFooter>
0030 
0031 using namespace KChart;
0032 
0033 class TestWidgetElementOwnership: public QObject {
0034   Q_OBJECT
0035 private Q_SLOTS:
0036 
0037   void initTestCase()
0038   {
0039       m_widget = new Widget(nullptr);
0040       QVector< qreal > vec0;
0041       vec0.append( -2 );
0042       vec0.append( -1 );
0043       vec0.append( 0 );
0044       vec0.append( 1 );
0045       vec0.append( 2 );
0046       m_widget->setDataset( 0, vec0, "Linear" );
0047 
0048       QVector< qreal > vec1;
0049       vec1.append( -4 );
0050       vec1.append( -2 );
0051       vec1.append( 0 );
0052       vec1.append( 2 );
0053       vec1.append( 4 );
0054       m_widget->setDataset( 1, vec1, "Quadratic" );
0055 
0056       QVector< qreal > vec2;
0057       vec2.append( -8 );
0058       vec2.append( -2 );
0059       vec2.append( 0 );
0060       vec2.append( 2 );
0061       vec2.append( 8 );
0062       m_widget->setDataset( 2, vec2, "Cubic" );
0063 
0064   }
0065 
0066   void testPadding()
0067   {
0068       QVERIFY( m_widget->globalLeadingLeft() == false );
0069       m_widget->setGlobalLeading( 2, 2, 2, 2 );
0070       QCOMPARE( m_widget->globalLeadingLeft(), 2 );
0071       QCOMPARE( m_widget->globalLeadingTop(), 2 );
0072       QCOMPARE( m_widget->globalLeadingRight(), 2 );
0073       QCOMPARE( m_widget->globalLeadingBottom(), 2 );
0074       m_widget->setGlobalLeadingLeft( 5 );
0075       QCOMPARE( m_widget->globalLeadingLeft(), 5 );
0076       QCOMPARE( m_widget->globalLeadingTop(), 2 );
0077       QCOMPARE( m_widget->globalLeadingRight(), 2 );
0078       QCOMPARE( m_widget->globalLeadingBottom(), 2 );
0079       m_widget->setGlobalLeadingTop( 5 );
0080       QCOMPARE( m_widget->globalLeadingLeft(), 5 );
0081       QCOMPARE( m_widget->globalLeadingTop(), 5 );
0082       QCOMPARE( m_widget->globalLeadingRight(), 2 );
0083       QCOMPARE( m_widget->globalLeadingBottom(), 2 );
0084       m_widget->setGlobalLeadingRight( 5 );
0085       QCOMPARE( m_widget->globalLeadingLeft(), 5 );
0086       QCOMPARE( m_widget->globalLeadingTop(), 5 );
0087       QCOMPARE( m_widget->globalLeadingRight(), 5 );
0088       QCOMPARE( m_widget->globalLeadingBottom(), 2 );
0089       m_widget->setGlobalLeadingBottom( 5 );
0090       QCOMPARE( m_widget->globalLeadingLeft(), 5 );
0091       QCOMPARE( m_widget->globalLeadingTop(), 5 );
0092       QCOMPARE( m_widget->globalLeadingRight(), 5 );
0093       QCOMPARE( m_widget->globalLeadingBottom(), 5 );
0094       m_widget->setGlobalLeading( 2, 2, 2, 2 );
0095       QCOMPARE( m_widget->globalLeadingLeft(), 2 );
0096       QCOMPARE( m_widget->globalLeadingTop(), 2 );
0097       QCOMPARE( m_widget->globalLeadingRight(), 2 );
0098       QCOMPARE( m_widget->globalLeadingBottom(), 2 );
0099   }
0100 
0101   void testHeaderFooterOwnership()
0102   {
0103       QCOMPARE( m_widget->allHeadersFooters().size(), 0 );
0104       HeaderFooter * h = new HeaderFooter();
0105       HeaderFooter * h1 = new HeaderFooter();
0106       m_widget->addHeaderFooter( h );
0107       m_widget->addHeaderFooter( h1 );
0108       QCOMPARE( m_widget->allHeadersFooters().size(), 2 );
0109       QCOMPARE( m_widget->firstHeaderFooter(),  h );
0110       m_widget->takeHeaderFooter( h );
0111       QCOMPARE( m_widget->allHeadersFooters().size(), 1 );
0112       QCOMPARE( m_widget->firstHeaderFooter(),  h1 );
0113       m_widget->replaceHeaderFooter( h ,  h1 );
0114       QCOMPARE( m_widget->allHeadersFooters().size(), 1 );
0115       delete h;
0116       QCOMPARE( m_widget->allHeadersFooters().size(), 0 );
0117   }
0118 
0119   void testLegendOwnerShip()
0120   {
0121       // check no legend
0122       QCOMPARE( m_widget->allLegends().size(), 0 );
0123       // check add legend - take legend - delete legend
0124       m_widget->addLegend( Position::North );
0125       QCOMPARE( m_widget->allLegends().size(), 1 );
0126       Legend* legend = m_widget->legend();
0127       m_widget->takeLegend( legend );
0128       QCOMPARE( m_widget->allLegends().size(), 0 );
0129       m_widget->replaceLegend( legend );
0130       QCOMPARE( m_widget->allLegends().size(), 1 );
0131       delete legend;
0132       QCOMPARE( m_widget->allLegends().size(), 0 );
0133    }
0134 
0135   void testRetrieveDiagram()
0136   {
0137       //set Cartesian type
0138       m_widget->setType( Widget::Line );
0139       QCOMPARE( m_widget->type(), Widget::Line );
0140       QCOMPARE( m_widget->barDiagram(), static_cast<BarDiagram*>(nullptr) );
0141       QCOMPARE( m_widget->pieDiagram(), static_cast<PieDiagram*>(nullptr) );
0142       QCOMPARE( m_widget->ringDiagram(), static_cast<RingDiagram*>(nullptr) );
0143       QCOMPARE( m_widget->polarDiagram(), static_cast<PolarDiagram*>(nullptr) );
0144       // set Polar type
0145       m_widget->setType( Widget::Polar );
0146       QCOMPARE( m_widget->type(), Widget::Polar );
0147       QCOMPARE( m_widget->barDiagram(), static_cast<BarDiagram*>(nullptr) );
0148       QCOMPARE( m_widget->lineDiagram(), static_cast<LineDiagram*>(nullptr) );
0149       QCOMPARE( m_widget->ringDiagram(), static_cast<RingDiagram*>(nullptr) );
0150       QCOMPARE( m_widget->pieDiagram(), static_cast<PieDiagram*>(nullptr) );
0151       // reset default
0152       m_widget->setType( Widget::Line );
0153   }
0154 
0155   void testTypeChangeWithLegend()
0156   {
0157       //set Cartesian type
0158       m_widget->addLegend( Position::North );
0159       QCOMPARE( m_widget->allLegends().size(), 1 );
0160       m_widget->setType( Widget::Bar, Widget::Stacked );
0161       Legend *legend = m_widget->legend();
0162       QVERIFY( legend != nullptr );
0163       QVERIFY( legend->diagram() != nullptr );
0164       QCOMPARE( legend->diagram(), m_widget->diagram() );
0165       QCOMPARE( m_widget->allLegends().size(), 1 );
0166       m_widget->setType( Widget::Line );
0167   }
0168 
0169 
0170   void testDiagramTypeSubType()
0171   {
0172       m_widget->setType( Widget::Line );
0173       QCOMPARE( m_widget->type(), Widget::Line );
0174       QCOMPARE( m_widget->subType(),  Widget::Normal );
0175       //check type subtype = default
0176       m_widget->setType( Widget::Bar );
0177       QCOMPARE( m_widget->type(), Widget::Bar );
0178       QCOMPARE( m_widget->subType(),  Widget::Normal );
0179       //check type subtype
0180       m_widget->setType( Widget::Line,  Widget::Stacked );
0181       QCOMPARE( m_widget->type(), Widget::Line );
0182       QCOMPARE( m_widget->subType(),  Widget::Stacked );
0183       //check subtype
0184       m_widget->setSubType( Widget::Percent );
0185       QCOMPARE( m_widget->subType(),  Widget::Percent );
0186   }
0187 
0188   void testPlaneOwnership()
0189   {
0190       // check plane
0191       AbstractCoordinatePlane*orig = m_widget->coordinatePlane();
0192       QCOMPARE( m_widget->coordinatePlane(), orig );
0193   }
0194 
0195   void testWidgetDeletion()
0196   {
0197       delete m_widget;
0198   }
0199 
0200   void cleanupTestCase()
0201   {
0202 
0203   }
0204 
0205 private:
0206   Widget *m_widget;
0207 
0208 };
0209 
0210 QTEST_MAIN(TestWidgetElementOwnership)
0211 
0212 #include "main.moc"