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

0001 
0002 #include "data/character.h"
0003 #include "data/localpersonmodel.h"
0004 #include "data/player.h"
0005 #include "model/charactermodel.h"
0006 #include "model/playermodel.h"
0007 #include <QAbstractItemModelTester>
0008 #include <QtTest/QtTest>
0009 #include <memory>
0010 
0011 class CharacterModelTest : public QObject
0012 {
0013     Q_OBJECT
0014 public:
0015     CharacterModelTest();
0016 
0017 private slots:
0018     void init();
0019     void addTest();
0020     void addTest_data();
0021 
0022     void nameTest();
0023     void nameTest_data();
0024 
0025     void localPersonTest();
0026     void localPersonTest_data();
0027 
0028 private:
0029     std::unique_ptr<PlayerModel> m_playerModel;
0030     std::unique_ptr<CharacterModel> m_characterModel;
0031     std::unique_ptr<LocalPersonModel> m_localPersonModel;
0032 };
0033 
0034 void CharacterModelTest::init()
0035 {
0036     m_playerModel.reset(new PlayerModel());
0037     m_characterModel.reset(new CharacterModel());
0038     m_localPersonModel.reset(new LocalPersonModel());
0039 
0040     new QAbstractItemModelTester(m_playerModel.get());
0041 
0042     m_characterModel->setSourceModel(m_playerModel.get());
0043     m_localPersonModel->setSourceModel(m_playerModel.get());
0044     new QAbstractItemModelTester(m_characterModel.get());
0045     new QAbstractItemModelTester(m_localPersonModel.get());
0046 }
0047 
0048 CharacterModelTest::CharacterModelTest()= default;
0049 
0050 void CharacterModelTest::addTest()
0051 {
0052     QFETCH(int, count);
0053     QFETCH(QVector<Player*>, players);
0054 
0055     m_playerModel->clear();
0056     QVERIFY(m_playerModel->rowCount() == 0);
0057 
0058     for(auto p : players)
0059         m_playerModel->addPlayer(p);
0060 
0061     QCOMPARE(m_characterModel->rowCount(), count);
0062 }
0063 
0064 void CharacterModelTest::addTest_data()
0065 {
0066     QTest::addColumn<int>("count");
0067     QTest::addColumn<QVector<Player*>>("players");
0068 
0069     QTest::addRow("cmd 1") << 0 << QVector<Player*>();
0070 
0071     {
0072         QVector<Player*> players;
0073         players.push_back(new Player("name", QColor(Qt::red), true));
0074         QTest::addRow("cmd 2") << 0 << players;
0075     }
0076 
0077     {
0078         QVector<Player*> players;
0079         auto player= new Player("name", QColor(Qt::red), true);
0080         player->addCharacter("bb", "character", QColor(Qt::blue), "", QHash<QString, QVariant>(), false);
0081         players.push_back(player);
0082         QTest::addRow("cmd 3") << 1 << players;
0083     }
0084 
0085     {
0086         QVector<Player*> players;
0087         auto player= new Player("name", QColor(Qt::red), true);
0088         player->addCharacter(new Character("character", QColor(Qt::blue), true));
0089         players.push_back(player);
0090         QTest::addRow("cmd 4") << 1 << players;
0091     }
0092 
0093     {
0094         QVector<Player*> players;
0095         auto player= new Player("name", QColor(Qt::red), true);
0096         player->addCharacter(new Character("character", QColor(Qt::blue), false));
0097         player->addCharacter(new Character("character2", QColor(Qt::green), false));
0098         players.push_back(player);
0099         QTest::addRow("cmd 5") << 2 << players;
0100     }
0101 
0102     {
0103         QVector<Player*> players;
0104         auto player= new Player("name", QColor(Qt::red), true);
0105         player->addCharacter(new Character("character", QColor(Qt::blue), false));
0106         players.push_back(player);
0107 
0108         auto player2= new Player("name2", QColor(Qt::magenta), true);
0109         player2->addCharacter(new Character("character2", QColor(Qt::green), false));
0110         players.push_back(player2);
0111 
0112         QTest::addRow("cmd 6") << 2 << players;
0113     }
0114 
0115     {
0116         QVector<Player*> players;
0117         auto player= new Player("name", QColor(Qt::red), true);
0118         players.push_back(player);
0119 
0120         auto player2= new Player("name2", QColor(Qt::magenta), true);
0121         player2->addCharacter(new Character("character", QColor(Qt::blue), false));
0122         player2->addCharacter(new Character("character2", QColor(Qt::green), false));
0123         players.push_back(player2);
0124         QTest::addRow("cmd 7") << 2 << players;
0125     }
0126 }
0127 
0128 void CharacterModelTest::nameTest()
0129 {
0130     QFETCH(QString, name);
0131     QFETCH(QString, uuid);
0132     QFETCH(int, count);
0133     QFETCH(QVector<Player*>, players);
0134 
0135     m_playerModel->clear();
0136     QVERIFY(m_playerModel->rowCount() == 0);
0137 
0138     for(auto p : players)
0139         m_playerModel->addPlayer(p);
0140 
0141     QCOMPARE(m_characterModel->rowCount(), count);
0142 
0143     if(count == 0)
0144         return;
0145 
0146     auto index= m_characterModel->index(0, 0, QModelIndex());
0147 
0148     QCOMPARE(index.data(PlayerModel::NameRole).toString(), name);
0149     QCOMPARE(index.data(PlayerModel::IdentifierRole).toString(), uuid);
0150 }
0151 
0152 void CharacterModelTest::nameTest_data()
0153 {
0154     QTest::addColumn<QString>("uuid");
0155     QTest::addColumn<QString>("name");
0156     QTest::addColumn<int>("count");
0157     QTest::addColumn<QVector<Player*>>("players");
0158 
0159     QTest::addRow("cmd 1") << QString() << QString() << 0 << QVector<Player*>();
0160 
0161     {
0162         QVector<Player*> players;
0163         auto player= new Player("name", QColor(Qt::red), true);
0164         auto character= new Character("character", QColor(Qt::blue), true);
0165         character->setUuid("character0");
0166         player->addCharacter(character);
0167         players.push_back(player);
0168         QTest::addRow("cmd 3") << "character0"
0169                                << "character" << 1 << players;
0170     }
0171 
0172     {
0173         QVector<Player*> players;
0174         auto player= new Player("name", QColor(Qt::red), true);
0175         auto character= new Character("character", QColor(Qt::blue), true);
0176         character->setUuid("character0");
0177         player->addCharacter(character);
0178         players.push_back(player);
0179         QTest::addRow("cmd 4") << "character0"
0180                                << "character" << 1 << players;
0181     }
0182 
0183     {
0184         QVector<Player*> players;
0185         auto player= new Player("name", QColor(Qt::red), true);
0186         auto character= new Character("character", QColor(Qt::blue), true);
0187         character->setUuid("character0");
0188         player->addCharacter(character);
0189         player->addCharacter(new Character("character2", QColor(Qt::green), false));
0190         players.push_back(player);
0191         QTest::addRow("cmd 5") << "character0"
0192                                << "character" << 2 << players;
0193     }
0194 
0195     {
0196         QVector<Player*> players;
0197         auto player= new Player("name", QColor(Qt::red), true);
0198         auto character= new Character("character", QColor(Qt::blue), true);
0199         character->setUuid("character0");
0200         player->addCharacter(character);
0201         players.push_back(player);
0202 
0203         auto player2= new Player("name2", QColor(Qt::magenta), true);
0204         player2->addCharacter(new Character("character2", QColor(Qt::green), false));
0205         players.push_back(player2);
0206 
0207         QTest::addRow("cmd 6") << "character0"
0208                                << "character" << 2 << players;
0209     }
0210 
0211     {
0212         QVector<Player*> players;
0213         auto player= new Player("name", QColor(Qt::red), true);
0214         players.push_back(player);
0215 
0216         auto player2= new Player("name2", QColor(Qt::magenta), true);
0217         auto character= new Character("character", QColor(Qt::blue), true);
0218         character->setUuid("character0");
0219         player2->addCharacter(character);
0220         player2->addCharacter(new Character("character2", QColor(Qt::green), false));
0221         players.push_back(player2);
0222         QTest::addRow("cmd 7") << "character0"
0223                                << "character" << 2 << players;
0224     }
0225 }
0226 
0227 void CharacterModelTest::localPersonTest()
0228 {
0229     QFETCH(int, count);
0230     QFETCH(QVector<Player*>, players);
0231 
0232     m_playerModel->clear();
0233     QVERIFY(m_playerModel->rowCount() == 0);
0234 
0235     for(auto p : players)
0236         m_playerModel->addPlayer(p);
0237 
0238     QCOMPARE(m_localPersonModel->rowCount(), count);
0239 }
0240 
0241 void CharacterModelTest::localPersonTest_data()
0242 {
0243     QTest::addColumn<int>("count");
0244     QTest::addColumn<QVector<Player*>>("players");
0245 
0246     QTest::addRow("cmd 1") << 0 << QVector<Player*>();
0247 
0248     {
0249         QVector<Player*> players;
0250         players.push_back(new Player("name", QColor(Qt::red), true));
0251         QTest::addRow("cmd 2") << 1 << players;
0252     }
0253 
0254     {
0255         QVector<Player*> players;
0256         auto player= new Player("name", QColor(Qt::red), true);
0257         player->addCharacter("nn", "character", QColor(Qt::blue), "", QHash<QString, QVariant>(), false);
0258         players.push_back(player);
0259         QTest::addRow("cmd 3") << 2 << players;
0260     }
0261 
0262     {
0263         QVector<Player*> players;
0264         auto player= new Player("name", QColor(Qt::red), true);
0265         player->addCharacter("aa", "character", QColor(Qt::blue), "", QHash<QString, QVariant>(), false);
0266         players.push_back(player);
0267 
0268         player= new Player("name2", QColor(Qt::red), true);
0269         players.push_back(player);
0270         QTest::addRow("cmd 3") << 2 << players;
0271     }
0272 }
0273 
0274 QTEST_MAIN(CharacterModelTest)
0275 
0276 #include "tst_charactermodel.moc"