Skip to content

Commit 54c4891

Browse files
authored
Merge pull request eugenp#8672 from sampada07/BAEL-3394
BAEL-3394 : Using headless mode in Java
2 parents 4b9abc9 + 7f13a9d commit 54c4891

3 files changed

Lines changed: 114 additions & 0 deletions

File tree

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package com.baeldung.headlessmode;
2+
3+
import java.awt.GraphicsEnvironment;
4+
5+
import javax.swing.JOptionPane;
6+
7+
public class FlexibleApp {
8+
public static final int HEADLESS = 0;
9+
public static final int HEADED = 1;
10+
public FlexibleApp() {
11+
12+
if (GraphicsEnvironment.isHeadless()) {
13+
System.out.println("Hello World");
14+
} else {
15+
JOptionPane.showMessageDialog(null, "Hello World");
16+
}
17+
18+
}
19+
20+
public static int iAmFlexible() {
21+
if (GraphicsEnvironment.isHeadless()) {
22+
return HEADLESS;
23+
} else {
24+
return HEADED;
25+
}
26+
}
27+
}
Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
package com.baeldung.headlessmode;
2+
3+
import static org.assertj.core.api.Assertions.assertThat;
4+
import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
5+
6+
import java.awt.Canvas;
7+
import java.awt.Font;
8+
import java.awt.FontMetrics;
9+
import java.awt.Frame;
10+
import java.awt.GraphicsEnvironment;
11+
import java.awt.HeadlessException;
12+
import java.awt.image.BufferedImage;
13+
import java.io.FileOutputStream;
14+
import java.io.IOException;
15+
import java.io.InputStream;
16+
17+
import javax.imageio.ImageIO;
18+
19+
import org.junit.Assume;
20+
import org.junit.Before;
21+
import org.junit.Test;
22+
23+
public class HeadlessModeUnitTest {
24+
25+
private static final String IN_FILE = "/product.png";
26+
private static final String OUT_FILE = System.getProperty("java.io.tmpdir") + "/product.jpg";
27+
private static final String FORMAT = "jpg";
28+
29+
@Before
30+
public void setUpHeadlessMode() {
31+
System.setProperty("java.awt.headless", "true");
32+
}
33+
34+
@Test
35+
public void whenJavaAwtHeadlessSetToTrue_thenIsHeadlessReturnsTrue() {
36+
assertThat(GraphicsEnvironment.isHeadless()).isTrue();
37+
}
38+
39+
@Test
40+
public void whenHeadlessMode_thenFontsWork() {
41+
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
42+
43+
String fonts[] = ge.getAvailableFontFamilyNames();
44+
45+
assertThat(fonts).isNotEmpty();
46+
47+
Font font = new Font(fonts[0], Font.BOLD, 14);
48+
49+
FontMetrics fm = (new Canvas()).getFontMetrics(font);
50+
51+
assertThat(fm.getHeight()).isGreaterThan(0);
52+
assertThat(fm.getAscent()).isGreaterThan(0);
53+
assertThat(fm.getDescent()).isGreaterThan(0);
54+
}
55+
56+
@Test
57+
public void whenHeadlessMode_thenImagesWork() throws IOException {
58+
boolean result = false;
59+
try (InputStream inStream = HeadlessModeUnitTest.class.getResourceAsStream(IN_FILE); FileOutputStream outStream = new FileOutputStream(OUT_FILE)) {
60+
BufferedImage inputImage = ImageIO.read(inStream);
61+
result = ImageIO.write(inputImage, FORMAT, outStream);
62+
}
63+
64+
assertThat(result).isTrue();
65+
}
66+
67+
@Test
68+
public void whenHeadlessmode_thenFrameThrowsHeadlessException() {
69+
assertThatExceptionOfType(HeadlessException.class).isThrownBy(() -> {
70+
Frame frame = new Frame();
71+
frame.setVisible(true);
72+
frame.setSize(120, 120);
73+
});
74+
}
75+
76+
@Test
77+
public void whenHeadless_thenFlexibleAppAdjustsItsBehavior() {
78+
assertThat(FlexibleApp.iAmFlexible()).isEqualTo(FlexibleApp.HEADLESS);
79+
}
80+
81+
@Test
82+
public void whenHeaded_thenFlexibleAppAdjustsItsBehavior() {
83+
Assume.assumeFalse(GraphicsEnvironment.isHeadless());
84+
assertThat(FlexibleApp.iAmFlexible()).isEqualTo(FlexibleApp.HEADED);
85+
}
86+
87+
}
54 KB
Loading

0 commit comments

Comments
 (0)