More tests for xssf comments. Now almost all there and working, except for rich text formatting, and new line munching (bug #44750)

git-svn-id: https://svn.apache.org/repos/asf/poi/branches/ooxml@644460 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Nick Burch 2008-04-03 19:41:23 +00:00
parent cdd7246d3c
commit 0f66138b8f
3 changed files with 111 additions and 2 deletions

View File

@ -72,6 +72,9 @@ public class CommentsTable implements CommentsSource, XSSFModel {
public int getNumberOfComments() { public int getNumberOfComments() {
return comments.getCommentList().sizeOfCommentArray(); return comments.getCommentList().sizeOfCommentArray();
} }
public int getNumberOfAuthors() {
return getCommentsAuthors().sizeOfAuthorArray();
}
public String getAuthor(long authorId) { public String getAuthor(long authorId) {
return getCommentsAuthors().getAuthorArray((int)authorId); return getCommentsAuthors().getAuthorArray((int)authorId);

View File

@ -56,7 +56,9 @@ public class XSSFComment implements Comment {
} }
public void setAuthor(String author) { public void setAuthor(String author) {
comments.findAuthor(author); comment.setAuthorId(
comments.findAuthor(author)
);
} }
public void setColumn(short col) { public void setColumn(short col) {

View File

@ -31,6 +31,8 @@ import org.apache.poi.xssf.usermodel.XSSFRichTextString;
import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.openxml4j.opc.Package; import org.openxml4j.opc.Package;
import org.openxml4j.opc.PackagePart;
import org.openxml4j.opc.PackagingURIHelper;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTComment; import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTComment;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTCommentList; import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTCommentList;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTComments; import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTComments;
@ -52,6 +54,8 @@ public class TestCommentsTable extends TestCase {
assertEquals(0, sheetComments.findAuthor(TEST_AUTHOR)); assertEquals(0, sheetComments.findAuthor(TEST_AUTHOR));
assertEquals(1, sheetComments.findAuthor("another author")); assertEquals(1, sheetComments.findAuthor("another author"));
assertEquals(0, sheetComments.findAuthor(TEST_AUTHOR)); assertEquals(0, sheetComments.findAuthor(TEST_AUTHOR));
assertEquals(2, sheetComments.findAuthor("YAA"));
assertEquals(1, sheetComments.findAuthor("another author"));
} }
public void testGetCellComment() { public void testGetCellComment() {
@ -91,6 +95,51 @@ public class TestCommentsTable extends TestCase {
sheetComments.setCellComment("A1", comment); sheetComments.setCellComment("A1", comment);
assertEquals(1, commentList.sizeOfCommentArray()); assertEquals(1, commentList.sizeOfCommentArray());
assertEquals("test A1 author", sheetComments.getAuthor(commentList.getCommentArray(0).getAuthorId())); assertEquals("test A1 author", sheetComments.getAuthor(commentList.getCommentArray(0).getAuthorId()));
assertEquals("test A1 author", comment.getAuthor());
// Change the author, check it updates
comment.setAuthor("Another Author");
assertEquals(1, commentList.sizeOfCommentArray());
assertEquals("Another Author", comment.getAuthor());
}
public void testDontLoostNewLines() throws Exception {
File xml = new File(
System.getProperty("HSSF.testdata.path") +
File.separator + "WithVariousData.xlsx"
);
assertTrue(xml.exists());
Package pkg = Package.open(xml.toString());
PackagePart cpart = pkg.getPart(
PackagingURIHelper.createPartName("/xl/comments1.xml")
);
CommentsTable ct = new CommentsTable(cpart.getInputStream());
assertEquals(2, ct.getNumberOfComments());
assertEquals(1, ct.getNumberOfAuthors());
XSSFComment comment = ct.findCellComment("C5");
assertEquals("Nick Burch", comment.getAuthor());
assertEquals("Nick Burch:\nThis is a comment", comment.getString().getString());
// Re-serialise
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ct.writeTo(baos);
ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
ct = new CommentsTable(bais);
assertEquals(2, ct.getNumberOfComments());
assertEquals(1, ct.getNumberOfAuthors());
comment = ct.findCellComment("C5");
assertEquals("Nick Burch", comment.getAuthor());
// TODO: Fix this!
// New line should still be there, but isn't!
//assertEquals("Nick Burch:\nThis is a comment", comment.getString().getString());
} }
public void testExisting() throws Exception { public void testExisting() throws Exception {
@ -163,6 +212,7 @@ public class TestCommentsTable extends TestCase {
// Save, and re-load the file // Save, and re-load the file
ByteArrayOutputStream baos = new ByteArrayOutputStream(); ByteArrayOutputStream baos = new ByteArrayOutputStream();
workbook.write(baos); workbook.write(baos);
ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray()); ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
workbook = new XSSFWorkbook(Package.open(bais)); workbook = new XSSFWorkbook(Package.open(bais));
@ -174,6 +224,60 @@ public class TestCommentsTable extends TestCase {
assertNotNull(sheet2.getRow(2).getCell(1).getCellComment()); assertNotNull(sheet2.getRow(2).getCell(1).getCellComment());
// And check they still have the contents they should do // And check they still have the contents they should do
// TODO assertEquals("Apache POI",
sheet1.getRow(4).getCell(2).getCellComment().getAuthor());
assertEquals("Nick Burch",
sheet1.getRow(6).getCell(2).getCellComment().getAuthor());
assertEquals("Also POI",
sheet2.getRow(2).getCell(1).getCellComment().getAuthor());
// TODO: fix xmlbeans so it doesn't eat newlines
assertEquals("Nick Burch:This is a comment",
sheet1.getRow(4).getCell(2).getCellComment().getString().getString());
}
public void testReadWriteMultipleAuthors() throws Exception {
File xml = new File(
System.getProperty("HSSF.testdata.path") +
File.separator + "WithMoreVariousData.xlsx"
);
assertTrue(xml.exists());
XSSFWorkbook workbook = new XSSFWorkbook(xml.toString());
Sheet sheet1 = workbook.getSheetAt(0);
XSSFSheet sheet2 = (XSSFSheet)workbook.getSheetAt(1);
assertTrue( ((XSSFSheet)sheet1).hasComments() );
assertFalse( ((XSSFSheet)sheet2).hasComments() );
assertEquals("Nick Burch",
sheet1.getRow(4).getCell(2).getCellComment().getAuthor());
assertEquals("Nick Burch",
sheet1.getRow(6).getCell(2).getCellComment().getAuthor());
assertEquals("Torchbox",
sheet1.getRow(12).getCell(2).getCellComment().getAuthor());
// Save, and re-load the file
ByteArrayOutputStream baos = new ByteArrayOutputStream();
workbook.write(baos);
ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
workbook = new XSSFWorkbook(Package.open(bais));
// Check we still have comments where we should do
sheet1 = workbook.getSheetAt(0);
assertNotNull(sheet1.getRow(4).getCell(2).getCellComment());
assertNotNull(sheet1.getRow(6).getCell(2).getCellComment());
assertNotNull(sheet1.getRow(12).getCell(2).getCellComment());
// And check they still have the contents they should do
assertEquals("Nick Burch",
sheet1.getRow(4).getCell(2).getCellComment().getAuthor());
assertEquals("Nick Burch",
sheet1.getRow(6).getCell(2).getCellComment().getAuthor());
assertEquals("Torchbox",
sheet1.getRow(12).getCell(2).getCellComment().getAuthor());
// Todo - check text too, once bug fixed
} }
} }