package net.objectlab.kit.util.excel;
import org.junit.Before;
import org.junit.Test;
import java.math.BigDecimal;
import java.util.List;
import static junit.framework.Assert.assertEquals;
/**
* @author Marcin Jekot
* @since 2012/08/17
*/
public class ExcelTest {
private Excel xls;
private Excel xlsx;
@Before
public void setUp() {
xls = new Excel(getClass().getResourceAsStream("Test Workbook.xls"));
xlsx = new Excel(getClass().getResourceAsStream("Test Workbook.xlsx"));
}
@Test
public void shouldReadSingleCell() {
// When
String result = xlsx.readValueAt("'Test Sheet'!C3", String.class);
// Then
assertEquals("TestA", result);
}
@Test
public void shouldReadColumn() {
// When
List<String> result = xlsx.readColumn("'Test Sheet'!C3", String.class);
// Then
assertEquals(9, result.size());
assertEquals("TestA", result.get(0));
assertEquals("TestI", result.get(8));
}
@Test
public void shouldReadTwoLinesAndStop() {
// When
Object[][] result = xlsx.readBlock("'Test Sheet'!C3:F4", String.class, Integer.class);
// Then
assertEquals("Number of rows read should be 2", 2, result.length);
assertEquals("Number of columns read should be 4", 4, result[0].length);
assertEquals("Number of columns read should be 4", 4, result[1].length);
}
@Test
public void shouldReadWholeBlockGivenTopLine() {
// When
Object[][] result = xlsx.readBlock("'Test Sheet'!C3:F3", String.class, Integer.class);
// Then
assertEquals("Number of rows read should be 9", 9, result.length);
assertEquals("Number of columns read should be 4", 4, result[0].length);
assertEquals("Number of columns read should be 4", 4, result[8].length);
}
@Test
public void shouldReadARangeOfCellsInXls() {
shouldReadARangeOfCells(xls);
}
@Test
public void shouldReadARangeOfCellsInXlx() {
shouldReadARangeOfCells(xlsx);
}
private void shouldReadARangeOfCells(Excel xl) {
// When
Object[][] result = xl.readBlock("'Test Sheet'!C3:F12", String.class, Integer.class, Double.class, BigDecimal.class);
// Then
final int numberOfRows = 9;
assertEquals(numberOfRows, result.length);
for (int i = 1; i <= numberOfRows; i++) {
Object[] data = result[i - 1];
assertEquals("Test" + Character.toString((char) ('A' + i - 1)), data[0]);
assertEquals(i, data[1]);
final int decimal = i % 10;
assertEquals(i + decimal / (double) 10, data[2]);
assertEquals(new BigDecimal("" + i + "." + decimal + decimal), data[3]);
assertEquals(4, data.length);
}
}
}