8211160: Handle different look and feels in JInternalFrameOperator
Reviewed-by: serb
Contributed-by: abdul.kolarkunnu@oracle.com
--- a/test/jdk/sanity/client/lib/jemmy/src/org/netbeans/jemmy/drivers/DefaultDriverInstaller.java Wed Oct 03 08:03:13 2018 -0700
+++ b/test/jdk/sanity/client/lib/jemmy/src/org/netbeans/jemmy/drivers/DefaultDriverInstaller.java Mon Oct 01 18:03:19 2018 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -24,6 +24,8 @@
*/
package org.netbeans.jemmy.drivers;
+import javax.swing.UIManager;
+
import org.netbeans.jemmy.ClassReference;
import org.netbeans.jemmy.JemmyException;
import org.netbeans.jemmy.JemmyProperties;
@@ -50,6 +52,7 @@
import org.netbeans.jemmy.drivers.windows.DefaultFrameDriver;
import org.netbeans.jemmy.drivers.windows.DefaultInternalFrameDriver;
import org.netbeans.jemmy.drivers.windows.DefaultWindowDriver;
+import org.netbeans.jemmy.drivers.windows.InternalFramePopupMenuDriver;
/**
* Installs all necessary drivers for Jemmy operators except low-level drivers
@@ -119,9 +122,9 @@
new ChoiceDriver(),
new DefaultFrameDriver(),
new DefaultWindowDriver(),
- new DefaultInternalFrameDriver(),
- new DefaultInternalFrameDriver(),
- new DefaultInternalFrameDriver(),
+ "Motif".equals(UIManager.getLookAndFeel().getID())? new InternalFramePopupMenuDriver(): new DefaultInternalFrameDriver(),
+ "Motif".equals(UIManager.getLookAndFeel().getID())? new InternalFramePopupMenuDriver(): new DefaultInternalFrameDriver(),
+ "Motif".equals(UIManager.getLookAndFeel().getID())? new InternalFramePopupMenuDriver(): new DefaultInternalFrameDriver(),
new APIFocusDriver(),
new MouseFocusDriver(),
(shortcutEvents ? new QueueJMenuDriver() : new DefaultJMenuDriver()),
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/sanity/client/lib/jemmy/src/org/netbeans/jemmy/drivers/windows/InternalFramePopupMenuDriver.java Mon Oct 01 18:03:19 2018 -0700
@@ -0,0 +1,87 @@
+/*
+ * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation. Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package org.netbeans.jemmy.drivers.windows;
+
+import javax.swing.UIManager;
+
+import org.netbeans.jemmy.operators.ComponentOperator;
+import org.netbeans.jemmy.operators.JInternalFrameOperator;
+import org.netbeans.jemmy.operators.JMenuItemOperator;
+import org.netbeans.jemmy.operators.JPopupMenuOperator;
+
+/**
+ * InternalFrameDriver to do Close, Minimize, Maximize, and Restore actions
+ * using popup menus.
+ */
+public class InternalFramePopupMenuDriver extends DefaultInternalFrameDriver {
+
+ @Override
+ public void requestClose(ComponentOperator oper) {
+ checkSupported(oper);
+ pushMenuItem(oper, UIManager.getString(
+ "InternalFrameTitlePane.closeButtonText"));
+ }
+
+ @Override
+ public void iconify(ComponentOperator oper) {
+ checkSupported(oper);
+ pushMenuItem(oper, UIManager.getString(
+ "InternalFrameTitlePane.minimizeButtonText"));
+ }
+
+ @Override
+ public void maximize(ComponentOperator oper) {
+ checkSupported(oper);
+ if (!((JInternalFrameOperator) oper).isMaximum()) {
+ if (!((JInternalFrameOperator) oper).isSelected()) {
+ activate(oper);
+ }
+ pushMenuItem(oper, UIManager.getString(
+ "InternalFrameTitlePane.maximizeButtonText"));
+ }
+ }
+
+ @Override
+ public void demaximize(ComponentOperator oper) {
+ checkSupported(oper);
+ if (((JInternalFrameOperator) oper).isMaximum()) {
+ if (!((JInternalFrameOperator) oper).isSelected()) {
+ activate(oper);
+ }
+ pushMenuItem(oper, UIManager.getString(
+ "InternalFrameTitlePane.restoreButtonText"));
+ }
+ }
+
+ private void pushMenuItem(ComponentOperator oper,
+ String menuText) {
+ ((JInternalFrameOperator) oper).getPopupButton().push();
+ JPopupMenuOperator popupMenu = new JPopupMenuOperator();
+ JMenuItemOperator menuItem =
+ new JMenuItemOperator(popupMenu, menuText);
+ menuItem.push();
+ }
+}
\ No newline at end of file
--- a/test/jdk/sanity/client/lib/jemmy/src/org/netbeans/jemmy/operators/JInternalFrameOperator.java Wed Oct 03 08:03:13 2018 -0700
+++ b/test/jdk/sanity/client/lib/jemmy/src/org/netbeans/jemmy/operators/JInternalFrameOperator.java Mon Oct 01 18:03:19 2018 -0700
@@ -170,6 +170,8 @@
*/
protected JButtonOperator closeOper = null;
+ protected JButtonOperator popupButtonOper = null;
+
/**
* A title operator.
*/
@@ -202,9 +204,8 @@
* @param index an index between appropriate ones.
*/
public JInternalFrameOperator(ContainerOperator<?> cont, ComponentChooser chooser, int index) {
- this((JInternalFrame) cont.
- waitSubComponent(new JInternalFrameFinder(chooser),
- index));
+ this(waitJInternalFrame((Container)cont.getSource(),
+ chooser, index));
copyEnvironment(cont);
}
@@ -255,7 +256,7 @@
*
*/
public JInternalFrameOperator(ContainerOperator<?> cont, int index) {
- this((JInternalFrame) waitComponent(cont,
+ this(waitJInternalFrame((Container)cont.getSource(),
new JInternalFrameFinder(),
index));
copyEnvironment(cont);
@@ -667,6 +668,11 @@
return closeOper;
}
+ public JButtonOperator getPopupButton() {
+ initOperators();
+ return popupButtonOper;
+ }
+
/**
* Waits for the title pane.
*
@@ -1413,21 +1419,27 @@
return "JInternalFrameOperator.initOperators.ComponentChooser{description = " + getDescription() + '}';
}
}) != null) {
- minOper = new JButtonOperator(titleOperator,
+ if("Motif".equals(UIManager.getLookAndFeel().getID())) {
+ popupButtonOper = new JButtonOperator(titleOperator, 0);
+ } else {
+ minOper = new JButtonOperator(titleOperator,
new JComponentByTipFinder(MINIMIZE_BUTTON_TOOLTIP));
- if (((JInternalFrame) getSource()).isMaximizable()) {
- maxOper = new JButtonOperator(titleOperator,
+ if (((JInternalFrame) getSource()).isMaximizable()) {
+ maxOper = new JButtonOperator(titleOperator,
new JComponentByTipFinder(MAXIMIZE_BUTTON_TOOLTIP));
- } else {
- maxOper = null;
+ } else {
+ maxOper = null;
+ }
}
} else {
minOper = null;
maxOper = null;
}
if (isClosable()) {
- closeOper = new JButtonOperator(titleOperator,
+ if(!"Motif".equals(UIManager.getLookAndFeel().getID())) {
+ closeOper = new JButtonOperator(titleOperator,
new JComponentByTipFinder(CLOSE_BUTTON_TOOLTIP));
+ }
} else {
closeOper = null;
}
@@ -1588,23 +1600,24 @@
}
/**
- * Creates an operator for the correspondent intenal frame.
+ * Creates an operator for the correspondent internal frame.
*
* @return an operator.
*/
public JInternalFrame getInternalFrame() {
- return ((JInternalFrame) getEventDispatcher().
- invokeExistingMethod("getInternalFrame",
- null,
- null,
- output));
+ return (runMapping(new MapAction<JInternalFrame>("getInternalFrame") {
+ @Override
+ public JInternalFrame map() {
+ return ((JInternalFrame.JDesktopIcon) getSource()).getInternalFrame();
+ }
+ }));
}
/**
* Pushs the deiconifying button.
*/
public void pushButton() {
- new JButtonOperator(this).push();
+ this.clickMouse(2);
}
}
--- a/test/jdk/sanity/client/lib/jemmy/src/org/netbeans/jemmy/version_info Wed Oct 03 08:03:13 2018 -0700
+++ b/test/jdk/sanity/client/lib/jemmy/src/org/netbeans/jemmy/version_info Mon Oct 01 18:03:19 2018 -0700
@@ -1,6 +1,6 @@
Manifest-version: 1.0
Main-Class: org.netbeans.jemmy.JemmyProperties
Jemmy-MajorVersion: 3.0
-Jemmy-MinorVersion: 4.0
+Jemmy-MinorVersion: 5.0
Jemmy-Build: @BUILD_NUMBER@