Refactored test case

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@711505 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Josh Micich 2008-11-05 03:50:31 +00:00
parent 7fe7a28ff3
commit 36c4c0bacf
1 changed files with 78 additions and 109 deletions

View File

@ -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,7 +14,6 @@
See the License for the specific language governing permissions and
limitations under the License.
==================================================================== */
package org.apache.poi.hssf.record;
@ -25,123 +23,94 @@ 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 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();
public TestSSTRecordSizeCalculator( String s )
{
super( s );
}
private void confirmSize(int expectedSize) {
SSTRecordSizeCalculator calculator = new SSTRecordSizeCalculator(strings);
assertEquals(expectedSize, calculator.getRecordSize());
}
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 testBasic() {
strings.add(makeUnicodeString(SMALL_STRING));
confirmSize(SSTRecord.SST_RECORD_OVERHEAD
+ COMPRESSED_PLAIN_STRING_OVERHEAD
+ SMALL_STRING.length());
}
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 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()
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 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()
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 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()
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 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()
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 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());
}
public void setUp()
{
strings = new IntMapper();
}
private UnicodeString makeUnicodeString( String s )
{
UnicodeString st = new UnicodeString(s);
st.setOptionFlags((byte)0);
return st;
}
}
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;
}
}