File indexing completed on 2024-05-12 05:40:49

0001 /***************************************************************************
0002  *  Copyright (C) 2020 by Renaud Guezennec                               *
0003  *   http://www.rolisteam.org/contact                                      *
0004  *                                                                         *
0005  *   This software 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 
0021 #include "controller/item_controllers/vmapitemfactory.h"
0022 #include "controller/view_controller/vectorialmapcontroller.h"
0023 #include "media/mediafactory.h"
0024 #include "media/mediatype.h"
0025 #include "model/vmapitemmodel.h"
0026 #include "worker/iohelper.h"
0027 #include "network/networkmessagereader.h"
0028 #include "updater/vmapitem/characteritemupdater.h"
0029 #include "updater/vmapitem/ellipsecontrollerupdater.h"
0030 #include "updater/vmapitem/imagecontrollerupdater.h"
0031 #include "updater/vmapitem/linecontrollerupdater.h"
0032 #include "updater/vmapitem/pathcontrollerupdater.h"
0033 #include "updater/vmapitem/rectcontrollerupdater.h"
0034 #include "updater/vmapitem/textcontrollerupdater.h"
0035 #include "updater/vmapitem/vmapitemcontrollerupdater.h"
0036 #include "worker/vectorialmapmessagehelper.h"
0037 #include "worker/messagehelper.h"
0038 
0039 #include <QColor>
0040 #include <QRectF>
0041 #include <QSignalSpy>
0042 #include <QTest>
0043 #include <QUndoStack>
0044 #include <helper.h>
0045 
0046 #include <map>
0047 #include <memory>
0048 #include <vector>
0049 
0050 class VectorialMapControllerTest : public QObject
0051 {
0052     Q_OBJECT
0053 public:
0054     VectorialMapControllerTest()
0055     {
0056         std::string duration("3600000"); // 3600 seconds -> 60 min
0057         QByteArray timeoutDuration(duration.c_str(), static_cast<int>(duration.length()));
0058         qputenv("QTEST_FUNCTION_TIMEOUT", timeoutDuration);
0059         { // just for checking ..
0060             auto result= qgetenv("QTEST_FUNCTION_TIMEOUT");
0061             qDebug() << "timeout set to:" << result << "ms";
0062         }
0063     };
0064 
0065 private slots:
0066     void init();
0067     void cleanupTestCase();
0068 
0069     void serialization300();
0070     void serialization300_data();
0071     void propertyTest();
0072     void propertiesTest();
0073 
0074     void addItemTest();
0075     void addItemTest_data();
0076 
0077     void normalSize();
0078     void normalSize_data();
0079 
0080     void serialization();
0081     void serialization_data();
0082 
0083     void networkMessage();
0084     void networkMessage_data();
0085 
0086     void serialization_network();
0087     void serialization_network_data();
0088 
0089 private:
0090     std::unique_ptr<VectorialMapController> m_ctrl;
0091     std::unique_ptr<QUndoStack> m_stack;
0092     std::unique_ptr<Helper::TestMessageSender> m_sender;
0093     std::map<Core::SelectableTool, std::unique_ptr<VMapItemControllerUpdater>> m_updaters;
0094 };
0095 
0096 void VectorialMapControllerTest::init()
0097 {
0098     qRegisterMetaType<QUndoCommand*>("QUndoCommand*");
0099     m_ctrl.reset(new VectorialMapController("map"));
0100     m_stack.reset(new QUndoStack);
0101     m_sender.reset(new Helper::TestMessageSender);
0102 
0103     NetworkMessage::setMessageSender(m_sender.get());
0104 
0105     connect(m_ctrl.get(), &VectorialMapController::performCommand, m_stack.get(),
0106             [this](QUndoCommand* cmd) { m_stack->push(cmd); });
0107 
0108 
0109     m_updaters.insert(
0110         {Core::SelectableTool::LINE, std::unique_ptr<LineControllerUpdater>(new LineControllerUpdater)});
0111     m_updaters.insert(
0112         {Core::SelectableTool::PATH, std::unique_ptr<PathControllerUpdater>(new PathControllerUpdater)});
0113     m_updaters.insert(
0114         {Core::SelectableTool::FILLRECT, std::unique_ptr<RectControllerUpdater>(new RectControllerUpdater)});
0115     m_updaters.insert(
0116         {Core::SelectableTool::EMPTYRECT, std::unique_ptr<RectControllerUpdater>(new RectControllerUpdater)});
0117     m_updaters.insert(
0118         {Core::SelectableTool::IMAGE, std::unique_ptr<ImageControllerUpdater>(new ImageControllerUpdater)});
0119     m_updaters.insert(
0120         {Core::SelectableTool::NonPlayableCharacter, std::unique_ptr<CharacterItemUpdater>(new CharacterItemUpdater)});
0121     m_updaters.insert(
0122         {Core::SelectableTool::FILLEDELLIPSE, std::unique_ptr<EllipseControllerUpdater>(new EllipseControllerUpdater)});
0123     m_updaters.insert(
0124         {Core::SelectableTool::EMPTYELLIPSE, std::unique_ptr<EllipseControllerUpdater>(new EllipseControllerUpdater)});
0125     m_updaters.insert(
0126         {Core::SelectableTool::TEXT, std::unique_ptr<TextControllerUpdater>(new TextControllerUpdater)});
0127     m_updaters.insert(
0128         {Core::SelectableTool::TEXTBORDER, std::unique_ptr<TextControllerUpdater>(new TextControllerUpdater)});
0129 }
0130 
0131 void VectorialMapControllerTest::cleanupTestCase()
0132 {
0133     m_stack->clear();
0134 }
0135 
0136 void VectorialMapControllerTest::propertyTest()
0137 {
0138     { // NpcNameVisible
0139         QCOMPARE(m_ctrl->npcNameVisible(), true);
0140 
0141         QSignalSpy spy(m_ctrl.get(), &VectorialMapController::npcNameVisibleChanged);
0142 
0143         m_ctrl->setNpcNameVisible(false);
0144 
0145         QCOMPARE(m_ctrl->npcNameVisible(), false);
0146         QCOMPARE(spy.count(), 1);
0147 
0148         m_ctrl->setNpcNameVisible(false);
0149 
0150         QCOMPARE(m_ctrl->npcNameVisible(), false);
0151         QCOMPARE(spy.count(), 1);
0152     }
0153 
0154     { // PcNameVisible
0155         QCOMPARE(m_ctrl->pcNameVisible(), true);
0156 
0157         QSignalSpy spy(m_ctrl.get(), &VectorialMapController::pcNameVisibleChanged);
0158 
0159         m_ctrl->setPcNameVisible(false);
0160 
0161         QCOMPARE(m_ctrl->pcNameVisible(), false);
0162         QCOMPARE(spy.count(), 1);
0163 
0164         m_ctrl->setPcNameVisible(false);
0165 
0166         QCOMPARE(m_ctrl->pcNameVisible(), false);
0167         QCOMPARE(spy.count(), 1);
0168     }
0169 
0170     { // npcNumberVisible
0171         QCOMPARE(m_ctrl->npcNumberVisible(), true);
0172 
0173         QSignalSpy spy(m_ctrl.get(), &VectorialMapController::npcNumberVisibleChanged);
0174 
0175         m_ctrl->setNpcNumberVisible(false);
0176 
0177         QCOMPARE(m_ctrl->npcNumberVisible(), false);
0178         QCOMPARE(spy.count(), 1);
0179 
0180         m_ctrl->setNpcNumberVisible(false);
0181 
0182         QCOMPARE(m_ctrl->npcNumberVisible(), false);
0183         QCOMPARE(spy.count(), 1);
0184     }
0185 
0186     { // healthBarVisible
0187         QCOMPARE(m_ctrl->healthBarVisible(), true);
0188 
0189         QSignalSpy spy(m_ctrl.get(), &VectorialMapController::healthBarVisibleChanged);
0190 
0191         m_ctrl->setHealthBarVisible(false);
0192 
0193         QCOMPARE(m_ctrl->healthBarVisible(), false);
0194         QCOMPARE(spy.count(), 1);
0195 
0196         m_ctrl->setHealthBarVisible(false);
0197 
0198         QCOMPARE(m_ctrl->healthBarVisible(), false);
0199         QCOMPARE(spy.count(), 1);
0200     }
0201 
0202     { // initScoreVisible
0203         QCOMPARE(m_ctrl->initScoreVisible(), true);
0204 
0205         QSignalSpy spy(m_ctrl.get(), &VectorialMapController::initScoreVisibleChanged);
0206 
0207         m_ctrl->setInitScoreVisible(false);
0208 
0209         QCOMPARE(m_ctrl->initScoreVisible(), false);
0210         QCOMPARE(spy.count(), 1);
0211 
0212         m_ctrl->setInitScoreVisible(false);
0213 
0214         QCOMPARE(m_ctrl->initScoreVisible(), false);
0215         QCOMPARE(spy.count(), 1);
0216     }
0217 
0218     { // stateLabelVisible
0219         QCOMPARE(m_ctrl->stateLabelVisible(), false);
0220 
0221         QSignalSpy spy(m_ctrl.get(), &VectorialMapController::stateLabelVisibleChanged);
0222 
0223         m_ctrl->setStateLabelVisible(true);
0224 
0225         QCOMPARE(m_ctrl->stateLabelVisible(), true);
0226         QCOMPARE(spy.count(), 1);
0227 
0228         m_ctrl->setStateLabelVisible(true);
0229 
0230         QCOMPARE(m_ctrl->stateLabelVisible(), true);
0231         QCOMPARE(spy.count(), 1);
0232     }
0233 
0234     { // collision
0235         QCOMPARE(m_ctrl->collision(), false);
0236 
0237         QSignalSpy spy(m_ctrl.get(), &VectorialMapController::collisionChanged);
0238 
0239         m_ctrl->setCollision(true);
0240 
0241         QCOMPARE(m_ctrl->collision(), true);
0242         QCOMPARE(spy.count(), 1);
0243 
0244         m_ctrl->setCollision(true);
0245 
0246         QCOMPARE(m_ctrl->collision(), true);
0247         QCOMPARE(spy.count(), 1);
0248     }
0249 
0250     { // characterVision
0251         QCOMPARE(m_ctrl->characterVision(), false);
0252 
0253         QSignalSpy spy(m_ctrl.get(), &VectorialMapController::characterVisionChanged);
0254 
0255         m_ctrl->setCharacterVision(true);
0256 
0257         QCOMPARE(m_ctrl->characterVision(), true);
0258         QCOMPARE(spy.count(), 1);
0259 
0260         m_ctrl->setCharacterVision(true);
0261 
0262         QCOMPARE(m_ctrl->characterVision(), true);
0263         QCOMPARE(spy.count(), 1);
0264     }
0265 
0266     { // gridColor
0267         QCOMPARE(m_ctrl->gridColor(), QColor(Qt::black));
0268 
0269         QSignalSpy spy(m_ctrl.get(), &VectorialMapController::gridColorChanged);
0270 
0271         m_ctrl->setGridColor(QColor(Qt::red));
0272 
0273         QCOMPARE(m_ctrl->gridColor(), QColor(Qt::red));
0274         QCOMPARE(spy.count(), 1);
0275 
0276         m_ctrl->setGridColor(QColor(Qt::red));
0277 
0278         QCOMPARE(m_ctrl->gridColor(), QColor(Qt::red));
0279         QCOMPARE(spy.count(), 1);
0280     }
0281 
0282     { // gridScale
0283         QCOMPARE(m_ctrl->gridScale(), 5.0);
0284 
0285         QSignalSpy spy(m_ctrl.get(), &VectorialMapController::gridScaleChanged);
0286 
0287         m_ctrl->setGridScale(100.0);
0288 
0289         QCOMPARE(m_ctrl->gridScale(), 100.0);
0290         QCOMPARE(spy.count(), 1);
0291 
0292         m_ctrl->setGridScale(100.0);
0293 
0294         QCOMPARE(m_ctrl->gridScale(), 100.0);
0295         QCOMPARE(spy.count(), 1);
0296     }
0297 
0298     { // gridSize
0299         QCOMPARE(m_ctrl->gridSize(), 50);
0300 
0301         QSignalSpy spy(m_ctrl.get(), &VectorialMapController::gridSizeChanged);
0302 
0303         m_ctrl->setGridSize(100.0);
0304 
0305         QCOMPARE(m_ctrl->gridSize(), 100.0);
0306         QCOMPARE(spy.count(), 1);
0307 
0308         m_ctrl->setGridSize(100.0);
0309 
0310         QCOMPARE(m_ctrl->gridSize(), 100.0);
0311         QCOMPARE(spy.count(), 1);
0312     }
0313 
0314     { // gridVisibility
0315         QCOMPARE(m_ctrl->gridVisibility(), false);
0316 
0317         QSignalSpy spy(m_ctrl.get(), &VectorialMapController::gridVisibilityChanged);
0318 
0319         m_ctrl->setGridVisibility(true);
0320 
0321         QCOMPARE(m_ctrl->gridVisibility(), true);
0322         QCOMPARE(spy.count(), 1);
0323 
0324         m_ctrl->setGridVisibility(true);
0325 
0326         QCOMPARE(m_ctrl->gridVisibility(), true);
0327         QCOMPARE(spy.count(), 1);
0328     }
0329 
0330     { // gridAbove
0331         QCOMPARE(m_ctrl->gridAbove(), false);
0332 
0333         QSignalSpy spy(m_ctrl.get(), &VectorialMapController::gridAboveChanged);
0334 
0335         m_ctrl->setGridAbove(true);
0336 
0337         QCOMPARE(m_ctrl->gridAbove(), true);
0338         QCOMPARE(spy.count(), 1);
0339 
0340         m_ctrl->setGridAbove(true);
0341 
0342         QCOMPARE(m_ctrl->gridAbove(), true);
0343         QCOMPARE(spy.count(), 1);
0344     }
0345 
0346     { // scaleUnit
0347         QCOMPARE(m_ctrl->scaleUnit(), Core::M);
0348 
0349         QSignalSpy spy(m_ctrl.get(), &VectorialMapController::scaleUnitChanged);
0350 
0351         m_ctrl->setScaleUnit(Core::KM);
0352 
0353         QCOMPARE(m_ctrl->scaleUnit(), Core::KM);
0354         QCOMPARE(spy.count(), 1);
0355 
0356         m_ctrl->setScaleUnit(Core::KM);
0357 
0358         QCOMPARE(m_ctrl->scaleUnit(), Core::KM);
0359         QCOMPARE(spy.count(), 1);
0360     }
0361 
0362     { // npcName
0363         QCOMPARE(m_ctrl->npcName(), "");
0364 
0365         QSignalSpy spy(m_ctrl.get(), &VectorialMapController::npcNameChanged);
0366 
0367         m_ctrl->setNpcName("tata");
0368 
0369         QCOMPARE(m_ctrl->npcName(), "tata");
0370         QCOMPARE(spy.count(), 1);
0371 
0372         m_ctrl->setNpcName("tata");
0373 
0374         QCOMPARE(m_ctrl->npcName(), "tata");
0375         QCOMPARE(spy.count(), 1);
0376     }
0377 
0378     { // permission
0379         QCOMPARE(m_ctrl->permission(), Core::GM_ONLY);
0380 
0381         QSignalSpy spy(m_ctrl.get(), &VectorialMapController::permissionChanged);
0382 
0383         m_ctrl->setPermission(Core::PC_ALL);
0384 
0385         QCOMPARE(m_ctrl->permission(), Core::PC_ALL);
0386         QCOMPARE(spy.count(), 1);
0387 
0388         m_ctrl->setPermission(Core::PC_ALL);
0389 
0390         QCOMPARE(m_ctrl->permission(), Core::PC_ALL);
0391         QCOMPARE(spy.count(), 1);
0392     }
0393 
0394     { // gridPattern
0395         QCOMPARE(m_ctrl->gridPattern(), Core::GridPattern::NONE);
0396 
0397         QSignalSpy spy(m_ctrl.get(), &VectorialMapController::gridPatternChanged);
0398 
0399         m_ctrl->setGridPattern(Core::GridPattern::SQUARE);
0400 
0401         QCOMPARE(m_ctrl->gridPattern(), Core::GridPattern::SQUARE);
0402         QCOMPARE(spy.count(), 1);
0403 
0404         m_ctrl->setGridPattern(Core::GridPattern::SQUARE);
0405 
0406         QCOMPARE(m_ctrl->gridPattern(), Core::GridPattern::SQUARE);
0407         QCOMPARE(spy.count(), 1);
0408     }
0409     { // visibility
0410         QCOMPARE(m_ctrl->visibility(), Core::HIDDEN);
0411 
0412         QSignalSpy spy(m_ctrl.get(), &VectorialMapController::visibilityChanged);
0413 
0414         m_ctrl->setVisibility(Core::ALL);
0415 
0416         QCOMPARE(m_ctrl->visibility(), Core::ALL);
0417         QCOMPARE(spy.count(), 1);
0418 
0419         m_ctrl->setVisibility(Core::ALL);
0420 
0421         QCOMPARE(m_ctrl->visibility(), Core::ALL);
0422         QCOMPARE(spy.count(), 1);
0423     }
0424 
0425     { // backgroundColor
0426         QCOMPARE(m_ctrl->backgroundColor(), Qt::white);
0427 
0428         QSignalSpy spy(m_ctrl.get(), &VectorialMapController::backgroundColorChanged);
0429 
0430         m_ctrl->setBackgroundColor(Qt::red);
0431 
0432         QCOMPARE(m_ctrl->backgroundColor(), Qt::red);
0433         QCOMPARE(spy.count(), 1);
0434 
0435         m_ctrl->setBackgroundColor(Qt::red);
0436 
0437         QCOMPARE(m_ctrl->backgroundColor(), Qt::red);
0438         QCOMPARE(spy.count(), 1);
0439     }
0440 
0441     { // toolColor
0442         QCOMPARE(m_ctrl->toolColor(), Qt::black);
0443 
0444         QSignalSpy spy(m_ctrl.get(), &VectorialMapController::toolColorChanged);
0445 
0446         m_ctrl->setToolColor(Qt::red);
0447 
0448         QCOMPARE(m_ctrl->toolColor(), Qt::red);
0449         QCOMPARE(spy.count(), 1);
0450 
0451         m_ctrl->setToolColor(Qt::red);
0452 
0453         QCOMPARE(m_ctrl->toolColor(), Qt::red);
0454         QCOMPARE(spy.count(), 1);
0455     }
0456 
0457     { // penSize
0458         QCOMPARE(m_ctrl->penSize(), 15);
0459 
0460         QSignalSpy spy(m_ctrl.get(), &VectorialMapController::penSizeChanged);
0461 
0462         m_ctrl->setPenSize(100);
0463 
0464         QCOMPARE(m_ctrl->penSize(), 100);
0465         QCOMPARE(spy.count(), 1);
0466 
0467         m_ctrl->setPenSize(100);
0468 
0469         QCOMPARE(m_ctrl->penSize(), 100);
0470         QCOMPARE(spy.count(), 1);
0471     }
0472 
0473     { // npcNumber
0474         QCOMPARE(m_ctrl->npcNumber(), 1);
0475 
0476         QSignalSpy spy(m_ctrl.get(), &VectorialMapController::npcNumberChanged);
0477 
0478         m_ctrl->setNpcNumber(100);
0479 
0480         QCOMPARE(m_ctrl->npcNumber(), 100);
0481         QCOMPARE(spy.count(), 1);
0482 
0483         m_ctrl->setNpcNumber(100);
0484 
0485         QCOMPARE(m_ctrl->npcNumber(), 100);
0486         QCOMPARE(spy.count(), 1);
0487     }
0488 
0489     { // zoomLevel
0490         QCOMPARE(m_ctrl->zoomLevel(), 1.0);
0491 
0492         QSignalSpy spy(m_ctrl.get(), &VectorialMapController::zoomLevelChanged);
0493 
0494         m_ctrl->setZoomLevel(4.0);
0495 
0496         QCOMPARE(m_ctrl->zoomLevel(), 4.0);
0497         QCOMPARE(spy.count(), 1);
0498 
0499         m_ctrl->setZoomLevel(10.0);
0500 
0501         QCOMPARE(m_ctrl->zoomLevel(), 4.0);
0502         QCOMPARE(spy.count(), 1);
0503     }
0504 
0505     { // layer
0506         QCOMPARE(m_ctrl->layer(), Core::Layer::GROUND);
0507 
0508         QSignalSpy spy(m_ctrl.get(), &VectorialMapController::layerChanged);
0509 
0510         m_ctrl->setLayer(Core::Layer::OBJECT);
0511 
0512         QCOMPARE(m_ctrl->layer(), Core::Layer::OBJECT);
0513         QCOMPARE(spy.count(), 1);
0514 
0515         m_ctrl->setLayer(Core::Layer::OBJECT);
0516 
0517         QCOMPARE(m_ctrl->layer(), Core::Layer::OBJECT);
0518         QCOMPARE(spy.count(), 1);
0519     }
0520 
0521     { // SelectableTool
0522         QCOMPARE(m_ctrl->tool(), Core::HANDLER);
0523 
0524         QSignalSpy spy(m_ctrl.get(), &VectorialMapController::toolChanged);
0525 
0526         m_ctrl->setTool(Core::PEN);
0527 
0528         QCOMPARE(m_ctrl->tool(), Core::PEN);
0529         QCOMPARE(spy.count(), 1);
0530 
0531         m_ctrl->setTool(Core::PEN);
0532 
0533         QCOMPARE(m_ctrl->tool(), Core::PEN);
0534         QCOMPARE(spy.count(), 1);
0535     }
0536 
0537     { // editionMode
0538         QCOMPARE(m_ctrl->editionMode(), Core::EditionMode::Painting);
0539 
0540         QSignalSpy spy(m_ctrl.get(), &VectorialMapController::editionModeChanged);
0541 
0542         m_ctrl->setEditionMode(Core::EditionMode::Unmask);
0543 
0544         QCOMPARE(m_ctrl->editionMode(), Core::EditionMode::Unmask);
0545         QCOMPARE(spy.count(), 1);
0546 
0547         m_ctrl->setEditionMode(Core::EditionMode::Unmask);
0548 
0549         QCOMPARE(m_ctrl->editionMode(), Core::EditionMode::Unmask);
0550         QCOMPARE(spy.count(), 1);
0551     }
0552 
0553     { // opacity
0554         QCOMPARE(m_ctrl->opacity(), 1.0);
0555 
0556         QSignalSpy spy(m_ctrl.get(), &VectorialMapController::opacityChanged);
0557 
0558         m_ctrl->setOpacity(0.4);
0559 
0560         QCOMPARE(m_ctrl->opacity(), 0.4);
0561         QCOMPARE(spy.count(), 1);
0562 
0563         m_ctrl->setOpacity(0.4);
0564 
0565         QCOMPARE(m_ctrl->opacity(), 0.4);
0566         QCOMPARE(spy.count(), 1);
0567     }
0568 
0569     { // visualRect
0570         QCOMPARE(m_ctrl->visualRect(), QRectF());
0571 
0572         QSignalSpy spy(m_ctrl.get(), &VectorialMapController::visualRectChanged);
0573 
0574         m_ctrl->setVisualRect(QRectF(0, 0, 100, 100));
0575 
0576         QCOMPARE(m_ctrl->visualRect(), QRectF(0, 0, 100, 100));
0577         QCOMPARE(spy.count(), 1);
0578 
0579         m_ctrl->setVisualRect(QRectF(0, 0, 100, 100));
0580 
0581         QCOMPARE(m_ctrl->visualRect(), QRectF(0, 0, 100, 100));
0582         QCOMPARE(spy.count(), 1);
0583     }
0584 
0585     { // idle
0586         QCOMPARE(m_ctrl->idle(), true);
0587 
0588         QSignalSpy spy(m_ctrl.get(), &VectorialMapController::idleChanged);
0589 
0590         m_ctrl->setIdle(false);
0591 
0592         QCOMPARE(m_ctrl->idle(), false);
0593         QCOMPARE(spy.count(), 1);
0594 
0595         m_ctrl->setIdle(false);
0596 
0597         QCOMPARE(m_ctrl->idle(), false);
0598         QCOMPARE(spy.count(), 1);
0599     }
0600 
0601     { // zIndex
0602         QCOMPARE(m_ctrl->zIndex(), 0);
0603 
0604         QSignalSpy spy(m_ctrl.get(), &VectorialMapController::zIndexChanged);
0605 
0606         m_ctrl->setZindex(2);
0607 
0608         QCOMPARE(m_ctrl->zIndex(), 2);
0609         QCOMPARE(spy.count(), 1);
0610 
0611         m_ctrl->setZindex(2);
0612 
0613         QCOMPARE(m_ctrl->zIndex(), 2);
0614         QCOMPARE(spy.count(), 1);
0615     }
0616 }
0617 
0618 void VectorialMapControllerTest::addItemTest() {}
0619 
0620 void VectorialMapControllerTest::addItemTest_data()
0621 {
0622     // QTest::addColumn("");
0623 }
0624 
0625 void VectorialMapControllerTest::normalSize()
0626 {
0627     QFETCH(QList<vmap::VisualItemController*>, list);
0628     QFETCH(VectorialMapController::Method, method);
0629     QFETCH(QPointF, click);
0630     QFETCH(QRectF, result);
0631     QFETCH(int, call);
0632     m_stack.reset(nullptr);
0633 
0634     connect(m_ctrl.get(), &VectorialMapController::performCommand, this,
0635             [list, result](QUndoCommand* cmd)
0636             {
0637                 QUndoStack stack;
0638                 stack.push(cmd);
0639 
0640                 std::for_each(list.begin(), list.end(),
0641                               [result](vmap::VisualItemController* ctrl) { QCOMPARE(ctrl->rect(), result); });
0642             });
0643 
0644     QSignalSpy spy(m_ctrl.get(), &VectorialMapController::performCommand);
0645 
0646     m_ctrl->normalizeSize(list, method, click);
0647 
0648     QCOMPARE(spy.count(), call);
0649     spy.wait(1000);
0650 }
0651 
0652 void VectorialMapControllerTest::normalSize_data()
0653 {
0654     QTest::addColumn<QList<vmap::VisualItemController*>>("list");
0655     QTest::addColumn<VectorialMapController::Method>("method");
0656     QTest::addColumn<QPointF>("click");
0657     QTest::addColumn<QRectF>("result");
0658     QTest::addColumn<int>("call");
0659 
0660     QTest::addRow("cmd1") << QList<vmap::VisualItemController*>() << VectorialMapController::Bigger << QPointF()
0661                           << QRectF() << 0;
0662     QTest::addRow("cmd2") << QList<vmap::VisualItemController*>() << VectorialMapController::Smaller << QPointF()
0663                           << QRectF() << 0;
0664     QTest::addRow("cmd3") << QList<vmap::VisualItemController*>() << VectorialMapController::UnderMouse << QPointF()
0665                           << QRectF() << 0;
0666     QTest::addRow("cmd4") << QList<vmap::VisualItemController*>() << VectorialMapController::Average << QPointF()
0667                           << QRectF() << 0;
0668 
0669     {
0670         QList<vmap::VisualItemController*> vec;
0671         vec.push_back(vmap::VmapItemFactory::createVMapItem(m_ctrl.get(), Core::SelectableTool::FILLRECT,
0672                                                             Helper::buildRectController(true, QRectF(0, 0, 100, 100))));
0673         QTest::addRow("cmd5") << vec << VectorialMapController::Bigger << QPointF() << QRectF(0, 0, 100, 100) << 1;
0674     }
0675     {
0676         QList<vmap::VisualItemController*> vec;
0677         vec.push_back(vmap::VmapItemFactory::createVMapItem(m_ctrl.get(), Core::SelectableTool::FILLRECT,
0678                                                             Helper::buildRectController(true, QRectF(0, 0, 100, 100))));
0679         QTest::addRow("cmd6") << vec << VectorialMapController::Smaller << QPointF() << QRectF(0, 0, 100, 100) << 1;
0680     }
0681     {
0682         QList<vmap::VisualItemController*> vec;
0683         vec.push_back(vmap::VmapItemFactory::createVMapItem(m_ctrl.get(), Core::SelectableTool::FILLRECT,
0684                                                             Helper::buildRectController(true, QRectF(0, 0, 100, 100))));
0685         QTest::addRow("cmd7") << vec << VectorialMapController::UnderMouse << QPointF(0, 0) << QRectF(0, 0, 100, 100)
0686                               << 1;
0687     }
0688     {
0689         QList<vmap::VisualItemController*> vec;
0690         vec.push_back(vmap::VmapItemFactory::createVMapItem(m_ctrl.get(), Core::SelectableTool::FILLRECT,
0691                                                             Helper::buildRectController(true, QRectF(0, 0, 100, 100))));
0692         QTest::addRow("cmd8") << vec << VectorialMapController::Average << QPointF() << QRectF(0, 0, 100, 100) << 1;
0693     }
0694 
0695     {
0696         QList<vmap::VisualItemController*> vec;
0697         vec.push_back(vmap::VmapItemFactory::createVMapItem(m_ctrl.get(), Core::SelectableTool::FILLRECT,
0698                                                             Helper::buildRectController(true, QRectF(0, 0, 10, 10))));
0699         vec.push_back(vmap::VmapItemFactory::createVMapItem(m_ctrl.get(), Core::SelectableTool::FILLRECT,
0700                                                             Helper::buildRectController(true, QRectF(0, 0, 100, 100))));
0701         QTest::addRow("cmd9") << vec << VectorialMapController::Bigger << QPointF() << QRectF(0, 0, 100, 100) << 1;
0702     }
0703     {
0704         QList<vmap::VisualItemController*> vec;
0705         vec.push_back(vmap::VmapItemFactory::createVMapItem(m_ctrl.get(), Core::SelectableTool::FILLRECT,
0706                                                             Helper::buildRectController(true, QRectF(0, 0, 10, 10))));
0707         vec.push_back(vmap::VmapItemFactory::createVMapItem(m_ctrl.get(), Core::SelectableTool::FILLRECT,
0708                                                             Helper::buildRectController(true, QRectF(0, 0, 100, 100))));
0709         QTest::addRow("cmd10") << vec << VectorialMapController::Smaller << QPointF() << QRectF(0, 0, 10, 10) << 1;
0710     }
0711     {
0712         QList<vmap::VisualItemController*> vec;
0713         vec.push_back(vmap::VmapItemFactory::createVMapItem(m_ctrl.get(), Core::SelectableTool::FILLRECT,
0714                                                             Helper::buildRectController(true, QRectF(0, 0, 100, 100))));
0715         vec.push_back(vmap::VmapItemFactory::createVMapItem(m_ctrl.get(), Core::SelectableTool::FILLRECT,
0716                                                             Helper::buildRectController(true, QRectF(0, 0, 10, 10))));
0717         QTest::addRow("cmd11") << vec << VectorialMapController::UnderMouse << QPointF(0, 0) << QRectF(0, 0, 100, 100)
0718                                << 1;
0719     }
0720     {
0721         QList<vmap::VisualItemController*> vec;
0722         vec.push_back(vmap::VmapItemFactory::createVMapItem(m_ctrl.get(), Core::SelectableTool::FILLRECT,
0723                                                             Helper::buildRectController(true, QRectF(0, 0, 10, 10))));
0724         vec.push_back(vmap::VmapItemFactory::createVMapItem(m_ctrl.get(), Core::SelectableTool::FILLRECT,
0725                                                             Helper::buildRectController(true, QRectF(0, 0, 100, 100))));
0726         QTest::addRow("cmd12") << vec << VectorialMapController::Average << QPointF() << QRectF(0, 0, 55, 55) << 1;
0727     }
0728 
0729     {
0730         QList<vmap::VisualItemController*> vec;
0731         vec.push_back(vmap::VmapItemFactory::createVMapItem(
0732             m_ctrl.get(), Core::SelectableTool::FILLRECT,
0733             Helper::buildRectController(true, QRectF(0, 0, 10, 10), QPointF(0, 0))));
0734         vec.push_back(vmap::VmapItemFactory::createVMapItem(
0735             m_ctrl.get(), Core::SelectableTool::FILLRECT,
0736             Helper::buildRectController(true, QRectF(0, 0, 100, 100), QPointF(20, 20))));
0737         QTest::addRow("cmd13") << vec << VectorialMapController::Bigger << QPointF() << QRectF(0, 0, 100, 100) << 1;
0738     }
0739     {
0740         QList<vmap::VisualItemController*> vec;
0741         vec.push_back(vmap::VmapItemFactory::createVMapItem(
0742             m_ctrl.get(), Core::SelectableTool::FILLRECT,
0743             Helper::buildRectController(true, QRectF(0, 0, 10, 10), QPointF(0, 0))));
0744         vec.push_back(vmap::VmapItemFactory::createVMapItem(
0745             m_ctrl.get(), Core::SelectableTool::FILLRECT,
0746             Helper::buildRectController(true, QRectF(0, 0, 100, 100), QPointF(20, 20))));
0747         QTest::addRow("cmd14") << vec << VectorialMapController::Smaller << QPointF() << QRectF(0, 0, 10, 10) << 1;
0748     }
0749     {
0750         QList<vmap::VisualItemController*> vec;
0751         vec.push_back(vmap::VmapItemFactory::createVMapItem(
0752             m_ctrl.get(), Core::SelectableTool::FILLRECT,
0753             Helper::buildRectController(true, QRectF(0, 0, 15, 15), QPointF(0, 0))));
0754         vec.push_back(vmap::VmapItemFactory::createVMapItem(
0755             m_ctrl.get(), Core::SelectableTool::FILLRECT,
0756             Helper::buildRectController(true, QRectF(0, 0, 100, 100), QPointF(20, 20))));
0757         QTest::addRow("cmd15") << vec << VectorialMapController::UnderMouse << QPointF(10, 10) << QRectF(0, 0, 15, 15)
0758                                << 1;
0759     }
0760     {
0761         QList<vmap::VisualItemController*> vec;
0762         vec.push_back(vmap::VmapItemFactory::createVMapItem(
0763             m_ctrl.get(), Core::SelectableTool::FILLRECT,
0764             Helper::buildRectController(true, QRectF(0, 0, 10, 10), QPointF(0, 0))));
0765         vec.push_back(vmap::VmapItemFactory::createVMapItem(
0766             m_ctrl.get(), Core::SelectableTool::FILLRECT,
0767             Helper::buildRectController(true, QRectF(0, 0, 100, 100), QPointF(20, 20))));
0768         QTest::addRow("cmd16") << vec << VectorialMapController::UnderMouse << QPointF(30, 30) << QRectF(0, 0, 100, 100)
0769                                << 1;
0770     }
0771     {
0772         QList<vmap::VisualItemController*> vec;
0773         vec.push_back(vmap::VmapItemFactory::createVMapItem(
0774             m_ctrl.get(), Core::SelectableTool::FILLRECT,
0775             Helper::buildRectController(true, QRectF(0, 0, 10, 10), QPointF(0, 0))));
0776         vec.push_back(vmap::VmapItemFactory::createVMapItem(
0777             m_ctrl.get(), Core::SelectableTool::FILLRECT,
0778             Helper::buildRectController(true, QRectF(0, 0, 100, 100), QPointF(20, 20))));
0779         QTest::addRow("cmd17") << vec << VectorialMapController::Average << QPointF() << QRectF(0, 0, 55, 55) << 1;
0780     }
0781 
0782     {
0783         QList<vmap::VisualItemController*> vec;
0784         vec.push_back(vmap::VmapItemFactory::createVMapItem(
0785             m_ctrl.get(), Core::SelectableTool::FILLRECT,
0786             Helper::buildRectController(true, QRectF(0, 0, 10, 10), QPointF(0, 0))));
0787         vec.push_back(vmap::VmapItemFactory::createVMapItem(
0788             m_ctrl.get(), Core::SelectableTool::TEXTBORDER,
0789             Helper::buildTextController(true, "hello world", QRectF(0, 0, 100, 100), QPointF(20, 20))));
0790         QTest::addRow("cmd18") << vec << VectorialMapController::Bigger << QPointF() << QRectF(0, 0, 100, 100) << 1;
0791     }
0792     {
0793         QList<vmap::VisualItemController*> vec;
0794         vec.push_back(vmap::VmapItemFactory::createVMapItem(
0795             m_ctrl.get(), Core::SelectableTool::FILLRECT,
0796             Helper::buildRectController(true, QRectF(0, 0, 1000, 1000), QPointF(0, 0))));
0797         vec.push_back(vmap::VmapItemFactory::createVMapItem(
0798             m_ctrl.get(), Core::SelectableTool::TEXTBORDER,
0799             Helper::buildTextController(true, "hello world", QRectF(0, 0, 100, 100), QPointF(20, 20))));
0800         QTest::addRow("cmd19") << vec << VectorialMapController::Smaller << QPointF() << QRectF(0, 0, 100, 100) << 1;
0801     }
0802     {
0803         QList<vmap::VisualItemController*> vec;
0804         vec.push_back(vmap::VmapItemFactory::createVMapItem(
0805             m_ctrl.get(), Core::SelectableTool::TEXTBORDER,
0806             Helper::buildTextController(true, "hello world", QRectF(0, 0, 300, 300), QPointF(20, 20))));
0807         vec.push_back(vmap::VmapItemFactory::createVMapItem(
0808             m_ctrl.get(), Core::SelectableTool::FILLRECT,
0809             Helper::buildRectController(true, QRectF(0, 0, 200, 200), QPointF(0, 0))));
0810         QTest::addRow("cmd20") << vec << VectorialMapController::UnderMouse << QPointF(30, 30) << QRectF(0, 0, 300, 300)
0811                                << 1;
0812     }
0813     {
0814         QList<vmap::VisualItemController*> vec;
0815         vec.push_back(vmap::VmapItemFactory::createVMapItem(
0816             m_ctrl.get(), Core::SelectableTool::TEXTBORDER,
0817             Helper::buildTextController(true, "hello world", QRectF(0, 0, 100, 100), QPointF(20, 20))));
0818         vec.push_back(vmap::VmapItemFactory::createVMapItem(
0819             m_ctrl.get(), Core::SelectableTool::FILLRECT,
0820             Helper::buildRectController(true, QRectF(0, 0, 10, 10), QPointF(0, 0))));
0821         QTest::addRow("cmd21") << vec << VectorialMapController::UnderMouse << QPointF(30, 30) << QRectF(0, 0, 100, 100)
0822                                << 1;
0823     }
0824     {
0825         QList<vmap::VisualItemController*> vec;
0826         vec.push_back(vmap::VmapItemFactory::createVMapItem(
0827             m_ctrl.get(), Core::SelectableTool::FILLRECT,
0828             Helper::buildRectController(true, QRectF(0, 0, 10, 10), QPointF(0, 0))));
0829         vec.push_back(vmap::VmapItemFactory::createVMapItem(
0830             m_ctrl.get(), Core::SelectableTool::TEXTBORDER,
0831             Helper::buildTextController(true, "hello world", QRectF(0, 0, 100, 100), QPointF(20, 20))));
0832         QTest::addRow("cmd22") << vec << VectorialMapController::Average << QPointF() << QRectF(0, 0, 55, 55) << 1;
0833     }
0834 
0835     {
0836         QList<vmap::VisualItemController*> vec;
0837         vec.push_back(vmap::VmapItemFactory::createVMapItem(
0838             m_ctrl.get(), Core::SelectableTool::TEXTBORDER,
0839             Helper::buildTextController(true, "hello world", QRectF(0, 0, 10, 10), QPointF(0, 0))));
0840         vec.push_back(vmap::VmapItemFactory::createVMapItem(
0841             m_ctrl.get(), Core::SelectableTool::TEXTBORDER,
0842             Helper::buildTextController(true, "hello world", QRectF(0, 0, 100, 100), QPointF(20, 20))));
0843         QTest::addRow("cmd23") << vec << VectorialMapController::Bigger << QPointF() << QRectF(0, 0, 100, 100) << 1;
0844     }
0845     {
0846         QList<vmap::VisualItemController*> vec;
0847         vec.push_back(vmap::VmapItemFactory::createVMapItem(
0848             m_ctrl.get(), Core::SelectableTool::TEXTBORDER,
0849             Helper::buildTextController(true, "hello world", QRectF(0, 0, 10, 10), QPointF(0, 0))));
0850         vec.push_back(vmap::VmapItemFactory::createVMapItem(
0851             m_ctrl.get(), Core::SelectableTool::TEXTBORDER,
0852             Helper::buildTextController(true, "hello world", QRectF(0, 0, 100, 100), QPointF(20, 20))));
0853         QTest::addRow("cmd24") << vec << VectorialMapController::Smaller << QPointF() << QRectF(0, 0, 10, 10) << 1;
0854     }
0855     {
0856         QList<vmap::VisualItemController*> vec;
0857         vec.push_back(vmap::VmapItemFactory::createVMapItem(
0858             m_ctrl.get(), Core::SelectableTool::TEXTBORDER,
0859             Helper::buildTextController(true, "hello world", QRectF(0, 0, 10, 10), QPointF(0, 0))));
0860         vec.push_back(vmap::VmapItemFactory::createVMapItem(
0861             m_ctrl.get(), Core::SelectableTool::TEXTBORDER,
0862             Helper::buildTextController(true, "hello world", QRectF(0, 0, 100, 100), QPointF(20, 20))));
0863         QTest::addRow("cmd25") << vec << VectorialMapController::UnderMouse << QPointF(0, 0) << QRectF(0, 0, 10, 10)
0864                                << 1;
0865     }
0866     {
0867         QList<vmap::VisualItemController*> vec;
0868         vec.push_back(vmap::VmapItemFactory::createVMapItem(
0869             m_ctrl.get(), Core::SelectableTool::TEXTBORDER,
0870             Helper::buildTextController(true, "hello world", QRectF(0, 0, 10, 10), QPointF(0, 0))));
0871         vec.push_back(vmap::VmapItemFactory::createVMapItem(
0872             m_ctrl.get(), Core::SelectableTool::TEXTBORDER,
0873             Helper::buildTextController(true, "hello world", QRectF(0, 0, 100, 100), QPointF(20, 20))));
0874         QTest::addRow("cmd26") << vec << VectorialMapController::UnderMouse << QPointF(30, 30) << QRectF(0, 0, 100, 100)
0875                                << 1;
0876     }
0877     {
0878         QList<vmap::VisualItemController*> vec;
0879         vec.push_back(vmap::VmapItemFactory::createVMapItem(
0880             m_ctrl.get(), Core::SelectableTool::TEXTBORDER,
0881             Helper::buildTextController(true, "hello world", QRectF(0, 0, 10, 10), QPointF(0, 0))));
0882         vec.push_back(vmap::VmapItemFactory::createVMapItem(
0883             m_ctrl.get(), Core::SelectableTool::TEXTBORDER,
0884             Helper::buildTextController(true, "hello world", QRectF(0, 0, 100, 100), QPointF(20, 20))));
0885         QTest::addRow("cmd27") << vec << VectorialMapController::Average << QPointF() << QRectF(0, 0, 55, 55) << 1;
0886     }
0887 
0888     {
0889         QList<vmap::VisualItemController*> vec;
0890         vec.push_back(
0891             vmap::VmapItemFactory::createVMapItem(m_ctrl.get(), Core::SelectableTool::FILLEDELLIPSE,
0892                                                   Helper::buildEllipseController(true, 10, 10, QPointF(0, 0))));
0893         vec.push_back(
0894             vmap::VmapItemFactory::createVMapItem(m_ctrl.get(), Core::SelectableTool::FILLEDELLIPSE,
0895                                                   Helper::buildEllipseController(true, 100, 100, QPointF(0, 0))));
0896         QTest::addRow("cmd28") << vec << VectorialMapController::Bigger << QPointF() << QRectF(-100, -100, 200, 200)
0897                                << 1;
0898     }
0899     {
0900         QList<vmap::VisualItemController*> vec;
0901         vec.push_back(
0902             vmap::VmapItemFactory::createVMapItem(m_ctrl.get(), Core::SelectableTool::FILLEDELLIPSE,
0903                                                   Helper::buildEllipseController(true, 10, 10, QPointF(0, 0))));
0904         vec.push_back(
0905             vmap::VmapItemFactory::createVMapItem(m_ctrl.get(), Core::SelectableTool::FILLEDELLIPSE,
0906                                                   Helper::buildEllipseController(true, 100, 100, QPointF(20, 20))));
0907         QTest::addRow("cmd29") << vec << VectorialMapController::Smaller << QPointF() << QRectF(-10, -10, 20, 20) << 1;
0908     }
0909     {
0910         QList<vmap::VisualItemController*> vec;
0911         vec.push_back(
0912             vmap::VmapItemFactory::createVMapItem(m_ctrl.get(), Core::SelectableTool::FILLEDELLIPSE,
0913                                                   Helper::buildEllipseController(true, 10, 10, QPointF(0, 0))));
0914         vec.push_back(
0915             vmap::VmapItemFactory::createVMapItem(m_ctrl.get(), Core::SelectableTool::FILLEDELLIPSE,
0916                                                   Helper::buildEllipseController(true, 100, 100, QPointF(20, 20))));
0917         QTest::addRow("cmd30") << vec << VectorialMapController::UnderMouse << QPointF(0, 0) << QRectF(-10, -10, 20, 20)
0918                                << 1;
0919     }
0920     {
0921         QList<vmap::VisualItemController*> vec;
0922         vec.push_back(
0923             vmap::VmapItemFactory::createVMapItem(m_ctrl.get(), Core::SelectableTool::FILLEDELLIPSE,
0924                                                   Helper::buildEllipseController(true, 10, 10, QPointF(0, 0))));
0925         vec.push_back(
0926             vmap::VmapItemFactory::createVMapItem(m_ctrl.get(), Core::SelectableTool::FILLEDELLIPSE,
0927                                                   Helper::buildEllipseController(true, 100, 100, QPointF(20, 20))));
0928         QTest::addRow("cmd31") << vec << VectorialMapController::UnderMouse << QPointF(30, 30)
0929                                << QRectF(-100, -100, 200, 200) << 1;
0930     }
0931     {
0932         QList<vmap::VisualItemController*> vec;
0933         vec.push_back(vmap::VmapItemFactory::createVMapItem(m_ctrl.get(), Core::SelectableTool::FILLEDELLIPSE,
0934                                                             Helper::buildEllipseController(true, 10., 10.)));
0935         vec.push_back(
0936             vmap::VmapItemFactory::createVMapItem(m_ctrl.get(), Core::SelectableTool::FILLEDELLIPSE,
0937                                                   Helper::buildEllipseController(true, 100, 100, QPointF(0, 0))));
0938         QTest::addRow("cmd32") << vec << VectorialMapController::Average << QPointF() << QRectF(-55, -55, 110, 110)
0939                                << 1;
0940     }
0941 
0942     {
0943         QList<vmap::VisualItemController*> vec;
0944         vec.push_back(vmap::VmapItemFactory::createVMapItem(
0945             m_ctrl.get(), Core::SelectableTool::IMAGE,
0946             Helper::buildImageController(":/img/girafe3.jpg", QRectF(0, 0, 100, 100), QPointF(2000, 2000))));
0947         vec.push_back(vmap::VmapItemFactory::createVMapItem(
0948             m_ctrl.get(), Core::SelectableTool::IMAGE,
0949             Helper::buildImageController(":/img/lion3.jpg", QRectF(0, 0, 700, 700), QPointF(300, 300))));
0950         QTest::addRow("cmd33") << vec << VectorialMapController::Bigger << QPointF() << QRectF(0, 0, 700, 700) << 1;
0951     }
0952     {
0953         QList<vmap::VisualItemController*> vec;
0954         vec.push_back(vmap::VmapItemFactory::createVMapItem(
0955             m_ctrl.get(), Core::SelectableTool::IMAGE,
0956             Helper::buildImageController(":/img/girafe3.jpg", QRectF(0, 0, 100, 100), QPointF(2000, 2000))));
0957         vec.push_back(vmap::VmapItemFactory::createVMapItem(
0958             m_ctrl.get(), Core::SelectableTool::IMAGE,
0959             Helper::buildImageController(":/img/lion3.jpg", QRectF(0, 0, 700, 700), QPointF(300, 300))));
0960         QTest::addRow("cmd34") << vec << VectorialMapController::Smaller << QPointF() << QRectF(0, 0, 100, 100) << 1;
0961     }
0962     {
0963         QList<vmap::VisualItemController*> vec;
0964         vec.push_back(vmap::VmapItemFactory::createVMapItem(
0965             m_ctrl.get(), Core::SelectableTool::IMAGE,
0966             Helper::buildImageController(":/img/girafe3.jpg", QRectF(0, 0, 100, 100), QPointF(2000, 2000))));
0967         vec.push_back(vmap::VmapItemFactory::createVMapItem(
0968             m_ctrl.get(), Core::SelectableTool::IMAGE,
0969             Helper::buildImageController(":/img/lion3.jpg", QRectF(0, 0, 700, 700), QPointF(300, 300))));
0970         QTest::addRow("cmd35") << vec << VectorialMapController::UnderMouse << QPointF(2010, 2010)
0971                                << QRectF(0, 0, 100, 100) << 1;
0972     }
0973     {
0974         QList<vmap::VisualItemController*> vec;
0975         vec.push_back(vmap::VmapItemFactory::createVMapItem(
0976             m_ctrl.get(), Core::SelectableTool::IMAGE,
0977             Helper::buildImageController(":/img/girafe3.jpg", QRectF(0, 0, 100, 100), QPointF(2000, 2000))));
0978         vec.push_back(vmap::VmapItemFactory::createVMapItem(
0979             m_ctrl.get(), Core::SelectableTool::IMAGE,
0980             Helper::buildImageController(":/img/lion3.jpg", QRectF(0, 0, 700, 700), QPointF(300, 300))));
0981         QTest::addRow("cmd36") << vec << VectorialMapController::UnderMouse << QPointF(310, 310)
0982                                << QRectF(0, 0, 700, 700) << 1;
0983     }
0984     {
0985         QList<vmap::VisualItemController*> vec;
0986         vec.push_back(vmap::VmapItemFactory::createVMapItem(
0987             m_ctrl.get(), Core::SelectableTool::IMAGE,
0988             Helper::buildImageController(":/img/girafe3.jpg", QRectF(0, 0, 100, 100), QPointF(2000, 2000))));
0989         vec.push_back(vmap::VmapItemFactory::createVMapItem(
0990             m_ctrl.get(), Core::SelectableTool::IMAGE,
0991             Helper::buildImageController(":/img/lion3.jpg", QRectF(0, 0, 700, 700), QPointF(300, 300))));
0992         QTest::addRow("cmd37") << vec << VectorialMapController::Average << QPointF() << QRectF(0, 0, 400, 400) << 1;
0993     }
0994 }
0995 
0996 void VectorialMapControllerTest::serialization()
0997 {
0998     using CustomMap= std::map<QString, QVariant>;
0999     QFETCH(QList<CustomMap>, list);
1000 
1001     for(const auto& item : list)
1002     {
1003         m_ctrl->insertItemAt(item);
1004     }
1005 
1006     auto byteArray= IOHelper::saveController(m_ctrl.get());
1007 
1008     VectorialMapController* ctrl2= new VectorialMapController();
1009 
1010     VectorialMapMessageHelper::readVectorialMapController(ctrl2, byteArray);
1011 
1012     QCOMPARE(ctrl2->model()->rowCount(), m_ctrl->model()->rowCount());
1013 }
1014 void VectorialMapControllerTest::serialization_data()
1015 {
1016     using CustomMap= std::map<QString, QVariant>;
1017     QTest::addColumn<QList<CustomMap>>("list");
1018 
1019     std::vector<Core::SelectableTool> data(
1020         {Core::SelectableTool::FILLRECT, Core::SelectableTool::LINE, Core::SelectableTool::EMPTYELLIPSE,
1021          Core::SelectableTool::EMPTYRECT, Core::SelectableTool::FILLEDELLIPSE, Core::SelectableTool::IMAGE,
1022          Core::SelectableTool::TEXT, Core::SelectableTool::TEXTBORDER, Core::SelectableTool::PATH});
1023     /// TODO add:    Core::SelectableTool::PlayableCharacter, Core::SelectableTool::NonPlayableCharacter
1024 
1025     // auto list = new std::vector<CleverURI*>();
1026     QList<CustomMap> list;
1027 
1028     int index= 0;
1029     for(unsigned int i= 0; i < data.size(); ++i)
1030     {
1031         auto comb_size= i + 1;
1032         do
1033         {
1034             list.clear();
1035             for(auto it= data.begin(); it < data.begin() + comb_size; ++it)
1036             {
1037                 CustomMap map;
1038                 switch(*it)
1039                 {
1040                 case Core::SelectableTool::FILLRECT:
1041                     map= Helper::buildRectController(true, {0, 0, 200, 200});
1042                     break;
1043                 case Core::SelectableTool::LINE:
1044                     map= Helper::buildLineController({100, 100}, {500, 100}, {});
1045                     break;
1046                 case Core::SelectableTool::EMPTYELLIPSE:
1047                     map= Helper::buildEllipseController(false, 200., 100., {500., 100.});
1048                     break;
1049                 case Core::SelectableTool::EMPTYRECT:
1050                     map= Helper::buildRectController(false, {0, 0, 200, 200}, {300, 200});
1051                     break;
1052                 case Core::SelectableTool::FILLEDELLIPSE:
1053                     map= Helper::buildEllipseController(true, 200., 100., {500., 100.});
1054                     break;
1055                 case Core::SelectableTool::IMAGE:
1056                     map= Helper::buildImageController(":/img/girafe.jpg", {0, 0, 200, 200});
1057                     break;
1058                 case Core::SelectableTool::TEXT:
1059                     map= Helper::buildTextController(false, "Text without border", {0, 0, 200, 200});
1060                     break;
1061                 case Core::SelectableTool::TEXTBORDER:
1062                     map= Helper::buildTextController(true, "Text with border", {0, 0, 200, 200});
1063                     break;
1064                 case Core::SelectableTool::PATH:
1065                     map= Helper::buildPathController(true, {{0, 0}, {10, 10}, {20, 0}, {30, 10}}, {0, 0});
1066                     break;
1067                 default:
1068                     break;
1069                 }
1070                 list.append(map);
1071             }
1072             QTest::addRow("save %d", ++index) << list;
1073         } while(Helper::next_combination(data.begin(), data.begin() + comb_size, data.end()));
1074     }
1075 }
1076 
1077 void VectorialMapControllerTest::serialization300()
1078 {
1079     using CustomMap= std::map<QString, QVariant>;
1080     QFETCH(QList<CustomMap>, list);
1081 
1082     for(const auto& item : list)
1083     {
1084         m_ctrl->insertItemAt(item);
1085     }
1086 
1087     auto byteArray= IOHelper::saveController(m_ctrl.get());
1088     auto firstSize= byteArray.size();
1089 
1090     VectorialMapController* ctrl2= new VectorialMapController();
1091 
1092     VectorialMapMessageHelper::readVectorialMapController(ctrl2, byteArray);
1093 
1094     QCOMPARE(ctrl2->model()->rowCount(), m_ctrl->model()->rowCount());
1095 
1096     for(int i= 0; i < 10; ++i)
1097     {
1098         byteArray= IOHelper::saveController(ctrl2);
1099 
1100         QCOMPARE(firstSize, byteArray.size());
1101 
1102         delete ctrl2;
1103         ctrl2= new VectorialMapController();
1104         VectorialMapMessageHelper::readVectorialMapController(ctrl2, byteArray);
1105     }
1106     delete ctrl2;
1107 }
1108 
1109 void VectorialMapControllerTest::serialization300_data()
1110 {
1111     using CustomMap= std::map<QString, QVariant>;
1112     QTest::addColumn<QList<CustomMap>>("list");
1113 
1114     std::vector<Core::SelectableTool> data(
1115         {Core::SelectableTool::FILLRECT, Core::SelectableTool::LINE, Core::SelectableTool::EMPTYELLIPSE,
1116          Core::SelectableTool::EMPTYRECT, Core::SelectableTool::FILLEDELLIPSE, Core::SelectableTool::IMAGE,
1117          Core::SelectableTool::TEXT, Core::SelectableTool::TEXTBORDER, Core::SelectableTool::PATH});
1118 
1119     /// TODO add:    Core::SelectableTool::PlayableCharacter, Core::SelectableTool::NonPlayableCharacter
1120 
1121     // auto list = new std::vector<CleverURI*>();
1122     QList<CustomMap> list;
1123 
1124     int index= 0;
1125     for(unsigned int i= 0; i < data.size(); ++i)
1126     {
1127         auto comb_size= i + 1;
1128         do
1129         {
1130             list.clear();
1131             for(auto it= data.begin(); it < data.begin() + comb_size; ++it)
1132             {
1133                 CustomMap map;
1134                 switch(*it)
1135                 {
1136                 case Core::SelectableTool::FILLRECT:
1137                     map= Helper::buildRectController(true, {0, 0, 200, 200});
1138                     break;
1139                 case Core::SelectableTool::LINE:
1140                     map= Helper::buildLineController({100, 100}, {500, 100}, {});
1141                     break;
1142                 case Core::SelectableTool::EMPTYELLIPSE:
1143                     map= Helper::buildEllipseController(false, 200., 100., {500., 100.});
1144                     break;
1145                 case Core::SelectableTool::EMPTYRECT:
1146                     map= Helper::buildRectController(false, {0, 0, 200, 200}, {300, 200});
1147                     break;
1148                 case Core::SelectableTool::FILLEDELLIPSE:
1149                     map= Helper::buildEllipseController(true, 200., 100., {500., 100.});
1150                     break;
1151                 case Core::SelectableTool::IMAGE:
1152                     map= Helper::buildImageController(":/img/girafe.jpg", {0, 0, 200, 200});
1153                     break;
1154                 case Core::SelectableTool::TEXT:
1155                     map= Helper::buildTextController(false, "Text without border", {0, 0, 200, 200});
1156                     break;
1157                 case Core::SelectableTool::TEXTBORDER:
1158                     map= Helper::buildTextController(true, "Text with border", {0, 0, 200, 200});
1159                     break;
1160                 case Core::SelectableTool::PATH:
1161                     map= Helper::buildPathController(true, {{0, 0}, {10, 10}, {20, 0}, {30, 10}}, {0, 0});
1162                     break;
1163                 default:
1164                     break;
1165                 }
1166                 list.append(map);
1167             }
1168             QTest::addRow("save %d", ++index) << list;
1169         } while(Helper::next_combination(data.begin(), data.begin() + comb_size, data.end()));
1170     }
1171 }
1172 
1173 void VectorialMapControllerTest::serialization_network()
1174 {
1175     using CustomMap= std::map<QString, QVariant>;
1176     QFETCH(CustomMap, map);
1177     QFETCH(Core::SelectableTool, tool);
1178 
1179     auto itemCtrl = vmap::VmapItemFactory::createVMapItem(m_ctrl.get(), tool, map);
1180 
1181 
1182     NetworkMessageWriter msg(NetMsg::VMapCategory, NetMsg::AddItem);
1183     msg.string8(m_ctrl->uuid());
1184     MessageHelper::convertVisualItemCtrlAndAdd(itemCtrl, msg);
1185 
1186 
1187     NetworkMessageReader reader;
1188     reader.setData(msg.data());
1189 
1190     auto itemCtrl2 = vmap::VmapItemFactory::createRemoteVMapItem(m_ctrl.get(), &reader);
1191 
1192     QCOMPARE(itemCtrl->uuid(), itemCtrl2->uuid());
1193     QCOMPARE(itemCtrl->itemType(), itemCtrl2->itemType());
1194     QCOMPARE(itemCtrl->color(), itemCtrl2->color());
1195     QCOMPARE(itemCtrl->rect(), itemCtrl2->rect());
1196     QCOMPARE(itemCtrl->pos(), itemCtrl2->pos());
1197     QCOMPARE(itemCtrl->layer(), itemCtrl2->layer());
1198     QCOMPARE(itemCtrl->locked(), itemCtrl2->locked());
1199     QCOMPARE(itemCtrl->tool(), itemCtrl2->tool());
1200     QCOMPARE(itemCtrl->rotation(), itemCtrl2->rotation());
1201 }
1202 
1203 void VectorialMapControllerTest::serialization_network_data()
1204 {
1205     using CustomMap= std::map<QString, QVariant>;
1206     QTest::addColumn<CustomMap>("map");
1207     QTest::addColumn<Core::SelectableTool>("tool");
1208 
1209 
1210     std::vector<Core::SelectableTool> data(
1211         {Core::SelectableTool::FILLRECT, Core::SelectableTool::LINE, Core::SelectableTool::EMPTYELLIPSE,
1212          Core::SelectableTool::EMPTYRECT, Core::SelectableTool::FILLEDELLIPSE, Core::SelectableTool::IMAGE,
1213          Core::SelectableTool::NonPlayableCharacter,
1214          Core::SelectableTool::TEXT, Core::SelectableTool::TEXTBORDER, Core::SelectableTool::PATH});
1215 
1216     int i = 0;
1217     for(auto tool : data)
1218     {
1219         CustomMap map;
1220         switch(tool)
1221         {
1222         case Core::SelectableTool::FILLRECT:
1223             map= Helper::buildRectController(true, {0, 0, 200, 200});
1224             break;
1225         case Core::SelectableTool::LINE:
1226             map= Helper::buildLineController({100, 100}, {500, 100}, {});
1227             break;
1228         case Core::SelectableTool::EMPTYELLIPSE:
1229             map= Helper::buildEllipseController(false, 200., 100., {500., 100.});
1230             break;
1231         case Core::SelectableTool::EMPTYRECT:
1232             map= Helper::buildRectController(false, {0, 0, 200, 200}, {300, 200});
1233             break;
1234         case Core::SelectableTool::FILLEDELLIPSE:
1235             map= Helper::buildEllipseController(true, 200., 100., {500., 100.});
1236             break;
1237         case Core::SelectableTool::IMAGE:
1238             map= Helper::buildImageController(":/img/girafe.jpg", {0, 0, 200, 200});
1239             break;
1240         case Core::SelectableTool::TEXT:
1241             map= Helper::buildTextController(false, "Text without border", {0, 0, 200, 200});
1242             break;
1243         case Core::SelectableTool::TEXTBORDER:
1244             map= Helper::buildTextController(true, "Text with border", {0, 0, 200, 200});
1245             break;
1246         case Core::SelectableTool::PATH:
1247             map= Helper::buildPathController(true, {{0, 0}, {10, 10}, {20, 0}, {30, 10}}, {0, 0});
1248             break;
1249         case Core::SelectableTool::NonPlayableCharacter:
1250             map= Helper::buildTokenController(true, {150, 150});
1251             break;
1252         default:
1253             break;
1254         }
1255         QTest::addRow("save %d", ++i) << map << tool;
1256     }
1257 }
1258 
1259 void VectorialMapControllerTest::networkMessage()
1260 {
1261     using CustomMap= std::map<QString, QVariant>;
1262     QFETCH(QList<CustomMap>, list);
1263 
1264     for(const auto& item : list)
1265     {
1266         m_ctrl->insertItemAt(item);
1267     }
1268     m_ctrl->setIdle(true);
1269 
1270     MessageHelper::sendOffVMap(m_ctrl.get());
1271     auto byteArray= m_sender->messageData();
1272 
1273     NetworkMessageReader msg;
1274     msg.setData(byteArray);
1275 
1276     auto type= static_cast<Core::ContentType>(msg.uint8());
1277     auto mediabase= Media::MediaFactory::createRemoteMedia(type, &msg, Qt::red, false);
1278     auto ctrl= dynamic_cast<VectorialMapController*>(mediabase);
1279 
1280     QCOMPARE(ctrl->scaleUnit(), m_ctrl->scaleUnit());
1281     QCOMPARE(ctrl->collision(), m_ctrl->collision());
1282     QCOMPARE(ctrl->gridColor(), m_ctrl->gridColor());
1283     QCOMPARE(ctrl->gridScale(), m_ctrl->gridScale());
1284     QCOMPARE(ctrl->gridSize(), m_ctrl->gridSize());
1285     QCOMPARE(ctrl->gridVisibility(), m_ctrl->gridVisibility());
1286     QCOMPARE(ctrl->gridAbove(), m_ctrl->gridAbove());
1287     QCOMPARE(ctrl->permission(), m_ctrl->permission());
1288     QCOMPARE(ctrl->gridPattern(), m_ctrl->gridPattern());
1289     QCOMPARE(ctrl->visibility(), m_ctrl->visibility());
1290     QCOMPARE(ctrl->backgroundColor(), m_ctrl->backgroundColor());
1291     QCOMPARE(ctrl->penSize(), m_ctrl->penSize());
1292     QCOMPARE(ctrl->npcNumber(), m_ctrl->npcNumber());
1293     QCOMPARE(ctrl->layer(), m_ctrl->layer());
1294     QCOMPARE(ctrl->opacity(), m_ctrl->opacity());
1295     QCOMPARE(ctrl->idle(), m_ctrl->idle());
1296     QCOMPARE(ctrl->zIndex(), m_ctrl->zIndex());
1297     QCOMPARE(ctrl->model()->rowCount(), m_ctrl->model()->rowCount());
1298 
1299     delete mediabase;
1300 }
1301 
1302 void VectorialMapControllerTest::propertiesTest()
1303 {
1304     auto res= Helper::testAllProperties(m_ctrl.get());
1305     /*for(const auto& f : res.second)
1306     {
1307         qDebug() << f;
1308     }*/
1309 }
1310 
1311 void VectorialMapControllerTest::networkMessage_data()
1312 {
1313     using CustomMap= std::map<QString, QVariant>;
1314     QTest::addColumn<QList<CustomMap>>("list");
1315 
1316     std::vector<Core::SelectableTool> data(
1317         {Core::SelectableTool::FILLRECT, Core::SelectableTool::LINE, Core::SelectableTool::EMPTYELLIPSE,
1318          Core::SelectableTool::EMPTYRECT, Core::SelectableTool::FILLEDELLIPSE, Core::SelectableTool::IMAGE,
1319          Core::SelectableTool::TEXT, Core::SelectableTool::TEXTBORDER, Core::SelectableTool::PATH});
1320     /// TODO add:    Core::SelectableTool::PlayableCharacter, Core::SelectableTool::NonPlayableCharacter
1321 
1322     // auto list = new std::vector<CleverURI*>();
1323     QList<CustomMap> list;
1324 
1325     int index= 0;
1326     for(unsigned int i= 0; i < data.size(); ++i)
1327     {
1328         auto comb_size= i + 1;
1329         do
1330         {
1331             list.clear();
1332             for(auto it= data.begin(); it < data.begin() + comb_size; ++it)
1333             {
1334                 CustomMap map;
1335                 switch(*it)
1336                 {
1337                 case Core::SelectableTool::FILLRECT:
1338                     map= Helper::buildRectController(true, {0, 0, 200, 200});
1339                     break;
1340                 case Core::SelectableTool::LINE:
1341                     map= Helper::buildLineController({100, 100}, {500, 100}, {});
1342                     break;
1343                 case Core::SelectableTool::EMPTYELLIPSE:
1344                     map= Helper::buildEllipseController(false, 200., 100., {500., 100.});
1345                     break;
1346                 case Core::SelectableTool::EMPTYRECT:
1347                     map= Helper::buildRectController(false, {0, 0, 200, 200}, {300, 200});
1348                     break;
1349                 case Core::SelectableTool::FILLEDELLIPSE:
1350                     map= Helper::buildEllipseController(true, 200., 100., {500., 100.});
1351                     break;
1352                 case Core::SelectableTool::IMAGE:
1353                     map= Helper::buildImageController(":/img/girafe.jpg", {0, 0, 200, 200});
1354                     break;
1355                 case Core::SelectableTool::TEXT:
1356                     map= Helper::buildTextController(false, "Text without border", {0, 0, 200, 200});
1357                     break;
1358                 case Core::SelectableTool::TEXTBORDER:
1359                     map= Helper::buildTextController(true, "Text with border", {0, 0, 200, 200});
1360                     break;
1361                 case Core::SelectableTool::PATH:
1362                     map= Helper::buildPathController(true, {{0, 0}, {10, 10}, {20, 0}, {30, 10}}, {0, 0});
1363                     break;
1364                 default:
1365                     break;
1366                 }
1367                 list.append(map);
1368             }
1369             QTest::addRow("save %d", ++index) << list;
1370         } while(Helper::next_combination(data.begin(), data.begin() + comb_size, data.end()));
1371     }
1372 }
1373 
1374 QTEST_MAIN(VectorialMapControllerTest);
1375 
1376 #include "tst_vectorialmapcontrollertest.moc"