jdk/test/javax/swing/plaf/synth/SynthScrollbarThumbPainter/SynthScrollbarThumbPainterTest.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/swing/plaf/synth/SynthScrollbarThumbPainter/SynthScrollbarThumbPainterTest.java Thu May 19 16:45:58 2016 +0530
@@ -0,0 +1,203 @@
+/*
+ * Copyright (c) 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.
+ *
+ * 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 7172750
+ * @summary Test to check Synth ScrollBar:ScrollBarThumb[].backgroundPainter is invoked
+ * @run main SynthScrollbarThumbPainterTest
+ */
+
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.Graphics2D;
+import java.awt.Point;
+import java.awt.Robot;
+import java.awt.event.InputEvent;
+import java.awt.image.BufferedImage;
+import javax.swing.JComponent;
+import javax.swing.JEditorPane;
+import javax.swing.JFrame;
+import javax.swing.JScrollPane;
+import javax.swing.Painter;
+import javax.swing.SwingUtilities;
+import javax.swing.UIManager;
+
+public class SynthScrollbarThumbPainterTest {
+
+ private static Robot testRobot;
+ private static Point pos = new Point();
+ private static MyFrame testFrame;
+
+ public static void main(String[] args) throws Exception {
+ // Create Robot
+ testRobot = new Robot();
+
+ // Create test UI
+ String lookAndFeelString = "javax.swing.plaf.nimbus.NimbusLookAndFeel";
+ SwingUtilities.invokeAndWait(new Runnable() {
+ @Override
+ public void run() {
+ try {
+ constructTestUI(lookAndFeelString);
+ } catch (Exception ex) {
+ throw new RuntimeException("Exception creating test UI");
+ }
+ }
+ });
+
+ testRobot.waitForIdle();
+ testRobot.delay(200);
+
+ // Run test method
+ testScrollBarThumbPainter();
+
+ // Dispose test UI
+ disposeTestUI();
+ }
+
+ private static void disposeTestUI() throws Exception {
+ SwingUtilities.invokeAndWait(() -> {
+ testFrame.dispose();
+ });
+ }
+
+
+ private static void constructTestUI(String lookAndFeelString) throws Exception {
+ // Set look and feel
+ UIManager.setLookAndFeel(lookAndFeelString);
+
+ // Set ScrollBarThumb background painters
+ UIManager.getLookAndFeelDefaults().put("ScrollBar:ScrollBarThumb[Enabled].backgroundPainter", new FillPainter(Color.RED));
+ UIManager.getLookAndFeelDefaults().put("ScrollBar:ScrollBarThumb[MouseOver].backgroundPainter", new FillPainter(Color.GREEN));
+ UIManager.getLookAndFeelDefaults().put("ScrollBar:ScrollBarThumb[Pressed].backgroundPainter", new FillPainter(Color.BLUE));
+
+ // Create UI
+ testFrame = new MyFrame();
+ }
+
+ private static void testScrollBarThumbPainter() throws Exception {
+ Point p = testFrame.getLocation();
+ pos.setLocation(p.x + 185, p.y + 80); // offset where scrollbar exists
+
+ testRobot.delay(200);
+
+ // Get the scrollbar color
+ Color ScrollbarColor = testFrame.getPixelColor(pos.x - p.x, pos.y - p.y);
+
+ // Assert ScrollbarThumb 'Enable' state color
+ if (!ScrollbarColor.equals(Color.RED)) {
+ disposeTestUI();
+ throw new RuntimeException("ScrollbarThumb 'Enable' state color does not match expected color");
+ }
+
+ // Move the mouse over scrollbar
+ testRobot.mouseMove(pos.x, pos.y);
+ testRobot.delay(200);
+
+ ScrollbarColor = testFrame.getPixelColor(pos.x - p.x, pos.y - p.y);
+
+ //Assert ScrollbarThumb 'MouseOver' state color
+ if (!ScrollbarColor.equals(Color.GREEN)) {
+ disposeTestUI();
+ throw new RuntimeException("ScrollbarThumb 'MouseOver' state color does not match expected color");
+ }
+
+ // Mouse Press on scrollbar
+ testRobot.mousePress(InputEvent.BUTTON1_DOWN_MASK);
+ testRobot.delay(200);
+
+ ScrollbarColor = testFrame.getPixelColor(pos.x - p.x, pos.y - p.y);
+
+ testRobot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);
+ testRobot.delay(200);
+
+ //Assert ScrollbarThumb 'Pressed' state color
+ if (!ScrollbarColor.equals(Color.BLUE)) {
+ disposeTestUI();
+ throw new RuntimeException("ScrollbarThumb 'Pressed' state color does not match expected color");
+ }
+ }
+
+}
+
+
+class FillPainter implements Painter<JComponent> {
+
+ private final Color color;
+
+ FillPainter(Color c) {
+ color = c;
+ }
+
+ @Override
+ public void paint(Graphics2D g, JComponent object, int width, int height) {
+ g.setColor(color);
+ g.fillRect(0, 0, width - 1, height - 1);
+ }
+}
+
+class MyFrame extends JFrame {
+
+ private BufferedImage bi;
+ private final String content = "A\nB\nC\nD\nE\nF\nG\nH\nI\nJ\nK\nL\nM\nN\nO";
+
+ public MyFrame() {
+ JEditorPane editpane = new JEditorPane();
+ editpane.setEditable(false);
+ editpane.setText(content);
+ editpane.setCaretPosition(0);
+
+ JScrollPane scrollpane = new JScrollPane(editpane);
+
+ add(scrollpane);
+
+ setDefaultCloseOperation(DISPOSE_ON_CLOSE);
+
+ setSize(new Dimension(200, 200));
+ bi = new BufferedImage(200, 200, BufferedImage.TYPE_INT_ARGB);
+ setResizable(false);
+ setVisible(true);
+ }
+
+
+ public Color getPixelColor(int x, int y) {
+
+ paintFrameToBufferedImage(this);
+
+ int pixel = bi.getRGB(x, y);
+
+ int alpha = (pixel >> 24) & 0xff;
+ int red = (pixel >> 16) & 0xff;
+ int green = (pixel >> 8) & 0xff;
+ int blue = (pixel) & 0xff;
+
+ Color pixelColor = new Color(red, green, blue, alpha);
+ return pixelColor;
+ }
+
+ private void paintFrameToBufferedImage(Component component) {
+ component.paint(bi.getGraphics());
+ }
+} //MyFrame
+