/* * Copyright (c) 2011, 2015, 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. * * 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.
*/
/** * <p>This class contains utilities useful for regression testing. * <p>When using jtreg you would include this class via something like: * <pre> * * @library ../../regtesthelpers * @build Util * </pre>
*/
publicclass Util {
/** * Convert a rectangle from coordinate system of Component c to * screen coordinate system. * * @param r a non-null Rectangle * @param c a Component whose coordinate system is used for conversion
*/ publicstaticvoid convertRectToScreen(Rectangle r, Component c) {
Point p = new Point(r.x, r.y);
SwingUtilities.convertPointToScreen(p, c);
r.x = p.x;
r.y = p.y;
}
/** * Compares two bufferedImages pixel-by-pixel. * return true if all pixels in the two areas are identical
*/ publicstaticboolean compareBufferedImages(BufferedImage bufferedImage0, BufferedImage bufferedImage1) { int width = bufferedImage0.getWidth(); int height = bufferedImage0.getHeight();
for (int y = 0; y < height; y++) { for (int x = 0; x < width; x++) { if (bufferedImage0.getRGB(x, y) != bufferedImage1.getRGB(x, y)) { returnfalse;
}
}
}
returntrue;
}
/** * Fills the heap until OutOfMemoryError occurs. This method is useful for * WeakReferences removing. To minimize the amount of filled memory the * test should provide reasonable heap size via -mx option.
*/ publicstaticvoid generateOOME() {
List<Object> bigLeak = new LinkedList<Object>();
boolean oome = false;
System.out.print("Filling the heap");
try { for(int i = 0; true ; i++) { // Now, use up all RAM
bigLeak.add(newbyte[1024 * 1024]);
System.out.print(".");
// Give the GC a change at that weakref if (i % 10 == 0) {
System.gc(); try { Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
} catch (OutOfMemoryError e) {
bigLeak = null;
oome = true;
}
System.out.println("");
if (!oome) { thrownew RuntimeException("Problem with test case - never got OOME");
}
System.out.println("Got OOME");
}
/** * Find a sub component by class name. * Always run this method on the EDT thread
*/ publicstatic Component findSubComponent(Component parent, String className) {
String parentClassName = parent.getClass().getName();
if (parentClassName.contains(className)) { return parent;
}
if (parent instanceof Container) { for (Component child : ((Container) parent).getComponents()) {
Component subComponent = findSubComponent(child, className);
if (subComponent != null) { return subComponent;
}
}
}
for (Integer mnemonic : mnemonicKeyCodes) {
robot.keyRelease(mnemonic);
}
}
/** * Hits keys by robot.
*/ publicstaticvoid hitKeys(Robot robot, int... keys) { for (int i = 0; i < keys.length; i++) {
robot.keyPress(keys[i]);
}
for (int i = keys.length - 1; i >= 0; i--) {
robot.keyRelease(keys[i]);
}
}
/** * Moves mouse smoothly from (x0, y0) to (x1, y1).
*/ publicstaticvoid glide(Robot robot, int x0, int y0, int x1, int y1) throws AWTException { float dmax = (float) Math.max(Math.abs(x1 - x0), Math.abs(y1 - y0)); float dx = (x1 - x0) / dmax; float dy = (y1 - y0) / dmax;
for (int i = 0; i <= dmax; i += 10) {
robot.mouseMove((int) (x0 + dx * i), (int) (y0 + dy * i));
}
}
/** * Gets component center point * * @return center point of the <code>component</code>
*/ publicstatic Point getCenterPoint(final Component component) throws Exception { return Util.invokeOnEDT(new Callable<Point>() {
@Override public Point call() throws Exception {
Point p = component.getLocationOnScreen();
Dimension size = component.getSize(); returnnew Point(p.x + size.width / 2, p.y + size.height / 2);
}
});
}
/** * Invokes the <code>task</code> on the EDT thread. * * @return result of the <code>task</code>
*/ publicstatic <T> T invokeOnEDT(final Callable<T> task) throws Exception { final List<T> result = new ArrayList<>(1); final Exception[] exception = new Exception[1];
/** * Gets the key codes list from modifiers * @param modifiers an integer combination of the modifier constants * @return key codes list
*/ publicstatic ArrayList<Integer> getKeyCodesFromKeyMask(int modifiers) {
ArrayList<Integer> result = new ArrayList<>(); if ((modifiers & InputEvent.CTRL_MASK) != 0) {
result.add(KeyEvent.VK_CONTROL);
} if ((modifiers & InputEvent.ALT_MASK) != 0) {
result.add(KeyEvent.VK_ALT);
} if ((modifiers & InputEvent.SHIFT_MASK) != 0) {
result.add(KeyEvent.VK_SHIFT);
} if ((modifiers & InputEvent.META_MASK) != 0) {
result.add(KeyEvent.VK_META);
} return result;
}
/** * Gets key codes from system mnemonic key mask * @return key codes list
*/ publicstatic ArrayList<Integer> getSystemMnemonicKeyCodes() {
String osName = System.getProperty("os.name");
ArrayList<Integer> result = new ArrayList<>(); if (osName.contains("OS X")) {
result.add(KeyEvent.VK_CONTROL);
}
result.add(KeyEvent.VK_ALT); return result;
}
/** * Creates and returns a JDialog with two button, one that says pass, * another that says fail. The fail button is wired to call * <code>uiTestFailed</code> with <code>failString</code> and the pass * button is wired to invoked <code>uiTestPassed</code>. * <p>The content pane of the JDialog uses a BorderLayout with the * buttons inside a horizontal box with filler between them and the * pass button on the left. * <p>The returned Dialog has not been packed, or made visible, it is * up to the caller to do that (after putting in some useful components).
*/ publicstatic JDialog createModalDialogWithPassFailButtons(final String failString) {
JDialog retDialog = new JDialog();
Box buttonBox = Box.createHorizontalBox();
JButton passButton = new JButton("Pass");
JButton failButton = new JButton("Fail");
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.