Author: nick
Date: Tue Jun 19 15:41:33 2007
New Revision: 548870
URL: http://svn.apache.org/viewvc?view=rev&rev=548870
Log:
Improved support for chunks and chunk streams, plus tests
Added:
jakarta/poi/trunk/src/scratchpad/testcases/org/apache/poi/hdgf/chunks/
jakarta/poi/trunk/src/scratchpad/testcases/org/apache/poi/hdgf/chunks/TestChunks.java
(with props)
Modified:
jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hdgf/chunks/Chunk.java
jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hdgf/chunks/ChunkFactory.java
jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hdgf/chunks/ChunkHeaderV11.java
jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hdgf/dev/VSDDumper.java
jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hdgf/streams/ChunkStream.java
jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hdgf/streams/CompressedStreamStore.java
jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hdgf/streams/PointerContainingStream.java
jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hdgf/streams/Stream.java
jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hdgf/streams/StreamStore.java
jakarta/poi/trunk/src/scratchpad/testcases/org/apache/poi/hdgf/streams/TestStreamComplex.java
Modified:
jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hdgf/chunks/Chunk.java
URL:
http://svn.apache.org/viewvc/jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hdgf/chunks/Chunk.java?view=diff&rev=548870&r1=548869&r2=548870
==============================================================================
--- jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hdgf/chunks/Chunk.java
(original)
+++ jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hdgf/chunks/Chunk.java
Tue Jun 19 15:41:33 2007
@@ -38,6 +38,21 @@
this.contents = contents;
}
+ public byte[] _getContents() {
+ return contents;
+ }
+ public ChunkHeader getHeader() {
+ return header;
+ }
+ /** Gets the separator between this chunk and the next, if it exists */
+ public ChunkSeparator getSeparator() {
+ return separator;
+ }
+ /** Gets the trailer for this chunk, if it exists */
+ public ChunkTrailer getTrailer() {
+ return trailer;
+ }
+
/**
* Returns the size of the chunk, including any
* headers, trailers and separators.
Modified:
jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hdgf/chunks/ChunkFactory.java
URL:
http://svn.apache.org/viewvc/jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hdgf/chunks/ChunkFactory.java?view=diff&rev=548870&r1=548869&r2=548870
==============================================================================
---
jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hdgf/chunks/ChunkFactory.java
(original)
+++
jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hdgf/chunks/ChunkFactory.java
Tue Jun 19 15:41:33 2007
@@ -40,19 +40,48 @@
// Create the header
ChunkHeader header =
ChunkHeader.createChunkHeader(version, data, offset);
+ int endOfDataPos = offset + header.getLength() +
header.getSizeInBytes();
+ // Check we have enough data, and tweak the header size
+ // as required
+ if(endOfDataPos > data.length) {
+ System.err.println("Header called for " +
header.getLength() +" bytes, but that would take us passed the end of the
data!");
+
+ endOfDataPos = data.length;
+ header.length = data.length - offset -
header.getSizeInBytes();
+
+ if(header.hasTrailer()) {
+ header.length -= 8;
+ endOfDataPos -= 8;
+ }
+ if(header.hasSeparator()) {
+ header.length -= 4;
+ endOfDataPos -= 4;
+ }
+ }
+
+
// Create the trailer and separator, if required
ChunkTrailer trailer = null;
ChunkSeparator separator = null;
if(header.hasTrailer()) {
- trailer = new ChunkTrailer(
- data, header.getLength() +
header.getSizeInBytes());
- if(header.hasSeparator()) {
+ if(endOfDataPos <= data.length-8) {
+ trailer = new ChunkTrailer(
+ data, endOfDataPos);
+ endOfDataPos += 8;
+ } else {
+ System.err.println("Header claims a length to "
+ endOfDataPos + " there's then no space for the trailer in the data (" +
data.length + ")");
+ }
+ }
+ if(header.hasSeparator()) {
+ if(endOfDataPos <= data.length-4) {
separator = new ChunkSeparator(
- data, header.getLength() +
header.getSizeInBytes() + 8);
+ data, endOfDataPos);
+ } else {
+ System.err.println("Header claims a length to "
+ endOfDataPos + " there's then no space for the separator in the data (" +
data.length + ")");
}
}
-
+
// Now, create the chunk
byte[] contents = new byte[header.getLength()];
System.arraycopy(data, offset+header.getSizeInBytes(),
contents, 0, contents.length);
Modified:
jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hdgf/chunks/ChunkHeaderV11.java
URL:
http://svn.apache.org/viewvc/jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hdgf/chunks/ChunkHeaderV11.java?view=diff&rev=548870&r1=548869&r2=548870
==============================================================================
---
jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hdgf/chunks/ChunkHeaderV11.java
(original)
+++
jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hdgf/chunks/ChunkHeaderV11.java
Tue Jun 19 15:41:33 2007
@@ -29,7 +29,7 @@
if(unknown2 == 2 && unknown3 == 0x55) { return true; }
if(unknown2 == 2 && unknown3 == 0x54 && type == 0xaa) { return
true; }
- if(unknown2 == 3 && unknown3 == 0x50 && type == 0xaa) { return
true; }
+ if(unknown2 == 3 && unknown3 != 0x50) { return true; }
if(type == 0x69) { return true; }
return false;
Modified:
jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hdgf/dev/VSDDumper.java
URL:
http://svn.apache.org/viewvc/jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hdgf/dev/VSDDumper.java?view=diff&rev=548870&r1=548869&r2=548870
==============================================================================
--- jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hdgf/dev/VSDDumper.java
(original)
+++ jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hdgf/dev/VSDDumper.java
Tue Jun 19 15:41:33 2007
@@ -67,6 +67,16 @@
System.out.println(ind + " Compressed is\t" +
ptr.destinationCompressed());
System.out.println(ind + " Stream is\t" +
stream.getClass().getCanonicalName());
+ byte[] db = stream._getStore()._getContents();
+ String ds = "";
+ if(db.length >= 8) {
+ for(int i=0; i<8; i++) {
+ if(i>0) ds += ", ";
+ ds += db[i];
+ }
+ }
+ System.out.println(ind + " First few bytes are\t" + ds);
+
if(stream instanceof PointerContainingStream) {
PointerContainingStream pcs =
(PointerContainingStream)stream;
System.out.println(ind + " Has " +
Modified:
jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hdgf/streams/ChunkStream.java
URL:
http://svn.apache.org/viewvc/jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hdgf/streams/ChunkStream.java?view=diff&rev=548870&r1=548869&r2=548870
==============================================================================
---
jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hdgf/streams/ChunkStream.java
(original)
+++
jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hdgf/streams/ChunkStream.java
Tue Jun 19 15:41:33 2007
@@ -30,6 +30,9 @@
protected ChunkStream(Pointer pointer, StreamStore store, ChunkFactory
chunkFactory) {
super(pointer, store);
this.chunkFactory = chunkFactory;
+
+ // For compressed stores, we require all of the data
+ store.copyBlockHeaderToContents();
}
public Chunk[] getChunks() { return chunks; }
Modified:
jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hdgf/streams/CompressedStreamStore.java
URL:
http://svn.apache.org/viewvc/jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hdgf/streams/CompressedStreamStore.java?view=diff&rev=548870&r1=548869&r2=548870
==============================================================================
---
jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hdgf/streams/CompressedStreamStore.java
(original)
+++
jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hdgf/streams/CompressedStreamStore.java
Tue Jun 19 15:41:33 2007
@@ -25,7 +25,7 @@
* A StreamStore where the data on-disk is compressed,
* using the crazy Visio LZW
*/
-class CompressedStreamStore extends StreamStore {
+public class CompressedStreamStore extends StreamStore {
/** The raw, compressed contents */
private byte[] compressedContents;
/**
@@ -33,6 +33,7 @@
* real contents in the de-compressed data
*/
private byte[] blockHeader = new byte[4];
+ private boolean blockHeaderInContents = false;
protected byte[] _getCompressedContents() { return compressedContents; }
protected byte[] _getBlockHeader() { return blockHeader; }
@@ -54,6 +55,19 @@
super(decompressedData[1], 0, decompressedData[1].length);
blockHeader = decompressedData[0];
}
+
+ /**
+ * Some kinds of streams expect their 4 byte header to be
+ * on the front of the contents.
+ * They can call this to have it sorted.
+ */
+ protected void copyBlockHeaderToContents() {
+ if(blockHeaderInContents) return;
+
+ prependContentsWith(blockHeader);
+ blockHeaderInContents = true;
+ }
+
/**
* Decompresses the given data, returning it as header + contents
Modified:
jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hdgf/streams/PointerContainingStream.java
URL:
http://svn.apache.org/viewvc/jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hdgf/streams/PointerContainingStream.java?view=diff&rev=548870&r1=548869&r2=548870
==============================================================================
---
jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hdgf/streams/PointerContainingStream.java
(original)
+++
jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hdgf/streams/PointerContainingStream.java
Tue Jun 19 15:41:33 2007
@@ -89,7 +89,7 @@
// Process chunk streams into their chunks
if(childStreams[i] instanceof ChunkStream) {
ChunkStream child =
(ChunkStream)childStreams[i];
-// child.findChunks();
+ child.findChunks();
}
// Recurse into pointer containing streams
Modified:
jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hdgf/streams/Stream.java
URL:
http://svn.apache.org/viewvc/jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hdgf/streams/Stream.java?view=diff&rev=548870&r1=548869&r2=548870
==============================================================================
---
jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hdgf/streams/Stream.java
(original)
+++
jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hdgf/streams/Stream.java
Tue Jun 19 15:41:33 2007
@@ -35,6 +35,7 @@
public Pointer getPointer() { return pointer; }
protected StreamStore getStore() { return store; }
+ public StreamStore _getStore() { return store; }
public int _getContentsLength() { return store.getContents().length; }
/**
Modified:
jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hdgf/streams/StreamStore.java
URL:
http://svn.apache.org/viewvc/jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hdgf/streams/StreamStore.java?view=diff&rev=548870&r1=548869&r2=548870
==============================================================================
---
jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hdgf/streams/StreamStore.java
(original)
+++
jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hdgf/streams/StreamStore.java
Tue Jun 19 15:41:33 2007
@@ -21,7 +21,7 @@
* handles de-compressing it as required.
* In future, may also handle writing it back out again
*/
-class StreamStore {
+public class StreamStore {
private byte[] contents;
/**
@@ -32,5 +32,14 @@
System.arraycopy(data, offset, contents, 0, length);
}
+ protected void prependContentsWith(byte[] b) {
+ byte[] newContents = new byte[contents.length + b.length];
+ System.arraycopy(b, 0, newContents, 0, b.length);
+ System.arraycopy(contents, 0, newContents, b.length,
contents.length);
+ contents = newContents;
+ }
+ protected void copyBlockHeaderToContents() {}
+
protected byte[] getContents() { return contents; }
+ public byte[] _getContents() { return contents; }
}
Added:
jakarta/poi/trunk/src/scratchpad/testcases/org/apache/poi/hdgf/chunks/TestChunks.java
URL:
http://svn.apache.org/viewvc/jakarta/poi/trunk/src/scratchpad/testcases/org/apache/poi/hdgf/chunks/TestChunks.java?view=auto&rev=548870
==============================================================================
---
jakarta/poi/trunk/src/scratchpad/testcases/org/apache/poi/hdgf/chunks/TestChunks.java
(added)
+++
jakarta/poi/trunk/src/scratchpad/testcases/org/apache/poi/hdgf/chunks/TestChunks.java
Tue Jun 19 15:41:33 2007
@@ -0,0 +1,160 @@
+/* ====================================================================
+ 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.hdgf.chunks;
+
+import junit.framework.TestCase;
+
+public class TestChunks extends TestCase {
+public static final byte[] data_a = new byte[] { 70, 0, 0, 0,
+ -1, -1, -1, -1, 2, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 68, 0, 0, 0, 0, 0,
+ 0, 0, 2, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 0, 0, 0, -1, -1, -1, -1, 0, 0,
0,
+ 0, -1, -1, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0,
+ 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0,
+ 0, 36, 0, 0, 0, 1, 0, 84, 24, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
+ 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, -110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ -124, 0, 0, 0, 2, 0, 85, 73, 0, 0, 0, 0, 0, 0, -56, 63, 73, 0, 0, 0,
+ 0, 0, 0, -64, 63, 63, 0, 0, 0, 0, 0, 0, -64, 63, 63, 0, 0, 0, 0, 0, 0,
+ -64, -65, 73, 0, 0, 0, 0, 0, 0, -16, 63, 73, 0, 0, 0, 0, 0, 0, -16, 63,
+ 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
80,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -16, 63, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, -1, 3, 0, 0, 32, 0, 0, 0, 0, 0, -73, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
0,
+ 79, 0, 0, 0, 2, 0, 85, 32, 32, 64, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0,
+ 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0,
+ 8, 8, 65, 0, 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0,
+ 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 1, -13, 15, 0, 0, 0, 0,
+ -56, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 2, 0, 85, 63, 0, 0,
+ 0, 0, 0, 0, -48, 63, 63, 0, 0, 0, 0, 0, 0, -48, 63, 63, 0, 0, 0, 0, 0,
+ 0, -48, 63, 63, 0, 0, 0, 0, 0, 0, -48, 63, 0, 0, 0, 0, 0, 0, -16, 63,
+ 0, 0, 0, 0, 0, 0, -16, 63, 1, 0, 1, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0,
+ 0, 1, -1, 15, 7, 0, 0, 0, 0, 101, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 28,
+ 0, 0, 0, 1, 0, 84, 24, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ -125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 2, 0, 85, 5, 0, 0,
+ 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+public static final byte[] data_b = new byte[] { 70, 0, 0, 0,
+ -1, -1, -1, -1, 3, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 68, 0, 0, 0, 0, 0,
+ 0, 0, 2, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 0, 0, 0, -1, -1, -1, -1,
+ 0, 0, 0, 0, -1, -1, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104, 0, 0, 0, 0, 0, 0,
+ 0, 2, 0, 0, 0, 32, 0, 0, 0, 1, 0, 84, 24, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 1, 0, 0, 0, 0, 0, 0, 0, -110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -124,
+ 0, 0, 0, 2, 0, 85, 63, 0, 0, 0, 0, 0, 0, 33, 64, 63, 0, 0, 0, 0, 0, 0,
+ 38, 64, 63, 0, 0, 0, 0, 0, 0, -64, 63, 63, 0, 0, 0, 0, 0, 0, -64, -65,
+ 73, 0, 0, 0, 0, 0, 0, -16, 63, 73, 0, 0, 0, 0, 0, 0, -16, 63, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 0, 0,
0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -16, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, -1,
3,
+ 0, 4, 32, 0, 0, 0, 0, 0, -56, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 72, 0,
0,
+ 0, 2, 0, 85, 63, 0, 0, 0, 0, 0, 0, -48, 63, 63, 0, 0, 0, 0, 0, 0, -48,
+ 63, 63, 0, 0, 0, 0, 0, 0, -48, 63, 63, 0, 0, 0, 0, 0, 0, -48, 63, 0, 0,
+ 0, 0, 0, 0, -16, 63, 0, 0, 0, 0, 0, 0, -16, 63, 1, 0, 1, 0, 0, 1, 1, 0,
+ 7, 0, 0, 0, 0, 0, 0, 0, 1, -1, 15, 7, 0, 0, 0, 0, 101, 0, 0, 0, 1, 0,
0,
+ 0, 1, 0, 0, 0, 28, 0, 0, 0, 1, 0, 84, 24, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, -125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 2,
0,
+ 85, 5, 0, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, -55, 0, 0, 0, 2, 0, 0,
0,
+ 0, 0, 0, 0, -122, 0, 0, 0, 1, 0, 80, 1, 0, 0, 0, 60, 0, 0, 0, 60, 0, 0,
+ 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0
+};
+
+ public void testChunkHeaderA() throws Exception {
+ ChunkFactory cf = new ChunkFactory(11);
+ ChunkHeader h =
+ ChunkHeader.createChunkHeader(11, data_a, 0);
+
+ assertTrue(h instanceof ChunkHeaderV11);
+ ChunkHeaderV11 header = (ChunkHeaderV11)h;
+
+ assertEquals(70, header.getType());
+ assertEquals(-1, header.getId());
+ assertEquals(2, header.getUnknown1());
+ assertEquals(68, header.getLength());
+ assertEquals(0, header.getUnknown2());
+ assertEquals(0, header.getUnknown3());
+
+ assertTrue(header.hasTrailer());
+ assertTrue(header.hasSeparator());
+ }
+ public void testChunkHeaderB() throws Exception {
+ ChunkFactory cf = new ChunkFactory(11);
+ ChunkHeader h =
+ ChunkHeader.createChunkHeader(11, data_b, 0);
+
+ assertTrue(h instanceof ChunkHeaderV11);
+ ChunkHeaderV11 header = (ChunkHeaderV11)h;
+
+ assertEquals(70, header.getType());
+ assertEquals(-1, header.getId());
+ assertEquals(3, header.getUnknown1());
+ assertEquals(68, header.getLength());
+ assertEquals(0, header.getUnknown2());
+ assertEquals(0, header.getUnknown3());
+
+ assertTrue(header.hasTrailer());
+ assertTrue(header.hasSeparator());
+ }
+
+ public void testOneChunk() throws Exception {
+ ChunkFactory cf = new ChunkFactory(11);
+ cf.createChunk(data_a, 0);
+ cf.createChunk(data_b, 0);
+
+ Chunk chunk = cf.createChunk(data_a, 0);
+ assertNotNull(chunk.getHeader());
+ assertNotNull(chunk.getTrailer());
+ assertNotNull(chunk.getSeparator());
+
+ // Should be 19 + length + 8 + 4 big
+ assertEquals(68, chunk.getHeader().getLength());
+ assertEquals(68+19+8+4, chunk.getOnDiskSize());
+ }
+
+ public void testManyChunks() throws Exception {
+ ChunkFactory cf = new ChunkFactory(11);
+ Chunk chunk;
+ int offset = 0;
+
+ chunk = cf.createChunk(data_a, offset);
+ assertNotNull(chunk.getHeader());
+ assertNotNull(chunk.getTrailer());
+ assertNotNull(chunk.getSeparator());
+ offset += chunk.getOnDiskSize();
+
+ chunk = cf.createChunk(data_a, offset);
+ assertNotNull(chunk.getHeader());
+ assertNotNull(chunk.getTrailer());
+ assertNotNull(chunk.getSeparator());
+ offset += chunk.getOnDiskSize();
+
+ chunk = cf.createChunk(data_a, offset);
+ assertNotNull(chunk.getHeader());
+ assertNull(chunk.getTrailer());
+ assertNull(chunk.getSeparator());
+ offset += chunk.getOnDiskSize();
+ }
+}
Propchange:
jakarta/poi/trunk/src/scratchpad/testcases/org/apache/poi/hdgf/chunks/TestChunks.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified:
jakarta/poi/trunk/src/scratchpad/testcases/org/apache/poi/hdgf/streams/TestStreamComplex.java
URL:
http://svn.apache.org/viewvc/jakarta/poi/trunk/src/scratchpad/testcases/org/apache/poi/hdgf/streams/TestStreamComplex.java?view=diff&rev=548870&r1=548869&r2=548870
==============================================================================
---
jakarta/poi/trunk/src/scratchpad/testcases/org/apache/poi/hdgf/streams/TestStreamComplex.java
(original)
+++
jakarta/poi/trunk/src/scratchpad/testcases/org/apache/poi/hdgf/streams/TestStreamComplex.java
Tue Jun 19 15:41:33 2007
@@ -73,7 +73,23 @@
}
public void testChunks() {
+ Pointer trailerPtr = ptrFactory.createPointer(contents,
trailerPointerAt);
+ TrailerStream ts = (TrailerStream)
+ Stream.createStream(trailerPtr, contents, chunkFactory,
ptrFactory);
+ // Should be 7th one
+ Pointer chunkPtr = ts.getChildPointers()[5];
+ assertFalse(chunkPtr.destinationHasStrings());
+ assertTrue(chunkPtr.destinationHasChunks());
+ assertFalse(chunkPtr.destinationHasPointers());
+
+ Stream stream = Stream.createStream(chunkPtr, contents,
chunkFactory, ptrFactory);
+ assertNotNull(stream);
+ assertTrue(stream instanceof ChunkStream);
+
+ // Now find the chunks within it
+ ChunkStream cs = (ChunkStream)stream;
+ cs.findChunks();
}
public void testStrings() {
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]