From 5456cf08db1b302e2e438d7a378cbb31ed642c80 Mon Sep 17 00:00:00 2001 From: Sergey Malenkov Date: Mon, 19 Oct 2015 14:59:12 +0300 Subject: [PATCH] Add test for FontInfo --- .../src/com/intellij/ui/FontComboBox.java | 2 +- .../src/com/intellij/util/ui/FontInfo.java | 17 +++++- .../com/intellij/util/ui/FontInfoTest.java | 52 +++++++++++++++++++ .../editors/FontEditorDialog.java | 2 +- 4 files changed, 69 insertions(+), 4 deletions(-) create mode 100644 platform/util/testSrc/com/intellij/util/ui/FontInfoTest.java diff --git a/platform/platform-impl/src/com/intellij/ui/FontComboBox.java b/platform/platform-impl/src/com/intellij/ui/FontComboBox.java index 026c088cee00..3bf552f6b275 100644 --- a/platform/platform-impl/src/com/intellij/ui/FontComboBox.java +++ b/platform/platform-impl/src/com/intellij/ui/FontComboBox.java @@ -127,7 +127,7 @@ public final class FontComboBox extends ComboBox { private FontInfo getInfo(Object item) { for (FontInfo info : myMonospacedOnly ? myMonoFonts : myAllFonts) { - if (item instanceof String ? info.toString().equals(item) : info.equals(item)) { + if (item instanceof String ? info.toString().equalsIgnoreCase((String)item) : info.equals(item)) { return info; } } diff --git a/platform/util/src/com/intellij/util/ui/FontInfo.java b/platform/util/src/com/intellij/util/ui/FontInfo.java index c92c82d2aa44..448c612a5444 100644 --- a/platform/util/src/com/intellij/util/ui/FontInfo.java +++ b/platform/util/src/com/intellij/util/ui/FontInfo.java @@ -33,6 +33,7 @@ public final class FontInfo { private static final FontInfoComparator COMPARATOR = new FontInfoComparator(); private static final FontRenderContext DEFAULT_CONTEXT = new FontRenderContext(null, false, false); private static final String[] WRONG_SUFFIX = {".plain", ".bold", ".italic", ".bolditalic"}; + private static final String[] DEFAULT = {Font.DIALOG, Font.DIALOG_INPUT, Font.MONOSPACED, Font.SANS_SERIF, Font.SERIF}; private static final int DEFAULT_SIZE = 12; private final String myName; @@ -121,7 +122,7 @@ public final class FontInfo { private static FontInfo find(List list, String name) { for (FontInfo info : list) { - if (info.toString().equals(name)) { + if (info.toString().equalsIgnoreCase(name)) { return info; } } @@ -139,6 +140,12 @@ public final class FontInfo { FontInfo info = byName(name); if (info != null) list.add(info); } + for (String name : DEFAULT) { + if (find(list, name) == null) { + FontInfo info = byName(name); + if (info != null) list.add(info); + } + } Collections.sort(list, COMPARATOR); return Collections.unmodifiableList(list); } @@ -159,15 +166,21 @@ public final class FontInfo { } private static FontInfo create(String name, Font font) { + boolean plainOnly = name == null; try { if (font == null) { font = new Font(name, Font.PLAIN, DEFAULT_SIZE); + // Java uses Dialog family for nonexistent fonts + if (!Font.DIALOG.equals(name) && Font.DIALOG.equals(font.getFamily(ENGLISH))) { + throw new IllegalArgumentException("not supported " + font); + } } else if (DEFAULT_SIZE != font.getSize()) { font = font.deriveFont((float)DEFAULT_SIZE); + name = font.getFontName(ENGLISH); } int width = getFontWidth(font, Font.PLAIN); - if (name != null) { + if (!plainOnly) { if (width != getFontWidth(font, Font.BOLD)) width = 0; if (width != getFontWidth(font, Font.ITALIC)) width = 0; if (width != getFontWidth(font, Font.BOLD | Font.ITALIC)) width = 0; diff --git a/platform/util/testSrc/com/intellij/util/ui/FontInfoTest.java b/platform/util/testSrc/com/intellij/util/ui/FontInfoTest.java new file mode 100644 index 000000000000..09dec5a6da71 --- /dev/null +++ b/platform/util/testSrc/com/intellij/util/ui/FontInfoTest.java @@ -0,0 +1,52 @@ +package com.intellij.util.ui; + +import junit.framework.TestCase; + +import java.awt.Font; +import java.awt.GraphicsEnvironment; +import java.util.Locale; + +/** + * @author Sergey.Malenkov + */ +public final class FontInfoTest extends TestCase { + private static void check(String name, boolean exist) { + if (GraphicsEnvironment.isHeadless()) return; + FontInfo info = FontInfo.get(name); + assertEquals(exist, null != info); + if (name != null) { + assertEquals(info, FontInfo.get(name.toUpperCase(Locale.ENGLISH))); + assertEquals(info, FontInfo.get(name.toLowerCase(Locale.ENGLISH))); + } + exist = false; // because predefined names are not real font names + assertEquals(exist, null != FontInfo.get(new Font(name, Font.PLAIN, 12))); + } + + public void testDialog() { + check(Font.DIALOG, true); + } + + public void testDialogInput() { + check(Font.DIALOG_INPUT, true); + } + + public void testMonospaced() { + check(Font.MONOSPACED, true); + } + + public void testSansSerif() { + check(Font.SANS_SERIF, true); + } + + public void testSerif() { + check(Font.SERIF, true); + } + + public void testNonExistent() { + check("Strange (very strange) nonexistent font", false); + } + + public void testNull() { + check(null, false); + } +} diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/propertyInspector/editors/FontEditorDialog.java b/plugins/ui-designer/src/com/intellij/uiDesigner/propertyInspector/editors/FontEditorDialog.java index 232bf1ed1db9..12e923d63d39 100644 --- a/plugins/ui-designer/src/com/intellij/uiDesigner/propertyInspector/editors/FontEditorDialog.java +++ b/plugins/ui-designer/src/com/intellij/uiDesigner/propertyInspector/editors/FontEditorDialog.java @@ -246,7 +246,7 @@ public class FontEditorDialog extends DialogWrapper { public FontInfo findElement(String name) { for (FontInfo info : myList) { - if (info.toString().equals(name)) { + if (info.toString().equalsIgnoreCase(name)) { return info; } }