1 /*
   2  * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
   3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   4  *
   5  * This code is free software; you can redistribute it and/or modify it
   6  * under the terms of the GNU General Public License version 2 only, as
   7  * published by the Free Software Foundation.
   8  *
   9  * This code is distributed in the hope that it will be useful, but WITHOUT
  10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  12  * version 2 for more details (a copy is included in the LICENSE file that
  13  * accompanied this code).
  14  *
  15  * You should have received a copy of the GNU General Public License version
  16  * 2 along with this work; if not, write to the Free Software Foundation,
  17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  18  *
  19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  20  * or visit www.oracle.com if you need additional information or have any
  21  * questions.
  22  */
  23 
  24 /*
  25  * @test
  26  * @key headful
  27  * @bug 8015748
  28  * @summary verifies ProgressBar RightToLeft orientations for all Look and Feels
  29  * @library ../../regtesthelpers
  30  * @build Util
  31  * @run main JProgressBarOrientationRobotTest
  32  */
  33 import java.awt.Color;
  34 import java.awt.ComponentOrientation;
  35 import java.awt.Point;
  36 import java.awt.Robot;
  37 import javax.swing.JFrame;
  38 import javax.swing.JProgressBar;
  39 import javax.swing.SwingUtilities;
  40 import javax.swing.UIManager;
  41 import javax.swing.UnsupportedLookAndFeelException;
  42 
  43 public class JProgressBarOrientationRobotTest {
  44 
  45     private static JFrame frame;
  46     private static JProgressBar progressBar;
  47     private static Robot robot;
  48     private static Color colorCenter;
  49     private static Color colorLeft;
  50     private static Color colorRight;
  51     private static final int widthBuffer = 20;
  52     private static volatile String errorString = "";
  53 
  54     public static void main(String[] args) throws Exception {
  55         robot = new Robot();
  56         robot.waitForIdle();
  57         UIManager.LookAndFeelInfo[] lookAndFeelArray
  58                 = UIManager.getInstalledLookAndFeels();
  59         for (UIManager.LookAndFeelInfo lookAndFeelItem : lookAndFeelArray) {
  60             executeCase(lookAndFeelItem.getClassName(),
  61                     lookAndFeelItem.getName());
  62 
  63         }
  64         if (!"".equals(errorString)) {
  65             System.err.println(errorString);
  66         }
  67     }
  68 
  69     private static void executeCase(String lookAndFeelString,
  70             String shortenedLandFeelString) throws Exception {
  71         if (tryLookAndFeel(lookAndFeelString)) {
  72             createUI(shortenedLandFeelString);
  73             robot.waitForIdle();
  74 
  75             createLTR();
  76             robot.delay(1000);
  77             runTestCase();
  78             robot.delay(1000);
  79             testCaseLTR(shortenedLandFeelString);
  80             robot.delay(1000);
  81 
  82             createRTL();
  83             robot.delay(1000);
  84             runTestCase();
  85             robot.delay(1000);
  86             testCaseRTL(shortenedLandFeelString);
  87             robot.delay(1000);
  88 
  89             cleanUp();
  90         }
  91 
  92     }
  93 
  94     private static void createUI(final String shortenedLookAndFeelString)
  95             throws Exception {
  96         SwingUtilities.invokeAndWait(new Runnable() {
  97             @Override
  98             public void run() {
  99                 progressBar = new JProgressBar();
 100                 progressBar.setValue(30);
 101                 frame = new JFrame(shortenedLookAndFeelString);
 102                 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 103                 frame.getContentPane().add(progressBar);
 104                 frame.pack();
 105                 frame.setSize(500, frame.getSize().height);
 106                 frame.setLocationRelativeTo(null);
 107                 frame.setVisible(true);
 108                 frame.toFront();
 109             }
 110         });
 111     }
 112 
 113     private static void createLTR()
 114             throws Exception {
 115         SwingUtilities.invokeAndWait(new Runnable() {
 116             @Override
 117             public void run() {
 118                 progressBar.applyComponentOrientation(
 119                         ComponentOrientation.LEFT_TO_RIGHT);
 120                 progressBar.repaint();
 121             }
 122         });
 123     }
 124 
 125     private static void createRTL()
 126             throws Exception {
 127         SwingUtilities.invokeAndWait(new Runnable() {
 128             @Override
 129             public void run() {
 130                 progressBar.applyComponentOrientation(
 131                         ComponentOrientation.RIGHT_TO_LEFT);
 132                 progressBar.repaint();
 133             }
 134         });
 135     }
 136 
 137     private static void runTestCase() throws Exception {
 138         Point centerPoint = Util.getCenterPoint(progressBar);
 139         colorCenter = robot.getPixelColor(centerPoint.x, centerPoint.y);
 140         colorRight = robot.getPixelColor(
 141                 (centerPoint.x + progressBar.getWidth() / 2 - widthBuffer),
 142                 centerPoint.y);
 143         colorLeft = robot.getPixelColor(
 144                 (centerPoint.x - progressBar.getWidth() / 2 + widthBuffer),
 145                 centerPoint.y);
 146         robot.waitForIdle();
 147     }
 148 
 149     private static void testCaseLTR(String shortenedLookAndFeelString)
 150             throws Exception {
 151         SwingUtilities.invokeAndWait(new Runnable() {
 152             @Override
 153             public void run() {
 154 
 155                 if (colorCenter.equals(colorRight)) {
 156                     if (!colorCenter.equals(colorLeft)) {
 157                         System.out.println("[" + shortenedLookAndFeelString
 158                                 + "]: LTR orientation test passed");
 159                     }
 160                 } else {
 161                     frame.dispose();
 162                     String error = "[" + shortenedLookAndFeelString
 163                             + "]: [Error]: LTR orientation test failed";
 164                     errorString += error;
 165                     System.err.println(error);
 166                 }
 167             }
 168         });
 169 
 170     }
 171 
 172     private static void testCaseRTL(String shortenedLookAndFeelString)
 173             throws Exception {
 174         SwingUtilities.invokeAndWait(new Runnable() {
 175             @Override
 176             public void run() {
 177                 if (colorCenter.equals(colorLeft)) {
 178                     if (!colorCenter.equals(colorRight)) {
 179                         System.out.println("[" + shortenedLookAndFeelString
 180                                 + "]: RTL orientation test passed");
 181                     }
 182                 } else {
 183                     frame.dispose();
 184                     String error = "[" + shortenedLookAndFeelString
 185                             + "]: [Error]: LTR orientation test failed";
 186                     errorString += error;
 187                     System.err.println(error);
 188                 }
 189             }
 190         });
 191     }
 192 
 193     private static void cleanUp() throws Exception {
 194         SwingUtilities.invokeAndWait(new Runnable() {
 195             @Override
 196             public void run() {
 197                 frame.dispose();
 198             }
 199         });
 200     }
 201 
 202     private static boolean tryLookAndFeel(String lookAndFeelString)
 203             throws Exception {
 204         try {
 205             UIManager.setLookAndFeel(
 206                     lookAndFeelString);
 207 
 208         } catch (UnsupportedLookAndFeelException
 209                 | ClassNotFoundException
 210                 | InstantiationException
 211                 | IllegalAccessException e) {
 212             errorString += e.getMessage() + "\n";
 213             System.err.println("[Exception]: " + e.getMessage());
 214             return false;
 215         }
 216         return true;
 217     }
 218 }