// Copyright � 2006-2007 ASERT. Released under the Canoo Webtest license.
package com.canoo.webtest.plugins.exceltest;
import com.canoo.webtest.self.TestBlock;
import com.canoo.webtest.self.ThrowAssert;
import com.canoo.webtest.steps.Step;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFFont;
/**
* Test class for {@link ExcelVerifyCellStyle}.<p>
*
* @author Rob Nielsen
*/
public class ExcelVerifyCellStyleTest extends BaseExcelStepTestCase {
protected Step createStep() {
return new ExcelVerifyCellStyle();
}
public void testVerifyWithEmpty() throws Exception {
final ExcelVerifyCellStyle step = (ExcelVerifyCellStyle) getStep();
step.setCell("B3");
executeStep(step);
}
public void testVerifyStyleOnEmptyCell() throws Exception {
final ExcelVerifyCellStyle step = (ExcelVerifyCellStyle) getStep();
step.setCell("A1");
step.setFormat("XXX");
assertErrorOnExecute(step, "can't find cell", "Can't find cell for A1");
}
public void testInvalidSideOnBorder() throws Exception {
final ExcelVerifyCellStyle step = (ExcelVerifyCellStyle) getStep();
step.setCell("B3");
step.setBorder("blah:blah");
assertErrorOnExecute(step, "border unknown", "Border side 'blah' unknown. Specify one of top, down, left right.");
}
public void testFailedAssertionInBorderColor() throws Exception {
final ExcelVerifyCellStyle step = (ExcelVerifyCellStyle) getStep();
step.setBorderColor("left:black;top:red");
checkFailedAssertion("D4", "topBorderColor", "red", "black");
step.setBorderColor("black;right:blue");
checkFailedAssertion("D4", "rightBorderColor", "blue", "black");
step.setBorderColor("bottom:black;bottom:#00ff00");
checkFailedAssertion("D4", "bottomBorderColor", "bright green", "black");
step.setBorderColor("left:xxx");
checkFailedAssertion("D4", "leftBorderColor", "xxx", "black");
}
public void testFailedAssertionInFillColor() throws Exception {
((ExcelVerifyCellStyle) getStep()).setFillColor("blue");
checkFailedAssertion("F20", "fillColor", "blue", "dark red");
}
public void testFailedAssertionInFillBackgroundColor() throws Exception {
((ExcelVerifyCellStyle) getStep()).setFillBackgroundColor("#ff0000");
checkFailedAssertion("G22", "fillBackgroundColor", "red", "orange");
}
public void testFailedAssertionInFillPattern() throws Exception {
((ExcelVerifyCellStyle) getStep()).setFillPattern("horizontal strip");
checkFailedAssertion("J16", "fillPattern", "horizontal strip", "horizontal stripe");
}
public void testFailedAssertionInFontStyle() throws Exception {
((ExcelVerifyCellStyle) getStep()).setFontStyle("bold underline strikethrough");
checkFailedAssertion("L14", "fontStyle", "bold strikethrough underline", "bold italic strikethrough underline");
}
public void testFailedAssertionInFontName() throws Exception {
((ExcelVerifyCellStyle) getStep()).setFontName("arial");
checkFailedAssertion("L20", "fontName", "arial", "Arial");
}
public void testFailedAssertionInFontSize() throws Exception {
((ExcelVerifyCellStyle) getStep()).setFontSize("16.0");
checkFailedAssertion("L31", "fontSize", "16.0", "16");
}
public void testFailedAssertionInAlignment() throws Exception {
((ExcelVerifyCellStyle) getStep()).setAlign("left");
checkFailedAssertion("M6", "align", "left", "center");
}
public void testFailedAssertionInVerticalAlignment() throws Exception {
((ExcelVerifyCellStyle) getStep()).setValign("left");
checkFailedAssertion("M12", "valign", "left", "top");
}
public void testFailedAssertionInType() throws Exception {
((ExcelVerifyCellStyle) getStep()).setType("blah");
checkFailedAssertion("N23", "type", "blah", "boolean");
}
public void testFailedAssertionInFormat() throws Exception {
((ExcelVerifyCellStyle) getStep()).setFormat("xxx");
checkFailedAssertion("N31", "format", "xxx", "m/d/yy");
}
public void testFailedAssertionInLocked() throws Exception {
((ExcelVerifyCellStyle) getStep()).setLocked("xxx");
checkFailedAssertion("O4", "locked", "xxx", "true");
}
public void testFailedAssertionInWrapped() throws Exception {
((ExcelVerifyCellStyle) getStep()).setWrap("xxx");
checkFailedAssertion("O8", "wrap", "xxx", "false");
}
private void checkFailedAssertion(final String cell, final String property,
final String expected, final String actual) {
final ExcelVerifyCellStyle step = (ExcelVerifyCellStyle) getStep();
step.setSheetIndex("1");
step.setCell(cell);
assertFailOnExecute(step, "border color",
"Wrong cell style found for property '" + property + "' in cell " + cell
+ ". Expected value \"" + expected + "\" but got \"" +actual + "\"");
}
public void testErrorCellType() throws Exception {
final ExcelVerifyCellStyle step = (ExcelVerifyCellStyle) getStep();
step.setCell("B2");
step.getExcelCell().setCellErrorValue((byte)42);
step.getExcelCell().setCellType(HSSFCell.CELL_TYPE_ERROR);
step.setType("error");
executeStep(step);
}
public void testUnknownProperties() throws Exception {
final ExcelVerifyCellStyle step = (ExcelVerifyCellStyle) getStep();
step.setCell("B2");
final HSSFCellStyle cellStyle = step.getExcelCell().getCellStyle();
cellStyle.setBorderTop(Short.MAX_VALUE);
cellStyle.setAlignment(Short.MAX_VALUE);
cellStyle.setVerticalAlignment(Short.MAX_VALUE);
cellStyle.setFillPattern(Short.MAX_VALUE);
final HSSFFont fontAt = step.getExcelWorkbook().getFontAt(cellStyle.getFontIndex());
fontAt.setUnderline(Byte.MAX_VALUE);
step.setBorder("top:unknown");
step.setAlign("unknown");
step.setValign("unknown");
step.setFillPattern("unknown");
step.setFontStyle("bold underline-unknown");
executeStep(step);
}
public void testUnknownCellType() {
assertEquals("unknown", ExcelCellUtils.getCellType(6));
}
public void testInvalidSides() throws Exception {
final ExcelVerifyCellStyle step = (ExcelVerifyCellStyle) getStep();
step.setCell("A1");
ThrowAssert.assertThrows(IllegalArgumentException.class, "Invalid side: 4", new TestBlock()
{
public void call() throws Exception {
step.getBorder(null, 4);
}
});
ThrowAssert.assertThrows(IllegalArgumentException.class, "Invalid side: 4", new TestBlock()
{
public void call() throws Exception {
step.getBorderColor(null, 4);
}
});
ThrowAssert.assertThrows(IllegalArgumentException.class, "Invalid side: 4", new TestBlock()
{
public void call() throws Exception {
step.getAdjacentCell(4);
}
});
}
}