/* * 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 java.io.IOException; import java.util.ArrayList; import java.util.List; import org.junit.Before; import org.junit.Test; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; /** * Test case for {@link PDFArray}. */ public class PDFArrayTestCase extends PDFObjectTestCase { private PDFArray intArray; private String intArrayOutput; private PDFArray doubleArray; private String doubleArrayOutput; private PDFArray collectionArray; private String collectionArrayOutput; private PDFArray objArray; private String objArrayOutput; /** A PDF object used solely for testing */ private PDFNumber num; @Before public void setUp() { intArray = new PDFArray(parent, new int[] {1, 2, 3, 4, 5}); intArrayOutput = "[1 2 3 4 5]"; doubleArray = new PDFArray(parent, new double[] {1.1, 2.2, 3.3, 4.4, 5.5}); doubleArrayOutput = "[1.1 2.2 3.3 4.4 5.5]"; List<Object> strList = new ArrayList<Object>(); strList.add("one"); strList.add("two"); strList.add("three"); collectionArray = new PDFArray(parent, strList); collectionArrayOutput = "[(one) (two) (three)]"; // Set arbitrary values here num = new PDFNumber(); num.setNumber(20); num.setObjectNumber(4); objArray = new PDFArray(parent, new Object[] {"one", 2, 3.0f, num}); objArrayOutput = "[(one) 2 3 4 0 R]"; // set the document intArray.setDocument(doc); doubleArray.setDocument(doc); collectionArray.setDocument(doc); objArray.setDocument(doc); // Test the progenitor in the inheritance stack objArray.setParent(parent); pdfObjectUnderTest = objArray; } private void intArrayContainsTests() { for (int i = 1; i <= 5; i++) { assertTrue(intArray.contains(i)); } assertFalse(intArray.contains(6)); assertFalse(intArray.contains(0)); } private void doubleArrayContainsTests() { assertTrue(doubleArray.contains(1.1)); assertTrue(doubleArray.contains(2.2)); assertTrue(doubleArray.contains(3.3)); assertTrue(doubleArray.contains(4.4)); assertTrue(doubleArray.contains(5.5)); assertFalse(doubleArray.contains(10.0)); assertFalse(doubleArray.contains(0.0)); } private void collectionArrayContainsTests() { assertTrue(collectionArray.contains("one")); assertTrue(collectionArray.contains("two")); assertTrue(collectionArray.contains("three")); assertFalse(collectionArray.contains("zero")); assertFalse(collectionArray.contains("four")); } private void objectArrayContainsTests() { assertTrue(objArray.contains("one")); assertTrue(objArray.contains(2)); assertTrue(objArray.contains(3.0f)); assertTrue(objArray.contains(num)); assertFalse(objArray.contains("four")); assertFalse(objArray.contains(0.0)); } /** * Test contains() - test whether this PDFArray contains an object. */ @Test public void testContains() { // Test some arbitrary values intArrayContainsTests(); doubleArrayContainsTests(); collectionArrayContainsTests(); objectArrayContainsTests(); } /** * Test length() - tests the length of an array. */ @Test public void testLength() { assertEquals(5, intArray.length()); assertEquals(5, doubleArray.length()); assertEquals(3, collectionArray.length()); assertEquals(4, objArray.length()); // Test the count is incremented when an object is added (this only // needs to be tested once) intArray.add(6); assertEquals(6, intArray.length()); } /** * Test set() - tests that a particular point has been properly set. */ @Test public void testSet() { PDFName name = new PDFName("zero test"); objArray.set(0, name); assertEquals(name, objArray.get(0)); objArray.set(1, "test"); assertEquals("test", objArray.get(1)); // This goes through the set(int, double) code path rather than set(int, Object) objArray.set(2, 5); assertEquals(5.0, objArray.get(2)); try { objArray.set(4, 2); fail("out of bounds"); } catch (IndexOutOfBoundsException e) { // Pass } } /** * Test get() - gets the object stored at a given index. */ @Test public void testGet() { // Test some arbitrary values for (int i = 1; i <= 5; i++) { assertEquals(i, intArray.get(i - 1)); } assertEquals(1.1, doubleArray.get(0)); assertEquals(2.2, doubleArray.get(1)); assertEquals(3.3, doubleArray.get(2)); assertEquals(4.4, doubleArray.get(3)); assertEquals(5.5, doubleArray.get(4)); assertEquals("one", collectionArray.get(0)); assertEquals("two", collectionArray.get(1)); assertEquals("three", collectionArray.get(2)); assertEquals("one", objArray.get(0)); assertEquals(2, objArray.get(1)); assertEquals(0, Double.compare(3.0, (Float) objArray.get(2))); assertEquals(num, objArray.get(3)); } /** * Tests add() - tests that objects are appended to the end of the array as expected. */ @Test public void testAdd() { intArray.add(Integer.valueOf(6)); doubleArray.add(6.6); // Test some arbitrary values for (int i = 1; i <= 6; i++) { assertEquals(i, intArray.get(i - 1)); } assertEquals(1.1, doubleArray.get(0)); assertEquals(2.2, doubleArray.get(1)); assertEquals(3.3, doubleArray.get(2)); assertEquals(4.4, doubleArray.get(3)); assertEquals(5.5, doubleArray.get(4)); assertEquals(6.6, doubleArray.get(5)); collectionArray.add(1); assertEquals("one", collectionArray.get(0)); assertEquals("two", collectionArray.get(1)); assertEquals("three", collectionArray.get(2)); assertEquals(1.0, collectionArray.get(3)); objArray.add("four"); assertEquals("one", objArray.get(0)); assertEquals(2, objArray.get(1)); assertEquals(0, Double.compare(3.0, (Float) objArray.get(2))); assertEquals("four", objArray.get(4)); } /** * Tests output() - tests that this object is properly streamed to the PDF document. * @throws IOException error caused by I/O */ @Test public void testOutput() throws IOException { testOutputStreams(intArrayOutput, intArray); testOutputStreams(doubleArrayOutput, doubleArray); testOutputStreams(collectionArrayOutput, collectionArray); testOutputStreams(objArrayOutput, objArray); } }