diff --git a/CMakeLists.txt b/CMakeLists.txt index 7c4eeaf..64eef2b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -5,7 +5,6 @@ set(CMAKE_CXX_STANDARD 26) find_package(ftxui CONFIG REQUIRED) -add_executable(uno-game src/main.cpp) add_executable(uno-game src/main.cpp src/game/Card.cpp src/game/CardTile.cpp @@ -15,4 +14,11 @@ target_link_libraries(uno-game PRIVATE ftxui::screen PRIVATE ftxui::dom PRIVATE ftxui::component -) \ No newline at end of file +) + +add_library(uno-game-lib src/game/Card.cpp + src/game/CardTile.cpp + src/common/utils.cpp +) + +add_subdirectory(test) \ No newline at end of file diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt new file mode 100644 index 0000000..9c631bf --- /dev/null +++ b/test/CMakeLists.txt @@ -0,0 +1,19 @@ +cmake_minimum_required(VERSION 4.0) +find_package(GTest REQUIRED) + +set(CMAKE_CXX_STANDARD 26) + +project(uno-game-test) + +add_executable(uno-game-test unit/game/CardTest.cpp) + +target_link_libraries(uno-game-test + PUBLIC uno-game-lib +) +target_link_libraries(uno-game-test + PRIVATE GTest::gtest + PRIVATE GTest::gtest_main +) + +include(GoogleTest) +gtest_discover_tests(uno-game-test) diff --git a/test/unit/game/CardTest.cpp b/test/unit/game/CardTest.cpp new file mode 100644 index 0000000..6e764e4 --- /dev/null +++ b/test/unit/game/CardTest.cpp @@ -0,0 +1,63 @@ +/** + * @file + * + * @author Yuzhe Guo + * @date 2025.11.15 + */ + +#include "gtest/gtest.h" +#include "../../../src/game/Card.h" + +TEST(card_test, card_test_1) +{ + const UNO::GAME::Card card(UNO::GAME::CardColor::RED, UNO::GAME::CardType::NUM0); + + EXPECT_EQ(card.getColor(), UNO::GAME::CardColor::RED); + EXPECT_EQ(card.getType(), UNO::GAME::CardType::NUM0); + EXPECT_EQ(card.colorToString(), std::string("Red")); + EXPECT_EQ(card.typeToString(), std::string("0")); + EXPECT_EQ(card.toString(), std::string("Red 0")); +} + +TEST(card_test, card_test_2) +{ + const UNO::GAME::Card card(UNO::GAME::CardColor::BLUE, UNO::GAME::CardType::REVERSE); + + EXPECT_EQ(card.getColor(), UNO::GAME::CardColor::BLUE); + EXPECT_EQ(card.getType(), UNO::GAME::CardType::REVERSE); + EXPECT_EQ(card.colorToString(), std::string("Blue")); + EXPECT_EQ(card.typeToString(), std::string("Reverse")); + EXPECT_EQ(card.toString(), std::string("Blue Reverse")); +} + +TEST(card_test, card_test_3) +{ + const UNO::GAME::Card card(UNO::GAME::CardColor::WILD, UNO::GAME::CardType::WILD); + + EXPECT_EQ(card.getColor(), UNO::GAME::CardColor::WILD); + EXPECT_EQ(card.getType(), UNO::GAME::CardType::WILD); + EXPECT_EQ(card.colorToString(), std::string("Wild")); + EXPECT_EQ(card.typeToString(), std::string("Wild")); + EXPECT_EQ(card.toString(), std::string("Wild")); +} + +TEST(card_test, card_test_4) +{ + const UNO::GAME::Card card(UNO::GAME::CardColor::WILD, UNO::GAME::CardType::WILDDRAWFOUR); + + EXPECT_EQ(card.getColor(), UNO::GAME::CardColor::WILD); + EXPECT_EQ(card.getType(), UNO::GAME::CardType::WILDDRAWFOUR); + EXPECT_EQ(card.colorToString(), std::string("Wild")); + EXPECT_EQ(card.typeToString(), std::string("Wild Draw 4")); + EXPECT_EQ(card.toString(), std::string("Wild Draw 4")); +} + +TEST(card_test, card_test_5) +{ + EXPECT_THROW(UNO::GAME::Card(UNO::GAME::CardColor::WILD, UNO::GAME::CardType::NUM0), std::invalid_argument); +} + +TEST(card_test, card_test_6) +{ + EXPECT_THROW(UNO::GAME::Card(UNO::GAME::CardColor::RED, UNO::GAME::CardType::WILD), std::invalid_argument); +} \ No newline at end of file