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

0001 /* This file is part of the KDE project
0002    Copyright 2010 Marijn Kruisselbrink <mkruisselbrink@kde.org>
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; either
0007    version 2 of the License, or (at your option) any later version.
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 #include "TestRowFormatStorage.h"
0020 
0021 #include <QVector>
0022 #include <QDebug>
0023 #include <QTest>
0024 
0025 #include "../RowFormatStorage.h"
0026 #include "../calligra_sheets_limits.h"
0027 #include "../Map.h"
0028 #include "../Sheet.h"
0029 #include "../RowColumnFormat.h"
0030 
0031 using namespace Calligra::Sheets;
0032 
0033 void TestRowFormatStorage::initTestCase()
0034 {
0035     m_map = new Map();
0036     m_sheet = m_map->addNewSheet();
0037 }
0038 
0039 void TestRowFormatStorage::cleanupTestCase()
0040 {
0041     delete m_map;
0042 }
0043 
0044 void TestRowFormatStorage::testRowHeight()
0045 {
0046     RowFormatStorage s(m_sheet);
0047 
0048     s.setRowHeight(10, 100, 42.0);
0049 
0050     for (int row = 1; row < 10000; row++) {
0051         QCOMPARE(s.rowHeight(row), row >= 10 && row <= 100 ? 42.0 : m_map->defaultRowFormat()->height());
0052     }
0053     int firstRow, lastRow;
0054     s.rowHeight(5, &lastRow);
0055     QCOMPARE(lastRow, 9);
0056     s.rowHeight(5, 0, &firstRow);
0057     QCOMPARE(firstRow, 1);
0058     s.rowHeight(50, &lastRow, &firstRow);
0059     QCOMPARE(firstRow, 10);
0060     QCOMPARE(lastRow, 100);
0061     s.rowHeight(150, &lastRow);
0062     QCOMPARE(lastRow, KS_rowMax);
0063 }
0064 
0065 void TestRowFormatStorage::testHidden()
0066 {
0067     RowFormatStorage s(m_sheet);
0068 
0069     s.setHidden(10, 20, true);
0070     int first, last;
0071     QVERIFY(s.isHidden(15, &last, &first));
0072     QCOMPARE(first, 10);
0073     QCOMPARE(last, 20);
0074     QVERIFY(!s.isHidden(5, &last));
0075     QCOMPARE(last, 9);
0076     QVERIFY(!s.isHidden(25, 0, &first));
0077     QCOMPARE(first, 21);
0078 }
0079 
0080 void TestRowFormatStorage::testFiltered()
0081 {
0082     RowFormatStorage s(m_sheet);
0083 
0084     s.setFiltered(10, 20, true);
0085     int first, last;
0086     QVERIFY(s.isFiltered(15, &last, &first));
0087     QCOMPARE(first, 10);
0088     QCOMPARE(last, 20);
0089     QVERIFY(!s.isFiltered(5, &last));
0090     QCOMPARE(last, 9);
0091     QVERIFY(!s.isFiltered(25, 0, &first));
0092     QCOMPARE(first, 21);
0093 }
0094 
0095 void TestRowFormatStorage::testHiddenOrFiltered()
0096 {
0097     RowFormatStorage s(m_sheet);
0098 
0099     s.setHidden(5, 10, true);
0100     s.setHidden(20, 30, true);
0101     s.setFiltered(2, 7, true);
0102     s.setFiltered(10, 22, true);
0103     for (int row = 1; row < 10000; row++) {
0104         if (row < 2 || row > 30) {
0105             QVERIFY(!s.isHiddenOrFiltered(row));
0106         } else {
0107             QVERIFY(s.isHiddenOrFiltered(row));
0108         }
0109     }
0110     int first, last;
0111     QVERIFY(!s.isHiddenOrFiltered(1, &last, &first));
0112     QCOMPARE(first, 1);
0113     QCOMPARE(last, 1);
0114     QVERIFY(s.isHiddenOrFiltered(3, &last, &first));
0115     QCOMPARE(first, 2);
0116     QCOMPARE(last, 4);
0117     QVERIFY(s.isHiddenOrFiltered(7, &last, &first));
0118     QCOMPARE(first, 5);
0119     QCOMPARE(last, 7);
0120 }
0121 
0122 void TestRowFormatStorage::testVisibleHeight()
0123 {
0124     RowFormatStorage s(m_sheet);
0125 
0126     s.setRowHeight(20, 100, 42.0);
0127     s.setFiltered(10, 30, true);
0128     s.setHidden(90, 110, true);
0129 
0130     int first, last;
0131     QCOMPARE(s.visibleHeight(25, &last, &first), 0.0);
0132     QCOMPARE(first, 10);
0133     QCOMPARE(last, 30);
0134     QCOMPARE(s.visibleHeight(55, &last, &first), 42.0);
0135     QCOMPARE(first, 31);
0136     QCOMPARE(last, 89);
0137     QCOMPARE(s.visibleHeight(97, &last, &first), 0.0);
0138     QCOMPARE(first, 90);
0139     QCOMPARE(last, 110);
0140 }
0141 
0142 void TestRowFormatStorage::testTotalRowHeight()
0143 {
0144     RowFormatStorage s(m_sheet);
0145 
0146     s.setRowHeight(1, KS_rowMax, 10.0);
0147     s.setRowHeight(10, 19, 13.0);
0148     s.setRowHeight(100, 199, 17.0);
0149 
0150     QCOMPARE(s.totalRowHeight(10, 19), 130.0);
0151     QCOMPARE(s.totalRowHeight(9, 10), 23.0);
0152     QCOMPARE(s.totalRowHeight(1, 19), 220.0);
0153     QCOMPARE(s.totalRowHeight(1, KS_rowMax), (KS_rowMax - 110) * 10.0 + 130.0 + 1700.0);
0154 }
0155 
0156 void TestRowFormatStorage::testTotalVisibleRowHeight()
0157 {
0158     RowFormatStorage s(m_sheet);
0159 
0160     s.setRowHeight(1, KS_rowMax, 10.0);
0161     s.setRowHeight(10, 19, 13.0);
0162     s.setRowHeight(100, 199, 17.0);
0163     s.setHidden(5, 5, true);
0164     s.setHidden(13, 13, true);
0165     s.setFiltered(110, 110, true);
0166 
0167     QCOMPARE(s.totalVisibleRowHeight(10, 19), 130.0 - 13.0);
0168     QCOMPARE(s.totalVisibleRowHeight(1, 19), 220.0 - 23.0);
0169     QCOMPARE(s.totalVisibleRowHeight(1, KS_rowMax), (KS_rowMax - 110) * 10.0 + 130.0 + 1700.0 - 40.0);
0170 }
0171 
0172 void TestRowFormatStorage::testRowForPosition()
0173 {
0174     RowFormatStorage s(m_sheet);
0175 
0176     s.setRowHeight(1, KS_rowMax, 10.0);
0177     s.setRowHeight(10, 19, 13.0);
0178     s.setHidden(5, 5, true);
0179 
0180     qreal top;
0181     QCOMPARE(s.rowForPosition(5.0), 1);
0182     QCOMPARE(s.rowForPosition(15.0), 2);
0183     QCOMPARE(s.rowForPosition(45.0), 6);
0184     QCOMPARE(s.rowForPosition(55.0, &top), 7);
0185     QCOMPARE(top, 50.0);
0186     QCOMPARE(s.rowForPosition(95.0, &top), 11);
0187     QCOMPARE(top, 93.0);
0188 }
0189 
0190 void TestRowFormatStorage::testPageBreak()
0191 {
0192     RowFormatStorage s(m_sheet);
0193 
0194     s.setPageBreak(10, 20, true);
0195     int first, last;
0196     QVERIFY(s.hasPageBreak(15, &last, &first));
0197     QCOMPARE(first, 10);
0198     QCOMPARE(last, 20);
0199     QVERIFY(!s.hasPageBreak(5, &last));
0200     QCOMPARE(last, 9);
0201     QVERIFY(!s.hasPageBreak(25, 0, &first));
0202     QCOMPARE(first, 21);
0203 }
0204 
0205 void TestRowFormatStorage::testIsDefaultRow()
0206 {
0207     RowFormatStorage s(m_sheet);
0208 
0209     s.setFiltered(10, 13, true);
0210     s.setHidden(15, 18, true);
0211     s.setPageBreak(21, 25, true);
0212     s.setRowHeight(23, 30, 42.0);
0213 
0214     int first, last;
0215     QVERIFY(s.isDefaultRow(5, &last, &first));
0216     QCOMPARE(first, 1);
0217     QCOMPARE(last, 9);
0218     QVERIFY(!s.isDefaultRow(13, &last, &first));
0219     QCOMPARE(first, 10);
0220     QCOMPARE(last, 13);
0221     QVERIFY(s.isDefaultRow(14, &last, &first));
0222     QCOMPARE(first, 14);
0223     QCOMPARE(last, 14);
0224     QVERIFY(!s.isDefaultRow(22, &last, &first));
0225     QCOMPARE(first, 21);
0226     QCOMPARE(last, 22);
0227     QVERIFY(!s.isDefaultRow(24, &last, &first));
0228     QCOMPARE(first, 23);
0229     QCOMPARE(last, 25);
0230     QVERIFY(!s.isDefaultRow(27, &last, &first));
0231     QCOMPARE(first, 26);
0232     QCOMPARE(last, 30);
0233 }
0234 
0235 void TestRowFormatStorage::testSetDefault()
0236 {
0237     RowFormatStorage s(m_sheet);
0238 
0239     s.setFiltered(10, 13, true);
0240     s.setHidden(15, 18, true);
0241     s.setPageBreak(21, 25, true);
0242     s.setRowHeight(23, 30, 42.0);
0243 
0244     s.setDefault(5, 16);
0245     s.setDefault(24, 28);
0246     QVERIFY(s.isDefaultRow(5));
0247     QVERIFY(s.isDefaultRow(16));
0248     QVERIFY(!s.isDefaultRow(17));
0249     QVERIFY(!s.isDefaultRow(23));
0250     QVERIFY(s.isDefaultRow(24));
0251     QVERIFY(s.isDefaultRow(28));
0252     QVERIFY(!s.isDefaultRow(29));
0253 }
0254 
0255 void TestRowFormatStorage::testLastNonDefaultRow()
0256 {
0257     RowFormatStorage s(m_sheet);
0258 
0259     s.setFiltered(10, 13, true);
0260     QCOMPARE(s.lastNonDefaultRow(), 13);
0261     s.setHidden(15, 18, true);
0262     QCOMPARE(s.lastNonDefaultRow(), 18);
0263     s.setPageBreak(23, 25, true);
0264     QCOMPARE(s.lastNonDefaultRow(), 25);
0265     s.setRowHeight(15, 30, 42.0);
0266     QCOMPARE(s.lastNonDefaultRow(), 30);
0267 }
0268 
0269 void TestRowFormatStorage::testRowsAreEqual()
0270 {
0271     RowFormatStorage s(m_sheet);
0272 
0273     s.setFiltered(10, 13, true);
0274     s.setHidden(15, 18, true);
0275     s.setPageBreak(21, 25, true);
0276     s.setRowHeight(23, 30, 42.0);
0277 
0278     QVERIFY(!s.rowsAreEqual(9, 10));
0279     QVERIFY(s.rowsAreEqual(10, 12));
0280     QVERIFY(!s.rowsAreEqual(3, 15));
0281     QVERIFY(s.rowsAreEqual(16, 18));
0282     QVERIFY(!s.rowsAreEqual(20, 21));
0283     QVERIFY(s.rowsAreEqual(21, 22));
0284     QVERIFY(!s.rowsAreEqual(22, 23));
0285     QVERIFY(s.rowsAreEqual(23, 25));
0286     QVERIFY(!s.rowsAreEqual(24, 26));
0287     QVERIFY(s.rowsAreEqual(27, 28));
0288     QVERIFY(!s.rowsAreEqual(30, 31));
0289     QVERIFY(s.rowsAreEqual(5, 55));
0290 }
0291 
0292 void TestRowFormatStorage::testInsertRows()
0293 {
0294     RowFormatStorage s(m_sheet);
0295 
0296     s.setRowHeight(10, 100, 42.0);
0297 
0298     s.insertRows(20, 5);
0299     s.insertRows(7, 5);
0300     s.insertRows(150, 5);
0301 
0302     for (int row = 1; row < 10000; row++) {
0303         QCOMPARE(s.rowHeight(row), row >= 15 && row <= 110 ? 42.0 : m_map->defaultRowFormat()->height());
0304     }
0305 }
0306 
0307 void TestRowFormatStorage::testRemoveRows()
0308 {
0309     RowFormatStorage s(m_sheet);
0310 
0311     s.setRowHeight(10, 100, 42.0);
0312 
0313     s.removeRows(20, 5);
0314     s.removeRows(7, 5);
0315     s.removeRows(85, 10);
0316 
0317     for (int row = 1; row < 10000; row++) {
0318         QCOMPARE(s.rowHeight(row), row >= 7 && row < 85 ? 42.0 : m_map->defaultRowFormat()->height());
0319     }
0320 }
0321 
0322 QTEST_MAIN(TestRowFormatStorage)