File indexing completed on 2024-04-21 14:49:22
0001 /*************************************************************************** 0002 File : AsciiFilterTest.cpp 0003 Project : LabPlot 0004 Description : Tests for the ascii filter 0005 -------------------------------------------------------------------- 0006 Copyright : (C) 2017 Alexander Semke (alexander.semke@web.de) 0007 ***************************************************************************/ 0008 0009 /*************************************************************************** 0010 * * 0011 * This program is free software; you can redistribute it and/or modify * 0012 * it under the terms of the GNU General Public License as published by * 0013 * the Free Software Foundation; either version 2 of the License, or * 0014 * (at your option) any later version. * 0015 * * 0016 * This program is distributed in the hope that it will be useful, * 0017 * but WITHOUT ANY WARRANTY; without even the implied warranty of * 0018 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * 0019 * GNU General Public License for more details. * 0020 * * 0021 * You should have received a copy of the GNU General Public License * 0022 * along with this program; if not, write to the Free Software * 0023 * Foundation, Inc., 51 Franklin Street, Fifth Floor, * 0024 * Boston, MA 02110-1301 USA * 0025 * * 0026 ***************************************************************************/ 0027 0028 #include "AsciiFilterTest.h" 0029 #include "backend/datasources/filters/AsciiFilter.h" 0030 #include "backend/spreadsheet/Spreadsheet.h" 0031 0032 void AsciiFilterTest::initTestCase() { 0033 // needed in order to have the signals triggered by SignallingUndoCommand, see LabPlot.cpp 0034 //TODO: redesign/remove this 0035 qRegisterMetaType<const AbstractAspect*>("const AbstractAspect*"); 0036 qRegisterMetaType<const AbstractColumn*>("const AbstractColumn*"); 0037 } 0038 0039 //############################################################################## 0040 //################# handling of empty and sparse files ######################## 0041 //############################################################################## 0042 void AsciiFilterTest::testEmptyFileAppend() { 0043 Spreadsheet spreadsheet("test", false); 0044 AsciiFilter filter; 0045 0046 const int rowCount = spreadsheet.rowCount(); 0047 const int colCount = spreadsheet.columnCount(); 0048 const QString& fileName = QFINDTESTDATA(QLatin1String("data/empty_file.txt")); 0049 AbstractFileFilter::ImportMode mode = AbstractFileFilter::ImportMode::Append; 0050 0051 filter.readDataFromFile(fileName, &spreadsheet, mode); 0052 0053 QCOMPARE(spreadsheet.rowCount(), rowCount); 0054 QCOMPARE(spreadsheet.columnCount(), colCount); 0055 } 0056 0057 void AsciiFilterTest::testEmptyFilePrepend() { 0058 Spreadsheet spreadsheet("test", false); 0059 AsciiFilter filter; 0060 0061 const int rowCount = spreadsheet.rowCount(); 0062 const int colCount = spreadsheet.columnCount(); 0063 const QString& fileName = QFINDTESTDATA(QLatin1String("data/empty_file.txt")); 0064 AbstractFileFilter::ImportMode mode = AbstractFileFilter::ImportMode::Prepend; 0065 0066 filter.readDataFromFile(fileName, &spreadsheet, mode); 0067 0068 QCOMPARE(spreadsheet.rowCount(), rowCount); 0069 QCOMPARE(spreadsheet.columnCount(), colCount); 0070 } 0071 0072 void AsciiFilterTest::testEmptyFileReplace() { 0073 Spreadsheet spreadsheet("test", false); 0074 AsciiFilter filter; 0075 0076 const int rowCount = spreadsheet.rowCount(); 0077 const int colCount = spreadsheet.columnCount(); 0078 const QString& fileName = QFINDTESTDATA(QLatin1String("data/empty_file.txt")); 0079 AbstractFileFilter::ImportMode mode = AbstractFileFilter::ImportMode::Replace; 0080 filter.readDataFromFile(fileName, &spreadsheet, mode); 0081 0082 QCOMPARE(spreadsheet.rowCount(), rowCount); 0083 QCOMPARE(spreadsheet.columnCount(), colCount); 0084 } 0085 0086 void AsciiFilterTest::testEmptyLines01() { 0087 Spreadsheet spreadsheet("test", false); 0088 AsciiFilter filter; 0089 const QString& fileName = QFINDTESTDATA(QLatin1String("data/empty_lines_01.txt")); 0090 0091 AbstractFileFilter::ImportMode mode = AbstractFileFilter::ImportMode::Replace; 0092 filter.setSeparatingCharacter("auto"); 0093 filter.setHeaderEnabled(true); 0094 filter.readDataFromFile(fileName, &spreadsheet, mode); 0095 0096 QCOMPARE(spreadsheet.rowCount(), 3); 0097 QCOMPARE(spreadsheet.columnCount(), 3); 0098 0099 QCOMPARE(spreadsheet.column(0)->name(), QLatin1String("x")); 0100 QCOMPARE(spreadsheet.column(1)->name(), QLatin1String("y")); 0101 QCOMPARE(spreadsheet.column(2)->name(), QLatin1String("values")); 0102 0103 QCOMPARE(spreadsheet.column(0)->columnMode(), AbstractColumn::ColumnMode::Integer); 0104 QCOMPARE(spreadsheet.column(1)->columnMode(), AbstractColumn::ColumnMode::Integer); 0105 QCOMPARE(spreadsheet.column(2)->columnMode(), AbstractColumn::ColumnMode::Integer); 0106 0107 QCOMPARE(spreadsheet.column(0)->integerAt(0), 1); 0108 QCOMPARE(spreadsheet.column(0)->integerAt(1), 2); 0109 QCOMPARE(spreadsheet.column(0)->integerAt(2), 3); 0110 QCOMPARE(spreadsheet.column(1)->integerAt(0), 2); 0111 QCOMPARE(spreadsheet.column(1)->integerAt(1), 4); 0112 QCOMPARE(spreadsheet.column(1)->integerAt(2), 9); 0113 QCOMPARE(spreadsheet.column(2)->integerAt(0), 10); 0114 QCOMPARE(spreadsheet.column(2)->integerAt(1), 40); 0115 QCOMPARE(spreadsheet.column(2)->integerAt(2), 90); 0116 } 0117 0118 void AsciiFilterTest::testSparseFile01() { 0119 Spreadsheet spreadsheet("test", false); 0120 AsciiFilter filter; 0121 const QString& fileName = QFINDTESTDATA(QLatin1String("data/sparse_file_01.txt")); 0122 0123 AbstractFileFilter::ImportMode mode = AbstractFileFilter::ImportMode::Replace; 0124 filter.setSeparatingCharacter(","); 0125 filter.setHeaderEnabled(true); 0126 filter.setSimplifyWhitespacesEnabled(true); 0127 filter.readDataFromFile(fileName, &spreadsheet, mode); 0128 0129 QCOMPARE(spreadsheet.rowCount(), 3); 0130 QCOMPARE(spreadsheet.columnCount(), 3); 0131 0132 QCOMPARE(spreadsheet.column(0)->name(), QLatin1String("N")); 0133 QCOMPARE(spreadsheet.column(1)->name(), QLatin1String("Col1")); 0134 QCOMPARE(spreadsheet.column(2)->name(), QLatin1String("Col2")); 0135 0136 QCOMPARE(spreadsheet.column(0)->columnMode(), AbstractColumn::ColumnMode::Integer); 0137 QCOMPARE(spreadsheet.column(1)->columnMode(), AbstractColumn::ColumnMode::Integer); 0138 QCOMPARE(spreadsheet.column(2)->columnMode(), AbstractColumn::ColumnMode::Integer); 0139 0140 QCOMPARE(spreadsheet.column(0)->integerAt(0), 1); 0141 QCOMPARE(spreadsheet.column(0)->integerAt(1), 2); 0142 QCOMPARE(spreadsheet.column(0)->integerAt(2), 3); 0143 0144 QCOMPARE(spreadsheet.column(1)->integerAt(0), 1); 0145 QCOMPARE(spreadsheet.column(1)->integerAt(1), 0); 0146 QCOMPARE(spreadsheet.column(1)->integerAt(2), 1); 0147 0148 QCOMPARE(spreadsheet.column(2)->integerAt(0), 2); 0149 QCOMPARE(spreadsheet.column(2)->integerAt(1), 2); 0150 QCOMPARE(spreadsheet.column(2)->integerAt(2), 0); 0151 } 0152 0153 void AsciiFilterTest::testSparseFile02() { 0154 Spreadsheet spreadsheet("test", false); 0155 AsciiFilter filter; 0156 const QString& fileName = QFINDTESTDATA(QLatin1String("data/sparse_file_02.txt")); 0157 0158 AbstractFileFilter::ImportMode mode = AbstractFileFilter::ImportMode::Replace; 0159 filter.setSeparatingCharacter(","); 0160 filter.setNaNValueToZero(false); 0161 filter.setSimplifyWhitespacesEnabled(true); 0162 filter.setSkipEmptyParts(false); 0163 filter.setHeaderEnabled(true); 0164 filter.readDataFromFile(fileName, &spreadsheet, mode); 0165 0166 QCOMPARE(spreadsheet.rowCount(), 3); 0167 QCOMPARE(spreadsheet.columnCount(), 3); 0168 0169 QCOMPARE(spreadsheet.column(0)->name(), QLatin1String("N")); 0170 QCOMPARE(spreadsheet.column(1)->name(), QLatin1String("Col1")); 0171 QCOMPARE(spreadsheet.column(2)->name(), QLatin1String("Col2")); 0172 0173 QCOMPARE(spreadsheet.column(0)->columnMode(), AbstractColumn::ColumnMode::Integer); 0174 QCOMPARE(spreadsheet.column(1)->columnMode(), AbstractColumn::ColumnMode::Numeric); 0175 QCOMPARE(spreadsheet.column(2)->columnMode(), AbstractColumn::ColumnMode::Numeric); 0176 0177 QCOMPARE(spreadsheet.column(0)->integerAt(0), 1); 0178 QCOMPARE(spreadsheet.column(0)->integerAt(1), 2); 0179 QCOMPARE(spreadsheet.column(0)->integerAt(2), 3); 0180 0181 QCOMPARE(spreadsheet.column(1)->valueAt(0), 1.); 0182 QCOMPARE((bool)std::isnan(spreadsheet.column(1)->valueAt(1)), true); 0183 QCOMPARE(spreadsheet.column(1)->valueAt(2), 1.); 0184 0185 QCOMPARE(spreadsheet.column(2)->valueAt(0), 2.); 0186 QCOMPARE(spreadsheet.column(2)->valueAt(1), 2.); 0187 QCOMPARE((bool)std::isnan(spreadsheet.column(2)->valueAt(2)), true); 0188 } 0189 0190 void AsciiFilterTest::testSparseFile03() { 0191 Spreadsheet spreadsheet("test", false); 0192 AsciiFilter filter; 0193 const QString& fileName = QFINDTESTDATA(QLatin1String("data/sparse_file_03.txt")); 0194 0195 AbstractFileFilter::ImportMode mode = AbstractFileFilter::ImportMode::Replace; 0196 filter.setSeparatingCharacter(","); 0197 filter.setNaNValueToZero(true); 0198 filter.setSimplifyWhitespacesEnabled(true); 0199 filter.setSkipEmptyParts(false); 0200 filter.setHeaderEnabled(true); 0201 filter.readDataFromFile(fileName, &spreadsheet, mode); 0202 0203 QCOMPARE(spreadsheet.rowCount(), 4); 0204 QCOMPARE(spreadsheet.columnCount(), 3); 0205 0206 QCOMPARE(spreadsheet.column(0)->name(), QLatin1String("N")); 0207 QCOMPARE(spreadsheet.column(1)->name(), QLatin1String("Col1")); 0208 QCOMPARE(spreadsheet.column(2)->name(), QLatin1String("Col2")); 0209 0210 QCOMPARE(spreadsheet.column(0)->columnMode(), AbstractColumn::ColumnMode::Integer); 0211 QCOMPARE(spreadsheet.column(1)->columnMode(), AbstractColumn::ColumnMode::Numeric); 0212 QCOMPARE(spreadsheet.column(2)->columnMode(), AbstractColumn::ColumnMode::Numeric); 0213 0214 QCOMPARE(spreadsheet.column(0)->integerAt(0), 1); 0215 QCOMPARE(spreadsheet.column(0)->integerAt(1), 2); 0216 QCOMPARE(spreadsheet.column(0)->integerAt(2), 3); 0217 QCOMPARE(spreadsheet.column(0)->integerAt(3), 0); 0218 0219 QCOMPARE(spreadsheet.column(1)->valueAt(0), 1.); 0220 QCOMPARE(spreadsheet.column(1)->valueAt(1), 0.); 0221 QCOMPARE(spreadsheet.column(1)->valueAt(2), 1.); 0222 QCOMPARE(spreadsheet.column(1)->valueAt(3), 0.); 0223 0224 QCOMPARE(spreadsheet.column(2)->valueAt(0), 2.); 0225 QCOMPARE(spreadsheet.column(2)->valueAt(1), 2.); 0226 QCOMPARE(spreadsheet.column(2)->valueAt(2), 0.); 0227 QCOMPARE(spreadsheet.column(2)->valueAt(3), 3.); 0228 } 0229 0230 //############################################################################## 0231 //################################ header handling ############################ 0232 //############################################################################## 0233 void AsciiFilterTest::testHeader01() { 0234 Spreadsheet spreadsheet("test", false); 0235 AsciiFilter filter; 0236 const QString& fileName = QFINDTESTDATA(QLatin1String("data/separator_semicolon.txt")); 0237 0238 AbstractFileFilter::ImportMode mode = AbstractFileFilter::ImportMode::Replace; 0239 filter.setSeparatingCharacter(";"); 0240 filter.setHeaderEnabled(false); 0241 filter.setVectorNames(QString()); 0242 filter.readDataFromFile(fileName, &spreadsheet, mode); 0243 0244 QCOMPARE(spreadsheet.rowCount(), 3); 0245 QCOMPARE(spreadsheet.columnCount(), 2); 0246 } 0247 0248 void AsciiFilterTest::testHeader02() { 0249 Spreadsheet spreadsheet("test", false); 0250 AsciiFilter filter; 0251 const QString& fileName = QFINDTESTDATA(QLatin1String("data/separator_semicolon.txt")); 0252 0253 AbstractFileFilter::ImportMode mode = AbstractFileFilter::ImportMode::Replace; 0254 filter.setSeparatingCharacter(";"); 0255 filter.setHeaderEnabled(true); 0256 filter.setVectorNames(QString()); 0257 filter.readDataFromFile(fileName, &spreadsheet, mode); 0258 0259 QCOMPARE(spreadsheet.rowCount(), 2);//out of 3 rows one row is used for the column names (header) 0260 QCOMPARE(spreadsheet.columnCount(), 2); 0261 QCOMPARE(spreadsheet.column(0)->name(), QLatin1String("1")); 0262 0263 //TODO: we start with the names "1" and "2" in the spreadsheet and try to rename them to "1" and "1" (names coming from the file) 0264 //-> the second column with the name "2" will be renamed to "3" because of the current logic in AbstractAspect::uniqueNameFor(). 0265 QCOMPARE(spreadsheet.column(1)->name(), QLatin1String("3")); 0266 } 0267 0268 void AsciiFilterTest::testHeader03() { 0269 Spreadsheet spreadsheet("test", false); 0270 AsciiFilter filter; 0271 const QString& fileName = QFINDTESTDATA(QLatin1String("data/separator_semicolon.txt")); 0272 0273 AbstractFileFilter::ImportMode mode = AbstractFileFilter::ImportMode::Replace; 0274 filter.setSeparatingCharacter(";"); 0275 filter.setHeaderEnabled(false); 0276 filter.setVectorNames("x"); 0277 filter.readDataFromFile(fileName, &spreadsheet, mode); 0278 0279 QCOMPARE(spreadsheet.rowCount(), 3); 0280 QCOMPARE(spreadsheet.columnCount(), 1); //one column name was specified, we import only one column 0281 QCOMPARE(spreadsheet.column(0)->name(), QLatin1String("x")); 0282 } 0283 0284 void AsciiFilterTest::testHeader04() { 0285 Spreadsheet spreadsheet("test", false); 0286 AsciiFilter filter; 0287 const QString& fileName = QFINDTESTDATA(QLatin1String("data/separator_semicolon.txt")); 0288 0289 AbstractFileFilter::ImportMode mode = AbstractFileFilter::ImportMode::Replace; 0290 filter.setSeparatingCharacter(";"); 0291 filter.setHeaderEnabled(false); 0292 filter.setVectorNames("x"); 0293 filter.readDataFromFile(fileName, &spreadsheet, mode); 0294 0295 QCOMPARE(spreadsheet.rowCount(), 3); 0296 QCOMPARE(spreadsheet.columnCount(), 1); //one column name was specified -> we import only one column 0297 QCOMPARE(spreadsheet.column(0)->name(), QLatin1String("x")); 0298 } 0299 0300 void AsciiFilterTest::testHeader05() { 0301 Spreadsheet spreadsheet("test", false); 0302 AsciiFilter filter; 0303 const QString& fileName = QFINDTESTDATA(QLatin1String("data/separator_semicolon.txt")); 0304 0305 AbstractFileFilter::ImportMode mode = AbstractFileFilter::ImportMode::Replace; 0306 filter.setSeparatingCharacter(";"); 0307 filter.setHeaderEnabled(false); 0308 filter.setVectorNames("x y"); 0309 filter.readDataFromFile(fileName, &spreadsheet, mode); 0310 0311 QCOMPARE(spreadsheet.rowCount(), 3); 0312 QCOMPARE(spreadsheet.columnCount(), 2); //two names were specified -> we import two columns 0313 QCOMPARE(spreadsheet.column(0)->name(), QLatin1String("x")); 0314 QCOMPARE(spreadsheet.column(1)->name(), QLatin1String("y")); 0315 } 0316 0317 void AsciiFilterTest::testHeader06() { 0318 Spreadsheet spreadsheet("test", false); 0319 AsciiFilter filter; 0320 const QString& fileName = QFINDTESTDATA(QLatin1String("data/separator_semicolon.txt")); 0321 0322 AbstractFileFilter::ImportMode mode = AbstractFileFilter::ImportMode::Replace; 0323 filter.setSeparatingCharacter(";"); 0324 filter.setHeaderEnabled(false); 0325 filter.setVectorNames("x y z"); 0326 filter.readDataFromFile(fileName, &spreadsheet, mode); 0327 0328 QCOMPARE(spreadsheet.rowCount(), 3); 0329 QCOMPARE(spreadsheet.columnCount(), 2); //three names were specified, but there're only two columns in the file -> we import only two columns 0330 QCOMPARE(spreadsheet.column(0)->name(), QLatin1String("x")); 0331 QCOMPARE(spreadsheet.column(1)->name(), QLatin1String("y")); 0332 } 0333 0334 /*! 0335 * test with a file containing the header in the second line 0336 * with a subsequent comment line without any comment character. 0337 * this line shouldn't disturb the detection of numeric column modes. 0338 */ 0339 void AsciiFilterTest::testHeader07() { 0340 Spreadsheet spreadsheet("test", false); 0341 AsciiFilter filter; 0342 const QString& fileName = QFINDTESTDATA(QLatin1String("data/comment_header_comment.txt")); 0343 0344 AbstractFileFilter::ImportMode mode = AbstractFileFilter::ImportMode::Replace; 0345 filter.setSeparatingCharacter("TAB"); 0346 filter.setStartRow(2); 0347 filter.setHeaderEnabled(true); 0348 filter.setDateTimeFormat(QLatin1String("yyyy-MM-dd hh:mm:ss.zzz")); 0349 filter.readDataFromFile(fileName, &spreadsheet, mode); 0350 0351 //spreadsheet size 0352 QCOMPARE(spreadsheet.columnCount(), 3); 0353 QCOMPARE(spreadsheet.rowCount(), 4); 0354 0355 //column names 0356 QCOMPARE(spreadsheet.column(0)->name(), QLatin1String("counter")); 0357 QCOMPARE(spreadsheet.column(1)->name(), QLatin1String("t[min]")); 0358 QCOMPARE(spreadsheet.column(2)->name(), QLatin1String("#1ch1")); 0359 0360 //data types 0361 QCOMPARE(spreadsheet.column(0)->columnMode(), AbstractColumn::ColumnMode::Integer); 0362 QCOMPARE(spreadsheet.column(1)->columnMode(), AbstractColumn::ColumnMode::Numeric); 0363 QCOMPARE(spreadsheet.column(2)->columnMode(), AbstractColumn::ColumnMode::Numeric); 0364 0365 //values 0366 QCOMPARE(spreadsheet.column(0)->integerAt(0), 0); 0367 QCOMPARE((bool)std::isnan(spreadsheet.column(1)->valueAt(0)), true); 0368 QCOMPARE((bool)std::isnan(spreadsheet.column(2)->valueAt(0)), true); 0369 0370 QCOMPARE(spreadsheet.column(0)->integerAt(1), 1); 0371 QCOMPARE(spreadsheet.column(1)->valueAt(1), 0.0513); 0372 QCOMPARE(spreadsheet.column(2)->valueAt(1), 0.3448); 0373 0374 QCOMPARE(spreadsheet.column(0)->integerAt(2), 2); 0375 QCOMPARE(spreadsheet.column(1)->valueAt(2), 0.1005); 0376 QCOMPARE(spreadsheet.column(2)->valueAt(2), 0.3418); 0377 0378 QCOMPARE(spreadsheet.column(0)->integerAt(3), 3); 0379 QCOMPARE(spreadsheet.column(1)->valueAt(3), 0.1516); 0380 QCOMPARE(spreadsheet.column(2)->valueAt(3), 0.3433); 0381 } 0382 0383 /*! 0384 * the header contains spaces in the column names, values are tab separated. 0385 * when using "auto" for the separator characters, the tab character has to 0386 * be properly recognized and used. 0387 */ 0388 void AsciiFilterTest::testHeader08() { 0389 Spreadsheet spreadsheet("test", false); 0390 AsciiFilter filter; 0391 const QString& fileName = QFINDTESTDATA(QLatin1String("data/separator_tab_with_header_with_spaces.txt")); 0392 0393 AbstractFileFilter::ImportMode mode = AbstractFileFilter::ImportMode::Replace; 0394 filter.setSeparatingCharacter("auto"); 0395 filter.setHeaderEnabled(true); 0396 filter.readDataFromFile(fileName, &spreadsheet, mode); 0397 0398 //spreadsheet size 0399 QCOMPARE(spreadsheet.columnCount(), 2); 0400 QCOMPARE(spreadsheet.rowCount(), 2); 0401 0402 //column names 0403 QCOMPARE(spreadsheet.column(0)->name(), QLatin1String("first column")); 0404 QCOMPARE(spreadsheet.column(1)->name(), QLatin1String("second column")); 0405 0406 //data types 0407 QCOMPARE(spreadsheet.column(0)->columnMode(), AbstractColumn::ColumnMode::Integer); 0408 QCOMPARE(spreadsheet.column(1)->columnMode(), AbstractColumn::ColumnMode::Integer); 0409 0410 //values 0411 QCOMPARE(spreadsheet.column(0)->integerAt(0), 1); 0412 QCOMPARE(spreadsheet.column(1)->integerAt(0), 2); 0413 0414 QCOMPARE(spreadsheet.column(0)->integerAt(1), 3); 0415 QCOMPARE(spreadsheet.column(1)->integerAt(1), 4); 0416 } 0417 0418 //############################################################################## 0419 //##################### handling of different read ranges ##################### 0420 //############################################################################## 0421 void AsciiFilterTest::testColumnRange00() { 0422 Spreadsheet spreadsheet("test", false); 0423 AsciiFilter filter; 0424 const QString& fileName = QFINDTESTDATA(QLatin1String("data/numeric_data.txt")); 0425 0426 AbstractFileFilter::ImportMode mode = AbstractFileFilter::ImportMode::Replace; 0427 filter.setSeparatingCharacter("auto"); 0428 filter.setHeaderEnabled(false); 0429 filter.readDataFromFile(fileName, &spreadsheet, mode); 0430 0431 //no ranges specified, all rows and columns have to be read 0432 QCOMPARE(spreadsheet.rowCount(), 5); 0433 QCOMPARE(spreadsheet.columnCount(), 3); 0434 0435 QCOMPARE(spreadsheet.column(0)->columnMode(), AbstractColumn::ColumnMode::Numeric); 0436 QCOMPARE(spreadsheet.column(1)->columnMode(), AbstractColumn::ColumnMode::Numeric); 0437 QCOMPARE(spreadsheet.column(2)->columnMode(), AbstractColumn::ColumnMode::Numeric); 0438 0439 //check the values for the first line 0440 QCOMPARE(spreadsheet.column(0)->valueAt(0), 1.716299); 0441 QCOMPARE(spreadsheet.column(1)->valueAt(0), -0.485527); 0442 QCOMPARE(spreadsheet.column(2)->valueAt(0), -0.288690); 0443 } 0444 0445 void AsciiFilterTest::testColumnRange01() { 0446 Spreadsheet spreadsheet("test", false); 0447 AsciiFilter filter; 0448 const QString& fileName = QFINDTESTDATA(QLatin1String("data/numeric_data.txt")); 0449 0450 AbstractFileFilter::ImportMode mode = AbstractFileFilter::ImportMode::Replace; 0451 filter.setSeparatingCharacter("auto"); 0452 filter.setHeaderEnabled(false); 0453 filter.setCreateIndexEnabled(true); 0454 filter.readDataFromFile(fileName, &spreadsheet, mode); 0455 0456 //no ranges specified, all rows and columns have to be read plus the additional column for the index 0457 QCOMPARE(spreadsheet.rowCount(), 5); 0458 QCOMPARE(spreadsheet.columnCount(), 4); 0459 0460 QCOMPARE(spreadsheet.column(0)->columnMode(), AbstractColumn::ColumnMode::Integer); 0461 QCOMPARE(spreadsheet.column(1)->columnMode(), AbstractColumn::ColumnMode::Numeric); 0462 QCOMPARE(spreadsheet.column(2)->columnMode(), AbstractColumn::ColumnMode::Numeric); 0463 QCOMPARE(spreadsheet.column(3)->columnMode(), AbstractColumn::ColumnMode::Numeric); 0464 0465 //check the values for the first line 0466 QCOMPARE(spreadsheet.column(0)->integerAt(0), 1); 0467 QCOMPARE(spreadsheet.column(1)->valueAt(0), 1.716299); 0468 QCOMPARE(spreadsheet.column(2)->valueAt(0), -0.485527); 0469 QCOMPARE(spreadsheet.column(3)->valueAt(0), -0.288690); 0470 } 0471 0472 void AsciiFilterTest::testColumnRange02() { 0473 Spreadsheet spreadsheet("test", false); 0474 AsciiFilter filter; 0475 const QString& fileName = QFINDTESTDATA(QLatin1String("data/numeric_data.txt")); 0476 0477 AbstractFileFilter::ImportMode mode = AbstractFileFilter::ImportMode::Replace; 0478 filter.setSeparatingCharacter("auto"); 0479 filter.setHeaderEnabled(false); 0480 filter.setStartColumn(2); 0481 filter.setEndColumn(3); 0482 filter.readDataFromFile(fileName, &spreadsheet, mode); 0483 0484 //read all rows and the last two columns only 0485 QCOMPARE(spreadsheet.rowCount(), 5); 0486 QCOMPARE(spreadsheet.columnCount(), 2); 0487 0488 QCOMPARE(spreadsheet.column(0)->columnMode(), AbstractColumn::ColumnMode::Numeric); 0489 QCOMPARE(spreadsheet.column(1)->columnMode(), AbstractColumn::ColumnMode::Numeric); 0490 0491 //check the values for the first line 0492 QCOMPARE(spreadsheet.column(0)->valueAt(0), -0.485527); 0493 QCOMPARE(spreadsheet.column(1)->valueAt(0), -0.288690); 0494 } 0495 0496 void AsciiFilterTest::testColumnRange03() { 0497 Spreadsheet spreadsheet("test", false); 0498 AsciiFilter filter; 0499 const QString& fileName = QFINDTESTDATA(QLatin1String("data/numeric_data.txt")); 0500 0501 AbstractFileFilter::ImportMode mode = AbstractFileFilter::ImportMode::Replace; 0502 filter.setSeparatingCharacter("auto"); 0503 filter.setHeaderEnabled(false); 0504 filter.setCreateIndexEnabled(true); 0505 filter.setStartColumn(2); 0506 filter.setEndColumn(3); 0507 filter.readDataFromFile(fileName, &spreadsheet, mode); 0508 0509 //read all rows and the last two columns only plus the additional column for the index 0510 QCOMPARE(spreadsheet.rowCount(), 5); 0511 QCOMPARE(spreadsheet.columnCount(), 3); 0512 0513 QCOMPARE(spreadsheet.column(0)->columnMode(), AbstractColumn::ColumnMode::Integer); 0514 QCOMPARE(spreadsheet.column(1)->columnMode(), AbstractColumn::ColumnMode::Numeric); 0515 QCOMPARE(spreadsheet.column(2)->columnMode(), AbstractColumn::ColumnMode::Numeric); 0516 0517 //check the values for the first line 0518 QCOMPARE(spreadsheet.column(0)->integerAt(0), 1); 0519 QCOMPARE(spreadsheet.column(1)->valueAt(0), -0.485527); 0520 QCOMPARE(spreadsheet.column(2)->valueAt(0), -0.288690); 0521 } 0522 0523 void AsciiFilterTest::testColumnRange04() { 0524 Spreadsheet spreadsheet("test", false); 0525 AsciiFilter filter; 0526 const QString& fileName = QFINDTESTDATA(QLatin1String("data/numeric_data.txt")); 0527 0528 AbstractFileFilter::ImportMode mode = AbstractFileFilter::ImportMode::Replace; 0529 filter.setSeparatingCharacter("auto"); 0530 filter.setHeaderEnabled(false); 0531 filter.setStartColumn(3); 0532 filter.setEndColumn(3); 0533 filter.readDataFromFile(fileName, &spreadsheet, mode); 0534 0535 //read all rows and the last column only 0536 QCOMPARE(spreadsheet.rowCount(), 5); 0537 QCOMPARE(spreadsheet.columnCount(), 1); 0538 0539 QCOMPARE(spreadsheet.column(0)->columnMode(), AbstractColumn::ColumnMode::Numeric); 0540 0541 //check the values for the first line 0542 QCOMPARE(spreadsheet.column(0)->valueAt(0), -0.288690); 0543 } 0544 0545 void AsciiFilterTest::testColumnRange05() { 0546 Spreadsheet spreadsheet("test", false); 0547 AsciiFilter filter; 0548 const QString& fileName = QFINDTESTDATA(QLatin1String("data/numeric_data.txt")); 0549 0550 AbstractFileFilter::ImportMode mode = AbstractFileFilter::ImportMode::Replace; 0551 filter.setSeparatingCharacter("auto"); 0552 filter.setHeaderEnabled(false); 0553 filter.setStartColumn(3); 0554 filter.setEndColumn(2); 0555 filter.readDataFromFile(fileName, &spreadsheet, mode); 0556 0557 //wrong column range specified (start>end), nothing to read, 0558 //empty spreadsheet because of the replace mode 0559 QCOMPARE(spreadsheet.rowCount(), 0); 0560 QCOMPARE(spreadsheet.columnCount(), 0); 0561 } 0562 0563 void AsciiFilterTest::testColumnRange06() { 0564 Spreadsheet spreadsheet("test", false); 0565 AsciiFilter filter; 0566 const QString& fileName = QFINDTESTDATA(QLatin1String("data/numeric_data.txt")); 0567 0568 AbstractFileFilter::ImportMode mode = AbstractFileFilter::ImportMode::Replace; 0569 filter.setSeparatingCharacter("auto"); 0570 filter.setHeaderEnabled(false); 0571 filter.setCreateIndexEnabled(true); 0572 filter.setStartColumn(3); 0573 filter.setEndColumn(2); 0574 filter.readDataFromFile(fileName, &spreadsheet, mode); 0575 0576 //wrong column range specified (start>end), only the index column is created 0577 QCOMPARE(spreadsheet.rowCount(), 5); 0578 QCOMPARE(spreadsheet.columnCount(), 1); 0579 0580 QCOMPARE(spreadsheet.column(0)->columnMode(), AbstractColumn::ColumnMode::Integer); 0581 QCOMPARE(spreadsheet.column(0)->integerAt(0), 1); 0582 } 0583 0584 void AsciiFilterTest::testRowRange00() { 0585 Spreadsheet spreadsheet("test", false); 0586 AsciiFilter filter; 0587 const QString& fileName = QFINDTESTDATA(QLatin1String("data/numeric_data.txt")); 0588 0589 AbstractFileFilter::ImportMode mode = AbstractFileFilter::ImportMode::Replace; 0590 filter.setSeparatingCharacter("auto"); 0591 filter.setHeaderEnabled(false); 0592 filter.setStartRow(3); 0593 filter.setEndRow(5); 0594 filter.readDataFromFile(fileName, &spreadsheet, mode); 0595 0596 //three rows to read 0597 QCOMPARE(spreadsheet.rowCount(), 3); 0598 QCOMPARE(spreadsheet.columnCount(), 3); 0599 0600 QCOMPARE(spreadsheet.column(0)->columnMode(), AbstractColumn::ColumnMode::Numeric); 0601 QCOMPARE(spreadsheet.column(1)->columnMode(), AbstractColumn::ColumnMode::Numeric); 0602 QCOMPARE(spreadsheet.column(2)->columnMode(), AbstractColumn::ColumnMode::Numeric); 0603 0604 //check the values for the first and for the last lines 0605 QCOMPARE(spreadsheet.column(0)->valueAt(0), 1.711721); 0606 QCOMPARE(spreadsheet.column(1)->valueAt(0), -0.485527); 0607 QCOMPARE(spreadsheet.column(2)->valueAt(0), -0.293267); 0608 0609 QCOMPARE(spreadsheet.column(0)->valueAt(2), 1.716299); 0610 QCOMPARE(spreadsheet.column(1)->valueAt(2), -0.494682); 0611 QCOMPARE(spreadsheet.column(2)->valueAt(2), -0.284112); 0612 } 0613 0614 void AsciiFilterTest::testRowRange01() { 0615 Spreadsheet spreadsheet("test", false); 0616 AsciiFilter filter; 0617 const QString& fileName = QFINDTESTDATA(QLatin1String("data/numeric_data.txt")); 0618 0619 AbstractFileFilter::ImportMode mode = AbstractFileFilter::ImportMode::Replace; 0620 filter.setSeparatingCharacter("auto"); 0621 filter.setHeaderEnabled(false); 0622 filter.setStartRow(3); 0623 filter.setEndRow(10); 0624 filter.readDataFromFile(fileName, &spreadsheet, mode); 0625 0626 //end row larger than the number of available rows, three rows to read 0627 QCOMPARE(spreadsheet.rowCount(), 3); 0628 QCOMPARE(spreadsheet.columnCount(), 3); 0629 0630 QCOMPARE(spreadsheet.column(0)->columnMode(), AbstractColumn::ColumnMode::Numeric); 0631 QCOMPARE(spreadsheet.column(1)->columnMode(), AbstractColumn::ColumnMode::Numeric); 0632 QCOMPARE(spreadsheet.column(2)->columnMode(), AbstractColumn::ColumnMode::Numeric); 0633 0634 //check the values for the first and for the last lines 0635 QCOMPARE(spreadsheet.column(0)->valueAt(0), 1.711721); 0636 QCOMPARE(spreadsheet.column(1)->valueAt(0), -0.485527); 0637 QCOMPARE(spreadsheet.column(2)->valueAt(0), -0.293267); 0638 0639 QCOMPARE(spreadsheet.column(0)->valueAt(2), 1.716299); 0640 QCOMPARE(spreadsheet.column(1)->valueAt(2), -0.494682); 0641 QCOMPARE(spreadsheet.column(2)->valueAt(2), -0.284112); 0642 } 0643 0644 void AsciiFilterTest::testRowRange02() { 0645 Spreadsheet spreadsheet("test", false); 0646 AsciiFilter filter; 0647 const QString& fileName = QFINDTESTDATA(QLatin1String("data/numeric_data.txt")); 0648 0649 AbstractFileFilter::ImportMode mode = AbstractFileFilter::ImportMode::Replace; 0650 filter.setSeparatingCharacter("auto"); 0651 filter.setHeaderEnabled(false); 0652 filter.setStartRow(3); 0653 filter.setEndRow(1); 0654 filter.readDataFromFile(fileName, &spreadsheet, mode); 0655 0656 //start bigger than end, no rows to read 0657 //wrong row range specified (start>end), nothing to read, 0658 //spreadsheet is not touched, default number of rows and columns 0659 //TODO: this is inconsistent with the handling for columns, see testColumnRange05() 0660 QCOMPARE(spreadsheet.rowCount(), 100); 0661 QCOMPARE(spreadsheet.columnCount(), 2); 0662 } 0663 0664 void AsciiFilterTest::testRowColumnRange00() { 0665 Spreadsheet spreadsheet("test", false); 0666 AsciiFilter filter; 0667 const QString& fileName = QFINDTESTDATA(QLatin1String("data/numeric_data.txt")); 0668 0669 AbstractFileFilter::ImportMode mode = AbstractFileFilter::ImportMode::Replace; 0670 filter.setSeparatingCharacter("auto"); 0671 filter.setHeaderEnabled(false); 0672 filter.setStartRow(3); 0673 filter.setEndRow(5); 0674 filter.setStartColumn(2); 0675 filter.setEndColumn(3); 0676 filter.readDataFromFile(fileName, &spreadsheet, mode); 0677 0678 //three rows and two columns to read 0679 QCOMPARE(spreadsheet.rowCount(), 3); 0680 QCOMPARE(spreadsheet.columnCount(), 2); 0681 0682 QCOMPARE(spreadsheet.column(0)->columnMode(), AbstractColumn::ColumnMode::Numeric); 0683 QCOMPARE(spreadsheet.column(1)->columnMode(), AbstractColumn::ColumnMode::Numeric); 0684 0685 //check the values for the first and for the last lines 0686 QCOMPARE(spreadsheet.column(0)->valueAt(0), -0.485527); 0687 QCOMPARE(spreadsheet.column(1)->valueAt(0), -0.293267); 0688 0689 QCOMPARE(spreadsheet.column(0)->valueAt(2), -0.494682); 0690 QCOMPARE(spreadsheet.column(1)->valueAt(2), -0.284112); 0691 } 0692 0693 //############################################################################## 0694 //##################### handling of different separators ###################### 0695 //############################################################################## 0696 0697 0698 //############################################################################## 0699 //##################################### quoted strings ######################## 0700 //############################################################################## 0701 void AsciiFilterTest::testQuotedStrings00() { 0702 Spreadsheet spreadsheet("test", false); 0703 AsciiFilter filter; 0704 const QString& fileName = QFINDTESTDATA(QLatin1String("data/quoted_strings.txt")); 0705 0706 AbstractFileFilter::ImportMode mode = AbstractFileFilter::ImportMode::Replace; 0707 filter.setSeparatingCharacter(","); 0708 filter.setHeaderEnabled(false); 0709 filter.setRemoveQuotesEnabled(true); 0710 filter.readDataFromFile(fileName, &spreadsheet, mode); 0711 0712 //three rows and two columns to read 0713 QCOMPARE(spreadsheet.rowCount(), 3); 0714 QCOMPARE(spreadsheet.columnCount(), 4); 0715 0716 QCOMPARE(spreadsheet.column(0)->columnMode(), AbstractColumn::ColumnMode::Text); 0717 QCOMPARE(spreadsheet.column(1)->columnMode(), AbstractColumn::ColumnMode::Integer); 0718 QCOMPARE(spreadsheet.column(2)->columnMode(), AbstractColumn::ColumnMode::Integer); 0719 QCOMPARE(spreadsheet.column(3)->columnMode(), AbstractColumn::ColumnMode::Numeric); 0720 0721 QCOMPARE(spreadsheet.column(0)->textAt(0), QLatin1String("a")); 0722 QCOMPARE(spreadsheet.column(1)->integerAt(0), 1000); 0723 QCOMPARE(spreadsheet.column(2)->integerAt(0), 201811); 0724 QCOMPARE(spreadsheet.column(3)->valueAt(0), 1.1); 0725 0726 QCOMPARE(spreadsheet.column(0)->textAt(1), QLatin1String("ab")); 0727 QCOMPARE(spreadsheet.column(1)->integerAt(1), 2000); 0728 QCOMPARE(spreadsheet.column(2)->integerAt(1), 201812); 0729 QCOMPARE(spreadsheet.column(3)->valueAt(1), 1.2); 0730 0731 QCOMPARE(spreadsheet.column(0)->textAt(2), QLatin1String("abc")); 0732 QCOMPARE(spreadsheet.column(1)->integerAt(2), 3000); 0733 QCOMPARE(spreadsheet.column(2)->integerAt(2), 201901); 0734 QCOMPARE(spreadsheet.column(3)->valueAt(2), 1.3); 0735 } 0736 0737 void AsciiFilterTest::testQuotedStrings01() { 0738 Spreadsheet spreadsheet("test", false); 0739 AsciiFilter filter; 0740 const QString& fileName = QFINDTESTDATA(QLatin1String("data/quoted_strings_with_header.txt")); 0741 0742 AbstractFileFilter::ImportMode mode = AbstractFileFilter::ImportMode::Replace; 0743 filter.setSeparatingCharacter(","); 0744 filter.setHeaderEnabled(true); 0745 filter.setSimplifyWhitespacesEnabled(true); 0746 filter.setRemoveQuotesEnabled(true); 0747 filter.readDataFromFile(fileName, &spreadsheet, mode); 0748 0749 //three rows and two columns to read 0750 QCOMPARE(spreadsheet.rowCount(), 3); 0751 QCOMPARE(spreadsheet.columnCount(), 4); 0752 0753 //column names 0754 QCOMPARE(spreadsheet.column(0)->name(), QLatin1String("col1")); 0755 QCOMPARE(spreadsheet.column(1)->name(), QLatin1String("col2")); 0756 QCOMPARE(spreadsheet.column(2)->name(), QLatin1String("col3")); 0757 QCOMPARE(spreadsheet.column(3)->name(), QLatin1String("col4")); 0758 0759 //data types 0760 QCOMPARE(spreadsheet.column(0)->columnMode(), AbstractColumn::ColumnMode::Text); 0761 QCOMPARE(spreadsheet.column(1)->columnMode(), AbstractColumn::ColumnMode::Integer); 0762 QCOMPARE(spreadsheet.column(2)->columnMode(), AbstractColumn::ColumnMode::Integer); 0763 QCOMPARE(spreadsheet.column(3)->columnMode(), AbstractColumn::ColumnMode::Numeric); 0764 0765 //values 0766 QCOMPARE(spreadsheet.column(0)->textAt(0), QLatin1String("a")); 0767 QCOMPARE(spreadsheet.column(1)->integerAt(0), 1000); 0768 QCOMPARE(spreadsheet.column(2)->integerAt(0), 201811); 0769 QCOMPARE(spreadsheet.column(3)->valueAt(0), 1.1); 0770 0771 QCOMPARE(spreadsheet.column(0)->textAt(1), QLatin1String("ab")); 0772 QCOMPARE(spreadsheet.column(1)->integerAt(1), 2000); 0773 QCOMPARE(spreadsheet.column(2)->integerAt(1), 201812); 0774 QCOMPARE(spreadsheet.column(3)->valueAt(1), 1.2); 0775 0776 QCOMPARE(spreadsheet.column(0)->textAt(2), QLatin1String("abc")); 0777 QCOMPARE(spreadsheet.column(1)->integerAt(2), 3000); 0778 QCOMPARE(spreadsheet.column(2)->integerAt(2), 201901); 0779 QCOMPARE(spreadsheet.column(3)->valueAt(2), 1.3); 0780 } 0781 0782 void AsciiFilterTest::testQuotedStrings02() { 0783 Spreadsheet spreadsheet("test", false); 0784 AsciiFilter filter; 0785 const QString& fileName = QFINDTESTDATA(QLatin1String("data/quoted_strings_one_line.txt")); 0786 0787 QCOMPARE(QFile::exists(fileName), true); 0788 0789 AbstractFileFilter::ImportMode mode = AbstractFileFilter::ImportMode::Replace; 0790 filter.setSeparatingCharacter(","); 0791 filter.setHeaderEnabled(false); 0792 filter.setRemoveQuotesEnabled(true); 0793 filter.readDataFromFile(fileName, &spreadsheet, mode); 0794 0795 //three rows and two columns to read 0796 // QCOMPARE(spreadsheet.rowCount(), 1); 0797 // QCOMPARE(spreadsheet.columnCount(), 4); 0798 0799 QCOMPARE(spreadsheet.column(0)->columnMode(), AbstractColumn::ColumnMode::Text); 0800 QCOMPARE(spreadsheet.column(1)->columnMode(), AbstractColumn::ColumnMode::Integer); 0801 QCOMPARE(spreadsheet.column(2)->columnMode(), AbstractColumn::ColumnMode::Integer); 0802 QCOMPARE(spreadsheet.column(3)->columnMode(), AbstractColumn::ColumnMode::Numeric); 0803 0804 QCOMPARE(spreadsheet.column(0)->textAt(0), QLatin1String("a")); 0805 QCOMPARE(spreadsheet.column(1)->integerAt(0), 1000); 0806 QCOMPARE(spreadsheet.column(2)->integerAt(0), 201811); 0807 QCOMPARE(spreadsheet.column(3)->valueAt(0), 1.1); 0808 } 0809 0810 void AsciiFilterTest::testQuotedStrings03() { 0811 Spreadsheet spreadsheet("test", false); 0812 AsciiFilter filter; 0813 const QString& fileName = QFINDTESTDATA(QLatin1String("data/quoted_strings_one_line_with_header.txt")); 0814 0815 AbstractFileFilter::ImportMode mode = AbstractFileFilter::ImportMode::Replace; 0816 filter.setSeparatingCharacter(","); 0817 filter.setHeaderEnabled(true); 0818 filter.setSimplifyWhitespacesEnabled(true); 0819 filter.setRemoveQuotesEnabled(true); 0820 filter.readDataFromFile(fileName, &spreadsheet, mode); 0821 0822 //three rows and two columns to read 0823 // QCOMPARE(spreadsheet.rowCount(), 1); 0824 // QCOMPARE(spreadsheet.columnCount(), 4); 0825 0826 //column names 0827 QCOMPARE(spreadsheet.column(0)->name(), QLatin1String("col1")); 0828 QCOMPARE(spreadsheet.column(1)->name(), QLatin1String("col2")); 0829 QCOMPARE(spreadsheet.column(2)->name(), QLatin1String("col3")); 0830 QCOMPARE(spreadsheet.column(3)->name(), QLatin1String("col4")); 0831 0832 //data types 0833 QCOMPARE(spreadsheet.column(0)->columnMode(), AbstractColumn::ColumnMode::Text); 0834 QCOMPARE(spreadsheet.column(1)->columnMode(), AbstractColumn::ColumnMode::Integer); 0835 QCOMPARE(spreadsheet.column(2)->columnMode(), AbstractColumn::ColumnMode::Integer); 0836 QCOMPARE(spreadsheet.column(3)->columnMode(), AbstractColumn::ColumnMode::Numeric); 0837 0838 //values 0839 QCOMPARE(spreadsheet.column(0)->textAt(0), QLatin1String("a")); 0840 QCOMPARE(spreadsheet.column(1)->integerAt(0), 1000); 0841 QCOMPARE(spreadsheet.column(2)->integerAt(0), 201811); 0842 QCOMPARE(spreadsheet.column(3)->valueAt(0), 1.1); 0843 } 0844 0845 0846 //############################################################################## 0847 //############################### skip comments ############################### 0848 //############################################################################## 0849 void AsciiFilterTest::testComments00() { 0850 Spreadsheet spreadsheet("test", false); 0851 AsciiFilter filter; 0852 const QString& fileName = QFINDTESTDATA(QLatin1String("data/multi_line_comment.txt")); 0853 0854 AbstractFileFilter::ImportMode mode = AbstractFileFilter::ImportMode::Replace; 0855 filter.setSeparatingCharacter(","); 0856 filter.readDataFromFile(fileName, &spreadsheet, mode); 0857 0858 QCOMPARE(spreadsheet.columnCount(), 2); 0859 0860 //data types 0861 QCOMPARE(spreadsheet.column(0)->columnMode(), AbstractColumn::ColumnMode::Integer); 0862 QCOMPARE(spreadsheet.column(1)->columnMode(), AbstractColumn::ColumnMode::Numeric); 0863 0864 //values 0865 QCOMPARE(spreadsheet.column(0)->integerAt(0), 1); 0866 QCOMPARE(spreadsheet.column(1)->valueAt(0), 1.1); 0867 0868 QCOMPARE(spreadsheet.column(0)->integerAt(1), 2); 0869 QCOMPARE(spreadsheet.column(1)->valueAt(1), 2.2); 0870 } 0871 0872 void AsciiFilterTest::testComments01() { 0873 Spreadsheet spreadsheet("test", false); 0874 AsciiFilter filter; 0875 const QString& fileName = QFINDTESTDATA(QLatin1String("data/multi_line_comment_with_empty_lines.txt")); 0876 0877 AbstractFileFilter::ImportMode mode = AbstractFileFilter::ImportMode::Replace; 0878 filter.setSeparatingCharacter(","); 0879 filter.readDataFromFile(fileName, &spreadsheet, mode); 0880 0881 QCOMPARE(spreadsheet.columnCount(), 2); 0882 0883 //data types 0884 QCOMPARE(spreadsheet.column(0)->columnMode(), AbstractColumn::ColumnMode::Integer); 0885 QCOMPARE(spreadsheet.column(1)->columnMode(), AbstractColumn::ColumnMode::Numeric); 0886 0887 //values 0888 QCOMPARE(spreadsheet.column(0)->integerAt(0), 1); 0889 QCOMPARE(spreadsheet.column(1)->valueAt(0), 1.1); 0890 0891 QCOMPARE(spreadsheet.column(0)->integerAt(1), 2); 0892 QCOMPARE(spreadsheet.column(1)->valueAt(1), 2.2); 0893 } 0894 0895 /*! 0896 * test with an empty comment character 0897 */ 0898 void AsciiFilterTest::testComments02() { 0899 Spreadsheet spreadsheet("test", false); 0900 AsciiFilter filter; 0901 const QString& fileName = QFINDTESTDATA(QLatin1String("data/separator_semicolon_with_header.txt")); 0902 0903 AbstractFileFilter::ImportMode mode = AbstractFileFilter::ImportMode::Replace; 0904 filter.setCommentCharacter(""); 0905 filter.setSeparatingCharacter(";"); 0906 filter.setHeaderEnabled(true); 0907 filter.readDataFromFile(fileName, &spreadsheet, mode); 0908 0909 //spreadsheet size 0910 QCOMPARE(spreadsheet.columnCount(), 2); 0911 QCOMPARE(spreadsheet.rowCount(), 3); 0912 0913 //column names 0914 QCOMPARE(spreadsheet.column(0)->name(), QLatin1String("c1")); 0915 QCOMPARE(spreadsheet.column(1)->name(), QLatin1String("c2")); 0916 0917 //data types 0918 QCOMPARE(spreadsheet.column(0)->columnMode(), AbstractColumn::ColumnMode::Integer); 0919 QCOMPARE(spreadsheet.column(1)->columnMode(), AbstractColumn::ColumnMode::Integer); 0920 0921 //values 0922 QCOMPARE(spreadsheet.column(0)->integerAt(0), 1); 0923 QCOMPARE(spreadsheet.column(1)->integerAt(0), 1); 0924 0925 QCOMPARE(spreadsheet.column(0)->integerAt(1), 2); 0926 QCOMPARE(spreadsheet.column(1)->integerAt(1), 2); 0927 0928 QCOMPARE(spreadsheet.column(0)->integerAt(2), 3); 0929 QCOMPARE(spreadsheet.column(1)->integerAt(2), 3); 0930 } 0931 0932 0933 //############################################################################## 0934 //######################### handling of datetime data ######################### 0935 //############################################################################## 0936 /*! 0937 * read data containing only two characters for the year - 'yy'. The default year in 0938 * QDateTime is 1900 . When reading such two-characters DateTime values we want 0939 * to have the current centure after the import. 0940 */ 0941 void AsciiFilterTest::testDateTime00() { 0942 Spreadsheet spreadsheet("test", false); 0943 AsciiFilter filter; 0944 const QString& fileName = QFINDTESTDATA(QLatin1String("data/datetime_01.csv")); 0945 0946 AbstractFileFilter::ImportMode mode = AbstractFileFilter::ImportMode::Replace; 0947 filter.setSeparatingCharacter(","); 0948 filter.setHeaderEnabled(true); 0949 filter.setDateTimeFormat(QLatin1String("dd/MM/yy hh:mm:ss")); 0950 filter.readDataFromFile(fileName, &spreadsheet, mode); 0951 0952 //spreadsheet size 0953 QCOMPARE(spreadsheet.columnCount(), 2); 0954 QCOMPARE(spreadsheet.rowCount(), 2); 0955 0956 //column names 0957 QCOMPARE(spreadsheet.column(0)->name(), QLatin1String("Date")); 0958 QCOMPARE(spreadsheet.column(1)->name(), QLatin1String("Water Pressure")); 0959 0960 //data types 0961 QCOMPARE(spreadsheet.column(0)->columnMode(), AbstractColumn::ColumnMode::DateTime); 0962 QCOMPARE(spreadsheet.column(1)->columnMode(), AbstractColumn::ColumnMode::Numeric); 0963 0964 //values 0965 QDateTime value = QDateTime::fromString(QLatin1String("01/01/2019 00:00:00"), QLatin1String("dd/MM/yyyy hh:mm:ss")); 0966 QCOMPARE(spreadsheet.column(0)->dateTimeAt(0), value); 0967 QCOMPARE(spreadsheet.column(1)->valueAt(0), 14.7982); 0968 0969 value = QDateTime::fromString(QLatin1String("01/01/2019 00:00:00"), QLatin1String("dd/MM/yyyy hh:mm:ss")); 0970 QCOMPARE(spreadsheet.column(0)->dateTimeAt(0), value); 0971 QCOMPARE(spreadsheet.column(1)->valueAt(1), 14.8026); 0972 } 0973 0974 QTEST_MAIN(AsciiFilterTest)