File indexing completed on 2024-05-12 05:40:46
0001 /*************************************************************************** 0002 * Copyright (C) 2015 by Renaud Guezennec * 0003 * Copyright (C) 2015 by Benoit Lagarde * 0004 * http://renaudguezennec.homelinux.org/accueil,3.html * 0005 * * 0006 * Rolisteam is free software; you can redistribute it and/or modify * 0007 * it under the terms of the GNU General Public License as published by * 0008 * the Free Software Foundation; either version 2 of the License, or * 0009 * (at your option) any later version. * 0010 * * 0011 * This program is distributed in the hope that it will be useful, * 0012 * but WITHOUT ANY WARRANTY; without even the implied warranty of * 0013 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * 0014 * GNU General Public License for more details. * 0015 * * 0016 * You should have received a copy of the GNU General Public License * 0017 * along with this program; if not, write to the * 0018 * Free Software Foundation, Inc., * 0019 * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * 0020 ***************************************************************************/ 0021 #include <QtTest/QtTest> 0022 0023 #include <QDir> 0024 #include <QFileInfo> 0025 #include <QTemporaryDir> 0026 #include <QTreeView> 0027 #include <memory> 0028 0029 #include "data/campaign.h" 0030 #include "data/campaigneditor.h" 0031 #include "data/campaignmanager.h" 0032 #include "data/media.h" 0033 #include "diceparser/dicealias.h" 0034 #include "diceparser_qobject/diceroller.h" 0035 #include "model/characterstatemodel.h" 0036 #include "model/dicealiasmodel.h" 0037 #include "model/mediamodel.h" 0038 #include "model/nonplayablecharactermodel.h" 0039 #include "utils/iohelper.h" 0040 #include "worker/fileserializer.h" 0041 #include <helper.h> 0042 0043 #include <QCryptographicHash> 0044 #include <QQuickStyle> 0045 0046 constexpr int delay{2000}; 0047 0048 QFileInfoList fileAndDirRecusive(const QString& path) 0049 { 0050 QFileInfoList list; 0051 QDir dir(path); 0052 0053 auto importedFile= dir.entryInfoList(QDir::NoDotAndDotDot | QDir::Dirs | QDir::Files); 0054 list << importedFile; 0055 for(auto const& res : qAsConst(importedFile)) 0056 { 0057 if(res.isDir()) 0058 { 0059 qDebug() << res.absoluteFilePath(); 0060 QDir subdir(res.absoluteFilePath()); 0061 list << subdir.entryInfoList(QDir::NoDotAndDotDot | QDir::Dirs | QDir::Files); 0062 } 0063 } 0064 0065 return list; 0066 } 0067 0068 class CampaignTest : public QObject 0069 { 0070 Q_OBJECT 0071 0072 public: 0073 CampaignTest(); 0074 0075 void create(const QString& path); 0076 0077 private slots: 0078 void initTestCase(); 0079 void init(); 0080 void cleanup(); 0081 0082 void createCampaign(); 0083 void createCampaign_data(); 0084 0085 void campaignModel(); 0086 void campaignModel_data(); 0087 0088 void addAndRemoveMedia(); 0089 void addAndRemoveMedia_data(); 0090 0091 void copyCampaign(); 0092 void copyCampaign_data(); 0093 0094 void importFromAnotherCampaign(); 0095 void importFromAnotherCampaign_data(); 0096 0097 void editorCampaign(); 0098 void campaignTest(); 0099 void campaignManagerTest(); 0100 0101 private: 0102 std::unique_ptr<campaign::CampaignManager> m_manager; 0103 std::unique_ptr<DiceRoller> m_diceparser; 0104 }; 0105 0106 using TupleMedia= QList<std::tuple<QString, QString, QByteArray>>; 0107 using TupleState= QList<std::tuple<QString, QString, QColor>>; 0108 using TupleDice= QList<std::tuple<QString, QString, bool>>; 0109 using TupleNPC= QList<std::tuple<QString, QString, QString, QColor>>; 0110 Q_DECLARE_METATYPE(TupleMedia) 0111 Q_DECLARE_METATYPE(TupleState) 0112 Q_DECLARE_METATYPE(TupleDice) 0113 Q_DECLARE_METATYPE(TupleNPC) 0114 0115 CampaignTest::CampaignTest() {} 0116 0117 void CampaignTest::initTestCase() 0118 { 0119 QQuickStyle::setStyle(":/rolistyle"); 0120 QQuickStyle::setFallbackStyle("Default"); 0121 } 0122 0123 void CampaignTest::init() 0124 { 0125 m_diceparser.reset(new DiceRoller); 0126 m_manager.reset(new campaign::CampaignManager(m_diceparser.get())); 0127 } 0128 0129 void CampaignTest::cleanup() {} 0130 0131 void CampaignTest::createCampaign() 0132 { 0133 QFETCH(QString, subdir); 0134 QTemporaryDir dir; 0135 if(dir.isValid()) 0136 { 0137 auto path= dir.path(); 0138 path+= subdir; 0139 auto b= m_manager->createCampaign(QUrl::fromLocalFile(path)); 0140 QVERIFY(b); 0141 QVERIFY(QFileInfo::exists(path + "/" + campaign::TRASH_FOLDER)); 0142 QVERIFY(QFileInfo::exists(path + "/" + campaign::MEDIA_ROOT)); 0143 QVERIFY(QFileInfo::exists(path + "/" + campaign::STATE_ROOT)); 0144 } 0145 } 0146 0147 void CampaignTest::create(const QString& path) 0148 { 0149 m_manager->createCampaign(QUrl::fromLocalFile(path)); 0150 QSignalSpy spy(m_manager.get(), &campaign::CampaignManager::campaignLoaded); 0151 0152 QVERIFY(spy.wait(delay)); 0153 } 0154 0155 void CampaignTest::createCampaign_data() 0156 { 0157 QTest::addColumn<QString>("subdir"); 0158 0159 QTest::addRow("cmd1") << QString{}; 0160 QTest::addRow("cmd2") << QString{"/campaign"}; 0161 } 0162 0163 void CampaignTest::campaignModel() 0164 { 0165 QFETCH(QStringList, paths); 0166 QFETCH(QStringList, ids); 0167 QFETCH(QStringList, names); 0168 QFETCH(int, expected); 0169 0170 auto campaign= m_manager->campaign(); 0171 campaign->setRootDirectory(QDir::tempPath()); 0172 auto model= new campaign::MediaModel(campaign); 0173 0174 int i= 0; 0175 for(const auto& path : paths) 0176 { 0177 auto id= ids[i]; 0178 auto name= names[i]; 0179 std::unique_ptr<campaign::Media> media( 0180 new campaign::Media(id, name, path, campaign::FileSerializer::typeFromExtention(path))); 0181 campaign->addMedia(std::move(media)); 0182 ++i; 0183 } 0184 0185 // auto model2= new campaign::MediaModel(campaign); 0186 0187 QCOMPARE(model->rowCount(), expected); 0188 // QCOMPARE(model2->rowCount(), expected); 0189 0190 QTreeView* view= new QTreeView(); 0191 view->setModel(model); 0192 view->setVisible(true); 0193 0194 QTest::qWait(2000); 0195 delete view; 0196 delete model; 0197 } 0198 0199 void CampaignTest::campaignModel_data() 0200 { 0201 QTest::addColumn<QStringList>("paths"); 0202 QTest::addColumn<QStringList>("ids"); 0203 QTest::addColumn<QStringList>("names"); 0204 QTest::addColumn<int>("expected"); 0205 0206 auto campaign= m_manager->campaign(); 0207 campaign->setRootDirectory(QDir::tempPath()); 0208 0209 auto root= campaign->directory(campaign::Campaign::Place::MEDIA_ROOT); 0210 0211 QTest::addRow("cmd1") << QStringList{} << QStringList{} << QStringList{} << 0; 0212 QTest::addRow("cmd2") << QStringList{root + "/image.jpg"} << QStringList{"image"} << QStringList{"image"} << 1; 0213 QTest::addRow("cmd3") << QStringList{root + "/image.jpg", root + "/image.jpg"} << QStringList{"image", "image"} 0214 << QStringList{"image", "image"} << 1; 0215 0216 QTest::addRow("cmd4") << QStringList{root + "/image.jpg", root + "/tavern.vmap"} << QStringList{"image", "tavern"} 0217 << QStringList{"image", "tavern"} << 2; 0218 0219 QTest::addRow("cmd5") << QStringList{root + "/image.jpg", root + "/chapter1/tavern.vmap"} 0220 << QStringList{"image", "tavern"} << QStringList{"image", "tavern"} << 2; 0221 0222 QTest::addRow("cmd6") << QStringList{root + "/chapter1/image.jpg", root + "/chapter1/tavern.vmap"} 0223 << QStringList{"image", "tavern"} << QStringList{"image", "tavern"} << 1; 0224 } 0225 0226 void CampaignTest::addAndRemoveMedia() 0227 { 0228 QFETCH(QStringList, paths); 0229 QFETCH(QStringList, ids); 0230 QFETCH(QStringList, names); 0231 QFETCH(int, expected); 0232 0233 auto campaign= m_manager->campaign(); 0234 campaign->setRootDirectory(QDir::tempPath()); 0235 auto model= new campaign::MediaModel(campaign); 0236 QTreeView* view= new QTreeView(); 0237 view->setModel(model); 0238 view->setVisible(true); 0239 QCOMPARE(model->rowCount(), 0); 0240 0241 int i= 0; 0242 for(const auto& path : paths) 0243 { 0244 auto id= ids[i]; 0245 auto name= names[i]; 0246 std::unique_ptr<campaign::Media> media( 0247 new campaign::Media(id, name, path, campaign::FileSerializer::typeFromExtention(path))); 0248 campaign->addMedia(std::move(media)); 0249 campaign->removeMedia(id); 0250 ++i; 0251 } 0252 0253 QCOMPARE(model->rowCount(), expected); 0254 0255 QTest::qWait(2000); 0256 delete view; 0257 delete model; 0258 } 0259 0260 void CampaignTest::addAndRemoveMedia_data() 0261 { 0262 QTest::addColumn<QStringList>("paths"); 0263 QTest::addColumn<QStringList>("ids"); 0264 QTest::addColumn<QStringList>("names"); 0265 QTest::addColumn<int>("expected"); 0266 0267 auto campaign= m_manager->campaign(); 0268 campaign->setRootDirectory(QDir::tempPath()); 0269 0270 auto root= campaign->directory(campaign::Campaign::Place::MEDIA_ROOT); 0271 0272 QTest::addRow("cmd1") << QStringList{} << QStringList{} << QStringList{} << 0; 0273 QTest::addRow("cmd2") << QStringList{root + "/image.jpg"} << QStringList{"image"} << QStringList{"image"} << 0; 0274 QTest::addRow("cmd3") << QStringList{root + "/image.jpg", root + "/image.jpg"} << QStringList{"image", "image"} 0275 << QStringList{"image", "image"} << 0; 0276 0277 QTest::addRow("cmd4") << QStringList{root + "/image.jpg", root + "/tavern.vmap"} << QStringList{"image", "tavern"} 0278 << QStringList{"image", "tavern"} << 0; 0279 0280 QTest::addRow("cmd5") << QStringList{root + "/image.jpg", root + "/chapter1/tavern.vmap"} 0281 << QStringList{"image", "tavern"} << QStringList{"image", "tavern"} << 1; 0282 0283 QTest::addRow("cmd6") << QStringList{root + "/chapter1/image.jpg", root + "/chapter1/tavern.vmap"} 0284 << QStringList{"image", "tavern"} << QStringList{"image", "tavern"} << 1; 0285 } 0286 0287 void CampaignTest::copyCampaign() 0288 { 0289 QFETCH(TupleMedia, medias); 0290 QFETCH(TupleDice, dices); 0291 QFETCH(TupleState, states); 0292 QFETCH(TupleNPC, npcs); 0293 0294 QTemporaryDir root1; 0295 if(root1.isValid()) 0296 { 0297 auto path= root1.path(); 0298 create(path); 0299 } 0300 0301 auto campaign= m_manager -> campaign(); 0302 auto edit= m_manager -> editor(); 0303 auto stateModel= campaign -> stateModel(); 0304 auto diceModel= campaign -> diceAliases(); 0305 auto npcModel= campaign -> npcModel(); 0306 0307 // add states 0308 for(auto const& t : states) 0309 { 0310 CharacterState state; 0311 state.setId(std::get<0>(t)); 0312 state.setLabel(std::get<1>(t)); 0313 state.setColor(std::get<2>(t)); 0314 stateModel->appendState(std::move(state)); 0315 } 0316 // add dices 0317 for(auto const& a : dices) 0318 { 0319 DiceAlias alias(std::get<0>(a), std::get<1>(a), {}, std::get<2>(a)); 0320 diceModel->appendAlias(std::move(alias)); 0321 } 0322 // add NPC 0323 for(auto const& n : npcs) 0324 { 0325 auto npc= new campaign::NonPlayableCharacter(); 0326 npc->setUuid(std::get<0>(n)); 0327 npc->setName(std::get<1>(n)); 0328 npc->setDescription(std::get<2>(n)); 0329 npc->setColor(std::get<3>(n)); 0330 npcModel->addCharacter(npc); 0331 } 0332 // add medias 0333 for(auto const& m : medias) 0334 { 0335 edit->addMedia(std::get<0>(m), std::get<1>(m), std::get<2>(m)); 0336 } 0337 m_manager->saveCampaign(); 0338 0339 // QTest::qWait(2000); 0340 0341 QTemporaryDir dir; 0342 if(dir.isValid()) 0343 { 0344 auto path= dir.path(); 0345 m_manager->copyCampaign(QUrl::fromUserInput(path)); 0346 QTest::qWait(2000); 0347 0348 QDir copyDir(path); 0349 QDir sourceDir(campaign->rootDirectory()); 0350 0351 auto copyListFile= copyDir.entryInfoList(QDir::NoDotAndDotDot | QDir::Dirs | QDir::Files); 0352 auto sourceListFile= sourceDir.entryInfoList(QDir::NoDotAndDotDot | QDir::Dirs | QDir::Files); 0353 0354 if(copyListFile.size() != sourceListFile.size()) 0355 qDebug() << copyListFile << sourceListFile; 0356 0357 QCOMPARE(copyListFile.size(), sourceListFile.size()); 0358 0359 for(int i= 0; i < copyListFile.size(); ++i) 0360 { 0361 auto copy= copyListFile[i]; 0362 auto source= sourceListFile[i]; 0363 QVERIFY2(copy.size() == source.size(), copy.absoluteFilePath().toStdString().c_str()); 0364 0365 QFile copyFile(copy.absoluteFilePath()); 0366 QFile sourceFile(source.absoluteFilePath()); 0367 if(copyFile.open(QFile::ReadOnly) && sourceFile.open(QFile::ReadOnly)) 0368 { 0369 QCOMPARE(QCryptographicHash::hash(copyFile.readAll(), QCryptographicHash::Md5), 0370 QCryptographicHash::hash(sourceFile.readAll(), QCryptographicHash::Md5)); 0371 } 0372 } 0373 } 0374 } 0375 0376 void CampaignTest::copyCampaign_data() 0377 { 0378 0379 QTest::addColumn<TupleMedia>("medias"); 0380 QTest::addColumn<TupleDice>("dices"); 0381 QTest::addColumn<TupleState>("states"); 0382 QTest::addColumn<TupleNPC>("npcs"); 0383 0384 QTest::addRow("cmd1") << TupleMedia{} << TupleDice{} << TupleState{} << TupleNPC{}; 0385 QTest::addRow("cmd2") << TupleMedia{{"girafe1", "girafe1", utils::IOHelper::loadFile(":/img/girafe.jpg")}} << TupleDice{} 0386 << TupleState{} << TupleNPC{}; 0387 0388 QTest::addRow("cmd3") << TupleMedia{{"girafe1", "girafe1", utils::IOHelper::loadFile(":/img/girafe.jpg")}} 0389 << TupleDice{{"pattern", "dicecommand", false}} << TupleState{} << TupleNPC{}; 0390 0391 QTest::addRow("cmd4") << TupleMedia{{"girafe1", "girafe1", utils::IOHelper::loadFile(":/img/girafe.jpg")}} 0392 << TupleDice{{"pattern", "dicecommand", false}} 0393 << TupleState{{"state1", "state1", QColor(Qt::blue)}} << TupleNPC{}; 0394 0395 QTest::addRow("cmd5") << TupleMedia{{"girafe1", "girafe1", utils::IOHelper::loadFile(":/img/girafe.jpg")}} 0396 << TupleDice{{"pattern", "dicecommand", false}} 0397 << TupleState{{"state1", "state1", QColor(Qt::blue)}} 0398 << TupleNPC{{"character1", "character1", "character1", QColor(Qt::blue)}}; 0399 } 0400 0401 0402 void CampaignTest::importFromAnotherCampaign() 0403 { 0404 QFETCH(TupleMedia, medias); 0405 QFETCH(TupleDice, dices); 0406 QFETCH(TupleState, states); 0407 QFETCH(TupleNPC, npcs); 0408 QFETCH(QVector<Core::CampaignDataCategory>, categories); 0409 QFETCH(bool, expectedEguality); 0410 0411 QTemporaryDir root1; 0412 if(root1.isValid()) 0413 { 0414 auto path= root1.path(); 0415 create(path); 0416 } 0417 0418 auto campaign= m_manager->campaign(); 0419 auto edit= m_manager->editor(); 0420 auto stateModel= campaign->stateModel(); 0421 auto diceModel= campaign->diceAliases(); 0422 auto npcModel= campaign->npcModel(); 0423 0424 auto oldCampaignPath= campaign->rootDirectory(); 0425 0426 // add states 0427 for(auto const& t : states) 0428 { 0429 CharacterState state; 0430 state.setId(std::get<0>(t)); 0431 state.setLabel(std::get<1>(t)); 0432 state.setColor(std::get<2>(t)); 0433 stateModel->appendState(std::move(state)); 0434 } 0435 // add dices 0436 for(auto const& a : dices) 0437 { 0438 DiceAlias alias(std::get<0>(a), std::get<1>(a), {}, std::get<2>(a)); 0439 diceModel->appendAlias(std::move(alias)); 0440 } 0441 // add NPC 0442 for(auto const& n : npcs) 0443 { 0444 auto npc= new campaign::NonPlayableCharacter(); 0445 npc->setUuid(std::get<0>(n)); 0446 npc->setName(std::get<1>(n)); 0447 npc->setDescription(std::get<2>(n)); 0448 npc->setColor(std::get<3>(n)); 0449 npcModel->addCharacter(npc); 0450 } 0451 // add medias 0452 for(auto const& m : medias) 0453 { 0454 edit->addMedia(std::get<0>(m), QString("%1/media/%2").arg(oldCampaignPath, std::get<1>(m)), std::get<2>(m)); 0455 } 0456 m_manager->saveCampaign(); 0457 0458 QTest::qWait(delay); 0459 0460 QTemporaryDir dir; 0461 if(dir.isValid()) 0462 { 0463 m_manager.reset(new campaign::CampaignManager(m_diceparser.get())); 0464 auto path= dir.path(); 0465 create(path); 0466 m_manager->importDataFrom(oldCampaignPath, categories); 0467 // m_manager->reload(); 0468 QTest::qWait(delay); 0469 m_manager->saveCampaign(); 0470 QTest::qWait(delay); 0471 0472 auto importedFile= fileAndDirRecusive(path); 0473 auto sourceListFile= fileAndDirRecusive(root1.path()); 0474 0475 // qDebug() << importedFile << sourceListFile; 0476 0477 if(expectedEguality) 0478 QCOMPARE(importedFile.size(), sourceListFile.size()); 0479 0480 if(expectedEguality) 0481 { 0482 for(int i= 0; i < importedFile.size(); ++i) 0483 { 0484 auto copy= importedFile[i]; 0485 auto source= sourceListFile[i]; 0486 if(copy.absoluteFilePath().endsWith(campaign::MODEL_FILE)) 0487 continue; 0488 0489 if(copy.size() != source.size()) 0490 qDebug() << "size issue" << copy.size() << source.size(); 0491 QVERIFY2(copy.size() == source.size(), copy.absoluteFilePath().toStdString().c_str()); 0492 0493 QFile copyFile(copy.absoluteFilePath()); 0494 QFile sourceFile(source.absoluteFilePath()); 0495 if(copyFile.open(QFile::ReadOnly) && sourceFile.open(QFile::ReadOnly)) 0496 { 0497 QCOMPARE(QCryptographicHash::hash(copyFile.readAll(), QCryptographicHash::Md5), 0498 QCryptographicHash::hash(sourceFile.readAll(), QCryptographicHash::Md5)); 0499 } 0500 } 0501 } 0502 else 0503 { 0504 if(importedFile.size() != sourceListFile.size()) 0505 return; 0506 int i= 0; 0507 QVERIFY2(!std::all_of(std::begin(importedFile), std::end(importedFile), 0508 [sourceListFile, &i](const QFileInfo& copy) 0509 { 0510 auto source= sourceListFile[i]; 0511 0512 ++i; 0513 return copy.size() == source.size(); 0514 }), 0515 "All files have the same size"); 0516 } 0517 } 0518 } 0519 void CampaignTest::importFromAnotherCampaign_data() 0520 { 0521 QTest::addColumn<TupleMedia>("medias"); 0522 QTest::addColumn<TupleDice>("dices"); 0523 QTest::addColumn<TupleState>("states"); 0524 QTest::addColumn<TupleNPC>("npcs"); 0525 QTest::addColumn<QVector<Core::CampaignDataCategory>>("categories"); 0526 QTest::addColumn<bool>("expectedEguality"); 0527 0528 QTest::addRow("cmd1") << TupleMedia{} << TupleDice{} << TupleState{} << TupleNPC{} 0529 << QVector<Core::CampaignDataCategory>{} << true; 0530 0531 QTest::addRow("cmd2") << TupleMedia{{"girafe1", "girafe1.jpg", utils::IOHelper::loadFile(":/img/girafe.jpg")}} 0532 << TupleDice{} << TupleState{} << TupleNPC{} 0533 << QVector<Core::CampaignDataCategory>{Core::CampaignDataCategory::Images} << true; 0534 0535 QTest::addRow("cmd3") << TupleMedia{{"girafe1", "girafe1.jpg", utils::IOHelper::loadFile(":/img/girafe.jpg")}} 0536 << TupleDice{} << TupleState{} << TupleNPC{} 0537 << QVector<Core::CampaignDataCategory>{Core::CampaignDataCategory::PDFDoc} << false; 0538 0539 QTest::addRow("cmd4") << TupleMedia{{"girafe1", "girafe1.jpg", utils::IOHelper::loadFile(":/img/girafe.jpg")}} 0540 << TupleDice{{"pattern", "dicecommand", false}} << TupleState{} << TupleNPC{} 0541 << QVector<Core::CampaignDataCategory>{Core::CampaignDataCategory::Images, 0542 Core::CampaignDataCategory::DiceAlias} 0543 << true; 0544 0545 QTest::addRow("cmd5") << TupleMedia{{"girafe1", "girafe1.jpg", utils::IOHelper::loadFile(":/img/girafe.jpg")}} 0546 << TupleDice{{"pattern", "dicecommand", false}} << TupleState{} << TupleNPC{} 0547 << QVector<Core::CampaignDataCategory>{Core::CampaignDataCategory::Images} << false; 0548 0549 QTest::addRow("cmd6") << TupleMedia{{"girafe1", "girafe1.jpg", utils::IOHelper::loadFile(":/img/girafe.jpg")}} 0550 << TupleDice{{"pattern", "dicecommand", false}} 0551 << TupleState{{"state1", "state1", QColor(Qt::blue)}} << TupleNPC{} 0552 << QVector<Core::CampaignDataCategory>{Core::CampaignDataCategory::Images, 0553 Core::CampaignDataCategory::CharacterStates, 0554 Core::CampaignDataCategory::DiceAlias} 0555 << true; 0556 0557 QTest::addRow("cmd7") << TupleMedia{{"girafe1", "girafe1.jpg", utils::IOHelper::loadFile(":/img/girafe.jpg")}} 0558 << TupleDice{{"pattern", "dicecommand", false}} 0559 << TupleState{{"state1", "state1", QColor(Qt::blue)}} << TupleNPC{} 0560 << QVector<Core::CampaignDataCategory>{Core::CampaignDataCategory::Images, 0561 Core::CampaignDataCategory::DiceAlias} 0562 << false; 0563 0564 QTest::addRow("cmd8") << TupleMedia{{"girafe1", "girafe1.jpg", utils::IOHelper::loadFile(":/img/girafe.jpg")}} 0565 << TupleDice{{"pattern", "dicecommand", false}} 0566 << TupleState{{"state1", "state1", QColor(Qt::blue)}} 0567 << TupleNPC{{"character1", "character1", "character1", QColor(Qt::blue)}} 0568 << QVector<Core::CampaignDataCategory>{Core::CampaignDataCategory::Images, 0569 Core::CampaignDataCategory::CharacterStates, 0570 Core::CampaignDataCategory::DiceAlias, 0571 Core::CampaignDataCategory::AntagonistList} 0572 << true; 0573 0574 QTest::addRow("cmd9") << TupleMedia{{"girafe1", "girafe1.jpg", utils::IOHelper::loadFile(":/img/girafe.jpg")}} 0575 << TupleDice{{"pattern", "dicecommand", false}} 0576 << TupleState{{"state1", "state1", QColor(Qt::blue)}} 0577 << TupleNPC{{"character1", "character1", "character1", QColor(Qt::blue)}} 0578 << QVector<Core::CampaignDataCategory>{Core::CampaignDataCategory::Images, 0579 Core::CampaignDataCategory::CharacterStates, 0580 Core::CampaignDataCategory::DiceAlias} 0581 << false; 0582 0583 /* { 0584 Core::CampaignDataCategory::AudioPlayer1, Core::CampaignDataCategory::AudioPlayer2, 0585 Core::CampaignDataCategory::AudioPlayer3, Core::CampaignDataCategory::Images, 0586 Core::CampaignDataCategory::Maps, Core::CampaignDataCategory::MindMaps, Core::CampaignDataCategory::Notes, 0587 Core::CampaignDataCategory::WebLink, Core::CampaignDataCategory::PDFDoc, 0588 Core::CampaignDataCategory::DiceAlias, Core::CampaignDataCategory::CharacterStates, 0589 Core::CampaignDataCategory::Themes, Core::CampaignDataCategory::CharacterSheets, 0590 Core::CampaignDataCategory::AntagonistList 0591 }*/ 0592 } 0593 0594 void CampaignTest::editorCampaign() 0595 { 0596 auto editor = m_manager->editor(); 0597 0598 editor->mergeAudioFile(Helper::randomString(),Helper::randomString()); 0599 0600 QVERIFY(!editor->copyTheme(Helper::randomString(),Helper::randomString())); 0601 QVERIFY(!editor->mergeJsonArrayFile(Helper::randomString(),Helper::randomString())); 0602 QVERIFY(!editor->removeFile(Helper::randomString())); 0603 QVERIFY(!editor->removeMedia(Helper::randomString())); 0604 QVERIFY(!editor->mediaFullPath(Helper::randomString()).isEmpty()); 0605 QCOMPARE(editor->currentDir(), QString()); 0606 //QVERIFY(!editor->currentDir().isEmpty()); 0607 QVERIFY(!editor->mediaFullPathWithExtension(Helper::randomString(), 0608 Helper::randomFromList<Core::ContentType>( 0609 { 0610 Core::ContentType::CHARACTERSHEET, 0611 Core::ContentType::INSTANTMESSAGING, 0612 Core::ContentType::MINDMAP, 0613 Core::ContentType::NOTES, 0614 Core::ContentType::PDF, 0615 Core::ContentType::PICTURE, 0616 Core::ContentType::SHAREDNOTE, 0617 Core::ContentType::VECTORIALMAP, 0618 Core::ContentType::WEBVIEW 0619 }) 0620 ).isEmpty()); 0621 0622 editor->saveAvatar(Helper::randomString(),{}); 0623 editor->doCommand(nullptr); 0624 0625 } 0626 0627 void CampaignTest::campaignTest() 0628 { 0629 auto camp = m_manager->campaign(); 0630 0631 QVERIFY(!camp->currentStorePath().isEmpty()); 0632 camp->renameMedia(Helper::randomString(), Helper::randomString()); 0633 camp->pathFromUuid(Helper::randomString()); 0634 0635 QList<campaign::Campaign::Place> places{campaign::Campaign::Place::DICE_MODEL, 0636 campaign::Campaign::Place::NPC_MODEL, 0637 campaign::Campaign::Place::STATE_MODEL, 0638 campaign::Campaign::Place::FIRST_AUDIO_PLAYER_FILE, 0639 campaign::Campaign::Place::SECOND_AUDIO_PLAYER_FILE, 0640 campaign::Campaign::Place::THIRD_AUDIO_PLAYER_FILE, 0641 campaign::Campaign::Place::MEDIA_ROOT, 0642 campaign::Campaign::Place::STATE_MODEL, 0643 campaign::Campaign::Place::STATE_ROOT, 0644 campaign::Campaign::Place::NPC_MODEL, 0645 campaign::Campaign::Place::NPC_ROOT, 0646 campaign::Campaign::Place::THEME_FILE, 0647 campaign::Campaign::Place::TRASH_ROOT}; 0648 0649 for(auto type : places) 0650 QVERIFY(!camp->directory(type).isEmpty()); 0651 0652 0653 camp->postError(Helper::randomString()); 0654 0655 camp->addAlias(); 0656 camp->deleteAlias(QModelIndex()); 0657 auto model = camp->diceAliases(); 0658 camp->deleteAlias(model->index(0,0,QModelIndex())); 0659 0660 camp->convertAlias(Helper::randomString()); 0661 0662 camp->addState(); 0663 camp->deleteState(QModelIndex()); 0664 0665 auto states = camp->stateModel(); 0666 camp->deleteState(states->index(0,0,QModelIndex())); 0667 0668 0669 QList<campaign::Campaign::Move> moves{campaign::Campaign::Move::UP, campaign::Campaign::Move::TOP, campaign::Campaign::Move::DOWN, campaign::Campaign::Move::BOTTOM}; 0670 0671 for(auto m : moves) 0672 camp->moveState(states->index(0,0,QModelIndex()),m); 0673 0674 0675 for(auto m : moves) 0676 camp->moveAlias(model->index(0,0,QModelIndex()),m); 0677 0678 0679 camp->addCharacter(); 0680 camp->removeCharacter(Helper::randomString()); 0681 } 0682 0683 void CampaignTest::campaignManagerTest() 0684 { 0685 m_manager->importFile(Helper::randomUrl()); 0686 auto file = Helper::randomString(); 0687 m_manager->createFileFromData(file, Helper::imageData()); 0688 0689 m_manager->removeFile(file); 0690 m_manager->reload(); 0691 0692 m_manager->openCampaign(Helper::randomUrl()); 0693 m_manager->shareModels(); 0694 0695 QList<QPair<QString, Core::CampaignAction>> actions{{Helper::randomString(),Core::CampaignAction::ForgetAction}, 0696 {Helper::randomString(),Core::CampaignAction::CreateAction}, 0697 {Helper::randomString(),Core::CampaignAction::ManageAction}, 0698 {Helper::randomString(),Core::CampaignAction::DeleteAction}}; 0699 0700 0701 0702 m_manager->performAction(actions); 0703 0704 m_manager->importDataFrom(Helper::randomString(), {Core::CampaignDataCategory::AudioPlayer1, 0705 Core::CampaignDataCategory::AudioPlayer2, 0706 Core::CampaignDataCategory::AudioPlayer3, 0707 Core::CampaignDataCategory::Images, 0708 Core::CampaignDataCategory::Maps, 0709 Core::CampaignDataCategory::MindMaps, 0710 Core::CampaignDataCategory::Notes, 0711 Core::CampaignDataCategory::WebLink, 0712 Core::CampaignDataCategory::PDFDoc, 0713 Core::CampaignDataCategory::DiceAlias, 0714 Core::CampaignDataCategory::CharacterStates, 0715 Core::CampaignDataCategory::Themes, 0716 Core::CampaignDataCategory::CharacterSheets, 0717 Core::CampaignDataCategory::AntagonistList}); 0718 0719 0720 0721 } 0722 0723 QTEST_MAIN(CampaignTest) 0724 0725 #include "tst_campaign.moc"