fix eclipse warning - mostly generics cosmetics

close resources in tests
junit4 conversions
convert spreadsheet based formular test to junit parameterized tests

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1702659 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Andreas Beeker 2015-09-12 18:45:07 +00:00
parent 768060a8ff
commit 5f94d8b533
59 changed files with 1162 additions and 1019 deletions

View File

@ -25,6 +25,7 @@ import javax.swing.table.*;
import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFCell;
/** /**
@ -43,7 +44,7 @@ public class SVTableModel extends AbstractTableModel {
public SVTableModel(HSSFSheet st) { public SVTableModel(HSSFSheet st) {
this.st = st; this.st = st;
Iterator i = st.rowIterator(); Iterator<Row> i = st.rowIterator();
while (i.hasNext()) { while (i.hasNext()) {
HSSFRow row = (HSSFRow)i.next(); HSSFRow row = (HSSFRow)i.next();
@ -69,7 +70,7 @@ public class SVTableModel extends AbstractTableModel {
return st.getLastRowNum() + 1; return st.getLastRowNum() + 1;
} }
public Class getColumnClass(int c) { public Class<?> getColumnClass(int c) {
return HSSFCell.class; return HSSFCell.class;
} }

View File

@ -43,18 +43,18 @@ public class ExtendableTreeCellRenderer implements TreeCellRenderer
/** /**
* <p>Maps classes to renderers.</p> * <p>Maps classes to renderers.</p>
*/ */
protected Map renderers; protected Map<Class<?>,TreeCellRenderer> renderers;
public ExtendableTreeCellRenderer() public ExtendableTreeCellRenderer()
{ {
renderers = new HashMap(); renderers = new HashMap<Class<?>,TreeCellRenderer>();
register(Object.class, new DefaultTreeCellRenderer() register(Object.class, new DefaultTreeCellRenderer()
{ {
public Component getTreeCellRendererComponent public Component getTreeCellRendererComponent
(JTree tree, Object value, boolean selected, (JTree tree, Object value, boolean selectedCell,
boolean expanded, boolean leaf, int row, boolean hasFocus) boolean expanded, boolean leaf, int row, boolean hasCellFocus)
{ {
final String s = value.toString(); final String s = value.toString();
final JLabel l = new JLabel(s + " "); final JLabel l = new JLabel(s + " ");
@ -73,7 +73,7 @@ public class ExtendableTreeCellRenderer implements TreeCellRenderer
/** /**
* <p>Registers a renderer for a class.</p> * <p>Registers a renderer for a class.</p>
**/ **/
public void register(final Class c, final TreeCellRenderer renderer) public void register(final Class<?> c, final TreeCellRenderer renderer)
{ {
renderers.put(c, renderer); renderers.put(c, renderer);
} }
@ -84,7 +84,7 @@ public class ExtendableTreeCellRenderer implements TreeCellRenderer
* <p>Unregisters a renderer for a class. The renderer for the * <p>Unregisters a renderer for a class. The renderer for the
* {@link Object} class cannot be unregistered.</p> * {@link Object} class cannot be unregistered.</p>
*/ */
public void unregister(final Class c) public void unregister(final Class<?> c)
{ {
if (c == Object.class) if (c == Object.class)
throw new IllegalArgumentException throw new IllegalArgumentException
@ -127,15 +127,15 @@ public class ExtendableTreeCellRenderer implements TreeCellRenderer
/** /**
* <p>Find the renderer for the specified class.</p> * <p>Find the renderer for the specified class.</p>
*/ */
protected TreeCellRenderer findRenderer(final Class c) protected TreeCellRenderer findRenderer(final Class<?> c)
{ {
final TreeCellRenderer r = (TreeCellRenderer) renderers.get(c); final TreeCellRenderer r = renderers.get(c);
if (r != null) if (r != null)
/* The class has a renderer. */ /* The class has a renderer. */
return r; return r;
/* The class has no renderer, try the superclass, if any. */ /* The class has no renderer, try the superclass, if any. */
final Class superclass = c.getSuperclass(); final Class<?> superclass = c.getSuperclass();
if (superclass != null) { if (superclass != null) {
return findRenderer(superclass); return findRenderer(superclass);
} }

View File

@ -89,19 +89,16 @@ public class POIBrowser extends JFrame
for (int i = 0; i < args.length; i++) for (int i = 0; i < args.length; i++)
{ {
final String filename = args[i]; final String filename = args[i];
try try {
{ FileInputStream fis = new FileInputStream(filename);
POIFSReader r = new POIFSReader(); POIFSReader r = new POIFSReader();
r.registerListener(new TreeReaderListener(filename, rootNode)); r.registerListener(new TreeReaderListener(filename, rootNode));
r.read(new FileInputStream(filename)); r.read(fis);
fis.close();
displayedFiles++; displayedFiles++;
} } catch (IOException ex) {
catch (IOException ex)
{
System.err.println(filename + ": " + ex); System.err.println(filename + ": " + ex);
} } catch (Exception t) {
catch (Exception t)
{
System.err.println("Unexpected exception while reading \"" + System.err.println("Unexpected exception while reading \"" +
filename + "\":"); filename + "\":");
t.printStackTrace(System.err); t.printStackTrace(System.err);

View File

@ -45,11 +45,11 @@ public class PropertySetDescriptorRenderer extends DocumentDescriptorRenderer
public Component getTreeCellRendererComponent(final JTree tree, public Component getTreeCellRendererComponent(final JTree tree,
final Object value, final Object value,
final boolean selected, final boolean selectedCell,
final boolean expanded, final boolean expanded,
final boolean leaf, final boolean leaf,
final int row, final int row,
final boolean hasFocus) final boolean hasCellFocus)
{ {
final PropertySetDescriptor d = (PropertySetDescriptor) final PropertySetDescriptor d = (PropertySetDescriptor)
((DefaultMutableTreeNode) value).getUserObject(); ((DefaultMutableTreeNode) value).getUserObject();
@ -96,7 +96,7 @@ public class PropertySetDescriptorRenderer extends DocumentDescriptorRenderer
text.append("\nSecurity: " + si.getSecurity()); text.append("\nSecurity: " + si.getSecurity());
} }
if (selected) if (selectedCell)
Util.invert(text); Util.invert(text);
return p; return p;
} }
@ -107,13 +107,13 @@ public class PropertySetDescriptorRenderer extends DocumentDescriptorRenderer
* <p>Returns a string representation of a list of {@link * <p>Returns a string representation of a list of {@link
* Section}s.</p> * Section}s.</p>
*/ */
protected String sectionsToString(final List sections) protected String sectionsToString(final List<Section> sections)
{ {
final StringBuffer b = new StringBuffer(); final StringBuffer b = new StringBuffer();
int count = 1; int count = 1;
for (Iterator i = sections.iterator(); i.hasNext();) for (Iterator<Section> i = sections.iterator(); i.hasNext();)
{ {
Section s = (Section) i.next(); Section s = i.next();
String d = toString(s, "Section " + count++); String d = toString(s, "Section " + count++);
b.append(d); b.append(d);
} }

View File

@ -254,12 +254,12 @@ public final class InternalSheet {
if (recSid == BOFRecord.sid) { if (recSid == BOFRecord.sid) {
ChartSubstreamRecordAggregate chartAgg = new ChartSubstreamRecordAggregate(rs); ChartSubstreamRecordAggregate chartAgg = new ChartSubstreamRecordAggregate(rs);
if (false) { // if (false) {
// TODO - would like to keep the chart aggregate packed, but one unit test needs attention // // TODO - would like to keep the chart aggregate packed, but one unit test needs attention
records.add(chartAgg); // records.add(chartAgg);
} else { // } else {
spillAggregate(chartAgg, records); spillAggregate(chartAgg, records);
} // }
continue; continue;
} }

View File

@ -62,14 +62,14 @@ public abstract class Record extends RecordBase {
@Override @Override
public Object clone() { public Object clone() {
if (false) { // if (false) {
// TODO - implement clone in a more standardised way // // TODO - implement clone in a more standardised way
try { // try {
return super.clone(); // return super.clone();
} catch (CloneNotSupportedException e) { // } catch (CloneNotSupportedException e) {
throw new RuntimeException(e); // throw new RuntimeException(e);
} // }
} // }
throw new RuntimeException("The class "+getClass().getName()+" needs to define a clone method"); throw new RuntimeException("The class "+getClass().getName()+" needs to define a clone method");
} }

View File

@ -54,9 +54,9 @@ public class HSSFFormulaEvaluator implements FormulaEvaluator, WorkbookEvaluator
@Deprecated @Deprecated
public HSSFFormulaEvaluator(HSSFSheet sheet, HSSFWorkbook workbook) { public HSSFFormulaEvaluator(HSSFSheet sheet, HSSFWorkbook workbook) {
this(workbook); this(workbook);
if (false) { // if (false) {
sheet.toString(); // suppress unused parameter compiler warning // sheet.toString(); // suppress unused parameter compiler warning
} // }
this._book = workbook; this._book = workbook;
} }
public HSSFFormulaEvaluator(HSSFWorkbook workbook) { public HSSFFormulaEvaluator(HSSFWorkbook workbook) {
@ -122,9 +122,9 @@ public class HSSFFormulaEvaluator implements FormulaEvaluator, WorkbookEvaluator
@Deprecated @Deprecated
public void setCurrentRow(HSSFRow row) { public void setCurrentRow(HSSFRow row) {
// do nothing // do nothing
if (false) { // if (false) {
row.getClass(); // suppress unused parameter compiler warning // row.getClass(); // suppress unused parameter compiler warning
} // }
} }
/** /**

View File

@ -90,14 +90,14 @@ public class HSSFColor implements Color {
// most colors don't have a second index // most colors don't have a second index
continue; continue;
} }
if (result.containsKey(index2)) { // if (result.containsKey(index2)) {
if (false) { // Many of the second indexes clash // if (false) { // Many of the second indexes clash
HSSFColor prevColor = (HSSFColor)result.get(index2); // HSSFColor prevColor = (HSSFColor)result.get(index2);
throw new RuntimeException("Dup color index (" + index2 // throw new RuntimeException("Dup color index (" + index2
+ ") for colors (" + prevColor.getClass().getName() // + ") for colors (" + prevColor.getClass().getName()
+ "),(" + color.getClass().getName() + ")"); // + "),(" + color.getClass().getName() + ")");
} // }
} // }
result.put(index2, color); result.put(index2, color);
} }
return result; return result;

View File

@ -36,20 +36,20 @@ class POIFSReaderRegistry
{ {
// the POIFSReaderListeners who listen to all POIFSReaderEvents // the POIFSReaderListeners who listen to all POIFSReaderEvents
private Set omnivorousListeners; private Set<POIFSReaderListener> omnivorousListeners;
// Each mapping in this Map has a key consisting of a // Each mapping in this Map has a key consisting of a
// POIFSReaderListener and a value cosisting of a Set of // POIFSReaderListener and a value cosisting of a Set of
// DocumentDescriptors for the documents that POIFSReaderListener // DocumentDescriptors for the documents that POIFSReaderListener
// is interested in; used to efficiently manage the registry // is interested in; used to efficiently manage the registry
private Map selectiveListeners; private Map<POIFSReaderListener, Set<DocumentDescriptor>> selectiveListeners;
// Each mapping in this Map has a key consisting of a // Each mapping in this Map has a key consisting of a
// DocumentDescriptor and a value consisting of a Set of // DocumentDescriptor and a value consisting of a Set of
// POIFSReaderListeners for the document matching that // POIFSReaderListeners for the document matching that
// DocumentDescriptor; used when a document is found, to quickly // DocumentDescriptor; used when a document is found, to quickly
// get the listeners interested in that document // get the listeners interested in that document
private Map chosenDocumentDescriptors; private Map<DocumentDescriptor,Set<POIFSReaderListener>> chosenDocumentDescriptors;
/** /**
* Construct the registry * Construct the registry
@ -57,9 +57,9 @@ class POIFSReaderRegistry
POIFSReaderRegistry() POIFSReaderRegistry()
{ {
omnivorousListeners = new HashSet(); omnivorousListeners = new HashSet<POIFSReaderListener>();
selectiveListeners = new HashMap(); selectiveListeners = new HashMap<POIFSReaderListener, Set<DocumentDescriptor>>();
chosenDocumentDescriptors = new HashMap(); chosenDocumentDescriptors = new HashMap<DocumentDescriptor,Set<POIFSReaderListener>>();
} }
/** /**
@ -79,13 +79,13 @@ class POIFSReaderRegistry
// not an omnivorous listener (if it was, this method is a // not an omnivorous listener (if it was, this method is a
// no-op) // no-op)
Set descriptors = ( Set ) selectiveListeners.get(listener); Set<DocumentDescriptor> descriptors = selectiveListeners.get(listener);
if (descriptors == null) if (descriptors == null)
{ {
// this listener has not registered before // this listener has not registered before
descriptors = new HashSet(); descriptors = new HashSet<DocumentDescriptor>();
selectiveListeners.put(listener, descriptors); selectiveListeners.put(listener, descriptors);
} }
DocumentDescriptor descriptor = new DocumentDescriptor(path, DocumentDescriptor descriptor = new DocumentDescriptor(path,
@ -97,14 +97,14 @@ class POIFSReaderRegistry
// this listener wasn't already listening for this // this listener wasn't already listening for this
// document -- add the listener to the set of // document -- add the listener to the set of
// listeners for this document // listeners for this document
Set listeners = Set<POIFSReaderListener> listeners =
( Set ) chosenDocumentDescriptors.get(descriptor); chosenDocumentDescriptors.get(descriptor);
if (listeners == null) if (listeners == null)
{ {
// nobody was listening for this document before // nobody was listening for this document before
listeners = new HashSet(); listeners = new HashSet<POIFSReaderListener>();
chosenDocumentDescriptors.put(descriptor, listeners); chosenDocumentDescriptors.put(descriptor, listeners);
} }
listeners.add(listener); listeners.add(listener);
@ -141,31 +141,30 @@ class POIFSReaderRegistry
* @return an Iterator POIFSReaderListeners; may be empty * @return an Iterator POIFSReaderListeners; may be empty
*/ */
Iterator getListeners(final POIFSDocumentPath path, final String name) Iterator<POIFSReaderListener> getListeners(final POIFSDocumentPath path, final String name)
{ {
Set rval = new HashSet(omnivorousListeners); Set<POIFSReaderListener> rval = new HashSet<POIFSReaderListener>(omnivorousListeners);
Set selectiveListeners = Set<POIFSReaderListener> selectiveListenersInner =
( Set ) chosenDocumentDescriptors.get(new DocumentDescriptor(path, chosenDocumentDescriptors.get(new DocumentDescriptor(path, name));
name));
if (selectiveListeners != null) if (selectiveListenersInner != null)
{ {
rval.addAll(selectiveListeners); rval.addAll(selectiveListenersInner);
} }
return rval.iterator(); return rval.iterator();
} }
private void removeSelectiveListener(final POIFSReaderListener listener) private void removeSelectiveListener(final POIFSReaderListener listener)
{ {
Set selectedDescriptors = ( Set ) selectiveListeners.remove(listener); Set<DocumentDescriptor> selectedDescriptors = selectiveListeners.remove(listener);
if (selectedDescriptors != null) if (selectedDescriptors != null)
{ {
Iterator iter = selectedDescriptors.iterator(); Iterator<DocumentDescriptor> iter = selectedDescriptors.iterator();
while (iter.hasNext()) while (iter.hasNext())
{ {
dropDocument(listener, ( DocumentDescriptor ) iter.next()); dropDocument(listener, iter.next());
} }
} }
} }
@ -173,7 +172,7 @@ class POIFSReaderRegistry
private void dropDocument(final POIFSReaderListener listener, private void dropDocument(final POIFSReaderListener listener,
final DocumentDescriptor descriptor) final DocumentDescriptor descriptor)
{ {
Set listeners = ( Set ) chosenDocumentDescriptors.get(descriptor); Set<POIFSReaderListener> listeners = chosenDocumentDescriptors.get(descriptor);
listeners.remove(listener); listeners.remove(listener);
if (listeners.size() == 0) if (listeners.size() == 0)

View File

@ -29,7 +29,9 @@ import java.util.regex.Pattern;
* @author Yegor Kozlov * @author Yegor Kozlov
*/ */
public class ExpressionParser { public class ExpressionParser {
static final HashMap<String, Class> impls = new HashMap<String, Class>(); static final HashMap<String, Class<? extends Expression>> impls =
new HashMap<String, Class<? extends Expression>>();
static { static {
impls.put("\\*/ +([\\-\\w]+) +([\\-\\w]+) +([\\-\\w]+)", MultiplyDivideExpression.class); impls.put("\\*/ +([\\-\\w]+) +([\\-\\w]+) +([\\-\\w]+)", MultiplyDivideExpression.class);
impls.put("\\+- +([\\-\\w]+) +([\\-\\w]+) +([\\-\\w]+)( 0)?", AddSubtractExpression.class); impls.put("\\+- +([\\-\\w]+) +([\\-\\w]+) +([\\-\\w]+)( 0)?", AddSubtractExpression.class);
@ -56,9 +58,9 @@ public class ExpressionParser {
Pattern ptrn = Pattern.compile(regexp); Pattern ptrn = Pattern.compile(regexp);
Matcher m = ptrn.matcher(str); Matcher m = ptrn.matcher(str);
if(m.matches()) { if(m.matches()) {
Class c = impls.get(regexp); Class<? extends Expression> c = impls.get(regexp);
try { try {
return (Expression)c.getDeclaredConstructor(Matcher.class).newInstance(m); return c.getDeclaredConstructor(Matcher.class).newInstance(m);
} catch (Exception e){ } catch (Exception e){
throw new RuntimeException(e); throw new RuntimeException(e);
} }

View File

@ -44,19 +44,19 @@ public class Formula {
private Formula(byte[] byteEncoding, int encodedTokenLen) { private Formula(byte[] byteEncoding, int encodedTokenLen) {
_byteEncoding = byteEncoding; _byteEncoding = byteEncoding;
_encodedTokenLen = encodedTokenLen; _encodedTokenLen = encodedTokenLen;
if (false) { // set to true to eagerly check Ptg decoding // if (false) { // set to true to eagerly check Ptg decoding
LittleEndianByteArrayInputStream in = new LittleEndianByteArrayInputStream(byteEncoding); // LittleEndianByteArrayInputStream in = new LittleEndianByteArrayInputStream(byteEncoding);
Ptg.readTokens(encodedTokenLen, in); // Ptg.readTokens(encodedTokenLen, in);
int nUnusedBytes = _byteEncoding.length - in.getReadIndex(); // int nUnusedBytes = _byteEncoding.length - in.getReadIndex();
if (nUnusedBytes > 0) { // if (nUnusedBytes > 0) {
// TODO - this seems to occur when IntersectionPtg is present // // TODO - this seems to occur when IntersectionPtg is present
// This example file "IntersectionPtg.xls" // // This example file "IntersectionPtg.xls"
// used by test: TestIntersectionPtg.testReading() // // used by test: TestIntersectionPtg.testReading()
// has 10 bytes unused at the end of the formula // // has 10 bytes unused at the end of the formula
// 10 extra bytes are just 0x01 and 0x00 // // 10 extra bytes are just 0x01 and 0x00
System.out.println(nUnusedBytes + " unused bytes at end of formula"); // System.out.println(nUnusedBytes + " unused bytes at end of formula");
} // }
} // }
} }
/** /**
* Convenience method for {@link #read(int, LittleEndianInput, int)} * Convenience method for {@link #read(int, LittleEndianInput, int)}

View File

@ -130,28 +130,28 @@ public final class OperandResolver {
private static ValueEval chooseSingleElementFromAreaInternal(AreaEval ae, private static ValueEval chooseSingleElementFromAreaInternal(AreaEval ae,
int srcCellRow, int srcCellCol) throws EvaluationException { int srcCellRow, int srcCellCol) throws EvaluationException {
if(false) { // if(false) {
// this is too simplistic // // this is too simplistic
if(ae.containsRow(srcCellRow) && ae.containsColumn(srcCellCol)) { // if(ae.containsRow(srcCellRow) && ae.containsColumn(srcCellCol)) {
throw new EvaluationException(ErrorEval.CIRCULAR_REF_ERROR); // throw new EvaluationException(ErrorEval.CIRCULAR_REF_ERROR);
} // }
/* // /*
Circular references are not dealt with directly here, but it is worth noting some issues. // Circular references are not dealt with directly here, but it is worth noting some issues.
//
ANY one of the return statements in this method could return a cell that is identical // ANY one of the return statements in this method could return a cell that is identical
to the one immediately being evaluated. The evaluating cell is identified by srcCellRow, // to the one immediately being evaluated. The evaluating cell is identified by srcCellRow,
srcCellRow AND sheet. The sheet is not available in any nearby calling method, so that's // srcCellRow AND sheet. The sheet is not available in any nearby calling method, so that's
one reason why circular references are not easy to detect here. (The sheet of the returned // one reason why circular references are not easy to detect here. (The sheet of the returned
cell can be obtained from ae if it is an Area3DEval.) // cell can be obtained from ae if it is an Area3DEval.)
//
Another reason there's little value in attempting to detect circular references here is // Another reason there's little value in attempting to detect circular references here is
that only direct circular references could be detected. If the cycle involved two or more // that only direct circular references could be detected. If the cycle involved two or more
cells this method could not detect it. // cells this method could not detect it.
//
Logic to detect evaluation cycles of all kinds has been coded in EvaluationCycleDetector // Logic to detect evaluation cycles of all kinds has been coded in EvaluationCycleDetector
(and FormulaEvaluator). // (and FormulaEvaluator).
*/ // */
} // }
if (ae.isColumn()) { if (ae.isColumn()) {
if(ae.isRow()) { if(ae.isRow()) {

View File

@ -17,25 +17,27 @@
package org.apache.poi.openxml4j.opc; package org.apache.poi.openxml4j.opc;
import static org.junit.Assert.assertTrue;
import java.io.File; import java.io.File;
import java.util.TreeMap; import java.util.TreeMap;
import org.apache.poi.openxml4j.opc.internal.FileHelper; import org.apache.poi.openxml4j.opc.internal.FileHelper;
import org.junit.Test;
import junit.framework.TestCase;
/** /**
* Test TestFileHelper class. * Test TestFileHelper class.
* *
* @author Julien Chable * @author Julien Chable
*/ */
public final class TestFileHelper extends TestCase { public final class TestFileHelper {
/** /**
* TODO - use simple JDK methods on {@link File} instead:<br/> * TODO - use simple JDK methods on {@link File} instead:<br/>
* {@link File#getParentFile()} instead of {@link FileHelper#getDirectory(File) * {@link File#getParentFile()} instead of {@link FileHelper#getDirectory(File)
* {@link File#getName()} instead of {@link FileHelper#getFilename(File) * {@link File#getName()} instead of {@link FileHelper#getFilename(File)
*/ */
@Test
public void testGetDirectory() { public void testGetDirectory() {
TreeMap<String, String> expectedValue = new TreeMap<String, String>(); TreeMap<String, String> expectedValue = new TreeMap<String, String>();
expectedValue.put("/dir1/test.doc", "/dir1"); expectedValue.put("/dir1/test.doc", "/dir1");
@ -45,11 +47,11 @@ public final class TestFileHelper extends TestCase {
File f1 = new File(expectedValue.get(filename)); File f1 = new File(expectedValue.get(filename));
File f2 = FileHelper.getDirectory(new File(filename)); File f2 = FileHelper.getDirectory(new File(filename));
if (false) { // if (false) {
// YK: The original version asserted expected values against File#getAbsolutePath(): // // YK: The original version asserted expected values against File#getAbsolutePath():
assertTrue(expectedValue.get(filename).equalsIgnoreCase(f2.getAbsolutePath())); // assertTrue(expectedValue.get(filename).equalsIgnoreCase(f2.getAbsolutePath()));
// This comparison is platform dependent. A better approach is below // // This comparison is platform dependent. A better approach is below
} // }
assertTrue(f1.equals(f2)); assertTrue(f1.equals(f2));
} }
} }

View File

@ -16,6 +16,8 @@
==================================================================== */ ==================================================================== */
package org.apache.poi.xssf.streaming; package org.apache.poi.xssf.streaming;
import static org.junit.Assert.assertEquals;
import java.util.List; import java.util.List;
import org.apache.poi.ss.usermodel.BaseTestDataValidation; import org.apache.poi.ss.usermodel.BaseTestDataValidation;
@ -25,6 +27,7 @@ import org.apache.poi.ss.usermodel.DataValidationHelper;
import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.util.CellRangeAddressList; import org.apache.poi.ss.util.CellRangeAddressList;
import org.apache.poi.xssf.SXSSFITestDataProvider; import org.apache.poi.xssf.SXSSFITestDataProvider;
import org.junit.Test;
public class TestSXSSFDataValidation extends BaseTestDataValidation { public class TestSXSSFDataValidation extends BaseTestDataValidation {
@ -32,6 +35,7 @@ public class TestSXSSFDataValidation extends BaseTestDataValidation {
super(SXSSFITestDataProvider.instance); super(SXSSFITestDataProvider.instance);
} }
@Test
public void test53965() throws Exception { public void test53965() throws Exception {
SXSSFWorkbook wb = new SXSSFWorkbook(); SXSSFWorkbook wb = new SXSSFWorkbook();
try { try {

View File

@ -16,6 +16,8 @@
==================================================================== */ ==================================================================== */
package org.apache.poi.xssf.usermodel; package org.apache.poi.xssf.usermodel;
import static org.junit.Assert.assertEquals;
import java.io.IOException; import java.io.IOException;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.List; import java.util.List;
@ -34,6 +36,7 @@ import org.apache.poi.ss.util.CellRangeAddressList;
import org.apache.poi.ss.util.CellReference; import org.apache.poi.ss.util.CellReference;
import org.apache.poi.xssf.XSSFITestDataProvider; import org.apache.poi.xssf.XSSFITestDataProvider;
import org.apache.poi.xssf.XSSFTestDataSamples; import org.apache.poi.xssf.XSSFTestDataSamples;
import org.junit.Test;
public class TestXSSFDataValidation extends BaseTestDataValidation { public class TestXSSFDataValidation extends BaseTestDataValidation {
@ -41,9 +44,10 @@ public class TestXSSFDataValidation extends BaseTestDataValidation {
super(XSSFITestDataProvider.instance); super(XSSFITestDataProvider.instance);
} }
@Test
public void testAddValidations() throws Exception { public void testAddValidations() throws Exception {
XSSFWorkbook workbook = XSSFTestDataSamples.openSampleWorkbook("DataValidations-49244.xlsx"); XSSFWorkbook wb1 = XSSFTestDataSamples.openSampleWorkbook("DataValidations-49244.xlsx");
Sheet sheet = workbook.getSheetAt(0); Sheet sheet = wb1.getSheetAt(0);
List<XSSFDataValidation> dataValidations = ((XSSFSheet)sheet).getDataValidations(); List<XSSFDataValidation> dataValidations = ((XSSFSheet)sheet).getDataValidations();
/** /**
@ -232,9 +236,11 @@ public class TestXSSFDataValidation extends BaseTestDataValidation {
} }
} }
workbook = XSSFTestDataSamples.writeOutAndReadBack(workbook); XSSFWorkbook wb2 = XSSFTestDataSamples.writeOutAndReadBack(wb1);
Sheet sheetAt = workbook.getSheetAt(0); wb1.close();
Sheet sheetAt = wb2.getSheetAt(0);
assertEquals(lastKnownNumValidations,((XSSFSheet)sheetAt).getDataValidations().size()); assertEquals(lastKnownNumValidations,((XSSFSheet)sheetAt).getDataValidations().size());
wb2.close();
} }
protected void setOtherValidationParameters(DataValidation validation) { protected void setOtherValidationParameters(DataValidation validation) {
@ -247,6 +253,7 @@ public class TestXSSFDataValidation extends BaseTestDataValidation {
validation.setSuppressDropDownArrow(yesNo); validation.setSuppressDropDownArrow(yesNo);
} }
@Test
public void test53965() throws Exception { public void test53965() throws Exception {
XSSFWorkbook wb = new XSSFWorkbook(); XSSFWorkbook wb = new XSSFWorkbook();
try { try {
@ -271,6 +278,7 @@ public class TestXSSFDataValidation extends BaseTestDataValidation {
} }
} }
@Test
public void testDefaultAllowBlank() throws IOException { public void testDefaultAllowBlank() throws IOException {
XSSFWorkbook wb = new XSSFWorkbook(); XSSFWorkbook wb = new XSSFWorkbook();
try { try {
@ -286,6 +294,7 @@ public class TestXSSFDataValidation extends BaseTestDataValidation {
} }
} }
@Test
public void testSetAllowBlankToFalse() throws IOException { public void testSetAllowBlankToFalse() throws IOException {
XSSFWorkbook wb = new XSSFWorkbook(); XSSFWorkbook wb = new XSSFWorkbook();
try { try {
@ -303,6 +312,7 @@ public class TestXSSFDataValidation extends BaseTestDataValidation {
} }
} }
@Test
public void testSetAllowBlankToTrue() throws IOException { public void testSetAllowBlankToTrue() throws IOException {
XSSFWorkbook wb = new XSSFWorkbook(); XSSFWorkbook wb = new XSSFWorkbook();
try { try {

View File

@ -18,7 +18,11 @@
package org.apache.poi.xssf.usermodel; package org.apache.poi.xssf.usermodel;
import org.apache.poi.xssf.XSSFTestDataSamples; import org.apache.poi.xssf.XSSFTestDataSamples;
import org.junit.Test;
import org.apache.poi.xssf.XSSFITestDataProvider; import org.apache.poi.xssf.XSSFITestDataProvider;
import static org.junit.Assert.*;
import org.apache.poi.ss.usermodel.BaseTestNamedRange; import org.apache.poi.ss.usermodel.BaseTestNamedRange;
import org.apache.poi.ss.util.CellRangeAddress; import org.apache.poi.ss.util.CellRangeAddress;
@ -32,7 +36,8 @@ public final class TestXSSFName extends BaseTestNamedRange {
} }
//TODO combine testRepeatingRowsAndColums() for HSSF and XSSF //TODO combine testRepeatingRowsAndColums() for HSSF and XSSF
public void testRepeatingRowsAndColums() { @Test
public void testRepeatingRowsAndColums() throws Exception {
// First test that setting RR&C for same sheet more than once only creates a // First test that setting RR&C for same sheet more than once only creates a
// single Print_Titles built-in record // single Print_Titles built-in record
XSSFWorkbook wb = new XSSFWorkbook(); XSSFWorkbook wb = new XSSFWorkbook();
@ -69,7 +74,8 @@ public final class TestXSSFName extends BaseTestNamedRange {
// Save and re-open // Save and re-open
XSSFWorkbook nwb = XSSFTestDataSamples.writeOutAndReadBack(wb); XSSFWorkbook nwb = XSSFTestDataSamples.writeOutAndReadBack(wb);
wb.close();
assertEquals(1, nwb.getNumberOfNames()); assertEquals(1, nwb.getNumberOfNames());
nr1 = nwb.getNameAt(0); nr1 = nwb.getNameAt(0);
@ -90,5 +96,6 @@ public final class TestXSSFName extends BaseTestNamedRange {
sheet2.setRepeatingRows(null); sheet2.setRepeatingRows(null);
sheet2.setRepeatingColumns(null); sheet2.setRepeatingColumns(null);
nwb.close();
} }
} }

View File

@ -244,7 +244,7 @@ public final class SlideShowRecordDumper {
String rHexType = reverseHex(hexType); String rHexType = reverseHex(hexType);
// Grab the hslf.record type // Grab the hslf.record type
Class c = r.getClass(); Class<? extends Record> c = r.getClass();
String cname = c.toString(); String cname = c.toString();
if(cname.startsWith("class ")) { if(cname.startsWith("class ")) {
cname = cname.substring(6); cname = cname.substring(6);

View File

@ -17,22 +17,18 @@
package org.apache.poi.hssf.eventusermodel; package org.apache.poi.hssf.eventusermodel;
import junit.framework.Test; import org.junit.runner.RunWith;
import junit.framework.TestSuite; import org.junit.runners.Suite;
/** /**
* Collects all tests for <tt>org.apache.poi.hssf.eventusermodel</tt>. * Collects all tests for <tt>org.apache.poi.hssf.eventusermodel</tt>.
*
* @author Josh Micich
*/ */
@RunWith(Suite.class)
@Suite.SuiteClasses({
TestEventWorkbookBuilder.class,
TestFormatTrackingHSSFListener.class,
TestHSSFEventFactory.class,
TestMissingRecordAwareHSSFListener.class
})
public class AllEventUserModelTests { public class AllEventUserModelTests {
public static Test suite() {
TestSuite result = new TestSuite(AllEventUserModelTests.class.getName());
result.addTestSuite(TestEventWorkbookBuilder.class);
result.addTestSuite(TestFormatTrackingHSSFListener.class);
result.addTestSuite(TestHSSFEventFactory.class);
result.addTestSuite(TestMissingRecordAwareHSSFListener.class);
return result;
}
} }

View File

@ -16,23 +16,25 @@
==================================================================== */ ==================================================================== */
package org.apache.poi.hssf.eventusermodel; package org.apache.poi.hssf.eventusermodel;
import java.io.IOException; import static org.junit.Assert.assertEquals;
import java.io.InputStream; import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import java.io.File;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import junit.framework.TestCase;
import org.apache.poi.hssf.HSSFTestDataSamples; import org.apache.poi.hssf.HSSFTestDataSamples;
import org.apache.poi.hssf.record.CellValueRecordInterface; import org.apache.poi.hssf.record.CellValueRecordInterface;
import org.apache.poi.hssf.record.FormulaRecord; import org.apache.poi.hssf.record.FormulaRecord;
import org.apache.poi.hssf.record.NumberRecord; import org.apache.poi.hssf.record.NumberRecord;
import org.apache.poi.hssf.record.Record; import org.apache.poi.hssf.record.Record;
import org.apache.poi.poifs.filesystem.POIFSFileSystem; import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import org.junit.Test;
/** /**
* Tests for FormatTrackingHSSFListener * Tests for FormatTrackingHSSFListener
*/ */
public final class TestFormatTrackingHSSFListener extends TestCase { public final class TestFormatTrackingHSSFListener {
private FormatTrackingHSSFListener listener; private FormatTrackingHSSFListener listener;
private MockHSSFListener mockListen; private MockHSSFListener mockListen;
@ -42,16 +44,14 @@ public final class TestFormatTrackingHSSFListener extends TestCase {
listener = new FormatTrackingHSSFListener(mockListen); listener = new FormatTrackingHSSFListener(mockListen);
req.addListenerForAllRecords(listener); req.addListenerForAllRecords(listener);
File file = HSSFTestDataSamples.getSampleFile(filename);
HSSFEventFactory factory = new HSSFEventFactory(); HSSFEventFactory factory = new HSSFEventFactory();
try { POIFSFileSystem fs = new POIFSFileSystem(file);
InputStream is = HSSFTestDataSamples.openSampleFileStream(filename); factory.processWorkbookEvents(req, fs);
POIFSFileSystem fs = new POIFSFileSystem(is); fs.close();
factory.processWorkbookEvents(req, fs);
} catch (IOException e) {
throw new RuntimeException(e);
}
} }
@Test
public void testFormats() throws Exception { public void testFormats() throws Exception {
processFile("MissingBits.xls"); processFile("MissingBits.xls");
@ -68,6 +68,7 @@ public final class TestFormatTrackingHSSFListener extends TestCase {
* exceptions thrown, but in future we might also * exceptions thrown, but in future we might also
* want to check the exact strings! * want to check the exact strings!
*/ */
@Test
public void testTurnToString() throws Exception { public void testTurnToString() throws Exception {
String[] files = new String[] { String[] files = new String[] {
"45365.xls", "45365-2.xls", "MissingBits.xls" "45365.xls", "45365-2.xls", "MissingBits.xls"
@ -81,8 +82,7 @@ public final class TestFormatTrackingHSSFListener extends TestCase {
// Now check we can turn all the numeric // Now check we can turn all the numeric
// cells into strings without error // cells into strings without error
for(int i=0; i<mockListen._records.size(); i++) { for(Record r : mockListen._records) {
Record r = (Record)mockListen._records.get(i);
CellValueRecordInterface cvr = null; CellValueRecordInterface cvr = null;
if(r instanceof NumberRecord) { if(r instanceof NumberRecord) {
@ -106,7 +106,7 @@ public final class TestFormatTrackingHSSFListener extends TestCase {
private static final class MockHSSFListener implements HSSFListener { private static final class MockHSSFListener implements HSSFListener {
public MockHSSFListener() {} public MockHSSFListener() {}
private final List _records = new ArrayList(); private final List<Record> _records = new ArrayList<Record>();
public void processRecord(Record record) { public void processRecord(Record record) {
_records.add(record); _records.add(record);

View File

@ -17,21 +17,23 @@
package org.apache.poi.hssf.record; package org.apache.poi.hssf.record;
import static org.junit.Assert.assertEquals;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import junit.framework.TestCase;
import org.apache.poi.hssf.HSSFTestDataSamples; import org.apache.poi.hssf.HSSFTestDataSamples;
import org.apache.poi.hssf.record.common.UnicodeString;
import org.apache.poi.util.HexRead; import org.apache.poi.util.HexRead;
import org.apache.poi.util.IntMapper; import org.apache.poi.util.IntMapper;
import org.junit.Test;
/** /**
* Exercise the SSTDeserializer class. * Exercise the SSTDeserializer class.
* *
* @author Glen Stampoultzis (glens at apache.org) * @author Glen Stampoultzis (glens at apache.org)
*/ */
public final class TestSSTDeserializer extends TestCase { public final class TestSSTDeserializer {
private static final int FAKE_SID = -5555; private static final int FAKE_SID = -5555;
private static byte[] concat(byte[] a, byte[] b) { private static byte[] concat(byte[] a, byte[] b) {
@ -41,36 +43,36 @@ public final class TestSSTDeserializer extends TestCase {
return result; return result;
} }
private static byte[] readSampleHexData(String sampleFileName, String sectionName, int recSid) { private static byte[] readSampleHexData(String sampleFileName, String sectionName, int recSid)
throws IOException {
InputStream is = HSSFTestDataSamples.openSampleFileStream(sampleFileName); InputStream is = HSSFTestDataSamples.openSampleFileStream(sampleFileName);
byte[] data; byte[] data = HexRead.readData(is, sectionName);
try { byte[] result = TestcaseRecordInputStream.mergeDataAndSid(recSid, data.length, data);
data = HexRead.readData(is, sectionName); is.close();
} catch (IOException e) { return result;
throw new RuntimeException(e);
}
return TestcaseRecordInputStream.mergeDataAndSid(recSid, data.length, data);
} }
public void testSpanRichTextToPlainText() { @Test
public void testSpanRichTextToPlainText() throws IOException {
byte[] header = readSampleHexData("richtextdata.txt", "header", FAKE_SID); byte[] header = readSampleHexData("richtextdata.txt", "header", FAKE_SID);
byte[] continueBytes = readSampleHexData("richtextdata.txt", "continue1", ContinueRecord.sid); byte[] continueBytes = readSampleHexData("richtextdata.txt", "continue1", ContinueRecord.sid);
RecordInputStream in = TestcaseRecordInputStream.create(concat(header, continueBytes)); RecordInputStream in = TestcaseRecordInputStream.create(concat(header, continueBytes));
IntMapper strings = new IntMapper(); IntMapper<UnicodeString> strings = new IntMapper<UnicodeString>();
SSTDeserializer deserializer = new SSTDeserializer( strings ); SSTDeserializer deserializer = new SSTDeserializer( strings );
deserializer.manufactureStrings(1, in ); deserializer.manufactureStrings(1, in );
assertEquals( "At a dinner party orAt At At ", strings.get( 0 ) + "" ); assertEquals( "At a dinner party orAt At At ", strings.get( 0 ) + "" );
} }
public void testContinuationWithNoOverlap() { @Test
public void testContinuationWithNoOverlap() throws IOException {
byte[] header = readSampleHexData("evencontinuation.txt", "header", FAKE_SID); byte[] header = readSampleHexData("evencontinuation.txt", "header", FAKE_SID);
byte[] continueBytes = readSampleHexData("evencontinuation.txt", "continue1", ContinueRecord.sid); byte[] continueBytes = readSampleHexData("evencontinuation.txt", "continue1", ContinueRecord.sid);
RecordInputStream in = TestcaseRecordInputStream.create(concat(header, continueBytes)); RecordInputStream in = TestcaseRecordInputStream.create(concat(header, continueBytes));
IntMapper strings = new IntMapper(); IntMapper<UnicodeString> strings = new IntMapper<UnicodeString>();
SSTDeserializer deserializer = new SSTDeserializer( strings ); SSTDeserializer deserializer = new SSTDeserializer( strings );
deserializer.manufactureStrings( 2, in); deserializer.manufactureStrings( 2, in);
@ -81,14 +83,15 @@ public final class TestSSTDeserializer extends TestCase {
/** /**
* Strings can actually span across more than one continuation. * Strings can actually span across more than one continuation.
*/ */
public void testStringAcross2Continuations() { @Test
public void testStringAcross2Continuations() throws IOException {
byte[] header = readSampleHexData("stringacross2continuations.txt", "header", FAKE_SID); byte[] header = readSampleHexData("stringacross2continuations.txt", "header", FAKE_SID);
byte[] continue1 = readSampleHexData("stringacross2continuations.txt", "continue1", ContinueRecord.sid); byte[] continue1 = readSampleHexData("stringacross2continuations.txt", "continue1", ContinueRecord.sid);
byte[] continue2 = readSampleHexData("stringacross2continuations.txt", "continue2", ContinueRecord.sid); byte[] continue2 = readSampleHexData("stringacross2continuations.txt", "continue2", ContinueRecord.sid);
RecordInputStream in = TestcaseRecordInputStream.create(concat(header, concat(continue1, continue2))); RecordInputStream in = TestcaseRecordInputStream.create(concat(header, concat(continue1, continue2)));
IntMapper strings = new IntMapper(); IntMapper<UnicodeString> strings = new IntMapper<UnicodeString>();
SSTDeserializer deserializer = new SSTDeserializer( strings ); SSTDeserializer deserializer = new SSTDeserializer( strings );
deserializer.manufactureStrings( 2, in); deserializer.manufactureStrings( 2, in);
@ -96,12 +99,13 @@ public final class TestSSTDeserializer extends TestCase {
assertEquals( "At a dinner partyAt a dinner party", strings.get( 1 ) + "" ); assertEquals( "At a dinner partyAt a dinner party", strings.get( 1 ) + "" );
} }
public void testExtendedStrings() { @Test
public void testExtendedStrings() throws IOException {
byte[] header = readSampleHexData("extendedtextstrings.txt", "rich-header", FAKE_SID); byte[] header = readSampleHexData("extendedtextstrings.txt", "rich-header", FAKE_SID);
byte[] continueBytes = readSampleHexData("extendedtextstrings.txt", "rich-continue1", ContinueRecord.sid); byte[] continueBytes = readSampleHexData("extendedtextstrings.txt", "rich-continue1", ContinueRecord.sid);
RecordInputStream in = TestcaseRecordInputStream.create(concat(header, continueBytes)); RecordInputStream in = TestcaseRecordInputStream.create(concat(header, continueBytes));
IntMapper strings = new IntMapper(); IntMapper<UnicodeString> strings = new IntMapper<UnicodeString>();
SSTDeserializer deserializer = new SSTDeserializer( strings ); SSTDeserializer deserializer = new SSTDeserializer( strings );
deserializer.manufactureStrings( 1, in); deserializer.manufactureStrings( 1, in);
@ -112,7 +116,7 @@ public final class TestSSTDeserializer extends TestCase {
continueBytes = readSampleHexData("extendedtextstrings.txt", "norich-continue1", ContinueRecord.sid); continueBytes = readSampleHexData("extendedtextstrings.txt", "norich-continue1", ContinueRecord.sid);
in = TestcaseRecordInputStream.create(concat(header, continueBytes)); in = TestcaseRecordInputStream.create(concat(header, continueBytes));
strings = new IntMapper(); strings = new IntMapper<UnicodeString>();
deserializer = new SSTDeserializer( strings ); deserializer = new SSTDeserializer( strings );
deserializer.manufactureStrings( 1, in); deserializer.manufactureStrings( 1, in);

View File

@ -17,23 +17,23 @@
package org.apache.poi.hssf.record.aggregates; package org.apache.poi.hssf.record.aggregates;
import static org.junit.Assert.assertEquals;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import junit.framework.AssertionFailedError;
import junit.framework.TestCase;
import org.apache.poi.hssf.record.ColumnInfoRecord; import org.apache.poi.hssf.record.ColumnInfoRecord;
import org.apache.poi.hssf.record.Record; import org.apache.poi.hssf.record.Record;
import org.apache.poi.hssf.record.RecordBase; import org.apache.poi.hssf.record.RecordBase;
import org.apache.poi.hssf.record.aggregates.RecordAggregate.RecordVisitor; import org.apache.poi.hssf.record.aggregates.RecordAggregate.RecordVisitor;
import org.junit.Test;
/** import junit.framework.AssertionFailedError;
* @author Glen Stampoultzis
*/
public final class TestColumnInfoRecordsAggregate extends TestCase {
public void testGetRecordSize() { public final class TestColumnInfoRecordsAggregate {
@Test
public void testGetRecordSize() {
ColumnInfoRecordsAggregate agg = new ColumnInfoRecordsAggregate(); ColumnInfoRecordsAggregate agg = new ColumnInfoRecordsAggregate();
agg.insertColumn(createColInfo(1, 3)); agg.insertColumn(createColInfo(1, 3));
agg.insertColumn(createColInfo(4, 7)); agg.insertColumn(createColInfo(4, 7));
@ -64,23 +64,22 @@ public final class TestColumnInfoRecordsAggregate extends TestCase {
private static final class CIRCollector implements RecordVisitor { private static final class CIRCollector implements RecordVisitor {
private List _list; private List<Record> _list = new ArrayList<Record>();
public CIRCollector() {
_list = new ArrayList();
}
public void visitRecord(Record r) { public void visitRecord(Record r) {
_list.add(r); _list.add(r);
} }
public static ColumnInfoRecord[] getRecords(ColumnInfoRecordsAggregate agg) { public static ColumnInfoRecord[] getRecords(ColumnInfoRecordsAggregate agg) {
CIRCollector circ = new CIRCollector(); CIRCollector circ = new CIRCollector();
agg.visitContainedRecords(circ); agg.visitContainedRecords(circ);
List list = circ._list; ColumnInfoRecord[] result =
ColumnInfoRecord[] result = new ColumnInfoRecord[list.size()]; circ._list.toArray(new ColumnInfoRecord[circ._list.size()]);
list.toArray(result);
return result; return result;
} }
} }
@Test
public void testGroupColumns_bug45639() { public void testGroupColumns_bug45639() {
ColumnInfoRecordsAggregate agg = new ColumnInfoRecordsAggregate(); ColumnInfoRecordsAggregate agg = new ColumnInfoRecordsAggregate();
agg.groupColumnRange( 7, 9, true); agg.groupColumnRange( 7, 9, true);
@ -102,6 +101,7 @@ public final class TestColumnInfoRecordsAggregate extends TestCase {
/** /**
* Check that an inner group remains hidden * Check that an inner group remains hidden
*/ */
@Test
public void testHiddenAfterExpanding() { public void testHiddenAfterExpanding() {
ColumnInfoRecordsAggregate agg = new ColumnInfoRecordsAggregate(); ColumnInfoRecordsAggregate agg = new ColumnInfoRecordsAggregate();
agg.groupColumnRange(1, 15, true); agg.groupColumnRange(1, 15, true);
@ -134,6 +134,7 @@ public final class TestColumnInfoRecordsAggregate extends TestCase {
confirmCIR(cirs, 2, 13, 15, 1, true, false); confirmCIR(cirs, 2, 13, 15, 1, true, false);
confirmCIR(cirs, 3, 16, 16, 0, false, true); confirmCIR(cirs, 3, 16, 16, 0, false, true);
} }
private static void confirmCIR(ColumnInfoRecord[] cirs, int ix, int startColIx, int endColIx, int level, boolean isHidden, boolean isCollapsed) { private static void confirmCIR(ColumnInfoRecord[] cirs, int ix, int startColIx, int endColIx, int level, boolean isHidden, boolean isCollapsed) {
ColumnInfoRecord cir = cirs[ix]; ColumnInfoRecord cir = cirs[ix];
assertEquals("startColIx", startColIx, cir.getFirstColumn()); assertEquals("startColIx", startColIx, cir.getFirstColumn());

View File

@ -17,56 +17,51 @@
package org.apache.poi.hssf.record.chart; package org.apache.poi.hssf.record.chart;
import junit.framework.Test; import org.junit.runner.RunWith;
import junit.framework.TestSuite; import org.junit.runners.Suite;
/** /**
* Collects all tests for package <tt>org.apache.poi.hssf.record.class</tt>. * Collects all tests for package <tt>org.apache.poi.hssf.record.class</tt>.
*
* @author Josh Micich
*/ */
public final class AllChartRecordTests { @RunWith(Suite.class)
@Suite.SuiteClasses({
public static Test suite() { TestAreaFormatRecord.class,
TestSuite result = new TestSuite(AllChartRecordTests.class.getName()); TestAreaRecord.class,
TestAxisLineFormatRecord.class,
result.addTestSuite(TestAreaFormatRecord.class); TestAxisOptionsRecord.class,
result.addTestSuite(TestAreaRecord.class); TestAxisParentRecord.class,
result.addTestSuite(TestAxisLineFormatRecord.class); TestAxisRecord.class,
result.addTestSuite(TestAxisOptionsRecord.class); TestAxisUsedRecord.class,
result.addTestSuite(TestAxisParentRecord.class); TestBarRecord.class,
result.addTestSuite(TestAxisRecord.class); TestCategorySeriesAxisRecord.class,
result.addTestSuite(TestAxisUsedRecord.class); TestChartFormatRecord.class,
result.addTestSuite(TestBarRecord.class); TestChartRecord.class,
result.addTestSuite(TestCategorySeriesAxisRecord.class); TestChartTitleFormatRecord.class,
result.addTestSuite(TestChartFormatRecord.class); TestDatRecord.class,
result.addTestSuite(TestChartRecord.class); TestDataFormatRecord.class,
result.addTestSuite(TestChartTitleFormatRecord.class); TestDefaultDataLabelTextPropertiesRecord.class,
result.addTestSuite(TestDatRecord.class); TestFontBasisRecord.class,
result.addTestSuite(TestDataFormatRecord.class); TestFontIndexRecord.class,
result.addTestSuite(TestDefaultDataLabelTextPropertiesRecord.class); TestFrameRecord.class,
result.addTestSuite(TestFontBasisRecord.class); TestLegendRecord.class,
result.addTestSuite(TestFontIndexRecord.class); TestLineFormatRecord.class,
result.addTestSuite(TestFrameRecord.class); TestLinkedDataRecord.class,
result.addTestSuite(TestLegendRecord.class); TestNumberFormatIndexRecord.class,
result.addTestSuite(TestLineFormatRecord.class); TestObjectLinkRecord.class,
result.addTestSuite(TestLinkedDataRecord.class); TestPlotAreaRecord.class,
result.addTestSuite(TestNumberFormatIndexRecord.class); TestPlotGrowthRecord.class,
result.addTestSuite(TestObjectLinkRecord.class); TestSeriesChartGroupIndexRecord.class,
result.addTestSuite(TestPlotAreaRecord.class); TestSeriesIndexRecord.class,
result.addTestSuite(TestPlotGrowthRecord.class); TestSeriesLabelsRecord.class,
result.addTestSuite(TestSeriesChartGroupIndexRecord.class); TestSeriesListRecord.class,
result.addTestSuite(TestSeriesIndexRecord.class); TestSeriesRecord.class,
result.addTestSuite(TestSeriesLabelsRecord.class); TestSeriesTextRecord.class,
result.addTestSuite(TestSeriesListRecord.class); TestSeriesToChartGroupRecord.class,
result.addTestSuite(TestSeriesRecord.class); TestSheetPropertiesRecord.class,
result.addTestSuite(TestSeriesTextRecord.class); TestTextRecord.class,
result.addTestSuite(TestSeriesToChartGroupRecord.class); TestTickRecord.class,
result.addTestSuite(TestSheetPropertiesRecord.class); TestUnitsRecord.class,
result.addTestSuite(TestTextRecord.class); TestValueRangeRecord.class
result.addTestSuite(TestTickRecord.class); })
result.addTestSuite(TestUnitsRecord.class); public class AllChartRecordTests {
result.addTestSuite(TestValueRangeRecord.class);
return result;
}
} }

View File

@ -17,27 +17,27 @@
package org.apache.poi.hssf.record.chart; package org.apache.poi.hssf.record.chart;
import static org.junit.Assert.assertEquals;
import java.io.InputStream; import java.io.InputStream;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import junit.framework.TestCase;
import org.apache.poi.hssf.HSSFTestDataSamples; import org.apache.poi.hssf.HSSFTestDataSamples;
import org.apache.poi.hssf.eventusermodel.HSSFEventFactory; import org.apache.poi.hssf.eventusermodel.HSSFEventFactory;
import org.apache.poi.hssf.eventusermodel.HSSFListener; import org.apache.poi.hssf.eventusermodel.HSSFListener;
import org.apache.poi.hssf.eventusermodel.HSSFRequest; import org.apache.poi.hssf.eventusermodel.HSSFRequest;
import org.apache.poi.hssf.record.Record; import org.apache.poi.hssf.record.Record;
import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem; import org.apache.poi.poifs.filesystem.NPOIFSFileSystem;
/** import org.junit.Test;
*
*/
public final class TestChartTitleFormatRecord extends TestCase {
public void testRecord() throws Exception { public final class TestChartTitleFormatRecord {
POIFSFileSystem fs = new POIFSFileSystem(
HSSFTestDataSamples.openSampleFileStream("WithFormattedGraphTitle.xls")); @Test
public void testRecord() throws Exception {
NPOIFSFileSystem fs = new NPOIFSFileSystem(
HSSFTestDataSamples.getSampleFile("WithFormattedGraphTitle.xls"));
// Check we can open the file via usermodel // Check we can open the file via usermodel
HSSFWorkbook hssf = new HSSFWorkbook(fs); HSSFWorkbook hssf = new HSSFWorkbook(fs);
@ -55,23 +55,24 @@ public final class TestChartTitleFormatRecord extends TestCase {
// Should've found one // Should've found one
assertEquals(1, grabber.chartTitleFormatRecords.size()); assertEquals(1, grabber.chartTitleFormatRecords.size());
// And it should be of something interesting // And it should be of something interesting
ChartTitleFormatRecord r = ChartTitleFormatRecord r = grabber.chartTitleFormatRecords.get(0);
(ChartTitleFormatRecord)grabber.chartTitleFormatRecords.get(0);
assertEquals(3, r.getFormatCount()); assertEquals(3, r.getFormatCount());
hssf.close();
fs.close();
} }
private static final class ChartTitleFormatRecordGrabber implements HSSFListener { private static final class ChartTitleFormatRecordGrabber implements HSSFListener {
private final List chartTitleFormatRecords; private final List<ChartTitleFormatRecord> chartTitleFormatRecords;
public ChartTitleFormatRecordGrabber() { public ChartTitleFormatRecordGrabber() {
chartTitleFormatRecords = new ArrayList(); chartTitleFormatRecords = new ArrayList<ChartTitleFormatRecord>();
} }
public void processRecord(Record record) { public void processRecord(Record record) {
if(record instanceof ChartTitleFormatRecord) { if(record instanceof ChartTitleFormatRecord) {
chartTitleFormatRecords.add( chartTitleFormatRecords.add((ChartTitleFormatRecord)record);
record
);
} }
} }

View File

@ -19,27 +19,75 @@
package org.apache.poi.hssf.usermodel; package org.apache.poi.hssf.usermodel;
import junit.framework.Assert; import static org.junit.Assert.assertTrue;
import org.apache.poi.hssf.model.InternalSheet; import static org.junit.Assert.fail;
import org.apache.poi.hssf.model.InternalWorkbook;
import org.apache.poi.hssf.record.*;
import org.apache.poi.hssf.record.aggregates.PageSettingsBlock;
import java.util.List; import java.util.List;
import org.apache.poi.hssf.model.InternalSheet;
import org.apache.poi.hssf.model.InternalWorkbook;
import org.apache.poi.hssf.record.BOFRecord;
import org.apache.poi.hssf.record.BackupRecord;
import org.apache.poi.hssf.record.BookBoolRecord;
import org.apache.poi.hssf.record.BoundSheetRecord;
import org.apache.poi.hssf.record.CalcModeRecord;
import org.apache.poi.hssf.record.CodepageRecord;
import org.apache.poi.hssf.record.CountryRecord;
import org.apache.poi.hssf.record.DSFRecord;
import org.apache.poi.hssf.record.DateWindow1904Record;
import org.apache.poi.hssf.record.DefaultColWidthRecord;
import org.apache.poi.hssf.record.DefaultRowHeightRecord;
import org.apache.poi.hssf.record.DeltaRecord;
import org.apache.poi.hssf.record.DimensionsRecord;
import org.apache.poi.hssf.record.EOFRecord;
import org.apache.poi.hssf.record.ExtSSTRecord;
import org.apache.poi.hssf.record.ExtendedFormatRecord;
import org.apache.poi.hssf.record.ExternSheetRecord;
import org.apache.poi.hssf.record.FnGroupCountRecord;
import org.apache.poi.hssf.record.FontRecord;
import org.apache.poi.hssf.record.FormatRecord;
import org.apache.poi.hssf.record.GridsetRecord;
import org.apache.poi.hssf.record.GutsRecord;
import org.apache.poi.hssf.record.HideObjRecord;
import org.apache.poi.hssf.record.InterfaceEndRecord;
import org.apache.poi.hssf.record.InterfaceHdrRecord;
import org.apache.poi.hssf.record.IterationRecord;
import org.apache.poi.hssf.record.MMSRecord;
import org.apache.poi.hssf.record.NameRecord;
import org.apache.poi.hssf.record.PasswordRev4Record;
import org.apache.poi.hssf.record.PrecisionRecord;
import org.apache.poi.hssf.record.PrintGridlinesRecord;
import org.apache.poi.hssf.record.PrintHeadersRecord;
import org.apache.poi.hssf.record.ProtectRecord;
import org.apache.poi.hssf.record.Record;
import org.apache.poi.hssf.record.RecordBase;
import org.apache.poi.hssf.record.RefModeRecord;
import org.apache.poi.hssf.record.RefreshAllRecord;
import org.apache.poi.hssf.record.SSTRecord;
import org.apache.poi.hssf.record.SaveRecalcRecord;
import org.apache.poi.hssf.record.SelectionRecord;
import org.apache.poi.hssf.record.StyleRecord;
import org.apache.poi.hssf.record.SupBookRecord;
import org.apache.poi.hssf.record.TabIdRecord;
import org.apache.poi.hssf.record.UseSelFSRecord;
import org.apache.poi.hssf.record.WSBoolRecord;
import org.apache.poi.hssf.record.WindowOneRecord;
import org.apache.poi.hssf.record.WindowProtectRecord;
import org.apache.poi.hssf.record.WindowTwoRecord;
import org.apache.poi.hssf.record.WriteAccessRecord;
import org.apache.poi.hssf.record.aggregates.PageSettingsBlock;
/** /**
* Designed to check wither the records written actually make sense. * Designed to check wither the records written actually make sense.
*/ */
public class SanityChecker public class SanityChecker {
extends Assert
{
static class CheckRecord static class CheckRecord
{ {
Class record; Class<? extends RecordBase> record;
char occurance; // 1 = one time, M = 1..many times, * = 0..many, 0 = optional char occurance; // 1 = one time, M = 1..many times, * = 0..many, 0 = optional
private boolean together; private boolean together;
public CheckRecord( Class record, char occurance ) public CheckRecord( Class<? extends RecordBase> record, char occurance )
{ {
this(record, occurance, true); this(record, occurance, true);
} }
@ -49,14 +97,14 @@ public class SanityChecker
* @param occurance The occurance 1 = occurs once, M = occurs many times * @param occurance The occurance 1 = occurs once, M = occurs many times
* @param together * @param together
*/ */
public CheckRecord(Class record, char occurance, boolean together) public CheckRecord(Class<? extends RecordBase> record, char occurance, boolean together)
{ {
this.record = record; this.record = record;
this.occurance = occurance; this.occurance = occurance;
this.together = together; this.together = together;
} }
public Class getRecord() public Class<? extends RecordBase> getRecord()
{ {
return record; return record;
} }
@ -86,7 +134,7 @@ public class SanityChecker
return occurance == '*' || occurance == 'M'; return occurance == '*' || occurance == 'M';
} }
public int match( List records, int recordIdx ) public int match( List<? extends RecordBase> records, int recordIdx )
{ {
int firstRecord = findFirstRecord(records, getRecord(), recordIdx); int firstRecord = findFirstRecord(records, getRecord(), recordIdx);
if (isRequired()) if (isRequired())
@ -96,7 +144,7 @@ public class SanityChecker
return matchOptional( firstRecord, records, recordIdx ); return matchOptional( firstRecord, records, recordIdx );
} }
private int matchOptional( int firstRecord, List records, int recordIdx ) private int matchOptional( int firstRecord, List<? extends RecordBase> records, int recordIdx )
{ {
if (firstRecord == -1) if (firstRecord == -1)
{ {
@ -106,7 +154,7 @@ public class SanityChecker
return matchOneOrMany( records, firstRecord ); return matchOneOrMany( records, firstRecord );
} }
private int matchRequired( int firstRecord, List records, int recordIdx ) private int matchRequired( int firstRecord, List<? extends RecordBase> records, int recordIdx )
{ {
if (firstRecord == -1) if (firstRecord == -1)
{ {
@ -116,7 +164,7 @@ public class SanityChecker
return matchOneOrMany( records, firstRecord ); return matchOneOrMany( records, firstRecord );
} }
private int matchOneOrMany( List records, int recordIdx ) private int matchOneOrMany( List<? extends RecordBase> records, int recordIdx )
{ {
if (isZeroOrOne()) if (isZeroOrOne())
{ {
@ -210,7 +258,7 @@ public class SanityChecker
private void checkWorkbookRecords(InternalWorkbook workbook) private void checkWorkbookRecords(InternalWorkbook workbook)
{ {
List records = workbook.getRecords(); List<Record> records = workbook.getRecords();
assertTrue(records.get(0) instanceof BOFRecord); assertTrue(records.get(0) instanceof BOFRecord);
assertTrue(records.get(records.size() - 1) instanceof EOFRecord); assertTrue(records.get(records.size() - 1) instanceof EOFRecord);
@ -219,7 +267,7 @@ public class SanityChecker
} }
private void checkSheetRecords(InternalSheet sheet) { private void checkSheetRecords(InternalSheet sheet) {
List records = sheet.getRecords(); List<RecordBase> records = sheet.getRecords();
assertTrue(records.get(0) instanceof BOFRecord); assertTrue(records.get(0) instanceof BOFRecord);
assertTrue(records.get(records.size() - 1) instanceof EOFRecord); assertTrue(records.get(records.size() - 1) instanceof EOFRecord);
@ -266,7 +314,7 @@ public class SanityChecker
} }
} */ } */
/* package */ static int findFirstRecord( List records, Class record, int startIndex ) /* package */ static int findFirstRecord( List<? extends RecordBase> records, Class<? extends RecordBase> record, int startIndex )
{ {
for (int i = startIndex; i < records.size(); i++) for (int i = startIndex; i < records.size(); i++)
{ {
@ -276,7 +324,7 @@ public class SanityChecker
return -1; return -1;
} }
void checkRecordOrder(List records, CheckRecord[] check) void checkRecordOrder(List<? extends RecordBase> records, CheckRecord[] check)
{ {
int recordIdx = 0; int recordIdx = 0;
for ( int checkIdx = 0; checkIdx < check.length; checkIdx++ ) for ( int checkIdx = 0; checkIdx < check.length; checkIdx++ )

View File

@ -17,29 +17,37 @@
package org.apache.poi.hssf.usermodel; package org.apache.poi.hssf.usermodel;
import java.util.Iterator; import static org.junit.Assert.assertNotNull;
import junit.framework.TestCase; import java.util.Iterator;
import org.apache.poi.hssf.HSSFTestDataSamples; import org.apache.poi.hssf.HSSFTestDataSamples;
import org.apache.poi.hssf.record.FormulaRecord; import org.apache.poi.hssf.record.FormulaRecord;
import org.apache.poi.hssf.record.aggregates.FormulaRecordAggregate; import org.apache.poi.hssf.record.aggregates.FormulaRecordAggregate;
import org.apache.poi.ss.formula.ptg.Ptg;
import org.apache.poi.hssf.util.CellReference; import org.apache.poi.hssf.util.CellReference;
import org.apache.poi.ss.formula.ptg.Ptg;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellValue; import org.apache.poi.ss.usermodel.CellValue;
import org.apache.poi.ss.usermodel.Row;
import org.junit.Test;
/** /**
* *
*/ */
public final class TestBug42464 extends TestCase { public final class TestBug42464 {
public void testOKFile() { @Test
public void testOKFile() throws Exception {
HSSFWorkbook wb = HSSFTestDataSamples.openSampleWorkbook("42464-ExpPtg-ok.xls"); HSSFWorkbook wb = HSSFTestDataSamples.openSampleWorkbook("42464-ExpPtg-ok.xls");
process(wb); process(wb);
wb.close();
} }
public void testExpSharedBadFile() {
@Test
public void testExpSharedBadFile() throws Exception {
HSSFWorkbook wb = HSSFTestDataSamples.openSampleWorkbook("42464-ExpPtg-bad.xls"); HSSFWorkbook wb = HSSFTestDataSamples.openSampleWorkbook("42464-ExpPtg-bad.xls");
process(wb); process(wb);
wb.close();
} }
private static void process(HSSFWorkbook wb) { private static void process(HSSFWorkbook wb) {
@ -47,7 +55,7 @@ public final class TestBug42464 extends TestCase {
for(int i=0; i<wb.getNumberOfSheets(); i++) { for(int i=0; i<wb.getNumberOfSheets(); i++) {
HSSFSheet s = wb.getSheetAt(i); HSSFSheet s = wb.getSheetAt(i);
Iterator it = s.rowIterator(); Iterator<Row> it = s.rowIterator();
while(it.hasNext()) { while(it.hasNext()) {
HSSFRow r = (HSSFRow)it.next(); HSSFRow r = (HSSFRow)it.next();
process(r, eval); process(r, eval);
@ -56,7 +64,7 @@ public final class TestBug42464 extends TestCase {
} }
private static void process(HSSFRow row, HSSFFormulaEvaluator eval) { private static void process(HSSFRow row, HSSFFormulaEvaluator eval) {
Iterator it = row.cellIterator(); Iterator<Cell> it = row.cellIterator();
while(it.hasNext()) { while(it.hasNext()) {
HSSFCell cell = (HSSFCell)it.next(); HSSFCell cell = (HSSFCell)it.next();
if(cell.getCellType() != HSSFCell.CELL_TYPE_FORMULA) { if(cell.getCellType() != HSSFCell.CELL_TYPE_FORMULA) {
@ -67,15 +75,15 @@ public final class TestBug42464 extends TestCase {
Ptg[] ptgs = r.getParsedExpression(); Ptg[] ptgs = r.getParsedExpression();
String cellRef = new CellReference(row.getRowNum(), cell.getColumnIndex(), false, false).formatAsString(); String cellRef = new CellReference(row.getRowNum(), cell.getColumnIndex(), false, false).formatAsString();
if(false && cellRef.equals("BP24")) { // TODO - replace System.out.println()s with asserts // if(false && cellRef.equals("BP24")) { // TODO - replace System.out.println()s with asserts
System.out.print(cellRef); // System.out.print(cellRef);
System.out.println(" - has " + ptgs.length + " ptgs:"); // System.out.println(" - has " + ptgs.length + " ptgs:");
for(int i=0; i<ptgs.length; i++) { // for(int i=0; i<ptgs.length; i++) {
String c = ptgs[i].getClass().toString(); // String c = ptgs[i].getClass().toString();
System.out.println("\t" + c.substring(c.lastIndexOf('.')+1) ); // System.out.println("\t" + c.substring(c.lastIndexOf('.')+1) );
} // }
System.out.println("-> " + cell.getCellFormula()); // System.out.println("-> " + cell.getCellFormula());
} // }
CellValue evalResult = eval.evaluate(cell); CellValue evalResult = eval.evaluate(cell);
assertNotNull(evalResult); assertNotNull(evalResult);

View File

@ -17,26 +17,23 @@
package org.apache.poi.hssf.usermodel; package org.apache.poi.hssf.usermodel;
import java.io.ByteArrayInputStream; import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import java.io.ByteArrayOutputStream; import java.io.ByteArrayOutputStream;
import java.io.File; import java.io.File;
import java.io.FileOutputStream; import java.io.FileOutputStream;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream;
import java.io.PrintStream; import java.io.PrintStream;
import java.util.List; import java.util.List;
import junit.framework.AssertionFailedError;
import org.apache.poi.hssf.HSSFITestDataProvider; import org.apache.poi.hssf.HSSFITestDataProvider;
import org.apache.poi.hssf.HSSFTestDataSamples; import org.apache.poi.hssf.HSSFTestDataSamples;
import org.apache.poi.hssf.eventmodel.ERFListener;
import org.apache.poi.hssf.eventmodel.EventRecordFactory;
import org.apache.poi.hssf.record.DVRecord; import org.apache.poi.hssf.record.DVRecord;
import org.apache.poi.hssf.record.RecordFormatException;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import org.apache.poi.ss.usermodel.BaseTestDataValidation; import org.apache.poi.ss.usermodel.BaseTestDataValidation;
import org.apache.poi.ss.usermodel.DataValidation; import org.apache.poi.ss.usermodel.DataValidation;
import org.apache.poi.ss.usermodel.DataValidation.ErrorStyle;
import org.apache.poi.ss.usermodel.DataValidationConstraint; import org.apache.poi.ss.usermodel.DataValidationConstraint;
import org.apache.poi.ss.usermodel.DataValidationConstraint.OperatorType; import org.apache.poi.ss.usermodel.DataValidationConstraint.OperatorType;
import org.apache.poi.ss.usermodel.DataValidationConstraint.ValidationType; import org.apache.poi.ss.usermodel.DataValidationConstraint.ValidationType;
@ -45,10 +42,8 @@ import org.apache.poi.ss.usermodel.DateUtil;
import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.util.CellRangeAddress; import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.usermodel.DataValidation.ErrorStyle;
import org.apache.poi.ss.usermodel.DataValidationConstraint.OperatorType;
import org.apache.poi.ss.util.CellRangeAddressList; import org.apache.poi.ss.util.CellRangeAddressList;
import org.junit.Test;
/** /**
* Class for testing Excel's data validation mechanism * Class for testing Excel's data validation mechanism
@ -73,11 +68,11 @@ public final class TestDataValidation extends BaseTestDataValidation {
} }
byte[] generatedContent = baos.toByteArray(); byte[] generatedContent = baos.toByteArray();
boolean isSame; boolean isSame;
if (false) { // if (false) {
// TODO - add proof spreadsheet and compare // // TODO - add proof spreadsheet and compare
InputStream proofStream = HSSFTestDataSamples.openSampleFileStream("TestDataValidation.xls"); // InputStream proofStream = HSSFTestDataSamples.openSampleFileStream("TestDataValidation.xls");
isSame = compareStreams(proofStream, generatedContent); // isSame = compareStreams(proofStream, generatedContent);
} // }
isSame = true; isSame = true;
if (isSame) { if (isSame) {
@ -112,37 +107,38 @@ public final class TestDataValidation extends BaseTestDataValidation {
} }
private static boolean compareStreams(InputStream isA, byte[] generatedContent) { // private static boolean compareStreams(InputStream isA, byte[] generatedContent) {
//
InputStream isB = new ByteArrayInputStream(generatedContent); // InputStream isB = new ByteArrayInputStream(generatedContent);
//
// The allowable regions where the generated file can differ from the // // The allowable regions where the generated file can differ from the
// proof should be small (i.e. much less than 1K) // // proof should be small (i.e. much less than 1K)
int[] allowableDifferenceRegions = { // int[] allowableDifferenceRegions = {
0x0228, 16, // a region of the file containing the OS username // 0x0228, 16, // a region of the file containing the OS username
0x506C, 8, // See RootProperty (super fields _seconds_2 and _days_2) // 0x506C, 8, // See RootProperty (super fields _seconds_2 and _days_2)
}; // };
int[] diffs = StreamUtility.diffStreams(isA, isB, allowableDifferenceRegions); // int[] diffs = StreamUtility.diffStreams(isA, isB, allowableDifferenceRegions);
if (diffs == null) { // if (diffs == null) {
return true; // return true;
} // }
System.err.println("Diff from proof: "); // System.err.println("Diff from proof: ");
for (int i = 0; i < diffs.length; i++) { // for (int i = 0; i < diffs.length; i++) {
System.err.println("diff at offset: 0x" + Integer.toHexString(diffs[i])); // System.err.println("diff at offset: 0x" + Integer.toHexString(diffs[i]));
} // }
return false; // return false;
} // }
/* package */ static void setCellValue(HSSFCell cell, String text) { /* package */ static void setCellValue(HSSFCell cell, String text) {
cell.setCellValue(new HSSFRichTextString(text)); cell.setCellValue(new HSSFRichTextString(text));
} }
public void testAddToExistingSheet() { @Test
public void testAddToExistingSheet() throws Exception {
// dvEmpty.xls is a simple one sheet workbook. With a DataValidations header record but no // dvEmpty.xls is a simple one sheet workbook. With a DataValidations header record but no
// DataValidations. It's important that the example has one SHEETPROTECTION record. // DataValidations. It's important that the example has one SHEETPROTECTION record.
@ -164,27 +160,23 @@ public final class TestDataValidation extends BaseTestDataValidation {
sheet.addValidationData(dv); sheet.addValidationData(dv);
ByteArrayOutputStream baos = new ByteArrayOutputStream(); ByteArrayOutputStream baos = new ByteArrayOutputStream();
try { wb.write(baos);
wb.write(baos);
} catch (IOException e) {
throw new RuntimeException(e);
}
byte[] wbData = baos.toByteArray(); byte[] wbData = baos.toByteArray();
if (false) { // TODO (Jul 2008) fix EventRecordFactory to process unknown records, (and DV records for that matter) // if (false) { // TODO (Jul 2008) fix EventRecordFactory to process unknown records, (and DV records for that matter)
//
ERFListener erfListener = null; // new MyERFListener(); // ERFListener erfListener = null; // new MyERFListener();
EventRecordFactory erf = new EventRecordFactory(erfListener, null); // EventRecordFactory erf = new EventRecordFactory(erfListener, null);
try { // try {
POIFSFileSystem fs = new POIFSFileSystem(new ByteArrayInputStream(baos.toByteArray())); // POIFSFileSystem fs = new POIFSFileSystem(new ByteArrayInputStream(baos.toByteArray()));
erf.processRecords(fs.createDocumentInputStream("Workbook")); // erf.processRecords(fs.createDocumentInputStream("Workbook"));
} catch (RecordFormatException e) { // } catch (RecordFormatException e) {
throw new RuntimeException(e); // throw new RuntimeException(e);
} catch (IOException e) { // } catch (IOException e) {
throw new RuntimeException(e); // throw new RuntimeException(e);
} // }
} // }
// else verify record ordering by navigating the raw bytes // else verify record ordering by navigating the raw bytes
byte[] dvHeaderRecStart= { (byte)0xB2, 0x01, 0x12, 0x00, }; byte[] dvHeaderRecStart= { (byte)0xB2, 0x01, 0x12, 0x00, };
@ -199,10 +191,13 @@ public final class TestDataValidation extends BaseTestDataValidation {
// and the DV records, Excel will not be able to open the workbook without error. // and the DV records, Excel will not be able to open the workbook without error.
if (nextSid == 0x0867) { if (nextSid == 0x0867) {
throw new AssertionFailedError("Identified bug 45519"); fail("Identified bug 45519");
} }
assertEquals(DVRecord.sid, nextSid); assertEquals(DVRecord.sid, nextSid);
wb.close();
} }
private int findIndex(byte[] largeData, byte[] searchPattern) { private int findIndex(byte[] largeData, byte[] searchPattern) {
byte firstByte = searchPattern[0]; byte firstByte = searchPattern[0];
for (int i = 0; i < largeData.length; i++) { for (int i = 0; i < largeData.length; i++) {
@ -223,7 +218,8 @@ public final class TestDataValidation extends BaseTestDataValidation {
return -1; return -1;
} }
public void testGetDataValidationsAny() { @Test
public void testGetDataValidationsAny() throws Exception {
HSSFWorkbook wb = new HSSFWorkbook(); HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet sheet = wb.createSheet(); HSSFSheet sheet = wb.createSheet();
List<HSSFDataValidation> list = sheet.getDataValidations(); List<HSSFDataValidation> list = sheet.getDataValidations();
@ -265,9 +261,12 @@ public final class TestDataValidation extends BaseTestDataValidation {
DataValidationConstraint c = dv.getValidationConstraint(); DataValidationConstraint c = dv.getValidationConstraint();
assertEquals(ValidationType.ANY, c.getValidationType()); assertEquals(ValidationType.ANY, c.getValidationType());
assertEquals(OperatorType.IGNORED, c.getOperator()); assertEquals(OperatorType.IGNORED, c.getOperator());
wb.close();
} }
public void testGetDataValidationsIntegerFormula() { @Test
public void testGetDataValidationsIntegerFormula() throws Exception {
HSSFWorkbook wb = new HSSFWorkbook(); HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet sheet = wb.createSheet(); HSSFSheet sheet = wb.createSheet();
List<HSSFDataValidation> list = sheet.getDataValidations(); List<HSSFDataValidation> list = sheet.getDataValidations();
@ -291,9 +290,12 @@ public final class TestDataValidation extends BaseTestDataValidation {
assertEquals("A3", c.getFormula2()); assertEquals("A3", c.getFormula2());
assertEquals(null, c.getValue1()); assertEquals(null, c.getValue1());
assertEquals(null, c.getValue2()); assertEquals(null, c.getValue2());
wb.close();
} }
public void testGetDataValidationsIntegerValue() { @Test
public void testGetDataValidationsIntegerValue() throws Exception {
HSSFWorkbook wb = new HSSFWorkbook(); HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet sheet = wb.createSheet(); HSSFSheet sheet = wb.createSheet();
List<HSSFDataValidation> list = sheet.getDataValidations(); List<HSSFDataValidation> list = sheet.getDataValidations();
@ -317,9 +319,12 @@ public final class TestDataValidation extends BaseTestDataValidation {
assertEquals(null, c.getFormula2()); assertEquals(null, c.getFormula2());
assertEquals(new Double("100"), c.getValue1()); assertEquals(new Double("100"), c.getValue1());
assertEquals(new Double("200"), c.getValue2()); assertEquals(new Double("200"), c.getValue2());
wb.close();
} }
public void testGetDataValidationsDecimal() { @Test
public void testGetDataValidationsDecimal() throws Exception {
HSSFWorkbook wb = new HSSFWorkbook(); HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet sheet = wb.createSheet(); HSSFSheet sheet = wb.createSheet();
List<HSSFDataValidation> list = sheet.getDataValidations(); List<HSSFDataValidation> list = sheet.getDataValidations();
@ -343,9 +348,12 @@ public final class TestDataValidation extends BaseTestDataValidation {
assertEquals(null, c.getFormula2()); assertEquals(null, c.getFormula2());
assertEquals(null, c.getValue1()); assertEquals(null, c.getValue1());
assertEquals(new Double("200"), c.getValue2()); assertEquals(new Double("200"), c.getValue2());
wb.close();
} }
public void testGetDataValidationsDate() { @Test
public void testGetDataValidationsDate() throws Exception {
HSSFWorkbook wb = new HSSFWorkbook(); HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet sheet = wb.createSheet(); HSSFSheet sheet = wb.createSheet();
List<HSSFDataValidation> list = sheet.getDataValidations(); List<HSSFDataValidation> list = sheet.getDataValidations();
@ -367,11 +375,14 @@ public final class TestDataValidation extends BaseTestDataValidation {
assertEquals(OperatorType.EQUAL, c.getOperator()); assertEquals(OperatorType.EQUAL, c.getOperator());
assertEquals(null, c.getFormula1()); assertEquals(null, c.getFormula1());
assertEquals(null, c.getFormula2()); assertEquals(null, c.getFormula2());
assertEquals(DateUtil.getExcelDate(DateUtil.parseYYYYMMDDDate("2014/10/25")), c.getValue1()); assertEquals(DateUtil.getExcelDate(DateUtil.parseYYYYMMDDDate("2014/10/25")), c.getValue1(), 0);
assertEquals(null, c.getValue2()); assertEquals(null, c.getValue2());
wb.close();
} }
public void testGetDataValidationsListExplicit() { @Test
public void testGetDataValidationsListExplicit() throws Exception {
HSSFWorkbook wb = new HSSFWorkbook(); HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet sheet = wb.createSheet(); HSSFSheet sheet = wb.createSheet();
List<HSSFDataValidation> list = sheet.getDataValidations(); List<HSSFDataValidation> list = sheet.getDataValidations();
@ -402,9 +413,12 @@ public final class TestDataValidation extends BaseTestDataValidation {
assertEquals("aaa", values[0]); assertEquals("aaa", values[0]);
assertEquals("bbb", values[1]); assertEquals("bbb", values[1]);
assertEquals("ccc", values[2]); assertEquals("ccc", values[2]);
wb.close();
} }
public void testGetDataValidationsListFormula() { @Test
public void testGetDataValidationsListFormula() throws Exception {
HSSFWorkbook wb = new HSSFWorkbook(); HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet sheet = wb.createSheet(); HSSFSheet sheet = wb.createSheet();
List<HSSFDataValidation> list = sheet.getDataValidations(); List<HSSFDataValidation> list = sheet.getDataValidations();
@ -429,9 +443,12 @@ public final class TestDataValidation extends BaseTestDataValidation {
assertEquals(null, c.getFormula2()); assertEquals(null, c.getFormula2());
assertEquals(null, c.getValue1()); assertEquals(null, c.getValue1());
assertEquals(null, c.getValue2()); assertEquals(null, c.getValue2());
wb.close();
} }
public void testGetDataValidationsFormula() { @Test
public void testGetDataValidationsFormula() throws Exception {
HSSFWorkbook wb = new HSSFWorkbook(); HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet sheet = wb.createSheet(); HSSFSheet sheet = wb.createSheet();
List<HSSFDataValidation> list = sheet.getDataValidations(); List<HSSFDataValidation> list = sheet.getDataValidations();
@ -453,5 +470,6 @@ public final class TestDataValidation extends BaseTestDataValidation {
assertEquals(null, c.getFormula2()); assertEquals(null, c.getFormula2());
assertEquals(null, c.getValue1()); assertEquals(null, c.getValue1());
assertEquals(null, c.getValue2()); assertEquals(null, c.getValue2());
wb.close();
} }
} }

View File

@ -17,20 +17,21 @@
package org.apache.poi.hssf.usermodel; package org.apache.poi.hssf.usermodel;
import java.io.File; import static org.junit.Assert.assertEquals;
import java.io.FileOutputStream; import static org.junit.Assert.assertTrue;
import java.io.IOException; import static org.junit.Assert.fail;
import java.lang.reflect.Field; import java.lang.reflect.Field;
import org.apache.poi.hssf.HSSFITestDataProvider; import org.apache.poi.hssf.HSSFITestDataProvider;
import org.apache.poi.hssf.HSSFTestDataSamples; import org.apache.poi.hssf.HSSFTestDataSamples;
import org.apache.poi.hssf.model.HSSFFormulaParser; import org.apache.poi.hssf.model.HSSFFormulaParser;
import org.apache.poi.hssf.record.NameRecord; import org.apache.poi.hssf.record.NameRecord;
import org.apache.poi.ss.formula.ptg.Ptg;
import org.apache.poi.ss.formula.FormulaType; import org.apache.poi.ss.formula.FormulaType;
import org.apache.poi.ss.formula.ptg.Ptg;
import org.apache.poi.ss.usermodel.BaseTestNamedRange; import org.apache.poi.ss.usermodel.BaseTestNamedRange;
import org.apache.poi.ss.util.AreaReference; import org.apache.poi.ss.util.AreaReference;
import org.apache.poi.util.TempFile; import org.junit.Test;
/** /**
* Tests various functionality having to do with {@link org.apache.poi.ss.usermodel.Name}. * Tests various functionality having to do with {@link org.apache.poi.ss.usermodel.Name}.
@ -65,7 +66,8 @@ public final class TestHSSFName extends BaseTestNamedRange {
super(HSSFITestDataProvider.instance); super(HSSFITestDataProvider.instance);
} }
public void testRepeatingRowsAndColumsNames() { @Test
public void testRepeatingRowsAndColumsNames() throws Exception {
// First test that setting RR&C for same sheet more than once only creates a // First test that setting RR&C for same sheet more than once only creates a
// single Print_Titles built-in record // single Print_Titles built-in record
HSSFWorkbook wb = new HSSFWorkbook(); HSSFWorkbook wb = new HSSFWorkbook();
@ -80,15 +82,16 @@ public final class TestHSSFName extends BaseTestNamedRange {
HSSFName nr1 = wb.getNameAt(0); HSSFName nr1 = wb.getNameAt(0);
assertEquals("Print_Titles", nr1.getNameName()); assertEquals("Print_Titles", nr1.getNameName());
if (false) { // if (false) {
// TODO - full column references not rendering properly, absolute markers not present either // // TODO - full column references not rendering properly, absolute markers not present either
assertEquals("FirstSheet!$A:$A,FirstSheet!$1:$3", nr1.getRefersToFormula()); // assertEquals("FirstSheet!$A:$A,FirstSheet!$1:$3", nr1.getRefersToFormula());
} else { // } else {
assertEquals("FirstSheet!A:A,FirstSheet!$A$1:$IV$3", nr1.getRefersToFormula()); assertEquals("FirstSheet!A:A,FirstSheet!$A$1:$IV$3", nr1.getRefersToFormula());
} // }
// Save and re-open // Save and re-open
HSSFWorkbook nwb = HSSFTestDataSamples.writeOutAndReadBack(wb); HSSFWorkbook nwb = HSSFTestDataSamples.writeOutAndReadBack(wb);
wb.close();
assertEquals(1, nwb.getNumberOfNames()); assertEquals(1, nwb.getNumberOfNames());
nr1 = nwb.getNameAt(0); nr1 = nwb.getNameAt(0);
@ -107,29 +110,31 @@ public final class TestHSSFName extends BaseTestNamedRange {
assertEquals("Print_Titles", nr2.getNameName()); assertEquals("Print_Titles", nr2.getNameName());
assertEquals("SecondSheet!B:C,SecondSheet!$A$1:$IV$1", nr2.getRefersToFormula()); assertEquals("SecondSheet!B:C,SecondSheet!$A$1:$IV$1", nr2.getRefersToFormula());
if (false) { // if (false) {
// In case you fancy checking in excel, to ensure it // // In case you fancy checking in excel, to ensure it
// won't complain about the file now // // won't complain about the file now
try { // try {
File tempFile = TempFile.createTempFile("POI-45126-", ".xls"); // File tempFile = TempFile.createTempFile("POI-45126-", ".xls");
FileOutputStream fout = new FileOutputStream(tempFile); // FileOutputStream fout = new FileOutputStream(tempFile);
nwb.write(fout); // nwb.write(fout);
fout.close(); // fout.close();
System.out.println("check out " + tempFile.getAbsolutePath()); // System.out.println("check out " + tempFile.getAbsolutePath());
} catch (IOException e) { // } catch (IOException e) {
throw new RuntimeException(e); // throw new RuntimeException(e);
} // }
} // }
nwb.close();
} }
public void testNamedRange() { @Test
HSSFWorkbook wb = HSSFTestDataSamples.openSampleWorkbook("Simple.xls"); public void testNamedRange() throws Exception {
HSSFWorkbook wb1 = HSSFTestDataSamples.openSampleWorkbook("Simple.xls");
//Creating new Named Range //Creating new Named Range
HSSFName newNamedRange = wb.createName(); HSSFName newNamedRange = wb1.createName();
//Getting Sheet Name for the reference //Getting Sheet Name for the reference
String sheetName = wb.getSheetName(0); String sheetName = wb1.getSheetName(0);
//Setting its name //Setting its name
newNamedRange.setNameName("RangeTest"); newNamedRange.setNameName("RangeTest");
@ -137,18 +142,20 @@ public final class TestHSSFName extends BaseTestNamedRange {
newNamedRange.setRefersToFormula(sheetName + "!$D$4:$E$8"); newNamedRange.setRefersToFormula(sheetName + "!$D$4:$E$8");
//Getting NAmed Range //Getting NAmed Range
HSSFName namedRange1 = wb.getNameAt(0); HSSFName namedRange1 = wb1.getNameAt(0);
//Getting it sheet name //Getting it sheet name
sheetName = namedRange1.getSheetName(); sheetName = namedRange1.getSheetName();
// sanity check // sanity check
SanityChecker c = new SanityChecker(); SanityChecker c = new SanityChecker();
c.checkHSSFWorkbook(wb); c.checkHSSFWorkbook(wb1);
wb = HSSFTestDataSamples.writeOutAndReadBack(wb); HSSFWorkbook wb2 = HSSFTestDataSamples.writeOutAndReadBack(wb1);
HSSFName nm =wb.getNameAt(wb.getNameIndex("RangeTest")); HSSFName nm = wb2.getNameAt(wb2.getNameIndex("RangeTest"));
assertTrue("Name is "+nm.getNameName(),"RangeTest".equals(nm.getNameName())); assertTrue("Name is "+nm.getNameName(),"RangeTest".equals(nm.getNameName()));
assertEquals(wb.getSheetName(0)+"!$D$4:$E$8", nm.getRefersToFormula()); assertEquals(wb2.getSheetName(0)+"!$D$4:$E$8", nm.getRefersToFormula());
wb2.close();
wb1.close();
} }
/** /**
@ -156,7 +163,8 @@ public final class TestHSSFName extends BaseTestNamedRange {
* <p> * <p>
* Addresses Bug <a href="http://issues.apache.org/bugzilla/show_bug.cgi?id=9632" target="_bug">#9632</a> * Addresses Bug <a href="http://issues.apache.org/bugzilla/show_bug.cgi?id=9632" target="_bug">#9632</a>
*/ */
public void testNamedRead() { @Test
public void testNamedRead() throws Exception {
HSSFWorkbook wb = HSSFTestDataSamples.openSampleWorkbook("namedinput.xls"); HSSFWorkbook wb = HSSFTestDataSamples.openSampleWorkbook("namedinput.xls");
//Get index of the named range with the name = "NamedRangeName" , which was defined in input.xls as A1:D10 //Get index of the named range with the name = "NamedRangeName" , which was defined in input.xls as A1:D10
@ -175,6 +183,8 @@ public final class TestHSSFName extends BaseTestNamedRange {
assertEquals(sheetName+"!$D$17:$G$27", namedRange2.getRefersToFormula()); assertEquals(sheetName+"!$D$17:$G$27", namedRange2.getRefersToFormula());
assertEquals("SecondNamedRange", namedRange2.getNameName()); assertEquals("SecondNamedRange", namedRange2.getNameName());
wb.close();
} }
/** /**
@ -182,7 +192,8 @@ public final class TestHSSFName extends BaseTestNamedRange {
* <p> * <p>
* Addresses Bug <a href="http://issues.apache.org/bugzilla/show_bug.cgi?id=16411" target="_bug">#16411</a> * Addresses Bug <a href="http://issues.apache.org/bugzilla/show_bug.cgi?id=16411" target="_bug">#16411</a>
*/ */
public void testNamedReadModify() { @Test
public void testNamedReadModify() throws Exception {
HSSFWorkbook wb = HSSFTestDataSamples.openSampleWorkbook("namedinput.xls"); HSSFWorkbook wb = HSSFTestDataSamples.openSampleWorkbook("namedinput.xls");
HSSFName name = wb.getNameAt(0); HSSFName name = wb.getNameAt(0);
@ -195,22 +206,26 @@ public final class TestHSSFName extends BaseTestNamedRange {
name.setRefersToFormula(newReference); name.setRefersToFormula(newReference);
assertEquals(newReference, name.getRefersToFormula()); assertEquals(newReference, name.getRefersToFormula());
wb.close();
} }
/** /**
* Test to see if the print area can be retrieved from an excel created file * Test to see if the print area can be retrieved from an excel created file
*/ */
public void testPrintAreaFileRead() { @Test
HSSFWorkbook workbook = HSSFTestDataSamples.openSampleWorkbook("SimpleWithPrintArea.xls"); public void testPrintAreaFileRead() throws Exception {
HSSFWorkbook workbook = HSSFTestDataSamples.openSampleWorkbook("SimpleWithPrintArea.xls");
String sheetName = workbook.getSheetName(0); String sheetName = workbook.getSheetName(0);
String reference = sheetName+"!$A$1:$C$5"; String reference = sheetName+"!$A$1:$C$5";
assertEquals(reference, workbook.getPrintArea(0)); assertEquals(reference, workbook.getPrintArea(0));
workbook.close();
} }
@Test
public void testDeletedReference() { public void testDeletedReference() throws Exception {
HSSFWorkbook wb = HSSFTestDataSamples.openSampleWorkbook("24207.xls"); HSSFWorkbook wb = HSSFTestDataSamples.openSampleWorkbook("24207.xls");
assertEquals(2, wb.getNumberOfNames()); assertEquals(2, wb.getNumberOfNames());
@ -230,6 +245,7 @@ public final class TestHSSFName extends BaseTestNamedRange {
} catch (IllegalArgumentException e) { // TODO - use a stronger typed exception for this condition } catch (IllegalArgumentException e) { // TODO - use a stronger typed exception for this condition
// expected during successful test // expected during successful test
} }
wb.close();
} }
/** /**
@ -237,7 +253,8 @@ public final class TestHSSFName extends BaseTestNamedRange {
* must set the type of operands to Ptg.CLASS_REF, * must set the type of operands to Ptg.CLASS_REF,
* otherwise created named don't appear in the drop-down to the left of formula bar in Excel * otherwise created named don't appear in the drop-down to the left of formula bar in Excel
*/ */
public void testTypeOfRootPtg(){ @Test
public void testTypeOfRootPtg() throws Exception {
HSSFWorkbook wb = new HSSFWorkbook(); HSSFWorkbook wb = new HSSFWorkbook();
wb.createSheet("CSCO"); wb.createSheet("CSCO");
@ -245,6 +262,6 @@ public final class TestHSSFName extends BaseTestNamedRange {
for (int i = 0; i < ptgs.length; i++) { for (int i = 0; i < ptgs.length; i++) {
assertEquals('R', ptgs[i].getRVAType()); assertEquals('R', ptgs[i].getRVAType());
} }
wb.close();
} }
} }

View File

@ -17,13 +17,12 @@
package org.apache.poi.hssf.usermodel; package org.apache.poi.hssf.usermodel;
import static org.junit.Assert.fail;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
import junit.framework.AssertionFailedError;
import junit.framework.TestCase;
import org.apache.poi.hssf.record.BOFRecord; import org.apache.poi.hssf.record.BOFRecord;
import org.apache.poi.hssf.record.BoundSheetRecord; import org.apache.poi.hssf.record.BoundSheetRecord;
import org.apache.poi.hssf.record.EOFRecord; import org.apache.poi.hssf.record.EOFRecord;
@ -31,6 +30,7 @@ import org.apache.poi.hssf.record.InterfaceHdrRecord;
import org.apache.poi.hssf.record.NameRecord; import org.apache.poi.hssf.record.NameRecord;
import org.apache.poi.hssf.record.Record; import org.apache.poi.hssf.record.Record;
import org.apache.poi.hssf.usermodel.SanityChecker.CheckRecord; import org.apache.poi.hssf.usermodel.SanityChecker.CheckRecord;
import org.junit.Test;
/** /**
* A Test case for a test utility class.<br/> * A Test case for a test utility class.<br/>
@ -38,11 +38,13 @@ import org.apache.poi.hssf.usermodel.SanityChecker.CheckRecord;
* *
* @author Glen Stampoultzis (glens at apache.org) * @author Glen Stampoultzis (glens at apache.org)
*/ */
public final class TestSanityChecker extends TestCase { public final class TestSanityChecker {
private static final Record INTERFACEHDR = new InterfaceHdrRecord(InterfaceHdrRecord.CODEPAGE); private static final Record INTERFACEHDR = new InterfaceHdrRecord(InterfaceHdrRecord.CODEPAGE);
private static BoundSheetRecord createBoundSheetRec() { private static BoundSheetRecord createBoundSheetRec() {
return new BoundSheetRecord("Sheet1"); return new BoundSheetRecord("Sheet1");
} }
@Test
public void testCheckRecordOrder() { public void testCheckRecordOrder() {
final SanityChecker c = new SanityChecker(); final SanityChecker c = new SanityChecker();
List<Record> records = new ArrayList<Record>(); List<Record> records = new ArrayList<Record>();
@ -119,17 +121,17 @@ public final class TestSanityChecker extends TestCase {
} }
private static void confirmBadRecordOrder(final SanityChecker.CheckRecord[] check, Record[] recs) { private static void confirmBadRecordOrder(final SanityChecker.CheckRecord[] check, Record[] recs) {
final SanityChecker c = new SanityChecker(); final SanityChecker c = new SanityChecker();
final List records = Arrays.asList(recs); final List<Record> records = Arrays.asList(recs);
try { try {
new Runnable() { new Runnable() {
public void run() { public void run() {
c.checkRecordOrder(records, check); c.checkRecordOrder(records, check);
} }
}.run(); }.run();
} catch (AssertionFailedError pass) { } catch (AssertionError pass) {
// expected during normal test // expected during normal test
return; return;
} }
throw new AssertionFailedError("Did not get failure exception as expected"); fail("Did not get failure exception as expected");
} }
} }

View File

@ -17,31 +17,27 @@
package org.apache.poi.poifs.storage; package org.apache.poi.poifs.storage;
import junit.framework.Test; import org.junit.runner.RunWith;
import junit.framework.TestSuite; import org.junit.runners.Suite;
/** /**
* Tests for org.apache.poi.poifs.storage<br/> * Tests for org.apache.poi.poifs.storage<br/>
*
* @author Josh Micich
*/ */
public final class AllPOIFSStorageTests { @RunWith(Suite.class)
@Suite.SuiteClasses({
public static Test suite() { TestBATBlock.class,
TestSuite result = new TestSuite(AllPOIFSStorageTests.class.getName()); TestBlockAllocationTableReader.class,
result.addTestSuite(TestBATBlock.class); TestBlockAllocationTableWriter.class,
result.addTestSuite(TestBlockAllocationTableReader.class); TestBlockListImpl.class,
result.addTestSuite(TestBlockAllocationTableWriter.class); TestDocumentBlock.class,
result.addTestSuite(TestBlockListImpl.class); TestHeaderBlockReading.class,
result.addTestSuite(TestDocumentBlock.class); TestHeaderBlockWriting.class,
result.addTestSuite(TestHeaderBlockReading.class); TestPropertyBlock.class,
result.addTestSuite(TestHeaderBlockWriting.class); TestRawDataBlock.class,
result.addTestSuite(TestPropertyBlock.class); TestRawDataBlockList.class,
result.addTestSuite(TestRawDataBlock.class); TestSmallBlockTableReader.class,
result.addTestSuite(TestRawDataBlockList.class); TestSmallBlockTableWriter.class,
result.addTestSuite(TestSmallBlockTableReader.class); TestSmallDocumentBlock.class,
result.addTestSuite(TestSmallBlockTableWriter.class); TestSmallDocumentBlockList.class
result.addTestSuite(TestSmallDocumentBlock.class); })
result.addTestSuite(TestSmallDocumentBlockList.class); public class AllPOIFSStorageTests {
return result;
}
} }

View File

@ -17,24 +17,26 @@
package org.apache.poi.poifs.storage; package org.apache.poi.poifs.storage;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.fail;
import java.io.ByteArrayInputStream; import java.io.ByteArrayInputStream;
import java.io.IOException; import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
import junit.framework.TestCase;
import org.apache.poi.poifs.common.POIFSConstants; import org.apache.poi.poifs.common.POIFSConstants;
import org.apache.poi.util.LittleEndian; import org.apache.poi.util.LittleEndian;
import org.apache.poi.util.LittleEndianConsts; import org.apache.poi.util.LittleEndianConsts;
import org.junit.Test;
/** /**
* Class to test BlockListImpl functionality * Class to test BlockListImpl functionality
* *
* @author Marc Johnson * @author Marc Johnson
*/ */
public final class TestBlockListImpl extends TestCase { public final class TestBlockListImpl {
private static final class BlockListTestImpl extends BlockListImpl { private static final class BlockListTestImpl extends BlockListImpl {
public BlockListTestImpl() { public BlockListTestImpl() {
// no extra initialisation // no extra initialisation
@ -44,6 +46,7 @@ public final class TestBlockListImpl extends TestCase {
return new BlockListTestImpl(); return new BlockListTestImpl();
} }
@Test
public void testZap() throws IOException { public void testZap() throws IOException {
BlockListImpl list = create(); BlockListImpl list = create();
@ -79,7 +82,7 @@ public final class TestBlockListImpl extends TestCase {
} }
} }
@Test
public void testRemove() throws IOException { public void testRemove() throws IOException {
BlockListImpl list = create(); BlockListImpl list = create();
RawDataBlock[] blocks = new RawDataBlock[ 5 ]; RawDataBlock[] blocks = new RawDataBlock[ 5 ];
@ -139,6 +142,7 @@ public final class TestBlockListImpl extends TestCase {
} }
} }
@Test
public void testSetBAT() throws IOException { public void testSetBAT() throws IOException {
BlockListImpl list = create(); BlockListImpl list = create();
@ -154,6 +158,7 @@ public final class TestBlockListImpl extends TestCase {
} }
} }
@Test
public void testFetchBlocks() throws IOException { public void testFetchBlocks() throws IOException {
// strategy: // strategy:
@ -169,7 +174,7 @@ public final class TestBlockListImpl extends TestCase {
// that includes a reserved (XBAT) block, and one that // that includes a reserved (XBAT) block, and one that
// points off into space somewhere // points off into space somewhere
BlockListImpl list = create(); BlockListImpl list = create();
List raw_blocks = new ArrayList(); List<RawDataBlock> raw_blocks = new ArrayList<RawDataBlock>();
byte[] data = new byte[ 512 ]; byte[] data = new byte[ 512 ];
int offset = 0; int offset = 0;
@ -227,8 +232,7 @@ public final class TestBlockListImpl extends TestCase {
raw_blocks.add( raw_blocks.add(
new RawDataBlock(new ByteArrayInputStream(new byte[ 0 ]))); new RawDataBlock(new ByteArrayInputStream(new byte[ 0 ])));
} }
list.setBlocks(( RawDataBlock [] ) raw_blocks list.setBlocks(raw_blocks.toArray(new RawDataBlock[raw_blocks.size()]));
.toArray(new RawDataBlock[ 0 ]));
int[] blocks = int[] blocks =
{ {
0 0

View File

@ -17,26 +17,27 @@
package org.apache.poi.poifs.storage; package org.apache.poi.poifs.storage;
import static org.junit.Assert.assertEquals;
import java.io.ByteArrayOutputStream; import java.io.ByteArrayOutputStream;
import java.io.IOException; import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import org.apache.poi.poifs.common.POIFSConstants; import org.apache.poi.poifs.common.POIFSConstants;
import org.apache.poi.poifs.property.Property;
import junit.framework.TestCase; import org.junit.Test;
/** /**
* Class to test PropertyBlock functionality * Class to test PropertyBlock functionality
*
* @author Marc Johnson
*/ */
public final class TestPropertyBlock extends TestCase { public final class TestPropertyBlock {
public void testCreatePropertyBlocks() { @Test
public void testCreatePropertyBlocks() throws Exception {
// test with 0 properties // test with 0 properties
List properties = new ArrayList(); List<Property> properties = new ArrayList<Property>();
BlockWritable[] blocks = BlockWritable[] blocks =
PropertyBlock.createPropertyBlockArray(POIFSConstants.SMALLER_BIG_BLOCK_SIZE_DETAILS,properties); PropertyBlock.createPropertyBlockArray(POIFSConstants.SMALLER_BIG_BLOCK_SIZE_DETAILS,properties);
@ -181,22 +182,18 @@ public final class TestPropertyBlock extends TestCase {
} }
} }
private static void verifyCorrect(BlockWritable[] blocks, byte[] testblock) { private static void verifyCorrect(BlockWritable[] blocks, byte[] testblock)
throws IOException {
ByteArrayOutputStream stream = new ByteArrayOutputStream(512 ByteArrayOutputStream stream = new ByteArrayOutputStream(512
* blocks.length); * blocks.length);
for (int j = 0; j < blocks.length; j++) { for (BlockWritable b : blocks) {
try { b.writeBlocks(stream);
blocks[ j ].writeBlocks(stream);
} catch (IOException e) {
throw new RuntimeException(e);
}
} }
byte[] output = stream.toByteArray(); byte[] output = stream.toByteArray();
assertEquals(testblock.length, output.length); assertEquals(testblock.length, output.length);
for (int j = 0; j < testblock.length; j++) for (int j = 0; j < testblock.length; j++) {
{
assertEquals("mismatch at offset " + j, testblock[ j ], assertEquals("mismatch at offset " + j, testblock[ j ],
output[ j ]); output[ j ]);
} }

View File

@ -17,13 +17,12 @@
package org.apache.poi.ss.formula.eval; package org.apache.poi.ss.formula.eval;
import java.io.FileOutputStream; import static org.junit.Assert.assertEquals;
import static org.junit.Assert.fail;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import junit.framework.AssertionFailedError;
import junit.framework.TestCase;
import org.apache.poi.hssf.HSSFTestDataSamples; import org.apache.poi.hssf.HSSFTestDataSamples;
import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFFormulaEvaluator; import org.apache.poi.hssf.usermodel.HSSFFormulaEvaluator;
@ -31,31 +30,25 @@ import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.CellValue; import org.apache.poi.ss.usermodel.CellValue;
import org.junit.Test;
/** /**
* Miscellaneous tests for bugzilla entries.<p/> The test name contains the * Miscellaneous tests for bugzilla entries.<p/> The test name contains the
* bugzilla bug id. * bugzilla bug id.
*
*
* @author Josh Micich
*/ */
public final class TestFormulaBugs extends TestCase { public final class TestFormulaBugs {
/** /**
* Bug 27349 - VLOOKUP with reference to another sheet.<p/> This test was * Bug 27349 - VLOOKUP with reference to another sheet.<p/> This test was
* added <em>long</em> after the relevant functionality was fixed. * added <em>long</em> after the relevant functionality was fixed.
*/ */
public void test27349() { @Test
public void test27349() throws Exception {
// 27349-vlookupAcrossSheets.xls is bugzilla/attachment.cgi?id=10622 // 27349-vlookupAcrossSheets.xls is bugzilla/attachment.cgi?id=10622
InputStream is = HSSFTestDataSamples.openSampleFileStream("27349-vlookupAcrossSheets.xls"); InputStream is = HSSFTestDataSamples.openSampleFileStream("27349-vlookupAcrossSheets.xls");
HSSFWorkbook wb; // original bug may have thrown exception here,
try { // or output warning to stderr
// original bug may have thrown exception here, or output warning to HSSFWorkbook wb = new HSSFWorkbook(is);
// stderr
wb = new HSSFWorkbook(is);
} catch (IOException e) {
throw new RuntimeException(e);
}
HSSFSheet sheet = wb.getSheetAt(0); HSSFSheet sheet = wb.getSheetAt(0);
HSSFRow row = sheet.getRow(1); HSSFRow row = sheet.getRow(1);
@ -71,6 +64,9 @@ public final class TestFormulaBugs extends TestCase {
assertEquals(HSSFCell.CELL_TYPE_NUMERIC, cv.getCellType()); assertEquals(HSSFCell.CELL_TYPE_NUMERIC, cv.getCellType());
assertEquals(3.0, cv.getNumberValue(), 0.0); assertEquals(3.0, cv.getNumberValue(), 0.0);
wb.close();
is.close();
} }
/** /**
@ -78,7 +74,8 @@ public final class TestFormulaBugs extends TestCase {
* *
* seems to be a duplicate of 24925 * seems to be a duplicate of 24925
*/ */
public void test27405() { @Test
public void test27405() throws Exception {
HSSFWorkbook wb = new HSSFWorkbook(); HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet sheet = wb.createSheet("input"); HSSFSheet sheet = wb.createSheet("input");
@ -99,16 +96,16 @@ public final class TestFormulaBugs extends TestCase {
cell = row.createCell(3); // D5 cell = row.createCell(3); // D5
cell.setCellFormula("IF(ISNUMBER(b1),b1,b2)"); cell.setCellFormula("IF(ISNUMBER(b1),b1,b2)");
if (false) { // set true to check excel file manually // if (false) { // set true to check excel file manually
// bug report mentions 'Editing the formula in excel "fixes" the problem.' // // bug report mentions 'Editing the formula in excel "fixes" the problem.'
try { // try {
FileOutputStream fileOut = new FileOutputStream("27405output.xls"); // FileOutputStream fileOut = new FileOutputStream("27405output.xls");
wb.write(fileOut); // wb.write(fileOut);
fileOut.close(); // fileOut.close();
} catch (IOException e) { // } catch (IOException e) {
throw new RuntimeException(e); // throw new RuntimeException(e);
} // }
} // }
// use POI's evaluator as an extra sanity check // use POI's evaluator as an extra sanity check
HSSFFormulaEvaluator fe = new HSSFFormulaEvaluator(wb); HSSFFormulaEvaluator fe = new HSSFFormulaEvaluator(wb);
@ -120,58 +117,59 @@ public final class TestFormulaBugs extends TestCase {
cv = fe.evaluate(row.getCell(1)); cv = fe.evaluate(row.getCell(1));
assertEquals(HSSFCell.CELL_TYPE_BOOLEAN, cv.getCellType()); assertEquals(HSSFCell.CELL_TYPE_BOOLEAN, cv.getCellType());
assertEquals(true, cv.getBooleanValue()); assertEquals(true, cv.getBooleanValue());
wb.close();
} }
/** /**
* Bug 42448 - Can't parse SUMPRODUCT(A!C7:A!C67, B8:B68) / B69 <p/> * Bug 42448 - Can't parse SUMPRODUCT(A!C7:A!C67, B8:B68) / B69 <p/>
* @throws IOException * @throws IOException
*/ */
@Test
public void test42448() throws IOException { public void test42448() throws IOException {
HSSFWorkbook wb = new HSSFWorkbook(); HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet sheet1 = wb.createSheet("Sheet1");
HSSFRow row = sheet1.createRow(0);
HSSFCell cell = row.createCell(0);
// it's important to create the referenced sheet first
HSSFSheet sheet2 = wb.createSheet("A"); // note name 'A'
// TODO - POI crashes if the formula is added before this sheet
// RuntimeException("Zero length string is an invalid sheet name")
// Excel doesn't crash but the formula doesn't work until it is
// re-entered
String inputFormula = "SUMPRODUCT(A!C7:A!C67, B8:B68) / B69"; // as per bug report
try { try {
HSSFSheet sheet1 = wb.createSheet("Sheet1"); cell.setCellFormula(inputFormula);
} catch (StringIndexOutOfBoundsException e) {
HSSFRow row = sheet1.createRow(0); fail("Identified bug 42448");
HSSFCell cell = row.createCell(0);
// it's important to create the referenced sheet first
HSSFSheet sheet2 = wb.createSheet("A"); // note name 'A'
// TODO - POI crashes if the formula is added before this sheet
// RuntimeException("Zero length string is an invalid sheet name")
// Excel doesn't crash but the formula doesn't work until it is
// re-entered
String inputFormula = "SUMPRODUCT(A!C7:A!C67, B8:B68) / B69"; // as per bug report
try {
cell.setCellFormula(inputFormula);
} catch (StringIndexOutOfBoundsException e) {
throw new AssertionFailedError("Identified bug 42448");
}
assertEquals("SUMPRODUCT(A!C7:A!C67,B8:B68)/B69", cell.getCellFormula());
// might as well evaluate the sucker...
addCell(sheet2, 5, 2, 3.0); // A!C6
addCell(sheet2, 6, 2, 4.0); // A!C7
addCell(sheet2, 66, 2, 5.0); // A!C67
addCell(sheet2, 67, 2, 6.0); // A!C68
addCell(sheet1, 6, 1, 7.0); // B7
addCell(sheet1, 7, 1, 8.0); // B8
addCell(sheet1, 67, 1, 9.0); // B68
addCell(sheet1, 68, 1, 10.0); // B69
double expectedResult = (4.0 * 8.0 + 5.0 * 9.0) / 10.0;
HSSFFormulaEvaluator fe = new HSSFFormulaEvaluator(wb);
CellValue cv = fe.evaluate(cell);
assertEquals(HSSFCell.CELL_TYPE_NUMERIC, cv.getCellType());
assertEquals(expectedResult, cv.getNumberValue(), 0.0);
} finally {
wb.close();
} }
assertEquals("SUMPRODUCT(A!C7:A!C67,B8:B68)/B69", cell.getCellFormula());
// might as well evaluate the sucker...
addCell(sheet2, 5, 2, 3.0); // A!C6
addCell(sheet2, 6, 2, 4.0); // A!C7
addCell(sheet2, 66, 2, 5.0); // A!C67
addCell(sheet2, 67, 2, 6.0); // A!C68
addCell(sheet1, 6, 1, 7.0); // B7
addCell(sheet1, 7, 1, 8.0); // B8
addCell(sheet1, 67, 1, 9.0); // B68
addCell(sheet1, 68, 1, 10.0); // B69
double expectedResult = (4.0 * 8.0 + 5.0 * 9.0) / 10.0;
HSSFFormulaEvaluator fe = new HSSFFormulaEvaluator(wb);
CellValue cv = fe.evaluate(cell);
assertEquals(HSSFCell.CELL_TYPE_NUMERIC, cv.getCellType());
assertEquals(expectedResult, cv.getNumberValue(), 0.0);
wb.close();
} }
private static void addCell(HSSFSheet sheet, int rowIx, int colIx, private static void addCell(HSSFSheet sheet, int rowIx, int colIx,

View File

@ -17,21 +17,17 @@
package org.apache.poi.ss.formula.function; package org.apache.poi.ss.formula.function;
import junit.framework.Test; import org.junit.runner.RunWith;
import junit.framework.TestSuite; import org.junit.runners.Suite;
/** /**
* Collects all tests for this <tt>org.apache.poi.hssf.record.formula.function</tt>. * Collects all tests for this <tt>org.apache.poi.hssf.record.formula.function</tt>.
*
* @author Josh Micich
*/ */
@RunWith(Suite.class)
@Suite.SuiteClasses({
TestFunctionMetadataRegistry.class,
TestParseMissingBuiltInFuncs.class,
TestReadMissingBuiltInFuncs.class
})
public class AllFormulaFunctionTests { public class AllFormulaFunctionTests {
public static Test suite() {
TestSuite result = new TestSuite(AllFormulaFunctionTests.class.getName());
result.addTestSuite(TestFunctionMetadataRegistry.class);
result.addTestSuite(TestParseMissingBuiltInFuncs.class);
result.addTestSuite(TestReadMissingBuiltInFuncs.class);
return result;
}
} }

View File

@ -621,12 +621,12 @@ public final class ExcelFileFormatDocFunctionExtractor {
File outFile = new File("functionMetadata-asGenerated.txt"); File outFile = new File("functionMetadata-asGenerated.txt");
if (false) { // set true to use local file // if (false) { // set true to use local file
File dir = new File("c:/temp"); // File dir = new File("c:/temp");
File effDocFile = new File(dir, SOURCE_DOC_FILE_NAME); // File effDocFile = new File(dir, SOURCE_DOC_FILE_NAME);
processFile(effDocFile, outFile); // processFile(effDocFile, outFile);
return; // return;
} // }
File tempEFFDocFile = downloadSourceFile(); File tempEFFDocFile = downloadSourceFile();
processFile(tempEFFDocFile, outFile); processFile(tempEFFDocFile, outFile);

View File

@ -17,28 +17,34 @@
package org.apache.poi.ss.formula.function; package org.apache.poi.ss.formula.function;
import junit.framework.AssertionFailedError; import static org.junit.Assert.assertEquals;
import junit.framework.TestCase;
import java.io.IOException;
import org.apache.poi.hssf.model.HSSFFormulaParser; import org.apache.poi.hssf.model.HSSFFormulaParser;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.formula.ptg.AbstractFunctionPtg; import org.apache.poi.ss.formula.ptg.AbstractFunctionPtg;
import org.apache.poi.ss.formula.ptg.FuncPtg; import org.apache.poi.ss.formula.ptg.FuncPtg;
import org.apache.poi.ss.formula.ptg.FuncVarPtg; import org.apache.poi.ss.formula.ptg.FuncVarPtg;
import org.apache.poi.ss.formula.ptg.Ptg; import org.apache.poi.ss.formula.ptg.Ptg;
import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.junit.Test;
import junit.framework.AssertionFailedError;
/** /**
* Tests parsing of some built-in functions that were not properly * Tests parsing of some built-in functions that were not properly
* registered in POI as of bug #44675, #44733 (March/April 2008). * registered in POI as of bug #44675, #44733 (March/April 2008).
*
* @author Josh Micich
*/ */
public final class TestParseMissingBuiltInFuncs extends TestCase { public final class TestParseMissingBuiltInFuncs {
private static Ptg[] parse(String formula) { private static Ptg[] parse(String formula) throws IOException {
HSSFWorkbook book = new HSSFWorkbook(); HSSFWorkbook book = new HSSFWorkbook();
return HSSFFormulaParser.parse(formula, book); Ptg[] ptgs = HSSFFormulaParser.parse(formula, book);
book.close();
return ptgs;
} }
private static void confirmFunc(String formula, int expPtgArraySize, boolean isVarArgFunc, int funcIx) {
private static void confirmFunc(String formula, int expPtgArraySize, boolean isVarArgFunc, int funcIx)
throws IOException {
Ptg[] ptgs = parse(formula); Ptg[] ptgs = parse(formula);
Ptg ptgF = ptgs[ptgs.length-1]; // func is last RPN token in all these formulas Ptg ptgF = ptgs[ptgs.length-1]; // func is last RPN token in all these formulas
@ -53,38 +59,49 @@ public final class TestParseMissingBuiltInFuncs extends TestCase {
} }
assertEquals(expPtgArraySize, ptgs.length); assertEquals(expPtgArraySize, ptgs.length);
assertEquals(funcIx, func.getFunctionIndex()); assertEquals(funcIx, func.getFunctionIndex());
Class expCls = isVarArgFunc ? FuncVarPtg.class : FuncPtg.class; Class<? extends AbstractFunctionPtg> expCls = isVarArgFunc ? FuncVarPtg.class : FuncPtg.class;
assertEquals(expCls, ptgF.getClass()); assertEquals(expCls, ptgF.getClass());
// check that parsed Ptg array converts back to formula text OK // check that parsed Ptg array converts back to formula text OK
HSSFWorkbook book = new HSSFWorkbook(); HSSFWorkbook book = new HSSFWorkbook();
String reRenderedFormula = HSSFFormulaParser.toFormulaString(book, ptgs); String reRenderedFormula = HSSFFormulaParser.toFormulaString(book, ptgs);
assertEquals(formula, reRenderedFormula); assertEquals(formula, reRenderedFormula);
book.close();
} }
public void testDatedif() { @Test
public void testDatedif() throws IOException {
int expSize = 4; // NB would be 5 if POI added tAttrVolatile properly int expSize = 4; // NB would be 5 if POI added tAttrVolatile properly
confirmFunc("DATEDIF(NOW(),NOW(),\"d\")", expSize, false, 351); confirmFunc("DATEDIF(NOW(),NOW(),\"d\")", expSize, false, 351);
} }
public void testDdb() { @Test
public void testDdb() throws IOException {
confirmFunc("DDB(1,1,1,1,1)", 6, true, 144); confirmFunc("DDB(1,1,1,1,1)", 6, true, 144);
} }
public void testAtan() {
@Test
public void testAtan() throws IOException {
confirmFunc("ATAN(1)", 2, false, 18); confirmFunc("ATAN(1)", 2, false, 18);
} }
public void testUsdollar() { @Test
public void testUsdollar() throws IOException {
confirmFunc("USDOLLAR(1)", 2, true, 204); confirmFunc("USDOLLAR(1)", 2, true, 204);
} }
public void testDBCS() { @Test
public void testDBCS() throws IOException {
confirmFunc("DBCS(\"abc\")", 2, false, 215); confirmFunc("DBCS(\"abc\")", 2, false, 215);
} }
public void testIsnontext() {
@Test
public void testIsnontext() throws IOException {
confirmFunc("ISNONTEXT(\"abc\")", 2, false, 190); confirmFunc("ISNONTEXT(\"abc\")", 2, false, 190);
} }
public void testDproduct() {
@Test
public void testDproduct() throws IOException {
confirmFunc("DPRODUCT(C1:E5,\"HarvestYield\",G1:H2)", 4, false, 189); confirmFunc("DPRODUCT(C1:E5,\"HarvestYield\",G1:H2)", 4, false, 189);
} }
} }

View File

@ -0,0 +1,48 @@
/* ====================================================================
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.ss.formula.functions;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
/**
* Direct tests for all implementors of <code>Function</code>.
*/
@RunWith(Suite.class)
@Suite.SuiteClasses({
TestCodeFunctionsFromSpreadsheet.class,
TestComplexFunctionsFromSpreadsheet.class,
TestDeltaFunctionsFromSpreadsheet.class,
TestDGetFunctionsFromSpreadsheet.class,
TestDStarFunctionsFromSpreadsheet.class,
TestFactDoubleFunctionsFromSpreadsheet.class,
TestFixedFunctionsFromSpreadsheet.class,
TestImaginaryFunctionsFromSpreadsheet.class,
TestImRealFunctionsFromSpreadsheet.class,
TestIndexFunctionFromSpreadsheet.class,
TestIndirectFunctionFromSpreadsheet.class,
TestLookupFunctionsFromSpreadsheet.class,
TestMatchFunctionsFromSpreadsheet.class,
TestQuotientFunctionsFromSpreadsheet.class,
TestReptFunctionsFromSpreadsheet.class,
TestRomanFunctionsFromSpreadsheet.class,
TestWeekNumFunctionsFromSpreadsheet.class,
TestWeekNumFunctionsFromSpreadsheet2013.class
})
public class AllSpreadsheetBasedTests {
}

View File

@ -17,198 +17,102 @@
package org.apache.poi.ss.formula.functions; package org.apache.poi.ss.formula.functions;
import java.io.PrintStream; import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import junit.framework.Assert; import java.util.ArrayList;
import junit.framework.AssertionFailedError; import java.util.Collection;
import junit.framework.TestCase; import java.util.List;
import java.util.Locale;
import org.apache.poi.hssf.HSSFTestDataSamples; import org.apache.poi.hssf.HSSFTestDataSamples;
import org.apache.poi.ss.formula.eval.ErrorEval;
import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFFormulaEvaluator; import org.apache.poi.hssf.usermodel.HSSFFormulaEvaluator;
import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.util.CellReference; import org.apache.poi.hssf.util.CellReference;
import org.apache.poi.ss.formula.eval.ErrorEval;
import org.apache.poi.ss.usermodel.CellValue; import org.apache.poi.ss.usermodel.CellValue;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameter;
/** @RunWith(Parameterized.class)
* public abstract class BaseTestFunctionsFromSpreadsheet {
*/
public abstract class BaseTestFunctionsFromSpreadsheet extends TestCase {
private static final class Result {
public static final int SOME_EVALUATIONS_FAILED = -1;
public static final int ALL_EVALUATIONS_SUCCEEDED = +1;
public static final int NO_EVALUATIONS_FOUND = 0;
}
/** /**
* This class defines constants for navigating around the test data spreadsheet used for these tests. * This class defines constants for navigating around the test data spreadsheet used for these tests.
*/ */
private static final class SS { interface SS {
/** Name of the test spreadsheet (found in the standard test data folder) */ /** Name of the test spreadsheet (found in the standard test data folder) */
/** Name of the first sheet in the spreadsheet (contains comments) */ /** Name of the first sheet in the spreadsheet (contains comments) */
public final static String README_SHEET_NAME = "Read Me"; String README_SHEET_NAME = "Read Me";
/** Row (zero-based) in each sheet where the evaluation cases start. */ /** Row (zero-based) in each sheet where the evaluation cases start. */
public static final int START_TEST_CASES_ROW_INDEX = 4; // Row '5' int START_TEST_CASES_ROW_INDEX = 4; // Row '5'
/** Index of the column that contains the function names */ /** Index of the column that contains the function names */
public static final int COLUMN_INDEX_MARKER = 0; // Column 'A' int COLUMN_INDEX_MARKER = 0; // Column 'A'
public static final int COLUMN_INDEX_EVALUATION = 1; // Column 'B' int COLUMN_INDEX_EVALUATION = 1; // Column 'B'
public static final int COLUMN_INDEX_EXPECTED_RESULT = 2; // Column 'C' int COLUMN_INDEX_EXPECTED_RESULT = 2; // Column 'C'
public static final int COLUMN_ROW_COMMENT = 3; // Column 'D' int COLUMN_ROW_COMMENT = 3; // Column 'D'
/** Used to indicate when there are no more test cases on the current sheet */ /** Used to indicate when there are no more test cases on the current sheet */
public static final String TEST_CASES_END_MARKER = "<end>"; String TEST_CASES_END_MARKER = "<end>";
/** Used to indicate that the test on the current row should be ignored */ /** Used to indicate that the test on the current row should be ignored */
public static final String SKIP_CURRENT_TEST_CASE_MARKER = "<skip>"; String SKIP_CURRENT_TEST_CASE_MARKER = "<skip>";
} }
// Note - multiple failures are aggregated before ending. @Parameter(value = 0)
// If one or more functions fail, a single AssertionFailedError is thrown at the end public String testName;
private int _sheetFailureCount; @Parameter(value = 1)
private int _sheetSuccessCount; public String filename;
private int _evaluationFailureCount; @Parameter(value = 2)
private int _evaluationSuccessCount; public HSSFSheet sheet;
@Parameter(value = 3)
public int formulasRowIdx;
@Parameter(value = 4)
public HSSFFormulaEvaluator evaluator;
protected static Collection<Object[]> data(Class<? extends BaseTestFunctionsFromSpreadsheet> clazz, String filename) throws Exception {
HSSFWorkbook workbook = HSSFTestDataSamples.openSampleWorkbook(filename);
confirmReadMeSheet(workbook, clazz);
private static void confirmExpectedResult(String msg, HSSFCell expected, CellValue actual) { List<Object[]> data = new ArrayList<Object[]>();
if (expected == null) {
throw new AssertionFailedError(msg + " - Bad setup data expected value is null");
}
if(actual == null) {
throw new AssertionFailedError(msg + " - actual value was null");
}
if(expected.getCellType() == HSSFCell.CELL_TYPE_ERROR) {
confirmErrorResult(msg, expected.getErrorCellValue(), actual);
return;
}
if(actual.getCellType() == HSSFCell.CELL_TYPE_ERROR) {
throw unexpectedError(msg, expected, actual.getErrorValue());
}
if(actual.getCellType() != expected.getCellType()) {
throw wrongTypeError(msg, expected, actual);
}
switch (expected.getCellType()) {
case HSSFCell.CELL_TYPE_BOOLEAN:
assertEquals(msg, expected.getBooleanCellValue(), actual.getBooleanValue());
break;
case HSSFCell.CELL_TYPE_FORMULA: // will never be used, since we will call method after formula evaluation
throw new IllegalStateException("Cannot expect formula as result of formula evaluation: " + msg);
case HSSFCell.CELL_TYPE_NUMERIC:
assertEquals(expected.getNumericCellValue(), actual.getNumberValue(), 0.0);
break;
case HSSFCell.CELL_TYPE_STRING:
assertEquals(msg, expected.getRichStringCellValue().getString(), actual.getStringValue());
break;
}
}
private static AssertionFailedError wrongTypeError(String msgPrefix, HSSFCell expectedCell, CellValue actualValue) {
return new AssertionFailedError(msgPrefix + " Result type mismatch. Evaluated result was "
+ actualValue.formatAsString()
+ " but the expected result was "
+ formatValue(expectedCell)
);
}
private static AssertionFailedError unexpectedError(String msgPrefix, HSSFCell expected, int actualErrorCode) {
return new AssertionFailedError(msgPrefix + " Error code ("
+ ErrorEval.getText(actualErrorCode)
+ ") was evaluated, but the expected result was "
+ formatValue(expected)
);
}
private static void confirmErrorResult(String msgPrefix, int expectedErrorCode, CellValue actual) {
if(actual.getCellType() != HSSFCell.CELL_TYPE_ERROR) {
throw new AssertionFailedError(msgPrefix + " Expected cell error ("
+ ErrorEval.getText(expectedErrorCode) + ") but actual value was "
+ actual.formatAsString());
}
if(expectedErrorCode != actual.getErrorValue()) {
throw new AssertionFailedError(msgPrefix + " Expected cell error code ("
+ ErrorEval.getText(expectedErrorCode)
+ ") but actual error code was ("
+ ErrorEval.getText(actual.getErrorValue())
+ ")");
}
}
private static String formatValue(HSSFCell expecedCell) {
switch (expecedCell.getCellType()) {
case HSSFCell.CELL_TYPE_BLANK: return "<blank>";
case HSSFCell.CELL_TYPE_BOOLEAN: return String.valueOf(expecedCell.getBooleanCellValue());
case HSSFCell.CELL_TYPE_NUMERIC: return String.valueOf(expecedCell.getNumericCellValue());
case HSSFCell.CELL_TYPE_STRING: return expecedCell.getRichStringCellValue().getString();
}
throw new RuntimeException("Unexpected cell type of expected value (" + expecedCell.getCellType() + ")");
}
protected void setUp() {
_sheetFailureCount = 0;
_sheetSuccessCount = 0;
_evaluationFailureCount = 0;
_evaluationSuccessCount = 0;
}
public void testFunctionsFromTestSpreadsheet() {
HSSFWorkbook workbook = HSSFTestDataSamples.openSampleWorkbook(this.getFilename());
confirmReadMeSheet(workbook);
int nSheets = workbook.getNumberOfSheets(); int nSheets = workbook.getNumberOfSheets();
for(int i=1; i< nSheets; i++) { for(int sheetIdx=1; sheetIdx< nSheets; sheetIdx++) {
int sheetResult = processTestSheet(workbook, i, workbook.getSheetName(i)); HSSFSheet sheet = workbook.getSheetAt(sheetIdx);
switch(sheetResult) { processFunctionGroup(data, sheet, SS.START_TEST_CASES_ROW_INDEX, null, filename);
case Result.ALL_EVALUATIONS_SUCCEEDED: _sheetSuccessCount ++; break;
case Result.SOME_EVALUATIONS_FAILED: _sheetFailureCount ++; break;
}
}
// confirm results
String successMsg = "There were "
+ _sheetSuccessCount + " successful sheets(s) and "
+ _evaluationSuccessCount + " function(s) without error";
if(_sheetFailureCount > 0) {
String msg = _sheetFailureCount + " sheets(s) failed with "
+ _evaluationFailureCount + " evaluation(s). " + successMsg;
throw new AssertionFailedError(msg);
}
if(false) { // normally no output for successful tests
System.out.println(getClass().getName() + ": " + successMsg);
} }
workbook.close();
return data;
} }
protected abstract String getFilename(); private static void processFunctionGroup(List<Object[]> data, HSSFSheet sheet, final int startRowIndex, String testFocusFunctionName, String filename) {
HSSFFormulaEvaluator evaluator = new HSSFFormulaEvaluator(sheet.getWorkbook());
private int processTestSheet(HSSFWorkbook workbook, int sheetIndex, String sheetName) { String currentGroupComment = "";
HSSFSheet sheet = workbook.getSheetAt(sheetIndex); final int maxRows = sheet.getLastRowNum()+1;
HSSFFormulaEvaluator evaluator = new HSSFFormulaEvaluator(workbook); for(int rowIndex=startRowIndex; rowIndex<maxRows; rowIndex++) {
int maxRows = sheet.getLastRowNum()+1;
int result = Result.NO_EVALUATIONS_FOUND; // so far
String currentGroupComment = null;
for(int rowIndex=SS.START_TEST_CASES_ROW_INDEX; rowIndex<maxRows; rowIndex++) {
HSSFRow r = sheet.getRow(rowIndex); HSSFRow r = sheet.getRow(rowIndex);
String newMarkerValue = getMarkerColumnValue(r);
if(r == null) { if(r == null) {
continue; continue;
} }
String newMarkerValue = getCellTextValue(r, SS.COLUMN_INDEX_MARKER, "marker");
if(SS.TEST_CASES_END_MARKER.equalsIgnoreCase(newMarkerValue)) { if(SS.TEST_CASES_END_MARKER.equalsIgnoreCase(newMarkerValue)) {
// normal exit point // normal exit point
return result; return;
} }
if(SS.SKIP_CURRENT_TEST_CASE_MARKER.equalsIgnoreCase(newMarkerValue)) { if(SS.SKIP_CURRENT_TEST_CASE_MARKER.equalsIgnoreCase(newMarkerValue)) {
// currently disabled test case row // currently disabled test case row
@ -217,66 +121,66 @@ public abstract class BaseTestFunctionsFromSpreadsheet extends TestCase {
if(newMarkerValue != null) { if(newMarkerValue != null) {
currentGroupComment = newMarkerValue; currentGroupComment = newMarkerValue;
} }
HSSFCell c = r.getCell(SS.COLUMN_INDEX_EVALUATION); HSSFCell evalCell = r.getCell(SS.COLUMN_INDEX_EVALUATION);
if (c == null || c.getCellType() != HSSFCell.CELL_TYPE_FORMULA) { if (evalCell == null || evalCell.getCellType() != HSSFCell.CELL_TYPE_FORMULA) {
continue; continue;
} }
CellValue actualValue = evaluator.evaluate(c); String rowComment = getCellTextValue(r, SS.COLUMN_ROW_COMMENT, "row comment");
HSSFCell expectedValueCell = r.getCell(SS.COLUMN_INDEX_EXPECTED_RESULT);
String rowComment = getRowCommentColumnValue(r);
String msgPrefix = formatTestCaseDetails(this.getFilename(),sheetName, r.getRowNum(), c, currentGroupComment, rowComment); String testName = (currentGroupComment+'\n'+rowComment).replace("null", "").trim().replace("\n", " - ");
try { if ("".equals(testName)) {
confirmExpectedResult(msgPrefix, expectedValueCell, actualValue); testName = evalCell.getCellFormula();
_evaluationSuccessCount ++;
if(result != Result.SOME_EVALUATIONS_FAILED) {
result = Result.ALL_EVALUATIONS_SUCCEEDED;
}
} catch (RuntimeException e) {
_evaluationFailureCount ++;
printShortStackTrace(System.err, e);
result = Result.SOME_EVALUATIONS_FAILED;
} catch (AssertionFailedError e) {
_evaluationFailureCount ++;
printShortStackTrace(System.err, e);
result = Result.SOME_EVALUATIONS_FAILED;
} }
data.add(new Object[]{testName, filename, sheet, rowIndex, evaluator});
} }
throw new RuntimeException("Missing end marker '" + SS.TEST_CASES_END_MARKER fail("Missing end marker '" + SS.TEST_CASES_END_MARKER + "' on sheet '" + sheet.getSheetName() + "'");
+ "' on sheet '" + sheetName + "'");
} }
@Test
public void processFunctionRow() throws Exception {
HSSFRow r = sheet.getRow(formulasRowIdx);
HSSFCell evalCell = r.getCell(SS.COLUMN_INDEX_EVALUATION);
HSSFCell expectedCell = r.getCell(SS.COLUMN_INDEX_EXPECTED_RESULT);
CellReference cr = new CellReference(sheet.getSheetName(), formulasRowIdx, evalCell.getColumnIndex(), false, false);
String msg = String.format(Locale.ROOT, "In %s %s {=%s} '%s'"
, filename, cr.formatAsString(), evalCell.getCellFormula(), testName);
private static String formatTestCaseDetails(String filename, String sheetName, int rowIndex, HSSFCell c, String currentGroupComment, CellValue actualValue = evaluator.evaluate(evalCell);
String rowComment) {
StringBuffer sb = new StringBuffer(); assertNotNull(msg + " - Bad setup data expected value is null", expectedCell);
assertNotNull(msg + " - actual value was null", actualValue);
sb.append("In ").append(filename).append(" "); if (expectedCell.getCellType() == HSSFCell.CELL_TYPE_ERROR) {
int expectedErrorCode = expectedCell.getErrorCellValue();
CellReference cr = new CellReference(sheetName, rowIndex, c.getColumnIndex(), false, false); assertEquals(msg, HSSFCell.CELL_TYPE_ERROR, actualValue.getCellType());
sb.append(cr.formatAsString()); assertEquals(msg, ErrorEval.getText(expectedErrorCode), actualValue.formatAsString());
sb.append(" {=").append(c.getCellFormula()).append("}"); assertEquals(msg, expectedErrorCode, actualValue.getErrorValue());
assertEquals(msg, ErrorEval.getText(expectedErrorCode), ErrorEval.getText(actualValue.getErrorValue()));
if(currentGroupComment != null) { return;
sb.append(" '");
sb.append(currentGroupComment);
if(rowComment != null) {
sb.append(" - ");
sb.append(rowComment);
}
sb.append("' ");
} else {
if(rowComment != null) {
sb.append(" '");
sb.append(rowComment);
sb.append("' ");
}
} }
return sb.toString(); // unexpected error
assertNotEquals(msg, HSSFCell.CELL_TYPE_ERROR, actualValue.getCellType());
assertNotEquals(msg, formatValue(expectedCell), ErrorEval.getText(actualValue.getErrorValue()));
// wrong type error
assertEquals(msg, expectedCell.getCellType(), actualValue.getCellType());
switch (expectedCell.getCellType()) {
case HSSFCell.CELL_TYPE_BOOLEAN:
assertEquals(msg, expectedCell.getBooleanCellValue(), actualValue.getBooleanValue());
break;
case HSSFCell.CELL_TYPE_FORMULA: // will never be used, since we will call method after formula evaluation
fail("Cannot expect formula as result of formula evaluation: " + msg);
case HSSFCell.CELL_TYPE_NUMERIC:
assertEquals(expectedCell.getNumericCellValue(), actualValue.getNumberValue(), 0.0);
break;
case HSSFCell.CELL_TYPE_STRING:
assertEquals(msg, expectedCell.getRichStringCellValue().getString(), actualValue.getStringValue());
break;
}
} }
/** /**
@ -284,57 +188,13 @@ public abstract class BaseTestFunctionsFromSpreadsheet extends TestCase {
* cells. This back-link is to make it easy to find this class if a reader encounters the * cells. This back-link is to make it easy to find this class if a reader encounters the
* spreadsheet first. * spreadsheet first.
*/ */
private void confirmReadMeSheet(HSSFWorkbook workbook) { private static void confirmReadMeSheet(HSSFWorkbook workbook, Class<? extends BaseTestFunctionsFromSpreadsheet> clazz) {
String firstSheetName = workbook.getSheetName(0); String firstSheetName = workbook.getSheetName(0);
if(!firstSheetName.equalsIgnoreCase(SS.README_SHEET_NAME)) { assertTrue("First sheet's name was '" + firstSheetName + "' but expected '" + SS.README_SHEET_NAME + "'",
throw new RuntimeException("First sheet's name was '" + firstSheetName + "' but expected '" + SS.README_SHEET_NAME + "'"); firstSheetName.equalsIgnoreCase(SS.README_SHEET_NAME));
}
HSSFSheet sheet = workbook.getSheetAt(0); HSSFSheet sheet = workbook.getSheetAt(0);
String specifiedClassName = sheet.getRow(2).getCell(0).getRichStringCellValue().getString(); String specifiedClassName = sheet.getRow(2).getCell(0).getRichStringCellValue().getString();
assertEquals("Test class name in spreadsheet comment", getClass().getName(), specifiedClassName); assertEquals("Test class name in spreadsheet comment", clazz.getName(), specifiedClassName);
}
/**
* Useful to keep output concise when expecting many failures to be reported by this test case
*/
private static void printShortStackTrace(PrintStream ps, Throwable e) {
StackTraceElement[] stes = e.getStackTrace();
int startIx = 0;
// skip any top frames inside junit.framework.Assert
while(startIx<stes.length) {
if(!stes[startIx].getClassName().equals(Assert.class.getName())) {
break;
}
startIx++;
}
// skip bottom frames (part of junit framework)
int endIx = startIx+1;
while(endIx < stes.length) {
if(stes[endIx].getClassName().equals(TestCase.class.getName())) {
break;
}
endIx++;
}
if(startIx >= endIx) {
// something went wrong. just print the whole stack trace
e.printStackTrace(ps);
}
endIx -= 4; // skip 4 frames of reflection invocation
ps.println(e.toString());
for(int i=startIx; i<endIx; i++) {
ps.println("\tat " + stes[i].toString());
}
}
private static String getRowCommentColumnValue(HSSFRow r) {
return getCellTextValue(r, SS.COLUMN_ROW_COMMENT, "row comment");
}
private static String getMarkerColumnValue(HSSFRow r) {
return getCellTextValue(r, SS.COLUMN_INDEX_MARKER, "marker");
} }
/** /**
@ -355,8 +215,21 @@ public abstract class BaseTestFunctionsFromSpreadsheet extends TestCase {
return cell.getRichStringCellValue().getString(); return cell.getRichStringCellValue().getString();
} }
throw new RuntimeException("Bad cell type for '" + columnName + "' column: (" fail("Bad cell type for '" + columnName + "' column: ("
+ cell.getCellType() + ") row (" + (r.getRowNum() +1) + ")"); + cell.getCellType() + ") row (" + (r.getRowNum() +1) + ")");
return "";
} }
private static String formatValue(HSSFCell expecedCell) {
switch (expecedCell.getCellType()) {
case HSSFCell.CELL_TYPE_BLANK: return "<blank>";
case HSSFCell.CELL_TYPE_BOOLEAN: return Boolean.toString(expecedCell.getBooleanCellValue());
case HSSFCell.CELL_TYPE_NUMERIC: return Double.toString(expecedCell.getNumericCellValue());
case HSSFCell.CELL_TYPE_STRING: return expecedCell.getRichStringCellValue().getString();
}
fail("Unexpected cell type of expected value (" + expecedCell.getCellType() + ")");
return "";
}
} }

View File

@ -17,15 +17,16 @@
package org.apache.poi.ss.formula.functions; package org.apache.poi.ss.formula.functions;
import java.util.Collection;
import org.junit.runners.Parameterized.Parameters;
/** /**
* Tests CODE() as loaded from a test data spreadsheet.<p/> * Tests CODE() as loaded from a test data spreadsheet.<p/>
*
* @author cedric dot walter @ gmail dot com
*/ */
public class TestCodeFunctionsFromSpreadsheet extends BaseTestFunctionsFromSpreadsheet { public class TestCodeFunctionsFromSpreadsheet extends BaseTestFunctionsFromSpreadsheet {
@Parameters(name="{0}")
@Override public static Collection<Object[]> data() throws Exception {
protected String getFilename() { return data(TestCodeFunctionsFromSpreadsheet.class, "CodeFunctionTestCaseData.xls");
return "CodeFunctionTestCaseData.xls";
} }
} }

View File

@ -17,15 +17,16 @@
package org.apache.poi.ss.formula.functions; package org.apache.poi.ss.formula.functions;
import java.util.Collection;
import org.junit.runners.Parameterized.Parameters;
/** /**
* Tests COMPLEX() as loaded from a test data spreadsheet.<p/> * Tests COMPLEX() as loaded from a test data spreadsheet.<p/>
*
* @author cedric dot walter @ gmail dot com
*/ */
public class TestComplexFunctionsFromSpreadsheet extends BaseTestFunctionsFromSpreadsheet { public class TestComplexFunctionsFromSpreadsheet extends BaseTestFunctionsFromSpreadsheet {
@Parameters(name="{0}")
@Override public static Collection<Object[]> data() throws Exception {
protected String getFilename() { return data(TestComplexFunctionsFromSpreadsheet.class, "ComplexFunctionTestCaseData.xls");
return "ComplexFunctionTestCaseData.xls";
} }
} }

View File

@ -16,12 +16,16 @@
==================================================================== */ ==================================================================== */
package org.apache.poi.ss.formula.functions; package org.apache.poi.ss.formula.functions;
import java.util.Collection;
import org.junit.runners.Parameterized.Parameters;
/** /**
* Tests DGET() as loaded from a test data spreadsheet. * Tests DGET() as loaded from a test data spreadsheet.
*/ */
public class TestDGetFunctionsFromSpreadsheet extends BaseTestFunctionsFromSpreadsheet { public class TestDGetFunctionsFromSpreadsheet extends BaseTestFunctionsFromSpreadsheet {
@Parameters(name="{0}")
protected String getFilename() { public static Collection<Object[]> data() throws Exception {
return "DGet.xls"; return data(TestDGetFunctionsFromSpreadsheet.class, "DGet.xls");
} }
} }

View File

@ -16,12 +16,16 @@
==================================================================== */ ==================================================================== */
package org.apache.poi.ss.formula.functions; package org.apache.poi.ss.formula.functions;
import java.util.Collection;
import org.junit.runners.Parameterized.Parameters;
/** /**
* Tests D*() functions as loaded from a test data spreadsheet. * Tests D*() functions as loaded from a test data spreadsheet.
*/ */
public class TestDStarFunctionsFromSpreadsheet extends BaseTestFunctionsFromSpreadsheet { public class TestDStarFunctionsFromSpreadsheet extends BaseTestFunctionsFromSpreadsheet {
@Parameters(name="{0}")
protected String getFilename() { public static Collection<Object[]> data() throws Exception {
return "DStar.xls"; return data(TestDStarFunctionsFromSpreadsheet.class, "DStar.xls");
} }
} }

View File

@ -16,14 +16,16 @@
==================================================================== */ ==================================================================== */
package org.apache.poi.ss.formula.functions; package org.apache.poi.ss.formula.functions;
/** import java.util.Collection;
* Tests DELTA() as loaded from a test data spreadsheet.<p/>
*
* @author cedric dot walter @ gmail dot com
*/
public class TestDeltaFunctionsFromSpreadsheet extends BaseTestFunctionsFromSpreadsheet {
protected String getFilename() { import org.junit.runners.Parameterized.Parameters;
return "DeltaFunctionTestCaseData.xls";
/**
* Tests DELTA() as loaded from a test data spreadsheet.<p/>
*/
public class TestDeltaFunctionsFromSpreadsheet extends BaseTestFunctionsFromSpreadsheet {
@Parameters(name="{0}")
public static Collection<Object[]> data() throws Exception {
return data(TestDeltaFunctionsFromSpreadsheet.class, "DeltaFunctionTestCaseData.xls");
} }
} }

View File

@ -17,14 +17,16 @@
package org.apache.poi.ss.formula.functions; package org.apache.poi.ss.formula.functions;
import java.util.Collection;
import org.junit.runners.Parameterized.Parameters;
/** /**
* Tests FactDouble() as loaded from a test data spreadsheet.<p/> * Tests FactDouble() as loaded from a test data spreadsheet.<p/>
*
* @author cedric dot walter @ gmail dot com
*/ */
public class TestFactDoubleFunctionsFromSpreadsheet extends BaseTestFunctionsFromSpreadsheet { public class TestFactDoubleFunctionsFromSpreadsheet extends BaseTestFunctionsFromSpreadsheet {
@Parameters(name="{0}")
protected String getFilename() { public static Collection<Object[]> data() throws Exception {
return "FactDoubleFunctionTestCaseData.xls"; return data(TestFactDoubleFunctionsFromSpreadsheet.class, "FactDoubleFunctionTestCaseData.xls");
} }
} }

View File

@ -17,13 +17,16 @@
package org.apache.poi.ss.formula.functions; package org.apache.poi.ss.formula.functions;
import java.util.Collection;
import org.junit.runners.Parameterized.Parameters;
/** /**
* Tests FIXED() as loaded from a test data spreadsheet. * Tests FIXED() as loaded from a test data spreadsheet.
*/ */
public class TestFixedFunctionsFromSpreadsheet extends BaseTestFunctionsFromSpreadsheet { public class TestFixedFunctionsFromSpreadsheet extends BaseTestFunctionsFromSpreadsheet {
@Parameters(name="{0}")
@Override public static Collection<Object[]> data() throws Exception {
protected String getFilename() { return data(TestFixedFunctionsFromSpreadsheet.class, "57003-FixedFunctionTestCaseData.xls");
return "57003-FixedFunctionTestCaseData.xls";
} }
} }

View File

@ -17,14 +17,16 @@
package org.apache.poi.ss.formula.functions; package org.apache.poi.ss.formula.functions;
import java.util.Collection;
import org.junit.runners.Parameterized.Parameters;
/** /**
* Tests ImReal() as loaded from a test data spreadsheet.<p/> * Tests ImReal() as loaded from a test data spreadsheet.<p/>
*
* @author cedric dot walter @ gmail dot com
*/ */
public class TestImRealFunctionsFromSpreadsheet extends BaseTestFunctionsFromSpreadsheet { public class TestImRealFunctionsFromSpreadsheet extends BaseTestFunctionsFromSpreadsheet {
@Parameters(name="{0}")
protected String getFilename() { public static Collection<Object[]> data() throws Exception {
return "ImRealFunctionTestCaseData.xls"; return data(TestImRealFunctionsFromSpreadsheet.class, "ImRealFunctionTestCaseData.xls");
} }
} }

View File

@ -17,14 +17,16 @@
package org.apache.poi.ss.formula.functions; package org.apache.poi.ss.formula.functions;
import java.util.Collection;
import org.junit.runners.Parameterized.Parameters;
/** /**
* Tests Imaginary() as loaded from a test data spreadsheet.<p/> * Tests Imaginary() as loaded from a test data spreadsheet.<p/>
*
* @author cedric dot walter @ gmail dot com
*/ */
public class TestImaginaryFunctionsFromSpreadsheet extends BaseTestFunctionsFromSpreadsheet { public class TestImaginaryFunctionsFromSpreadsheet extends BaseTestFunctionsFromSpreadsheet {
@Parameters(name="{0}")
protected String getFilename() { public static Collection<Object[]> data() throws Exception {
return "ImaginaryFunctionTestCaseData.xls"; return data(TestImaginaryFunctionsFromSpreadsheet.class, "ImaginaryFunctionTestCaseData.xls");
} }
} }

View File

@ -17,13 +17,16 @@
package org.apache.poi.ss.formula.functions; package org.apache.poi.ss.formula.functions;
import java.util.Collection;
import org.junit.runners.Parameterized.Parameters;
/** /**
* Tests INDEX() as loaded from a test data spreadsheet.<p/> * Tests INDEX() as loaded from a test data spreadsheet.<p/>
*/ */
public final class TestIndexFunctionFromSpreadsheet extends BaseTestFunctionsFromSpreadsheet { public final class TestIndexFunctionFromSpreadsheet extends BaseTestFunctionsFromSpreadsheet {
@Parameters(name="{0}")
@Override public static Collection<Object[]> data() throws Exception {
protected String getFilename() { return data(TestIndexFunctionFromSpreadsheet.class, "IndexFunctionTestCaseData.xls");
return "IndexFunctionTestCaseData.xls";
} }
} }

View File

@ -17,6 +17,10 @@
package org.apache.poi.ss.formula.functions; package org.apache.poi.ss.formula.functions;
import java.util.Collection;
import org.junit.runners.Parameterized.Parameters;
/** /**
* Tests INDIRECT() as loaded from a test data spreadsheet.<p/> * Tests INDIRECT() as loaded from a test data spreadsheet.<p/>
* *
@ -25,9 +29,8 @@ package org.apache.poi.ss.formula.functions;
* more easily. * more easily.
*/ */
public final class TestIndirectFunctionFromSpreadsheet extends BaseTestFunctionsFromSpreadsheet { public final class TestIndirectFunctionFromSpreadsheet extends BaseTestFunctionsFromSpreadsheet {
@Parameters(name="{0}")
@Override public static Collection<Object[]> data() throws Exception {
protected String getFilename() { return data(TestIndirectFunctionFromSpreadsheet.class, "IndirectFunctionTestCaseData.xls");
return "IndirectFunctionTestCaseData.xls";
} }
} }

View File

@ -17,7 +17,9 @@
package org.apache.poi.ss.formula.functions; package org.apache.poi.ss.formula.functions;
import java.util.Collection;
import org.junit.runners.Parameterized.Parameters;
/** /**
* Tests lookup functions (VLOOKUP, HLOOKUP, LOOKUP, MATCH) as loaded from a test data spreadsheet.<p/> * Tests lookup functions (VLOOKUP, HLOOKUP, LOOKUP, MATCH) as loaded from a test data spreadsheet.<p/>
@ -29,9 +31,8 @@ package org.apache.poi.ss.formula.functions;
* more easily. * more easily.
*/ */
public final class TestLookupFunctionsFromSpreadsheet extends BaseTestFunctionsFromSpreadsheet { public final class TestLookupFunctionsFromSpreadsheet extends BaseTestFunctionsFromSpreadsheet {
@Parameters(name="{0}")
@Override public static Collection<Object[]> data() throws Exception {
protected String getFilename() { return data(TestLookupFunctionsFromSpreadsheet.class, "LookupFunctionsTestCaseData.xls");
return "LookupFunctionsTestCaseData.xls";
} }
} }

View File

@ -17,7 +17,9 @@
package org.apache.poi.ss.formula.functions; package org.apache.poi.ss.formula.functions;
import java.util.Collection;
import org.junit.runners.Parameterized.Parameters;
/** /**
* Tests Match functions as loaded from a test data spreadsheet.<p/> * Tests Match functions as loaded from a test data spreadsheet.<p/>
@ -27,9 +29,8 @@ package org.apache.poi.ss.formula.functions;
* more easily. * more easily.
*/ */
public final class TestMatchFunctionsFromSpreadsheet extends BaseTestFunctionsFromSpreadsheet { public final class TestMatchFunctionsFromSpreadsheet extends BaseTestFunctionsFromSpreadsheet {
@Parameters(name="{0}")
@Override public static Collection<Object[]> data() throws Exception {
protected String getFilename() { return data(TestMatchFunctionsFromSpreadsheet.class, "MatchFunctionTestCaseData.xls");
return "MatchFunctionTestCaseData.xls";
} }
} }

View File

@ -17,15 +17,16 @@
package org.apache.poi.ss.formula.functions; package org.apache.poi.ss.formula.functions;
import java.util.Collection;
import org.junit.runners.Parameterized.Parameters;
/** /**
* Tests QUOTIENT() as loaded from a test data spreadsheet.<p/> * Tests QUOTIENT() as loaded from a test data spreadsheet.<p/>
*
* @author cedric dot walter @ gmail dot com
*/ */
public class TestQuotientFunctionsFromSpreadsheet extends BaseTestFunctionsFromSpreadsheet { public class TestQuotientFunctionsFromSpreadsheet extends BaseTestFunctionsFromSpreadsheet {
@Parameters(name="{0}")
@Override public static Collection<Object[]> data() throws Exception {
protected String getFilename() { return data(TestQuotientFunctionsFromSpreadsheet.class, "QuotientFunctionTestCaseData.xls");
return "QuotientFunctionTestCaseData.xls";
} }
} }

View File

@ -17,15 +17,16 @@
package org.apache.poi.ss.formula.functions; package org.apache.poi.ss.formula.functions;
import java.util.Collection;
import org.junit.runners.Parameterized.Parameters;
/** /**
* Tests REPT() as loaded from a test data spreadsheet.<p/> * Tests REPT() as loaded from a test data spreadsheet.<p/>
*
* @author cedric dot walter @ gmail dot com
*/ */
public class TestReptFunctionsFromSpreadsheet extends BaseTestFunctionsFromSpreadsheet { public class TestReptFunctionsFromSpreadsheet extends BaseTestFunctionsFromSpreadsheet {
@Parameters(name="{0}")
@Override public static Collection<Object[]> data() throws Exception {
protected String getFilename() { return data(TestReptFunctionsFromSpreadsheet.class, "ReptFunctionTestCaseData.xls");
return "ReptFunctionTestCaseData.xls";
} }
} }

View File

@ -17,14 +17,16 @@
package org.apache.poi.ss.formula.functions; package org.apache.poi.ss.formula.functions;
import java.util.Collection;
import org.junit.runners.Parameterized.Parameters;
/** /**
* Tests Roman() as loaded from a test data spreadsheet.<p/> * Tests Roman() as loaded from a test data spreadsheet.<p/>
*
* @author cedric dot walter @ gmail dot com
*/ */
public class TestRomanFunctionsFromSpreadsheet extends BaseTestFunctionsFromSpreadsheet { public class TestRomanFunctionsFromSpreadsheet extends BaseTestFunctionsFromSpreadsheet {
@Parameters(name="{0}")
protected String getFilename() { public static Collection<Object[]> data() throws Exception {
return "RomanFunctionTestCaseData.xls"; return data(TestRomanFunctionsFromSpreadsheet.class, "RomanFunctionTestCaseData.xls");
} }
} }

View File

@ -17,14 +17,16 @@
package org.apache.poi.ss.formula.functions; package org.apache.poi.ss.formula.functions;
import java.util.Collection;
import org.junit.runners.Parameterized.Parameters;
/** /**
* Tests WeekNum() as loaded from a test data spreadsheet.<p/> * Tests WeekNum() as loaded from a test data spreadsheet.<p/>
*
* @author cedric dot walter @ gmail dot com
*/ */
public class TestWeekNumFunctionsFromSpreadsheet extends BaseTestFunctionsFromSpreadsheet { public class TestWeekNumFunctionsFromSpreadsheet extends BaseTestFunctionsFromSpreadsheet {
@Parameters(name="{0}")
protected String getFilename() { public static Collection<Object[]> data() throws Exception {
return "WeekNumFunctionTestCaseData.xls"; return data(TestWeekNumFunctionsFromSpreadsheet.class, "WeekNumFunctionTestCaseData.xls");
} }
} }

View File

@ -17,15 +17,17 @@
package org.apache.poi.ss.formula.functions; package org.apache.poi.ss.formula.functions;
import java.util.Collection;
import org.junit.runners.Parameterized.Parameters;
/** /**
* Tests WeekNum() as loaded from a test data 2013 excel spreadsheet.<p/> * Tests WeekNum() as loaded from a test data 2013 excel spreadsheet.<p/>
*
* @author cedric dot walter @ gmail dot com
*/ */
public class TestWeekNumFunctionsFromSpreadsheet2013 extends BaseTestFunctionsFromSpreadsheet { public class TestWeekNumFunctionsFromSpreadsheet2013 extends BaseTestFunctionsFromSpreadsheet {
@Parameters(name="{0}")
protected String getFilename() { public static Collection<Object[]> data() throws Exception {
//Only open this file with Excel 2013 to keep binary specific to that version //Only open this file with Excel 2013 to keep binary specific to that version
return "WeekNumFunctionTestCaseData2013.xls"; return data(TestWeekNumFunctionsFromSpreadsheet2013.class, "WeekNumFunctionTestCaseData2013.xls");
} }
} }

View File

@ -17,13 +17,7 @@
package org.apache.poi.ss.formula.ptg; package org.apache.poi.ss.formula.ptg;
import org.apache.poi.util.TempFile; import static org.junit.Assert.assertEquals;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import junit.framework.TestCase;
import org.apache.poi.hssf.HSSFTestDataSamples; import org.apache.poi.hssf.HSSFTestDataSamples;
import org.apache.poi.hssf.model.HSSFFormulaParser; import org.apache.poi.hssf.model.HSSFFormulaParser;
@ -32,45 +26,53 @@ import org.apache.poi.hssf.usermodel.HSSFFormulaEvaluator;
import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.CellValue; import org.apache.poi.ss.usermodel.CellValue;
import org.junit.Test;
/** /**
* Tests for functions from external workbooks (e.g. YEARFRAC). * Tests for functions from external workbooks (e.g. YEARFRAC).
*/ */
public final class TestExternalFunctionFormulas extends TestCase { public final class TestExternalFunctionFormulas {
/** /**
* tests <tt>NameXPtg.toFormulaString(Workbook)</tt> and logic in Workbook below that * tests <tt>NameXPtg.toFormulaString(Workbook)</tt> and logic in Workbook below that
*/ */
public void testReadFormulaContainingExternalFunction() { @Test
public void testReadFormulaContainingExternalFunction() throws Exception {
HSSFWorkbook wb = HSSFTestDataSamples.openSampleWorkbook("externalFunctionExample.xls"); HSSFWorkbook wb = HSSFTestDataSamples.openSampleWorkbook("externalFunctionExample.xls");
String expectedFormula = "YEARFRAC(B1,C1)"; String expectedFormula = "YEARFRAC(B1,C1)";
HSSFSheet sht = wb.getSheetAt(0); HSSFSheet sht = wb.getSheetAt(0);
String cellFormula = sht.getRow(0).getCell(0).getCellFormula(); String cellFormula = sht.getRow(0).getCell(0).getCellFormula();
assertEquals(expectedFormula, cellFormula); assertEquals(expectedFormula, cellFormula);
wb.close();
} }
public void testParse() { @Test
public void testParse() throws Exception {
HSSFWorkbook wb = HSSFTestDataSamples.openSampleWorkbook("externalFunctionExample.xls"); HSSFWorkbook wb = HSSFTestDataSamples.openSampleWorkbook("externalFunctionExample.xls");
Ptg[] ptgs = HSSFFormulaParser.parse("YEARFRAC(B1,C1)", wb); Ptg[] ptgs = HSSFFormulaParser.parse("YEARFRAC(B1,C1)", wb);
assertEquals(4, ptgs.length); assertEquals(4, ptgs.length);
assertEquals(NameXPtg.class, ptgs[0].getClass()); assertEquals(NameXPtg.class, ptgs[0].getClass());
wb.getSheetAt(0).getRow(0).createCell(6).setCellFormula("YEARFRAC(C1,B1)"); wb.getSheetAt(0).getRow(0).createCell(6).setCellFormula("YEARFRAC(C1,B1)");
if (false) { // if (false) {
// In case you fancy checking in excel // // In case you fancy checking in excel
try { // try {
File tempFile = TempFile.createTempFile("testExtFunc", ".xls"); // File tempFile = TempFile.createTempFile("testExtFunc", ".xls");
FileOutputStream fout = new FileOutputStream(tempFile); // FileOutputStream fout = new FileOutputStream(tempFile);
wb.write(fout); // wb.write(fout);
fout.close(); // fout.close();
System.out.println("check out " + tempFile.getAbsolutePath()); // System.out.println("check out " + tempFile.getAbsolutePath());
} catch (IOException e) { // } catch (IOException e) {
throw new RuntimeException(e); // throw new RuntimeException(e);
} // }
} // }
wb.close();
} }
public void testEvaluate() { @Test
public void testEvaluate() throws Exception {
HSSFWorkbook wb = HSSFTestDataSamples.openSampleWorkbook("externalFunctionExample.xls"); HSSFWorkbook wb = HSSFTestDataSamples.openSampleWorkbook("externalFunctionExample.xls");
HSSFSheet sheet = wb.getSheetAt(0); HSSFSheet sheet = wb.getSheetAt(0);
HSSFFormulaEvaluator fe = new HSSFFormulaEvaluator(wb); HSSFFormulaEvaluator fe = new HSSFFormulaEvaluator(wb);
@ -79,6 +81,7 @@ public final class TestExternalFunctionFormulas extends TestCase {
confirmCellEval(sheet, 2, 0, fe, "YEARFRAC(B3,C3,D3)", 0.0); confirmCellEval(sheet, 2, 0, fe, "YEARFRAC(B3,C3,D3)", 0.0);
confirmCellEval(sheet, 3, 0, fe, "IF(ISEVEN(3),1.2,1.6)", 1.6); confirmCellEval(sheet, 3, 0, fe, "IF(ISEVEN(3),1.2,1.6)", 1.6);
confirmCellEval(sheet, 4, 0, fe, "IF(ISODD(3),1.2,1.6)", 1.2); confirmCellEval(sheet, 4, 0, fe, "IF(ISODD(3),1.2,1.6)", 1.2);
wb.close();
} }
private static void confirmCellEval(HSSFSheet sheet, int rowIx, int colIx, private static void confirmCellEval(HSSFSheet sheet, int rowIx, int colIx,

View File

@ -17,8 +17,6 @@
package org.apache.poi.ss.usermodel; package org.apache.poi.ss.usermodel;
import junit.framework.TestCase;
import org.apache.poi.ss.ITestDataProvider; import org.apache.poi.ss.ITestDataProvider;
import org.apache.poi.ss.usermodel.DataValidation.ErrorStyle; import org.apache.poi.ss.usermodel.DataValidation.ErrorStyle;
import org.apache.poi.ss.usermodel.DataValidationConstraint.OperatorType; import org.apache.poi.ss.usermodel.DataValidationConstraint.OperatorType;
@ -27,13 +25,14 @@ import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.ss.util.CellRangeAddressList; import org.apache.poi.ss.util.CellRangeAddressList;
import org.apache.poi.util.POILogFactory; import org.apache.poi.util.POILogFactory;
import org.apache.poi.util.POILogger; import org.apache.poi.util.POILogger;
import org.junit.Test;
/** /**
* Class for testing Excel's data validation mechanism * Class for testing Excel's data validation mechanism
* *
* @author Dragos Buleandra ( dragos.buleandra@trade2b.ro ) * @author Dragos Buleandra ( dragos.buleandra@trade2b.ro )
*/ */
public abstract class BaseTestDataValidation extends TestCase { public abstract class BaseTestDataValidation {
private final ITestDataProvider _testDataProvider; private final ITestDataProvider _testDataProvider;
private static final POILogger log = POILogFactory.getLogger(BaseTestDataValidation.class); private static final POILogger log = POILogFactory.getLogger(BaseTestDataValidation.class);
@ -465,7 +464,8 @@ public abstract class BaseTestDataValidation extends TestCase {
va.addValidation(OperatorType.LESS_OR_EQUAL, "4", null, ErrorStyle.STOP, "Less than or equal to 4", "-", false, true, false); va.addValidation(OperatorType.LESS_OR_EQUAL, "4", null, ErrorStyle.STOP, "Less than or equal to 4", "-", false, true, false);
} }
public void testDataValidation() { @Test
public void testDataValidation() throws Exception {
log("\nTest no. 2 - Test Excel's Data validation mechanism"); log("\nTest no. 2 - Test Excel's Data validation mechanism");
Workbook wb = _testDataProvider.createWorkbook(); Workbook wb = _testDataProvider.createWorkbook();
WorkbookFormatter wf = new WorkbookFormatter(wb); WorkbookFormatter wf = new WorkbookFormatter(wb);
@ -491,7 +491,9 @@ public abstract class BaseTestDataValidation extends TestCase {
addCustomValidations(wf); addCustomValidations(wf);
log("done !"); log("done !");
wb = _testDataProvider.writeOutAndReadBack(wb); _testDataProvider.writeOutAndReadBack(wb).close();
wb.close();
} }

View File

@ -17,19 +17,24 @@
package org.apache.poi.ss.usermodel; package org.apache.poi.ss.usermodel;
import junit.framework.AssertionFailedError; import static org.junit.Assert.assertEquals;
import junit.framework.TestCase; import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import org.apache.poi.ss.ITestDataProvider; import org.apache.poi.ss.ITestDataProvider;
import org.apache.poi.ss.util.AreaReference; import org.apache.poi.ss.util.AreaReference;
import org.apache.poi.ss.util.CellReference; import org.apache.poi.ss.util.CellReference;
import org.junit.Test;
/** /**
* Tests of implementations of {@link org.apache.poi.ss.usermodel.Name}. * Tests of implementations of {@link org.apache.poi.ss.usermodel.Name}.
* *
* @author Yegor Kozlov * @author Yegor Kozlov
*/ */
public abstract class BaseTestNamedRange extends TestCase { public abstract class BaseTestNamedRange {
private final ITestDataProvider _testDataProvider; private final ITestDataProvider _testDataProvider;
@ -37,11 +42,12 @@ public abstract class BaseTestNamedRange extends TestCase {
_testDataProvider = testDataProvider; _testDataProvider = testDataProvider;
} }
public final void testCreate(){ @Test
public final void testCreate() throws Exception {
// Create a new workbook // Create a new workbook
Workbook wb = _testDataProvider.createWorkbook(); Workbook wb = _testDataProvider.createWorkbook();
Sheet sheet1 = wb.createSheet("Test1"); wb.createSheet("Test1");
Sheet sheet2 = wb.createSheet("Testing Named Ranges"); wb.createSheet("Testing Named Ranges");
Name name1 = wb.createName(); Name name1 = wb.createName();
name1.setNameName("testOne"); name1.setNameName("testOne");
@ -101,24 +107,31 @@ public abstract class BaseTestNamedRange extends TestCase {
// expected during successful test // expected during successful test
} }
} }
wb.close();
} }
public final void testUnicodeNamedRange() { @Test
Workbook workBook = _testDataProvider.createWorkbook(); public final void testUnicodeNamedRange() throws Exception {
workBook.createSheet("Test"); Workbook wb1 = _testDataProvider.createWorkbook();
Name name = workBook.createName(); wb1.createSheet("Test");
Name name = wb1.createName();
name.setNameName("\u03B1"); name.setNameName("\u03B1");
name.setRefersToFormula("Test!$D$3:$E$8"); name.setRefersToFormula("Test!$D$3:$E$8");
Workbook workBook2 = _testDataProvider.writeOutAndReadBack(workBook); Workbook wb2 = _testDataProvider.writeOutAndReadBack(wb1);
Name name2 = workBook2.getNameAt(0); Name name2 = wb2.getNameAt(0);
assertEquals("\u03B1", name2.getNameName()); assertEquals("\u03B1", name2.getNameName());
assertEquals("Test!$D$3:$E$8", name2.getRefersToFormula()); assertEquals("Test!$D$3:$E$8", name2.getRefersToFormula());
wb2.close();
wb1.close();
} }
public final void testAddRemove() { @Test
public final void testAddRemove() throws Exception {
Workbook wb = _testDataProvider.createWorkbook(); Workbook wb = _testDataProvider.createWorkbook();
assertEquals(0, wb.getNumberOfNames()); assertEquals(0, wb.getNumberOfNames());
Name name1 = wb.createName(); Name name1 = wb.createName();
@ -138,9 +151,12 @@ public abstract class BaseTestNamedRange extends TestCase {
wb.removeName(0); wb.removeName(0);
assertEquals(1, wb.getNumberOfNames()); assertEquals(1, wb.getNumberOfNames());
wb.close();
} }
public final void testScope() { @Test
public final void testScope() throws Exception {
Workbook wb = _testDataProvider.createWorkbook(); Workbook wb = _testDataProvider.createWorkbook();
wb.createSheet(); wb.createSheet();
wb.createSheet(); wb.createSheet();
@ -186,6 +202,8 @@ public abstract class BaseTestNamedRange extends TestCase {
if("aaa".equals(wb.getNameAt(i).getNameName())) cnt++; if("aaa".equals(wb.getNameAt(i).getNameName())) cnt++;
} }
assertEquals(3, cnt); assertEquals(3, cnt);
wb.close();
} }
/** /**
@ -193,21 +211,22 @@ public abstract class BaseTestNamedRange extends TestCase {
* <p> * <p>
* Addresses Bug <a href="http://issues.apache.org/bugzilla/show_bug.cgi?id=13775" target="_bug">#13775</a> * Addresses Bug <a href="http://issues.apache.org/bugzilla/show_bug.cgi?id=13775" target="_bug">#13775</a>
*/ */
public final void testMultiNamedRange() { @Test
public final void testMultiNamedRange() throws Exception {
// Create a new workbook // Create a new workbook
Workbook wb = _testDataProvider.createWorkbook(); Workbook wb1 = _testDataProvider.createWorkbook();
// Create a worksheet 'sheet1' in the new workbook // Create a worksheet 'sheet1' in the new workbook
wb.createSheet (); wb1.createSheet ();
wb.setSheetName (0, "sheet1"); wb1.setSheetName (0, "sheet1");
// Create another worksheet 'sheet2' in the new workbook // Create another worksheet 'sheet2' in the new workbook
wb.createSheet (); wb1.createSheet ();
wb.setSheetName (1, "sheet2"); wb1.setSheetName (1, "sheet2");
// Create a new named range for worksheet 'sheet1' // Create a new named range for worksheet 'sheet1'
Name namedRange1 = wb.createName(); Name namedRange1 = wb1.createName();
// Set the name for the named range for worksheet 'sheet1' // Set the name for the named range for worksheet 'sheet1'
namedRange1.setNameName("RangeTest1"); namedRange1.setNameName("RangeTest1");
@ -216,7 +235,7 @@ public abstract class BaseTestNamedRange extends TestCase {
namedRange1.setRefersToFormula("sheet1" + "!$A$1:$L$41"); namedRange1.setRefersToFormula("sheet1" + "!$A$1:$L$41");
// Create a new named range for worksheet 'sheet2' // Create a new named range for worksheet 'sheet2'
Name namedRange2 = wb.createName(); Name namedRange2 = wb1.createName();
// Set the name for the named range for worksheet 'sheet2' // Set the name for the named range for worksheet 'sheet2'
namedRange2.setNameName("RangeTest2"); namedRange2.setNameName("RangeTest2");
@ -226,20 +245,24 @@ public abstract class BaseTestNamedRange extends TestCase {
// Write the workbook to a file // Write the workbook to a file
// Read the Excel file and verify its content // Read the Excel file and verify its content
wb = _testDataProvider.writeOutAndReadBack(wb); Workbook wb2 = _testDataProvider.writeOutAndReadBack(wb1);
Name nm1 =wb.getNameAt(wb.getNameIndex("RangeTest1")); Name nm1 = wb2.getNameAt(wb2.getNameIndex("RangeTest1"));
assertTrue("Name is "+nm1.getNameName(),"RangeTest1".equals(nm1.getNameName())); assertTrue("Name is "+nm1.getNameName(),"RangeTest1".equals(nm1.getNameName()));
assertTrue("Reference is "+nm1.getRefersToFormula(),(wb.getSheetName(0)+"!$A$1:$L$41").equals(nm1.getRefersToFormula())); assertTrue("Reference is "+nm1.getRefersToFormula(),(wb2.getSheetName(0)+"!$A$1:$L$41").equals(nm1.getRefersToFormula()));
Name nm2 =wb.getNameAt(wb.getNameIndex("RangeTest2")); Name nm2 = wb2.getNameAt(wb2.getNameIndex("RangeTest2"));
assertTrue("Name is "+nm2.getNameName(),"RangeTest2".equals(nm2.getNameName())); assertTrue("Name is "+nm2.getNameName(),"RangeTest2".equals(nm2.getNameName()));
assertTrue("Reference is "+nm2.getRefersToFormula(),(wb.getSheetName(1)+"!$A$1:$O$21").equals(nm2.getRefersToFormula())); assertTrue("Reference is "+nm2.getRefersToFormula(),(wb2.getSheetName(1)+"!$A$1:$O$21").equals(nm2.getRefersToFormula()));
wb2.close();
wb1.close();
} }
/** /**
* Test to see if the print areas can be retrieved/created in memory * Test to see if the print areas can be retrieved/created in memory
*/ */
public final void testSinglePrintArea() { @Test
public final void testSinglePrintArea() throws Exception {
Workbook workbook = _testDataProvider.createWorkbook(); Workbook workbook = _testDataProvider.createWorkbook();
workbook.createSheet("Test Print Area"); workbook.createSheet("Test Print Area");
String sheetName = workbook.getSheetName(0); String sheetName = workbook.getSheetName(0);
@ -251,12 +274,15 @@ public abstract class BaseTestNamedRange extends TestCase {
assertNotNull("Print Area not defined for first sheet", retrievedPrintArea); assertNotNull("Print Area not defined for first sheet", retrievedPrintArea);
assertEquals("'" + sheetName + "'!$A$1:$B$1", retrievedPrintArea); assertEquals("'" + sheetName + "'!$A$1:$B$1", retrievedPrintArea);
workbook.close();
} }
/** /**
* For Convenience, don't force sheet names to be used * For Convenience, don't force sheet names to be used
*/ */
public final void testSinglePrintAreaWOSheet() @Test
public final void testSinglePrintAreaWOSheet() throws Exception
{ {
Workbook workbook = _testDataProvider.createWorkbook(); Workbook workbook = _testDataProvider.createWorkbook();
workbook.createSheet("Test Print Area"); workbook.createSheet("Test Print Area");
@ -269,80 +295,91 @@ public abstract class BaseTestNamedRange extends TestCase {
assertNotNull("Print Area not defined for first sheet", retrievedPrintArea); assertNotNull("Print Area not defined for first sheet", retrievedPrintArea);
assertEquals("'" + sheetName + "'!" + reference, retrievedPrintArea); assertEquals("'" + sheetName + "'!" + reference, retrievedPrintArea);
workbook.close();
} }
/** /**
* Test to see if the print area made it to the file * Test to see if the print area made it to the file
*/ */
public final void testPrintAreaFile() { @Test
Workbook workbook = _testDataProvider.createWorkbook(); public final void testPrintAreaFile() throws Exception {
workbook.createSheet("Test Print Area"); Workbook wb1 = _testDataProvider.createWorkbook();
String sheetName = workbook.getSheetName(0); wb1.createSheet("Test Print Area");
String sheetName = wb1.getSheetName(0);
String reference = "$A$1:$B$1"; String reference = "$A$1:$B$1";
workbook.setPrintArea(0, reference); wb1.setPrintArea(0, reference);
workbook = _testDataProvider.writeOutAndReadBack(workbook); Workbook wb2 = _testDataProvider.writeOutAndReadBack(wb1);
String retrievedPrintArea = workbook.getPrintArea(0); String retrievedPrintArea = wb2.getPrintArea(0);
assertNotNull("Print Area not defined for first sheet", retrievedPrintArea); assertNotNull("Print Area not defined for first sheet", retrievedPrintArea);
assertEquals("References Match", "'" + sheetName + "'!$A$1:$B$1", retrievedPrintArea); assertEquals("References Match", "'" + sheetName + "'!$A$1:$B$1", retrievedPrintArea);
wb2.close();
wb1.close();
} }
/** /**
* Test to see if multiple print areas made it to the file * Test to see if multiple print areas made it to the file
*/ */
public final void testMultiplePrintAreaFile() { @Test
Workbook workbook = _testDataProvider.createWorkbook(); public final void testMultiplePrintAreaFile() throws Exception {
Workbook wb1 = _testDataProvider.createWorkbook();
workbook.createSheet("Sheet1"); wb1.createSheet("Sheet1");
workbook.createSheet("Sheet2"); wb1.createSheet("Sheet2");
workbook.createSheet("Sheet3"); wb1.createSheet("Sheet3");
String reference1 = "$A$1:$B$1"; String reference1 = "$A$1:$B$1";
String reference2 = "$B$2:$D$5"; String reference2 = "$B$2:$D$5";
String reference3 = "$D$2:$F$5"; String reference3 = "$D$2:$F$5";
workbook.setPrintArea(0, reference1); wb1.setPrintArea(0, reference1);
workbook.setPrintArea(1, reference2); wb1.setPrintArea(1, reference2);
workbook.setPrintArea(2, reference3); wb1.setPrintArea(2, reference3);
//Check created print areas //Check created print areas
String retrievedPrintArea; String retrievedPrintArea;
retrievedPrintArea = workbook.getPrintArea(0); retrievedPrintArea = wb1.getPrintArea(0);
assertNotNull("Print Area Not Found (Sheet 1)", retrievedPrintArea); assertNotNull("Print Area Not Found (Sheet 1)", retrievedPrintArea);
assertEquals("Sheet1!" + reference1, retrievedPrintArea); assertEquals("Sheet1!" + reference1, retrievedPrintArea);
retrievedPrintArea = workbook.getPrintArea(1); retrievedPrintArea = wb1.getPrintArea(1);
assertNotNull("Print Area Not Found (Sheet 2)", retrievedPrintArea); assertNotNull("Print Area Not Found (Sheet 2)", retrievedPrintArea);
assertEquals("Sheet2!" + reference2, retrievedPrintArea); assertEquals("Sheet2!" + reference2, retrievedPrintArea);
retrievedPrintArea = workbook.getPrintArea(2); retrievedPrintArea = wb1.getPrintArea(2);
assertNotNull("Print Area Not Found (Sheet 3)", retrievedPrintArea); assertNotNull("Print Area Not Found (Sheet 3)", retrievedPrintArea);
assertEquals("Sheet3!" + reference3, retrievedPrintArea); assertEquals("Sheet3!" + reference3, retrievedPrintArea);
// Check print areas after re-reading workbook // Check print areas after re-reading workbook
workbook = _testDataProvider.writeOutAndReadBack(workbook); Workbook wb2 = _testDataProvider.writeOutAndReadBack(wb1);
retrievedPrintArea = workbook.getPrintArea(0); retrievedPrintArea = wb2.getPrintArea(0);
assertNotNull("Print Area Not Found (Sheet 1)", retrievedPrintArea); assertNotNull("Print Area Not Found (Sheet 1)", retrievedPrintArea);
assertEquals("Sheet1!" + reference1, retrievedPrintArea); assertEquals("Sheet1!" + reference1, retrievedPrintArea);
retrievedPrintArea = workbook.getPrintArea(1); retrievedPrintArea = wb2.getPrintArea(1);
assertNotNull("Print Area Not Found (Sheet 2)", retrievedPrintArea); assertNotNull("Print Area Not Found (Sheet 2)", retrievedPrintArea);
assertEquals("Sheet2!" + reference2, retrievedPrintArea); assertEquals("Sheet2!" + reference2, retrievedPrintArea);
retrievedPrintArea = workbook.getPrintArea(2); retrievedPrintArea = wb2.getPrintArea(2);
assertNotNull("Print Area Not Found (Sheet 3)", retrievedPrintArea); assertNotNull("Print Area Not Found (Sheet 3)", retrievedPrintArea);
assertEquals("Sheet3!" + reference3, retrievedPrintArea); assertEquals("Sheet3!" + reference3, retrievedPrintArea);
wb2.close();
wb1.close();
} }
/** /**
* Tests the setting of print areas with coordinates (Row/Column designations) * Tests the setting of print areas with coordinates (Row/Column designations)
* *
*/ */
public final void testPrintAreaCoords(){ @Test
public final void testPrintAreaCoords() throws Exception {
Workbook workbook = _testDataProvider.createWorkbook(); Workbook workbook = _testDataProvider.createWorkbook();
workbook.createSheet("Test Print Area"); workbook.createSheet("Test Print Area");
String sheetName = workbook.getSheetName(0); String sheetName = workbook.getSheetName(0);
@ -353,6 +390,8 @@ public abstract class BaseTestNamedRange extends TestCase {
assertNotNull("Print Area not defined for first sheet", retrievedPrintArea); assertNotNull("Print Area not defined for first sheet", retrievedPrintArea);
assertEquals("'" + sheetName + "'!$A$1:$B$1", retrievedPrintArea); assertEquals("'" + sheetName + "'!$A$1:$B$1", retrievedPrintArea);
workbook.close();
} }
@ -360,7 +399,8 @@ public abstract class BaseTestNamedRange extends TestCase {
* Tests the parsing of union area expressions, and re-display in the presence of sheet names * Tests the parsing of union area expressions, and re-display in the presence of sheet names
* with special characters. * with special characters.
*/ */
public final void testPrintAreaUnion(){ @Test
public final void testPrintAreaUnion() throws Exception {
Workbook workbook = _testDataProvider.createWorkbook(); Workbook workbook = _testDataProvider.createWorkbook();
workbook.createSheet("Test Print Area"); workbook.createSheet("Test Print Area");
@ -369,13 +409,16 @@ public abstract class BaseTestNamedRange extends TestCase {
String retrievedPrintArea = workbook.getPrintArea(0); String retrievedPrintArea = workbook.getPrintArea(0);
assertNotNull("Print Area not defined for first sheet", retrievedPrintArea); assertNotNull("Print Area not defined for first sheet", retrievedPrintArea);
assertEquals("'Test Print Area'!$A$1:$B$1,'Test Print Area'!$D$1:$F$2", retrievedPrintArea); assertEquals("'Test Print Area'!$A$1:$B$1,'Test Print Area'!$D$1:$F$2", retrievedPrintArea);
workbook.close();
} }
/** /**
* Verifies an existing print area is deleted * Verifies an existing print area is deleted
* *
*/ */
public final void testPrintAreaRemove() { @Test
public final void testPrintAreaRemove() throws Exception {
Workbook workbook = _testDataProvider.createWorkbook(); Workbook workbook = _testDataProvider.createWorkbook();
workbook.createSheet("Test Print Area"); workbook.createSheet("Test Print Area");
workbook.getSheetName(0); workbook.getSheetName(0);
@ -388,47 +431,53 @@ public abstract class BaseTestNamedRange extends TestCase {
workbook.removePrintArea(0); workbook.removePrintArea(0);
assertNull("PrintArea was not removed", workbook.getPrintArea(0)); assertNull("PrintArea was not removed", workbook.getPrintArea(0));
workbook.close();
} }
/** /**
* Test that multiple named ranges can be added written and read * Test that multiple named ranges can be added written and read
*/ */
public final void testMultipleNamedWrite() { @Test
Workbook wb = _testDataProvider.createWorkbook(); public final void testMultipleNamedWrite() throws Exception {
Workbook wb1 = _testDataProvider.createWorkbook();
wb.createSheet("testSheet1"); wb1.createSheet("testSheet1");
String sheetName = wb.getSheetName(0); String sheetName = wb1.getSheetName(0);
assertEquals("testSheet1", sheetName); assertEquals("testSheet1", sheetName);
//Creating new Named Range //Creating new Named Range
Name newNamedRange = wb.createName(); Name newNamedRange = wb1.createName();
newNamedRange.setNameName("RangeTest"); newNamedRange.setNameName("RangeTest");
newNamedRange.setRefersToFormula(sheetName + "!$D$4:$E$8"); newNamedRange.setRefersToFormula(sheetName + "!$D$4:$E$8");
//Creating another new Named Range //Creating another new Named Range
Name newNamedRange2 = wb.createName(); Name newNamedRange2 = wb1.createName();
newNamedRange2.setNameName("AnotherTest"); newNamedRange2.setNameName("AnotherTest");
newNamedRange2.setRefersToFormula(sheetName + "!$F$1:$G$6"); newNamedRange2.setRefersToFormula(sheetName + "!$F$1:$G$6");
wb.getNameAt(0); wb1.getNameAt(0);
wb = _testDataProvider.writeOutAndReadBack(wb); Workbook wb2 = _testDataProvider.writeOutAndReadBack(wb1);
Name nm =wb.getNameAt(wb.getNameIndex("RangeTest")); Name nm =wb2.getNameAt(wb2.getNameIndex("RangeTest"));
assertTrue("Name is "+nm.getNameName(),"RangeTest".equals(nm.getNameName())); assertTrue("Name is "+nm.getNameName(),"RangeTest".equals(nm.getNameName()));
assertTrue("Reference is "+nm.getRefersToFormula(),(wb.getSheetName(0)+"!$D$4:$E$8").equals(nm.getRefersToFormula())); assertTrue("Reference is "+nm.getRefersToFormula(),(wb2.getSheetName(0)+"!$D$4:$E$8").equals(nm.getRefersToFormula()));
nm = wb.getNameAt(wb.getNameIndex("AnotherTest")); nm = wb2.getNameAt(wb2.getNameIndex("AnotherTest"));
assertTrue("Name is "+nm.getNameName(),"AnotherTest".equals(nm.getNameName())); assertTrue("Name is "+nm.getNameName(),"AnotherTest".equals(nm.getNameName()));
assertTrue("Reference is "+nm.getRefersToFormula(),newNamedRange2.getRefersToFormula().equals(nm.getRefersToFormula())); assertTrue("Reference is "+nm.getRefersToFormula(),newNamedRange2.getRefersToFormula().equals(nm.getRefersToFormula()));
wb2.close();
wb1.close();
} }
/** /**
* Verifies correct functioning for "single cell named range" (aka "named cell") * Verifies correct functioning for "single cell named range" (aka "named cell")
*/ */
public final void testNamedCell_1() { @Test
public final void testNamedCell_1() throws Exception {
// setup for this testcase // setup for this testcase
String sheetName = "Test Named Cell"; String sheetName = "Test Named Cell";
@ -451,6 +500,7 @@ public abstract class BaseTestNamedRange extends TestCase {
assertNotNull(aNamedCell); assertNotNull(aNamedCell);
// retrieve the cell at the named range and test its contents // retrieve the cell at the named range and test its contents
@SuppressWarnings("deprecation")
AreaReference aref = new AreaReference(aNamedCell.getRefersToFormula()); AreaReference aref = new AreaReference(aNamedCell.getRefersToFormula());
assertTrue("Should be exactly 1 cell in the named cell :'" +cellName+"'", aref.isSingleCell()); assertTrue("Should be exactly 1 cell in the named cell :'" +cellName+"'", aref.isSingleCell());
@ -462,12 +512,15 @@ public abstract class BaseTestNamedRange extends TestCase {
Cell c = r.getCell(cref.getCol()); Cell c = r.getCell(cref.getCol());
String contents = c.getRichStringCellValue().getString(); String contents = c.getRichStringCellValue().getString();
assertEquals("Contents of cell retrieved by its named reference", contents, cellValue); assertEquals("Contents of cell retrieved by its named reference", contents, cellValue);
wb.close();
} }
/** /**
* Verifies correct functioning for "single cell named range" (aka "named cell") * Verifies correct functioning for "single cell named range" (aka "named cell")
*/ */
public final void testNamedCell_2() { @Test
public final void testNamedCell_2() throws Exception {
// setup for this testcase // setup for this testcase
String sname = "TestSheet", cname = "TestName", cvalue = "TestVal"; String sname = "TestSheet", cname = "TestName", cvalue = "TestVal";
@ -491,10 +544,13 @@ public abstract class BaseTestNamedRange extends TestCase {
CellReference cref = new CellReference(aNamedCell.getRefersToFormula()); CellReference cref = new CellReference(aNamedCell.getRefersToFormula());
assertNotNull(cref); assertNotNull(cref);
Sheet s = wb.getSheet(cref.getSheetName()); Sheet s = wb.getSheet(cref.getSheetName());
assertNotNull(s);
Row r = sheet.getRow(cref.getRow()); Row r = sheet.getRow(cref.getRow());
Cell c = r.getCell(cref.getCol()); Cell c = r.getCell(cref.getCol());
String contents = c.getRichStringCellValue().getString(); String contents = c.getRichStringCellValue().getString();
assertEquals("Contents of cell retrieved by its named reference", contents, cvalue); assertEquals("Contents of cell retrieved by its named reference", contents, cvalue);
wb.close();
} }
@ -511,40 +567,40 @@ public abstract class BaseTestNamedRange extends TestCase {
* could do the same, but that would involve adjusting subsequent name indexes across * could do the same, but that would involve adjusting subsequent name indexes across
* all formulas. <p/> * all formulas. <p/>
* *
* For the moment, POI has been made to behave more sensibly with uninitialised name * For the moment, POI has been made to behave more sensibly with uninitialized name
* records. * records.
*/ */
public final void testUninitialisedNameGetRefersToFormula_bug46973() { @Test
public final void testUninitialisedNameGetRefersToFormula_bug46973() throws Exception {
Workbook wb = _testDataProvider.createWorkbook(); Workbook wb = _testDataProvider.createWorkbook();
Name n = wb.createName(); Name n = wb.createName();
n.setNameName("UPSState"); n.setNameName("UPSState");
String formula; String formula = n.getRefersToFormula();
try {
formula = n.getRefersToFormula(); // bug 46973: fails here with IllegalArgumentException
} catch (IllegalArgumentException e) { // ptgs must not be null
if (e.getMessage().equals("ptgs must not be null")) {
throw new AssertionFailedError("Identified bug 46973");
}
throw e;
}
assertNull(formula); assertNull(formula);
assertFalse(n.isDeleted()); // according to exact definition of isDeleted() // according to exact definition of isDeleted()
assertFalse(n.isDeleted());
wb.close();
} }
public final void testDeletedCell() { @Test
public final void testDeletedCell() throws Exception {
Workbook wb = _testDataProvider.createWorkbook(); Workbook wb = _testDataProvider.createWorkbook();
Name n = wb.createName(); Name n = wb.createName();
n.setNameName("MyName"); n.setNameName("MyName");
// contrived example to expose bug: // contrived example to expose bug:
n.setRefersToFormula("if(A1,\"#REF!\", \"\")"); n.setRefersToFormula("if(A1,\"#REF!\", \"\")");
if (n.isDeleted()) { assertFalse("Identified bug in recoginising formulas referring to deleted cells", n.isDeleted());
throw new AssertionFailedError("Identified bug in recoginising formulas referring to deleted cells");
} wb.close();
} }
public final void testFunctionNames() { @Test
public final void testFunctionNames() throws Exception {
Workbook wb = _testDataProvider.createWorkbook(); Workbook wb = _testDataProvider.createWorkbook();
Name n = wb.createName(); Name n = wb.createName();
assertFalse(n.isFunctionName()); assertFalse(n.isFunctionName());
@ -557,9 +613,12 @@ public abstract class BaseTestNamedRange extends TestCase {
n.setFunction(false); n.setFunction(false);
assertFalse(n.isFunctionName()); assertFalse(n.isFunctionName());
wb.close();
} }
public final void testDefferedSetting() { @Test
public final void testDefferedSetting() throws Exception {
Workbook wb = _testDataProvider.createWorkbook(); Workbook wb = _testDataProvider.createWorkbook();
Name n1 = wb.createName(); Name n1 = wb.createName();
assertNull(n1.getRefersToFormula()); assertNull(n1.getRefersToFormula());
@ -581,6 +640,7 @@ public abstract class BaseTestNamedRange extends TestCase {
} catch(Exception e){ } catch(Exception e){
assertEquals("The workbook already contains this name: sale_1", e.getMessage()); assertEquals("The workbook already contains this name: sale_1", e.getMessage());
} }
wb.close();
} }
} }

View File

@ -128,11 +128,11 @@ public class NumberRenderingSpreadsheetGenerator {
row.createCell(5).setCellFormula(matchExpr); row.createCell(5).setCellFormula(matchExpr);
row.createCell(6).setCellFormula(jmExpr.replaceAll("'", "\"")); row.createCell(6).setCellFormula(jmExpr.replaceAll("'", "\""));
if (false) { // if (false) {
// for observing arithmetic near numeric range boundaries // // for observing arithmetic near numeric range boundaries
row.createCell(7).setCellFormula(cel0ref + " * 1.0001"); // row.createCell(7).setCellFormula(cel0ref + " * 1.0001");
row.createCell(8).setCellFormula(cel0ref + " / 1.0001"); // row.createCell(8).setCellFormula(cel0ref + " / 1.0001");
} // }
} }
private static String formatLongAsHex(long l) { private static String formatLongAsHex(long l) {
@ -215,10 +215,10 @@ public class NumberRenderingSpreadsheetGenerator {
bb[i+2] = (byte) (val >> 16); bb[i+2] = (byte) (val >> 16);
bb[i+1] = (byte) (val >> 8); bb[i+1] = (byte) (val >> 8);
bb[i+0] = (byte) (val >> 0); bb[i+0] = (byte) (val >> 0);
if (false) { // if (false) {
String newVal = interpretLong(bb, i); // String newVal = interpretLong(bb, i);
System.out.println("changed offset " + i + " from " + oldVal + " to " + newVal); // System.out.println("changed offset " + i + " from " + oldVal + " to " + newVal);
} // }
} }