diff options
author | Yegor Kozlov <yegor@apache.org> | 2009-03-29 16:10:40 +0000 |
---|---|---|
committer | Yegor Kozlov <yegor@apache.org> | 2009-03-29 16:10:40 +0000 |
commit | e47dd63c80d7807381f77ee0d8879332737368cf (patch) | |
tree | 84873becffceb445145100a219b89959a7ee3b5b /src/testcases/org/apache/poi/hssf/usermodel | |
parent | 9adb9cc6d3da755b57e1c205d634fb4127fa072c (diff) | |
download | poi-e47dd63c80d7807381f77ee0d8879332737368cf.tar.gz poi-e47dd63c80d7807381f77ee0d8879332737368cf.zip |
more refactoring of common ss tests
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@759714 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'src/testcases/org/apache/poi/hssf/usermodel')
9 files changed, 300 insertions, 1022 deletions
diff --git a/src/testcases/org/apache/poi/hssf/usermodel/AllUserModelTests.java b/src/testcases/org/apache/poi/hssf/usermodel/AllUserModelTests.java index 5effed4b55..6b3043c072 100755 --- a/src/testcases/org/apache/poi/hssf/usermodel/AllUserModelTests.java +++ b/src/testcases/org/apache/poi/hssf/usermodel/AllUserModelTests.java @@ -60,7 +60,7 @@ public class AllUserModelTests { result.addTestSuite(TestHSSFTextbox.class); result.addTestSuite(TestHSSFWorkbook.class); result.addTestSuite(TestLinkTable.class); - result.addTestSuite(TestNamedRange.class); + result.addTestSuite(TestHSSFName.class); result.addTestSuite(TestOLE2Embeding.class); result.addTestSuite(TestPOIFSProperties.class); result.addTestSuite(TestReadWriteChart.class); diff --git a/src/testcases/org/apache/poi/hssf/usermodel/TestBug43093.java b/src/testcases/org/apache/poi/hssf/usermodel/TestBug43093.java deleted file mode 100644 index 3dbf5907ff..0000000000 --- a/src/testcases/org/apache/poi/hssf/usermodel/TestBug43093.java +++ /dev/null @@ -1,61 +0,0 @@ -/* ==================================================================== - 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.hssf.usermodel; - -import junit.framework.TestCase; - -/** - * - */ -public final class TestBug43093 extends TestCase { - - private static void addNewSheetWithCellsA1toD4(HSSFWorkbook book, int sheet) { - - HSSFSheet sht = book .createSheet("s" + sheet); - for (int r=0; r < 4; r++) { - - HSSFRow row = sht.createRow (r); - for (int c=0; c < 4; c++) { - - HSSFCell cel = row.createCell(c); - cel.setCellValue(sheet*100 + r*10 + c); - } - } - } - - public void testBug43093() { - HSSFWorkbook xlw = new HSSFWorkbook(); - - addNewSheetWithCellsA1toD4(xlw, 1); - addNewSheetWithCellsA1toD4(xlw, 2); - addNewSheetWithCellsA1toD4(xlw, 3); - addNewSheetWithCellsA1toD4(xlw, 4); - - HSSFSheet s2 = xlw.getSheet("s2"); - HSSFRow s2r3 = s2.getRow(3); - HSSFCell s2E4 = s2r3.createCell(4); - s2E4.setCellFormula("SUM(s3!B2:C3)"); - - HSSFFormulaEvaluator eva = new HSSFFormulaEvaluator(xlw); - double d = eva.evaluate(s2E4).getNumberValue(); - - // internalEvaluate(...) Area3DEval.: 311+312+321+322 expected - assertEquals(d, (311+312+321+322), 0.0000001); - // System.out.println("Area3DEval ok.: 311+312+321+322=" + d); - } -} diff --git a/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java b/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java index c3b0fe2c92..44063e3c7a 100644 --- a/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java +++ b/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java @@ -26,6 +26,7 @@ import junit.framework.TestCase; import org.apache.poi.hssf.HSSFTestDataSamples; import org.apache.poi.hssf.OldExcelFormatException; +import org.apache.poi.hssf.HSSFITestDataProvider; import org.apache.poi.hssf.model.Workbook; import org.apache.poi.hssf.record.CellValueRecordInterface; import org.apache.poi.hssf.record.EmbeddedObjectRefSubRecord; @@ -36,23 +37,33 @@ import org.apache.poi.hssf.record.formula.Ptg; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.RichTextString; import org.apache.poi.ss.usermodel.Row; +import org.apache.poi.ss.usermodel.BaseTestBugzillaIssues; import org.apache.poi.ss.util.CellRangeAddress; import org.apache.poi.util.TempFile; /** * Testcases for bugs entered in bugzilla * the Test name contains the bugzilla bug id + * + * <b>YK: If a bug can be tested in terms of common ss interfaces, + * define the test in the base class {@link BaseTestBugzillaIssues}</b> + * * @author Avik Sengupta * @author Yegor Kozlov */ -public final class TestBugs extends TestCase { +public final class TestBugs extends BaseTestBugzillaIssues { - private static HSSFWorkbook openSample(String sampleFileName) { - return HSSFTestDataSamples.openSampleWorkbook(sampleFileName); + @Override + protected HSSFITestDataProvider getTestDataProvider(){ + return HSSFITestDataProvider.getInstance(); } - private static HSSFWorkbook writeOutAndReadBack(HSSFWorkbook original) { - return HSSFTestDataSamples.writeOutAndReadBack(original); + private HSSFWorkbook openSample(String sampleFileName) { + return getTestDataProvider().openSampleWorkbook(sampleFileName); + } + + private HSSFWorkbook writeOutAndReadBack(HSSFWorkbook original) { + return getTestDataProvider().writeOutAndReadBack(original); } private static void writeTestOutputFileForViewing(HSSFWorkbook wb, String simpleFileName) { @@ -94,16 +105,6 @@ public final class TestBugs extends TestCase { c.setCellValue(10); writeOutAndReadBack(wb); } - /**Test writing a hyperlink - * Open resulting sheet in Excel and check that A1 contains a hyperlink*/ - public void test23094() { - HSSFWorkbook wb = new HSSFWorkbook(); - HSSFSheet s = wb.createSheet(); - HSSFRow r = s.createRow(0); - r.createCell(0).setCellFormula("HYPERLINK( \"http://jakarta.apache.org\", \"Jakarta\" )"); - - writeTestOutputFileForViewing(wb, "test23094"); - } /** test hyperlinks * open resulting file in excel, and check that there is a link to Google @@ -163,68 +164,14 @@ public final class TestBugs extends TestCase { writeTestOutputFileForViewing(wb, "test15375"); } - - /** test writing a file with large number of unique strings - *open resulting file in Excel to check results!*/ - - public void test15375_2() throws Exception{ - HSSFWorkbook wb = new HSSFWorkbook(); - HSSFSheet sheet = wb.createSheet(); - - String tmp1 = null; - String tmp2 = null; - String tmp3 = null; - - for (int i = 0; i < 6000; i++) { - tmp1 = "Test1" + i; - tmp2 = "Test2" + i; - tmp3 = "Test3" + i; - - HSSFRow row = sheet.createRow(i); - - HSSFCell cell = row.createCell(0); - setCellText(cell, tmp1); - cell = row.createCell(1); - setCellText(cell, tmp2); - cell = row.createCell(2); - setCellText(cell, tmp3); - } - writeTestOutputFileForViewing(wb, "test15375-2"); - } - /** another test for the number of unique strings issue - *test opening the resulting file in Excel*/ - public void test22568() { - int r=2000;int c=3; - - HSSFWorkbook wb = new HSSFWorkbook() ; - HSSFSheet sheet = wb.createSheet("ExcelTest") ; - - int col_cnt=0, rw_cnt=0 ; - - col_cnt = c; - rw_cnt = r; - - HSSFRow rw ; - rw = sheet.createRow(0) ; - //Header row - for(int j=0; j<col_cnt; j++){ - HSSFCell cell = rw.createCell(j) ; - setCellText(cell, "Col " + (j+1)) ; - } - - for(int i=1; i<rw_cnt; i++){ - rw = sheet.createRow(i) ; - for(int j=0; j<col_cnt; j++){ - HSSFCell cell = rw.createCell(j) ; - setCellText(cell, "Row:" + (i+1) + ",Column:" + (j+1)) ; - } - } - - sheet.setDefaultColumnWidth(18) ; - - writeTestOutputFileForViewing(wb, "test22568"); + /** + * test writing a file with large number of unique strings, + * open resulting file in Excel to check results! + */ + public void test15375_2() { + baseTest15375(6000); } - + /**Double byte strings*/ public void test15556() { @@ -286,50 +233,6 @@ public final class TestBugs extends TestCase { } } - public void test18800() { - HSSFWorkbook book = new HSSFWorkbook(); - book.createSheet("TEST"); - HSSFSheet sheet = book.cloneSheet(0); - book.setSheetName(1,"CLONE"); - sheet.createRow(0).createCell(0).setCellValue(new HSSFRichTextString("Test")); - - book = writeOutAndReadBack(book); - sheet = book.getSheet("CLONE"); - HSSFRow row = sheet.getRow(0); - HSSFCell cell = row.getCell(0); - assertEquals("Test", cell.getRichStringCellValue().getString()); - } - - /** - * Merged regions were being removed from the parent in cloned sheets - */ - public void test22720() { - HSSFWorkbook workBook = new HSSFWorkbook(); - workBook.createSheet("TEST"); - HSSFSheet template = workBook.getSheetAt(0); - - template.addMergedRegion(new CellRangeAddress(0, 1, 0, 2)); - template.addMergedRegion(new CellRangeAddress(1, 2, 0, 2)); - - HSSFSheet clone = workBook.cloneSheet(0); - int originalMerged = template.getNumMergedRegions(); - assertEquals("2 merged regions", 2, originalMerged); - -// remove merged regions from clone - for (int i=template.getNumMergedRegions()-1; i>=0; i--) { - clone.removeMergedRegion(i); - } - - assertEquals("Original Sheet's Merged Regions were removed", originalMerged, template.getNumMergedRegions()); -// check if template's merged regions are OK - if (template.getNumMergedRegions()>0) { - // fetch the first merged region...EXCEPTION OCCURS HERE - template.getMergedRegion(0); - } - //make sure we dont exception - - } - /**Tests read and write of Unicode strings in formula results * bug and testcase submitted by Sompop Kumnoonsate * The file contains THAI unicode characters. @@ -424,21 +327,6 @@ public final class TestBugs extends TestCase { } } - public void test28031() { - HSSFWorkbook wb = new HSSFWorkbook(); - HSSFSheet sheet = wb.createSheet(); - wb.setSheetName(0, "Sheet1"); - - HSSFRow row = sheet.createRow(0); - HSSFCell cell = row.createCell(0); - String formulaText = - "IF(ROUND(A2*B2*C2,2)>ROUND(B2*D2,2),ROUND(A2*B2*C2,2),ROUND(B2*D2,2))"; - cell.setCellFormula(formulaText); - - assertEquals(formulaText, cell.getCellFormula()); - writeTestOutputFileForViewing(wb, "output28031.xls"); - } - public void test33082() { openSample("33082.xls"); } @@ -486,19 +374,8 @@ public final class TestBugs extends TestCase { */ public void test29206() { //the first check with blank workbook - HSSFWorkbook wb = new HSSFWorkbook(); + HSSFWorkbook wb = openSample("Simple.xls"); HSSFSheet sheet = wb.createSheet(); - - for(int i = 1; i < 400; i++) { - HSSFRow row = sheet.getRow(i); - if(row != null) { - row.getCell(0); - } - } - - //now check on an existing xls file - wb = openSample("Simple.xls"); - for(int i = 1; i < 400; i++) { HSSFRow row = sheet.getRow(i); if(row != null) { @@ -901,23 +778,6 @@ public final class TestBugs extends TestCase { assertTrue("no errors writing sample xls", true); } - /** - * Bug 21334: "File error: data may have been lost" with a file - * that contains macros and this formula: - * {=SUM(IF(FREQUENCY(IF(LEN(V4:V220)>0,MATCH(V4:V220,V4:V220,0),""),IF(LEN(V4:V220)>0,MATCH(V4:V220,V4:V220,0),""))>0,1))} - */ - public void test21334() { - HSSFWorkbook wb = new HSSFWorkbook(); - HSSFSheet sh = wb.createSheet(); - HSSFCell cell = sh.createRow(0).createCell(0); - String formula = "SUM(IF(FREQUENCY(IF(LEN(V4:V220)>0,MATCH(V4:V220,V4:V220,0),\"\"),IF(LEN(V4:V220)>0,MATCH(V4:V220,V4:V220,0),\"\"))>0,1))"; - cell.setCellFormula(formula); - - HSSFWorkbook wb_sv = writeOutAndReadBack(wb); - HSSFCell cell_sv = wb_sv.getSheetAt(0).getRow(0).getCell(0); - assertEquals(formula, cell_sv.getCellFormula()); - } - public void test36947() { HSSFWorkbook wb = openSample("36947.xls"); assertTrue("no errors reading sample xls", true); @@ -925,16 +785,6 @@ public final class TestBugs extends TestCase { assertTrue("no errors writing sample xls", true); } - /** - * Bug 42448: Can't parse SUMPRODUCT(A!C7:A!C67, B8:B68) / B69 - */ - public void test42448(){ - HSSFWorkbook wb = new HSSFWorkbook(); - HSSFCell cell = wb.createSheet().createRow(0).createCell(0); - cell.setCellFormula("SUMPRODUCT(A!C7:A!C67, B8:B68) / B69"); - assertTrue("no errors parsing formula", true); - } - public void test39634() { HSSFWorkbook wb = openSample("39634.xls"); assertTrue("no errors reading sample xls", true); @@ -1522,38 +1372,6 @@ public final class TestBugs extends TestCase { } /** - * HSSFRichTextString.length() returns negative for really - * long strings - */ - public void test46368() { - HSSFWorkbook wb = new HSSFWorkbook(); - HSSFSheet s = wb.createSheet(); - HSSFRow r = s.createRow(0); - for(int i=0; i<15; i++) { - int len = 32760 + i; - HSSFCell c = r.createCell(i); - - StringBuffer sb = new StringBuffer(); - for(int j=0; j<len; j++) { - sb.append("x"); - } - HSSFRichTextString rtr = new HSSFRichTextString(sb.toString()); - assertEquals(len, rtr.length()); - c.setCellValue(rtr); - } - - // Save and reload - wb = writeOutAndReadBack(wb); - s = wb.getSheetAt(0); - r = s.getRow(0); - for(int i=0; i<15; i++) { - int len = 32760 + i; - HSSFCell c = r.getCell(i); - assertEquals(len, c.getRichStringCellValue().length()); - } - } - - /** * In POI-2.5 user reported exception when parsing a name with a custom VBA function: * =MY_VBA_FUNCTION("lskdjflsk") */ diff --git a/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFFont.java b/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFFont.java new file mode 100755 index 0000000000..f6ce14ca92 --- /dev/null +++ b/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFFont.java @@ -0,0 +1,56 @@ +/* ==================================================================== + 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.hssf.usermodel; + +import java.util.Date; +import java.util.GregorianCalendar; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; + +import junit.framework.AssertionFailedError; +import org.apache.poi.hssf.HSSFITestDataProvider; +import org.apache.poi.hssf.HSSFTestDataSamples; +import org.apache.poi.hssf.model.Sheet; +import org.apache.poi.hssf.model.HSSFFormulaParser; +import org.apache.poi.hssf.record.DBCellRecord; +import org.apache.poi.hssf.record.FormulaRecord; +import org.apache.poi.hssf.record.Record; +import org.apache.poi.hssf.record.StringRecord; +import org.apache.poi.hssf.record.formula.Ptg; +import org.apache.poi.ss.usermodel.*; +import org.apache.poi.ss.util.AreaReference; +import org.apache.poi.ss.util.CellReference; +import org.apache.poi.ss.formula.FormulaType; + +/** + * Tests various functionality having to do with {@link org.apache.poi.ss.usermodel.Name}. + * + * @author Yegor Kozlov + */ +public final class TestHSSFFont extends BaseTestFont { + + @Override + protected HSSFITestDataProvider getTestDataProvider(){ + return HSSFITestDataProvider.getInstance(); + } + + public void testDefaultFont() { + baseTestDefaultFont(HSSFFont.FONT_ARIAL, (short)200, Font.COLOR_NORMAL); + } +}
\ No newline at end of file diff --git a/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFName.java b/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFName.java index 56bd25b346..291698ec8f 100755 --- a/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFName.java +++ b/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFName.java @@ -19,24 +19,34 @@ package org.apache.poi.hssf.usermodel; import java.util.Date; import java.util.GregorianCalendar; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; import junit.framework.AssertionFailedError; import org.apache.poi.hssf.HSSFITestDataProvider; +import org.apache.poi.hssf.HSSFTestDataSamples; import org.apache.poi.hssf.model.Sheet; +import org.apache.poi.hssf.model.HSSFFormulaParser; import org.apache.poi.hssf.record.DBCellRecord; import org.apache.poi.hssf.record.FormulaRecord; import org.apache.poi.hssf.record.Record; import org.apache.poi.hssf.record.StringRecord; +import org.apache.poi.hssf.record.formula.Ptg; import org.apache.poi.ss.usermodel.ErrorConstants; import org.apache.poi.ss.usermodel.BaseTestCell; import org.apache.poi.ss.usermodel.BaseTestNamedRange; +import org.apache.poi.ss.util.AreaReference; +import org.apache.poi.ss.util.CellReference; +import org.apache.poi.ss.formula.FormulaType; /** - * Tests various functionality having to do with {@link org.apache.poi.hssf.usermodel.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) + * Tests various functionality having to do with {@link org.apache.poi.ss.usermodel.Name}. + * + * @author Andrew C. Oliver (acoliver at apache dot org) + * @author ROMANL + * @author Danny Mui (danny at muibros.com) + * @author Amol S. Deshmukh < amol at ap ache dot org > */ public final class TestHSSFName extends BaseTestNamedRange { @@ -45,4 +55,187 @@ public final class TestHSSFName extends BaseTestNamedRange { return HSSFITestDataProvider.getInstance(); } + public void testRepeatingRowsAndColumsNames() { + // First test that setting RR&C for same sheet more than once only creates a + // single Print_Titles built-in record + HSSFWorkbook wb = new HSSFWorkbook(); + HSSFSheet sheet = wb.createSheet("FirstSheet"); + + // set repeating rows and columns twice for the first sheet + for (int i = 0; i < 2; i++) { + wb.setRepeatingRowsAndColumns(0, 0, 0, 0, 3-1); + sheet.createFreezePane(0, 3); + } + assertEquals(1, wb.getNumberOfNames()); + HSSFName nr1 = wb.getNameAt(0); + + assertEquals("Print_Titles", nr1.getNameName()); + if (false) { + // TODO - full column references not rendering properly, absolute markers not present either + assertEquals("FirstSheet!$A:$A,FirstSheet!$1:$3", nr1.getRefersToFormula()); + } else { + assertEquals("FirstSheet!A:A,FirstSheet!$A$1:$IV$3", nr1.getRefersToFormula()); + } + + // Save and re-open + HSSFWorkbook nwb = HSSFTestDataSamples.writeOutAndReadBack(wb); + + assertEquals(1, nwb.getNumberOfNames()); + nr1 = nwb.getNameAt(0); + + assertEquals("Print_Titles", nr1.getNameName()); + assertEquals("FirstSheet!A:A,FirstSheet!$A$1:$IV$3", nr1.getRefersToFormula()); + + // check that setting RR&C on a second sheet causes a new Print_Titles built-in + // name to be created + sheet = nwb.createSheet("SecondSheet"); + nwb.setRepeatingRowsAndColumns(1, 1, 2, 0, 0); + + assertEquals(2, nwb.getNumberOfNames()); + HSSFName nr2 = nwb.getNameAt(1); + + assertEquals("Print_Titles", nr2.getNameName()); + assertEquals("SecondSheet!B:C,SecondSheet!$A$1:$IV$1", nr2.getRefersToFormula()); + + if (false) { + // In case you fancy checking in excel, to ensure it + // won't complain about the file now + try { + File tempFile = File.createTempFile("POI-45126-", ".xls"); + FileOutputStream fout = new FileOutputStream(tempFile); + nwb.write(fout); + fout.close(); + System.out.println("check out " + tempFile.getAbsolutePath()); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + } + + /** Test of TestCase method, of class test.RangeTest. */ + public void testNamedRange() { + HSSFWorkbook wb = getTestDataProvider().openSampleWorkbook("Simple.xls"); + + //Creating new Named Range + HSSFName newNamedRange = wb.createName(); + + //Getting Sheet Name for the reference + String sheetName = wb.getSheetName(0); + + //Setting its name + newNamedRange.setNameName("RangeTest"); + //Setting its reference + newNamedRange.setRefersToFormula(sheetName + "!$D$4:$E$8"); + + //Getting NAmed Range + HSSFName namedRange1 = wb.getNameAt(0); + //Getting it sheet name + sheetName = namedRange1.getSheetName(); + + // sanity check + SanityChecker c = new SanityChecker(); + c.checkHSSFWorkbook(wb); + + wb = HSSFTestDataSamples.writeOutAndReadBack(wb); + HSSFName nm =wb.getNameAt(wb.getNameIndex("RangeTest")); + assertTrue("Name is "+nm.getNameName(),"RangeTest".equals(nm.getNameName())); + assertEquals(wb.getSheetName(0)+"!$D$4:$E$8", nm.getRefersToFormula()); + } + + /** + * Reads an excel file already containing a named range. + * <p> + * Addresses Bug <a href="http://issues.apache.org/bugzilla/show_bug.cgi?id=9632" target="_bug">#9632</a> + */ + public void testNamedRead() { + HSSFWorkbook wb = getTestDataProvider().openSampleWorkbook("namedinput.xls"); + + //Get index of the namedrange with the name = "NamedRangeName" , which was defined in input.xls as A1:D10 + int NamedRangeIndex = wb.getNameIndex("NamedRangeName"); + + //Getting NAmed Range + HSSFName namedRange1 = wb.getNameAt(NamedRangeIndex); + String sheetName = wb.getSheetName(0); + + //Getting its reference + String reference = namedRange1.getRefersToFormula(); + + assertEquals(sheetName+"!$A$1:$D$10", reference); + + HSSFName namedRange2 = wb.getNameAt(1); + + assertEquals(sheetName+"!$D$17:$G$27", namedRange2.getRefersToFormula()); + assertEquals("SecondNamedRange", namedRange2.getNameName()); + } + + /** + * Reads an excel file already containing a named range and updates it + * <p> + * Addresses Bug <a href="http://issues.apache.org/bugzilla/show_bug.cgi?id=16411" target="_bug">#16411</a> + */ + public void testNamedReadModify() { + HSSFWorkbook wb = getTestDataProvider().openSampleWorkbook("namedinput.xls"); + + HSSFName name = wb.getNameAt(0); + String sheetName = wb.getSheetName(0); + + assertEquals(sheetName+"!$A$1:$D$10", name.getRefersToFormula()); + + name = wb.getNameAt(1); + String newReference = sheetName +"!$A$1:$C$36"; + + name.setRefersToFormula(newReference); + assertEquals(newReference, name.getRefersToFormula()); + } + + /** + * Test to see if the print area can be retrieved from an excel created file + */ + public void testPrintAreaFileRead() { + HSSFWorkbook workbook = getTestDataProvider().openSampleWorkbook("SimpleWithPrintArea.xls"); + + String sheetName = workbook.getSheetName(0); + String reference = sheetName+"!$A$1:$C$5"; + + assertEquals(reference, workbook.getPrintArea(0)); + } + + + public void testDeletedReference() throws Exception { + HSSFWorkbook wb = HSSFTestDataSamples.openSampleWorkbook("24207.xls"); + assertEquals(2, wb.getNumberOfNames()); + + HSSFName name1 = wb.getNameAt(0); + assertEquals("a", name1.getNameName()); + assertEquals("Sheet1!$A$1", name1.getRefersToFormula()); + new AreaReference(name1.getRefersToFormula()); + assertTrue("Successfully constructed first reference", true); + + HSSFName name2 = wb.getNameAt(1); + assertEquals("b", name2.getNameName()); + assertEquals("Sheet1!#REF!", name2.getRefersToFormula()); + assertTrue(name2.isDeleted()); + try { + new AreaReference(name2.getRefersToFormula()); + fail("attempt to supply an invalid reference to AreaReference constructor results in exception"); + } catch (StringIndexOutOfBoundsException e) { // TODO - use a different exception for this condition + // expected during successful test + } + } + + /** + * When setting A1 type of referencese HSSFName.setRefersToFormula + * must set the type of operands to Ptg.CLASS_REF, + * otherwise created named don't appear in the dropdown to the left opf formula bar in Excel + */ + public void testTypeOfRootPtg(){ + HSSFWorkbook wb = new HSSFWorkbook(); + wb.createSheet("CSCO"); + + Ptg[] ptgs = HSSFFormulaParser.parse("CSCO!$E$71", wb, FormulaType.NAMEDRANGE, 0); + for (int i = 0; i < ptgs.length; i++) { + assertEquals('R', ptgs[i].getRVAType()); + } + + } }
\ No newline at end of file diff --git a/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFPicture.java b/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFPicture.java index d1a6719e32..81c8990769 100644 --- a/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFPicture.java +++ b/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFPicture.java @@ -19,33 +19,23 @@ package org.apache.poi.hssf.usermodel; import junit.framework.TestCase;
import org.apache.poi.hssf.HSSFTestDataSamples;
+import org.apache.poi.hssf.HSSFITestDataProvider;
+import org.apache.poi.ss.usermodel.BaseTestPicture;
/**
* Test <code>HSSFPicture</code>.
*
* @author Yegor Kozlov (yegor at apache.org)
*/
-public final class TestHSSFPicture extends TestCase{
+public final class TestHSSFPicture extends BaseTestPicture {
- public void testResize() {
- HSSFWorkbook wb = new HSSFWorkbook();
- HSSFSheet sh1 = wb.createSheet();
- HSSFPatriarch p1 = sh1.createDrawingPatriarch();
-
- byte[] pictureData = HSSFTestDataSamples.getTestDataFileContent("logoKarmokar4.png");
- int idx1 = wb.addPicture( pictureData, HSSFWorkbook.PICTURE_TYPE_PNG );
- HSSFPicture picture1 = p1.createPicture(new HSSFClientAnchor(), idx1);
- HSSFClientAnchor anchor1 = picture1.getPreferredSize();
+ @Override
+ protected HSSFITestDataProvider getTestDataProvider(){
+ return HSSFITestDataProvider.getInstance();
+ }
- //assert against what would BiffViewer print if we insert the image in xls and dump the file
- assertEquals(0, anchor1.getCol1());
- assertEquals(0, anchor1.getRow1());
- assertEquals(1, anchor1.getCol2());
- assertEquals(9, anchor1.getRow2());
- assertEquals(0, anchor1.getDx1());
- assertEquals(0, anchor1.getDy1());
- assertEquals(848, anchor1.getDx2());
- assertEquals(240, anchor1.getDy2());
+ public void testResize() {
+ baseTestResize(new HSSFClientAnchor(0, 0, 848, 240, (short)0, 0, (short)1, 9));
}
/**
diff --git a/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFWorkbook.java b/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFWorkbook.java index 880f3ecf24..484ff70e18 100644 --- a/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFWorkbook.java +++ b/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFWorkbook.java @@ -59,23 +59,6 @@ public final class TestHSSFWorkbook extends BaseTestWorkbook { assertEquals(3, nameRecord.getSheetNumber()); } - public void testCaseInsensitiveNames() { - HSSFWorkbook b = new HSSFWorkbook( ); - HSSFSheet originalSheet = b.createSheet("Sheet1"); - HSSFSheet fetchedSheet = b.getSheet("sheet1"); - if(fetchedSheet == null) { - throw new AssertionFailedError("Identified bug 44892"); - } - assertEquals(originalSheet, fetchedSheet); - try { - b.createSheet("sHeeT1"); - fail("should have thrown exceptiuon due to duplicate sheet name"); - } catch (IllegalArgumentException e) { - // expected during successful test - assertEquals("The workbook already contains a sheet of this name", e.getMessage()); - } - } - public void testWindowOneDefaults() { HSSFWorkbook b = new HSSFWorkbook( ); try { @@ -154,7 +137,7 @@ public final class TestHSSFWorkbook extends BaseTestWorkbook { // So, start again b = getTestDataProvider().openSampleWorkbook("44010-SingleChart.xls"); - b = writeRead(b); + b = getTestDataProvider().writeOutAndReadBack(b); assertEquals(2, b.getNumberOfSheets()); s = b.getSheetAt(1); assertEquals(0, s.getFirstRowNum()); @@ -184,7 +167,7 @@ public final class TestHSSFWorkbook extends BaseTestWorkbook { // So, start again b = getTestDataProvider().openSampleWorkbook("44010-TwoCharts.xls"); - b = writeRead(b); + b = getTestDataProvider().writeOutAndReadBack(b); assertEquals(3, b.getNumberOfSheets()); s = b.getSheetAt(1); @@ -195,11 +178,6 @@ public final class TestHSSFWorkbook extends BaseTestWorkbook { assertEquals(8, s.getLastRowNum()); } - private static HSSFWorkbook writeRead(HSSFWorkbook b) { - return HSSFTestDataSamples.writeOutAndReadBack(b); - } - - public void testSelectedSheet_bug44523() { HSSFWorkbook wb=new HSSFWorkbook(); HSSFSheet sheet1 = wb.createSheet("Sheet1"); diff --git a/src/testcases/org/apache/poi/hssf/usermodel/TestNamedRange.java b/src/testcases/org/apache/poi/hssf/usermodel/TestNamedRange.java deleted file mode 100644 index ecb6d7a62b..0000000000 --- a/src/testcases/org/apache/poi/hssf/usermodel/TestNamedRange.java +++ /dev/null @@ -1,603 +0,0 @@ -/* ==================================================================== - 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.hssf.usermodel; - -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; - -import junit.framework.TestCase; - -import org.apache.poi.hssf.HSSFTestDataSamples; -import org.apache.poi.hssf.model.HSSFFormulaParser; -import org.apache.poi.hssf.record.formula.Ptg; -import org.apache.poi.ss.util.AreaReference; -import org.apache.poi.ss.util.CellReference; -import org.apache.poi.ss.formula.FormulaType; - -/** - * - * @author ROMANL - * @author Andrew C. Oliver (acoliver at apache dot org) - * @author Danny Mui (danny at muibros.com) - * @author Amol S. Deshmukh < amol at ap ache dot org > - */ -public final class TestNamedRange extends TestCase { - - private static HSSFWorkbook openSample(String sampleFileName) { - return HSSFTestDataSamples.openSampleWorkbook(sampleFileName); - } - - /** Test of TestCase method, of class test.RangeTest. */ - public void testNamedRange() { - HSSFWorkbook wb = openSample("Simple.xls"); - - //Creating new Named Range - HSSFName newNamedRange = wb.createName(); - - //Getting Sheet Name for the reference - String sheetName = wb.getSheetName(0); - - //Setting its name - newNamedRange.setNameName("RangeTest"); - //Setting its reference - newNamedRange.setRefersToFormula(sheetName + "!$D$4:$E$8"); - - //Getting NAmed Range - HSSFName namedRange1 = wb.getNameAt(0); - //Getting it sheet name - sheetName = namedRange1.getSheetName(); - - // sanity check - SanityChecker c = new SanityChecker(); - c.checkHSSFWorkbook(wb); - - wb = HSSFTestDataSamples.writeOutAndReadBack(wb); - HSSFName nm =wb.getNameAt(wb.getNameIndex("RangeTest")); - assertTrue("Name is "+nm.getNameName(),"RangeTest".equals(nm.getNameName())); - assertEquals(wb.getSheetName(0)+"!$D$4:$E$8", nm.getRefersToFormula()); - } - - /** - * Reads an excel file already containing a named range. - * <p> - * Addresses Bug <a href="http://issues.apache.org/bugzilla/show_bug.cgi?id=9632" target="_bug">#9632</a> - */ - public void testNamedRead() { - HSSFWorkbook wb = openSample("namedinput.xls"); - - //Get index of the namedrange with the name = "NamedRangeName" , which was defined in input.xls as A1:D10 - int NamedRangeIndex = wb.getNameIndex("NamedRangeName"); - - //Getting NAmed Range - HSSFName namedRange1 = wb.getNameAt(NamedRangeIndex); - String sheetName = wb.getSheetName(0); - - //Getting its reference - String reference = namedRange1.getRefersToFormula(); - - assertEquals(sheetName+"!$A$1:$D$10", reference); - - HSSFName namedRange2 = wb.getNameAt(1); - - assertEquals(sheetName+"!$D$17:$G$27", namedRange2.getRefersToFormula()); - assertEquals("SecondNamedRange", namedRange2.getNameName()); - } - - /** - * Reads an excel file already containing a named range and updates it - * <p> - * Addresses Bug <a href="http://issues.apache.org/bugzilla/show_bug.cgi?id=16411" target="_bug">#16411</a> - */ - public void testNamedReadModify() { - HSSFWorkbook wb = openSample("namedinput.xls"); - - HSSFName name = wb.getNameAt(0); - String sheetName = wb.getSheetName(0); - - assertEquals(sheetName+"!$A$1:$D$10", name.getRefersToFormula()); - - name = wb.getNameAt(1); - String newReference = sheetName +"!$A$1:$C$36"; - - name.setRefersToFormula(newReference); - assertEquals(newReference, name.getRefersToFormula()); - } - - /** - * Test that multiple named ranges can be added written and read - */ - public void testMultipleNamedWrite() { - HSSFWorkbook wb = new HSSFWorkbook(); - - - wb.createSheet("testSheet1"); - String sheetName = wb.getSheetName(0); - - assertEquals("testSheet1", sheetName); - - //Creating new Named Range - HSSFName newNamedRange = wb.createName(); - - newNamedRange.setNameName("RangeTest"); - newNamedRange.setRefersToFormula(sheetName + "!$D$4:$E$8"); - - //Creating another new Named Range - HSSFName newNamedRange2 = wb.createName(); - - newNamedRange2.setNameName("AnotherTest"); - newNamedRange2.setRefersToFormula(sheetName + "!$F$1:$G$6"); - - wb.getNameAt(0); - - wb = HSSFTestDataSamples.writeOutAndReadBack(wb); - HSSFName nm =wb.getNameAt(wb.getNameIndex("RangeTest")); - assertTrue("Name is "+nm.getNameName(),"RangeTest".equals(nm.getNameName())); - assertTrue("Reference is "+nm.getRefersToFormula(),(wb.getSheetName(0)+"!$D$4:$E$8").equals(nm.getRefersToFormula())); - - nm = wb.getNameAt(wb.getNameIndex("AnotherTest")); - assertTrue("Name is "+nm.getNameName(),"AnotherTest".equals(nm.getNameName())); - assertTrue("Reference is "+nm.getRefersToFormula(),newNamedRange2.getRefersToFormula().equals(nm.getRefersToFormula())); - } - - /** - * Test case provided by czhang@cambian.com (Chun Zhang) - * <p> - * Addresses Bug <a href="http://issues.apache.org/bugzilla/show_bug.cgi?id=13775" target="_bug">#13775</a> - */ - public void testMultiNamedRange() { - - // Create a new workbook - HSSFWorkbook wb = new HSSFWorkbook (); - - - // Create a worksheet 'sheet1' in the new workbook - wb.createSheet (); - wb.setSheetName (0, "sheet1"); - - // Create another worksheet 'sheet2' in the new workbook - wb.createSheet (); - wb.setSheetName (1, "sheet2"); - - // Create a new named range for worksheet 'sheet1' - HSSFName namedRange1 = wb.createName(); - - // Set the name for the named range for worksheet 'sheet1' - namedRange1.setNameName("RangeTest1"); - - // Set the reference for the named range for worksheet 'sheet1' - namedRange1.setRefersToFormula("sheet1" + "!$A$1:$L$41"); - - // Create a new named range for worksheet 'sheet2' - HSSFName namedRange2 = wb.createName(); - - // Set the name for the named range for worksheet 'sheet2' - namedRange2.setNameName("RangeTest2"); - - // Set the reference for the named range for worksheet 'sheet2' - namedRange2.setRefersToFormula("sheet2" + "!$A$1:$O$21"); - - // Write the workbook to a file - // Read the Excel file and verify its content - wb = HSSFTestDataSamples.writeOutAndReadBack(wb); - HSSFName nm1 =wb.getNameAt(wb.getNameIndex("RangeTest1")); - assertTrue("Name is "+nm1.getNameName(),"RangeTest1".equals(nm1.getNameName())); - assertTrue("Reference is "+nm1.getRefersToFormula(),(wb.getSheetName(0)+"!$A$1:$L$41").equals(nm1.getRefersToFormula())); - - HSSFName nm2 =wb.getNameAt(wb.getNameIndex("RangeTest2")); - assertTrue("Name is "+nm2.getNameName(),"RangeTest2".equals(nm2.getNameName())); - assertTrue("Reference is "+nm2.getRefersToFormula(),(wb.getSheetName(1)+"!$A$1:$O$21").equals(nm2.getRefersToFormula())); - } - - public void testUnicodeNamedRange() { - HSSFWorkbook workBook = new HSSFWorkbook(); - workBook.createSheet("Test"); - HSSFName name = workBook.createName(); - name.setNameName("\u03B1"); - name.setRefersToFormula("Test!$D$3:$E$8"); - - - HSSFWorkbook workBook2 = HSSFTestDataSamples.writeOutAndReadBack(workBook); - HSSFName name2 = workBook2.getNameAt(0); - - assertEquals("\u03B1", name2.getNameName()); - assertEquals("Test!$D$3:$E$8", name2.getRefersToFormula()); - } - - /** - * Test to see if the print areas can be retrieved/created in memory - */ - public void testSinglePrintArea() { - HSSFWorkbook workbook = new HSSFWorkbook(); - workbook.createSheet("Test Print Area"); - String sheetName = workbook.getSheetName(0); - - String reference = "$A$1:$B$1"; - workbook.setPrintArea(0, reference); - - String retrievedPrintArea = workbook.getPrintArea(0); - - assertNotNull("Print Area not defined for first sheet", retrievedPrintArea); - assertEquals("'" + sheetName + "'!$A$1:$B$1", retrievedPrintArea); - } - - /** - * For Convenience, don't force sheet names to be used - */ - public void testSinglePrintAreaWOSheet() - { - HSSFWorkbook workbook = new HSSFWorkbook(); - workbook.createSheet("Test Print Area"); - String sheetName = workbook.getSheetName(0); - - String reference = "$A$1:$B$1"; - workbook.setPrintArea(0, reference); - - String retrievedPrintArea = workbook.getPrintArea(0); - - assertNotNull("Print Area not defined for first sheet", retrievedPrintArea); - assertEquals("'" + sheetName + "'!" + reference, retrievedPrintArea); - } - - /** - * Test to see if the print area can be retrieved from an excel created file - */ - public void testPrintAreaFileRead() { - HSSFWorkbook workbook = openSample("SimpleWithPrintArea.xls"); - - String sheetName = workbook.getSheetName(0); - String reference = sheetName+"!$A$1:$C$5"; - - assertEquals(reference, workbook.getPrintArea(0)); - } - - /** - * Test to see if the print area made it to the file - */ - public void testPrintAreaFile() { - HSSFWorkbook workbook = new HSSFWorkbook(); - workbook.createSheet("Test Print Area"); - String sheetName = workbook.getSheetName(0); - - - String reference = "$A$1:$B$1"; - workbook.setPrintArea(0, reference); - - workbook = HSSFTestDataSamples.writeOutAndReadBack(workbook); - - String retrievedPrintArea = workbook.getPrintArea(0); - assertNotNull("Print Area not defined for first sheet", retrievedPrintArea); - assertEquals("References Match", "'" + sheetName + "'!$A$1:$B$1", retrievedPrintArea); - } - - /** - * Test to see if multiple print areas made it to the file - */ - public void testMultiplePrintAreaFile() { - HSSFWorkbook workbook = new HSSFWorkbook(); - - workbook.createSheet("Sheet1"); - workbook.createSheet("Sheet2"); - workbook.createSheet("Sheet3"); - String reference1 = "$A$1:$B$1"; - String reference2 = "$B$2:$D$5"; - String reference3 = "$D$2:$F$5"; - - workbook.setPrintArea(0, reference1); - workbook.setPrintArea(1, reference2); - workbook.setPrintArea(2, reference3); - - //Check created print areas - String retrievedPrintArea; - - retrievedPrintArea = workbook.getPrintArea(0); - assertNotNull("Print Area Not Found (Sheet 1)", retrievedPrintArea); - assertEquals("Sheet1!" + reference1, retrievedPrintArea); - - retrievedPrintArea = workbook.getPrintArea(1); - assertNotNull("Print Area Not Found (Sheet 2)", retrievedPrintArea); - assertEquals("Sheet2!" + reference2, retrievedPrintArea); - - retrievedPrintArea = workbook.getPrintArea(2); - assertNotNull("Print Area Not Found (Sheet 3)", retrievedPrintArea); - assertEquals("Sheet3!" + reference3, retrievedPrintArea); - - // Check print areas after re-reading workbook - workbook = HSSFTestDataSamples.writeOutAndReadBack(workbook); - - retrievedPrintArea = workbook.getPrintArea(0); - assertNotNull("Print Area Not Found (Sheet 1)", retrievedPrintArea); - assertEquals("Sheet1!" + reference1, retrievedPrintArea); - - retrievedPrintArea = workbook.getPrintArea(1); - assertNotNull("Print Area Not Found (Sheet 2)", retrievedPrintArea); - assertEquals("Sheet2!" + reference2, retrievedPrintArea); - - retrievedPrintArea = workbook.getPrintArea(2); - assertNotNull("Print Area Not Found (Sheet 3)", retrievedPrintArea); - assertEquals("Sheet3!" + reference3, retrievedPrintArea); - } - - /** - * Tests the setting of print areas with coordinates (Row/Column designations) - * - */ - public void testPrintAreaCoords(){ - HSSFWorkbook workbook = new HSSFWorkbook(); - workbook.createSheet("Test Print Area"); - String sheetName = workbook.getSheetName(0); - - workbook.setPrintArea(0, 0, 1, 0, 0); - - String retrievedPrintArea = workbook.getPrintArea(0); - - assertNotNull("Print Area not defined for first sheet", retrievedPrintArea); - assertEquals("'" + sheetName + "'!$A$1:$B$1", retrievedPrintArea); - } - - - /** - * Tests the parsing of union area expressions, and re-display in the presence of sheet names - * with special characters. - */ - public void testPrintAreaUnion(){ - HSSFWorkbook workbook = new HSSFWorkbook(); - workbook.createSheet("Test Print Area"); - - String reference = "$A$1:$B$1,$D$1:$F$2"; - workbook.setPrintArea(0, reference); - String retrievedPrintArea = workbook.getPrintArea(0); - assertNotNull("Print Area not defined for first sheet", retrievedPrintArea); - assertEquals("'Test Print Area'!$A$1:$B$1,'Test Print Area'!$D$1:$F$2", retrievedPrintArea); - } - - /** - * Verifies an existing print area is deleted - * - */ - public void testPrintAreaRemove() { - HSSFWorkbook workbook = new HSSFWorkbook(); - workbook.createSheet("Test Print Area"); - workbook.getSheetName(0); - - workbook.setPrintArea(0, 0, 1, 0, 0); - - String retrievedPrintArea = workbook.getPrintArea(0); - - assertNotNull("Print Area not defined for first sheet", retrievedPrintArea); - - workbook.removePrintArea(0); - assertNull("PrintArea was not removed", workbook.getPrintArea(0)); - } - - /** - * Verifies correct functioning for "single cell named range" (aka "named cell") - */ - public void testNamedCell_1() { - - // setup for this testcase - String sheetName = "Test Named Cell"; - String cellName = "A name for a named cell"; - String cellValue = "TEST Value"; - HSSFWorkbook wb = new HSSFWorkbook(); - HSSFSheet sheet = wb.createSheet(sheetName); - sheet.createRow(0).createCell(0).setCellValue(new HSSFRichTextString(cellValue)); - - // create named range for a single cell using areareference - HSSFName namedCell = wb.createName(); - namedCell.setNameName(cellName); - String reference = "'" + sheetName + "'" + "!A1:A1"; - namedCell.setRefersToFormula(reference); - - // retrieve the newly created named range - int namedCellIdx = wb.getNameIndex(cellName); - HSSFName aNamedCell = wb.getNameAt(namedCellIdx); - assertNotNull(aNamedCell); - - // retrieve the cell at the named range and test its contents - AreaReference aref = new AreaReference(aNamedCell.getRefersToFormula()); - assertTrue("Should be exactly 1 cell in the named cell :'" +cellName+"'", aref.isSingleCell()); - - CellReference cref = aref.getFirstCell(); - assertNotNull(cref); - HSSFSheet s = wb.getSheet(cref.getSheetName()); - assertNotNull(s); - HSSFRow r = sheet.getRow(cref.getRow()); - HSSFCell c = r.getCell(cref.getCol()); - String contents = c.getRichStringCellValue().getString(); - assertEquals("Contents of cell retrieved by its named reference", contents, cellValue); - } - - /** - * Verifies correct functioning for "single cell named range" (aka "named cell") - */ - public void testNamedCell_2() { - - // setup for this testcase - String sname = "TestSheet", cname = "TestName", cvalue = "TestVal"; - HSSFWorkbook wb = new HSSFWorkbook(); - HSSFSheet sheet = wb.createSheet(sname); - sheet.createRow(0).createCell(0).setCellValue(new HSSFRichTextString(cvalue)); - - // create named range for a single cell using cellreference - HSSFName namedCell = wb.createName(); - namedCell.setNameName(cname); - String reference = sname+"!A1"; - namedCell.setRefersToFormula(reference); - - // retrieve the newly created named range - int namedCellIdx = wb.getNameIndex(cname); - HSSFName aNamedCell = wb.getNameAt(namedCellIdx); - assertNotNull(aNamedCell); - - // retrieve the cell at the named range and test its contents - CellReference cref = new CellReference(aNamedCell.getRefersToFormula()); - assertNotNull(cref); - HSSFSheet s = wb.getSheet(cref.getSheetName()); - HSSFRow r = sheet.getRow(cref.getRow()); - HSSFCell c = r.getCell(cref.getCol()); - String contents = c.getRichStringCellValue().getString(); - assertEquals("Contents of cell retrieved by its named reference", contents, cvalue); - } - - public void testDeletedReference() throws Exception { - HSSFWorkbook wb = HSSFTestDataSamples.openSampleWorkbook("24207.xls"); - assertEquals(2, wb.getNumberOfNames()); - - HSSFName name1 = wb.getNameAt(0); - assertEquals("a", name1.getNameName()); - assertEquals("Sheet1!$A$1", name1.getRefersToFormula()); - new AreaReference(name1.getRefersToFormula()); - assertTrue("Successfully constructed first reference", true); - - HSSFName name2 = wb.getNameAt(1); - assertEquals("b", name2.getNameName()); - assertEquals("Sheet1!#REF!", name2.getRefersToFormula()); - assertTrue(name2.isDeleted()); - try { - new AreaReference(name2.getRefersToFormula()); - fail("attempt to supply an invalid reference to AreaReference constructor results in exception"); - } catch (StringIndexOutOfBoundsException e) { // TODO - use a different exception for this condition - // expected during successful test - } - } - - public void testRepeatingRowsAndColumsNames() { - // First test that setting RR&C for same sheet more than once only creates a - // single Print_Titles built-in record - HSSFWorkbook wb = new HSSFWorkbook(); - HSSFSheet sheet = wb.createSheet("FirstSheet"); - - // set repeating rows and columns twice for the first sheet - for (int i = 0; i < 2; i++) { - wb.setRepeatingRowsAndColumns(0, 0, 0, 0, 3-1); - sheet.createFreezePane(0, 3); - } - assertEquals(1, wb.getNumberOfNames()); - HSSFName nr1 = wb.getNameAt(0); - - assertEquals("Print_Titles", nr1.getNameName()); - if (false) { - // TODO - full column references not rendering properly, absolute markers not present either - assertEquals("FirstSheet!$A:$A,FirstSheet!$1:$3", nr1.getRefersToFormula()); - } else { - assertEquals("FirstSheet!A:A,FirstSheet!$A$1:$IV$3", nr1.getRefersToFormula()); - } - - // Save and re-open - HSSFWorkbook nwb = HSSFTestDataSamples.writeOutAndReadBack(wb); - - assertEquals(1, nwb.getNumberOfNames()); - nr1 = nwb.getNameAt(0); - - assertEquals("Print_Titles", nr1.getNameName()); - assertEquals("FirstSheet!A:A,FirstSheet!$A$1:$IV$3", nr1.getRefersToFormula()); - - // check that setting RR&C on a second sheet causes a new Print_Titles built-in - // name to be created - sheet = nwb.createSheet("SecondSheet"); - nwb.setRepeatingRowsAndColumns(1, 1, 2, 0, 0); - - assertEquals(2, nwb.getNumberOfNames()); - HSSFName nr2 = nwb.getNameAt(1); - - assertEquals("Print_Titles", nr2.getNameName()); - assertEquals("SecondSheet!B:C,SecondSheet!$A$1:$IV$1", nr2.getRefersToFormula()); - - if (false) { - // In case you fancy checking in excel, to ensure it - // won't complain about the file now - try { - File tempFile = File.createTempFile("POI-45126-", ".xls"); - FileOutputStream fout = new FileOutputStream(tempFile); - nwb.write(fout); - fout.close(); - System.out.println("check out " + tempFile.getAbsolutePath()); - } catch (IOException e) { - throw new RuntimeException(e); - } - } - } - - /** - * When setting A1 type of referencese HSSFName.setRefersToFormula - * must set the type of operands to Ptg.CLASS_REF, - * otherwise created named don't appear in the dropdown to the left opf formula bar in Excel - */ - public void testTypeOfRootPtg(){ - HSSFWorkbook wb = new HSSFWorkbook(); - wb.createSheet("CSCO"); - - Ptg[] ptgs = HSSFFormulaParser.parse("CSCO!$E$71", wb, FormulaType.NAMEDRANGE, 0); - for (int i = 0; i < ptgs.length; i++) { - assertEquals('R', ptgs[i].getRVAType()); - } - - } - - public void testScope() { - HSSFWorkbook wb = new HSSFWorkbook(); - HSSFSheet sh1 = wb.createSheet(); - HSSFSheet sh2 = wb.createSheet(); - - HSSFName name; - - name = wb.createName(); - name.setNameName("aaa"); - name = wb.createName(); - try { - name.setNameName("aaa"); - fail("Expected exception"); - } catch(Exception e){ - assertEquals("The workbook already contains this name: aaa", e.getMessage()); - name.setNameName("aaa-2"); - } - - name = wb.createName(); - name.setSheetIndex(0); - name.setNameName("aaa"); - name = wb.createName(); - name.setSheetIndex(0); - try { - name.setNameName("aaa"); - fail("Expected exception"); - } catch(Exception e){ - assertEquals("The sheet already contains this name: aaa", e.getMessage()); - name.setNameName("aaa-2"); - } - - name = wb.createName(); - name.setSheetIndex(1); - name.setNameName("aaa"); - name = wb.createName(); - name.setSheetIndex(1); - try { - name.setNameName("aaa"); - fail("Expected exception"); - } catch(Exception e){ - assertEquals("The sheet already contains this name: aaa", e.getMessage()); - name.setNameName("aaa-2"); - } - - int cnt = 0; - for (int i = 0; i < wb.getNumberOfNames(); i++) { - if("aaa".equals(wb.getNameName(i))) cnt++; - } - assertEquals(3, cnt); - } -} diff --git a/src/testcases/org/apache/poi/hssf/usermodel/TestUnicodeWorkbook.java b/src/testcases/org/apache/poi/hssf/usermodel/TestUnicodeWorkbook.java index 2a92152857..a90aa29080 100644 --- a/src/testcases/org/apache/poi/hssf/usermodel/TestUnicodeWorkbook.java +++ b/src/testcases/org/apache/poi/hssf/usermodel/TestUnicodeWorkbook.java @@ -16,132 +16,39 @@ */ package org.apache.poi.hssf.usermodel; -import java.io.File; -import java.io.FileOutputStream; -import java.io.FileInputStream; - -import org.apache.poi.util.TempFile; - import junit.framework.TestCase; +import org.apache.poi.hssf.HSSFTestDataSamples; public class TestUnicodeWorkbook extends TestCase { - public TestUnicodeWorkbook(String s) { - super(s); - } - - /** Tests that all of the unicode capable string fields can be set, written and then read back - * - * - */ - public void testUnicodeInAll() throws Exception { - HSSFWorkbook wb = new HSSFWorkbook(); - //Create a unicode dataformat (contains euro symbol) - HSSFDataFormat df = wb.createDataFormat(); - final String formatStr = "_([$\u20ac-2]\\\\\\ * #,##0.00_);_([$\u20ac-2]\\\\\\ * \\\\\\(#,##0.00\\\\\\);_([$\u20ac-2]\\\\\\ *\\\"\\-\\\\\"??_);_(@_)"; - short fmt = df.getFormat(formatStr); - - //Create a unicode sheet name (euro symbol) - HSSFSheet s = wb.createSheet("\u20ac"); - - //Set a unicode header (you guessed it the euro symbol) - HSSFHeader h = s.getHeader(); - h.setCenter("\u20ac"); - h.setLeft("\u20ac"); - h.setRight("\u20ac"); - - //Set a unicode footer - HSSFFooter f = s.getFooter(); - f.setCenter("\u20ac"); - f.setLeft("\u20ac"); - f.setRight("\u20ac"); - - HSSFRow r = s.createRow(0); - HSSFCell c = r.createCell(1); - c.setCellValue(12.34); - c.getCellStyle().setDataFormat(fmt); - - HSSFCell c2 = r.createCell(2); - c.setCellValue(new HSSFRichTextString("\u20ac")); - - HSSFCell c3 = r.createCell(3); - String formulaString = "TEXT(12.34,\"\u20ac###,##\")"; - c3.setCellFormula(formulaString); - - - File tempFile = TempFile.createTempFile("unicode", "test.xls"); - FileOutputStream stream = new FileOutputStream(tempFile); - wb.write(stream); - - wb = null; - FileInputStream in = new FileInputStream(tempFile); - wb = new HSSFWorkbook(in); - - //Test the sheetname - s = wb.getSheet("\u20ac"); - assertNotNull(s); - - //Test the header - h = s.getHeader(); - assertEquals(h.getCenter(), "\u20ac"); - assertEquals(h.getLeft(), "\u20ac"); - assertEquals(h.getRight(), "\u20ac"); - - //Test the footer - f = s.getFooter(); - assertEquals(f.getCenter(), "\u20ac"); - assertEquals(f.getLeft(), "\u20ac"); - assertEquals(f.getRight(), "\u20ac"); - - //Test the dataformat - r = s.getRow(0); - c = r.getCell(1); - df = wb.createDataFormat(); - assertEquals(formatStr, df.getFormat(c.getCellStyle().getDataFormat())); - - //Test the cell string value - c2 = r.getCell(2); - assertEquals(c.getRichStringCellValue().getString(), "\u20ac"); - - //Test the cell formula - c3 = r.getCell(3); - assertEquals(c3.getCellFormula(), formulaString); - } - /** Tests Bug38230 * That a Umlat is written and then read back. * It should have been written as a compressed unicode. - * - * + * + * * */ public void testUmlatReadWrite() throws Exception { HSSFWorkbook wb = new HSSFWorkbook(); - + //Create a unicode sheet name (euro symbol) HSSFSheet s = wb.createSheet("test"); - + HSSFRow r = s.createRow(0); HSSFCell c = r.createCell(1); c.setCellValue(new HSSFRichTextString("\u00e4")); - + //Confirm that the sring will be compressed assertEquals(c.getRichStringCellValue().getUnicodeString().getOptionFlags(), 0); - - File tempFile = TempFile.createTempFile("umlat", "test.xls"); - FileOutputStream stream = new FileOutputStream(tempFile); - wb.write(stream); - - wb = null; - FileInputStream in = new FileInputStream(tempFile); - wb = new HSSFWorkbook(in); + + wb = HSSFTestDataSamples.writeOutAndReadBack(wb); //Test the sheetname s = wb.getSheet("test"); assertNotNull(s); - + c = r.getCell(1); assertEquals(c.getRichStringCellValue().getString(), "\u00e4"); - } + } } |