]> source.dussan.org Git - poi.git/commitdiff
Activate Forbidden-Apis-Check also for other tests
authorAndreas Beeker <kiwiwings@apache.org>
Mon, 17 Aug 2020 20:25:08 +0000 (20:25 +0000)
committerAndreas Beeker <kiwiwings@apache.org>
Mon, 17 Aug 2020 20:25:08 +0000 (20:25 +0000)
Max supported Java version is currently Java 14
Fix the check failures

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1880944 13f79535-47bb-0310-9956-ffa450edef68

37 files changed:
build.xml
src/examples/src/org/apache/poi/examples/hsmf/Msg2txt.java
src/examples/src/org/apache/poi/examples/ss/BusinessPlan.java
src/examples/src/org/apache/poi/examples/ss/CalendarDemo.java
src/examples/src/org/apache/poi/examples/ss/ExcelComparator.java
src/examples/src/org/apache/poi/examples/ss/SSPerformanceTest.java
src/examples/src/org/apache/poi/examples/ss/ToCSV.java
src/examples/src/org/apache/poi/examples/ss/html/ToHtml.java
src/examples/src/org/apache/poi/examples/xslf/BarChartDemo.java
src/examples/src/org/apache/poi/examples/xslf/ChartFromScratch.java
src/examples/src/org/apache/poi/examples/xslf/PieChartDemo.java
src/examples/src/org/apache/poi/examples/xssf/usermodel/BigGridDemo.java
src/examples/src/org/apache/poi/examples/xssf/usermodel/CalendarDemo.java
src/examples/src/org/apache/poi/examples/xssf/usermodel/CreatePivotTable2.java
src/examples/src/org/apache/poi/examples/xwpf/usermodel/BarChartExample.java
src/examples/src/org/apache/poi/examples/xwpf/usermodel/ChartFromScratch.java
src/excelant/testcases/org/apache/poi/ss/excelant/TestBuildFile.java
src/integrationtest/org/apache/poi/stress/HPSFFileHandler.java
src/integrationtest/org/apache/poi/stress/HSSFFileHandler.java
src/integrationtest/org/apache/poi/stress/HeapDump.java
src/integrationtest/org/apache/poi/stress/XSSFFileHandler.java
src/ooxml/testcases/org/apache/poi/xssf/streaming/TestSXSSFWorkbook.java
src/resources/devtools/forbidden-signatures-prod.txt
src/scratchpad/testcases/org/apache/poi/hmef/dev/TestHMEFDumper.java
src/scratchpad/testcases/org/apache/poi/hslf/dev/BasePPTIteratingTest.java
src/scratchpad/testcases/org/apache/poi/hslf/usermodel/TestBugs.java
src/scratchpad/testcases/org/apache/poi/hsmf/TestExtractEmbeddedMSG.java
src/scratchpad/testcases/org/apache/poi/hsmf/TestFixedSizedProperties.java
src/testcases/org/apache/poi/hssf/dev/BaseTestIteratingXLS.java
src/testcases/org/apache/poi/hssf/dev/TestBiffDrawingToXml.java
src/testcases/org/apache/poi/hssf/dev/TestBiffViewer.java
src/testcases/org/apache/poi/hssf/dev/TestEFBiffViewer.java
src/testcases/org/apache/poi/hssf/dev/TestFormulaViewer.java
src/testcases/org/apache/poi/hssf/dev/TestReSave.java
src/testcases/org/apache/poi/hssf/dev/TestRecordLister.java
src/testcases/org/apache/poi/ss/usermodel/BaseTestWorkbook.java
src/testcases/org/apache/poi/util/NullPrintStream.java [new file with mode: 0644]

index 6613faee440c2dcda1703a873301e54e7d782d39..54537d17fdebfd6aee9232083bad524a23204a22 100644 (file)
--- a/build.xml
+++ b/build.xml
@@ -1549,7 +1549,7 @@ under the License.
         <delete dir="build" includes="test-integration.log*"/>
 
         <path id="test-integration.modules">
-            <pathelement path="build/dist/maven/poi"/>
+            <pathelement path="build/dist/maven/poi-tests"/>
             <pathelement path="build/dist/maven/poi-ooxml"/>
             <pathelement path="build/dist/maven/poi-scratchpad"/>
             <pathelement path="build/dist/maven/poi-examples"/>
@@ -2252,16 +2252,22 @@ under the License.
             <fileset dir="lib/ooxml-provided" includes="*.jar"/>
             <fileset dir="lib/excelant" includes="*.jar"/>
             <pathelement location="${ooxml.xsds.jar}"/>
+            <pathelement location="build/dist/maven/poi-tests/poi-${version.id}-tests.jar"/>
             <pathelement location="build/dist/maven/poi-examples/poi-examples-${version.id}.jar"/>
             <path path="${env.CLASSPATH}"/>
         </path>
 
+        <!-- forbiddenapis bundled signatures max supported version is 14 -->
+        <condition property="forbiddenVersion" value="14">
+            <javaversion atleast="15"/>
+        </condition>
+        <property name="forbiddenVersion" value="${ant.java.version}"/>
 
         <!-- first check rules that apply to all the source code -->
         <forbiddenapis
                  classpathref="forbiddenapis.classpath"
                  suppressAnnotation="org.apache.poi.util.SuppressForbidden"
-                 targetVersion="${ant.java.version}"
+                 targetVersion="${forbiddenVersion}"
             >
             <bundledsignatures name="jdk-unsafe"/>
             <bundledsignatures name="jdk-deprecated"/>
@@ -2272,29 +2278,20 @@ under the License.
             <bundledsignatures name="jdk-system-out"/>
             -->
             <signaturesFileset file="src/resources/devtools/forbidden-signatures.txt"/>
-            <!-- sources -->
-            <!-- zipfileset src="build/dist/maven/poi/poi-${version.id}.jar"/ -->
-            <!-- zipfileset src="build/dist/maven/poi-ooxml/poi-ooxml-${version.id}.jar"/ -->
-            <zipfileset src="build/dist/maven/poi-scratchpad/poi-scratchpad-${version.id}.jar"/>
-            <zipfileset src="build/dist/maven/poi-excelant/poi-excelant-${version.id}.jar"/>
-            <!--
-            <fileset dir="${examples.output.dir}"/>
-            -->
             <!-- test-sources (incl. sources) -->
             <zipfileset src="build/dist/maven/poi-tests/poi-${version.id}-tests.jar"/>
             <zipfileset src="build/dist/maven/poi-ooxml-tests/poi-ooxml-${version.id}-tests.jar"/>
-            <!--
-            <fileset dir="${scratchpad.output.test.dir}"/>
-            <fileset dir="${excelant.output.test.dir}"/>
-            <fileset dir="${integration.output.test.dir}"/>
-            -->
+            <zipfileset src="build/dist/maven/poi-scratchpad-tests/poi-scratchpad-${version.id}-tests.jar"/>
+            <zipfileset src="build/dist/maven/poi-excelant-tests/poi-excelant-${version.id}-tests.jar"/>
+            <zipfileset src="build/dist/maven/poi-examples/poi-examples-${version.id}.jar"/>
+            <zipfileset src="build/dist/maven/poi-integration/poi-integration-${version.id}.jar"/>
         </forbiddenapis>
 
         <!-- then check some advanced rules which we only apply to the core code and not tests or examples -->
         <forbiddenapis
                  classpathref="forbiddenapis.classpath"
                  suppressAnnotation="org.apache.poi.util.SuppressForbidden"
-                 targetVersion="${jdk.version.source}"
+                 targetVersion="${forbiddenVersion}"
             >
             <signaturesFileset file="src/resources/devtools/forbidden-signatures-prod.txt"/>
             <!-- sources -->
