Plan recording session decisions in app core

This commit is contained in:
2026-06-02 23:49:13 +02:00
parent d9be3f910a
commit cc3490d9d8
10 changed files with 314 additions and 17 deletions

View File

@@ -288,6 +288,16 @@ add_test(NAME pp_app_core_document_cloud_tests COMMAND pp_app_core_document_clou
set_tests_properties(pp_app_core_document_cloud_tests PROPERTIES
LABELS "app;desktop-fast;fuzz")
add_executable(pp_app_core_document_recording_tests
app_core/document_recording_tests.cpp)
target_link_libraries(pp_app_core_document_recording_tests PRIVATE
pp_app_core
pp_test_harness)
add_test(NAME pp_app_core_document_recording_tests COMMAND pp_app_core_document_recording_tests)
set_tests_properties(pp_app_core_document_recording_tests PROPERTIES
LABELS "app;desktop-fast;fuzz")
add_executable(pp_app_core_document_session_tests
app_core/document_session_tests.cpp)
target_link_libraries(pp_app_core_document_session_tests PRIVATE
@@ -543,6 +553,24 @@ if(TARGET pano_cli)
LABELS "app;integration;desktop-fast"
PASS_REGULAR_EXPRESSION "\"command\":\"plan-cloud-upload-all\".*\"fileCount\":3.*\"progressUiAvailable\":false.*\"progressTotal\":3.*\"showProgress\":false")
add_test(NAME pano_cli_plan_recording_session_stopped_smoke
COMMAND pano_cli plan-recording-session --frame-count 12)
set_tests_properties(pano_cli_plan_recording_session_stopped_smoke PROPERTIES
LABELS "app;integration;desktop-fast"
PASS_REGULAR_EXPRESSION "\"command\":\"plan-recording-session\".*\"running\":false.*\"frameCount\":12.*\"startDecision\":\"start-thread\".*\"stopDecision\":\"no-op-not-running\".*\"stopRunningRecording\":false.*\"deleteRecordedFiles\":false.*\"progressTotal\":12")
add_test(NAME pano_cli_plan_recording_session_running_smoke
COMMAND pano_cli plan-recording-session --running --frame-count 12)
set_tests_properties(pano_cli_plan_recording_session_running_smoke PROPERTIES
LABELS "app;integration;desktop-fast"
PASS_REGULAR_EXPRESSION "\"command\":\"plan-recording-session\".*\"running\":true.*\"startDecision\":\"no-op-already-running\".*\"stopDecision\":\"stop-thread\".*\"stopRunningRecording\":true.*\"progressTotal\":12")
add_test(NAME pano_cli_plan_recording_session_platform_cleanup_smoke
COMMAND pano_cli plan-recording-session --platform-deletes-recorded-files)
set_tests_properties(pano_cli_plan_recording_session_platform_cleanup_smoke PROPERTIES
LABELS "app;integration;desktop-fast;fuzz"
PASS_REGULAR_EXPRESSION "\"command\":\"plan-recording-session\".*\"platformDeletesRecordedFiles\":true.*\"deleteRecordedFiles\":true.*\"frameCountAfterClear\":0")
add_test(NAME pano_cli_simulate_app_session_clean_smoke
COMMAND pano_cli simulate-app-session)
set_tests_properties(pano_cli_simulate_app_session_clean_smoke PROPERTIES

View File

@@ -0,0 +1,69 @@
#include "app_core/document_recording.h"
#include "test_harness.h"
#include <limits>
namespace {
void recording_start_only_starts_when_not_running(pp::tests::Harness& harness)
{
PP_EXPECT(
harness,
pp::app::plan_recording_start(false) == pp::app::RecordingStartAction::start_thread);
PP_EXPECT(
harness,
pp::app::plan_recording_start(true) == pp::app::RecordingStartAction::no_op_already_running);
}
void recording_stop_only_stops_when_running(pp::tests::Harness& harness)
{
PP_EXPECT(
harness,
pp::app::plan_recording_stop(true) == pp::app::RecordingStopAction::stop_thread);
PP_EXPECT(
harness,
pp::app::plan_recording_stop(false) == pp::app::RecordingStopAction::no_op_not_running);
}
void recording_clear_resets_frames_and_preserves_platform_delete_flag(pp::tests::Harness& harness)
{
const auto running_desktop = pp::app::plan_recording_clear(true, false);
PP_EXPECT(harness, running_desktop.stop_running_recording);
PP_EXPECT(harness, !running_desktop.delete_recorded_files);
PP_EXPECT(harness, running_desktop.frame_count_after_clear == 0);
const auto stopped_apple = pp::app::plan_recording_clear(false, true);
PP_EXPECT(harness, !stopped_apple.stop_running_recording);
PP_EXPECT(harness, stopped_apple.delete_recorded_files);
PP_EXPECT(harness, stopped_apple.frame_count_after_clear == 0);
}
void recording_export_tracks_frame_count(pp::tests::Harness& harness)
{
const auto plan = pp::app::plan_recording_export(120);
PP_EXPECT(harness, plan.frame_count == 120);
PP_EXPECT(harness, plan.progress_total == 120);
}
void recording_export_clamps_progress_total(pp::tests::Harness& harness)
{
const auto too_many_frames = static_cast<std::size_t>(std::numeric_limits<int>::max()) + 1U;
const auto plan = pp::app::plan_recording_export(too_many_frames);
PP_EXPECT(harness, plan.frame_count == too_many_frames);
PP_EXPECT(harness, plan.progress_total == std::numeric_limits<int>::max());
}
}
int main()
{
pp::tests::Harness harness;
harness.run("recording start only starts when not running", recording_start_only_starts_when_not_running);
harness.run("recording stop only stops when running", recording_stop_only_stops_when_running);
harness.run(
"recording clear resets frames and preserves platform delete flag",
recording_clear_resets_frames_and_preserves_platform_delete_flag);
harness.run("recording export tracks frame count", recording_export_tracks_frame_count);
harness.run("recording export clamps progress total", recording_export_clamps_progress_total);
return harness.finish();
}