Skip to content
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
165 changes: 92 additions & 73 deletions fontbox/src/test/java/org/apache/fontbox/afm/AFMParserTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
import java.io.ByteArrayInputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import java.util.List;
import java.util.Optional;
Expand Down Expand Up @@ -59,129 +60,147 @@ void testStartFontMetrics() throws IOException
@Test
void testEndFontMetrics() throws IOException
{
AFMParser parser = new AFMParser(
new FileInputStream("src/test/resources/afm/NoEndFontMetrics.afm"));
try
try(InputStream is = new FileInputStream("src/test/resources/afm/NoEndFontMetrics.afm"))
{
parser.parse();
fail("The AFMParser should have thrown an IOException because of a missing "
+ AFMParser.END_FONT_METRICS);
}
catch (IOException e)
{
assertTrue(e.getMessage().contains("Unknown AFM key"));
AFMParser parser = new AFMParser(is);
try
{
parser.parse();
fail("The AFMParser should have thrown an IOException because of a missing "
+ AFMParser.END_FONT_METRICS);
}
catch (IOException e)
{
assertTrue(e.getMessage().contains("Unknown AFM key"));
}
}
}

@Test
void testMalformedFloat() throws IOException
{
AFMParser parser = new AFMParser(
new FileInputStream("src/test/resources/afm/MalformedFloat.afm"));
try
try(InputStream is = new FileInputStream("src/test/resources/afm/MalformedFloat.afm"))
{
parser.parse();
fail("The AFMParser should have thrown an IOException because of a malformed float value");
}
catch (IOException e)
{
assertTrue(e.getCause() instanceof NumberFormatException);
assertTrue(e.getMessage().contains("4,1ab"));
AFMParser parser = new AFMParser(is);
try
{
parser.parse();
fail("The AFMParser should have thrown an IOException because of a malformed float value");
}
catch (IOException e)
{
assertTrue(e.getCause() instanceof NumberFormatException);
assertTrue(e.getMessage().contains("4,1ab"));
}
}
}

@Test
void testMalformedInteger() throws IOException
{
AFMParser parser = new AFMParser(
new FileInputStream("src/test/resources/afm/MalformedInteger.afm"));
try
{
parser.parse();
fail("The AFMParser should have thrown an IOException because of a malformed int value");
}
catch (IOException e)
try(InputStream is = new FileInputStream("src/test/resources/afm/MalformedInteger.afm"))
{
assertTrue(e.getCause() instanceof NumberFormatException);
assertTrue(e.getMessage().contains("3.4"));
try
{
AFMParser parser = new AFMParser(is);
parser.parse();
fail("The AFMParser should have thrown an IOException because of a malformed int value");
}
catch (IOException e)
{
assertTrue(e.getCause() instanceof NumberFormatException);
assertTrue(e.getMessage().contains("3.4"));
}
}
}

@Test
void testHelveticaFontMetrics() throws IOException
{
AFMParser parser = new AFMParser(
new FileInputStream("src/test/resources/afm/Helvetica.afm"));
checkHelveticaFontMetrics(parser.parse());
try(InputStream is = new FileInputStream("src/test/resources/afm/Helvetica.afm"))
{
AFMParser parser = new AFMParser(is);
checkHelveticaFontMetrics(parser.parse());
}
}

@Test
void testHelveticaCharMetrics() throws IOException
{
AFMParser parser = new AFMParser(
new FileInputStream("src/test/resources/afm/Helvetica.afm"));
FontMetrics fontMetrics = parser.parse();
try(InputStream is = new FileInputStream("src/test/resources/afm/Helvetica.afm"))
{
AFMParser parser = new AFMParser(is);
FontMetrics fontMetrics = parser.parse();

// char metrics
checkHelveticaCharMetrics(fontMetrics.getCharMetrics());
// char metrics
checkHelveticaCharMetrics(fontMetrics.getCharMetrics());
}
}

