/* @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 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); } } } }