aboutsummaryrefslogtreecommitdiff
path: root/gnu/testlet/java/awt/FlowLayout/PaintTestBasicSetup1.java
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/testlet/java/awt/FlowLayout/PaintTestBasicSetup1.java')
-rw-r--r--gnu/testlet/java/awt/FlowLayout/PaintTestBasicSetup1.java186
1 files changed, 186 insertions, 0 deletions
diff --git a/gnu/testlet/java/awt/FlowLayout/PaintTestBasicSetup1.java b/gnu/testlet/java/awt/FlowLayout/PaintTestBasicSetup1.java
new file mode 100644
index 00000000..379948ad
--- /dev/null
+++ b/gnu/testlet/java/awt/FlowLayout/PaintTestBasicSetup1.java
@@ -0,0 +1,186 @@
+// Tags: JDK1.4
+
+// Copyright (C) 2011 Pavel Tisnovsky <ptisnovs@redhat.com>
+
+// This file is part of Mauve.
+
+// Mauve is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation; either version 2, or (at your option)
+// any later version.
+
+// Mauve 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 for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Mauve; see the file COPYING. If not, write to
+// the Free Software Foundation, Inc., 51 Franklin Street,
+// Fifth Floor, Boston, MA 02110-1301 USA.
+
+// Tags: GUI, JDK 1.0
+// Uses: ../LocationTests
+
+package gnu.testlet.java.awt.FlowLayout;
+
+import gnu.testlet.TestHarness;
+import gnu.testlet.Testlet;
+import gnu.testlet.java.awt.LocationTests;
+
+import java.awt.Button;
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.Frame;
+import java.awt.Graphics;
+import java.awt.Image;
+import java.awt.Insets;
+import java.awt.Panel;
+import java.awt.Point;
+import java.awt.Rectangle;
+import java.awt.Robot;
+import java.awt.FlowLayout;
+
+/**
+ * Test if two buttons are positioned correctly to a frame using FlowLayout.
+ */
+public class PaintTestBasicSetup1
+ extends Panel
+ implements Testlet
+{
+
+ /**
+ * Delay (pause times) for an AWT robot.
+ */
+ public static int DELAY_AMOUNT=250;
+
+ /**
+ * Runs the test using the specified harness.
+ *
+ * @param harness the test harness (<code>null</code> not permitted).
+ */
+ public void test(TestHarness harness)
+ {
+ this.setLayout(new FlowLayout());
+ setBackground(Color.red);
+ Frame frame = new Frame();
+
+ // create two components and add them to the panel
+ Button button1 = new Button(" ");
+ Button button2 = new Button(" ");
+ button1.setBackground(Color.blue);
+ button2.setBackground(Color.yellow);
+ add(button1);
+ add(button2);
+ frame.add(this);
+ frame.pack();
+ frame.show();
+
+ // AWT robot is used for reading pixel colors
+ // from a screen and also to wait for all
+ // widgets to stabilize theirs size and position.
+ Robot robot = harness.createRobot();
+
+ // we should wait a moment before the computations
+ // and pixel checks
+ robot.waitForIdle();
+ robot.delay(DELAY_AMOUNT);
+
+ // check if the first component is properly shown on the panel
+ harness.checkPoint("first component");
+ harness.check(getColorForComponent(robot, frame, button1), Color.blue);
+
+ // check if the second component is properly shown on the panel
+ harness.checkPoint("second component");
+ harness.check(getColorForComponent(robot, frame, button2), Color.yellow);
+
+ // There is a delay to avoid any race conditions
+ // and so user can see frame
+ robot.waitForIdle();
+ robot.delay(DELAY_AMOUNT);
+
+ // it's necesarry to clean up the component from desktop
+ frame.dispose();
+ }
+
+ /**
+ * Get color of a pixel located in the middle of the component.
+ *
+ * @param robot instance of AWT robot
+ * @param frame frame where component is used
+ * @param component tested component
+ */
+ private Color getColorForComponent(Robot robot, Frame frame, Component component)
+ {
+ // compute the absolute coordinates of a component inside the frame
+ Rectangle bounds = computeBounds(frame, component);
+
+ // position of checked pixel
+ int checkedPixelX = bounds.x + bounds.width / 2;
+ int checkedPixelY = bounds.y + bounds.height / 2;
+
+ // move mouse cursor to center of a rectangle
+ moveCursorToGivenPosition(robot, checkedPixelX, checkedPixelY);
+
+ // check the color of a pixel located in the button center
+ return robot.getPixelColor(checkedPixelX, checkedPixelY);
+ }
+
+ /**
+ * Compute absolute coordinates of a component inside the frame
+ *
+ * @param frame frame where component is used
+ * @param component tested component
+ *
+ * @return coordinates of a component inside the frame
+ */
+ private Rectangle computeBounds(Frame frame, Component component)
+ {
+ Rectangle bounds = component.getBounds();
+ Point location = frame.getLocationOnScreen();
+ Insets insets = frame.getInsets();
+ bounds.x += insets.left + location.x;
+ bounds.y += insets.top + location.y;
+
+ // return computed bounds
+ return bounds;
+ }
+
+
+
+ /**
+ * Move mouse cursor to center of a rectangle
+ *
+ * @param robot instance of AWT robot
+ * @param checkedPixelX x-coordinate of pixel on a screen
+ * @param checkedPixelY y-coordinate of pixel on a screen
+ */
+ private void moveCursorToGivenPosition(Robot robot, int checkedPixelX, int checkedPixelY)
+ {
+ // move the mouse cursor to a tested pixel to show users what's checked
+ robot.delay(DELAY_AMOUNT);
+ robot.mouseMove(checkedPixelX, checkedPixelY);
+ robot.delay(DELAY_AMOUNT);
+ robot.waitForIdle();
+ }
+
+
+
+ /**
+ * Paint method for a panel where components are tested.
+ *
+ * @param g the graphics context to use for painting
+ */
+ public void paint(Graphics g)
+ {
+ Image offScr = createImage(getSize().width, getSize().height);
+ Graphics offG = offScr.getGraphics();
+ offG.setClip(0, 0, getSize().width, getSize().height);
+
+ super.paint(offG);
+ g.drawImage(offScr, 0, 0, null);
+
+ offG.dispose();
+ }
+}
+