mirror of
https://github.com/storytold/photocraft.git
synced 2026-10-28 02:02:04 +01:00
Every tests/*.rs file is its own executable that links the whole crate graph. Move each crate's test files into tests/it/ as modules of one tests/it/main.rs; helper modules under tests/common move with them. These keep their own binary (own process): - engine panic_hunt: a process-wide panic hook counts every panic. - engine text_gamma: changes the process-wide text gamma. - engine smart_filter_stages, mask_cache_purge: assert on global caches. - codecs pnm_peak_memory: reads the process's peak RSS. - photocraft mac_menu_appkit: harness = false.
54 lines
2.0 KiB
Rust
54 lines
2.0 KiB
Rust
//! Delete Layer never leaves a document without layers (#1107): the single-layer path refuses
|
|
//! like the multi-select path does, and changes nothing.
|
|
|
|
use photocraft_engine::Session;
|
|
use serde_json::json;
|
|
|
|
fn one_layer_doc() -> Session {
|
|
let mut s = Session::new();
|
|
s.execute("file.new", json!({"width": 10, "height": 5, "background": "transparent"})).unwrap();
|
|
s
|
|
}
|
|
|
|
#[test]
|
|
fn deleting_the_only_layer_is_refused() {
|
|
let mut s = one_layer_doc();
|
|
let id = s.active().unwrap().doc.layers[0].id;
|
|
let undo_before = s.active().unwrap().history.can_undo();
|
|
let r = s.execute("layer.delete", json!({"layer": id.0}));
|
|
assert!(r.is_err(), "deleted the last layer ({r:?})");
|
|
let st = s.active().unwrap();
|
|
assert_eq!(st.doc.layers.len(), 1);
|
|
assert_eq!(st.active_layer, Some(id));
|
|
assert_eq!(st.history.can_undo(), undo_before, "a refused delete left a history step");
|
|
}
|
|
|
|
#[test]
|
|
fn deleting_the_only_layer_without_a_param_is_refused() {
|
|
let mut s = one_layer_doc();
|
|
assert!(s.execute("layer.delete", json!({})).is_err());
|
|
assert_eq!(s.active().unwrap().doc.layers.len(), 1);
|
|
}
|
|
|
|
#[test]
|
|
fn deleting_a_group_that_holds_every_layer_is_refused() {
|
|
let mut s = one_layer_doc();
|
|
let r = s.execute("layer.groupLayers", json!({})).unwrap();
|
|
let group = r["layer"].as_u64().unwrap_or_else(|| s.active().unwrap().active_layer.unwrap().0);
|
|
assert_eq!(s.active().unwrap().doc.layers.len(), 1, "the group should be the only top-level layer");
|
|
assert!(s.execute("layer.delete", json!({"layer": group})).is_err());
|
|
assert_eq!(s.active().unwrap().doc.layers.len(), 1);
|
|
}
|
|
|
|
#[test]
|
|
fn deleting_one_of_two_layers_still_works() {
|
|
let mut s = one_layer_doc();
|
|
s.execute("layer.new.layer", json!({})).unwrap();
|
|
let top = s.active().unwrap().active_layer.unwrap();
|
|
s.execute("layer.delete", json!({"layer": top.0})).unwrap();
|
|
let st = s.active().unwrap();
|
|
assert_eq!(st.doc.layers.len(), 1);
|
|
assert!(st.doc.layer(top).is_none());
|
|
assert_eq!(st.active_layer, Some(st.doc.layers[0].id));
|
|
}
|