diff --git a/Unit testing/CMakeLists.txt b/Unit testing/CMakeLists.txt index b6b2dc5..2b91628 100644 --- a/Unit testing/CMakeLists.txt +++ b/Unit testing/CMakeLists.txt @@ -2,11 +2,13 @@ cmake_minimum_required(VERSION 3.19 FATAL_ERROR) project(UnitTest CXX) +include(CTest) include(../external/catch2/extras/Catch.cmake) -add_executable(UnitTest adummy.cpp +add_executable(UnitTest characteristics_tests.cpp billy_objects_tests.cpp + sheet_tests.cpp ) set_target_properties(Catch2 UnitTest PROPERTIES @@ -14,7 +16,7 @@ set_target_properties(Catch2 UnitTest PROPERTIES CXX_STANDARD_REQUIRED ON CXX_EXTENSIONS OFF INTERPROCEDURAL_OPTIMIZATION_RELEASE ON - UNITY_BUILD ON + # UNITY_BUILD ON ) target_include_directories(UnitTest PRIVATE ${CMAKE_SOURCE_DIR}/include) target_compile_definitions(UnitTest PRIVATE ${DEF_COMP}) diff --git a/Unit testing/adummy.cpp b/Unit testing/adummy.cpp deleted file mode 100644 index c4be9a8..0000000 --- a/Unit testing/adummy.cpp +++ /dev/null @@ -1,3 +0,0 @@ -#define CATCH_CONFIG_MAIN - -#include \ No newline at end of file diff --git a/Unit testing/billy_objects_tests.cpp b/Unit testing/billy_objects_tests.cpp index 904a393..afeb14d 100644 --- a/Unit testing/billy_objects_tests.cpp +++ b/Unit testing/billy_objects_tests.cpp @@ -20,12 +20,14 @@ namespace character::test { void from_json(const json &j, DummyObject &dummy) { BillyObjects::from_json(j, dummy.objects); } + static std::unique_ptr get_obj(const billyEnums &object) noexcept { return std::visit(overloaded{ [](const weapons &arg) { return std::unique_ptr(std::make_unique(arg)); }, [](const equipments &arg) { return std::unique_ptr(std::make_unique(arg)); }, [](const tools &arg) { return std::unique_ptr(std::make_unique(arg)); }, - }, object); + }, + object); } } @@ -39,9 +41,7 @@ TEST_CASE("[C] Serialize empty BillyObjects", "[serialize][0]") { serializer.clear(); REQUIRE_NOTHROW(tester.empty() == true); - REQUIRE(tester.empty()); - - { + REQUIRE(tester.empty()); { std::ofstream file{ "billy_objects_empty.json" }; file << tester << std::flush; } @@ -49,8 +49,7 @@ TEST_CASE("[C] Serialize empty BillyObjects", "[serialize][0]") { TEST_CASE("[C] Serialize full BillyObjects", "[serialize][1]") { BillyObjects gestionnaire{}; - test::DummyObject dummy_object; - { + test::DummyObject dummy_object; { CharacterSheet sheet; REQUIRE(gestionnaire.insert_object(sheet, weapons::Sword)); REQUIRE(gestionnaire.insert_object(sheet, tools::Fourche)); @@ -65,9 +64,7 @@ TEST_CASE("[C] Serialize full BillyObjects", "[serialize][1]") { const auto &tester = serializer.at("sheet").at(BillyObjects::json_key); - REQUIRE_FALSE(tester.empty()); - - { + REQUIRE_FALSE(tester.empty()); { std::ofstream file{ "billy_objects_full.json" }; file << tester << std::flush; } @@ -88,7 +85,6 @@ TEST_CASE("[D] Deserialize empty BillyObjects", "[deserialize][0]") { } TEST_CASE("[D] Deserialize full BillyObjects", "[deserialize][1]") { -// BillyObjects gestionnaire{}; test::DummyObject dummy_object; const auto deserializer = []() -> json { @@ -112,18 +108,18 @@ TEST_CASE("[D] Deserialize full BillyObjects", "[deserialize][1]") { TEST_CASE("[D] Pushing popping BillyObjects", "[pushpop][0]") { constexpr std::array all_objects{ - weapons::Sword, - weapons::Lance, - weapons::Morgenstern, - weapons::Bow, - equipments::Chainmail, - equipments::CookingPot, - equipments::PamphletTourist, - equipments::MedicKit, - tools::Fourche, - tools::Dagger, - tools::RockClimbingKit, - tools::SackOfGrain, + weapons::Sword, + weapons::Lance, + weapons::Morgenstern, + weapons::Bow, + equipments::Chainmail, + equipments::CookingPot, + equipments::PamphletTourist, + equipments::MedicKit, + tools::Fourche, + tools::Dagger, + tools::RockClimbingKit, + tools::SackOfGrain, }; BillyObjects gestionnaire{}; @@ -160,9 +156,9 @@ TEST_CASE("[D] Printing Billy's objects", "[printing]") { TEST_CASE("[Z] Cleaning after all tests", "[cleaning]") { namespace fs = std::filesystem; - const auto pwd = is_directory(fs::current_path()) ? - fs::directory_iterator(fs::current_path()) : - fs::directory_iterator(fs::current_path().root_directory()); + const auto pwd = is_directory(fs::current_path()) + ? fs::directory_iterator(fs::current_path()) + : fs::directory_iterator(fs::current_path().root_directory()); for (const auto &entry: pwd) { if (entry.is_regular_file() && entry.path().extension() == ".json") { fs::remove(entry); diff --git a/Unit testing/characteristics_tests.cpp b/Unit testing/characteristics_tests.cpp index 34b179b..9888369 100644 --- a/Unit testing/characteristics_tests.cpp +++ b/Unit testing/characteristics_tests.cpp @@ -139,4 +139,4 @@ TEST_CASE("[B] Deserialize habilete", "[deserialize][3]") { REQUIRE(adresse.get_materiel() == 0); REQUIRE(adresse.get_additional() == 0); }()); -} \ No newline at end of file +} diff --git a/Unit testing/sheet_tests.cpp b/Unit testing/sheet_tests.cpp new file mode 100644 index 0000000..39de7ec --- /dev/null +++ b/Unit testing/sheet_tests.cpp @@ -0,0 +1,31 @@ +#include +#include +#include + +using namespace character; + +TEST_CASE("[E] Serialize sheet", "[serialize][0]") { + CharacterSheet sheet; + BillyObjects gestion{}; + + REQUIRE(gestion.insert_object(sheet, weapons::Sword)); + REQUIRE(gestion.insert_object(sheet, weapons::Lance)); + REQUIRE(gestion.insert_object(sheet, tools::Dagger)); + BillyObjects::check_dagger_conditions(sheet); + + BillyObjects::json serializer; + + REQUIRE_NOTHROW(serializer["character_sheet"] = sheet); { + std::ofstream file{ "character_sheet.json" }; + file << serializer << std::flush; + } +} + +TEST_CASE("[F] Deserialize sheet", "[deserialize][0]") { + const auto deserializer = []() { + std::ifstream file{ "character_sheet.json" }; + return json::parse(file); + }(); + + const auto sheet = deserializer.at("character_sheet").get(); +}