@Test
void testHelveticaKernPairs() throws IOException
{
AFMParser parser = new AFMParser(
new FileInputStream("src/test/resources/afm/Helvetica.afm"));
FontMetrics fontMetrics = parser.parse();
try(InputStream is = new FileInputStream("src/test/resources/afm/Helvetica.afm"))
{
AFMParser parser = new AFMParser(is);
FontMetrics fontMetrics = parser.parse();

// KernPairs
List<KernPair> kernPairs = fontMetrics.getKernPairs();
assertEquals(2705, kernPairs.size());
// check "KPX A Ucircumflex -50"
checkKernPair(kernPairs, "A", "Ucircumflex", -50, 0);
// check "KPX W agrave -40"
checkKernPair(kernPairs, "W", "agrave", -40, 0);
// KernPairs0
assertTrue(fontMetrics.getKernPairs0().isEmpty());
// KernPairs1
assertTrue(fontMetrics.getKernPairs1().isEmpty());
// composite data
assertTrue(fontMetrics.getComposites().isEmpty());
// KernPairs
List<KernPair> kernPairs = fontMetrics.getKernPairs();
assertEquals(2705, kernPairs.size());
// check "KPX A Ucircumflex -50"
checkKernPair(kernPairs, "A", "Ucircumflex", -50, 0);
// check "KPX W agrave -40"
checkKernPair(kernPairs, "W", "agrave", -40, 0);
// KernPairs0
assertTrue(fontMetrics.getKernPairs0().isEmpty());
// KernPairs1
assertTrue(fontMetrics.getKernPairs1().isEmpty());
// composite data
assertTrue(fontMetrics.getComposites().isEmpty());
}
}

@Test
void testHelveticaFontMetricsReducedDataset() throws IOException
{
AFMParser parser = new AFMParser(
new FileInputStream("src/test/resources/afm/Helvetica.afm"));
checkHelveticaFontMetrics(parser.parse(true));
try(InputStream is = new FileInputStream("src/test/resources/afm/Helvetica.afm"))
{
AFMParser parser = new AFMParser(is);
checkHelveticaFontMetrics(parser.parse(true));
}
}

@Test
void testHelveticaCharMetricsReducedDataset() throws IOException
{
AFMParser parser = new AFMParser(
new FileInputStream("src/test/resources/afm/Helvetica.afm"));
FontMetrics fontMetrics = parser.parse(true);
try(InputStream is = new FileInputStream("src/test/resources/afm/Helvetica.afm"))
{
AFMParser parser = new AFMParser(is);
FontMetrics fontMetrics = parser.parse(true);

// char metrics
checkHelveticaCharMetrics(fontMetrics.getCharMetrics());
// char metrics
checkHelveticaCharMetrics(fontMetrics.getCharMetrics());
}
}

@Test
void testHelveticaKernPairsReducedDataset() throws IOException
{
AFMParser parser = new AFMParser(
new FileInputStream("src/test/resources/afm/Helvetica.afm"));
FontMetrics fontMetrics = parser.parse(true);
try(InputStream is = new FileInputStream("src/test/resources/afm/Helvetica.afm"))
{
AFMParser parser = new AFMParser(is);//
FontMetrics fontMetrics = parser.parse(true);

// KernPairs, empty due to reducedDataset == true
assertTrue(fontMetrics.getKernPairs().isEmpty());
// KernPairs0
assertTrue(fontMetrics.getKernPairs0().isEmpty());
// KernPairs1
assertTrue(fontMetrics.getKernPairs1().isEmpty());
// composite data
assertTrue(fontMetrics.getComposites().isEmpty());
// KernPairs, empty due to reducedDataset == true
assertTrue(fontMetrics.getKernPairs().isEmpty());
// KernPairs0
assertTrue(fontMetrics.getKernPairs0().isEmpty());
// KernPairs1
assertTrue(fontMetrics.getKernPairs1().isEmpty());
// composite data
assertTrue(fontMetrics.getComposites().isEmpty());
}
}

private void checkHelveticaCharMetrics(List<CharMetric> charMetrics)
Expand Down