Route command conversion through app core
This commit is contained in:
@@ -575,6 +575,16 @@ add_test(NAME pp_app_core_app_shutdown_tests COMMAND pp_app_core_app_shutdown_te
|
||||
set_tests_properties(pp_app_core_app_shutdown_tests PROPERTIES
|
||||
LABELS "app;desktop-fast")
|
||||
|
||||
add_executable(pp_app_core_command_convert_tests
|
||||
app_core/command_convert_tests.cpp)
|
||||
target_link_libraries(pp_app_core_command_convert_tests PRIVATE
|
||||
pp_app_core
|
||||
pp_test_harness)
|
||||
|
||||
add_test(NAME pp_app_core_command_convert_tests COMMAND pp_app_core_command_convert_tests)
|
||||
set_tests_properties(pp_app_core_command_convert_tests PROPERTIES
|
||||
LABELS "app;desktop-fast;fuzz")
|
||||
|
||||
add_executable(pp_app_core_document_sharing_tests
|
||||
app_core/document_sharing_tests.cpp)
|
||||
target_link_libraries(pp_app_core_document_sharing_tests PRIVATE
|
||||
@@ -1005,6 +1015,26 @@ if(TARGET pano_cli)
|
||||
WILL_FAIL TRUE
|
||||
PASS_REGULAR_EXPRESSION "\"command\":\"plan-app-shutdown\".*\"message\":\"unknown option\"")
|
||||
|
||||
add_test(NAME pano_cli_plan_command_convert_smoke
|
||||
COMMAND pano_cli plan-command-convert --project D:/Paint/demo.ppi --output D:/Paint/demo.png --canvas-resolution 2048)
|
||||
set_tests_properties(pano_cli_plan_command_convert_smoke PROPERTIES
|
||||
LABELS "app;integration;desktop-fast"
|
||||
PASS_REGULAR_EXPRESSION "\"command\":\"plan-command-convert\".*\"project\":\"D:/Paint/demo.ppi\".*\"output\":\"D:/Paint/demo.png\".*\"canvasResolution\":2048.*\"steps\":\\[\"apply-renderer-state\",\"create-canvas\",\"open-project\",\"export-equirectangular\"\\]")
|
||||
|
||||
add_test(NAME pano_cli_plan_command_convert_rejects_empty_project
|
||||
COMMAND pano_cli plan-command-convert --project "" --output D:/Paint/demo.png)
|
||||
set_tests_properties(pano_cli_plan_command_convert_rejects_empty_project PROPERTIES
|
||||
LABELS "app;integration;desktop-fast;fuzz"
|
||||
WILL_FAIL TRUE
|
||||
PASS_REGULAR_EXPRESSION "\"command\":\"plan-command-convert\".*\"message\":\"convert project path must not be empty\"")
|
||||
|
||||
add_test(NAME pano_cli_plan_command_convert_rejects_bad_resolution
|
||||
COMMAND pano_cli plan-command-convert --canvas-resolution 0)
|
||||
set_tests_properties(pano_cli_plan_command_convert_rejects_bad_resolution PROPERTIES
|
||||
LABELS "app;integration;desktop-fast;fuzz"
|
||||
WILL_FAIL TRUE
|
||||
PASS_REGULAR_EXPRESSION "\"command\":\"plan-command-convert\".*\"message\":\"convert canvas resolution must be positive\"")
|
||||
|
||||
add_test(NAME pano_cli_plan_brush_package_import_ppbr_smoke
|
||||
COMMAND pano_cli plan-brush-package-import
|
||||
--kind ppbr
|
||||
|
||||
103
tests/app_core/command_convert_tests.cpp
Normal file
103
tests/app_core/command_convert_tests.cpp
Normal file
@@ -0,0 +1,103 @@
|
||||
#include "app_core/command_convert.h"
|
||||
#include "test_harness.h"
|
||||
|
||||
#include <string>
|
||||
#include <string_view>
|
||||
|
||||
namespace {
|
||||
|
||||
class FakeCommandConvertServices final : public pp::app::CommandConvertServices {
|
||||
public:
|
||||
void apply_renderer_state() override
|
||||
{
|
||||
call_order += "state;";
|
||||
}
|
||||
|
||||
void create_canvas(int canvas_resolution) override
|
||||
{
|
||||
created_canvas_resolution = canvas_resolution;
|
||||
call_order += "canvas;";
|
||||
}
|
||||
|
||||
void open_project(std::string_view project_path) override
|
||||
{
|
||||
opened_project = std::string(project_path);
|
||||
call_order += "open;";
|
||||
}
|
||||
|
||||
void export_equirectangular(std::string_view output_path) override
|
||||
{
|
||||
exported_output = std::string(output_path);
|
||||
call_order += "export;";
|
||||
}
|
||||
|
||||
int created_canvas_resolution = 0;
|
||||
std::string opened_project;
|
||||
std::string exported_output;
|
||||
std::string call_order;
|
||||
};
|
||||
|
||||
void convert_plan_preserves_legacy_step_order(pp::tests::Harness& harness)
|
||||
{
|
||||
const auto plan = pp::app::plan_command_convert("D:/Paint/demo.ppi", "D:/Paint/demo.png", 2048);
|
||||
|
||||
PP_EXPECT(harness, plan);
|
||||
if (!plan) {
|
||||
return;
|
||||
}
|
||||
|
||||
PP_EXPECT(harness, plan.value().project_path == "D:/Paint/demo.ppi");
|
||||
PP_EXPECT(harness, plan.value().output_path == "D:/Paint/demo.png");
|
||||
PP_EXPECT(harness, plan.value().canvas_resolution == 2048);
|
||||
PP_EXPECT(harness, plan.value().steps.size() == 4);
|
||||
PP_EXPECT(harness, plan.value().steps[0] == pp::app::CommandConvertStep::apply_renderer_state);
|
||||
PP_EXPECT(harness, plan.value().steps[1] == pp::app::CommandConvertStep::create_canvas);
|
||||
PP_EXPECT(harness, plan.value().steps[2] == pp::app::CommandConvertStep::open_project);
|
||||
PP_EXPECT(harness, plan.value().steps[3] == pp::app::CommandConvertStep::export_equirectangular);
|
||||
}
|
||||
|
||||
void convert_plan_rejects_missing_inputs(pp::tests::Harness& harness)
|
||||
{
|
||||
const auto missing_project = pp::app::plan_command_convert("", "D:/Paint/demo.png", 2048);
|
||||
const auto missing_output = pp::app::plan_command_convert("D:/Paint/demo.ppi", "", 2048);
|
||||
const auto bad_resolution = pp::app::plan_command_convert("D:/Paint/demo.ppi", "D:/Paint/demo.png", 0);
|
||||
|
||||
PP_EXPECT(harness, !missing_project);
|
||||
PP_EXPECT(harness, missing_project.status().code == pp::foundation::StatusCode::invalid_argument);
|
||||
PP_EXPECT(harness, !missing_output);
|
||||
PP_EXPECT(harness, missing_output.status().code == pp::foundation::StatusCode::invalid_argument);
|
||||
PP_EXPECT(harness, !bad_resolution);
|
||||
PP_EXPECT(harness, bad_resolution.status().code == pp::foundation::StatusCode::invalid_argument);
|
||||
}
|
||||
|
||||
void convert_executor_dispatches_valid_plan(pp::tests::Harness& harness)
|
||||
{
|
||||
const auto plan = pp::app::plan_command_convert("D:/Paint/demo.ppi", "D:/Paint/demo.png", 1024);
|
||||
FakeCommandConvertServices services;
|
||||
|
||||
PP_EXPECT(harness, plan);
|
||||
PP_EXPECT(harness, pp::app::execute_command_convert_plan(plan.value(), services).ok());
|
||||
PP_EXPECT(harness, services.created_canvas_resolution == 1024);
|
||||
PP_EXPECT(harness, services.opened_project == "D:/Paint/demo.ppi");
|
||||
PP_EXPECT(harness, services.exported_output == "D:/Paint/demo.png");
|
||||
PP_EXPECT(harness, services.call_order == "state;canvas;open;export;");
|
||||
}
|
||||
|
||||
void convert_executor_rejects_malformed_plan(pp::tests::Harness& harness)
|
||||
{
|
||||
FakeCommandConvertServices services;
|
||||
PP_EXPECT(harness, !pp::app::execute_command_convert_plan(pp::app::CommandConvertPlan {}, services).ok());
|
||||
PP_EXPECT(harness, services.call_order.empty());
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
int main()
|
||||
{
|
||||
pp::tests::Harness harness;
|
||||
harness.run("convert plan preserves legacy step order", convert_plan_preserves_legacy_step_order);
|
||||
harness.run("convert plan rejects missing inputs", convert_plan_rejects_missing_inputs);
|
||||
harness.run("convert executor dispatches valid plan", convert_executor_dispatches_valid_plan);
|
||||
harness.run("convert executor rejects malformed plan", convert_executor_rejects_malformed_plan);
|
||||
return harness.finish();
|
||||
}
|
||||
Reference in New Issue
Block a user