< 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 >