Skip to content

Commit 6a78b2a

Browse files
committedDec 18, 2020
8258645: Bring Jemmy 1.3.11 to JDK test base
Reviewed-by: serb
1 parent 7f92d18 commit 6a78b2a

File tree

9 files changed

+114
-54
lines changed

9 files changed

+114
-54
lines changed
 

‎test/jdk/sanity/client/SwingSet/src/SliderDemoTest.java

+43-20
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
1-
21
/*
3-
* Copyright (c) 2016, 2019, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2016, 2020, Oracle and/or its affiliates. All rights reserved.
43
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
54
*
65
* This code is free software; you can redistribute it and/or modify it
@@ -30,6 +29,10 @@
3029
import javax.swing.UIManager;
3130

3231
import static org.testng.AssertJUnit.*;
32+
33+
import org.netbeans.jemmy.drivers.DriverManager;
34+
import org.netbeans.jemmy.drivers.scrolling.KeyboardJSliderScrollDriver;
35+
import org.testng.annotations.BeforeClass;
3336
import org.testng.annotations.Test;
3437
import org.netbeans.jemmy.ClassReference;
3538
import org.netbeans.jemmy.ComponentChooser;
@@ -68,6 +71,11 @@ public class SliderDemoTest {
6871
private static final int VERTICAL_MINOR_TICKS_SLIDER_MINIMUM = 0;
6972
private static final int VERTICAL_MINOR_TICKS_SLIDER_MAXIMUM = 100;
7073

74+
@BeforeClass
75+
public void useKeyboardSliderDriver() {
76+
DriverManager.setScrollDriver(new KeyboardJSliderScrollDriver());
77+
}
78+
7179
@Test(dataProvider = "availableLookAndFeels", dataProviderClass = TestHelpers.class)
7280
public void test(String lookAndFeel) throws Exception {
7381
UIManager.setLookAndFeel(lookAndFeel);
@@ -139,70 +147,81 @@ private void disabled(JFrameOperator jfo, String accessibleName)
139147

140148
private void checkMaximum(JSliderOperator jso, int maxValue) {
141149
jso.scrollToMaximum();
142-
waitSliderValue(jso, jSlider -> jSlider.getValue() == maxValue);
150+
waitSliderValue(jso, jSlider -> jSlider.getValue() == maxValue,
151+
"value == " + maxValue);
143152
}
144153

145154
private void checkMinimum(JSliderOperator jso, int minValue) {
146155
jso.scrollToMinimum();
147-
waitSliderValue(jso, jSlider -> jSlider.getValue() == minValue);
156+
waitSliderValue(jso, jSlider -> jSlider.getValue() == minValue,
157+
"value == " + minValue);
148158
}
149159

150160
private void checkKeyboard(JSliderOperator jso) {
151161
boolean isMotif = LookAndFeel.isMotif();
152162
checkKeyPress(jso, KeyEvent.VK_HOME,
153-
jSlider -> jSlider.getValue() == jso.getMinimum());
163+
jSlider -> jSlider.getValue() == jso.getMinimum(),
164+
"value == " + jso.getMinimum());
154165

155166
{
156167
int expectedValue = jso.getValue() + 1;
157168
checkKeyPress(jso, KeyEvent.VK_UP,
158-
jSlider -> jSlider.getValue() >= expectedValue);
169+
jSlider -> jSlider.getValue() >= expectedValue,
170+
"value >= " + expectedValue);
159171
}
160172
{
161173
int expectedValue = jso.getValue() + 1;
162174
checkKeyPress(jso, KeyEvent.VK_RIGHT,
163-
jSlider -> jSlider.getValue() >= expectedValue);
175+
jSlider -> jSlider.getValue() >= expectedValue,
176+
"value >= " + expectedValue);
164177
}
165178
if (!isMotif) {
166179
int expectedValue = jso.getValue() + 11;
167180
checkKeyPress(jso, KeyEvent.VK_PAGE_UP,
168-
jSlider -> jSlider.getValue() >= expectedValue);
181+
jSlider -> jSlider.getValue() >= expectedValue,
182+
"value >= " + expectedValue);
169183
}
170184

171185
checkKeyPress(jso, KeyEvent.VK_END,
172-
jSlider -> jSlider.getValue() == jso.getMaximum());
186+
jSlider -> jSlider.getValue() == jso.getMaximum(),
187+
"value == " + jso.getMaximum());
173188

174189
{
175190
int expectedValue = jso.getValue() - 1;
176191
checkKeyPress(jso, KeyEvent.VK_DOWN,
177-
jSlider -> jSlider.getValue() <= expectedValue);
192+
jSlider -> jSlider.getValue() <= expectedValue,
193+
"value <= " + expectedValue);
178194
}
179195
{
180196
int expectedValue = jso.getValue() - 1;
181197
checkKeyPress(jso, KeyEvent.VK_LEFT,
182-
jSlider -> jSlider.getValue() <= expectedValue);
198+
jSlider -> jSlider.getValue() <= expectedValue,
199+
"value <= " + expectedValue);
183200
}
184201
if (!isMotif) {
185202
int expectedValue = jso.getValue() - 11;
186203
checkKeyPress(jso, KeyEvent.VK_PAGE_DOWN,
187-
jSlider -> jSlider.getValue() <= expectedValue);
204+
jSlider -> jSlider.getValue() <= expectedValue,
205+
"value <= " + expectedValue);
188206
}
189207
}
190208

191209
private void checkKeyPress(JSliderOperator jso, int keyCode,
192-
Predicate<JSliderOperator> predicate) {
210+
Predicate<JSliderOperator> predicate,
211+
String description) {
193212
jso.pushKey(keyCode);
194-
waitSliderValue(jso, predicate);
213+
waitSliderValue(jso, predicate, description);
195214
}
196215

197216
private void waitSliderValue(JSliderOperator jso,
198-
Predicate<JSliderOperator> predicate) {
217+
Predicate<JSliderOperator> predicate, String description) {
199218
jso.waitState(new ComponentChooser() {
200219
public boolean checkComponent(Component comp) {
201220
return predicate.test(jso);
202221
}
203222

204223
public String getDescription() {
205-
return "Wait till Slider attains the specified state.";
224+
return description;
206225
}
207226
});
208227
}
@@ -211,14 +230,16 @@ private void checkMoveForward(JSliderOperator jso, int value) {
211230
jso.setValue(jso.getMinimum());
212231
int finalValue = jso.getValue() + value;
213232
jso.scrollToValue(finalValue);
214-
waitSliderValue(jso, jSlider -> jSlider.getValue() == finalValue);
233+
waitSliderValue(jso, jSlider -> jSlider.getValue() == finalValue,
234+
"value == " + finalValue);
215235
}
216236

217237
private void checkSnapToTick(JSliderOperator jso, int expectedLower,
218238
int expectedHigher) {
219239
jso.pressMouse(jso.getCenterXForClick(), jso.getCenterYForClick());
220240
waitSliderValue(jso, jSlider -> jSlider.getValue() == expectedLower
221-
|| jSlider.getValue() == expectedHigher);
241+
|| jSlider.getValue() == expectedHigher,
242+
"value is either" + expectedLower + " or " + expectedHigher);
222243
jso.releaseMouse();
223244
}
224245

@@ -230,13 +251,15 @@ private void checkMouse(JSliderOperator jso) {
230251
jso.setValue((jso.getMaximum() + jso.getMinimum()) / 2);
231252
jso.pressMouse(jso.getCenterXForClick(), jso.getCenterYForClick());
232253
jso.dragMouse(jso.getWidth() + 10, jso.getHeight());
233-
waitSliderValue(jso, jSlider -> jSlider.getValue() == jSlider.getMaximum());
254+
waitSliderValue(jso, jSlider -> jSlider.getValue() == jSlider.getMaximum(),
255+
"value == " + jso.getMaximum());
234256
jso.releaseMouse();
235257

236258
// Check mouse click by clicking on the center of the track 2 times
237259
// and waiting till the slider value has changed from its previous
238260
// value as a result of the clicks.
239261
jso.clickMouse(jso.getCenterXForClick(), jso.getCenterYForClick(), 2);
240-
waitSliderValue(jso, jSlider -> jSlider.getValue() != jSlider.getMaximum());
262+
waitSliderValue(jso, jSlider -> jSlider.getValue() != jSlider.getMaximum(),
263+
"value != " + jso.getMaximum());
241264
}
242265
}

‎test/jdk/sanity/client/lib/jemmy/src/org/netbeans/jemmy/drivers/DefaultDriverInstaller.java

+2-4
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,6 @@
2424
*/
2525
package org.netbeans.jemmy.drivers;
2626

