testsheet.java

来自「EXCEL read and write」· Java 代码 · 共 586 行 · 第 1/2 页

JAVA
586
字号
    public void testColPageBreaks() {        short rowFrom = 0;        short rowTo = (short)65535;        Sheet worksheet = Sheet.createSheet();        PageSettingsBlock sheet = worksheet.getPageSettings();        sheet.setColumnBreak((short)0, rowFrom, rowTo);        assertTrue("no col break at 0", sheet.isColumnBroken(0));        assertEquals("1 col break available", 1, sheet.getNumColumnBreaks());        sheet.setColumnBreak((short)0, rowFrom, rowTo);        assertTrue("no col break at 0", sheet.isColumnBroken(0));        assertEquals("1 col break available", 1, sheet.getNumColumnBreaks());        sheet.setColumnBreak((short)1, rowFrom, rowTo);        sheet.setColumnBreak((short)10, rowFrom, rowTo);        sheet.setColumnBreak((short)15, rowFrom, rowTo);        assertTrue("no col break at 1", sheet.isColumnBroken(1));        assertTrue("no col break at 10", sheet.isColumnBroken(10));        assertTrue("no col break at 15", sheet.isColumnBroken(15));        assertEquals("4 col break available", 4, sheet.getNumColumnBreaks());        boolean is10 = false;        boolean is0 = false;        boolean is1 = false;        boolean is15 = false;        int[] colBreaks = sheet.getColumnBreaks();        for (int i = 0; i < colBreaks.length; i++) {            int main = colBreaks[i];            if (main != 0 && main != 1 && main != 10 && main != 15) fail("Invalid page break");            if (main == 0)  is0 = true;            if (main == 1)  is1 = true;            if (main == 10) is10= true;            if (main == 15) is15 = true;        }        assertTrue("one of the breaks didnt make it", is0 && is1 && is10 && is15);        sheet.removeColumnBreak(15);        assertFalse("column break should not be there", sheet.isColumnBroken(15));        sheet.removeColumnBreak(0);        assertFalse("column break should not be there", sheet.isColumnBroken(0));        sheet.removeColumnBreak(1);        assertFalse("column break should not be there", sheet.isColumnBroken(1));        sheet.removeColumnBreak(10);        assertFalse("column break should not be there", sheet.isColumnBroken(10));        assertEquals("no more breaks", 0, sheet.getNumColumnBreaks());    }    /**     * test newly added method Sheet.getXFIndexForColAt(..)     * works as designed.     */    public void testXFIndexForColumn() {        final short TEST_IDX = 10;        final short DEFAULT_IDX = 0xF; // 15        short xfindex = Short.MIN_VALUE;        Sheet sheet = Sheet.createSheet();        // without ColumnInfoRecord        xfindex = sheet.getXFIndexForColAt((short) 0);        assertEquals(DEFAULT_IDX, xfindex);        xfindex = sheet.getXFIndexForColAt((short) 1);        assertEquals(DEFAULT_IDX, xfindex);        ColumnInfoRecord nci = new ColumnInfoRecord();        sheet._columnInfos.insertColumn(nci);        // single column ColumnInfoRecord        nci.setFirstColumn((short) 2);        nci.setLastColumn((short) 2);        nci.setXFIndex(TEST_IDX);        xfindex = sheet.getXFIndexForColAt((short) 0);        assertEquals(DEFAULT_IDX, xfindex);        xfindex = sheet.getXFIndexForColAt((short) 1);        assertEquals(DEFAULT_IDX, xfindex);        xfindex = sheet.getXFIndexForColAt((short) 2);        assertEquals(TEST_IDX, xfindex);        xfindex = sheet.getXFIndexForColAt((short) 3);        assertEquals(DEFAULT_IDX, xfindex);        // ten column ColumnInfoRecord        nci.setFirstColumn((short) 2);        nci.setLastColumn((short) 11);        nci.setXFIndex(TEST_IDX);        xfindex = sheet.getXFIndexForColAt((short) 1);        assertEquals(DEFAULT_IDX, xfindex);        xfindex = sheet.getXFIndexForColAt((short) 2);        assertEquals(TEST_IDX, xfindex);        xfindex = sheet.getXFIndexForColAt((short) 6);        assertEquals(TEST_IDX, xfindex);        xfindex = sheet.getXFIndexForColAt((short) 11);        assertEquals(TEST_IDX, xfindex);        xfindex = sheet.getXFIndexForColAt((short) 12);        assertEquals(DEFAULT_IDX, xfindex);        // single column ColumnInfoRecord starting at index 0        nci.setFirstColumn((short) 0);        nci.setLastColumn((short) 0);        nci.setXFIndex(TEST_IDX);        xfindex = sheet.getXFIndexForColAt((short) 0);        assertEquals(TEST_IDX, xfindex);        xfindex = sheet.getXFIndexForColAt((short) 1);        assertEquals(DEFAULT_IDX, xfindex);        // ten column ColumnInfoRecord starting at index 0        nci.setFirstColumn((short) 0);        nci.setLastColumn((short) 9);        nci.setXFIndex(TEST_IDX);        xfindex = sheet.getXFIndexForColAt((short) 0);        assertEquals(TEST_IDX, xfindex);        xfindex = sheet.getXFIndexForColAt((short) 7);        assertEquals(TEST_IDX, xfindex);        xfindex = sheet.getXFIndexForColAt((short) 9);        assertEquals(TEST_IDX, xfindex);        xfindex = sheet.getXFIndexForColAt((short) 10);        assertEquals(DEFAULT_IDX, xfindex);    }    private static final class SizeCheckingRecordVisitor implements RecordVisitor {        private int _totalSize;        public SizeCheckingRecordVisitor() {            _totalSize = 0;        }        public void visitRecord(Record r) {            int estimatedSize=r.getRecordSize();            byte[] buf = new byte[estimatedSize];            int serializedSize = r.serialize(0, buf);            if (estimatedSize != serializedSize) {                throw new AssertionFailedError("serialized size mismatch for record ("                         + r.getClass().getName() + ")");            }            _totalSize += estimatedSize;        }        public int getTotalSize() {            return _totalSize;        }    }    /**     * Prior to bug 45066, POI would get the estimated sheet size wrong     * when an <tt>UncalcedRecord</tt> was present.<p/>     */    public void testUncalcSize_bug45066() {        List records = new ArrayList();        records.add(new BOFRecord());        records.add(new UncalcedRecord());        records.add(new DimensionsRecord());        records.add(createWindow2Record());        records.add(EOFRecord.instance);        Sheet sheet = createSheet(records);                // The original bug was due to different logic for collecting records for sizing and         // serialization. The code has since been refactored into a single method for visiting        // all contained records.  Now this test is much less interesting        SizeCheckingRecordVisitor scrv = new SizeCheckingRecordVisitor();        sheet.visitContainedRecords(scrv, 0);        assertEquals(90, scrv.getTotalSize());    }    /**     * Prior to bug 45145 <tt>RowRecordsAggregate</tt> and <tt>ValueRecordsAggregate</tt> could     * sometimes occur in reverse order.  This test reproduces one of those situations and makes     * sure that RRA comes before VRA.<br/>     *     * The code here represents a normal POI use case where a spreadsheet is created from scratch.     */    public void testRowValueAggregatesOrder_bug45145() {        Sheet sheet = Sheet.createSheet();        RowRecord rr = new RowRecord(5);        sheet.addRow(rr);        CellValueRecordInterface cvr = new BlankRecord();        cvr.setColumn((short)0);        cvr.setRow(5);        sheet.addValueRecord(5, cvr);        int dbCellRecordPos = getDbCellRecordPos(sheet);        if (dbCellRecordPos == 252) {            // The overt symptom of the bug            // DBCELL record pos is calculated wrong if VRA comes before RRA            throw new AssertionFailedError("Identified  bug 45145");        }        if (false) {            // make sure that RRA and VRA are in the right place            // (Aug 2008) since the VRA is now part of the RRA, there is much less chance that            // they could get out of order. Still, one could write serialize the sheet here,             // and read back with EventRecordFactory to make sure...        }        assertEquals(242, dbCellRecordPos);    }    /**     * @return the value calculated for the position of the first DBCELL record for this sheet.     * That value is found on the IndexRecord.     */    private static int getDbCellRecordPos(Sheet sheet) {        MyIndexRecordListener myIndexListener = new MyIndexRecordListener();        sheet.visitContainedRecords(myIndexListener, 0);        IndexRecord indexRecord = myIndexListener.getIndexRecord();        int dbCellRecordPos = indexRecord.getDbcellAt(0);        return dbCellRecordPos;    }    private static final class MyIndexRecordListener implements RecordVisitor {        private IndexRecord _indexRecord;        public MyIndexRecordListener() {            // no-arg constructor        }        public IndexRecord getIndexRecord() {            return _indexRecord;        }        public void visitRecord(Record r) {            if (r instanceof IndexRecord) {                if (_indexRecord != null) {                    throw new RuntimeException("too many index records");                }                _indexRecord = (IndexRecord)r;            }        }    }        /**     * Checks for bug introduced around r682282-r683880 that caused a second GUTS records     * which in turn got the dimensions record out of alignment     */    public void testGutsRecord_bug45640() {                Sheet sheet = Sheet.createSheet();        sheet.addRow(new RowRecord(0));        sheet.addRow(new RowRecord(1));        sheet.groupRowRange( 0, 1, true );        sheet.toString();        List recs = sheet.getRecords();        int count=0;        for(int i=0; i< recs.size(); i++) {            if (recs.get(i) instanceof GutsRecord) {                count++;            }        }        if (count == 2) {            throw new AssertionFailedError("Identified bug 45640");        }        assertEquals(1, count);    }        public void testMisplacedMergedCellsRecords_bug45699() {        HSSFWorkbook wb = HSSFTestDataSamples.openSampleWorkbook("ex45698-22488.xls");                HSSFSheet sheet = wb.getSheetAt(0);        HSSFRow row = sheet.getRow(3);        HSSFCell cell = row.getCell(4);        if (cell == null) {            throw new AssertionFailedError("Identified bug 45699");        }        assertEquals("Informations", cell.getRichStringCellValue().getString());    }    /**     * In 3.1, setting margins between creating first row and first cell caused an exception.     */    public void testSetMargins_bug45717() {        HSSFWorkbook workbook = new HSSFWorkbook();        HSSFSheet sheet = workbook.createSheet("Vorschauliste");        HSSFRow row = sheet.createRow(0);        sheet.setMargin(HSSFSheet.LeftMargin, 0.3);        try {            row.createCell(0);        } catch (IllegalStateException e) {            if (e.getMessage().equals("Cannot create value records before row records exist")) {                throw new AssertionFailedError("Identified bug 45717");            }            throw e;        }    }}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?