"Fossies" - the Fresh Open Source Software Archive  

Source code changes of the file "pdfbox/src/test/java/org/apache/pdfbox/pdmodel/font/TestFontEmbedding.java" between
pdfbox-2.0.23-src.zip and pdfbox-2.0.24-src.zip

About: Apache PDFBox is a Java PDF library tool that allows creation of new PDF documents, manipulation of existing documents and the ability to extract content from documents.

TestFontEmbedding.java  (pdfbox-2.0.23-src):TestFontEmbedding.java  (pdfbox-2.0.24-src)
skipping to change at line 25 skipping to change at line 25
* limitations under the License. * limitations under the License.
*/ */
package org.apache.pdfbox.pdmodel.font; package org.apache.pdfbox.pdmodel.font;
import java.io.ByteArrayOutputStream; import java.io.ByteArrayOutputStream;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.util.HashSet; import java.util.HashSet;
import java.util.Map;
import java.util.Set; import java.util.Set;
import junit.framework.TestCase; import junit.framework.TestCase;
import org.apache.fontbox.ttf.OS2WindowsMetricsTable;
import org.apache.fontbox.ttf.TTFParser;
import org.apache.fontbox.ttf.TrueTypeFont;
import org.apache.pdfbox.cos.COSArray; import org.apache.pdfbox.cos.COSArray;
import org.apache.pdfbox.cos.COSDictionary; import org.apache.pdfbox.cos.COSDictionary;
import org.apache.pdfbox.cos.COSName; import org.apache.pdfbox.cos.COSName;
import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage; import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.common.PDRectangle; import org.apache.pdfbox.pdmodel.common.PDRectangle;
import org.apache.pdfbox.pdmodel.PDPageContentStream; import org.apache.pdfbox.pdmodel.PDPageContentStream;
import org.apache.pdfbox.pdmodel.PDPageContentStream.AppendMode; import org.apache.pdfbox.pdmodel.PDPageContentStream.AppendMode;
import org.apache.pdfbox.text.PDFTextStripper; import org.apache.pdfbox.text.PDFTextStripper;
import static org.mockito.BDDMockito.given;
import org.mockito.Mockito;
/** /**
* Tests font embedding. * Tests font embedding.
* *
* @author John Hewson * @author John Hewson
* @author Tilman Hausherr * @author Tilman Hausherr
*/ */
public class TestFontEmbedding extends TestCase public class TestFontEmbedding extends TestCase
{ {
private static final File OUT_DIR = new File("target/test-output"); private static final File OUT_DIR = new File("target/test-output");
skipping to change at line 254 skipping to change at line 263
// check that the extracted text matches what we wrote // check that the extracted text matches what we wrote
String extracted = getUnicodeText(file); String extracted = getUnicodeText(file);
assertEquals(text, extracted.trim()); assertEquals(text, extracted.trim());
} }
private String getUnicodeText(File file) throws IOException private String getUnicodeText(File file) throws IOException
{ {
PDDocument document = PDDocument.load(file); PDDocument document = PDDocument.load(file);
PDFTextStripper stripper = new PDFTextStripper(); PDFTextStripper stripper = new PDFTextStripper();
return stripper.getText(document); String text = stripper.getText(document);
document.close();
return text;
} }
/** /**
* Test that an embedded and subsetted font can be reused. * Test that an embedded and subsetted font can be reused.
* *
* @throws IOException * @throws IOException
*/ */
public void testReuseEmbeddedSubsettedFont() throws IOException public void testReuseEmbeddedSubsettedFont() throws IOException
{ {
String text1 = "The quick brown fox"; String text1 = "The quick brown fox";
skipping to change at line 303 skipping to change at line 314
baos.reset(); baos.reset();
document.save(baos); document.save(baos);
document.close(); document.close();
// Test that both texts are there // Test that both texts are there
document = PDDocument.load(baos.toByteArray()); document = PDDocument.load(baos.toByteArray());
PDFTextStripper stripper = new PDFTextStripper(); PDFTextStripper stripper = new PDFTextStripper();
String extractedText = stripper.getText(document); String extractedText = stripper.getText(document);
assertEquals(text1 + " " + text2, extractedText.trim()); assertEquals(text1 + " " + text2, extractedText.trim());
document.close(); document.close();
} }
private class TrueTypeEmbedderTester extends TrueTypeEmbedder
{
/**
* Common functionality for testing the TrueTypeFontEmbedder
*
*/
TrueTypeEmbedderTester(PDDocument document, COSDictionary dict, TrueType
Font ttf, boolean embedSubset)
throws IOException
{
super(document, dict, ttf, embedSubset);
}
@Override
protected void buildSubset(InputStream ttfSubset, String tag, Map<Intege
r, Integer> gidToCid)
throws IOException
{
// no-op. Need to define method to extend abstract class, but
// this method is not currently needed for testing
}
}
/**
* Test that we validate embedding permissions properly for all legal permis
sions combinations
*
* @throws IOException
*/
public void testIsEmbeddingPermittedMultipleVersions() throws IOException
{
// SETUP
PDDocument doc = new PDDocument();
COSDictionary cosDictionary = new COSDictionary();
InputStream input = PDFont.class.getResourceAsStream("/org/apache/pdfbox
/resources/ttf/LiberationSans-Regular.ttf");
TrueTypeFont ttf = new TTFParser().parseEmbedded(input);
TrueTypeEmbedderTester tester = new TrueTypeEmbedderTester(doc, cosDicti
onary, ttf, true);
TrueTypeFont mockTtf = Mockito.mock(TrueTypeFont.class);
OS2WindowsMetricsTable mockOS2 = Mockito.mock(OS2WindowsMetricsTable.cla
ss);
given(mockTtf.getOS2Windows()).willReturn(mockOS2);
Boolean embeddingIsPermitted;
// TEST 1: 0000 -- Installable embedding versions 0-3+
given(mockTtf.getOS2Windows().getFsType()).willReturn((short) 0x0000);
embeddingIsPermitted = tester.isEmbeddingPermitted(mockTtf);
// VERIFY
assertTrue(embeddingIsPermitted);
// no test for 0001, since bit 0 is permanently reserved, and its use is
deprecated
// TEST 2: 0010 -- Restricted License embedding versions 0-3+
given(mockTtf.getOS2Windows().getFsType()).willReturn((short) 0x0002);
embeddingIsPermitted = tester.isEmbeddingPermitted(mockTtf);
// VERIFY
assertFalse(embeddingIsPermitted);
// no test for 0011
// TEST 3: 0100 -- Preview & Print embedding versions 0-3+
given(mockTtf.getOS2Windows().getFsType()).willReturn((short) 0x0004);
embeddingIsPermitted = tester.isEmbeddingPermitted(mockTtf);
// VERIFY
assertTrue(embeddingIsPermitted);
// no test for 0101
// TEST 4: 0110 -- Restricted License embedding AND Preview & Print embe
dding versions 0-2
// -- illegal permissions combination for versions 3+
given(mockTtf.getOS2Windows().getFsType()).willReturn((short) 0x0006);
embeddingIsPermitted = tester.isEmbeddingPermitted(mockTtf);
// VERIFY
assertTrue(embeddingIsPermitted);
// no test for 0111
// TEST 5: 1000 -- Editable embedding versions 0-3+
given(mockTtf.getOS2Windows().getFsType()).willReturn((short) 0x0008);
embeddingIsPermitted = tester.isEmbeddingPermitted(mockTtf);
// VERIFY
assertTrue(embeddingIsPermitted);
// no test for 1001
// TEST 6: 1010 -- Restricted License embedding AND Editable embedding v
ersions 0-2
// -- illegal permissions combination for versions 3+
given(mockTtf.getOS2Windows().getFsType()).willReturn((short) 0x000A);
embeddingIsPermitted = tester.isEmbeddingPermitted(mockTtf);
// VERIFY
assertTrue(embeddingIsPermitted);
// no test for 1011
// TEST 7: 1100 -- Editable embedding AND Preview & Print embedding vers
ions 0-2
// -- illegal permissions combination for versions 3+
given(mockTtf.getOS2Windows().getFsType()).willReturn((short) 0x000C);
embeddingIsPermitted = tester.isEmbeddingPermitted(mockTtf);
// VERIFY
assertTrue(embeddingIsPermitted);
// no test for 1101
// TEST 8: 1110 Editable embedding AND Preview & Print embedding AND Res
tricted License embedding versions 0-2
// -- illegal permissions combination for versions 3+
given(mockTtf.getOS2Windows().getFsType()).willReturn((short) 0x000E);
embeddingIsPermitted = tester.isEmbeddingPermitted(mockTtf);
// VERIFY
assertTrue(embeddingIsPermitted);
// no test for 1111
}
} }
 End of changes. 6 change blocks. 
1 lines changed or deleted 133 lines changed or added

Home  |  About  |  Features  |  All  |  Newest  |  Dox  |  Diffs  |  RSS Feeds  |  Screenshots  |  Comments  |  Imprint  |  Privacy  |  HTTP(S)