blob: fdc698ad6012551f8023403e6811620c9ede7749 [file] [log] [blame]
/*
* Copyright (c) 1999, 2016, 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.
*/
import javax.swing.*;
import java.awt.*;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;
import java.awt.event.FocusAdapter;
import java.awt.event.FocusEvent;
import java.awt.event.InputEvent;
import java.util.Properties;
/*
* @test
* @key headful
* @summary To check the functionality of newly added API getSystemSelection & make sure
* that it's mapped to primary clipboard
* @author Jitender(jitender.singh@eng.sun.com) area=AWT
* @library ../../../../lib/testlibrary
* @build ExtendedRobot
* @run main SystemSelectionSwingTest
*/
public class SystemSelectionSwingTest {
JFrame jframe;
JTextField jtf1, jtf2;
Clipboard clip;
Transferable t;
public static void main(String[] args) throws Exception {
new SystemSelectionSwingTest().doTest();
}
SystemSelectionSwingTest() {
jframe = new JFrame();
jframe.setSize(200, 200);
jtf1 = new JTextField();
jtf1.addFocusListener( new FocusAdapter() {
public void focusGained(FocusEvent fe) {
fe.getSource();
}
});
jtf2 = new JTextField();
jframe.add(jtf2, BorderLayout.NORTH);
jframe.add(jtf1, BorderLayout.CENTER);
jframe.setVisible(true);
jframe.toFront();
jtf1.requestFocus();
jtf1.setText("Selection Testing");
}
// Check whether Security manager is there
public void checkSecurity() {
SecurityManager sm = System.getSecurityManager();
if (sm == null) {
System.out.println("security manager is not there");
getPrimaryClipboard();
} else {
try {
sm.checkPermission(new AWTPermission("accessClipboard"));
getPrimaryClipboard();
} catch(SecurityException e) {
clip = null;
System.out.println("Access to System selection is not allowed");
}
}
}
// Get the contents from the clipboard
void getClipboardContent() throws Exception {
t = clip.getContents(this);
if ( (t != null) && (t.isDataFlavorSupported(DataFlavor.stringFlavor) )) {
jtf2.setBackground(Color.red);
jtf2.setForeground(Color.black);
jtf2.setText((String) t.getTransferData(DataFlavor.stringFlavor));
}
}
// Get System Selection i.e. Primary Clipboard
private void getPrimaryClipboard() {
Properties ps = System.getProperties();
String operSys = ps.getProperty("os.name");
clip = Toolkit.getDefaultToolkit().getSystemSelection();
if (clip == null) {
if ((operSys.substring(0,3)).equalsIgnoreCase("Win") ||
(operSys.substring(0,3)).equalsIgnoreCase("Mac"))
System.out.println(operSys + " operating system does not support system selection ");
else
throw new RuntimeException("Method getSystemSelection() is returning null on X11 platform");
}
}
// Compare the selected text with one pasted from the clipboard
public void compareText() {
if ((jtf2.getText()).equals(jtf1.getSelectedText()) &&
System.getProperties().getProperty("os.name").substring(0,3) != "Win") {
System.out.println("Selected text & clipboard contents are same\n");
} else {
throw new RuntimeException("Selected text & clipboard contents differs\n");
}
}
public void doTest() throws Exception {
ExtendedRobot robot = new ExtendedRobot();
jframe.setLocation(100, 100);
robot.waitForIdle(2000);
Point tf1Location = jtf1.getLocationOnScreen();
Dimension tf1Size = jtf1.getSize();
checkSecurity();
if (clip != null) {
robot.mouseMove(tf1Location.x + 5, tf1Location.y + tf1Size.height / 2);
robot.waitForIdle(2000);
robot.mousePress(InputEvent.BUTTON1_DOWN_MASK);
robot.waitForIdle(20);
robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);
robot.waitForIdle(20);
robot.mousePress(InputEvent.BUTTON1_DOWN_MASK);
robot.waitForIdle(20);
robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);
robot.waitForIdle(2000);
getClipboardContent();
compareText();
robot.mouseMove(tf1Location.x + tf1Size.width / 2, tf1Location.y + tf1Size.height / 2);
robot.waitForIdle(2000);
robot.mousePress(InputEvent.BUTTON1_DOWN_MASK);
robot.waitForIdle(20);
robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);
robot.waitForIdle(20);
robot.mousePress(InputEvent.BUTTON1_DOWN_MASK);
robot.waitForIdle(20);
robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);
robot.waitForIdle(2000);
getClipboardContent();
compareText();
}
}
}