feat: white box tests

This commit is contained in:
jorenchik 2024-04-12 21:24:30 +03:00
parent 0563475e29
commit 455105351c
5 changed files with 119 additions and 3 deletions

View File

@ -4,6 +4,8 @@
#include <string> #include <string>
Player::Player() {}
Player::Player(uint32_t id, std::string username, Role role, PlayerStatus status): Player::Player(uint32_t id, std::string username, Role role, PlayerStatus status):
id(id), id(id),
username(username), username(username),

View File

@ -18,5 +18,6 @@ struct Player {
PlayerStatus status; PlayerStatus status;
Player(uint32_t id, std::string username, Role role, PlayerStatus status); Player(uint32_t id, std::string username, Role role, PlayerStatus status);
Player();
bool operator==(const Player &other) const; bool operator==(const Player &other) const;
}; };

View File

@ -3,6 +3,9 @@
#include <initializer_list> #include <initializer_list>
#include <vector> #include <vector>
Role::Role(){
}
Role::Role(std::initializer_list<Action> actions): Role(std::vector<Action>(actions)) { Role::Role(std::initializer_list<Action> actions): Role(std::vector<Action>(actions)) {
} }

View File

@ -9,4 +9,5 @@ struct Role {
std::vector<Action> actions; std::vector<Action> actions;
explicit Role(std::vector<Action> actions); explicit Role(std::vector<Action> actions);
Role(std::initializer_list<Action> actions); Role(std::initializer_list<Action> actions);
Role();
}; };

View File

