@@ -43,3 +43,184 @@ pub fn common_filter_with_root_exception(node: &Node) -> FilterResult {
43
43
}
44
44
common_filter ( node)
45
45
}
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