diff options
author | Vincent Hennebert <vhennebert@apache.org> | 2007-11-05 16:07:45 +0000 |
---|---|---|
committer | Vincent Hennebert <vhennebert@apache.org> | 2007-11-05 16:07:45 +0000 |
commit | 2a762125322db82658fb650b131f80ed600fc93d (patch) | |
tree | f18aa23be572dc66809b135e958c8fb6faa8fb9f /test/java | |
parent | 9f7240917415e7cb777c1b446bdc8b09cca23237 (diff) | |
download | xmlgraphics-fop-2a762125322db82658fb650b131f80ed600fc93d.tar.gz xmlgraphics-fop-2a762125322db82658fb650b131f80ed600fc93d.zip |
First step towards building row groups at the FO tree stage. The built row groups are currently not used and the TableRowIterator stuff remains unchanged; this allows for more atomic commits.
- introduced RowGroupBuilder hierarchy;
- moved TableRowIterator test cases into fotree, and integrated them in the test suite.
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@592058 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'test/java')
4 files changed, 209 insertions, 211 deletions
diff --git a/test/java/org/apache/fop/fo/flow/AbstractTableTestCase.java b/test/java/org/apache/fop/fo/flow/AbstractTableTestCase.java index 40f97055a..bbac7d8a3 100644 --- a/test/java/org/apache/fop/fo/flow/AbstractTableTestCase.java +++ b/test/java/org/apache/fop/fo/flow/AbstractTableTestCase.java @@ -19,6 +19,8 @@ package org.apache.fop.fo.flow; +import java.util.Iterator; + import org.apache.fop.apps.FOUserAgent; import org.apache.fop.fo.FOEventHandler; import org.apache.fop.fotreetest.FOTreeUnitTester; @@ -49,4 +51,8 @@ abstract class AbstractTableTestCase extends FOTreeUnitTester { protected TableHandler getTableHandler() { return tableHandler; } + + protected Iterator getTableIterator() { + return tableHandler.getTables().iterator(); + } } diff --git a/test/java/org/apache/fop/fo/flow/TableColumnColumnNumberTestCase.java b/test/java/org/apache/fop/fo/flow/TableColumnColumnNumberTestCase.java index 2af11c272..12d05d503 100644 --- a/test/java/org/apache/fop/fo/flow/TableColumnColumnNumberTestCase.java +++ b/test/java/org/apache/fop/fo/flow/TableColumnColumnNumberTestCase.java @@ -63,7 +63,7 @@ public class TableColumnColumnNumberTestCase extends AbstractTableTestCase { public void testColumnNumber() throws Exception { setUp("table/table-column_column-number.fo"); - Iterator tableIter = getTableHandler().getTables().iterator(); + Iterator tableIter = getTableIterator(); Table t = (Table) tableIter.next(); assertEquals(2, t.getNumberOfColumns()); checkColumn(t, 1, false, 1, 2, 100000); @@ -100,7 +100,7 @@ public class TableColumnColumnNumberTestCase extends AbstractTableTestCase { public void testImplicitColumns() throws Exception { setUp("table/implicit_columns_column-number.fo"); percentBaseContext.setUnitaryWidth(100000); - Iterator tableIter = getTableHandler().getTables().iterator(); + Iterator tableIter = getTableIterator(); checkImplicitColumns(tableIter, 2); checkImplicitColumns(tableIter, 2); diff --git a/test/java/org/apache/fop/fo/flow/TableRowIteratorTestCase.java b/test/java/org/apache/fop/fo/flow/TableRowIteratorTestCase.java new file mode 100644 index 000000000..6f0bdad63 --- /dev/null +++ b/test/java/org/apache/fop/fo/flow/TableRowIteratorTestCase.java @@ -0,0 +1,201 @@ +/* + * 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.fo.flow; + +import java.util.Iterator; +import java.util.List; + +/** + * Tests that TableRowIterator returns, for each part of a table, the expected number of + * row-groups with the expected number or rows in each. + */ +public class TableRowIteratorTestCase extends AbstractTableTestCase { + + public TableRowIteratorTestCase() throws Exception { + super(); + } + + /** + * Prepares the iterators over the tables contained in the given FO file. + * + * @param filename basename of a test FO file + * @throws Exception + */ +// private void setUp(String filename) throws Exception { +// foReader.parse(new File("test/layoutmgr/table/" + filename).toURL().toExternalForm()); +// List tables = tableHandler.getTables(); +// List columnSetups = new LinkedList(); +// tableIterator = tables.iterator(); +// for (Iterator i = tables.iterator(); i.hasNext();) { +// columnSetups.add(new ColumnSetup((Table) i.next())); +// } +// columnSetupIterator = columnSetups.iterator(); +// } + + /** + * Checks that the given iterator will return row groups as expected. More precisely, + * checks that the number of row groups corresponds to the size of the given array, + * and that the number of rows inside each row group is equal to the corresponding + * integer in the array. + * + * @param tri an iterator over a given part of a table (HEADER, FOOTER, BODY) + * @param expectedRowLengths expected lengths of all the row groups of this part of + * the table + */ + private void checkTablePartRowGroups(TableBody body, int[] expectedRowLengths) { + Iterator rowGroupIter = body.getRowGroups().iterator(); + for (int i = 0; i < expectedRowLengths.length; i++) { + assertTrue(rowGroupIter.hasNext()); + List rowGroup = (List) rowGroupIter.next(); + assertEquals(expectedRowLengths[i], rowGroup.size()); + } + assertFalse(rowGroupIter.hasNext()); + } + + /** + * Gets the next table and checks its row-groups. + * @param tableIter TODO + * @param expectedHeaderRowLengths expected row-group sizes for the header. If null + * the table is not expected to have a header + * @param expectedFooterRowLengths expected row-group sizes for the footer. If null + * the table is not expected to have a footer + * @param expectedBodyRowLengths expected row-group sizes for the body(-ies) + */ + private void checkNextTableRowGroups(Iterator tableIter, + int[] expectedHeaderRowLengths, int[] expectedFooterRowLengths, int[][] expectedBodyRowLengths) { + Table table = (Table) tableIter.next(); + if (expectedHeaderRowLengths == null) { + assertNull(table.getTableHeader()); + } else { + checkTablePartRowGroups(table.getTableHeader(), expectedHeaderRowLengths); + } + if (expectedFooterRowLengths == null) { + assertNull(table.getTableFooter()); + } else { + checkTablePartRowGroups(table.getTableFooter(), expectedFooterRowLengths); + } + Iterator bodyIter = table.getChildNodes(); + for (int i = 0; i < expectedBodyRowLengths.length; i++) { + assertTrue(bodyIter.hasNext()); + checkTablePartRowGroups((TableBody) bodyIter.next(), expectedBodyRowLengths[i]); + } + +// ColumnSetup columnSetup = (ColumnSetup) columnSetupIterator.next(); +// TableRowIterator tri; +// if (expectedHeaderRowLengths != null) { +// tri = new TableRowIterator(table, columnSetup, TableRowIterator.HEADER); +// checkTablePartRowGroups(tri, expectedHeaderRowLengths); +// } +// if (expectedFooterRowLengths != null) { +// tri = new TableRowIterator(table, columnSetup, TableRowIterator.FOOTER); +// checkTablePartRowGroups(tri, expectedFooterRowLengths); +// } +// tri = new TableRowIterator(table, columnSetup, TableRowIterator.BODY); +// checkTablePartRowGroups(tri, expectedBodyRowLengths); + } + + public void checkSimple(String filename) throws Exception { + setUp(filename); + Iterator tableIter = getTableIterator(); + + // Table 1: no header, no footer, one body (1 row) + checkNextTableRowGroups(tableIter, null, null, new int[][] {{1}}); + + // Table 2: no header, no footer, one body (2 rows) + checkNextTableRowGroups(tableIter, null, null, new int[][] {{1, 1}}); + + // Table 3: no header, no footer, two bodies (1 row, 1 row) + checkNextTableRowGroups(tableIter, null, null, new int[][] {{1}, {1}}); + + // Table 4: no header, no footer, two bodies (2 rows, 3 rows) + checkNextTableRowGroups(tableIter, null, null, new int[][] {{1, 1}, {1, 1, 1}}); + + // Table 5: one header (1 row), no footer, one body (1 row) + checkNextTableRowGroups(tableIter, new int[] {1}, null, new int[][] {{1}}); + + // Table 6: no header, one footer (1 row), one body (1 row) + checkNextTableRowGroups(tableIter, null, new int[] {1}, new int[][] {{1}}); + + // Table 7: one header (1 row), one footer (1 row), one body (1 row) + checkNextTableRowGroups(tableIter, new int[] {1}, new int[] {1}, new int[][] {{1}}); + + // Table 8: one header (2 rows), one footer (3 rows), one body (2 rows) + checkNextTableRowGroups(tableIter, new int[] {1, 1}, new int[] {1, 1, 1}, new int[][] {{1, 1}}); + + // Table 9: one header (3 rows), one footer (2 rows), three bodies (2 rows, 1 row, 3 rows) + checkNextTableRowGroups(tableIter, new int[] {1, 1, 1}, new int[] {1, 1}, new int[][] {{1, 1}, {1}, {1, 1, 1}}); + } + + public void checkSpans(String filename) throws Exception { + setUp(filename); + Iterator tableIter = getTableIterator(); + + // Table 1: no header, no footer, one body (1 row with column-span) + checkNextTableRowGroups(tableIter, null, null, new int[][] {{1}}); + + // Table 2: no header, no footer, one body (1 row-group of 2 rows) + checkNextTableRowGroups(tableIter, null, null, new int[][] {{2}}); + + // Table 3: no header, no footer, one body (1 row-group of 2 rows, 1 row) + checkNextTableRowGroups(tableIter, null, null, new int[][] {{2, 1}}); + + // Table 4: no header, no footer, one body (1 row, 1 row-group of 2 rows) + checkNextTableRowGroups(tableIter, null, null, new int[][] {{1, 2}}); + + // Table 5: no header, no footer, one body (1 row, 1 row-group of 3 rows, 1 row) + checkNextTableRowGroups(tableIter, null, null, new int[][] {{1, 3, 1}}); + + // Table 6: one header (1 row-group of 2 rows), one footer (1 row, 1 row-group of 3 rows), + // one body (1 row-group of 2 rows, 1 row, 1 row-group of 3 rows) + checkNextTableRowGroups(tableIter, new int[] {2}, new int[] {1, 3}, new int[][] {{2, 1, 3}}); + } + + public void testWithRowsSimple() throws Exception { + checkSimple("table/TableRowIterator_simple.fo"); + } + + public void testWithRowsSpans() throws Exception { + checkSpans("table/TableRowIterator_spans.fo"); + } + + public void testNoRowSimple() throws Exception { + checkSimple("table/TableRowIterator_no-row_simple.fo"); + } + + public void testNoRowSpans() throws Exception { + checkSpans("table/TableRowIterator_no-row_spans.fo"); + } + + public void testNoColWithRowsSimple() throws Exception { + checkSimple("table/TableRowIterator_no-col_simple.fo"); + } + + public void testNoColWithRowsSpans() throws Exception { + checkSpans("table/TableRowIterator_no-col_spans.fo"); + } + + public void testNoColNoRowSimple() throws Exception { + checkSimple("table/TableRowIterator_no-col_no-row_simple.fo"); + } + + public void testNoColNoRowSpans() throws Exception { + checkSpans("table/TableRowIterator_no-col_no-row_spans.fo"); + } +} diff --git a/test/java/org/apache/fop/layoutmgr/table/TableRowIteratorTestCase.java b/test/java/org/apache/fop/layoutmgr/table/TableRowIteratorTestCase.java deleted file mode 100644 index b6959143f..000000000 --- a/test/java/org/apache/fop/layoutmgr/table/TableRowIteratorTestCase.java +++ /dev/null @@ -1,209 +0,0 @@ -/* - * 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.layoutmgr.table; - -import java.io.File; -import java.util.Iterator; -import java.util.LinkedList; -import java.util.List; - -import javax.xml.parsers.SAXParser; -import javax.xml.parsers.SAXParserFactory; - -import junit.framework.TestCase; - -import org.apache.fop.apps.FOUserAgent; -import org.apache.fop.apps.Fop; -import org.apache.fop.apps.FopFactory; -import org.apache.fop.fo.flow.Table; -import org.xml.sax.XMLReader; - -/** - * Tests that TableRowIterator returns, for each part of a table, the expected number of - * row-groups with the expected number or rows in each. - */ -public class TableRowIteratorTestCase extends TestCase { - - private XMLReader foReader; - - private TableHandler tableHandler; - - /** Returns Table instances. */ - private Iterator tableIterator; - - /** Returns ColumnSetup instances. */ - private Iterator columnSetupIterator; - - /** - * Creates the SAX parser for the FO file and a FO user agent with an overriden - * FOEventHandler and sets them up. - */ - public void setUp() throws Exception { - SAXParserFactory spf = SAXParserFactory.newInstance(); - spf.setNamespaceAware(true); - spf.setValidating(false); - SAXParser parser; - parser = spf.newSAXParser(); - foReader = parser.getXMLReader(); - - FopFactory fopFactory = FopFactory.newInstance(); - FOUserAgent ua = fopFactory.newFOUserAgent(); - tableHandler = new TableHandler(ua); - ua.setFOEventHandlerOverride(tableHandler); - - Fop fop = fopFactory.newFop(ua); - - foReader.setContentHandler(fop.getDefaultHandler()); - foReader.setDTDHandler(fop.getDefaultHandler()); - foReader.setErrorHandler(fop.getDefaultHandler()); - foReader.setEntityResolver(fop.getDefaultHandler()); - } - - /** - * Prepares the iterators over the tables contained in the given FO file. - * - * @param filename basename of a test FO file - * @throws Exception - */ - private void setUp(String filename) throws Exception { - foReader.parse(new File("test/layoutmgr/table/" + filename).toURL().toExternalForm()); - List tables = tableHandler.getTables(); - List columnSetups = new LinkedList(); - tableIterator = tables.iterator(); - for (Iterator i = tables.iterator(); i.hasNext();) { - columnSetups.add(new ColumnSetup((Table) i.next())); - } - columnSetupIterator = columnSetups.iterator(); - } - - /** - * Checks that the given iterator will return row groups as expected. More precisely, - * checks that the number of row groups corresponds to the size of the given array, - * and that the number of rows inside each row group is equal to the corresponding - * integer in the array. - * - * @param tri an iterator over a given part of a table (HEADER, FOOTER, BODY) - * @param expectedRowLengths expected lengths of all the row groups of this part of - * the table - */ - private void checkTablePartRowGroups(TableRowIterator tri, int[] expectedRowLengths) { - for (int i = 0; i < expectedRowLengths.length; i++) { - EffRow[] row = tri.getNextRowGroup(); - assertTrue(row.length == expectedRowLengths[i]); - } - assertNull(tri.getNextRowGroup()); - } - - /** - * Gets the next table and checks its row-groups. - * - * @param expectedHeaderRowLengths expected row-group sizes for the header. If null - * the table is not expected to have a header - * @param expectedFooterRowLengths expected row-group sizes for the footer. If null - * the table is not expected to have a footer - * @param expectedBodyRowLengths expected row-group sizes for the body(-ies) - */ - private void checkNextTableRowGroups(int[] expectedHeaderRowLengths, - int[] expectedFooterRowLengths, int[] expectedBodyRowLengths) { - Table table = (Table) tableIterator.next(); - ColumnSetup columnSetup = (ColumnSetup) columnSetupIterator.next(); - TableRowIterator tri; - if (expectedHeaderRowLengths != null) { - tri = new TableRowIterator(table, columnSetup, TableRowIterator.HEADER); - checkTablePartRowGroups(tri, expectedHeaderRowLengths); - } - if (expectedFooterRowLengths != null) { - tri = new TableRowIterator(table, columnSetup, TableRowIterator.FOOTER); - checkTablePartRowGroups(tri, expectedFooterRowLengths); - } - tri = new TableRowIterator(table, columnSetup, TableRowIterator.BODY); - checkTablePartRowGroups(tri, expectedBodyRowLengths); - } - - public void checkSimple(String filename) throws Exception { - setUp(filename); - - // Table 1: no header, no footer, one body (1 row) - checkNextTableRowGroups(null, null, new int[] {1}); - - // Table 2: no header, no footer, one body (2 rows) - checkNextTableRowGroups(null, null, new int[] {1, 1}); - - // Table 3: no header, no footer, two bodies (1 row, 1 row) - checkNextTableRowGroups(null, null, new int[] {1, 1}); - - // Table 4: no header, no footer, two bodies (2 rows, 3 rows) - checkNextTableRowGroups(null, null, new int[] {1, 1, 1, 1, 1}); - - // Table 5: one header (1 row), no footer, one body (1 row) - checkNextTableRowGroups(new int[] {1}, null, new int[] {1}); - - // Table 6: no header, one footer (1 row), one body (1 row) - checkNextTableRowGroups(null, new int[] {1}, new int[] {1}); - - // Table 7: one header (1 row), one footer (1 row), one body (1 row) - checkNextTableRowGroups(new int[] {1}, new int[] {1}, new int[] {1}); - - // Table 8: one header (2 rows), one footer (3 rows), one body (2 rows) - checkNextTableRowGroups(new int[] {1, 1}, new int[] {1, 1, 1}, new int[] {1, 1}); - - // Table 9: one header (3 rows), one footer (2 rows), three bodies (2 rows, 1 row, 3 rows) - checkNextTableRowGroups(new int[] {1, 1, 1}, new int[] {1, 1}, new int[] {1, 1, 1, 1, 1, 1}); - } - - public void checkSpans(String filename) throws Exception { - setUp(filename); - - // Table 1: no header, no footer, one body (1 row with column-span) - checkNextTableRowGroups(null, null, new int[] {1}); - - // Table 2: no header, no footer, one body (1 row-group of 2 rows) - checkNextTableRowGroups(null, null, new int[] {2}); - - // Table 3: no header, no footer, one body (1 row-group of 2 rows, 1 row) - checkNextTableRowGroups(null, null, new int[] {2, 1}); - - // Table 4: no header, no footer, one body (1 row, 1 row-group of 2 rows) - checkNextTableRowGroups(null, null, new int[] {1, 2}); - - // Table 5: no header, no footer, one body (1 row, 1 row-group of 3 rows, 1 row) - checkNextTableRowGroups(null, null, new int[] {1, 3, 1}); - - // Table 6: one header (1 row-group of 2 rows), one footer (1 row, 1 row-group of 3 rows), - // one body (1 row-group of 2 rows, 1 row, 1 row-group of 3 rows) - checkNextTableRowGroups(new int[] {2}, new int[] {1, 3}, new int[] {2, 1, 3}); - } - - public void testWithRowsSimple() throws Exception { - checkSimple("TableRowIterator_simple.fo"); - } - - public void testWithRowsSpans() throws Exception { - checkSpans("TableRowIterator_spans.fo"); - } - - public void testNoRowSimple() throws Exception { - checkSimple("TableRowIterator_no-row_simple.fo"); - } - - public void testNoRowSpans() throws Exception { - checkSpans("TableRowIterator_no-row_spans.fo"); - } -}
\ No newline at end of file |