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"