You are viewing a plain text version of this content. The canonical link for it is here.
Posted to odf-commits@incubator.apache.org by sv...@apache.org on 2016/10/04 20:38:44 UTC

svn commit: r1763327 [3/3] - in /incubator/odf/trunk/simple/src: main/java/org/odftoolkit/simple/table/Table.java test/java/org/odftoolkit/simple/SpreadsheetIteratorTest.java test/resources/SpreadsheetIteratorTest.ods

Added: incubator/odf/trunk/simple/src/test/java/org/odftoolkit/simple/SpreadsheetIteratorTest.java
URL: http://svn.apache.org/viewvc/incubator/odf/trunk/simple/src/test/java/org/odftoolkit/simple/SpreadsheetIteratorTest.java?rev=1763327&view=auto
==============================================================================
--- incubator/odf/trunk/simple/src/test/java/org/odftoolkit/simple/SpreadsheetIteratorTest.java (added)
+++ incubator/odf/trunk/simple/src/test/java/org/odftoolkit/simple/SpreadsheetIteratorTest.java Tue Oct  4 20:38:44 2016
@@ -0,0 +1,232 @@
+/*
+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.odftoolkit.simple;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import org.junit.Assert;
+import org.junit.Test;
+import org.odftoolkit.simple.table.Cell;
+import org.odftoolkit.simple.table.Row;
+import org.odftoolkit.simple.table.Table;
+import org.odftoolkit.simple.utils.ResourceUtilities;
+
+public class SpreadsheetIteratorTest {
+
+	private final static String TEST_FILE_NAME = "SpreadsheetIteratorTest.ods";
+
+	/**
+	 * Test-Data expected from Test-File.
+	 */
+	private final List<List<String>> EXPECTED_DATA;
+
+	public SpreadsheetIteratorTest() {
+		EXPECTED_DATA = new ArrayList<List<String>>();
+		for (int rowIndex = 0; rowIndex <= 3; rowIndex++) {
+			List<String> row = new ArrayList<String>();
+			EXPECTED_DATA.add(row);
+			for (int columnIndex = 0; columnIndex <= 2; columnIndex++) {
+				row.add(String.format("Value%d-%d", rowIndex, columnIndex));
+			}
+		}
+	}
+
+	/**
+	 * Tests the usual use case of a row iterator, a call to {@code hasNext()}
+	 * followed by exactly one call of {@code next()}.
+	 * <pre><code>
+	 * for (Iterator<Row> rowIter = sheet.getRowIterator();
+	 *      rowIter.hasNext(); ) {
+	 *   Row row = rowIter.next();
+	 *   ...
+	 * }
+	 * </code></pre>
+	 *
+	 * </code></pre>
+	 */
+	@Test
+	public void testRowIteratorStandard() {
+		try {
+			Table sheet = loadTestSheet();
+
+			int expectedRowIndex = 0;
+			Iterator<List<String>> expectedRowIter = EXPECTED_DATA.iterator();
+			for (Iterator<Row> rowIter = sheet.getRowIterator(); rowIter.hasNext(); ) {
+				List<String> expectedRow = expectedRowIter.next();
+				Row row = rowIter.next();
+
+				assertEquals("Row Iterator not in sync: ", expectedRowIndex, expectedRow, row);
+
+				expectedRowIndex++;
+			}
+
+		} catch (Exception e) {
+			Logger.getLogger(SpreadsheetIteratorTest.class.getName()).log(Level.SEVERE, null, e);
+			Assert.fail(e.getMessage());
+		}
+	}
+
+	/**
+	 * Tests if the iterator works even if multiple calls of {@code hasNext()}
+	 * per row occur.
+	 *
+	 * Possible use case:
+	 * <pre><code>
+	 * for (Iterator<Row> rowIter = sheet.getRowIterator();
+	 *      rowIter.hasNext(); ) {
+	 *   ...
+	 *   if (rowIter.hasNext()) {
+	 *     Row row = rowIter.next();
+	 *     ...
+	 *   }
+	 * }
+	 * </code></pre>
+	 */
+	@Test
+	public void testRowIteratorMultipleHasNext() {
+		try {
+			Table sheet = loadTestSheet();
+
+			int expectedRowIndex = 0;
+			Iterator<List<String>> expectedRowIter = EXPECTED_DATA.iterator();
+			for (Iterator<Row> rowIter = sheet.getRowIterator(); rowIter.hasNext(); ) {
+				List<String> expectedRow = expectedRowIter.next();
+
+				rowIter.hasNext();
+				Row row = rowIter.next();
+
+				assertEquals("Row Iterator not in sync: ", expectedRowIndex, expectedRow, row);
+
+				expectedRowIndex++;
+			}
+
+		} catch (Exception e) {
+			Logger.getLogger(SpreadsheetIteratorTest.class.getName()).log(Level.SEVERE, null, e);
+			Assert.fail(e.getMessage());
+		}
+	}
+
+	/**
+	 * Tests if the iterator works even if {@code hasNext()} is never called.
+	 *
+	 * Possible use case:
+	 * <pre><code>
+	 * for (Iterator<Row> rowIter = sheet.getRowIterator();
+	 *      rowIter.hasNext(); ) {
+	 *   ...
+	 *   if (rowIter.hasNext()) {
+	 *     Row row = rowIter.next();
+	 *     ...
+	 *   }
+	 * }
+	 * </code></pre>
+	 */
+	@Test
+	public void testRowIteratorWithoutHasNext() {
+		try {
+			Table sheet = loadTestSheet();
+
+			int expectedRowIndex = 0;
+			Iterator<List<String>> expectedRowIter = EXPECTED_DATA.iterator();
+			for (Iterator<Row> rowIter = sheet.getRowIterator(); expectedRowIter.hasNext(); ) {
+				List<String> expectedRow = expectedRowIter.next();
+
+				Row row = rowIter.next();
+
+				assertEquals("Row Iterator not in sync: ", expectedRowIndex, expectedRow, row);
+
+				expectedRowIndex++;
+			}
+
+		} catch (Exception e) {
+			Logger.getLogger(SpreadsheetIteratorTest.class.getName()).log(Level.SEVERE, null, e);
+			Assert.fail(e.getMessage());
+		}
+	}
+
+	private Table loadTestSheet() {
+		Table sheet = null;
+		try {
+			SpreadsheetDocument document = SpreadsheetDocument.loadDocument(
+							ResourceUtilities.getTestResourceAsStream(TEST_FILE_NAME));
+			sheet = document.getSheetByIndex(0);
+
+			// Assure that the spreadsheet contains the expected so we don't have to check
+			// boundaries in the actual test
+			assertEquals("Validate testfile: ", EXPECTED_DATA, sheet);
+
+		} catch (Exception e) {
+			Logger.getLogger(SpreadsheetIteratorTest.class.getName()).log(Level.SEVERE, null, e);
+			Assert.fail(e.getMessage());
+		}
+
+		return sheet;
+	}
+
+	/**
+	 * Assure that the spreadsheet contains the expected
+	 * data.
+	 * @param message Prefix for assertion messages.
+	 * @param expectedData Expected cell values.
+	 * @param sheet Sheet to check.
+	 */
+	private void assertEquals(String message, List<List<String>> expectedData, Table sheet) {
+		Assert.assertNotNull(String.format("%sSheet must exist", message), sheet);
+
+		Assert.assertEquals(String.format("%sRow count must be equal", message),
+						expectedData.size(), sheet.getRowCount());
+
+		int rowIndex = 0;
+		for (List<String> expectedRow : expectedData) {
+			Row row = sheet.getRowByIndex(rowIndex);
+			assertEquals(message, rowIndex, expectedRow, row);
+			rowIndex++;
+		}
+	}
+
+	private void assertEquals(String message, int rowIndex, List<String> expectedRow, Row row) {
+		Assert.assertNotNull(
+						String.format("%sRow [%d] must exist", message, rowIndex), row);
+		Assert.assertEquals(
+						String.format("%sCell count of row %d have to match the expected count", message, rowIndex),
+						expectedRow.size(), row.getCellCount());
+
+		int columnIndex = 0;
+		for (String expectedCellValue : expectedRow) {
+			Cell cell = row.getCellByIndex(columnIndex);
+			assertEquals(message, rowIndex, columnIndex, expectedCellValue, cell);
+			columnIndex++;
+		}
+	}
+
+	private void assertEquals(String message, int rowIndex, int columnIndex,
+					String expectedCellValue, Cell cell) {
+		Assert.assertNotNull(
+						String.format("%sCell [%d] of row [%d] must exist", message, columnIndex, rowIndex), cell);
+
+		Assert.assertEquals(
+						String.format("%sContent of cell [%d] of row [%d] must match", message, columnIndex, rowIndex),
+						expectedCellValue, cell.getDisplayText());
+	}
+
+}

Added: incubator/odf/trunk/simple/src/test/resources/SpreadsheetIteratorTest.ods
URL: http://svn.apache.org/viewvc/incubator/odf/trunk/simple/src/test/resources/SpreadsheetIteratorTest.ods?rev=1763327&view=auto
==============================================================================
Binary file - no diff available.

Propchange: incubator/odf/trunk/simple/src/test/resources/SpreadsheetIteratorTest.ods
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream