Skip to content

Commit 45b60d8

Browse files
authored
test: Add unit tests for the common filters (#581)
1 parent db7d4d0 commit 45b60d8

File tree

1 file changed

+181
-0
lines changed

1 file changed

+181
-0
lines changed

consumer/src/filters.rs

Lines changed: 181 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,3 +43,184 @@ pub fn common_filter_with_root_exception(node: &Node) -> FilterResult {
4343
}
4444
common_filter(node)
4545
}
46+
47+
#[cfg(test)]
48+
mod tests {
49+
use accesskit::{Node, NodeId, Role, Tree, TreeUpdate};
50+
use alloc::vec;
51+
52+
use super::{common_filter, common_filter_with_root_exception, FilterResult};
53+
54+
#[test]
55+
fn normal() {
56+
let update = TreeUpdate {
57+
nodes: vec![
58+
(NodeId(0), {
59+
let mut node = Node::new(Role::Window);
60+
node.set_children(vec![NodeId(1)]);
61+
node
62+
}),
63+
(NodeId(1), Node::new(Role::Button)),
64+
],
65+
tree: Some(Tree::new(NodeId(0))),
66+
focus: NodeId(0),
67+
};
68+
let tree = crate::Tree::new(update, false);
69+
assert_eq!(
70+
FilterResult::Include,
71+
common_filter(&tree.state().node_by_id(NodeId(1)).unwrap())
72+
);
73+
}
74+
75+
#[test]
76+
fn hidden() {
77+
let update = TreeUpdate {
78+
nodes: vec![
79+
(NodeId(0), {
80+
let mut node = Node::new(Role::Window);
81+
node.set_children(vec![NodeId(1)]);
82+
node
83+
}),
84+
(NodeId(1), {
85+
let mut node = Node::new(Role::Button);
86+
node.set_hidden();
87+
node
88+
}),
89+
],
90+
tree: Some(Tree::new(NodeId(0))),
91+
focus: NodeId(0),
92+
};
93+
let tree = crate::Tree::new(update, false);
94+
assert_eq!(
95+
FilterResult::ExcludeSubtree,
96+
common_filter(&tree.state().node_by_id(NodeId(1)).unwrap())
97+
);
98+
}
99+
100+
#[test]
101+
fn hidden_but_focused() {
102+
let update = TreeUpdate {
103+
nodes: vec![
104+
(NodeId(0), {
105+
let mut node = Node::new(Role::Window);
106+
node.set_children(vec![NodeId(1)]);
107+
node
108+
}),
109+
(NodeId(1), {
110+
let mut node = Node::new(Role::Button);
111+
node.set_hidden();
112+
node
113+
}),
114+
],
115+
tree: Some(Tree::new(NodeId(0))),
116+
focus: NodeId(1),
117+
};
118+
let tree = crate::Tree::new(update, true);
119+
assert_eq!(
120+
FilterResult::Include,
121+
common_filter(&tree.state().node_by_id(NodeId(1)).unwrap())
122+
);
123+
}
124+
125+
#[test]
126+
fn generic_container() {
127+
let update = TreeUpdate {
128+
nodes: vec![
129+
(NodeId(0), {
130+
let mut node = Node::new(Role::GenericContainer);
131+
node.set_children(vec![NodeId(1)]);
132+
node
133+
}),
134+
(NodeId(1), Node::new(Role::Button)),
135+
],
136+
tree: Some(Tree::new(NodeId(0))),
137+
focus: NodeId(0),
138+
};
139+
let tree = crate::Tree::new(update, false);
140+
assert_eq!(
141+
FilterResult::ExcludeNode,
142+
common_filter(&tree.state().node_by_id(NodeId(0)).unwrap())
143+
);
144+
assert_eq!(
145+
FilterResult::Include,
146+
common_filter_with_root_exception(&tree.state().node_by_id(NodeId(0)).unwrap())
147+
);
148+
assert_eq!(
149+
FilterResult::Include,
150+
common_filter(&tree.state().node_by_id(NodeId(1)).unwrap())
151+
);
152+
}
153+
154+
#[test]
155+
fn hidden_parent() {
156+
let update = TreeUpdate {
157+
nodes: vec![
158+
(NodeId(0), {
159+
let mut node = Node::new(Role::GenericContainer);
160+
node.set_hidden();
161+
node.set_children(vec![NodeId(1)]);
162+
node
163+
}),
164+
(NodeId(1), Node::new(Role::Button)),
165+
],
166+
tree: Some(Tree::new(NodeId(0))),
167+
focus: NodeId(0),
168+
};
169+
let tree = crate::Tree::new(update, false);
170+
assert_eq!(
171+
FilterResult::ExcludeSubtree,
172+
common_filter(&tree.state().node_by_id(NodeId(0)).unwrap())
173+
);
174+
assert_eq!(
175+
FilterResult::ExcludeSubtree,
176+
common_filter(&tree.state().node_by_id(NodeId(1)).unwrap())
177+
);
178+
}
179+
180+
#[test]
181+
fn hidden_parent_but_focused() {
182+
let update = TreeUpdate {
183+
nodes: vec![
184+
(NodeId(0), {
185+
let mut node = Node::new(Role::GenericContainer);
186+
node.set_hidden();
187+
node.set_children(vec![NodeId(1)]);
188+
node
189+
}),
190+
(NodeId(1), Node::new(Role::Button)),
191+
],
192+
tree: Some(Tree::new(NodeId(0))),
193+
focus: NodeId(1),
194+
};
195+
let tree = crate::Tree::new(update, true);
196+
assert_eq!(
197+
FilterResult::ExcludeSubtree,
198+
common_filter(&tree.state().node_by_id(NodeId(0)).unwrap())
199+
);
200+
assert_eq!(
201+
FilterResult::Include,
202+
common_filter(&tree.state().node_by_id(NodeId(1)).unwrap())
203+
);
204+
}
205+
206+
#[test]
207+
fn text_run() {
208+
let update = TreeUpdate {
209+
nodes: vec![
210+
(NodeId(0), {
211+
let mut node = Node::new(Role::TextInput);
212+
node.set_children(vec![NodeId(1)]);
213+
node
214+
}),
215+
(NodeId(1), Node::new(Role::TextRun)),
216+
],
217+
tree: Some(Tree::new(NodeId(0))),
218+
focus: NodeId(0),
219+
};
220+
let tree = crate::Tree::new(update, false);
221+
assert_eq!(
222+
FilterResult::ExcludeNode,
223+
common_filter(&tree.state().node_by_id(NodeId(1)).unwrap())
224+
);
225+
}
226+
}

0 commit comments

Comments
 (0)