8340407: Open source a few more Component related tests
Reviewed-by: prr
This commit is contained in:
parent
31858fc410
commit
a32c3b43aa
test/jdk/java/awt/Component
ComponentLeakTest
ComponentSerializationTest
MinMaxSizeDefensive
ZOrderTest
@ -0,0 +1,769 @@
|
||||
/*
|
||||
* Copyright (c) 1997, 2024, 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.
|
||||
*/
|
||||
|
||||
/*
|
||||
* @test
|
||||
* @key headful
|
||||
* @requires (os.family != "linux")
|
||||
* @bug 4119609 4149812 4136116 4171960 4170095 4294016 4343272
|
||||
* @summary This test verifies that java.awt objects are being garbage
|
||||
* collected correctly. That is, it ensures that unneeded
|
||||
* references (such as JNI global refs or refs in static arrays)
|
||||
* do not remain after the object is disposed.
|
||||
* @run main/othervm ComponentLeakTest
|
||||
*/
|
||||
|
||||
import java.awt.BorderLayout;
|
||||
import java.awt.Button;
|
||||
import java.awt.Canvas;
|
||||
import java.awt.CardLayout;
|
||||
import java.awt.Checkbox;
|
||||
import java.awt.CheckboxGroup;
|
||||
import java.awt.CheckboxMenuItem;
|
||||
import java.awt.Choice;
|
||||
import java.awt.Color;
|
||||
import java.awt.Component;
|
||||
import java.awt.Dialog;
|
||||
import java.awt.Dimension;
|
||||
import java.awt.FileDialog;
|
||||
import java.awt.FlowLayout;
|
||||
import java.awt.Font;
|
||||
import java.awt.Frame;
|
||||
import java.awt.Graphics;
|
||||
import java.awt.GraphicsConfiguration;
|
||||
import java.awt.GridBagConstraints;
|
||||
import java.awt.GridBagLayout;
|
||||
import java.awt.GridLayout;
|
||||
import java.awt.Label;
|
||||
import java.awt.LayoutManager;
|
||||
import java.awt.List;
|
||||
import java.awt.Menu;
|
||||
import java.awt.MenuBar;
|
||||
import java.awt.MenuItem;
|
||||
import java.awt.MenuShortcut;
|
||||
import java.awt.Panel;
|
||||
import java.awt.PopupMenu;
|
||||
import java.awt.ScrollPane;
|
||||
import java.awt.Scrollbar;
|
||||
import java.awt.TextArea;
|
||||
import java.awt.TextField;
|
||||
import java.awt.Window;
|
||||
import java.awt.dnd.DropTarget;
|
||||
import java.awt.dnd.DropTargetDragEvent;
|
||||
import java.awt.dnd.DropTargetDropEvent;
|
||||
import java.awt.dnd.DropTargetEvent;
|
||||
import java.awt.dnd.DropTargetListener;
|
||||
import java.lang.ref.PhantomReference;
|
||||
import java.lang.ref.Reference;
|
||||
import java.lang.ref.ReferenceQueue;
|
||||
import java.util.Map;
|
||||
import java.util.HashMap;
|
||||
|
||||
public class ComponentLeakTest {
|
||||
|
||||
public static void main(String[] args) {
|
||||
final int iter = 5;
|
||||
|
||||
for(int count = 0; count < iter; count++) {
|
||||
MainFrame f = new MainFrame();
|
||||
MainWindow w = new MainWindow(f);
|
||||
MainDialog d = new MainDialog(f);
|
||||
TestFileDialog fd = new TestFileDialog(f, "TestFileDialog");
|
||||
fd.addNotify(); // fd.show() hangs
|
||||
|
||||
fd.dispose();
|
||||
d.dispose();
|
||||
w.dispose();
|
||||
f.dispose();
|
||||
}
|
||||
|
||||
// Test layout managers
|
||||
Frame border = new Frame();
|
||||
border.setLayout(new BorderLayout());
|
||||
Frame card = new Frame();
|
||||
card.setLayout(new CardLayout());
|
||||
Frame flow = new Frame();
|
||||
flow.setLayout(new FlowLayout());
|
||||
Frame gridBag = new Frame();
|
||||
gridBag.setLayout(new GridBagLayout());
|
||||
Frame grid = new Frame();
|
||||
grid.setLayout(new GridLayout(1, 2));
|
||||
|
||||
for (int count = 0; count < iter; count++) {
|
||||
border.add(new BorderTestButton("BorderTest"),
|
||||
BorderLayout.WEST);
|
||||
border.add(new BorderTestButton("BorderTest"),
|
||||
BorderLayout.EAST);
|
||||
card.add(new CardTestButton("CardTest"), "card0");
|
||||
card.add(new CardTestButton("CardTest"), "card1");
|
||||
flow.add(new FlowTestButton());
|
||||
flow.add(new FlowTestButton());
|
||||
gridBag.add(new GridBagTestButton(), new GridBagConstraints());
|
||||
gridBag.add(new GridBagTestButton(), new GridBagConstraints());
|
||||
grid.add(new GridTestButton());
|
||||
grid.add(new GridTestButton());
|
||||
|
||||
border.removeAll();
|
||||
card.removeAll();
|
||||
flow.removeAll();
|
||||
gridBag.removeAll();
|
||||
grid.removeAll();
|
||||
}
|
||||
|
||||
gc(5);
|
||||
try {
|
||||
Thread.sleep(1000);
|
||||
} catch (InterruptedException ie) {
|
||||
}
|
||||
|
||||
freeReferences();
|
||||
reportLeaks();
|
||||
System.err.println("Test passed.");
|
||||
}
|
||||
|
||||
public static void initWindow(Window w) {
|
||||
w.setSize(600, 400);
|
||||
w.setLayout(new FlowLayout());
|
||||
|
||||
// peered components
|
||||
w.add(new TestButton("Button"));
|
||||
w.add(new TestCanvas());
|
||||
w.add(new TestCheckbox("Checkbox", true));
|
||||
TestChoice choice = new TestChoice();
|
||||
choice.add("Choice 1");
|
||||
choice.add("Choice Two");
|
||||
w.add(choice);
|
||||
w.add(new TestLabel("Label"));
|
||||
TestList list = new TestList();
|
||||
list.add("List 1");
|
||||
list.add("List Two");
|
||||
w.add(list);
|
||||
w.add(new TestScrollbar(Scrollbar.VERTICAL));
|
||||
w.add(new TestScrollbar(Scrollbar.HORIZONTAL));
|
||||
TestScrollPane scrollpane = new TestScrollPane();
|
||||
scrollpane.add(new TestButton("Button in a scrollpane"));
|
||||
w.add(scrollpane);
|
||||
w.add(new TestTextArea("TextArea", 3, 30));
|
||||
w.add(new TestTextField("TextField"));
|
||||
|
||||
// nested components
|
||||
TestPanel panel1 = new TestPanel();
|
||||
panel1.setLayout(new FlowLayout());
|
||||
panel1.setBackground(Color.red);
|
||||
w.add(panel1);
|
||||
|
||||
panel1.add(new TestButton("level 2"));
|
||||
|
||||
Panel panel2 = new Panel();
|
||||
panel2.setLayout(new FlowLayout());
|
||||
panel2.setBackground(Color.green);
|
||||
panel1.add(panel2);
|
||||
|
||||
panel2.add(new TestButton("level 3"));
|
||||
|
||||
w.add(new TestLightweight("Lightweight"));
|
||||
}
|
||||
|
||||
private static ReferenceQueue queue = new ReferenceQueue();
|
||||
private static Map<Reference, String> refs = new HashMap<Reference, String>();
|
||||
|
||||
public static void register(Object obj) {
|
||||
PhantomReference ref = new PhantomReference(obj, queue);
|
||||
refs.put(ref, obj.getClass().getName());
|
||||
}
|
||||
|
||||
private static void gc() {
|
||||
System.gc();
|
||||
try {
|
||||
Thread.sleep(100);
|
||||
} catch (InterruptedException ie) {
|
||||
throw new RuntimeException("Test was interrupted");
|
||||
}
|
||||
}
|
||||
|
||||
private static void gc(int num) {
|
||||
for (; num > 0; num--) {
|
||||
gc();
|
||||
}
|
||||
}
|
||||
|
||||
public static void freeReferences() {
|
||||
System.err.println("Total references: " + refs.size());
|
||||
boolean wasFreed = false;
|
||||
do {
|
||||
Object[] arr = new Object[2000];
|
||||
gc(5);
|
||||
Reference ref = null;
|
||||
wasFreed = false;
|
||||
while ((ref = queue.poll()) != null) {
|
||||
refs.remove(ref);
|
||||
wasFreed = true;
|
||||
gc();
|
||||
}
|
||||
} while (wasFreed);
|
||||
}
|
||||
|
||||
public static void reportLeaks() {
|
||||
for (Reference ref : refs.keySet()) {
|
||||
System.err.println("Leaked " + refs.get(ref));
|
||||
}
|
||||
|
||||
if (refs.size() > 0) {
|
||||
throw new RuntimeException("Some references remained: " + refs.size());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class TestFrame extends Frame {
|
||||
public TestFrame() {
|
||||
ComponentLeakTest.register(this);
|
||||
setDropTarget(new TestDropTarget(this));
|
||||
}
|
||||
|
||||
public TestFrame(String title) {
|
||||
super(title);
|
||||
ComponentLeakTest.register(this);
|
||||
setDropTarget(new TestDropTarget(this));
|
||||
}
|
||||
}
|
||||
|
||||
class TestWindow extends Window {
|
||||
public TestWindow(Frame owner) {
|
||||
super(owner);
|
||||
ComponentLeakTest.register(this);
|
||||
setDropTarget(new TestDropTarget(this));
|
||||
}
|
||||
|
||||
public TestWindow(Window owner) {
|
||||
super(owner);
|
||||
ComponentLeakTest.register(this);
|
||||
setDropTarget(new TestDropTarget(this));
|
||||
}
|
||||
}
|
||||
|
||||
class TestDialogL extends Dialog {
|
||||
public TestDialogL(Frame owner) {
|
||||
super(owner);
|
||||
ComponentLeakTest.register(this);
|
||||
setDropTarget(new TestDropTarget(this));
|
||||
}
|
||||
|
||||
public TestDialogL(Frame owner, boolean modal) {
|
||||
super(owner, modal);
|
||||
ComponentLeakTest.register(this);
|
||||
setDropTarget(new TestDropTarget(this));
|
||||
}
|
||||
|
||||
public TestDialogL(Frame owner, String title) {
|
||||
super(owner, title);
|
||||
ComponentLeakTest.register(this);
|
||||
setDropTarget(new TestDropTarget(this));
|
||||
}
|
||||
|
||||
public TestDialogL(Frame owner, String title, boolean modal) {
|
||||
super(owner, title, modal);
|
||||
ComponentLeakTest.register(this);
|
||||
setDropTarget(new TestDropTarget(this));
|
||||
}
|
||||
|
||||
public TestDialogL(Dialog owner) {
|
||||
super(owner);
|
||||
ComponentLeakTest.register(this);
|
||||
setDropTarget(new TestDropTarget(this));
|
||||
}
|
||||
|
||||
public TestDialogL(Dialog owner, String title) {
|
||||
super(owner, title);
|
||||
ComponentLeakTest.register(this);
|
||||
setDropTarget(new TestDropTarget(this));
|
||||
}
|
||||
|
||||
public TestDialogL(Dialog owner, String title, boolean modal) {
|
||||
super(owner, title, modal);
|
||||
ComponentLeakTest.register(this);
|
||||
setDropTarget(new TestDropTarget(this));
|
||||
}
|
||||
}
|
||||
|
||||
class TestFileDialog extends FileDialog {
|
||||
public TestFileDialog(Frame parent) {
|
||||
super(parent);
|
||||
ComponentLeakTest.register(this);
|
||||
setDropTarget(new TestDropTarget(this));
|
||||
}
|
||||
|
||||
public TestFileDialog(Frame parent, String title) {
|
||||
super(parent, title);
|
||||
ComponentLeakTest.register(this);
|
||||
setDropTarget(new TestDropTarget(this));
|
||||
}
|
||||
|
||||
public TestFileDialog(Frame parent, String title, int mode) {
|
||||
super(parent, title, mode);
|
||||
ComponentLeakTest.register(this);
|
||||
setDropTarget(new TestDropTarget(this));
|
||||
}
|
||||
}
|
||||
|
||||
class TestButton extends Button {
|
||||
public TestButton() {
|
||||
ComponentLeakTest.register(this);
|
||||
setDropTarget(new TestDropTarget(this));
|
||||
}
|
||||
|
||||
public TestButton(String title) {
|
||||
super(title);
|
||||
ComponentLeakTest.register(this);
|
||||
setDropTarget(new TestDropTarget(this));
|
||||
}
|
||||
}
|
||||
|
||||
class TestCanvas extends Canvas {
|
||||
int width = 100;
|
||||
int height = 100;
|
||||
|
||||
public TestCanvas() {
|
||||
ComponentLeakTest.register(this);
|
||||
setDropTarget(new TestDropTarget(this));
|
||||
}
|
||||
|
||||
public TestCanvas(GraphicsConfiguration config) {
|
||||
super(config);
|
||||
ComponentLeakTest.register(this);
|
||||
setDropTarget(new TestDropTarget(this));
|
||||
}
|
||||
|
||||
public void paint(Graphics g) {
|
||||
g.setColor(Color.blue);
|
||||
g.fillRoundRect(10, 10, 50, 50, 15, 30);
|
||||
g.setColor(Color.red);
|
||||
g.fillOval(70, 70, 25, 25);
|
||||
}
|
||||
|
||||
public Dimension getPreferredSize() {
|
||||
return new Dimension(width, height);
|
||||
}
|
||||
}
|
||||
|
||||
class TestCheckbox extends Checkbox {
|
||||
public TestCheckbox() {
|
||||
ComponentLeakTest.register(this);
|
||||
setDropTarget(new TestDropTarget(this));
|
||||
}
|
||||
|
||||
public TestCheckbox(String label) {
|
||||
super(label);
|
||||
ComponentLeakTest.register(this);
|
||||
setDropTarget(new TestDropTarget(this));
|
||||
}
|
||||
|
||||
public TestCheckbox(String label, boolean state) {
|
||||
super(label, state);
|
||||
ComponentLeakTest.register(this);
|
||||
setDropTarget(new TestDropTarget(this));
|
||||
}
|
||||
|
||||
public TestCheckbox(String label, boolean state, CheckboxGroup group) {
|
||||
super(label, state, group);
|
||||
ComponentLeakTest.register(this);
|
||||
setDropTarget(new TestDropTarget(this));
|
||||
}
|
||||
|
||||
public TestCheckbox(String label, CheckboxGroup group, boolean state) {
|
||||
super(label, group, state);
|
||||
ComponentLeakTest.register(this);
|
||||
setDropTarget(new TestDropTarget(this));
|
||||
}
|
||||
}
|
||||
|
||||
class TestChoice extends Choice {
|
||||
public TestChoice() {
|
||||
ComponentLeakTest.register(this);
|
||||
setDropTarget(new TestDropTarget(this));
|
||||
}
|
||||
}
|
||||
|
||||
class TestLabel extends Label {
|
||||
public TestLabel() {
|
||||
ComponentLeakTest.register(this);
|
||||
setDropTarget(new TestDropTarget(this));
|
||||
}
|
||||
|
||||
public TestLabel(String text) {
|
||||
super(text);
|
||||
ComponentLeakTest.register(this);
|
||||
setDropTarget(new TestDropTarget(this));
|
||||
}
|
||||
|
||||
public TestLabel(String text, int align) {
|
||||
super(text, align);
|
||||
ComponentLeakTest.register(this);
|
||||
setDropTarget(new TestDropTarget(this));
|
||||
}
|
||||
}
|
||||
|
||||
class TestList extends List {
|
||||
public TestList() {
|
||||
ComponentLeakTest.register(this);
|
||||
setDropTarget(new TestDropTarget(this));
|
||||
}
|
||||
|
||||
public TestList(int rows) {
|
||||
super(rows);
|
||||
ComponentLeakTest.register(this);
|
||||
setDropTarget(new TestDropTarget(this));
|
||||
}
|
||||
|
||||
public TestList(int rows, boolean multipleMode) {
|
||||
super(rows, multipleMode);
|
||||
ComponentLeakTest.register(this);
|
||||
setDropTarget(new TestDropTarget(this));
|
||||
}
|
||||
}
|
||||
|
||||
class TestScrollbar extends Scrollbar {
|
||||
public TestScrollbar() {
|
||||
ComponentLeakTest.register(this);
|
||||
setDropTarget(new TestDropTarget(this));
|
||||
}
|
||||
|
||||
public TestScrollbar(int orientation) {
|
||||
super(orientation);
|
||||
ComponentLeakTest.register(this);
|
||||
setDropTarget(new TestDropTarget(this));
|
||||
}
|
||||
|
||||
public TestScrollbar(int orient, int val, int visible, int min, int max) {
|
||||
super(orient, val, visible, min, max);
|
||||
ComponentLeakTest.register(this);
|
||||
setDropTarget(new TestDropTarget(this));
|
||||
}
|
||||
}
|
||||
|
||||
class TestScrollPane extends ScrollPane {
|
||||
public TestScrollPane() {
|
||||
ComponentLeakTest.register(this);
|
||||
setDropTarget(new TestDropTarget(this));
|
||||
}
|
||||
|
||||
public TestScrollPane(int policy) {
|
||||
super(policy);
|
||||
ComponentLeakTest.register(this);
|
||||
setDropTarget(new TestDropTarget(this));
|
||||
}
|
||||
}
|
||||
|
||||
class TestTextField extends TextField {
|
||||
public TestTextField() {
|
||||
ComponentLeakTest.register(this);
|
||||
requestFocus();
|
||||
setDropTarget(new TestDropTarget(this));
|
||||
}
|
||||
|
||||
public TestTextField(String text) {
|
||||
super(text);
|
||||
ComponentLeakTest.register(this);
|
||||
requestFocus();
|
||||
setDropTarget(new TestDropTarget(this));
|
||||
}
|
||||
|
||||
public TestTextField(int columns) {
|
||||
super(columns);
|
||||
ComponentLeakTest.register(this);
|
||||
requestFocus();
|
||||
setDropTarget(new TestDropTarget(this));
|
||||
}
|
||||
|
||||
public TestTextField(String text, int columns) {
|
||||
super(text, columns);
|
||||
ComponentLeakTest.register(this);
|
||||
requestFocus();
|
||||
setDropTarget(new TestDropTarget(this));
|
||||
}
|
||||
}
|
||||
|
||||
class TestTextArea extends TextArea {
|
||||
public TestTextArea() {
|
||||
ComponentLeakTest.register(this);
|
||||
requestFocus();
|
||||
setDropTarget(new TestDropTarget(this));
|
||||
}
|
||||
|
||||
public TestTextArea(String text) {
|
||||
super(text);
|
||||
ComponentLeakTest.register(this);
|
||||
requestFocus();
|
||||
setDropTarget(new TestDropTarget(this));
|
||||
}
|
||||
|
||||
public TestTextArea(int rows, int columns) {
|
||||
super(rows, columns);
|
||||
ComponentLeakTest.register(this);
|
||||
requestFocus();
|
||||
setDropTarget(new TestDropTarget(this));
|
||||
}
|
||||
|
||||
public TestTextArea(String text, int rows, int columns) {
|
||||
super(text, rows, columns);
|
||||
ComponentLeakTest.register(this);
|
||||
requestFocus();
|
||||
setDropTarget(new TestDropTarget(this));
|
||||
}
|
||||
|
||||
public TestTextArea(String text, int rows, int columns, int bars) {
|
||||
super(text, rows, columns, bars);
|
||||
ComponentLeakTest.register(this);
|
||||
requestFocus();
|
||||
setDropTarget(new TestDropTarget(this));
|
||||
}
|
||||
}
|
||||
|
||||
class TestPanel extends Panel {
|
||||
public TestPanel() {
|
||||
ComponentLeakTest.register(this);
|
||||
setDropTarget(new TestDropTarget(this));
|
||||
}
|
||||
|
||||
public TestPanel(LayoutManager layout) {
|
||||
super(layout);
|
||||
ComponentLeakTest.register(this);
|
||||
setDropTarget(new TestDropTarget(this));
|
||||
}
|
||||
}
|
||||
class TestMenu extends Menu {
|
||||
public TestMenu() {
|
||||
ComponentLeakTest.register(this);
|
||||
}
|
||||
|
||||
public TestMenu(String label) {
|
||||
super(label);
|
||||
ComponentLeakTest.register(this);
|
||||
}
|
||||
|
||||
public TestMenu(String label, boolean tearOff) {
|
||||
super(label, tearOff);
|
||||
ComponentLeakTest.register(this);
|
||||
}
|
||||
}
|
||||
|
||||
class TestMenuItem extends MenuItem {
|
||||
public TestMenuItem() {
|
||||
ComponentLeakTest.register(this);
|
||||
}
|
||||
public TestMenuItem(String label) {
|
||||
super(label);
|
||||
ComponentLeakTest.register(this);
|
||||
}
|
||||
|
||||
public TestMenuItem(String label, MenuShortcut s) {
|
||||
super(label, s);
|
||||
ComponentLeakTest.register(this);
|
||||
}
|
||||
}
|
||||
|
||||
class TestMenuBar extends MenuBar {
|
||||
public TestMenuBar() {
|
||||
ComponentLeakTest.register(this);
|
||||
}
|
||||
}
|
||||
|
||||
class TestPopupMenu extends PopupMenu {
|
||||
public TestPopupMenu() {
|
||||
ComponentLeakTest.register(this);
|
||||
}
|
||||
|
||||
public TestPopupMenu(String label) {
|
||||
super(label);
|
||||
ComponentLeakTest.register(this);
|
||||
}
|
||||
}
|
||||
|
||||
class TestCheckboxMenuItem extends CheckboxMenuItem {
|
||||
public TestCheckboxMenuItem() {
|
||||
ComponentLeakTest.register(this);
|
||||
}
|
||||
|
||||
public TestCheckboxMenuItem(String label) {
|
||||
super(label);
|
||||
ComponentLeakTest.register(this);
|
||||
}
|
||||
|
||||
public TestCheckboxMenuItem(String label, boolean state) {
|
||||
super(label, state);
|
||||
ComponentLeakTest.register(this);
|
||||
}
|
||||
}
|
||||
|
||||
class BorderTestButton extends Button {
|
||||
public BorderTestButton() {
|
||||
ComponentLeakTest.register(this);
|
||||
}
|
||||
|
||||
public BorderTestButton(String title) {
|
||||
super(title);
|
||||
ComponentLeakTest.register(this);
|
||||
}
|
||||
}
|
||||
|
||||
class CardTestButton extends Button {
|
||||
public CardTestButton() {
|
||||
ComponentLeakTest.register(this);
|
||||
}
|
||||
|
||||
public CardTestButton(String title) {
|
||||
super(title);
|
||||
ComponentLeakTest.register(this);
|
||||
}
|
||||
}
|
||||
|
||||
class FlowTestButton extends Button {
|
||||
public FlowTestButton() {
|
||||
ComponentLeakTest.register(this);
|
||||
}
|
||||
|
||||
public FlowTestButton(String title) {
|
||||
super(title);
|
||||
ComponentLeakTest.register(this);
|
||||
}
|
||||
}
|
||||
|
||||
class GridBagTestButton extends Button {
|
||||
public GridBagTestButton() {
|
||||
ComponentLeakTest.register(this);
|
||||
}
|
||||
|
||||
public GridBagTestButton(String title) {
|
||||
super(title);
|
||||
ComponentLeakTest.register(this);
|
||||
}
|
||||
}
|
||||
|
||||
class GridTestButton extends Button {
|
||||
public GridTestButton() {
|
||||
ComponentLeakTest.register(this);
|
||||
}
|
||||
|
||||
public GridTestButton(String title) {
|
||||
super(title);
|
||||
ComponentLeakTest.register(this);
|
||||
}
|
||||
}
|
||||
|
||||
class TestLightweight extends Component {
|
||||
String label;
|
||||
int width = 100;
|
||||
int height = 30;
|
||||
|
||||
public TestLightweight(String label) {
|
||||
this.label = label;
|
||||
ComponentLeakTest.register(this);
|
||||
}
|
||||
|
||||
public void paint(Graphics g) {
|
||||
Dimension d = getSize();
|
||||
g.setColor(Color.orange);
|
||||
g.fillRect(0, 0, d.width, d.height);
|
||||
g.setColor(Color.black);
|
||||
int x = 5;
|
||||
int y = (d.height - 5);
|
||||
g.drawString(label, x, y);
|
||||
}
|
||||
|
||||
public Dimension getPreferredSize() {
|
||||
return new Dimension(width,height);
|
||||
}
|
||||
}
|
||||
|
||||
class TestDropTarget extends DropTarget {
|
||||
public TestDropTarget(Component comp) {
|
||||
super(comp, new DropTargetListener() {
|
||||
public void dragEnter(DropTargetDragEvent dtde) {}
|
||||
public void dragOver(DropTargetDragEvent dtde) {}
|
||||
public void dropActionChanged(DropTargetDragEvent dtde) {}
|
||||
public void dragExit(DropTargetEvent dte) {}
|
||||
public void drop(DropTargetDropEvent dtde) {}
|
||||
});
|
||||
ComponentLeakTest.register(this);
|
||||
}
|
||||
}
|
||||
|
||||
class MainWindow extends TestWindow {
|
||||
public MainWindow(Frame f) {
|
||||
super(f);
|
||||
ComponentLeakTest.initWindow(this);
|
||||
setVisible(true);
|
||||
|
||||
TestPopupMenu popup = new TestPopupMenu("hi");
|
||||
add(popup);
|
||||
popup.show(this, 5, 5);
|
||||
}
|
||||
}
|
||||
|
||||
class MainDialog extends TestDialogL {
|
||||
public MainDialog(Frame f) {
|
||||
super(f, "MainDialog", false);
|
||||
ComponentLeakTest.initWindow(this);
|
||||
setVisible(true);
|
||||
|
||||
TestPopupMenu popup = new TestPopupMenu("hi");
|
||||
add(popup);
|
||||
popup.show(this, 5, 5);
|
||||
}
|
||||
}
|
||||
|
||||
class MainFrame extends TestFrame {
|
||||
public MainFrame(){
|
||||
super("Component Leak Test MainFrame");
|
||||
|
||||
ComponentLeakTest.initWindow(this);
|
||||
|
||||
TestMenu menu = new TestMenu("Print");
|
||||
TestMenu menu2 = new TestMenu("File");
|
||||
TestMenu menu3 = new TestMenu("Edit");
|
||||
TestMenu menu4 = new TestMenu("ReallyReallyReallyReallyReallyReallyReallyReally" +
|
||||
"ReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyLong");
|
||||
menu2.setFont(new Font("SansSerif", Font.BOLD, 20));
|
||||
menu2.setEnabled(false);
|
||||
menu3.setFont(new Font("Monospaced", Font.ITALIC, 18));
|
||||
menu3.setEnabled(false);
|
||||
menu4.setEnabled(false);
|
||||
TestMenuItem itemPrinter = new TestMenuItem("foobar");
|
||||
TestMenuItem itemScreen = new TestMenuItem("baz");
|
||||
TestCheckboxMenuItem itemCheck = new TestCheckboxMenuItem("yep");
|
||||
menu.add(itemPrinter);
|
||||
menu.add(itemScreen);
|
||||
menu.add(itemCheck);
|
||||
TestMenuBar menuBar = new TestMenuBar();
|
||||
menuBar.add( menu );
|
||||
menuBar.add( menu2 );
|
||||
menuBar.add( menu3 );
|
||||
menuBar.add( menu4 );
|
||||
setMenuBar(menuBar);
|
||||
|
||||
setVisible(true);
|
||||
|
||||
TestPopupMenu popup = new TestPopupMenu("hi");
|
||||
add(popup);
|
||||
popup.show(this, 5, 5);
|
||||
}
|
||||
}
|
354
test/jdk/java/awt/Component/ComponentSerializationTest/ComponentSerializationTest.java
Normal file
354
test/jdk/java/awt/Component/ComponentSerializationTest/ComponentSerializationTest.java
Normal file
@ -0,0 +1,354 @@
|
||||
/*
|
||||
* Copyright (c) 1998, 2024, 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.
|
||||
*/
|
||||
|
||||
/*
|
||||
* @test
|
||||
* @bug 4146452
|
||||
* @summary Tests serialization of peered and lightweight Components.
|
||||
* @library /java/awt/regtesthelpers
|
||||
* @build PassFailJFrame
|
||||
* @run main/manual ComponentSerializationTest
|
||||
*/
|
||||
|
||||
import java.awt.Button;
|
||||
import java.awt.Canvas;
|
||||
import java.awt.Checkbox;
|
||||
import java.awt.CheckboxMenuItem;
|
||||
import java.awt.Choice;
|
||||
import java.awt.Color;
|
||||
import java.awt.Component;
|
||||
import java.awt.Dialog;
|
||||
import java.awt.Dimension;
|
||||
import java.awt.EventQueue;
|
||||
import java.awt.FileDialog;
|
||||
import java.awt.FlowLayout;
|
||||
import java.awt.Font;
|
||||
import java.awt.Frame;
|
||||
import java.awt.Graphics;
|
||||
import java.awt.Insets;
|
||||
import java.awt.Label;
|
||||
import java.awt.List;
|
||||
import java.awt.Menu;
|
||||
import java.awt.MenuBar;
|
||||
import java.awt.MenuItem;
|
||||
import java.awt.Panel;
|
||||
import java.awt.ScrollPane;
|
||||
import java.awt.Scrollbar;
|
||||
import java.awt.TextArea;
|
||||
import java.awt.TextField;
|
||||
import java.awt.Window;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.ObjectInputStream;
|
||||
import java.io.ObjectOutputStream;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.util.ArrayList;
|
||||
import javax.swing.JPanel;
|
||||
|
||||
public class ComponentSerializationTest extends JPanel {
|
||||
private MainFrame mf;
|
||||
private MainWindow mw;
|
||||
private MainDialog md;
|
||||
private MainFileDialog mfd;
|
||||
private static final String INSTRUCTIONS = """
|
||||
A Frame, a Window, and a Dialog should appear. From the Frame's
|
||||
"Serialize" menu, select "Serialize!". Another Frame, Window, and
|
||||
Dialog should appear exactly on top of the existing ones. The state
|
||||
and functionality of the two sets of Windows should be identical. If
|
||||
any errors or exceptions appear in the log area, or if the second set of
|
||||
Windows is different from the first, the test fails. Otherwise, the
|
||||
test passes.
|
||||
""";
|
||||
|
||||
private static final ArrayList<Window> toDispose = new ArrayList<>();
|
||||
|
||||
public ComponentSerializationTest() {
|
||||
mf = new MainFrame();
|
||||
toDispose.add(mf);
|
||||
mw = new MainWindow(mf);
|
||||
toDispose.add(mw);
|
||||
md = new MainDialog(mf);
|
||||
toDispose.add(md);
|
||||
mfd = new MainFileDialog(mf);
|
||||
toDispose.add(mfd);
|
||||
}
|
||||
|
||||
public static void main(String[] argc) throws InterruptedException,
|
||||
InvocationTargetException {
|
||||
PassFailJFrame.builder()
|
||||
.title("Component Serialization Test")
|
||||
.splitUI(ComponentSerializationTest::new)
|
||||
.instructions(INSTRUCTIONS)
|
||||
.columns(40)
|
||||
.logArea()
|
||||
.build()
|
||||
.awaitAndCheck();
|
||||
for (Window w : toDispose) {
|
||||
if (w != null) {
|
||||
EventQueue.invokeAndWait(w::dispose);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void initWindow(Window w) {
|
||||
w.setSize(600, 400);
|
||||
w.setLayout(new FlowLayout());
|
||||
|
||||
// peered components
|
||||
w.add(new Button("Button"));
|
||||
w.add(new TestCanvas());
|
||||
w.add(new Checkbox("Checkbox", true));
|
||||
Choice choice = new Choice();
|
||||
choice.add("Choice 1");
|
||||
choice.add("Choice Two");
|
||||
w.add(choice);
|
||||
w.add(new Label("Label"));
|
||||
List list = new List();
|
||||
list.add("List 1");
|
||||
list.add("List Two");
|
||||
w.add(list);
|
||||
w.add(new Scrollbar(Scrollbar.VERTICAL));
|
||||
w.add(new Scrollbar(Scrollbar.HORIZONTAL));
|
||||
ScrollPane scrollpane = new ScrollPane();
|
||||
scrollpane.add(new Button("Button in a scrollpane"));
|
||||
w.add(scrollpane);
|
||||
w.add(new TextArea("TextArea", 3, 30));
|
||||
w.add(new TextField("TextField"));
|
||||
|
||||
// nested components
|
||||
Panel panel1 = new Panel();
|
||||
panel1.setLayout(new FlowLayout());
|
||||
panel1.setBackground(Color.red);
|
||||
w.add(panel1);
|
||||
|
||||
panel1.add(new Button("level 2"));
|
||||
|
||||
Panel panel2 = new Panel();
|
||||
panel2.setLayout(new FlowLayout());
|
||||
panel2.setBackground(Color.green);
|
||||
panel1.add(panel2);
|
||||
|
||||
panel2.add(new Button("level 3"));
|
||||
|
||||
// lightweight components
|
||||
w.add(new LWButton("LWbutton") );
|
||||
|
||||
// overlapping components
|
||||
w.add(new ZOrderPanel());
|
||||
}
|
||||
|
||||
class MainWindow extends Window {
|
||||
public MainWindow(Frame f) {
|
||||
super(f);
|
||||
initWindow(this);
|
||||
setLocation(650, 0);
|
||||
setVisible(true);
|
||||
}
|
||||
}
|
||||
|
||||
class MainDialog extends Dialog {
|
||||
public MainDialog(Frame f) {
|
||||
super(f, "MainDialog", false);
|
||||
initWindow(this);
|
||||
setLocation(0, 450);
|
||||
setVisible(true);
|
||||
}
|
||||
}
|
||||
|
||||
class MainFileDialog extends FileDialog {
|
||||
public MainFileDialog(Frame f) {
|
||||
super(f, "MainFileDialog", FileDialog.SAVE);
|
||||
setLocation(650, 450);
|
||||
addNotify();
|
||||
}
|
||||
}
|
||||
|
||||
class MainFrame extends Frame {
|
||||
public MainFrame() {
|
||||
super("ComponentSerializationTest");
|
||||
initWindow(this);
|
||||
|
||||
Menu menu = new Menu("Serialize");
|
||||
Menu menu2 = new Menu("File");
|
||||
Menu menu3 = new Menu("Edit");
|
||||
Menu menu4 = new Menu("ReallyReallyReallyReallyReallyReallyReallyReally" +
|
||||
"ReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyLong");
|
||||
menu2.setFont(new Font("SansSerif", Font.BOLD, 20));
|
||||
menu2.setEnabled(false);
|
||||
menu3.setFont(new Font("Monospaced", Font.ITALIC, 18));
|
||||
menu3.setEnabled(false);
|
||||
menu4.setEnabled(false);
|
||||
MenuItem itemSerialize = new MenuItem("Serialize!");
|
||||
CheckboxMenuItem itemCheck = new CheckboxMenuItem("Check me");
|
||||
menu.add(itemSerialize);
|
||||
menu.add(itemCheck);
|
||||
MenuBar menuBar = new MenuBar();
|
||||
menuBar.add(menu);
|
||||
menuBar.add(menu2);
|
||||
menuBar.add(menu3);
|
||||
menuBar.add(menu4);
|
||||
setMenuBar(menuBar);
|
||||
|
||||
itemSerialize.addActionListener(new ActionSerialize());
|
||||
|
||||
setLocation(0, 0);
|
||||
setVisible(true);
|
||||
}
|
||||
}
|
||||
|
||||
class ActionSerialize implements ActionListener {
|
||||
public void actionPerformed(ActionEvent ev) {
|
||||
Frame f2 = null;
|
||||
Window w2 = null;
|
||||
Dialog d2 = null;
|
||||
FileDialog fd2 = null;
|
||||
|
||||
try {
|
||||
FileOutputStream fos = new FileOutputStream("tmp");
|
||||
ObjectOutputStream oos = new ObjectOutputStream(fos);
|
||||
oos.writeObject(mf);
|
||||
oos.writeObject(mw);
|
||||
oos.writeObject(md);
|
||||
oos.writeObject(mfd);
|
||||
oos.flush();
|
||||
|
||||
FileInputStream fis = new FileInputStream("tmp");
|
||||
ObjectInputStream ois = new ObjectInputStream(fis);
|
||||
f2 = (Frame)ois.readObject();
|
||||
w2 = (Window)ois.readObject();
|
||||
d2 = (Dialog)ois.readObject();
|
||||
fd2= (FileDialog)ois.readObject();
|
||||
} catch (Exception e) {
|
||||
PassFailJFrame.log(e.getMessage());
|
||||
}
|
||||
|
||||
if (f2 == null || w2 == null || d2 == null || fd2 == null) {
|
||||
PassFailJFrame.log("ERROR: one of the components was not deserialized.");
|
||||
PassFailJFrame.log("frame = " + f2);
|
||||
PassFailJFrame.log("window = " + w2);
|
||||
PassFailJFrame.log("dialog = " + d2);
|
||||
PassFailJFrame.log("file dalog = " + fd2);
|
||||
}
|
||||
|
||||
if (f2 != null) {
|
||||
toDispose.add(f2);
|
||||
f2.setVisible(true);
|
||||
}
|
||||
if (w2 != null) {
|
||||
toDispose.add(w2);
|
||||
w2.setVisible(true);
|
||||
}
|
||||
if (d2 != null) {
|
||||
toDispose.add(d2);
|
||||
d2.setVisible(true);
|
||||
}
|
||||
if (fd2 != null) {
|
||||
toDispose.add(fd2);
|
||||
fd2.addNotify();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class LWButton extends Component {
|
||||
String label;
|
||||
int width = 100;
|
||||
int height = 30;
|
||||
|
||||
public LWButton(String label) {
|
||||
super();
|
||||
this.label = label;
|
||||
}
|
||||
|
||||
public void paint(Graphics g) {
|
||||
Dimension d = getSize();
|
||||
g.setColor(Color.orange);
|
||||
g.fillRect(0, 0, d.width, d.height);
|
||||
g.setColor(Color.black);
|
||||
int x = 5;
|
||||
int y = (d.height - 5);
|
||||
g.drawString(label, x, y);
|
||||
}
|
||||
|
||||
public Dimension getPreferredSize() {
|
||||
return new Dimension(width, height);
|
||||
}
|
||||
}
|
||||
|
||||
class TestCanvas extends Canvas {
|
||||
int width = 100;
|
||||
int height = 100;
|
||||
|
||||
public void paint(Graphics g) {
|
||||
g.setColor(Color.blue);
|
||||
g.fillRoundRect(10, 10, 50, 50, 15, 30);
|
||||
g.setColor(Color.red);
|
||||
g.fillOval(70, 70, 25, 25);
|
||||
}
|
||||
public Dimension getPreferredSize() {
|
||||
return new Dimension(width, height);
|
||||
}
|
||||
}
|
||||
|
||||
class ZOrderPanel extends Panel {
|
||||
public ZOrderPanel() {
|
||||
setLayout(null);
|
||||
|
||||
Component first, second, third, fourth;
|
||||
|
||||
show();
|
||||
first = makeBox("Second", Color.blue, -1);
|
||||
second = makeBox("First", Color.yellow, 0);
|
||||
fourth = makeBox("Fourth", Color.red, 2);
|
||||
third = makeBox("Third", Color.green, 3);
|
||||
remove(third);
|
||||
add(third, 2);
|
||||
validate();
|
||||
add(new LWButton("LWButton"), 0);
|
||||
}
|
||||
|
||||
public Dimension preferredSize() {
|
||||
return new Dimension(260, 80);
|
||||
}
|
||||
|
||||
public void layout() {
|
||||
int i, n;
|
||||
Insets ins = insets();
|
||||
n = countComponents();
|
||||
for (i = n - 1; i >= 0; i--) {
|
||||
Component p = getComponent(i);
|
||||
p.reshape(ins.left + 40 * i, ins.top + 5 * i, 60, 60);
|
||||
}
|
||||
}
|
||||
|
||||
public Component makeBox(String s, Color c, int index) {
|
||||
Label l = new Label(s);
|
||||
l.setBackground(c);
|
||||
l.setAlignment(Label.RIGHT);
|
||||
add(l, index);
|
||||
validate();
|
||||
return l;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,113 @@
|
||||
/*
|
||||
* Copyright (c) 2003, 2024, 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.
|
||||
*/
|
||||
|
||||
/*
|
||||
@test
|
||||
@bug 4783989
|
||||
@summary get(Preferred|Minimum|Maximum)Size() must not return a reference.
|
||||
The object copy of Dimension class needed.
|
||||
@key headful
|
||||
@run main GetSizesTest
|
||||
*/
|
||||
|
||||
import java.awt.Button;
|
||||
import java.awt.Dimension;
|
||||
import java.awt.EventQueue;
|
||||
import java.awt.Frame;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
|
||||
public class GetSizesTest extends Frame {
|
||||
Button b;
|
||||
|
||||
public static void main(final String[] args) throws InterruptedException,
|
||||
InvocationTargetException {
|
||||
GetSizesTest app = new GetSizesTest();
|
||||
EventQueue.invokeAndWait(() -> {
|
||||
try {
|
||||
app.init();
|
||||
app.start();
|
||||
} finally {
|
||||
app.dispose();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void init() {
|
||||
b = new Button("button");
|
||||
add(b);
|
||||
}
|
||||
|
||||
public void start () {
|
||||
setSize(200, 200);
|
||||
setLocationRelativeTo(null);
|
||||
setVisible(true);
|
||||
validate();
|
||||
|
||||
System.out.println("Test set for Container (Frame).");
|
||||
|
||||
Dimension dimPref = getPreferredSize();
|
||||
dimPref.setSize(101, 101);
|
||||
if (getPreferredSize().equals(new Dimension(101, 101))) {
|
||||
throw new RuntimeException("Test Failed for: " + dimPref);
|
||||
}
|
||||
System.out.println("getPreferredSize() Passed.");
|
||||
|
||||
Dimension dimMin = getMinimumSize();
|
||||
dimMin.setSize(101, 101);
|
||||
if (getMinimumSize().equals(new Dimension(101, 101))) {
|
||||
throw new RuntimeException("Test Failed for: " + dimMin);
|
||||
}
|
||||
System.out.println("getMinimumSize() Passed.");
|
||||
|
||||
Dimension dimMax = getMaximumSize();
|
||||
dimMax.setSize(101, 101);
|
||||
if (getMaximumSize().equals(new Dimension(101, 101))) {
|
||||
throw new RuntimeException("Test Failed for: " + dimMax);
|
||||
}
|
||||
System.out.println("getMaximumSize() Passed.");
|
||||
|
||||
System.out.println("Test set for Component (Button).");
|
||||
|
||||
dimPref = b.getPreferredSize();
|
||||
dimPref.setSize(33, 33);
|
||||
if (b.getPreferredSize().equals(new Dimension(33, 33))) {
|
||||
throw new RuntimeException("Test Failed for: " + dimPref);
|
||||
}
|
||||
System.out.println("getPreferredSize() Passed.");
|
||||
|
||||
dimMin = b.getMinimumSize();
|
||||
dimMin.setSize(33, 33);
|
||||
if (b.getMinimumSize().equals(new Dimension(33, 33))) {
|
||||
throw new RuntimeException("Test Failed for: " + dimMin);
|
||||
}
|
||||
System.out.println("getMinimumSize() Passed.");
|
||||
|
||||
dimMax = b.getMaximumSize();
|
||||
dimMax.setSize(33, 33);
|
||||
if (b.getMaximumSize().equals(new Dimension(33, 33))) {
|
||||
throw new RuntimeException("Test Failed for: " + dimMax);
|
||||
}
|
||||
System.out.println("getMaximumSize() Passed.");
|
||||
System.out.println("GetSizesTest Succeeded.");
|
||||
}
|
||||
}
|
159
test/jdk/java/awt/Component/ZOrderTest/ZOrderTest.java
Normal file
159
test/jdk/java/awt/Component/ZOrderTest/ZOrderTest.java
Normal file
@ -0,0 +1,159 @@
|
||||
/*
|
||||
* Copyright (c) 1997, 2024, 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.
|
||||
*/
|
||||
|
||||
/*
|
||||
* @test
|
||||
* @bug 4059430
|
||||
* @summary Test for component z-ordering consistency
|
||||
* @library /java/awt/regtesthelpers
|
||||
* @build PassFailJFrame
|
||||
* @run main/manual ZOrderTest
|
||||
*/
|
||||
|
||||
import java.awt.Color;
|
||||
import java.awt.Component;
|
||||
import java.awt.Container;
|
||||
import java.awt.Frame;
|
||||
import java.awt.GridLayout;
|
||||
import java.awt.Insets;
|
||||
import java.awt.Label;
|
||||
import java.awt.Panel;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.util.List;
|
||||
|
||||
public class ZOrderTest {
|
||||
public final static String INSTRUCTIONS = """
|
||||
The ZOrderTest creates two frames.
|
||||
- Frame 1 has components added to an intermediate panel
|
||||
- Frame 2 has components added directly to the frame itself
|
||||
Verify that the components are in the correct z-order. Lower numbered
|
||||
components should overlap higher numbered ones (e.g. component zero should
|
||||
appear on top of component one).
|
||||
Both frames should have the same component ordering, and this ordering should
|
||||
be the same on all supported operating systems.
|
||||
""";
|
||||
|
||||
public static void main(String [] args) throws InterruptedException,
|
||||
InvocationTargetException {
|
||||
PassFailJFrame.builder()
|
||||
.title("Component ZOrder Test")
|
||||
.testUI(ZOrderTest::makeFrames)
|
||||
.instructions(INSTRUCTIONS)
|
||||
.columns(40)
|
||||
.logArea()
|
||||
.build()
|
||||
.awaitAndCheck();
|
||||
}
|
||||
|
||||
private static List<Frame> makeFrames() {
|
||||
Frame frame, frame2;
|
||||
|
||||
// test adding components to panel on a frame
|
||||
frame = new Frame("ZOrderTest(1) for 4059430");
|
||||
frame.pack();
|
||||
frame.show();
|
||||
Panel panel = new ZOrderPanel();
|
||||
frame.setBounds(0, 0, 500, 350);
|
||||
frame.setLayout(new GridLayout());
|
||||
frame.add(panel);
|
||||
doTest(panel);
|
||||
|
||||
// test adding components directly to frame
|
||||
frame2 = new ZOrderTestFrame("ZOrderTest(2) for 4059430");
|
||||
frame2.pack();
|
||||
frame2.show();
|
||||
frame2.setBounds(80, 80, 500, 350);
|
||||
doTest(frame2);
|
||||
|
||||
return List.of(frame, frame2);
|
||||
}
|
||||
|
||||
/*
|
||||
* This tests various boundary conditions with z-ordering
|
||||
* - inserting at the top of the z-order
|
||||
* - inserting at the bottom of the z-order
|
||||
* - inserting in the middle of the z-order
|
||||
*/
|
||||
private static void doTest(Container cont) {
|
||||
Component compZero, compOne, compTwo, compThree, compFour;
|
||||
|
||||
compZero = makeBox(cont, "Comp One", Color.blue, -1);
|
||||
// insert on top
|
||||
compOne = makeBox(cont, "Comp Zero", Color.yellow, 0);
|
||||
// put at the back
|
||||
compThree = makeBox(cont, "Comp Three", Color.red, 2);
|
||||
// insert in last position
|
||||
compTwo = makeBox(cont, "Comp Two", Color.green, 3);
|
||||
// swap compTwo and compThree to correct positions
|
||||
cont.remove(compTwo);
|
||||
cont.add(compTwo, 2);
|
||||
// one more test of adding to the end
|
||||
compFour = makeBox(cont, "Comp Four", Color.magenta, -1);
|
||||
// re-validate so components cascade into proper place
|
||||
cont.validate();
|
||||
}
|
||||
|
||||
private static Component makeBox(Container cont, String s, Color c, int index) {
|
||||
Label l = new Label(s);
|
||||
l.setBackground(c);
|
||||
l.setAlignment(Label.RIGHT);
|
||||
if (index == -1) {
|
||||
cont.add(l); // semantically equivalent to -1, but why not test this too
|
||||
} else {
|
||||
cont.add(l, index);
|
||||
}
|
||||
cont.validate();
|
||||
return l;
|
||||
}
|
||||
|
||||
/**
|
||||
* Cascades components across the container so
|
||||
* that they overlap, demonstrating their z-ordering
|
||||
*/
|
||||
static void doCascadeLayout(Container cont) {
|
||||
int i, n;
|
||||
Insets ins = cont.insets();
|
||||
n = cont.countComponents();
|
||||
for (i = n - 1; i >= 0; i--) {
|
||||
Component comp = cont.getComponent(i);
|
||||
comp.reshape(ins.left + 75 * i, ins.top + 30 * i, 100, 100);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class ZOrderPanel extends Panel {
|
||||
public void layout() {
|
||||
ZOrderTest.doCascadeLayout(this);
|
||||
}
|
||||
}
|
||||
|
||||
class ZOrderTestFrame extends Frame
|
||||
{
|
||||
public ZOrderTestFrame(String title) {
|
||||
super(title);
|
||||
}
|
||||
|
||||
public void layout() {
|
||||
ZOrderTest.doCascadeLayout(this);
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user