From d3d153b971688bda6a82b965771f65938b6d511e Mon Sep 17 00:00:00 2001 From: Arthit Suriyawongkul Date: Sat, 19 Sep 2026 00:10:02 +0100 Subject: [PATCH 1/5] Fix ODS read failing on empty rows written by LibreOffice - `OdsSheet` and `OdsRow` now report row and cell bounds like POI, ignoring empty rows before and after the data (fixes phantom snippets with no ID) - Add LibreOffice-generated ODS fixtures and a generator script - Add parity tests against XLS/XLSX Signed-off-by: Arthit Suriyawongkul --- TestFiles/ods/SPDXSpreadsheetExample-2.0.ods | Bin 0 -> 19555 bytes TestFiles/ods/SPDXSpreadsheetExample-v2.2.ods | Bin 0 -> 17802 bytes ...eadsheetExample-v2.3-leading-empty-row.ods | Bin 0 -> 27794 bytes ...sheetExample-v2.3-snippets-header-only.ods | Bin 0 -> 27600 bytes ...heetExample-v2.3-trailing-many-columns.ods | Bin 0 -> 27666 bytes ...eetExample-v2.3-trailing-repeated-5000.ods | Bin 0 -> 27702 bytes ...heetExample-v2.3-trailing-styled-blank.ods | Bin 0 -> 27708 bytes TestFiles/ods/SPDXSpreadsheetExample-v2.3.ods | Bin 0 -> 28321 bytes .../org/spdx/spreadsheetstore/ods/OdsRow.java | 32 ++-- .../spdx/spreadsheetstore/ods/OdsSheet.java | 109 +++++++---- .../spreadsheetstore/OdsEmptyRowsTest.java | 177 ++++++++++++++++++ .../spreadsheetstore/ods/OdsWorkbookTest.java | 129 ++++++++++++- .../ods/RowApiParityTest.java | 146 +++++++++++++++ 13 files changed, 532 insertions(+), 61 deletions(-) create mode 100644 TestFiles/ods/SPDXSpreadsheetExample-2.0.ods create mode 100644 TestFiles/ods/SPDXSpreadsheetExample-v2.2.ods create mode 100644 TestFiles/ods/SPDXSpreadsheetExample-v2.3-leading-empty-row.ods create mode 100644 TestFiles/ods/SPDXSpreadsheetExample-v2.3-snippets-header-only.ods create mode 100644 TestFiles/ods/SPDXSpreadsheetExample-v2.3-trailing-many-columns.ods create mode 100644 TestFiles/ods/SPDXSpreadsheetExample-v2.3-trailing-repeated-5000.ods create mode 100644 TestFiles/ods/SPDXSpreadsheetExample-v2.3-trailing-styled-blank.ods create mode 100644 TestFiles/ods/SPDXSpreadsheetExample-v2.3.ods create mode 100644 src/test/java/org/spdx/spreadsheetstore/OdsEmptyRowsTest.java create mode 100644 src/test/java/org/spdx/spreadsheetstore/ods/RowApiParityTest.java diff --git a/TestFiles/ods/SPDXSpreadsheetExample-2.0.ods b/TestFiles/ods/SPDXSpreadsheetExample-2.0.ods new file mode 100644 index 0000000000000000000000000000000000000000..91dd2ff8ef5cf1819c84bbbaf7d8d2197e936438 GIT binary patch literal 19555 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 T6&MZ-4E#WN4j7j89v~h77qRdA literal 0 HcmV?d00001 diff --git a/TestFiles/ods/SPDXSpreadsheetExample-v2.2.ods b/TestFiles/ods/SPDXSpreadsheetExample-v2.2.ods new file mode 100644 index 0000000000000000000000000000000000000000..9b4d6265dd6438eaf3bc68e71717b554746a13c2 GIT binary patch literal 17802 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 literal 0 HcmV?d00001 diff --git a/TestFiles/ods/SPDXSpreadsheetExample-v2.3-leading-empty-row.ods b/TestFiles/ods/SPDXSpreadsheetExample-v2.3-leading-empty-row.ods new file mode 100644 index 0000000000000000000000000000000000000000..ce0f0c987e2ace0b731cc74438151d8784f17d3b GIT binary patch literal 27794 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%0DG=`>3_0tFuW&6$fOhMpM6oi=>k;<) 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 literal 0 HcmV?d00001 diff --git a/TestFiles/ods/SPDXSpreadsheetExample-v2.3-trailing-styled-blank.ods b/TestFiles/ods/SPDXSpreadsheetExample-v2.3-trailing-styled-blank.ods new file mode 100644 index 0000000000000000000000000000000000000000..388e44ad77040eebd1ed9fd43c879c2cdc638d34 GIT binary patch literal 27708 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 ZXFx?6*ta@BK%l)nCf;hPY5CW?{{n)}i`xJI literal 0 HcmV?d00001 diff --git a/TestFiles/ods/SPDXSpreadsheetExample-v2.3.ods b/TestFiles/ods/SPDXSpreadsheetExample-v2.3.ods new file mode 100644 index 0000000000000000000000000000000000000000..79f3cb3fb2ab0731cbdf8cb2106f4ef4ed52de33 GIT binary patch literal 28321 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

