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)