JRE-13 java.awt.TextLayout does not handle correctly the bolded logical fonts (Serif)

Backported fix of JDK-8139176 (test updated)
diff --git a/src/share/classes/java/awt/font/StyledFontLayoutTest.java b/src/share/classes/java/awt/font/StyledFontLayoutTest.java
index 1e895b9..df88ff9 100644
--- a/src/share/classes/java/awt/font/StyledFontLayoutTest.java
+++ b/src/share/classes/java/awt/font/StyledFontLayoutTest.java
@@ -28,6 +28,7 @@
  * @run main StyledFontLayoutTest
  */
 
+import java.awt.Color;
 import java.awt.Font;
 import java.awt.Graphics;
 import java.awt.Graphics2D;
@@ -35,6 +36,7 @@
 import java.awt.font.FontRenderContext;
 import java.awt.font.GlyphVector;
 import java.awt.geom.Rectangle2D;
+import java.awt.image.BufferedImage;
 
 import javax.swing.JFrame;
 import javax.swing.JPanel;
@@ -43,30 +45,44 @@
 
 public class StyledFontLayoutTest extends JPanel {
 
+    static final int W=600, H=400;
     static boolean interactive;
+    static BufferedImage im;
     public static void main(String[] args) {
-    
+
         interactive = args.length > 0;
-           
+
+        runTest();
+
+        if (!interactive) {
+            return;
+        }
         SwingUtilities.invokeLater(() -> {
             JFrame frame = new JFrame("Styled Font Layout Test");
             frame.add(new StyledFontLayoutTest());
             frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
-            frame.setSize(600, 400);
+            frame.setSize(W, H);
             frame.setLocationRelativeTo(null);
             frame.setVisible(true);
         });
     }
-    
+
     @Override
     protected void paintComponent(Graphics g) {
+        g.drawImage(im, 0, 0, null);
+    }
 
-        Graphics2D g2d = (Graphics2D)g;
+    private static void runTest() {
+        im = new BufferedImage(W, H, BufferedImage.TYPE_INT_RGB);
+        Graphics2D g2d = im.createGraphics();
+        g2d.setColor(Color.white);
+        g2d.fillRect(0, 0, W, H);
+        g2d.setColor(Color.black);
         g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
-                             RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
+                RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
         char[] chs = "Sample Text.".toCharArray();
         int len = chs.length;
-        
+
         int x = 50, y = 100;
 
         FontRenderContext frc = g2d.getFontRenderContext();
@@ -76,12 +92,12 @@
         g2d.drawChars(chs, 0, len, x, y); y +=50;
 
         g2d.drawGlyphVector(pgv, x, y); y += 50;
-        Rectangle2D plainStrBounds = plain.getStringBounds(chs, 0, len, frc); 
-        Rectangle2D plainGVBounds = pgv.getLogicalBounds(); 
+        Rectangle2D plainStrBounds = plain.getStringBounds(chs, 0, len, frc);
+        Rectangle2D plainGVBounds = pgv.getLogicalBounds();
         Font bold = new Font("Serif", Font.BOLD, 48);
         GlyphVector bgv = bold.layoutGlyphVector(frc, chs, 0, len, 0);
-        Rectangle2D boldStrBounds = bold.getStringBounds(chs, 0, len, frc); 
-        Rectangle2D boldGVBounds = bgv.getLogicalBounds(); 
+        Rectangle2D boldStrBounds = bold.getStringBounds(chs, 0, len, frc);
+        Rectangle2D boldGVBounds = bgv.getLogicalBounds();
         g2d.setFont(bold);
         g2d.drawChars(chs, 0, len, x, y); y +=50;
         g2d.drawGlyphVector(bgv, x, y);
@@ -90,13 +106,13 @@
         System.out.println("Plain GlyphVector Bounds = " + plainGVBounds);
         System.out.println("Bold GlyphVector Bounds = " + boldGVBounds);
         if (!plainStrBounds.equals(boldStrBounds) &&
-             plainGVBounds.equals(boldGVBounds))
+                plainGVBounds.equals(boldGVBounds))
         {
-            System.out.println("Plain GV bounds same as Bold");
+            System.out.println("Test failed: Plain GV bounds same as Bold");
             if (!interactive) {
                 throw new RuntimeException("Plain GV bounds same as Bold");
             }
-        }            
+        }
 
     };
-}
+}
\ No newline at end of file