jdk-24/test/jdk/java/awt/font/TextLayout/VariationSelectorTest.java
Toshio Nakamura d6c849a824 8187100: Support Unicode Variation Selectors
Support Unicode Variation Selectors

Reviewed-by: prr, srl
2018-06-25 11:40:46 -07:00

66 lines
2.6 KiB
Java

/* @test
* @summary Verify two identical 'a's are rendered
* @bug 8187100
* @ignore Requires a special font installed.
*/
import javax.swing.JFrame;
import javax.swing.JComponent;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.font.FontRenderContext;
import java.awt.font.GlyphVector;
public class VariationSelectorTest {
// A font supporting Unicode variation selectors is required
// At least DejaVu 2.20 from 2007
private static final Font FONT = new Font("DejaVu Sans", Font.PLAIN, 12);
public static void main(String[] args) {
final String fontName = FONT.getFontName();
if (!fontName.equals("DejaVuSans")) {
System.err.println("*** Warning: Font DejaVuSans not installed.");
System.err.println("*** Using font: " + fontName);
}
SwingUtilities.invokeLater(() -> {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
frame.add(new MyComponent());
frame.setSize(200, 200);
frame.setVisible(true);
frame.setLocationRelativeTo(null);
});
}
private static class MyComponent extends JComponent {
@Override
protected void paintComponent(Graphics g) {
Graphics2D g2d = (Graphics2D) g;
FontRenderContext frc = g2d.getFontRenderContext();
String text = "a";
GlyphVector gv = FONT.layoutGlyphVector(
frc, text.toCharArray(), 0, text.length(),
Font.LAYOUT_LEFT_TO_RIGHT);
System.out.println("'a'=" + gv.getNumGlyphs());
g2d.drawString("=" + gv.getNumGlyphs() + " ('a')", 100, 50);
g2d.drawGlyphVector(gv, 80, 50);
String text2 = "a\ufe00";
GlyphVector gv2 = FONT.layoutGlyphVector(
frc, text2.toCharArray(), 0, text2.length(),
Font.LAYOUT_LEFT_TO_RIGHT);
g2d.drawGlyphVector(gv2, 80, 100);
System.out.println("'a'+VS=" + gv2.getNumGlyphs());
g2d.drawString("=" + gv2.getNumGlyphs() + " ('a'+VS)", 100, 100);
if ((gv.getNumGlyphs() == 1) && (gv2.getNumGlyphs() == 1)) {
System.out.println("PASS");
g2d.drawString("PASS", 10, 15);
} else {
System.err.println("FAIL");
g2d.drawString("FAIL", 10, 15);
}
}
}
}