27-
import javax.swing.UIManager;
28-
2927
import org.netbeans.jemmy.ClassReference;
3028
import org.netbeans.jemmy.JemmyException;
3129
import org.netbeans.jemmy.JemmyProperties;
@@ -41,7 +39,7 @@
4139
import org.netbeans.jemmy.drivers.menus.DefaultJMenuDriver;
4240
import org.netbeans.jemmy.drivers.menus.QueueJMenuDriver;
4341
import org.netbeans.jemmy.drivers.scrolling.JScrollBarDriver;
44-
import org.netbeans.jemmy.drivers.scrolling.KeyboardJSliderScrollDriver;
42+
import org.netbeans.jemmy.drivers.scrolling.JSliderDriver;
4543
import org.netbeans.jemmy.drivers.scrolling.JSplitPaneDriver;
4644
import org.netbeans.jemmy.drivers.scrolling.ScrollPaneDriver;
4745
import org.netbeans.jemmy.drivers.scrolling.ScrollbarDriver;
@@ -110,7 +108,7 @@ public DefaultDriverInstaller(boolean shortcutEvents) {
110108
new ScrollPaneDriver(),
111109
new JScrollBarDriver(),
112110
new JSplitPaneDriver(),
113-
new KeyboardJSliderScrollDriver(),
111+
new JSliderDriver(),
114112
createSpinnerDriver(),
115113
new ButtonMouseDriver(),
116114
new JTabMouseDriver(),

‎test/jdk/sanity/client/lib/jemmy/src/org/netbeans/jemmy/operators/ComponentOperator.java

+27-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 1997, 2020, Oracle and/or its affiliates. All rights reserved.
33
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
44
*
55
* This code is free software; you can redistribute it and/or modify it
@@ -78,6 +78,8 @@
7878
import org.netbeans.jemmy.drivers.KeyDriver;
7979
import org.netbeans.jemmy.drivers.MouseDriver;
8080

81+
import javax.accessibility.AccessibleContext;
82+
8183
/**
8284
* Root class for all component operators.
8385
*
@@ -122,6 +124,20 @@ public class ComponentOperator extends Operator
122124
*/
123125
public static final String NAME_DPROP = "Name:";
124126

127+
/**
128+
* Identifier for a name property.
129+
*
130+
* @see #getDump
131+
*/
132+
public static final String ACCESSIBLE_NAME_DPROP = "Accessible name:";
133+
134+
/**
135+
* Identifier for a name property.
136+
*
137+
* @see #getDump
138+
*/
139+
public static final String ACCESSIBLE_DESCRIPTION_DPROP = "Accessible description:";
140+
125141
/**
126142
* Identifier for a visible property.
127143
*
@@ -1222,7 +1238,7 @@ public String toString() {
12221238
/**
12231239
* Wait till the component reaches exact location on screen.
12241240
*
1225-
* @param exactLocation exact expected screen location.
1241+
* @param exactlocation exact expected screen location.
12261242
*/
12271243
public void waitComponentLocationOnScreen(Point exactlocation) {
12281244
waitComponentLocationOnScreen(exactlocation, exactlocation);
@@ -1270,6 +1286,15 @@ public Hashtable<String, Object> getDump() {
12701286
if (getSource().getName() != null) {
12711287
result.put(NAME_DPROP, getSource().getName());
12721288
}
1289+
AccessibleContext context = source.getAccessibleContext();
1290+
if(context != null) {
1291+
if(context.getAccessibleName() != null) {
1292+
result.put(ACCESSIBLE_NAME_DPROP, context.getAccessibleName());
1293+
}
1294+
if(context.getAccessibleDescription() != null) {
1295+
result.put(ACCESSIBLE_DESCRIPTION_DPROP, context.getAccessibleDescription());
1296+
}
1297+
}
12731298
result.put(IS_VISIBLE_DPROP, getSource().isVisible() ? "true" : "false");
12741299
result.put(IS_SHOWING_DPROP, getSource().isShowing() ? "true" : "false");
12751300
result.put(X_DPROP, Integer.toString(getSource().getX()));

‎test/jdk/sanity/client/lib/jemmy/src/org/netbeans/jemmy/operators/JFileChooserOperator.java

+8-7
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
import javax.swing.JTextField;
4444
import javax.swing.JToggleButton;
4545
import javax.swing.ListModel;
46+
import javax.swing.UIManager;
4647
import javax.swing.filechooser.FileFilter;
4748
import javax.swing.filechooser.FileSystemView;
4849
import javax.swing.filechooser.FileView;
@@ -341,18 +342,18 @@ public String toString() {
341342
* @return a component being used to display directory content.
342343
*/
343344
public Component getFileList() {
344-
int index = 0;
345-
// In GTK and Motif L&F, there are two JLists, one is to list folders
346-
// and second one one is to list files
345+
final String fileListName;
347346
if (LookAndFeel.isMotif() || LookAndFeel.isGTK()) {
348-
index =1;
347+
fileListName = UIManager.getString("FileChooser.filesLabelText", getLocale());
348+
} else {
349+
fileListName = UIManager.getString("FileChooser.filesListAccessibleName", getLocale());
349350
}
350351
return innerSearcher.
351352
findComponent(new ComponentChooser() {
352353
@Override
353354
public boolean checkComponent(Component comp) {
354-
return (comp != null
355-
&& (comp instanceof JList || comp instanceof JTable));
355+
return ((comp instanceof JList && fileListName.equals(comp.getAccessibleContext().getAccessibleName()))
356+
|| comp instanceof JTable);
356357
}
357358

358359
@Override
@@ -364,7 +365,7 @@ public String getDescription() {
364365
public String toString() {
365366
return "JFileChooserOperator.getFileList.ComponentChooser{description = " + getDescription() + '}';
366367
}
367-
}, index);
368+
});
368369
}
369370

370371
/**

‎test/jdk/sanity/client/lib/jemmy/src/org/netbeans/jemmy/operators/JTextComponentOperator.java

+3-5
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 1997, 2020, Oracle and/or its affiliates. All rights reserved.
33
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
44
*
55
* This code is free software; you can redistribute it and/or modify it
@@ -828,10 +828,8 @@ public String toString() {
828828
public Hashtable<String, Object> getDump() {
829829
Hashtable<String, Object> result = super.getDump();
830830
result.put(TEXT_DPROP, ((JTextComponent) getSource()).getText());
831-
if (((JTextComponent) getSource()).getSelectedText() != null
832-
&& !((JTextComponent) getSource()).getSelectedText().equals("")) {
833-
result.put(SELECTED_TEXT_DPROP, ((JTextComponent) getSource()).getSelectedText());
834-
}
831+
String selected = ((JTextComponent) getSource()).getSelectedText();
832+
result.put(SELECTED_TEXT_DPROP, (selected != null) ? selected : "");
835833
result.put(IS_EDITABLE_DPROP, ((JTextComponent) getSource()).isEditable() ? "true" : "false");
836834
return result;
837835
}

‎test/jdk/sanity/client/lib/jemmy/src/org/netbeans/jemmy/operators/JToolTipOperator.java

+2-3
Original file line numberDiff line numberDiff line change
@@ -320,9 +320,8 @@ public String toString() {
320320
try {
321321
return stateWaiter.waitAction(null);
322322
} catch (InterruptedException e) {
323-
Thread.currentThread().interrupt();
324-
throw (new JemmyException("Waiting of " + waitable.getDescription()
325-
+ " state has been interrupted!"));
323+
throw new JemmyException("Waiting of " + waitable.getDescription()
324+
+ " state has been interrupted!");
326325
}
327326
}
328327

‎test/jdk/sanity/client/lib/jemmy/src/org/netbeans/jemmy/operators/Operator.java

+18-11
Original file line numberDiff line numberDiff line change
@@ -720,10 +720,9 @@ public <R> R waitState(Waitable<R, Void> waitable) {
720720
try {
721721
return stateWaiter.waitAction(null);
722722
} catch (InterruptedException e) {
723-
Thread.currentThread().interrupt();
724-
throw (new JemmyException(
723+
throw new JemmyException(
725724
"Waiting of \"" + waitable.getDescription()
726-
+ "\" state has been interrupted!"));
725+
+ "\" state has been interrupted!");
727726
}
728727
}
729728

@@ -735,14 +734,22 @@ public <R> R waitState(Waitable<R, Void> waitable) {
735734
* defined by {@code "ComponentOperator.WaitStateTimeout"}
736735
*/
737736
public void waitStateOnQueue(final ComponentChooser state) {
738-
waitState((comp) -> {
739-
return (boolean) (queueTool.invokeSmoothly(
740-
new QueueTool.QueueAction<Object>("checkComponent") {
741-
@Override
742-
public final Object launch() throws Exception {
743-
return state.checkComponent(comp);
744-
}
745-
}));
737+
waitState(new ComponentChooser() {
738+
@Override
739+
public boolean checkComponent(Component comp) {
740+
return (boolean) (queueTool.invokeSmoothly(
741+
new QueueTool.QueueAction<Object>("checkComponent") {
742+
@Override
743+
public final Object launch() throws Exception {
744+
return state.checkComponent(comp);
745+
}
746+
}));
747+
}
748+
749+
@Override
750+
public String getDescription() {
751+
return state.getDescription();
752+
}
746753
});
747754
}
748755

‎test/jdk/sanity/client/lib/jemmy/src/org/netbeans/jemmy/operators/TextComponentOperator.java

+10-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 1997, 2020, Oracle and/or its affiliates. All rights reserved.
33
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
44
*
55
* This code is free software; you can redistribute it and/or modify it
@@ -58,6 +58,13 @@ public class TextComponentOperator extends ComponentOperator
5858
*/
5959
public static final String TEXT_DPROP = "Text";
6060

61+
/**
62+
* Identifier for a "selected text" property.
63+
*
64+
* @see #getDump
65+
*/
66+
public static final String SELECTED_TEXT_DPROP = "Selected text";
67+
6168
private final static long PUSH_KEY_TIMEOUT = 0;
6269
private final static long BETWEEN_KEYS_TIMEOUT = 0;
6370
private final static long CHANGE_CARET_POSITION_TIMEOUT = 60000;
@@ -505,6 +512,8 @@ public String toString() {
505512
public Hashtable<String, Object> getDump() {
506513
Hashtable<String, Object> result = super.getDump();
507514
result.put(TEXT_DPROP, ((TextComponent) getSource()).getText());
515+
String selected = ((TextComponent) getSource()).getSelectedText();
516+
result.put(SELECTED_TEXT_DPROP, (selected != null) ? selected : "");
508517
return result;
509518
}
510519

Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
Manifest-version: 1.0
22
Main-Class: org.netbeans.jemmy.JemmyProperties
33
Jemmy-MajorVersion: 3.0
4-
Jemmy-MinorVersion: 8.0
4+
Jemmy-MinorVersion: 11.0
55
Jemmy-Build: @BUILD_NUMBER@
66

0 commit comments

Comments
 (0)
Please sign in to comment.