File indexing completed on 2024-05-12 05:40:53
0001 /*************************************************************************** 0002 * Copyright (C) 2018 by Renaud Guezennec * 0003 * http://renaudguezennec.homelinux.org/accueil,3.html * 0004 * * 0005 * Rolisteam is free software; you can redistribute it and/or modify * 0006 * it under the terms of the GNU General Public License as published by * 0007 * the Free Software Foundation; either version 2 of the License, or * 0008 * (at your option) any later version. * 0009 * * 0010 * This program is distributed in the hope that it will be useful, * 0011 * but WITHOUT ANY WARRANTY; without even the implied warranty of * 0012 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * 0013 * GNU General Public License for more details. * 0014 * * 0015 * You should have received a copy of the GNU General Public License * 0016 * along with this program; if not, write to the * 0017 * Free Software Foundation, Inc., * 0018 * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * 0019 ***************************************************************************/ 0020 #include <QtTest/QtTest> 0021 0022 #include "controller/item_controllers/imageitemcontroller.h" 0023 #include "controller/view_controller/vectorialmapcontroller.h" 0024 #include "data/campaignmanager.h" 0025 #include "data/cleveruri.h" 0026 #include <QMouseEvent> 0027 #include <controller/contentcontroller.h> 0028 #include <controller/playercontroller.h> 0029 #include <data/character.h> 0030 #include <helper.h> 0031 #include <map> 0032 #include <model/contentmodel.h> 0033 0034 #include "media/mediatype.h" 0035 0036 class ContentControllerTest : public QObject 0037 { 0038 Q_OBJECT 0039 0040 public: 0041 ContentControllerTest(); 0042 0043 private slots: 0044 void init(); 0045 void serializeTest(); 0046 void serializeTest_data(); 0047 0048 void completeSerializationTest(); 0049 void completeSerializationTest_data(); 0050 0051 void saveLoadImage(); 0052 0053 private: 0054 std::unique_ptr<ContentController> m_ctrl; 0055 std::unique_ptr<PlayerController> m_playerCtrl; 0056 QUndoStack m_stack; 0057 }; 0058 0059 Q_DECLARE_METATYPE(std::vector<Core::ContentType>) 0060 0061 ContentControllerTest::ContentControllerTest() {} 0062 0063 void ContentControllerTest::init() 0064 { 0065 m_playerCtrl.reset(new PlayerController(nullptr)); 0066 m_ctrl.reset(new ContentController(nullptr, m_playerCtrl->model(), m_playerCtrl->characterModel(), nullptr)); 0067 connect(m_ctrl.get(), &ContentController::performCommand, this, [this](QUndoCommand* cmd) { m_stack.push(cmd); }); 0068 0069 m_ctrl->setLocalId("localid"); 0070 } 0071 0072 void ContentControllerTest::saveLoadImage() 0073 { 0074 m_ctrl.reset(new ContentController(new campaign::CampaignManager(nullptr), m_playerCtrl->model(), 0075 m_playerCtrl->characterModel(), nullptr)); 0076 m_ctrl->setLocalId("localid"); 0077 /*connect(m_ctrl.get(), &ContentController::performCommand, this, [this](QUndoCommand* cmd) { m_stack.push(cmd); }); 0078 { 0079 auto imgParams 0080 = std::map<QString, QVariant>({{Core::keys::KEY_UUID, "test_unit_vmap"}, 0081 {Core::keys::KEY_PATH, ":/img/girafe3.jpg"}, 0082 {Core::keys::KEY_RECT, QRectF(0, 0, 326, 244)}, 0083 {Core::keys::KEY_TYPE, QVariant::fromValue(Core::ContentType::VECTORIALMAP)}, 0084 {Core::keys::KEY_POSITION, QPointF(500, 200)}, 0085 {Core::keys::KEY_TOOL, Core::SelectableTool::IMAGE}}); 0086 auto mapParams= std::map<QString, QVariant>({{"name", QString("Unit Test Map")}}); 0087 0088 m_ctrl->newMedia(nullptr, mapParams); 0089 0090 auto ctrls= m_ctrl->contentModel()->controllers(); 0091 0092 QCOMPARE(ctrls.size(), 1); 0093 0094 auto ctrl= ctrls.front(); 0095 0096 auto mapCtrl= dynamic_cast<VectorialMapController*>(ctrl); 0097 0098 QVERIFY(nullptr != mapCtrl); 0099 QSignalSpy spy(mapCtrl, &VectorialMapController::visualItemControllerCreated); 0100 mapCtrl->addItemController(imgParams); 0101 0102 QCOMPARE(spy.count(), 1); 0103 auto itemCtrl= mapCtrl->itemController("test_unit_vmap"); 0104 QVERIFY(nullptr != itemCtrl); 0105 0106 auto rectCtrl= dynamic_cast<vmap::ImageController*>(itemCtrl); 0107 QCOMPARE(rectCtrl->rect(), QRectF(0, 0, 326, 244)); 0108 QCOMPARE(rectCtrl->pos(), QPointF(500, 200)); 0109 } 0110 auto path= QStringLiteral("%1/%2").arg(QDir::tempPath()).arg("scenario.sce"); 0111 0112 m_ctrl.reset(new ContentController(m_playerCtrl->model(), m_playerCtrl->characterModel(), nullptr)); 0113 m_ctrl->setLocalId("localid"); 0114 connect(m_ctrl.get(), &ContentController::performCommand, this, [this](QUndoCommand* cmd) { m_stack.push(cmd); }); 0115 m_ctrl->setSessionPath(path); 0116 m_ctrl->loadSession(); 0117 0118 { 0119 auto ctrls= m_ctrl->contentModel()->controllers(); 0120 QCOMPARE(ctrls.size(), 1); 0121 0122 auto ctrl= ctrls.front(); 0123 auto mapCtrl= dynamic_cast<VectorialMapController*>(ctrl); 0124 QVERIFY(nullptr != mapCtrl); 0125 auto itemCtrl= mapCtrl->itemController("test_unit_vmap"); 0126 auto rectCtrl= dynamic_cast<vmap::ImageController*>(itemCtrl); 0127 QCOMPARE(rectCtrl->rect(), QRectF(0, 0, 326, 244)); 0128 QCOMPARE(rectCtrl->pos(), QPointF(500, 200)); 0129 } 0130 0131 QCOMPARE(m_ctrl->contentCount(), 1);*/ 0132 } 0133 0134 void ContentControllerTest::serializeTest() 0135 { 0136 /*QFETCH(QVector<Core::ContentType>, contentType); 0137 using DataVec= QVector<std::map<QString, QVariant>>; 0138 QFETCH(DataVec, map); 0139 QFETCH(int, count); 0140 0141 QCOMPARE(contentType.size(), map.size()); 0142 0143 for(int i= 0; i < contentType.size(); ++i) 0144 { 0145 auto mapItem= map[i]; 0146 mapItem.insert({Core::keys::KEY_TYPE, QVariant::fromValue(contentType[i])}); 0147 m_ctrl->newMedia(nullptr, mapItem); 0148 } 0149 QVERIFY2(m_ctrl->contentCount() == count, "After manual insertion"); 0150 0151 auto path= QStringLiteral("%1/%2").arg(QDir::tempPath()).arg("scenario.sce"); 0152 0153 m_ctrl->setSessionPath(path); 0154 m_ctrl->saveSession(); 0155 0156 m_ctrl.reset(new ContentController(m_playerCtrl->model(), m_playerCtrl->characterModel(), nullptr)); 0157 connect(m_ctrl.get(), &ContentController::performCommand, this, [this](QUndoCommand* cmd) { m_stack.push(cmd); }); 0158 m_ctrl->setSessionPath(path); 0159 m_ctrl->loadSession(); 0160 0161 QCOMPARE(m_ctrl->contentCount(), count);*/ 0162 } 0163 0164 void ContentControllerTest::serializeTest_data() 0165 { 0166 /*QTest::addColumn<QVector<Core::ContentType>>("contentType"); 0167 QTest::addColumn<QVector<std::map<QString, QVariant>>>("map"); 0168 QTest::addColumn<int>("count"); 0169 0170 auto func= [] { 0171 static int counter= 0; 0172 return counter++; 0173 }; 0174 QTest::addRow("cmd %d", func()) << QVector<Core::ContentType>() << QVector<std::map<QString, QVariant>>() << 0; 0175 QTest::addRow("cmd %d", func()) << QVector<Core::ContentType>({Core::ContentType::PICTURE}) 0176 << QVector<std::map<QString, QVariant>>( 0177 {{{"path", ":/img/girafe3.jpg"}, {"name", "girafe"}}}) 0178 << 1; 0179 QTest::addRow("cmd %d", func()) << QVector<Core::ContentType>({Core::ContentType::CHARACTERSHEET}) 0180 << QVector<std::map<QString, QVariant>>( 0181 {{{"path", ":/charactersheet/bitume_fixed.rcs"}, {"name", "bitume"}}}) 0182 << 1; 0183 QTest::addRow("cmd %d", func()) << QVector<Core::ContentType>({Core::ContentType::PDF}) 0184 << QVector<std::map<QString, QVariant>>( 0185 {{{"path", ":/pdf/01_personnages.pdf"}, {"name", "personnages"}}}) 0186 << 1; 0187 QTest::addRow("cmd %d", func()) << QVector<Core::ContentType>({Core::ContentType::SHAREDNOTE}) 0188 << QVector<std::map<QString, QVariant>>( 0189 {{{"path", ":/sharednotes/test.rsn"}, {"name", "RSN file"}}}) 0190 << 1; 0191 QTest::addRow("cmd %d", func()) << QVector<Core::ContentType>({Core::ContentType::SHAREDNOTE}) 0192 << QVector<std::map<QString, QVariant>>( 0193 {{{"path", ":/sharednotes/scenario.md"}, {"name", "Markdown file"}}}) 0194 << 1; 0195 QTest::addRow("cmd %d", func()) << QVector<Core::ContentType>({Core::ContentType::VECTORIALMAP}) 0196 << QVector<std::map<QString, QVariant>>({{{"path", ""}, {"name", ""}}}) << 1; 0197 0198 QTest::addRow("cmd %d", func()) << QVector<Core::ContentType>({Core::ContentType::WEBVIEW}) 0199 << QVector<std::map<QString, QVariant>>( 0200 {{{"path", "https://rolisteam.org"}, {"name", "rolisteam"}}}) 0201 << 1;*/ 0202 } 0203 0204 void ContentControllerTest::completeSerializationTest() 0205 { 0206 /* QFETCH(std::vector<Core::ContentType>, list); 0207 0208 for(auto content : list) 0209 { 0210 std::map<QString, QVariant> mapItem; 0211 switch(content) 0212 { 0213 case Core::ContentType::PICTURE: 0214 mapItem.insert({{Core::keys::KEY_PATH, ":/img/girafe3.jpg"}, {Core::keys::KEY_NAME, "girafe"}}); 0215 break; 0216 case Core::ContentType::CHARACTERSHEET: 0217 mapItem.insert( 0218 {{Core::keys::KEY_PATH, ":/charactersheet/bitume_fixed.rcs"}, {Core::keys::KEY_NAME, "bitume"}}); 0219 break; 0220 case Core::ContentType::PDF: 0221 mapItem.insert({{Core::keys::KEY_PATH, ":/pdf/01_personnages.pdf"}, {Core::keys::KEY_NAME, 0222 "personnages"}}); break; case Core::ContentType::VECTORIALMAP: mapItem.insert({{Core::keys::KEY_PATH, 0223 ":/sharednotes/test.vmap"}, {Core::keys::KEY_NAME, "Test VMap"}}); break; case Core::ContentType::SHAREDNOTE: 0224 mapItem.insert( 0225 {{Core::keys::KEY_PATH, ":/sharednotes/scenario.md"}, {Core::keys::KEY_NAME, "Markdown file"}}); 0226 break; 0227 case Core::ContentType::NOTES: 0228 mapItem.insert( 0229 {{Core::keys::KEY_PATH, ":/sharednotes/scenario.md"}, {Core::keys::KEY_NAME, "Markdown file"}}); 0230 break; 0231 case Core::ContentType::WEBVIEW: 0232 mapItem.insert({{Core::keys::KEY_PATH, "https://rolisteam.org"}, {Core::keys::KEY_NAME, "rolisteam"}}); 0233 break; 0234 default: 0235 break; 0236 } 0237 mapItem.insert({{Core::keys::KEY_TYPE, QVariant::fromValue(content)}}); 0238 m_ctrl->newMedia(nullptr, mapItem); 0239 } 0240 0241 QVERIFY2(m_ctrl->contentCount() == static_cast<int>(list.size()), "After manual insertion"); 0242 0243 auto path= QStringLiteral("%1/%2").arg(QDir::tempPath()).arg("scenario.sce"); 0244 0245 m_ctrl->setSessionPath(path); 0246 m_ctrl->saveSession(); 0247 0248 m_ctrl.reset(new ContentController(m_playerCtrl->model(), m_playerCtrl->characterModel(), nullptr)); 0249 connect(m_ctrl.get(), &ContentController::performCommand, this, [this](QUndoCommand* cmd) { m_stack.push(cmd); }); 0250 m_ctrl->setSessionPath(path); 0251 m_ctrl->loadSession(); 0252 0253 QCOMPARE(m_ctrl->contentCount(), static_cast<int>(list.size()));*/ 0254 } 0255 0256 void ContentControllerTest::completeSerializationTest_data() 0257 { 0258 QTest::addColumn<std::vector<Core::ContentType>>("list"); 0259 0260 std::vector<Core::ContentType> data({Core::ContentType::VECTORIALMAP, Core::ContentType::SHAREDNOTE, 0261 Core::ContentType::CHARACTERSHEET, Core::ContentType::NOTES, 0262 Core::ContentType::PICTURE, Core::ContentType::WEBVIEW}); 0263 0264 // auto list = new std::vector<CleverURI*>(); 0265 std::vector<Core::ContentType> list; 0266 0267 int index= 0; 0268 for(unsigned int i= 0; i < data.size(); ++i) 0269 { 0270 auto comb_size= i + 1; 0271 do 0272 { 0273 list.clear(); 0274 for(auto it= data.begin(); it < data.begin() + comb_size; ++it) 0275 { 0276 list.push_back(*it); 0277 } 0278 QTest::addRow("save %d", ++index) << list; 0279 } while(Helper::next_combination(data.begin(), data.begin() + comb_size, data.end())); 0280 } 0281 } 0282 QTEST_MAIN(ContentControllerTest) 0283 0284 #include "tst_serialization.moc"