*zeeH+>Gz@@Q;#<}Jh=xoDg!Zq*Z+8I^3xEe_tF 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 literal 0 HcmV?d00001 diff --git a/src/main/java/org/spdx/spreadsheetstore/ods/OdsRow.java b/src/main/java/org/spdx/spreadsheetstore/ods/OdsRow.java index 260c29d..50bfc94 100644 --- a/src/main/java/org/spdx/spreadsheetstore/ods/OdsRow.java +++ b/src/main/java/org/spdx/spreadsheetstore/ods/OdsRow.java @@ -95,40 +95,32 @@ public synchronized Cell getCell(int cellnum) { return null; } + // A cell exists if it has a value, formula, annotation or non-default style (see getCell). @Override public short getFirstCellNum() { - com.github.miachm.sods.Range dataRange = sheet.getSodsSheet().getDataRange(); - if (!cells.isEmpty()) { - int col = cells.firstKey(); - if (dataRange != null && rowNum >= dataRange.getRow() && rowNum <= dataRange.getLastRow()) { - col = Math.min(col, dataRange.getColumn()); + int maxCols = sheet.getSodsSheet().getMaxColumns(); + for (int col = 0; col < maxCols; col++) { + if (getCell(col) != null) { + return toShort(col); } - return col > Short.MAX_VALUE ? Short.MAX_VALUE : (short) col; - } - if (dataRange != null && rowNum >= dataRange.getRow() && rowNum <= dataRange.getLastRow()) { - int col = dataRange.getColumn(); - return col > Short.MAX_VALUE ? Short.MAX_VALUE : (short) col; } return -1; } @Override public short getLastCellNum() { - com.github.miachm.sods.Range dataRange = sheet.getSodsSheet().getDataRange(); - if (!cells.isEmpty()) { - int nextCol = cells.lastKey() + 1; - if (dataRange != null && rowNum >= dataRange.getRow() && rowNum <= dataRange.getLastRow()) { - nextCol = Math.max(nextCol, dataRange.getLastColumn() + 1); + for (int col = sheet.getSodsSheet().getMaxColumns() - 1; col >= 0; col--) { + if (getCell(col) != null) { + return toShort(col + 1); } - return nextCol > Short.MAX_VALUE ? Short.MAX_VALUE : (short) nextCol; - } - if (dataRange != null && rowNum >= dataRange.getRow() && rowNum <= dataRange.getLastRow()) { - int nextCol = dataRange.getLastColumn() + 1; - return nextCol > Short.MAX_VALUE ? Short.MAX_VALUE : (short) nextCol; } return -1; } + private static short toShort(int col) { + return col > Short.MAX_VALUE ? Short.MAX_VALUE : (short) col; + } + @Override public int getRowNum() { return rowNum; diff --git a/src/main/java/org/spdx/spreadsheetstore/ods/OdsSheet.java b/src/main/java/org/spdx/spreadsheetstore/ods/OdsSheet.java index fbffe7f..c5195c3 100644 --- a/src/main/java/org/spdx/spreadsheetstore/ods/OdsSheet.java +++ b/src/main/java/org/spdx/spreadsheetstore/ods/OdsSheet.java @@ -46,6 +46,14 @@ public class OdsSheet implements Sheet { private final OdsWorkbook workbook; private final com.github.miachm.sods.Sheet sodsSheet; private final NavigableMap rows = new TreeMap<>(); + /** + * Lowest and highest SODS rows that may hold content, -1 if none. + * Set by the first scan, then only narrowed. + */ + private int firstContentRow = -1; + private int lastContentRow = -1; + private boolean contentScanned = false; + private static final int PROBE_COLUMNS = 8; private final List mergedRegions = new ArrayList<>(); @@ -89,7 +97,10 @@ public synchronized Row getRow(int rownum) { if (row != null) { return row; } - if (rownum >= 0 && rownum < sodsSheet.getMaxRows()) { + // Null outside the content range, as in POI: SODS loads the empty rows LibreOffice + // writes around the data as real rows. + // Empty rows inside the range are returned; POI returns null for those not created. + if (rownum >= 0 && rownum < sodsSheet.getMaxRows() && inContentRange(rownum)) { OdsRow newRow = new OdsRow(this, rownum); rows.put(rownum, newRow); return newRow; @@ -107,55 +118,79 @@ public void removeRow(Row row) { } } - private boolean hasData() { - if (!rows.isEmpty()) { - return true; + /** + * Finds the first and last rows with content. + * First scan covers the whole sheet; later scans narrow the cached range. + */ + private void scanContentRows() { + if (contentScanned && firstContentRow < 0) { + return; } - com.github.miachm.sods.Range dataRange = sodsSheet.getDataRange(); - if (dataRange == null) { + int first = contentScanned ? firstContentRow : 0; + int last = contentScanned ? lastContentRow : sodsSheet.getMaxRows() - 1; + while (first <= last && !rowHasContent(first)) { + first++; + } + while (last >= first && !rowHasContent(last)) { + last--; + } + boolean hasContent = first <= last; + firstContentRow = hasContent ? first : -1; + lastContentRow = hasContent ? last : -1; + contentScanned = true; + } + + /** + * @param row SODS row index + * @return true if any cell in the row has a value, formula or annotation (style alone is not content) + */ + private boolean rowHasContent(int row) { + int maxCols = sodsSheet.getMaxColumns(); + // Probe leading cells first: content rows exit without a full-width read. + int probe = Math.min(maxCols, PROBE_COLUMNS); + for (int col = 0; col < probe; col++) { + com.github.miachm.sods.Range cell = sodsSheet.getRange(row, col); + if (cell.getValue() != null || cell.getFormula() != null || cell.getAnnotation() != null) { + return true; + } + } + if (maxCols <= probe) { return false; } - for (int r = dataRange.getRow(); r <= dataRange.getLastRow(); r++) { - for (int c = dataRange.getColumn(); c <= dataRange.getLastColumn(); c++) { - com.github.miachm.sods.Range range = sodsSheet.getRange(r, c); - if (range.getValue() != null || range.getFormula() != null || range.getAnnotation() != null) { - return true; - } + com.github.miachm.sods.Range rest = sodsSheet.getRange(row, probe, 1, maxCols - probe); + return anyNonNull(rest.getValues()[0]) || anyNonNull(rest.getFormulas()[0]) + || anyNonNull(rest.getAnnotations()[0]); + } + + private static boolean anyNonNull(Object[] cells) { + for (Object cell : cells) { + if (cell != null) { + return true; } } return false; } - @Override - public int getFirstRowNum() { - if (!hasData()) { - return -1; - } - com.github.miachm.sods.Range dataRange = sodsSheet.getDataRange(); - if (!rows.isEmpty()) { - int firstRow = rows.firstKey(); - if (dataRange != null) { - return Math.min(firstRow, dataRange.getRow()); - } - return firstRow; + private boolean inContentRange(int row) { + if (!contentScanned) { + scanContentRows(); } - return dataRange.getRow(); + return row >= firstContentRow && row <= lastContentRow; } @Override - public int getLastRowNum() { - if (!hasData()) { - return -1; - } - com.github.miachm.sods.Range dataRange = sodsSheet.getDataRange(); - if (!rows.isEmpty()) { - int lastRow = rows.lastKey(); - if (dataRange != null) { - return Math.max(lastRow, dataRange.getLastRow()); - } - return lastRow; + public synchronized int getFirstRowNum() { + scanContentRows(); + if (rows.isEmpty()) { + return firstContentRow; } - return dataRange.getLastRow(); + return firstContentRow < 0 ? rows.firstKey() : Math.min(rows.firstKey(), firstContentRow); + } + + @Override + public synchronized int getLastRowNum() { + scanContentRows(); + return rows.isEmpty() ? lastContentRow : Math.max(rows.lastKey(), lastContentRow); } @Override diff --git a/src/test/java/org/spdx/spreadsheetstore/OdsEmptyRowsTest.java b/src/test/java/org/spdx/spreadsheetstore/OdsEmptyRowsTest.java new file mode 100644 index 0000000..10a2dec --- /dev/null +++ b/src/test/java/org/spdx/spreadsheetstore/OdsEmptyRowsTest.java @@ -0,0 +1,177 @@ +/* + * SPDX-FileContributor: Arthit Suriyawongkul + * SPDX-FileCopyrightText: 2026 SPDX Contributors + * SPDX-FileType: SOURCE + * SPDX-License-Identifier: Apache-2.0 + */ +package org.spdx.spreadsheetstore; + +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.TreeSet; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import org.apache.poi.ss.usermodel.Row; +import org.apache.poi.ss.usermodel.Sheet; +import org.apache.poi.ss.usermodel.Workbook; +import org.apache.poi.ss.usermodel.WorkbookFactory; +import org.junit.Test; + +import org.spdx.core.InvalidSPDXAnalysisException; +import org.spdx.library.ModelCopyManager; +import org.spdx.library.SpdxModelFactory; +import org.spdx.library.model.v2.SpdxConstantsCompatV2; +import org.spdx.library.model.v2.SpdxDocument; +import org.spdx.library.model.v2.SpdxElement; +import org.spdx.spreadsheetstore.ods.OdsWorkbook; +import org.spdx.storage.simple.InMemSpdxStore; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; + + +/** + * ODS files from LibreOffice end every sheet with empty rows. + * Those rows must be ignored: content matches the XLSX example. + * Fixtures: TestFiles/ods, from TestFiles/generate_ods_fixtures.py. + */ +public class OdsEmptyRowsTest { + + private static final String TEST_FILES = "TestFiles"; + private static final String ODS_DIR = TEST_FILES + File.separator + "ods"; + private static final String V2_3 = "SPDXSpreadsheetExample-v2.3"; + private static final String[] EXAMPLES = new String[] {"SPDXSpreadsheetExample-2.0", "SPDXSpreadsheetExample-v2.2", V2_3}; + /** v2.3 variants with extra empty rows that must load the same as the XLSX */ + private static final String[] EMPTY_ROW_VARIANTS = new String[] { + V2_3 + "-trailing-repeated-5000", V2_3 + "-trailing-styled-blank", + V2_3 + "-trailing-many-columns", V2_3 + "-leading-empty-row"}; + + /** Element IDs and counts found in a spreadsheet */ + private static class Contents { + List files = new ArrayList<>(); + List snippets = new ArrayList<>(); + List packages = new ArrayList<>(); + int relationships = 0; + int annotations = 0; + } + + private Contents load(String path) throws InvalidSPDXAnalysisException, IOException { + SpreadsheetStore sst = new SpreadsheetStore(new InMemSpdxStore()); + try (FileInputStream stream = new FileInputStream(path)) { + sst.deSerialize(stream, false); + } + ModelCopyManager cm = new ModelCopyManager(); + String documentUri; + try (Stream docs = SpdxModelFactory.getSpdxObjects(sst, cm, + SpdxConstantsCompatV2.CLASS_SPDX_DOCUMENT, null, null)) { + List allDocs = docs.collect(Collectors.toList()); + assertEquals(1, allDocs.size()); + documentUri = ((SpdxDocument)allDocs.get(0)).getDocumentUri(); + } + Contents retval = new Contents(); + SpdxDocument doc = new SpdxDocument(sst, documentUri, cm, false); + retval.annotations = doc.getAnnotations().size(); + retval.relationships = doc.getRelationships().size(); + retval.files = ids(sst, cm, SpdxConstantsCompatV2.CLASS_SPDX_FILE, documentUri); + retval.snippets = ids(sst, cm, SpdxConstantsCompatV2.CLASS_SPDX_SNIPPET, documentUri); + retval.packages = ids(sst, cm, SpdxConstantsCompatV2.CLASS_SPDX_PACKAGE, documentUri); + return retval; + } + + private List ids(SpreadsheetStore sst, ModelCopyManager cm, String type, String documentUri) + throws InvalidSPDXAnalysisException { + List retval = new ArrayList<>(); + try (Stream elements = SpdxModelFactory.getSpdxObjects(sst, cm, type, documentUri, documentUri + "#")) { + elements.forEach(e -> retval.add(((SpdxElement)e).getId())); + } + Collections.sort(retval); + return retval; + } + + private void assertSameContents(Contents expected, Contents actual) { + assertEquals(expected.files, actual.files); + assertEquals(expected.snippets, actual.snippets); + assertEquals(expected.packages, actual.packages); + assertEquals(expected.relationships, actual.relationships); + assertEquals(expected.annotations, actual.annotations); + } + + private void assertNoAnonymousSnippets(Contents contents) { + for (String id : contents.snippets) { + assertFalse("Phantom snippet from an empty row: " + id, id.contains("__anon__")); + } + assertEquals(contents.snippets.size(), new TreeSet<>(contents.snippets).size()); + } + + @Test + public void libreOfficeConvertedOdsMatchesXlsx() throws InvalidSPDXAnalysisException, IOException { + for (String example : EXAMPLES) { + Contents expected = load(TEST_FILES + File.separator + example + ".xlsx"); + Contents ods = load(ODS_DIR + File.separator + example + ".ods"); + assertNoAnonymousSnippets(ods); + assertSameContents(expected, ods); + } + } + + @Test + public void emptyRowsAreIgnored() throws InvalidSPDXAnalysisException, IOException { + Contents expected = load(TEST_FILES + File.separator + V2_3 + ".xlsx"); + assertFalse(expected.snippets.isEmpty()); + for (String variant : EMPTY_ROW_VARIANTS) { + Contents ods = load(ODS_DIR + File.separator + variant + ".ods"); + assertNoAnonymousSnippets(ods); + assertSameContents(expected, ods); + } + } + + @Test + public void headerOnlySnippetSheetHasNoSnippets() throws InvalidSPDXAnalysisException, IOException { + Contents expected = load(TEST_FILES + File.separator + V2_3 + ".xlsx"); + Contents ods = load(ODS_DIR + File.separator + V2_3 + "-snippets-header-only.ods"); + assertTrue(ods.snippets.isEmpty()); + assertEquals(expected.files, ods.files); + assertEquals(expected.packages, ods.packages); + assertEquals(expected.annotations, ods.annotations); + } + + /** Row bounds of every sheet equal the XLSX's, shifted by the rows added before the data. */ + private void assertRowBounds(String odsPath, int rowOffset) throws IOException { + try (FileInputStream xlsxStream = new FileInputStream(TEST_FILES + File.separator + V2_3 + ".xlsx"); + FileInputStream odsStream = new FileInputStream(odsPath); + Workbook xlsx = WorkbookFactory.create(xlsxStream); + Workbook ods = new OdsWorkbook(odsStream)) { + assertEquals(xlsx.getNumberOfSheets(), ods.getNumberOfSheets()); + for (int i = 0; i < xlsx.getNumberOfSheets(); i++) { + Sheet expected = xlsx.getSheetAt(i); + Sheet actual = ods.getSheet(expected.getSheetName()); + String name = expected.getSheetName(); + assertEquals(name, expected.getFirstRowNum() + rowOffset, actual.getFirstRowNum()); + assertEquals(name, expected.getLastRowNum() + rowOffset, actual.getLastRowNum()); + if (rowOffset > 0) { + assertNull(name, actual.getRow(0)); + } + assertNull(name, actual.getRow(actual.getLastRowNum() + 1)); + Row header = actual.getRow(actual.getFirstRowNum()); + assertEquals(name, expected.getRow(expected.getFirstRowNum()).getFirstCellNum(), header.getFirstCellNum()); + assertEquals(name, expected.getRow(expected.getFirstRowNum()).getLastCellNum(), header.getLastCellNum()); + } + } + } + + @Test + public void trailingEmptyRowsAreNotRows() throws IOException { + assertRowBounds(ODS_DIR + File.separator + V2_3 + ".ods", 0); + } + + @Test + public void leadingEmptyRowIsNotARow() throws IOException { + assertRowBounds(ODS_DIR + File.separator + V2_3 + "-leading-empty-row.ods", 1); + } +} diff --git a/src/test/java/org/spdx/spreadsheetstore/ods/OdsWorkbookTest.java b/src/test/java/org/spdx/spreadsheetstore/ods/OdsWorkbookTest.java index d08337e..b5ffe72 100644 --- a/src/test/java/org/spdx/spreadsheetstore/ods/OdsWorkbookTest.java +++ b/src/test/java/org/spdx/spreadsheetstore/ods/OdsWorkbookTest.java @@ -17,6 +17,7 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; /** @@ -165,7 +166,7 @@ public void testCellComments() { assertEquals("This is a comment", cell.getCellComment().getString().getString()); cell.removeCellComment(); - org.junit.Assert.assertNull(cell.getCellComment()); + assertNull(cell.getCellComment()); } @Test @@ -204,7 +205,7 @@ public void testNullBorderHandling() { OdsWorkbook workbook = new OdsWorkbook(); OdsCellStyle style = (OdsCellStyle) workbook.createCellStyle(); style.setBorderBottom(null); - org.junit.Assert.assertNull(style.getBorderBottom()); + assertNull(style.getBorderBottom()); } @Test @@ -258,8 +259,8 @@ public void testInvalidNumericDateCellReturnsNullWithoutNpe() { Row row = sheet.createRow(0); Cell cell = row.createCell(0); cell.setCellValue(-5.0); - org.junit.Assert.assertNull(cell.getLocalDateTimeCellValue()); - org.junit.Assert.assertNull(cell.getDateCellValue()); + assertNull(cell.getLocalDateTimeCellValue()); + assertNull(cell.getDateCellValue()); } // Regression test: real POI throws IllegalStateException reading a date from a @@ -343,4 +344,124 @@ public void testFindFontNullName() { org.apache.poi.ss.usermodel.Font font = workbook.findFont(false, (short) 0, (short) 200, null, false, false, (short) 0, (byte) 0); // Should return without NPE } + + /** Empty rows after the last content row are not rows (as in POI). */ + @Test + public void testTrailingEmptyRowsAreNotRows() { + OdsWorkbook workbook = new OdsWorkbook(); + Sheet sheet = workbook.createSheet("Trailing"); + sheet.createRow(0).createCell(0).setCellValue("header"); + sheet.createRow(1).createCell(0).setCellValue("data"); + ((OdsSheet) sheet).getSodsSheet().appendRows(3); + + assertEquals(0, sheet.getFirstRowNum()); + assertEquals(1, sheet.getLastRowNum()); + assertNotNull(sheet.getRow(1)); + assertNull(sheet.getRow(2)); + assertNull(sheet.getRow(4)); + int rowCount = 0; + for (Row row : sheet) { + assertNotNull(row); + rowCount++; + } + assertEquals(2, rowCount); + } + + @Test + public void testStyledEmptyCellsDoNotCountAsContent() { + OdsWorkbook workbook = new OdsWorkbook(); + Sheet sheet = workbook.createSheet("Styled"); + sheet.createRow(0).createCell(0).setCellValue("header"); + Row styled = sheet.createRow(1); + Cell blank = styled.createCell(0); + blank.setCellStyle(workbook.createCellStyle()); + blank.setBlank(); + ((OdsSheet) sheet).getSodsSheet().appendRows(2); + // created row exists; untouched rows after it do not + assertNotNull(sheet.getRow(1)); + assertNull(sheet.getRow(2)); + assertNull(sheet.getRow(3)); + } + + @Test + public void testEmptyRowBetweenDataIsKept() { + OdsWorkbook workbook = new OdsWorkbook(); + Sheet sheet = workbook.createSheet("Interior"); + sheet.createRow(0).createCell(0).setCellValue("first"); + sheet.createRow(3).createCell(0).setCellValue("last"); + assertEquals(3, sheet.getLastRowNum()); + assertNotNull(sheet.getRow(1)); + assertNotNull(sheet.getRow(2)); + } + + @Test + public void testCreateRowAfterTrailingEmptyRows() { + OdsWorkbook workbook = new OdsWorkbook(); + Sheet sheet = workbook.createSheet("Append"); + sheet.createRow(0).createCell(0).setCellValue("header"); + ((OdsSheet) sheet).getSodsSheet().appendRows(3); + assertNull(sheet.getRow(2)); + Row row = sheet.createRow(2); + row.createCell(0).setCellValue("new"); + assertNotNull(sheet.getRow(2)); + assertEquals(2, sheet.getLastRowNum()); + assertEquals("new", sheet.getRow(2).getCell(0).getStringCellValue()); + } + + @Test + public void testSheetWithOnlyEmptyRows() { + OdsWorkbook workbook = new OdsWorkbook(); + Sheet sheet = workbook.createSheet("OnlyEmpty"); + ((OdsSheet) sheet).getSodsSheet().appendRows(5); + assertEquals(-1, sheet.getFirstRowNum()); + assertEquals(-1, sheet.getLastRowNum()); + assertNull(sheet.getRow(0)); + assertFalse(sheet.iterator().hasNext()); + } + + @Test + public void testLeadingEmptyRowsAreNotRows() { + OdsWorkbook workbook = new OdsWorkbook(); + Sheet sheet = workbook.createSheet("Leading"); + for (int i = 0; i < 4; i++) { + sheet.createRow(i); + } + sheet.getRow(2).createCell(0).setCellValue("header"); + sheet.getRow(3).createCell(0).setCellValue("data"); + sheet.removeRow(sheet.getRow(0)); + sheet.removeRow(sheet.getRow(1)); + assertEquals(2, sheet.getFirstRowNum()); + assertEquals(3, sheet.getLastRowNum()); + assertNull(sheet.getRow(0)); + assertNull(sheet.getRow(1)); + sheet.removeRow(sheet.getRow(2)); + assertEquals(3, sheet.getFirstRowNum()); + } + + @Test + public void testRowBoundsAfterRemovingRows() { + OdsWorkbook workbook = new OdsWorkbook(); + Sheet sheet = workbook.createSheet("Removed"); + sheet.createRow(0).createCell(0).setCellValue("header"); + sheet.createRow(1).createCell(0).setCellValue("data"); + assertEquals(1, sheet.getLastRowNum()); + sheet.removeRow(sheet.getRow(1)); + assertEquals(0, sheet.getLastRowNum()); + sheet.removeRow(sheet.getRow(0)); + assertEquals(-1, sheet.getFirstRowNum()); + assertEquals(-1, sheet.getLastRowNum()); + } + + @Test + public void testRowsBetweenContentAndCreatedRowExist() { + OdsWorkbook workbook = new OdsWorkbook(); + Sheet sheet = workbook.createSheet("Gap"); + sheet.createRow(0).createCell(0).setCellValue("header"); + ((OdsSheet) sheet).getSodsSheet().appendRows(4); + sheet.createRow(4).createCell(0).setCellValue("data"); + assertEquals(4, sheet.getLastRowNum()); + for (int i = 0; i <= 4; i++) { + assertNotNull("row " + i, sheet.getRow(i)); + } + } } diff --git a/src/test/java/org/spdx/spreadsheetstore/ods/RowApiParityTest.java b/src/test/java/org/spdx/spreadsheetstore/ods/RowApiParityTest.java new file mode 100644 index 0000000..3a211aa --- /dev/null +++ b/src/test/java/org/spdx/spreadsheetstore/ods/RowApiParityTest.java @@ -0,0 +1,146 @@ +/* + * SPDX-FileContributor: Arthit Suriyawongkul + * SPDX-FileCopyrightText: 2026 SPDX Contributors + * SPDX-FileType: SOURCE + * SPDX-License-Identifier: Apache-2.0 + */ +package org.spdx.spreadsheetstore.ods; + +import java.util.function.Supplier; + +import org.apache.poi.ss.usermodel.CellStyle; +import org.apache.poi.ss.usermodel.HorizontalAlignment; +import org.apache.poi.ss.usermodel.Row; +import org.apache.poi.ss.usermodel.Sheet; +import org.apache.poi.ss.usermodel.Workbook; +import org.junit.Test; +import org.spdx.spreadsheetstore.SpreadsheetTestUtils; + +import static org.junit.Assert.assertEquals; + +/** + * Row and cell bounds of ODS match XLS and XLSX for the same sequence of calls. + */ +public class RowApiParityTest { + + private static final int PROBE_ROWS = 7; + + private interface Layout { + void build(Workbook workbook, Sheet sheet); + } + + /** Bounds and existence of rows 0..PROBE_ROWS-1 and their cells */ + private static String snapshot(Sheet sheet) { + StringBuilder sb = new StringBuilder(); + sb.append("first=").append(sheet.getFirstRowNum()).append(" last=").append(sheet.getLastRowNum()); + for (int i = 0; i < PROBE_ROWS; i++) { + Row row = sheet.getRow(i); + sb.append(" | row").append(i).append('='); + if (row == null) { + sb.append("null"); + } else { + sb.append(row.getFirstCellNum()).append("..").append(row.getLastCellNum()); + } + } + return sb.toString(); + } + + /** Builds the layout on a new sheet in XLS, XLSX and ODS, and asserts all snapshots are equal. */ + private static void assertParity(Layout layout) { + String expected = null; + for (Supplier factory : SpreadsheetTestUtils.WORKBOOK_FACTORIES) { + try (Workbook workbook = factory.get()) { + Sheet sheet = workbook.createSheet("S"); + layout.build(workbook, sheet); + String actual = snapshot(sheet); + if (expected == null) { + expected = actual; + } + assertEquals(workbook.getClass().getSimpleName(), expected, actual); + } catch (java.io.IOException e) { + throw new AssertionError(e); + } + } + } + + private static void content(Sheet sheet, int row, int col) { + Row r = sheet.getRow(row) != null ? sheet.getRow(row) : sheet.createRow(row); + r.createCell(col).setCellValue("x"); + } + + @Test + public void contiguousRows() { + assertParity((wb, sheet) -> { + for (int i = 0; i < 3; i++) { + content(sheet, i, 0); + } + }); + } + + @Test + public void emptySheet() { + assertParity((wb, sheet) -> { }); + } + + @Test + public void emptyRowsAfterDataRemoved() { + assertParity((wb, sheet) -> { + for (int i = 0; i < 5; i++) { + sheet.createRow(i); + } + content(sheet, 0, 0); + content(sheet, 1, 0); + for (int i = 2; i < 5; i++) { + sheet.removeRow(sheet.getRow(i)); + } + }); + } + + @Test + public void emptyRowsBeforeDataRemoved() { + assertParity((wb, sheet) -> { + for (int i = 0; i < 4; i++) { + sheet.createRow(i); + } + content(sheet, 2, 0); + content(sheet, 3, 0); + sheet.removeRow(sheet.getRow(0)); + sheet.removeRow(sheet.getRow(1)); + }); + } + + @Test + public void firstAndLastRowRemoved() { + assertParity((wb, sheet) -> { + for (int i = 0; i < 4; i++) { + content(sheet, i, 0); + } + sheet.removeRow(sheet.getRow(0)); + sheet.removeRow(sheet.getRow(3)); + }); + } + + @Test + public void allRowsRemoved() { + assertParity((wb, sheet) -> { + content(sheet, 0, 0); + content(sheet, 1, 0); + sheet.removeRow(sheet.getRow(1)); + sheet.removeRow(sheet.getRow(0)); + }); + } + + @Test + public void cellBounds() { + assertParity((wb, sheet) -> { + content(sheet, 0, 1); + content(sheet, 0, 2); + content(sheet, 1, 5); + sheet.createRow(2); + sheet.getRow(2).createCell(3); // blank cell + CellStyle style = wb.createCellStyle(); + style.setAlignment(HorizontalAlignment.CENTER); + sheet.createRow(3).createCell(4).setCellStyle(style); // styled blank cell + }); + } +} From 88a3d1309e3e776ed9ada30e1c421c56c0f69eec Mon Sep 17 00:00:00 2001 From: Arthit Suriyawongkul Date: Sat, 19 Sep 2026 00:27:09 +0100 Subject: [PATCH 2/5] Fix removeRow cache range Signed-off-by: Arthit Suriyawongkul --- .../spdx/spreadsheetstore/ods/OdsSheet.java | 6 ++- .../ods/RowApiParityTest.java | 46 ++++++++++++++++++- 2 files changed, 50 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/spdx/spreadsheetstore/ods/OdsSheet.java b/src/main/java/org/spdx/spreadsheetstore/ods/OdsSheet.java index c5195c3..043b55e 100644 --- a/src/main/java/org/spdx/spreadsheetstore/ods/OdsSheet.java +++ b/src/main/java/org/spdx/spreadsheetstore/ods/OdsSheet.java @@ -109,12 +109,16 @@ public synchronized Row getRow(int rownum) { } @Override - public void removeRow(Row row) { + public synchronized void removeRow(Row row) { if (row instanceof OdsRow) { int rowNum = row.getRowNum(); OdsRow odsRow = (OdsRow) row; odsRow.clear(); rows.remove(rowNum); + // Narrow the cached range so getRow returns null for the removed edge row. + if (contentScanned) { + scanContentRows(); + } } } diff --git a/src/test/java/org/spdx/spreadsheetstore/ods/RowApiParityTest.java b/src/test/java/org/spdx/spreadsheetstore/ods/RowApiParityTest.java index 3a211aa..23505df 100644 --- a/src/test/java/org/spdx/spreadsheetstore/ods/RowApiParityTest.java +++ b/src/test/java/org/spdx/spreadsheetstore/ods/RowApiParityTest.java @@ -6,6 +6,9 @@ */ package org.spdx.spreadsheetstore.ods; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.InputStream; import java.util.function.Supplier; import org.apache.poi.ss.usermodel.CellStyle; @@ -13,6 +16,7 @@ import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; +import org.apache.poi.ss.usermodel.WorkbookFactory; import org.junit.Test; import org.spdx.spreadsheetstore.SpreadsheetTestUtils; @@ -63,9 +67,33 @@ private static void assertParity(Layout layout) { } } + /** Builds the layout, writes and reloads the workbook, applies the change, then asserts as {@link #assertParity}. */ + private static void assertParityAfterReload(Layout layout, Layout change) { + String expected = null; + for (Supplier factory : SpreadsheetTestUtils.WORKBOOK_FACTORIES) { + try (Workbook written = factory.get()) { + layout.build(written, written.createSheet("S")); + ByteArrayOutputStream out = new ByteArrayOutputStream(); + written.write(out); + InputStream in = new ByteArrayInputStream(out.toByteArray()); + try (Workbook workbook = written instanceof OdsWorkbook ? new OdsWorkbook(in) : WorkbookFactory.create(in)) { + Sheet sheet = workbook.getSheet("S"); + change.build(workbook, sheet); + String actual = snapshot(sheet); + if (expected == null) { + expected = actual; + } + assertEquals(workbook.getClass().getSimpleName(), expected, actual); + } + } catch (java.io.IOException e) { + throw new AssertionError(e); + } + } + } + private static void content(Sheet sheet, int row, int col) { Row r = sheet.getRow(row) != null ? sheet.getRow(row) : sheet.createRow(row); - r.createCell(col).setCellValue("x"); + r.createCell(col).setCellValue(row + ":" + col); // unique: SODS aliases cells of identical rows on load } @Test @@ -130,6 +158,22 @@ public void allRowsRemoved() { }); } + @Test + public void loadedLastRowRemoved() { + assertParityAfterReload( + (wb, sheet) -> { + for (int i = 0; i < 4; i++) { + content(sheet, i, 0); + } + }, + (wb, sheet) -> { + Row last = sheet.getRow(3); + last.getCell(0); // OdsRow.clear only clears cells already read + sheet.removeRow(last); + sheet.getRow(3); // probe before bounds are read + }); + } + @Test public void cellBounds() { assertParity((wb, sheet) -> { From c58d2a357f2dc6d1384bef3bd97952f56e5dda31 Mon Sep 17 00:00:00 2001 From: Arthit Suriyawongkul Date: Sat, 19 Sep 2026 00:43:05 +0100 Subject: [PATCH 3/5] Fix comment Signed-off-by: Arthit Suriyawongkul --- .../java/org/spdx/spreadsheetstore/ods/RowApiParityTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/org/spdx/spreadsheetstore/ods/RowApiParityTest.java b/src/test/java/org/spdx/spreadsheetstore/ods/RowApiParityTest.java index 23505df..0fa910b 100644 --- a/src/test/java/org/spdx/spreadsheetstore/ods/RowApiParityTest.java +++ b/src/test/java/org/spdx/spreadsheetstore/ods/RowApiParityTest.java @@ -93,7 +93,7 @@ private static void assertParityAfterReload(Layout layout, Layout change) { private static void content(Sheet sheet, int row, int col) { Row r = sheet.getRow(row) != null ? sheet.getRow(row) : sheet.createRow(row); - r.createCell(col).setCellValue(row + ":" + col); // unique: SODS aliases cells of identical rows on load + r.createCell(col).setCellValue(row + ":" + col); // Distinct values: SODS stores identical trailing rows as one repeated row, and writing to the last one changes all of them } @Test From 37a8e5cd42fddd0cbf768ec4c4d278df8407e494 Mon Sep 17 00:00:00 2001 From: Arthit Suriyawongkul Date: Sat, 19 Sep 2026 00:51:31 +0100 Subject: [PATCH 4/5] Trim changset Signed-off-by: Arthit Suriyawongkul --- .../spdx/spreadsheetstore/ods/OdsSheet.java | 6 +- .../spreadsheetstore/ods/OdsWorkbookTest.java | 60 ------------ .../ods/RowApiParityTest.java | 94 +------------------ 3 files changed, 2 insertions(+), 158 deletions(-) diff --git a/src/main/java/org/spdx/spreadsheetstore/ods/OdsSheet.java b/src/main/java/org/spdx/spreadsheetstore/ods/OdsSheet.java index 043b55e..c5195c3 100644 --- a/src/main/java/org/spdx/spreadsheetstore/ods/OdsSheet.java +++ b/src/main/java/org/spdx/spreadsheetstore/ods/OdsSheet.java @@ -109,16 +109,12 @@ public synchronized Row getRow(int rownum) { } @Override - public synchronized void removeRow(Row row) { + public void removeRow(Row row) { if (row instanceof OdsRow) { int rowNum = row.getRowNum(); OdsRow odsRow = (OdsRow) row; odsRow.clear(); rows.remove(rowNum); - // Narrow the cached range so getRow returns null for the removed edge row. - if (contentScanned) { - scanContentRows(); - } } } diff --git a/src/test/java/org/spdx/spreadsheetstore/ods/OdsWorkbookTest.java b/src/test/java/org/spdx/spreadsheetstore/ods/OdsWorkbookTest.java index b5ffe72..2e753c5 100644 --- a/src/test/java/org/spdx/spreadsheetstore/ods/OdsWorkbookTest.java +++ b/src/test/java/org/spdx/spreadsheetstore/ods/OdsWorkbookTest.java @@ -394,20 +394,6 @@ public void testEmptyRowBetweenDataIsKept() { assertNotNull(sheet.getRow(2)); } - @Test - public void testCreateRowAfterTrailingEmptyRows() { - OdsWorkbook workbook = new OdsWorkbook(); - Sheet sheet = workbook.createSheet("Append"); - sheet.createRow(0).createCell(0).setCellValue("header"); - ((OdsSheet) sheet).getSodsSheet().appendRows(3); - assertNull(sheet.getRow(2)); - Row row = sheet.createRow(2); - row.createCell(0).setCellValue("new"); - assertNotNull(sheet.getRow(2)); - assertEquals(2, sheet.getLastRowNum()); - assertEquals("new", sheet.getRow(2).getCell(0).getStringCellValue()); - } - @Test public void testSheetWithOnlyEmptyRows() { OdsWorkbook workbook = new OdsWorkbook(); @@ -418,50 +404,4 @@ public void testSheetWithOnlyEmptyRows() { assertNull(sheet.getRow(0)); assertFalse(sheet.iterator().hasNext()); } - - @Test - public void testLeadingEmptyRowsAreNotRows() { - OdsWorkbook workbook = new OdsWorkbook(); - Sheet sheet = workbook.createSheet("Leading"); - for (int i = 0; i < 4; i++) { - sheet.createRow(i); - } - sheet.getRow(2).createCell(0).setCellValue("header"); - sheet.getRow(3).createCell(0).setCellValue("data"); - sheet.removeRow(sheet.getRow(0)); - sheet.removeRow(sheet.getRow(1)); - assertEquals(2, sheet.getFirstRowNum()); - assertEquals(3, sheet.getLastRowNum()); - assertNull(sheet.getRow(0)); - assertNull(sheet.getRow(1)); - sheet.removeRow(sheet.getRow(2)); - assertEquals(3, sheet.getFirstRowNum()); - } - - @Test - public void testRowBoundsAfterRemovingRows() { - OdsWorkbook workbook = new OdsWorkbook(); - Sheet sheet = workbook.createSheet("Removed"); - sheet.createRow(0).createCell(0).setCellValue("header"); - sheet.createRow(1).createCell(0).setCellValue("data"); - assertEquals(1, sheet.getLastRowNum()); - sheet.removeRow(sheet.getRow(1)); - assertEquals(0, sheet.getLastRowNum()); - sheet.removeRow(sheet.getRow(0)); - assertEquals(-1, sheet.getFirstRowNum()); - assertEquals(-1, sheet.getLastRowNum()); - } - - @Test - public void testRowsBetweenContentAndCreatedRowExist() { - OdsWorkbook workbook = new OdsWorkbook(); - Sheet sheet = workbook.createSheet("Gap"); - sheet.createRow(0).createCell(0).setCellValue("header"); - ((OdsSheet) sheet).getSodsSheet().appendRows(4); - sheet.createRow(4).createCell(0).setCellValue("data"); - assertEquals(4, sheet.getLastRowNum()); - for (int i = 0; i <= 4; i++) { - assertNotNull("row " + i, sheet.getRow(i)); - } - } } diff --git a/src/test/java/org/spdx/spreadsheetstore/ods/RowApiParityTest.java b/src/test/java/org/spdx/spreadsheetstore/ods/RowApiParityTest.java index 0fa910b..79cf269 100644 --- a/src/test/java/org/spdx/spreadsheetstore/ods/RowApiParityTest.java +++ b/src/test/java/org/spdx/spreadsheetstore/ods/RowApiParityTest.java @@ -6,9 +6,6 @@ */ package org.spdx.spreadsheetstore.ods; -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.InputStream; import java.util.function.Supplier; import org.apache.poi.ss.usermodel.CellStyle; @@ -16,7 +13,6 @@ import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; -import org.apache.poi.ss.usermodel.WorkbookFactory; import org.junit.Test; import org.spdx.spreadsheetstore.SpreadsheetTestUtils; @@ -67,33 +63,9 @@ private static void assertParity(Layout layout) { } } - /** Builds the layout, writes and reloads the workbook, applies the change, then asserts as {@link #assertParity}. */ - private static void assertParityAfterReload(Layout layout, Layout change) { - String expected = null; - for (Supplier factory : SpreadsheetTestUtils.WORKBOOK_FACTORIES) { - try (Workbook written = factory.get()) { - layout.build(written, written.createSheet("S")); - ByteArrayOutputStream out = new ByteArrayOutputStream(); - written.write(out); - InputStream in = new ByteArrayInputStream(out.toByteArray()); - try (Workbook workbook = written instanceof OdsWorkbook ? new OdsWorkbook(in) : WorkbookFactory.create(in)) { - Sheet sheet = workbook.getSheet("S"); - change.build(workbook, sheet); - String actual = snapshot(sheet); - if (expected == null) { - expected = actual; - } - assertEquals(workbook.getClass().getSimpleName(), expected, actual); - } - } catch (java.io.IOException e) { - throw new AssertionError(e); - } - } - } - private static void content(Sheet sheet, int row, int col) { Row r = sheet.getRow(row) != null ? sheet.getRow(row) : sheet.createRow(row); - r.createCell(col).setCellValue(row + ":" + col); // Distinct values: SODS stores identical trailing rows as one repeated row, and writing to the last one changes all of them + r.createCell(col).setCellValue("x"); } @Test @@ -110,70 +82,6 @@ public void emptySheet() { assertParity((wb, sheet) -> { }); } - @Test - public void emptyRowsAfterDataRemoved() { - assertParity((wb, sheet) -> { - for (int i = 0; i < 5; i++) { - sheet.createRow(i); - } - content(sheet, 0, 0); - content(sheet, 1, 0); - for (int i = 2; i < 5; i++) { - sheet.removeRow(sheet.getRow(i)); - } - }); - } - - @Test - public void emptyRowsBeforeDataRemoved() { - assertParity((wb, sheet) -> { - for (int i = 0; i < 4; i++) { - sheet.createRow(i); - } - content(sheet, 2, 0); - content(sheet, 3, 0); - sheet.removeRow(sheet.getRow(0)); - sheet.removeRow(sheet.getRow(1)); - }); - } - - @Test - public void firstAndLastRowRemoved() { - assertParity((wb, sheet) -> { - for (int i = 0; i < 4; i++) { - content(sheet, i, 0); - } - sheet.removeRow(sheet.getRow(0)); - sheet.removeRow(sheet.getRow(3)); - }); - } - - @Test - public void allRowsRemoved() { - assertParity((wb, sheet) -> { - content(sheet, 0, 0); - content(sheet, 1, 0); - sheet.removeRow(sheet.getRow(1)); - sheet.removeRow(sheet.getRow(0)); - }); - } - - @Test - public void loadedLastRowRemoved() { - assertParityAfterReload( - (wb, sheet) -> { - for (int i = 0; i < 4; i++) { - content(sheet, i, 0); - } - }, - (wb, sheet) -> { - Row last = sheet.getRow(3); - last.getCell(0); // OdsRow.clear only clears cells already read - sheet.removeRow(last); - sheet.getRow(3); // probe before bounds are read - }); - } - @Test public void cellBounds() { assertParity((wb, sheet) -> { From accf6a81ba9f7af75865e9b34a48f16e34c975ac Mon Sep 17 00:00:00 2001 From: Arthit Suriyawongkul Date: Sat, 19 Sep 2026 01:01:44 +0100 Subject: [PATCH 5/5] Update testStyledEmptyCellsDoNotCountAsContent Signed-off-by: Arthit Suriyawongkul --- .../spreadsheetstore/OdsEmptyRowsTest.java | 2 +- .../spreadsheetstore/ods/OdsWorkbookTest.java | 25 +++++++++++-------- 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/src/test/java/org/spdx/spreadsheetstore/OdsEmptyRowsTest.java b/src/test/java/org/spdx/spreadsheetstore/OdsEmptyRowsTest.java index 10a2dec..723ca35 100644 --- a/src/test/java/org/spdx/spreadsheetstore/OdsEmptyRowsTest.java +++ b/src/test/java/org/spdx/spreadsheetstore/OdsEmptyRowsTest.java @@ -40,7 +40,7 @@ /** * ODS files from LibreOffice end every sheet with empty rows. * Those rows must be ignored: content matches the XLSX example. - * Fixtures: TestFiles/ods, from TestFiles/generate_ods_fixtures.py. + * Fixtures: TestFiles/ods. */ public class OdsEmptyRowsTest { diff --git a/src/test/java/org/spdx/spreadsheetstore/ods/OdsWorkbookTest.java b/src/test/java/org/spdx/spreadsheetstore/ods/OdsWorkbookTest.java index 2e753c5..10e2a90 100644 --- a/src/test/java/org/spdx/spreadsheetstore/ods/OdsWorkbookTest.java +++ b/src/test/java/org/spdx/spreadsheetstore/ods/OdsWorkbookTest.java @@ -372,15 +372,15 @@ public void testStyledEmptyCellsDoNotCountAsContent() { OdsWorkbook workbook = new OdsWorkbook(); Sheet sheet = workbook.createSheet("Styled"); sheet.createRow(0).createCell(0).setCellValue("header"); - Row styled = sheet.createRow(1); - Cell blank = styled.createCell(0); - blank.setCellStyle(workbook.createCellStyle()); - blank.setBlank(); - ((OdsSheet) sheet).getSodsSheet().appendRows(2); - // created row exists; untouched rows after it do not - assertNotNull(sheet.getRow(1)); + com.github.miachm.sods.Sheet sodsSheet = ((OdsSheet) sheet).getSodsSheet(); + sodsSheet.appendRows(2); + com.github.miachm.sods.Style bold = new com.github.miachm.sods.Style(); + bold.setBold(true); + sodsSheet.getRange(1, 0, 2, 1).setStyle(bold); // styled blank cells after the data + assertTrue(sodsSheet.getRange(2, 0).getStyle().isBold()); + assertEquals(0, sheet.getLastRowNum()); + assertNull(sheet.getRow(1)); assertNull(sheet.getRow(2)); - assertNull(sheet.getRow(3)); } @Test @@ -388,10 +388,15 @@ public void testEmptyRowBetweenDataIsKept() { OdsWorkbook workbook = new OdsWorkbook(); Sheet sheet = workbook.createSheet("Interior"); sheet.createRow(0).createCell(0).setCellValue("first"); + // Row 3 inside the appended block: SODS writes to the last row of a trailing block hit the whole block + ((OdsSheet) sheet).getSodsSheet().appendRows(4); sheet.createRow(3).createCell(0).setCellValue("last"); assertEquals(3, sheet.getLastRowNum()); - assertNotNull(sheet.getRow(1)); - assertNotNull(sheet.getRow(2)); + for (int i = 1; i <= 2; i++) { + assertNotNull("row " + i, sheet.getRow(i)); + assertNull("row " + i, sheet.getRow(i).getCell(0)); + } + assertNull(sheet.getRow(4)); } @Test