srdusr
aboutsummaryrefslogtreecommitdiffstats
path: root/crates/platform/src/ipc/tests.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/platform/src/ipc/tests.rs')
-rw-r--r--crates/platform/src/ipc/tests.rs97
1 files changed, 96 insertions, 1 deletions
diff --git a/crates/platform/src/ipc/tests.rs b/crates/platform/src/ipc/tests.rs
index 13ab4c2..c2a678c 100644
--- a/crates/platform/src/ipc/tests.rs
+++ b/crates/platform/src/ipc/tests.rs
@@ -751,7 +751,24 @@ fn settings_reports_the_readback_fields_flagged_as_missing() {
server.poll(&wm);
let line = read_line(&mut std::io::BufReader::new(client));
let parsed: serde_json::Value = serde_json::from_str(&line).unwrap();
- for field in ["border_width", "border_color", "corner_radius", "decoration_mode_server", "gap_inner", "gap_outer", "master_ratio", "master_count"] {
+ for field in [
+ "border_width",
+ "border_color",
+ "corner_radius",
+ "decoration_mode_server",
+ "gap_inner",
+ "gap_outer",
+ "master_ratio",
+ "master_count",
+ "per_monitor",
+ "button_style",
+ "button_side",
+ "button_order",
+ "title_centered",
+ "button_glyph_always",
+ "desktop_icons",
+ "desktop_icons_all_monitors",
+ ] {
assert!(parsed.get(field).is_some(), "settings response is missing '{field}'");
}
assert_eq!(parsed["border_color"].as_str().unwrap().chars().next(), Some('#'), "border_color must be a hex string, matching what srd set border_color itself accepts");
@@ -791,6 +808,84 @@ fn set_master_ratio_clamps_to_a_sane_range() {
}
#[test]
+fn set_per_monitor_is_reflected_immediately_by_settings() {
+ let dir = tempfile::tempdir().unwrap();
+ let mut server = IpcServer::bind_in(dir.path(), "test").unwrap();
+ let wm = Rc::new(RefCell::new(WindowManager::new()));
+
+ let mut set_client = UnixStream::connect(&server.path).unwrap();
+ set_client.write_all(b"{\"cmd\":\"set\",\"key\":\"per_monitor\",\"value\":true}\n").unwrap();
+ server.poll(&wm);
+ let _ = read_line(&mut std::io::BufReader::new(set_client));
+
+ let mut settings_client = UnixStream::connect(&server.path).unwrap();
+ settings_client.write_all(b"{\"cmd\":\"settings\"}\n").unwrap();
+ server.poll(&wm);
+ let line = read_line(&mut std::io::BufReader::new(settings_client));
+ assert!(line.contains(r#""per_monitor":true"#));
+}
+
+#[test]
+fn button_and_desktop_icon_settings_are_readable_and_live_settable() {
+ let dir = tempfile::tempdir().unwrap();
+ let mut server = IpcServer::bind_in(dir.path(), "test").unwrap();
+ let wm = Rc::new(RefCell::new(WindowManager::new()));
+
+ for (key, value) in [
+ ("button_style", "\"traditional\""),
+ ("button_side", "\"left\""),
+ ("button_order", "\"maximize,minimize,close\""),
+ ("title_centered", "true"),
+ ("button_glyph_always", "true"),
+ ("desktop_icons", "false"),
+ ("desktop_icons_all_monitors", "false"),
+ ] {
+ let mut client = UnixStream::connect(&server.path).unwrap();
+ client.write_all(format!("{{\"cmd\":\"set\",\"key\":\"{key}\",\"value\":{value}}}\n").as_bytes()).unwrap();
+ server.poll(&wm);
+ let _ = read_line(&mut std::io::BufReader::new(client));
+ }
+
+ let mut settings_client = UnixStream::connect(&server.path).unwrap();
+ settings_client.write_all(b"{\"cmd\":\"settings\"}\n").unwrap();
+ server.poll(&wm);
+ let line = read_line(&mut std::io::BufReader::new(settings_client));
+ assert!(line.contains(r#""button_style":"traditional""#));
+ assert!(line.contains(r#""button_side":"left""#));
+ assert!(line.contains(r#""button_order":"maximize,minimize,close""#));
+ assert!(line.contains(r#""title_centered":true"#));
+ assert!(line.contains(r#""button_glyph_always":true"#));
+ assert!(line.contains(r#""desktop_icons":false"#));
+ assert!(line.contains(r#""desktop_icons_all_monitors":false"#));
+}
+
+#[test]
+fn button_order_is_null_until_explicitly_set() {
+ let dir = tempfile::tempdir().unwrap();
+ let mut server = IpcServer::bind_in(dir.path(), "test").unwrap();
+ let wm = Rc::new(RefCell::new(WindowManager::new()));
+
+ let mut client = UnixStream::connect(&server.path).unwrap();
+ client.write_all(b"{\"cmd\":\"settings\"}\n").unwrap();
+ server.poll(&wm);
+ let line = read_line(&mut std::io::BufReader::new(client));
+ assert!(line.contains(r#""button_order":null"#));
+}
+
+#[test]
+fn set_button_order_rejects_an_invalid_ordering() {
+ let dir = tempfile::tempdir().unwrap();
+ let mut server = IpcServer::bind_in(dir.path(), "test").unwrap();
+ let wm = Rc::new(RefCell::new(WindowManager::new()));
+
+ let mut client = UnixStream::connect(&server.path).unwrap();
+ client.write_all(b"{\"cmd\":\"set\",\"key\":\"button_order\",\"value\":\"close,close,maximize\"}\n").unwrap();
+ server.poll(&wm);
+ let line = read_line(&mut std::io::BufReader::new(client));
+ assert!(line.contains(r#""error""#));
+}
+
+#[test]
fn pinned_inputs_lists_nothing_before_any_pin_is_applied() {
let dir = tempfile::tempdir().unwrap();
let mut server = IpcServer::bind_in(dir.path(), "test").unwrap();