use accesskit_consumer::Tree;
use teksilo_canvas::SizeProposal;
use crate::test_widgets::FillWidget;
use crate::widget_tree::WidgetTree;
use crate::window::state::WindowStateInit;
use crate::window::{TeksiloWindowId, WindowPlacement, WindowState};
fn window(title: &str) -> (WidgetTree, WindowState) {
let state = WindowState::new(WindowStateInit {
id: TeksiloWindowId::new(1),
string_id: None,
placement: WindowPlacement::Floating,
title: title.to_string(),
size: (800, 600),
position: (0, 0),
focused: true,
resizable: true,
always_on_top: false,
});
let mut tree = WidgetTree::new();
tree.set_window_state(state.clone());
tree.add(FillWidget::new().label("content"));
tree.layout(SizeProposal::exact(400.0, 300.0));
(tree, state)
}
fn window_name(tree: &Tree) -> Option<String> {
tree.state().root().label()
}
#[test]
fn a_window_is_named_by_its_title() {
let (mut tree, _state) = window("Dialogs and Popovers");
let replay = Tree::new(tree.sync_accessibility(), true);
assert_eq!(
window_name(&replay).as_deref(),
Some("Dialogs and Popovers"),
"the window's root must carry its title, or Orca announces an unnamed frame"
);
}
#[test]
fn a_new_title_renames_the_window() {
let (mut tree, state) = window("Editor");
let mut replay = Tree::new(tree.sync_accessibility(), true);
let _ = tree.sync_accessibility();
state.title().set("report.md - Editor".to_string());
replay.update_and_process_changes(tree.sync_accessibility(), &mut Ignore);
assert_eq!(window_name(&replay).as_deref(), Some("report.md - Editor"));
}
#[test]
fn a_blank_title_leaves_the_window_unnamed() {
let (mut tree, _state) = window(" ");
let replay = Tree::new(tree.sync_accessibility(), true);
assert_eq!(window_name(&replay), None);
}
struct Ignore;
impl accesskit_consumer::TreeChangeHandler for Ignore {
fn node_added(&mut self, _: &accesskit_consumer::NodeRef) {}
fn node_updated(&mut self, _: &accesskit_consumer::NodeRef, _: &accesskit_consumer::NodeRef) {}
fn focus_moved(
&mut self,
_: Option<&accesskit_consumer::NodeRef>,
_: Option<&accesskit_consumer::NodeRef>,
) {
}
fn node_removed(&mut self, _: &accesskit_consumer::NodeRef) {}
}