You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by jo...@apache.org on 2008/11/06 03:38:08 UTC
svn commit: r711755 [2/2] - in /poi/branches/ooxml: ./
src/documentation/content/xdocs/ src/java/org/apache/poi/hssf/model/
src/java/org/apache/poi/hssf/record/
src/java/org/apache/poi/hssf/record/constant/
src/java/org/apache/poi/hssf/record/cont/ src...
Modified: poi/branches/ooxml/src/java/org/apache/poi/util/LittleEndianByteArrayOutputStream.java
URL: http://svn.apache.org/viewvc/poi/branches/ooxml/src/java/org/apache/poi/util/LittleEndianByteArrayOutputStream.java?rev=711755&r1=711754&r2=711755&view=diff
==============================================================================
--- poi/branches/ooxml/src/java/org/apache/poi/util/LittleEndianByteArrayOutputStream.java (original)
+++ poi/branches/ooxml/src/java/org/apache/poi/util/LittleEndianByteArrayOutputStream.java Wed Nov 5 18:38:06 2008
@@ -24,7 +24,7 @@
*
* @author Josh Micich
*/
-public final class LittleEndianByteArrayOutputStream implements LittleEndianOutput {
+public final class LittleEndianByteArrayOutputStream implements LittleEndianOutput, DelayableLittleEndianOutput {
private final byte[] _buf;
private final int _endIndex;
private int _writeIndex;
@@ -89,4 +89,10 @@
public int getWriteIndex() {
return _writeIndex;
}
+ public LittleEndianOutput createDelayedOutput(int size) {
+ checkPosition(size);
+ LittleEndianOutput result = new LittleEndianByteArrayOutputStream(_buf, _writeIndex, _writeIndex+size);
+ _writeIndex += size;
+ return result;
+ }
}
Modified: poi/branches/ooxml/src/java/org/apache/poi/util/StringUtil.java
URL: http://svn.apache.org/viewvc/poi/branches/ooxml/src/java/org/apache/poi/util/StringUtil.java?rev=711755&r1=711754&r2=711755&view=diff
==============================================================================
--- poi/branches/ooxml/src/java/org/apache/poi/util/StringUtil.java (original)
+++ poi/branches/ooxml/src/java/org/apache/poi/util/StringUtil.java Wed Nov 5 18:38:06 2008
@@ -163,6 +163,15 @@
}
/**
+ * @return the number of bytes that would be written by {@link #writeUnicodeString(LittleEndianOutput, String)}
+ */
+ public static int getEncodedSize(String value) {
+ int result = 2 + 1;
+ result += value.length() * (StringUtil.hasMultibyte(value) ? 2 : 1);
+ return result;
+ }
+
+ /**
* Takes a unicode (java) string, and returns it as 8 bit data (in ISO-8859-1
* codepage).
* (In Excel terms, write compressed 8 bit unicode)
Modified: poi/branches/ooxml/src/scratchpad/src/org/apache/poi/hslf/model/Picture.java
URL: http://svn.apache.org/viewvc/poi/branches/ooxml/src/scratchpad/src/org/apache/poi/hslf/model/Picture.java?rev=711755&r1=711754&r2=711755&view=diff
==============================================================================
--- poi/branches/ooxml/src/scratchpad/src/org/apache/poi/hslf/model/Picture.java (original)
+++ poi/branches/ooxml/src/scratchpad/src/org/apache/poi/hslf/model/Picture.java Wed Nov 5 18:38:06 2008
@@ -196,10 +196,14 @@
Document doc = ppt.getDocumentRecord();
EscherContainerRecord dggContainer = doc.getPPDrawingGroup().getDggContainer();
EscherContainerRecord bstore = (EscherContainerRecord)Shape.getEscherChild(dggContainer, EscherContainerRecord.BSTORE_CONTAINER);
-
+ if(bstore == null) {
+ logger.log(POILogger.DEBUG, "EscherContainerRecord.BSTORE_CONTAINER was not found ");
+ return null;
+ }
List lst = bstore.getChildRecords();
int idx = getPictureIndex();
if (idx == 0){
+ logger.log(POILogger.DEBUG, "picture index was not found, returning ");
return null;
} else {
return (EscherBSERecord)lst.get(idx-1);
@@ -263,7 +267,7 @@
ShapePainter.paint(this, graphics);
PictureData data = getPictureData();
- data.draw(graphics, this);
+ if(data != null) data.draw(graphics, this);
graphics.setTransform(at);
}
Modified: poi/branches/ooxml/src/scratchpad/src/org/apache/poi/hslf/model/TableCell.java
URL: http://svn.apache.org/viewvc/poi/branches/ooxml/src/scratchpad/src/org/apache/poi/hslf/model/TableCell.java?rev=711755&r1=711754&r2=711755&view=diff
==============================================================================
--- poi/branches/ooxml/src/scratchpad/src/org/apache/poi/hslf/model/TableCell.java (original)
+++ poi/branches/ooxml/src/scratchpad/src/org/apache/poi/hslf/model/TableCell.java Wed Nov 5 18:38:06 2008
@@ -56,8 +56,8 @@
super(parent);
setShapeType(ShapeTypes.Rectangle);
- _txtrun.setRunType(TextHeaderAtom.HALF_BODY_TYPE);
- _txtrun.getRichTextRuns()[0].setFlag(false, 0, false);
+ //_txtrun.setRunType(TextHeaderAtom.HALF_BODY_TYPE);
+ //_txtrun.getRichTextRuns()[0].setFlag(false, 0, false);
}
protected EscherContainerRecord createSpContainer(boolean isChild){
Modified: poi/branches/ooxml/src/scratchpad/testcases/org/apache/poi/hslf/model/TestPicture.java
URL: http://svn.apache.org/viewvc/poi/branches/ooxml/src/scratchpad/testcases/org/apache/poi/hslf/model/TestPicture.java?rev=711755&r1=711754&r2=711755&view=diff
==============================================================================
--- poi/branches/ooxml/src/scratchpad/testcases/org/apache/poi/hslf/model/TestPicture.java (original)
+++ poi/branches/ooxml/src/scratchpad/testcases/org/apache/poi/hslf/model/TestPicture.java Wed Nov 5 18:38:06 2008
@@ -20,9 +20,12 @@
import java.io.FileOutputStream;
import java.io.File;
+import java.io.IOException;
import java.awt.*;
+import java.awt.image.BufferedImage;
import org.apache.poi.hslf.usermodel.SlideShow;
+import org.apache.poi.hslf.usermodel.PictureData;
import org.apache.poi.hslf.HSLFSlideShow;
import org.apache.poi.ddf.EscherBSERecord;
@@ -70,4 +73,24 @@
}
+ /**
+ * Picture#getEscherBSERecord threw NullPointerException if EscherContainerRecord.BSTORE_CONTAINER
+ * was not found. The correct behaviour is to return null.
+ */
+ public void test46122() throws IOException {
+ SlideShow ppt = new SlideShow();
+ Slide slide = ppt.createSlide();
+
+ Picture pict = new Picture(-1); //index to non-existing picture data
+ pict.setSheet(slide);
+ PictureData data = pict.getPictureData();
+ assertNull(data);
+
+ BufferedImage img = new BufferedImage(100, 100, BufferedImage.TYPE_INT_RGB);
+ Graphics2D graphics = img.createGraphics();
+ pict.draw(graphics);
+
+ assertTrue("no errors rendering Picture with null data", true);
+ }
+
}
Modified: poi/branches/ooxml/src/scratchpad/testcases/org/apache/poi/hslf/model/TestTable.java
URL: http://svn.apache.org/viewvc/poi/branches/ooxml/src/scratchpad/testcases/org/apache/poi/hslf/model/TestTable.java?rev=711755&r1=711754&r2=711755&view=diff
==============================================================================
--- poi/branches/ooxml/src/scratchpad/testcases/org/apache/poi/hslf/model/TestTable.java (original)
+++ poi/branches/ooxml/src/scratchpad/testcases/org/apache/poi/hslf/model/TestTable.java Wed Nov 5 18:38:06 2008
@@ -24,6 +24,7 @@
import org.apache.poi.hslf.usermodel.SlideShow;
import org.apache.poi.hslf.HSLFSlideShow;
+import org.apache.poi.hslf.record.TextHeaderAtom;
/**
* Test <code>Table</code> object.
@@ -43,6 +44,10 @@
Table tbl = new Table(2, 5);
slide.addShape(tbl);
+ TableCell cell = tbl.getCell(0, 0);
+ //table cells have type=TextHeaderAtom.OTHER_TYPE, see bug #46033
+ assertEquals(TextHeaderAtom.OTHER_TYPE, cell.getTextRun().getRunType());
+
assertTrue(slide.getShapes()[0] instanceof Table);
Table tbl2 = (Table)slide.getShapes()[0];
assertEquals(tbl.getNumberOfColumns(), tbl2.getNumberOfColumns());
Modified: poi/branches/ooxml/src/testcases/org/apache/poi/hssf/record/TestRecordFactory.java
URL: http://svn.apache.org/viewvc/poi/branches/ooxml/src/testcases/org/apache/poi/hssf/record/TestRecordFactory.java?rev=711755&r1=711754&r2=711755&view=diff
==============================================================================
--- poi/branches/ooxml/src/testcases/org/apache/poi/hssf/record/TestRecordFactory.java (original)
+++ poi/branches/ooxml/src/testcases/org/apache/poi/hssf/record/TestRecordFactory.java Wed Nov 5 18:38:06 2008
@@ -48,7 +48,6 @@
byte[] data = {
0, 6, 5, 0, -2, 28, -51, 7, -55, 64, 0, 0, 6, 1, 0, 0
};
- short size = 16;
Record[] record = RecordFactory.createRecord(TestcaseRecordInputStream.create(recType, data));
assertEquals(BOFRecord.class.getName(),
@@ -64,7 +63,6 @@
assertEquals(5, bofRecord.getType());
assertEquals(1536, bofRecord.getVersion());
recType = MMSRecord.sid;
- size = 2;
data = new byte[]
{
0, 0
@@ -93,7 +91,6 @@
byte[] data = {
0, 0, 0, 0, 21, 0, 0, 0, 0, 0
};
- short size = 10;
Record[] record = RecordFactory.createRecord(TestcaseRecordInputStream.create(recType, data));
assertEquals(NumberRecord.class.getName(),
@@ -154,34 +151,34 @@
*/
public void testMixedContinue() throws Exception {
/**
- * Taken from a real test sample file 39512.xls. See Bug 39512 for details.
+ * Adapted from a real test sample file 39512.xls (Offset 0x4854).
+ * See Bug 39512 for details.
*/
String dump =
//OBJ
- "5D, 00, 48, 00, 15, 00, 12, 00, 0C, 00, 3C, 00, 11, 00, A0, 2E, 03, 01, CC, 42, " +
- "CF, 00, 00, 00, 00, 00, 0A, 00, 0C, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, " +
- "03, 00, 0B, 00, 06, 00, 28, 01, 03, 01, 00, 00, 12, 00, 08, 00, 00, 00, 00, 00, " +
- "00, 00, 03, 00, 11, 00, 04, 00, 3D, 00, 00, 00, 00, 00, 00, 00, " +
+ "5D 00 48 00 15 00 12 00 0C 00 3C 00 11 00 A0 2E 03 01 CC 42 " +
+ "CF 00 00 00 00 00 0A 00 0C 00 00 00 00 00 00 00 00 00 00 00 " +
+ "03 00 0B 00 06 00 28 01 03 01 00 00 12 00 08 00 00 00 00 00 " +
+ "00 00 03 00 11 00 04 00 3D 00 00 00 00 00 00 00 " +
//MSODRAWING
- "EC, 00, 08, 00, 00, 00, 0D, F0, 00, 00, 00, 00, " +
- //TXO
- "B6, 01, 12, 00, 22, 02, 00, 00, 00, 00, 00, 00, 00, 00, 10, 00, 10, 00, 00, 00, " +
- "00, 00, 3C, 00, 21, 00, 01, 4F, 00, 70, 00, 74, 00, 69, 00, 6F, 00, 6E, 00, 20, " +
- "00, 42, 00, 75, 00, 74, 00, 74, 00, 6F, 00, 6E, 00, 20, 00, 33, 00, 39, 00, 3C, " +
- "00, 10, 00, 00, 00, 05, 00, 00, 00, 00, 00, 10, 00, 00, 00, 00, 00, 00, 00, " +
- //CONTINUE
- "3C, 00, 7E, 00, 0F, 00, 04, F0, 7E, 00, 00, 00, 92, 0C, 0A, F0, 08, 00, 00, 00, " +
- "3D, 04, 00, 00, 00, 0A, 00, 00, A3, 00, 0B, F0, 3C, 00, 00, 00, 7F, 00, 00, 01, " +
- "00, 01, 80, 00, 8C, 01, 03, 01, 85, 00, 01, 00, 00, 00, 8B, 00, 02, 00, 00, 00, " +
- "BF, 00, 08, 00, 1A, 00, 7F, 01, 29, 00, 29, 00, 81, 01, 41, 00, 00, 08, BF, 01, " +
- "00, 00, 10, 00, C0, 01, 40, 00, 00, 08, FF, 01, 00, 00, 08, 00, 00, 00, 10, F0, " +
- "12, 00, 00, 00, 02, 00, 02, 00, A0, 03, 18, 00, B5, 00, 04, 00, 30, 02, 1A, 00, " +
- "00, 00, 00, 00, 11, F0, 00, 00, 00, 00, " +
+ "EC 00 08 00 00 00 0D F0 00 00 00 00 " +
+ //TXO (and 2 trailing CONTINUE records)
+ "B6 01 12 00 22 02 00 00 00 00 00 00 00 00 10 00 10 00 00 00 00 00 " +
+ "3C 00 11 00 00 4F 70 74 69 6F 6E 20 42 75 74 74 6F 6E 20 33 39 " +
+ "3C 00 10 00 00 00 05 00 00 00 00 00 10 00 00 00 00 00 00 00 " +
+ // another CONTINUE
+ "3C 00 7E 00 0F 00 04 F0 7E 00 00 00 92 0C 0A F0 08 00 00 00 " +
+ "3D 04 00 00 00 0A 00 00 A3 00 0B F0 3C 00 00 00 7F 00 00 01 " +
+ "00 01 80 00 8C 01 03 01 85 00 01 00 00 00 8B 00 02 00 00 00 " +
+ "BF 00 08 00 1A 00 7F 01 29 00 29 00 81 01 41 00 00 08 BF 01 " +
+ "00 00 10 00 C0 01 40 00 00 08 FF 01 00 00 08 00 00 00 10 F0 " +
+ "12 00 00 00 02 00 02 00 A0 03 18 00 B5 00 04 00 30 02 1A 00 " +
+ "00 00 00 00 11 F0 00 00 00 00 " +
//OBJ
- "5D, 00, 48, 00, 15, 00, 12, 00, 0C, 00, 3D, 00, 11, 00, 8C, 01, 03, 01, C8, 59, CF, 00, 00, " +
- "00, 00, 00, 0A, 00, 0C, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 03, 00, 0B, 00, 06, 00, " +
- "7C, 16, 03, 01, 00, 00, 12, 00, 08, 00, 00, 00, 00, 00, 00, 00, 03, 00, 11, 00, 04, 00, 01, " +
- "00, 00, 00, 00, 00, 00, 00";
+ "5D 00 48 00 15 00 12 00 0C 00 3D 00 11 00 8C 01 03 01 C8 59 CF 00 00 " +
+ "00 00 00 0A 00 0C 00 00 00 00 00 00 00 00 00 00 00 03 00 0B 00 06 00 " +
+ "7C 16 03 01 00 00 12 00 08 00 00 00 00 00 00 00 03 00 11 00 04 00 01 " +
+ "00 00 00 00 00 00 00";
byte[] data = HexRead.readFromString(dump);
List records = RecordFactory.createRecords(new ByteArrayInputStream(data));
Modified: poi/branches/ooxml/src/testcases/org/apache/poi/hssf/record/TestSSTRecordSizeCalculator.java
URL: http://svn.apache.org/viewvc/poi/branches/ooxml/src/testcases/org/apache/poi/hssf/record/TestSSTRecordSizeCalculator.java?rev=711755&r1=711754&r2=711755&view=diff
==============================================================================
--- poi/branches/ooxml/src/testcases/org/apache/poi/hssf/record/TestSSTRecordSizeCalculator.java (original)
+++ poi/branches/ooxml/src/testcases/org/apache/poi/hssf/record/TestSSTRecordSizeCalculator.java Wed Nov 5 18:38:06 2008
@@ -1,4 +1,3 @@
-
/* ====================================================================
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
@@ -15,133 +14,106 @@
See the License for the specific language governing permissions and
limitations under the License.
==================================================================== */
-
package org.apache.poi.hssf.record;
import junit.framework.TestCase;
+import org.apache.poi.hssf.record.cont.ContinuableRecordOutput;
import org.apache.poi.util.IntMapper;
/**
* Tests that records size calculates correctly.
- *
+ *
* @author Glen Stampoultzis (glens at apache.org)
*/
-public class TestSSTRecordSizeCalculator
- extends TestCase
-{
- private static final String SMALL_STRING = "Small string";
- private static final int COMPRESSED_PLAIN_STRING_OVERHEAD = 3;
-// private List recordLengths;
- private IntMapper strings;
- private static final int OPTION_FIELD_SIZE = 1;
-
- public TestSSTRecordSizeCalculator( String s )
- {
- super( s );
- }
-
- public void testBasic()
- throws Exception
- {
- strings.add(makeUnicodeString(SMALL_STRING));
- SSTRecordSizeCalculator calculator = new SSTRecordSizeCalculator(strings);
- assertEquals(SSTRecord.SST_RECORD_OVERHEAD + COMPRESSED_PLAIN_STRING_OVERHEAD + SMALL_STRING.length(),
- calculator.getRecordSize());
- }
-
- public void testBigStringAcrossUnicode()
- throws Exception
- {
- String bigString = new String(new char[SSTRecord.MAX_DATA_SPACE + 100]);
- strings.add(makeUnicodeString(bigString));
- SSTRecordSizeCalculator calculator = new SSTRecordSizeCalculator(strings);
- assertEquals(SSTRecord.SST_RECORD_OVERHEAD
- + COMPRESSED_PLAIN_STRING_OVERHEAD
- + SSTRecord.MAX_DATA_SPACE
- + SSTRecord.STD_RECORD_OVERHEAD
- + OPTION_FIELD_SIZE
- + 100,
- calculator.getRecordSize());
- }
-
- public void testPerfectFit()
- throws Exception
- {
- String perfectFit = new String(new char[SSTRecord.MAX_DATA_SPACE - COMPRESSED_PLAIN_STRING_OVERHEAD]);
- strings.add(makeUnicodeString(perfectFit));
- SSTRecordSizeCalculator calculator = new SSTRecordSizeCalculator(strings);
- assertEquals(SSTRecord.SST_RECORD_OVERHEAD
- + COMPRESSED_PLAIN_STRING_OVERHEAD
- + perfectFit.length(),
- calculator.getRecordSize());
- }
-
- public void testJustOversized()
- throws Exception
- {
- String tooBig = new String(new char[SSTRecord.MAX_DATA_SPACE - COMPRESSED_PLAIN_STRING_OVERHEAD + 1]);
- strings.add(makeUnicodeString(tooBig));
- SSTRecordSizeCalculator calculator = new SSTRecordSizeCalculator(strings);
- assertEquals(SSTRecord.SST_RECORD_OVERHEAD
- + COMPRESSED_PLAIN_STRING_OVERHEAD
- + tooBig.length() - 1
- // continue record
- + SSTRecord.STD_RECORD_OVERHEAD
- + OPTION_FIELD_SIZE
- + 1,
- calculator.getRecordSize());
-
- }
-
- public void testSecondStringStartsOnNewContinuation()
- throws Exception
- {
- String perfectFit = new String(new char[SSTRecord.MAX_DATA_SPACE - COMPRESSED_PLAIN_STRING_OVERHEAD]);
- strings.add(makeUnicodeString(perfectFit));
- strings.add(makeUnicodeString(SMALL_STRING));
- SSTRecordSizeCalculator calculator = new SSTRecordSizeCalculator(strings);
- assertEquals(SSTRecord.SST_RECORD_OVERHEAD
- + SSTRecord.MAX_DATA_SPACE
- // second string
- + SSTRecord.STD_RECORD_OVERHEAD
- + COMPRESSED_PLAIN_STRING_OVERHEAD
- + SMALL_STRING.length(),
- calculator.getRecordSize());
- }
-
- public void testHeaderCrossesNormalContinuePoint()
- throws Exception
- {
- String almostPerfectFit = new String(new char[SSTRecord.MAX_DATA_SPACE - COMPRESSED_PLAIN_STRING_OVERHEAD - 2]);
- strings.add(makeUnicodeString(almostPerfectFit));
- String oneCharString = new String(new char[1]);
- strings.add(makeUnicodeString(oneCharString));
- SSTRecordSizeCalculator calculator = new SSTRecordSizeCalculator(strings);
- assertEquals(SSTRecord.SST_RECORD_OVERHEAD
- + COMPRESSED_PLAIN_STRING_OVERHEAD
- + almostPerfectFit.length()
- // second string
- + SSTRecord.STD_RECORD_OVERHEAD
- + COMPRESSED_PLAIN_STRING_OVERHEAD
- + oneCharString.length(),
- calculator.getRecordSize());
-
- }
-
-
- public void setUp()
- {
- strings = new IntMapper();
- }
-
-
- private UnicodeString makeUnicodeString( String s )
- {
- UnicodeString st = new UnicodeString(s);
- st.setOptionFlags((byte)0);
- return st;
- }
-
+public final class TestSSTRecordSizeCalculator extends TestCase {
+ private static final String SMALL_STRING = "Small string";
+ private static final int COMPRESSED_PLAIN_STRING_OVERHEAD = 3;
+ private static final int OPTION_FIELD_SIZE = 1;
+
+ private final IntMapper strings = new IntMapper();
+
+
+ private void confirmSize(int expectedSize) {
+ ContinuableRecordOutput cro = ContinuableRecordOutput.createForCountingOnly();
+ SSTSerializer ss = new SSTSerializer(strings, 0, 0);
+ ss.serialize(cro);
+ assertEquals(expectedSize, cro.getTotalSize());
+ }
+
+ public void testBasic() {
+ strings.add(makeUnicodeString(SMALL_STRING));
+ confirmSize(SSTRecord.SST_RECORD_OVERHEAD
+ + COMPRESSED_PLAIN_STRING_OVERHEAD
+ + SMALL_STRING.length());
+ }
+
+ public void testBigStringAcrossUnicode() {
+ int bigString = SSTRecord.MAX_DATA_SPACE + 100;
+ strings.add(makeUnicodeString(bigString));
+ confirmSize(SSTRecord.SST_RECORD_OVERHEAD
+ + COMPRESSED_PLAIN_STRING_OVERHEAD
+ + SSTRecord.MAX_DATA_SPACE
+ + SSTRecord.STD_RECORD_OVERHEAD
+ + OPTION_FIELD_SIZE
+ + 100);
+ }
+
+ public void testPerfectFit() {
+ int perfectFit = SSTRecord.MAX_DATA_SPACE - COMPRESSED_PLAIN_STRING_OVERHEAD;
+ strings.add(makeUnicodeString(perfectFit));
+ confirmSize(SSTRecord.SST_RECORD_OVERHEAD
+ + COMPRESSED_PLAIN_STRING_OVERHEAD
+ + perfectFit);
+ }
+
+ public void testJustOversized() {
+ int tooBig = SSTRecord.MAX_DATA_SPACE - COMPRESSED_PLAIN_STRING_OVERHEAD + 1;
+ strings.add(makeUnicodeString(tooBig));
+ confirmSize(SSTRecord.SST_RECORD_OVERHEAD
+ + COMPRESSED_PLAIN_STRING_OVERHEAD
+ + tooBig - 1
+ // continue record
+ + SSTRecord.STD_RECORD_OVERHEAD
+ + OPTION_FIELD_SIZE + 1);
+
+ }
+
+ public void testSecondStringStartsOnNewContinuation() {
+ int perfectFit = SSTRecord.MAX_DATA_SPACE - COMPRESSED_PLAIN_STRING_OVERHEAD;
+ strings.add(makeUnicodeString(perfectFit));
+ strings.add(makeUnicodeString(SMALL_STRING));
+ confirmSize(SSTRecord.SST_RECORD_OVERHEAD
+ + SSTRecord.MAX_DATA_SPACE
+ // second string
+ + SSTRecord.STD_RECORD_OVERHEAD
+ + COMPRESSED_PLAIN_STRING_OVERHEAD
+ + SMALL_STRING.length());
+ }
+
+ public void testHeaderCrossesNormalContinuePoint() {
+ int almostPerfectFit = SSTRecord.MAX_DATA_SPACE - COMPRESSED_PLAIN_STRING_OVERHEAD - 2;
+ strings.add(makeUnicodeString(almostPerfectFit));
+ String oneCharString = new String(new char[1]);
+ strings.add(makeUnicodeString(oneCharString));
+ confirmSize(SSTRecord.SST_RECORD_OVERHEAD
+ + COMPRESSED_PLAIN_STRING_OVERHEAD
+ + almostPerfectFit
+ // second string
+ + SSTRecord.STD_RECORD_OVERHEAD
+ + COMPRESSED_PLAIN_STRING_OVERHEAD
+ + oneCharString.length());
+
+ }
+ private static UnicodeString makeUnicodeString(int size) {
+ String s = new String(new char[size]);
+ return makeUnicodeString(s);
+ }
+
+ private static UnicodeString makeUnicodeString(String s) {
+ UnicodeString st = new UnicodeString(s);
+ st.setOptionFlags((byte) 0);
+ return st;
+ }
}
Modified: poi/branches/ooxml/src/testcases/org/apache/poi/hssf/record/TestStringRecord.java
URL: http://svn.apache.org/viewvc/poi/branches/ooxml/src/testcases/org/apache/poi/hssf/record/TestStringRecord.java?rev=711755&r1=711754&r2=711755&view=diff
==============================================================================
--- poi/branches/ooxml/src/testcases/org/apache/poi/hssf/record/TestStringRecord.java (original)
+++ poi/branches/ooxml/src/testcases/org/apache/poi/hssf/record/TestStringRecord.java Wed Nov 5 18:38:06 2008
@@ -18,6 +18,12 @@
package org.apache.poi.hssf.record;
+import org.apache.poi.util.HexRead;
+import org.apache.poi.util.LittleEndian;
+import org.apache.poi.util.LittleEndianByteArrayInputStream;
+import org.apache.poi.util.LittleEndianInput;
+
+import junit.framework.AssertionFailedError;
import junit.framework.TestCase;
/**
@@ -28,29 +34,66 @@
* @author Glen Stampoultzis (glens at apache.org)
*/
public final class TestStringRecord extends TestCase {
- byte[] data = new byte[] {
- (byte)0x0B,(byte)0x00, // length
- (byte)0x00, // option
- // string
- (byte)0x46,(byte)0x61,(byte)0x68,(byte)0x72,(byte)0x7A,(byte)0x65,(byte)0x75,(byte)0x67,(byte)0x74,(byte)0x79,(byte)0x70
- };
-
- public void testLoad() {
-
- StringRecord record = new StringRecord(TestcaseRecordInputStream.create(0x207, data));
- assertEquals( "Fahrzeugtyp", record.getString());
-
- assertEquals( 18, record.getRecordSize() );
- }
-
- public void testStore()
- {
- StringRecord record = new StringRecord();
- record.setString("Fahrzeugtyp");
-
- byte [] recordBytes = record.serialize();
- assertEquals(recordBytes.length - 4, data.length);
- for (int i = 0; i < data.length; i++)
- assertEquals("At offset " + i, data[i], recordBytes[i+4]);
- }
+ private static final byte[] data = HexRead.readFromString(
+ "0B 00 " + // length
+ "00 " + // option
+ // string
+ "46 61 68 72 7A 65 75 67 74 79 70"
+ );
+
+ public void testLoad() {
+
+ StringRecord record = new StringRecord(TestcaseRecordInputStream.create(0x207, data));
+ assertEquals( "Fahrzeugtyp", record.getString());
+
+ assertEquals( 18, record.getRecordSize() );
+ }
+
+ public void testStore() {
+ StringRecord record = new StringRecord();
+ record.setString("Fahrzeugtyp");
+
+ byte [] recordBytes = record.serialize();
+ assertEquals(recordBytes.length - 4, data.length);
+ for (int i = 0; i < data.length; i++)
+ assertEquals("At offset " + i, data[i], recordBytes[i+4]);
+ }
+
+ public void testContinue() {
+ int MAX_BIFF_DATA = RecordInputStream.MAX_RECORD_DATA_SIZE;
+ int TEXT_LEN = MAX_BIFF_DATA + 1000; // deliberately over-size
+ String textChunk = "ABCDEGGHIJKLMNOP"; // 16 chars
+ StringBuffer sb = new StringBuffer(16384);
+ while (sb.length() < TEXT_LEN) {
+ sb.append(textChunk);
+ }
+ sb.setLength(TEXT_LEN);
+
+ StringRecord sr = new StringRecord();
+ sr.setString(sb.toString());
+ byte[] ser = sr.serialize();
+ assertEquals(StringRecord.sid, LittleEndian.getUShort(ser, 0));
+ if (LittleEndian.getUShort(ser, 2) > MAX_BIFF_DATA) {
+ throw new AssertionFailedError(
+ "StringRecord should have been split with a continue record");
+ }
+ // Confirm expected size of first record, and ushort strLen.
+ assertEquals(MAX_BIFF_DATA, LittleEndian.getUShort(ser, 2));
+ assertEquals(TEXT_LEN, LittleEndian.getUShort(ser, 4));
+
+ // Confirm first few bytes of ContinueRecord
+ LittleEndianInput crIn = new LittleEndianByteArrayInputStream(ser, (MAX_BIFF_DATA + 4));
+ int nCharsInFirstRec = MAX_BIFF_DATA - (2 + 1); // strLen, optionFlags
+ int nCharsInSecondRec = TEXT_LEN - nCharsInFirstRec;
+ assertEquals(ContinueRecord.sid, crIn.readUShort());
+ assertEquals(1 + nCharsInSecondRec, crIn.readUShort());
+ assertEquals(0, crIn.readUByte());
+ assertEquals('N', crIn.readUByte());
+ assertEquals('O', crIn.readUByte());
+
+ // re-read and make sure string value is the same
+ RecordInputStream in = TestcaseRecordInputStream.create(ser);
+ StringRecord sr2 = new StringRecord(in);
+ assertEquals(sb.toString(), sr2.getString());
+ }
}
Modified: poi/branches/ooxml/src/testcases/org/apache/poi/hssf/record/TestSupBookRecord.java
URL: http://svn.apache.org/viewvc/poi/branches/ooxml/src/testcases/org/apache/poi/hssf/record/TestSupBookRecord.java?rev=711755&r1=711754&r2=711755&view=diff
==============================================================================
--- poi/branches/ooxml/src/testcases/org/apache/poi/hssf/record/TestSupBookRecord.java (original)
+++ poi/branches/ooxml/src/testcases/org/apache/poi/hssf/record/TestSupBookRecord.java Wed Nov 5 18:38:06 2008
@@ -69,10 +69,10 @@
assertEquals( 34, record.getRecordSize() ); //sid+size+data
assertEquals("testURL", record.getURL());
- UnicodeString[] sheetNames = record.getSheetNames();
+ String[] sheetNames = record.getSheetNames();
assertEquals(2, sheetNames.length);
- assertEquals("Sheet1", sheetNames[0].getString());
- assertEquals("Sheet2", sheetNames[1].getString());
+ assertEquals("Sheet1", sheetNames[0]);
+ assertEquals("Sheet2", sheetNames[1]);
}
/**
@@ -97,11 +97,8 @@
}
public void testStoreER() {
- UnicodeString url = new UnicodeString("testURL");
- UnicodeString[] sheetNames = {
- new UnicodeString("Sheet1"),
- new UnicodeString("Sheet2"),
- };
+ String url = "testURL";
+ String[] sheetNames = { "Sheet1", "Sheet2", };
SupBookRecord record = SupBookRecord.createExternalReferences(url, sheetNames);
TestcaseRecordInputStream.confirmRecordEncoding(0x01AE, dataER, record.serialize());
Modified: poi/branches/ooxml/src/testcases/org/apache/poi/hssf/record/TestTextObjectBaseRecord.java
URL: http://svn.apache.org/viewvc/poi/branches/ooxml/src/testcases/org/apache/poi/hssf/record/TestTextObjectBaseRecord.java?rev=711755&r1=711754&r2=711755&view=diff
==============================================================================
--- poi/branches/ooxml/src/testcases/org/apache/poi/hssf/record/TestTextObjectBaseRecord.java (original)
+++ poi/branches/ooxml/src/testcases/org/apache/poi/hssf/record/TestTextObjectBaseRecord.java Wed Nov 5 18:38:06 2008
@@ -44,9 +44,9 @@
"00 00" +
"00 00 " +
"3C 00 " + // ContinueRecord.sid
- "05 00 " + // size 5
- "01 " + // unicode uncompressed
- "41 00 42 00 " + // 'AB'
+ "03 00 " + // size 3
+ "00 " + // unicode compressed
+ "41 42 " + // 'AB'
"3C 00 " + // ContinueRecord.sid
"10 00 " + // size 16
"00 00 18 00 00 00 00 00 " +
@@ -63,7 +63,7 @@
assertEquals(true, record.isTextLocked());
assertEquals(TextObjectRecord.TEXT_ORIENTATION_ROT_RIGHT, record.getTextOrientation());
- assertEquals(51, record.getRecordSize() );
+ assertEquals(49, record.getRecordSize() );
}
public void testStore()
Modified: poi/branches/ooxml/src/testcases/org/apache/poi/hssf/record/TestTextObjectRecord.java
URL: http://svn.apache.org/viewvc/poi/branches/ooxml/src/testcases/org/apache/poi/hssf/record/TestTextObjectRecord.java?rev=711755&r1=711754&r2=711755&view=diff
==============================================================================
--- poi/branches/ooxml/src/testcases/org/apache/poi/hssf/record/TestTextObjectRecord.java (original)
+++ poi/branches/ooxml/src/testcases/org/apache/poi/hssf/record/TestTextObjectRecord.java Wed Nov 5 18:38:06 2008
@@ -37,16 +37,14 @@
public final class TestTextObjectRecord extends TestCase {
private static final byte[] simpleData = HexRead.readFromString(
- "B6 01 12 00 " +
- "12 02 00 00 00 00 00 00" +
- "00 00 0D 00 08 00 00 00" +
- "00 00 " +
- "3C 00 1B 00 " +
- "01 48 00 65 00 6C 00 6C 00 6F 00 " +
- "2C 00 20 00 57 00 6F 00 72 00 6C " +
- "00 64 00 21 00 " +
- "3C 00 08 " +
- "00 0D 00 00 00 00 00 00 00"
+ "B6 01 12 00 " +
+ "12 02 00 00 00 00 00 00" +
+ "00 00 0D 00 08 00 00 00" +
+ "00 00 " +
+ "3C 00 0E 00 " +
+ "00 48 65 6C 6C 6F 2C 20 57 6F 72 6C 64 21 " +
+ "3C 00 08 " +
+ "00 0D 00 00 00 00 00 00 00"
);
@@ -92,12 +90,12 @@
record.setStr(str);
byte [] ser = record.serialize();
-
+
int formatDataLen = LittleEndian.getUShort(ser, 16);
assertEquals("formatDataLength", 0, formatDataLen);
assertEquals(22, ser.length); // just the TXO record
-
+
//read again
RecordInputStream is = TestcaseRecordInputStream.create(ser);
record = new TextObjectRecord(is);
@@ -152,38 +150,38 @@
byte[] cln = cloned.serialize();
assertTrue(Arrays.equals(src, cln));
}
-
- /** similar to {@link #simpleData} but with link formula at end of TXO rec*/
+
+ /** similar to {@link #simpleData} but with link formula at end of TXO rec*/
private static final byte[] linkData = HexRead.readFromString(
- "B6 01 " + // TextObjectRecord.sid
- "1E 00 " + // size 18
- "44 02 02 00 00 00 00 00" +
- "00 00 " +
- "02 00 " + // strLen 2
- "10 00 " + // 16 bytes for 2 format runs
- "00 00 00 00 " +
+ "B6 01 " + // TextObjectRecord.sid
+ "1E 00 " + // size 18
+ "44 02 02 00 00 00 00 00" +
+ "00 00 " +
+ "02 00 " + // strLen 2
+ "10 00 " + // 16 bytes for 2 format runs
+ "00 00 00 00 " +
"05 00 " + // formula size
"D4 F0 8A 03 " + // unknownInt
"24 01 00 13 C0 " + //tRef(T2)
"13 " + // ??
- "3C 00 " + // ContinueRecord.sid
- "05 00 " + // size 5
- "01 " + // unicode uncompressed
- "41 00 42 00 " + // 'AB'
- "3C 00 " + // ContinueRecord.sid
- "10 00 " + // size 16
- "00 00 18 00 00 00 00 00 " +
- "02 00 00 00 00 00 00 00 "
+ "3C 00 " + // ContinueRecord.sid
+ "03 00 " + // size 3
+ "00 " + // unicode compressed
+ "41 42 " + // 'AB'
+ "3C 00 " + // ContinueRecord.sid
+ "10 00 " + // size 16
+ "00 00 18 00 00 00 00 00 " +
+ "02 00 00 00 00 00 00 00 "
);
-
-
+
+
public void testLinkFormula() {
RecordInputStream is = new RecordInputStream(new ByteArrayInputStream(linkData));
is.nextRecord();
TextObjectRecord rec = new TextObjectRecord(is);
-
+
Ptg ptg = rec.getLinkRefPtg();
assertNotNull(ptg);
assertEquals(RefPtg.class, ptg.getClass());
@@ -193,6 +191,6 @@
byte [] data2 = rec.serialize();
assertEquals(linkData.length, data2.length);
assertTrue(Arrays.equals(linkData, data2));
- }
-
+ }
+
}
Modified: poi/branches/ooxml/src/testcases/org/apache/poi/hssf/record/TestUnicodeString.java
URL: http://svn.apache.org/viewvc/poi/branches/ooxml/src/testcases/org/apache/poi/hssf/record/TestUnicodeString.java?rev=711755&r1=711754&r2=711755&view=diff
==============================================================================
--- poi/branches/ooxml/src/testcases/org/apache/poi/hssf/record/TestUnicodeString.java (original)
+++ poi/branches/ooxml/src/testcases/org/apache/poi/hssf/record/TestUnicodeString.java Wed Nov 5 18:38:06 2008
@@ -15,115 +15,123 @@
limitations under the License.
==================================================================== */
-
package org.apache.poi.hssf.record;
-import org.apache.poi.util.HexRead;
-
import junit.framework.TestCase;
+import org.apache.poi.hssf.record.cont.ContinuableRecordOutput;
+
/**
- * Tests that records size calculates correctly.
+ * Tests that {@link UnicodeString} record size calculates correctly. The record size
+ * is used when serializing {@link SSTRecord}s.
*
* @author Jason Height (jheight at apache.org)
*/
public final class TestUnicodeString extends TestCase {
+ private static final int MAX_DATA_SIZE = RecordInputStream.MAX_RECORD_DATA_SIZE;
+ /** a 4 character string requiring 16 bit encoding */
+ private static final String STR_16_BIT = "A\u591A\u8A00\u8A9E";
+
+ private static void confirmSize(int expectedSize, UnicodeString s) {
+ confirmSize(expectedSize, s, 0);
+ }
+ /**
+ * Note - a value of zero for <tt>amountUsedInCurrentRecord</tt> would only ever occur just
+ * after a {@link ContinueRecord} had been started. In the initial {@link SSTRecord} this
+ * value starts at 8 (for the first {@link UnicodeString} written). In general, it can be
+ * any value between 0 and {@link #MAX_DATA_SIZE}
+ */
+ private static void confirmSize(int expectedSize, UnicodeString s, int amountUsedInCurrentRecord) {
+ ContinuableRecordOutput out = ContinuableRecordOutput.createForCountingOnly();
+ out.writeContinue();
+ for(int i=amountUsedInCurrentRecord; i>0; i--) {
+ out.writeByte(0);
+ }
+ int size0 = out.getTotalSize();
+ s.serialize(out);
+ int size1 = out.getTotalSize();
+ int actualSize = size1-size0;
+ assertEquals(expectedSize, actualSize);
+ }
public void testSmallStringSize() {
//Test a basic string
UnicodeString s = makeUnicodeString("Test");
- UnicodeString.UnicodeRecordStats stats = new UnicodeString.UnicodeRecordStats();
- s.getRecordSize(stats);
- assertEquals(7, stats.recordSize);
+ confirmSize(7, s);
//Test a small string that is uncompressed
+ s = makeUnicodeString(STR_16_BIT);
s.setOptionFlags((byte)0x01);
- stats = new UnicodeString.UnicodeRecordStats();
- s.getRecordSize(stats);
- assertEquals(11, stats.recordSize);
+ confirmSize(11, s);
//Test a compressed small string that has rich text formatting
+ s.setString("Test");
s.setOptionFlags((byte)0x8);
UnicodeString.FormatRun r = new UnicodeString.FormatRun((short)0,(short)1);
s.addFormatRun(r);
UnicodeString.FormatRun r2 = new UnicodeString.FormatRun((short)2,(short)2);
s.addFormatRun(r2);
- stats = new UnicodeString.UnicodeRecordStats();
- s.getRecordSize(stats);
- assertEquals(17, stats.recordSize);
+ confirmSize(17, s);
//Test a uncompressed small string that has rich text formatting
+ s.setString(STR_16_BIT);
s.setOptionFlags((byte)0x9);
- stats = new UnicodeString.UnicodeRecordStats();
- s.getRecordSize(stats);
- assertEquals(21, stats.recordSize);
+ confirmSize(21, s);
//Test a compressed small string that has rich text and extended text
+ s.setString("Test");
s.setOptionFlags((byte)0xC);
s.setExtendedRst(new byte[]{(byte)0x1,(byte)0x2,(byte)0x3,(byte)0x4,(byte)0x5});
- stats = new UnicodeString.UnicodeRecordStats();
- s.getRecordSize(stats);
- assertEquals(26, stats.recordSize);
+ confirmSize(26, s);
//Test a uncompressed small string that has rich text and extended text
+ s.setString(STR_16_BIT);
s.setOptionFlags((byte)0xD);
- stats = new UnicodeString.UnicodeRecordStats();
- s.getRecordSize(stats);
- assertEquals(30, stats.recordSize);
+ confirmSize(30, s);
}
public void testPerfectStringSize() {
//Test a basic string
- UnicodeString s = makeUnicodeString(SSTRecord.MAX_RECORD_SIZE-2-1);
- UnicodeString.UnicodeRecordStats stats = new UnicodeString.UnicodeRecordStats();
- s.getRecordSize(stats);
- assertEquals(SSTRecord.MAX_RECORD_SIZE, stats.recordSize);
+ UnicodeString s = makeUnicodeString(MAX_DATA_SIZE-2-1);
+ confirmSize(MAX_DATA_SIZE, s);
//Test an uncompressed string
//Note that we can only ever get to a maximim size of 8227 since an uncompressed
//string is writing double bytes.
- s = makeUnicodeString((SSTRecord.MAX_RECORD_SIZE-2-1)/2);
+ s = makeUnicodeString((MAX_DATA_SIZE-2-1)/2, true);
s.setOptionFlags((byte)0x1);
- stats = new UnicodeString.UnicodeRecordStats();
- s.getRecordSize(stats);
- assertEquals(SSTRecord.MAX_RECORD_SIZE-1, stats.recordSize);
+ confirmSize(MAX_DATA_SIZE-1, s);
}
public void testPerfectRichStringSize() {
//Test a rich text string
- UnicodeString s = makeUnicodeString(SSTRecord.MAX_RECORD_SIZE-2-1-8-2);
+ UnicodeString s = makeUnicodeString(MAX_DATA_SIZE-2-1-8-2);
s.addFormatRun(new UnicodeString.FormatRun((short)1,(short)0));
s.addFormatRun(new UnicodeString.FormatRun((short)2,(short)1));
- UnicodeString.UnicodeRecordStats stats = new UnicodeString.UnicodeRecordStats();
s.setOptionFlags((byte)0x8);
- s.getRecordSize(stats);
- assertEquals(SSTRecord.MAX_RECORD_SIZE, stats.recordSize);
+ confirmSize(MAX_DATA_SIZE, s);
//Test an uncompressed rich text string
- //Note that we can only ever get to a maximim size of 8227 since an uncompressed
+ //Note that we can only ever get to a maximum size of 8227 since an uncompressed
//string is writing double bytes.
- s = makeUnicodeString((SSTRecord.MAX_RECORD_SIZE-2-1-8-2)/2);
+ s = makeUnicodeString((MAX_DATA_SIZE-2-1-8-2)/2, true);
s.addFormatRun(new UnicodeString.FormatRun((short)1,(short)0));
s.addFormatRun(new UnicodeString.FormatRun((short)2,(short)1));
s.setOptionFlags((byte)0x9);
- stats = new UnicodeString.UnicodeRecordStats();
- s.getRecordSize(stats);
- assertEquals(SSTRecord.MAX_RECORD_SIZE-1, stats.recordSize);
+ confirmSize(MAX_DATA_SIZE-1, s);
}
public void testContinuedStringSize() {
//Test a basic string
- UnicodeString s = makeUnicodeString(SSTRecord.MAX_RECORD_SIZE-2-1+20);
- UnicodeString.UnicodeRecordStats stats = new UnicodeString.UnicodeRecordStats();
- s.getRecordSize(stats);
- assertEquals(SSTRecord.MAX_RECORD_SIZE+4+1+20, stats.recordSize);
+ UnicodeString s = makeUnicodeString(MAX_DATA_SIZE-2-1+20);
+ confirmSize(MAX_DATA_SIZE+4+1+20, s);
}
/** Tests that a string size calculation that fits neatly in two records, the second being a continue*/
public void testPerfectContinuedStringSize() {
//Test a basic string
- int strSize = SSTRecord.MAX_RECORD_SIZE*2;
+ int strSize = MAX_DATA_SIZE*2;
//String overhead
strSize -= 3;
//Continue Record overhead
@@ -131,25 +139,29 @@
//Continue Record additional byte overhead
strSize -= 1;
UnicodeString s = makeUnicodeString(strSize);
- UnicodeString.UnicodeRecordStats stats = new UnicodeString.UnicodeRecordStats();
- s.getRecordSize(stats);
- assertEquals(SSTRecord.MAX_RECORD_SIZE*2, stats.recordSize);
+ confirmSize(MAX_DATA_SIZE*2, s);
}
-
-
- private static UnicodeString makeUnicodeString( String s )
- {
+ private static UnicodeString makeUnicodeString(String s) {
UnicodeString st = new UnicodeString(s);
st.setOptionFlags((byte)0);
return st;
}
- private static UnicodeString makeUnicodeString( int numChars) {
+ private static UnicodeString makeUnicodeString(int numChars) {
+ return makeUnicodeString(numChars, false);
+ }
+ /**
+ * @param is16Bit if <code>true</code> the created string will have characters > 0x00FF
+ * @return a string of the specified number of characters
+ */
+ private static UnicodeString makeUnicodeString(int numChars, boolean is16Bit) {
StringBuffer b = new StringBuffer(numChars);
+ int charBase = is16Bit ? 0x8A00 : 'A';
for (int i=0;i<numChars;i++) {
- b.append(i%10);
+ char ch = (char) ((i%16)+charBase);
+ b.append(ch);
}
return makeUnicodeString(b.toString());
}
Modified: poi/branches/ooxml/src/testcases/org/apache/poi/hssf/record/constant/TestConstantValueParser.java
URL: http://svn.apache.org/viewvc/poi/branches/ooxml/src/testcases/org/apache/poi/hssf/record/constant/TestConstantValueParser.java?rev=711755&r1=711754&r2=711755&view=diff
==============================================================================
--- poi/branches/ooxml/src/testcases/org/apache/poi/hssf/record/constant/TestConstantValueParser.java (original)
+++ poi/branches/ooxml/src/testcases/org/apache/poi/hssf/record/constant/TestConstantValueParser.java Wed Nov 5 18:38:06 2008
@@ -22,7 +22,6 @@
import junit.framework.TestCase;
import org.apache.poi.hssf.record.TestcaseRecordInputStream;
-import org.apache.poi.hssf.record.UnicodeString;
import org.apache.poi.hssf.usermodel.HSSFErrorConstants;
import org.apache.poi.util.HexRead;
import org.apache.poi.util.LittleEndianByteArrayOutputStream;
@@ -36,7 +35,7 @@
Boolean.TRUE,
null,
new Double(1.1),
- new UnicodeString("Sample text"),
+ "Sample text",
ErrorConstant.valueOf(HSSFErrorConstants.ERROR_DIV_0),
};
private static final byte[] SAMPLE_ENCODING = HexRead.readFromString(
Modified: poi/branches/ooxml/src/testcases/org/apache/poi/hssf/record/formula/TestArrayPtg.java
URL: http://svn.apache.org/viewvc/poi/branches/ooxml/src/testcases/org/apache/poi/hssf/record/formula/TestArrayPtg.java?rev=711755&r1=711754&r2=711755&view=diff
==============================================================================
--- poi/branches/ooxml/src/testcases/org/apache/poi/hssf/record/formula/TestArrayPtg.java (original)
+++ poi/branches/ooxml/src/testcases/org/apache/poi/hssf/record/formula/TestArrayPtg.java Wed Nov 5 18:38:06 2008
@@ -66,10 +66,10 @@
assertEquals(Boolean.TRUE, values[0][0]);
- assertEquals(new UnicodeString("ABCD"), values[0][1]);
+ assertEquals("ABCD", values[0][1]);
assertEquals(new Double(0), values[1][0]);
assertEquals(Boolean.FALSE, values[1][1]);
- assertEquals(new UnicodeString("FG"), values[1][2]);
+ assertEquals("FG", values[1][2]);
byte[] outBuf = new byte[ENCODED_CONSTANT_DATA.length];
ptg.writeTokenValueBytes(new LittleEndianByteArrayOutputStream(outBuf, 0));
Modified: poi/branches/ooxml/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFCell.java
URL: http://svn.apache.org/viewvc/poi/branches/ooxml/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFCell.java?rev=711755&r1=711754&r2=711755&view=diff
==============================================================================
--- poi/branches/ooxml/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFCell.java (original)
+++ poi/branches/ooxml/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFCell.java Wed Nov 5 18:38:06 2008
@@ -28,8 +28,8 @@
import org.apache.poi.hssf.util.HSSFColor;
/**
- * Tests various functionity having to do with HSSFCell. For instance support for
- * paticular datatypes, etc.
+ * Tests various functionality having to do with {@link HSSFCell}. For instance support for
+ * particular datatypes, etc.
* @author Andrew C. Oliver (andy at superlinksoftware dot com)
* @author Dan Sherman (dsherman at isisph.com)
* @author Alex Jacoby (ajacoby at gmail.com)
@@ -345,41 +345,82 @@
}
}
- /**
- * Test to ensure we can only assign cell styles that belong
- * to our workbook, and not those from other workbooks.
- */
- public void testCellStyleWorkbookMatch() throws Exception {
- HSSFWorkbook wbA = new HSSFWorkbook();
- HSSFWorkbook wbB = new HSSFWorkbook();
-
- HSSFCellStyle styA = wbA.createCellStyle();
- HSSFCellStyle styB = wbB.createCellStyle();
-
- styA.verifyBelongsToWorkbook(wbA);
- styB.verifyBelongsToWorkbook(wbB);
- try {
- styA.verifyBelongsToWorkbook(wbB);
- fail();
- } catch(IllegalArgumentException e) {}
- try {
- styB.verifyBelongsToWorkbook(wbA);
- fail();
- } catch(IllegalArgumentException e) {}
-
- HSSFCell cellA = wbA.createSheet().createRow(0).createCell(0);
- HSSFCell cellB = wbB.createSheet().createRow(0).createCell(0);
-
- cellA.setCellStyle(styA);
- cellB.setCellStyle(styB);
- try {
- cellA.setCellStyle(styB);
- fail();
- } catch(IllegalArgumentException e) {}
- try {
- cellB.setCellStyle(styA);
- fail();
- } catch(IllegalArgumentException e) {}
- }
+ /**
+ * Test to ensure we can only assign cell styles that belong
+ * to our workbook, and not those from other workbooks.
+ */
+ public void testCellStyleWorkbookMatch() {
+ HSSFWorkbook wbA = new HSSFWorkbook();
+ HSSFWorkbook wbB = new HSSFWorkbook();
+
+ HSSFCellStyle styA = wbA.createCellStyle();
+ HSSFCellStyle styB = wbB.createCellStyle();
+
+ styA.verifyBelongsToWorkbook(wbA);
+ styB.verifyBelongsToWorkbook(wbB);
+ try {
+ styA.verifyBelongsToWorkbook(wbB);
+ fail();
+ } catch (IllegalArgumentException e) {}
+ try {
+ styB.verifyBelongsToWorkbook(wbA);
+ fail();
+ } catch (IllegalArgumentException e) {}
+
+ HSSFCell cellA = wbA.createSheet().createRow(0).createCell(0);
+ HSSFCell cellB = wbB.createSheet().createRow(0).createCell(0);
+
+ cellA.setCellStyle(styA);
+ cellB.setCellStyle(styB);
+ try {
+ cellA.setCellStyle(styB);
+ fail();
+ } catch (IllegalArgumentException e) {}
+ try {
+ cellB.setCellStyle(styA);
+ fail();
+ } catch (IllegalArgumentException e) {}
+ }
+
+ public void testChangeTypeStringToBool() {
+ HSSFCell cell = new HSSFWorkbook().createSheet("Sheet1").createRow(0).createCell(0);
+
+ cell.setCellValue(new HSSFRichTextString("TRUE"));
+ assertEquals(HSSFCell.CELL_TYPE_STRING, cell.getCellType());
+ try {
+ cell.setCellType(HSSFCell.CELL_TYPE_BOOLEAN);
+ } catch (ClassCastException e) {
+ throw new AssertionFailedError(
+ "Identified bug in conversion of cell from text to boolean");
+ }
+
+ assertEquals(HSSFCell.CELL_TYPE_BOOLEAN, cell.getCellType());
+ assertEquals(true, cell.getBooleanCellValue());
+ cell.setCellType(HSSFCell.CELL_TYPE_STRING);
+ assertEquals("TRUE", cell.getRichStringCellValue().getString());
+
+ // 'false' text to bool and back
+ cell.setCellValue(new HSSFRichTextString("FALSE"));
+ cell.setCellType(HSSFCell.CELL_TYPE_BOOLEAN);
+ assertEquals(HSSFCell.CELL_TYPE_BOOLEAN, cell.getCellType());
+ assertEquals(false, cell.getBooleanCellValue());
+ cell.setCellType(HSSFCell.CELL_TYPE_STRING);
+ assertEquals("FALSE", cell.getRichStringCellValue().getString());
+ }
+
+ public void testChangeTypeBoolToString() {
+ HSSFCell cell = new HSSFWorkbook().createSheet("Sheet1").createRow(0).createCell(0);
+ cell.setCellValue(true);
+ try {
+ cell.setCellType(HSSFCell.CELL_TYPE_STRING);
+ } catch (IllegalStateException e) {
+ if (e.getMessage().equals("Cannot get a text value from a boolean cell")) {
+ throw new AssertionFailedError(
+ "Identified bug in conversion of cell from boolean to text");
+ }
+ throw e;
+ }
+ assertEquals("TRUE", cell.getRichStringCellValue().getString());
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org