index a4756a27d50c6beb17a8057bd7fe075292125641..4ab88cf27af3c09a3a668214b8295429f93ec1f5 100644 (file)
@@ -62,7 +62,7 @@ public class Msg2txt {
        public void processMessage() throws IOException {
                String txtFileName = fileNameStem + ".txt";
                String attDirName = fileNameStem + "-att";
-        try (PrintWriter txtOut = new PrintWriter(txtFileName)) {
+        try (PrintWriter txtOut = new PrintWriter(txtFileName, "UTF-8")) {
             try {
                 String displayFrom = msg.getDisplayFrom();
                 txtOut.println("From: " + displayFrom);
index 59ccc6f337a67abf7eb9e5d7caff8b6675bb5511..a4865a32a3f9ad147375603d90c10e62877f9fa0 100644 (file)
@@ -21,6 +21,7 @@ import java.io.FileOutputStream;
 import java.text.SimpleDateFormat;
 import java.util.Calendar;
 import java.util.HashMap;
+import java.util.Locale;
 import java.util.Map;
 
 import org.apache.poi.hssf.usermodel.HSSFWorkbook;
@@ -36,6 +37,7 @@ import org.apache.poi.ss.usermodel.PrintSetup;
 import org.apache.poi.ss.usermodel.Row;
 import org.apache.poi.ss.usermodel.Sheet;
 import org.apache.poi.ss.usermodel.Workbook;
+import org.apache.poi.util.LocaleUtil;
 import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 
 /**
@@ -96,7 +98,7 @@ public final class BusinessPlan {
         if(args.length > 0 && args[0].equals("-xls")) wb = new HSSFWorkbook();
         else wb = new XSSFWorkbook();
 
-        final SimpleDateFormat fmt = new SimpleDateFormat("dd-MMM");
+        final SimpleDateFormat fmt = new SimpleDateFormat("dd-MMM", Locale.ROOT);
 
         Map<String, CellStyle> styles = createStyles(wb);
 
@@ -124,7 +126,7 @@ public final class BusinessPlan {
             cell.setCellStyle(styles.get("header"));
         }
         //columns for 11 weeks starting from 9-Jul
-        Calendar calendar = Calendar.getInstance();
+        Calendar calendar = LocaleUtil.getLocaleCalendar();
         int year = calendar.get(Calendar.YEAR);
 
         calendar.setTime(fmt.parse("9-Jul"));
index f11c1e02277a1a6a7185feeca3f19659a0677864..9253153f9e7f865983d71b1492f1a090f29bdeba 100644 (file)
@@ -36,6 +36,7 @@ import org.apache.poi.ss.usermodel.Sheet;
 import org.apache.poi.ss.usermodel.VerticalAlignment;
 import org.apache.poi.ss.usermodel.Workbook;
 import org.apache.poi.ss.util.CellRangeAddress;
+import org.apache.poi.util.LocaleUtil;
 import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 
 /**
@@ -62,7 +63,7 @@ public final class CalendarDemo {
 
     public static void main(String[] args) throws Exception {
 
-        Calendar calendar = Calendar.getInstance();
+        Calendar calendar = LocaleUtil.getLocaleCalendar();
         boolean xlsx = true;
         for (String arg : args) {
             if (arg.charAt(0) == '-') {
index 825b72b0c27417a3f7bda2f68f3ddce71cbf2d2e..c09efaec1b48a91ed91c0c45de0b1376c34275b1 100644 (file)
@@ -17,6 +17,8 @@
 package org.apache.poi.examples.ss;
 
 import java.io.File;
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.Iterator;
@@ -94,6 +96,8 @@ public class ExcelComparator {
     }
 
     List<String> listOfDifferences = new ArrayList<>();
+    private final DateFormat dateFormat = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy", Locale.ROOT);
+
 
     public static void main(String[] args) throws Exception {
         if (args.length != 2 || !(new File(args[0]).exists()) || !(new File(args[1]).exists())) {
@@ -429,7 +433,7 @@ public class ExcelComparator {
         Date date1 = loc1.cell.getDateCellValue();
         Date date2 = loc2.cell.getDateCellValue();
         if (!date1.equals(date2)) {
-            addMessage(loc1, loc2, CELL_DATA_DOES_NOT_MATCH, date1.toString(), date2.toString());
+            addMessage(loc1, loc2, CELL_DATA_DOES_NOT_MATCH, dateFormat.format(date1), dateFormat.format(date2));
         }
     }
 
index a5b7eb71704abe9690737542bc3a210c2e64eb09..c041509d457bead6eac6950bf317610aeed572cc 100644 (file)
@@ -23,6 +23,7 @@ import java.io.IOException;
 import java.util.Arrays;
 import java.util.Calendar;
 import java.util.HashMap;
+import java.util.Locale;
 import java.util.Map;
 
 import org.apache.poi.hssf.usermodel.HSSFWorkbook;
@@ -39,6 +40,7 @@ import org.apache.poi.ss.usermodel.VerticalAlignment;
 import org.apache.poi.ss.usermodel.Workbook;
 import org.apache.poi.ss.util.CellRangeAddress;
 import org.apache.poi.ss.util.CellReference;
+import org.apache.poi.util.LocaleUtil;
 import org.apache.poi.xssf.streaming.SXSSFWorkbook;
 import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 
@@ -75,7 +77,7 @@ public final class SSPerformanceTest {
         runWithArgs(type, rows, cols, saveFile);
         long timeFinished = System.currentTimeMillis();
 
-        System.out.printf("Elapsed %.2f seconds for arguments %s\n", ((double)timeFinished - timeStarted) / 1000, Arrays.toString(args));
+        System.out.printf(Locale.ROOT, "Elapsed %.2f seconds for arguments %s\n", ((double)timeFinished - timeStarted) / 1000, Arrays.toString(args));
     }
 
     private static void runWithArgs(String type, int rows, int cols, boolean saveFile) throws IOException {
@@ -103,7 +105,7 @@ public final class SSPerformanceTest {
         int sheetNo = 0;
         int rowIndexInSheet = 1;
         double value = 0;
-        Calendar calendar = Calendar.getInstance();
+        Calendar calendar = LocaleUtil.getLocaleCalendar();
         for (int rowIndex = 0; rowIndex < rows; rowIndex++) {
             if (isHType && sheetNo != rowIndex / 0x10000) {
                 sheet = workBook.createSheet("Spillover from sheet " + (++sheetNo));
index 4e4a89732f0c317aa62781bdc6ff991749892e1f..91a603f67605551699db64fde9d2f194d0d96ebd 100644 (file)
@@ -22,9 +22,10 @@ import java.io.BufferedWriter;
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileNotFoundException;
-import java.io.FileWriter;
 import java.io.FilenameFilter;
 import java.io.IOException;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
 import java.util.ArrayList;
 
 import org.apache.poi.ss.usermodel.Cell;
@@ -431,7 +432,7 @@ public class ToCSV {
         String csvLineElement;
 
         // Open a writer onto the CSV file.
-        try (BufferedWriter bw = new BufferedWriter(new FileWriter(file))) {
+        try (BufferedWriter bw = Files.newBufferedWriter(file.toPath(), StandardCharsets.ISO_8859_1)) {
 
             System.out.println("Saving the CSV file [" + file.getName() + "]");
 
index 930de56a292d69545103dc8fa252d0d7c5892f57..f20604240f913ed1506da46738ae6cd7390cd825 100644 (file)
@@ -19,15 +19,16 @@ package org.apache.poi.examples.ss.html;
 import java.io.BufferedReader;
 import java.io.Closeable;
 import java.io.FileInputStream;
-import java.io.FileWriter;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.InputStreamReader;
 import java.io.PrintWriter;
+import java.nio.charset.StandardCharsets;
 import java.util.Formatter;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
+import java.util.Locale;
 import java.util.Map;
 import java.util.Set;
 import java.util.TreeMap;
@@ -189,10 +190,7 @@ public final class ToHtml {
             return;
         }
 
-        try (
-                FileWriter fw = new FileWriter(args[1]);
-                PrintWriter pw = new PrintWriter(fw)
-            ) {
+        try (PrintWriter pw = new PrintWriter(args[1], "UTF-8")) {
             ToHtml toHtml = create(args[0], pw);
             toHtml.setCompleteHTML(true);
             toHtml.printPage();
@@ -243,7 +241,7 @@ public final class ToHtml {
 
     private void ensureOut() {
         if (out == null) {
-            out = new Formatter(output);
+            out = new Formatter(output, Locale.ROOT);
         }
     }
 
@@ -252,7 +250,7 @@ public final class ToHtml {
 
         // First, copy the base css
         try (BufferedReader in = new BufferedReader(new InputStreamReader(
-                getClass().getResourceAsStream("excelStyle.css")))){
+                getClass().getResourceAsStream("excelStyle.css"), StandardCharsets.ISO_8859_1))){
             String line;
             while ((line = in.readLine()) != null) {
                 out.format("%s%n", line);
@@ -325,7 +323,7 @@ public final class ToHtml {
             style = wb.getCellStyleAt((short) 0);
         }
         StringBuilder sb = new StringBuilder();
-        try (Formatter fmt = new Formatter(sb)) {
+        try (Formatter fmt = new Formatter(sb, Locale.ROOT)) {
             fmt.format("style_%02x", style.getIndex());
             return fmt.toString();
         }
index 6864c69810eef9e3d7fdd9d65d04dd047d1a5ac7..3c8842d7fc732428c0c5c326335a309201c978e4 100644 (file)
@@ -22,8 +22,10 @@ package org.apache.poi.examples.xslf;
 import java.io.BufferedReader;
 import java.io.FileInputStream;
 import java.io.FileOutputStream;
-import java.io.FileReader;
 import java.io.OutputStream;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
+import java.nio.file.Paths;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -62,7 +64,7 @@ public final class BarChartDemo {
         }
 
         try (FileInputStream argIS = new FileInputStream(args[0]);
-            BufferedReader modelReader = new BufferedReader(new FileReader(args[1]))) {
+            BufferedReader modelReader = Files.newBufferedReader(Paths.get(args[1]), StandardCharsets.ISO_8859_1)) {
 
             String chartTitle = modelReader.readLine();  // first line is chart title
             String[] series = modelReader.readLine().split(",");
index d012744debf4c0e7814eaabf350c73fe791363d3..58978a20e05089e082004227a8bb91bee43593e7 100644 (file)
@@ -23,8 +23,10 @@ import java.awt.geom.Rectangle2D;
 import java.io.BufferedReader;
 import java.io.FileInputStream;
 import java.io.FileOutputStream;
-import java.io.FileReader;
 import java.io.OutputStream;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
+import java.nio.file.Paths;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -70,7 +72,7 @@ public final class ChartFromScratch {
             return;
         }
 
-        try (BufferedReader modelReader = new BufferedReader(new FileReader(args[0]))) {
+        try (BufferedReader modelReader = Files.newBufferedReader(Paths.get(args[0]), StandardCharsets.ISO_8859_1)) {
 
             String chartTitle = modelReader.readLine();  // first line is chart title
             String[] series = modelReader.readLine().split(",");
index 9f0ca73fb6fadb22be6c52d425f9ee47238d7e62..4e9d7990508c252e51d799876b86f18c4500e73c 100644 (file)
@@ -22,8 +22,10 @@ package org.apache.poi.examples.xslf;
 import java.io.BufferedReader;
 import java.io.FileInputStream;
 import java.io.FileOutputStream;
-import java.io.FileReader;
 import java.io.OutputStream;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
+import java.nio.file.Paths;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -59,7 +61,7 @@ public final class PieChartDemo {
         }
 
         try (FileInputStream argIS = new FileInputStream(args[0]);
-            BufferedReader modelReader = new BufferedReader(new FileReader(args[1]))) {
+             BufferedReader modelReader = Files.newBufferedReader(Paths.get(args[1]), StandardCharsets.ISO_8859_1)) {
             String chartTitle = modelReader.readLine();  // first line is chart title
 
             try (XMLSlideShow pptx = new XMLSlideShow(argIS)) {
index 2afc73a6ab2a84477bfb0a4e3053e0d2d8437e9d..574458f7beb9df786846417db77e705586dd2d81 100644 (file)
@@ -40,6 +40,7 @@ import org.apache.poi.ss.usermodel.FillPatternType;
 import org.apache.poi.ss.usermodel.HorizontalAlignment;
 import org.apache.poi.ss.usermodel.IndexedColors;
 import org.apache.poi.ss.util.CellReference;
+import org.apache.poi.util.LocaleUtil;
 import org.apache.poi.xssf.usermodel.XSSFCellStyle;
 import org.apache.poi.xssf.usermodel.XSSFDataFormat;
 import org.apache.poi.xssf.usermodel.XSSFFont;
@@ -155,7 +156,7 @@ public final class BigGridDemo {
 
     private static void generate(Writer out, Map<String, XSSFCellStyle> styles) throws Exception {
 
-        Calendar calendar = Calendar.getInstance();
+        Calendar calendar = LocaleUtil.getLocaleCalendar();
 
         SpreadsheetWriter sw = new SpreadsheetWriter(out);
         sw.beginSheet();
index b97ef1a8b9bb5be24d7ca864c75fa9f3c1fb49dc..28f2c48f27aafba2db0d9923cf5a7b424bff7674 100644 (file)
@@ -28,6 +28,7 @@ import org.apache.poi.ss.usermodel.HorizontalAlignment;
 import org.apache.poi.ss.usermodel.PrintOrientation;
 import org.apache.poi.ss.usermodel.VerticalAlignment;
 import org.apache.poi.ss.util.CellRangeAddress;
+import org.apache.poi.util.LocaleUtil;
 import org.apache.poi.xssf.usermodel.XSSFCell;
 import org.apache.poi.xssf.usermodel.XSSFCellStyle;
 import org.apache.poi.xssf.usermodel.XSSFColor;
@@ -61,7 +62,7 @@ public class CalendarDemo {
 
     public static void main(String[] args) throws Exception {
 
-        Calendar calendar = Calendar.getInstance();
+        Calendar calendar = LocaleUtil.getLocaleCalendar();
         if(args.length > 0) calendar.set(Calendar.YEAR, Integer.parseInt(args[0]));
 
         int year = calendar.get(Calendar.YEAR);
index 7ba0c78bdf9ded2773484bc731547760fc0ba5f5..53951d0ebdda1dd4f5521823cf2bbf12cef055ad 100644 (file)
@@ -31,6 +31,7 @@ import org.apache.poi.ss.usermodel.DataFormat;
 import org.apache.poi.ss.usermodel.Row;
 import org.apache.poi.ss.util.AreaReference;
 import org.apache.poi.ss.util.CellReference;
+import org.apache.poi.util.LocaleUtil;
 import org.apache.poi.xssf.usermodel.XSSFPivotTable;
 import org.apache.poi.xssf.usermodel.XSSFSheet;
 import org.apache.poi.xssf.usermodel.XSSFWorkbook;
@@ -67,9 +68,9 @@ public class CreatePivotTable2 {
     }
 
     public static void setCellData(XSSFSheet sheet){
-        Calendar cal1 = Calendar.getInstance();
+        Calendar cal1 = LocaleUtil.getLocaleCalendar();
         cal1.set(2017, 0, 1, 0, 0, 0);
-        Calendar cal2 = Calendar.getInstance();
+        Calendar cal2 = LocaleUtil.getLocaleCalendar();
         cal2.set(2017, 1, 1, 0, 0, 0);
         Row row1 = sheet.createRow(0);
         // Create a cell and put a value in it.
index 89bd260505ba34fb9633a331565de96ece048270..641d3e7bf48e4311dcad623266200f5c728f425e 100644 (file)
@@ -23,8 +23,10 @@ package org.apache.poi.examples.xwpf.usermodel;
 import java.io.BufferedReader;
 import java.io.FileInputStream;
 import java.io.FileOutputStream;
-import java.io.FileReader;
 import java.io.OutputStream;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
+import java.nio.file.Paths;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -61,7 +63,7 @@ public final class BarChartExample {
         }
 
         try (FileInputStream argIS = new FileInputStream(args[0]);
-                BufferedReader modelReader = new BufferedReader(new FileReader(args[1]))) {
+            BufferedReader modelReader = Files.newBufferedReader(Paths.get(args[1]), StandardCharsets.ISO_8859_1)) {
 
             String chartTitle = modelReader.readLine();  // first line is chart title
             String[] series = modelReader.readLine().split(",");
index 9eb0e2dd3fd86d79e1d3e40f1e7c7029c2c4fb6e..1104c700578260ca98bf96d6ad1140fa9fe0d3af 100644 (file)
@@ -21,8 +21,10 @@ package org.apache.poi.examples.xwpf.usermodel;
 
 import java.io.BufferedReader;
 import java.io.FileOutputStream;
-import java.io.FileReader;
 import java.io.OutputStream;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
+import java.nio.file.Paths;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -65,7 +67,7 @@ public final class ChartFromScratch {
             return;
         }
 
-        try (BufferedReader modelReader = new BufferedReader(new FileReader(args[0]))) {
+        try (BufferedReader modelReader = Files.newBufferedReader(Paths.get(args[0]), StandardCharsets.ISO_8859_1)) {
 
             String chartTitle = modelReader.readLine();  // first line is chart title
             String[] series = modelReader.readLine().split(",");
index 703b97be0432fca14f9d93008b8492972591aa0c..49f804b4fabd54112992a57368e9f261876f4bec 100644 (file)
@@ -28,6 +28,7 @@ import java.io.File;
 import java.io.PrintStream;
 
 import org.apache.poi.POIDataSamples;
+import org.apache.poi.util.NullPrintStream;
 import org.apache.tools.ant.BuildEvent;
 import org.apache.tools.ant.BuildException;
 import org.apache.tools.ant.BuildListener;
@@ -140,12 +141,8 @@ public class TestBuildFile {
         try {
             sysOut.flush();
             sysErr.flush();
-            StringBuilder outBuffer = new StringBuilder();
-            PrintStream out = new PrintStream(new AntOutputStream(outBuffer));
-            System.setOut(out);
-            StringBuilder errBuffer = new StringBuilder();
-            PrintStream err = new PrintStream(new AntOutputStream(errBuffer));
-            System.setErr(err);
+            System.setOut(new NullPrintStream());
+            System.setErr(new NullPrintStream());
             logBuffer = new StringBuilder();
             fullLogBuffer = new StringBuilder();
             buildException = null;
index 2c125db1c076ec46edafd376730e4b864aa84139..dbbbea66a715ea4a3d8f86cd6accd4e2e01fcf3b 100644 (file)
@@ -104,7 +104,7 @@ public class HPSFFileHandler extends POIFSFileHandler {
         }
 
         ByteArrayOutputStream bos = new ByteArrayOutputStream();
-        PrintStream psNew = new PrintStream(bos);
+        PrintStream psNew = new PrintStream(bos, true, "ISO-8859-1");
         PrintStream ps = System.out;
         try {
             System.setOut(psNew);
index b64105a93bd25963684b147718d7ac9f4bfc3b8c..d4299776ccdfa9c36937dde04298d9c26d1a72c0 100644 (file)
@@ -22,7 +22,6 @@ import static org.junit.Assert.assertNotNull;
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.InputStream;
-import java.io.OutputStream;
 import java.io.PrintStream;
 import java.util.HashSet;
 import java.util.Set;
@@ -34,6 +33,7 @@ import org.apache.poi.hssf.usermodel.HSSFWorkbook;
 import org.apache.poi.ss.usermodel.Cell;
 import org.apache.poi.ss.usermodel.Row;
 import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.util.NullPrintStream;
 import org.junit.Test;
 
 public class HSSFFileHandler extends SpreadsheetHandler {
@@ -88,11 +88,7 @@ public class HSSFFileHandler extends SpreadsheetHandler {
                PrintStream oldOut = System.out;
                String fileWithParent = file.getParentFile().getName() + "/" + file.getName();
                try {
-                       System.setOut(new PrintStream(new OutputStream() {
-                               @Override
-                               public void write(int b) {
-                               }
-                       }));
+                       System.setOut(new NullPrintStream());
 
                        BiffViewer.main(new String[]{file.getAbsolutePath()});
 
index 59a3832b5926cb821ef9a1800b8cfbf5db313d43..47736b504f8368a624c7870b57ab6df42e6f2818 100644 (file)
@@ -20,7 +20,9 @@ import java.io.IOException;
 import java.lang.management.ManagementFactory;
 
 import com.sun.management.HotSpotDiagnosticMXBean;
+import org.apache.poi.util.SuppressForbidden;
 
+@SuppressForbidden("class only exists for manual tests in XSSFFileHandler")
 public class HeapDump {
     // This is the name of the HotSpot Diagnostic MBean
     private static final String HOTSPOT_BEAN_NAME =
index c0f88768b86985404796a204b7f423e6128b174e..b1aa5b718cc748c7b3ed5fbcb62c3e50f744f647 100644 (file)
@@ -28,11 +28,9 @@ import java.io.File;
 import java.io.FileInputStream;
 import java.io.IOException;
 import java.io.InputStream;
-import java.io.OutputStream;
 import java.io.PrintStream;
 import java.util.HashSet;
 import java.util.Iterator;
-import java.util.Locale;
 import java.util.Set;
 
 import javax.xml.transform.TransformerException;
@@ -51,6 +49,7 @@ import org.apache.poi.poifs.crypt.Decryptor;
 import org.apache.poi.poifs.crypt.EncryptionInfo;
 import org.apache.poi.poifs.filesystem.POIFSFileSystem;
 import org.apache.poi.util.IOUtils;
+import org.apache.poi.util.NullPrintStream;
 import org.apache.poi.xssf.eventusermodel.XSSFReader;
 import org.apache.poi.xssf.extractor.XSSFExportToXml;
 import org.apache.poi.xssf.usermodel.XSSFMap;
@@ -221,77 +220,4 @@ public class XSSFFileHandler extends SpreadsheetHandler {
     public void testAdditional() throws Exception {
         handleAdditional(new File("test-data/spreadsheet/poc-xmlbomb.xlsx"));
     }
-
-    // need to override all methods to omit calls to UTF-handling methods
-    static class NullPrintStream extends PrintStream {
-        @SuppressWarnings("resource")
-        NullPrintStream() {
-            super(new OutputStream() {
-                @Override
-                public void write(int b) {}
-                @Override
-                public void write(byte[] b) {}
-                @Override
-                public void write(byte[] b, int off, int len) {}
-            });
-        }
-        @Override
-        public void write(int b) {}
-        @Override
-        public void write(byte[] buf, int off, int len) {}
-        @Override
-        public void print(boolean b) {}
-        @Override
-        public void print(char c) {}
-        @Override
-        public void print(int i) {}
-        @Override
-        public void print(long l) {}
-        @Override
-        public void print(float f) {}
-        @Override
-        public void print(double d) {}
-        @Override
-        public void print(char[] s) {}
-        @Override
-        public void print(String s) {}
-        @Override
-        public void print(Object obj) {}
-        @Override
-        public void println() {}
-        @Override
-        public void println(boolean x) {}
-        @Override
-        public void println(char x) {}
-        @Override
-        public void println(int x) {}
-        @Override
-        public void println(long x) {}
-        @Override
-        public void println(float x) {}
-        @Override
-        public void println(double x) {}
-        @Override
-        public void println(char[] x) {}
-        @Override
-        public void println(String x) {}
-        @Override
-        public void println(Object x) {}
-        @Override
-        public PrintStream printf(String format, Object... args) { return this; }
-        @Override
-        public PrintStream printf(Locale l, String format, Object... args) { return this; }
-        @Override
-        public PrintStream format(String format, Object... args) { return this; }
-        @Override
-        public PrintStream format(Locale l, String format, Object... args) { return this; }
-        @Override
-        public PrintStream append(CharSequence csq) { return this; }
-        @Override
-        public PrintStream append(CharSequence csq, int start, int end) { return this; }
-        @Override
-        public PrintStream append(char c) { return this; }
-        @Override
-        public void write(byte[] b) {}
-    }
 }
index 9e592df284a2195df7a180a6580fca782538a340..efabb8c00ec2beec2b8d43e580c11da2094dd013 100644 (file)
@@ -417,10 +417,8 @@ public final class TestSXSSFWorkbook extends BaseTestXWorkbook {
 
     private static void saveTwice(Workbook wb) throws Exception {
         for (int i = 0; i < 2; i++) {
-            try {
-                NullOutputStream out = new NullOutputStream();
+            try (NullOutputStream out = new NullOutputStream()) {
                 wb.write(out);
-                out.close();
             } catch (Exception e) {
                 throw new Exception("ERROR: failed on " + (i + 1)
                         + "th time calling " + wb.getClass().getName()
index 59dcf4789002bca4b983249bf2b9b38ad9a6b3bc..fa1a846088667da5d4a2eb0a51b65a993334ae0a 100644 (file)
@@ -17,7 +17,7 @@
 # This file contains API signatures which are specific to POI.
 # The goal is to minimize implicit defaults
 
-@defaultMessage POI forbidden APIs which are tolerated in non-production code, e.g. in tests and examples
+@defaultMessage POI forbidden APIs which are not tolerated in production code
 
 # We have applications which use this to return error codes on invalid commandline parameters...
 #@defaultMessage Please do not terminate the application
index 95a7d91460f035ac44a4d49a5f59c8102bef90e9..2ef26a66b768027949cd188056f740a9e4a23e89 100644 (file)
@@ -24,7 +24,7 @@ import java.io.File;
 import java.io.PrintStream;
 
 import org.apache.poi.POIDataSamples;
-import org.apache.poi.util.NullOutputStream;
+import org.apache.poi.util.NullPrintStream;
 import org.junit.Test;
 
 public class TestHMEFDumper {
@@ -48,7 +48,7 @@ public class TestHMEFDumper {
     private static void doMain(String... args) throws Exception {
         PrintStream ps = System.out;
         try {
-            System.setOut(new PrintStream(new NullOutputStream(), true, "UTF-8"));
+            System.setOut(new NullPrintStream());
             HMEFDumper.main(args);
         } finally {
             System.setOut(ps);
index 5212221e489fcdb7f5566d4bf4dd6e07ddf850ed..681cd467083090d101ac6db4a4543e1ce5cc68ad 100644 (file)
 ==================================================================== */
 package org.apache.poi.hslf.dev;
 
-import org.apache.poi.POIDataSamples;
-import org.apache.poi.hslf.exceptions.EncryptedPowerPointFileException;
-import org.apache.poi.hslf.exceptions.OldPowerPointFormatException;
-import org.apache.poi.util.IOUtils;
-import org.apache.poi.util.LocaleUtil;
-import org.apache.poi.util.NullOutputStream;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.ExpectedException;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
+import static org.junit.Assert.assertNotNull;
 
 import java.io.File;
-import java.io.OutputStream;
 import java.io.PrintStream;
 import java.io.UnsupportedEncodingException;
 import java.util.ArrayList;
@@ -42,12 +29,21 @@ import java.util.Locale;
 import java.util.Map;
 import java.util.Set;
 
-import static org.junit.Assert.assertNotNull;
+import org.apache.poi.POIDataSamples;
+import org.apache.poi.hslf.exceptions.EncryptedPowerPointFileException;
+import org.apache.poi.hslf.exceptions.OldPowerPointFormatException;
+import org.apache.poi.util.IOUtils;
+import org.apache.poi.util.NullPrintStream;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
 
 @RunWith(Parameterized.class)
 public abstract class BasePPTIteratingTest {
-    protected static final OutputStream NULL_OUTPUT_STREAM = new NullOutputStream();
-
     protected static final Set<String> OLD_FILES = new HashSet<>();
     static {
         OLD_FILES.add("PPT95.ppt");
@@ -89,7 +85,7 @@ public abstract class BasePPTIteratingTest {
         IOUtils.setByteArrayMaxOverride(5*1024*1024);
 
         // redirect standard out during the test to avoid spamming the console with output
-        System.setOut(new PrintStream(NULL_OUTPUT_STREAM, true, LocaleUtil.CHARSET_1252.name()));
+        System.setOut(new NullPrintStream());
     }
 
     @After
index e23f158703cf66adfab589a3450973ce67d33c42..32ae5077de098de72c63d5334243082b5a4abf09 100644 (file)
@@ -35,16 +35,17 @@ import java.io.File;
 import java.io.FileInputStream;
 import java.io.IOException;
 import java.io.InputStream;
-import java.io.OutputStream;
-import java.io.PrintStream;
 import java.text.AttributedCharacterIterator;
 import java.text.AttributedCharacterIterator.Attribute;
 import java.text.CharacterIterator;
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
+import java.util.Locale;
 import java.util.Map;
 import java.util.Set;
 
@@ -59,7 +60,6 @@ import org.apache.poi.hslf.exceptions.OldPowerPointFormatException;
 import org.apache.poi.hslf.model.HeadersFooters;
 import org.apache.poi.hslf.record.DocInfoListContainer;
 import org.apache.poi.hslf.record.Document;
-import org.apache.poi.hslf.record.Record;
 import org.apache.poi.hslf.record.RecordTypes;
 import org.apache.poi.hslf.record.SlideListWithText;
 import org.apache.poi.hslf.record.SlideListWithText.SlideAtomsSet;
@@ -88,6 +88,7 @@ import org.apache.poi.sl.usermodel.TextParagraph.TextAlign;
 import org.apache.poi.sl.usermodel.TextRun;
 import org.apache.poi.util.IOUtils;
 import org.apache.poi.util.LittleEndian;
+import org.apache.poi.util.NullPrintStream;
 import org.apache.poi.util.StringUtil;
 import org.apache.poi.util.Units;
 import org.junit.Test;
@@ -291,7 +292,7 @@ public final class TestBugs {
                 }
             }
         }
-        
+
         ppt.close();
     }
 
@@ -375,7 +376,7 @@ public final class TestBugs {
         HSLFPictureData pict = f.getPictureData();
         assertNotNull(pict);
         assertEquals(PictureType.JPEG, pict.getType());
-        
+
         ppt.close();
     }
 
@@ -405,7 +406,7 @@ public final class TestBugs {
         List<List<HSLFTextParagraph>> run = slide.getTextParagraphs();
         assertEquals(3, run.size());
         assertEquals("Fundera, planera och involvera.", HSLFTextParagraph.getRawText(run.get(2)));
-        
+
         ppt.close();
     }
 
@@ -445,7 +446,7 @@ public final class TestBugs {
         HSLFSlideShow ppt = open("41246-1.ppt");
 
         HSLFTestDataSamples.writeOutAndReadBack(ppt).close();
-        
+
         ppt.close();
     }
 
@@ -454,7 +455,7 @@ public final class TestBugs {
         HSLFSlideShow ppt = open("41246-2.ppt");
 
         HSLFTestDataSamples.writeOutAndReadBack(ppt).close();
-        
+
         ppt.close();
     }
 
@@ -463,31 +464,32 @@ public final class TestBugs {
      */
     @Test
     public void bug45776() throws IOException {
-        HSLFSlideShow ppt = open("45776.ppt");
+        DateFormat df = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy", Locale.ROOT);
+        try (HSLFSlideShow ppt = open("45776.ppt")) {
+
+            // get slides
+            for (HSLFSlide slide : ppt.getSlides()) {
+                for (HSLFShape shape : slide.getShapes()) {
+                    if (!(shape instanceof HSLFTextBox)) {
+                        continue;
+                    }
+                    HSLFTextBox tb = (HSLFTextBox) shape;
+                    // work with TextBox
+                    String str = tb.getText();
 
-        // get slides
-        for (HSLFSlide slide : ppt.getSlides()) {
-            for (HSLFShape shape : slide.getShapes()) {
-                if (!(shape instanceof HSLFTextBox)) {
-                    continue;
-                }
-                HSLFTextBox tb = (HSLFTextBox) shape;
-                // work with TextBox
-                String str = tb.getText();
+                    if (!str.contains("$$DATE$$")) {
+                        continue;
+                    }
+                    str = str.replace("$$DATE$$", df.format(new Date()));
+                    tb.setText(str);
 
-                if (!str.contains("$$DATE$$")) {
-                    continue;
+                    List<HSLFTextParagraph> tr = tb.getTextParagraphs();
+                    assertEquals(str.length() + 1, tr.get(0).getParagraphStyle().getCharactersCovered());
+                    assertEquals(str.length() + 1, tr.get(0).getTextRuns().get(0).getCharacterStyle().getCharactersCovered());
                 }
-                str = str.replace("$$DATE$$", new Date().toString());
-                tb.setText(str);
-
-                List<HSLFTextParagraph> tr = tb.getTextParagraphs();
-                assertEquals(str.length()+1,tr.get(0).getParagraphStyle().getCharactersCovered());
-                assertEquals(str.length()+1,tr.get(0).getTextRuns().get(0).getCharacterStyle().getCharactersCovered());
             }
+
         }
-        
-        ppt.close();
     }
 
     @Test
@@ -501,7 +503,7 @@ public final class TestBugs {
             HeadersFooters hf = slide.getHeadersFooters();
             /*boolean visible =*/ hf.isHeaderVisible(); // exception happens here
         }
-        
+
         ppt.close();
     }
 
@@ -538,7 +540,7 @@ public final class TestBugs {
             }
         }
         assertEquals(2, str);
-        
+
         ppt.close();
     }
 
@@ -781,7 +783,7 @@ public final class TestBugs {
 
         HSLFSlideShow ppt2 = HSLFTestDataSamples.writeOutAndReadBack(ppt1);
         ppt1.close();
-        
+
         HSLFTextShape ts = (HSLFTextShape)ppt2.getSlides().get(0).getShapes().get(0);
         tp = ts.getTextParagraphs().get(0);
         tr = tp.getTextRuns().get(0);
@@ -841,9 +843,9 @@ public final class TestBugs {
     @Test
     public void bug55030() throws IOException {
         HSLFSlideShow ppt = open("bug55030.ppt");
-        
+
         String expFamily = "\u96b6\u4e66";
-        
+
         HSLFSlide sl = ppt.getSlides().get(0);
         for (List<HSLFTextParagraph> paraList : sl.getTextParagraphs()) {
             for (HSLFTextParagraph htp : paraList) {
@@ -853,7 +855,7 @@ public final class TestBugs {
                 }
             }
         }
-        
+
         ppt.close();
     }
 
@@ -873,27 +875,22 @@ public final class TestBugs {
         assertEquals(hlRun.getStartIndex(), hlShape.getStartIndex());
         assertEquals(hlRun.getEndIndex(), hlShape.getEndIndex());
 
-        OutputStream nullOutput = new OutputStream(){
-            @Override
-            public void write(int b) throws IOException {}
-        };
-
         final boolean[] found = {false};
-        DummyGraphics2d dgfx = new DummyGraphics2d(new PrintStream(nullOutput)){
+        DummyGraphics2d dgfx = new DummyGraphics2d(new NullPrintStream()){
             @Override
             public void drawString(AttributedCharacterIterator iterator, float x, float y) {
                 // For the test file, common sl draws textruns one by one and not mixed
                 // so we evaluate the whole iterator
                 Map<Attribute, Object> attributes = null;
                 StringBuilder sb = new StringBuilder();
-                
+
                 for (char c = iterator.first();
                         c != CharacterIterator.DONE;
                         c = iterator.next()) {
                     sb.append(c);
                     attributes = iterator.getAttributes();
                 }
-    
+
                 if ("Jakarta HSSF".equals(sb.toString())) {
                     // this is a test for a manually modified ppt, for real hyperlink label
                     // one would need to access the screen tip record
@@ -905,17 +902,17 @@ public final class TestBugs {
                 }
             }
         };
-        
+
         ppt.getSlides().get(1).draw(dgfx);
         assertTrue(found[0]);
-        
+
         ppt.close();
     }
 
     @Test
     public void bug59056() throws IOException {
         HSLFSlideShow ppt = open("54541_cropped_bitmap.ppt");
-        
+
         for (HSLFShape shape : ppt.getSlides().get(0).getShapes()) {
             BufferedImage img = new BufferedImage(500, 300, BufferedImage.TYPE_INT_ARGB);
             Graphics2D graphics = img.createGraphics();
@@ -927,11 +924,11 @@ public final class TestBugs {
             graphics.dispose();
             // ImageIO.write(img, "png", new File("bla"+shape.getShapeId()+".png"));
         }
-            
+
         ppt.close();
-        
+
     }
-    
+
     private static HSLFSlideShow open(String fileName) throws IOException {
         File sample = HSLFTestDataSamples.getSampleFile(fileName);
         // Note: don't change the code here, it is required for Eclipse to compile the code
@@ -950,10 +947,10 @@ public final class TestBugs {
         fs.setPath(new Path2D.Double(el));
         Color cExp = new Color(50,100,150,200);
         fs.setFillColor(cExp);
-        
+
         HSLFSlideShow ppt2 = HSLFTestDataSamples.writeOutAndReadBack(ppt1);
         ppt1.close();
-        
+
         sl = ppt2.getSlides().get(0);
         fs = (HSLFFreeformShape)sl.getShapes().get(0);
         Color cAct = fs.getFillColor();
@@ -961,7 +958,7 @@ public final class TestBugs {
         assertEquals(cExp.getGreen(), cAct.getGreen());
         assertEquals(cExp.getBlue(), cAct.getBlue());
         assertEquals(cExp.getAlpha(), cAct.getAlpha(), 1);
-        
+
         PaintStyle ps = fs.getFillStyle().getPaint();
         assertTrue(ps instanceof SolidPaint);
         ColorStyle cs = ((SolidPaint)ps).getSolidColor();
@@ -971,7 +968,7 @@ public final class TestBugs {
         assertEquals(cExp.getBlue(), cAct.getBlue());
         assertEquals(255, cAct.getAlpha());
         assertEquals(cExp.getAlpha()*100000./255., cs.getAlpha(), 1);
-        
+
         ppt2.close();
     }
 
@@ -1016,7 +1013,7 @@ public final class TestBugs {
                     }
                 }
             }
-            
+
             ppt.close();
 
         } finally {
index 5d6e2f51b623400dae4f4dcba4a4b933fc613480..d44145aedc62a13b416a72faf1409785341df5b0 100644 (file)
@@ -44,6 +44,7 @@ import org.apache.poi.poifs.filesystem.DirectoryEntry;
 import org.apache.poi.poifs.filesystem.Entry;
 import org.apache.poi.poifs.filesystem.EntryUtils;
 import org.apache.poi.poifs.filesystem.POIFSFileSystem;
+import org.apache.poi.util.LocaleUtil;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
 import org.junit.Test;
@@ -53,7 +54,7 @@ public class TestExtractEmbeddedMSG {
 
     /**
      * Initialize this test, load up the attachment_msg_pdf.msg mapi message.
-     * 
+     *
      * @throws Exception
      */
     @BeforeClass
@@ -70,9 +71,9 @@ public class TestExtractEmbeddedMSG {
     /**
      * Test to see if embedded message properties can be read, extracted, and
      * re-parsed
-     * 
+     *
      * @throws ChunkNotFoundException
-     * 
+     *
      */
     @Test
     public void testEmbeddedMSGProperties() throws IOException, ChunkNotFoundException {
@@ -102,7 +103,7 @@ public class TestExtractEmbeddedMSG {
         msg.setReturnNullOnMissingChunk(true);
         Calendar messageDate = msg.getMessageDate();
         assertNotNull(messageDate);
-        Calendar expectedMessageDate = Calendar.getInstance();
+        Calendar expectedMessageDate = LocaleUtil.getLocaleCalendar();
         expectedMessageDate.set(2010, 05, 17, 23, 52, 19); // 2010/06/17 23:52:19 GMT
         expectedMessageDate.setTimeZone(TimeZone.getTimeZone("GMT"));
         expectedMessageDate.set(Calendar.MILLISECOND, 0);
index 007fff036ae0856ddb541f6a76a75a1be442ecbb..c559407a1aba41eb1af94e272c82d3c0f8c1640c 100644 (file)
@@ -168,7 +168,7 @@ public final class TestFixedSizedProperties {
     */
    @Test
    public void testReadMessageDateSucceedsWithHSMFDump() throws IOException {
-       PrintStream stream = new PrintStream(new ByteArrayOutputStream());
+       PrintStream stream = new PrintStream(new ByteArrayOutputStream(), true, "ISO-8859-1");
        HSMFDump dump = new HSMFDump(fsMessageSucceeds);
        dump.dump(stream);
    }
@@ -178,7 +178,7 @@ public final class TestFixedSizedProperties {
     */
    @Test
    public void testReadMessageDateFailsWithHSMFDump() throws Exception {
-       PrintStream stream = new PrintStream(new ByteArrayOutputStream());
+       PrintStream stream = new PrintStream(new ByteArrayOutputStream(), true, "ISO-8859-1");
        HSMFDump dump = new HSMFDump(fsMessageFails);
        dump.dump(stream);
    }
index a8b30a001c263744ce576a6b3e49649e37c50983..262aafdb3b72e65f2807eb71bd7ef3f5fa6eb4ee 100644 (file)
@@ -20,7 +20,6 @@ import static org.junit.Assert.assertNotNull;
 
 import java.io.File;
 import java.io.FileInputStream;
-import java.io.OutputStream;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
@@ -29,7 +28,6 @@ import java.util.Map;
 
 import org.apache.poi.POIDataSamples;
 import org.apache.poi.hssf.usermodel.HSSFWorkbook;
-import org.apache.poi.util.NullOutputStream;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.ExpectedException;
@@ -46,8 +44,6 @@ import org.junit.runners.Parameterized.Parameters;
  */
 @RunWith(Parameterized.class)
 public abstract class BaseTestIteratingXLS {
-    protected static final OutputStream NULL_OUTPUT_STREAM = new NullOutputStream();
-
     @Rule
     public ExpectedException thrown = ExpectedException.none();
 
@@ -74,9 +70,9 @@ public abstract class BaseTestIteratingXLS {
         assertNotNull("Did not find any xls files in directory " + dir, files);
 
         for(String file : files) {
-            list.add(new Object[] { new File(dir, file) });
+                list.add(new Object[]{new File(dir, file)});
+            }
         }
-    }
 
     @Parameter
     public File file;
index 12d7c6fbaf758042fb4b14870c69219b5c12e325..406266d902f59a8c86c6e67c3d90172cbfd516fb 100644 (file)
@@ -23,6 +23,7 @@ import java.io.InputStream;
 import org.apache.poi.EncryptedDocumentException;
 import org.apache.poi.hssf.OldExcelFormatException;
 import org.apache.poi.hssf.record.RecordInputStream;
+import org.apache.poi.util.NullOutputStream;
 import org.apache.poi.util.RecordFormatException;
 import org.junit.BeforeClass;
 
@@ -30,10 +31,10 @@ public class TestBiffDrawingToXml extends BaseTestIteratingXLS {
     @BeforeClass
     public static void setup() {
         EXCLUDED.clear();
-        EXCLUDED.put("35897-type4.xls", EncryptedDocumentException.class); // unsupported crypto api header 
+        EXCLUDED.put("35897-type4.xls", EncryptedDocumentException.class); // unsupported crypto api header
         EXCLUDED.put("51832.xls", EncryptedDocumentException.class);
-        EXCLUDED.put("xor-encryption-abc.xls", EncryptedDocumentException.class); 
-        EXCLUDED.put("password.xls", EncryptedDocumentException.class); 
+        EXCLUDED.put("xor-encryption-abc.xls", EncryptedDocumentException.class);
+        EXCLUDED.put("password.xls", EncryptedDocumentException.class);
         EXCLUDED.put("46904.xls", OldExcelFormatException.class);
         EXCLUDED.put("59074.xls", OldExcelFormatException.class);
         EXCLUDED.put("testEXCEL_2.xls", OldExcelFormatException.class);  // Biff 2 / Excel 2, pre-OLE2
@@ -47,11 +48,11 @@ public class TestBiffDrawingToXml extends BaseTestIteratingXLS {
         EXCLUDED.put("61300.xls", RecordFormatException.class);
         EXCLUDED.put("64130.xls", OldExcelFormatException.class); // BIFF 5
     }
-       
+
        @Override
        void runOneFile(File pFile) throws Exception {
         try (InputStream wb = new FileInputStream(pFile)) {
-            BiffDrawingToXml.writeToFile(NULL_OUTPUT_STREAM, wb, false, new String[0]);
+            BiffDrawingToXml.writeToFile(new NullOutputStream(), wb, false, new String[0]);
         }
        }
 }
index d4fd62fa99d8d2185a9f3cf226837b865a2c503d..75adb444a420e1a4de57ccb1dfa77f8e71484f2c 100644 (file)
@@ -28,6 +28,7 @@ import org.apache.poi.hssf.OldExcelFormatException;
 import org.apache.poi.hssf.record.RecordInputStream;
 import org.apache.poi.poifs.filesystem.POIFSFileSystem;
 import org.apache.poi.util.LocaleUtil;
+import org.apache.poi.util.NullOutputStream;
 import org.apache.poi.util.RecordFormatException;
 import org.junit.BeforeClass;
 import org.junit.Ignore;
@@ -62,7 +63,7 @@ public class TestBiffViewer extends BaseTestIteratingXLS {
         try (POIFSFileSystem fs = new POIFSFileSystem(fileIn, true);
              InputStream is = BiffViewer.getPOIFSInputStream(fs)) {
             // use a NullOutputStream to not write the bytes anywhere for best runtime
-            PrintWriter dummy = new PrintWriter(new OutputStreamWriter(NULL_OUTPUT_STREAM, LocaleUtil.CHARSET_1252));
+            PrintWriter dummy = new PrintWriter(new OutputStreamWriter(new NullOutputStream(), LocaleUtil.CHARSET_1252));
             BiffViewer.runBiffViewer(dummy, is, true, true, true, false);
         }
     }
index d32e0b71eb71456e7287a331bc3e9571d6ad5dc3..20a7a635c923d2cc60b5737ede253037a3acdd4f 100644 (file)
@@ -23,7 +23,7 @@ import java.io.PrintStream;
 import org.apache.poi.EncryptedDocumentException;
 import org.apache.poi.hssf.OldExcelFormatException;
 import org.apache.poi.hssf.record.RecordInputStream;
-import org.apache.poi.util.LocaleUtil;
+import org.apache.poi.util.NullPrintStream;
 import org.apache.poi.util.RecordFormatException;
 import org.junit.BeforeClass;
 
@@ -31,10 +31,10 @@ public class TestEFBiffViewer extends BaseTestIteratingXLS {
     @BeforeClass
     public static void setup() {
         EXCLUDED.clear();
-        EXCLUDED.put("35897-type4.xls", EncryptedDocumentException.class); // unsupported crypto api header 
+        EXCLUDED.put("35897-type4.xls", EncryptedDocumentException.class); // unsupported crypto api header
         EXCLUDED.put("51832.xls", EncryptedDocumentException.class);
-        EXCLUDED.put("xor-encryption-abc.xls", EncryptedDocumentException.class); 
-        EXCLUDED.put("password.xls", EncryptedDocumentException.class); 
+        EXCLUDED.put("xor-encryption-abc.xls", EncryptedDocumentException.class);
+        EXCLUDED.put("password.xls", EncryptedDocumentException.class);
         EXCLUDED.put("46904.xls", OldExcelFormatException.class);
         EXCLUDED.put("59074.xls", OldExcelFormatException.class);
         EXCLUDED.put("testEXCEL_2.xls", OldExcelFormatException.class);  // Biff 2 / Excel 2, pre-OLE2
@@ -45,17 +45,17 @@ public class TestEFBiffViewer extends BaseTestIteratingXLS {
         EXCLUDED.put("testEXCEL_95.xls", OldExcelFormatException.class); // Biff 5 / Excel 95
         EXCLUDED.put("43493.xls", RecordInputStream.LeftoverDataException.class);  // HSSFWorkbook cannot open it as well
         EXCLUDED.put("44958_1.xls", RecordInputStream.LeftoverDataException.class);
-        EXCLUDED.put("XRefCalc.xls", RuntimeException.class);            // "Buffer overrun"
+        // EXCLUDED.put("XRefCalc.xls", RuntimeException.class);            // "Buffer overrun"
         EXCLUDED.put("61300.xls", RecordFormatException.class);
         EXCLUDED.put("64130.xls", OldExcelFormatException.class); //Biff 5
     }
-       
+
        @Override
        void runOneFile(File fileIn) throws IOException {
                PrintStream save = System.out;
                try {
                        // redirect standard out during the test to avoid spamming the console with output
-                       System.setOut(new PrintStream(NULL_OUTPUT_STREAM,true,LocaleUtil.CHARSET_1252.name()));
+                       System.setOut(new NullPrintStream());
 
                        EFBiffViewer.main(new String[] { fileIn.getAbsolutePath() });
                } finally {
index b92223099401b254b7aa234c56270ddf8352c2a2..a3eae963c8dfb2239b59e5142158951f6f7cc474 100644 (file)
@@ -24,7 +24,7 @@ import java.io.PrintStream;
 import org.apache.poi.EncryptedDocumentException;
 import org.apache.poi.hssf.OldExcelFormatException;
 import org.apache.poi.hssf.record.RecordInputStream;
-import org.apache.poi.util.LocaleUtil;
+import org.apache.poi.util.NullPrintStream;
 import org.apache.poi.util.RecordFormatException;
 import org.junit.BeforeClass;
 
@@ -32,10 +32,10 @@ public class TestFormulaViewer extends BaseTestIteratingXLS {
     @BeforeClass
     public static void setup() {
         EXCLUDED.clear();
-        EXCLUDED.put("35897-type4.xls", EncryptedDocumentException.class); // unsupported crypto api header 
+        EXCLUDED.put("35897-type4.xls", EncryptedDocumentException.class); // unsupported crypto api header
         EXCLUDED.put("51832.xls", EncryptedDocumentException.class);
-        EXCLUDED.put("xor-encryption-abc.xls", EncryptedDocumentException.class); 
-        EXCLUDED.put("password.xls", EncryptedDocumentException.class); 
+        EXCLUDED.put("xor-encryption-abc.xls", EncryptedDocumentException.class);
+        EXCLUDED.put("password.xls", EncryptedDocumentException.class);
         EXCLUDED.put("46904.xls", OldExcelFormatException.class);
         EXCLUDED.put("59074.xls", OldExcelFormatException.class);
         EXCLUDED.put("testEXCEL_2.xls", OldExcelFormatException.class);  // Biff 2 / Excel 2, pre-OLE2
@@ -49,13 +49,13 @@ public class TestFormulaViewer extends BaseTestIteratingXLS {
         EXCLUDED.put("61300.xls", RecordFormatException.class);
         EXCLUDED.put("64130.xls", OldExcelFormatException.class); //Biff 5
     }
-       
+
     @Override
        void runOneFile(File fileIn) throws Exception {
                PrintStream save = System.out;
                try {
                        // redirect standard out during the test to avoid spamming the console with output
-                       System.setOut(new PrintStream(NULL_OUTPUT_STREAM,true,LocaleUtil.CHARSET_1252.name()));
+                       System.setOut(new NullPrintStream());
 
             FormulaViewer viewer = new FormulaViewer();
             viewer.setFile(fileIn.getAbsolutePath());
index 890ef1e8372afcd31e8dc8669e3a42c935c8ac53..8ab108378f3365b927a0b55f199563752e44107a 100644 (file)
@@ -25,7 +25,7 @@ import org.apache.poi.EncryptedDocumentException;
 import org.apache.poi.POIDataSamples;
 import org.apache.poi.hssf.OldExcelFormatException;
 import org.apache.poi.hssf.record.RecordInputStream;
-import org.apache.poi.util.LocaleUtil;
+import org.apache.poi.util.NullPrintStream;
 import org.apache.poi.util.RecordFormatException;
 import org.junit.BeforeClass;
 import org.junit.Ignore;
@@ -35,10 +35,10 @@ public class TestReSave extends BaseTestIteratingXLS {
     @BeforeClass
     public static void setup() {
         EXCLUDED.clear();
-        EXCLUDED.put("35897-type4.xls", EncryptedDocumentException.class); // unsupported crypto api header 
+        EXCLUDED.put("35897-type4.xls", EncryptedDocumentException.class); // unsupported crypto api header
         EXCLUDED.put("51832.xls", EncryptedDocumentException.class);
-        EXCLUDED.put("xor-encryption-abc.xls", EncryptedDocumentException.class); 
-        EXCLUDED.put("password.xls", EncryptedDocumentException.class); 
+        EXCLUDED.put("xor-encryption-abc.xls", EncryptedDocumentException.class);
+        EXCLUDED.put("password.xls", EncryptedDocumentException.class);
         EXCLUDED.put("46904.xls", OldExcelFormatException.class);
         EXCLUDED.put("59074.xls", OldExcelFormatException.class);
         EXCLUDED.put("testEXCEL_2.xls", OldExcelFormatException.class);  // Biff 2 / Excel 2, pre-OLE2
@@ -64,12 +64,12 @@ public class TestReSave extends BaseTestIteratingXLS {
                PrintStream save = System.out;
                try {
                        // redirect standard out during the test to avoid spamming the console with output
-                       System.setOut(new PrintStream(NULL_OUTPUT_STREAM,true,LocaleUtil.CHARSET_1252.name()));
+                       System.setOut(new NullPrintStream());
 
                        File reSavedFile = new File(fileIn.getParentFile(), fileIn.getName().replace(".xls", "-saved.xls"));
                        try {
                                ReSave.main(new String[] { fileIn.getAbsolutePath() });
-                               
+
                                // also try BiffViewer on the saved file
                 new TestBiffViewer().runOneFile(reSavedFile);
 
index 934eb5b89d39c8998b93f42593e78a53f1a5194a..3a1b9bb2fe02b9b27c54b2d88c0dfa0272ff724e 100644 (file)
@@ -21,7 +21,7 @@ import java.io.IOException;
 import java.io.PrintStream;
 
 import org.apache.poi.hssf.OldExcelFormatException;
-import org.apache.poi.util.LocaleUtil;
+import org.apache.poi.util.NullPrintStream;
 import org.apache.poi.util.RecordFormatException;
 import org.junit.BeforeClass;
 
@@ -46,7 +46,7 @@ public class TestRecordLister extends BaseTestIteratingXLS {
                PrintStream save = System.out;
                try {
                        // redirect standard out during the test to avoid spamming the console with output
-                       System.setOut(new PrintStream(NULL_OUTPUT_STREAM,true,LocaleUtil.CHARSET_1252.name()));
+                       System.setOut(new NullPrintStream());
 
                        RecordLister viewer = new RecordLister();
             viewer.setFile(fileIn.getAbsolutePath());
index 6ab7dd52d1ede856694e1bf7527a353a0e1040f0..d040cf216f358004c28369f4429f15d3f06a2433 100644 (file)
@@ -26,8 +26,6 @@ import static org.junit.Assert.assertSame;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 
-import java.io.File;
-import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.OutputStream;
 import java.util.ConcurrentModificationException;
@@ -39,8 +37,9 @@ import org.apache.poi.ss.usermodel.ClientAnchor.AnchorType;
 import org.apache.poi.ss.util.CellAddress;
 import org.apache.poi.ss.util.CellRangeAddress;
 import org.apache.poi.util.NullOutputStream;
-import org.apache.poi.util.TempFile;
+import org.junit.Rule;
 import org.junit.Test;
+import org.junit.rules.ExpectedException;
 
 public abstract class BaseTestWorkbook {
 
@@ -49,21 +48,25 @@ public abstract class BaseTestWorkbook {
     protected BaseTestWorkbook(ITestDataProvider testDataProvider) {
         _testDataProvider = testDataProvider;
     }
-    
+
+    @Rule
+    public ExpectedException thrown = ExpectedException.none();
+
+
     @Test
     public void sheetIterator_forEach() throws IOException {
-        final Workbook wb = _testDataProvider.createWorkbook();
-        wb.createSheet("Sheet0");
-        wb.createSheet("Sheet1");
-        wb.createSheet("Sheet2");
-        int i = 0;
-        for (Sheet sh : wb) {
-            assertEquals("Sheet"+i, sh.getSheetName());
-            i++;
+        try (Workbook wb = _testDataProvider.createWorkbook()) {
+            wb.createSheet("Sheet0");
+            wb.createSheet("Sheet1");
+            wb.createSheet("Sheet2");
+            int i = 0;
+            for (Sheet sh : wb) {
+                assertEquals("Sheet" + i, sh.getSheetName());
+                i++;
+            }
         }
-        wb.close();
     }
-    
+
     /**
      * Expected ConcurrentModificationException:
      * should not be able to advance an iterator when the
@@ -71,23 +74,20 @@ public abstract class BaseTestWorkbook {
      */
     @Test(expected=ConcurrentModificationException.class)
     public void sheetIterator_sheetsReordered() throws IOException {
-        final Workbook wb = _testDataProvider.createWorkbook();
-        wb.createSheet("Sheet0");
-        wb.createSheet("Sheet1");
-        wb.createSheet("Sheet2");
-        
-        Iterator<Sheet> it = wb.sheetIterator();
-        it.next();
-        wb.setSheetOrder("Sheet2", 1);
-        
-        // Iterator order should be fixed when iterator is created
-        try {
+        try (Workbook wb = _testDataProvider.createWorkbook()) {
+            wb.createSheet("Sheet0");
+            wb.createSheet("Sheet1");
+            wb.createSheet("Sheet2");
+
+            Iterator<Sheet> it = wb.sheetIterator();
+            it.next();
+            wb.setSheetOrder("Sheet2", 1);
+
+            // Iterator order should be fixed when iterator is created
             assertEquals("Sheet1", it.next().getSheetName());
-        } finally {
-            wb.close();
         }
     }
-    
+
     /**
      * Expected ConcurrentModificationException:
      * should not be able to advance an iterator when the
@@ -95,140 +95,134 @@ public abstract class BaseTestWorkbook {
      */
     @Test(expected=ConcurrentModificationException.class)
     public void sheetIterator_sheetRemoved() throws IOException {
-        final Workbook wb = _testDataProvider.createWorkbook();
-        wb.createSheet("Sheet0");
-        wb.createSheet("Sheet1");
-        wb.createSheet("Sheet2");
-        
-        Iterator<Sheet> it = wb.sheetIterator();
-        wb.removeSheetAt(1);
-        
-        // Iterator order should be fixed when iterator is created
-        try {
+        try (Workbook wb = _testDataProvider.createWorkbook()) {
+            wb.createSheet("Sheet0");
+            wb.createSheet("Sheet1");
+            wb.createSheet("Sheet2");
+
+            Iterator<Sheet> it = wb.sheetIterator();
+            wb.removeSheetAt(1);
+
+            // Iterator order should be fixed when iterator is created
             it.next();
-        } finally {
-            wb.close();
         }
     }
-    
+
     /**
      * Expected UnsupportedOperationException:
      * should not be able to remove sheets from the sheet iterator
      */
     @Test(expected=UnsupportedOperationException.class)
     public void sheetIterator_remove() throws IOException {
-        final Workbook wb = _testDataProvider.createWorkbook();
-        wb.createSheet("Sheet0");
-        
-        Iterator<Sheet> it = wb.sheetIterator();
-        it.next(); //Sheet0
-        try {
+        try (Workbook wb = _testDataProvider.createWorkbook()) {
+            wb.createSheet("Sheet0");
+
+            Iterator<Sheet> it = wb.sheetIterator();
+            it.next(); //Sheet0
             it.remove();
-        } finally {
-            wb.close();
         }
     }
 
 
     @Test
     public void createSheet() throws IOException {
-        Workbook wb = _testDataProvider.createWorkbook();
-        assertEquals(0, wb.getNumberOfSheets());
-
-        //getting a sheet by invalid index or non-existing name
-        assertNull(wb.getSheet("Sheet1"));
-        try {
-            wb.getSheetAt(0);
-            fail("should have thrown exceptiuon due to invalid sheet index");
-        } catch (IllegalArgumentException e) {
-            // expected during successful test
-            // no negative index in the range message
-            assertFalse(e.getMessage().contains("-1"));
-        }
+        try (Workbook wb = _testDataProvider.createWorkbook()) {
+            assertEquals(0, wb.getNumberOfSheets());
 
-        Sheet sheet0 = wb.createSheet();
-        Sheet sheet1 = wb.createSheet();
-        assertEquals("Sheet0", sheet0.getSheetName());
-        assertEquals("Sheet1", sheet1.getSheetName());
-        assertEquals(2, wb.getNumberOfSheets());
-
-        //fetching sheets by name is case-insensitive
-        Sheet originalSheet = wb.createSheet("Sheet3");
-        Sheet fetchedSheet = wb.getSheet("sheet3");
-        if (fetchedSheet == null) {
-            fail("Identified bug 44892");
-        }
-        assertEquals("Sheet3", fetchedSheet.getSheetName());
-        assertEquals(3, wb.getNumberOfSheets());
-        assertSame(originalSheet, fetchedSheet);
-        try {
-            wb.createSheet("sHeeT3");
-            fail("should have thrown exceptiuon due to duplicate sheet name");
-        } catch (IllegalArgumentException e) {
-            // expected during successful test
-            assertEquals("The workbook already contains a sheet named 'sHeeT3'", e.getMessage());
-        }
+            //getting a sheet by invalid index or non-existing name
+            assertNull(wb.getSheet("Sheet1"));
+            try {
+                wb.getSheetAt(0);
+                fail("should have thrown exceptiuon due to invalid sheet index");
+            } catch (IllegalArgumentException e) {
+                // expected during successful test
+                // no negative index in the range message
+                assertFalse(e.getMessage().contains("-1"));
+            }
 
-        //names cannot be blank or contain any of /\*?[]
-        String[] invalidNames = {"", "Sheet/", "Sheet\\",
-                "Sheet?", "Sheet*", "Sheet[", "Sheet]", "'Sheet'",
-                "My:Sheet"};
-        for (String sheetName : invalidNames) {
+            Sheet sheet0 = wb.createSheet();
+            Sheet sheet1 = wb.createSheet();
+            assertEquals("Sheet0", sheet0.getSheetName());
+            assertEquals("Sheet1", sheet1.getSheetName());
+            assertEquals(2, wb.getNumberOfSheets());
+
+            //fetching sheets by name is case-insensitive
+            Sheet originalSheet = wb.createSheet("Sheet3");
+            Sheet fetchedSheet = wb.getSheet("sheet3");
+            if (fetchedSheet == null) {
+                fail("Identified bug 44892");
+            }
+            assertEquals("Sheet3", fetchedSheet.getSheetName());
+            assertEquals(3, wb.getNumberOfSheets());
+            assertSame(originalSheet, fetchedSheet);
             try {
-                wb.createSheet(sheetName);
-                fail("should have thrown exception due to invalid sheet name: " + sheetName);
+                wb.createSheet("sHeeT3");
+                fail("should have thrown exceptiuon due to duplicate sheet name");
             } catch (IllegalArgumentException e) {
                 // expected during successful test
+                assertEquals("The workbook already contains a sheet named 'sHeeT3'", e.getMessage());
             }
-        }
-        //still have 3 sheets
-        assertEquals(3, wb.getNumberOfSheets());
-
-        //change the name of the 3rd sheet
-        wb.setSheetName(2, "I changed!");
-
-        //try to assign an invalid name to the 2nd sheet
-        try {
-            wb.setSheetName(1, "[I'm invalid]");
-            fail("should have thrown exceptiuon due to invalid sheet name");
-        } catch (IllegalArgumentException e) {
-            // expected during successful test
-        }
 
-        //try to assign an invalid name to the 2nd sheet
-        try {
-            wb.createSheet(null);
-            fail("should have thrown exceptiuon due to invalid sheet name");
-        } catch (IllegalArgumentException e) {
-            // expected during successful test
-        }
+            //names cannot be blank or contain any of /\*?[]
+            String[] invalidNames = {"", "Sheet/", "Sheet\\",
+                    "Sheet?", "Sheet*", "Sheet[", "Sheet]", "'Sheet'",
+                    "My:Sheet"};
+            for (String sheetName : invalidNames) {
+                try {
+                    wb.createSheet(sheetName);
+                    fail("should have thrown exception due to invalid sheet name: " + sheetName);
+                } catch (IllegalArgumentException e) {
+                    // expected during successful test
+                }
+            }
+            //still have 3 sheets
+            assertEquals(3, wb.getNumberOfSheets());
 
-        try {
-            wb.setSheetName(2, null);
+            //change the name of the 3rd sheet
+            wb.setSheetName(2, "I changed!");
 
-            fail("should have thrown exceptiuon due to invalid sheet name");
-        } catch (IllegalArgumentException e) {
-            // expected during successful test
-        }
+            //try to assign an invalid name to the 2nd sheet
+            try {
+                wb.setSheetName(1, "[I'm invalid]");
+                fail("should have thrown exceptiuon due to invalid sheet name");
+            } catch (IllegalArgumentException e) {
+                // expected during successful test
+            }
+
+            //try to assign an invalid name to the 2nd sheet
+            try {
+                wb.createSheet(null);
+                fail("should have thrown exceptiuon due to invalid sheet name");
+            } catch (IllegalArgumentException e) {
+                // expected during successful test
+            }
 
-        //check
-        assertEquals(0, wb.getSheetIndex("sheet0"));
-        assertEquals(1, wb.getSheetIndex("sheet1"));
-        assertEquals(2, wb.getSheetIndex("I changed!"));
+            try {
+                wb.setSheetName(2, null);
 
-        assertSame(sheet0, wb.getSheet("sheet0"));
-        assertSame(sheet1, wb.getSheet("sheet1"));
-        assertSame(originalSheet, wb.getSheet("I changed!"));
-        assertNull(wb.getSheet("unknown"));
+                fail("should have thrown exceptiuon due to invalid sheet name");
+            } catch (IllegalArgumentException e) {
+                // expected during successful test
+            }
 
-        //serialize and read again
-        Workbook wb2 = _testDataProvider.writeOutAndReadBack(wb);
-        wb.close();
-        assertEquals(3, wb2.getNumberOfSheets());
-        assertEquals(0, wb2.getSheetIndex("sheet0"));
-        assertEquals(1, wb2.getSheetIndex("sheet1"));
-        assertEquals(2, wb2.getSheetIndex("I changed!"));
-        wb2.close();
+            //check
+            assertEquals(0, wb.getSheetIndex("sheet0"));
+            assertEquals(1, wb.getSheetIndex("sheet1"));
+            assertEquals(2, wb.getSheetIndex("I changed!"));
+
+            assertSame(sheet0, wb.getSheet("sheet0"));
+            assertSame(sheet1, wb.getSheet("sheet1"));
+            assertSame(originalSheet, wb.getSheet("I changed!"));
+            assertNull(wb.getSheet("unknown"));
+
+            //serialize and read again
+            try (Workbook wb2 = _testDataProvider.writeOutAndReadBack(wb)) {
+                assertEquals(3, wb2.getNumberOfSheets());
+                assertEquals(0, wb2.getSheetIndex("sheet0"));
+                assertEquals(1, wb2.getSheetIndex("sheet1"));
+                assertEquals(2, wb2.getSheetIndex("I changed!"));
+            }
+        }
     }
 
     /**
@@ -241,41 +235,42 @@ public abstract class BaseTestWorkbook {
      */
     @Test
     public void createSheetWithLongNames() throws IOException {
-        Workbook wb1 = _testDataProvider.createWorkbook();
-
-        String sheetName1 = "My very long sheet name which is longer than 31 chars";
-        String truncatedSheetName1 = sheetName1.substring(0, 31);
-        Sheet sh1 = wb1.createSheet(sheetName1);
-        assertEquals(truncatedSheetName1, sh1.getSheetName());
-        assertSame(sh1, wb1.getSheet(truncatedSheetName1));
-        // now via wb.setSheetName
-        wb1.setSheetName(0, sheetName1);
-        assertEquals(truncatedSheetName1, sh1.getSheetName());
-        assertSame(sh1, wb1.getSheet(truncatedSheetName1));
-
-        String sheetName2 = "My very long sheet name which is longer than 31 chars " +
-                "and sheetName2.substring(0, 31) == sheetName1.substring(0, 31)";
-        try {
-            /*Sheet sh2 =*/ wb1.createSheet(sheetName2);
-            fail("expected exception");
-        } catch (IllegalArgumentException e) {
-            // expected during successful test
-            assertEquals("The workbook already contains a sheet named 'My very long sheet name which is longer than 31 chars and sheetName2.substring(0, 31) == sheetName1.substring(0, 31)'", e.getMessage());
-        }
+        try (Workbook wb1 = _testDataProvider.createWorkbook()) {
+
+            String sheetName1 = "My very long sheet name which is longer than 31 chars";
+            String truncatedSheetName1 = sheetName1.substring(0, 31);
+            Sheet sh1 = wb1.createSheet(sheetName1);
+            assertEquals(truncatedSheetName1, sh1.getSheetName());
+            assertSame(sh1, wb1.getSheet(truncatedSheetName1));
+            // now via wb.setSheetName
+            wb1.setSheetName(0, sheetName1);
+            assertEquals(truncatedSheetName1, sh1.getSheetName());
+            assertSame(sh1, wb1.getSheet(truncatedSheetName1));
+
+            String sheetName2 = "My very long sheet name which is longer than 31 chars " +
+                    "and sheetName2.substring(0, 31) == sheetName1.substring(0, 31)";
+            try {
+                /*Sheet sh2 =*/
+                wb1.createSheet(sheetName2);
+                fail("expected exception");
+            } catch (IllegalArgumentException e) {
+                // expected during successful test
+                assertEquals("The workbook already contains a sheet named 'My very long sheet name which is longer than 31 chars and sheetName2.substring(0, 31) == sheetName1.substring(0, 31)'", e.getMessage());
+            }
 
-        String sheetName3 = "POI allows creating sheets with names longer than 31 characters";
-        String truncatedSheetName3 = sheetName3.substring(0, 31);
-        Sheet sh3 = wb1.createSheet(sheetName3);
-        assertEquals(truncatedSheetName3, sh3.getSheetName());
-        assertSame(sh3, wb1.getSheet(truncatedSheetName3));
-
-        //serialize and read again
-        Workbook wb2 = _testDataProvider.writeOutAndReadBack(wb1);
-        wb1.close();
-        assertEquals(2, wb2.getNumberOfSheets());
-        assertEquals(0, wb2.getSheetIndex(truncatedSheetName1));
-        assertEquals(1, wb2.getSheetIndex(truncatedSheetName3));
-        wb2.close();
+            String sheetName3 = "POI allows creating sheets with names longer than 31 characters";
+            String truncatedSheetName3 = sheetName3.substring(0, 31);
+            Sheet sh3 = wb1.createSheet(sheetName3);
+            assertEquals(truncatedSheetName3, sh3.getSheetName());
+            assertSame(sh3, wb1.getSheet(truncatedSheetName3));
+
+            //serialize and read again
+            try (Workbook wb2 = _testDataProvider.writeOutAndReadBack(wb1)) {
+                assertEquals(2, wb2.getNumberOfSheets());
+                assertEquals(0, wb2.getSheetIndex(truncatedSheetName1));
+                assertEquals(1, wb2.getSheetIndex(truncatedSheetName3));
+            }
+        }
     }
 
     @Test
@@ -339,225 +334,222 @@ public abstract class BaseTestWorkbook {
             Workbook wbr = _testDataProvider.writeOutAndReadBack(wb);
             sheet = wbr.getSheet("new sheet");
             assertEquals(new CellAddress("E11"), sheet.getActiveCell());
-
-            //wbr.write(new FileOutputStream("c:/temp/yyy." + _testDataProvider.getStandardFileNameExtension()));
         }
     }
 
     @Test
     public void defaultValues() throws IOException {
-        Workbook b = _testDataProvider.createWorkbook();
-        assertEquals(0, b.getActiveSheetIndex());
-        assertEquals(0, b.getFirstVisibleTab());
-        assertEquals(0, b.getNumberOfNames());
-        assertEquals(0, b.getNumberOfSheets());
-        b.close();
+        try (Workbook b = _testDataProvider.createWorkbook()) {
+            assertEquals(0, b.getActiveSheetIndex());
+            assertEquals(0, b.getFirstVisibleTab());
+            assertEquals(0, b.getNumberOfNames());
+            assertEquals(0, b.getNumberOfSheets());
+        }
     }
 
     @Test
     public void sheetSelection() throws IOException {
-        Workbook b = _testDataProvider.createWorkbook();
-        b.createSheet("Sheet One");
-        b.createSheet("Sheet Two");
-        b.setActiveSheet(1);
-        b.setSelectedTab(1);
-        b.setFirstVisibleTab(1);
-        assertEquals(1, b.getActiveSheetIndex());
-        assertEquals(1, b.getFirstVisibleTab());
-        b.close();
+        try (Workbook b = _testDataProvider.createWorkbook()) {
+            b.createSheet("Sheet One");
+            b.createSheet("Sheet Two");
+            b.setActiveSheet(1);
+            b.setSelectedTab(1);
+            b.setFirstVisibleTab(1);
+            assertEquals(1, b.getActiveSheetIndex());
+            assertEquals(1, b.getFirstVisibleTab());
+        }
     }
 
     @Test
     public void printArea() throws IOException {
-        Workbook workbook = _testDataProvider.createWorkbook();
-        Sheet sheet1 = workbook.createSheet("Test Print Area");
-        String sheetName1 = sheet1.getSheetName();
-
-        // workbook.setPrintArea(0, reference);
-        workbook.setPrintArea(0, 1, 5, 4, 9);
-        String retrievedPrintArea = workbook.getPrintArea(0);
-        assertEquals("'" + sheetName1 + "'!$B$5:$F$10", retrievedPrintArea);
-
-        String reference = "$A$1:$B$1";
-        workbook.setPrintArea(0, reference);
-        retrievedPrintArea = workbook.getPrintArea(0);
-        assertEquals("'" + sheetName1 + "'!" + reference, retrievedPrintArea);
-
-        workbook.removePrintArea(0);
-        assertNull(workbook.getPrintArea(0));
-        workbook.close();
+        try (Workbook workbook = _testDataProvider.createWorkbook()) {
+            Sheet sheet1 = workbook.createSheet("Test Print Area");
+            String sheetName1 = sheet1.getSheetName();
+
+            // workbook.setPrintArea(0, reference);
+            workbook.setPrintArea(0, 1, 5, 4, 9);
+            String retrievedPrintArea = workbook.getPrintArea(0);
+            assertEquals("'" + sheetName1 + "'!$B$5:$F$10", retrievedPrintArea);
+
+            String reference = "$A$1:$B$1";
+            workbook.setPrintArea(0, reference);
+            retrievedPrintArea = workbook.getPrintArea(0);
+            assertEquals("'" + sheetName1 + "'!" + reference, retrievedPrintArea);
+
+            workbook.removePrintArea(0);
+            assertNull(workbook.getPrintArea(0));
+        }
     }
 
     @Test
     public void getSetActiveSheet() throws IOException {
-        Workbook workbook = _testDataProvider.createWorkbook();
-        assertEquals(0, workbook.getActiveSheetIndex());
-
-        workbook.createSheet("sheet1");
-        workbook.createSheet("sheet2");
-        workbook.createSheet("sheet3");
-        // set second sheet
-        workbook.setActiveSheet(1);
-        // test if second sheet is set up
-        assertEquals(1, workbook.getActiveSheetIndex());
-
-        workbook.setActiveSheet(0);
-        // test if second sheet is set up
-        assertEquals(0, workbook.getActiveSheetIndex());
-        workbook.close();
+        try (Workbook workbook = _testDataProvider.createWorkbook()) {
+            assertEquals(0, workbook.getActiveSheetIndex());
+
+            workbook.createSheet("sheet1");
+            workbook.createSheet("sheet2");
+            workbook.createSheet("sheet3");
+            // set second sheet
+            workbook.setActiveSheet(1);
+            // test if second sheet is set up
+            assertEquals(1, workbook.getActiveSheetIndex());
+
+            workbook.setActiveSheet(0);
+            // test if second sheet is set up
+            assertEquals(0, workbook.getActiveSheetIndex());
+        }
     }
 
     @Test
     public void setSheetOrder() throws IOException {
-        Workbook wb = _testDataProvider.createWorkbook();
-
-        for (int i=0; i < 10; i++) {
-            wb.createSheet("Sheet " + i);
-        }
+        try (Workbook wb = _testDataProvider.createWorkbook()) {
 
-        // Check the initial order
-        assertEquals(0, wb.getSheetIndex("Sheet 0"));
-        assertEquals(1, wb.getSheetIndex("Sheet 1"));
-        assertEquals(2, wb.getSheetIndex("Sheet 2"));
-        assertEquals(3, wb.getSheetIndex("Sheet 3"));
-        assertEquals(4, wb.getSheetIndex("Sheet 4"));
-        assertEquals(5, wb.getSheetIndex("Sheet 5"));
-        assertEquals(6, wb.getSheetIndex("Sheet 6"));
-        assertEquals(7, wb.getSheetIndex("Sheet 7"));
-        assertEquals(8, wb.getSheetIndex("Sheet 8"));
-        assertEquals(9, wb.getSheetIndex("Sheet 9"));
-
-        // check active sheet
-        assertEquals(0, wb.getActiveSheetIndex());
-        
-        // Change
-        wb.setSheetOrder("Sheet 6", 0);
-        assertEquals(1, wb.getActiveSheetIndex());
-        wb.setSheetOrder("Sheet 3", 7);
-        wb.setSheetOrder("Sheet 1", 9);
-        
-        // now the first sheet is at index 1
-        assertEquals(1, wb.getActiveSheetIndex());
-
-        // Check they're currently right
-        assertEquals(0, wb.getSheetIndex("Sheet 6"));
-        assertEquals(1, wb.getSheetIndex("Sheet 0"));
-        assertEquals(2, wb.getSheetIndex("Sheet 2"));
-        assertEquals(3, wb.getSheetIndex("Sheet 4"));
-        assertEquals(4, wb.getSheetIndex("Sheet 5"));
-        assertEquals(5, wb.getSheetIndex("Sheet 7"));
-        assertEquals(6, wb.getSheetIndex("Sheet 3"));
-        assertEquals(7, wb.getSheetIndex("Sheet 8"));
-        assertEquals(8, wb.getSheetIndex("Sheet 9"));
-        assertEquals(9, wb.getSheetIndex("Sheet 1"));
-
-        Workbook wbr = _testDataProvider.writeOutAndReadBack(wb);
-        wb.close();
+            for (int i = 0; i < 10; i++) {
+                wb.createSheet("Sheet " + i);
+            }
 
-        assertEquals(0, wbr.getSheetIndex("Sheet 6"));
-        assertEquals(1, wbr.getSheetIndex("Sheet 0"));
-        assertEquals(2, wbr.getSheetIndex("Sheet 2"));
-        assertEquals(3, wbr.getSheetIndex("Sheet 4"));
-        assertEquals(4, wbr.getSheetIndex("Sheet 5"));
-        assertEquals(5, wbr.getSheetIndex("Sheet 7"));
-        assertEquals(6, wbr.getSheetIndex("Sheet 3"));
-        assertEquals(7, wbr.getSheetIndex("Sheet 8"));
-        assertEquals(8, wbr.getSheetIndex("Sheet 9"));
-        assertEquals(9, wbr.getSheetIndex("Sheet 1"));
-
-        assertEquals(1, wb.getActiveSheetIndex());
-        
-        // Now get the index by the sheet, not the name
-        for(int i=0; i<10; i++) {
-               Sheet s = wbr.getSheetAt(i);
-               assertEquals(i, wbr.getSheetIndex(s));
+            // Check the initial order
+            assertEquals(0, wb.getSheetIndex("Sheet 0"));
+            assertEquals(1, wb.getSheetIndex("Sheet 1"));
+            assertEquals(2, wb.getSheetIndex("Sheet 2"));
+            assertEquals(3, wb.getSheetIndex("Sheet 3"));
+            assertEquals(4, wb.getSheetIndex("Sheet 4"));
+            assertEquals(5, wb.getSheetIndex("Sheet 5"));
+            assertEquals(6, wb.getSheetIndex("Sheet 6"));
+            assertEquals(7, wb.getSheetIndex("Sheet 7"));
+            assertEquals(8, wb.getSheetIndex("Sheet 8"));
+            assertEquals(9, wb.getSheetIndex("Sheet 9"));
+
+            // check active sheet
+            assertEquals(0, wb.getActiveSheetIndex());
+
+            // Change
+            wb.setSheetOrder("Sheet 6", 0);
+            assertEquals(1, wb.getActiveSheetIndex());
+            wb.setSheetOrder("Sheet 3", 7);
+            wb.setSheetOrder("Sheet 1", 9);
+
+            // now the first sheet is at index 1
+            assertEquals(1, wb.getActiveSheetIndex());
+
+            // Check they're currently right
+            assertEquals(0, wb.getSheetIndex("Sheet 6"));
+            assertEquals(1, wb.getSheetIndex("Sheet 0"));
+            assertEquals(2, wb.getSheetIndex("Sheet 2"));
+            assertEquals(3, wb.getSheetIndex("Sheet 4"));
+            assertEquals(4, wb.getSheetIndex("Sheet 5"));
+            assertEquals(5, wb.getSheetIndex("Sheet 7"));
+            assertEquals(6, wb.getSheetIndex("Sheet 3"));
+            assertEquals(7, wb.getSheetIndex("Sheet 8"));
+            assertEquals(8, wb.getSheetIndex("Sheet 9"));
+            assertEquals(9, wb.getSheetIndex("Sheet 1"));
+
+            try (Workbook wbr = _testDataProvider.writeOutAndReadBack(wb)) {
+
+                assertEquals(0, wbr.getSheetIndex("Sheet 6"));
+                assertEquals(1, wbr.getSheetIndex("Sheet 0"));
+                assertEquals(2, wbr.getSheetIndex("Sheet 2"));
+                assertEquals(3, wbr.getSheetIndex("Sheet 4"));
+                assertEquals(4, wbr.getSheetIndex("Sheet 5"));
+                assertEquals(5, wbr.getSheetIndex("Sheet 7"));
+                assertEquals(6, wbr.getSheetIndex("Sheet 3"));
+                assertEquals(7, wbr.getSheetIndex("Sheet 8"));
+                assertEquals(8, wbr.getSheetIndex("Sheet 9"));
+                assertEquals(9, wbr.getSheetIndex("Sheet 1"));
+
+                assertEquals(1, wb.getActiveSheetIndex());
+
+                // Now get the index by the sheet, not the name
+                for (int i = 0; i < 10; i++) {
+                    Sheet s = wbr.getSheetAt(i);
+                    assertEquals(i, wbr.getSheetIndex(s));
+                }
+            }
         }
-        
-        wbr.close();
     }
 
     @Test
     public void cloneSheet() throws IOException {
-        Workbook book = _testDataProvider.createWorkbook();
-        Sheet sheet = book.createSheet("TEST");
-        sheet.createRow(0).createCell(0).setCellValue("Test");
-        sheet.createRow(1).createCell(0).setCellValue(36.6);
-        assertEquals(0, sheet.addMergedRegion(new CellRangeAddress(0, 1, 0, 2)));
-        assertEquals(1, sheet.addMergedRegion(new CellRangeAddress(2, 3, 0, 2)));
-        assertTrue(sheet.isSelected());
-
-        Sheet clonedSheet = book.cloneSheet(0);
-        assertEquals("TEST (2)", clonedSheet.getSheetName());
-        assertEquals(2, clonedSheet.getPhysicalNumberOfRows());
-        assertEquals(2, clonedSheet.getNumMergedRegions());
-        assertFalse(clonedSheet.isSelected());
-
-        //cloned sheet is a deep copy, adding rows or merged regions in the original does not affect the clone
-        sheet.createRow(2).createCell(0).setCellValue(1);
-        assertEquals(2, sheet.addMergedRegion(new CellRangeAddress(4, 5, 0, 2)));
-        assertEquals(2, clonedSheet.getPhysicalNumberOfRows());
-        assertEquals(2, clonedSheet.getNumMergedRegions());
-
-        clonedSheet.createRow(2).createCell(0).setCellValue(1);
-        assertEquals(2, clonedSheet.addMergedRegion(new CellRangeAddress(6, 7, 0, 2)));
-        assertEquals(3, clonedSheet.getPhysicalNumberOfRows());
-        assertEquals(3, clonedSheet.getNumMergedRegions());
-        book.close();
+        try (Workbook book = _testDataProvider.createWorkbook()) {
+            Sheet sheet = book.createSheet("TEST");
+            sheet.createRow(0).createCell(0).setCellValue("Test");
+            sheet.createRow(1).createCell(0).setCellValue(36.6);
+            assertEquals(0, sheet.addMergedRegion(new CellRangeAddress(0, 1, 0, 2)));
+            assertEquals(1, sheet.addMergedRegion(new CellRangeAddress(2, 3, 0, 2)));
+            assertTrue(sheet.isSelected());
+
+            Sheet clonedSheet = book.cloneSheet(0);
+            assertEquals("TEST (2)", clonedSheet.getSheetName());
+            assertEquals(2, clonedSheet.getPhysicalNumberOfRows());
+            assertEquals(2, clonedSheet.getNumMergedRegions());
+            assertFalse(clonedSheet.isSelected());
+
+            //cloned sheet is a deep copy, adding rows or merged regions in the original does not affect the clone
+            sheet.createRow(2).createCell(0).setCellValue(1);
+            assertEquals(2, sheet.addMergedRegion(new CellRangeAddress(4, 5, 0, 2)));
+            assertEquals(2, clonedSheet.getPhysicalNumberOfRows());
+            assertEquals(2, clonedSheet.getNumMergedRegions());
+
+            clonedSheet.createRow(2).createCell(0).setCellValue(1);
+            assertEquals(2, clonedSheet.addMergedRegion(new CellRangeAddress(6, 7, 0, 2)));
+            assertEquals(3, clonedSheet.getPhysicalNumberOfRows());
+            assertEquals(3, clonedSheet.getNumMergedRegions());
+        }
     }
 
     @Test
     public void parentReferences() throws IOException {
-        Workbook wb1 = _testDataProvider.createWorkbook();
-        Sheet sheet = wb1.createSheet();
-        assertSame(wb1, sheet.getWorkbook());
+        try (Workbook wb1 = _testDataProvider.createWorkbook()) {
+            Sheet sheet = wb1.createSheet();
+            assertSame(wb1, sheet.getWorkbook());
 
-        Row row = sheet.createRow(0);
-        assertSame(sheet, row.getSheet());
+            Row row = sheet.createRow(0);
+            assertSame(sheet, row.getSheet());
 
-        Cell cell = row.createCell(1);
-        assertSame(sheet, cell.getSheet());
-        assertSame(row, cell.getRow());
+            Cell cell = row.createCell(1);
+            assertSame(sheet, cell.getSheet());
+            assertSame(row, cell.getRow());
 
-        Workbook wb2 = _testDataProvider.writeOutAndReadBack(wb1);
-        wb1.close();
-        sheet = wb2.getSheetAt(0);
-        assertSame(wb2, sheet.getWorkbook());
+            try (Workbook wb2 = _testDataProvider.writeOutAndReadBack(wb1)) {
+                wb1.close();
+                sheet = wb2.getSheetAt(0);
+                assertSame(wb2, sheet.getWorkbook());
 
-        row = sheet.getRow(0);
-        assertSame(sheet, row.getSheet());
+                row = sheet.getRow(0);
+                assertSame(sheet, row.getSheet());
 
-        cell = row.getCell(1);
-        assertSame(sheet, cell.getSheet());
-        assertSame(row, cell.getRow());
-        wb2.close();
+                cell = row.getCell(1);
+                assertSame(sheet, cell.getSheet());
+                assertSame(row, cell.getRow());
+            }
+        }
     }
 
 
     /**
      * Test to validate that replacement for removed setRepeatingRowsAnsColumns() methods
-     * is still working correctly 
+     * is still working correctly
      */
     @Test
     public void setRepeatingRowsAnsColumns() throws IOException {
-        Workbook wb = _testDataProvider.createWorkbook();
-
-        CellRangeAddress cra = new CellRangeAddress(0, 3, 0, 0);
-        String expRows = "1:4", expCols = "A:A";
-
-        
-        Sheet sheet1 = wb.createSheet();
-        sheet1.setRepeatingRows(cra);
-        sheet1.setRepeatingColumns(cra);
-        assertEquals(expRows, sheet1.getRepeatingRows().formatAsString());
-        assertEquals(expCols, sheet1.getRepeatingColumns().formatAsString());
-
-        //must handle sheets with quotas, see Bugzilla #47294
-        Sheet sheet2 = wb.createSheet("My' Sheet");
-        sheet2.setRepeatingRows(cra);
-        sheet2.setRepeatingColumns(cra);
-        assertEquals(expRows, sheet2.getRepeatingRows().formatAsString());
-        assertEquals(expCols, sheet2.getRepeatingColumns().formatAsString());
-        wb.close();
+        try (Workbook wb = _testDataProvider.createWorkbook()) {
+            CellRangeAddress cra = new CellRangeAddress(0, 3, 0, 0);
+            String expRows = "1:4", expCols = "A:A";
+
+
+            Sheet sheet1 = wb.createSheet();
+            sheet1.setRepeatingRows(cra);
+            sheet1.setRepeatingColumns(cra);
+            assertEquals(expRows, sheet1.getRepeatingRows().formatAsString());
+            assertEquals(expCols, sheet1.getRepeatingColumns().formatAsString());
+
+            //must handle sheets with quotas, see Bugzilla #47294
+            Sheet sheet2 = wb.createSheet("My' Sheet");
+            sheet2.setRepeatingRows(cra);
+            sheet2.setRepeatingColumns(cra);
+            assertEquals(expRows, sheet2.getRepeatingRows().formatAsString());
+            assertEquals(expCols, sheet2.getRepeatingColumns().formatAsString());
+        }
     }
 
     /**
@@ -565,73 +557,74 @@ public abstract class BaseTestWorkbook {
      */
     @Test
     public void unicodeInAll() throws IOException {
-        Workbook wb1 = _testDataProvider.createWorkbook();
-        CreationHelper factory = wb1.getCreationHelper();
-        //Create a unicode dataformat (contains euro symbol)
-        DataFormat df = wb1.createDataFormat();
-        final String formatStr = "_([$\u20ac-2]\\\\\\ * #,##0.00_);_([$\u20ac-2]\\\\\\ * \\\\\\(#,##0.00\\\\\\);_([$\u20ac-2]\\\\\\ *\\\"\\-\\\\\"??_);_(@_)";
-        short fmt = df.getFormat(formatStr);
-
-        //Create a unicode sheet name (euro symbol)
-        Sheet s = wb1.createSheet("\u20ac");
-
-        //Set a unicode header (you guessed it the euro symbol)
-        Header h = s.getHeader();
-        h.setCenter("\u20ac");
-        h.setLeft("\u20ac");
-        h.setRight("\u20ac");
-
-        //Set a unicode footer
-        Footer f = s.getFooter();
-        f.setCenter("\u20ac");
-        f.setLeft("\u20ac");
-        f.setRight("\u20ac");
-
-        Row r = s.createRow(0);
-        Cell c = r.createCell(1);
-        c.setCellValue(12.34);
-        c.getCellStyle().setDataFormat(fmt);
-
-        /*Cell c2 =*/ r.createCell(2); // TODO - c2 unused but changing next line ('c'->'c2') causes test to fail
-        c.setCellValue(factory.createRichTextString("\u20ac"));
-
-        Cell c3 = r.createCell(3);
-        String formulaString = "TEXT(12.34,\"\u20ac###,##\")";
-        c3.setCellFormula(formulaString);
-
-        Workbook wb2 = _testDataProvider.writeOutAndReadBack(wb1);
-        wb1.close();
-
-        //Test the sheetname
-        s = wb2.getSheet("\u20ac");
-        assertNotNull(s);
-
-        //Test the header
-        h = s.getHeader();
-        assertEquals(h.getCenter(), "\u20ac");
-        assertEquals(h.getLeft(), "\u20ac");
-        assertEquals(h.getRight(), "\u20ac");
-
-        //Test the footer
-        f = s.getFooter();
-        assertEquals(f.getCenter(), "\u20ac");
-        assertEquals(f.getLeft(), "\u20ac");
-        assertEquals(f.getRight(), "\u20ac");
-
-        //Test the dataformat
-        r = s.getRow(0);
-        c = r.getCell(1);
-        df = wb2.createDataFormat();
-        assertEquals(formatStr, df.getFormat(c.getCellStyle().getDataFormat()));
-
-        //Test the cell string value
-        /*c2 =*/ r.getCell(2);
-        assertEquals(c.getRichStringCellValue().getString(), "\u20ac");
-
-        //Test the cell formula
-        c3 = r.getCell(3);
-        assertEquals(c3.getCellFormula(), formulaString);
-        wb2.close();
+        try (Workbook wb1 = _testDataProvider.createWorkbook()) {
+            CreationHelper factory = wb1.getCreationHelper();
+            //Create a unicode dataformat (contains euro symbol)
+            DataFormat df = wb1.createDataFormat();
+            final String formatStr = "_([$\u20ac-2]\\\\\\ * #,##0.00_);_([$\u20ac-2]\\\\\\ * \\\\\\(#,##0.00\\\\\\);_([$\u20ac-2]\\\\\\ *\\\"\\-\\\\\"??_);_(@_)";
+            short fmt = df.getFormat(formatStr);
+
+            //Create a unicode sheet name (euro symbol)
+            Sheet s = wb1.createSheet("\u20ac");
+
+            //Set a unicode header (you guessed it the euro symbol)
+            Header h = s.getHeader();
+            h.setCenter("\u20ac");
+            h.setLeft("\u20ac");
+            h.setRight("\u20ac");
+
+            //Set a unicode footer
+            Footer f = s.getFooter();
+            f.setCenter("\u20ac");
+            f.setLeft("\u20ac");
+            f.setRight("\u20ac");
+
+            Row r = s.createRow(0);
+            Cell c = r.createCell(1);
+            c.setCellValue(12.34);
+            c.getCellStyle().setDataFormat(fmt);
+
+            /*Cell c2 =*/
+            r.createCell(2); // TODO - c2 unused but changing next line ('c'->'c2') causes test to fail
+            c.setCellValue(factory.createRichTextString("\u20ac"));
+
+            Cell c3 = r.createCell(3);
+            String formulaString = "TEXT(12.34,\"\u20ac###,##\")";
+            c3.setCellFormula(formulaString);
+
+            try (Workbook wb2 = _testDataProvider.writeOutAndReadBack(wb1)) {
+                //Test the sheetname
+                s = wb2.getSheet("\u20ac");
+                assertNotNull(s);
+
+                //Test the header
+                h = s.getHeader();
+                assertEquals(h.getCenter(), "\u20ac");
+                assertEquals(h.getLeft(), "\u20ac");
+                assertEquals(h.getRight(), "\u20ac");
+
+                //Test the footer
+                f = s.getFooter();
+                assertEquals(f.getCenter(), "\u20ac");
+                assertEquals(f.getLeft(), "\u20ac");
+                assertEquals(f.getRight(), "\u20ac");
+
+                //Test the dataformat
+                r = s.getRow(0);
+                c = r.getCell(1);
+                df = wb2.createDataFormat();
+                assertEquals(formatStr, df.getFormat(c.getCellStyle().getDataFormat()));
+
+                //Test the cell string value
+                /*c2 =*/
+                r.getCell(2);
+                assertEquals(c.getRichStringCellValue().getString(), "\u20ac");
+
+                //Test the cell formula
+                c3 = r.getCell(3);
+                assertEquals(c3.getCellFormula(), formulaString);
+            }
+        }
     }
 
     private Workbook newSetSheetNameTestingWorkbook() {
@@ -671,7 +664,6 @@ public abstract class BaseTestWorkbook {
         sh3.createRow(4).createCell(0).setCellValue(5);
         sh3.createRow(5).createCell(0).setCellFormula("sale_3");
         sh3.createRow(6).createCell(0).setCellFormula("'Testing 47100'!C1");
-
         return wb;
     }
 
@@ -682,110 +674,107 @@ public abstract class BaseTestWorkbook {
      */
     @Test
     public void setSheetName() throws IOException {
-
-        Workbook wb1 = newSetSheetNameTestingWorkbook();
-
-        Sheet sh1 = wb1.getSheetAt(0);
-
-        Name sale_2 = wb1.getName("sale_2");
-        Name sale_3 = wb1.getName("sale_3");
-        Name sale_4 = wb1.getName("sale_4");
-
-        assertEquals("sale_2", sale_2.getNameName());
-        assertEquals("'Testing 47100'!$A$1", sale_2.getRefersToFormula());
-        assertEquals("sale_3", sale_3.getNameName());
-        assertEquals("'Testing 47100'!$B$1", sale_3.getRefersToFormula());
-        assertEquals("sale_4", sale_4.getNameName());
-        assertEquals("'To be renamed'!$A$3", sale_4.getRefersToFormula());
-
-        FormulaEvaluator evaluator = wb1.getCreationHelper().createFormulaEvaluator();
-
-        Cell cell0 = sh1.getRow(0).getCell(0);
-        Cell cell1 = sh1.getRow(1).getCell(0);
-        Cell cell2 = sh1.getRow(2).getCell(0);
-
-        assertEquals("SUM('Testing 47100'!A1:C1)", cell0.getCellFormula());
-        assertEquals("SUM('Testing 47100'!A1:C1,'To be renamed'!A1:A5)", cell1.getCellFormula());
-        assertEquals("sale_2+sale_3+'Testing 47100'!C1", cell2.getCellFormula());
-
-        assertEquals(6.0, evaluator.evaluate(cell0).getNumberValue(), 0);
-        assertEquals(21.0, evaluator.evaluate(cell1).getNumberValue(), 0);
-        assertEquals(6.0, evaluator.evaluate(cell2).getNumberValue(), 0);
-
-        wb1.setSheetName(1, "47100 - First");
-        wb1.setSheetName(2, "47100 - Second");
-
-        assertEquals("sale_2", sale_2.getNameName());
-        assertEquals("'47100 - First'!$A$1", sale_2.getRefersToFormula());
-        assertEquals("sale_3", sale_3.getNameName());
-        assertEquals("'47100 - First'!$B$1", sale_3.getRefersToFormula());
-        assertEquals("sale_4", sale_4.getNameName());
-        assertEquals("'47100 - Second'!$A$3", sale_4.getRefersToFormula());
-
-        assertEquals("SUM('47100 - First'!A1:C1)", cell0.getCellFormula());
-        assertEquals("SUM('47100 - First'!A1:C1,'47100 - Second'!A1:A5)", cell1.getCellFormula());
-        assertEquals("sale_2+sale_3+'47100 - First'!C1", cell2.getCellFormula());
-
-        evaluator.clearAllCachedResultValues();
-        assertEquals(6.0, evaluator.evaluate(cell0).getNumberValue(), 0);
-        assertEquals(21.0, evaluator.evaluate(cell1).getNumberValue(), 0);
-        assertEquals(6.0, evaluator.evaluate(cell2).getNumberValue(), 0);
-
-        Workbook wb2 = _testDataProvider.writeOutAndReadBack(wb1);
-        wb1.close();
-
-        sh1 = wb2.getSheetAt(0);
-
-        sale_2 = wb2.getName("sale_2");
-        sale_3 = wb2.getName("sale_3");
-        sale_4 = wb2.getName("sale_4");
-
-        cell0 = sh1.getRow(0).getCell(0);
-        cell1 = sh1.getRow(1).getCell(0);
-        cell2 = sh1.getRow(2).getCell(0);
-
-        assertEquals("sale_2", sale_2.getNameName());
-        assertEquals("'47100 - First'!$A$1", sale_2.getRefersToFormula());
-        assertEquals("sale_3", sale_3.getNameName());
-        assertEquals("'47100 - First'!$B$1", sale_3.getRefersToFormula());
-        assertEquals("sale_4", sale_4.getNameName());
-        assertEquals("'47100 - Second'!$A$3", sale_4.getRefersToFormula());
-
-        assertEquals("SUM('47100 - First'!A1:C1)", cell0.getCellFormula());
-        assertEquals("SUM('47100 - First'!A1:C1,'47100 - Second'!A1:A5)", cell1.getCellFormula());
-        assertEquals("sale_2+sale_3+'47100 - First'!C1", cell2.getCellFormula());
-
-        evaluator = wb2.getCreationHelper().createFormulaEvaluator();
-        assertEquals(6.0, evaluator.evaluate(cell0).getNumberValue(), 0);
-        assertEquals(21.0, evaluator.evaluate(cell1).getNumberValue(), 0);
-        assertEquals(6.0, evaluator.evaluate(cell2).getNumberValue(), 0);
-        wb2.close();
+        try (Workbook wb1 = newSetSheetNameTestingWorkbook()) {
+            Sheet sh1 = wb1.getSheetAt(0);
+
+            Name sale_2 = wb1.getName("sale_2");
+            Name sale_3 = wb1.getName("sale_3");
+            Name sale_4 = wb1.getName("sale_4");
+
+            assertEquals("sale_2", sale_2.getNameName());
+            assertEquals("'Testing 47100'!$A$1", sale_2.getRefersToFormula());
+            assertEquals("sale_3", sale_3.getNameName());
+            assertEquals("'Testing 47100'!$B$1", sale_3.getRefersToFormula());
+            assertEquals("sale_4", sale_4.getNameName());
+            assertEquals("'To be renamed'!$A$3", sale_4.getRefersToFormula());
+
+            FormulaEvaluator evaluator = wb1.getCreationHelper().createFormulaEvaluator();
+
+            Cell cell0 = sh1.getRow(0).getCell(0);
+            Cell cell1 = sh1.getRow(1).getCell(0);
+            Cell cell2 = sh1.getRow(2).getCell(0);
+
+            assertEquals("SUM('Testing 47100'!A1:C1)", cell0.getCellFormula());
+            assertEquals("SUM('Testing 47100'!A1:C1,'To be renamed'!A1:A5)", cell1.getCellFormula());
+            assertEquals("sale_2+sale_3+'Testing 47100'!C1", cell2.getCellFormula());
+
+            assertEquals(6.0, evaluator.evaluate(cell0).getNumberValue(), 0);
+            assertEquals(21.0, evaluator.evaluate(cell1).getNumberValue(), 0);
+            assertEquals(6.0, evaluator.evaluate(cell2).getNumberValue(), 0);
+
+            wb1.setSheetName(1, "47100 - First");
+            wb1.setSheetName(2, "47100 - Second");
+
+            assertEquals("sale_2", sale_2.getNameName());
+            assertEquals("'47100 - First'!$A$1", sale_2.getRefersToFormula());
+            assertEquals("sale_3", sale_3.getNameName());
+            assertEquals("'47100 - First'!$B$1", sale_3.getRefersToFormula());
+            assertEquals("sale_4", sale_4.getNameName());
+            assertEquals("'47100 - Second'!$A$3", sale_4.getRefersToFormula());
+
+            assertEquals("SUM('47100 - First'!A1:C1)", cell0.getCellFormula());
+            assertEquals("SUM('47100 - First'!A1:C1,'47100 - Second'!A1:A5)", cell1.getCellFormula());
+            assertEquals("sale_2+sale_3+'47100 - First'!C1", cell2.getCellFormula());
+
+            evaluator.clearAllCachedResultValues();
+            assertEquals(6.0, evaluator.evaluate(cell0).getNumberValue(), 0);
+            assertEquals(21.0, evaluator.evaluate(cell1).getNumberValue(), 0);
+            assertEquals(6.0, evaluator.evaluate(cell2).getNumberValue(), 0);
+
+            try (Workbook wb2 = _testDataProvider.writeOutAndReadBack(wb1)) {
+                sh1 = wb2.getSheetAt(0);
+
+                sale_2 = wb2.getName("sale_2");
+                sale_3 = wb2.getName("sale_3");
+                sale_4 = wb2.getName("sale_4");
+
+                cell0 = sh1.getRow(0).getCell(0);
+                cell1 = sh1.getRow(1).getCell(0);
+                cell2 = sh1.getRow(2).getCell(0);
+
+                assertEquals("sale_2", sale_2.getNameName());
+                assertEquals("'47100 - First'!$A$1", sale_2.getRefersToFormula());
+                assertEquals("sale_3", sale_3.getNameName());
+                assertEquals("'47100 - First'!$B$1", sale_3.getRefersToFormula());
+                assertEquals("sale_4", sale_4.getNameName());
+                assertEquals("'47100 - Second'!$A$3", sale_4.getRefersToFormula());
+
+                assertEquals("SUM('47100 - First'!A1:C1)", cell0.getCellFormula());
+                assertEquals("SUM('47100 - First'!A1:C1,'47100 - Second'!A1:A5)", cell1.getCellFormula());
+                assertEquals("sale_2+sale_3+'47100 - First'!C1", cell2.getCellFormula());
+
+                evaluator = wb2.getCreationHelper().createFormulaEvaluator();
+                assertEquals(6.0, evaluator.evaluate(cell0).getNumberValue(), 0);
+                assertEquals(21.0, evaluator.evaluate(cell1).getNumberValue(), 0);
+                assertEquals(6.0, evaluator.evaluate(cell2).getNumberValue(), 0);
+            }
+        }
     }
 
     protected void changeSheetNameWithSharedFormulas(String sampleFile) throws IOException {
-        Workbook wb = _testDataProvider.openSampleWorkbook(sampleFile);
+        try (Workbook wb = _testDataProvider.openSampleWorkbook(sampleFile)) {
 
-        FormulaEvaluator evaluator = wb.getCreationHelper().createFormulaEvaluator();
+            FormulaEvaluator evaluator = wb.getCreationHelper().createFormulaEvaluator();
 
-        Sheet sheet = wb.getSheetAt(0);
+            Sheet sheet = wb.getSheetAt(0);
 
-        for (int rownum = 1; rownum <= 40; rownum++) {
-            Cell cellA = sheet.getRow(1).getCell(0);
-            Cell cellB = sheet.getRow(1).getCell(1);
+            for (int rownum = 1; rownum <= 40; rownum++) {
+                Cell cellA = sheet.getRow(1).getCell(0);
+                Cell cellB = sheet.getRow(1).getCell(1);
 
-            assertEquals(cellB.getStringCellValue(), evaluator.evaluate(cellA).getStringValue());
-        }
+                assertEquals(cellB.getStringCellValue(), evaluator.evaluate(cellA).getStringValue());
+            }
 
-        wb.setSheetName(0, "Renamed by POI");
-        evaluator.clearAllCachedResultValues();
+            wb.setSheetName(0, "Renamed by POI");
+            evaluator.clearAllCachedResultValues();
 
-        for (int rownum = 1; rownum <= 40; rownum++) {
-            Cell cellA = sheet.getRow(1).getCell(0);
-            Cell cellB = sheet.getRow(1).getCell(1);
+            for (int rownum = 1; rownum <= 40; rownum++) {
+                Cell cellA = sheet.getRow(1).getCell(0);
+                Cell cellB = sheet.getRow(1).getCell(1);
 
-            assertEquals(cellB.getStringCellValue(), evaluator.evaluate(cellA).getStringValue());
+                assertEquals(cellB.getStringCellValue(), evaluator.evaluate(cellA).getStringValue());
+            }
         }
-        wb.close();
     }
 
        protected void assertSheetOrder(Workbook wb, String... sheets) {
@@ -803,43 +792,37 @@ public abstract class BaseTestWorkbook {
 
     @Test
     public void test58499() throws IOException {
-        Workbook workbook = _testDataProvider.createWorkbook();
-        Sheet sheet = workbook.createSheet();
-        for (int i = 0; i < 900; i++) {
-            Row r = sheet.createRow(i);
-            Cell c = r.createCell(0);
-            CellStyle cs = workbook.createCellStyle();
-            c.setCellStyle(cs);
-            c.setCellValue("AAA");                
-        }
-        try (OutputStream os = new NullOutputStream()) {
+        try (Workbook workbook = _testDataProvider.createWorkbook();
+             OutputStream os = new NullOutputStream()) {
+            Sheet sheet = workbook.createSheet();
+            for (int i = 0; i < 900; i++) {
+                Row r = sheet.createRow(i);
+                Cell c = r.createCell(0);
+                CellStyle cs = workbook.createCellStyle();
+                c.setCellStyle(cs);
+                c.setCellValue("AAA");
+            }
             workbook.write(os);
         }
-        //workbook.dispose();
-        workbook.close();
     }
 
 
     @Test
     public void windowOneDefaults() throws IOException {
-        Workbook b = _testDataProvider.createWorkbook();
-        try {
+        try (Workbook b = _testDataProvider.createWorkbook()) {
             assertEquals(b.getActiveSheetIndex(), 0);
             assertEquals(b.getFirstVisibleTab(), 0);
-        } catch (NullPointerException npe) {
-            fail("WindowOneRecord in Workbook is probably not initialized");
+            // throws NullPointerException when WindowOneRecord in Workbook is not probably initialized
         }
-        
-        b.close();
     }
 
     @Test
     public void getSpreadsheetVersion() throws IOException {
-        final Workbook wb = _testDataProvider.createWorkbook();
-        assertEquals(_testDataProvider.getSpreadsheetVersion(), wb.getSpreadsheetVersion());
-        wb.close();
+        try (Workbook wb = _testDataProvider.createWorkbook()) {
+            assertEquals(_testDataProvider.getSpreadsheetVersion(), wb.getSpreadsheetVersion());
+        }
     }
-    
+
     /* FIXME copied from {@link org.apache.poi.ss.TestWorkbookFactory} */
     protected static void assertCloseDoesNotModifyFile(String filename, Workbook wb) throws IOException {
         final byte[] before = HSSFTestDataSamples.getTestDataFileContent(filename);
@@ -852,23 +835,21 @@ public abstract class BaseTestWorkbook {
     @Test
     public void sheetClone() throws IOException {
         // First up, try a simple file
-        final Workbook b = _testDataProvider.createWorkbook();
-        assertEquals(0, b.getNumberOfSheets());
-        b.createSheet("Sheet One");
-        b.createSheet("Sheet Two");
-
-        assertEquals(2, b.getNumberOfSheets());
-        b.cloneSheet(0);
-        assertEquals(3, b.getNumberOfSheets());
-
-        // Now try a problem one with drawing records in it
-        Workbook bBack = HSSFTestDataSamples.openSampleWorkbook("SheetWithDrawing.xls");
-        assertEquals(1, bBack.getNumberOfSheets());
-        bBack.cloneSheet(0);
-        assertEquals(2, bBack.getNumberOfSheets());
-
-        bBack.close();
-        b.close();
+        try (Workbook b = _testDataProvider.createWorkbook();
+             Workbook bBack = HSSFTestDataSamples.openSampleWorkbook("SheetWithDrawing.xls")) {
+            assertEquals(0, b.getNumberOfSheets());
+            b.createSheet("Sheet One");
+            b.createSheet("Sheet Two");
+
+            assertEquals(2, b.getNumberOfSheets());
+            b.cloneSheet(0);
+            assertEquals(3, b.getNumberOfSheets());
+
+            // Now try a problem one with drawing records in it
+            assertEquals(1, bBack.getNumberOfSheets());
+            bBack.cloneSheet(0);
+            assertEquals(2, bBack.getNumberOfSheets());
+        }
     }
 
     @Test
@@ -899,71 +880,57 @@ public abstract class BaseTestWorkbook {
 
     @Test
     public void addSheetTwice() throws IOException {
-        final Workbook wb = _testDataProvider.createWorkbook();
-        Sheet sheet1 = wb.createSheet("Sheet1");
-        assertNotNull(sheet1);
-        try {
+        try (Workbook wb = _testDataProvider.createWorkbook()) {
+            Sheet sheet1 = wb.createSheet("Sheet1");
+            assertNotNull(sheet1);
+
+            thrown.expect(IllegalArgumentException.class);
+            thrown.expectMessage("already contains a sheet named 'Sheet1'");
             wb.createSheet("Sheet1");
-            fail("Should fail if we add the same sheet twice");
-        } catch (IllegalArgumentException e) {
-            assertTrue(e.getMessage(), e.getMessage().contains("already contains a sheet named 'Sheet1'"));
         }
-
-        wb.close();
     }
-    
+
     // bug 51233 and 55075: correctly size image if added to a row with a custom height
     @Test
     public void createDrawing() throws Exception {
-        Workbook wb = _testDataProvider.createWorkbook();
-        Sheet sheet = wb.createSheet("Main Sheet");
-        Row row0 = sheet.createRow(0);
-        Row row1 = sheet.createRow(1);
-        row1.createCell(0);
-        row0.createCell(1);
-        row1.createCell(0);
-        row1.createCell(1);
-
-        byte[] pictureData = _testDataProvider.getTestDataFileContent("logoKarmokar4.png");
-
-        int handle = wb.addPicture(pictureData, Workbook.PICTURE_TYPE_PNG);
-        Drawing<?> drawing = sheet.createDrawingPatriarch();
-        CreationHelper helper = wb.getCreationHelper();
-        ClientAnchor anchor = helper.createClientAnchor();
-        anchor.setAnchorType(AnchorType.DONT_MOVE_AND_RESIZE);
-        anchor.setCol1(0);
-        anchor.setRow1(0);
-        Picture picture = drawing.createPicture(anchor, handle);
-
-        row0.setHeightInPoints(144);
-        // set a column width so that XSSF and SXSSF have the same width (default widths may be different otherwise)
-        sheet.setColumnWidth(0, 100*256);
-        picture.resize();
-        
-        // The actual dimensions don't matter as much as having XSSF and SXSSF produce the same size drawings
-        
-        // Check drawing height
-        assertEquals(0, anchor.getRow1());
-        assertEquals(0, anchor.getRow2());
-        assertEquals(0, anchor.getDy1());
-        assertEquals(1609725, anchor.getDy2()); //HSSF: 225
-        
-        // Check drawing width
-        assertEquals(0, anchor.getCol1());
-        assertEquals(0, anchor.getCol2());
-        assertEquals(0, anchor.getDx1());
-        assertEquals(1114425, anchor.getDx2()); //HSSF: 171
-        
-        final boolean writeOut = false;
-        if (writeOut) {
-            String ext = "." + _testDataProvider.getStandardFileNameExtension();
-            String prefix = wb.getClass().getName() + "-createDrawing";
-            File f = TempFile.createTempFile(prefix, ext);
-            FileOutputStream out = new FileOutputStream(f);
-            wb.write(out);
-            out.close();
+        try (Workbook wb = _testDataProvider.createWorkbook()) {
+            Sheet sheet = wb.createSheet("Main Sheet");
+            Row row0 = sheet.createRow(0);
+            Row row1 = sheet.createRow(1);
+            row1.createCell(0);
+            row0.createCell(1);
+            row1.createCell(0);
+            row1.createCell(1);
+
+            byte[] pictureData = _testDataProvider.getTestDataFileContent("logoKarmokar4.png");
+
+            int handle = wb.addPicture(pictureData, Workbook.PICTURE_TYPE_PNG);
+            Drawing<?> drawing = sheet.createDrawingPatriarch();
+            CreationHelper helper = wb.getCreationHelper();
+            ClientAnchor anchor = helper.createClientAnchor();
+            anchor.setAnchorType(AnchorType.DONT_MOVE_AND_RESIZE);
+            anchor.setCol1(0);
+            anchor.setRow1(0);
+            Picture picture = drawing.createPicture(anchor, handle);
+
+            row0.setHeightInPoints(144);
+            // set a column width so that XSSF and SXSSF have the same width (default widths may be different otherwise)
+            sheet.setColumnWidth(0, 100 * 256);
+            picture.resize();
+
+            // The actual dimensions don't matter as much as having XSSF and SXSSF produce the same size drawings
+
+            // Check drawing height
+            assertEquals(0, anchor.getRow1());
+            assertEquals(0, anchor.getRow2());
+            assertEquals(0, anchor.getDy1());
+            assertEquals(1609725, anchor.getDy2()); //HSSF: 225
+
+            // Check drawing width
+            assertEquals(0, anchor.getCol1());
+            assertEquals(0, anchor.getCol2());
+            assertEquals(0, anchor.getDx1());
+            assertEquals(1114425, anchor.getDx2()); //HSSF: 171
         }
-        wb.close();
     }
-
 }
diff --git a/src/testcases/org/apache/poi/util/NullPrintStream.java b/src/testcases/org/apache/poi/util/NullPrintStream.java
new file mode 100644 (file)
index 0000000..5fd6bc6
--- /dev/null
@@ -0,0 +1,88 @@
+/* ====================================================================
+   Licensed to the Apache Software Foundation (ASF) under one or more
+   contributor license agreements.  See the NOTICE file distributed with
+   this work for additional information regarding copyright ownership.
+   The ASF licenses this file to You under the Apache License, Version 2.0
+   (the "License"); you may not use this file except in compliance with
+   the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+==================================================================== */
+
+package org.apache.poi.util;
+
+import java.io.PrintStream;
+import java.util.Locale;
+
+// need to override all methods to omit calls to UTF-handling methods
+@SuppressForbidden("ignore super constructor with charset - omits declaring UnsupportedEncodingException")
+public class NullPrintStream extends PrintStream {
+    @SuppressWarnings("resource")
+    public NullPrintStream() {
+        super(new NullOutputStream(), true);
+    }
+    @Override
+    public void write(int b) {}
+    @Override
+    public void write(byte[] buf, int off, int len) {}
+    @Override
+    public void print(boolean b) {}
+    @Override
+    public void print(char c) {}
+    @Override
+    public void print(int i) {}
+    @Override
+    public void print(long l) {}
+    @Override
+    public void print(float f) {}
+    @Override
+    public void print(double d) {}
+    @Override
+    public void print(char[] s) {}
+    @Override
+    public void print(String s) {}
+    @Override
+    public void print(Object obj) {}
+    @Override
+    public void println() {}
+    @Override
+    public void println(boolean x) {}
+    @Override
+    public void println(char x) {}
+    @Override
+    public void println(int x) {}
+    @Override
+    public void println(long x) {}
+    @Override
+    public void println(float x) {}
+    @Override
+    public void println(double x) {}
+    @Override
+    public void println(char[] x) {}
+    @Override
+    public void println(String x) {}
+    @Override
+    public void println(Object x) {}
+    @Override
+    public PrintStream printf(String format, Object... args) { return this; }
+    @Override
+    public PrintStream printf(Locale l, String format, Object... args) { return this; }
+    @Override
+    public PrintStream format(String format, Object... args) { return this; }
+    @Override
+    public PrintStream format(Locale l, String format, Object... args) { return this; }
+    @Override
+    public PrintStream append(CharSequence csq) { return this; }
+    @Override
+    public PrintStream append(CharSequence csq, int start, int end) { return this; }
+    @Override
+    public PrintStream append(char c) { return this; }
+    @Override
+    public void write(byte[] b) {}
+}