diff options
Diffstat (limited to 'src/testcases/org')
16 files changed, 469 insertions, 483 deletions
diff --git a/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFDataFormat.java b/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFDataFormat.java index 2747b19d52..8a8b1063e6 100644 --- a/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFDataFormat.java +++ b/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFDataFormat.java @@ -17,19 +17,20 @@ package org.apache.poi.hssf.usermodel; +import static org.apache.poi.hssf.HSSFTestDataSamples.openSampleWorkbook; import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.junit.jupiter.api.Assertions.assertNotNull; import java.io.IOException; +import java.util.Arrays; +import java.util.List; import org.apache.poi.hssf.HSSFITestDataProvider; -import org.apache.poi.hssf.HSSFTestDataSamples; import org.apache.poi.ss.usermodel.BaseTestDataFormat; -import org.apache.poi.ss.usermodel.BuiltinFormats; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellStyle; -import org.apache.poi.ss.usermodel.DataFormat; import org.apache.poi.ss.usermodel.Row; +import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.util.POILogFactory; import org.apache.poi.util.POILogger; import org.junit.jupiter.api.Test; @@ -38,65 +39,31 @@ import org.junit.jupiter.api.Test; * Tests for {@link HSSFDataFormat} */ public final class TestHSSFDataFormat extends BaseTestDataFormat { - private static POILogger _logger = POILogFactory.getLogger(TestHSSFDataFormat.class); + private static final POILogger _logger = POILogFactory.getLogger(TestHSSFDataFormat.class); public TestHSSFDataFormat() { super(HSSFITestDataProvider.instance); } /** - * [Bug 49928] formatCellValue returns incorrect value for \u00a3 formatted cells - */ - @Override - @Test - public void test49928() throws IOException { - HSSFWorkbook wb = HSSFTestDataSamples.openSampleWorkbook("49928.xls"); - doTest49928Core(wb); - - // an attempt to register an existing format returns its index - int poundFmtIdx = wb.getSheetAt(0).getRow(0).getCell(0).getCellStyle().getDataFormat(); - assertEquals(poundFmtIdx, wb.createDataFormat().getFormat(poundFmt)); - - // now create a custom format with Pound (\u00a3) - DataFormat dataFormat = wb.createDataFormat(); - short customFmtIdx = dataFormat.getFormat("\u00a3##.00[Yellow]"); - assertTrue(customFmtIdx >= BuiltinFormats.FIRST_USER_DEFINED_FORMAT_INDEX ); - assertEquals("\u00a3##.00[Yellow]", dataFormat.getFormat(customFmtIdx)); - - wb.close(); - } - - /** - * [Bug 58532] Handle formats that go numnum, numK, numM etc - */ - @Override - @Test - public void test58532() throws IOException { - HSSFWorkbook wb = HSSFTestDataSamples.openSampleWorkbook("FormatKM.xls"); - doTest58532Core(wb); - wb.close(); - } - - /** * Bug 51378: getDataFormatString method call crashes when reading the test file */ @Test public void test51378() throws IOException { - HSSFWorkbook wb = HSSFTestDataSamples.openSampleWorkbook("12561-1.xls"); - for (int i = 0; i < wb.getNumberOfSheets(); i++) { - HSSFSheet sheet = wb.getSheetAt(i); - for (Row row : sheet) { - for (Cell cell : row) { - CellStyle style = cell.getCellStyle(); - - String fmt = style.getDataFormatString(); - if(fmt == null) { - _logger.log(POILogger.WARN, cell + ": " + fmt); + List<String> expNull = Arrays.asList( "0-3-0","0-43-11" ); + try (HSSFWorkbook wb = openSampleWorkbook("12561-1.xls")) { + for (Sheet sheet : wb) { + for (Row row : sheet) { + for (Cell cell : row) { + CellStyle style = cell.getCellStyle(); + assertNotNull(style); + String coord = wb.getSheetIndex(sheet)+"-"+cell.getRowIndex()+"-"+cell.getColumnIndex(); + String fmt = style.getDataFormatString(); + assertEquals(expNull.contains(coord), fmt == null, coord+" unexpected"); } } } } - wb.close(); } } diff --git a/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFEvaluationSheet.java b/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFEvaluationSheet.java index 538d266cf4..09bad315a6 100644 --- a/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFEvaluationSheet.java +++ b/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFEvaluationSheet.java @@ -17,13 +17,15 @@ package org.apache.poi.hssf.usermodel; +import static org.apache.poi.hssf.HSSFTestDataSamples.openSampleWorkbook; +import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; + +import java.io.IOException; import java.util.AbstractMap; import java.util.Map; -import org.apache.poi.hssf.HSSFTestDataSamples; import org.apache.poi.ss.formula.EvaluationSheet; import org.apache.poi.ss.usermodel.BaseTestXEvaluationSheet; -import org.apache.poi.ss.usermodel.Name; import org.apache.poi.ss.usermodel.Sheet; import org.junit.jupiter.api.Test; @@ -35,13 +37,12 @@ public class TestHSSFEvaluationSheet extends BaseTestXEvaluationSheet { } @Test - public void testMissingExternalName() { - HSSFWorkbook wb = HSSFTestDataSamples.openSampleWorkbook("external_name.xls"); - for (Name name : wb.getAllNames()) { + public void testMissingExternalName() throws IOException { + try (HSSFWorkbook wb = openSampleWorkbook("external_name.xls")) { // this sometimes causes exceptions - if(!name.isFunctionName()) { - name.getRefersToFormula(); - } + wb.getAllNames().stream().filter(n -> !n.isFunctionName()).forEach( + n -> assertDoesNotThrow(n::getRefersToFormula) + ); } } } diff --git a/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFFont.java b/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFFont.java index f05ebb5203..541b34708a 100644 --- a/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFFont.java +++ b/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFFont.java @@ -17,17 +17,15 @@ package org.apache.poi.hssf.usermodel; -import java.io.IOException; +import java.util.stream.Stream; import org.apache.poi.hssf.HSSFITestDataProvider; import org.apache.poi.ss.usermodel.BaseTestFont; import org.apache.poi.ss.usermodel.Font; -import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.provider.Arguments; /** * Tests various functionality having to do with {@link org.apache.poi.ss.usermodel.Name}. - * - * @author Yegor Kozlov */ public final class TestHSSFFont extends BaseTestFont { @@ -35,8 +33,8 @@ public final class TestHSSFFont extends BaseTestFont { super(HSSFITestDataProvider.instance); } - @Test - public void testDefaultFont() throws IOException { - baseTestDefaultFont(HSSFFont.FONT_ARIAL, (short)200, Font.COLOR_NORMAL); + @SuppressWarnings("unused") + public static Stream<Arguments> defaultFont() { + return Stream.of(Arguments.of(HSSFFont.FONT_ARIAL, (short)200, Font.COLOR_NORMAL)); } } diff --git a/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFFormulaEvaluator.java b/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFFormulaEvaluator.java index c421e2cee5..f7dedf8c21 100644 --- a/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFFormulaEvaluator.java +++ b/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFFormulaEvaluator.java @@ -286,9 +286,4 @@ public final class TestHSSFFormulaEvaluator extends BaseTestFormulaEvaluator { } } } - - @Test - public void testSharedFormulas() throws IOException { - baseTestSharedFormulas("shared_formulas.xls"); - } } diff --git a/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFPicture.java b/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFPicture.java index 5de42c63ef..51eea4a289 100644 --- a/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFPicture.java +++ b/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFPicture.java @@ -17,6 +17,7 @@ package org.apache.poi.hssf.usermodel; +import static org.apache.poi.hssf.HSSFTestDataSamples.openSampleWorkbook; import static org.junit.jupiter.api.Assertions.assertArrayEquals; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -32,6 +33,8 @@ import org.apache.poi.hssf.model.InternalSheet; import org.apache.poi.ss.usermodel.BaseTestPicture; import org.apache.poi.ss.usermodel.ClientAnchor; import org.apache.poi.ss.usermodel.CreationHelper; +import org.apache.poi.ss.usermodel.Drawing; +import org.apache.poi.ss.usermodel.Picture; import org.apache.poi.ss.usermodel.PictureData; import org.apache.poi.ss.usermodel.Workbook; import org.junit.jupiter.api.Test; @@ -42,16 +45,8 @@ public final class TestHSSFPicture extends BaseTestPicture { super(HSSFITestDataProvider.instance); } - @Test - public void resize() throws Exception { - try (HSSFWorkbook wb = HSSFTestDataSamples.openSampleWorkbook("resize_compare.xls")) { - HSSFPatriarch dp = wb.getSheetAt(0).createDrawingPatriarch(); - List<HSSFShape> pics = dp.getChildren(); - HSSFPicture inpPic = (HSSFPicture) pics.get(0); - HSSFPicture cmpPic = (HSSFPicture) pics.get(1); - - baseTestResize(inpPic, cmpPic, 2.0, 2.0); - } + protected Picture getPictureShape(Drawing<?> pat, int picIdx) { + return (Picture)((HSSFPatriarch)pat).getChildren().get(picIdx); } /** @@ -199,7 +194,7 @@ public final class TestHSSFPicture extends BaseTestPicture { @Test public void readExistingImage() throws IOException { - try (HSSFWorkbook wb = HSSFTestDataSamples.openSampleWorkbook("drawings.xls")) { + try (HSSFWorkbook wb = openSampleWorkbook("drawings.xls")) { HSSFSheet sheet = wb.getSheet("picture"); HSSFPatriarch drawing = sheet.getDrawingPatriarch(); assertEquals(1, drawing.getChildren().size()); diff --git a/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFRow.java b/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFRow.java index 0bfef5735b..8efbfde89f 100644 --- a/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFRow.java +++ b/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFRow.java @@ -29,7 +29,6 @@ import java.io.IOException; import org.apache.poi.hssf.HSSFITestDataProvider; import org.apache.poi.hssf.record.BlankRecord; import org.apache.poi.hssf.record.RowRecord; -import org.apache.poi.ss.SpreadsheetVersion; import org.apache.poi.ss.usermodel.BaseTestRow; import org.junit.jupiter.api.Test; @@ -45,16 +44,6 @@ public final class TestHSSFRow extends BaseTestRow { } @Test - public void testRowBounds() throws IOException { - baseTestRowBounds(SpreadsheetVersion.EXCEL97.getLastRowIndex()); - } - - @Test - public void testCellBounds() throws IOException { - baseTestCellBounds(SpreadsheetVersion.EXCEL97.getLastColumnIndex()); - } - - @Test public void testLastAndFirstColumns_bug46654() throws IOException { int ROW_IX = 10; int COL_IX = 3; diff --git a/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFSheet.java b/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFSheet.java index 38f5b28422..15c9ef2414 100644 --- a/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFSheet.java +++ b/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFSheet.java @@ -78,11 +78,6 @@ public final class TestHSSFSheet extends BaseTestSheet { } } - @Test - public void getSetMargin() throws IOException { - baseTestGetSetMargin(new double[]{0.75, 0.75, 1.0, 1.0, 0.3, 0.3}); - } - /** * Test the gridset field gets set as expected. */ @@ -555,22 +550,29 @@ public final class TestHSSFSheet extends BaseTestSheet { @Test public void addEmptyRow() throws IOException { //try to add 5 empty rows to a new sheet - try (HSSFWorkbook wb = new HSSFWorkbook()) { - HSSFSheet sheet = wb.createSheet(); + try (HSSFWorkbook wb1 = new HSSFWorkbook()) { + HSSFSheet sheet = wb1.createSheet(); for (int i = 0; i < 5; i++) { sheet.createRow(i); } - writeOutAndReadBack(wb).close(); + try (HSSFWorkbook wb2 = writeOutAndReadBack(wb1)) { + HSSFSheet sheet2 = wb2.getSheetAt(0); + assertNotNull(sheet2.getRow(4)); + } } //try adding empty rows in an existing worksheet - try (HSSFWorkbook wb = HSSFTestDataSamples.openSampleWorkbook("Simple.xls")) { - - HSSFSheet sheet = wb.getSheetAt(0); - for (int i = 3; i < 10; i++) sheet.createRow(i); + try (HSSFWorkbook wb1 = HSSFTestDataSamples.openSampleWorkbook("Simple.xls")) { + HSSFSheet sheet = wb1.getSheetAt(0); + for (int i = 3; i < 10; i++) { + sheet.createRow(i); + } - writeOutAndReadBack(wb).close(); + try (HSSFWorkbook wb2 = writeOutAndReadBack(wb1)) { + HSSFSheet sheet2 = wb2.getSheetAt(0); + assertNotNull(sheet2.getRow(4)); + } } } diff --git a/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFWorkbook.java b/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFWorkbook.java index 4a7c855958..9cf92f3c1e 100644 --- a/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFWorkbook.java +++ b/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFWorkbook.java @@ -19,6 +19,7 @@ package org.apache.poi.hssf.usermodel; import static org.apache.poi.POITestCase.assertContains; import static org.apache.poi.hssf.HSSFTestDataSamples.openSampleWorkbook; +import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotNull; @@ -71,7 +72,6 @@ import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.ss.util.CellRangeAddress; import org.apache.poi.util.IOUtils; import org.apache.poi.util.TempFile; -import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.CsvSource; @@ -787,11 +787,6 @@ public final class TestHSSFWorkbook extends BaseTestWorkbook { wb.close(); } - @Test - public void changeSheetNameWithSharedFormulas() throws IOException { - changeSheetNameWithSharedFormulas("shared_formulas.xls"); - } - // Should throw exception about invalid POIFSFileSystem @Test public void emptyDirectoryNode() throws IOException { @@ -863,12 +858,11 @@ public final class TestHSSFWorkbook extends BaseTestWorkbook { @Test public void testMethods() throws IOException { - HSSFWorkbook wb=new HSSFWorkbook(); - wb.insertChartRecord(); - //wb.dumpDrawingGroupRecords(true); - //wb.dumpDrawingGroupRecords(false); - - wb.close(); + try (HSSFWorkbook wb=new HSSFWorkbook()) { + assertDoesNotThrow(wb::insertChartRecord); + //wb.dumpDrawingGroupRecords(true); + //wb.dumpDrawingGroupRecords(false); + } } @Test @@ -1114,14 +1108,12 @@ public final class TestHSSFWorkbook extends BaseTestWorkbook { @Test public void setSheetOrderToEnd() throws Exception { - final HSSFWorkbook workbook = new HSSFWorkbook(); - workbook.createSheet("A"); - try { - for (int i = 0; i < 2 * workbook.getInternalWorkbook().getRecords().size(); i++) { - workbook.setSheetOrder("A", 0); - } - } catch (Exception e) { - throw new Exception("Moving a sheet to the end should not throw an exception, but threw ", e); + try (HSSFWorkbook workbook = new HSSFWorkbook()) { + workbook.createSheet("A"); + workbook.createSheet("B"); + assertEquals("A", workbook.getSheetName(0)); + workbook.setSheetOrder("A", 1); + assertEquals("A", workbook.getSheetName(1)); } } @@ -1176,26 +1168,22 @@ public final class TestHSSFWorkbook extends BaseTestWorkbook { @Test public void testWriteToNewFile() throws Exception { - // Open from a Stream - HSSFWorkbook wb = new HSSFWorkbook( - samples.openResourceAsStream("SampleSS.xls")); - // Save to a new temp file final File file = TempFile.createTempFile("TestHSSFWorkbook", ".xls"); - wb.write(file); - wb.close(); + + // Open from a Stream + try (HSSFWorkbook wb = new HSSFWorkbook( + samples.openResourceAsStream("SampleSS.xls"))) { + wb.write(file); + } // Read and check - wb = new HSSFWorkbook(new POIFSFileSystem(file)); - assertEquals(3, wb.getNumberOfSheets()); - wb.close(); + try (HSSFWorkbook wb = new HSSFWorkbook(new POIFSFileSystem(file))) { + assertEquals(3, wb.getNumberOfSheets()); + } } - @Disabled - @Test - @Override public void createDrawing() throws Exception { - super.createDrawing(); // the dimensions for this image are different than for XSSF and SXSSF } } diff --git a/src/testcases/org/apache/poi/hssf/usermodel/TestOLE2Embeding.java b/src/testcases/org/apache/poi/hssf/usermodel/TestOLE2Embeding.java index 340839bdde..7df9275555 100644 --- a/src/testcases/org/apache/poi/hssf/usermodel/TestOLE2Embeding.java +++ b/src/testcases/org/apache/poi/hssf/usermodel/TestOLE2Embeding.java @@ -18,6 +18,7 @@ package org.apache.poi.hssf.usermodel; import static org.junit.jupiter.api.Assertions.assertArrayEquals; +import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; import static org.junit.jupiter.api.Assertions.assertEquals; import java.io.ByteArrayInputStream; @@ -36,9 +37,6 @@ import org.apache.poi.ss.usermodel.CreationHelper; import org.apache.poi.util.LocaleUtil; import org.junit.jupiter.api.Test; -/** - * - */ public final class TestOLE2Embeding { @Test @@ -46,7 +44,7 @@ public final class TestOLE2Embeding { // This used to break, until bug #43116 was fixed try (HSSFWorkbook workbook = HSSFTestDataSamples.openSampleWorkbook("ole2-embedding.xls")) { // Check we can get at the Escher layer still - workbook.getAllPictures(); + assertDoesNotThrow(workbook::getAllPictures); } } @@ -106,12 +104,6 @@ public final class TestOLE2Embeding { circle.setShapeType(HSSFSimpleShape.OBJECT_TYPE_OVAL); circle.setNoFill(true); -// if (false) { -// FileOutputStream fos = new FileOutputStream("embed.xls"); -// wb.write(fos); -// fos.close(); -// } - HSSFWorkbook wb2 = HSSFTestDataSamples.writeOutAndReadBack(wb1); wb1.close(); diff --git a/src/testcases/org/apache/poi/ss/usermodel/BaseTestDataFormat.java b/src/testcases/org/apache/poi/ss/usermodel/BaseTestDataFormat.java index 4f6d4b6aa9..3fe041a1df 100644 --- a/src/testcases/org/apache/poi/ss/usermodel/BaseTestDataFormat.java +++ b/src/testcases/org/apache/poi/ss/usermodel/BaseTestDataFormat.java @@ -32,6 +32,8 @@ import org.junit.jupiter.api.Test; */ public abstract class BaseTestDataFormat { + protected static final String POUND_FMT = "\"\u00a3\"#,##0;[Red]\\-\"\u00a3\"#,##0"; + private final ITestDataProvider _testDataProvider; protected BaseTestDataFormat(ITestDataProvider testDataProvider) { @@ -45,66 +47,80 @@ public abstract class BaseTestDataFormat { @Test public final void testBuiltinFormats() throws IOException { - Workbook wb = _testDataProvider.createWorkbook(); - - DataFormat df = wb.createDataFormat(); + try (Workbook wb = _testDataProvider.createWorkbook()) { - String[] formats = BuiltinFormats.getAll(); - for (int idx = 0; idx < formats.length; idx++) { - String fmt = formats[idx]; - assertEquals(idx, df.getFormat(fmt)); + DataFormat df = wb.createDataFormat(); + + String[] formats = BuiltinFormats.getAll(); + for (int idx = 0; idx < formats.length; idx++) { + String fmt = formats[idx]; + assertEquals(idx, df.getFormat(fmt)); + } + + //default format for new cells is General + Sheet sheet = wb.createSheet(); + Cell cell = sheet.createRow(0).createCell(0); + assertEquals(0, cell.getCellStyle().getDataFormat()); + assertEquals("General", cell.getCellStyle().getDataFormatString()); + + //create a custom data format + String customFmt = "#0.00 AM/PM"; + //check it is not in built-in formats + assertNotBuiltInFormat(customFmt); + int customIdx = df.getFormat(customFmt); + //The first user-defined format starts at 164. + assertTrue(customIdx >= BuiltinFormats.FIRST_USER_DEFINED_FORMAT_INDEX); + //read and verify the string representation + assertEquals(customFmt, df.getFormat((short) customIdx)); } - - //default format for new cells is General - Sheet sheet = wb.createSheet(); - Cell cell = sheet.createRow(0).createCell(0); - assertEquals(0, cell.getCellStyle().getDataFormat()); - assertEquals("General", cell.getCellStyle().getDataFormatString()); - - //create a custom data format - String customFmt = "#0.00 AM/PM"; - //check it is not in built-in formats - assertNotBuiltInFormat(customFmt); - int customIdx = df.getFormat(customFmt); - //The first user-defined format starts at 164. - assertTrue(customIdx >= BuiltinFormats.FIRST_USER_DEFINED_FORMAT_INDEX); - //read and verify the string representation - assertEquals(customFmt, df.getFormat((short)customIdx)); - - wb.close(); } /** * [Bug 49928] formatCellValue returns incorrect value for \u00a3 formatted cells */ @Test - public abstract void test49928() throws IOException; - protected final static String poundFmt = "\"\u00a3\"#,##0;[Red]\\-\"\u00a3\"#,##0"; - public void doTest49928Core(Workbook wb){ - DataFormatter df = new DataFormatter(); + public void test49928() throws IOException { + String fileName = "49928.xls" + (getClass().getName().contains("xssf") ? "x" : ""); + try (Workbook wb = _testDataProvider.openSampleWorkbook(fileName)) { + DataFormatter df = new DataFormatter(); + + Sheet sheet = wb.getSheetAt(0); + Cell cell = sheet.getRow(0).getCell(0); + CellStyle style = cell.getCellStyle(); + + // not expected normally, id of a custom format should be greater + // than BuiltinFormats.FIRST_USER_DEFINED_FORMAT_INDEX + short poundFmtIdx = 6; - Sheet sheet = wb.getSheetAt(0); - Cell cell = sheet.getRow(0).getCell(0); - CellStyle style = cell.getCellStyle(); + assertEquals(POUND_FMT, style.getDataFormatString()); + assertEquals(poundFmtIdx, style.getDataFormat()); + assertEquals("\u00a31", df.formatCellValue(cell)); - // not expected normally, id of a custom format should be greater - // than BuiltinFormats.FIRST_USER_DEFINED_FORMAT_INDEX - short poundFmtIdx = 6; - assertEquals(poundFmt, style.getDataFormatString()); - assertEquals(poundFmtIdx, style.getDataFormat()); - assertEquals("\u00a31", df.formatCellValue(cell)); + DataFormat dataFormat = wb.createDataFormat(); + assertEquals(poundFmtIdx, dataFormat.getFormat(POUND_FMT)); + assertEquals(POUND_FMT, dataFormat.getFormat(poundFmtIdx)); + + // As of 2015-12-27, there is no way to override a built-in number format with POI XSSFWorkbook + // 49928.xlsx has been saved with a poundFmt that overrides the default value (dollar) + poundFmtIdx = wb.getSheetAt(0).getRow(0).getCell(0).getCellStyle().getDataFormat(); + assertEquals(poundFmtIdx, dataFormat.getFormat(POUND_FMT)); - DataFormat dataFormat = wb.createDataFormat(); - assertEquals(poundFmtIdx, dataFormat.getFormat(poundFmt)); - assertEquals(poundFmt, dataFormat.getFormat(poundFmtIdx)); + // now create a custom format with Pound (\u00a3) + + String customFmt = "\u00a3##.00[Yellow]"; + assertNotBuiltInFormat(customFmt); + short customFmtIdx = dataFormat.getFormat(customFmt); + assertTrue(customFmtIdx >= BuiltinFormats.FIRST_USER_DEFINED_FORMAT_INDEX); + assertEquals(customFmt, dataFormat.getFormat(customFmtIdx)); + } } @Test public void testReadbackFormat() throws IOException { readbackFormat("built-in format", "0.00"); - readbackFormat("overridden built-in format", poundFmt); + readbackFormat("overridden built-in format", POUND_FMT); String customFormat = "#0.00 AM/PM"; assertNotBuiltInFormat(customFormat); @@ -120,48 +136,53 @@ public abstract class BaseTestDataFormat { } } + /** + * [Bug 58532] Handle formats that go numnum, numK, numM etc + */ @Test - public abstract void test58532() throws IOException; - public void doTest58532Core(Workbook wb) { - Sheet s = wb.getSheetAt(0); - DataFormatter fmt = new DataFormatter(); - FormulaEvaluator eval = wb.getCreationHelper().createFormulaEvaluator(); - - // Column A is the raw values - // Column B is the ##/#K/#M values - // Column C is strings of what they should look like - // Column D is the #.##/#.#K/#.#M values - // Column E is strings of what they should look like - - String formatKMWhole = "[>999999]#,,\"M\";[>999]#,\"K\";#"; - String formatKM3dp = "[>999999]#.000,,\"M\";[>999]#.000,\"K\";#.000"; - - // Check the formats are as expected - Row headers = s.getRow(0); - assertNotNull(headers); - assertEquals(formatKMWhole, headers.getCell(1).getStringCellValue()); - assertEquals(formatKM3dp, headers.getCell(3).getStringCellValue()); - - Row r2 = s.getRow(1); - assertNotNull(r2); - assertEquals(formatKMWhole, r2.getCell(1).getCellStyle().getDataFormatString()); - assertEquals(formatKM3dp, r2.getCell(3).getCellStyle().getDataFormatString()); - - // For all of the contents rows, check that DataFormatter is able - // to format the cells to the same value as the one next to it - for (int rn=1; rn<s.getLastRowNum(); rn++) { - Row r = s.getRow(rn); - if (r == null) break; - - double value = r.getCell(0).getNumericCellValue(); - - String expWhole = r.getCell(2).getStringCellValue(); - String exp3dp = r.getCell(4).getStringCellValue(); - - assertEquals(expWhole, fmt.formatCellValue(r.getCell(1), eval), - "Wrong formatting of " + value + " for row " + rn); - assertEquals(exp3dp, fmt.formatCellValue(r.getCell(3), eval), - "Wrong formatting of " + value + " for row " + rn); + public void test58532() throws IOException { + String fileName = "FormatKM.xls" + (getClass().getName().contains("xssf") ? "x" : ""); + try (Workbook wb = _testDataProvider.openSampleWorkbook(fileName)) { + Sheet s = wb.getSheetAt(0); + DataFormatter fmt = new DataFormatter(); + FormulaEvaluator eval = wb.getCreationHelper().createFormulaEvaluator(); + + // Column A is the raw values + // Column B is the ##/#K/#M values + // Column C is strings of what they should look like + // Column D is the #.##/#.#K/#.#M values + // Column E is strings of what they should look like + + String formatKMWhole = "[>999999]#,,\"M\";[>999]#,\"K\";#"; + String formatKM3dp = "[>999999]#.000,,\"M\";[>999]#.000,\"K\";#.000"; + + // Check the formats are as expected + Row headers = s.getRow(0); + assertNotNull(headers); + assertEquals(formatKMWhole, headers.getCell(1).getStringCellValue()); + assertEquals(formatKM3dp, headers.getCell(3).getStringCellValue()); + + Row r2 = s.getRow(1); + assertNotNull(r2); + assertEquals(formatKMWhole, r2.getCell(1).getCellStyle().getDataFormatString()); + assertEquals(formatKM3dp, r2.getCell(3).getCellStyle().getDataFormatString()); + + // For all of the contents rows, check that DataFormatter is able + // to format the cells to the same value as the one next to it + for (int rn = 1; rn < s.getLastRowNum(); rn++) { + Row r = s.getRow(rn); + if (r == null) break; + + double value = r.getCell(0).getNumericCellValue(); + + String expWhole = r.getCell(2).getStringCellValue(); + String exp3dp = r.getCell(4).getStringCellValue(); + + assertEquals(expWhole, fmt.formatCellValue(r.getCell(1), eval), + "Wrong formatting of " + value + " for row " + rn); + assertEquals(exp3dp, fmt.formatCellValue(r.getCell(3), eval), + "Wrong formatting of " + value + " for row " + rn); + } } } @@ -170,36 +191,35 @@ public abstract class BaseTestDataFormat { */ @Test public final void test58536() throws IOException { - Workbook wb = _testDataProvider.createWorkbook(); - DataFormatter formatter = new DataFormatter(); - DataFormat fmt = wb.createDataFormat(); - Sheet sheet = wb.createSheet(); - Row r = sheet.createRow(0); - - char pound = '\u00A3'; - String formatUK = "_-[$"+pound+"-809]* #,##0_-;\\-[$"+pound+"-809]* #,##0_-;_-[$"+pound+"-809]* \"-\"??_-;_-@_-"; + try (Workbook wb = _testDataProvider.createWorkbook()) { + DataFormatter formatter = new DataFormatter(); + DataFormat fmt = wb.createDataFormat(); + Sheet sheet = wb.createSheet(); + Row r = sheet.createRow(0); - CellStyle cs = wb.createCellStyle(); - cs.setDataFormat(fmt.getFormat(formatUK)); + char pound = '\u00A3'; + String formatUK = "_-[$" + pound + "-809]* #,##0_-;\\-[$" + pound + "-809]* #,##0_-;_-[$" + pound + "-809]* \"-\"??_-;_-@_-"; - Cell pve = r.createCell(0); - pve.setCellValue(12345); - pve.setCellStyle(cs); + CellStyle cs = wb.createCellStyle(); + cs.setDataFormat(fmt.getFormat(formatUK)); - Cell nve = r.createCell(1); - nve.setCellValue(-12345); - nve.setCellStyle(cs); + Cell pve = r.createCell(0); + pve.setCellValue(12345); + pve.setCellStyle(cs); - Cell zero = r.createCell(2); - zero.setCellValue(0); - zero.setCellStyle(cs); + Cell nve = r.createCell(1); + nve.setCellValue(-12345); + nve.setCellStyle(cs); - assertEquals(pound+" 12,345", formatter.formatCellValue(pve)); - assertEquals("-"+pound+" 12,345", formatter.formatCellValue(nve)); - // TODO Fix this to not have an extra 0 at the end - //assertEquals(pound+" - ", formatter.formatCellValue(zero)); + Cell zero = r.createCell(2); + zero.setCellValue(0); + zero.setCellStyle(cs); - wb.close(); + assertEquals(pound + " 12,345", formatter.formatCellValue(pve)); + assertEquals("-" + pound + " 12,345", formatter.formatCellValue(nve)); + // TODO Fix this to not have an extra 0 at the end + //assertEquals(pound+" - ", formatter.formatCellValue(zero)); + } } /** @@ -208,35 +228,35 @@ public abstract class BaseTestDataFormat { */ @Test public final void test55265() throws IOException { - Workbook wb = _testDataProvider.createWorkbook(); - DataFormatter formatter = new DataFormatter(); - DataFormat fmt = wb.createDataFormat(); - Sheet sheet = wb.createSheet(); - Row r = sheet.createRow(0); - - CellStyle cs = wb.createCellStyle(); - cs.setDataFormat(fmt.getFormat("#'##0")); - - Cell zero = r.createCell(0); - zero.setCellValue(0); - zero.setCellStyle(cs); - - Cell sml = r.createCell(1); - sml.setCellValue(12); - sml.setCellStyle(cs); - - Cell med = r.createCell(2); - med.setCellValue(1234); - med.setCellStyle(cs); - - Cell lge = r.createCell(3); - lge.setCellValue(12345678); - lge.setCellStyle(cs); - - assertEquals("0", formatter.formatCellValue(zero)); - assertEquals("12", formatter.formatCellValue(sml)); - assertEquals("1'234", formatter.formatCellValue(med)); - assertEquals("12'345'678", formatter.formatCellValue(lge)); - wb.close(); + try (Workbook wb = _testDataProvider.createWorkbook()) { + DataFormatter formatter = new DataFormatter(); + DataFormat fmt = wb.createDataFormat(); + Sheet sheet = wb.createSheet(); + Row r = sheet.createRow(0); + + CellStyle cs = wb.createCellStyle(); + cs.setDataFormat(fmt.getFormat("#'##0")); + + Cell zero = r.createCell(0); + zero.setCellValue(0); + zero.setCellStyle(cs); + + Cell sml = r.createCell(1); + sml.setCellValue(12); + sml.setCellStyle(cs); + + Cell med = r.createCell(2); + med.setCellValue(1234); + med.setCellStyle(cs); + + Cell lge = r.createCell(3); + lge.setCellValue(12345678); + lge.setCellStyle(cs); + + assertEquals("0", formatter.formatCellValue(zero)); + assertEquals("12", formatter.formatCellValue(sml)); + assertEquals("1'234", formatter.formatCellValue(med)); + assertEquals("12'345'678", formatter.formatCellValue(lge)); + } } } diff --git a/src/testcases/org/apache/poi/ss/usermodel/BaseTestFont.java b/src/testcases/org/apache/poi/ss/usermodel/BaseTestFont.java index 501225aedc..d0d2b0c535 100644 --- a/src/testcases/org/apache/poi/ss/usermodel/BaseTestFont.java +++ b/src/testcases/org/apache/poi/ss/usermodel/BaseTestFont.java @@ -29,6 +29,8 @@ import java.io.IOException; import org.apache.poi.ss.ITestDataProvider; import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.MethodSource; /** * @author Yegor Kozlov @@ -41,113 +43,116 @@ public abstract class BaseTestFont { _testDataProvider = testDataProvider; } + @SuppressWarnings("JUnit5MalformedParameterized") + @ParameterizedTest + @MethodSource("defaultFont") protected final void baseTestDefaultFont(String defaultName, short defaultSize, short defaultColor) throws IOException { //get default font and check against default value - Workbook workbook = _testDataProvider.createWorkbook(); - Font fontFind=workbook.findFont(false, defaultColor, defaultSize, defaultName, false, false, Font.SS_NONE, Font.U_NONE); - assertNotNull(fontFind); - - //get default font, then change 2 values and check against different values (height changes) - Font font=workbook.createFont(); - font.setBold(true); - assertTrue(font.getBold()); - font.setUnderline(Font.U_DOUBLE); - assertEquals(Font.U_DOUBLE, font.getUnderline()); - font.setFontHeightInPoints((short)15); - assertEquals(15*20, font.getFontHeight()); - assertEquals(15, font.getFontHeightInPoints()); - fontFind=workbook.findFont(true, defaultColor, (short)(15*20), defaultName, false, false, Font.SS_NONE, Font.U_DOUBLE); - assertNotNull(fontFind); - workbook.close(); + try (Workbook workbook = _testDataProvider.createWorkbook()) { + Font fontFind = workbook.findFont(false, defaultColor, defaultSize, defaultName, false, false, Font.SS_NONE, Font.U_NONE); + assertNotNull(fontFind); + + //get default font, then change 2 values and check against different values (height changes) + Font font = workbook.createFont(); + font.setBold(true); + assertTrue(font.getBold()); + font.setUnderline(Font.U_DOUBLE); + assertEquals(Font.U_DOUBLE, font.getUnderline()); + font.setFontHeightInPoints((short) 15); + assertEquals(15 * 20, font.getFontHeight()); + assertEquals(15, font.getFontHeightInPoints()); + fontFind = workbook.findFont(true, defaultColor, (short) (15 * 20), defaultName, false, false, Font.SS_NONE, Font.U_DOUBLE); + assertNotNull(fontFind); + } } @Test public final void testGetNumberOfFonts() throws IOException { - Workbook wb = _testDataProvider.createWorkbook(); - int num0 = wb.getNumberOfFonts(); - - Font f1=wb.createFont(); - f1.setBold(true); - int idx1 = f1.getIndex(); - wb.createCellStyle().setFont(f1); - - Font f2=wb.createFont(); - f2.setUnderline(Font.U_DOUBLE); - int idx2 = f2.getIndex(); - wb.createCellStyle().setFont(f2); - - Font f3=wb.createFont(); - f3.setFontHeightInPoints((short)23); - int idx3 = f3.getIndex(); - wb.createCellStyle().setFont(f3); - - assertEquals(num0 + 3,wb.getNumberOfFonts()); - assertTrue(wb.getFontAt(idx1).getBold()); - assertEquals(Font.U_DOUBLE,wb.getFontAt(idx2).getUnderline()); - assertEquals(23,wb.getFontAt(idx3).getFontHeightInPoints()); - wb.close(); - } + try (Workbook wb = _testDataProvider.createWorkbook()) { + int num0 = wb.getNumberOfFonts(); + + Font f1 = wb.createFont(); + f1.setBold(true); + int idx1 = f1.getIndex(); + wb.createCellStyle().setFont(f1); + + Font f2 = wb.createFont(); + f2.setUnderline(Font.U_DOUBLE); + int idx2 = f2.getIndex(); + wb.createCellStyle().setFont(f2); + + Font f3 = wb.createFont(); + f3.setFontHeightInPoints((short) 23); + int idx3 = f3.getIndex(); + wb.createCellStyle().setFont(f3); + + assertEquals(num0 + 3, wb.getNumberOfFonts()); + assertTrue(wb.getFontAt(idx1).getBold()); + assertEquals(Font.U_DOUBLE, wb.getFontAt(idx2).getUnderline()); + assertEquals(23, wb.getFontAt(idx3).getFontHeightInPoints()); + } + } /** * Tests that we can define fonts to a new - * file, save, load, and still see them + * file, save, load, and still see them */ @Test public final void testCreateSave() throws IOException { - Workbook wb1 = _testDataProvider.createWorkbook(); - Sheet s1 = wb1.createSheet(); - Row r1 = s1.createRow(0); - Cell r1c1 = r1.createCell(0); - r1c1.setCellValue(2.2); - - int num0 = wb1.getNumberOfFonts(); - - Font font=wb1.createFont(); - font.setBold(true); - font.setStrikeout(true); - font.setColor(IndexedColors.YELLOW.getIndex()); - font.setFontName("Courier"); - int font1Idx = font.getIndex(); - wb1.createCellStyle().setFont(font); - assertEquals(num0 + 1, wb1.getNumberOfFonts()); - - CellStyle cellStyleTitle=wb1.createCellStyle(); - cellStyleTitle.setFont(font); - r1c1.setCellStyle(cellStyleTitle); - - // Save and re-load - Workbook wb2 = _testDataProvider.writeOutAndReadBack(wb1); - wb1.close(); - s1 = wb2.getSheetAt(0); - - assertEquals(num0 + 1, wb2.getNumberOfFonts()); - int idx = s1.getRow(0).getCell(0).getCellStyle().getFontIndex(); - Font fnt = wb2.getFontAt(idx); - assertNotNull(fnt); - assertEquals(IndexedColors.YELLOW.getIndex(), fnt.getColor()); - assertEquals("Courier", fnt.getFontName()); - - // Now add an orphaned one - Font font2 = wb2.createFont(); - font2.setItalic(true); - font2.setFontHeightInPoints((short)15); - int font2Idx = font2.getIndex(); - wb2.createCellStyle().setFont(font2); - assertEquals(num0 + 2, wb2.getNumberOfFonts()); - - // Save and re-load - Workbook wb3 = _testDataProvider.writeOutAndReadBack(wb2); - wb2.close(); - s1 = wb3.getSheetAt(0); - assertNotNull(s1); - - assertEquals(num0 + 2, wb3.getNumberOfFonts()); - assertNotNull(wb3.getFontAt(font1Idx)); - assertNotNull(wb3.getFontAt(font2Idx)); - - assertEquals(15, wb3.getFontAt(font2Idx).getFontHeightInPoints()); - assertTrue(wb3.getFontAt(font2Idx).getItalic()); - wb3.close(); + try (Workbook wb1 = _testDataProvider.createWorkbook()) { + Sheet s1 = wb1.createSheet(); + Row r1 = s1.createRow(0); + Cell r1c1 = r1.createCell(0); + r1c1.setCellValue(2.2); + + int num0 = wb1.getNumberOfFonts(); + + Font font = wb1.createFont(); + font.setBold(true); + font.setStrikeout(true); + font.setColor(IndexedColors.YELLOW.getIndex()); + font.setFontName("Courier"); + int font1Idx = font.getIndex(); + wb1.createCellStyle().setFont(font); + assertEquals(num0 + 1, wb1.getNumberOfFonts()); + + CellStyle cellStyleTitle = wb1.createCellStyle(); + cellStyleTitle.setFont(font); + r1c1.setCellStyle(cellStyleTitle); + + // Save and re-load + try (Workbook wb2 = _testDataProvider.writeOutAndReadBack(wb1)) { + s1 = wb2.getSheetAt(0); + + assertEquals(num0 + 1, wb2.getNumberOfFonts()); + int idx = s1.getRow(0).getCell(0).getCellStyle().getFontIndex(); + Font fnt = wb2.getFontAt(idx); + assertNotNull(fnt); + assertEquals(IndexedColors.YELLOW.getIndex(), fnt.getColor()); + assertEquals("Courier", fnt.getFontName()); + + // Now add an orphaned one + Font font2 = wb2.createFont(); + font2.setItalic(true); + font2.setFontHeightInPoints((short) 15); + int font2Idx = font2.getIndex(); + wb2.createCellStyle().setFont(font2); + assertEquals(num0 + 2, wb2.getNumberOfFonts()); + + // Save and re-load + try (Workbook wb3 = _testDataProvider.writeOutAndReadBack(wb2)) { + s1 = wb3.getSheetAt(0); + assertNotNull(s1); + + assertEquals(num0 + 2, wb3.getNumberOfFonts()); + assertNotNull(wb3.getFontAt(font1Idx)); + assertNotNull(wb3.getFontAt(font2Idx)); + + assertEquals(15, wb3.getFontAt(font2Idx).getFontHeightInPoints()); + assertTrue(wb3.getFontAt(font2Idx).getItalic()); + } + } + } } /** @@ -155,67 +160,67 @@ public abstract class BaseTestFont { */ @Test public final void test45338() throws IOException { - Workbook wb = _testDataProvider.createWorkbook(); - int num0 = wb.getNumberOfFonts(); - - Sheet s = wb.createSheet(); - s.createRow(0); - s.createRow(1); - s.getRow(0).createCell(0); - s.getRow(1).createCell(0); - - //default font - Font f1 = wb.getFontAt(0); - assertFalse(f1.getBold()); - - // Check that asking for the same font - // multiple times gives you the same thing. - // Otherwise, our tests wouldn't work! - assertSame(wb.getFontAt(0), wb.getFontAt(0)); - - // Look for a new font we have - // yet to add - assertNull( - wb.findFont( - true, (short)123, (short)(22*20), - "Thingy", false, true, (short)2, (byte)2 - ) - ); - - Font nf = wb.createFont(); - int nfIdx = nf.getIndex(); - assertEquals(num0 + 1, wb.getNumberOfFonts()); - - assertSame(nf, wb.getFontAt(nfIdx)); - - nf.setBold(true); - nf.setColor((short)123); - nf.setFontHeightInPoints((short)22); - nf.setFontName("Thingy"); - nf.setItalic(false); - nf.setStrikeout(true); - nf.setTypeOffset((short)2); - nf.setUnderline((byte)2); - - assertEquals(num0 + 1, wb.getNumberOfFonts()); - assertEquals(nf, wb.getFontAt(nfIdx)); - - assertEquals(wb.getFontAt(nfIdx), wb.getFontAt(nfIdx)); - assertNotSame(wb.getFontAt(0), wb.getFontAt(nfIdx)); - - // Find it now - assertNotNull( - wb.findFont( - true, (short)123, (short)(22*20), - "Thingy", false, true, (short)2, (byte)2 - ) - ); - assertSame(nf, - wb.findFont( - true, (short)123, (short)(22*20), - "Thingy", false, true, (short)2, (byte)2 - ) - ); - wb.close(); + try (Workbook wb = _testDataProvider.createWorkbook()) { + int num0 = wb.getNumberOfFonts(); + + Sheet s = wb.createSheet(); + s.createRow(0); + s.createRow(1); + s.getRow(0).createCell(0); + s.getRow(1).createCell(0); + + //default font + Font f1 = wb.getFontAt(0); + assertFalse(f1.getBold()); + + // Check that asking for the same font + // multiple times gives you the same thing. + // Otherwise, our tests wouldn't work! + assertSame(wb.getFontAt(0), wb.getFontAt(0)); + + // Look for a new font we have + // yet to add + assertNull( + wb.findFont( + true, (short) 123, (short) (22 * 20), + "Thingy", false, true, (short) 2, (byte) 2 + ) + ); + + Font nf = wb.createFont(); + int nfIdx = nf.getIndex(); + assertEquals(num0 + 1, wb.getNumberOfFonts()); + + assertSame(nf, wb.getFontAt(nfIdx)); + + nf.setBold(true); + nf.setColor((short) 123); + nf.setFontHeightInPoints((short) 22); + nf.setFontName("Thingy"); + nf.setItalic(false); + nf.setStrikeout(true); + nf.setTypeOffset((short) 2); + nf.setUnderline((byte) 2); + + assertEquals(num0 + 1, wb.getNumberOfFonts()); + assertEquals(nf, wb.getFontAt(nfIdx)); + + assertEquals(wb.getFontAt(nfIdx), wb.getFontAt(nfIdx)); + assertNotSame(wb.getFontAt(0), wb.getFontAt(nfIdx)); + + // Find it now + assertNotNull( + wb.findFont( + true, (short) 123, (short) (22 * 20), + "Thingy", false, true, (short) 2, (byte) 2 + ) + ); + assertSame(nf, + wb.findFont( + true, (short) 123, (short) (22 * 20), + "Thingy", false, true, (short) 2, (byte) 2 + ) + ); + } } } diff --git a/src/testcases/org/apache/poi/ss/usermodel/BaseTestFormulaEvaluator.java b/src/testcases/org/apache/poi/ss/usermodel/BaseTestFormulaEvaluator.java index 68dee47f29..267d72d928 100644 --- a/src/testcases/org/apache/poi/ss/usermodel/BaseTestFormulaEvaluator.java +++ b/src/testcases/org/apache/poi/ss/usermodel/BaseTestFormulaEvaluator.java @@ -116,31 +116,32 @@ public abstract class BaseTestFormulaEvaluator { wb.close(); } - public void baseTestSharedFormulas(String sampleFile) throws IOException { - Workbook wb = _testDataProvider.openSampleWorkbook(sampleFile); - - Sheet sheet = wb.getSheetAt(0); + @Test + public void testSharedFormulas() throws IOException { + String fileName = "shared_formulas.xls" + (getClass().getName().contains("xssf") ? "x" : ""); + try (Workbook wb = _testDataProvider.openSampleWorkbook(fileName)) { - FormulaEvaluator evaluator = wb.getCreationHelper().createFormulaEvaluator(); - Cell cell; + Sheet sheet = wb.getSheetAt(0); - cell = sheet.getRow(1).getCell(0); - assertEquals("B2", cell.getCellFormula()); - assertEquals("ProductionOrderConfirmation", evaluator.evaluate(cell).getStringValue()); + FormulaEvaluator evaluator = wb.getCreationHelper().createFormulaEvaluator(); + Cell cell; - cell = sheet.getRow(2).getCell(0); - assertEquals("B3", cell.getCellFormula()); - assertEquals("RequiredAcceptanceDate", evaluator.evaluate(cell).getStringValue()); + cell = sheet.getRow(1).getCell(0); + assertEquals("B2", cell.getCellFormula()); + assertEquals("ProductionOrderConfirmation", evaluator.evaluate(cell).getStringValue()); - cell = sheet.getRow(3).getCell(0); - assertEquals("B4", cell.getCellFormula()); - assertEquals("Header", evaluator.evaluate(cell).getStringValue()); + cell = sheet.getRow(2).getCell(0); + assertEquals("B3", cell.getCellFormula()); + assertEquals("RequiredAcceptanceDate", evaluator.evaluate(cell).getStringValue()); - cell = sheet.getRow(4).getCell(0); - assertEquals("B5", cell.getCellFormula()); - assertEquals("UniqueDocumentNumberID", evaluator.evaluate(cell).getStringValue()); + cell = sheet.getRow(3).getCell(0); + assertEquals("B4", cell.getCellFormula()); + assertEquals("Header", evaluator.evaluate(cell).getStringValue()); - wb.close(); + cell = sheet.getRow(4).getCell(0); + assertEquals("B5", cell.getCellFormula()); + assertEquals("UniqueDocumentNumberID", evaluator.evaluate(cell).getStringValue()); + } } /** diff --git a/src/testcases/org/apache/poi/ss/usermodel/BaseTestPicture.java b/src/testcases/org/apache/poi/ss/usermodel/BaseTestPicture.java index 09c673ccc3..4335f2553f 100644 --- a/src/testcases/org/apache/poi/ss/usermodel/BaseTestPicture.java +++ b/src/testcases/org/apache/poi/ss/usermodel/BaseTestPicture.java @@ -53,32 +53,53 @@ public abstract class BaseTestPicture { _testDataProvider = testDataProvider; } - public void baseTestResize(Picture input, Picture compare, double scaleX, double scaleY) { - input.resize(scaleX, scaleY); - ClientAnchor inpCA = input.getClientAnchor(); - ClientAnchor cmpCA = compare.getClientAnchor(); + protected abstract Picture getPictureShape(Drawing<?> pat, int picIdx); - Dimension inpDim = ImageUtils.getDimensionFromAnchor(input); - Dimension cmpDim = ImageUtils.getDimensionFromAnchor(compare); + @Test + public void resize() throws IOException { + String fileName = "resize_compare.xls" + (getClass().getName().contains("xssf") ? "x" : ""); + double scaleX = 2; + double scaleY = 2; + + try (Workbook wb = _testDataProvider.openSampleWorkbook(fileName)) { + Sheet sh = wb.getSheetAt(0); + Drawing<?> pat = sh.createDrawingPatriarch(); + + Picture input = getPictureShape(pat, 0); + Picture compare = getPictureShape(pat, 1); + + input.resize(scaleX, scaleY); - double emuPX = Units.EMU_PER_PIXEL; + ClientAnchor inpCA = input.getClientAnchor(); + ClientAnchor cmpCA = compare.getClientAnchor(); - assertEquals(inpDim.getHeight(), cmpDim.getHeight(), emuPX*6, "the image height differs"); - assertEquals(inpDim.getWidth(), cmpDim.getWidth(), emuPX*6, "the image width differs"); - assertEquals(inpCA.getCol1(), cmpCA.getCol1(), "the starting column differs"); - assertEquals(inpCA.getDx1(), cmpCA.getDx1(), 1, "the column x-offset differs"); - assertEquals(inpCA.getDy1(), cmpCA.getDy1(), 1, "the column y-offset differs"); - assertEquals(inpCA.getCol2(), cmpCA.getCol2(), "the ending columns differs"); - // can't compare row heights because of variable test heights + double origDy1 = inpCA.getDy1(); + double origDx1 = inpCA.getDx1(); - input.resize(); - inpDim = ImageUtils.getDimensionFromAnchor(input); + Dimension inpDim = ImageUtils.getDimensionFromAnchor(input); + Dimension cmpDim = ImageUtils.getDimensionFromAnchor(compare); - Dimension imgDim = input.getImageDimension(); + double emuPX = Units.EMU_PER_PIXEL; - assertEquals(imgDim.getHeight(), inpDim.getHeight()/emuPX, 1, "the image height differs"); - assertEquals(imgDim.getWidth(), inpDim.getWidth()/emuPX, 1, "the image width differs"); + assertEquals(inpDim.getHeight(), cmpDim.getHeight(), emuPX * 6, "the image height differs"); + assertEquals(inpDim.getWidth(), cmpDim.getWidth(), emuPX * 6, "the image width differs"); + assertEquals(inpCA.getCol1(), cmpCA.getCol1(), "the starting column differs"); + assertEquals(inpCA.getDx1(), cmpCA.getDx1(), 1, "the column x-offset differs"); + assertEquals(inpCA.getDy1(), origDy1, 1, "the column y-offset differs - image has moved"); + assertEquals(inpCA.getDx1(), origDx1, 1, "the column x-offset differs - image has moved"); + assertEquals(inpCA.getDy1(), cmpCA.getDy1(), 1, "the column y-offset differs"); + assertEquals(inpCA.getCol2(), cmpCA.getCol2(), "the ending columns differs"); + // can't compare row heights because of variable test heights + + input.resize(); + inpDim = ImageUtils.getDimensionFromAnchor(input); + + Dimension imgDim = input.getImageDimension(); + + assertEquals(imgDim.getHeight(), inpDim.getHeight() / emuPX, 1, "the image height differs"); + assertEquals(imgDim.getWidth(), inpDim.getWidth() / emuPX, 1, "the image width differs"); + } } diff --git a/src/testcases/org/apache/poi/ss/usermodel/BaseTestRow.java b/src/testcases/org/apache/poi/ss/usermodel/BaseTestRow.java index 2579ac1e98..2086fd70dc 100644 --- a/src/testcases/org/apache/poi/ss/usermodel/BaseTestRow.java +++ b/src/testcases/org/apache/poi/ss/usermodel/BaseTestRow.java @@ -144,7 +144,9 @@ public abstract class BaseTestRow { wb2.close(); } - protected void baseTestRowBounds(int maxRowNum) throws IOException { + @Test + public void testRowBounds() throws IOException { + int maxRowNum = _testDataProvider.getSpreadsheetVersion().getLastRowIndex(); try (Workbook workbook = _testDataProvider.createWorkbook()) { Sheet sheet = workbook.createSheet(); //Test low row bound @@ -161,7 +163,9 @@ public abstract class BaseTestRow { } } - protected void baseTestCellBounds(int maxCellNum) throws IOException { + @Test + protected void testCellBounds() throws IOException { + int maxCellNum = _testDataProvider.getSpreadsheetVersion().getLastColumnIndex(); try (Workbook wb1 = _testDataProvider.createWorkbook()) { Sheet sheet = wb1.createSheet(); diff --git a/src/testcases/org/apache/poi/ss/usermodel/BaseTestSheet.java b/src/testcases/org/apache/poi/ss/usermodel/BaseTestSheet.java index 978c36c278..56efecc08a 100644 --- a/src/testcases/org/apache/poi/ss/usermodel/BaseTestSheet.java +++ b/src/testcases/org/apache/poi/ss/usermodel/BaseTestSheet.java @@ -755,7 +755,12 @@ public abstract class BaseTestSheet { } } - public void baseTestGetSetMargin(double[] defaultMargins) throws IOException { + @Test + public void testGetSetMargin() throws IOException { + double[] defaultMargins = (getClass().getName().contains("xssf")) + ? new double[]{0.7, 0.7, 0.75, 0.75, 0.3, 0.3} + : new double[]{0.75, 0.75, 1.0, 1.0, 0.3, 0.3}; + double marginLeft = defaultMargins[0]; double marginRight = defaultMargins[1]; double marginTop = defaultMargins[2]; diff --git a/src/testcases/org/apache/poi/ss/usermodel/BaseTestWorkbook.java b/src/testcases/org/apache/poi/ss/usermodel/BaseTestWorkbook.java index 08835946ba..b0015b18c3 100644 --- a/src/testcases/org/apache/poi/ss/usermodel/BaseTestWorkbook.java +++ b/src/testcases/org/apache/poi/ss/usermodel/BaseTestWorkbook.java @@ -723,7 +723,10 @@ public abstract class BaseTestWorkbook { } } - protected void changeSheetNameWithSharedFormulas(String sampleFile) throws IOException { + @Test + public void changeSheetNameWithSharedFormulas() throws IOException { + String sampleFile = "shared_formulas.xls" + (getClass().getName().contains("xssf") ? "x" : ""); + try (Workbook wb = _testDataProvider.openSampleWorkbook(sampleFile)) { FormulaEvaluator evaluator = wb.getCreationHelper().createFormulaEvaluator(); |