
commit e946bf124602f224ce0e371ba1374f0355b537eb
Merge: d6a4e64
4505909
Author: Rosemary Witchaven <32779090+in1tiate@users.noreply.github.com>
Date: Fri Jan 28 19:43:36 2022 -0600
Merge pull request #225 from Salanto/Dynamic-Area-Musiclist-Take2
Allow users to add custom songs to the music list on a per-area basis
commit 45059092d2888b60912f721e43a380910d10ccd8
Author: Salanto <62221668+Salanto@users.noreply.github.com>
Date: Mon Jan 24 22:05:27 2022 +0100
TIL what a typedef is
commit 02584db9640fff0a1969a7f516c4bccfae9b5388
Author: Salanto <62221668+Salanto@users.noreply.github.com>
Date: Mon Jan 24 21:39:17 2022 +0100
Not all OR are equal. Explain weird command splitting
Remove hardcoded URLs
commit d00ebd5692296cd0c29dd377113b53fe0e7b99c0
Author: Salanto <62221668+Salanto@users.noreply.github.com>
Date: Mon Jan 24 21:28:08 2022 +0100
Salanto PR Language Update by in1tiate
As usual, my English is absolutely unreadable.
Co-authored-by: Rosemary Witchaven <32779090+in1tiate@users.noreply.github.com>
commit d3842106e06350dc02d8864bb28232fdc5643f00
Author: Salanto <62221668+Salanto@users.noreply.github.com>
Date: Mon Jan 24 20:35:32 2022 +0100
Add missing config file + document commands for help
commit ac64360e1c1741023b01052977de77a7d5ea4f8c
Author: Salanto <62221668+Salanto@users.noreply.github.com>
Date: Mon Jan 24 19:52:13 2022 +0100
Minor improvements to command usage and addition of clear command
commit c614578e78ce9afa0c8e22aa36bdf46a70a97169
Author: Salanto <62221668+Salanto@users.noreply.github.com>
Date: Sun Jan 23 22:19:54 2022 +0100
Purge last traces of old songInformation system
commit 07618761f044a13d75587b28a9c994342a5980e2
Author: Salanto <62221668+Salanto@users.noreply.github.com>
Date: Sun Jan 23 22:10:54 2022 +0100
Working version, needs some refinement and debugging in AOClient
commit 33c0358c98c0fd2de805356a9aa3ac7bbed204e1
Author: Salanto <62221668+Salanto@users.noreply.github.com>
Date: Sun Jan 23 21:48:05 2022 +0100
Almost functional implementation
Now only need to determine why I can't play the customs yet
commit b0acbace78b3f16f2fe4f3c6f65a422e3343f992
Author: Salanto <62221668+Salanto@users.noreply.github.com>
Date: Sun Jan 23 15:26:42 2022 +0100
Fix build error, expand validation test slightly
commit a48c4f503998ce8e42f0bb409c5a3c7dc5e40329
Author: Salanto <62221668+Salanto@users.noreply.github.com>
Date: Sun Jan 23 01:03:27 2022 +0100
Add commands
commit 88ab0b473953873166e291e5009b97df31547b3f
Author: Salanto <62221668+Salanto@users.noreply.github.com>
Date: Sat Jan 22 15:10:26 2022 +0100
Float sucks, int has to be good enough
+ add retrival of song information
commit e924e1340be1a0909eba84072f1646fe9770bd02
Author: Salanto <62221668+Salanto@users.noreply.github.com>
Date: Thu Jan 20 22:28:35 2022 +0100
Fix removing moving
Add necessary tests
commit 3df088f8d07ce7e0d8fe08b6a97608a623e6ef97
Author: Salanto <62221668+Salanto@users.noreply.github.com>
Date: Wed Jan 19 19:34:16 2022 +0100
Start work on adding this shit into commands
commit c293ecfa99d1b2bd1e0b34cb8752d69b2eca057c
Author: Salanto <62221668+Salanto@users.noreply.github.com>
Date: Tue Jan 18 19:07:11 2022 +0100
Fix typo and add singal for incremental upgrades
commit 10a42322e1e23af5795278a40b2ac59f3ab952ef
Author: Salanto <62221668+Salanto@users.noreply.github.com>
Date: Tue Jan 18 06:17:51 2022 +0100
Hookup packet sending to music manager
This might sound like a bad idea on first glance, but otherwise it breaks the AreaData tests and I am NOT gonna try to fix those without even understanding why they break.
commit 319836296374162b0b847432e8a626778317b869
Author: Salanto <62221668+Salanto@users.noreply.github.com>
Date: Tue Jan 18 06:17:51 2022 +0100
Enraged comments, make area send FM packet
Revert "Enraged comments, make area send FM packet"
This reverts commit ec7a1a25646b2c2acc8a3a748b853851cc47d205.
commit 224a0d7efe989a5f336167c3f716061813f93ee3
Author: Salanto <62221668+Salanto@users.noreply.github.com>
Date: Tue Jan 18 05:10:18 2022 +0100
Change packet communication from area to client
First steps to hookup the custom musiclist.
commit 65aa8f7855a36f2c668b1399a5ed22fefeaf186d
Author: Salanto <62221668+Salanto@users.noreply.github.com>
Date: Mon Jan 17 00:48:38 2022 +0100
Add test for custom list sanitisation.
+ Fix intentionally broken tests
commit 7c00ab437a6ff12033742d029ce49037f5bb1ebe
Author: Salanto <62221668+Salanto@users.noreply.github.com>
Date: Mon Jan 17 00:29:51 2022 +0100
Sanitise the custom list opposed to deleting it
This will fail tests intentionally to test the CI.
commit 80ad401267068e75707b2517a0bf836763141f8b
Author: Salanto <62221668+Salanto@users.noreply.github.com>
Date: Sun Jan 16 17:17:12 2022 +0100
Add custom category capabilities
commit 08d8f5f8f683816ceba532f9c47cd0d5ab34389a
Author: Salanto <62221668+Salanto@users.noreply.github.com>
Date: Sun Jan 16 03:58:18 2022 +0100
Fix music addition and move relevant tests
commit 6ebf0d03b5da61a9c287115009d28038710ba7af
Author: Salanto <62221668+Salanto@users.noreply.github.com>
Date: Sat Jan 15 08:08:20 2022 +0100
Hookup music_manager into server, change default musiclist source for new clients
+ More tests 🆒
commit bd50c62376f131e2508ecdd3e272209894ecaec1
Author: Salanto <62221668+Salanto@users.noreply.github.com>
Date: Sat Jan 15 03:13:42 2022 +0100
Add central song validator for other classes
Also added applicable test cases to ensure proper operation.
254 lines
6.8 KiB
C++
254 lines
6.8 KiB
C++
#include <QtTest>
|
|
|
|
#include <include/area_data.h>
|
|
|
|
Q_DECLARE_METATYPE(AreaData::Side);
|
|
|
|
namespace tests {
|
|
namespace unittests {
|
|
|
|
/**
|
|
* @brief Unit Tester class for the area-related functions.
|
|
*/
|
|
class Area : public QObject
|
|
{
|
|
Q_OBJECT
|
|
|
|
public:
|
|
/**
|
|
* @brief An AreaData pointer to test with.
|
|
*/
|
|
AreaData* m_area;
|
|
|
|
private slots:
|
|
/**
|
|
* @brief Initialises every tests with creating a new area with the title "Test Area", and the index of 0.
|
|
*/
|
|
void init();
|
|
|
|
/**
|
|
* @brief Cleans up the area pointer.
|
|
*/
|
|
void cleanup();
|
|
|
|
/**
|
|
* @test Tests various scenarios of a client joining and leaving, and what it changes on the area.
|
|
*/
|
|
void clientJoinLeave();
|
|
|
|
/**
|
|
* @brief The data function for areaStatuses().
|
|
*/
|
|
void areaStatuses_data();
|
|
|
|
/**
|
|
* @test Tests various attempts at changing area statuses.
|
|
*/
|
|
void areaStatuses();
|
|
|
|
/**
|
|
* @brief The data function for changeHP().
|
|
*/
|
|
void changeHP_data();
|
|
|
|
/**
|
|
* @test Tests changing Confidence bar values for the sides.
|
|
*/
|
|
void changeHP();
|
|
|
|
/**
|
|
* @test Tests changing character in the area.
|
|
*/
|
|
void changeCharacter();
|
|
|
|
void testimony();
|
|
};
|
|
|
|
void Area::init()
|
|
{
|
|
m_area = new AreaData("Test Area", 0, nullptr);
|
|
}
|
|
|
|
void Area::cleanup()
|
|
{
|
|
delete m_area;
|
|
}
|
|
|
|
void Area::clientJoinLeave()
|
|
{
|
|
{
|
|
// There must be exactly one client in the area, and it must have a charid of 5 and userid 0.
|
|
m_area->clientJoinedArea(5,0);
|
|
|
|
QCOMPARE(m_area->joinedIDs().size(), 1);
|
|
QCOMPARE(m_area->charactersTaken().at(0), 5);
|
|
}
|
|
{
|
|
// No clients must be left in the area.
|
|
m_area->clientLeftArea(5,0);
|
|
|
|
QCOMPARE(m_area->joinedIDs().size(), 0);
|
|
}
|
|
}
|
|
|
|
void Area::areaStatuses_data()
|
|
{
|
|
QTest::addColumn<QString>("statusCall");
|
|
QTest::addColumn<AreaData::Status>("expectedStatus");
|
|
QTest::addColumn<bool>("isSuccessful");
|
|
|
|
QTest::newRow("Idle") << "idle" << AreaData::Status::IDLE << true;
|
|
QTest::newRow("RP") << "rp" << AreaData::Status::RP << true;
|
|
QTest::newRow("Casing") << "casing" << AreaData::Status::CASING << true;
|
|
QTest::newRow("Looking for players (long)") << "looking-for-players" << AreaData::Status::LOOKING_FOR_PLAYERS << true;
|
|
QTest::newRow("Looking for players (short)") << "lfp" << AreaData::Status::LOOKING_FOR_PLAYERS << true;
|
|
QTest::newRow("Gaming") << "gaming" << AreaData::Status::GAMING << true;
|
|
QTest::newRow("Recess") << "recess" << AreaData::Status::RECESS << true;
|
|
QTest::newRow("Nonsense") << "blah" << AreaData::Status::IDLE << false;
|
|
}
|
|
|
|
void Area::areaStatuses()
|
|
{
|
|
QFETCH(QString, statusCall);
|
|
QFETCH(AreaData::Status, expectedStatus);
|
|
QFETCH(bool, isSuccessful);
|
|
|
|
bool l_success = m_area->changeStatus(statusCall);
|
|
|
|
QCOMPARE(m_area->status(), expectedStatus);
|
|
QCOMPARE(l_success, isSuccessful);
|
|
}
|
|
|
|
void Area::changeHP_data()
|
|
{
|
|
QTest::addColumn<AreaData::Side>("side");
|
|
QTest::addColumn<int>("setHP");
|
|
QTest::addColumn<int>("expectedHP");
|
|
|
|
QTest::newRow("Set = Expected (DEF)") << AreaData::Side::DEFENCE << 3 << 3;
|
|
QTest::newRow("Set = Expected (PRO)") << AreaData::Side::PROSECUTOR << 5 << 5;
|
|
QTest::newRow("Below Zero (DEF)") << AreaData::Side::DEFENCE << -5 << 0;
|
|
QTest::newRow("Below Zero (PRO)") << AreaData::Side::PROSECUTOR << -7 << 0;
|
|
QTest::newRow("Above Ten (DEF)") << AreaData::Side::DEFENCE << 12 << 10;
|
|
QTest::newRow("Above Ten (PRO)") << AreaData::Side::PROSECUTOR << 14 << 10;
|
|
}
|
|
|
|
void Area::changeHP()
|
|
{
|
|
QFETCH(AreaData::Side, side);
|
|
QFETCH(int, setHP);
|
|
QFETCH(int, expectedHP);
|
|
|
|
m_area->changeHP(side, setHP);
|
|
|
|
if (AreaData::Side::DEFENCE == side) {
|
|
QCOMPARE(expectedHP, m_area->defHP());
|
|
} else {
|
|
QCOMPARE(expectedHP, m_area->proHP());
|
|
}
|
|
}
|
|
|
|
void Area::changeCharacter()
|
|
{
|
|
{
|
|
// A client with a charid of 6 and userid 0 joins. There's only them in there.
|
|
m_area->clientJoinedArea(6,0);
|
|
|
|
QCOMPARE(m_area->charactersTaken().size(), 1);
|
|
QCOMPARE(m_area->charactersTaken().at(0), 6);
|
|
}
|
|
{
|
|
// Charid 7 is marked as taken. No other client in the area still.
|
|
// Charids 6 and 7 are taken.
|
|
m_area->changeCharacter(-1, 7);
|
|
|
|
QCOMPARE(m_area->playerCount(), 1);
|
|
QCOMPARE(m_area->charactersTaken().size(), 2);
|
|
QCOMPARE(m_area->charactersTaken().at(0), 6);
|
|
QCOMPARE(m_area->charactersTaken().at(1), 7);
|
|
}
|
|
{
|
|
// Client switches to charid 8.
|
|
// Charids 8 and 7 are taken.
|
|
m_area->changeCharacter(6, 8);
|
|
|
|
QCOMPARE(m_area->playerCount(), 1);
|
|
QCOMPARE(m_area->charactersTaken().size(), 2);
|
|
QCOMPARE(m_area->charactersTaken().at(0), 7);
|
|
QCOMPARE(m_area->charactersTaken().at(1), 8);
|
|
}
|
|
{
|
|
// Client attempts to switch to 7.
|
|
// Nothing changes, as it is already taken.
|
|
|
|
m_area->changeCharacter(8, 7);
|
|
|
|
QCOMPARE(m_area->playerCount(), 1);
|
|
QCOMPARE(m_area->charactersTaken().size(), 2);
|
|
QCOMPARE(m_area->charactersTaken().at(0), 7);
|
|
QCOMPARE(m_area->charactersTaken().at(1), 8);
|
|
}
|
|
{
|
|
// Charid 7 is unlocked for use.
|
|
// Charid 8 is taken.
|
|
m_area->changeCharacter(7, -1);
|
|
|
|
QCOMPARE(m_area->playerCount(), 1);
|
|
QCOMPARE(m_area->charactersTaken().size(), 1);
|
|
QCOMPARE(m_area->charactersTaken().at(0), 8);
|
|
}
|
|
}
|
|
|
|
void Area::testimony()
|
|
{
|
|
QVector<QStringList> l_testimony = {
|
|
{"A"},
|
|
{"B"},
|
|
{"C"},
|
|
{"D"},
|
|
{"E"},
|
|
};
|
|
|
|
{
|
|
// Add all statements, and check that they're added.
|
|
for (const auto& l_statement : l_testimony)
|
|
{
|
|
m_area->recordStatement(l_statement);
|
|
|
|
QCOMPARE(l_statement, m_area->testimony().at(m_area->statement() - 1));
|
|
}
|
|
}
|
|
{
|
|
// Restart testimony, advance two times.
|
|
m_area->jumpToStatement(1);
|
|
|
|
for (int i = 1; i < l_testimony.size() - 1; i++) {
|
|
const auto& l_results = m_area->jumpToStatement(m_area->statement() + 1);
|
|
|
|
QCOMPARE(l_results.first, l_testimony.at(i + 1));
|
|
QCOMPARE(l_results.second, AreaData::TestimonyProgress::OK);
|
|
}
|
|
}
|
|
{
|
|
// Next advancement loops the testimony.
|
|
const auto& l_results = m_area->jumpToStatement(m_area->statement() + 1);
|
|
|
|
QCOMPARE(l_results.first, l_testimony.at(1));
|
|
QCOMPARE(l_results.second, AreaData::TestimonyProgress::LOOPED);
|
|
}
|
|
{
|
|
// Going back makes the testimony stay at the first statement.
|
|
const auto& l_results = m_area->jumpToStatement(m_area->statement() - 1);
|
|
|
|
QCOMPARE(l_results.first, l_testimony.at(1));
|
|
QCOMPARE(l_results.second, AreaData::TestimonyProgress::STAYED_AT_FIRST);
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
QTEST_APPLESS_MAIN(tests::unittests::Area)
|
|
|
|
#include "tst_unittest_area.moc"
|