File indexing completed on 2024-05-12 16:35:57

0001 /* This file is part of the KDE project
0002    Copyright 2007 Stefan Nikolaus <stefan.nikolaus@kdemail.net>
0003 
0004    This library is free software; you can redistribute it and/or
0005    modify it under the terms of the GNU Library General Public
0006    License as published by the Free Software Foundation; only
0007    version 2 of the License.
0008 
0009    This library is distributed in the hope that it will be useful,
0010    but WITHOUT ANY WARRANTY; without even the implied warranty of
0011    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
0012    Library General Public License for more details.
0013 
0014    You should have received a copy of the GNU Library General Public License
0015    along with this library; see the file COPYING.LIB.  If not, write to
0016    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
0017    Boston, MA 02110-1301, USA.
0018 */
0019 
0020 #include "TestRegion.h"
0021 
0022 #include <QTest>
0023 
0024 #include "calligra_sheets_limits.h"
0025 #include "Map.h"
0026 #include "Region.h"
0027 #include "Sheet.h"
0028 
0029 using namespace Calligra::Sheets;
0030 
0031 void TestRegion::initTestCase()
0032 {
0033     m_map = new Map(0 /* no Doc*/);
0034     Sheet* sheet = m_map->addNewSheet();
0035     sheet->setSheetName("Sheet1");
0036     sheet = m_map->addNewSheet();
0037     sheet->setSheetName("Sheet2");
0038     sheet = m_map->addNewSheet();
0039     sheet->setSheetName("Sheet3");
0040     sheet = m_map->addNewSheet();
0041     sheet->setSheetName("Sheet 4");
0042 }
0043 
0044 void TestRegion::testComparison()
0045 {
0046     Region region1;
0047     Region region2;
0048     region1 = Region("A1");
0049     region2 = Region("A1");
0050     QVERIFY(region1 == region2);
0051     region1 = Region("A1:A5");
0052     region2 = Region("A1:A5");
0053     QVERIFY(region1 == region2);
0054     region1 = Region("A1:A5;B4");
0055     region2 = Region("A1:A5;B4");
0056     QVERIFY(region1 == region2);
0057     region2 = Region("A1");
0058     QVERIFY(region1 != region2);
0059     region2 = Region("A1:A5");
0060     QVERIFY(region1 != region2);
0061 }
0062 
0063 void TestRegion::testFixation()
0064 {
0065     Region region;
0066     region = Region("$A1", m_map, m_map->sheet(0));
0067     QCOMPARE(region.name(), QString("Sheet1!$A1"));
0068     region = Region("A$1", m_map, m_map->sheet(0));
0069     QCOMPARE(region.name(), QString("Sheet1!A$1"));
0070     region = Region("$A$1", m_map, m_map->sheet(0));
0071     QCOMPARE(region.name(), QString("Sheet1!$A$1"));
0072     region = Region("$A1:B4", m_map, m_map->sheet(0));
0073     QCOMPARE(region.name(), QString("Sheet1!$A1:B4"));
0074     region = Region("A$1:B4", m_map, m_map->sheet(0));
0075     QCOMPARE(region.name(), QString("Sheet1!A$1:B4"));
0076     region = Region("$A$1:B4", m_map, m_map->sheet(0));
0077     QCOMPARE(region.name(), QString("Sheet1!$A$1:B4"));
0078     region = Region("A1:$B4", m_map, m_map->sheet(0));
0079     QCOMPARE(region.name(), QString("Sheet1!A1:$B4"));
0080     region = Region("A1:B$4", m_map, m_map->sheet(0));
0081     QCOMPARE(region.name(), QString("Sheet1!A1:B$4"));
0082     region = Region("A1:$B$4", m_map, m_map->sheet(0));
0083     QCOMPARE(region.name(), QString("Sheet1!A1:$B$4"));
0084 }
0085 
0086 void TestRegion::testSheet()
0087 {
0088     Region region;
0089     region = Region(QPoint(1, 1), m_map->sheet(0));
0090     QCOMPARE(region.name(), QString("Sheet1!A1"));
0091     QCOMPARE(region.firstSheet(), m_map->sheet(0));
0092     region = Region("A1");
0093     QCOMPARE(region.name(), QString("A1"));
0094     QCOMPARE(region.firstSheet(), (Sheet*)0);
0095     region = Region("A1", m_map, m_map->sheet(0));
0096     QCOMPARE(region.name(), QString("Sheet1!A1"));
0097     QCOMPARE(region.firstSheet(), m_map->sheet(0));
0098     region = Region("Sheet1!A1", m_map, m_map->sheet(1));
0099     QCOMPARE(region.name(), QString("Sheet1!A1"));
0100     QCOMPARE(region.firstSheet(), m_map->sheet(0));
0101     region = Region("Sheet2!A1", m_map);
0102     QCOMPARE(region.name(), QString("Sheet2!A1"));
0103     QCOMPARE(region.firstSheet(), m_map->sheet(1));
0104     region = Region("Sheet2!A1", m_map, m_map->sheet(0));
0105     QCOMPARE(region.name(), QString("Sheet2!A1"));
0106     QCOMPARE(region.firstSheet(), m_map->sheet(1));
0107     region = Region("Sheet 4!A1", m_map, m_map->sheet(0));
0108     QCOMPARE(region.name(), QString("'Sheet 4'!A1"));
0109     QCOMPARE(region.firstSheet(), m_map->sheet(3));
0110     region = Region("'Sheet 4'!A1", m_map, m_map->sheet(0));
0111     QCOMPARE(region.name(), QString("'Sheet 4'!A1"));
0112     QCOMPARE(region.firstSheet(), m_map->sheet(3));
0113     // Multiple quotas should be compressed, use-case that
0114     // was visible in the xls from bug 284325.
0115     region = Region("'''Sheet 4'''!A1", m_map, m_map->sheet(0));
0116     QCOMPARE(region.name(), QString("'Sheet 4'!A1"));
0117     // invalid calls:
0118     region = Region("!A1", m_map, m_map->sheet(0));
0119     QVERIFY(region.isEmpty());
0120     region = Region("Sheet99!A1", m_map, m_map->sheet(0));
0121     QVERIFY(region.isEmpty());
0122 }
0123 
0124 void TestRegion::testExtrem()
0125 {
0126     Region region1 = Region(QPoint(-1, -1), m_map->sheet(0));
0127     QVERIFY(region1.isEmpty());
0128     QVERIFY(!region1.isValid());
0129 
0130     Region region2 = Region("A1:A6553634523563453456356");
0131     QVERIFY(region2.isValid());
0132 
0133     Region region3 = Region(QRect(1,1,KS_colMax,KS_rowMax), m_map->sheet(0));
0134     QVERIFY(region3.isValid());
0135 
0136     Region region4 = Region(QRect(1,1,KS_colMax,KS_rowMax), m_map->sheet(0));
0137     QVERIFY(region4.isValid());
0138     Region region5 = Region(QRect(1,1,KS_colMax+12345,KS_rowMax+12345), m_map->sheet(0));
0139     QVERIFY(region5.isValid());
0140     QCOMPARE(region4.name(), region5.name());
0141     
0142     Region region6 = Region(QPoint(KS_colMax, KS_rowMax), m_map->sheet(0));
0143     QVERIFY(region6.isValid());
0144     Region region7 = Region(QPoint(KS_colMax+22, KS_rowMax+22), m_map->sheet(0));
0145     QVERIFY(region7.isValid());
0146     QCOMPARE(region6.name(), region7.name());
0147 }
0148 
0149 void TestRegion::cleanupTestCase()
0150 {
0151     delete m_map;
0152 }
0153 
0154 QTEST_MAIN(TestRegion)