30
30
import static org .junit .Assert .assertTrue ;
31
31
32
32
import java .util .Set ;
33
+
34
+ import javafx .css .PseudoClass ;
33
35
import javafx .scene .Group ;
34
36
import javafx .scene .Node ;
35
37
import javafx .scene .ParentShim ;
39
41
40
42
public class Node_lookup_Test {
41
43
// Group & #root
42
- // / \
43
- // #a .b.c
44
- // / \ \
45
- // .d #e .d
46
- private Group root , a , bc , d , e , d2 ;
44
+ // / \ \
45
+ // #a .b.c .f:testPseudo
46
+ // / \ \ / \
47
+ // .d #e .d .g:testPseudo1 .h.g:testPseudo1:testPseudo2
48
+ private Group root , a , bc , d , e , d2 , f , g , hg ;
47
49
48
50
@ Before public void setup () {
49
51
root = new Group ();
@@ -58,12 +60,23 @@ public class Node_lookup_Test {
58
60
bc .getStyleClass ().addAll ("b" , "c" );
59
61
d2 = new Group ();
60
62
d2 .getStyleClass ().add ("d" );
61
- ParentShim .getChildren (root ).addAll (a , bc );
63
+ f = new Group ();
64
+ f .getStyleClass ().add ("f" );
65
+ f .pseudoClassStateChanged (PseudoClass .getPseudoClass ("testPseudo" ), true );
66
+ g = new Group ();
67
+ g .getStyleClass ().add ("g" );
68
+ g .pseudoClassStateChanged (PseudoClass .getPseudoClass ("testPseudo1" ), true );
69
+ hg = new Group ();
70
+ hg .getStyleClass ().addAll ("h" , "g" );
71
+ hg .pseudoClassStateChanged (PseudoClass .getPseudoClass ("testPseudo1" ), true );
72
+ hg .pseudoClassStateChanged (PseudoClass .getPseudoClass ("testPseudo2" ), true );
73
+ ParentShim .getChildren (root ).addAll (a , bc , f );
62
74
ParentShim .getChildren (a ).addAll (d , e );
63
75
ParentShim .getChildren (bc ).addAll (d2 );
76
+ ParentShim .getChildren (f ).addAll (g , hg );
64
77
}
65
78
66
- @ Test public void quickTest () {
79
+ @ Test public void test_lookup_on_nodes_without_pseudo_classes () {
67
80
Node found = root .lookup ("Group" );
68
81
assertSame (root , found );
69
82
@@ -86,7 +99,7 @@ public class Node_lookup_Test {
86
99
assertSame (bc , found );
87
100
}
88
101
89
- @ Test public void lookupAllTest () {
102
+ @ Test public void test_lookupAll_on_nodes_without_pseudo_classes () {
90
103
Set <Node > nodes = root .lookupAll ("#a" );
91
104
assertEquals (1 , nodes .size ());
92
105
assertTrue (nodes .contains (a ));
@@ -96,4 +109,131 @@ public class Node_lookup_Test {
96
109
assertTrue (nodes .contains (d ));
97
110
assertTrue (nodes .contains (d2 ));
98
111
}
112
+
113
+ @ Test
114
+ public void test_lookup_and_lookupAll_on_nodes_with_pseudo_classes () {
115
+ Set <Node > nodes = root .lookupAll (".h:testPseudo2" );
116
+ assertEquals (1 , nodes .size ());
117
+ assertTrue (nodes .contains (hg ));
118
+
119
+ Node found = root .lookup (".h:testPseudo2" );
120
+ assertSame (hg , found );
121
+
122
+ found = root .lookup (":testPseudo2" );
123
+ assertSame (hg , found );
124
+
125
+ found = root .lookup (".h:testPseudo1:testPseudo2" );
126
+ assertSame (hg , found );
127
+
128
+ nodes = root .lookupAll (".g:testPseudo1" );
129
+ assertEquals (2 , nodes .size ());
130
+ assertTrue (nodes .contains (g ));
131
+ assertTrue (nodes .contains (hg ));
132
+
133
+ nodes = root .lookupAll (":testPseudo1" );
134
+ assertEquals (2 , nodes .size ());
135
+ assertTrue (nodes .contains (g ));
136
+ assertTrue (nodes .contains (hg ));
137
+
138
+ nodes = root .lookupAll (".f > .h:testPseudo1" );
139
+ assertEquals (1 , nodes .size ());
140
+ assertTrue (nodes .contains (hg ));
141
+
142
+ nodes = root .lookupAll (".f:testPseudo > .h:testPseudo1" );
143
+ assertEquals (1 , nodes .size ());
144
+ assertTrue (nodes .contains (hg ));
145
+
146
+ nodes = root .lookupAll (".f:randomPseudo" );
147
+ assertEquals (0 , nodes .size ());
148
+ }
149
+
150
+ /**
151
+ * Verifies that the lookup ignores pseudo classes when selector contains no explicit pseudo class, but all the nodes have pseudo classes set to them.
152
+ */
153
+ @ Test
154
+ public void test_lookupAll_on_nodes_with_pseudo_classes_ignoring_pseudo_classes_in_selector () {
155
+ // Except root node all the other nodes (f, g, hg) have pseudo classes set to them
156
+ Set <Node > nodes = root .lookupAll (".g" );
157
+ assertEquals (2 , nodes .size ());
158
+ assertTrue (nodes .contains (g ));
159
+ assertTrue (nodes .contains (hg ));
160
+
161
+ nodes = root .lookupAll ("#root .g" );
162
+ assertEquals (2 , nodes .size ());
163
+ assertTrue (nodes .contains (g ));
164
+ assertTrue (nodes .contains (hg ));
165
+
166
+ nodes = root .lookupAll (".f .g" );
167
+ assertEquals (2 , nodes .size ());
168
+ assertTrue (nodes .contains (g ));
169
+ assertTrue (nodes .contains (hg ));
170
+
171
+ nodes = root .lookupAll (".f .h" );
172
+ assertEquals (1 , nodes .size ());
173
+ assertTrue (nodes .contains (hg ));
174
+
175
+ nodes = root .lookupAll (".f > .h" );
176
+ assertEquals (1 , nodes .size ());
177
+ assertTrue (nodes .contains (hg ));
178
+
179
+ nodes = root .lookupAll (".h" );
180
+ assertEquals (1 , nodes .size ());
181
+ assertTrue (nodes .contains (hg ));
182
+
183
+ nodes = root .lookupAll ("#root > .f" );
184
+ assertEquals (1 , nodes .size ());
185
+ assertTrue (nodes .contains (f ));
186
+
187
+ nodes = root .lookupAll ("#root .f" );
188
+ assertEquals (1 , nodes .size ());
189
+ assertTrue (nodes .contains (f ));
190
+
191
+ nodes = root .lookupAll (".random" );
192
+ assertEquals (0 , nodes .size ());
193
+
194
+ nodes = root .lookupAll (".random .h" );
195
+ assertEquals (0 , nodes .size ());
196
+ }
197
+
198
+ /**
199
+ * Verifies that the lookup ignores pseudo classes when selector contains no explicit pseudo class.
200
+ */
201
+ @ Test
202
+ public void test_lookupAll_on_nodes_with_same_style_and_different_pseudo_classes () {
203
+ Group root = new Group ();
204
+ root .setId ("root" );
205
+
206
+ Group xy = new Group ();
207
+ xy .getStyleClass ().addAll ("x" , "y" );
208
+
209
+ Group x = new Group ();
210
+ x .getStyleClass ().addAll ("x" );
211
+
212
+ Group x1 = new Group ();
213
+ x1 .getStyleClass ().addAll ("x" );
214
+ x1 .pseudoClassStateChanged (PseudoClass .getPseudoClass ("pseudo" ), true );
215
+
216
+ ParentShim .getChildren (root ).addAll (x , x1 , xy );
217
+
218
+ Set <Node > nodes = root .lookupAll (".x" );
219
+ assertEquals (3 , nodes .size ());
220
+ assertTrue (nodes .contains (x ));
221
+ assertTrue (nodes .contains (x1 ));
222
+ assertTrue (nodes .contains (xy ));
223
+
224
+ nodes = root .lookupAll (".x:pseudo" );
225
+ assertTrue (nodes .contains (x1 ));
226
+
227
+ nodes = root .lookupAll ("#root .x" );
228
+ assertEquals (3 , nodes .size ());
229
+ assertTrue (nodes .contains (x ));
230
+ assertTrue (nodes .contains (x1 ));
231
+ assertTrue (nodes .contains (xy ));
232
+
233
+ nodes = root .lookupAll ("#root .x:pseudo" );
234
+ assertTrue (nodes .contains (x1 ));
235
+
236
+ nodes = root .lookupAll (".x:random" );
237
+ assertEquals (0 , nodes .size ());
238
+ }
99
239
}
0 commit comments