diff --git a/source/general/serialization/serializable.h b/source/general/serialization/serializable.h index 89765d9198adaad935320e1c774b023d0adf52d6..59cef4449ca25d5b0a44f343eba01a9f2c95d7a3 100755 --- a/source/general/serialization/serializable.h +++ b/source/general/serialization/serializable.h @@ -1,10 +1,7 @@ -// -// Created by Manuel on 01.02.2021. -// // abstract class for a serializable object. -#ifndef LAMA_SERIALIZABLE_H -#define LAMA_SERIALIZABLE_H +#ifndef BLACKJACK_SERIALIZABLE_H +#define BLACKJACK_SERIALIZABLE_H #include "../../../rapidjson/include/rapidjson/document.h" @@ -21,4 +18,4 @@ public: virtual void write_into_json(rapidjson::Value& json, rapidjson::Document::AllocatorType& allocator) const = 0; }; -#endif //LAMA_SERIALIZABLE_H +#endif diff --git a/unit-tests/hand.cpp b/unit-tests/hand.cpp index 00a9a5368dc12d42323547227dbc3b8612a014a6..d65a54e9cf1a9cda90cbd6f7cbfb58c51f01e12f 100644 --- a/unit-tests/hand.cpp +++ b/unit-tests/hand.cpp @@ -320,8 +320,6 @@ TEST_F(HandTest, IsOver21TrueWithAce) { // Serialization and subsequent deserialization must yield the same object TEST_F(HandTest, SerializationEquality) { - //std::vector<card*> hand_cards = {cards[1][0], cards[2][0], cards[9][0]}; - //hand hand_send(); player_hand.add_card(cards[2][0], err); player_hand.add_card(cards[7][0], err); player_hand.add_card(cards[9][0], err); diff --git a/unit-tests/player.cpp b/unit-tests/player.cpp index 04e59f1668981d18d30486eb375724145ee9c344..1d3f15f73de158cb92fd106a54a0c76f39472f43 100644 --- a/unit-tests/player.cpp +++ b/unit-tests/player.cpp @@ -49,7 +49,6 @@ protected: std::vector<std::vector<card*>> cards; player* player_ = nullptr; - player* player_broke = nullptr; std::string player_name; int bet_size = 0; int money = 100; @@ -184,6 +183,7 @@ TEST_F(PlayerTest, WrapUpRoundWon) { player_->get_hand()->add_card(cards[9][0], err); player_->get_hand()->add_card(cards[8][0], err); player_name = player_->get_player_name(); + finished_turn = player_->has_finished_turn(); std::vector<card*> expected_hand = {cards[2][0], cards[9][0], cards[8][0]}; set_bet_size(*player_, 50); player_->wrap_up_round(18, err); @@ -191,6 +191,7 @@ TEST_F(PlayerTest, WrapUpRoundWon) { EXPECT_EQ(150, player_->get_money()); EXPECT_EQ(expected_hand, player_->get_hand()->get_cards()); EXPECT_EQ(player_name, player_->get_player_name()); + EXPECT_EQ(finished_turn, player_->has_finished_turn()); } // Wrapping up a round for a player who won should call won_round() @@ -201,6 +202,7 @@ TEST_F(PlayerTest, WrapUpRoundWonDealerLost) { player_->get_hand()->add_card(cards[9][0], err); player_->get_hand()->add_card(cards[8][0], err); player_name = player_->get_player_name(); + finished_turn = player_->has_finished_turn(); std::vector<card*> expected_hand = {cards[2][0], cards[9][0], cards[8][0]}; set_bet_size(*player_, 50); player_->wrap_up_round(23, err); @@ -208,6 +210,7 @@ TEST_F(PlayerTest, WrapUpRoundWonDealerLost) { EXPECT_EQ(150, player_->get_money()); EXPECT_EQ(expected_hand, player_->get_hand()->get_cards()); EXPECT_EQ(player_name, player_->get_player_name()); + EXPECT_EQ(finished_turn, player_->has_finished_turn()); } // Wrapping up a round for a player who make a draw should call draw_round() @@ -218,6 +221,7 @@ TEST_F(PlayerTest, WrapUpRoundDraw) { player_->get_hand()->add_card(cards[9][0], err); player_->get_hand()->add_card(cards[8][0], err); player_name = player_->get_player_name(); + finished_turn = player_->has_finished_turn(); std::vector<card*> expected_hand = {cards[2][0], cards[9][0], cards[8][0]}; set_bet_size(*player_, 50); player_->wrap_up_round(19, err); @@ -225,6 +229,7 @@ TEST_F(PlayerTest, WrapUpRoundDraw) { EXPECT_EQ(100, player_->get_money()); EXPECT_EQ(expected_hand, player_->get_hand()->get_cards()); EXPECT_EQ(player_name, player_->get_player_name()); + EXPECT_EQ(finished_turn, player_->has_finished_turn()); } // Wrapping up a round for a player who won should call won_round() @@ -235,6 +240,7 @@ TEST_F(PlayerTest, WrapUpRoundBlackjackWon) { player_->get_hand()->add_card(cards[9][0], err); player_->get_hand()->add_card(cards[8][0], err); player_name = player_->get_player_name(); + finished_turn = player_->has_finished_turn(); std::vector<card*> expected_hand = {cards[4][0], cards[9][0], cards[8][0]}; set_bet_size(*player_, 50); player_->wrap_up_round(20, err); @@ -242,6 +248,7 @@ TEST_F(PlayerTest, WrapUpRoundBlackjackWon) { EXPECT_EQ(150, player_->get_money()); EXPECT_EQ(expected_hand, player_->get_hand()->get_cards()); EXPECT_EQ(player_name, player_->get_player_name()); + EXPECT_EQ(finished_turn, player_->has_finished_turn()); } // Wrapping up a round for a player who make a draw should call draw_round() @@ -252,6 +259,7 @@ TEST_F(PlayerTest, WrapUpRoundBlackjackDraw) { player_->get_hand()->add_card(cards[9][0], err); player_->get_hand()->add_card(cards[8][0], err); player_name = player_->get_player_name(); + finished_turn = player_->has_finished_turn(); std::vector<card*> expected_hand = {cards[4][0], cards[9][0], cards[8][0]}; set_bet_size(*player_, 50); player_->wrap_up_round(21, err); @@ -259,6 +267,7 @@ TEST_F(PlayerTest, WrapUpRoundBlackjackDraw) { EXPECT_EQ(100, player_->get_money()); EXPECT_EQ(expected_hand, player_->get_hand()->get_cards()); EXPECT_EQ(player_name, player_->get_player_name()); + EXPECT_EQ(finished_turn, player_->has_finished_turn()); } // Wrapping up a round for a player who make a draw should call draw_round() @@ -269,6 +278,7 @@ TEST_F(PlayerTest, WrapUpRoundBlackjackLost) { player_->get_hand()->add_card(cards[9][0], err); player_->get_hand()->add_card(cards[8][0], err); player_name = player_->get_player_name(); + finished_turn = player_->has_finished_turn(); std::vector<card*> expected_hand = {cards[6][0], cards[9][0], cards[8][0]}; set_bet_size(*player_, 50); player_->wrap_up_round(21, err); @@ -276,4 +286,38 @@ TEST_F(PlayerTest, WrapUpRoundBlackjackLost) { EXPECT_EQ(50, player_->get_money()); EXPECT_EQ(expected_hand, player_->get_hand()->get_cards()); EXPECT_EQ(player_name, player_->get_player_name()); + EXPECT_EQ(finished_turn, player_->has_finished_turn()); } + +// Serialization and subsequent deserialization must yield the same object +TEST_F(PlayerTest, SerializationEquality) { + player_->get_hand()->add_card(cards[2][0], err); + player_->get_hand()->add_card(cards[7][0], err); + player_->get_hand()->add_card(cards[9][0], err); + std::vector<card*> expected_hand = {cards[2][0], cards[7][0], cards[9][0]}; + rapidjson::Document* json_send = player_->to_json(); + std::string message = json_utils::to_string(json_send); + delete json_send; + + rapidjson::Document json_received = rapidjson::Document(rapidjson::kObjectType); + json_received.Parse(message.c_str()); + player* player_received = player::from_json(json_received); + EXPECT_EQ(player_->get_id(), player_received->get_id()); + EXPECT_EQ(player_->get_player_name(), player_received->get_player_name()); + EXPECT_EQ(player_->get_bet_size(), player_received->get_bet_size()); + EXPECT_EQ(player_->get_money(), player_received->get_money()); + EXPECT_EQ(player_->has_finished_turn(), player_received->has_finished_turn()); + for (int i = 0; i < player_->get_hand()->get_cards().size(); ++i) { + EXPECT_EQ(expected_hand[i]->get_value(), player_->get_hand()->get_cards()[i]->get_value()); + EXPECT_EQ(expected_hand[i]->get_suit(), player_->get_hand()->get_cards()[i]->get_suit()); + } + delete player_received; +} + +// Deserializing an invalid string must throw a BlackjackException +TEST_F(PlayerTest, SerializationException) { + rapidjson::Document json = rapidjson::Document(rapidjson::kObjectType); + json.Parse("not json"); + EXPECT_THROW(player::from_json(json), BlackjackException); +} +