@@ -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