feat(core): Snapshot derives Deserialize + PartialEq for disk persistence
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -7,3 +7,6 @@ version.workspace = true
|
|||||||
alacritty_terminal.workspace = true
|
alacritty_terminal.workspace = true
|
||||||
serde.workspace = true
|
serde.workspace = true
|
||||||
spacesh-proto = { path = "../spacesh-proto" }
|
spacesh-proto = { path = "../spacesh-proto" }
|
||||||
|
|
||||||
|
[dev-dependencies]
|
||||||
|
serde_json.workspace = true
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
use serde::Serialize;
|
use serde::{Deserialize, Serialize};
|
||||||
use alacritty_terminal::index::Point;
|
use alacritty_terminal::index::Point;
|
||||||
use alacritty_terminal::term::cell::Flags;
|
use alacritty_terminal::term::cell::Flags;
|
||||||
use alacritty_terminal::vte::ansi::Color;
|
use alacritty_terminal::vte::ansi::Color;
|
||||||
use crate::grid::GridSurface;
|
use crate::grid::GridSurface;
|
||||||
|
|
||||||
/// Serializable snapshot returned by `attach`.
|
/// Serializable snapshot returned by `attach`.
|
||||||
#[derive(Debug, Clone, Serialize)]
|
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
|
||||||
pub struct Snapshot {
|
pub struct Snapshot {
|
||||||
/// ANSI byte dump suitable for `xterm.write()`.
|
/// ANSI byte dump suitable for `xterm.write()`.
|
||||||
pub ansi: String,
|
pub ansi: String,
|
||||||
@@ -120,6 +120,18 @@ mod tests {
|
|||||||
assert_eq!(a.rows, 3);
|
assert_eq!(a.rows, 3);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn snapshot_round_trips_through_json() {
|
||||||
|
let mut g = GridSurface::new(20, 4);
|
||||||
|
g.feed(b"hello");
|
||||||
|
let snap = snapshot_ansi(&g);
|
||||||
|
let json = serde_json::to_string(&snap).unwrap();
|
||||||
|
let back: Snapshot = serde_json::from_str(&json).unwrap();
|
||||||
|
assert_eq!(back.ansi, snap.ansi);
|
||||||
|
assert_eq!((back.cols, back.rows), (snap.cols, snap.rows));
|
||||||
|
assert_eq!((back.cursor_row, back.cursor_col), (snap.cursor_row, snap.cursor_col));
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn cursor_is_one_based_after_input() {
|
fn cursor_is_one_based_after_input() {
|
||||||
let mut g = GridSurface::new(10, 3);
|
let mut g = GridSurface::new(10, 3);
|
||||||
|
|||||||
Reference in New Issue
Block a user