| /* |
| * 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 org.junit.Before; |
| import org.junit.Test; |
| |
| import static org.junit.Assert.assertEquals; |
| import static org.junit.Assert.fail; |
| |
| /** |
| * This test tests PDFNumber's doubleOut() methods. |
| */ |
| public class PDFNumberTestCase extends PDFObjectTestCase { |
| /** |
| * Sets up the local variables, most of these are inherited from PDFObjectTestCase |
| */ |
| @Before |
| public void setUp() { |
| pdfObjectUnderTest = new PDFNumber(); |
| pdfObjectUnderTest.setParent(parent); |
| pdfObjectUnderTest.setDocument(doc); |
| } |
| |
| /** |
| * Tests PDFNumber.doubleOut(). |
| * @throws Exception if the test fails |
| */ |
| @Test |
| public void testDoubleOut1() throws Exception { |
| //Default is 6 decimal digits |
| assertEquals("0", PDFNumber.doubleOut(0.0f)); |
| assertEquals("0", PDFNumber.doubleOut(0.0000000000000000000123f)); |
| assertEquals("0.1", PDFNumber.doubleOut(0.1f)); |
| assertEquals("100", PDFNumber.doubleOut(100.0f)); |
| assertEquals("100", PDFNumber.doubleOut(99.99999999999999999999999f)); |
| |
| //You'd expect 100.123456 here but DecimalFormat uses the BigDecimal.ROUND_HALF_EVEN |
| //strategy. I don't know if that's a problem. The strange thing testDoubleOut2 |
| //seems to return the normally expected value. Weird. |
| assertEquals("100.123459", PDFNumber.doubleOut(100.12345611111111f)); |
| assertEquals("-100.123459", PDFNumber.doubleOut(-100.12345611111111f)); |
| } |
| |
| /** |
| * Tests PDFNumber.doubleOut(). |
| * @throws Exception if the test fails |
| */ |
| public void testDoubleOut2() throws Exception { |
| //4 decimal digits in this case |
| assertEquals("0", PDFNumber.doubleOut(0.0f, 4)); |
| assertEquals("0", PDFNumber.doubleOut(0.0000000000000000000123f, 4)); |
| assertEquals("0.1", PDFNumber.doubleOut(0.1f, 4)); |
| assertEquals("100", PDFNumber.doubleOut(100.0f, 4)); |
| assertEquals("100", PDFNumber.doubleOut(99.99999999999999999999999f, 4)); |
| assertEquals("100.1234", PDFNumber.doubleOut(100.12341111111111f, 4)); |
| assertEquals("-100.1234", PDFNumber.doubleOut(-100.12341111111111f, 4)); |
| } |
| |
| /** |
| * Tests PDFNumber.doubleOut(). |
| * @throws Exception if the test fails |
| */ |
| public void testDoubleOut3() throws Exception { |
| //0 decimal digits in this case |
| assertEquals("0", PDFNumber.doubleOut(0.0f, 0)); |
| assertEquals("0", PDFNumber.doubleOut(0.1f, 0)); |
| assertEquals("1", PDFNumber.doubleOut(0.6f, 0)); |
| assertEquals("100", PDFNumber.doubleOut(100.1234f, 0)); |
| assertEquals("-100", PDFNumber.doubleOut(-100.1234f, 0)); |
| } |
| |
| /** |
| * Tests PDFNumber.doubleOut(). Special cases (former bugs). |
| * @throws Exception if the test fails |
| */ |
| public void testDoubleOut4() throws Exception { |
| double d = Double.parseDouble("5.7220458984375E-6"); |
| assertEquals("0.000006", PDFNumber.doubleOut(d)); |
| assertEquals("0", PDFNumber.doubleOut(d, 4)); |
| assertEquals("0.00000572", PDFNumber.doubleOut(d, 8)); |
| } |
| |
| /** |
| * Tests PDFNumber.doubleOut(). Tests for wrong parameters. |
| * @throws Exception if the test fails |
| */ |
| public void testDoubleOutWrongParameters() throws Exception { |
| try { |
| PDFNumber.doubleOut(0.1f, -1); |
| fail("IllegalArgument expected!"); |
| } catch (IllegalArgumentException iae) { |
| //we want that |
| } |
| try { |
| PDFNumber.doubleOut(0.1f, 17); //We support max 16 decimal digits |
| fail("IllegalArgument expected!"); |
| } catch (IllegalArgumentException iae) { |
| //we want that |
| } |
| try { |
| PDFNumber.doubleOut(0.1f, 98274659); |
| fail("IllegalArgument expected!"); |
| } catch (IllegalArgumentException iae) { |
| //we want that |
| } |
| try { |
| PDFNumber.doubleOut(null); |
| fail("NullPointer expected!"); |
| } catch (NullPointerException e) { |
| // PASS |
| } |
| } |
| |
| /** |
| * Tests both getNumber() and setNumber() - basic getter/setter methods... Why there isn't a |
| * constructor is beyond me... |
| */ |
| public void testGetSetNumber() { |
| PDFNumber pdfNum = new PDFNumber(); |
| // Check with a floating point number |
| pdfNum.setNumber(1.111f); |
| assertEquals(1.111f, pdfNum.getNumber()); |
| // try with an int |
| pdfNum.setNumber(2); |
| assertEquals(2, pdfNum.getNumber()); |
| // See what happens with a null... make sure it doesn't explode |
| pdfNum.setNumber(null); |
| assertEquals(null, pdfNum.getNumber()); |
| } |
| |
| /** |
| * Tests toPDFString() - this serializes PDFNumber to PDF format. |
| * @throws IOException error caused by I/O |
| */ |
| public void testToPDFString() throws IOException { |
| PDFNumber testSubject = new PDFNumber(); |
| testSubject.setNumber(1.0001); |
| testOutputStreams("1.0001", testSubject); |
| testSubject.setNumber(999); |
| testOutputStreams("999", testSubject); |
| } |
| } |