123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 |
- /*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
- /* $Id$ */
-
- package org.apache.fop.pdf;
-
- import static org.junit.Assert.assertEquals;
-
- import java.io.ByteArrayOutputStream;
- import java.io.IOException;
- import java.util.Arrays;
- import java.util.List;
-
- import org.junit.Before;
- import org.junit.Test;
-
- public class ObjectStreamTestCase {
-
- private static final String OBJECT_CONTENT = "<<\n /Foo True\n /Bar False\n>>\n";
-
- private PDFDocument pdfDocument;
-
- private ObjectStream objectStream;
-
- private List<MockCompressedObject> compressedObjects;
-
- @Before
- public void setUp() throws Exception {
- pdfDocument = new PDFDocument("PDFObjectStreamTestCase");
- objectStream = new ObjectStream();
- pdfDocument.assignObjectNumber(objectStream);
- compressedObjects = Arrays.asList(new MockCompressedObject(), new MockCompressedObject());
- }
-
- @Test
- public void testSingleObjectStream() throws IOException {
- populateObjectStream();
- testOutput();
- }
-
- @Test
- public void testObjectStreamCollection() throws IOException {
- objectStream = new ObjectStream(objectStream);
- pdfDocument.assignObjectNumber(objectStream);
- populateObjectStream();
- testOutput();
- }
-
- @Test(expected = IllegalStateException.class)
- public void directObjectsAreNotAllowed() throws Exception {
- objectStream.addObject(new MockCompressedObject());
- }
-
- @Test(expected = NullPointerException.class)
- public void nullObjectsAreNotAllowed() throws Exception {
- objectStream.addObject(null);
- }
-
- private void testOutput() throws IOException {
- String expected = getExpectedOutput();
- String actual = getActualOutput();
- assertEquals(expected, actual);
- }
-
- private void populateObjectStream() {
- for (MockCompressedObject obj : compressedObjects) {
- pdfDocument.assignObjectNumber(obj);
- objectStream.addObject(obj);
- }
- }
-
- private String getExpectedOutput() {
- int numObs = compressedObjects.size();
- int objectStreamNumber = objectStream.getObjectNumber();
- int offsetsLength = 9;
- StringBuilder expected = new StringBuilder();
- expected.append("<<\n");
- ObjectStream previous = (ObjectStream) objectStream.get("Extends");
- if (previous != null) {
- expected.append(" /Extends ").append(previous.getObjectNumber()).append(" 0 R\n");
- }
- expected.append(" /Type /ObjStm\n")
- .append(" /N ").append(numObs).append("\n")
- .append(" /First ").append(offsetsLength).append('\n')
- .append(" /Length ").append(OBJECT_CONTENT.length() * 2 + offsetsLength + 1).append('\n')
- .append(">>\n")
- .append("stream\n");
- int offset = 0;
- int num = 1;
- for (PDFObject ob : compressedObjects) {
- expected.append(objectStreamNumber + num++).append(' ').append(offset).append('\n');
- offset += ob.toPDFString().length();
- }
- for (PDFObject ob : compressedObjects) {
- expected.append(ob.toPDFString());
- }
- expected.append("\nendstream");
- return expected.toString();
- }
-
- private String getActualOutput() throws IOException {
- ByteArrayOutputStream actual = new ByteArrayOutputStream();
- objectStream.getFilterList().setDisableAllFilters(true);
- objectStream.output(actual);
- return actual.toString("US-ASCII");
- }
-
- private static class MockCompressedObject extends PDFObject implements CompressedObject {
-
- @Override
- protected String toPDFString() {
- return OBJECT_CONTENT;
- }
- }
-
- }
|