Add document undo history tests

This commit is contained in:
2026-06-01 07:39:42 +02:00
parent 126280ff7c
commit 3d80791245
5 changed files with 231 additions and 4 deletions

View File

@@ -15,6 +15,8 @@ constexpr std::uint32_t max_canvas_dimension = 131072;
constexpr std::uint32_t max_layer_count = 1024;
constexpr std::uint32_t max_frame_count = 100000;
constexpr std::uint32_t min_frame_duration_ms = 1;
constexpr std::size_t min_document_history_entries = 2;
constexpr std::size_t max_document_history_entries = 10000;
struct DocumentConfig {
std::uint32_t width = 0;
@@ -64,4 +66,26 @@ private:
std::vector<AnimationFrame> frames_;
};
class DocumentHistory {
public:
[[nodiscard]] static pp::foundation::Result<DocumentHistory> create(
CanvasDocument initial_document,
std::size_t max_entries = 256);
[[nodiscard]] const CanvasDocument& current() const noexcept;
[[nodiscard]] std::size_t size() const noexcept;
[[nodiscard]] std::size_t current_index() const noexcept;
[[nodiscard]] bool can_undo() const noexcept;
[[nodiscard]] bool can_redo() const noexcept;
[[nodiscard]] pp::foundation::Status apply(CanvasDocument next_document);
[[nodiscard]] pp::foundation::Status undo() noexcept;
[[nodiscard]] pp::foundation::Status redo() noexcept;
private:
std::size_t max_entries_ = 0;
std::size_t current_index_ = 0;
std::vector<CanvasDocument> entries_;
};
}