--- old/test/java/awt/image/multiresolution/MultiResolutionTrayIconTest/MultiResolutionTrayIconTest.java 2016-09-09 17:27:36.082419000 +0530 +++ new/test/java/awt/image/multiresolution/MultiResolutionTrayIconTest/MultiResolutionTrayIconTest.java 2016-09-09 17:27:35.794275000 +0530 @@ -22,96 +22,176 @@ */ -/* - @test - @bug 8150176 8151773 - @summary Check if correct resolution variant is used for tray icon. - @author a.stepanov - @run applet/manual=yesno MultiResolutionTrayIconTest.html -*/ - - -import java.applet.Applet; -import java.awt.*; -import java.awt.event.*; -import java.awt.image.*; - - -public class MultiResolutionTrayIconTest extends Applet { - - private SystemTray tray; - private TrayIcon icon, iconMRI; - - public void init() { this.setLayout(new BorderLayout()); } - - public void start() { - - boolean trayIsSupported = SystemTray.isSupported(); - Button b = new Button("Start"); - if (trayIsSupported) { - - prepareIcons(); - b.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { doTest(); } - }); - } else { - b.setLabel("not supported"); - b.setEnabled(false); - System.out.println("system tray is not supported"); - } - add(b, BorderLayout.CENTER); +/** + * @test + * @key headful + * @bug 8150176 8151773 + * @summary Check if correct resolution variant is used for tray icon. + * @run main/manual/othervm -Dsun.java2d.uiScale=2 MultiResolutionTrayIconTest + */ +import java.awt.Color; +import java.awt.Dimension; +import java.awt.Graphics; +import java.awt.GridBagLayout; +import java.awt.GridBagConstraints; +import java.awt.SystemTray; +import java.awt.TrayIcon; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; +import java.awt.image.BaseMultiResolutionImage; +import java.awt.image.BufferedImage; +import javax.swing.JFrame; +import javax.swing.JButton; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.SwingUtilities; +import java.util.concurrent.CountDownLatch; + +public class MultiResolutionTrayIconTest { + private static SystemTray tray; + private static TrayIcon icon; + private static GridBagLayout layout; + private static JPanel mainControlPanel; + private static JPanel resultButtonPanel; + private static JLabel instructionText; + private static JButton passButton; + private static JButton failButton; + private static JButton startButton; + private static JFrame mainFrame; + private static CountDownLatch latch; + + public static void main(String[] args) throws Exception { + latch = new CountDownLatch(1); + createUI(); + latch.await(); + } + + public static void createUI() throws Exception { + SwingUtilities.invokeAndWait(new Runnable() { + public void run() { + mainFrame = new JFrame("TrayIcon Test"); + boolean trayIsSupported = SystemTray.isSupported(); + tray = SystemTray.getSystemTray(); + Dimension d = tray.getTrayIconSize(); + icon = new TrayIcon(createIcon(d.width, d.height)); + icon.setImageAutoSize(false); + layout = new GridBagLayout(); + mainControlPanel = new JPanel(layout); + resultButtonPanel = new JPanel(layout); + + GridBagConstraints gbc = new GridBagConstraints(); + String instructions + = "INSTRUCTIONS:
" + + "Press start button to add icon to system tray.

" + + "If Icon color is green test" + + " passes else failed.

"; + + instructionText = new JLabel(); + instructionText.setText(instructions); + + gbc.gridx = 0; + gbc.gridy = 0; + gbc.fill = GridBagConstraints.HORIZONTAL; + mainControlPanel.add(instructionText, gbc); + startButton = new JButton("Start"); + startButton.setActionCommand("Start"); + if (trayIsSupported) { + + startButton.addActionListener((ActionEvent e) -> { + doTest(); + }); + } else { + startButton.setEnabled(false); + System.out.println("system tray is not supported"); + latch.countDown(); + } + gbc.gridx = 0; + gbc.gridy = 0; + resultButtonPanel.add(startButton, gbc); + + passButton = new JButton("Pass"); + passButton.setActionCommand("Pass"); + passButton.addActionListener((ActionEvent e) -> { + latch.countDown(); + removeIcon(); + mainFrame.dispose(); + }); + failButton = new JButton("Fail"); + failButton.setActionCommand("Fail"); + failButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + removeIcon(); + latch.countDown(); + mainFrame.dispose(); + throw new RuntimeException("Test Failed"); + } + }); + gbc.gridx = 1; + gbc.gridy = 0; + resultButtonPanel.add(passButton, gbc); + gbc.gridx = 2; + gbc.gridy = 0; + resultButtonPanel.add(failButton, gbc); + + gbc.gridx = 0; + gbc.gridy = 1; + mainControlPanel.add(resultButtonPanel, gbc); + + mainFrame.add(mainControlPanel); + mainFrame.setSize(400, 200); + mainFrame.setLocationRelativeTo(null); + mainFrame.setVisible(true); + + mainFrame.addWindowListener(new WindowAdapter() { + @Override + public void windowClosing(WindowEvent e) { + removeIcon(); + latch.countDown(); + mainFrame.dispose(); + } + }); + } + }); + + } - validate(); - setVisible(true); + private static BaseMultiResolutionImage createIcon(int w, int h) { + return new BaseMultiResolutionImage( + new BufferedImage[]{generateImage(w, h, 1, Color.RED), + generateImage(w, h, 2, Color.GREEN)}); } - private BufferedImage generateImage(int w, int h, Color c) { + private static BufferedImage generateImage(int w, int h, int scale, Color c) { - BufferedImage img = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB); + int x = w * scale, y = h * scale; + BufferedImage img = new BufferedImage(x, y, BufferedImage.TYPE_INT_RGB); Graphics g = img.getGraphics(); g.setColor(c); - g.fillRect(0, 0, w, h); + g.fillRect(0, 0, x, y); g.setColor(Color.WHITE); - int r = (Math.min(w, h) >= 8) ? 3 : 1; - g.fillRect(r, r, w - 2 * r, h - 2 * r); + g.fillRect(x / 3, y / 3, x / 3, y / 3); return img; } - private void prepareIcons() { + private static void doTest() { - tray = SystemTray.getSystemTray(); - Dimension d = tray.getTrayIconSize(); - int w = d.width, h = d.height; - - BufferedImage img = generateImage(w, h, Color.BLUE); - // use wrong icon size for "nok" - BufferedImage nok = generateImage(w / 2 + 2, h / 2 + 2, Color.RED); - BaseMultiResolutionImage mri = - new BaseMultiResolutionImage(new BufferedImage[] {nok, img}); - icon = new TrayIcon(img); - icon.setImageAutoSize(true); // just in case - iconMRI = new TrayIcon(mri); - iconMRI.setImageAutoSize(true); - } - - private void doTest() { - - if (tray.getTrayIcons().length > 0) { return; } // icons were added already + if (tray.getTrayIcons().length > 0) { + return; + } try { tray.add(icon); - tray.add(iconMRI); } catch (Exception e) { throw new RuntimeException(e); } } - public void stop() { - - // check for null, just in case + private static void removeIcon() { if (tray != null) { tray.remove(icon); - tray.remove(iconMRI); } } } +