mirror of https://github.com/apache/poi.git
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
This commit is contained in:
parent
20ed0075e8
commit
902124a5fd
30
build.xml
30
build.xml
|
@ -325,12 +325,15 @@ under the License.
|
||||||
<path id="main.classpath">
|
<path id="main.classpath">
|
||||||
<pathelement location="${main.commons-logging.jar}"/>
|
<pathelement location="${main.commons-logging.jar}"/>
|
||||||
<pathelement location="${main.commons-codec.jar}"/>
|
<pathelement location="${main.commons-codec.jar}"/>
|
||||||
<pathelement location="${main.log4j.jar}"/>
|
<pathelement location="${main.commons-collections4.jar}"/>
|
||||||
|
</path>
|
||||||
|
|
||||||
|
<!-- some libraries should only be required for compiling/running tests -->
|
||||||
|
<path id="test.jar.classpath">
|
||||||
<pathelement location="${main.junit.jar}"/>
|
<pathelement location="${main.junit.jar}"/>
|
||||||
<pathelement location="${main.jmh.jar}"/>
|
<pathelement location="${main.jmh.jar}"/>
|
||||||
<pathelement location="${main.jmhAnnotation.jar}"/>
|
<pathelement location="${main.jmhAnnotation.jar}"/>
|
||||||
<pathelement location="${main.hamcrest.jar}"/>
|
<pathelement location="${main.hamcrest.jar}"/>
|
||||||
<pathelement location="${main.commons-collections4.jar}"/>
|
|
||||||
</path>
|
</path>
|
||||||
|
|
||||||
<path id="scratchpad.classpath">
|
<path id="scratchpad.classpath">
|
||||||
|
@ -375,6 +378,7 @@ under the License.
|
||||||
|
|
||||||
<path id="test.ooxml.classpath">
|
<path id="test.ooxml.classpath">
|
||||||
<path refid="ooxml.classpath"/>
|
<path refid="ooxml.classpath"/>
|
||||||
|
<path refid="test.jar.classpath"/>
|
||||||
<pathelement location="${ooxml.output.dir}"/>
|
<pathelement location="${ooxml.output.dir}"/>
|
||||||
<pathelement location="${ooxml.output.test.dir}"/>
|
<pathelement location="${ooxml.output.test.dir}"/>
|
||||||
<pathelement location="${main.output.test.dir}"/>
|
<pathelement location="${main.output.test.dir}"/>
|
||||||
|
@ -385,6 +389,7 @@ under the License.
|
||||||
<pathelement location="${integration.src.test}"/>
|
<pathelement location="${integration.src.test}"/>
|
||||||
<path refid="scratchpad.classpath"/>
|
<path refid="scratchpad.classpath"/>
|
||||||
<path refid="ooxml.classpath"/>
|
<path refid="ooxml.classpath"/>
|
||||||
|
<path refid="test.jar.classpath"/>
|
||||||
<pathelement location="${main.output.test.dir}"/>
|
<pathelement location="${main.output.test.dir}"/>
|
||||||
<pathelement location="${ooxml.output.dir}"/>
|
<pathelement location="${ooxml.output.dir}"/>
|
||||||
<pathelement location="${integration.output.test.dir}"/>
|
<pathelement location="${integration.output.test.dir}"/>
|
||||||
|
@ -420,6 +425,7 @@ under the License.
|
||||||
|
|
||||||
<path id="test.excelant.classpath">
|
<path id="test.excelant.classpath">
|
||||||
<path refid="ooxml.classpath"/>
|
<path refid="ooxml.classpath"/>
|
||||||
|
<path refid="test.jar.classpath"/>
|
||||||
<pathelement location="${ooxml.output.dir}"/>
|
<pathelement location="${ooxml.output.dir}"/>
|
||||||
<pathelement location="${excelant.output.dir}"/>
|
<pathelement location="${excelant.output.dir}"/>
|
||||||
<pathelement location="${excelant.output.test.dir}"/>
|
<pathelement location="${excelant.output.test.dir}"/>
|
||||||
|
@ -857,6 +863,10 @@ under the License.
|
||||||
includeantruntime="false">
|
includeantruntime="false">
|
||||||
<!-- debug="${compile.debug}" -->
|
<!-- debug="${compile.debug}" -->
|
||||||
<classpath refid="ooxml.classpath"/>
|
<classpath refid="ooxml.classpath"/>
|
||||||
|
|
||||||
|
<!-- unfortunately JUnit is required here for OOXMLLite, we should rather move OOXMLLite
|
||||||
|
to test or a separate folder to clean up dependencies -->
|
||||||
|
<classpath location="${main.junit.jar}"/>
|
||||||
</javac>
|
</javac>
|
||||||
|
|
||||||
<jar basedir="${xmlbean.classes.dir}" destfile="@{classes-jar}" excludes="org/apache/**" level="9" />
|
<jar basedir="${xmlbean.classes.dir}" destfile="@{classes-jar}" excludes="org/apache/**" level="9" />
|
||||||
|
@ -918,6 +928,7 @@ under the License.
|
||||||
includeantruntime="false">
|
includeantruntime="false">
|
||||||
<classpath>
|
<classpath>
|
||||||
<path refid="main.classpath"/>
|
<path refid="main.classpath"/>
|
||||||
|
<path refid="test.jar.classpath"/>
|
||||||
<pathelement path="${main.output.dir}"/>
|
<pathelement path="${main.output.dir}"/>
|
||||||
</classpath>
|
</classpath>
|
||||||
</javac>
|
</javac>
|
||||||
|
@ -981,6 +992,7 @@ under the License.
|
||||||
includeantruntime="false">
|
includeantruntime="false">
|
||||||
<classpath>
|
<classpath>
|
||||||
<path refid="scratchpad.classpath"/>
|
<path refid="scratchpad.classpath"/>
|
||||||
|
<path refid="test.jar.classpath"/>
|
||||||
<pathelement location="${scratchpad.output.dir}"/>
|
<pathelement location="${scratchpad.output.dir}"/>
|
||||||
<pathelement location="${main.output.test.dir}"/>
|
<pathelement location="${main.output.test.dir}"/>
|
||||||
</classpath>
|
</classpath>
|
||||||
|
@ -1024,6 +1036,10 @@ under the License.
|
||||||
<classpath>
|
<classpath>
|
||||||
<path refid="ooxml.classpath"/>
|
<path refid="ooxml.classpath"/>
|
||||||
<path refid="ooxml.xmlsec.classpath"/>
|
<path refid="ooxml.xmlsec.classpath"/>
|
||||||
|
|
||||||
|
<!-- unfortunately JUnit is required here for OOXMLLite, we should rather move OOXMLLite
|
||||||
|
to test or a separate folder to clean up dependencies -->
|
||||||
|
<pathelement location="${main.junit.jar}"/>
|
||||||
</classpath>
|
</classpath>
|
||||||
</javac>
|
</javac>
|
||||||
<!-- compile the tests -->
|
<!-- compile the tests -->
|
||||||
|
@ -1114,6 +1130,7 @@ under the License.
|
||||||
includeantruntime="false">
|
includeantruntime="false">
|
||||||
<classpath>
|
<classpath>
|
||||||
<path refid="excelant.classpath"/>
|
<path refid="excelant.classpath"/>
|
||||||
|
<path refid="test.jar.classpath"/>
|
||||||
<pathelement location="${excelant.output.dir}"/>
|
<pathelement location="${excelant.output.dir}"/>
|
||||||
<pathelement path="${main.output.test.dir}"/>
|
<pathelement path="${main.output.test.dir}"/>
|
||||||
</classpath>
|
</classpath>
|
||||||
|
@ -1135,6 +1152,7 @@ under the License.
|
||||||
<classpath>
|
<classpath>
|
||||||
<path refid="scratchpad.classpath"/>
|
<path refid="scratchpad.classpath"/>
|
||||||
<path refid="ooxml.classpath"/>
|
<path refid="ooxml.classpath"/>
|
||||||
|
<path refid="test.jar.classpath"/>
|
||||||
<pathelement location="${ooxml.output.dir}"/>
|
<pathelement location="${ooxml.output.dir}"/>
|
||||||
<pathelement location="${main.output.test.dir}"/>
|
<pathelement location="${main.output.test.dir}"/>
|
||||||
<pathelement location="${examples.output.dir}"/>
|
<pathelement location="${examples.output.dir}"/>
|
||||||
|
@ -1274,6 +1292,7 @@ under the License.
|
||||||
<junit fork="yes" forkmode="once" printsummary="yes" haltonfailure="${halt.on.test.failure}"
|
<junit fork="yes" forkmode="once" printsummary="yes" haltonfailure="${halt.on.test.failure}"
|
||||||
failureproperty="main.test.failed" showoutput="true">
|
failureproperty="main.test.failed" showoutput="true">
|
||||||
<classpath refid="test.classpath"/>
|
<classpath refid="test.classpath"/>
|
||||||
|
<classpath refid="test.jar.classpath"/>
|
||||||
<syspropertyset refid="junit.properties"/>
|
<syspropertyset refid="junit.properties"/>
|
||||||
<jvmarg value="-ea"/>
|
<jvmarg value="-ea"/>
|
||||||
<jvmarg value="-Xmx256m"/>
|
<jvmarg value="-Xmx256m"/>
|
||||||
|
@ -1391,6 +1410,7 @@ under the License.
|
||||||
<junit printsummary="yes" fork="yes" forkmode="once" haltonfailure="${halt.on.test.failure}"
|
<junit printsummary="yes" fork="yes" forkmode="once" haltonfailure="${halt.on.test.failure}"
|
||||||
failureproperty="scratchpad.test.failed">
|
failureproperty="scratchpad.test.failed">
|
||||||
<classpath refid="test.scratchpad.classpath"/>
|
<classpath refid="test.scratchpad.classpath"/>
|
||||||
|
<classpath refid="test.jar.classpath"/>
|
||||||
<syspropertyset refid="junit.properties"/>
|
<syspropertyset refid="junit.properties"/>
|
||||||
<jvmarg value="-ea"/>
|
<jvmarg value="-ea"/>
|
||||||
<!-- jvmarg value="-Duser.timezone=UTC"/ -->
|
<!-- jvmarg value="-Duser.timezone=UTC"/ -->
|
||||||
|
@ -1443,7 +1463,10 @@ under the License.
|
||||||
<jacoco:coverage enabled="${coverage.enabled}" excludes="${coverage.excludes}" destfile="build/jacoco-@{type}.exec">
|
<jacoco:coverage enabled="${coverage.enabled}" excludes="${coverage.excludes}" destfile="build/jacoco-@{type}.exec">
|
||||||
<junit printsummary="yes" fork="yes" forkmode="once" haltonfailure="${halt.on.test.failure}"
|
<junit printsummary="yes" fork="yes" forkmode="once" haltonfailure="${halt.on.test.failure}"
|
||||||
failureproperty="ooxml.test.failed">
|
failureproperty="ooxml.test.failed">
|
||||||
<classpath refid="@{classpath}"/>
|
<classpath>
|
||||||
|
<path refid="@{classpath}"/>
|
||||||
|
<path refid="test.jar.classpath"/>
|
||||||
|
</classpath>
|
||||||
<syspropertyset refid="junit.properties"/>
|
<syspropertyset refid="junit.properties"/>
|
||||||
<jvmarg value="${maxpermsize}"/>
|
<jvmarg value="${maxpermsize}"/>
|
||||||
<jvmarg value="-Xmx768M"/>
|
<jvmarg value="-Xmx768M"/>
|
||||||
|
@ -1476,6 +1499,7 @@ under the License.
|
||||||
failureproperty="ooxml.xmlsec.test.failed">
|
failureproperty="ooxml.xmlsec.test.failed">
|
||||||
<classpath>
|
<classpath>
|
||||||
<path refid="@{classpath}"/>
|
<path refid="@{classpath}"/>
|
||||||
|
<path refid="test.jar.classpath"/>
|
||||||
<path refid="ooxml.xmlsec.classpath"/>
|
<path refid="ooxml.xmlsec.classpath"/>
|
||||||
</classpath>
|
</classpath>
|
||||||
<syspropertyset refid="junit.properties"/>
|
<syspropertyset refid="junit.properties"/>
|
||||||
|
|
|
@ -19,8 +19,6 @@
|
||||||
|
|
||||||
package org.apache.poi.xwpf.usermodel.examples;
|
package org.apache.poi.xwpf.usermodel.examples;
|
||||||
|
|
||||||
import static org.junit.Assert.assertEquals;
|
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FileInputStream;
|
import java.io.FileInputStream;
|
||||||
import java.io.FileNotFoundException;
|
import java.io.FileNotFoundException;
|
||||||
|
@ -77,7 +75,7 @@ public class UpdateEmbeddedDoc {
|
||||||
this.docFile = new File(filename);
|
this.docFile = new File(filename);
|
||||||
FileInputStream fis = null;
|
FileInputStream fis = null;
|
||||||
if (!this.docFile.exists()) {
|
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 {
|
try {
|
||||||
// Open the Word document file and instantiate the XWPFDocument
|
// 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
|
* 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
|
* 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
|
* 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
|
* @throws org.apache.poi.openxml4j.exceptions.OpenXML4JException
|
||||||
* Rather
|
* Rather
|
||||||
* than use the specific classes (HSSF/XSSF) to handle the embedded
|
* 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
|
* a result, it might be the case that a SpreadsheetML file is
|
||||||
* opened for processing, throwing this exception if that file is
|
* opened for processing, throwing this exception if that file is
|
||||||
* invalid.
|
* invalid.
|
||||||
|
@ -160,7 +158,7 @@ public class UpdateEmbeddedDoc {
|
||||||
* @throws org.apache.poi.openxml4j.exceptions.OpenXML4JException
|
* @throws org.apache.poi.openxml4j.exceptions.OpenXML4JException
|
||||||
* Rather
|
* Rather
|
||||||
* than use the specific classes (HSSF/XSSF) to handle the embedded
|
* 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
|
* a result, it might be the case that a SpreadsheetML file is
|
||||||
* opened for processing, throwing this exception if that file is
|
* opened for processing, throwing this exception if that file is
|
||||||
* invalid.
|
* invalid.
|
||||||
|
@ -178,7 +176,9 @@ public class UpdateEmbeddedDoc {
|
||||||
Sheet sheet = workbook.getSheetAt(SHEET_NUM);
|
Sheet sheet = workbook.getSheetAt(SHEET_NUM);
|
||||||
Row row = sheet.getRow(ROW_NUM);
|
Row row = sheet.getRow(ROW_NUM);
|
||||||
Cell cell = row.getCell(CELL_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 {
|
} finally {
|
||||||
IOUtils.closeQuietly(workbook);
|
IOUtils.closeQuietly(workbook);
|
||||||
IOUtils.closeQuietly(is);
|
IOUtils.closeQuietly(is);
|
||||||
|
@ -189,9 +189,6 @@ public class UpdateEmbeddedDoc {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Code to test updating of the embedded Excel workbook.
|
* Code to test updating of the embedded Excel workbook.
|
||||||
*
|
|
||||||
* @param args
|
|
||||||
* @throws OpenXML4JException
|
|
||||||
*/
|
*/
|
||||||
public static void main(String[] args) throws IOException, OpenXML4JException {
|
public static void main(String[] args) throws IOException, OpenXML4JException {
|
||||||
UpdateEmbeddedDoc ued = new UpdateEmbeddedDoc(args[0]);
|
UpdateEmbeddedDoc ued = new UpdateEmbeddedDoc(args[0]);
|
||||||
|
|
|
@ -27,47 +27,47 @@ import org.apache.poi.hwpf.extractor.WordExtractor;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
||||||
public class HWPFFileHandler extends POIFSFileHandler {
|
public class HWPFFileHandler extends POIFSFileHandler {
|
||||||
@Override
|
@Override
|
||||||
public void handleFile(InputStream stream, String path) throws Exception {
|
public void handleFile(InputStream stream, String path) throws Exception {
|
||||||
HWPFDocument doc = new HWPFDocument(stream);
|
HWPFDocument doc = new HWPFDocument(stream);
|
||||||
assertNotNull(doc.getBookmarks());
|
assertNotNull(doc.getBookmarks());
|
||||||
assertNotNull(doc.getCharacterTable());
|
assertNotNull(doc.getCharacterTable());
|
||||||
assertNotNull(doc.getEndnotes());
|
assertNotNull(doc.getEndnotes());
|
||||||
|
|
||||||
handlePOIDocument(doc);
|
handlePOIDocument(doc);
|
||||||
}
|
}
|
||||||
|
|
||||||
// a test-case to test this locally without executing the full TestAllFiles
|
// a test-case to test this locally without executing the full TestAllFiles
|
||||||
@Override
|
@Override
|
||||||
@Test
|
@Test
|
||||||
public void test() throws Exception {
|
public void test() throws Exception {
|
||||||
File file = new File("test-data/document/52117.doc");
|
File file = new File("test-data/document/52117.doc");
|
||||||
|
|
||||||
InputStream stream = new FileInputStream(file);
|
InputStream stream = new FileInputStream(file);
|
||||||
try {
|
try {
|
||||||
handleFile(stream, file.getPath());
|
handleFile(stream, file.getPath());
|
||||||
} finally {
|
} finally {
|
||||||
stream.close();
|
stream.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
handleExtracting(file);
|
handleExtracting(file);
|
||||||
|
|
||||||
stream = new FileInputStream(file);
|
stream = new FileInputStream(file);
|
||||||
try {
|
try {
|
||||||
WordExtractor extractor = new WordExtractor(stream);
|
WordExtractor extractor = new WordExtractor(stream);
|
||||||
try {
|
try {
|
||||||
assertNotNull(extractor.getText());
|
assertNotNull(extractor.getText());
|
||||||
} finally {
|
} finally {
|
||||||
extractor.close();
|
extractor.close();
|
||||||
}
|
}
|
||||||
} finally {
|
} finally {
|
||||||
stream.close();
|
stream.close();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testExtractingOld() throws Exception {
|
public void testExtractingOld() throws Exception {
|
||||||
File file = new File("test-data/document/52117.doc");
|
File file = new File("test-data/document/52117.doc");
|
||||||
handleExtracting(file);
|
handleExtracting(file);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -91,6 +91,7 @@ public class SheetUtil {
|
||||||
public void evaluateAll() {}
|
public void evaluateAll() {}
|
||||||
@Override
|
@Override
|
||||||
public int evaluateFormulaCell(Cell cell) {
|
public int evaluateFormulaCell(Cell cell) {
|
||||||
|
//noinspection deprecation
|
||||||
return cell.getCachedFormulaResultType();
|
return cell.getCachedFormulaResultType();
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
|
@ -157,9 +158,9 @@ public class SheetUtil {
|
||||||
AttributedString str = new AttributedString(txt);
|
AttributedString str = new AttributedString(txt);
|
||||||
copyAttributes(font, str, 0, txt.length());
|
copyAttributes(font, str, 0, txt.length());
|
||||||
|
|
||||||
if (rt.numFormattingRuns() > 0) {
|
/*if (rt.numFormattingRuns() > 0) {
|
||||||
// TODO: support rich text fragments
|
// TODO: support rich text fragments
|
||||||
}
|
}*/
|
||||||
|
|
||||||
width = getCellWidth(defaultCharWidth, colspan, style, width, str);
|
width = getCellWidth(defaultCharWidth, colspan, style, width, str);
|
||||||
}
|
}
|
||||||
|
@ -329,7 +330,7 @@ public class SheetUtil {
|
||||||
/**
|
/**
|
||||||
* Copy text attributes from the supplied Font to Java2D AttributedString
|
* 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.FAMILY, font.getFontName(), startIdx, endIdx);
|
||||||
str.addAttribute(TextAttribute.SIZE, (float)font.getFontHeightInPoints());
|
str.addAttribute(TextAttribute.SIZE, (float)font.getFontHeightInPoints());
|
||||||
if (font.getBold()) str.addAttribute(TextAttribute.WEIGHT, TextAttribute.WEIGHT_BOLD, startIdx, endIdx);
|
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
|
* Use this where you want to know if the given cell is explicitly defined
|
||||||
* or not.
|
* or not.
|
||||||
*
|
*
|
||||||
* @param sheet
|
* @param sheet The workbook sheet to look at.
|
||||||
* @param rowIx
|
* @param rowIx The 0-based index of the row.
|
||||||
* @param colIx
|
* @param colIx The 0-based index of the cell.
|
||||||
* @return cell at the given location, or null if not defined
|
* @return cell at the given location, or null if not defined
|
||||||
* @throws NullPointerException if sheet is null
|
* @throws NullPointerException if sheet is null
|
||||||
*/
|
*/
|
||||||
|
@ -385,9 +386,9 @@ public class SheetUtil {
|
||||||
* <p>If there is no cell defined at the given co-ordinates, will return
|
* <p>If there is no cell defined at the given co-ordinates, will return
|
||||||
* null.
|
* null.
|
||||||
*
|
*
|
||||||
* @param sheet
|
* @param sheet The workbook sheet to look at.
|
||||||
* @param rowIx
|
* @param rowIx The 0-based index of the row.
|
||||||
* @param colIx
|
* @param colIx The 0-based index of the cell.
|
||||||
* @return cell at the given location, its base merged cell, or null if not defined
|
* @return cell at the given location, its base merged cell, or null if not defined
|
||||||
* @throws NullPointerException if sheet is null
|
* @throws NullPointerException if sheet is null
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -143,9 +143,7 @@ public final class OOXMLLite {
|
||||||
copyFile(cls.getResourceAsStream('/' + classRef), destFile);
|
copyFile(cls.getResourceAsStream('/' + classRef), destFile);
|
||||||
|
|
||||||
if(cls.isInterface()){
|
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()){
|
for(Class<?> fc : cls.getDeclaredClasses()){
|
||||||
className = fc.getName();
|
className = fc.getName();
|
||||||
classRef = className.replace('.', '/') + ".class";
|
classRef = className.replace('.', '/') + ".class";
|
||||||
|
@ -235,7 +233,6 @@ public final class OOXMLLite {
|
||||||
}
|
}
|
||||||
} catch (Throwable e) { // NOSONAR
|
} catch (Throwable e) { // NOSONAR
|
||||||
System.out.println("Class " + cls + " is not in classpath");
|
System.out.println("Class " + cls + " is not in classpath");
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -948,15 +948,16 @@ public final class TestPackage {
|
||||||
|
|
||||||
// bug 60128
|
// bug 60128
|
||||||
@Test
|
@Test
|
||||||
public void testCorruptFile() throws IOException {
|
public void testCorruptFile() throws IOException, InvalidFormatException {
|
||||||
OPCPackage pkg = null;
|
OPCPackage pkg = null;
|
||||||
File file = OpenXML4JTestDataSamples.getSampleFile("invalid.xlsx");
|
File file = OpenXML4JTestDataSamples.getSampleFile("invalid.xlsx");
|
||||||
try {
|
try {
|
||||||
pkg = OPCPackage.open(file, PackageAccess.READ);
|
pkg = OPCPackage.open(file, PackageAccess.READ);
|
||||||
} catch (Exception e) {
|
} catch (NotOfficeXmlFileException e) {
|
||||||
System.out.println(e.getClass().getName());
|
/*System.out.println(e.getClass().getName());
|
||||||
System.out.println(e.getMessage());
|
System.out.println(e.getMessage());
|
||||||
e.printStackTrace();
|
e.printStackTrace();*/
|
||||||
|
// ignore exception
|
||||||
} finally {
|
} finally {
|
||||||
if (pkg != null) {
|
if (pkg != null) {
|
||||||
pkg.close();
|
pkg.close();
|
||||||
|
|
|
@ -19,128 +19,76 @@ package org.apache.poi.hwpf.model;
|
||||||
|
|
||||||
import java.nio.charset.Charset;
|
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.Internal;
|
||||||
import org.apache.poi.util.LittleEndian;
|
import org.apache.poi.util.LittleEndian;
|
||||||
import org.apache.poi.util.StringUtil;
|
import org.apache.poi.util.StringUtil;
|
||||||
|
|
||||||
@Internal
|
@Internal
|
||||||
public final class PieceDescriptor
|
public final class PieceDescriptor {
|
||||||
{
|
private final short descriptor;
|
||||||
|
int fc; // used from the outside?!?
|
||||||
short descriptor;
|
private final PropertyModifier prm;
|
||||||
private static BitField fNoParaLast = BitFieldFactory.getInstance(0x01);
|
private final boolean unicode;
|
||||||
private static BitField fPaphNil = BitFieldFactory.getInstance(0x02);
|
private final Charset charset;
|
||||||
private static BitField fCopied = BitFieldFactory.getInstance(0x04);
|
|
||||||
int fc;
|
|
||||||
PropertyModifier prm;
|
|
||||||
boolean unicode = false;
|
|
||||||
private final Charset charset;
|
|
||||||
|
|
||||||
|
|
||||||
public PieceDescriptor(byte[] buf, int offset) {
|
public PieceDescriptor(byte[] buf, int offset) {
|
||||||
this(buf, offset, null);
|
this(buf, offset, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
|
||||||
* This initializer should only be used for HWPFOldDocuments.
|
* This initializer should only be used for HWPFOldDocuments.
|
||||||
*
|
*
|
||||||
* @param buf
|
* @param buf The buffer to read data from
|
||||||
* @param offset
|
* @param offset The offset into the buffer to start reading from
|
||||||
* @param charset which charset to use if this is not unicode
|
* @param charset which charset to use if this is not unicode
|
||||||
*/
|
*/
|
||||||
public PieceDescriptor(byte[] buf, int offset, Charset charset) {
|
public PieceDescriptor(byte[] buf, int offset, Charset charset) {
|
||||||
descriptor = LittleEndian.getShort(buf, offset);
|
descriptor = LittleEndian.getShort(buf, offset);
|
||||||
offset += LittleEndian.SHORT_SIZE;
|
offset += LittleEndian.SHORT_SIZE;
|
||||||
fc = LittleEndian.getInt(buf, offset);
|
fc = LittleEndian.getInt(buf, offset);
|
||||||
offset += LittleEndian.INT_SIZE;
|
offset += LittleEndian.INT_SIZE;
|
||||||
prm = new PropertyModifier(LittleEndian.getShort(buf, offset));
|
prm = new PropertyModifier(LittleEndian.getShort(buf, offset));
|
||||||
if (charset == null) {
|
if (charset == null) {
|
||||||
// see if this piece uses unicode.
|
// see if this piece uses unicode.
|
||||||
//From the documentation: If the second most significant bit
|
//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
|
//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
|
//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
|
//compressed version of the Unicode character (one byte), is actually at the offset indicated
|
||||||
//by clearing this bit and dividing by two.
|
//by clearing this bit and dividing by two.
|
||||||
if ((fc & 0x40000000) == 0) {
|
if ((fc & 0x40000000) == 0) {
|
||||||
unicode = true;
|
unicode = true;
|
||||||
this.charset = null;
|
this.charset = null;
|
||||||
|
} else {
|
||||||
|
unicode = false;
|
||||||
|
fc &= ~(0x40000000);//gives me FC in doc stream
|
||||||
|
fc /= 2;
|
||||||
|
this.charset = StringUtil.WIN_1252;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
unicode = false;
|
if (charset == StringUtil.UTF16LE) {
|
||||||
fc &= ~(0x40000000);//gives me FC in doc stream
|
unicode = true;
|
||||||
fc /= 2;
|
} else {
|
||||||
this.charset = StringUtil.WIN_1252;
|
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 <code>null</code>
|
|
||||||
*/
|
|
||||||
public Charset getCharset() {
|
|
||||||
return charset;
|
|
||||||
}
|
|
||||||
|
|
||||||
public PropertyModifier getPrm()
|
|
||||||
{
|
|
||||||
return prm;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected byte[] toByteArray()
|
public int getFilePosition() {
|
||||||
{
|
return fc;
|
||||||
// set up the fc
|
|
||||||
int tempFc = fc;
|
|
||||||
if (!unicode)
|
|
||||||
{
|
|
||||||
tempFc *= 2;
|
|
||||||
tempFc |= (0x40000000);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int offset = 0;
|
public void setFilePosition(int pos) {
|
||||||
byte[] buf = new byte[8];
|
fc = pos;
|
||||||
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 boolean isUnicode() {
|
||||||
|
return unicode;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static int getSizeInBytes()
|
|
||||||
{
|
|
||||||
return 8;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int hashCode()
|
public int hashCode() {
|
||||||
{
|
|
||||||
final int prime = 31;
|
final int prime = 31;
|
||||||
int result = 1;
|
int result = 1;
|
||||||
result = prime * result + descriptor;
|
result = prime * result + descriptor;
|
||||||
|
@ -149,35 +97,66 @@ public final class PieceDescriptor
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return charset to use if this is not a Unicode PieceDescriptor
|
||||||
|
* this can be <code>null</code>
|
||||||
|
*/
|
||||||
|
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
|
@Override
|
||||||
public boolean equals( Object obj )
|
public boolean equals(Object obj) {
|
||||||
{
|
if (this == obj)
|
||||||
if ( this == obj )
|
|
||||||
return true;
|
return true;
|
||||||
if ( obj == null )
|
if (obj == null)
|
||||||
return false;
|
return false;
|
||||||
if ( getClass() != obj.getClass() )
|
if (getClass() != obj.getClass())
|
||||||
return false;
|
return false;
|
||||||
PieceDescriptor other = (PieceDescriptor) obj;
|
PieceDescriptor other = (PieceDescriptor) obj;
|
||||||
if ( descriptor != other.descriptor )
|
if (descriptor != other.descriptor)
|
||||||
return false;
|
return false;
|
||||||
if ( prm == null )
|
if (prm == null) {
|
||||||
{
|
if (other.prm != null)
|
||||||
if ( other.prm != null )
|
|
||||||
return false;
|
return false;
|
||||||
}
|
} else if (!prm.equals(other.prm))
|
||||||
else if ( !prm.equals( other.prm ) )
|
|
||||||
return false;
|
return false;
|
||||||
if ( unicode != other.unicode )
|
if (unicode != other.unicode)
|
||||||
return false;
|
return false;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString()
|
public String toString() {
|
||||||
{
|
|
||||||
return "PieceDescriptor (pos: " + getFilePosition() + "; "
|
return "PieceDescriptor (pos: " + getFilePosition() + "; "
|
||||||
+ ( isUnicode() ? "unicode" : "non-unicode" ) + "; prm: "
|
+ (isUnicode() ? "unicode" : "non-unicode") + "; prm: "
|
||||||
+ getPrm() + ")";
|
+ getPrm() + ")";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -37,8 +37,8 @@ import static org.junit.Assert.*;
|
||||||
import static org.junit.Assume.assumeTrue;
|
import static org.junit.Assume.assumeTrue;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Common superclass for testing {@link org.apache.poi.xssf.usermodel.XSSFCell} and
|
* Common superclass for testing {@link HSSFCell}, org.apache.poi.xssf.usermodel.XSSFCell and
|
||||||
* {@link org.apache.poi.hssf.usermodel.HSSFCell}
|
* org.apache.poi.xssf.streaming.SXSSFCell
|
||||||
*/
|
*/
|
||||||
public abstract class BaseTestSheet {
|
public abstract class BaseTestSheet {
|
||||||
private static final int ROW_COUNT = 40000;
|
private static final int ROW_COUNT = 40000;
|
||||||
|
@ -417,7 +417,7 @@ public abstract class BaseTestSheet {
|
||||||
//should exist now!
|
//should exist now!
|
||||||
assertTrue("there isn't more than one merged region in there", 1 <= sheet.getNumMergedRegions());
|
assertTrue("there isn't more than one merged region in there", 1 <= sheet.getNumMergedRegions());
|
||||||
region = sheet.getMergedRegion(0);
|
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();
|
wb.close();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue