git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1865208 13f79535-47bb-0310-9956-ffa450edef68pull/159/head
@@ -18,9 +18,13 @@ | |||
package org.apache.poi.xssf.model; | |||
import static org.junit.Assert.assertEquals; | |||
import static org.junit.Assert.assertFalse; | |||
import static org.junit.Assert.assertNotNull; | |||
import static org.junit.Assert.assertNull; | |||
import static org.junit.Assert.assertTrue; | |||
import java.io.FileOutputStream; | |||
import java.io.IOException; | |||
import java.util.LinkedHashMap; | |||
import java.util.Locale; | |||
import java.util.Map; | |||
@@ -70,7 +74,9 @@ public class TestThemesTable { | |||
XSSFWorkbook simpleRS = XSSFTestDataSamples.writeOutAndReadBack(simple); | |||
XSSFWorkbook complexRS = XSSFTestDataSamples.writeOutAndReadBack(complex); | |||
// Fetch fresh copies to test with | |||
simple.close(); | |||
simple = XSSFTestDataSamples.openSampleWorkbook(testFileSimple); | |||
complex.close(); | |||
complex = XSSFTestDataSamples.openSampleWorkbook(testFileComplex); | |||
// Files and descriptions | |||
Map<String,XSSFWorkbook> workbooks = new LinkedHashMap<>(); | |||
@@ -111,13 +117,13 @@ public class TestThemesTable { | |||
XSSFFont font = cell.getCellStyle().getFont(); | |||
CTColor ctColor = font.getCTFont().getColorArray(0); | |||
assertNotNull(ctColor); | |||
assertEquals(true, ctColor.isSetTheme()); | |||
assertTrue(ctColor.isSetTheme()); | |||
assertEquals(themeElem.idx, ctColor.getTheme()); | |||
// Get the colour, via the theme | |||
XSSFColor color = font.getXSSFColor(); | |||
// Theme colours aren't tinted | |||
assertEquals(false, color.hasTint()); | |||
assertFalse(color.hasTint()); | |||
// Check the RGB part (no tint) | |||
assertEquals( | |||
"Wrong theme colour " + themeElem.name + " on " + whatWorkbook, | |||
@@ -141,6 +147,11 @@ public class TestThemesTable { | |||
fos.close(); | |||
} | |||
} | |||
simpleRS.close(); | |||
simple.close(); | |||
complexRS.close(); | |||
complex.close(); | |||
} | |||
/** | |||
@@ -155,80 +166,78 @@ public class TestThemesTable { | |||
* Note - Grey Row has an odd way of doing the styling... | |||
*/ | |||
@Test | |||
public void themedAndNonThemedColours() { | |||
XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook(testFileComplex); | |||
XSSFSheet sheet = wb.getSheetAt(0); | |||
XSSFCellStyle style; | |||
XSSFColor color; | |||
XSSFCell cell; | |||
String[] names = {"White","Black","Grey","Dark Blue","Blue","Red","Green"}; | |||
String[] explicitFHexes = { "FFFFFFFF", "FF000000", "FFC0C0C0", "FF002060", | |||
"FF0070C0", "FFFF0000", "FF00B050" }; | |||
String[] explicitBHexes = { "FFFFFFFF", "FF000000", "FFC0C0C0", "FF002060", | |||
"FF0000FF", "FFFF0000", "FF00FF00" }; | |||
assertEquals(7, names.length); | |||
// Check the non-CF colours in Columns A, B, C and E | |||
for (int rn=1; rn<8; rn++) { | |||
int idx = rn-1; | |||
XSSFRow row = sheet.getRow(rn); | |||
assertNotNull("Missing row " + rn, row); | |||
// Theme cells come first | |||
XSSFCell themeCell = row.getCell(0); | |||
ThemeElement themeElem = ThemeElement.byId(idx); | |||
assertCellContents(themeElem.name, themeCell); | |||
public void themedAndNonThemedColours() throws IOException { | |||
try (XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook(testFileComplex)) { | |||
XSSFSheet sheet = wb.getSheetAt(0); | |||
// Sanity check names | |||
assertCellContents(names[idx], row.getCell(1)); | |||
assertCellContents(names[idx], row.getCell(2)); | |||
assertCellContents(names[idx], row.getCell(4)); | |||
// Check the colours | |||
// A: Theme Based, Foreground | |||
style = themeCell.getCellStyle(); | |||
color = style.getFont().getXSSFColor(); | |||
assertEquals(true, color.isThemed()); | |||
assertEquals(idx, color.getTheme()); | |||
assertEquals(rgbExpected[idx], Hex.encodeHexString(color.getRGB())); | |||
// B: Theme Based, Foreground | |||
cell = row.getCell(1); | |||
style = cell.getCellStyle(); | |||
color = style.getFont().getXSSFColor(); | |||
assertEquals(true, color.isThemed()); | |||
if (idx != 2) { | |||
String[] names = {"White", "Black", "Grey", "Dark Blue", "Blue", "Red", "Green"}; | |||
String[] explicitFHexes = {"FFFFFFFF", "FF000000", "FFC0C0C0", "FF002060", | |||
"FF0070C0", "FFFF0000", "FF00B050"}; | |||
String[] explicitBHexes = {"FFFFFFFF", "FF000000", "FFC0C0C0", "FF002060", | |||
"FF0000FF", "FFFF0000", "FF00FF00"}; | |||
assertEquals(7, names.length); | |||
// Check the non-CF colours in Columns A, B, C and E | |||
for (int rn = 1; rn < 8; rn++) { | |||
int idx = rn - 1; | |||
XSSFRow row = sheet.getRow(rn); | |||
assertNotNull("Missing row " + rn, row); | |||
// Theme cells come first | |||
XSSFCell themeCell = row.getCell(0); | |||
ThemeElement themeElem = ThemeElement.byId(idx); | |||
assertCellContents(themeElem.name, themeCell); | |||
// Sanity check names | |||
assertCellContents(names[idx], row.getCell(1)); | |||
assertCellContents(names[idx], row.getCell(2)); | |||
assertCellContents(names[idx], row.getCell(4)); | |||
// Check the colours | |||
// A: Theme Based, Foreground | |||
XSSFCellStyle style = themeCell.getCellStyle(); | |||
XSSFColor color = style.getFont().getXSSFColor(); | |||
assertTrue(color.isThemed()); | |||
assertEquals(idx, color.getTheme()); | |||
assertEquals(rgbExpected[idx], Hex.encodeHexString(color.getRGB())); | |||
} else { | |||
assertEquals(1, color.getTheme()); | |||
assertEquals(0.50, color.getTint(), 0.001); | |||
// B: Theme Based, Foreground | |||
XSSFCell cell = row.getCell(1); | |||
style = cell.getCellStyle(); | |||
color = style.getFont().getXSSFColor(); | |||
assertTrue(color.isThemed()); | |||
if (idx != 2) { | |||
assertEquals(idx, color.getTheme()); | |||
assertEquals(rgbExpected[idx], Hex.encodeHexString(color.getRGB())); | |||
} else { | |||
assertEquals(1, color.getTheme()); | |||
assertEquals(0.50, color.getTint(), 0.001); | |||
} | |||
// C: Explicit, Foreground | |||
cell = row.getCell(2); | |||
style = cell.getCellStyle(); | |||
color = style.getFont().getXSSFColor(); | |||
assertFalse(color.isThemed()); | |||
assertEquals(explicitFHexes[idx], color.getARGBHex()); | |||
// E: Explicit Background, Foreground all Black | |||
cell = row.getCell(4); | |||
style = cell.getCellStyle(); | |||
color = style.getFont().getXSSFColor(); | |||
assertTrue(color.isThemed()); | |||
assertEquals("FF000000", color.getARGBHex()); | |||
color = style.getFillForegroundXSSFColor(); | |||
assertFalse(color.isThemed()); | |||
assertEquals(explicitBHexes[idx], color.getARGBHex()); | |||
color = style.getFillBackgroundColorColor(); | |||
assertFalse(color.isThemed()); | |||
assertNull(color.getARGBHex()); | |||
} | |||
// C: Explicit, Foreground | |||
cell = row.getCell(2); | |||
style = cell.getCellStyle(); | |||
color = style.getFont().getXSSFColor(); | |||
assertEquals(false, color.isThemed()); | |||
assertEquals(explicitFHexes[idx], color.getARGBHex()); | |||
// E: Explicit Background, Foreground all Black | |||
cell = row.getCell(4); | |||
style = cell.getCellStyle(); | |||
color = style.getFont().getXSSFColor(); | |||
assertEquals(true, color.isThemed()); | |||
assertEquals("FF000000", color.getARGBHex()); | |||
color = style.getFillForegroundXSSFColor(); | |||
assertEquals(false, color.isThemed()); | |||
assertEquals(explicitBHexes[idx], color.getARGBHex()); | |||
color = style.getFillBackgroundColorColor(); | |||
assertEquals(false, color.isThemed()); | |||
assertEquals(null, color.getARGBHex()); | |||
} | |||
// Check the CF colours | |||
@@ -242,13 +251,13 @@ public class TestThemesTable { | |||
@Test | |||
@SuppressWarnings("resource") | |||
public void testAddNew() throws Exception { | |||
public void testAddNew() { | |||
XSSFWorkbook wb = new XSSFWorkbook(); | |||
wb.createSheet(); | |||
assertEquals(null, wb.getTheme()); | |||
assertNull(wb.getTheme()); | |||
StylesTable styles = wb.getStylesSource(); | |||
assertEquals(null, styles.getTheme()); | |||
assertNull(styles.getTheme()); | |||
styles.ensureThemesTable(); | |||
@@ -19,14 +19,31 @@ package org.apache.poi.xssf.streaming; | |||
import org.apache.poi.ss.formula.EvaluationSheet; | |||
import org.apache.poi.ss.usermodel.BaseTestXEvaluationSheet; | |||
import org.apache.poi.ss.usermodel.Sheet; | |||
import org.apache.poi.ss.usermodel.Workbook; | |||
import org.junit.After; | |||
import java.io.IOException; | |||
import java.util.AbstractMap; | |||
import java.util.ArrayList; | |||
import java.util.List; | |||
import java.util.Map; | |||
public class TestSXSSFEvaluationSheet extends BaseTestXEvaluationSheet { | |||
private List<Workbook> workbooksToClose = new ArrayList<>(); | |||
@After | |||
public void closeWorkbooks() throws IOException { | |||
for (Workbook workbook : workbooksToClose) { | |||
workbook.close(); | |||
} | |||
} | |||
@Override | |||
protected Map.Entry<Sheet, EvaluationSheet> getInstance() { | |||
SXSSFSheet sheet = new SXSSFWorkbook().createSheet(); | |||
SXSSFWorkbook workbook = new SXSSFWorkbook(); | |||
workbooksToClose.add(workbook); | |||
SXSSFSheet sheet = workbook.createSheet(); | |||
return new AbstractMap.SimpleEntry<>(sheet, new SXSSFEvaluationSheet(sheet)); | |||
} | |||
} |
@@ -20,6 +20,9 @@ package org.apache.poi.xssf.usermodel; | |||
import org.apache.poi.hssf.HSSFTestDataSamples; | |||
import org.apache.poi.ss.formula.TestMissingWorkbook; | |||
import org.apache.poi.xssf.XSSFTestDataSamples; | |||
import org.junit.Before; | |||
import static org.junit.Assert.assertNotNull; | |||
/** | |||
* XSSF Specific version of the Missing Workbooks test | |||
@@ -28,12 +31,13 @@ public final class TestMissingWorkbookOnXSSF extends TestMissingWorkbook { | |||
public TestMissingWorkbookOnXSSF() { | |||
super("52575_main.xlsx", "source_dummy.xlsx", "52575_source.xls"); | |||
} | |||
@Override | |||
protected void setUp() throws Exception { | |||
@Before | |||
public void setUp() { | |||
mainWorkbook = XSSFTestDataSamples.openSampleWorkbook(MAIN_WORKBOOK_FILENAME); | |||
sourceWorkbook = HSSFTestDataSamples.openSampleWorkbook(SOURCE_WORKBOOK_FILENAME); | |||
assertNotNull(mainWorkbook); | |||
assertNotNull(sourceWorkbook); | |||
} |
@@ -21,62 +21,70 @@ import org.apache.poi.xssf.XSSFTestDataSamples; | |||
import junit.framework.TestCase; | |||
import java.io.IOException; | |||
public final class TestXSSFChart extends TestCase { | |||
public void testGetAccessors() { | |||
XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("WithThreeCharts.xlsx"); | |||
XSSFSheet s1 = wb.getSheetAt(0); | |||
XSSFSheet s2 = wb.getSheetAt(1); | |||
XSSFSheet s3 = wb.getSheetAt(2); | |||
public void testGetAccessors() throws IOException { | |||
try (XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("WithThreeCharts.xlsx")) { | |||
XSSFSheet s1 = wb.getSheetAt(0); | |||
XSSFSheet s2 = wb.getSheetAt(1); | |||
XSSFSheet s3 = wb.getSheetAt(2); | |||
assertEquals(0, s1.getRelations().size()); | |||
assertEquals(1, s2.getRelations().size()); | |||
assertEquals(1, s3.getRelations().size()); | |||
assertEquals(0, s1.getRelations().size()); | |||
assertEquals(1, s2.getRelations().size()); | |||
assertEquals(1, s3.getRelations().size()); | |||
assertNotNull(XSSFTestDataSamples.writeOutAndReadBack(wb)); | |||
assertNotNull(XSSFTestDataSamples.writeOutAndReadBack(wb)); | |||
} | |||
} | |||
public void testGetCharts() throws Exception { | |||
XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("WithThreeCharts.xlsx"); | |||
XSSFSheet s1 = wb.getSheetAt(0); | |||
XSSFSheet s2 = wb.getSheetAt(1); | |||
XSSFSheet s3 = wb.getSheetAt(2); | |||
assertEquals(0, s1.createDrawingPatriarch().getCharts().size()); | |||
assertEquals(2, s2.createDrawingPatriarch().getCharts().size()); | |||
assertEquals(1, s3.createDrawingPatriarch().getCharts().size()); | |||
// Check the titles | |||
XSSFChart chart = s2.createDrawingPatriarch().getCharts().get(0); | |||
assertEquals(null, chart.getTitleText()); | |||
chart = s2.createDrawingPatriarch().getCharts().get(1); | |||
assertEquals("Pie Chart Title Thingy", chart.getTitleText().getString()); | |||
chart = s3.createDrawingPatriarch().getCharts().get(0); | |||
assertEquals("Sheet 3 Chart with Title", chart.getTitleText().getString()); | |||
assertNotNull(XSSFTestDataSamples.writeOutAndReadBack(wb)); | |||
try (XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("WithThreeCharts.xlsx")) { | |||
XSSFSheet s1 = wb.getSheetAt(0); | |||
XSSFSheet s2 = wb.getSheetAt(1); | |||
XSSFSheet s3 = wb.getSheetAt(2); | |||
assertEquals(0, s1.createDrawingPatriarch().getCharts().size()); | |||
assertEquals(2, s2.createDrawingPatriarch().getCharts().size()); | |||
assertEquals(1, s3.createDrawingPatriarch().getCharts().size()); | |||
// Check the titles | |||
XSSFChart chart = s2.createDrawingPatriarch().getCharts().get(0); | |||
assertNull(chart.getTitleText()); | |||
chart = s2.createDrawingPatriarch().getCharts().get(1); | |||
XSSFRichTextString title = chart.getTitleText(); | |||
assertNotNull(title); | |||
assertEquals("Pie Chart Title Thingy", title.getString()); | |||
chart = s3.createDrawingPatriarch().getCharts().get(0); | |||
title = chart.getTitleText(); | |||
assertNotNull(title); | |||
assertEquals("Sheet 3 Chart with Title", title.getString()); | |||
assertNotNull(XSSFTestDataSamples.writeOutAndReadBack(wb)); | |||
} | |||
} | |||
public void testAddChartsToNewWorkbook() throws Exception { | |||
XSSFWorkbook wb = new XSSFWorkbook(); | |||
XSSFSheet s1 = wb.createSheet(); | |||
XSSFDrawing d1 = s1.createDrawingPatriarch(); | |||
XSSFClientAnchor a1 = new XSSFClientAnchor(0, 0, 0, 0, 1, 1, 10, 30); | |||
XSSFChart c1 = d1.createChart(a1); | |||
try (XSSFWorkbook wb = new XSSFWorkbook()) { | |||
XSSFSheet s1 = wb.createSheet(); | |||
XSSFDrawing d1 = s1.createDrawingPatriarch(); | |||
XSSFClientAnchor a1 = new XSSFClientAnchor(0, 0, 0, 0, 1, 1, 10, 30); | |||
XSSFChart c1 = d1.createChart(a1); | |||
assertEquals(1, d1.getCharts().size()); | |||
assertEquals(1, d1.getCharts().size()); | |||
assertNotNull(c1.getGraphicFrame()); | |||
assertNotNull(c1.getOrAddLegend()); | |||
assertNotNull(c1.getGraphicFrame()); | |||
assertNotNull(c1.getOrAddLegend()); | |||
XSSFClientAnchor a2 = new XSSFClientAnchor(0, 0, 0, 0, 1, 11, 10, 60); | |||
XSSFChart c2 = d1.createChart(a2); | |||
assertNotNull(c2); | |||
assertEquals(2, d1.getCharts().size()); | |||
XSSFClientAnchor a2 = new XSSFClientAnchor(0, 0, 0, 0, 1, 11, 10, 60); | |||
XSSFChart c2 = d1.createChart(a2); | |||
assertNotNull(c2); | |||
assertEquals(2, d1.getCharts().size()); | |||
assertNotNull(XSSFTestDataSamples.writeOutAndReadBack(wb)); | |||
assertNotNull(XSSFTestDataSamples.writeOutAndReadBack(wb)); | |||
} | |||
} | |||
} |
@@ -22,60 +22,65 @@ import org.apache.poi.xssf.XSSFTestDataSamples; | |||
import org.junit.Test; | |||
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTChartsheet; | |||
import java.io.IOException; | |||
import static org.junit.Assert.*; | |||
public final class TestXSSFChartSheet { | |||
@Test | |||
public void testXSSFFactory() { | |||
XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("chart_sheet.xlsx"); | |||
assertEquals(4, wb.getNumberOfSheets()); | |||
public void testXSSFFactory() throws IOException { | |||
try (XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("chart_sheet.xlsx")) { | |||
assertEquals(4, wb.getNumberOfSheets()); | |||
//the third sheet is of type 'chartsheet' | |||
assertEquals("Chart1", wb.getSheetName(2)); | |||
assertTrue(wb.getSheetAt(2) instanceof XSSFChartSheet); | |||
assertEquals("Chart1", wb.getSheetAt(2).getSheetName()); | |||
//the third sheet is of type 'chartsheet' | |||
assertEquals("Chart1", wb.getSheetName(2)); | |||
assertTrue(wb.getSheetAt(2) instanceof XSSFChartSheet); | |||
assertEquals("Chart1", wb.getSheetAt(2).getSheetName()); | |||
final CTChartsheet ctChartsheet = ((XSSFChartSheet) wb.getSheetAt(2)).getCTChartsheet(); | |||
assertNotNull(ctChartsheet); | |||
final CTChartsheet ctChartsheet = ((XSSFChartSheet) wb.getSheetAt(2)).getCTChartsheet(); | |||
assertNotNull(ctChartsheet); | |||
} | |||
} | |||
@Test | |||
public void testGetAccessors() { | |||
XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("chart_sheet.xlsx"); | |||
XSSFChartSheet sheet = (XSSFChartSheet)wb.getSheetAt(2); | |||
assertFalse("Row iterator for charts sheets should return zero rows", | |||
sheet.iterator().hasNext()); | |||
//access to a arbitrary row | |||
assertNull(sheet.getRow(1)); | |||
//some basic get* accessors | |||
assertEquals(0, sheet.getNumberOfComments()); | |||
assertEquals(0, sheet.getNumHyperlinks()); | |||
assertEquals(0, sheet.getNumMergedRegions()); | |||
assertNull(sheet.getActiveCell()); | |||
assertTrue(sheet.getAutobreaks()); | |||
assertNull(sheet.getCellComment(new CellAddress(0, 0))); | |||
assertEquals(0, sheet.getColumnBreaks().length); | |||
assertTrue(sheet.getRowSumsBelow()); | |||
assertNotNull(sheet.createDrawingPatriarch()); | |||
assertNotNull(sheet.getDrawingPatriarch()); | |||
assertNotNull(sheet.getCTChartsheet()); | |||
public void testGetAccessors() throws IOException { | |||
try (XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("chart_sheet.xlsx")) { | |||
XSSFChartSheet sheet = (XSSFChartSheet) wb.getSheetAt(2); | |||
assertFalse("Row iterator for charts sheets should return zero rows", | |||
sheet.iterator().hasNext()); | |||
//access to a arbitrary row | |||
assertNull(sheet.getRow(1)); | |||
//some basic get* accessors | |||
assertEquals(0, sheet.getNumberOfComments()); | |||
assertEquals(0, sheet.getNumHyperlinks()); | |||
assertEquals(0, sheet.getNumMergedRegions()); | |||
assertNull(sheet.getActiveCell()); | |||
assertTrue(sheet.getAutobreaks()); | |||
assertNull(sheet.getCellComment(new CellAddress(0, 0))); | |||
assertEquals(0, sheet.getColumnBreaks().length); | |||
assertTrue(sheet.getRowSumsBelow()); | |||
assertNotNull(sheet.createDrawingPatriarch()); | |||
assertNotNull(sheet.getDrawingPatriarch()); | |||
assertNotNull(sheet.getCTChartsheet()); | |||
} | |||
} | |||
@Test | |||
public void testGetCharts() throws Exception { | |||
XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("chart_sheet.xlsx"); | |||
XSSFSheet ns = wb.getSheetAt(0); | |||
XSSFChartSheet cs = (XSSFChartSheet)wb.getSheetAt(2); | |||
assertEquals(0, ns.createDrawingPatriarch().getCharts().size()); | |||
assertEquals(1, cs.createDrawingPatriarch().getCharts().size()); | |||
XSSFChart chart = cs.createDrawingPatriarch().getCharts().get(0); | |||
assertNull(chart.getTitleText()); | |||
try (XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("chart_sheet.xlsx")) { | |||
XSSFSheet ns = wb.getSheetAt(0); | |||
XSSFChartSheet cs = (XSSFChartSheet) wb.getSheetAt(2); | |||
assertEquals(0, ns.createDrawingPatriarch().getCharts().size()); | |||
assertEquals(1, cs.createDrawingPatriarch().getCharts().size()); | |||
XSSFChart chart = cs.createDrawingPatriarch().getCharts().get(0); | |||
assertNull(chart.getTitleText()); | |||
} | |||
} | |||
} |
@@ -19,6 +19,7 @@ package org.apache.poi.xssf.usermodel; | |||
import static org.junit.Assert.assertEquals; | |||
import static org.junit.Assert.assertFalse; | |||
import static org.junit.Assert.assertNull; | |||
import static org.junit.Assert.assertTrue; | |||
import java.io.IOException; | |||
@@ -32,173 +33,169 @@ public final class TestXSSFColor { | |||
@Test | |||
public void testIndexedColour() throws Exception { | |||
XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("48779.xlsx"); | |||
// Check the CTColor is as expected | |||
XSSFColor indexed = wb.getCellStyleAt(1).getFillBackgroundXSSFColor(); | |||
assertEquals(true, indexed.getCTColor().isSetIndexed()); | |||
assertEquals(64, indexed.getCTColor().getIndexed()); | |||
assertEquals(false, indexed.getCTColor().isSetRgb()); | |||
assertEquals(null, indexed.getCTColor().getRgb()); | |||
// Now check the XSSFColor | |||
// Note - 64 is a special "auto" one with no rgb equiv | |||
assertEquals(64, indexed.getIndexed()); | |||
assertEquals(null, indexed.getRGB()); | |||
assertEquals(null, indexed.getRGBWithTint()); | |||
assertEquals(null, indexed.getARGBHex()); | |||
assertFalse(indexed.hasAlpha()); | |||
assertFalse(indexed.hasTint()); | |||
// Now move to one with indexed rgb values | |||
indexed.setIndexed(59); | |||
assertEquals(true, indexed.getCTColor().isSetIndexed()); | |||
assertEquals(59, indexed.getCTColor().getIndexed()); | |||
assertEquals(false, indexed.getCTColor().isSetRgb()); | |||
assertEquals(null, indexed.getCTColor().getRgb()); | |||
assertEquals(59, indexed.getIndexed()); | |||
assertEquals("FF333300", indexed.getARGBHex()); | |||
assertEquals(3, indexed.getRGB().length); | |||
assertEquals(0x33, indexed.getRGB()[0]); | |||
assertEquals(0x33, indexed.getRGB()[1]); | |||
assertEquals(0x00, indexed.getRGB()[2]); | |||
assertEquals(4, indexed.getARGB().length); | |||
assertEquals(-1, indexed.getARGB()[0]); | |||
assertEquals(0x33, indexed.getARGB()[1]); | |||
assertEquals(0x33, indexed.getARGB()[2]); | |||
assertEquals(0x00, indexed.getARGB()[3]); | |||
// You don't get tinted indexed colours, sorry... | |||
assertEquals(null, indexed.getRGBWithTint()); | |||
wb.close(); | |||
try (XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("48779.xlsx")) { | |||
// Check the CTColor is as expected | |||
XSSFColor indexed = wb.getCellStyleAt(1).getFillBackgroundXSSFColor(); | |||
assertTrue(indexed.getCTColor().isSetIndexed()); | |||
assertEquals(64, indexed.getCTColor().getIndexed()); | |||
assertFalse(indexed.getCTColor().isSetRgb()); | |||
assertNull(indexed.getCTColor().getRgb()); | |||
// Now check the XSSFColor | |||
// Note - 64 is a special "auto" one with no rgb equiv | |||
assertEquals(64, indexed.getIndexed()); | |||
assertNull(indexed.getRGB()); | |||
assertNull(indexed.getRGBWithTint()); | |||
assertNull(indexed.getARGBHex()); | |||
assertFalse(indexed.hasAlpha()); | |||
assertFalse(indexed.hasTint()); | |||
// Now move to one with indexed rgb values | |||
indexed.setIndexed(59); | |||
assertTrue(indexed.getCTColor().isSetIndexed()); | |||
assertEquals(59, indexed.getCTColor().getIndexed()); | |||
assertFalse(indexed.getCTColor().isSetRgb()); | |||
assertNull(indexed.getCTColor().getRgb()); | |||
assertEquals(59, indexed.getIndexed()); | |||
assertEquals("FF333300", indexed.getARGBHex()); | |||
assertEquals(3, indexed.getRGB().length); | |||
assertEquals(0x33, indexed.getRGB()[0]); | |||
assertEquals(0x33, indexed.getRGB()[1]); | |||
assertEquals(0x00, indexed.getRGB()[2]); | |||
assertEquals(4, indexed.getARGB().length); | |||
assertEquals(-1, indexed.getARGB()[0]); | |||
assertEquals(0x33, indexed.getARGB()[1]); | |||
assertEquals(0x33, indexed.getARGB()[2]); | |||
assertEquals(0x00, indexed.getARGB()[3]); | |||
// You don't get tinted indexed colours, sorry... | |||
assertNull(indexed.getRGBWithTint()); | |||
} | |||
} | |||
@Test | |||
public void testRGBColour() throws IOException { | |||
XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("50299.xlsx"); | |||
// Check the CTColor is as expected | |||
XSSFColor rgb3 = wb.getCellStyleAt((short)25).getFillForegroundXSSFColor(); | |||
assertEquals(false, rgb3.getCTColor().isSetIndexed()); | |||
assertEquals(0, rgb3.getCTColor().getIndexed()); | |||
assertEquals(true, rgb3.getCTColor().isSetTint()); | |||
assertEquals(-0.34999, rgb3.getCTColor().getTint(), 0.00001); | |||
assertEquals(true, rgb3.getCTColor().isSetRgb()); | |||
assertEquals(3, rgb3.getCTColor().getRgb().length); | |||
// Now check the XSSFColor | |||
assertEquals(0, rgb3.getIndexed()); | |||
assertEquals(-0.34999, rgb3.getTint(), 0.00001); | |||
assertFalse(rgb3.hasAlpha()); | |||
assertTrue(rgb3.hasTint()); | |||
assertEquals("FFFFFFFF", rgb3.getARGBHex()); | |||
assertEquals(3, rgb3.getRGB().length); | |||
assertEquals(-1, rgb3.getRGB()[0]); | |||
assertEquals(-1, rgb3.getRGB()[1]); | |||
assertEquals(-1, rgb3.getRGB()[2]); | |||
assertEquals(4, rgb3.getARGB().length); | |||
assertEquals(-1, rgb3.getARGB()[0]); | |||
assertEquals(-1, rgb3.getARGB()[1]); | |||
assertEquals(-1, rgb3.getARGB()[2]); | |||
assertEquals(-1, rgb3.getARGB()[3]); | |||
// Tint doesn't have the alpha | |||
// tint = -0.34999 | |||
// 255 * (1 + tint) = 165 truncated | |||
// or (byte) -91 (which is 165 - 256) | |||
assertEquals(3, rgb3.getRGBWithTint().length); | |||
assertEquals(-91, rgb3.getRGBWithTint()[0]); | |||
assertEquals(-91, rgb3.getRGBWithTint()[1]); | |||
assertEquals(-91, rgb3.getRGBWithTint()[2]); | |||
// Set the color to black (no theme). | |||
rgb3.setRGB(new byte[] {0, 0, 0}); | |||
assertEquals("FF000000", rgb3.getARGBHex()); | |||
assertEquals(0, rgb3.getCTColor().getRgb()[0]); | |||
assertEquals(0, rgb3.getCTColor().getRgb()[1]); | |||
assertEquals(0, rgb3.getCTColor().getRgb()[2]); | |||
// Set another, is fine | |||
rgb3.setRGB(new byte[] {16,17,18}); | |||
assertFalse(rgb3.hasAlpha()); | |||
assertEquals("FF101112", rgb3.getARGBHex()); | |||
assertEquals(0x10, rgb3.getCTColor().getRgb()[0]); | |||
assertEquals(0x11, rgb3.getCTColor().getRgb()[1]); | |||
assertEquals(0x12, rgb3.getCTColor().getRgb()[2]); | |||
wb.close(); | |||
try (XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("50299.xlsx")) { | |||
// Check the CTColor is as expected | |||
XSSFColor rgb3 = wb.getCellStyleAt((short) 25).getFillForegroundXSSFColor(); | |||
assertFalse(rgb3.getCTColor().isSetIndexed()); | |||
assertEquals(0, rgb3.getCTColor().getIndexed()); | |||
assertTrue(rgb3.getCTColor().isSetTint()); | |||
assertEquals(-0.34999, rgb3.getCTColor().getTint(), 0.00001); | |||
assertTrue(rgb3.getCTColor().isSetRgb()); | |||
assertEquals(3, rgb3.getCTColor().getRgb().length); | |||
// Now check the XSSFColor | |||
assertEquals(0, rgb3.getIndexed()); | |||
assertEquals(-0.34999, rgb3.getTint(), 0.00001); | |||
assertFalse(rgb3.hasAlpha()); | |||
assertTrue(rgb3.hasTint()); | |||
assertEquals("FFFFFFFF", rgb3.getARGBHex()); | |||
assertEquals(3, rgb3.getRGB().length); | |||
assertEquals(-1, rgb3.getRGB()[0]); | |||
assertEquals(-1, rgb3.getRGB()[1]); | |||
assertEquals(-1, rgb3.getRGB()[2]); | |||
assertEquals(4, rgb3.getARGB().length); | |||
assertEquals(-1, rgb3.getARGB()[0]); | |||
assertEquals(-1, rgb3.getARGB()[1]); | |||
assertEquals(-1, rgb3.getARGB()[2]); | |||
assertEquals(-1, rgb3.getARGB()[3]); | |||
// Tint doesn't have the alpha | |||
// tint = -0.34999 | |||
// 255 * (1 + tint) = 165 truncated | |||
// or (byte) -91 (which is 165 - 256) | |||
assertEquals(3, rgb3.getRGBWithTint().length); | |||
assertEquals(-91, rgb3.getRGBWithTint()[0]); | |||
assertEquals(-91, rgb3.getRGBWithTint()[1]); | |||
assertEquals(-91, rgb3.getRGBWithTint()[2]); | |||
// Set the color to black (no theme). | |||
rgb3.setRGB(new byte[]{0, 0, 0}); | |||
assertEquals("FF000000", rgb3.getARGBHex()); | |||
assertEquals(0, rgb3.getCTColor().getRgb()[0]); | |||
assertEquals(0, rgb3.getCTColor().getRgb()[1]); | |||
assertEquals(0, rgb3.getCTColor().getRgb()[2]); | |||
// Set another, is fine | |||
rgb3.setRGB(new byte[]{16, 17, 18}); | |||
assertFalse(rgb3.hasAlpha()); | |||
assertEquals("FF101112", rgb3.getARGBHex()); | |||
assertEquals(0x10, rgb3.getCTColor().getRgb()[0]); | |||
assertEquals(0x11, rgb3.getCTColor().getRgb()[1]); | |||
assertEquals(0x12, rgb3.getCTColor().getRgb()[2]); | |||
} | |||
} | |||
@Test | |||
public void testARGBColour() throws IOException { | |||
XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("48779.xlsx"); | |||
// Check the CTColor is as expected | |||
XSSFColor rgb4 = wb.getCellStyleAt((short)1).getFillForegroundXSSFColor(); | |||
assertEquals(false, rgb4.getCTColor().isSetIndexed()); | |||
assertEquals(0, rgb4.getCTColor().getIndexed()); | |||
assertEquals(true, rgb4.getCTColor().isSetRgb()); | |||
assertEquals(4, rgb4.getCTColor().getRgb().length); | |||
// Now check the XSSFColor | |||
assertEquals(0, rgb4.getIndexed()); | |||
assertEquals(0.0, rgb4.getTint(), 0); | |||
assertFalse(rgb4.hasTint()); | |||
assertTrue(rgb4.hasAlpha()); | |||
assertEquals("FFFF0000", rgb4.getARGBHex()); | |||
assertEquals(3, rgb4.getRGB().length); | |||
assertEquals(-1, rgb4.getRGB()[0]); | |||
assertEquals(0, rgb4.getRGB()[1]); | |||
assertEquals(0, rgb4.getRGB()[2]); | |||
assertEquals(4, rgb4.getARGB().length); | |||
assertEquals(-1, rgb4.getARGB()[0]); | |||
assertEquals(-1, rgb4.getARGB()[1]); | |||
assertEquals(0, rgb4.getARGB()[2]); | |||
assertEquals(0, rgb4.getARGB()[3]); | |||
// Tint doesn't have the alpha | |||
assertEquals(3, rgb4.getRGBWithTint().length); | |||
assertEquals(-1, rgb4.getRGBWithTint()[0]); | |||
assertEquals(0, rgb4.getRGBWithTint()[1]); | |||
assertEquals(0, rgb4.getRGBWithTint()[2]); | |||
// Turn on tinting, and check it behaves | |||
// TODO These values are suspected to be wrong... | |||
rgb4.setTint(0.4); | |||
assertTrue(rgb4.hasTint()); | |||
assertEquals(0.4, rgb4.getTint(), 0); | |||
assertEquals(3, rgb4.getRGBWithTint().length); | |||
assertEquals(-1, rgb4.getRGBWithTint()[0]); | |||
assertEquals(102, rgb4.getRGBWithTint()[1]); | |||
assertEquals(102, rgb4.getRGBWithTint()[2]); | |||
wb.close(); | |||
try (XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("48779.xlsx")) { | |||
// Check the CTColor is as expected | |||
XSSFColor rgb4 = wb.getCellStyleAt((short) 1).getFillForegroundXSSFColor(); | |||
assertFalse(rgb4.getCTColor().isSetIndexed()); | |||
assertEquals(0, rgb4.getCTColor().getIndexed()); | |||
assertTrue(rgb4.getCTColor().isSetRgb()); | |||
assertEquals(4, rgb4.getCTColor().getRgb().length); | |||
// Now check the XSSFColor | |||
assertEquals(0, rgb4.getIndexed()); | |||
assertEquals(0.0, rgb4.getTint(), 0); | |||
assertFalse(rgb4.hasTint()); | |||
assertTrue(rgb4.hasAlpha()); | |||
assertEquals("FFFF0000", rgb4.getARGBHex()); | |||
assertEquals(3, rgb4.getRGB().length); | |||
assertEquals(-1, rgb4.getRGB()[0]); | |||
assertEquals(0, rgb4.getRGB()[1]); | |||
assertEquals(0, rgb4.getRGB()[2]); | |||
assertEquals(4, rgb4.getARGB().length); | |||
assertEquals(-1, rgb4.getARGB()[0]); | |||
assertEquals(-1, rgb4.getARGB()[1]); | |||
assertEquals(0, rgb4.getARGB()[2]); | |||
assertEquals(0, rgb4.getARGB()[3]); | |||
// Tint doesn't have the alpha | |||
assertEquals(3, rgb4.getRGBWithTint().length); | |||
assertEquals(-1, rgb4.getRGBWithTint()[0]); | |||
assertEquals(0, rgb4.getRGBWithTint()[1]); | |||
assertEquals(0, rgb4.getRGBWithTint()[2]); | |||
// Turn on tinting, and check it behaves | |||
// TODO These values are suspected to be wrong... | |||
rgb4.setTint(0.4); | |||
assertTrue(rgb4.hasTint()); | |||
assertEquals(0.4, rgb4.getTint(), 0); | |||
assertEquals(3, rgb4.getRGBWithTint().length); | |||
assertEquals(-1, rgb4.getRGBWithTint()[0]); | |||
assertEquals(102, rgb4.getRGBWithTint()[1]); | |||
assertEquals(102, rgb4.getRGBWithTint()[2]); | |||
} | |||
} | |||
@Test | |||
public void testCustomIndexedColour() throws Exception { | |||
XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("customIndexedColors.xlsx"); | |||
XSSFCell cell = wb.getSheetAt(1).getRow(0).getCell(0); | |||
XSSFColor color = cell.getCellStyle().getFillForegroundColorColor(); | |||
CTColors ctColors = wb.getStylesSource().getCTStylesheet().getColors(); | |||
try (XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("customIndexedColors.xlsx")) { | |||
XSSFCell cell = wb.getSheetAt(1).getRow(0).getCell(0); | |||
XSSFColor color = cell.getCellStyle().getFillForegroundColorColor(); | |||
CTColors ctColors = wb.getStylesSource().getCTStylesheet().getColors(); | |||
CTRgbColor ctRgbColor = ctColors.getIndexedColors() | |||
.getRgbColorList() | |||
.get(color.getIndex()); | |||
CTRgbColor ctRgbColor = ctColors.getIndexedColors() | |||
.getRgbColorList() | |||
.get(color.getIndex()); | |||
String hexRgb = ctRgbColor.getDomNode().getAttributes().getNamedItem("rgb").getNodeValue(); | |||
String hexRgb = ctRgbColor.getDomNode().getAttributes().getNamedItem("rgb").getNodeValue(); | |||
assertEquals(hexRgb, color.getARGBHex()); | |||
assertEquals(hexRgb, color.getARGBHex()); | |||
} | |||
} | |||
} |
@@ -53,30 +53,29 @@ public final class TestXSSFFormulaEvaluation extends BaseTestFormulaEvaluator { | |||
@Test | |||
public void testSharedFormulas_evaluateInCell() throws IOException { | |||
XSSFWorkbook wb = (XSSFWorkbook)_testDataProvider.openSampleWorkbook("49872.xlsx"); | |||
FormulaEvaluator evaluator = wb.getCreationHelper().createFormulaEvaluator(); | |||
XSSFSheet sheet = wb.getSheetAt(0); | |||
try (XSSFWorkbook wb = (XSSFWorkbook)_testDataProvider.openSampleWorkbook("49872.xlsx")) { | |||
FormulaEvaluator evaluator = wb.getCreationHelper().createFormulaEvaluator(); | |||
XSSFSheet sheet = wb.getSheetAt(0); | |||
double result = 3.0; | |||
double result = 3.0; | |||
// B3 is a master shared formula, C3 and D3 don't have the formula written in their f element. | |||
// Instead, the attribute si for a particular cell is used to figure what the formula expression | |||
// should be based on the cell's relative location to the master formula, e.g. | |||
// B3: <f t="shared" ref="B3:D3" si="0">B1+B2</f> | |||
// C3 and D3: <f t="shared" si="0"/> | |||
// B3 is a master shared formula, C3 and D3 don't have the formula written in their f element. | |||
// Instead, the attribute si for a particular cell is used to figure what the formula expression | |||
// should be based on the cell's relative location to the master formula, e.g. | |||
// B3: <f t="shared" ref="B3:D3" si="0">B1+B2</f> | |||
// C3 and D3: <f t="shared" si="0"/> | |||
// get B3 and evaluate it in the cell | |||
XSSFCell b3 = sheet.getRow(2).getCell(1); | |||
assertEquals(result, evaluator.evaluateInCell(b3).getNumericCellValue(), 0); | |||
// get B3 and evaluate it in the cell | |||
XSSFCell b3 = sheet.getRow(2).getCell(1); | |||
assertEquals(result, evaluator.evaluateInCell(b3).getNumericCellValue(), 0); | |||
//at this point the master formula is gone, but we are still able to evaluate dependent cells | |||
XSSFCell c3 = sheet.getRow(2).getCell(2); | |||
assertEquals(result, evaluator.evaluateInCell(c3).getNumericCellValue(), 0); | |||
//at this point the master formula is gone, but we are still able to evaluate dependent cells | |||
XSSFCell c3 = sheet.getRow(2).getCell(2); | |||
assertEquals(result, evaluator.evaluateInCell(c3).getNumericCellValue(), 0); | |||
XSSFCell d3 = sheet.getRow(2).getCell(3); | |||
assertEquals(result, evaluator.evaluateInCell(d3).getNumericCellValue(), 0); | |||
wb.close(); | |||
XSSFCell d3 = sheet.getRow(2).getCell(3); | |||
assertEquals(result, evaluator.evaluateInCell(d3).getNumericCellValue(), 0); | |||
} | |||
} | |||
/** | |||
@@ -84,32 +83,31 @@ public final class TestXSSFFormulaEvaluation extends BaseTestFormulaEvaluator { | |||
*/ | |||
@Test | |||
public void testEvaluateColumnGreaterThan255() throws IOException { | |||
XSSFWorkbook wb = (XSSFWorkbook) _testDataProvider.openSampleWorkbook("50096.xlsx"); | |||
XSSFFormulaEvaluator evaluator = wb.getCreationHelper().createFormulaEvaluator(); | |||
/* | |||
* The first row simply contains the numbers 1 - 300. | |||
* The second row simply refers to the cell value above in the first row by a simple formula. | |||
*/ | |||
for (int i = 245; i < 265; i++) { | |||
XSSFCell cell_noformula = wb.getSheetAt(0).getRow(0).getCell(i); | |||
XSSFCell cell_formula = wb.getSheetAt(0).getRow(1).getCell(i); | |||
CellReference ref_noformula = new CellReference(cell_noformula.getRowIndex(), cell_noformula.getColumnIndex()); | |||
CellReference ref_formula = new CellReference(cell_noformula.getRowIndex(), cell_noformula.getColumnIndex()); | |||
String fmla = cell_formula.getCellFormula(); | |||
// assure that the formula refers to the cell above. | |||
// the check below is 'deep' and involves conversion of the shared formula: | |||
// in the sample file a shared formula in GN1 is spanned in the range GN2:IY2, | |||
assertEquals(ref_noformula.formatAsString(), fmla); | |||
CellValue cv_noformula = evaluator.evaluate(cell_noformula); | |||
CellValue cv_formula = evaluator.evaluate(cell_formula); | |||
assertEquals("Wrong evaluation result in " + ref_formula.formatAsString(), | |||
cv_noformula.getNumberValue(), cv_formula.getNumberValue(), 0); | |||
try (XSSFWorkbook wb = (XSSFWorkbook) _testDataProvider.openSampleWorkbook("50096.xlsx")) { | |||
XSSFFormulaEvaluator evaluator = wb.getCreationHelper().createFormulaEvaluator(); | |||
/* | |||
* The first row simply contains the numbers 1 - 300. | |||
* The second row simply refers to the cell value above in the first row by a simple formula. | |||
*/ | |||
for (int i = 245; i < 265; i++) { | |||
XSSFCell cell_noformula = wb.getSheetAt(0).getRow(0).getCell(i); | |||
XSSFCell cell_formula = wb.getSheetAt(0).getRow(1).getCell(i); | |||
CellReference ref_noformula = new CellReference(cell_noformula.getRowIndex(), cell_noformula.getColumnIndex()); | |||
CellReference ref_formula = new CellReference(cell_noformula.getRowIndex(), cell_noformula.getColumnIndex()); | |||
String fmla = cell_formula.getCellFormula(); | |||
// assure that the formula refers to the cell above. | |||
// the check below is 'deep' and involves conversion of the shared formula: | |||
// in the sample file a shared formula in GN1 is spanned in the range GN2:IY2, | |||
assertEquals(ref_noformula.formatAsString(), fmla); | |||
CellValue cv_noformula = evaluator.evaluate(cell_noformula); | |||
CellValue cv_formula = evaluator.evaluate(cell_formula); | |||
assertEquals("Wrong evaluation result in " + ref_formula.formatAsString(), | |||
cv_noformula.getNumberValue(), cv_formula.getNumberValue(), 0); | |||
} | |||
} | |||
wb.close(); | |||
} | |||
/** | |||
@@ -119,105 +117,110 @@ public final class TestXSSFFormulaEvaluation extends BaseTestFormulaEvaluator { | |||
*/ | |||
@Test | |||
public void testReferencesToOtherWorkbooks() throws Exception { | |||
XSSFWorkbook wb = (XSSFWorkbook) _testDataProvider.openSampleWorkbook("ref2-56737.xlsx"); | |||
XSSFFormulaEvaluator evaluator = wb.getCreationHelper().createFormulaEvaluator(); | |||
XSSFSheet s = wb.getSheetAt(0); | |||
// References to a .xlsx file | |||
Row rXSLX = s.getRow(2); | |||
Cell cXSLX_cell = rXSLX.getCell(4); | |||
Cell cXSLX_sNR = rXSLX.getCell(6); | |||
Cell cXSLX_gNR = rXSLX.getCell(8); | |||
assertEquals("[1]Uses!$A$1", cXSLX_cell.getCellFormula()); | |||
assertEquals("[1]Defines!NR_To_A1", cXSLX_sNR.getCellFormula()); | |||
assertEquals("[1]!NR_Global_B2", cXSLX_gNR.getCellFormula()); | |||
assertEquals("Hello!", cXSLX_cell.getStringCellValue()); | |||
assertEquals("Test A1", cXSLX_sNR.getStringCellValue()); | |||
assertEquals(142.0, cXSLX_gNR.getNumericCellValue(), 0); | |||
// References to a .xls file | |||
Row rXSL = s.getRow(4); | |||
Cell cXSL_cell = rXSL.getCell(4); | |||
Cell cXSL_sNR = rXSL.getCell(6); | |||
Cell cXSL_gNR = rXSL.getCell(8); | |||
assertEquals("[2]Uses!$C$1", cXSL_cell.getCellFormula()); | |||
assertEquals("[2]Defines!NR_To_A1", cXSL_sNR.getCellFormula()); | |||
assertEquals("[2]!NR_Global_B2", cXSL_gNR.getCellFormula()); | |||
assertEquals("Hello!", cXSL_cell.getStringCellValue()); | |||
assertEquals("Test A1", cXSL_sNR.getStringCellValue()); | |||
assertEquals(142.0, cXSL_gNR.getNumericCellValue(), 0); | |||
// Try to evaluate without references, won't work | |||
// (At least, not unit we fix bug #56752 that is) | |||
try { | |||
evaluator.evaluate(cXSL_cell); | |||
fail("Without a fix for #56752, shouldn't be able to evaluate a " + | |||
"reference to a non-provided linked workbook"); | |||
} catch(Exception e) { | |||
// expected here | |||
} | |||
// Setup the environment | |||
Map<String,FormulaEvaluator> evaluators = new HashMap<>(); | |||
evaluators.put("ref2-56737.xlsx", evaluator); | |||
evaluators.put("56737.xlsx", | |||
_testDataProvider.openSampleWorkbook("56737.xlsx").getCreationHelper().createFormulaEvaluator()); | |||
evaluators.put("56737.xls", | |||
HSSFTestDataSamples.openSampleWorkbook("56737.xls").getCreationHelper().createFormulaEvaluator()); | |||
evaluator.setupReferencedWorkbooks(evaluators); | |||
// Try evaluating all of them, ensure we don't blow up | |||
for(Row r : s) { | |||
for (Cell c : r) { | |||
evaluator.evaluate(c); | |||
try (XSSFWorkbook wb = (XSSFWorkbook) _testDataProvider.openSampleWorkbook("ref2-56737.xlsx")) { | |||
XSSFFormulaEvaluator evaluator = wb.getCreationHelper().createFormulaEvaluator(); | |||
XSSFSheet s = wb.getSheetAt(0); | |||
// References to a .xlsx file | |||
Row rXSLX = s.getRow(2); | |||
Cell cXSLX_cell = rXSLX.getCell(4); | |||
Cell cXSLX_sNR = rXSLX.getCell(6); | |||
Cell cXSLX_gNR = rXSLX.getCell(8); | |||
assertEquals("[1]Uses!$A$1", cXSLX_cell.getCellFormula()); | |||
assertEquals("[1]Defines!NR_To_A1", cXSLX_sNR.getCellFormula()); | |||
assertEquals("[1]!NR_Global_B2", cXSLX_gNR.getCellFormula()); | |||
assertEquals("Hello!", cXSLX_cell.getStringCellValue()); | |||
assertEquals("Test A1", cXSLX_sNR.getStringCellValue()); | |||
assertEquals(142.0, cXSLX_gNR.getNumericCellValue(), 0); | |||
// References to a .xls file | |||
Row rXSL = s.getRow(4); | |||
Cell cXSL_cell = rXSL.getCell(4); | |||
Cell cXSL_sNR = rXSL.getCell(6); | |||
Cell cXSL_gNR = rXSL.getCell(8); | |||
assertEquals("[2]Uses!$C$1", cXSL_cell.getCellFormula()); | |||
assertEquals("[2]Defines!NR_To_A1", cXSL_sNR.getCellFormula()); | |||
assertEquals("[2]!NR_Global_B2", cXSL_gNR.getCellFormula()); | |||
assertEquals("Hello!", cXSL_cell.getStringCellValue()); | |||
assertEquals("Test A1", cXSL_sNR.getStringCellValue()); | |||
assertEquals(142.0, cXSL_gNR.getNumericCellValue(), 0); | |||
// Try to evaluate without references, won't work | |||
// (At least, not unit we fix bug #56752 that is) | |||
try { | |||
evaluator.evaluate(cXSL_cell); | |||
fail("Without a fix for #56752, shouldn't be able to evaluate a " + | |||
"reference to a non-provided linked workbook"); | |||
} catch (Exception e) { | |||
// expected here | |||
} | |||
} | |||
// And evaluate the other way too | |||
evaluator.evaluateAll(); | |||
// Static evaluator won't work, as no references passed in | |||
try { | |||
XSSFFormulaEvaluator.evaluateAllFormulaCells(wb); | |||
fail("Static method lacks references, shouldn't work"); | |||
} catch(Exception e) { | |||
// expected here | |||
} | |||
// Evaluate specific cells and check results | |||
assertEquals("\"Hello!\"", evaluator.evaluate(cXSLX_cell).formatAsString()); | |||
assertEquals("\"Test A1\"", evaluator.evaluate(cXSLX_sNR).formatAsString()); | |||
assertEquals("142.0", evaluator.evaluate(cXSLX_gNR).formatAsString()); | |||
assertEquals("\"Hello!\"", evaluator.evaluate(cXSL_cell).formatAsString()); | |||
assertEquals("\"Test A1\"", evaluator.evaluate(cXSL_sNR).formatAsString()); | |||
assertEquals("142.0", evaluator.evaluate(cXSL_gNR).formatAsString()); | |||
// Add another formula referencing these workbooks | |||
Cell cXSL_cell2 = rXSL.createCell(40); | |||
cXSL_cell2.setCellFormula("[56737.xls]Uses!$C$1"); | |||
// TODO Shouldn't it become [2] like the others? | |||
assertEquals("[56737.xls]Uses!$C$1", cXSL_cell2.getCellFormula()); | |||
assertEquals("\"Hello!\"", evaluator.evaluate(cXSL_cell2).formatAsString()); | |||
// Now add a formula that refers to yet another (different) workbook | |||
// Won't work without the workbook being linked | |||
Cell cXSLX_nw_cell = rXSLX.createCell(42); | |||
try { | |||
cXSLX_nw_cell.setCellFormula("[alt.xlsx]Sheet1!$A$1"); | |||
fail("New workbook not linked, shouldn't be able to add"); | |||
} catch (Exception e) { | |||
// expected here | |||
} | |||
// Link and re-try | |||
try (Workbook alt = new XSSFWorkbook()) { | |||
alt.createSheet().createRow(0).createCell(0).setCellValue("In another workbook"); | |||
// TODO Implement the rest of this, see bug #57184 | |||
// Setup the environment | |||
Map<String, FormulaEvaluator> evaluators = new HashMap<>(); | |||
evaluators.put("ref2-56737.xlsx", evaluator); | |||
Workbook wbEval1 = _testDataProvider.openSampleWorkbook("56737.xlsx"); | |||
evaluators.put("56737.xlsx", | |||
wbEval1.getCreationHelper().createFormulaEvaluator()); | |||
Workbook wbEval2 = HSSFTestDataSamples.openSampleWorkbook("56737.xls"); | |||
evaluators.put("56737.xls", | |||
wbEval2.getCreationHelper().createFormulaEvaluator()); | |||
evaluator.setupReferencedWorkbooks(evaluators); | |||
// Try evaluating all of them, ensure we don't blow up | |||
for (Row r : s) { | |||
for (Cell c : r) { | |||
evaluator.evaluate(c); | |||
} | |||
} | |||
// And evaluate the other way too | |||
evaluator.evaluateAll(); | |||
// Static evaluator won't work, as no references passed in | |||
try { | |||
XSSFFormulaEvaluator.evaluateAllFormulaCells(wb); | |||
fail("Static method lacks references, shouldn't work"); | |||
} catch (Exception e) { | |||
// expected here | |||
} | |||
// Evaluate specific cells and check results | |||
assertEquals("\"Hello!\"", evaluator.evaluate(cXSLX_cell).formatAsString()); | |||
assertEquals("\"Test A1\"", evaluator.evaluate(cXSLX_sNR).formatAsString()); | |||
assertEquals("142.0", evaluator.evaluate(cXSLX_gNR).formatAsString()); | |||
assertEquals("\"Hello!\"", evaluator.evaluate(cXSL_cell).formatAsString()); | |||
assertEquals("\"Test A1\"", evaluator.evaluate(cXSL_sNR).formatAsString()); | |||
assertEquals("142.0", evaluator.evaluate(cXSL_gNR).formatAsString()); | |||
// Add another formula referencing these workbooks | |||
Cell cXSL_cell2 = rXSL.createCell(40); | |||
cXSL_cell2.setCellFormula("[56737.xls]Uses!$C$1"); | |||
// TODO Shouldn't it become [2] like the others? | |||
assertEquals("[56737.xls]Uses!$C$1", cXSL_cell2.getCellFormula()); | |||
assertEquals("\"Hello!\"", evaluator.evaluate(cXSL_cell2).formatAsString()); | |||
// Now add a formula that refers to yet another (different) workbook | |||
// Won't work without the workbook being linked | |||
Cell cXSLX_nw_cell = rXSLX.createCell(42); | |||
try { | |||
cXSLX_nw_cell.setCellFormula("[alt.xlsx]Sheet1!$A$1"); | |||
fail("New workbook not linked, shouldn't be able to add"); | |||
} catch (Exception e) { | |||
// expected here | |||
} | |||
wbEval1.close(); | |||
wbEval2.close(); | |||
// Link and re-try | |||
try (Workbook alt = new XSSFWorkbook()) { | |||
alt.createSheet().createRow(0).createCell(0).setCellValue("In another workbook"); | |||
// TODO Implement the rest of this, see bug #57184 | |||
/* | |||
wb.linkExternalWorkbook("alt.xlsx", alt); | |||
@@ -238,9 +241,8 @@ public final class TestXSSFFormulaEvaluation extends BaseTestFormulaEvaluator { | |||
evaluator.evaluate(cXSLX_nw_cell); | |||
assertEquals("In another workbook", cXSLX_nw_cell.getStringCellValue()); | |||
*/ | |||
} | |||
} | |||
wb.close(); | |||
} | |||
/** | |||
@@ -389,63 +391,66 @@ public final class TestXSSFFormulaEvaluation extends BaseTestFormulaEvaluator { | |||
// FIXME: use junit4 parametrization | |||
private static void verifyAllFormulasInWorkbookCanBeEvaluated(String sampleWorkbook) throws IOException { | |||
XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook(sampleWorkbook); | |||
XSSFFormulaEvaluator.evaluateAllFormulaCells(wb); | |||
wb.close(); | |||
try (XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook(sampleWorkbook)) { | |||
XSSFFormulaEvaluator.evaluateAllFormulaCells(wb); | |||
} | |||
} | |||
@Test | |||
public void test59736() { | |||
Workbook wb = XSSFTestDataSamples.openSampleWorkbook("59736.xlsx"); | |||
FormulaEvaluator evaluator = wb.getCreationHelper().createFormulaEvaluator(); | |||
Cell cell = wb.getSheetAt(0).getRow(0).getCell(0); | |||
assertEquals(1, cell.getNumericCellValue(), 0.001); | |||
cell = wb.getSheetAt(0).getRow(1).getCell(0); | |||
CellValue value = evaluator.evaluate(cell); | |||
assertEquals(1, value.getNumberValue(), 0.001); | |||
cell = wb.getSheetAt(0).getRow(2).getCell(0); | |||
value = evaluator.evaluate(cell); | |||
assertEquals(1, value.getNumberValue(), 0.001); | |||
public void test59736() throws IOException { | |||
try (XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("59736.xlsx")) { | |||
FormulaEvaluator evaluator = wb.getCreationHelper().createFormulaEvaluator(); | |||
Cell cell = wb.getSheetAt(0).getRow(0).getCell(0); | |||
assertEquals(1, cell.getNumericCellValue(), 0.001); | |||
cell = wb.getSheetAt(0).getRow(1).getCell(0); | |||
CellValue value = evaluator.evaluate(cell); | |||
assertEquals(1, value.getNumberValue(), 0.001); | |||
cell = wb.getSheetAt(0).getRow(2).getCell(0); | |||
value = evaluator.evaluate(cell); | |||
assertEquals(1, value.getNumberValue(), 0.001); | |||
} | |||
} | |||
@Test | |||
public void evaluateInCellReturnsSameDataType() throws IOException { | |||
XSSFWorkbook wb = new XSSFWorkbook(); | |||
wb.createSheet().createRow(0).createCell(0); | |||
XSSFFormulaEvaluator evaluator = wb.getCreationHelper().createFormulaEvaluator(); | |||
XSSFCell cell = wb.getSheetAt(0).getRow(0).getCell(0); | |||
XSSFCell same = evaluator.evaluateInCell(cell); | |||
assertSame(cell, same); | |||
wb.close(); | |||
try (XSSFWorkbook wb = new XSSFWorkbook()) { | |||
wb.createSheet().createRow(0).createCell(0); | |||
XSSFFormulaEvaluator evaluator = wb.getCreationHelper().createFormulaEvaluator(); | |||
XSSFCell cell = wb.getSheetAt(0).getRow(0).getCell(0); | |||
XSSFCell same = evaluator.evaluateInCell(cell); | |||
assertSame(cell, same); | |||
} | |||
} | |||
@Test | |||
public void testBug61468() { | |||
Workbook wb = XSSFTestDataSamples.openSampleWorkbook("simple-monthly-budget.xlsx"); | |||
FormulaEvaluator evaluator = wb.getCreationHelper().createFormulaEvaluator(); | |||
Cell cell = wb.getSheetAt(0).getRow(8).getCell(4); | |||
assertEquals(3750, cell.getNumericCellValue(), 0.001); | |||
CellValue value = evaluator.evaluate(cell); | |||
assertEquals(3750, value.getNumberValue(), 0.001); | |||
public void testBug61468() throws IOException { | |||
try (XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("simple-monthly-budget.xlsx")) { | |||
FormulaEvaluator evaluator = wb.getCreationHelper().createFormulaEvaluator(); | |||
Cell cell = wb.getSheetAt(0).getRow(8).getCell(4); | |||
assertEquals(3750, cell.getNumericCellValue(), 0.001); | |||
CellValue value = evaluator.evaluate(cell); | |||
assertEquals(3750, value.getNumberValue(), 0.001); | |||
} | |||
} | |||
@Test | |||
@Ignore // this is from an open bug/discussion over handling localization for number formats | |||
public void testBug61495() { | |||
Workbook wb = XSSFTestDataSamples.openSampleWorkbook("61495-test.xlsm"); | |||
FormulaEvaluator evaluator = wb.getCreationHelper().createFormulaEvaluator(); | |||
Cell cell = wb.getSheetAt(0).getRow(0).getCell(1); | |||
public void testBug61495() throws IOException { | |||
try (XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("61495-test.xlsm")) { | |||
FormulaEvaluator evaluator = wb.getCreationHelper().createFormulaEvaluator(); | |||
Cell cell = wb.getSheetAt(0).getRow(0).getCell(1); | |||
// assertEquals("D 67.10", cell.getStringCellValue()); | |||
CellValue value = evaluator.evaluate(cell); | |||
assertEquals("D 67.10", | |||
value.getStringValue()); | |||
assertEquals("D 0,068", | |||
evaluator.evaluate(wb.getSheetAt(0).getRow(1).getCell(1)).getStringValue()); | |||
CellValue value = evaluator.evaluate(cell); | |||
assertEquals("D 67.10", | |||
value.getStringValue()); | |||
assertEquals("D 0,068", | |||
evaluator.evaluate(wb.getSheetAt(0).getRow(1).getCell(1)).getStringValue()); | |||
} | |||
} | |||
@@ -39,15 +39,16 @@ public final class TestXSSFHyperlink extends BaseTestHyperlink { | |||
} | |||
@Test | |||
public void testLoadExisting() { | |||
XSSFWorkbook workbook = XSSFTestDataSamples.openSampleWorkbook("WithMoreVariousData.xlsx"); | |||
assertEquals(3, workbook.getNumberOfSheets()); | |||
public void testLoadExisting() throws IOException { | |||
try (XSSFWorkbook workbook = XSSFTestDataSamples.openSampleWorkbook("WithMoreVariousData.xlsx")) { | |||
assertEquals(3, workbook.getNumberOfSheets()); | |||
XSSFSheet sheet = workbook.getSheetAt(0); | |||
XSSFSheet sheet = workbook.getSheetAt(0); | |||
// Check the hyperlinks | |||
assertEquals(4, sheet.getNumHyperlinks()); | |||
doTestHyperlinkContents(sheet); | |||
// Check the hyperlinks | |||
assertEquals(4, sheet.getNumHyperlinks()); | |||
doTestHyperlinkContents(sheet); | |||
} | |||
} | |||
@Test | |||
@@ -117,73 +118,74 @@ public final class TestXSSFHyperlink extends BaseTestHyperlink { | |||
} | |||
@Test | |||
public void testLoadSave() { | |||
XSSFWorkbook workbook = XSSFTestDataSamples.openSampleWorkbook("WithMoreVariousData.xlsx"); | |||
CreationHelper createHelper = workbook.getCreationHelper(); | |||
assertEquals(3, workbook.getNumberOfSheets()); | |||
XSSFSheet sheet = workbook.getSheetAt(0); | |||
public void testLoadSave() throws IOException { | |||
try (XSSFWorkbook workbook = XSSFTestDataSamples.openSampleWorkbook("WithMoreVariousData.xlsx")) { | |||
CreationHelper createHelper = workbook.getCreationHelper(); | |||
assertEquals(3, workbook.getNumberOfSheets()); | |||
XSSFSheet sheet = workbook.getSheetAt(0); | |||
// Check hyperlinks | |||
assertEquals(4, sheet.getNumHyperlinks()); | |||
doTestHyperlinkContents(sheet); | |||
// Check hyperlinks | |||
assertEquals(4, sheet.getNumHyperlinks()); | |||
doTestHyperlinkContents(sheet); | |||
// Write out, and check | |||
// Write out, and check | |||
// Load up again, check all links still there | |||
XSSFWorkbook wb2 = XSSFTestDataSamples.writeOutAndReadBack(workbook); | |||
assertEquals(3, wb2.getNumberOfSheets()); | |||
assertNotNull(wb2.getSheetAt(0)); | |||
assertNotNull(wb2.getSheetAt(1)); | |||
assertNotNull(wb2.getSheetAt(2)); | |||
// Load up again, check all links still there | |||
XSSFWorkbook wb2 = XSSFTestDataSamples.writeOutAndReadBack(workbook); | |||
assertEquals(3, wb2.getNumberOfSheets()); | |||
assertNotNull(wb2.getSheetAt(0)); | |||
assertNotNull(wb2.getSheetAt(1)); | |||
assertNotNull(wb2.getSheetAt(2)); | |||
sheet = wb2.getSheetAt(0); | |||
sheet = wb2.getSheetAt(0); | |||
// Check hyperlinks again | |||
assertEquals(4, sheet.getNumHyperlinks()); | |||
doTestHyperlinkContents(sheet); | |||
// Check hyperlinks again | |||
assertEquals(4, sheet.getNumHyperlinks()); | |||
doTestHyperlinkContents(sheet); | |||
// Add one more, and re-check | |||
Row r17 = sheet.createRow(17); | |||
Cell r17c = r17.createCell(2); | |||
// Add one more, and re-check | |||
Row r17 = sheet.createRow(17); | |||
Cell r17c = r17.createCell(2); | |||
Hyperlink hyperlink = createHelper.createHyperlink(HyperlinkType.URL); | |||
hyperlink.setAddress("http://poi.apache.org/spreadsheet/"); | |||
hyperlink.setLabel("POI SS Link"); | |||
r17c.setHyperlink(hyperlink); | |||
Hyperlink hyperlink = createHelper.createHyperlink(HyperlinkType.URL); | |||
hyperlink.setAddress("http://poi.apache.org/spreadsheet/"); | |||
hyperlink.setLabel("POI SS Link"); | |||
r17c.setHyperlink(hyperlink); | |||
assertEquals(5, sheet.getNumHyperlinks()); | |||
doTestHyperlinkContents(sheet); | |||
assertEquals(5, sheet.getNumHyperlinks()); | |||
doTestHyperlinkContents(sheet); | |||
assertEquals(HyperlinkType.URL, | |||
sheet.getRow(17).getCell(2).getHyperlink().getType()); | |||
assertEquals("POI SS Link", | |||
sheet.getRow(17).getCell(2).getHyperlink().getLabel()); | |||
assertEquals("http://poi.apache.org/spreadsheet/", | |||
sheet.getRow(17).getCell(2).getHyperlink().getAddress()); | |||
assertEquals(HyperlinkType.URL, | |||
sheet.getRow(17).getCell(2).getHyperlink().getType()); | |||
assertEquals("POI SS Link", | |||
sheet.getRow(17).getCell(2).getHyperlink().getLabel()); | |||
assertEquals("http://poi.apache.org/spreadsheet/", | |||
sheet.getRow(17).getCell(2).getHyperlink().getAddress()); | |||
// Save and re-load once more | |||
// Save and re-load once more | |||
XSSFWorkbook wb3 = XSSFTestDataSamples.writeOutAndReadBack(wb2); | |||
assertEquals(3, wb3.getNumberOfSheets()); | |||
assertNotNull(wb3.getSheetAt(0)); | |||
assertNotNull(wb3.getSheetAt(1)); | |||
assertNotNull(wb3.getSheetAt(2)); | |||
XSSFWorkbook wb3 = XSSFTestDataSamples.writeOutAndReadBack(wb2); | |||
assertEquals(3, wb3.getNumberOfSheets()); | |||
assertNotNull(wb3.getSheetAt(0)); | |||
assertNotNull(wb3.getSheetAt(1)); | |||
assertNotNull(wb3.getSheetAt(2)); | |||
sheet = wb3.getSheetAt(0); | |||
sheet = wb3.getSheetAt(0); | |||
assertEquals(5, sheet.getNumHyperlinks()); | |||
doTestHyperlinkContents(sheet); | |||
assertEquals(5, sheet.getNumHyperlinks()); | |||
doTestHyperlinkContents(sheet); | |||
assertEquals(HyperlinkType.URL, | |||
sheet.getRow(17).getCell(2).getHyperlink().getType()); | |||
assertEquals("POI SS Link", | |||
sheet.getRow(17).getCell(2).getHyperlink().getLabel()); | |||
assertEquals("http://poi.apache.org/spreadsheet/", | |||
sheet.getRow(17).getCell(2).getHyperlink().getAddress()); | |||
assertEquals(HyperlinkType.URL, | |||
sheet.getRow(17).getCell(2).getHyperlink().getType()); | |||
assertEquals("POI SS Link", | |||
sheet.getRow(17).getCell(2).getHyperlink().getLabel()); | |||
assertEquals("http://poi.apache.org/spreadsheet/", | |||
sheet.getRow(17).getCell(2).getHyperlink().getAddress()); | |||
} | |||
} | |||
/** | |||
@@ -198,8 +200,7 @@ public final class TestXSSFHyperlink extends BaseTestHyperlink { | |||
// First is a link to poi | |||
assertEquals(HyperlinkType.URL, | |||
sheet.getRow(3).getCell(2).getHyperlink().getType()); | |||
assertEquals(null, | |||
sheet.getRow(3).getCell(2).getHyperlink().getLabel()); | |||
assertNull(sheet.getRow(3).getCell(2).getHyperlink().getLabel()); | |||
assertEquals("http://poi.apache.org/", | |||
sheet.getRow(3).getCell(2).getHyperlink().getAddress()); | |||
@@ -214,60 +215,63 @@ public final class TestXSSFHyperlink extends BaseTestHyperlink { | |||
// Next is a file | |||
assertEquals(HyperlinkType.FILE, | |||
sheet.getRow(15).getCell(2).getHyperlink().getType()); | |||
assertEquals(null, | |||
sheet.getRow(15).getCell(2).getHyperlink().getLabel()); | |||
assertNull(sheet.getRow(15).getCell(2).getHyperlink().getLabel()); | |||
assertEquals("WithVariousData.xlsx", | |||
sheet.getRow(15).getCell(2).getHyperlink().getAddress()); | |||
// Last is a mailto | |||
assertEquals(HyperlinkType.EMAIL, | |||
sheet.getRow(16).getCell(2).getHyperlink().getType()); | |||
assertEquals(null, | |||
sheet.getRow(16).getCell(2).getHyperlink().getLabel()); | |||
assertNull(sheet.getRow(16).getCell(2).getHyperlink().getLabel()); | |||
assertEquals("mailto:dev@poi.apache.org?subject=XSSF%20Hyperlinks", | |||
sheet.getRow(16).getCell(2).getHyperlink().getAddress()); | |||
} | |||
@Test | |||
public void test52716() { | |||
XSSFWorkbook wb1 = XSSFTestDataSamples.openSampleWorkbook("52716.xlsx"); | |||
XSSFSheet sh1 = wb1.getSheetAt(0); | |||
XSSFWorkbook wb2 = XSSFTestDataSamples.writeOutAndReadBack(wb1); | |||
XSSFSheet sh2 = wb2.getSheetAt(0); | |||
assertEquals(sh1.getNumberOfComments(), sh2.getNumberOfComments()); | |||
XSSFHyperlink l1 = sh1.getHyperlink(0, 1); | |||
assertEquals(HyperlinkType.DOCUMENT, l1.getType()); | |||
assertEquals("B1", l1.getCellRef()); | |||
assertEquals("Sort on Titel", l1.getTooltip()); | |||
XSSFHyperlink l2 = sh2.getHyperlink(0, 1); | |||
assertEquals(l1.getTooltip(), l2.getTooltip()); | |||
assertEquals(HyperlinkType.DOCUMENT, l2.getType()); | |||
assertEquals("B1", l2.getCellRef()); | |||
public void test52716() throws IOException { | |||
try (XSSFWorkbook wb1 = XSSFTestDataSamples.openSampleWorkbook("52716.xlsx")) { | |||
XSSFSheet sh1 = wb1.getSheetAt(0); | |||
XSSFWorkbook wb2 = XSSFTestDataSamples.writeOutAndReadBack(wb1); | |||
XSSFSheet sh2 = wb2.getSheetAt(0); | |||
assertEquals(sh1.getNumberOfComments(), sh2.getNumberOfComments()); | |||
XSSFHyperlink l1 = sh1.getHyperlink(0, 1); | |||
assertEquals(HyperlinkType.DOCUMENT, l1.getType()); | |||
assertEquals("B1", l1.getCellRef()); | |||
assertEquals("Sort on Titel", l1.getTooltip()); | |||
XSSFHyperlink l2 = sh2.getHyperlink(0, 1); | |||
assertEquals(l1.getTooltip(), l2.getTooltip()); | |||
assertEquals(HyperlinkType.DOCUMENT, l2.getType()); | |||
assertEquals("B1", l2.getCellRef()); | |||
} | |||
} | |||
@Test | |||
public void test53734() { | |||
XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("53734.xlsx"); | |||
XSSFHyperlink link = wb.getSheetAt(0).getRow(0).getCell(0).getHyperlink(); | |||
assertEquals("javascript:///", link.getAddress()); | |||
wb = XSSFTestDataSamples.writeOutAndReadBack(wb); | |||
link = wb.getSheetAt(0).getRow(0).getCell(0).getHyperlink(); | |||
assertEquals("javascript:///", link.getAddress()); | |||
public void test53734() throws IOException { | |||
try (XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("53734.xlsx")) { | |||
Hyperlink link = wb.getSheetAt(0).getRow(0).getCell(0).getHyperlink(); | |||
assertEquals("javascript:///", link.getAddress()); | |||
try (XSSFWorkbook wb2 = XSSFTestDataSamples.writeOutAndReadBack(wb)) { | |||
link = wb2.getSheetAt(0).getRow(0).getCell(0).getHyperlink(); | |||
assertEquals("javascript:///", link.getAddress()); | |||
} | |||
} | |||
} | |||
@Test | |||
public void test53282() { | |||
XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("53282.xlsx"); | |||
XSSFHyperlink link = wb.getSheetAt(0).getRow(0).getCell(14).getHyperlink(); | |||
assertEquals("mailto:nobody@nowhere.uk%C2%A0", link.getAddress()); | |||
wb = XSSFTestDataSamples.writeOutAndReadBack(wb); | |||
link = wb.getSheetAt(0).getRow(0).getCell(14).getHyperlink(); | |||
assertEquals("mailto:nobody@nowhere.uk%C2%A0", link.getAddress()); | |||
public void test53282() throws IOException { | |||
try (XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("53282.xlsx")) { | |||
Hyperlink link = wb.getSheetAt(0).getRow(0).getCell(14).getHyperlink(); | |||
assertEquals("mailto:nobody@nowhere.uk%C2%A0", link.getAddress()); | |||
try (XSSFWorkbook wb2 = XSSFTestDataSamples.writeOutAndReadBack(wb)) { | |||
link = wb2.getSheetAt(0).getRow(0).getCell(14).getHyperlink(); | |||
assertEquals("mailto:nobody@nowhere.uk%C2%A0", link.getAddress()); | |||
} | |||
} | |||
} | |||
@Override |
@@ -20,7 +20,7 @@ package org.apache.poi.xssf.usermodel; | |||
import static org.junit.Assert.assertEquals; | |||
import static org.junit.Assert.assertNotNull; | |||
import java.util.Iterator; | |||
import java.io.IOException; | |||
import java.util.List; | |||
import org.apache.poi.xssf.XSSFTestDataSamples; | |||
@@ -32,13 +32,17 @@ import org.junit.Test; | |||
public final class TestXSSFShape { | |||
@Test | |||
public void test58325_one() { | |||
check58325(XSSFTestDataSamples.openSampleWorkbook("58325_lt.xlsx"), 1); | |||
public void test58325_one() throws IOException { | |||
try (XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("58325_lt.xlsx")) { | |||
check58325(wb, 1); | |||
} | |||
} | |||
@Test | |||
public void test58325_three() { | |||
check58325(XSSFTestDataSamples.openSampleWorkbook("58325_db.xlsx"), 3); | |||
public void test58325_three() throws IOException { | |||
try (XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("58325_db.xlsx")) { | |||
check58325(wb, 3); | |||
} | |||
} | |||
private void check58325(XSSFWorkbook wb, int expectedShapes) { | |||
@@ -46,21 +50,19 @@ public final class TestXSSFShape { | |||
assertNotNull(sheet); | |||
StringBuilder str = new StringBuilder(); | |||
str.append("sheet " + sheet.getSheetName() + " - "); | |||
str.append("sheet ").append(sheet.getSheetName()).append(" - "); | |||
XSSFDrawing drawing = sheet.getDrawingPatriarch(); | |||
//drawing = ((XSSFSheet)sheet).createDrawingPatriarch(); | |||
List<XSSFShape> shapes = drawing.getShapes(); | |||
str.append("drawing.getShapes().size() = " + shapes.size()); | |||
Iterator<XSSFShape> it = shapes.iterator(); | |||
while(it.hasNext()) { | |||
XSSFShape shape = it.next(); | |||
str.append(", " + shape); | |||
str.append(", Col1:"+((XSSFClientAnchor)shape.getAnchor()).getCol1()); | |||
str.append(", Col2:"+((XSSFClientAnchor)shape.getAnchor()).getCol2()); | |||
str.append(", Row1:"+((XSSFClientAnchor)shape.getAnchor()).getRow1()); | |||
str.append(", Row2:"+((XSSFClientAnchor)shape.getAnchor()).getRow2()); | |||
str.append("drawing.getShapes().size() = ").append(shapes.size()); | |||
for (XSSFShape shape : shapes) { | |||
str.append(", ").append(shape); | |||
str.append(", Col1:").append(((XSSFClientAnchor) shape.getAnchor()).getCol1()); | |||
str.append(", Col2:").append(((XSSFClientAnchor) shape.getAnchor()).getCol2()); | |||
str.append(", Row1:").append(((XSSFClientAnchor) shape.getAnchor()).getRow1()); | |||
str.append(", Row2:").append(((XSSFClientAnchor) shape.getAnchor()).getRow2()); | |||
} | |||
assertEquals("Having shapes: " + str, |
@@ -34,7 +34,7 @@ public final class TestXSSFSheetRowGrouping extends TestCase { | |||
//private int o_groupsNumber = 0; | |||
public void test55640() throws IOException { | |||
public void test55640() { | |||
//long startTime = System.currentTimeMillis(); | |||
Workbook wb = new XSSFWorkbook(); | |||
fillData(wb); | |||
@@ -78,7 +78,7 @@ public final class TestXSSFSheetRowGrouping extends TestCase { | |||
return Math.random() > 0.5d; | |||
} | |||
private void writeToFile(Workbook p_wb) throws IOException { | |||
private void writeToFile(Workbook p_wb) { | |||
// FileOutputStream fileOut = new FileOutputStream("/tmp/55640.xlsx"); | |||
// try { | |||
// p_wb.write(fileOut); | |||
@@ -88,7 +88,7 @@ public final class TestXSSFSheetRowGrouping extends TestCase { | |||
assertNotNull(XSSFTestDataSamples.writeOutAndReadBack(p_wb)); | |||
} | |||
public void test55640reduce1() throws IOException { | |||
public void test55640reduce1() { | |||
Workbook wb = new XSSFWorkbook(); | |||
Sheet sheet = wb.createSheet("sheet123"); | |||
sheet.setRowSumsBelow(false); | |||
@@ -117,7 +117,7 @@ public final class TestXSSFSheetRowGrouping extends TestCase { | |||
} | |||
public void test55640_VerifyCases() throws IOException { | |||
public void test55640_VerifyCases() { | |||
// NOTE: This is currently based on current behavior of POI, somehow | |||
// what POI returns in the calls to collapsed/hidden is not fully matching | |||
// the examples in the spec or I did not fully understand how POI stores the data internally... | |||
@@ -210,7 +210,7 @@ public final class TestXSSFSheetRowGrouping extends TestCase { | |||
private void verifyGroupCollapsed(boolean level1, boolean level2, boolean level3, | |||
Boolean[] collapsed, boolean[] hidden, int[] outlineLevel) throws IOException { | |||
Boolean[] collapsed, boolean[] hidden, int[] outlineLevel) { | |||
Workbook wb = new XSSFWorkbook(); | |||
Sheet sheet = wb.createSheet("sheet123"); | |||
@@ -282,7 +282,7 @@ public final class TestXSSFSheetRowGrouping extends TestCase { | |||
} | |||
private void verifyGroupCollapsedSpec(boolean level1, boolean level2, boolean level3, | |||
Boolean[] collapsed, boolean[] hidden, int[] outlineLevel) throws IOException { | |||
Boolean[] collapsed, boolean[] hidden, int[] outlineLevel) { | |||
Workbook wb = new XSSFWorkbook(); | |||
Sheet sheet = wb.createSheet("sheet123"); | |||
@@ -301,7 +301,7 @@ public final class TestXSSFSheetRowGrouping extends TestCase { | |||
checkWorkbookGrouping(wb, collapsed, hidden, outlineLevel); | |||
} | |||
private void checkWorkbookGrouping(Workbook wb, Boolean[] collapsed, boolean[] hidden, int[] outlineLevel) throws IOException { | |||
private void checkWorkbookGrouping(Workbook wb, Boolean[] collapsed, boolean[] hidden, int[] outlineLevel) { | |||
printWorkbook(wb); | |||
Sheet sheet = wb.getSheetAt(0); | |||
@@ -327,7 +327,7 @@ public final class TestXSSFSheetRowGrouping extends TestCase { | |||
} | |||
public void test55640working() throws IOException { | |||
public void test55640working() { | |||
Workbook wb = new XSSFWorkbook(); | |||
Sheet sheet = wb.createSheet("sheet123"); | |||
@@ -366,50 +366,51 @@ public final class TestXSSFSheetRowGrouping extends TestCase { | |||
} | |||
public void testGroupingTest() throws IOException { | |||
XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("GroupTest.xlsx"); | |||
assertEquals(31, wb.getSheetAt(0).getLastRowNum()); | |||
// NOTE: This is currently based on current behavior of POI, somehow | |||
// what POI returns in the calls to collapsed/hidden is not fully matching | |||
// the examples in the spec or I did not fully understand how POI stores the data internally... | |||
checkWorkbookGrouping(wb, | |||
new Boolean [] { | |||
// 0-4 | |||
false, false, false, false, false, null, null, | |||
// 7-11 | |||
false, false, true, true, true, null, null, | |||
// 14-18 | |||
false, false, true, false, false, null, | |||
// 20-24 | |||
false, false, true, true, false, null, null, | |||
// 27-31 | |||
false, false, false, true, false }, | |||
new boolean[] { | |||
// 0-4 | |||
false, false, false, false, false, false, false, | |||
// 7-11 | |||
true, true, true, true, false, false, false, | |||
// 14-18 | |||
true, true, false, false, false, false, | |||
// 20-24 | |||
true, true, true, false, false, false, false, | |||
// 27-31 | |||
true, true, true, true, false }, | |||
// outlineLevel | |||
new int[] { | |||
// 0-4 | |||
3, 3, 2, 1, 0, 0, 0, | |||
// 7-11 | |||
3, 3, 2, 1, 0, 0, 0, | |||
// 14-18 | |||
3, 3, 2, 1, 0, 0, | |||
// 20-24 | |||
3, 3, 2, 1, 0, 0, 0, | |||
// 27-31 | |||
3, 3, 2, 1, 0, | |||
} | |||
); | |||
try (XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("GroupTest.xlsx")) { | |||
assertEquals(31, wb.getSheetAt(0).getLastRowNum()); | |||
// NOTE: This is currently based on current behavior of POI, somehow | |||
// what POI returns in the calls to collapsed/hidden is not fully matching | |||
// the examples in the spec or I did not fully understand how POI stores the data internally... | |||
checkWorkbookGrouping(wb, | |||
new Boolean[]{ | |||
// 0-4 | |||
false, false, false, false, false, null, null, | |||
// 7-11 | |||
false, false, true, true, true, null, null, | |||
// 14-18 | |||
false, false, true, false, false, null, | |||
// 20-24 | |||
false, false, true, true, false, null, null, | |||
// 27-31 | |||
false, false, false, true, false}, | |||
new boolean[]{ | |||
// 0-4 | |||
false, false, false, false, false, false, false, | |||
// 7-11 | |||
true, true, true, true, false, false, false, | |||
// 14-18 | |||
true, true, false, false, false, false, | |||
// 20-24 | |||
true, true, true, false, false, false, false, | |||
// 27-31 | |||
true, true, true, true, false}, | |||
// outlineLevel | |||
new int[]{ | |||
// 0-4 | |||
3, 3, 2, 1, 0, 0, 0, | |||
// 7-11 | |||
3, 3, 2, 1, 0, 0, 0, | |||
// 14-18 | |||
3, 3, 2, 1, 0, 0, | |||
// 20-24 | |||
3, 3, 2, 1, 0, 0, 0, | |||
// 27-31 | |||
3, 3, 2, 1, 0, | |||
} | |||
); | |||
} | |||
/* | |||
Row: 0: Level: 3 Collapsed: false Hidden: false | |||
Row: 1: Level: 3 Collapsed: false Hidden: false |
@@ -20,6 +20,7 @@ package org.apache.poi.xwpf.usermodel; | |||
import static org.junit.Assert.assertEquals; | |||
import static org.junit.Assert.assertFalse; | |||
import static org.junit.Assert.assertNotNull; | |||
import static org.junit.Assert.assertNull; | |||
import static org.junit.Assert.assertSame; | |||
import static org.junit.Assert.assertTrue; | |||
import static org.junit.Assert.fail; | |||
@@ -28,6 +29,7 @@ import java.io.IOException; | |||
import java.io.OutputStream; | |||
import java.util.Arrays; | |||
import java.util.List; | |||
import java.util.Optional; | |||
import org.apache.poi.POIDataSamples; | |||
import org.apache.poi.ooxml.POIXMLDocumentPart; | |||
@@ -96,7 +98,7 @@ public final class TestXWPFDocument { | |||
assertEquals(1315, xml.getProperties().getExtendedProperties().getUnderlyingProperties().getCharacters()); | |||
assertEquals(10, xml.getProperties().getExtendedProperties().getUnderlyingProperties().getLines()); | |||
assertEquals(null, xml.getProperties().getCoreProperties().getTitle()); | |||
assertNull(xml.getProperties().getCoreProperties().getTitle()); | |||
assertFalse(xml.getProperties().getCoreProperties().getUnderlyingProperties().getSubjectProperty().isPresent()); | |||
} | |||
} | |||
@@ -112,7 +114,9 @@ public final class TestXWPFDocument { | |||
assertEquals(0, xml.getProperties().getExtendedProperties().getUnderlyingProperties().getLines()); | |||
assertEquals(" ", xml.getProperties().getCoreProperties().getTitle()); | |||
assertEquals(" ", xml.getProperties().getCoreProperties().getUnderlyingProperties().getSubjectProperty().get()); | |||
Optional<String> subjectProperty = xml.getProperties().getCoreProperties().getUnderlyingProperties().getSubjectProperty(); | |||
assertTrue(subjectProperty.isPresent()); | |||
assertEquals(" ", subjectProperty.get()); | |||
xml.close(); | |||
} | |||
@@ -153,7 +157,9 @@ public final class TestXWPFDocument { | |||
byte[] jpeg = XWPFTestDataSamples.getImage("nature1.jpg"); | |||
String relationId = doc.addPictureData(jpeg, Document.PICTURE_TYPE_JPEG); | |||
byte[] newJpeg = ((XWPFPictureData) doc.getRelationById(relationId)).getData(); | |||
XWPFPictureData relationById = (XWPFPictureData) doc.getRelationById(relationId); | |||
assertNotNull(relationById); | |||
byte[] newJpeg = relationById.getData(); | |||
assertEquals(newJpeg.length, jpeg.length); | |||
for (int i = 0; i < jpeg.length; i++) { | |||
assertEquals(newJpeg[i], jpeg[i]); | |||
@@ -187,225 +193,225 @@ public final class TestXWPFDocument { | |||
@Test | |||
public void testAddHyperlink() throws IOException { | |||
XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("SampleDoc.docx"); | |||
XWPFParagraph p = doc.createParagraph(); | |||
XWPFHyperlinkRun h = p.createHyperlinkRun("http://poi.apache.org/"); | |||
h.setText("Apache POI"); | |||
assertEquals("http://poi.apache.org/", h.getHyperlink(doc).getURL()); | |||
assertEquals(p.getRuns().size(), 1); | |||
assertEquals(p.getRuns().get(0), h); | |||
try (XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("SampleDoc.docx")) { | |||
XWPFParagraph p = doc.createParagraph(); | |||
XWPFHyperlinkRun h = p.createHyperlinkRun("http://poi.apache.org/"); | |||
h.setText("Apache POI"); | |||
assertEquals("http://poi.apache.org/", h.getHyperlink(doc).getURL()); | |||
assertEquals(p.getRuns().size(), 1); | |||
assertEquals(p.getRuns().get(0), h); | |||
} | |||
} | |||
@Test | |||
public void testRemoveBodyElement() throws IOException { | |||
XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("sample.docx"); | |||
assertEquals(3, doc.getParagraphs().size()); | |||
assertEquals(3, doc.getBodyElements().size()); | |||
XWPFParagraph p1 = doc.getParagraphs().get(0); | |||
XWPFParagraph p2 = doc.getParagraphs().get(1); | |||
XWPFParagraph p3 = doc.getParagraphs().get(2); | |||
assertEquals(p1, doc.getBodyElements().get(0)); | |||
assertEquals(p1, doc.getParagraphs().get(0)); | |||
assertEquals(p2, doc.getBodyElements().get(1)); | |||
assertEquals(p2, doc.getParagraphs().get(1)); | |||
assertEquals(p3, doc.getBodyElements().get(2)); | |||
assertEquals(p3, doc.getParagraphs().get(2)); | |||
// Add another | |||
XWPFParagraph p4 = doc.createParagraph(); | |||
assertEquals(4, doc.getParagraphs().size()); | |||
assertEquals(4, doc.getBodyElements().size()); | |||
assertEquals(p1, doc.getBodyElements().get(0)); | |||
assertEquals(p1, doc.getParagraphs().get(0)); | |||
assertEquals(p2, doc.getBodyElements().get(1)); | |||
assertEquals(p2, doc.getParagraphs().get(1)); | |||
assertEquals(p3, doc.getBodyElements().get(2)); | |||
assertEquals(p3, doc.getParagraphs().get(2)); | |||
assertEquals(p4, doc.getBodyElements().get(3)); | |||
assertEquals(p4, doc.getParagraphs().get(3)); | |||
// Remove the 2nd | |||
assertEquals(true, doc.removeBodyElement(1)); | |||
assertEquals(3, doc.getParagraphs().size()); | |||
assertEquals(3, doc.getBodyElements().size()); | |||
assertEquals(p1, doc.getBodyElements().get(0)); | |||
assertEquals(p1, doc.getParagraphs().get(0)); | |||
assertEquals(p3, doc.getBodyElements().get(1)); | |||
assertEquals(p3, doc.getParagraphs().get(1)); | |||
assertEquals(p4, doc.getBodyElements().get(2)); | |||
assertEquals(p4, doc.getParagraphs().get(2)); | |||
// Remove the 1st | |||
assertEquals(true, doc.removeBodyElement(0)); | |||
assertEquals(2, doc.getParagraphs().size()); | |||
assertEquals(2, doc.getBodyElements().size()); | |||
assertEquals(p3, doc.getBodyElements().get(0)); | |||
assertEquals(p3, doc.getParagraphs().get(0)); | |||
assertEquals(p4, doc.getBodyElements().get(1)); | |||
assertEquals(p4, doc.getParagraphs().get(1)); | |||
// Remove the last | |||
assertEquals(true, doc.removeBodyElement(1)); | |||
assertEquals(1, doc.getParagraphs().size()); | |||
assertEquals(1, doc.getBodyElements().size()); | |||
assertEquals(p3, doc.getBodyElements().get(0)); | |||
assertEquals(p3, doc.getParagraphs().get(0)); | |||
doc.close(); | |||
try (XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("sample.docx")) { | |||
assertEquals(3, doc.getParagraphs().size()); | |||
assertEquals(3, doc.getBodyElements().size()); | |||
XWPFParagraph p1 = doc.getParagraphs().get(0); | |||
XWPFParagraph p2 = doc.getParagraphs().get(1); | |||
XWPFParagraph p3 = doc.getParagraphs().get(2); | |||
assertEquals(p1, doc.getBodyElements().get(0)); | |||
assertEquals(p1, doc.getParagraphs().get(0)); | |||
assertEquals(p2, doc.getBodyElements().get(1)); | |||
assertEquals(p2, doc.getParagraphs().get(1)); | |||
assertEquals(p3, doc.getBodyElements().get(2)); | |||
assertEquals(p3, doc.getParagraphs().get(2)); | |||
// Add another | |||
XWPFParagraph p4 = doc.createParagraph(); | |||
assertEquals(4, doc.getParagraphs().size()); | |||
assertEquals(4, doc.getBodyElements().size()); | |||
assertEquals(p1, doc.getBodyElements().get(0)); | |||
assertEquals(p1, doc.getParagraphs().get(0)); | |||
assertEquals(p2, doc.getBodyElements().get(1)); | |||
assertEquals(p2, doc.getParagraphs().get(1)); | |||
assertEquals(p3, doc.getBodyElements().get(2)); | |||
assertEquals(p3, doc.getParagraphs().get(2)); | |||
assertEquals(p4, doc.getBodyElements().get(3)); | |||
assertEquals(p4, doc.getParagraphs().get(3)); | |||
// Remove the 2nd | |||
assertTrue(doc.removeBodyElement(1)); | |||
assertEquals(3, doc.getParagraphs().size()); | |||
assertEquals(3, doc.getBodyElements().size()); | |||
assertEquals(p1, doc.getBodyElements().get(0)); | |||
assertEquals(p1, doc.getParagraphs().get(0)); | |||
assertEquals(p3, doc.getBodyElements().get(1)); | |||
assertEquals(p3, doc.getParagraphs().get(1)); | |||
assertEquals(p4, doc.getBodyElements().get(2)); | |||
assertEquals(p4, doc.getParagraphs().get(2)); | |||
// Remove the 1st | |||
assertTrue(doc.removeBodyElement(0)); | |||
assertEquals(2, doc.getParagraphs().size()); | |||
assertEquals(2, doc.getBodyElements().size()); | |||
assertEquals(p3, doc.getBodyElements().get(0)); | |||
assertEquals(p3, doc.getParagraphs().get(0)); | |||
assertEquals(p4, doc.getBodyElements().get(1)); | |||
assertEquals(p4, doc.getParagraphs().get(1)); | |||
// Remove the last | |||
assertTrue(doc.removeBodyElement(1)); | |||
assertEquals(1, doc.getParagraphs().size()); | |||
assertEquals(1, doc.getBodyElements().size()); | |||
assertEquals(p3, doc.getBodyElements().get(0)); | |||
assertEquals(p3, doc.getParagraphs().get(0)); | |||
} | |||
} | |||
@Test | |||
public void testRegisterPackagePictureData() throws IOException, InvalidFormatException { | |||
XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("issue_51265_1.docx"); | |||
/* manually assemble a new image package part*/ | |||
OPCPackage opcPckg = doc.getPackage(); | |||
XWPFRelation jpgRelation = XWPFRelation.IMAGE_JPEG; | |||
PackagePartName partName = PackagingURIHelper.createPartName(jpgRelation.getDefaultFileName().replace('#', '2')); | |||
PackagePart newImagePart = opcPckg.createPart(partName, jpgRelation.getContentType()); | |||
byte[] nature1 = XWPFTestDataSamples.getImage("abstract4.jpg"); | |||
OutputStream os = newImagePart.getOutputStream(); | |||
os.write(nature1); | |||
os.close(); | |||
XWPFHeader xwpfHeader = doc.getHeaderArray(0); | |||
XWPFPictureData newPicData = new XWPFPictureData(newImagePart); | |||
/* new part is now ready to rumble */ | |||
assertFalse(xwpfHeader.getAllPictures().contains(newPicData)); | |||
assertFalse(doc.getAllPictures().contains(newPicData)); | |||
assertFalse(doc.getAllPackagePictures().contains(newPicData)); | |||
doc.registerPackagePictureData(newPicData); | |||
assertFalse(xwpfHeader.getAllPictures().contains(newPicData)); | |||
assertFalse(doc.getAllPictures().contains(newPicData)); | |||
assertTrue(doc.getAllPackagePictures().contains(newPicData)); | |||
doc.getPackage().revert(); | |||
opcPckg.close(); | |||
doc.close(); | |||
try (XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("issue_51265_1.docx")) { | |||
/* manually assemble a new image package part*/ | |||
OPCPackage opcPkg = doc.getPackage(); | |||
XWPFRelation jpgRelation = XWPFRelation.IMAGE_JPEG; | |||
PackagePartName partName = PackagingURIHelper.createPartName(jpgRelation.getDefaultFileName().replace('#', '2')); | |||
PackagePart newImagePart = opcPkg.createPart(partName, jpgRelation.getContentType()); | |||
byte[] nature1 = XWPFTestDataSamples.getImage("abstract4.jpg"); | |||
OutputStream os = newImagePart.getOutputStream(); | |||
os.write(nature1); | |||
os.close(); | |||
XWPFHeader xwpfHeader = doc.getHeaderArray(0); | |||
XWPFPictureData newPicData = new XWPFPictureData(newImagePart); | |||
/* new part is now ready to rumble */ | |||
assertFalse(xwpfHeader.getAllPictures().contains(newPicData)); | |||
assertFalse(doc.getAllPictures().contains(newPicData)); | |||
assertFalse(doc.getAllPackagePictures().contains(newPicData)); | |||
doc.registerPackagePictureData(newPicData); | |||
assertFalse(xwpfHeader.getAllPictures().contains(newPicData)); | |||
assertFalse(doc.getAllPictures().contains(newPicData)); | |||
assertTrue(doc.getAllPackagePictures().contains(newPicData)); | |||
doc.getPackage().revert(); | |||
opcPkg.close(); | |||
} | |||
} | |||
@Test | |||
public void testFindPackagePictureData() throws IOException { | |||
XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("issue_51265_1.docx"); | |||
byte[] nature1 = XWPFTestDataSamples.getImage("nature1.gif"); | |||
XWPFPictureData part = doc.findPackagePictureData(nature1, Document.PICTURE_TYPE_GIF); | |||
assertNotNull(part); | |||
assertTrue(doc.getAllPictures().contains(part)); | |||
assertTrue(doc.getAllPackagePictures().contains(part)); | |||
doc.getPackage().revert(); | |||
doc.close(); | |||
try (XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("issue_51265_1.docx")) { | |||
byte[] nature1 = XWPFTestDataSamples.getImage("nature1.gif"); | |||
XWPFPictureData part = doc.findPackagePictureData(nature1, Document.PICTURE_TYPE_GIF); | |||
assertNotNull(part); | |||
assertTrue(doc.getAllPictures().contains(part)); | |||
assertTrue(doc.getAllPackagePictures().contains(part)); | |||
doc.getPackage().revert(); | |||
} | |||
} | |||
@Test | |||
public void testGetAllPictures() throws IOException { | |||
XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("issue_51265_3.docx"); | |||
List<XWPFPictureData> allPictures = doc.getAllPictures(); | |||
List<XWPFPictureData> allPackagePictures = doc.getAllPackagePictures(); | |||
assertNotNull(allPictures); | |||
assertEquals(3, allPictures.size()); | |||
for (XWPFPictureData xwpfPictureData : allPictures) { | |||
assertTrue(allPackagePictures.contains(xwpfPictureData)); | |||
} | |||
try (XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("issue_51265_3.docx")) { | |||
List<XWPFPictureData> allPictures = doc.getAllPictures(); | |||
List<XWPFPictureData> allPackagePictures = doc.getAllPackagePictures(); | |||
assertNotNull(allPictures); | |||
assertEquals(3, allPictures.size()); | |||
for (XWPFPictureData xwpfPictureData : allPictures) { | |||
assertTrue(allPackagePictures.contains(xwpfPictureData)); | |||
} | |||
try { | |||
allPictures.add(allPictures.get(0)); | |||
fail("This list must be unmodifiable!"); | |||
} catch (UnsupportedOperationException e) { | |||
// all ok | |||
} | |||
try { | |||
allPictures.add(allPictures.get(0)); | |||
fail("This list must be unmodifiable!"); | |||
} catch (UnsupportedOperationException e) { | |||
// all ok | |||
} | |||
doc.getPackage().revert(); | |||
doc.close(); | |||
doc.getPackage().revert(); | |||
} | |||
} | |||
@Test | |||
public void testGetAllPackagePictures() throws IOException { | |||
XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("issue_51265_3.docx"); | |||
List<XWPFPictureData> allPackagePictures = doc.getAllPackagePictures(); | |||
try (XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("issue_51265_3.docx")) { | |||
List<XWPFPictureData> allPackagePictures = doc.getAllPackagePictures(); | |||
assertNotNull(allPackagePictures); | |||
assertEquals(5, allPackagePictures.size()); | |||
assertNotNull(allPackagePictures); | |||
assertEquals(5, allPackagePictures.size()); | |||
try { | |||
allPackagePictures.add(allPackagePictures.get(0)); | |||
fail("This list must be unmodifiable!"); | |||
} catch (UnsupportedOperationException e) { | |||
// all ok | |||
} | |||
try { | |||
allPackagePictures.add(allPackagePictures.get(0)); | |||
fail("This list must be unmodifiable!"); | |||
} catch (UnsupportedOperationException e) { | |||
// all ok | |||
} | |||
doc.getPackage().revert(); | |||
doc.close(); | |||
doc.getPackage().revert(); | |||
} | |||
} | |||
@Test | |||
public void testPictureHandlingSimpleFile() throws IOException, InvalidFormatException { | |||
XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("issue_51265_1.docx"); | |||
assertEquals(1, doc.getAllPackagePictures().size()); | |||
byte[] newPic = XWPFTestDataSamples.getImage("abstract4.jpg"); | |||
String id1 = doc.addPictureData(newPic, Document.PICTURE_TYPE_JPEG); | |||
assertEquals(2, doc.getAllPackagePictures().size()); | |||
/* copy data, to avoid instance-equality */ | |||
byte[] newPicCopy = Arrays.copyOf(newPic, newPic.length); | |||
String id2 = doc.addPictureData(newPicCopy, Document.PICTURE_TYPE_JPEG); | |||
assertEquals(id1, id2); | |||
doc.getPackage().revert(); | |||
doc.close(); | |||
try (XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("issue_51265_1.docx")) { | |||
assertEquals(1, doc.getAllPackagePictures().size()); | |||
byte[] newPic = XWPFTestDataSamples.getImage("abstract4.jpg"); | |||
String id1 = doc.addPictureData(newPic, Document.PICTURE_TYPE_JPEG); | |||
assertEquals(2, doc.getAllPackagePictures().size()); | |||
/* copy data, to avoid instance-equality */ | |||
byte[] newPicCopy = Arrays.copyOf(newPic, newPic.length); | |||
String id2 = doc.addPictureData(newPicCopy, Document.PICTURE_TYPE_JPEG); | |||
assertEquals(id1, id2); | |||
doc.getPackage().revert(); | |||
} | |||
} | |||
@Test | |||
public void testPictureHandlingHeaderDocumentImages() throws IOException { | |||
XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("issue_51265_2.docx"); | |||
assertEquals(1, doc.getAllPictures().size()); | |||
assertEquals(1, doc.getAllPackagePictures().size()); | |||
assertEquals(1, doc.getHeaderArray(0).getAllPictures().size()); | |||
doc.getPackage().revert(); | |||
doc.close(); | |||
try (XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("issue_51265_2.docx")) { | |||
assertEquals(1, doc.getAllPictures().size()); | |||
assertEquals(1, doc.getAllPackagePictures().size()); | |||
assertEquals(1, doc.getHeaderArray(0).getAllPictures().size()); | |||
doc.getPackage().revert(); | |||
} | |||
} | |||
@Test | |||
public void testPictureHandlingComplex() throws IOException, InvalidFormatException { | |||
XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("issue_51265_3.docx"); | |||
XWPFHeader xwpfHeader = doc.getHeaderArray(0); | |||
try (XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("issue_51265_3.docx")) { | |||
XWPFHeader xwpfHeader = doc.getHeaderArray(0); | |||
assertEquals(3, doc.getAllPictures().size()); | |||
assertEquals(3, xwpfHeader.getAllPictures().size()); | |||
assertEquals(5, doc.getAllPackagePictures().size()); | |||
assertEquals(3, doc.getAllPictures().size()); | |||
assertEquals(3, xwpfHeader.getAllPictures().size()); | |||
assertEquals(5, doc.getAllPackagePictures().size()); | |||
byte[] nature1 = XWPFTestDataSamples.getImage("nature1.jpg"); | |||
String id = doc.addPictureData(nature1, Document.PICTURE_TYPE_JPEG); | |||
POIXMLDocumentPart part1 = xwpfHeader.getRelationById("rId1"); | |||
XWPFPictureData part2 = (XWPFPictureData) doc.getRelationById(id); | |||
assertSame(part1, part2); | |||
byte[] nature1 = XWPFTestDataSamples.getImage("nature1.jpg"); | |||
String id = doc.addPictureData(nature1, Document.PICTURE_TYPE_JPEG); | |||
POIXMLDocumentPart part1 = xwpfHeader.getRelationById("rId1"); | |||
XWPFPictureData part2 = (XWPFPictureData) doc.getRelationById(id); | |||
assertSame(part1, part2); | |||
doc.getPackage().revert(); | |||
doc.close(); | |||
doc.getPackage().revert(); | |||
} | |||
} | |||
@Test | |||
public void testZeroLengthLibreOfficeDocumentWithWaterMarkHeader() throws IOException { | |||
XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("zero-length.docx"); | |||
POIXMLProperties properties = doc.getProperties(); | |||
try (XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("zero-length.docx")) { | |||
POIXMLProperties properties = doc.getProperties(); | |||
assertNotNull(properties.getCoreProperties()); | |||
assertNotNull(properties.getCoreProperties()); | |||
XWPFHeader headerArray = doc.getHeaderArray(0); | |||
assertEquals(1, headerArray.getAllPictures().size()); | |||
assertEquals("image1.png", headerArray.pictures.get(0).getFileName()); | |||
assertEquals("", headerArray.getText()); | |||
XWPFHeader headerArray = doc.getHeaderArray(0); | |||
assertEquals(1, headerArray.getAllPictures().size()); | |||
assertEquals("image1.png", headerArray.pictures.get(0).getFileName()); | |||
assertEquals("", headerArray.getText()); | |||
POIXMLProperties.ExtendedProperties extendedProperties = properties.getExtendedProperties(); | |||
assertNotNull(extendedProperties); | |||
assertEquals(0, extendedProperties.getUnderlyingProperties().getCharacters()); | |||
doc.close(); | |||
POIXMLProperties.ExtendedProperties extendedProperties = properties.getExtendedProperties(); | |||
assertNotNull(extendedProperties); | |||
assertEquals(0, extendedProperties.getUnderlyingProperties().getCharacters()); | |||
} | |||
} | |||
@Test | |||
@@ -414,14 +420,14 @@ public final class TestXWPFDocument { | |||
assertEquals(100, settings.getZoomPercent()); | |||
settings.setZoomPercent(50); | |||
assertEquals(50, settings.getZoomPercent()); | |||
assertEquals(false, settings.getEvenAndOddHeadings()); | |||
assertFalse(settings.getEvenAndOddHeadings()); | |||
settings.setEvenAndOddHeadings(true); | |||
assertEquals(true, settings.getEvenAndOddHeadings()); | |||
assertTrue(settings.getEvenAndOddHeadings()); | |||
assertEquals(false, settings.getMirrorMargins()); | |||
assertFalse(settings.getMirrorMargins()); | |||
settings.setMirrorMargins(true); | |||
assertEquals(true, settings.getMirrorMargins()); | |||
assertTrue(settings.getMirrorMargins()); | |||
XWPFDocument doc = new XWPFDocument(); | |||
assertEquals(100, doc.getZoomPercent()); | |||
@@ -432,13 +438,13 @@ public final class TestXWPFDocument { | |||
doc.setZoomPercent(200); | |||
assertEquals(200, doc.getZoomPercent()); | |||
assertEquals(false, doc.getEvenAndOddHeadings()); | |||
assertFalse(doc.getEvenAndOddHeadings()); | |||
doc.setEvenAndOddHeadings(true); | |||
assertEquals(true, doc.getEvenAndOddHeadings()); | |||
assertTrue(doc.getEvenAndOddHeadings()); | |||
assertEquals(false, doc.getMirrorMargins()); | |||
assertFalse(doc.getMirrorMargins()); | |||
doc.setMirrorMargins(true); | |||
assertEquals(true, doc.getMirrorMargins()); | |||
assertTrue(doc.getMirrorMargins()); | |||
XWPFDocument back = XWPFTestDataSamples.writeOutAndReadBack(doc); | |||
assertEquals(200, back.getZoomPercent()); | |||
@@ -453,10 +459,10 @@ public final class TestXWPFDocument { | |||
@Test | |||
public void testEnforcedWith() throws IOException { | |||
XWPFDocument docx = XWPFTestDataSamples.openSampleDocument("EnforcedWith.docx"); | |||
assertTrue(docx.isEnforcedProtection()); | |||
docx.close(); | |||
} | |||
try (XWPFDocument docx = XWPFTestDataSamples.openSampleDocument("EnforcedWith.docx")) { | |||
assertTrue(docx.isEnforcedProtection()); | |||
} | |||
} | |||
@Test | |||
@Ignore("XWPF should be able to write to a new Stream when opened Read-Only") | |||
@@ -466,14 +472,15 @@ public final class TestXWPFDocument { | |||
PackageAccess.READ | |||
); | |||
XWPFDocument doc = new XWPFDocument(opc); | |||
XWPFWordExtractor ext = new XWPFWordExtractor(doc); | |||
String origText = ext.getText(); | |||
doc = XWPFTestDataSamples.writeOutAndReadBack(doc); | |||
ext.close(); | |||
ext = new XWPFWordExtractor(doc); | |||
assertEquals(origText, ext.getText()); | |||
ext.close(); | |||
} | |||
final String origText; | |||
try (XWPFWordExtractor ext = new XWPFWordExtractor(doc)) { | |||
origText = ext.getText(); | |||
doc = XWPFTestDataSamples.writeOutAndReadBack(doc); | |||
} | |||
try (XWPFWordExtractor ext = new XWPFWordExtractor(doc)) { | |||
assertEquals(origText, ext.getText()); | |||
} | |||
} | |||
} |
@@ -790,23 +790,23 @@ public class TestXWPFRun { | |||
@Test | |||
public void testGetDepthWidth() throws IOException, InvalidFormatException { | |||
XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("TestDocument.docx"); | |||
XWPFHeader hdr = doc.createHeader(HeaderFooterType.DEFAULT); | |||
XWPFParagraph p = hdr.createParagraph(); | |||
XWPFRun r = p.createRun(); | |||
try (XWPFDocument doc = XWPFTestDataSamples.openSampleDocument("TestDocument.docx")) { | |||
XWPFHeader hdr = doc.createHeader(HeaderFooterType.DEFAULT); | |||
XWPFParagraph p = hdr.createParagraph(); | |||
XWPFRun r = p.createRun(); | |||
assertEquals(0, hdr.getAllPictures().size()); | |||
assertEquals(0, r.getEmbeddedPictures().size()); | |||
assertEquals(0, hdr.getAllPictures().size()); | |||
assertEquals(0, r.getEmbeddedPictures().size()); | |||
r.addPicture(new ByteArrayInputStream(new byte[0]), Document.PICTURE_TYPE_JPEG, "test.jpg", 21, 32); | |||
r.addPicture(new ByteArrayInputStream(new byte[0]), Document.PICTURE_TYPE_JPEG, "test.jpg", 21, 32); | |||
assertEquals(1, hdr.getAllPictures().size()); | |||
assertEquals(1, r.getEmbeddedPictures().size()); | |||
assertEquals(1, hdr.getAllPictures().size()); | |||
assertEquals(1, r.getEmbeddedPictures().size()); | |||
XWPFPicture pic = r.getEmbeddedPictures().get(0); | |||
XWPFPicture pic = r.getEmbeddedPictures().get(0); | |||
assertEquals(pic.getWidth(), Units.toPoints(21), 0.0); | |||
assertEquals(pic.getDepth(), Units.toPoints(32), 0.0); | |||
assertEquals(pic.getWidth(), Units.toPoints(21), 0.0); | |||
assertEquals(pic.getDepth(), Units.toPoints(32), 0.0); | |||
} | |||
} | |||
} |
@@ -19,12 +19,6 @@ | |||
package org.apache.poi.ss.formula; | |||
import java.io.IOException; | |||
import java.util.HashMap; | |||
import java.util.Map; | |||
import junit.framework.TestCase; | |||
import org.apache.poi.hssf.HSSFTestDataSamples; | |||
import org.apache.poi.ss.usermodel.Cell; | |||
import org.apache.poi.ss.usermodel.CellType; | |||
@@ -32,8 +26,20 @@ import org.apache.poi.ss.usermodel.FormulaEvaluator; | |||
import org.apache.poi.ss.usermodel.Row; | |||
import org.apache.poi.ss.usermodel.Sheet; | |||
import org.apache.poi.ss.usermodel.Workbook; | |||
import org.junit.After; | |||
import org.junit.Before; | |||
import org.junit.Test; | |||
public class TestMissingWorkbook extends TestCase { | |||
import java.util.HashMap; | |||
import java.util.Map; | |||
import static org.junit.Assert.assertEquals; | |||
import static org.junit.Assert.assertFalse; | |||
import static org.junit.Assert.assertNotNull; | |||
import static org.junit.Assert.assertTrue; | |||
import static org.junit.Assert.fail; | |||
public class TestMissingWorkbook { | |||
protected Workbook mainWorkbook; | |||
protected Workbook sourceWorkbook; | |||
@@ -44,6 +50,7 @@ public class TestMissingWorkbook extends TestCase { | |||
public TestMissingWorkbook() { | |||
this("52575_main.xls", "source_dummy.xls", "52575_source.xls"); | |||
} | |||
protected TestMissingWorkbook(String MAIN_WORKBOOK_FILENAME, | |||
String SOURCE_DUMMY_WORKBOOK_FILENAME, String SOURCE_WORKBOOK_FILENAME) { | |||
this.MAIN_WORKBOOK_FILENAME = MAIN_WORKBOOK_FILENAME; | |||
@@ -51,8 +58,8 @@ public class TestMissingWorkbook extends TestCase { | |||
this.SOURCE_WORKBOOK_FILENAME = SOURCE_WORKBOOK_FILENAME; | |||
} | |||
@Override | |||
protected void setUp() throws Exception { | |||
@Before | |||
public void setUp() throws Exception { | |||
mainWorkbook = HSSFTestDataSamples.openSampleWorkbook(MAIN_WORKBOOK_FILENAME); | |||
sourceWorkbook = HSSFTestDataSamples.openSampleWorkbook(SOURCE_WORKBOOK_FILENAME); | |||
@@ -60,7 +67,19 @@ public class TestMissingWorkbook extends TestCase { | |||
assertNotNull(sourceWorkbook); | |||
} | |||
public void testMissingWorkbookMissing() throws IOException { | |||
@After | |||
public void tearDown() throws Exception { | |||
if(mainWorkbook != null) { | |||
mainWorkbook.close(); | |||
} | |||
if(sourceWorkbook != null) { | |||
sourceWorkbook.close(); | |||
} | |||
} | |||
@Test | |||
public void testMissingWorkbookMissing() { | |||
FormulaEvaluator evaluator = mainWorkbook.getCreationHelper().createFormulaEvaluator(); | |||
Sheet lSheet = mainWorkbook.getSheetAt(0); | |||
@@ -71,12 +90,13 @@ public class TestMissingWorkbook extends TestCase { | |||
try { | |||
evaluator.evaluateFormulaCell(lA1Cell); | |||
fail("Missing external workbook reference exception expected!"); | |||
}catch(RuntimeException re) { | |||
} catch(RuntimeException re) { | |||
assertTrue("Unexpected exception: " + re, re.getMessage().contains(SOURCE_DUMMY_WORKBOOK_FILENAME)); | |||
} | |||
} | |||
public void testMissingWorkbookMissingOverride() throws IOException { | |||
@Test | |||
public void testMissingWorkbookMissingOverride() { | |||
Sheet lSheet = mainWorkbook.getSheetAt(0); | |||
Cell lA1Cell = lSheet.getRow(0).getCell(0); | |||
Cell lB1Cell = lSheet.getRow(1).getCell(0); | |||
@@ -89,7 +109,7 @@ public class TestMissingWorkbook extends TestCase { | |||
// Check cached values | |||
assertEquals(10.0d, lA1Cell.getNumericCellValue(), 0.00001d); | |||
assertEquals("POI rocks!", lB1Cell.getStringCellValue()); | |||
assertEquals(true, lC1Cell.getBooleanCellValue()); | |||
assertTrue(lC1Cell.getBooleanCellValue()); | |||
// Evaluate | |||
FormulaEvaluator evaluator = mainWorkbook.getCreationHelper().createFormulaEvaluator(); | |||
@@ -101,11 +121,11 @@ public class TestMissingWorkbook extends TestCase { | |||
assertEquals(10.0d, lA1Cell.getNumericCellValue(), 0.00001d); | |||
assertEquals("POI rocks!", lB1Cell.getStringCellValue()); | |||
assertEquals(true, lC1Cell.getBooleanCellValue()); | |||
assertTrue(lC1Cell.getBooleanCellValue()); | |||
} | |||
public void testExistingWorkbook() throws IOException { | |||
@Test | |||
public void testExistingWorkbook() { | |||
Sheet lSheet = mainWorkbook.getSheetAt(0); | |||
Cell lA1Cell = lSheet.getRow(0).getCell(0); | |||
Cell lB1Cell = lSheet.getRow(1).getCell(0); | |||
@@ -128,6 +148,6 @@ public class TestMissingWorkbook extends TestCase { | |||
assertEquals(20.0d, lA1Cell.getNumericCellValue(), 0.00001d); | |||
assertEquals("Apache rocks!", lB1Cell.getStringCellValue()); | |||
assertEquals(false, lC1Cell.getBooleanCellValue()); | |||
assertFalse(lC1Cell.getBooleanCellValue()); | |||
} | |||
} |
@@ -30,9 +30,11 @@ import static org.mockito.Mockito.verify; | |||
import java.io.IOException; | |||
import java.nio.charset.StandardCharsets; | |||
import java.util.ArrayList; | |||
import java.util.Calendar; | |||
import java.util.Date; | |||
import java.util.GregorianCalendar; | |||
import java.util.List; | |||
import java.util.Locale; | |||
import java.util.TimeZone; | |||
@@ -42,6 +44,7 @@ import org.apache.poi.ss.ITestDataProvider; | |||
import org.apache.poi.ss.SpreadsheetVersion; | |||
import org.apache.poi.ss.util.CellRangeAddress; | |||
import org.apache.poi.util.LocaleUtil; | |||
import org.junit.After; | |||
import org.junit.Test; | |||
/** | |||
@@ -1423,7 +1426,17 @@ public abstract class BaseTestCell { | |||
verify(cell).setBlank(); | |||
} | |||
private List<Workbook> workbooksToClose = new ArrayList<>(); | |||
@After | |||
public void closeWorkbooks() throws IOException { | |||
for (Workbook workbook : workbooksToClose) { | |||
workbook.close(); | |||
} | |||
} | |||
private Cell getInstance() { | |||
return _testDataProvider.createWorkbook().createSheet().createRow(0).createCell(0); | |||
Workbook workbookToClose = _testDataProvider.createWorkbook(); | |||
workbooksToClose.add(workbookToClose); | |||
return workbookToClose.createSheet().createRow(0).createCell(0); | |||
} | |||
} |