From 902124a5fd2aadbe4d106c4a4efd907769984a05 Mon Sep 17 00:00:00 2001 From: Dominik Stadler Date: Fri, 9 Jun 2017 12:49:01 +0000 Subject: [PATCH] Move one testcase with incorrect source location remove some junit dependencies in example-code build: do not pass junit-jar to normal compile targets to avoid introducing it as dependency again Reformat code, fix warnings, ... git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1798202 13f79535-47bb-0310-9956-ffa450edef68 --- build.xml | 30 ++- .../usermodel/examples/UpdateEmbeddedDoc.java | 17 +- .../apache/poi/stress/HWPFFileHandler.java | 74 +++---- .../org/apache/poi/ss/util/SheetUtil.java | 21 +- .../java/org/apache/poi/util/OOXMLLite.java | 5 +- .../apache/poi/openxml4j/opc/TestPackage.java | 9 +- .../TestZipPackagePropertiesMarshaller.java | 0 .../poi/hwpf/model/PieceDescriptor.java | 203 ++++++++---------- .../poi/ss/usermodel/BaseTestSheet.java | 6 +- 9 files changed, 182 insertions(+), 183 deletions(-) rename src/ooxml/{java => testcases}/org/apache/poi/openxml4j/opc/internal/marshallers/TestZipPackagePropertiesMarshaller.java (100%) diff --git a/build.xml b/build.xml index ee36f08f5c..9d09b55284 100644 --- a/build.xml +++ b/build.xml @@ -325,12 +325,15 @@ under the License. - + + + + + - @@ -375,6 +378,7 @@ under the License. + @@ -385,6 +389,7 @@ under the License. + @@ -420,6 +425,7 @@ under the License. + @@ -857,6 +863,10 @@ under the License. includeantruntime="false"> + + + @@ -918,6 +928,7 @@ under the License. includeantruntime="false"> + @@ -981,6 +992,7 @@ under the License. includeantruntime="false"> + @@ -1024,6 +1036,10 @@ under the License. + + + @@ -1114,6 +1130,7 @@ under the License. includeantruntime="false"> + @@ -1135,6 +1152,7 @@ under the License. + @@ -1274,6 +1292,7 @@ under the License. + @@ -1391,6 +1410,7 @@ under the License. + @@ -1443,7 +1463,10 @@ under the License. - + + + + @@ -1476,6 +1499,7 @@ under the License. failureproperty="ooxml.xmlsec.test.failed"> + diff --git a/src/examples/src/org/apache/poi/xwpf/usermodel/examples/UpdateEmbeddedDoc.java b/src/examples/src/org/apache/poi/xwpf/usermodel/examples/UpdateEmbeddedDoc.java index 251b4568f6..77e04a7ef8 100644 --- a/src/examples/src/org/apache/poi/xwpf/usermodel/examples/UpdateEmbeddedDoc.java +++ b/src/examples/src/org/apache/poi/xwpf/usermodel/examples/UpdateEmbeddedDoc.java @@ -19,8 +19,6 @@ package org.apache.poi.xwpf.usermodel.examples; -import static org.junit.Assert.assertEquals; - import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; @@ -77,7 +75,7 @@ public class UpdateEmbeddedDoc { this.docFile = new File(filename); FileInputStream fis = null; if (!this.docFile.exists()) { - throw new FileNotFoundException("The Word dcoument " + filename + " does not exist."); + throw new FileNotFoundException("The Word document " + filename + " does not exist."); } try { // Open the Word document file and instantiate the XWPFDocument @@ -90,7 +88,7 @@ public class UpdateEmbeddedDoc { } /** - * Called to update the embedded Excel workbook. As the format and structire + * Called to update the embedded Excel workbook. As the format and structure * of the workbook are known in advance, all this code attempts to do is * write a new value into the first cell on the first row of the first * worksheet. Prior to executing this method, that cell will contain the @@ -99,7 +97,7 @@ public class UpdateEmbeddedDoc { * @throws org.apache.poi.openxml4j.exceptions.OpenXML4JException * Rather * than use the specific classes (HSSF/XSSF) to handle the embedded - * workbook this method uses those defeined in the SS stream. As + * workbook this method uses those defined in the SS stream. As * a result, it might be the case that a SpreadsheetML file is * opened for processing, throwing this exception if that file is * invalid. @@ -160,7 +158,7 @@ public class UpdateEmbeddedDoc { * @throws org.apache.poi.openxml4j.exceptions.OpenXML4JException * Rather * than use the specific classes (HSSF/XSSF) to handle the embedded - * workbook this method uses those defeined in the SS stream. As + * workbook this method uses those defined in the SS stream. As * a result, it might be the case that a SpreadsheetML file is * opened for processing, throwing this exception if that file is * invalid. @@ -178,7 +176,9 @@ public class UpdateEmbeddedDoc { Sheet sheet = workbook.getSheetAt(SHEET_NUM); Row row = sheet.getRow(ROW_NUM); Cell cell = row.getCell(CELL_NUM); - assertEquals(cell.getNumericCellValue(), NEW_VALUE, 0.0001); + if(cell.getNumericCellValue() != NEW_VALUE) { + throw new IllegalStateException("Failed to validate document content."); + } } finally { IOUtils.closeQuietly(workbook); IOUtils.closeQuietly(is); @@ -189,9 +189,6 @@ public class UpdateEmbeddedDoc { /** * Code to test updating of the embedded Excel workbook. - * - * @param args - * @throws OpenXML4JException */ public static void main(String[] args) throws IOException, OpenXML4JException { UpdateEmbeddedDoc ued = new UpdateEmbeddedDoc(args[0]); diff --git a/src/integrationtest/org/apache/poi/stress/HWPFFileHandler.java b/src/integrationtest/org/apache/poi/stress/HWPFFileHandler.java index d4ec360062..13e198d169 100644 --- a/src/integrationtest/org/apache/poi/stress/HWPFFileHandler.java +++ b/src/integrationtest/org/apache/poi/stress/HWPFFileHandler.java @@ -27,47 +27,47 @@ import org.apache.poi.hwpf.extractor.WordExtractor; import org.junit.Test; public class HWPFFileHandler extends POIFSFileHandler { - @Override - public void handleFile(InputStream stream, String path) throws Exception { - HWPFDocument doc = new HWPFDocument(stream); - assertNotNull(doc.getBookmarks()); - assertNotNull(doc.getCharacterTable()); - assertNotNull(doc.getEndnotes()); - - handlePOIDocument(doc); - } + @Override + public void handleFile(InputStream stream, String path) throws Exception { + HWPFDocument doc = new HWPFDocument(stream); + assertNotNull(doc.getBookmarks()); + assertNotNull(doc.getCharacterTable()); + assertNotNull(doc.getEndnotes()); + + handlePOIDocument(doc); + } - // a test-case to test this locally without executing the full TestAllFiles - @Override + // a test-case to test this locally without executing the full TestAllFiles + @Override @Test - public void test() throws Exception { + public void test() throws Exception { File file = new File("test-data/document/52117.doc"); InputStream stream = new FileInputStream(file); - try { - handleFile(stream, file.getPath()); - } finally { - stream.close(); - } - - handleExtracting(file); - - stream = new FileInputStream(file); - try { - WordExtractor extractor = new WordExtractor(stream); - try { - assertNotNull(extractor.getText()); - } finally { - extractor.close(); - } - } finally { - stream.close(); - } - } + try { + handleFile(stream, file.getPath()); + } finally { + stream.close(); + } + + handleExtracting(file); + + stream = new FileInputStream(file); + try { + WordExtractor extractor = new WordExtractor(stream); + try { + assertNotNull(extractor.getText()); + } finally { + extractor.close(); + } + } finally { + stream.close(); + } + } - @Test - public void testExtractingOld() throws Exception { - File file = new File("test-data/document/52117.doc"); - handleExtracting(file); - } + @Test + public void testExtractingOld() throws Exception { + File file = new File("test-data/document/52117.doc"); + handleExtracting(file); + } } diff --git a/src/java/org/apache/poi/ss/util/SheetUtil.java b/src/java/org/apache/poi/ss/util/SheetUtil.java index 98c307f3ee..6dd27b40fd 100644 --- a/src/java/org/apache/poi/ss/util/SheetUtil.java +++ b/src/java/org/apache/poi/ss/util/SheetUtil.java @@ -91,6 +91,7 @@ public class SheetUtil { public void evaluateAll() {} @Override public int evaluateFormulaCell(Cell cell) { + //noinspection deprecation return cell.getCachedFormulaResultType(); } /** @@ -157,9 +158,9 @@ public class SheetUtil { AttributedString str = new AttributedString(txt); copyAttributes(font, str, 0, txt.length()); - if (rt.numFormattingRuns() > 0) { + /*if (rt.numFormattingRuns() > 0) { // TODO: support rich text fragments - } + }*/ width = getCellWidth(defaultCharWidth, colspan, style, width, str); } @@ -329,7 +330,7 @@ public class SheetUtil { /** * Copy text attributes from the supplied Font to Java2D AttributedString */ - private static void copyAttributes(Font font, AttributedString str, int startIdx, int endIdx) { + private static void copyAttributes(Font font, AttributedString str, @SuppressWarnings("SameParameterValue") int startIdx, int endIdx) { str.addAttribute(TextAttribute.FAMILY, font.getFontName(), startIdx, endIdx); str.addAttribute(TextAttribute.SIZE, (float)font.getFontHeightInPoints()); if (font.getBold()) str.addAttribute(TextAttribute.WEIGHT, TextAttribute.WEIGHT_BOLD, startIdx, endIdx); @@ -360,9 +361,9 @@ public class SheetUtil { * Use this where you want to know if the given cell is explicitly defined * or not. * - * @param sheet - * @param rowIx - * @param colIx + * @param sheet The workbook sheet to look at. + * @param rowIx The 0-based index of the row. + * @param colIx The 0-based index of the cell. * @return cell at the given location, or null if not defined * @throws NullPointerException if sheet is null */ @@ -384,10 +385,10 @@ public class SheetUtil { * then will return the cell itself. *

If there is no cell defined at the given co-ordinates, will return * null. - * - * @param sheet - * @param rowIx - * @param colIx + * + * @param sheet The workbook sheet to look at. + * @param rowIx The 0-based index of the row. + * @param colIx The 0-based index of the cell. * @return cell at the given location, its base merged cell, or null if not defined * @throws NullPointerException if sheet is null */ diff --git a/src/ooxml/java/org/apache/poi/util/OOXMLLite.java b/src/ooxml/java/org/apache/poi/util/OOXMLLite.java index 793b047170..4eaa825e57 100644 --- a/src/ooxml/java/org/apache/poi/util/OOXMLLite.java +++ b/src/ooxml/java/org/apache/poi/util/OOXMLLite.java @@ -143,9 +143,7 @@ public final class OOXMLLite { copyFile(cls.getResourceAsStream('/' + classRef), destFile); if(cls.isInterface()){ - /** - * Copy classes and interfaces declared as members of this class - */ + /// Copy classes and interfaces declared as members of this class for(Class fc : cls.getDeclaredClasses()){ className = fc.getName(); classRef = className.replace('.', '/') + ".class"; @@ -235,7 +233,6 @@ public final class OOXMLLite { } } catch (Throwable e) { // NOSONAR System.out.println("Class " + cls + " is not in classpath"); - return; } } } diff --git a/src/ooxml/testcases/org/apache/poi/openxml4j/opc/TestPackage.java b/src/ooxml/testcases/org/apache/poi/openxml4j/opc/TestPackage.java index 4362f62d14..a788028654 100644 --- a/src/ooxml/testcases/org/apache/poi/openxml4j/opc/TestPackage.java +++ b/src/ooxml/testcases/org/apache/poi/openxml4j/opc/TestPackage.java @@ -948,15 +948,16 @@ public final class TestPackage { // bug 60128 @Test - public void testCorruptFile() throws IOException { + public void testCorruptFile() throws IOException, InvalidFormatException { OPCPackage pkg = null; File file = OpenXML4JTestDataSamples.getSampleFile("invalid.xlsx"); try { pkg = OPCPackage.open(file, PackageAccess.READ); - } catch (Exception e) { - System.out.println(e.getClass().getName()); + } catch (NotOfficeXmlFileException e) { + /*System.out.println(e.getClass().getName()); System.out.println(e.getMessage()); - e.printStackTrace(); + e.printStackTrace();*/ + // ignore exception } finally { if (pkg != null) { pkg.close(); diff --git a/src/ooxml/java/org/apache/poi/openxml4j/opc/internal/marshallers/TestZipPackagePropertiesMarshaller.java b/src/ooxml/testcases/org/apache/poi/openxml4j/opc/internal/marshallers/TestZipPackagePropertiesMarshaller.java similarity index 100% rename from src/ooxml/java/org/apache/poi/openxml4j/opc/internal/marshallers/TestZipPackagePropertiesMarshaller.java rename to src/ooxml/testcases/org/apache/poi/openxml4j/opc/internal/marshallers/TestZipPackagePropertiesMarshaller.java diff --git a/src/scratchpad/src/org/apache/poi/hwpf/model/PieceDescriptor.java b/src/scratchpad/src/org/apache/poi/hwpf/model/PieceDescriptor.java index 53dcc17457..a54a06059b 100644 --- a/src/scratchpad/src/org/apache/poi/hwpf/model/PieceDescriptor.java +++ b/src/scratchpad/src/org/apache/poi/hwpf/model/PieceDescriptor.java @@ -19,128 +19,76 @@ package org.apache.poi.hwpf.model; import java.nio.charset.Charset; -import org.apache.poi.util.BitField; -import org.apache.poi.util.BitFieldFactory; import org.apache.poi.util.Internal; import org.apache.poi.util.LittleEndian; import org.apache.poi.util.StringUtil; @Internal -public final class PieceDescriptor -{ - - short descriptor; - private static BitField fNoParaLast = BitFieldFactory.getInstance(0x01); - private static BitField fPaphNil = BitFieldFactory.getInstance(0x02); - private static BitField fCopied = BitFieldFactory.getInstance(0x04); - int fc; - PropertyModifier prm; - boolean unicode = false; - private final Charset charset; - +public final class PieceDescriptor { + private final short descriptor; + int fc; // used from the outside?!? + private final PropertyModifier prm; + private final boolean unicode; + private final Charset charset; public PieceDescriptor(byte[] buf, int offset) { this(buf, offset, null); } /** - * * This initializer should only be used for HWPFOldDocuments. * - * @param buf - * @param offset + * @param buf The buffer to read data from + * @param offset The offset into the buffer to start reading from * @param charset which charset to use if this is not unicode */ - public PieceDescriptor(byte[] buf, int offset, Charset charset) { - descriptor = LittleEndian.getShort(buf, offset); - offset += LittleEndian.SHORT_SIZE; - fc = LittleEndian.getInt(buf, offset); - offset += LittleEndian.INT_SIZE; - prm = new PropertyModifier(LittleEndian.getShort(buf, offset)); - if (charset == null) { - // see if this piece uses unicode. - //From the documentation: If the second most significant bit - //is clear, then this indicates the actual file offset of the Unicode character (two bytes). If the - //second most significant bit is set, then the actual address of the codepage-1252 - //compressed version of the Unicode character (one byte), is actually at the offset indicated - //by clearing this bit and dividing by two. - if ((fc & 0x40000000) == 0) { - unicode = true; - this.charset = null; + public PieceDescriptor(byte[] buf, int offset, Charset charset) { + descriptor = LittleEndian.getShort(buf, offset); + offset += LittleEndian.SHORT_SIZE; + fc = LittleEndian.getInt(buf, offset); + offset += LittleEndian.INT_SIZE; + prm = new PropertyModifier(LittleEndian.getShort(buf, offset)); + if (charset == null) { + // see if this piece uses unicode. + //From the documentation: If the second most significant bit + //is clear, then this indicates the actual file offset of the Unicode character (two bytes). If the + //second most significant bit is set, then the actual address of the codepage-1252 + //compressed version of the Unicode character (one byte), is actually at the offset indicated + //by clearing this bit and dividing by two. + if ((fc & 0x40000000) == 0) { + unicode = true; + this.charset = null; + } else { + unicode = false; + fc &= ~(0x40000000);//gives me FC in doc stream + fc /= 2; + this.charset = StringUtil.WIN_1252; + } } else { - unicode = false; - fc &= ~(0x40000000);//gives me FC in doc stream - fc /= 2; - this.charset = StringUtil.WIN_1252; + if (charset == StringUtil.UTF16LE) { + unicode = true; + } else { + unicode = false; + } + this.charset = charset; } - } else { - if (charset == StringUtil.UTF16LE) { - unicode = true; - } - this.charset = charset; - } - - } - - public int getFilePosition() - { - return fc; - } - - public void setFilePosition(int pos) - { - fc = pos; - } - - public boolean isUnicode() - { - return unicode; - } - - /** - * - * @return charset to use if this is not a Unicode PieceDescriptor - * this can be null - */ - public Charset getCharset() { - return charset; - } - public PropertyModifier getPrm() - { - return prm; } - protected byte[] toByteArray() - { - // set up the fc - int tempFc = fc; - if (!unicode) - { - tempFc *= 2; - tempFc |= (0x40000000); + public int getFilePosition() { + return fc; } - int offset = 0; - byte[] buf = new byte[8]; - LittleEndian.putShort(buf, offset, descriptor); - offset += LittleEndian.SHORT_SIZE; - LittleEndian.putInt(buf, offset, tempFc); - offset += LittleEndian.INT_SIZE; - LittleEndian.putShort(buf, offset, prm.getValue()); - - return buf; - - } + public void setFilePosition(int pos) { + fc = pos; + } - public static int getSizeInBytes() - { - return 8; - } + public boolean isUnicode() { + return unicode; + } @Override - public int hashCode() - { + public int hashCode() { final int prime = 31; int result = 1; result = prime * result + descriptor; @@ -149,35 +97,66 @@ public final class PieceDescriptor return result; } + /** + * @return charset to use if this is not a Unicode PieceDescriptor + * this can be null + */ + public Charset getCharset() { + return charset; + } + + public PropertyModifier getPrm() { + return prm; + } + + protected byte[] toByteArray() { + // set up the fc + int tempFc = fc; + if (!unicode) { + tempFc *= 2; + tempFc |= (0x40000000); + } + + int offset = 0; + byte[] buf = new byte[8]; + LittleEndian.putShort(buf, offset, descriptor); + offset += LittleEndian.SHORT_SIZE; + LittleEndian.putInt(buf, offset, tempFc); + offset += LittleEndian.INT_SIZE; + LittleEndian.putShort(buf, offset, prm.getValue()); + + return buf; + } + + public static int getSizeInBytes() { + return 8; + } + @Override - public boolean equals( Object obj ) - { - if ( this == obj ) + public boolean equals(Object obj) { + if (this == obj) return true; - if ( obj == null ) + if (obj == null) return false; - if ( getClass() != obj.getClass() ) + if (getClass() != obj.getClass()) return false; PieceDescriptor other = (PieceDescriptor) obj; - if ( descriptor != other.descriptor ) + if (descriptor != other.descriptor) return false; - if ( prm == null ) - { - if ( other.prm != null ) + if (prm == null) { + if (other.prm != null) return false; - } - else if ( !prm.equals( other.prm ) ) + } else if (!prm.equals(other.prm)) return false; - if ( unicode != other.unicode ) + if (unicode != other.unicode) return false; return true; } @Override - public String toString() - { + public String toString() { return "PieceDescriptor (pos: " + getFilePosition() + "; " - + ( isUnicode() ? "unicode" : "non-unicode" ) + "; prm: " + + (isUnicode() ? "unicode" : "non-unicode") + "; prm: " + getPrm() + ")"; } } diff --git a/src/testcases/org/apache/poi/ss/usermodel/BaseTestSheet.java b/src/testcases/org/apache/poi/ss/usermodel/BaseTestSheet.java index a0a82eeb91..38192d90f1 100644 --- a/src/testcases/org/apache/poi/ss/usermodel/BaseTestSheet.java +++ b/src/testcases/org/apache/poi/ss/usermodel/BaseTestSheet.java @@ -37,8 +37,8 @@ import static org.junit.Assert.*; import static org.junit.Assume.assumeTrue; /** - * Common superclass for testing {@link org.apache.poi.xssf.usermodel.XSSFCell} and - * {@link org.apache.poi.hssf.usermodel.HSSFCell} + * Common superclass for testing {@link HSSFCell}, org.apache.poi.xssf.usermodel.XSSFCell and + * org.apache.poi.xssf.streaming.SXSSFCell */ public abstract class BaseTestSheet { private static final int ROW_COUNT = 40000; @@ -417,7 +417,7 @@ public abstract class BaseTestSheet { //should exist now! assertTrue("there isn't more than one merged region in there", 1 <= sheet.getNumMergedRegions()); region = sheet.getMergedRegion(0); - assertEquals("the merged row to doesnt match the one we put in ", 4, region.getLastRow()); + assertEquals("the merged row to doesn't match the one we put in ", 4, region.getLastRow()); wb.close(); } -- 2.39.5