diff --git a/src/cli/command_handler.h b/src/cli/command_handler.h index 932fbfd7..89d50746 100644 --- a/src/cli/command_handler.h +++ b/src/cli/command_handler.h @@ -11,6 +11,7 @@ #include #include "absl/status/status.h" +#include "absl/strings/str_cat.h" #include "app/core/common.h" #include "app/core/constants.h" #include "app/rom.h" @@ -146,12 +147,43 @@ class Compress : public CommandHandler { } }; -// Decompress Graphics +// Decompress (Export) Graphics +// +// -e --mode= +// +// mode: class Decompress : public CommandHandler { public: absl::Status handle(std::string_view arg) override { - RETURN_IF_ERROR(rom_.LoadFromFile(arg, true)) - RETURN_IF_ERROR(rom_.LoadAllGraphicsData()) + auto args_vec = ParseArguments(arg); + Color::Modifier underline(Color::FG_UNDERLINE); + Color::Modifier reset(Color::FG_RESET); + std::cout << "Please specify the tilesheets you want to export\n"; + std::cout << "You can input an individual sheet, a range X-Y, or comma " + "separate values.\n\n"; + std::cout << underline << "Tilesheets\n" << reset; + std::cout << "0-112 -> compressed 3bpp bgr \n"; + std::cout << "113-114 -> compressed 2bpp\n"; + std::cout << "115-126 -> uncompressed 3bpp sprites\n"; + std::cout << "127-217 -> compressed 3bpp sprites\n"; + std::cout << "218-222 -> compressed 2bpp\n"; + + std::cout << "Enter tilesheets: "; + std::string sheet_input; + std::cin >> sheet_input; + + // Batch Mode + // if (args_vec.size() == 1) { + // auto rom_filename = args_vec[1]; + // RETURN_IF_ERROR(rom_.LoadFromFile(arg, true)) + // RETURN_IF_ERROR(rom_.LoadAllGraphicsData()) + // for (auto& graphic_sheet : rom_.GetGraphicsBin()) { + // const auto filename = + // absl::StrCat(rom_.filename(), graphic_sheet.first); + // graphic_sheet.second.SaveSurfaceToFile(filename); + // } + // } + std::cout << "Decompress selected with argument: " << arg << std::endl; return absl::OkStatus(); } @@ -191,9 +223,9 @@ struct Commands { {"-c", std::make_shared()}, {"-o", std::make_shared()}, {"-b", std::make_shared()}, - {"-i", std::make_shared()}, // Import - {"-e", std::make_shared()}, // Export - {"-s", std::make_shared()}, + {"-i", std::make_shared()}, // Import + {"-e", std::make_shared()}, // Export + {"-s", std::make_shared()}, {"-p", std::make_shared()}}; }; diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index a31c1b85..7cca856a 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -13,6 +13,9 @@ enable_testing() add_executable( yaze_test yaze_test.cc + z3ed_test.cc + ../src/cli/patch.cc + ../src/cli/command_handler.cc compression_test.cc snes_palette_test.cc ../src/app/rom.cc diff --git a/test/z3ed_test.cc b/test/z3ed_test.cc new file mode 100644 index 00000000..23fcd215 --- /dev/null +++ b/test/z3ed_test.cc @@ -0,0 +1,85 @@ +#include +#include + +#include "cli/command_handler.h" + +using namespace yaze::cli; +using ::testing::_; +using ::testing::Return; + +// Mock class for CommandHandler +class MockCommandHandler : public CommandHandler { + public: + MOCK_METHOD(absl::Status, handle, (std::string_view arg), (override)); +}; + +// Test fixture class +class CommandHandlerTest : public ::testing::Test { + protected: + std::shared_ptr mockHandler = + std::make_shared(); +}; + +TEST_F(CommandHandlerTest, TestApplyPatch) { + Commands cmd; + cmd.handlers["-a"] = mockHandler; + EXPECT_CALL(*mockHandler, handle(_)).WillOnce(Return(absl::OkStatus())); + absl::Status result = cmd.handlers["-a"]->handle("apply_patch_args"); + EXPECT_EQ(result, absl::OkStatus()); +} + +TEST_F(CommandHandlerTest, TestCreatePatch) { + Commands cmd; + cmd.handlers["-cp"] = mockHandler; + EXPECT_CALL(*mockHandler, handle(_)).WillOnce(Return(absl::OkStatus())); + absl::Status result = cmd.handlers["-cp"]->handle("create_patch_args"); + EXPECT_EQ(result, absl::OkStatus()); +} + +TEST_F(CommandHandlerTest, TestOpen) { + Commands cmd; + cmd.handlers["-o"] = mockHandler; + EXPECT_CALL(*mockHandler, handle(_)).WillOnce(Return(absl::OkStatus())); + absl::Status result = cmd.handlers["-o"]->handle("open_args"); + EXPECT_EQ(result, absl::OkStatus()); +} + +TEST_F(CommandHandlerTest, TestBackup) { + Commands cmd; + cmd.handlers["-b"] = mockHandler; + EXPECT_CALL(*mockHandler, handle(_)).WillOnce(Return(absl::OkStatus())); + absl::Status result = cmd.handlers["-b"]->handle("backup_args"); + EXPECT_EQ(result, absl::OkStatus()); +} + +TEST_F(CommandHandlerTest, TestCompress) { + Commands cmd; + cmd.handlers["-c"] = mockHandler; + EXPECT_CALL(*mockHandler, handle(_)).WillOnce(Return(absl::OkStatus())); + absl::Status result = cmd.handlers["-c"]->handle("compress_args"); + EXPECT_EQ(result, absl::OkStatus()); +} + +TEST_F(CommandHandlerTest, TestDecompress) { + Commands cmd; + cmd.handlers["-d"] = mockHandler; + EXPECT_CALL(*mockHandler, handle(_)).WillOnce(Return(absl::OkStatus())); + absl::Status result = cmd.handlers["-d"]->handle("decompress_args"); + EXPECT_EQ(result, absl::OkStatus()); +} + +TEST_F(CommandHandlerTest, TestSnesToPc) { + Commands cmd; + cmd.handlers["-s"] = mockHandler; + EXPECT_CALL(*mockHandler, handle(_)).WillOnce(Return(absl::OkStatus())); + absl::Status result = cmd.handlers["-s"]->handle("snes_to_pc_args"); + EXPECT_EQ(result, absl::OkStatus()); +} + +TEST_F(CommandHandlerTest, TestPcToSnes) { + Commands cmd; + cmd.handlers["-p"] = mockHandler; + EXPECT_CALL(*mockHandler, handle(_)).WillOnce(Return(absl::OkStatus())); + absl::Status result = cmd.handlers["-p"]->handle("pc_to_snes_args"); + EXPECT_EQ(result, absl::OkStatus()); +}