File indexing completed on 2024-04-21 14:49:23
0001 /*************************************************************************** 0002 File : DatasetsUnitTest.cpp 0003 Project : LabPlot 0004 Description : Tests for Dataset related features 0005 -------------------------------------------------------------------- 0006 Copyright : (C) 2019 Kovacs Ferencz (kferike98@gmail.com) 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 "DatasetsUnitTest.h" 0029 0030 #include "backend/datasources/filters/AsciiFilter.h" 0031 #include "backend/spreadsheet/Spreadsheet.h" 0032 #include "backend/datasources/DatasetHandler.h" 0033 #include "kdefrontend/DatasetModel.h" 0034 #include "kdefrontend/datasources/ImportDatasetWidget.h" 0035 #include "kdefrontend/datasources/DatasetMetadataManagerDialog.h" 0036 0037 #include <QFile> 0038 #include <QTextStream> 0039 #include <QDebug> 0040 #include <QVector> 0041 #include <QTimer> 0042 #include <QEventLoop> 0043 #include <QTreeWidgetItem> 0044 #include <QStandardPaths> 0045 0046 void DatasetsUnitTest::initTestCase() { 0047 const QString currentDir = __FILE__; 0048 m_dataDir = currentDir.left(currentDir.lastIndexOf(QDir::separator())) + QDir::separator() + QLatin1String("data") + QDir::separator(); 0049 0050 const QString baseDir = QStandardPaths::standardLocations(QStandardPaths::AppDataLocation).first(); 0051 const QString containingDir = "labplot_data"; 0052 m_jsonDir = baseDir + QDir::separator() + containingDir + QDir::separator(); 0053 0054 // needed in order to have the signals triggered by SignallingUndoCommand, see LabPlot.cpp 0055 //TODO: redesign/remove this 0056 qRegisterMetaType<const AbstractAspect*>("const AbstractAspect*"); 0057 qRegisterMetaType<const AbstractColumn*>("const AbstractColumn*"); 0058 0059 removeFiles(); 0060 copyFiles(); 0061 } 0062 0063 void DatasetsUnitTest::copyFiles() { 0064 const QString baseDir = QStandardPaths::standardLocations(QStandardPaths::AppDataLocation).first(); 0065 0066 if(!QDir(baseDir).exists()) 0067 QDir().mkdir(baseDir); 0068 0069 if(!QDir(m_jsonDir).exists()) 0070 QDir().mkdir(m_jsonDir); 0071 0072 QFile::copy(m_dataDir + "Test.json", m_jsonDir + "Test.json"); 0073 QFile::copy(m_dataDir + "DatasetCollections.json", m_jsonDir + "DatasetCollections.json"); 0074 } 0075 0076 //############################################################################## 0077 //##################### Test processing metadata files ####################### 0078 //############################################################################## 0079 0080 void DatasetsUnitTest::removeFiles() { 0081 const QString baseDir = QStandardPaths::standardLocations(QStandardPaths::AppDataLocation).first(); 0082 const QString containingDir = "labplot_data"; 0083 const QString jsonDir = baseDir + QDir::separator() + containingDir + QDir::separator(); 0084 0085 QDir deleteDir(jsonDir); 0086 deleteDir.setNameFilters(QStringList() << "*.*"); 0087 deleteDir.setFilter(QDir::Files); 0088 0089 for(QString dirFile : deleteDir.entryList()) { 0090 deleteDir.remove(dirFile); 0091 } 0092 } 0093 0094 void DatasetsUnitTest::testCategories() { 0095 copyFiles(); 0096 ImportDatasetWidget* importWidget = new ImportDatasetWidget(nullptr); 0097 DatasetModel* model = new DatasetModel(importWidget->getDatasetsMap()); 0098 0099 QCOMPARE(model->categories("Test").size(), 3); 0100 QCOMPARE(model->categories("Test").contains("Test_Cat"), true); 0101 QCOMPARE(model->categories("Test").contains("Test_Cat_2"), true); 0102 QCOMPARE(model->categories("Test").contains("Test_Cat_3"), true); 0103 0104 delete importWidget; 0105 delete model; 0106 } 0107 0108 void DatasetsUnitTest::testSubcategories() { 0109 ImportDatasetWidget* importWidget = new ImportDatasetWidget(nullptr); 0110 DatasetModel* model = new DatasetModel(importWidget->getDatasetsMap()); 0111 0112 QCOMPARE(model->subcategories("Test", "Test_Cat").size(), 4); 0113 QCOMPARE(model->subcategories("Test", "Test_Cat").contains("Test_Subcat"), true); 0114 QCOMPARE(model->subcategories("Test", "Test_Cat").contains("Test_Subcat2"), true); 0115 QCOMPARE(model->subcategories("Test", "Test_Cat").contains("Test_Subcat3"), true); 0116 QCOMPARE(model->subcategories("Test", "Test_Cat").contains("Test_Subcat4"), true); 0117 0118 delete importWidget; 0119 delete model; 0120 } 0121 0122 void DatasetsUnitTest::testDatasets() { 0123 ImportDatasetWidget* importWidget = new ImportDatasetWidget(nullptr); 0124 DatasetModel* model = new DatasetModel(importWidget->getDatasetsMap()); 0125 0126 QCOMPARE(model->datasets("Test", "Test_Cat", "Test_Subcat").size(), 1); 0127 QCOMPARE(model->datasets("Test", "Test_Cat", "Test_Subcat").contains("test1"), true); 0128 QCOMPARE(model->allDatasetsList().toStringList().size(), 6); 0129 0130 delete importWidget; 0131 delete model; 0132 } 0133 0134 //############################################################################## 0135 //################### Test processing and downloading dataset ################ 0136 //############################################################################## 0137 0138 void DatasetsUnitTest::testProcessDataset() { 0139 ImportDatasetWidget* importWidget = new ImportDatasetWidget(nullptr); 0140 0141 Spreadsheet* spreadsheet = new Spreadsheet("test"); 0142 DatasetHandler* datasetHandler = new DatasetHandler(spreadsheet); 0143 importWidget->setCollection("Test"); 0144 importWidget->setCategory("Test_Cat"); 0145 importWidget->setSubcategory("Test_Subcat"); 0146 importWidget->setDataset("test1"); 0147 importWidget->loadDatasetToProcess(datasetHandler); 0148 0149 QTimer timer; 0150 timer.setSingleShot(true); 0151 QEventLoop loop; 0152 connect(datasetHandler, &DatasetHandler::downloadCompleted, &loop, &QEventLoop::quit); 0153 connect(&timer, &QTimer::timeout, &loop, &QEventLoop::quit); 0154 timer.start(1500); 0155 loop.exec(); 0156 0157 bool datasetFound = false; 0158 0159 if(timer.isActive()){ 0160 timer.stop(); 0161 datasetFound = true; 0162 } 0163 qDebug() << datasetFound; 0164 0165 QCOMPARE(datasetFound, true); 0166 QCOMPARE(spreadsheet->rowCount(), 60); 0167 QCOMPARE(spreadsheet->columnCount(), 4); 0168 0169 Column* firstColumn = spreadsheet->column(0); 0170 Column* secondColumn = spreadsheet->column(1); 0171 Column* thirdColumn = spreadsheet->column(2); 0172 Column* fourthColumn = spreadsheet->column(3); 0173 0174 QCOMPARE(firstColumn->valueAt(0), 1); 0175 QCOMPARE(secondColumn->textAt(3),"4/86"); 0176 QCOMPARE(thirdColumn->valueAt(0), -0.061134); 0177 QCOMPARE(fourthColumn->valueAt(0), 0.03016); 0178 0179 delete importWidget; 0180 delete spreadsheet; 0181 delete datasetHandler; 0182 } 0183 0184 //############################################################################## 0185 //########### Test adding new datasets to the existing collection ############ 0186 //############################################################################## 0187 0188 void DatasetsUnitTest::testNewCollection() { 0189 removeFiles(); 0190 copyFiles(); 0191 0192 ImportDatasetWidget* importWidget = new ImportDatasetWidget(nullptr); 0193 DatasetMetadataManagerDialog* datasetDialog = new DatasetMetadataManagerDialog(nullptr, importWidget->getDatasetsMap()); 0194 0195 delete importWidget; 0196 0197 datasetDialog->setCollection("Test2"); 0198 datasetDialog->setCategory("Test_Cat"); 0199 datasetDialog->setSubcategory("Test_Subcat"); 0200 datasetDialog->setShortName("test_new"); 0201 datasetDialog->setFullName("New test dataset"); 0202 datasetDialog->setDescription("This is a new test dataset"); 0203 datasetDialog->setURL("www.testdataset.com"); 0204 datasetDialog->updateDocument(m_jsonDir); 0205 0206 importWidget = new ImportDatasetWidget(nullptr); 0207 DatasetModel* model = new DatasetModel(importWidget->getDatasetsMap()); 0208 0209 QCOMPARE(model->collections().size(), 2); 0210 QCOMPARE(model->allDatasetsList().toStringList().size(), 7); 0211 } 0212 0213 void DatasetsUnitTest::testNewCategory() { 0214 removeFiles(); 0215 copyFiles(); 0216 0217 ImportDatasetWidget* importWidget = new ImportDatasetWidget(nullptr); 0218 DatasetMetadataManagerDialog* datasetDialog = new DatasetMetadataManagerDialog(nullptr, importWidget->getDatasetsMap()); 0219 0220 delete importWidget; 0221 0222 datasetDialog->setCollection("Test"); 0223 datasetDialog->setCategory("Test_Cat_4"); 0224 datasetDialog->setSubcategory("Test_Subcat"); 0225 datasetDialog->setShortName("test_new"); 0226 datasetDialog->setFullName("New test dataset"); 0227 datasetDialog->setDescription("This is a new test dataset"); 0228 datasetDialog->setURL("www.testdataset.com"); 0229 datasetDialog->updateDocument(m_jsonDir); 0230 0231 importWidget = new ImportDatasetWidget(nullptr); 0232 DatasetModel* model = new DatasetModel(importWidget->getDatasetsMap()); 0233 0234 QCOMPARE(model->categories("Test").size(), 4); 0235 QCOMPARE(model->allDatasetsList().toStringList().size(), 7); 0236 } 0237 0238 void DatasetsUnitTest::testNewSubcategory() { 0239 removeFiles(); 0240 copyFiles(); 0241 0242 ImportDatasetWidget* importWidget = new ImportDatasetWidget(nullptr); 0243 DatasetMetadataManagerDialog* datasetDialog = new DatasetMetadataManagerDialog(nullptr, importWidget->getDatasetsMap()); 0244 0245 delete importWidget; 0246 0247 datasetDialog->setCollection("Test"); 0248 datasetDialog->setCategory("Test_Cat"); 0249 datasetDialog->setSubcategory("Test_Subcat5"); 0250 datasetDialog->setShortName("test_new"); 0251 datasetDialog->setFullName("New test dataset"); 0252 datasetDialog->setDescription("This is a new test dataset"); 0253 datasetDialog->setURL("www.testdataset.com"); 0254 datasetDialog->updateDocument(m_jsonDir); 0255 0256 importWidget = new ImportDatasetWidget(nullptr); 0257 DatasetModel* model = new DatasetModel(importWidget->getDatasetsMap()); 0258 0259 QCOMPARE(model->subcategories("Test", "Test_Cat").size(), 5); 0260 QCOMPARE(model->allDatasetsList().toStringList().size(), 7); 0261 } 0262 0263 void DatasetsUnitTest::testNewDataset() { 0264 removeFiles(); 0265 copyFiles(); 0266 0267 ImportDatasetWidget* importWidget = new ImportDatasetWidget(nullptr); 0268 DatasetMetadataManagerDialog* datasetDialog = new DatasetMetadataManagerDialog(nullptr, importWidget->getDatasetsMap()); 0269 0270 delete importWidget; 0271 0272 datasetDialog->setCollection("Test"); 0273 datasetDialog->setCategory("Test_Cat"); 0274 datasetDialog->setSubcategory("Test_Subcat"); 0275 datasetDialog->setShortName("test_new"); 0276 datasetDialog->setFullName("New test dataset"); 0277 datasetDialog->setDescription("This is a new test dataset"); 0278 datasetDialog->setURL("www.testdataset.com"); 0279 datasetDialog->updateDocument(m_jsonDir); 0280 0281 importWidget = new ImportDatasetWidget(nullptr); 0282 DatasetModel* model = new DatasetModel(importWidget->getDatasetsMap()); 0283 0284 QCOMPARE(model->datasets("Test", "Test_Cat", "Test_Subcat").size(), 2); 0285 QCOMPARE(model->allDatasetsList().toStringList().size(), 7); 0286 } 0287 0288 QTEST_MAIN(DatasetsUnitTest) 0289 0290