< prev index next >

test/java/awt/image/multiresolution/MultiResolutionTrayIconTest/MultiResolutionTrayIconTest.java

Print this page

        

*** 20,117 **** * or visit www.oracle.com if you need additional information or have any * questions. */ ! /* ! @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); ! validate(); ! setVisible(true); } ! private BufferedImage generateImage(int w, int h, Color c) { ! BufferedImage img = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB); Graphics g = img.getGraphics(); g.setColor(c); ! g.fillRect(0, 0, w, h); g.setColor(Color.WHITE); ! int r = (Math.min(w, h) >= 8) ? 3 : 1; ! g.fillRect(r, r, w - 2 * r, h - 2 * r); return img; } ! private void prepareIcons() { ! 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 try { tray.add(icon); - tray.add(iconMRI); } catch (Exception e) { throw new RuntimeException(e); } } ! public void stop() { ! ! // check for null, just in case if (tray != null) { tray.remove(icon); - tray.remove(iconMRI); } } } --- 20,255 ---- * or visit www.oracle.com if you need additional information or have any * questions. */ ! /** ! * @test ! * @bug 8150176 8151773 ! * @summary Check if correct resolution variant is used for tray icon. ! * @run main/manual 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 java.io.BufferedReader; ! import java.io.File; ! import java.io.IOException; ! import java.io.InputStreamReader; ! import java.util.ArrayList; ! import java.util.HashMap; ! import java.util.List; ! import java.util.Map; ! import javax.swing.JFrame; ! import javax.swing.JButton; ! import javax.swing.JLabel; ! import javax.swing.JPanel; ! import javax.swing.SwingUtilities; ! import java.io.InputStream; ! ! 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; ! ! public static void main(String[] args) throws Exception { ! String osName = System.getProperty("os.name"); ! if (osName.contains("Win")) { ! createUI(); ! } else if (args.length == 0) { ! createChildProcess(); ! } else { ! createUI(); ! } ! } + static void createChildProcess() { + String javaPath = System.getProperty("java.home"); + String classPathDir = System.getProperty("java.class.path"); + Map<String, String> env = new HashMap<String, String>(); + env.put("GDK_SCALE", "2"); + int exitValue = doExec(env, javaPath + File.separator + "bin" + File.separator + + "java", "-cp", + classPathDir, "MultiResolutionTrayIconTest", "1"); + if (exitValue != 0) { + throw new RuntimeException("Test Failed"); + } + } ! static int doExec(Map<String, String> envToSet, String... cmds) { ! Process p = null; ! ProcessBuilder pb = new ProcessBuilder(cmds); ! Map<String, String> env = pb.environment(); ! if (envToSet != null) { ! env.putAll(envToSet); ! } ! BufferedReader rdr = null; ! InputStream errorStream = null; ! try { ! List<String> outputList = new ArrayList<>(); ! pb.redirectErrorStream(true); ! p = pb.start(); ! rdr = new BufferedReader(new InputStreamReader(p.getInputStream())); ! String in = rdr.readLine(); ! while (in != null) { ! outputList.add(in); ! in = rdr.readLine(); ! throw new RuntimeException("Test Failed"); ! } ! p.waitFor(); ! } catch (Exception ex) { ! ex.printStackTrace(); ! } finally { ! try { ! if (rdr != null) { ! rdr.close(); ! } ! } catch (IOException ex) { ! } ! p.destroy(); ! } ! return p.exitValue(); ! } + 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(true); ! layout = new GridBagLayout(); ! mainControlPanel = new JPanel(layout); ! resultButtonPanel = new JPanel(layout); ! ! GridBagConstraints gbc = new GridBagConstraints(); ! String instructions ! = "<html>INSTRUCTIONS:<br>" ! + "Press start button to add icon to system tray.<br><br>" ! + "If Icon color is green test" ! + " passes else failed.<br><br></html>"; ! ! 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"); } ! gbc.gridx = 0; ! gbc.gridy = 0; ! resultButtonPanel.add(startButton, gbc); ! ! passButton = new JButton("Pass"); ! passButton.setActionCommand("Pass"); ! passButton.addActionListener((ActionEvent e) -> { ! removeIcon(); ! mainFrame.dispose(); ! }); ! failButton = new JButton("Fail"); ! failButton.setActionCommand("Fail"); ! failButton.addActionListener(new ActionListener() { ! @Override ! public void actionPerformed(ActionEvent e) { ! removeIcon(); ! 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(); ! mainFrame.dispose(); ! } ! }); ! } ! }); ! ! } ! 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 static BufferedImage generateImage(int w, int h, int scale, Color c) { ! 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, x, y); g.setColor(Color.WHITE); ! g.fillRect(x / 3, y / 3, x / 3, y / 3); return img; } ! private static void doTest() { ! if (tray.getTrayIcons().length > 0) { ! return; } try { tray.add(icon); } catch (Exception e) { throw new RuntimeException(e); } } ! private static void removeIcon() { if (tray != null) { tray.remove(icon); } } }
< prev index next >