'Test' added to help identify "too small" font families/sizes
authorgmungoc <g.m.carstairs@dundee.ac.uk>
Wed, 22 Apr 2015 13:28:44 +0000 (14:28 +0100)
committergmungoc <g.m.carstairs@dundee.ac.uk>
Wed, 22 Apr 2015 13:28:44 +0000 (14:28 +0100)
test/jalview/gui/FontChooserTest.java [new file with mode: 0644]

diff --git a/test/jalview/gui/FontChooserTest.java b/test/jalview/gui/FontChooserTest.java
new file mode 100644 (file)
index 0000000..d724fac
--- /dev/null
@@ -0,0 +1,54 @@
+package jalview.gui;
+
+import java.awt.Canvas;
+import java.awt.Font;
+import java.awt.FontMetrics;
+
+import org.junit.Test;
+
+public class FontChooserTest
+{
+
+  /**
+   * Not a real test as it runs no methods on FontChooser and makes no
+   * assertions, but this method writes to sysout the names of any (currently
+   * available, plain) fonts and point sizes that would be rejected by Jalview's
+   * FontChooser as having an I-width of less than 1.0.
+   */
+  @Test
+  public void dumpInvalidFonts()
+  {
+    String[] fonts = java.awt.GraphicsEnvironment
+            .getLocalGraphicsEnvironment().getAvailableFontFamilyNames();
+    for (int pointSize = 1;; pointSize++)
+    {
+      System.out.println(System.lineSeparator()
+              + "Fonts with insufficient width at " + pointSize + "pt:");
+      if (pointSize == 1)
+      {
+        System.out.println("All except:");
+      }
+      int badCount = 0;
+      for (String fontname : fonts)
+      {
+        Font newFont = new Font(fontname, Font.PLAIN, pointSize);
+        FontMetrics fontm = new Canvas().getFontMetrics(newFont);
+        double iw = fontm.getStringBounds("I", null).getWidth();
+        final boolean tooSmall = iw < 1d;
+        if (tooSmall)
+        {
+          badCount++;
+        }
+        if ((pointSize > 1 && tooSmall) || (pointSize == 1 && !tooSmall))
+        {
+          System.out.println(fontname);
+        }
+      }
+      if (badCount == 0)
+      {
+        break;
+      }
+    }
+  }
+
+}