3789983e89
Reviewed-by: darcy, ihse
182 lines
6.6 KiB
Java
182 lines
6.6 KiB
Java
/*
|
|
* Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
|
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
*
|
|
* This code is free software; you can redistribute it and/or modify it
|
|
* under the terms of the GNU General Public License version 2 only, as
|
|
* published by the Free Software Foundation.
|
|
*
|
|
* This code is distributed in the hope that it will be useful, but WITHOUT
|
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
|
* version 2 for more details (a copy is included in the LICENSE file that
|
|
* accompanied this code).
|
|
*
|
|
* You should have received a copy of the GNU General Public License version
|
|
* 2 along with this work; if not, write to the Free Software Foundation,
|
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
*
|
|
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
|
* or visit www.oracle.com if you need additional information or have any
|
|
* questions.
|
|
*/
|
|
|
|
/*
|
|
* @test
|
|
* @bug 8055463 8153272
|
|
* @summary Test createFont APIs
|
|
* @run main CreateFontArrayTest
|
|
*/
|
|
|
|
import java.awt.Font;
|
|
import java.io.BufferedInputStream;
|
|
import java.io.File;
|
|
import java.io.FileInputStream;
|
|
import java.io.InputStream;
|
|
|
|
/*
|
|
* This test pokes around in platform folders/directories to try
|
|
* to find some fonts with which to test. It will do different things
|
|
* on different platforms and may not do anything at all if the platform
|
|
* directories aren't where it expects. For example if /usr/share/fonts
|
|
* is not used on a particular Linux distro or on Windows the fonts are
|
|
* not in c:\windows\fonts (which would be the right place on 99.99% of
|
|
* systems you will find today.
|
|
* It ought to be very reliable but it is not 100% guaranteed.
|
|
* Failure to find fonts to test is 'not a product bug'.
|
|
* Fonts on a system having different content than we expect based on
|
|
* file extension is also 'not a product bug'.
|
|
* The former will cause silent success, the latter may cause 'noisy' failure
|
|
* and the test would then need to be dialled back to be more cautious.
|
|
*/
|
|
|
|
public class CreateFontArrayTest {
|
|
|
|
public static void main(String[] args) throws Exception {
|
|
test(".ttc", 2, -1, true);
|
|
test(".ttf", 1, 1, true);
|
|
test(".otf", 1, 1, true);
|
|
test(".pfa", 0, 0, false);
|
|
test(".pfb", 0, 0, false);
|
|
}
|
|
|
|
static File getPlatformFontFolder(String ext) throws Exception {
|
|
boolean recurse = false;
|
|
String folder = null;
|
|
String os = System.getProperty("os.name");
|
|
if (os.startsWith("Win")) {
|
|
folder = "c:\\windows\\fonts";
|
|
} else if (os.startsWith("Linux")) {
|
|
folder = "/usr/share/fonts";
|
|
recurse = true; // need to dig to find fonts.
|
|
} else if (os.startsWith("Mac")) {
|
|
// Disabled until createFont can handle mac font names.
|
|
//folder = "/Library/Fonts";
|
|
}
|
|
if (folder == null) {
|
|
return null;
|
|
}
|
|
File dir = new File(folder);
|
|
if (!dir.exists() || !dir.isDirectory()) {
|
|
return null;
|
|
}
|
|
// Have a root.
|
|
if (!recurse) {
|
|
return dir;
|
|
}
|
|
|
|
// If "recurse" is set, try to find a sub-folder which contains
|
|
// fonts with the specified extension
|
|
return findSubFolder(dir, ext);
|
|
}
|
|
|
|
static File findSubFolder(File folder, String ext) {
|
|
File[] files =
|
|
folder.listFiles(f -> f.getName().toLowerCase().endsWith(ext));
|
|
if (files != null && files.length > 0) {
|
|
return folder;
|
|
}
|
|
File[] subdirs = folder.listFiles(f -> f.isDirectory());
|
|
for (File f : subdirs) {
|
|
File subfolder = findSubFolder(f, ext);
|
|
if (subfolder != null) {
|
|
return subfolder;
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
|
|
static void test(String ext, int min, int max,
|
|
boolean expectSuccess ) throws Exception {
|
|
|
|
File dir = getPlatformFontFolder(ext);
|
|
if (dir == null) {
|
|
System.out.println("No folder to test for " + ext);
|
|
return;
|
|
}
|
|
File[] files =
|
|
dir.listFiles(f -> f.getName().toLowerCase().endsWith(ext));
|
|
if (files == null || files.length == 0) {
|
|
System.out.println("No files to test for " + ext);
|
|
return;
|
|
}
|
|
System.out.println("Create from file " + files[0]);
|
|
Font[] fonts = null;
|
|
try {
|
|
fonts = Font.createFonts(files[0]);
|
|
System.out.println("createFont from file returned " + fonts);
|
|
} catch (Exception e) {
|
|
if (expectSuccess) {
|
|
throw new RuntimeException("Unexpected exception", e);
|
|
} else {
|
|
System.out.println("Got expected exception " + e);
|
|
return;
|
|
}
|
|
}
|
|
for (Font f : fonts) {
|
|
System.out.println(ext + " component : " + f);
|
|
}
|
|
if (fonts.length < min) {
|
|
throw new RuntimeException("Expected at least " + min +
|
|
" but got " + fonts.length);
|
|
}
|
|
if (max > 0 && fonts.length > max) {
|
|
throw new RuntimeException("Expected no more than " + max +
|
|
" but got " + fonts.length);
|
|
}
|
|
FileInputStream fis = null;
|
|
try {
|
|
System.out.println("Create from stream " + files[0]);
|
|
fis = new FileInputStream(files[0]);
|
|
InputStream s = new BufferedInputStream(fis);
|
|
fonts = null;
|
|
try {
|
|
fonts = Font.createFonts(s);
|
|
System.out.println("createFont from stream returned " + fonts);
|
|
} catch (Exception e) {
|
|
if (expectSuccess) {
|
|
throw new RuntimeException("Unexpected exception", e);
|
|
} else {
|
|
System.out.println("Got expected exception " + e);
|
|
return;
|
|
}
|
|
}
|
|
for (Font f : fonts) {
|
|
System.out.println(ext + " component : " + f);
|
|
}
|
|
if (fonts.length < min) {
|
|
throw new RuntimeException("Expected at least " + min +
|
|
" but got " + fonts.length);
|
|
}
|
|
if (max > 0 && fonts.length > max) {
|
|
throw new RuntimeException("Expected no more than " + max +
|
|
" but got " + fonts.length);
|
|
}
|
|
} finally {
|
|
if (fis != null) {
|
|
fis.close();
|
|
}
|
|
}
|
|
}
|
|
}
|