]> source.dussan.org Git - xmlgraphics-fop.git/commitdiff
Bugzilla #53598: avoid IllegalArgumentException by setting the breakClass field in...
authorVincent Hennebert <vhennebert@apache.org>
Tue, 4 Sep 2012 22:25:49 +0000 (22:25 +0000)
committerVincent Hennebert <vhennebert@apache.org>
Tue, 4 Sep 2012 22:25:49 +0000 (22:25 +0000)
Patch by Robert Meyer, applied with some modifications

git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@1380923 13f79535-47bb-0310-9956-ffa450edef68

src/java/org/apache/fop/layoutmgr/BreakElement.java
status.xml
test/java/org/apache/fop/layoutmgr/BreakElementTestCase.java [new file with mode: 0644]

index 77e7f140b5e0a3acfe8a627544d4b0c7a527b517..f3f173d8c543e3562cbd0bc7e02c07ccb99b4e37 100644 (file)
@@ -21,6 +21,8 @@ package org.apache.fop.layoutmgr;
 
 import java.util.List;
 
+import org.apache.fop.fo.Constants;
+
 /**
  * This class represents an unresolved break possibility.
  */
@@ -28,7 +30,7 @@ public class BreakElement extends UnresolvedListElement {
 
     private int penaltyWidth;
     private int penaltyValue;
-    private int breakClass = -1;
+    private int breakClass;
     private List pendingBeforeMarks;
     private List pendingAfterMarks;
 
@@ -39,7 +41,7 @@ public class BreakElement extends UnresolvedListElement {
      * @param context the layout context which contains the pending conditional elements
      */
     public BreakElement(Position position, int penaltyValue, LayoutContext context) {
-        this(position, penaltyValue, -1, context);
+        this(position, penaltyValue, Constants.EN_AUTO, context);
     }
 
     /**
@@ -80,7 +82,7 @@ public class BreakElement extends UnresolvedListElement {
         super(position);
         this.penaltyWidth = penaltyWidth;
         this.penaltyValue = penaltyValue;
-        this.breakClass = breakClass;
+        setBreakClass(breakClass);
         this.pendingBeforeMarks = context.getPendingBeforeMarks();
         this.pendingAfterMarks = context.getPendingAfterMarks();
     }
@@ -142,13 +144,24 @@ public class BreakElement extends UnresolvedListElement {
      *
      * @param breakClass one of
      *   {@link org.apache.fop.fo.Constants#EN_AUTO},
+     *   {@link org.apache.fop.fo.Constants#EN_LINE},
      *   {@link org.apache.fop.fo.Constants#EN_COLUMN},
      *   {@link org.apache.fop.fo.Constants#EN_PAGE},
      *   {@link org.apache.fop.fo.Constants#EN_EVEN_PAGE},
      *   {@link org.apache.fop.fo.Constants#EN_ODD_PAGE}.
      */
     public void setBreakClass(int breakClass) {
-        this.breakClass = breakClass;
+        switch (breakClass) {
+        case Constants.EN_AUTO:
+        case Constants.EN_LINE:
+        case Constants.EN_COLUMN:
+        case Constants.EN_PAGE:
+        case Constants.EN_EVEN_PAGE:
+        case Constants.EN_ODD_PAGE:
+            this.breakClass = breakClass;
+            break;
+        default: throw new IllegalArgumentException("Illegal value for break class: " + breakClass);
+        }
     }
 
     /** @return the pending border and padding elements at the before edge */
index adde62df3c244408b4bcd6d90d95acfa82bbc911..3e73488fbc30b8e0ae167100703732ae614d0372 100644 (file)
       documents. Example: the fix of marks layering will be such a case when it's done.
     -->
     <release version="FOP Trunk" date="TBD">
+      <action context="Layout" dev="VH" type="fix" fixes-bug="53598" due-to="Robert Meyer">
+        Always set the breakClass field to a legal value in BreakElement, so as to avoid 
+        IllegalArgumentExceptions in other parts of the code.
+      </action>
       <action context="Layout" dev="VH" type="fix" fixes-bug="45715" due-to="Luis Bernardo">
         Restored support for break-before on fo:table.
       </action>
diff --git a/test/java/org/apache/fop/layoutmgr/BreakElementTestCase.java b/test/java/org/apache/fop/layoutmgr/BreakElementTestCase.java
new file mode 100644 (file)
index 0000000..c836bce
--- /dev/null
@@ -0,0 +1,37 @@
+/*
+ * 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.fop.layoutmgr;
+
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+
+import org.apache.fop.fo.Constants;
+
+public class BreakElementTestCase {
+
+    /**
+     * Tests that the constructor sets the break class to a valid default value.
+     */
+    @Test
+    public void breakClassMustBeValid() {
+        LayoutContext context = LayoutContext.newInstance();
+        BreakElement breakElement = new BreakElement(new Position(null), 0, context);
+        assertEquals(Constants.EN_AUTO, breakElement.getBreakClass());
+    }
+}