From e270c4ca5cfbb86ab05bd7dba41bf375b08cb711 Mon Sep 17 00:00:00 2001 From: Dominik Stadler Date: Mon, 6 Oct 2014 13:39:35 +0000 Subject: [PATCH] Revert parts of an inadvertent previous checkin, keep build.xml and @Override changes git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1629653 13f79535-47bb-0310-9956-ffa450edef68 --- .../poi/hssf/usermodel/HSSFComment.java | 3 - .../poi/xssf/streaming/TestSXSSFWorkbook.java | 41 +--- .../poi/xssf/usermodel/TestXSSFRow.java | 50 ----- .../poi/xssf/usermodel/TestXSSFWorkbook.java | 36 ++-- .../org/apache/poi/POIDataSamples.java | 6 +- .../poi/hssf/usermodel/TestCellStyle.java | 180 ++++++------------ .../poi/hssf/usermodel/TestComment.java | 161 ++-------------- .../poi/hssf/usermodel/TestHSSFWorkbook.java | 79 +------- test-data/spreadsheet/SampleSS.xlsx | Bin 7146 -> 9112 bytes 9 files changed, 105 insertions(+), 451 deletions(-) diff --git a/src/java/org/apache/poi/hssf/usermodel/HSSFComment.java b/src/java/org/apache/poi/hssf/usermodel/HSSFComment.java index db1b4b867d..8b4350893c 100644 --- a/src/java/org/apache/poi/hssf/usermodel/HSSFComment.java +++ b/src/java/org/apache/poi/hssf/usermodel/HSSFComment.java @@ -132,9 +132,6 @@ public class HSSFComment extends HSSFTextbox implements Comment { CommonObjectDataSubRecord cod = (CommonObjectDataSubRecord) getObjRecord().getSubRecords().get(0); cod.setObjectId((short) (shapeId % 1024)); _note.setShapeId(shapeId % 1024); - /* This breaks TestCloneSheets! - * cod.setObjectId(shapeId); - _note.setShapeId(shapeId); */ } /** diff --git a/src/ooxml/testcases/org/apache/poi/xssf/streaming/TestSXSSFWorkbook.java b/src/ooxml/testcases/org/apache/poi/xssf/streaming/TestSXSSFWorkbook.java index e29dded8eb..ce217e2344 100644 --- a/src/ooxml/testcases/org/apache/poi/xssf/streaming/TestSXSSFWorkbook.java +++ b/src/ooxml/testcases/org/apache/poi/xssf/streaming/TestSXSSFWorkbook.java @@ -19,7 +19,11 @@ package org.apache.poi.xssf.streaming; -import static org.junit.Assert.*; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; import java.io.File; import java.io.FileOutputStream; @@ -234,6 +238,7 @@ public final class TestSXSSFWorkbook extends BaseTestWorkbook { assertEquals("value?", cell.getStringCellValue()); assertTrue(wb.dispose()); + } @Test @@ -310,18 +315,16 @@ public final class TestSXSSFWorkbook extends BaseTestWorkbook { } @Test - public void workbookDispose() throws IOException + public void workbookDispose() { SXSSFWorkbook wb = new SXSSFWorkbook(); // the underlying writer is SheetDataWriter assertWorkbookDispose(wb); - wb.close(); - + wb = new SXSSFWorkbook(); wb.setCompressTempFiles(true); // the underlying writer is GZIPSheetDataWriter assertWorkbookDispose(wb); - wb.close(); } @@ -331,12 +334,9 @@ public final class TestSXSSFWorkbook extends BaseTestWorkbook { Workbook wb = new SXSSFWorkbook(10); populateWorkbook(wb); saveTwice(wb); - wb.close(); - wb = new XSSFWorkbook(); populateWorkbook(wb); saveTwice(wb); - wb.close(); } // Crashes the JVM because of documented JVM behavior with concurrent writing/reading of zip-files @@ -371,7 +371,6 @@ public final class TestSXSSFWorkbook extends BaseTestWorkbook { } finally { assertTrue(wb.dispose()); } - wb.close(); } out.delete(); } @@ -405,30 +404,6 @@ public final class TestSXSSFWorkbook extends BaseTestWorkbook { private static class NullOutputStream extends OutputStream { @Override public void write(int b) throws IOException { - // nothing to do here } } - - @Test - public void testBug54523() throws IOException { - SXSSFWorkbook wb = new SXSSFWorkbook(100); - Sheet sh = wb.createSheet(); - - for (int i = 0; i < 81000; i++) { - Row row = sh.createRow(i); - for (int j = 0; j < 1000; j++) { - Cell cell = row.createCell(j); - cell.setCellValue("dddd"); - } - if (i % 100 == 0){ - System.out.println("x - " + i); - } - } - - FileOutputStream out = new FileOutputStream("C:\\temp\\54523_large.xlsx"); - wb.write(out); - out.close(); - wb.dispose(); - wb.close(); - } } diff --git a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFRow.java b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFRow.java index fc366900ab..81f9ce8119 100644 --- a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFRow.java +++ b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFRow.java @@ -17,15 +17,9 @@ package org.apache.poi.xssf.usermodel; -import java.util.ArrayList; -import java.util.List; - import org.apache.poi.ss.SpreadsheetVersion; import org.apache.poi.ss.usermodel.BaseTestRow; -import org.apache.poi.ss.usermodel.Cell; -import org.apache.poi.ss.usermodel.Row; import org.apache.poi.xssf.XSSFITestDataProvider; -import org.apache.poi.xssf.XSSFTestDataSamples; /** * Tests for XSSFRow @@ -43,48 +37,4 @@ public final class TestXSSFRow extends BaseTestRow { public void testCellBounds() { baseTestCellBounds(SpreadsheetVersion.EXCEL2007.getLastColumnIndex()); } - - public void test56490() { - XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("56490.xlsx"); - XSSFSheet sheet = wb.getSheetAt(0); - - String columnWanted = "Link"; - Integer columnNo = null; - List cells = new ArrayList(); - - // TODO: change this!! - assertEquals(-1, sheet.getFirstRowNum()); - assertEquals(-1, sheet.getLastRowNum()); - - Row firstRow = sheet.getRow(-1); - assertNotNull(firstRow); - assertNotNull(firstRow.iterator()); - - for(Row row : sheet) { - for(Cell cell : row) { - System.out.println("Cell in Row: " + row.getRowNum() + ": " + cell.toString()); - } - } - - for (Cell cell : firstRow) { - if (cell.getStringCellValue().equals(columnWanted)) { - columnNo = cell.getColumnIndex(); - } - } - - if (columnNo != null) { - for (Row row : sheet) { - Cell c = row.getCell(columnNo); - if (c == null || c.getCellType() == Cell.CELL_TYPE_BLANK) { - } else { - cells.add(c); - } - - } - - } else { - System.out.println("could not find column" + columnWanted - + "in first row"); - } - } } diff --git a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFWorkbook.java b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFWorkbook.java index 543f14eedc..fd41ac6721 100644 --- a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFWorkbook.java +++ b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFWorkbook.java @@ -17,7 +17,13 @@ package org.apache.poi.xssf.usermodel; -import static org.junit.Assert.*; +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.assertSame; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; import java.io.ByteArrayOutputStream; import java.io.File; @@ -36,7 +42,17 @@ import org.apache.poi.openxml4j.opc.PackagePartName; import org.apache.poi.openxml4j.opc.PackagingURIHelper; import org.apache.poi.openxml4j.opc.internal.MemoryPackagePart; import org.apache.poi.openxml4j.opc.internal.PackagePropertiesPart; -import org.apache.poi.ss.usermodel.*; + +import org.apache.poi.ss.usermodel.BaseTestWorkbook; +import org.apache.poi.ss.usermodel.Cell; +import org.apache.poi.ss.usermodel.CellStyle; +import org.apache.poi.ss.usermodel.Font; +import org.apache.poi.ss.usermodel.IndexedColors; +import org.apache.poi.ss.usermodel.RichTextString; +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.apache.poi.ss.util.AreaReference; import org.apache.poi.ss.util.CellReference; import org.apache.poi.util.IOUtils; @@ -752,20 +768,4 @@ public final class TestXSSFWorkbook extends BaseTestWorkbook { setPivotData(wb2); assertTrue(wb2.getPivotTables().size() == 2); } - - @Test - public void testBug55644() throws IOException { - XSSFWorkbook wb = new XSSFWorkbook(); - XSSFSheet sheet = wb.createSheet("students"); - XSSFRow row = sheet.createRow(1); - XSSFCell cell = row.createCell(1); - cell.setCellValue("sandeepzzzzzzzzzzzzzzzzzzzzzzzzz"); - sheet.autoSizeColumn(1); - - FileOutputStream fileOut = new FileOutputStream("C:\\temp\\55644.xlsx"); - wb.write(fileOut); - fileOut.close(); - - wb.close(); - } } diff --git a/src/testcases/org/apache/poi/POIDataSamples.java b/src/testcases/org/apache/poi/POIDataSamples.java index 3fb82b90a6..a62e664e1e 100644 --- a/src/testcases/org/apache/poi/POIDataSamples.java +++ b/src/testcases/org/apache/poi/POIDataSamples.java @@ -196,11 +196,9 @@ public final class POIDataSamples { _sampleDataIsAvaliableOnClassPath = true; return; } - - dataDirName = "test-data"; - /*throw new RuntimeException("Must set system property '" + - TEST_PROPERTY + "' before running tests");*/ + throw new RuntimeException("Must set system property '" + + TEST_PROPERTY + "' before running tests"); } File dataDir = new File(dataDirName, _moduleDir); if (!dataDir.exists()) { diff --git a/src/testcases/org/apache/poi/hssf/usermodel/TestCellStyle.java b/src/testcases/org/apache/poi/hssf/usermodel/TestCellStyle.java index 93bdcd37bc..bd874629f8 100644 --- a/src/testcases/org/apache/poi/hssf/usermodel/TestCellStyle.java +++ b/src/testcases/org/apache/poi/hssf/usermodel/TestCellStyle.java @@ -26,7 +26,6 @@ import java.util.Date; import junit.framework.TestCase; import org.apache.poi.hssf.HSSFTestDataSamples; -import org.apache.poi.hssf.dev.BiffViewer; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellStyle; import org.apache.poi.ss.usermodel.Row; @@ -127,7 +126,7 @@ public final class TestCellStyle extends TestCase { assertEquals("LAST ROW ", 0, s.getLastRowNum()); assertEquals("FIRST ROW ", 0, s.getFirstRowNum()); } - + public void testHashEquals() { HSSFWorkbook wb = new HSSFWorkbook(); HSSFSheet s = wb.createSheet(); @@ -136,21 +135,21 @@ public final class TestCellStyle extends TestCase { HSSFRow row = s.createRow(0); HSSFCell cell1 = row.createCell(1); HSSFCell cell2 = row.createCell(2); - + cs1.setDataFormat(HSSFDataFormat.getBuiltinFormat("m/d/yy")); cs2.setDataFormat(HSSFDataFormat.getBuiltinFormat("m/dd/yy")); - + cell1.setCellStyle(cs1); cell1.setCellValue(new Date()); - + cell2.setCellStyle(cs2); cell2.setCellValue(new Date()); - + assertEquals(cs1.hashCode(), cs1.hashCode()); assertEquals(cs2.hashCode(), cs2.hashCode()); assertTrue(cs1.equals(cs1)); assertTrue(cs2.equals(cs2)); - + // Change cs1, hash will alter int hash1 = cs1.hashCode(); cs1.setDataFormat(HSSFDataFormat.getBuiltinFormat("m/dd/yy")); @@ -211,7 +210,7 @@ public final class TestCellStyle extends TestCase { assertEquals("LAST ROW == 99", 99, s.getLastRowNum()); assertEquals("FIRST ROW == 0", 0, s.getFirstRowNum()); } - + /** * Cloning one HSSFCellStyle onto Another, same * HSSFWorkbook @@ -221,63 +220,63 @@ public final class TestCellStyle extends TestCase { HSSFFont fnt = wb.createFont(); fnt.setFontName("TestingFont"); assertEquals(5, wb.getNumberOfFonts()); - + HSSFCellStyle orig = wb.createCellStyle(); orig.setAlignment(HSSFCellStyle.ALIGN_RIGHT); orig.setFont(fnt); orig.setDataFormat((short)18); - + assertTrue(HSSFCellStyle.ALIGN_RIGHT == orig.getAlignment()); assertTrue(fnt == orig.getFont(wb)); assertTrue(18 == orig.getDataFormat()); - + HSSFCellStyle clone = wb.createCellStyle(); assertFalse(HSSFCellStyle.ALIGN_RIGHT == clone.getAlignment()); assertFalse(fnt == clone.getFont(wb)); assertFalse(18 == clone.getDataFormat()); - + clone.cloneStyleFrom(orig); assertTrue(HSSFCellStyle.ALIGN_RIGHT == clone.getAlignment()); assertTrue(fnt == clone.getFont(wb)); assertTrue(18 == clone.getDataFormat()); assertEquals(5, wb.getNumberOfFonts()); } - + /** * Cloning one HSSFCellStyle onto Another, across * two different HSSFWorkbooks */ public void testCloneStyleDiffWB() { HSSFWorkbook wbOrig = new HSSFWorkbook(); - + HSSFFont fnt = wbOrig.createFont(); fnt.setFontName("TestingFont"); assertEquals(5, wbOrig.getNumberOfFonts()); - + HSSFDataFormat fmt = wbOrig.createDataFormat(); fmt.getFormat("MadeUpOne"); fmt.getFormat("MadeUpTwo"); - + HSSFCellStyle orig = wbOrig.createCellStyle(); orig.setAlignment(HSSFCellStyle.ALIGN_RIGHT); orig.setFont(fnt); orig.setDataFormat(fmt.getFormat("Test##")); - + assertTrue(HSSFCellStyle.ALIGN_RIGHT == orig.getAlignment()); assertTrue(fnt == orig.getFont(wbOrig)); assertTrue(fmt.getFormat("Test##") == orig.getDataFormat()); - + // Now a style on another workbook HSSFWorkbook wbClone = new HSSFWorkbook(); assertEquals(4, wbClone.getNumberOfFonts()); HSSFDataFormat fmtClone = wbClone.createDataFormat(); - + HSSFCellStyle clone = wbClone.createCellStyle(); assertEquals(4, wbClone.getNumberOfFonts()); - + assertFalse(HSSFCellStyle.ALIGN_RIGHT == clone.getAlignment()); assertFalse("TestingFont" == clone.getFont(wbClone).getFontName()); - + clone.cloneStyleFrom(orig); assertTrue(HSSFCellStyle.ALIGN_RIGHT == clone.getAlignment()); assertTrue("TestingFont" == clone.getFont(wbClone).getFontName()); @@ -285,47 +284,47 @@ public final class TestCellStyle extends TestCase { assertFalse(fmtClone.getFormat("Test##") == fmt.getFormat("Test##")); assertEquals(5, wbClone.getNumberOfFonts()); } - + public void testStyleNames() { HSSFWorkbook wb = openSample("WithExtendedStyles.xls"); HSSFSheet s = wb.getSheetAt(0); HSSFCell c1 = s.getRow(0).getCell(0); HSSFCell c2 = s.getRow(1).getCell(0); HSSFCell c3 = s.getRow(2).getCell(0); - + HSSFCellStyle cs1 = c1.getCellStyle(); HSSFCellStyle cs2 = c2.getCellStyle(); HSSFCellStyle cs3 = c3.getCellStyle(); - + assertNotNull(cs1); assertNotNull(cs2); assertNotNull(cs3); - + // Check we got the styles we'd expect assertEquals(10, cs1.getFont(wb).getFontHeightInPoints()); assertEquals(9, cs2.getFont(wb).getFontHeightInPoints()); assertEquals(12, cs3.getFont(wb).getFontHeightInPoints()); - + assertEquals(15, cs1.getIndex()); assertEquals(23, cs2.getIndex()); assertEquals(24, cs3.getIndex()); - + assertNull(cs1.getParentStyle()); assertNotNull(cs2.getParentStyle()); assertNotNull(cs3.getParentStyle()); - + assertEquals(21, cs2.getParentStyle().getIndex()); assertEquals(22, cs3.getParentStyle().getIndex()); - - // Now check we can get style records for + + // Now check we can get style records for // the parent ones assertNull(wb.getWorkbook().getStyleRecord(15)); assertNull(wb.getWorkbook().getStyleRecord(23)); assertNull(wb.getWorkbook().getStyleRecord(24)); - + assertNotNull(wb.getWorkbook().getStyleRecord(21)); assertNotNull(wb.getWorkbook().getStyleRecord(22)); - + // Now check the style names assertEquals(null, cs1.getUserStyleName()); assertEquals(null, cs2.getUserStyleName()); @@ -338,112 +337,47 @@ public final class TestCellStyle extends TestCase { c4.setCellStyle(cs2); assertEquals("style1", c4.getCellStyle().getParentStyle().getUserStyleName()); } - + public void testGetSetBorderHair() { HSSFWorkbook wb = openSample("55341_CellStyleBorder.xls"); HSSFSheet s = wb.getSheetAt(0); HSSFCellStyle cs; - cs = s.getRow(0).getCell(0).getCellStyle(); - assertEquals(CellStyle.BORDER_HAIR, cs.getBorderRight()); + cs = s.getRow(0).getCell(0).getCellStyle(); + assertEquals(CellStyle.BORDER_HAIR, cs.getBorderRight()); - cs = s.getRow(1).getCell(1).getCellStyle(); - assertEquals(CellStyle.BORDER_DOTTED, cs.getBorderRight()); + cs = s.getRow(1).getCell(1).getCellStyle(); + assertEquals(CellStyle.BORDER_DOTTED, cs.getBorderRight()); - cs = s.getRow(2).getCell(2).getCellStyle(); - assertEquals(CellStyle.BORDER_DASH_DOT_DOT, cs.getBorderRight()); + cs = s.getRow(2).getCell(2).getCellStyle(); + assertEquals(CellStyle.BORDER_DASH_DOT_DOT, cs.getBorderRight()); - cs = s.getRow(3).getCell(3).getCellStyle(); - assertEquals(CellStyle.BORDER_DASHED, cs.getBorderRight()); + cs = s.getRow(3).getCell(3).getCellStyle(); + assertEquals(CellStyle.BORDER_DASHED, cs.getBorderRight()); - cs = s.getRow(4).getCell(4).getCellStyle(); - assertEquals(CellStyle.BORDER_THIN, cs.getBorderRight()); + cs = s.getRow(4).getCell(4).getCellStyle(); + assertEquals(CellStyle.BORDER_THIN, cs.getBorderRight()); - cs = s.getRow(5).getCell(5).getCellStyle(); - assertEquals(CellStyle.BORDER_MEDIUM_DASH_DOT_DOT, cs.getBorderRight()); + cs = s.getRow(5).getCell(5).getCellStyle(); + assertEquals(CellStyle.BORDER_MEDIUM_DASH_DOT_DOT, cs.getBorderRight()); - cs = s.getRow(6).getCell(6).getCellStyle(); - assertEquals(CellStyle.BORDER_SLANTED_DASH_DOT, cs.getBorderRight()); + cs = s.getRow(6).getCell(6).getCellStyle(); + assertEquals(CellStyle.BORDER_SLANTED_DASH_DOT, cs.getBorderRight()); - cs = s.getRow(7).getCell(7).getCellStyle(); - assertEquals(CellStyle.BORDER_MEDIUM_DASH_DOT, cs.getBorderRight()); + cs = s.getRow(7).getCell(7).getCellStyle(); + assertEquals(CellStyle.BORDER_MEDIUM_DASH_DOT, cs.getBorderRight()); - cs = s.getRow(8).getCell(8).getCellStyle(); - assertEquals(CellStyle.BORDER_MEDIUM_DASHED, cs.getBorderRight()); + cs = s.getRow(8).getCell(8).getCellStyle(); + assertEquals(CellStyle.BORDER_MEDIUM_DASHED, cs.getBorderRight()); - cs = s.getRow(9).getCell(9).getCellStyle(); - assertEquals(CellStyle.BORDER_MEDIUM, cs.getBorderRight()); + cs = s.getRow(9).getCell(9).getCellStyle(); + assertEquals(CellStyle.BORDER_MEDIUM, cs.getBorderRight()); - cs = s.getRow(10).getCell(10).getCellStyle(); - assertEquals(CellStyle.BORDER_THICK, cs.getBorderRight()); + cs = s.getRow(10).getCell(10).getCellStyle(); + assertEquals(CellStyle.BORDER_THICK, cs.getBorderRight()); - cs = s.getRow(11).getCell(11).getCellStyle(); - assertEquals(CellStyle.BORDER_DOUBLE, cs.getBorderRight()); - } - - public void testBug54894() throws IOException { - HSSFWorkbook wb = new HSSFWorkbook(); - HSSFSheet sheet = wb.createSheet("new sheet"); - - // Create a row and put some cells in it. Rows are 0 based. - HSSFRow row = sheet.createRow(1); - - // Create a cell and put a value in it. - HSSFCell cell = row.createCell(1); - cell.setCellValue(4); - - CellStyle def = cell.getCellStyle(); - - String filenameB = "C:\\temp\\54894B.xls"; - FileOutputStream fileOut = new FileOutputStream(filenameB); - try { - wb.write(fileOut); - } finally { - fileOut.close(); - } - - // Style the cell with borders all around. - HSSFCellStyle style = wb.createCellStyle(); - style.cloneStyleFrom(def); - - String filenameM = "C:\\temp\\54894M.xls"; - fileOut = new FileOutputStream(filenameM); - try { - wb.write(fileOut); - } finally { - fileOut.close(); - } - - style.setBorderBottom(HSSFCellStyle.BORDER_THIN); - - cell.setCellStyle(style); - - String filenameM1 = "C:\\temp\\54894M1.xls"; - fileOut = new FileOutputStream(filenameM1); - try { - wb.write(fileOut); - } finally { - fileOut.close(); - } - - // Write the output to a file - String filename = "C:\\temp\\54894.xls"; - fileOut = new FileOutputStream(filename); - try { - wb.write(fileOut); - } finally { - fileOut.close(); - } - - /*Runtime.getRuntime().exec(new String[] {"cmd", "/c", "start", filenameB}); - Runtime.getRuntime().exec(new String[] {"cmd", "/c", "start", filenameM}); - Runtime.getRuntime().exec(new String[] {"cmd", "/c", "start", filenameM1}); - Runtime.getRuntime().exec(new String[] {"cmd", "/c", "start", filename});*/ - - System.out.println("testfile M"); - BiffViewer.main(new String[] {filenameM}); - System.out.println("testfile M1"); - BiffViewer.main(new String[] {filenameM1}); + cs = s.getRow(11).getCell(11).getCellStyle(); + assertEquals(CellStyle.BORDER_DOUBLE, cs.getBorderRight()); } public void testShrinkToFit() { @@ -515,7 +449,7 @@ public final class TestCellStyle extends TestCase { public Throwable getException() { return exception; } - } + }; public void test56563() throws Throwable { CellFormatBugExample threadA = new CellFormatBugExample("56563a.xls"); diff --git a/src/testcases/org/apache/poi/hssf/usermodel/TestComment.java b/src/testcases/org/apache/poi/hssf/usermodel/TestComment.java index 7db79d848b..cac444baef 100644 --- a/src/testcases/org/apache/poi/hssf/usermodel/TestComment.java +++ b/src/testcases/org/apache/poi/hssf/usermodel/TestComment.java @@ -17,37 +17,20 @@ package org.apache.poi.hssf.usermodel; -import static org.junit.Assert.assertArrayEquals; - -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.util.Arrays; - import junit.framework.TestCase; - +import org.apache.poi.ddf.EscherSpRecord; import org.apache.poi.hssf.HSSFTestDataSamples; import org.apache.poi.hssf.model.CommentShape; import org.apache.poi.hssf.model.HSSFTestModelHelper; -import org.apache.poi.hssf.record.CommonObjectDataSubRecord; -import org.apache.poi.hssf.record.EscherAggregate; -import org.apache.poi.hssf.record.NoteRecord; -import org.apache.poi.hssf.record.ObjRecord; -import org.apache.poi.hssf.record.TextObjectRecord; -import org.apache.poi.ss.usermodel.Cell; -import org.apache.poi.ss.usermodel.ClientAnchor; -import org.apache.poi.ss.usermodel.Comment; -import org.apache.poi.ss.usermodel.CreationHelper; -import org.apache.poi.ss.usermodel.Drawing; -import org.apache.poi.ss.usermodel.RichTextString; -import org.apache.poi.ss.usermodel.Row; -import org.apache.poi.ss.usermodel.Sheet; +import org.apache.poi.hssf.record.*; + +import java.io.*; +import java.util.Arrays; /** * @author Evgeniy Berlog * @date 26.06.12 */ -@SuppressWarnings("deprecation") public class TestComment extends TestCase { public void testResultEqualsToAbstractShape() { @@ -70,25 +53,25 @@ public class TestComment extends TestCase { byte[] actual = comment.getEscherContainer().getChild(0).serialize(); assertEquals(expected.length, actual.length); - assertArrayEquals(expected, actual); + assertTrue(Arrays.equals(expected, actual)); expected = commentShape.getSpContainer().getChild(2).serialize(); actual = comment.getEscherContainer().getChild(2).serialize(); assertEquals(expected.length, actual.length); - assertArrayEquals(expected, actual); + assertTrue(Arrays.equals(expected, actual)); expected = commentShape.getSpContainer().getChild(3).serialize(); actual = comment.getEscherContainer().getChild(3).serialize(); assertEquals(expected.length, actual.length); - assertArrayEquals(expected, actual); + assertTrue(Arrays.equals(expected, actual)); expected = commentShape.getSpContainer().getChild(4).serialize(); actual = comment.getEscherContainer().getChild(4).serialize(); assertEquals(expected.length, actual.length); - assertArrayEquals(expected, actual); + assertTrue(Arrays.equals(expected, actual)); ObjRecord obj = comment.getObjRecord(); ObjRecord objShape = commentShape.getObjRecord(); @@ -105,7 +88,7 @@ public class TestComment extends TestCase { actual = torShape.serialize(); assertEquals(expected.length, actual.length); - assertArrayEquals(expected, actual); + assertTrue(Arrays.equals(expected, actual)); NoteRecord note = comment.getNoteRecord(); NoteRecord noteShape = commentShape.getNoteRecord(); @@ -115,10 +98,7 @@ public class TestComment extends TestCase { actual = noteShape.serialize(); assertEquals(expected.length, actual.length); - assertTrue( - "\nHad: " + Arrays.toString(actual) + - "\n Expected: " + Arrays.toString(expected), - Arrays.equals(expected, actual)); + assertTrue(Arrays.equals(expected, actual)); } public void testAddToExistingFile() { @@ -260,7 +240,6 @@ public class TestComment extends TestCase { assertEquals(agg.getTailRecords().size(), 1); HSSFSimpleShape shape = patriarch.createSimpleShape(new HSSFClientAnchor()); - assertNotNull(shape); assertEquals(comment.getOptRecord().getEscherProperties().size(), 10); } @@ -281,12 +260,12 @@ public class TestComment extends TestCase { assertEquals(comment.getShapeId(), 2024); - /*CommonObjectDataSubRecord cod = (CommonObjectDataSubRecord) comment.getObjRecord().getSubRecords().get(0); - assertEquals(2024, cod.getObjectId()); + CommonObjectDataSubRecord cod = (CommonObjectDataSubRecord) comment.getObjRecord().getSubRecords().get(0); + assertEquals(cod.getObjectId(), 1000); EscherSpRecord spRecord = (EscherSpRecord) comment.getEscherContainer().getChild(0); assertEquals(spRecord.getShapeId(), 2024); assertEquals(comment.getShapeId(), 2024); - assertEquals(2024, comment.getNoteRecord().getShapeId());*/ + assertEquals(comment.getNoteRecord().getShapeId(), 1000); } public void testAttemptToSave2CommentsWithSameCoordinates(){ @@ -306,116 +285,4 @@ public class TestComment extends TestCase { } assertNotNull(err); } - - - public void testBug56380InsertComments() throws Exception { - HSSFWorkbook workbook = new HSSFWorkbook(); - HSSFSheet sheet = workbook.createSheet(); - Drawing drawing = sheet.createDrawingPatriarch(); - int noOfRows = 3000; - String comment = "c"; - - for(int i = 0; i < noOfRows; i++) { - Row row = sheet.createRow(i); - Cell cell = row.createCell(0); - insertComment(drawing, cell, comment + i); - } - - // assert that the comments are created properly before writing - checkComments(sheet, noOfRows, comment); - - System.out.println("Listing comments before write"); - listComments(sheet.getDrawingPatriarch()); - - assertEquals(noOfRows, sheet.getDrawingPatriarch().getChildren().size()); - - // store in temp-file - File file = new File(System.getProperty("java.io.tmpdir") + File.separatorChar + "test_comments.xls"); - FileOutputStream fs = new FileOutputStream(file); - try { - sheet.getWorkbook().write(fs); - } finally { - fs.close(); - } - - // save and recreate the workbook from the saved file - workbook = HSSFTestDataSamples.writeOutAndReadBack(workbook); - sheet = workbook.getSheetAt(0); - - // recreate the workbook from the saved file - /*FileInputStream fi = new FileInputStream(file); - try { - sheet = new HSSFWorkbook(fi).getSheetAt(0); - } finally { - fi.close(); - }*/ - - System.out.println("Listing comments after read"); - listComments(sheet.getDrawingPatriarch()); - - assertEquals(noOfRows, sheet.getDrawingPatriarch().getChildren().size()); - - // store file after - file = new File(System.getProperty("java.io.tmpdir") + File.separatorChar + "test_comments_after.xls"); - fs = new FileOutputStream(file); - try { - sheet.getWorkbook().write(fs); - } finally { - fs.close(); - } - - // assert that the comments are created properly after reading back in - //checkComments(sheet, noOfRows, comment); - } - - private void listComments(HSSFShapeContainer container) { - for (Object object : container.getChildren()) { - HSSFShape shape = (HSSFShape) object; - if (shape instanceof HSSFShapeGroup) { - listComments((HSSFShapeContainer) shape); - continue; - } - if (shape instanceof HSSFComment) { - HSSFComment comment = (HSSFComment) shape; - System.out.println("Comment " + comment.getString().getString() + " at " + comment.getColumn() + "/" + comment.getRow()); - } - } - } - - private void checkComments(Sheet sheet, int noOfRows, String commentStr) { - for(int i = 0; i < noOfRows; i++) { - assertNotNull(sheet.getRow(i)); - Cell cell = sheet.getRow(i).getCell(0); - assertNotNull(cell); - Comment comment = cell.getCellComment(); - assertNotNull("Did not get a Cell Comment for row " + i, comment); - assertNotNull(comment.getString()); - - assertEquals(i, comment.getRow()); - assertEquals(0,comment.getColumn()); - - assertEquals(commentStr + i, comment.getString().getString()); - } - } - - private void insertComment(Drawing drawing, Cell cell, String message) { - CreationHelper factory = cell.getSheet().getWorkbook().getCreationHelper(); - - ClientAnchor anchor = factory.createClientAnchor(); - anchor.setCol1(cell.getColumnIndex()); - anchor.setCol2(cell.getColumnIndex() + 1); - anchor.setRow1(cell.getRowIndex()); - anchor.setRow2(cell.getRowIndex() + 1); - anchor.setDx1(100); - anchor.setDx2(100); - anchor.setDy1(100); - anchor.setDy2(100); - - Comment comment = drawing.createCellComment(anchor); - - RichTextString str = factory.createRichTextString(message); - comment.setString(str); - comment.setAuthor("fanfy"); - cell.setCellComment(comment); - } } diff --git a/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFWorkbook.java b/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFWorkbook.java index 70e04f6362..a37751dec3 100644 --- a/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFWorkbook.java +++ b/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFWorkbook.java @@ -17,7 +17,12 @@ package org.apache.poi.hssf.usermodel; -import static org.junit.Assert.*; +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; +import static org.junit.Assert.fail; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; @@ -50,13 +55,8 @@ import org.apache.poi.poifs.filesystem.NPOIFSFileSystem; import org.apache.poi.poifs.filesystem.POIFSFileSystem; import org.apache.poi.ss.formula.ptg.Area3DPtg; import org.apache.poi.ss.usermodel.BaseTestWorkbook; -import org.apache.poi.ss.usermodel.Cell; -import org.apache.poi.ss.usermodel.FormulaEvaluator; import org.apache.poi.ss.usermodel.Name; -import org.apache.poi.ss.usermodel.Row; -import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.util.CellRangeAddress; -import org.apache.poi.ss.util.CellUtil; import org.apache.poi.util.LittleEndian; import org.apache.poi.util.TempFile; import org.junit.Test; @@ -1070,71 +1070,4 @@ public final class TestHSSFWorkbook extends BaseTestWorkbook { private void expectName(HSSFWorkbook wb, String name, String expect) { assertEquals(expect, wb.getName(name).getRefersToFormula()); } - - @Test - public void test55747() throws IOException { - HSSFWorkbook wb = new HSSFWorkbook(); - Sheet sheet =wb.createSheet("Test1"); - Row row =sheet.createRow(0); - CellUtil.createCell(row, 0, "Hello world."); - row = sheet.createRow(1); - Cell cell = row.createCell(0); - cell.setCellType(Cell.CELL_TYPE_FORMULA); - cell.setCellFormula("IF(ISBLANK(A1),\" not blank a1\",CONCATENATE(A1,\" - %%s.\"))"); - - Cell cell2 = row.createCell(1); - cell2.setCellType(Cell.CELL_TYPE_FORMULA); - cell2.setCellFormula("CONCATENATE(A1,\" - %%s.\")"); - - Cell cell3 = row.createCell(2); - cell3.setCellType(Cell.CELL_TYPE_FORMULA); - cell3.setCellFormula("ISBLANK(A1)"); - - wb.setForceFormulaRecalculation(true); - - FormulaEvaluator evaluator = wb.getCreationHelper().createFormulaEvaluator(); - for(int sheetNum = 0; sheetNum < wb.getNumberOfSheets(); sheetNum++) { - sheet = wb.getSheetAt(sheetNum); - for(Row r : sheet) { - for(Cell c : r) { - if(c.getCellType() == Cell.CELL_TYPE_FORMULA) { - evaluator.evaluateFormulaCell(c); - } - } - } - } - - cell = row.getCell(0); - assertEquals(Cell.CELL_TYPE_FORMULA, cell.getCellType()); - assertEquals("IF(ISBLANK(A1),\" not blank a1\",CONCATENATE(A1,\" - %%s.\"))", cell.getCellFormula()); - assertEquals("Hello world. - %%s.", cell.getStringCellValue()); - - cell2 = row.getCell(1); - assertEquals(Cell.CELL_TYPE_FORMULA, cell2.getCellType()); - assertEquals("CONCATENATE(A1,\" - %%s.\")", cell2.getCellFormula()); - assertEquals("Hello world. - %%s.", cell2.getStringCellValue()); - - FileOutputStream stream = new FileOutputStream( "C:/temp/55747.xls"); - try { - wb.write(stream); - } finally { - stream.close(); - } - - HSSFWorkbook wbBack = HSSFTestDataSamples.writeOutAndReadBack(wb); - Sheet sheetBack = wb.getSheetAt(0); - Row rowBack = sheetBack.getRow(1); - - cell = rowBack.getCell(0); - assertEquals(Cell.CELL_TYPE_FORMULA, cell.getCellType()); - assertEquals("IF(ISBLANK(A1),\" not blank a1\",CONCATENATE(A1,\" - %%s.\"))", cell.getCellFormula()); - assertEquals("Hello world. - %%s.", cell.getStringCellValue()); - - cell2 = rowBack.getCell(1); - assertEquals(Cell.CELL_TYPE_FORMULA, cell2.getCellType()); - assertEquals("CONCATENATE(A1,\" - %%s.\")", cell2.getCellFormula()); - assertEquals("Hello world. - %%s.", cell2.getStringCellValue()); - wbBack.close(); - wb.close(); - } } diff --git a/test-data/spreadsheet/SampleSS.xlsx b/test-data/spreadsheet/SampleSS.xlsx index 2250f17e0af225ecbf2567a7aa482add16198749..b94809ebc9e43f4877dfc89d9da4e53d1c6822e3 100644 GIT binary patch literal 9112 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 CR+ZBL literal 7146 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