From 2c4134e89bad67a44f63f61e686dc081ed26f0db Mon Sep 17 00:00:00 2001 From: Nick Burch Date: Fri, 4 Mar 2011 21:09:02 +0000 Subject: [PATCH] Add a unit test for bug #50833 git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1078135 13f79535-47bb-0310-9956-ffa450edef68 --- .../apache/poi/hssf/usermodel/TestBugs.java | 40 +++++++++++++++++- test-data/spreadsheet/50833.xls | Bin 0 -> 23552 bytes 2 files changed, 38 insertions(+), 2 deletions(-) create mode 100644 test-data/spreadsheet/50833.xls diff --git a/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java b/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java index ae54b4aaa..2725528e8 100644 --- a/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java +++ b/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java @@ -22,7 +22,10 @@ import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; -import java.util.*; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Iterator; +import java.util.List; import junit.framework.AssertionFailedError; @@ -43,7 +46,6 @@ import org.apache.poi.ss.formula.ptg.Ptg; import org.apache.poi.ss.usermodel.BaseTestBugzillaIssues; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellStyle; -import org.apache.poi.ss.usermodel.DataFormatter; import org.apache.poi.ss.usermodel.Name; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; @@ -1983,4 +1985,38 @@ if(1==2) { assertEquals("35", df.formatCellValue(r18.getCell(2))); assertEquals("123", df.formatCellValue(r18.getCell(3))); } + + /** + * A protected sheet with comments, when written out by + * POI, ends up upsetting excel. + * TODO Identify the cause and add extra asserts for + * the bit excel cares about + */ + public void test50833() throws Exception { + HSSFWorkbook wb = openSample("50833.xls"); + HSSFSheet s = wb.getSheetAt(0); + assertEquals("Sheet1", s.getSheetName()); + assertEquals(false, s.getProtect()); + + HSSFCell c = s.getRow(0).getCell(0); + assertEquals("test cell value", c.getRichStringCellValue().getString()); + + HSSFComment cmt = c.getCellComment(); + assertNotNull(cmt); + assertEquals("Robert Lawrence", cmt.getAuthor()); + assertEquals("Robert Lawrence:\ntest comment", cmt.getString().getString()); + + // Reload + wb = writeOutAndReadBack(wb); + s = wb.getSheetAt(0); + c = s.getRow(0).getCell(0); + + // Re-check the comment + cmt = c.getCellComment(); + assertNotNull(cmt); + assertEquals("Robert Lawrence", cmt.getAuthor()); + assertEquals("Robert Lawrence:\ntest comment", cmt.getString().getString()); + + // TODO Identify what excel doesn't like, and check for that + } } diff --git a/test-data/spreadsheet/50833.xls b/test-data/spreadsheet/50833.xls new file mode 100644 index 0000000000000000000000000000000000000000..00227789e70395859cb9fcf5069d48efec2d2216 GIT binary patch literal 23552 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