diff --git a/src/testcases/org/apache/poi/hssf/util/TestCellReference.java b/src/testcases/org/apache/poi/hssf/util/TestCellReference.java index d05c250d7..9e48fc385 100644 --- a/src/testcases/org/apache/poi/hssf/util/TestCellReference.java +++ b/src/testcases/org/apache/poi/hssf/util/TestCellReference.java @@ -23,6 +23,10 @@ import org.apache.poi.ss.util.CellReference; import org.apache.poi.ss.util.CellReference.NameType; import org.apache.poi.ss.SpreadsheetVersion; +/** + * Tests for the HSSF and SS versions of CellReference. + * See also {@link org.apache.poi.ss.util.TestCellReference} + */ public final class TestCellReference extends TestCase { public void testColNumConversion() { assertEquals(0, CellReference.convertColStringToIndex("A")); diff --git a/src/testcases/org/apache/poi/ss/util/TestCellReference.java b/src/testcases/org/apache/poi/ss/util/TestCellReference.java index a106e76e7..0e5615332 100644 --- a/src/testcases/org/apache/poi/ss/util/TestCellReference.java +++ b/src/testcases/org/apache/poi/ss/util/TestCellReference.java @@ -23,274 +23,273 @@ import org.apache.poi.ss.util.CellReference; import junit.framework.AssertionFailedError; import junit.framework.TestCase; - /** * Tests that the common CellReference works as we need it to. * Note - some additional testing is also done in the HSSF class, * {@link org.apache.poi.hssf.util.TestCellReference} */ public final class TestCellReference extends TestCase { - public void testConstructors() { - CellReference cellReference; - final String sheet = "Sheet1"; - final String cellRef = "A1"; - final int row = 0; - final int col = 0; - final boolean absRow = true; - final boolean absCol = false; - - cellReference = new CellReference(row, col); - assertEquals("A1", cellReference.formatAsString()); - - cellReference = new CellReference(row, col, absRow, absCol); - assertEquals("A$1", cellReference.formatAsString()); - - cellReference = new CellReference(row, (short)col); - assertEquals("A1", cellReference.formatAsString()); - - cellReference = new CellReference(cellRef); - assertEquals("A1", cellReference.formatAsString()); - - cellReference = new CellReference(sheet, row, col, absRow, absCol); - assertEquals("Sheet1!A$1", cellReference.formatAsString()); - } - - public void testFormatAsString() { - CellReference cellReference; - - cellReference = new CellReference(null, 0, 0, false, false); - assertEquals("A1", cellReference.formatAsString()); - - //absolute references - cellReference = new CellReference(null, 0, 0, true, false); - assertEquals("A$1", cellReference.formatAsString()); - - //sheet name with no spaces - cellReference = new CellReference("Sheet1", 0, 0, true, false); - assertEquals("Sheet1!A$1", cellReference.formatAsString()); - - //sheet name with spaces - cellReference = new CellReference("Sheet 1", 0, 0, true, false); - assertEquals("'Sheet 1'!A$1", cellReference.formatAsString()); - } - - public void testGetCellRefParts() { - CellReference cellReference; - String[] parts; - - String cellRef = "A1"; - cellReference = new CellReference(cellRef); - assertEquals(0, cellReference.getCol()); - parts = cellReference.getCellRefParts(); - assertNotNull(parts); - assertEquals(null, parts[0]); - assertEquals("1", parts[1]); - assertEquals("A", parts[2]); + public void testConstructors() { + CellReference cellReference; + final String sheet = "Sheet1"; + final String cellRef = "A1"; + final int row = 0; + final int col = 0; + final boolean absRow = true; + final boolean absCol = false; - cellRef = "AA1"; - cellReference = new CellReference(cellRef); - assertEquals(26, cellReference.getCol()); - parts = cellReference.getCellRefParts(); - assertNotNull(parts); - assertEquals(null, parts[0]); - assertEquals("1", parts[1]); - assertEquals("AA", parts[2]); + cellReference = new CellReference(row, col); + assertEquals("A1", cellReference.formatAsString()); - cellRef = "AA100"; - cellReference = new CellReference(cellRef); - assertEquals(26, cellReference.getCol()); - parts = cellReference.getCellRefParts(); - assertNotNull(parts); - assertEquals(null, parts[0]); - assertEquals("100", parts[1]); - assertEquals("AA", parts[2]); + cellReference = new CellReference(row, col, absRow, absCol); + assertEquals("A$1", cellReference.formatAsString()); - cellRef = "AAA300"; - cellReference = new CellReference(cellRef); - assertEquals(702, cellReference.getCol()); - parts = cellReference.getCellRefParts(); - assertNotNull(parts); - assertEquals(null, parts[0]); - assertEquals("300", parts[1]); - assertEquals("AAA", parts[2]); + cellReference = new CellReference(row, (short)col); + assertEquals("A1", cellReference.formatAsString()); - cellRef = "ZZ100521"; - cellReference = new CellReference(cellRef); - assertEquals(26*26+25, cellReference.getCol()); - parts = cellReference.getCellRefParts(); - assertNotNull(parts); - assertEquals(null, parts[0]); - assertEquals("100521", parts[1]); - assertEquals("ZZ", parts[2]); + cellReference = new CellReference(cellRef); + assertEquals("A1", cellReference.formatAsString()); - cellRef = "ZYX987"; - cellReference = new CellReference(cellRef); - assertEquals(26*26*26 + 25*26 + 24 - 1, cellReference.getCol()); - parts = cellReference.getCellRefParts(); - assertNotNull(parts); - assertEquals(null, parts[0]); - assertEquals("987", parts[1]); - assertEquals("ZYX", parts[2]); - - cellRef = "AABC10065"; - cellReference = new CellReference(cellRef); - parts = cellReference.getCellRefParts(); - assertNotNull(parts); - assertEquals(null, parts[0]); - assertEquals("10065", parts[1]); - assertEquals("AABC", parts[2]); - } - - public void testGetColNumFromRef() { - String cellRef = "A1"; - CellReference cellReference = new CellReference(cellRef); - assertEquals(0, cellReference.getCol()); - - cellRef = "AA1"; - cellReference = new CellReference(cellRef); - assertEquals(26, cellReference.getCol()); - - cellRef = "AB1"; - cellReference = new CellReference(cellRef); - assertEquals(27, cellReference.getCol()); - - cellRef = "BA1"; - cellReference = new CellReference(cellRef); - assertEquals(26+26, cellReference.getCol()); - - cellRef = "CA1"; - cellReference = new CellReference(cellRef); - assertEquals(26+26+26, cellReference.getCol()); - - cellRef = "ZA1"; - cellReference = new CellReference(cellRef); - assertEquals(26*26, cellReference.getCol()); - - cellRef = "ZZ1"; - cellReference = new CellReference(cellRef); - assertEquals(26*26+25, cellReference.getCol()); - - cellRef = "AAA1"; - cellReference = new CellReference(cellRef); - assertEquals(26*26+26, cellReference.getCol()); - - - cellRef = "A1100"; - cellReference = new CellReference(cellRef); - assertEquals(0, cellReference.getCol()); - - cellRef = "BC15"; - cellReference = new CellReference(cellRef); - assertEquals(54, cellReference.getCol()); - } - - public void testGetRowNumFromRef() { - String cellRef = "A1"; - CellReference cellReference = new CellReference(cellRef); - assertEquals(0, cellReference.getRow()); - - cellRef = "A12"; - cellReference = new CellReference(cellRef); - assertEquals(11, cellReference.getRow()); - - cellRef = "AS121"; - cellReference = new CellReference(cellRef); - assertEquals(120, cellReference.getRow()); - } - - public void testConvertNumToColString() { - short col = 702; - String collRef = new CellReference(0, col).formatAsString(); - assertEquals("AAA1", collRef); - - short col2 = 0; - String collRef2 = new CellReference(0, col2).formatAsString(); - assertEquals("A1", collRef2); - - short col3 = 27; - String collRef3 = new CellReference(0, col3).formatAsString(); - assertEquals("AB1", collRef3); - - short col4 = 2080; - String collRef4 = new CellReference(0, col4).formatAsString(); - assertEquals("CBA1", collRef4); - } - - public void testBadRowNumber() { - SpreadsheetVersion v97 = SpreadsheetVersion.EXCEL97; - SpreadsheetVersion v2007 = SpreadsheetVersion.EXCEL2007; - - confirmCrInRange(true, "A", "1", v97); - confirmCrInRange(true, "IV", "65536", v97); - confirmCrInRange(false, "IV", "65537", v97); - confirmCrInRange(false, "IW", "65536", v97); - - confirmCrInRange(true, "A", "1", v2007); - confirmCrInRange(true, "XFD", "1048576", v2007); - confirmCrInRange(false, "XFD", "1048577", v2007); - confirmCrInRange(false, "XFE", "1048576", v2007); - - if (CellReference.cellReferenceIsWithinRange("B", "0", v97)) { - throw new AssertionFailedError("Identified bug 47312a"); - } - - confirmCrInRange(false, "A", "0", v97); - confirmCrInRange(false, "A", "0", v2007); - } - - public void testInvalidReference() { - try { - new CellReference("Sheet1!#REF!"); - fail("Shouldn't be able to create a #REF! refence"); - } catch(IllegalArgumentException e) {} - - try { - new CellReference("'MySheetName'!#REF!"); - fail("Shouldn't be able to create a #REF! refence"); - } catch(IllegalArgumentException e) {} - - try { - new CellReference("#REF!"); - fail("Shouldn't be able to create a #REF! refence"); - } catch(IllegalArgumentException e) {} - } - - private static void confirmCrInRange(boolean expResult, String colStr, String rowStr, - SpreadsheetVersion sv) { - if (expResult == CellReference.cellReferenceIsWithinRange(colStr, rowStr, sv)) { - return; - } - throw new AssertionFailedError("expected (c='" + colStr + "', r='" + rowStr + "' to be " - + (expResult ? "within" : "out of") + " bounds for version " + sv.name()); - } - - public void testConvertColStringToIndex() { - assertEquals(0, CellReference.convertColStringToIndex("A")); - assertEquals(1, CellReference.convertColStringToIndex("B")); - assertEquals(14, CellReference.convertColStringToIndex("O")); - assertEquals(701, CellReference.convertColStringToIndex("ZZ")); - assertEquals(18252, CellReference.convertColStringToIndex("ZZA")); - - assertEquals(0, CellReference.convertColStringToIndex("$A")); - assertEquals(1, CellReference.convertColStringToIndex("$B")); - - try { - CellReference.convertColStringToIndex("A$"); - fail("Should throw exception here"); - } catch (IllegalArgumentException e) { - assertTrue(e.getMessage().contains("A$")); - } + cellReference = new CellReference(sheet, row, col, absRow, absCol); + assertEquals("Sheet1!A$1", cellReference.formatAsString()); } - + + public void testFormatAsString() { + CellReference cellReference; + + cellReference = new CellReference(null, 0, 0, false, false); + assertEquals("A1", cellReference.formatAsString()); + + //absolute references + cellReference = new CellReference(null, 0, 0, true, false); + assertEquals("A$1", cellReference.formatAsString()); + + //sheet name with no spaces + cellReference = new CellReference("Sheet1", 0, 0, true, false); + assertEquals("Sheet1!A$1", cellReference.formatAsString()); + + //sheet name with spaces + cellReference = new CellReference("Sheet 1", 0, 0, true, false); + assertEquals("'Sheet 1'!A$1", cellReference.formatAsString()); + } + + public void testGetCellRefParts() { + CellReference cellReference; + String[] parts; + + String cellRef = "A1"; + cellReference = new CellReference(cellRef); + assertEquals(0, cellReference.getCol()); + parts = cellReference.getCellRefParts(); + assertNotNull(parts); + assertEquals(null, parts[0]); + assertEquals("1", parts[1]); + assertEquals("A", parts[2]); + + cellRef = "AA1"; + cellReference = new CellReference(cellRef); + assertEquals(26, cellReference.getCol()); + parts = cellReference.getCellRefParts(); + assertNotNull(parts); + assertEquals(null, parts[0]); + assertEquals("1", parts[1]); + assertEquals("AA", parts[2]); + + cellRef = "AA100"; + cellReference = new CellReference(cellRef); + assertEquals(26, cellReference.getCol()); + parts = cellReference.getCellRefParts(); + assertNotNull(parts); + assertEquals(null, parts[0]); + assertEquals("100", parts[1]); + assertEquals("AA", parts[2]); + + cellRef = "AAA300"; + cellReference = new CellReference(cellRef); + assertEquals(702, cellReference.getCol()); + parts = cellReference.getCellRefParts(); + assertNotNull(parts); + assertEquals(null, parts[0]); + assertEquals("300", parts[1]); + assertEquals("AAA", parts[2]); + + cellRef = "ZZ100521"; + cellReference = new CellReference(cellRef); + assertEquals(26*26+25, cellReference.getCol()); + parts = cellReference.getCellRefParts(); + assertNotNull(parts); + assertEquals(null, parts[0]); + assertEquals("100521", parts[1]); + assertEquals("ZZ", parts[2]); + + cellRef = "ZYX987"; + cellReference = new CellReference(cellRef); + assertEquals(26*26*26 + 25*26 + 24 - 1, cellReference.getCol()); + parts = cellReference.getCellRefParts(); + assertNotNull(parts); + assertEquals(null, parts[0]); + assertEquals("987", parts[1]); + assertEquals("ZYX", parts[2]); + + cellRef = "AABC10065"; + cellReference = new CellReference(cellRef); + parts = cellReference.getCellRefParts(); + assertNotNull(parts); + assertEquals(null, parts[0]); + assertEquals("10065", parts[1]); + assertEquals("AABC", parts[2]); + } + + public void testGetColNumFromRef() { + String cellRef = "A1"; + CellReference cellReference = new CellReference(cellRef); + assertEquals(0, cellReference.getCol()); + + cellRef = "AA1"; + cellReference = new CellReference(cellRef); + assertEquals(26, cellReference.getCol()); + + cellRef = "AB1"; + cellReference = new CellReference(cellRef); + assertEquals(27, cellReference.getCol()); + + cellRef = "BA1"; + cellReference = new CellReference(cellRef); + assertEquals(26+26, cellReference.getCol()); + + cellRef = "CA1"; + cellReference = new CellReference(cellRef); + assertEquals(26+26+26, cellReference.getCol()); + + cellRef = "ZA1"; + cellReference = new CellReference(cellRef); + assertEquals(26*26, cellReference.getCol()); + + cellRef = "ZZ1"; + cellReference = new CellReference(cellRef); + assertEquals(26*26+25, cellReference.getCol()); + + cellRef = "AAA1"; + cellReference = new CellReference(cellRef); + assertEquals(26*26+26, cellReference.getCol()); + + + cellRef = "A1100"; + cellReference = new CellReference(cellRef); + assertEquals(0, cellReference.getCol()); + + cellRef = "BC15"; + cellReference = new CellReference(cellRef); + assertEquals(54, cellReference.getCol()); + } + + public void testGetRowNumFromRef() { + String cellRef = "A1"; + CellReference cellReference = new CellReference(cellRef); + assertEquals(0, cellReference.getRow()); + + cellRef = "A12"; + cellReference = new CellReference(cellRef); + assertEquals(11, cellReference.getRow()); + + cellRef = "AS121"; + cellReference = new CellReference(cellRef); + assertEquals(120, cellReference.getRow()); + } + + public void testConvertNumToColString() { + short col = 702; + String collRef = new CellReference(0, col).formatAsString(); + assertEquals("AAA1", collRef); + + short col2 = 0; + String collRef2 = new CellReference(0, col2).formatAsString(); + assertEquals("A1", collRef2); + + short col3 = 27; + String collRef3 = new CellReference(0, col3).formatAsString(); + assertEquals("AB1", collRef3); + + short col4 = 2080; + String collRef4 = new CellReference(0, col4).formatAsString(); + assertEquals("CBA1", collRef4); + } + + public void testBadRowNumber() { + SpreadsheetVersion v97 = SpreadsheetVersion.EXCEL97; + SpreadsheetVersion v2007 = SpreadsheetVersion.EXCEL2007; + + confirmCrInRange(true, "A", "1", v97); + confirmCrInRange(true, "IV", "65536", v97); + confirmCrInRange(false, "IV", "65537", v97); + confirmCrInRange(false, "IW", "65536", v97); + + confirmCrInRange(true, "A", "1", v2007); + confirmCrInRange(true, "XFD", "1048576", v2007); + confirmCrInRange(false, "XFD", "1048577", v2007); + confirmCrInRange(false, "XFE", "1048576", v2007); + + if (CellReference.cellReferenceIsWithinRange("B", "0", v97)) { + throw new AssertionFailedError("Identified bug 47312a"); + } + + confirmCrInRange(false, "A", "0", v97); + confirmCrInRange(false, "A", "0", v2007); + } + + public void testInvalidReference() { + try { + new CellReference("Sheet1!#REF!"); + fail("Shouldn't be able to create a #REF! refence"); + } catch(IllegalArgumentException e) {} + + try { + new CellReference("'MySheetName'!#REF!"); + fail("Shouldn't be able to create a #REF! refence"); + } catch(IllegalArgumentException e) {} + + try { + new CellReference("#REF!"); + fail("Shouldn't be able to create a #REF! refence"); + } catch(IllegalArgumentException e) {} + } + + private static void confirmCrInRange(boolean expResult, String colStr, String rowStr, + SpreadsheetVersion sv) { + if (expResult == CellReference.cellReferenceIsWithinRange(colStr, rowStr, sv)) { + return; + } + throw new AssertionFailedError("expected (c='" + colStr + "', r='" + rowStr + "' to be " + + (expResult ? "within" : "out of") + " bounds for version " + sv.name()); + } + + public void testConvertColStringToIndex() { + assertEquals(0, CellReference.convertColStringToIndex("A")); + assertEquals(1, CellReference.convertColStringToIndex("B")); + assertEquals(14, CellReference.convertColStringToIndex("O")); + assertEquals(701, CellReference.convertColStringToIndex("ZZ")); + assertEquals(18252, CellReference.convertColStringToIndex("ZZA")); + + assertEquals(0, CellReference.convertColStringToIndex("$A")); + assertEquals(1, CellReference.convertColStringToIndex("$B")); + + try { + CellReference.convertColStringToIndex("A$"); + fail("Should throw exception here"); + } catch (IllegalArgumentException e) { + assertTrue(e.getMessage().contains("A$")); + } + } + public void testConvertNumColColString() { assertEquals("A", CellReference.convertNumToColString(0)); - assertEquals("AV", CellReference.convertNumToColString(47)); - assertEquals("AW", CellReference.convertNumToColString(48)); - assertEquals("BF", CellReference.convertNumToColString(57)); - - assertEquals("", CellReference.convertNumToColString(-1)); - assertEquals("", CellReference.convertNumToColString(Integer.MIN_VALUE)); - assertEquals("", CellReference.convertNumToColString(Integer.MAX_VALUE)); - assertEquals("FXSHRXW", CellReference.convertNumToColString(Integer.MAX_VALUE-1)); - } + assertEquals("AV", CellReference.convertNumToColString(47)); + assertEquals("AW", CellReference.convertNumToColString(48)); + assertEquals("BF", CellReference.convertNumToColString(57)); + + assertEquals("", CellReference.convertNumToColString(-1)); + assertEquals("", CellReference.convertNumToColString(Integer.MIN_VALUE)); + assertEquals("", CellReference.convertNumToColString(Integer.MAX_VALUE)); + assertEquals("FXSHRXW", CellReference.convertNumToColString(Integer.MAX_VALUE-1)); + } }