📄 testsstrecord.java
字号:
{ record = new SSTRecord( record_type, record_length, data ); } else { record.processContinueRecord( data ); } } assertEquals( strings.length, record.getNumStrings() ); assertEquals( strings.length, record.getNumUniqueStrings() ); assertEquals( strings.length, record.countStrings() ); for ( int k = 0; k < strings.length; k++ ) { assertEquals( strings[k], record.getString( k ) ); } record = new SSTRecord(); bstrings[1] = new byte[bstrings[1].length - 1]; for ( int k = 0; k < bstrings.length; k++ ) { if ( ( bstrings[k].length % 2 ) == 1 ) { Arrays.fill( bstrings[k], (byte) ( 'a' + k ) ); strings[k] = new String( bstrings[k] ); } else { char[] data = new char[bstrings[k].length / 2]; Arrays.fill( data, (char) ( '\u2122' + k ) ); strings[k] = new String( data ); } record.addString( strings[k] ); } content = new byte[record.getRecordSize()]; record.serialize( 0, content ); total_length--; assertEquals( total_length, content.length ); for ( int index = 0; index != content.length; ) { short record_type = LittleEndian.getShort( content, index ); index += LittleEndianConsts.SHORT_SIZE; short record_length = LittleEndian.getShort( content, index ); index += LittleEndianConsts.SHORT_SIZE; byte[] data = new byte[record_length]; System.arraycopy( content, index, data, 0, record_length ); index += record_length; if ( record_type == SSTRecord.sid ) { record = new SSTRecord( record_type, record_length, data ); } else { record.processContinueRecord( data ); } } assertEquals( strings.length, record.getNumStrings() ); assertEquals( strings.length, record.getNumUniqueStrings() ); assertEquals( strings.length, record.countStrings() ); for ( int k = 0; k < strings.length; k++ ) { assertEquals( strings[k], record.getString( k ) ); } } /** * test SSTRecord boundary conditions * * @exception IOException */ public void testSSTRecordBug() throws IOException { // create an SSTRecord and write a certain pattern of strings // to it ... then serialize it and verify the content SSTRecord record = new SSTRecord(); // the record will start with two integers, then this string // ... that will eat up 16 of the 8224 bytes that the record // can hold record.addString( "Hello" ); // now we have an additional 8208 bytes, which is an exact // multiple of 16 bytes long testvalue = 1000000000000L; for ( int k = 0; k < 2000; k++ ) { record.addString( String.valueOf( testvalue++ ) ); } byte[] content = new byte[record.getRecordSize()]; record.serialize( 0, content ); assertEquals( (byte) 13, content[4 + 8228] ); assertEquals( (byte) 13, content[4 + 8228 * 2] ); assertEquals( (byte) 13, content[4 + 8228 * 3] ); } /** * test simple addString */ public void testSimpleAddString() { SSTRecord record = new SSTRecord(); String s1 = "Hello world"; // \u2122 is the encoding of the trademark symbol ... String s2 = "Hello world\u2122"; assertEquals( 0, record.addString( s1 ) ); assertEquals( s1, record.getString( 0 ) ); assertEquals( 1, record.countStrings() ); assertEquals( 1, record.getNumStrings() ); assertEquals( 1, record.getNumUniqueStrings() ); assertEquals( 0, record.addString( s1 ) ); assertEquals( s1, record.getString( 0 ) ); assertEquals( 1, record.countStrings() ); assertEquals( 2, record.getNumStrings() ); assertEquals( 1, record.getNumUniqueStrings() ); assertEquals( 1, record.addString( s2 ) ); assertEquals( s2, record.getString( 1 ) ); assertEquals( 2, record.countStrings() ); assertEquals( 3, record.getNumStrings() ); assertEquals( 2, record.getNumUniqueStrings() ); Iterator iter = record.getStrings(); while ( iter.hasNext() ) { UnicodeString ucs = (UnicodeString) iter.next(); if ( ucs.getString().equals( s1 ) ) { assertEquals( (byte) 0, ucs.getOptionFlags() ); } else if ( ucs.getString().equals( s2 ) ) { assertEquals( (byte) 1, ucs.getOptionFlags() ); } else { fail( "cannot match string: " + ucs.getString() ); } } } /** * test reader constructor * * @exception IOException */ public void testReaderConstructor() throws IOException { byte[] testdata = HexRead.readData( _test_file_path + File.separator + "BigSSTRecord" ); byte[] input = new byte[testdata.length - 4]; System.arraycopy( testdata, 4, input, 0, input.length ); SSTRecord record = new SSTRecord( LittleEndian.getShort( testdata, 0 ), LittleEndian.getShort( testdata, 2 ), input ); assertEquals( 1464, record.getNumStrings() ); assertEquals( 688, record.getNumUniqueStrings() ); assertEquals( 492, record.countStrings() );//jmh assertEquals( 1, record.getDeserializer().getContinuationExpectedChars() ); assertEquals( "Consolidated B-24J Liberator The Dragon & His Tai", record.getDeserializer().getUnfinishedString() );// assertEquals( 52, record.getDeserializer().getTotalLength() );// assertEquals( 3, record.getDeserializer().getStringDataOffset() ); assertTrue( !record.getDeserializer().isWideChar() ); } /** * test simple constructor */ public void testSimpleConstructor() { SSTRecord record = new SSTRecord(); assertEquals( 0, record.getNumStrings() ); assertEquals( 0, record.getNumUniqueStrings() ); assertEquals( 0, record.countStrings() ); assertEquals( 0, record.getDeserializer().getContinuationCharsRead() ); assertEquals( "", record.getDeserializer().getUnfinishedString() );// assertEquals( 0, record.getDeserializer().getTotalLength() );// assertEquals( 0, record.getDeserializer().getStringDataOffset() ); assertTrue( !record.getDeserializer().isWideChar() ); byte[] output = record.serialize(); byte[] expected = { (byte) record.getSid(), (byte) ( record.getSid() >> 8 ), (byte) 8, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0 }; assertEquals( expected.length, output.length ); for ( int k = 0; k < expected.length; k++ ) { assertEquals( String.valueOf( k ), expected[k], output[k] ); } } /** * main method to run the unit tests * * @param ignored_args */ public static void main( String[] ignored_args ) { System.out.println( "Testing hssf.record.SSTRecord functionality" ); junit.textui.TestRunner.run( TestSSTRecord.class ); } /** * Tests that workbooks with rich text that duplicates a non rich text cell can be read and written. */ public void testReadWriteDuplicatedRichText1() throws Exception { File file = new File( _test_file_path + File.separator + "duprich1.xls" ); InputStream stream = new FileInputStream( file ); HSSFWorkbook wb = new HSSFWorkbook( stream ); stream.close(); HSSFSheet sheet = wb.getSheetAt( 1 ); assertEquals( "01/05 (Wed) ", sheet.getRow( 0 ).getCell( (short) 8 ).getStringCellValue() ); assertEquals( "01/05 (Wed)", sheet.getRow( 1 ).getCell( (short) 8 ).getStringCellValue() ); file = File.createTempFile( "testout", "xls" ); FileOutputStream outStream = new FileOutputStream( file ); wb.write( outStream ); outStream.close(); file.delete(); // test the second file. file = new File( _test_file_path + File.separator + "duprich2.xls" ); stream = new FileInputStream( file ); wb = new HSSFWorkbook( stream ); stream.close(); sheet = wb.getSheetAt( 0 ); int row = 0; assertEquals( "Testing ", sheet.getRow( row++ ).getCell( (short) 0 ).getStringCellValue() ); assertEquals( "rich", sheet.getRow( row++ ).getCell( (short) 0 ).getStringCellValue() ); assertEquals( "text", sheet.getRow( row++ ).getCell( (short) 0 ).getStringCellValue() ); assertEquals( "strings", sheet.getRow( row++ ).getCell( (short) 0 ).getStringCellValue() ); assertEquals( "Testing ", sheet.getRow( row++ ).getCell( (short) 0 ).getStringCellValue() ); assertEquals( "Testing", sheet.getRow( row++ ).getCell( (short) 0 ).getStringCellValue() );// file = new File("/tryme.xls"); file = File.createTempFile( "testout", ".xls" ); outStream = new FileOutputStream( file ); wb.write( outStream ); outStream.close(); file.delete(); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -