You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by je...@apache.org on 2011/10/18 17:23:57 UTC
svn commit: r1185719 [2/2] - in /pdfbox/trunk/pdfbox/src:
main/java/org/apache/pdfbox/pdmodel/common/function/
main/java/org/apache/pdfbox/pdmodel/common/function/type4/
main/java/org/apache/pdfbox/pdmodel/graphics/color/
test/java/org/apache/pdfbox/ t...
Added: pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/common/function/package.html
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/common/function/package.html?rev=1185719&view=auto
==============================================================================
--- pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/common/function/package.html (added)
+++ pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/common/function/package.html Tue Oct 18 15:23:56 2011
@@ -0,0 +1,25 @@
+<!--
+ ! 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.
+ !-->
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+<head>
+
+</head>
+<body>
+This holds classes that will be used to test PDF functions.
+</body>
+</html>
Propchange: pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/common/function/package.html
------------------------------------------------------------------------------
svn:eol-style = native
Added: pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/common/function/type4/TestOperators.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/common/function/type4/TestOperators.java?rev=1185719&view=auto
==============================================================================
--- pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/common/function/type4/TestOperators.java (added)
+++ pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/common/function/type4/TestOperators.java Tue Oct 18 15:23:56 2011
@@ -0,0 +1,538 @@
+/*
+ * 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.
+ */
+package org.apache.pdfbox.pdmodel.common.function.type4;
+
+import org.junit.Assert;
+
+import junit.framework.TestCase;
+
+/**
+ * Tests all implemented PostScript operators.
+ *
+ * @version $Revision$
+ */
+public class TestOperators extends TestCase
+{
+
+ /**
+ * Tests the "add" operator.
+ * @throws Exception if an error occurs
+ */
+ public void testAdd() throws Exception
+ {
+ Type4Tester.create("5 6 add").pop(11).isEmpty();
+
+ Type4Tester.create("5 0.23 add").pop(5.23f).isEmpty();
+
+ int bigValue = Integer.MAX_VALUE - 2;
+ ExecutionContext context = Type4Tester.create(
+ bigValue + " " + bigValue + " add").toExecutionContext();
+ float floatResult = (Float)context.getStack().pop();
+ assertEquals(2 * (long)Integer.MAX_VALUE - 4, floatResult, 1);
+ assertTrue(context.getStack().isEmpty());
+ }
+
+ /**
+ * Tests the "abs" operator.
+ * @throws Exception if an error occurs
+ */
+ public void testAbs() throws Exception
+ {
+ Type4Tester.create("-3 abs 2.1 abs -2.1 abs -7.5 abs")
+ .pop(7.5f).pop(2.1f).pop(2.1f).pop(3).isEmpty();
+ }
+
+ /**
+ * Tests the "and" operator.
+ * @throws Exception if an error occurs
+ */
+ public void testAnd() throws Exception
+ {
+ Type4Tester.create("true true and true false and")
+ .pop(false).pop(true).isEmpty();
+
+ Type4Tester.create("99 1 and 52 7 and")
+ .pop(4).pop(1).isEmpty();
+ }
+
+ /**
+ * Tests the "atan" operator.
+ * @throws Exception if an error occurs
+ */
+ public void testAtan() throws Exception
+ {
+ Type4Tester.create("0 1 atan").pop(0f).isEmpty();
+ Type4Tester.create("1 0 atan").pop(90f).isEmpty();
+ Type4Tester.create("-100 0 atan").pop(270f).isEmpty();
+ Type4Tester.create("4 4 atan").pop(45f).isEmpty();
+ }
+
+ /**
+ * Tests the "ceiling" operator.
+ * @throws Exception if an error occurs
+ */
+ public void testCeiling() throws Exception
+ {
+ Type4Tester.create("3.2 ceiling -4.8 ceiling 99 ceiling")
+ .pop(99).pop(-4f).pop(4f).isEmpty();
+ }
+
+ /**
+ * Tests the "cos" operator.
+ * @throws Exception if an error occurs
+ */
+ public void testCos() throws Exception
+ {
+ Type4Tester.create("0 cos").popReal(1f).isEmpty();
+ Type4Tester.create("90 cos").popReal(0f).isEmpty();
+ }
+
+ /**
+ * Tests the "cvi" operator.
+ * @throws Exception if an error occurs
+ */
+ public void testCvi() throws Exception
+ {
+ Type4Tester.create("-47.8 cvi").pop(-47).isEmpty();
+ Type4Tester.create("520.9 cvi").pop(520).isEmpty();
+ }
+
+ /**
+ * Tests the "cvr" operator.
+ * @throws Exception if an error occurs
+ */
+ public void testCvr() throws Exception
+ {
+ Type4Tester.create("-47.8 cvr").popReal(-47.8f).isEmpty();
+ Type4Tester.create("520.9 cvr").popReal(520.9f).isEmpty();
+ Type4Tester.create("77 cvr").popReal(77f).isEmpty();
+
+ //Check that the data types are really right
+ ExecutionContext context = Type4Tester.create("77 77 cvr").toExecutionContext();
+ Assert.assertTrue("Expected a real as the result of 'cvr'",
+ context.getStack().pop() instanceof Float);
+ Assert.assertTrue("Expected an int from an integer literal",
+ context.getStack().pop() instanceof Integer);
+ }
+
+ /**
+ * Tests the "div" operator.
+ * @throws Exception if an error occurs
+ */
+ public void testDiv() throws Exception
+ {
+ Type4Tester.create("3 2 div").popReal(1.5f).isEmpty();
+ Type4Tester.create("4 2 div").popReal(2.0f).isEmpty();
+ }
+
+ /**
+ * Tests the "exp" operator.
+ * @throws Exception if an error occurs
+ */
+ public void testExp() throws Exception
+ {
+ Type4Tester.create("9 0.5 exp").popReal(3.0f).isEmpty();
+ Type4Tester.create("-9 -1 exp").popReal(-0.111111f, 0.000001).isEmpty();
+ }
+
+ /**
+ * Tests the "floor" operator.
+ * @throws Exception if an error occurs
+ */
+ public void testFloor() throws Exception
+ {
+ Type4Tester.create("3.2 floor -4.8 floor 99 floor")
+ .pop(99).pop(-5f).pop(3f).isEmpty();
+ }
+
+ /**
+ * Tests the "div" operator.
+ * @throws Exception if an error occurs
+ */
+ public void testIDiv() throws Exception
+ {
+ Type4Tester.create("3 2 idiv").pop(1).isEmpty();
+ Type4Tester.create("4 2 idiv").pop(2).isEmpty();
+ Type4Tester.create("-5 2 idiv").pop(-2).isEmpty();
+ try
+ {
+ Type4Tester.create("4.4 2 idiv");
+ Assert.fail("Expected typecheck");
+ }
+ catch (ClassCastException cce)
+ {
+ //expected
+ }
+ }
+
+ /**
+ * Tests the "ln" operator.
+ * @throws Exception if an error occurs
+ */
+ public void testLn() throws Exception
+ {
+ Type4Tester.create("10 ln").popReal(2.30259f, 0.00001f).isEmpty();
+ Type4Tester.create("100 ln").popReal(4.60517f, 0.00001f).isEmpty();
+ }
+
+ /**
+ * Tests the "log" operator.
+ * @throws Exception if an error occurs
+ */
+ public void testLog() throws Exception
+ {
+ Type4Tester.create("10 log").popReal(1.0f).isEmpty();
+ Type4Tester.create("100 log").popReal(2.0f).isEmpty();
+ }
+
+ /**
+ * Tests the "mod" operator.
+ * @throws Exception if an error occurs
+ */
+ public void testMod() throws Exception
+ {
+ Type4Tester.create("5 3 mod").pop(2).isEmpty();
+ Type4Tester.create("5 2 mod").pop(1).isEmpty();
+ Type4Tester.create("-5 3 mod").pop(-2).isEmpty();
+ try
+ {
+ Type4Tester.create("4.4 2 mod");
+ Assert.fail("Expected typecheck");
+ }
+ catch (ClassCastException cce)
+ {
+ //expected
+ }
+ }
+
+ /**
+ * Tests the "mul" operator.
+ * @throws Exception if an error occurs
+ */
+ public void testMul() throws Exception
+ {
+ Type4Tester.create("1 2 mul").pop(2).isEmpty();
+ Type4Tester.create("1.5 2 mul").popReal(3.0f).isEmpty();
+ Type4Tester.create("1.5 2.1 mul").popReal(3.15f, 0.001).isEmpty();
+ Type4Tester.create((Integer.MAX_VALUE - 3) + " 2 mul") //integer overflow -> real
+ .popReal(2L * (Integer.MAX_VALUE - 3), 0.001).isEmpty();
+ }
+
+ /**
+ * Tests the "neg" operator.
+ * @throws Exception if an error occurs
+ */
+ public void testNeg() throws Exception
+ {
+ Type4Tester.create("4.5 neg").popReal(-4.5f).isEmpty();
+ Type4Tester.create("-3 neg").pop(3).isEmpty();
+
+ //Border cases
+ Type4Tester.create((Integer.MIN_VALUE + 1) + " neg")
+ .pop(Integer.MAX_VALUE).isEmpty();
+ Type4Tester.create(Integer.MIN_VALUE + " neg")
+ .popReal(-(float)Integer.MIN_VALUE).isEmpty();
+ }
+
+ /**
+ * Tests the "round" operator.
+ * @throws Exception if an error occurs
+ */
+ public void testRound() throws Exception
+ {
+ Type4Tester.create("3.2 round").popReal(3.0f).isEmpty();
+ Type4Tester.create("6.5 round").popReal(7.0f).isEmpty();
+ Type4Tester.create("-4.8 round").popReal(-5.0f).isEmpty();
+ Type4Tester.create("-6.5 round").popReal(-6.0f).isEmpty();
+ Type4Tester.create("99 round").pop(99).isEmpty();
+ }
+
+ /**
+ * Tests the "sin" operator.
+ * @throws Exception if an error occurs
+ */
+ public void testSin() throws Exception
+ {
+ Type4Tester.create("0 sin").popReal(0f).isEmpty();
+ Type4Tester.create("90 sin").popReal(1f).isEmpty();
+ Type4Tester.create("-90.0 sin").popReal(-1f).isEmpty();
+ }
+
+ /**
+ * Tests the "sqrt" operator.
+ * @throws Exception if an error occurs
+ */
+ public void testSqrt() throws Exception
+ {
+ Type4Tester.create("0 sqrt").popReal(0f).isEmpty();
+ Type4Tester.create("1 sqrt").popReal(1f).isEmpty();
+ Type4Tester.create("4 sqrt").popReal(2f).isEmpty();
+ Type4Tester.create("4.4 sqrt").popReal(2.097617f, 0.000001).isEmpty();
+ try
+ {
+ Type4Tester.create("-4.1 sqrt");
+ Assert.fail("Expected rangecheck");
+ }
+ catch (IllegalArgumentException iae)
+ {
+ //expected
+ }
+ }
+
+ /**
+ * Tests the "sub" operator.
+ * @throws Exception if an error occurs
+ */
+ public void testSub() throws Exception
+ {
+ Type4Tester.create("5 2 sub -7.5 1 sub").pop(-8.5f).pop(3).isEmpty();
+ }
+
+ /**
+ * Tests the "truncate" operator.
+ * @throws Exception if an error occurs
+ */
+ public void testTruncate() throws Exception
+ {
+ Type4Tester.create("3.2 truncate").popReal(3.0f).isEmpty();
+ Type4Tester.create("-4.8 truncate").popReal(-4.0f).isEmpty();
+ Type4Tester.create("99 truncate").pop(99).isEmpty();
+ }
+
+ /**
+ * Tests the "bitshift" operator.
+ * @throws Exception if an error occurs
+ */
+ public void testBitshift() throws Exception
+ {
+ Type4Tester.create("7 3 bitshift 142 -3 bitshift")
+ .pop(17).pop(56).isEmpty();
+ }
+
+ /**
+ * Tests the "eq" operator.
+ * @throws Exception if an error occurs
+ */
+ public void testEq() throws Exception
+ {
+ Type4Tester.create("7 7 eq 7 6 eq 7 -7 eq true true eq false true eq 7.7 7.7 eq")
+ .pop(true).pop(false).pop(true).pop(false).pop(false).pop(true).isEmpty();
+ }
+
+ /**
+ * Tests the "ge" operator.
+ * @throws Exception if an error occurs
+ */
+ public void testGe() throws Exception
+ {
+ Type4Tester.create("5 7 ge 7 5 ge 7 7 ge -1 2 ge")
+ .pop(false).pop(true).pop(true).pop(false).isEmpty();
+ }
+
+ /**
+ * Tests the "gt" operator.
+ * @throws Exception if an error occurs
+ */
+ public void testGt() throws Exception
+ {
+ Type4Tester.create("5 7 gt 7 5 gt 7 7 gt -1 2 gt")
+ .pop(false).pop(false).pop(true).pop(false).isEmpty();
+ }
+
+ /**
+ * Tests the "le" operator.
+ * @throws Exception if an error occurs
+ */
+ public void testLe() throws Exception
+ {
+ Type4Tester.create("5 7 le 7 5 le 7 7 le -1 2 le")
+ .pop(true).pop(true).pop(false).pop(true).isEmpty();
+ }
+
+ /**
+ * Tests the "lt" operator.
+ * @throws Exception if an error occurs
+ */
+ public void testLt() throws Exception
+ {
+ Type4Tester.create("5 7 lt 7 5 lt 7 7 lt -1 2 lt")
+ .pop(true).pop(false).pop(false).pop(true).isEmpty();
+ }
+
+ /**
+ * Tests the "ne" operator.
+ * @throws Exception if an error occurs
+ */
+ public void testNe() throws Exception
+ {
+ Type4Tester.create("7 7 ne 7 6 ne 7 -7 ne true true ne false true ne 7.7 7.7 ne")
+ .pop(false).pop(true).pop(false).pop(true).pop(true).pop(false).isEmpty();
+ }
+
+ /**
+ * Tests the "not" operator.
+ * @throws Exception if an error occurs
+ */
+ public void testNot() throws Exception
+ {
+ Type4Tester.create("true not false not")
+ .pop(true).pop(false).isEmpty();
+
+ Type4Tester.create("52 not -37 not")
+ .pop(37).pop(-52).isEmpty();
+ }
+
+ /**
+ * Tests the "or" operator.
+ * @throws Exception if an error occurs
+ */
+ public void testOr() throws Exception
+ {
+ Type4Tester.create("true true or true false or false false or")
+ .pop(false).pop(true).pop(true).isEmpty();
+
+ Type4Tester.create("17 5 or 1 1 or")
+ .pop(1).pop(21).isEmpty();
+ }
+
+ /**
+ * Tests the "cor" operator.
+ * @throws Exception if an error occurs
+ */
+ public void testXor() throws Exception
+ {
+ Type4Tester.create("true true xor true false xor false false xor")
+ .pop(false).pop(true).pop(false).isEmpty();
+
+ Type4Tester.create("7 3 xor 12 3 or")
+ .pop(15).pop(4);
+ }
+
+ /**
+ * Tests the "if" operator.
+ * @throws Exception if an error occurs
+ */
+ public void testIf() throws Exception
+ {
+ Type4Tester.create("true { 2 1 add } if")
+ .pop(3).isEmpty();
+
+ Type4Tester.create("false { 2 1 add } if")
+ .isEmpty();
+
+ try
+ {
+ Type4Tester.create("0 { 2 1 add } if");
+ fail("Need typecheck error for the '0'");
+ }
+ catch (ClassCastException cce)
+ {
+ //expected
+ }
+ }
+
+ /**
+ * Tests the "ifelse" operator.
+ * @throws Exception if an error occurs
+ */
+ public void testIfElse() throws Exception
+ {
+ Type4Tester.create("true { 2 1 add } { 2 1 sub } ifelse")
+ .pop(3).isEmpty();
+
+ Type4Tester.create("false { 2 1 add } { 2 1 sub } ifelse")
+ .pop(1).isEmpty();
+ }
+
+ /**
+ * Tests the "copy" operator.
+ * @throws Exception if an error occurs
+ */
+ public void testCopy() throws Exception
+ {
+ Type4Tester.create("true 1 2 3 3 copy")
+ .pop(3).pop(2).pop(1)
+ .pop(3).pop(2).pop(1)
+ .pop(true)
+ .isEmpty();
+ }
+
+ /**
+ * Tests the "dup" operator.
+ * @throws Exception if an error occurs
+ */
+ public void testDup() throws Exception
+ {
+ Type4Tester.create("true 1 2 dup")
+ .pop(2).pop(2).pop(1)
+ .pop(true)
+ .isEmpty();
+ Type4Tester.create("true dup")
+ .pop(true).pop(true).isEmpty();
+ }
+
+ /**
+ * Tests the "exch" operator.
+ * @throws Exception if an error occurs
+ */
+ public void testExch() throws Exception
+ {
+ Type4Tester.create("true 1 exch")
+ .pop(true).pop(1).isEmpty();
+ Type4Tester.create("1 2.5 exch")
+ .pop(1).pop(2.5f).isEmpty();
+ }
+
+ /**
+ * Tests the "index" operator.
+ * @throws Exception if an error occurs
+ */
+ public void testIndex() throws Exception
+ {
+ Type4Tester.create("1 2 3 4 0 index")
+ .pop(4).pop(4).pop(3).pop(2).pop(1).isEmpty();
+ Type4Tester.create("1 2 3 4 3 index")
+ .pop(1).pop(4).pop(3).pop(2).pop(1).isEmpty();
+ }
+
+ /**
+ * Tests the "pop" operator.
+ * @throws Exception if an error occurs
+ */
+ public void testPop() throws Exception
+ {
+ Type4Tester.create("1 pop 7 2 pop")
+ .pop(7).isEmpty();
+ Type4Tester.create("1 2 3 pop pop")
+ .pop(1).isEmpty();
+ }
+
+ /**
+ * Tests the "roll" operator.
+ * @throws Exception if an error occurs
+ */
+ public void testRoll() throws Exception
+ {
+ Type4Tester.create("1 2 3 4 5 5 -2 roll")
+ .pop(2).pop(1).pop(5).pop(4).pop(3).isEmpty();
+ Type4Tester.create("1 2 3 4 5 5 2 roll")
+ .pop(3).pop(2).pop(1).pop(5).pop(4).isEmpty();
+ Type4Tester.create("1 2 3 3 0 roll")
+ .pop(3).pop(2).pop(1).isEmpty();
+ }
+
+}
Propchange: pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/common/function/type4/TestOperators.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/common/function/type4/TestOperators.java
------------------------------------------------------------------------------
svn:keywords = Id
Added: pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/common/function/type4/TestParser.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/common/function/type4/TestParser.java?rev=1185719&view=auto
==============================================================================
--- pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/common/function/type4/TestParser.java (added)
+++ pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/common/function/type4/TestParser.java Tue Oct 18 15:23:56 2011
@@ -0,0 +1,65 @@
+/*
+ * 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.
+ */
+package org.apache.pdfbox.pdmodel.common.function.type4;
+
+import junit.framework.TestCase;
+
+/**
+ * Tests the type 4 function parser.
+ *
+ * @version $Revision$
+ */
+public class TestParser extends TestCase
+{
+
+ /**
+ * Test the very basics.
+ * @throws Exception if an error occurs
+ */
+ public void testParserBasics() throws Exception
+ {
+ Type4Tester.create("3 4 add 2 sub").pop(5).isEmpty();
+ }
+
+ /**
+ * Test nested blocks.
+ * @throws Exception if an error occurs
+ */
+ public void testNested() throws Exception
+ {
+ Type4Tester.create("true { 2 1 add } { 2 1 sub } ifelse")
+ .pop(3).isEmpty();
+
+ Type4Tester.create("{ true }").pop(true).isEmpty();
+ }
+
+ /**
+ * Tests parsing of real values.
+ * @throws Exception if an error occurs
+ */
+ public void testParseFloat() throws Exception
+ {
+ assertEquals(0, InstructionSequenceBuilder.parseReal("0"), 0.00001f);
+ assertEquals(1, InstructionSequenceBuilder.parseReal("1"), 0.00001f);
+ assertEquals(1, InstructionSequenceBuilder.parseReal("+1"), 0.00001f);
+ assertEquals(-1, InstructionSequenceBuilder.parseReal("-1"), 0.00001f);
+ assertEquals(3.14157, InstructionSequenceBuilder.parseReal("3.14157"), 0.00001f);
+ assertEquals(-1.2, InstructionSequenceBuilder.parseReal("-1.2"), 0.00001f);
+
+ assertEquals(1.0E-5, InstructionSequenceBuilder.parseReal("1.0E-5"), 0.00001f);
+ }
+}
Propchange: pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/common/function/type4/TestParser.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/common/function/type4/TestParser.java
------------------------------------------------------------------------------
svn:keywords = Id
Added: pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/common/function/type4/Type4Tester.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/common/function/type4/Type4Tester.java?rev=1185719&view=auto
==============================================================================
--- pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/common/function/type4/Type4Tester.java (added)
+++ pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/common/function/type4/Type4Tester.java Tue Oct 18 15:23:56 2011
@@ -0,0 +1,139 @@
+/*
+ * 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.
+ */
+package org.apache.pdfbox.pdmodel.common.function.type4;
+
+import org.junit.Assert;
+
+/**
+ * Testing helper class for testing type 4 functions from the PDF specification.
+ *
+ * @version $Revision$
+ */
+public class Type4Tester
+{
+
+ private final ExecutionContext context;
+
+ private Type4Tester(ExecutionContext ctxt)
+ {
+ this.context = ctxt;
+ }
+
+ /**
+ * Creates a new instance for the given type 4 function.
+ * @param text the text of the type 4 function
+ * @return the tester instance
+ */
+ public static Type4Tester create(String text)
+ {
+ InstructionSequence instructions = InstructionSequenceBuilder.parse(text);
+
+ ExecutionContext context = new ExecutionContext(new Operators());
+ instructions.execute(context);
+ return new Type4Tester(context);
+ }
+
+ /**
+ * Pops a bool value from the stack and checks it against the expected result.
+ * @param expected the expected bool value
+ * @return this instance
+ */
+ public Type4Tester pop(boolean expected)
+ {
+ boolean value = (Boolean)context.getStack().pop();
+ Assert.assertEquals(expected, value);
+ return this;
+ }
+
+ /**
+ * Pops a real value from the stack and checks it against the expected result.
+ * @param expected the expected real value
+ * @return this instance
+ */
+ public Type4Tester popReal(float expected)
+ {
+ return popReal(expected, 0.0000001);
+ }
+
+ /**
+ * Pops a real value from the stack and checks it against the expected result.
+ * @param expected the expected real value
+ * @param delta the allowed deviation of the value from the expected result
+ * @return this instance
+ */
+ public Type4Tester popReal(float expected, double delta)
+ {
+ Float value = (Float)context.getStack().pop();
+ Assert.assertEquals(expected, value.floatValue(), delta);
+ return this;
+ }
+
+ /**
+ * Pops an int value from the stack and checks it against the expected result.
+ * @param expected the expected int value
+ * @return this instance
+ */
+ public Type4Tester pop(int expected)
+ {
+ int value = context.popInt();
+ Assert.assertEquals(expected, value);
+ return this;
+ }
+
+ /**
+ * Pops a numeric value from the stack and checks it against the expected result.
+ * @param expected the expected numeric value
+ * @return this instance
+ */
+ public Type4Tester pop(float expected)
+ {
+ return pop(expected, 0.0000001);
+ }
+
+ /**
+ * Pops a numeric value from the stack and checks it against the expected result.
+ * @param expected the expected numeric value
+ * @param delta the allowed deviation of the value from the expected result
+ * @return this instance
+ */
+ public Type4Tester pop(float expected, double delta)
+ {
+ Number value = context.popNumber();
+ Assert.assertEquals(expected, value.doubleValue(), delta);
+ return this;
+ }
+
+ /**
+ * Checks that the stack is empty at this point.
+ * @return this instance
+ */
+ public Type4Tester isEmpty()
+ {
+ Assert.assertTrue(context.getStack().isEmpty());
+ return this;
+ }
+
+ /**
+ * Returns the execution context so some custom checks can be performed.
+ * @return the associated execution context
+ */
+ public ExecutionContext toExecutionContext()
+ {
+ return this.context;
+ }
+
+}
Propchange: pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/common/function/type4/Type4Tester.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/common/function/type4/Type4Tester.java
------------------------------------------------------------------------------
svn:keywords = Id
Added: pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/common/function/type4/package.html
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/common/function/type4/package.html?rev=1185719&view=auto
==============================================================================
--- pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/common/function/type4/package.html (added)
+++ pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/common/function/type4/package.html Tue Oct 18 15:23:56 2011
@@ -0,0 +1,25 @@
+<!--
+ ! 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.
+ !-->
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
+<html>
+<head>
+
+</head>
+<body>
+This holds classes that will be used to test type 4 functions.
+</body>
+</html>
Propchange: pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/common/function/type4/package.html
------------------------------------------------------------------------------
svn:eol-style = native