@ -1,9 +1,118 @@
#include "gtest/gtest.h" #include "modules/role.hh"
#include "modules/room.hh"
#include "validation.hh"
TEST(ExampleTest, Example) { #include "gtest/gtest.h"
EXPECT_EQ(1, 1); #include <string>
struct TestFixtures {
static const Action kill;
static const Action heal;
static const Action vote;
static Role role1;
static Event event1;
static Event event2;
static Event event3;
static std::vector<Event> relatedEvents;
static Player player1;
static Player player2;
static Room room1;
};
const Action TestFixtures::kill = Action("kill", true);
const Action TestFixtures::heal = Action("heal", true);
const Action TestFixtures::vote = Action("vote", true);
Role TestFixtures::role1 = Role({vote, kill, heal});
Event TestFixtures::event1 = Event("Event 1", 1710087355, 1, true, {}, {});
Event TestFixtures::event2 = Event("Event 2", 1710087363, 1, true, {kill}, {});
Event TestFixtures::event3 = Event("Event 3", 1710087369, 1, true, {}, {kill});
std::vector<Event> TestFixtures::relatedEvents = std::vector<Event>({event2, event3});
Player TestFixtures::player1 = Player(69, "player1", role1, PlayerStatus::Alive);
Player TestFixtures::player2 = Player(420, "player2", role1, PlayerStatus::Alive);
Room TestFixtures::room1 =
Room(1, "Room 1", 1710087364, RoomStatus::InProgress, std::vector<Player> {player1, player2});
TEST(ValidateActionBranchDecisionTests, ReachesNoActorReturn) {
ValidationStatus status = validate_action(
nullptr, &TestFixtures::kill, &TestFixtures::room1, &TestFixtures::relatedEvents, &TestFixtures::player2);
ASSERT_EQ(ValidationStatus::NoActor, status);
} }
TEST(ValidateActionBranchDecisionTests, ReachesNoActionReturn) {
ValidationStatus status = validate_action(
&TestFixtures::player1, nullptr, &TestFixtures::room1, &TestFixtures::relatedEvents, &TestFixtures::player2);
ASSERT_EQ(ValidationStatus::NoAction, status);
}
TEST(ValidateActionBranchDecisionTests, ReachesNoRoomReturn) {
ValidationStatus status = validate_action(
&TestFixtures::player1, &TestFixtures::kill, nullptr, &TestFixtures::relatedEvents, &TestFixtures::player2);
ASSERT_EQ(ValidationStatus::NoRoom, status);
}
TEST(ValidateActionBranchDecisionTests, ReachesNoRelatedEventsReturn) {
ValidationStatus status = validate_action(
&TestFixtures::player1, &TestFixtures::kill, &TestFixtures::room1, nullptr, &TestFixtures::player2);
ASSERT_EQ(ValidationStatus::NoRelatedEvents, status);
}
TEST(ValidateActionBranchDecisionTests, ReachesNotInTheRoomReturn) {
Room emptyRoom = Room(2, "Room 4", 1710087394, RoomStatus::InProgress, {});
ValidationStatus status = validate_action(
&TestFixtures::player1, &TestFixtures::kill, &emptyRoom, &TestFixtures::relatedEvents, &TestFixtures::player2);
ASSERT_EQ(ValidationStatus::PlayerNotInRoom, status);
}
TEST(ValidateActionBranchDecisionTests, ReachesNoTargetReturn) {
ValidationStatus status = validate_action(
&TestFixtures::player1, &TestFixtures::kill, &TestFixtures::room1, &TestFixtures::relatedEvents, nullptr);
ASSERT_EQ(ValidationStatus::NoTargetPlayerSpecified, status);
}
TEST(ValidateActionBranchDecisionTests, ReachesGameNotInProgressReturn) {
Room roomNotInProgress =
Room(2, "Room 5", 1710087394, RoomStatus::Ended, {TestFixtures::player1, TestFixtures::player2});
ValidationStatus status = validate_action(&TestFixtures::player1,
&TestFixtures::kill,
&roomNotInProgress,
&TestFixtures::relatedEvents,
&TestFixtures::player2);
ASSERT_EQ(ValidationStatus::RoomNotInProgress, status);
}
TEST(ValidateActionBranchDecisionTests, ReachesActionProhibitedReturn) {
std::vector<Event> noAllowingEvent = std::vector<Event>();
ValidationStatus status = validate_action(
&TestFixtures::player1, &TestFixtures::kill, &TestFixtures::room1, &noAllowingEvent, &TestFixtures::player2);
ASSERT_EQ(ValidationStatus::ActionProhibited, status);
}
TEST(ValidateActionBranchDecisionTests, ReachesActionDoesntBelongToTheRoleReturn) {
Role roleWithNoMatchingAction = Role({TestFixtures::vote, TestFixtures::heal});
Player player1 = Player(69, "player1", roleWithNoMatchingAction, PlayerStatus::Alive);
ValidationStatus status = validate_action(
&player1, &TestFixtures::kill, &TestFixtures::room1, &TestFixtures::relatedEvents, &TestFixtures::player2);
ASSERT_EQ(ValidationStatus::ActionDoesNotBelongToRole, status);
}
TEST(ValidateActionBranchDecisionTests, ReachesNoTopLevelReturn) {
ValidationStatus status = validate_action(&TestFixtures::player1,
&TestFixtures::kill,
&TestFixtures::room1,
&TestFixtures::relatedEvents,
&TestFixtures::player2);
ASSERT_EQ(ValidationStatus::ActionValid, status);
}
// TEST(ValidateActionBranchDecisionTests, ReachesNoRoleReturn) {
// TestFixtures &fixtures = TestFixtures::getInstance();
// Role role = Role();
// ValidationStatus status s validate_action(
// &fixtures.player1, &fixtures.kill, &fixtures.room1, &fixtures.relatedEvents, &fixtures.player2);
// std::cout << ValidationStatusUtils::to_string(status) << std::endl;
// ASSERT_EQ(ValidationStatus::NoRole, status);
// }
int main(int argc, char *argv[]) { int main(int argc, char *argv[]) {
testing::InitGoogleTest(&argc, argv); testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS(); return RUN_ALL_TESTS();