You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by ki...@apache.org on 2018/11/20 22:24:26 UTC
svn commit: r1847069 [2/2] - in /poi/branches/hemf: ./ jenkins/ sonar/
sonar/examples/ sonar/excelant/ sonar/main/ sonar/ooxml-schema-encryption/
sonar/ooxml-schema-security/ sonar/ooxml-schema/ sonar/ooxml/
sonar/scratchpad/ src/examples/src/org/apach...
Modified: poi/branches/hemf/src/ooxml/testcases/org/apache/poi/sl/TestOleShape.java
URL: http://svn.apache.org/viewvc/poi/branches/hemf/src/ooxml/testcases/org/apache/poi/sl/TestOleShape.java?rev=1847069&r1=1847068&r2=1847069&view=diff
==============================================================================
--- poi/branches/hemf/src/ooxml/testcases/org/apache/poi/sl/TestOleShape.java (original)
+++ poi/branches/hemf/src/ooxml/testcases/org/apache/poi/sl/TestOleShape.java Tue Nov 20 22:24:26 2018
@@ -35,13 +35,14 @@ import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.Method;
import java.util.Arrays;
import java.util.Collection;
import org.apache.poi.POIDataSamples;
-import org.apache.poi.hslf.usermodel.HSLFSlideShow;
+import org.apache.poi.POIDocument;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
-import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.poifs.storage.RawDataUtil;
import org.apache.poi.sl.usermodel.ObjectMetaData;
@@ -124,7 +125,7 @@ public class TestOleShape {
}
@Test
- public void embedData() throws IOException, InvalidFormatException {
+ public void embedData() throws IOException, InvalidFormatException, ReflectiveOperationException {
final ByteArrayInputStream pptBytes;
try (SlideShow<?,?> ppt = createSlideShow()) {
final PictureData picData = ppt.addPicture(pictureFile, PictureType.EMF);
@@ -146,12 +147,12 @@ public class TestOleShape {
}
}
- private SlideShow<?,?> createSlideShow() {
+ private SlideShow<?,?> createSlideShow() throws ReflectiveOperationException {
if (api == Api.XSLF) {
return new XMLSlideShow();
} else {
assumeFalse(xslfOnly());
- return new HSLFSlideShow();
+ return (SlideShow<?,?>)Class.forName("org.apache.poi.hslf.usermodel.HSLFSlideShow").newInstance();
}
}
@@ -186,7 +187,7 @@ public class TestOleShape {
}
}
- private void validateOleData(final InputStream in) throws IOException, InvalidFormatException {
+ private void validateOleData(final InputStream in) throws IOException, InvalidFormatException, ReflectiveOperationException {
switch (app) {
case EXCEL_V8:
case EXCEL_V12:
@@ -195,8 +196,11 @@ public class TestOleShape {
}
break;
case WORD_V8:
- try (HWPFDocument doc = new HWPFDocument(in)) {
- assertEquals("This is a simple file created with Word 97-SR2.\r", doc.getDocumentText());
+ Class<? extends POIDocument> clazz = (Class<? extends POIDocument>)Class.forName("org.apache.poi.hwpf.HWPFDocument");
+ Constructor<? extends POIDocument> con = clazz.getDeclaredConstructor(InputStream.class);
+ Method m = clazz.getMethod("getDocumentText");
+ try (POIDocument doc = con.newInstance(in)) {
+ assertEquals("This is a simple file created with Word 97-SR2.\r", m.invoke(doc));
}
break;
case WORD_V12:
Modified: poi/branches/hemf/src/ooxml/testcases/org/apache/poi/sl/TestSlide.java
URL: http://svn.apache.org/viewvc/poi/branches/hemf/src/ooxml/testcases/org/apache/poi/sl/TestSlide.java?rev=1847069&r1=1847068&r2=1847069&view=diff
==============================================================================
--- poi/branches/hemf/src/ooxml/testcases/org/apache/poi/sl/TestSlide.java (original)
+++ poi/branches/hemf/src/ooxml/testcases/org/apache/poi/sl/TestSlide.java Tue Nov 20 22:24:26 2018
@@ -29,7 +29,6 @@ import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
-import org.apache.poi.hslf.usermodel.HSLFSlideShow;
import org.apache.poi.sl.usermodel.SlideShow;
import org.apache.poi.sl.usermodel.SlideShowFactory;
import org.apache.poi.xslf.usermodel.XMLSlideShow;
@@ -38,9 +37,9 @@ import org.junit.Test;
public class TestSlide {
@Test
- public void hideHSLF() throws IOException {
+ public void hideHSLF() throws IOException, ReflectiveOperationException {
assumeFalse(xslfOnly());
- SlideShow<?,?> ppt1 = new HSLFSlideShow();
+ SlideShow<?,?> ppt1 = (SlideShow<?,?>)Class.forName("org.apache.poi.hslf.usermodel.HSLFSlideShow").newInstance();
hideSlide(ppt1);
ppt1.close();
}
Modified: poi/branches/hemf/src/ooxml/testcases/org/apache/poi/sl/TestTable.java
URL: http://svn.apache.org/viewvc/poi/branches/hemf/src/ooxml/testcases/org/apache/poi/sl/TestTable.java?rev=1847069&r1=1847068&r2=1847069&view=diff
==============================================================================
--- poi/branches/hemf/src/ooxml/testcases/org/apache/poi/sl/TestTable.java (original)
+++ poi/branches/hemf/src/ooxml/testcases/org/apache/poi/sl/TestTable.java Tue Nov 20 22:24:26 2018
@@ -34,7 +34,6 @@ import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
-import org.apache.poi.hslf.usermodel.HSLFSlideShow;
import org.apache.poi.sl.usermodel.Slide;
import org.apache.poi.sl.usermodel.SlideShow;
import org.apache.poi.sl.usermodel.SlideShowFactory;
@@ -96,9 +95,9 @@ public class TestTable {
}
@Test
- public void directionHSLF() throws IOException {
+ public void directionHSLF() throws IOException, ReflectiveOperationException {
assumeFalse(xslfOnly());
- SlideShow<?,?> ppt1 = new HSLFSlideShow();
+ SlideShow<?,?> ppt1 = (SlideShow<?,?>)Class.forName("org.apache.poi.hslf.usermodel.HSLFSlideShow").newInstance();
testTextDirection(ppt1);
ppt1.close();
}
Modified: poi/branches/hemf/src/ooxml/testcases/org/apache/poi/ss/format/TestCellFormatPart.java
URL: http://svn.apache.org/viewvc/poi/branches/hemf/src/ooxml/testcases/org/apache/poi/ss/format/TestCellFormatPart.java?rev=1847069&r1=1847068&r2=1847069&view=diff
==============================================================================
--- poi/branches/hemf/src/ooxml/testcases/org/apache/poi/ss/format/TestCellFormatPart.java (original)
+++ poi/branches/hemf/src/ooxml/testcases/org/apache/poi/ss/format/TestCellFormatPart.java Tue Nov 20 22:24:26 2018
@@ -17,12 +17,15 @@
package org.apache.poi.ss.format;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
import java.util.Locale;
import java.util.TimeZone;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
+import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.util.LocaleUtil;
import org.apache.poi.xssf.XSSFITestDataProvider;
@@ -38,7 +41,7 @@ public class TestCellFormatPart extends
@BeforeClass
public static void setLocale() {
userLocale = LocaleUtil.getUserLocale();
- LocaleUtil.setUserLocale(Locale.ROOT);
+ LocaleUtil.setUserLocale(Locale.UK);
}
@AfterClass
@@ -153,6 +156,19 @@ public class TestCellFormatPart extends
});
}
+ @Test
+ public void testNamedColors() {
+ assertTrue(CellFormatPart.NAMED_COLORS.size() >= HSSFColor.HSSFColorPredefined.values().length);
+ assertNotNull(CellFormatPart.NAMED_COLORS.get("GREEN"));
+ assertNotNull(CellFormatPart.NAMED_COLORS.get("Green"));
+ assertNotNull(CellFormatPart.NAMED_COLORS.get("RED"));
+ assertNotNull(CellFormatPart.NAMED_COLORS.get("Red"));
+ assertNotNull(CellFormatPart.NAMED_COLORS.get("BLUE"));
+ assertNotNull(CellFormatPart.NAMED_COLORS.get("Blue"));
+ assertNotNull(CellFormatPart.NAMED_COLORS.get("YELLOW"));
+ assertNotNull(CellFormatPart.NAMED_COLORS.get("Yellow"));
+ }
+
private double extractNumber(String str) {
Matcher m = NUMBER_EXTRACT_FMT.matcher(str);
if (!m.find())
Modified: poi/branches/hemf/src/ooxml/testcases/org/apache/poi/ss/usermodel/TestEmbedOLEPackage.java
URL: http://svn.apache.org/viewvc/poi/branches/hemf/src/ooxml/testcases/org/apache/poi/ss/usermodel/TestEmbedOLEPackage.java?rev=1847069&r1=1847068&r2=1847069&view=diff
==============================================================================
--- poi/branches/hemf/src/ooxml/testcases/org/apache/poi/ss/usermodel/TestEmbedOLEPackage.java (original)
+++ poi/branches/hemf/src/ooxml/testcases/org/apache/poi/ss/usermodel/TestEmbedOLEPackage.java Tue Nov 20 22:24:26 2018
@@ -17,10 +17,11 @@
package org.apache.poi.ss.usermodel;
+import static org.apache.poi.sl.SLCommonUtils.xslfOnly;
import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
-import static org.junit.Assume.assumeTrue;
+import static org.junit.Assume.assumeFalse;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
@@ -48,7 +49,7 @@ public class TestEmbedOLEPackage {
private static byte[] samplePPT, samplePPTX, samplePNG;
@BeforeClass
- public static void init() throws IOException {
+ public static void init() throws IOException, ReflectiveOperationException {
samplePPT = getSamplePPT(false);
samplePPTX = getSamplePPT(true);
samplePNG = POIDataSamples.getSpreadSheetInstance().readFile("logoKarmokar4.png");
@@ -68,11 +69,7 @@ public class TestEmbedOLEPackage {
@Test
public void embedHSSF() throws IOException {
- try {
- Class.forName("org.apache.poi.hslf.usermodel.HSLFSlideShow");
- } catch (Exception e) {
- assumeTrue(false);
- }
+ assumeFalse(xslfOnly());
Workbook wb1 = new HSSFWorkbook();
addEmbeddedObjects(wb1);
@@ -124,8 +121,9 @@ public class TestEmbedOLEPackage {
pat2.createObjectData(anchor2, oleIdx2, picIdx);
}
- static byte[] getSamplePPT(boolean ooxml) throws IOException {
- SlideShow<?,?> ppt = (ooxml) ? new XMLSlideShow() : new org.apache.poi.hslf.usermodel.HSLFSlideShow();
+ static byte[] getSamplePPT(boolean ooxml) throws IOException, ReflectiveOperationException {
+ SlideShow<?,?> ppt = (ooxml) ? new XMLSlideShow()
+ : (SlideShow<?,?>)Class.forName("org.apache.poi.hslf.usermodel.HSLFSlideShow").newInstance();
Slide<?,?> slide = ppt.createSlide();
AutoShape<?,?> sh1 = slide.createAutoShape();
Modified: poi/branches/hemf/src/ooxml/testcases/org/apache/poi/xslf/TestXSLFBugs.java
URL: http://svn.apache.org/viewvc/poi/branches/hemf/src/ooxml/testcases/org/apache/poi/xslf/TestXSLFBugs.java?rev=1847069&r1=1847068&r2=1847069&view=diff
==============================================================================
--- poi/branches/hemf/src/ooxml/testcases/org/apache/poi/xslf/TestXSLFBugs.java (original)
+++ poi/branches/hemf/src/ooxml/testcases/org/apache/poi/xslf/TestXSLFBugs.java Tue Nov 20 22:24:26 2018
@@ -17,12 +17,7 @@
package org.apache.poi.xslf;
import static org.apache.poi.POITestCase.assertContains;
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertEquals;
-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 static org.junit.Assert.*;
import java.awt.Color;
import java.awt.Dimension;
@@ -94,6 +89,25 @@ public class TestXSLFBugs {
private static final POIDataSamples slTests = POIDataSamples.getSlideShowInstance();
@Test
+ public void bug62929() throws Exception {
+ try(XMLSlideShow ss1 = XSLFTestDataSamples.openSampleDocument("missing-blip-fill.pptx")) {
+ assertEquals(1, ss1.getSlides().size());
+
+ XSLFSlide slide = ss1.getSlides().get(0);
+
+ assertEquals(slide.getShapes().size(), 1);
+
+ XSLFPictureShape picture = (XSLFPictureShape)slide.getShapes().get(0);
+
+ assertEquals(picture.getShapeId(), 662);
+ assertFalse(picture.isExternalLinkedPicture());
+ assertNull(picture.getPictureData());
+ assertNull(picture.getPictureLink());
+ assertNull(picture.getClipping());
+ }
+ }
+
+ @Test
public void bug62736() throws Exception {
XMLSlideShow ss1 = XSLFTestDataSamples.openSampleDocument("bug62736.pptx");
Modified: poi/branches/hemf/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXSLFTextShape.java
URL: http://svn.apache.org/viewvc/poi/branches/hemf/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXSLFTextShape.java?rev=1847069&r1=1847068&r2=1847069&view=diff
==============================================================================
--- poi/branches/hemf/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXSLFTextShape.java (original)
+++ poi/branches/hemf/src/ooxml/testcases/org/apache/poi/xslf/usermodel/TestXSLFTextShape.java Tue Nov 20 22:24:26 2018
@@ -17,6 +17,7 @@
package org.apache.poi.xslf.usermodel;
import static org.apache.poi.sl.TestCommonSL.sameColor;
+import static org.apache.poi.xslf.usermodel.TestXSLFSimpleShape.getSpPr;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
@@ -24,7 +25,6 @@ import static org.junit.Assert.assertNul
import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertTrue;
import static org.junit.Assume.assumeFalse;
-import static org.apache.poi.xslf.usermodel.TestXSLFSimpleShape.getSpPr;
import java.awt.Color;
import java.io.File;
@@ -33,8 +33,8 @@ import java.util.List;
import java.util.stream.Collectors;
import org.apache.poi.POIDataSamples;
-import org.apache.poi.hslf.usermodel.HSLFTextShape;
import org.apache.poi.sl.usermodel.Placeholder;
+import org.apache.poi.sl.usermodel.Shape;
import org.apache.poi.sl.usermodel.SlideShow;
import org.apache.poi.sl.usermodel.SlideShowFactory;
import org.apache.poi.sl.usermodel.TextParagraph.TextAlign;
@@ -950,12 +950,12 @@ public class TestXSLFTextShape {
}
@Test
- public void metroBlob() throws IOException {
+ public void metroBlob() throws IOException, ReflectiveOperationException {
assumeFalse(xslfOnly);
File f = POIDataSamples.getSlideShowInstance().getFile("bug52297.ppt");
SlideShow<?,?> ppt = SlideShowFactory.create(f);
- HSLFTextShape sh = (HSLFTextShape)ppt.getSlides().get(1).getShapes().get(3);
- XSLFAutoShape xsh = (XSLFAutoShape)sh.getMetroShape();
+ Shape<?, ?> sh = ppt.getSlides().get(1).getShapes().get(3);
+ XSLFAutoShape xsh = (XSLFAutoShape)sh.getClass().getMethod("getMetroShape").invoke(sh);
String textExp = " ___ ___ ___ ________ __ _______ ___ ___________ __________ __ _____ ___ ___ ___ _______ ____ ______ ___________ _____________ ___ _______ ______ ____ ______ __ ___________ __________ ___ _________ _____ ________ __________ ___ _______ __________ ";
String textAct = xsh.getText();
ppt.close();
Modified: poi/branches/hemf/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestSXSSFBugs.java
URL: http://svn.apache.org/viewvc/poi/branches/hemf/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestSXSSFBugs.java?rev=1847069&r1=1847068&r2=1847069&view=diff
==============================================================================
--- poi/branches/hemf/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestSXSSFBugs.java (original)
+++ poi/branches/hemf/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestSXSSFBugs.java Tue Nov 20 22:24:26 2018
@@ -21,7 +21,10 @@ import static org.junit.Assert.assertEqu
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.fail;
+import java.io.File;
+import java.io.FileOutputStream;
import java.io.IOException;
+import java.util.Date;
import org.apache.poi.ss.ITestDataProvider;
import org.apache.poi.ss.usermodel.BaseTestBugzillaIssues;
@@ -34,6 +37,9 @@ import org.apache.poi.ss.usermodel.Workb
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.SXSSFITestDataProvider;
import org.apache.poi.xssf.XSSFITestDataProvider;
+import org.apache.poi.xssf.streaming.SXSSFCell;
+import org.apache.poi.xssf.streaming.SXSSFRow;
+import org.apache.poi.xssf.streaming.SXSSFSheet;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import org.junit.Ignore;
import org.junit.Test;
@@ -166,4 +172,45 @@ public final class TestSXSSFBugs extends
CellRangeAddress range = new CellRangeAddress(rowIndex, rowIndex, colIndex, colIndex);
sheet.setArrayFormula(col1Value, range);
}
+
+ @Test
+ @Ignore("takes too long for the normal test run")
+ public void test62872() throws Exception {
+ final int COLUMN_COUNT = 300;
+ final int ROW_COUNT = 600000;
+ final int TEN_MINUTES = 1000*60*10;
+
+ SXSSFWorkbook workbook = new SXSSFWorkbook(100);
+ workbook.setCompressTempFiles(true);
+ SXSSFSheet sheet = workbook.createSheet("RawData");
+
+ SXSSFRow row = sheet.createRow(0);
+ SXSSFCell cell;
+
+ for (int i = 1; i <= COLUMN_COUNT; i++) {
+ cell = row.createCell(i - 1);
+ cell.setCellValue("Column " + i);
+ }
+
+ for (int i = 1; i < ROW_COUNT; i++) {
+ row = sheet.createRow(i);
+ for (int j = 1; j <= COLUMN_COUNT; j++) {
+ cell = row.createCell(j - 1);
+
+ //make some noise
+ cell.setCellValue(new Date(i*TEN_MINUTES+(j*TEN_MINUTES)/COLUMN_COUNT));
+ }
+ i++;
+ // if (i % 1000 == 0)
+ // logger.info("Created Row " + i);
+ }
+
+ try (FileOutputStream out = new FileOutputStream(File.createTempFile("test62872", ".xlsx"))) {
+ workbook.write(out);
+ workbook.dispose();
+ workbook.close();
+ out.flush();
+ }
+ // logger.info("File written!");
+ }
}
Modified: poi/branches/hemf/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFSheet.java
URL: http://svn.apache.org/viewvc/poi/branches/hemf/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFSheet.java?rev=1847069&r1=1847068&r2=1847069&view=diff
==============================================================================
--- poi/branches/hemf/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFSheet.java (original)
+++ poi/branches/hemf/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFSheet.java Tue Nov 20 22:24:26 2018
@@ -55,10 +55,7 @@ import org.apache.poi.ss.usermodel.Index
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.util.CellAddress;
-import org.apache.poi.ss.util.CellRangeAddress;
-import org.apache.poi.ss.util.CellReference;
-import org.apache.poi.ss.util.CellUtil;
+import org.apache.poi.ss.util.*;
import org.apache.poi.util.LocaleUtil;
import org.apache.poi.xssf.XSSFITestDataProvider;
import org.apache.poi.xssf.XSSFTestDataSamples;
@@ -1993,12 +1990,11 @@ public final class TestXSSFSheet extends
@Test
public void testGetHeaderFooterProperties() throws IOException {
- XSSFWorkbook wb = new XSSFWorkbook();
- XSSFSheet sh = wb.createSheet();
-
- XSSFHeaderFooterProperties hfProp = sh.getHeaderFooterProperties();
- assertNotNull(hfProp);
+ try (XSSFWorkbook wb = new XSSFWorkbook()) {
+ XSSFSheet sh = wb.createSheet();
- wb.close();
+ XSSFHeaderFooterProperties hfProp = sh.getHeaderFooterProperties();
+ assertNotNull(hfProp);
+ }
}
}
Modified: poi/branches/hemf/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFTable.java
URL: http://svn.apache.org/viewvc/poi/branches/hemf/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFTable.java?rev=1847069&r1=1847068&r2=1847069&view=diff
==============================================================================
--- poi/branches/hemf/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFTable.java (original)
+++ poi/branches/hemf/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFTable.java Tue Nov 20 22:24:26 2018
@@ -348,15 +348,47 @@ public final class TestXSSFTable {
IOUtils.closeQuietly(wb);
}
-
+
+ @Test
+ public void testCreateTableIds() throws IOException {
+ try (XSSFWorkbook wb = new XSSFWorkbook()) {
+ XSSFSheet sheet = wb.createSheet();
+
+ AreaReference reference1 = wb.getCreationHelper().createAreaReference(
+ new CellReference(0, 0), new CellReference(2, 2));
+
+ XSSFTable table1 = sheet.createTable(reference1);
+ assertEquals("A1:C3", table1.getCTTable().getRef());
+
+ assertEquals(1, table1.getCTTable().getTableColumns().getTableColumnArray(0).getId());
+ assertEquals(2, table1.getCTTable().getTableColumns().getTableColumnArray(1).getId());
+ assertEquals(3, table1.getCTTable().getTableColumns().getTableColumnArray(2).getId());
+
+ assertEquals(1, table1.getCTTable().getId());
+
+ AreaReference reference2 = wb.getCreationHelper().createAreaReference(
+ new CellReference(10, 10), new CellReference(12, 12));
+
+ XSSFTable table2 = sheet.createTable(reference2);
+ assertEquals("K11:M13", table2.getCTTable().getRef());
+
+ // these IDs duplicate those from table1 and may be cause of https://bz.apache.org/bugzilla/show_bug.cgi?id=62906
+ assertEquals(1, table2.getCTTable().getTableColumns().getTableColumnArray(0).getId());
+ assertEquals(2, table2.getCTTable().getTableColumns().getTableColumnArray(1).getId());
+ assertEquals(3, table2.getCTTable().getTableColumns().getTableColumnArray(2).getId());
+
+ assertEquals(2, table2.getCTTable().getId());
+ }
+ }
+
@Test
public void testSetArea() throws IOException {
- XSSFWorkbook wb = new XSSFWorkbook();
+ try (XSSFWorkbook wb = new XSSFWorkbook()) {
XSSFSheet sh = wb.createSheet();
-
+
AreaReference tableArea = new AreaReference("B10:D12", wb.getSpreadsheetVersion());
XSSFTable table = sh.createTable(tableArea);
-
+
assertEquals(3, table.getColumnCount());
assertEquals(3, table.getRowCount());
@@ -366,11 +398,11 @@ public final class TestXSSFTable {
assertEquals(3, table.getColumnCount());
assertEquals(3, table.getRowCount());
-
+
// increase size by 1 row and 1 column
AreaReference tableArea3 = new AreaReference("B11:E14", wb.getSpreadsheetVersion());
table.setArea(tableArea3);
-
+
assertEquals(4, table.getColumnCount());
assertEquals(4, table.getRowCount());
@@ -380,43 +412,41 @@ public final class TestXSSFTable {
assertEquals(2, table.getColumnCount());
assertEquals(2, table.getRowCount());
-
- IOUtils.closeQuietly(wb);
+ }
}
@Test
- public void testCreateColumn() {
- XSSFWorkbook wb = new XSSFWorkbook();
- XSSFSheet sh = wb.createSheet();
-
- AreaReference tableArea = new AreaReference("A2:A3", wb.getSpreadsheetVersion());
- XSSFTable table = sh.createTable(tableArea);
+ public void testCreateColumn() throws IOException {
+ try (XSSFWorkbook wb = new XSSFWorkbook()) {
+ XSSFSheet sh = wb.createSheet();
- assertEquals(1, table.getColumnCount());
- assertEquals(2, table.getRowCount());
+ AreaReference tableArea = new AreaReference("A2:A3", wb.getSpreadsheetVersion());
+ XSSFTable table = sh.createTable(tableArea);
- // add columns
- XSSFTableColumn c1 = table.getColumns().get(0);
- XSSFTableColumn cB = table.createColumn("Column B");
- XSSFTableColumn cD = table.createColumn("Column D");
- XSSFTableColumn cC = table.createColumn("Column C", 2); // add between B and D
- table.updateReferences();
- table.updateHeaders();
-
- assertEquals(4, table.getColumnCount());
- assertEquals(2, table.getRowCount());
-
- // column IDs start at 1, and increase in the order columns are added (see bug #62740)
- assertEquals("Column c ID", 1, c1.getId());
- assertTrue("Column B ID", c1.getId() < cB.getId());
- assertTrue("Column D ID", cB.getId() < cD.getId());
- assertTrue("Column C ID", cD.getId() < cC.getId());
- assertEquals("Column 1", table.getColumns().get(0).getName()); // generated name
- assertEquals("Column B", table.getColumns().get(1).getName());
- assertEquals("Column C", table.getColumns().get(2).getName());
- assertEquals("Column D", table.getColumns().get(3).getName());
+ assertEquals(1, table.getColumnCount());
+ assertEquals(2, table.getRowCount());
- IOUtils.closeQuietly(wb);
+ // add columns
+ XSSFTableColumn c1 = table.getColumns().get(0);
+ XSSFTableColumn cB = table.createColumn("Column B");
+ XSSFTableColumn cD = table.createColumn("Column D");
+ XSSFTableColumn cC = table.createColumn("Column C", 2); // add between B and D
+ table.updateReferences();
+ table.updateHeaders();
+
+ assertEquals(4, table.getColumnCount());
+ assertEquals(2, table.getRowCount());
+
+ // column IDs start at 1, and increase in the order columns are added (see bug #62740)
+ assertEquals("Column c ID", 1, c1.getId());
+ assertTrue("Column B ID", c1.getId() < cB.getId());
+ assertTrue("Column D ID", cB.getId() < cD.getId());
+ assertTrue("Column C ID", cD.getId() < cC.getId());
+ assertEquals("Column 1", table.getColumns().get(0).getName()); // generated name
+ assertEquals("Column B", table.getColumns().get(1).getName());
+ assertEquals("Column C", table.getColumns().get(2).getName());
+ assertEquals("Column D", table.getColumns().get(3).getName());
+ }
}
@Test(expected = IllegalArgumentException.class)
Modified: poi/branches/hemf/src/scratchpad/src/org/apache/poi/extractor/ole2/OLE2ScratchpadExtractorFactory.java
URL: http://svn.apache.org/viewvc/poi/branches/hemf/src/scratchpad/src/org/apache/poi/extractor/ole2/OLE2ScratchpadExtractorFactory.java?rev=1847069&r1=1847068&r2=1847069&view=diff
==============================================================================
--- poi/branches/hemf/src/scratchpad/src/org/apache/poi/extractor/ole2/OLE2ScratchpadExtractorFactory.java (original)
+++ poi/branches/hemf/src/scratchpad/src/org/apache/poi/extractor/ole2/OLE2ScratchpadExtractorFactory.java Tue Nov 20 22:24:26 2018
@@ -32,6 +32,7 @@ import org.apache.poi.hslf.usermodel.HSL
import org.apache.poi.hsmf.MAPIMessage;
import org.apache.poi.hsmf.datatypes.AttachmentChunks;
import org.apache.poi.hsmf.extractor.OutlookTextExtactor;
+import org.apache.poi.hssf.extractor.ExcelExtractor;
import org.apache.poi.hwpf.OldWordFileFormatException;
import org.apache.poi.hwpf.extractor.Word6Extractor;
import org.apache.poi.hwpf.extractor.WordExtractor;
@@ -40,6 +41,8 @@ import org.apache.poi.poifs.filesystem.D
import org.apache.poi.poifs.filesystem.Entry;
import org.apache.poi.sl.extractor.SlideShowExtractor;
import org.apache.poi.sl.usermodel.SlideShowFactory;
+import org.apache.poi.util.POILogFactory;
+import org.apache.poi.util.POILogger;
/**
* Scratchpad-specific logic for {@link OLE2ExtractorFactory} and
@@ -50,6 +53,8 @@ import org.apache.poi.sl.usermodel.Slide
*/
@SuppressWarnings("WeakerAccess")
public class OLE2ScratchpadExtractorFactory {
+ private static final POILogger logger = POILogFactory.getLogger(OLE2ScratchpadExtractorFactory.class);
+
/**
* Look for certain entries in the stream, to figure it
* out what format is desired
@@ -125,7 +130,16 @@ public class OLE2ScratchpadExtractorFact
throw new IllegalStateException("The extractor didn't know which POIFS it came from!");
}
- if (ext instanceof WordExtractor) {
+ if (ext instanceof ExcelExtractor) {
+ // These are in MBD... under the root
+ Iterator<Entry> it = root.getEntries();
+ while (it.hasNext()) {
+ Entry entry = it.next();
+ if (entry.getName().startsWith("MBD")) {
+ dirs.add(entry);
+ }
+ }
+ } else if (ext instanceof WordExtractor) {
// These are in ObjectPool -> _... under the root
try {
DirectoryEntry op = (DirectoryEntry)
@@ -138,6 +152,7 @@ public class OLE2ScratchpadExtractorFact
}
}
} catch(FileNotFoundException e) {
+ logger.log(POILogger.INFO, "Ignoring FileNotFoundException while extracting Word document", e.getLocalizedMessage());
// ignored here
}
//} else if(ext instanceof PowerPointExtractor) {
Modified: poi/branches/hemf/src/scratchpad/src/org/apache/poi/hslf/record/Notes.java
URL: http://svn.apache.org/viewvc/poi/branches/hemf/src/scratchpad/src/org/apache/poi/hslf/record/Notes.java?rev=1847069&r1=1847068&r2=1847069&view=diff
==============================================================================
--- poi/branches/hemf/src/scratchpad/src/org/apache/poi/hslf/record/Notes.java (original)
+++ poi/branches/hemf/src/scratchpad/src/org/apache/poi/hslf/record/Notes.java Tue Nov 20 22:24:26 2018
@@ -63,7 +63,6 @@ public final class Notes extends SheetCo
for(int i=0; i<_children.length; i++) {
if(_children[i] instanceof NotesAtom) {
notesAtom = (NotesAtom)_children[i];
- //System.out.println("Found notes for sheet " + notesAtom.getSlideID());
}
if(_children[i] instanceof PPDrawing) {
ppDrawing = (PPDrawing)_children[i];
Modified: poi/branches/hemf/src/scratchpad/testcases/org/apache/poi/hmef/TestAttachments.java
URL: http://svn.apache.org/viewvc/poi/branches/hemf/src/scratchpad/testcases/org/apache/poi/hmef/TestAttachments.java?rev=1847069&r1=1847068&r2=1847069&view=diff
==============================================================================
--- poi/branches/hemf/src/scratchpad/testcases/org/apache/poi/hmef/TestAttachments.java (original)
+++ poi/branches/hemf/src/scratchpad/testcases/org/apache/poi/hmef/TestAttachments.java Tue Nov 20 22:24:26 2018
@@ -18,6 +18,7 @@
package org.apache.poi.hmef;
import java.text.DateFormat;
+import java.text.SimpleDateFormat;
import java.util.List;
import java.util.Locale;
@@ -83,9 +84,7 @@ public final class TestAttachments exten
List<Attachment> attachments = quick.getAttachments();
// Pick a predictable date format + timezone
- DateFormat fmt = DateFormat.getDateTimeInstance(
- DateFormat.MEDIUM, DateFormat.MEDIUM, Locale.UK
- );
+ DateFormat fmt = new SimpleDateFormat("dd-MMM-yyyy hh:mm:ss", Locale.UK);
fmt.setTimeZone(LocaleUtil.TIMEZONE_UTC);
// They should all have the same date on them
Modified: poi/branches/hemf/src/scratchpad/testcases/org/apache/poi/hmef/attribute/TestMAPIAttributes.java
URL: http://svn.apache.org/viewvc/poi/branches/hemf/src/scratchpad/testcases/org/apache/poi/hmef/attribute/TestMAPIAttributes.java?rev=1847069&r1=1847068&r2=1847069&view=diff
==============================================================================
--- poi/branches/hemf/src/scratchpad/testcases/org/apache/poi/hmef/attribute/TestMAPIAttributes.java (original)
+++ poi/branches/hemf/src/scratchpad/testcases/org/apache/poi/hmef/attribute/TestMAPIAttributes.java Tue Nov 20 22:24:26 2018
@@ -20,6 +20,7 @@ package org.apache.poi.hmef.attribute;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.text.DateFormat;
+import java.text.SimpleDateFormat;
import java.util.Locale;
import org.apache.poi.POIDataSamples;
@@ -159,9 +160,7 @@ protected void tearDown() throws Excepti
assertEquals(MAPIDateAttribute.class, attr.getClass());
MAPIDateAttribute date = (MAPIDateAttribute)attr;
- DateFormat fmt = DateFormat.getDateTimeInstance(
- DateFormat.MEDIUM, DateFormat.MEDIUM, Locale.UK
- );
+ DateFormat fmt = new SimpleDateFormat("dd-MMM-yyyy HH:mm:ss", Locale.UK);
fmt.setTimeZone(LocaleUtil.TIMEZONE_UTC);
assertEquals("15-Dec-2010 14:46:31", fmt.format(date.getDate()));
Modified: poi/branches/hemf/src/scratchpad/testcases/org/apache/poi/hmef/attribute/TestTNEFAttributes.java
URL: http://svn.apache.org/viewvc/poi/branches/hemf/src/scratchpad/testcases/org/apache/poi/hmef/attribute/TestTNEFAttributes.java?rev=1847069&r1=1847068&r2=1847069&view=diff
==============================================================================
--- poi/branches/hemf/src/scratchpad/testcases/org/apache/poi/hmef/attribute/TestTNEFAttributes.java (original)
+++ poi/branches/hemf/src/scratchpad/testcases/org/apache/poi/hmef/attribute/TestTNEFAttributes.java Tue Nov 20 22:24:26 2018
@@ -19,6 +19,7 @@ package org.apache.poi.hmef.attribute;
import java.io.ByteArrayInputStream;
import java.text.DateFormat;
+import java.text.SimpleDateFormat;
import java.util.Locale;
import org.apache.poi.POIDataSamples;
@@ -159,9 +160,7 @@ public final class TestTNEFAttributes ex
// Ask for it as a Java date, and have it converted
// Pick a predictable format + location + timezone
TNEFDateAttribute date = (TNEFDateAttribute)attr;
- DateFormat fmt = DateFormat.getDateTimeInstance(
- DateFormat.MEDIUM, DateFormat.MEDIUM, Locale.UK
- );
+ DateFormat fmt = new SimpleDateFormat("dd-MMM-yyyy HH:mm:ss", Locale.UK);
fmt.setTimeZone(LocaleUtil.TIMEZONE_UTC);
assertEquals("28-Apr-2010 12:40:56", fmt.format(date.getDate()));
}
Modified: poi/branches/hemf/src/scratchpad/testcases/org/apache/poi/hslf/model/TestHeadersFooters.java
URL: http://svn.apache.org/viewvc/poi/branches/hemf/src/scratchpad/testcases/org/apache/poi/hslf/model/TestHeadersFooters.java?rev=1847069&r1=1847068&r2=1847069&view=diff
==============================================================================
--- poi/branches/hemf/src/scratchpad/testcases/org/apache/poi/hslf/model/TestHeadersFooters.java (original)
+++ poi/branches/hemf/src/scratchpad/testcases/org/apache/poi/hslf/model/TestHeadersFooters.java Tue Nov 20 22:24:26 2018
@@ -30,6 +30,12 @@ import org.apache.poi.POIDataSamples;
import org.apache.poi.hslf.HSLFTestDataSamples;
import org.apache.poi.hslf.usermodel.HSLFSlide;
import org.apache.poi.hslf.usermodel.HSLFSlideShow;
+import org.apache.poi.hslf.usermodel.HSLFTextParagraph;
+import org.apache.poi.sl.usermodel.Shape;
+import org.apache.poi.sl.usermodel.Slide;
+import org.apache.poi.sl.usermodel.SlideShow;
+import org.apache.poi.sl.usermodel.TextParagraph;
+import org.apache.poi.sl.usermodel.TextShape;
import org.junit.Test;
/**
@@ -228,4 +234,45 @@ public final class TestHeadersFooters
ppt2.close();
ppt1.close();
}
+ @Test
+ public void bug58144a() throws IOException {
+ try (InputStream is = _slTests.openResourceAsStream("bug58144-headers-footers-2003.ppt");
+ SlideShow<?,?> ppt = new HSLFSlideShow(is)) {
+ HSLFSlide sl = (HSLFSlide) ppt.getSlides().get(0);
+ HeadersFooters hfs = sl.getHeadersFooters();
+ assertNull(hfs.getHeaderText());
+ assertEquals("Confidential", hfs.getFooterText());
+ List<List<HSLFTextParagraph>> llp = sl.getTextParagraphs();
+ assertEquals("Test", HSLFTextParagraph.getText(llp.get(0)));
+ assertFalse(llp.get(0).get(0).isHeaderOrFooter());
+ }
+ }
+
+ @Test
+ public void bug58144b() throws IOException {
+ try (InputStream is = _slTests.openResourceAsStream("bug58144-headers-footers-2007.ppt");
+ SlideShow<?,?> ppt = new HSLFSlideShow(is)) {
+ Slide<?, ?> sl = ppt.getSlides().get(0);
+ HeadersFooters hfs2 = ((HSLFSlide) sl).getHeadersFooters();
+ assertNull(hfs2.getHeaderText());
+ assertEquals("Slide footer", hfs2.getFooterText());
+
+ testSlideShow(ppt);
+ }
+ }
+
+ // copied from org.apache.poi.sl.TestHeadersFooters because of scratchpad.ignore option
+ private void testSlideShow(SlideShow<?,?> ppt) {
+ Slide<?,?> sl = ppt.getSlides().get(0);
+
+ List<? extends Shape<?,?>> shapes = sl.getShapes();
+ TextShape<?,?> ts0 = (TextShape<?,?>)shapes.get(0);
+ assertEquals("Test file", ts0.getText());
+ TextShape<?,?> ts1 = (TextShape<?,?>)shapes.get(1);
+ assertEquals("Has some text in the headers and footers", ts1.getText());
+ TextShape<?,?> ts2 = (TextShape<?,?>)shapes.get(2);
+ assertEquals("Slide footer", ts2.getText());
+ List<? extends TextParagraph<?,?,?>> ltp = ts2.getTextParagraphs();
+ assertTrue(ltp.get(0).isHeaderOrFooter());
+ }
}
Modified: poi/branches/hemf/src/testcases/org/apache/poi/POIDataSamples.java
URL: http://svn.apache.org/viewvc/poi/branches/hemf/src/testcases/org/apache/poi/POIDataSamples.java?rev=1847069&r1=1847068&r2=1847069&view=diff
==============================================================================
--- poi/branches/hemf/src/testcases/org/apache/poi/POIDataSamples.java (original)
+++ poi/branches/hemf/src/testcases/org/apache/poi/POIDataSamples.java Tue Nov 20 22:24:26 2018
@@ -206,7 +206,7 @@ public final class POIDataSamples {
}
File dataDir = new File(dataDirName, _moduleDir);
if (!dataDir.exists()) {
- throw new RuntimeException("Data dir '" + _moduleDir + "' does not exist");
+ throw new RuntimeException("Data dir '" + dataDir + "' does not exist");
}
// convert to canonical file, to make any subsequent error messages
// clearer.
Modified: poi/branches/hemf/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFPictureData.java
URL: http://svn.apache.org/viewvc/poi/branches/hemf/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFPictureData.java?rev=1847069&r1=1847068&r2=1847069&view=diff
==============================================================================
--- poi/branches/hemf/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFPictureData.java (original)
+++ poi/branches/hemf/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFPictureData.java Tue Nov 20 22:24:26 2018
@@ -19,6 +19,7 @@ package org.apache.poi.hssf.usermodel;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
+import java.io.File;
import java.io.IOException;
import java.util.List;
@@ -27,6 +28,7 @@ import javax.imageio.ImageIO;
import junit.framework.TestCase;
import org.apache.poi.hssf.HSSFTestDataSamples;
+import org.junit.BeforeClass;
/**
* Test <code>HSSFPictureData</code>.
@@ -36,7 +38,19 @@ import org.apache.poi.hssf.HSSFTestDataS
* @author Trejkaz (trejkaz at trypticon dot org)
*/
public final class TestHSSFPictureData extends TestCase{
-
+ @BeforeClass
+ public static void setUpClass() {
+ final String tmpDirProperty = System.getProperty("java.io.tmpdir");
+ if(tmpDirProperty == null || "".equals(tmpDirProperty)) {
+ return;
+ }
+ // ensure that temp-dir exists because ImageIO requires it
+ final File tmpDir = new File(tmpDirProperty);
+ if(!tmpDir.exists() && !tmpDir.mkdirs()) {
+ throw new IllegalStateException("Could not create temporary directory " + tmpDirProperty + ", full path " + tmpDir.getAbsolutePath());
+ }
+ ImageIO.setCacheDirectory(tmpDir);
+ }
public void testPictures() throws IOException {
HSSFWorkbook wb = HSSFTestDataSamples.openSampleWorkbook("SimpleWithImages.xls");
@@ -64,8 +78,8 @@ public final class TestHSSFPictureData e
assertEquals(300, png.getHeight());
assertEquals(HSSFWorkbook.PICTURE_TYPE_PNG, pict.getFormat());
assertEquals("image/png", pict.getMimeType());
- } else {
- //TODO: test code for PICT, WMF and EMF
+ /*} else {
+ //TODO: test code for PICT, WMF and EMF*/
}
}
}
@@ -93,7 +107,7 @@ public final class TestHSSFPictureData e
assertEquals("image/png", pict.getMimeType());
}
- public void testNotNullPictures() throws IOException {
+ public void testNotNullPictures() {
HSSFWorkbook wb = HSSFTestDataSamples.openSampleWorkbook("SheetWithDrawing.xls");
@@ -103,5 +117,4 @@ public final class TestHSSFPictureData e
assertNotNull(pict);
}
}
-
}
Modified: poi/branches/hemf/src/testcases/org/apache/poi/ss/usermodel/TestExcelStyleDateFormatter.java
URL: http://svn.apache.org/viewvc/poi/branches/hemf/src/testcases/org/apache/poi/ss/usermodel/TestExcelStyleDateFormatter.java?rev=1847069&r1=1847068&r2=1847069&view=diff
==============================================================================
--- poi/branches/hemf/src/testcases/org/apache/poi/ss/usermodel/TestExcelStyleDateFormatter.java (original)
+++ poi/branches/hemf/src/testcases/org/apache/poi/ss/usermodel/TestExcelStyleDateFormatter.java Tue Nov 20 22:24:26 2018
@@ -18,124 +18,122 @@
package org.apache.poi.ss.usermodel;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
import java.text.DateFormatSymbols;
import java.text.FieldPosition;
import java.text.ParseException;
import java.text.SimpleDateFormat;
-import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
import org.apache.poi.util.LocaleUtil;
import org.junit.Test;
public class TestExcelStyleDateFormatter {
private static final String EXCEL_DATE_FORMAT = "MMMMM";
+ private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd", Locale.ROOT);
+ private final int jreVersion;
+
+ public TestExcelStyleDateFormatter() {
+ jreVersion = Integer.parseInt(System.getProperty("java.version")
+ .replace("1.8", "8").replaceAll("(\\d+).*", "$1"));
+ }
/**
* [Bug 60369] Month format 'MMMMM' issue with TEXT-formula and Java 8
*/
@Test
- public void test60369() throws ParseException {
- Map<Locale, List<String>> testMap = initializeLocales();
+ public void test60369() {
+ Map<Locale, String> testMap = initializeLocales();
// We have to set up dates as well.
- SimpleDateFormat testDateFormat = new SimpleDateFormat("dd.MM.yyyy", Locale.ROOT);
- List<Date> testDates = Arrays.asList(
- testDateFormat.parse("12.01.1980"),
- testDateFormat.parse("11.02.1995"),
- testDateFormat.parse("10.03.2045"),
- testDateFormat.parse("09.04.2016"),
- testDateFormat.parse("08.05.2017"),
- testDateFormat.parse("07.06.1945"),
- testDateFormat.parse("06.07.1998"),
- testDateFormat.parse("05.08.2099"),
- testDateFormat.parse("04.09.1988"),
- testDateFormat.parse("03.10.2023"),
- testDateFormat.parse("02.11.1978"),
- testDateFormat.parse("01.12.1890"));
+ List<Date> testDates = Stream.of("1980-01-12", "1995-02-11", "2045-03-10", "2016-04-09", "2017-05-08",
+ "1945-06-07", "1998-07-06", "2099-08-05", "1988-09-04", "2023-10-03", "1978-11-02", "1890-12-01")
+ .map(this::parseDate).collect(Collectors.toList());
// Let's iterate over the test setup.
- for (Locale locale : testMap.keySet()) {
- ExcelStyleDateFormatter formatter = new ExcelStyleDateFormatter(EXCEL_DATE_FORMAT, new DateFormatSymbols(locale));
- for (int i = 0; i < testDates.size(); i++) {
- // Call the method to be tested!
- String result =
- formatter.format(testDates.get(i),
- new StringBuffer(),
- new FieldPosition(java.text.DateFormat.MONTH_FIELD)).toString();
- //System.err.println(result + " - " + getUnicode(result.charAt(0)));
- assertEquals("Failed for locale " + locale + ", provider: " + System.getProperty("java.locale.providers") +
- " and date " + testDates.get(i) + ", having: " + result,
- getUnicode(testMap.get(locale).get(i).charAt(0)), getUnicode(result.charAt(0)));
+ final String provider = System.getProperty("java.locale.providers");
+ final FieldPosition fp = new FieldPosition(java.text.DateFormat.MONTH_FIELD);
+ final ExcelStyleDateFormatter formatter = new ExcelStyleDateFormatter(EXCEL_DATE_FORMAT);
+ final StringBuffer sb = new StringBuffer();
+
+ for (Map.Entry<Locale,String> me : testMap.entrySet()) {
+ final Locale locale = me.getKey();
+ final String expected = me.getValue();
+ formatter.setDateFormatSymbols(DateFormatSymbols.getInstance(locale));
+ int month = 0;
+ for (Date d : testDates) {
+ sb.setLength(0);
+ String result = formatter.format(d, sb, fp).toString();
+ String msg = "Failed testDates for locale " + locale + ", provider: " + provider +
+ " and date " + d + ", having: " + result;
+
+ int actIdx = localeIndex(locale);
+
+ assertNotNull(msg, result);
+ assertTrue(msg, result.length() > actIdx);
+ assertEquals(msg, expected.charAt(month), result.charAt(actIdx));
+ month++;
}
}
}
- private Map<Locale, List<String>> initializeLocales() {
- // Setting up the locale to be tested together with a list of asserted unicode-formatted results and put them in a map.
- Locale germanLocale = Locale.GERMAN;
- List<String> germanResultList = Arrays.asList("\u004a", "\u0046", "\u004d", "\u0041", "\u004d",
- "\u004a", "\u004a", "\u0041", "\u0053", "\u004f", "\u004e", "\u0044");
-
- Locale russianLocale = new Locale("ru", "RU");
- List<String> russianResultList = Arrays.asList("\u044f", "\u0444", "\u043c", "\u0430", "\u043c",
- "\u0438", "\u0438", "\u0430", "\u0441", "\u043e", "\u043d", "\u0434");
-
- Locale austrianLocale = new Locale("de", "AT");
- List<String> austrianResultList = Arrays.asList("\u004a", "\u0046", "\u004d", "\u0041", "\u004d",
- "\u004a", "\u004a", "\u0041", "\u0053", "\u004f", "\u004e", "\u0044");
-
- Locale englishLocale = Locale.UK;
- List<String> englishResultList = Arrays.asList("\u004a", "\u0046", "\u004d", "\u0041", "\u004d",
- "\u004a", "\u004a", "\u0041", "\u0053", "\u004f", "\u004e", "\u0044");
-
- Locale frenchLocale = Locale.FRENCH;
- List<String> frenchResultList = Arrays.asList("\u006a", "\u0066", "\u006d", "\u0061", "\u006d",
- "\u006a", "\u006a", "\u0061", "\u0073", "\u006f", "\u006e", "\u0064");
-
- Locale chineseLocale = Locale.CHINESE;
- List<String> chineseResultList = Arrays.asList("\u4e00", "\u4e8c", "\u4e09", "\u56db", "\u4e94",
- "\u516d", "\u4e03", "\u516b", "\u4e5d", "\u5341", "\u5341", "\u5341");
-
- Locale turkishLocale = new Locale("tr", "TR");
- List<String> turkishResultList = Arrays.asList("\u004f", "\u015e", "\u004d", "\u004e", "\u004d",
- "\u0048", "\u0054", "\u0041", "\u0045", "\u0045", "\u004b", "\u0041");
-
- Locale hungarianLocale = new Locale("hu", "HU");
- List<String> hungarianResultList = Arrays.asList("\u006a", "\u0066", "\u006d", "\u00e1", "\u006d",
- "\u006a", "\u006a", "\u0061", "\u0073", "\u006f", "\u006e", "\u0064");
-
- Locale indianLocale = new Locale("en", "IN");
- List<String> indianResultList = Arrays.asList("\u004a", "\u0046", "\u004d", "\u0041", "\u004d",
- "\u004a", "\u004a", "\u0041", "\u0053", "\u004f", "\u004e", "\u0044");
-
- Locale indonesianLocale = new Locale("in", "ID");
- List<String> indonesianResultList = Arrays.asList("\u004a", "\u0046", "\u004d", "\u0041", "\u004d",
- "\u004a", "\u004a", "\u0041", "\u0053", "\u004f", "\u004e", "\u0044");
-
-
- Map<Locale, List<String>> testMap = new HashMap<>();
- testMap.put(germanLocale, germanResultList);
- testMap.put(russianLocale, russianResultList);
- testMap.put(austrianLocale, austrianResultList);
- testMap.put(englishLocale, englishResultList);
- testMap.put(frenchLocale, frenchResultList);
- testMap.put(chineseLocale, chineseResultList);
- testMap.put(turkishLocale, turkishResultList);
- testMap.put(hungarianLocale, hungarianResultList);
- testMap.put(indianLocale, indianResultList);
- testMap.put(indonesianLocale, indonesianResultList);
+ /**
+ * Depending on the JRE version, the provider setting and the locale, a different result
+ * is expected and selected via an index
+ */
+ private int localeIndex(Locale locale) {
+ final String provider = System.getProperty("java.locale.providers");
+ return jreVersion < 12 ||
+ !locale.equals (Locale.CHINESE) ||
+ (provider != null && provider.startsWith("JRE"))
+ ? 0 : 1;
+ }
- return testMap;
+ private Date parseDate(String dateStr) {
+ try {
+ return DATE_FORMAT.parse(dateStr);
+ } catch (ParseException e) {
+ return new Date(0);
+ }
}
- private String getUnicode(char c) {
- return "\\u" + Integer.toHexString(c | 0x10000).substring(1);
+ /**
+ * Setting up the locale to be tested together with a list of asserted
+ * unicode-formatted results and put them in a map.
+ */
+ private Map<Locale, String> initializeLocales() {
+ Map<Locale, String> testMap = new HashMap<>();
+
+ testMap.put(Locale.GERMAN, "JFMAMJJASOND");
+ testMap.put(new Locale("de", "AT"), "JFMAMJJASOND");
+ testMap.put(Locale.UK, "JFMAMJJASOND");
+ testMap.put(new Locale("en", "IN"), "JFMAMJJASOND");
+ testMap.put(new Locale("in", "ID"), "JFMAMJJASOND");
+ testMap.put(Locale.FRENCH, "jfmamjjasond");
+
+ testMap.put(new Locale("ru", "RU"),
+ "\u044f\u0444\u043c\u0430\u043c\u0438\u0438\u0430\u0441\u043e\u043d\u0434");
+
+ testMap.put(Locale.CHINESE, new String[]{
+ "\u4e00\u4e8c\u4e09\u56db\u4e94\u516d\u4e03\u516b\u4e5d\u5341\u5341\u5341",
+ "123456789111"
+ }[localeIndex(Locale.CHINESE)]);
+
+ testMap.put(new Locale("tr", "TR"),
+ "\u004f\u015e\u004d\u004e\u004d\u0048\u0054\u0041\u0045\u0045\u004b\u0041");
+
+ testMap.put(new Locale("hu", "HU"),
+ "\u006a\u0066\u006d\u00e1\u006d\u006a\u006a\u0061\u0073\u006f\u006e\u0064");
+
+ return testMap;
}
@Test
@@ -150,7 +148,7 @@ public class TestExcelStyleDateFormatter
try {
LocaleUtil.setUserLocale(Locale.GERMAN);
String dateStr = new ExcelStyleDateFormatter(EXCEL_DATE_FORMAT).format(
- new SimpleDateFormat("yyyy-MM-dd", Locale.ROOT).parse("2016-03-26"));
+ DATE_FORMAT.parse("2016-03-26"));
assertEquals("M", dateStr);
} finally {
LocaleUtil.setUserLocale(before);
@@ -160,7 +158,7 @@ public class TestExcelStyleDateFormatter
@Test
public void testWithPattern() throws ParseException {
String dateStr = new ExcelStyleDateFormatter("yyyy|" + EXCEL_DATE_FORMAT + "|").format(
- new SimpleDateFormat("yyyy-MM-dd", Locale.ROOT).parse("2016-03-26"));
+ DATE_FORMAT.parse("2016-03-26"));
assertEquals("2016|M|", dateStr);
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org