aboutsummaryrefslogtreecommitdiffstats
path: root/src/testcases
diff options
context:
space:
mode:
authorAndreas Beeker <kiwiwings@apache.org>2021-01-23 23:04:49 +0000
committerAndreas Beeker <kiwiwings@apache.org>2021-01-23 23:04:49 +0000
commit54fde895e66a402b41455ff5c181bd91d811d35d (patch)
treec1922bfb9d51d83357779b575395d58652af57ab /src/testcases
parent904c77e242d4f8b456f8df26af7b0ee3b8d07f86 (diff)
downloadpoi-54fde895e66a402b41455ff5c181bd91d811d35d.tar.gz
poi-54fde895e66a402b41455ff5c181bd91d811d35d.zip
Sonar fixes
add asserts to tests git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1885859 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'src/testcases')
-rw-r--r--src/testcases/org/apache/poi/ss/usermodel/BaseTestBugzillaIssues.java14
-rw-r--r--src/testcases/org/apache/poi/ss/usermodel/BaseTestConditionalFormatting.java3
-rw-r--r--src/testcases/org/apache/poi/ss/usermodel/BaseTestDataValidation.java912
-rw-r--r--src/testcases/org/apache/poi/ss/usermodel/BaseTestNamedRange.java110
-rw-r--r--src/testcases/org/apache/poi/ss/usermodel/BaseTestSheet.java8
-rw-r--r--src/testcases/org/apache/poi/ss/util/TestDateFormatConverter.java67
6 files changed, 552 insertions, 562 deletions
diff --git a/src/testcases/org/apache/poi/ss/usermodel/BaseTestBugzillaIssues.java b/src/testcases/org/apache/poi/ss/usermodel/BaseTestBugzillaIssues.java
index 2ec30c4396..d8adc7c529 100644
--- a/src/testcases/org/apache/poi/ss/usermodel/BaseTestBugzillaIssues.java
+++ b/src/testcases/org/apache/poi/ss/usermodel/BaseTestBugzillaIssues.java
@@ -17,6 +17,7 @@
package org.apache.poi.ss.usermodel;
+import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertNotNull;
@@ -1318,7 +1319,7 @@ public abstract class BaseTestBugzillaIssues {
sheet.setRowGroupCollapsed(0, true);
sheet.groupColumn(0, 0);
- sheet.setColumnGroupCollapsed(0, true);
+ assertDoesNotThrow(() -> sheet.setColumnGroupCollapsed(0, true));
}
}
@@ -1328,7 +1329,7 @@ public abstract class BaseTestBugzillaIssues {
void test58648() throws IOException {
try (Workbook wb = _testDataProvider.createWorkbook()) {
Cell cell = wb.createSheet().createRow(0).createCell(0);
- cell.setCellFormula("((1 + 1) )");
+ assertDoesNotThrow(() -> cell.setCellFormula("((1 + 1) )"));
}
}
@@ -1441,9 +1442,11 @@ public abstract class BaseTestBugzillaIssues {
return time() - startTimeMillis;
}
- @Disabled("bug 59393")
@Test
void bug59393_commentsCanHaveSameAnchor() throws IOException {
+ // only executed for HSSF currently
+ assumeTrue("xls".equals(_testDataProvider.getStandardFileNameExtension()));
+
try (Workbook wb = _testDataProvider.createWorkbook()) {
Sheet sheet = wb.createSheet();
@@ -1473,14 +1476,13 @@ public abstract class BaseTestBugzillaIssues {
Comment comment2 = drawing.createCellComment(anchor);
RichTextString richTextString2 = helper.createRichTextString("comment2");
comment2.setString(richTextString2);
- cell2.setCellComment(comment2);
+ assertDoesNotThrow(() -> cell2.setCellComment(comment2));
// anchor.setCol1(2);
Comment comment3 = drawing.createCellComment(anchor);
RichTextString richTextString3 = helper.createRichTextString("comment3");
comment3.setString(richTextString3);
- cell3.setCellComment(comment3);
-
+ assertDoesNotThrow(() -> cell3.setCellComment(comment3));
}
}
diff --git a/src/testcases/org/apache/poi/ss/usermodel/BaseTestConditionalFormatting.java b/src/testcases/org/apache/poi/ss/usermodel/BaseTestConditionalFormatting.java
index 64a85c64ee..4d3954fa78 100644
--- a/src/testcases/org/apache/poi/ss/usermodel/BaseTestConditionalFormatting.java
+++ b/src/testcases/org/apache/poi/ss/usermodel/BaseTestConditionalFormatting.java
@@ -1221,7 +1221,8 @@ public abstract class BaseTestConditionalFormatting {
CellRangeAddress.valueOf("C9:D30"), CellRangeAddress.valueOf("C7:C31")
};
ConditionalFormattingRule rule = sheet.getSheetConditionalFormatting().createConditionalFormattingRule("$A$1>0");
- sheet.getSheetConditionalFormatting().addConditionalFormatting(ranges, rule);
+ int form = sheet.getSheetConditionalFormatting().addConditionalFormatting(ranges, rule);
+ assertEquals(0, form);
}
}
diff --git a/src/testcases/org/apache/poi/ss/usermodel/BaseTestDataValidation.java b/src/testcases/org/apache/poi/ss/usermodel/BaseTestDataValidation.java
index d1d70c6131..ccfd8293c0 100644
--- a/src/testcases/org/apache/poi/ss/usermodel/BaseTestDataValidation.java
+++ b/src/testcases/org/apache/poi/ss/usermodel/BaseTestDataValidation.java
@@ -17,14 +17,14 @@
package org.apache.poi.ss.usermodel;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
import org.apache.poi.ss.ITestDataProvider;
import org.apache.poi.ss.usermodel.DataValidation.ErrorStyle;
import org.apache.poi.ss.usermodel.DataValidationConstraint.OperatorType;
import org.apache.poi.ss.usermodel.DataValidationConstraint.ValidationType;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.ss.util.CellRangeAddressList;
-import org.apache.poi.util.POILogFactory;
-import org.apache.poi.util.POILogger;
import org.junit.jupiter.api.Test;
/**
@@ -35,472 +35,458 @@ import org.junit.jupiter.api.Test;
public abstract class BaseTestDataValidation {
private final ITestDataProvider _testDataProvider;
- private static final POILogger log = POILogFactory.getLogger(BaseTestDataValidation.class);
-
protected BaseTestDataValidation(ITestDataProvider testDataProvider) {
_testDataProvider = testDataProvider;
}
- /** Convenient access to ERROR_STYLE constants */
- protected static final DataValidation.ErrorStyle ES = null;
- /** Convenient access to OPERATOR constants */
- protected static final DataValidationConstraint.ValidationType VT = null;
- /** Convenient access to OPERATOR constants */
- protected static final DataValidationConstraint.OperatorType OP = null;
-
- private static final class ValidationAdder {
-
- private final CellStyle _style_1;
- private final CellStyle _style_2;
- private final int _validationType;
- private final Sheet _sheet;
- private int _currentRowIndex;
- private final CellStyle _cellStyle;
-
- public ValidationAdder(Sheet fSheet, CellStyle style_1, CellStyle style_2,
- CellStyle cellStyle, int validationType) {
- _sheet = fSheet;
- _style_1 = style_1;
- _style_2 = style_2;
- _cellStyle = cellStyle;
- _validationType = validationType;
- _currentRowIndex = fSheet.getPhysicalNumberOfRows();
- }
- void addValidation(int operatorType, String firstFormula, String secondFormula,
- int errorStyle, String ruleDescr, String promptDescr,
- boolean allowEmpty, boolean inputBox, boolean errorBox) {
- String[] explicitListValues = null;
-
- addValidationInternal(operatorType, firstFormula, secondFormula, errorStyle, ruleDescr,
- promptDescr, allowEmpty, inputBox, errorBox, true,
- explicitListValues);
- }
-
- private void addValidationInternal(int operatorType, String firstFormula,
- String secondFormula, int errorStyle, String ruleDescr, String promptDescr,
- boolean allowEmpty, boolean inputBox, boolean errorBox, boolean suppressDropDown,
- String[] explicitListValues) {
- int rowNum = _currentRowIndex++;
-
- DataValidationHelper dataValidationHelper = _sheet.getDataValidationHelper();
- DataValidationConstraint dc = createConstraint(dataValidationHelper,operatorType, firstFormula, secondFormula, explicitListValues);
-
- DataValidation dv = dataValidationHelper.createValidation(dc,new CellRangeAddressList(rowNum, rowNum, 0, 0));
-
- dv.setEmptyCellAllowed(allowEmpty);
- dv.setErrorStyle(errorStyle);
- dv.createErrorBox("Invalid Input", "Something is wrong - check condition!");
- dv.createPromptBox("Validated Cell", "Allowable values have been restricted");
-
- dv.setShowPromptBox(inputBox);
- dv.setShowErrorBox(errorBox);
- dv.setSuppressDropDownArrow(suppressDropDown);
-
-
- _sheet.addValidationData(dv);
- writeDataValidationSettings(_sheet, _style_1, _style_2, ruleDescr, allowEmpty,
- inputBox, errorBox);
- if (_cellStyle != null) {
- Row row = _sheet.getRow(_sheet.getPhysicalNumberOfRows() - 1);
- Cell cell = row.createCell(0);
- cell.setCellStyle(_cellStyle);
- }
- writeOtherSettings(_sheet, _style_1, promptDescr);
- }
- private DataValidationConstraint createConstraint(DataValidationHelper dataValidationHelper,int operatorType, String firstFormula,
- String secondFormula, String[] explicitListValues) {
- if (_validationType == ValidationType.LIST) {
- if (explicitListValues != null) {
- return dataValidationHelper.createExplicitListConstraint(explicitListValues);
- }
- return dataValidationHelper.createFormulaListConstraint(firstFormula);
- }
- if (_validationType == ValidationType.TIME) {
- return dataValidationHelper.createTimeConstraint(operatorType, firstFormula, secondFormula);
- }
- if (_validationType == ValidationType.DATE) {
- return dataValidationHelper.createDateConstraint(operatorType, firstFormula, secondFormula, null);
- }
- if (_validationType == ValidationType.FORMULA) {
- return dataValidationHelper.createCustomConstraint(firstFormula);
- }
-
- if( _validationType == ValidationType.INTEGER) {
- return dataValidationHelper.createIntegerConstraint(operatorType, firstFormula, secondFormula);
- }
- if( _validationType == ValidationType.DECIMAL) {
- return dataValidationHelper.createDecimalConstraint(operatorType, firstFormula, secondFormula);
- }
- if( _validationType == ValidationType.TEXT_LENGTH) {
- return dataValidationHelper.createTextLengthConstraint(operatorType, firstFormula, secondFormula);
- }
- return null;
- }
- /**
- * writes plain text values into cells in a tabular format to form comments readable from within
- * the spreadsheet.
- */
- private static void writeDataValidationSettings(Sheet sheet, CellStyle style_1,
- CellStyle style_2, String strCondition, boolean allowEmpty, boolean inputBox,
- boolean errorBox) {
- Row row = sheet.createRow(sheet.getPhysicalNumberOfRows());
- // condition's string
- Cell cell = row.createCell(1);
- cell.setCellStyle(style_1);
- setCellValue(cell, strCondition);
- // allow empty cells
- cell = row.createCell(2);
- cell.setCellStyle(style_2);
- setCellValue(cell, ((allowEmpty) ? "yes" : "no"));
- // show input box
- cell = row.createCell(3);
- cell.setCellStyle(style_2);
- setCellValue(cell, ((inputBox) ? "yes" : "no"));
- // show error box
- cell = row.createCell(4);
- cell.setCellStyle(style_2);
- setCellValue(cell, ((errorBox) ? "yes" : "no"));
- }
- private static void writeOtherSettings(Sheet sheet, CellStyle style,
- String strStettings) {
- Row row = sheet.getRow(sheet.getPhysicalNumberOfRows() - 1);
- Cell cell = row.createCell(5);
- cell.setCellStyle(style);
- setCellValue(cell, strStettings);
- }
- void addListValidation(String[] explicitListValues, String listFormula, String listValsDescr,
- boolean allowEmpty, boolean suppressDropDown) {
- String promptDescr = (allowEmpty ? "empty ok" : "not empty")
- + ", " + (suppressDropDown ? "no drop-down" : "drop-down");
- addValidationInternal(ValidationType.LIST, listFormula, null, ErrorStyle.STOP, listValsDescr, promptDescr,
- allowEmpty, false, true, suppressDropDown, explicitListValues);
- }
- }
-
- private static void log(String msg) {
- log.log(POILogger.INFO, msg);
+ /**
+ * Convenient access to ERROR_STYLE constants
+ */
+ protected static final DataValidation.ErrorStyle ES = null;
+ /**
+ * Convenient access to OPERATOR constants
+ */
+ protected static final DataValidationConstraint.ValidationType VT = null;
+
+ private static final class ValidationAdder {
+
+ private final CellStyle _style_1;
+ private final CellStyle _style_2;
+ private final int _validationType;
+ private final Sheet _sheet;
+ private int _currentRowIndex;
+ private final CellStyle _cellStyle;
+
+ public ValidationAdder(Sheet fSheet, CellStyle style_1, CellStyle style_2,
+ CellStyle cellStyle, int validationType) {
+ _sheet = fSheet;
+ _style_1 = style_1;
+ _style_2 = style_2;
+ _cellStyle = cellStyle;
+ _validationType = validationType;
+ _currentRowIndex = fSheet.getPhysicalNumberOfRows();
+ }
+
+ void addValidation(int operatorType, String firstFormula, String secondFormula,
+ int errorStyle, String ruleDescr, String promptDescr,
+ boolean allowEmpty, boolean inputBox, boolean errorBox) {
+ String[] explicitListValues = null;
+
+ addValidationInternal(operatorType, firstFormula, secondFormula, errorStyle, ruleDescr,
+ promptDescr, allowEmpty, inputBox, errorBox, true,
+ explicitListValues);
+ }
+
+ private void addValidationInternal(int operatorType, String firstFormula,
+ String secondFormula, int errorStyle, String ruleDescr, String promptDescr,
+ boolean allowEmpty, boolean inputBox, boolean errorBox, boolean suppressDropDown,
+ String[] explicitListValues) {
+ int rowNum = _currentRowIndex++;
+
+ DataValidationHelper dataValidationHelper = _sheet.getDataValidationHelper();
+ DataValidationConstraint dc = createConstraint(dataValidationHelper, operatorType, firstFormula, secondFormula, explicitListValues);
+
+ DataValidation dv = dataValidationHelper.createValidation(dc, new CellRangeAddressList(rowNum, rowNum, 0, 0));
+
+ dv.setEmptyCellAllowed(allowEmpty);
+ dv.setErrorStyle(errorStyle);
+ dv.createErrorBox("Invalid Input", "Something is wrong - check condition!");
+ dv.createPromptBox("Validated Cell", "Allowable values have been restricted");
+
+ dv.setShowPromptBox(inputBox);
+ dv.setShowErrorBox(errorBox);
+ dv.setSuppressDropDownArrow(suppressDropDown);
+
+
+ _sheet.addValidationData(dv);
+ writeDataValidationSettings(_sheet, _style_1, _style_2, ruleDescr, allowEmpty,
+ inputBox, errorBox);
+ if (_cellStyle != null) {
+ Row row = _sheet.getRow(_sheet.getPhysicalNumberOfRows() - 1);
+ Cell cell = row.createCell(0);
+ cell.setCellStyle(_cellStyle);
+ }
+ writeOtherSettings(_sheet, _style_1, promptDescr);
+ }
+
+ private DataValidationConstraint createConstraint(DataValidationHelper dataValidationHelper, int operatorType, String firstFormula,
+ String secondFormula, String[] explicitListValues) {
+ if (_validationType == ValidationType.LIST) {
+ if (explicitListValues != null) {
+ return dataValidationHelper.createExplicitListConstraint(explicitListValues);
+ }
+ return dataValidationHelper.createFormulaListConstraint(firstFormula);
+ }
+ if (_validationType == ValidationType.TIME) {
+ return dataValidationHelper.createTimeConstraint(operatorType, firstFormula, secondFormula);
+ }
+ if (_validationType == ValidationType.DATE) {
+ return dataValidationHelper.createDateConstraint(operatorType, firstFormula, secondFormula, null);
+ }
+ if (_validationType == ValidationType.FORMULA) {
+ return dataValidationHelper.createCustomConstraint(firstFormula);
+ }
+
+ if (_validationType == ValidationType.INTEGER) {
+ return dataValidationHelper.createIntegerConstraint(operatorType, firstFormula, secondFormula);
+ }
+ if (_validationType == ValidationType.DECIMAL) {
+ return dataValidationHelper.createDecimalConstraint(operatorType, firstFormula, secondFormula);
+ }
+ if (_validationType == ValidationType.TEXT_LENGTH) {
+ return dataValidationHelper.createTextLengthConstraint(operatorType, firstFormula, secondFormula);
+ }
+ return null;
+ }
+
+ /**
+ * writes plain text values into cells in a tabular format to form comments readable from within
+ * the spreadsheet.
+ */
+ private static void writeDataValidationSettings(Sheet sheet, CellStyle style_1,
+ CellStyle style_2, String strCondition, boolean allowEmpty, boolean inputBox,
+ boolean errorBox) {
+ Row row = sheet.createRow(sheet.getPhysicalNumberOfRows());
+ // condition's string
+ Cell cell = row.createCell(1);
+ cell.setCellStyle(style_1);
+ setCellValue(cell, strCondition);
+ // allow empty cells
+ cell = row.createCell(2);
+ cell.setCellStyle(style_2);
+ setCellValue(cell, ((allowEmpty) ? "yes" : "no"));
+ // show input box
+ cell = row.createCell(3);
+ cell.setCellStyle(style_2);
+ setCellValue(cell, ((inputBox) ? "yes" : "no"));
+ // show error box
+ cell = row.createCell(4);
+ cell.setCellStyle(style_2);
+ setCellValue(cell, ((errorBox) ? "yes" : "no"));
+ }
+
+ private static void writeOtherSettings(Sheet sheet, CellStyle style,
+ String strStettings) {
+ Row row = sheet.getRow(sheet.getPhysicalNumberOfRows() - 1);
+ Cell cell = row.createCell(5);
+ cell.setCellStyle(style);
+ setCellValue(cell, strStettings);
+ }
+
+ void addListValidation(String[] explicitListValues, String listFormula, String listValsDescr,
+ boolean allowEmpty, boolean suppressDropDown) {
+ String promptDescr = (allowEmpty ? "empty ok" : "not empty")
+ + ", " + (suppressDropDown ? "no drop-down" : "drop-down");
+ addValidationInternal(ValidationType.LIST, listFormula, null, ErrorStyle.STOP, listValsDescr, promptDescr,
+ allowEmpty, false, true, suppressDropDown, explicitListValues);
+ }
+ }
+
+ /**
+ * Manages the cell styles used for formatting the output spreadsheet
+ */
+ private static final class WorkbookFormatter {
+
+ private final Workbook _wb;
+ private final CellStyle _style_1;
+ private final CellStyle _style_2;
+ private final CellStyle _style_3;
+ private final CellStyle _style_4;
+ private Sheet _currentSheet;
+
+ public WorkbookFormatter(Workbook wb) {
+ _wb = wb;
+ _style_1 = createStyle(wb, HorizontalAlignment.LEFT);
+ _style_2 = createStyle(wb, HorizontalAlignment.CENTER);
+ _style_3 = createStyle(wb, HorizontalAlignment.CENTER, IndexedColors.GREY_25_PERCENT.getIndex(), true);
+ _style_4 = createHeaderStyle(wb);
+ }
+
+ private static CellStyle createStyle(Workbook wb, HorizontalAlignment h_align, short color,
+ boolean bold) {
+ Font font = wb.createFont();
+ if (bold) {
+ font.setBold(true);
+ }
+
+ CellStyle cellStyle = wb.createCellStyle();
+ cellStyle.setFont(font);
+ cellStyle.setFillForegroundColor(color);
+ cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
+ cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
+ cellStyle.setAlignment(h_align);
+ cellStyle.setBorderLeft(BorderStyle.THIN);
+ cellStyle.setLeftBorderColor(IndexedColors.BLACK.getIndex());
+ cellStyle.setBorderTop(BorderStyle.THIN);
+ cellStyle.setTopBorderColor(IndexedColors.BLACK.getIndex());
+ cellStyle.setBorderRight(BorderStyle.THIN);
+ cellStyle.setRightBorderColor(IndexedColors.BLACK.getIndex());
+ cellStyle.setBorderBottom(BorderStyle.THIN);
+ cellStyle.setBottomBorderColor(IndexedColors.BLACK.getIndex());
+
+ return cellStyle;
+ }
+
+ private static CellStyle createStyle(Workbook wb, HorizontalAlignment h_align) {
+ return createStyle(wb, h_align, IndexedColors.WHITE.getIndex(), false);
+ }
+
+ private static CellStyle createHeaderStyle(Workbook wb) {
+ Font font = wb.createFont();
+ font.setColor(IndexedColors.WHITE.getIndex());
+ font.setBold(true);
+
+ CellStyle cellStyle = wb.createCellStyle();
+ cellStyle.setFillForegroundColor(IndexedColors.BLUE_GREY.getIndex());
+ cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
+ cellStyle.setAlignment(HorizontalAlignment.CENTER);
+ cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
+ cellStyle.setBorderLeft(BorderStyle.THIN);
+ cellStyle.setLeftBorderColor(IndexedColors.WHITE.getIndex());
+ cellStyle.setBorderTop(BorderStyle.THIN);
+ cellStyle.setTopBorderColor(IndexedColors.WHITE.getIndex());
+ cellStyle.setBorderRight(BorderStyle.THIN);
+ cellStyle.setRightBorderColor(IndexedColors.WHITE.getIndex());
+ cellStyle.setBorderBottom(BorderStyle.THIN);
+ cellStyle.setBottomBorderColor(IndexedColors.WHITE.getIndex());
+ cellStyle.setFont(font);
+ return cellStyle;
+ }
+
+
+ public Sheet createSheet(String sheetName) {
+ _currentSheet = _wb.createSheet(sheetName);
+ return _currentSheet;
+ }
+
+ void createDVTypeRow(String strTypeDescription) {
+ Sheet sheet = _currentSheet;
+ Row row = sheet.createRow(sheet.getPhysicalNumberOfRows());
+ sheet.addMergedRegion(new CellRangeAddress(sheet.getPhysicalNumberOfRows() - 1, sheet.getPhysicalNumberOfRows() - 1, 0, 5));
+ Cell cell = row.createCell(0);
+ setCellValue(cell, strTypeDescription);
+ cell.setCellStyle(_style_3);
+ row = sheet.createRow(sheet.getPhysicalNumberOfRows());
+ }
+
+ void createHeaderRow() {
+ Sheet sheet = _currentSheet;
+ Row row = sheet.createRow(sheet.getPhysicalNumberOfRows());
+ row.setHeight((short) 400);
+ for (int i = 0; i < 6; i++) {
+ row.createCell(i).setCellStyle(_style_4);
+ if (i == 2 || i == 3 || i == 4) {
+ sheet.setColumnWidth(i, 3500);
+ } else if (i == 5) {
+ sheet.setColumnWidth(i, 10000);
+ } else {
+ sheet.setColumnWidth(i, 8000);
+ }
+ }
+ Cell cell = row.getCell(0);
+ setCellValue(cell, "Data validation cells");
+ cell = row.getCell(1);
+ setCellValue(cell, "Condition");
+ cell = row.getCell(2);
+ setCellValue(cell, "Allow blank");
+ cell = row.getCell(3);
+ setCellValue(cell, "Prompt box");
+ cell = row.getCell(4);
+ setCellValue(cell, "Error box");
+ cell = row.getCell(5);
+ setCellValue(cell, "Other settings");
+ }
+
+ public ValidationAdder createValidationAdder(CellStyle cellStyle, int dataValidationType) {
+ return new ValidationAdder(_currentSheet, _style_1, _style_2, cellStyle, dataValidationType);
+ }
+
+ void createDVDescriptionRow(String strTypeDescription) {
+ Sheet sheet = _currentSheet;
+ Row row = sheet.getRow(sheet.getPhysicalNumberOfRows() - 1);
+ sheet.addMergedRegion(new CellRangeAddress(sheet.getPhysicalNumberOfRows() - 1, sheet.getPhysicalNumberOfRows() - 1, 0, 5));
+ Cell cell = row.createCell(0);
+ setCellValue(cell, strTypeDescription);
+ cell.setCellStyle(_style_3);
+ row = sheet.createRow(sheet.getPhysicalNumberOfRows());
+ }
+ }
+
+
+ private void addCustomValidations(WorkbookFormatter wf) {
+ wf.createSheet("Custom");
+ wf.createHeaderRow();
+
+ ValidationAdder va = wf.createValidationAdder(null, ValidationType.FORMULA);
+ va.addValidation(OperatorType.BETWEEN, "ISNUMBER($A2)", null, ErrorStyle.STOP, "ISNUMBER(A2)", "Error box type = STOP", true, true, true);
+ va.addValidation(OperatorType.BETWEEN, "IF(SUM(A2:A3)=5,TRUE,FALSE)", null, ErrorStyle.WARNING, "IF(SUM(A2:A3)=5,TRUE,FALSE)", "Error box type = WARNING", false, false, true);
+ }
+
+ private static void addSimpleNumericValidations(WorkbookFormatter wf) {
+ // data validation's number types
+ wf.createSheet("Numbers");
+
+ // "Whole number" validation type
+ wf.createDVTypeRow("Whole number");
+ wf.createHeaderRow();
+
+ ValidationAdder va = wf.createValidationAdder(null, ValidationType.INTEGER);
+ va.addValidation(OperatorType.BETWEEN, "2", "6", ErrorStyle.STOP, "Between 2 and 6 ", "Error box type = STOP", true, true, true);
+ va.addValidation(OperatorType.NOT_BETWEEN, "2", "6", ErrorStyle.INFO, "Not between 2 and 6 ", "Error box type = INFO", false, true, true);
+ va.addValidation(OperatorType.EQUAL, "=3+2", null, ErrorStyle.WARNING, "Equal to (3+2)", "Error box type = WARNING", false, false, true);
+ va.addValidation(OperatorType.NOT_EQUAL, "3", null, ErrorStyle.WARNING, "Not equal to 3", "-", false, false, false);
+ va.addValidation(OperatorType.GREATER_THAN, "3", null, ErrorStyle.WARNING, "Greater than 3", "-", true, false, false);
+ va.addValidation(OperatorType.LESS_THAN, "3", null, ErrorStyle.WARNING, "Less than 3", "-", true, true, false);
+ va.addValidation(OperatorType.GREATER_OR_EQUAL, "4", null, ErrorStyle.STOP, "Greater than or equal to 4", "Error box type = STOP", true, false, true);
+ va.addValidation(OperatorType.LESS_OR_EQUAL, "4", null, ErrorStyle.STOP, "Less than or equal to 4", "-", false, true, false);
+
+ // "Decimal" validation type
+ wf.createDVTypeRow("Decimal");
+ wf.createHeaderRow();
+
+ va = wf.createValidationAdder(null, ValidationType.DECIMAL);
+ va.addValidation(OperatorType.BETWEEN, "2", "6", ErrorStyle.STOP, "Between 2 and 6 ", "Error box type = STOP", true, true, true);
+ va.addValidation(OperatorType.NOT_BETWEEN, "2", "6", ErrorStyle.INFO, "Not between 2 and 6 ", "Error box type = INFO", false, true, true);
+ va.addValidation(OperatorType.EQUAL, "3", null, ErrorStyle.WARNING, "Equal to 3", "Error box type = WARNING", false, false, true);
+ va.addValidation(OperatorType.NOT_EQUAL, "3", null, ErrorStyle.WARNING, "Not equal to 3", "-", false, false, false);
+ va.addValidation(OperatorType.GREATER_THAN, "=12/6", null, ErrorStyle.WARNING, "Greater than (12/6)", "-", true, false, false);
+ va.addValidation(OperatorType.LESS_THAN, "3", null, ErrorStyle.WARNING, "Less than 3", "-", true, true, false);
+ va.addValidation(OperatorType.GREATER_OR_EQUAL, "4", null, ErrorStyle.STOP, "Greater than or equal to 4", "Error box type = STOP", true, false, true);
+ va.addValidation(OperatorType.LESS_OR_EQUAL, "4", null, ErrorStyle.STOP, "Less than or equal to 4", "-", false, true, false);
}
- /**
- * Manages the cell styles used for formatting the output spreadsheet
- */
- private static final class WorkbookFormatter {
-
- private final Workbook _wb;
- private final CellStyle _style_1;
- private final CellStyle _style_2;
- private final CellStyle _style_3;
- private final CellStyle _style_4;
- private Sheet _currentSheet;
-
- public WorkbookFormatter(Workbook wb) {
- _wb = wb;
- _style_1 = createStyle( wb, HorizontalAlignment.LEFT );
- _style_2 = createStyle( wb, HorizontalAlignment.CENTER );
- _style_3 = createStyle( wb, HorizontalAlignment.CENTER, IndexedColors.GREY_25_PERCENT.getIndex(), true );
- _style_4 = createHeaderStyle(wb);
- }
-
- private static CellStyle createStyle(Workbook wb, HorizontalAlignment h_align, short color,
- boolean bold) {
- Font font = wb.createFont();
- if (bold) {
- font.setBold(true);
- }
-
- CellStyle cellStyle = wb.createCellStyle();
- cellStyle.setFont(font);
- cellStyle.setFillForegroundColor(color);
- cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
- cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
- cellStyle.setAlignment(h_align);
- cellStyle.setBorderLeft(BorderStyle.THIN);
- cellStyle.setLeftBorderColor(IndexedColors.BLACK.getIndex());
- cellStyle.setBorderTop(BorderStyle.THIN);
- cellStyle.setTopBorderColor(IndexedColors.BLACK.getIndex());
- cellStyle.setBorderRight(BorderStyle.THIN);
- cellStyle.setRightBorderColor(IndexedColors.BLACK.getIndex());
- cellStyle.setBorderBottom(BorderStyle.THIN);
- cellStyle.setBottomBorderColor(IndexedColors.BLACK.getIndex());
-
- return cellStyle;
- }
-
- private static CellStyle createStyle(Workbook wb, HorizontalAlignment h_align) {
- return createStyle(wb, h_align, IndexedColors.WHITE.getIndex(), false);
- }
- private static CellStyle createHeaderStyle(Workbook wb) {
- Font font = wb.createFont();
- font.setColor( IndexedColors.WHITE.getIndex() );
- font.setBold(true);
-
- CellStyle cellStyle = wb.createCellStyle();
- cellStyle.setFillForegroundColor(IndexedColors.BLUE_GREY.getIndex());
- cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
- cellStyle.setAlignment(HorizontalAlignment.CENTER);
- cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
- cellStyle.setBorderLeft(BorderStyle.THIN);
- cellStyle.setLeftBorderColor(IndexedColors.WHITE.getIndex());
- cellStyle.setBorderTop(BorderStyle.THIN);
- cellStyle.setTopBorderColor(IndexedColors.WHITE.getIndex());
- cellStyle.setBorderRight(BorderStyle.THIN);
- cellStyle.setRightBorderColor(IndexedColors.WHITE.getIndex());
- cellStyle.setBorderBottom(BorderStyle.THIN);
- cellStyle.setBottomBorderColor(IndexedColors.WHITE.getIndex());
- cellStyle.setFont(font);
- return cellStyle;
- }
-
-
- public Sheet createSheet(String sheetName) {
- _currentSheet = _wb.createSheet(sheetName);
- return _currentSheet;
- }
- void createDVTypeRow(String strTypeDescription) {
- Sheet sheet = _currentSheet;
- Row row = sheet.createRow(sheet.getPhysicalNumberOfRows());
- sheet.addMergedRegion(new CellRangeAddress(sheet.getPhysicalNumberOfRows()-1, sheet.getPhysicalNumberOfRows()-1, 0, 5));
- Cell cell = row.createCell(0);
- setCellValue(cell, strTypeDescription);
- cell.setCellStyle(_style_3);
- row = sheet.createRow(sheet.getPhysicalNumberOfRows());
- }
-
- void createHeaderRow() {
- Sheet sheet = _currentSheet;
- Row row = sheet.createRow(sheet.getPhysicalNumberOfRows());
- row.setHeight((short) 400);
- for (int i = 0; i < 6; i++) {
- row.createCell(i).setCellStyle(_style_4);
- if (i == 2 || i == 3 || i == 4) {
- sheet.setColumnWidth(i, 3500);
- } else if (i == 5) {
- sheet.setColumnWidth(i, 10000);
- } else {
- sheet.setColumnWidth(i, 8000);
- }
- }
- Cell cell = row.getCell(0);
- setCellValue(cell, "Data validation cells");
- cell = row.getCell(1);
- setCellValue(cell, "Condition");
- cell = row.getCell(2);
- setCellValue(cell, "Allow blank");
- cell = row.getCell(3);
- setCellValue(cell, "Prompt box");
- cell = row.getCell(4);
- setCellValue(cell, "Error box");
- cell = row.getCell(5);
- setCellValue(cell, "Other settings");
- }
-
- public ValidationAdder createValidationAdder(CellStyle cellStyle, int dataValidationType) {
- return new ValidationAdder(_currentSheet, _style_1, _style_2, cellStyle, dataValidationType);
- }
-
- void createDVDescriptionRow(String strTypeDescription) {
- Sheet sheet = _currentSheet;
- Row row = sheet.getRow(sheet.getPhysicalNumberOfRows()-1);
- sheet.addMergedRegion(new CellRangeAddress(sheet.getPhysicalNumberOfRows()-1, sheet.getPhysicalNumberOfRows()-1, 0, 5));
- Cell cell = row.createCell(0);
- setCellValue(cell, strTypeDescription);
- cell.setCellStyle(_style_3);
- row = sheet.createRow(sheet.getPhysicalNumberOfRows());
- }
- }
-
-
- private void addCustomValidations(WorkbookFormatter wf) {
- wf.createSheet("Custom");
- wf.createHeaderRow();
-
- ValidationAdder va = wf.createValidationAdder(null, ValidationType.FORMULA);
- va.addValidation(OperatorType.BETWEEN, "ISNUMBER($A2)", null, ErrorStyle.STOP, "ISNUMBER(A2)", "Error box type = STOP", true, true, true);
- va.addValidation(OperatorType.BETWEEN, "IF(SUM(A2:A3)=5,TRUE,FALSE)", null, ErrorStyle.WARNING, "IF(SUM(A2:A3)=5,TRUE,FALSE)", "Error box type = WARNING", false, false, true);
- }
-
- private static void addSimpleNumericValidations(WorkbookFormatter wf) {
- // data validation's number types
- wf.createSheet("Numbers");
-
- // "Whole number" validation type
- wf.createDVTypeRow("Whole number");
- wf.createHeaderRow();
-
- ValidationAdder va = wf.createValidationAdder(null, ValidationType.INTEGER);
- va.addValidation(OperatorType.BETWEEN, "2", "6", ErrorStyle.STOP, "Between 2 and 6 ", "Error box type = STOP", true, true, true);
- va.addValidation(OperatorType.NOT_BETWEEN, "2", "6", ErrorStyle.INFO, "Not between 2 and 6 ", "Error box type = INFO", false, true, true);
- va.addValidation(OperatorType.EQUAL, "=3+2", null, ErrorStyle.WARNING, "Equal to (3+2)", "Error box type = WARNING", false, false, true);
- va.addValidation(OperatorType.NOT_EQUAL, "3", null, ErrorStyle.WARNING, "Not equal to 3", "-", false, false, false);
- va.addValidation(OperatorType.GREATER_THAN, "3", null, ErrorStyle.WARNING, "Greater than 3", "-", true, false, false);
- va.addValidation(OperatorType.LESS_THAN, "3", null, ErrorStyle.WARNING, "Less than 3", "-", true, true, false);
- va.addValidation(OperatorType.GREATER_OR_EQUAL, "4", null, ErrorStyle.STOP, "Greater than or equal to 4", "Error box type = STOP", true, false, true);
- va.addValidation(OperatorType.LESS_OR_EQUAL, "4", null, ErrorStyle.STOP, "Less than or equal to 4", "-", false, true, false);
-
- // "Decimal" validation type
- wf.createDVTypeRow("Decimal");
- wf.createHeaderRow();
-
- va = wf.createValidationAdder(null, ValidationType.DECIMAL);
- va.addValidation(OperatorType.BETWEEN, "2", "6", ErrorStyle.STOP, "Between 2 and 6 ", "Error box type = STOP", true, true, true);
- va.addValidation(OperatorType.NOT_BETWEEN, "2", "6", ErrorStyle.INFO, "Not between 2 and 6 ", "Error box type = INFO", false, true, true);
- va.addValidation(OperatorType.EQUAL, "3", null, ErrorStyle.WARNING, "Equal to 3", "Error box type = WARNING", false, false, true);
- va.addValidation(OperatorType.NOT_EQUAL, "3", null, ErrorStyle.WARNING, "Not equal to 3", "-", false, false, false);
- va.addValidation(OperatorType.GREATER_THAN, "=12/6", null, ErrorStyle.WARNING, "Greater than (12/6)", "-", true, false, false);
- va.addValidation(OperatorType.LESS_THAN, "3", null, ErrorStyle.WARNING, "Less than 3", "-", true, true, false);
- va.addValidation(OperatorType.GREATER_OR_EQUAL, "4", null, ErrorStyle.STOP, "Greater than or equal to 4", "Error box type = STOP", true, false, true);
- va.addValidation(OperatorType.LESS_OR_EQUAL, "4", null, ErrorStyle.STOP, "Less than or equal to 4", "-", false, true, false);
- }
-
- private static void addListValidations(WorkbookFormatter wf, Workbook wb) {
- final String cellStrValue
- = "a b c d e f g h i j k l m n o p r s t u v x y z w 0 1 2 3 4 "
- + "a b c d e f g h i j k l m n o p r s t u v x y z w 0 1 2 3 4 "
- + "a b c d e f g h i j k l m n o p r s t u v x y z w 0 1 2 3 4 "
- + "a b c d e f g h i j k l m n o p r s t u v x y z w 0 1 2 3 4 ";
- final String dataSheetName = "list_data";
- // "List" Data Validation type
- Sheet fSheet = wf.createSheet("Lists");
- Sheet dataSheet = wb.createSheet(dataSheetName);
-
-
- wf.createDVTypeRow("Explicit lists - list items are explicitly provided");
- wf.createDVDescriptionRow("Disadvantage - sum of item's length should be less than 255 characters");
- wf.createHeaderRow();
-
- ValidationAdder va = wf.createValidationAdder(null, ValidationType.LIST);
- String listValsDescr = "POIFS,HSSF,HWPF,HPSF";
- String[] listVals = listValsDescr.split(",");
- va.addListValidation(listVals, null, listValsDescr, false, false);
- va.addListValidation(listVals, null, listValsDescr, false, true);
- va.addListValidation(listVals, null, listValsDescr, true, false);
- va.addListValidation(listVals, null, listValsDescr, true, true);
-
-
-
- wf.createDVTypeRow("Reference lists - list items are taken from others cells");
- wf.createDVDescriptionRow("Advantage - no restriction regarding the sum of item's length");
- wf.createHeaderRow();
- va = wf.createValidationAdder(null, ValidationType.LIST);
- String strFormula = "$A$30:$A$39";
- va.addListValidation(null, strFormula, strFormula, false, false);
-
- strFormula = dataSheetName + "!$A$1:$A$10";
- va.addListValidation(null, strFormula, strFormula, false, false);
- Name namedRange = wb.createName();
- namedRange.setNameName("myName");
- namedRange.setRefersToFormula(dataSheetName + "!$A$2:$A$7");
- strFormula = "myName";
- va.addListValidation(null, strFormula, strFormula, false, false);
- strFormula = "offset(myName, 2, 1, 4, 2)"; // Note about last param '2':
- // - Excel expects single row or single column when entered in UI, but process this OK otherwise
- va.addListValidation(null, strFormula, strFormula, false, false);
-
- // add list data on same sheet
- for (int i = 0; i < 10; i++) {
- Row currRow = fSheet.createRow(i + 29);
- setCellValue(currRow.createCell(0), cellStrValue);
- }
- // add list data on another sheet
- for (int i = 0; i < 10; i++) {
- Row currRow = dataSheet.createRow(i + 0);
- setCellValue(currRow.createCell(0), "Data a" + i);
- setCellValue(currRow.createCell(1), "Data b" + i);
- setCellValue(currRow.createCell(2), "Data c" + i);
- }
- }
-
- private static void addDateTimeValidations(WorkbookFormatter wf, Workbook wb) {
- wf.createSheet("Dates and Times");
-
- DataFormat dataFormat = wb.createDataFormat();
- short fmtDate = dataFormat.getFormat("m/d/yyyy");
- short fmtTime = dataFormat.getFormat("h:mm");
- CellStyle cellStyle_date = wb.createCellStyle();
- cellStyle_date.setDataFormat(fmtDate);
- CellStyle cellStyle_time = wb.createCellStyle();
- cellStyle_time.setDataFormat(fmtTime);
-
- wf.createDVTypeRow("Date ( cells are already formated as date - m/d/yyyy)");
- wf.createHeaderRow();
-
- ValidationAdder va = wf.createValidationAdder(cellStyle_date, ValidationType.DATE);
- va.addValidation(OperatorType.BETWEEN, "2004/01/02", "2004/01/06", ErrorStyle.STOP, "Between 1/2/2004 and 1/6/2004 ", "Error box type = STOP", true, true, true);
- va.addValidation(OperatorType.NOT_BETWEEN, "2004/01/01", "2004/01/06", ErrorStyle.INFO, "Not between 1/2/2004 and 1/6/2004 ", "Error box type = INFO", false, true, true);
- va.addValidation(OperatorType.EQUAL, "2004/03/02", null, ErrorStyle.WARNING, "Equal to 3/2/2004", "Error box type = WARNING", false, false, true);
- va.addValidation(OperatorType.NOT_EQUAL, "2004/03/02", null, ErrorStyle.WARNING, "Not equal to 3/2/2004", "-", false, false, false);
- va.addValidation(OperatorType.GREATER_THAN,"=DATEVALUE(\"4-Jul-2001\")", null, ErrorStyle.WARNING, "Greater than DATEVALUE('4-Jul-2001')", "-", true, false, false);
- va.addValidation(OperatorType.LESS_THAN, "2004/03/02", null, ErrorStyle.WARNING, "Less than 3/2/2004", "-", true, true, false);
- va.addValidation(OperatorType.GREATER_OR_EQUAL, "2004/03/02", null, ErrorStyle.STOP, "Greater than or equal to 3/2/2004", "Error box type = STOP", true, false, true);
- va.addValidation(OperatorType.LESS_OR_EQUAL, "2004/03/04", null, ErrorStyle.STOP, "Less than or equal to 3/4/2004", "-", false, true, false);
-
- // "Time" validation type
- wf.createDVTypeRow("Time ( cells are already formated as time - h:mm)");
- wf.createHeaderRow();
-
- va = wf.createValidationAdder(cellStyle_time, ValidationType.TIME);
- va.addValidation(OperatorType.BETWEEN, "12:00", "16:00", ErrorStyle.STOP, "Between 12:00 and 16:00 ", "Error box type = STOP", true, true, true);
- va.addValidation(OperatorType.NOT_BETWEEN, "12:00", "16:00", ErrorStyle.INFO, "Not between 12:00 and 16:00 ", "Error box type = INFO", false, true, true);
- va.addValidation(OperatorType.EQUAL, "13:35", null, ErrorStyle.WARNING, "Equal to 13:35", "Error box type = WARNING", false, false, true);
- va.addValidation(OperatorType.NOT_EQUAL, "13:35", null, ErrorStyle.WARNING, "Not equal to 13:35", "-", false, false, false);
- va.addValidation(OperatorType.GREATER_THAN,"12:00", null, ErrorStyle.WARNING, "Greater than 12:00", "-", true, false, false);
- va.addValidation(OperatorType.LESS_THAN, "=1/2", null, ErrorStyle.WARNING, "Less than (1/2) -> 12:00", "-", true, true, false);
- va.addValidation(OperatorType.GREATER_OR_EQUAL, "14:00", null, ErrorStyle.STOP, "Greater than or equal to 14:00", "Error box type = STOP", true, false, true);
- va.addValidation(OperatorType.LESS_OR_EQUAL,"14:00", null, ErrorStyle.STOP, "Less than or equal to 14:00", "-", false, true, false);
- }
-
- private static void addTextLengthValidations(WorkbookFormatter wf) {
- wf.createSheet("Text lengths");
- wf.createHeaderRow();
-
- ValidationAdder va = wf.createValidationAdder(null, ValidationType.TEXT_LENGTH);
- va.addValidation(OperatorType.BETWEEN, "2", "6", ErrorStyle.STOP, "Between 2 and 6 ", "Error box type = STOP", true, true, true);
- va.addValidation(OperatorType.NOT_BETWEEN, "2", "6", ErrorStyle.INFO, "Not between 2 and 6 ", "Error box type = INFO", false, true, true);
- va.addValidation(OperatorType.EQUAL, "3", null, ErrorStyle.WARNING, "Equal to 3", "Error box type = WARNING", false, false, true);
- va.addValidation(OperatorType.NOT_EQUAL, "3", null, ErrorStyle.WARNING, "Not equal to 3", "-", false, false, false);
- va.addValidation(OperatorType.GREATER_THAN, "3", null, ErrorStyle.WARNING, "Greater than 3", "-", true, false, false);
- va.addValidation(OperatorType.LESS_THAN, "3", null, ErrorStyle.WARNING, "Less than 3", "-", true, true, false);
- va.addValidation(OperatorType.GREATER_OR_EQUAL, "4", null, ErrorStyle.STOP, "Greater than or equal to 4", "Error box type = STOP", true, false, true);
- va.addValidation(OperatorType.LESS_OR_EQUAL, "4", null, ErrorStyle.STOP, "Less than or equal to 4", "-", false, true, false);
- }
-
- @Test
- void testDataValidation() throws Exception {
- log("\nTest no. 2 - Test Excel's Data validation mechanism");
- Workbook wb = _testDataProvider.createWorkbook();
- WorkbookFormatter wf = new WorkbookFormatter(wb);
-
- log(" Create sheet for Data Validation's number types ... ");
- addSimpleNumericValidations(wf);
- log("done !");
-
- log(" Create sheet for 'List' Data Validation type ... ");
- addListValidations(wf, wb);
- log("done !");
-
- log(" Create sheet for 'Date' and 'Time' Data Validation types ... ");
- addDateTimeValidations(wf, wb);
- log("done !");
-
- log(" Create sheet for 'Text length' Data Validation type... ");
- addTextLengthValidations(wf);
- log("done !");
-
- // Custom Validation type
- log(" Create sheet for 'Custom' Data Validation type ... ");
- addCustomValidations(wf);
- log("done !");
-
- _testDataProvider.writeOutAndReadBack(wb).close();
-
- wb.close();
- }
-
-
-
- /* package */ static void setCellValue(Cell cell, String text) {
- cell.setCellValue(text);
-
- }
+ private static void addListValidations(WorkbookFormatter wf, Workbook wb) {
+ final String cellStrValue
+ = "a b c d e f g h i j k l m n o p r s t u v x y z w 0 1 2 3 4 "
+ + "a b c d e f g h i j k l m n o p r s t u v x y z w 0 1 2 3 4 "
+ + "a b c d e f g h i j k l m n o p r s t u v x y z w 0 1 2 3 4 "
+ + "a b c d e f g h i j k l m n o p r s t u v x y z w 0 1 2 3 4 ";
+ final String dataSheetName = "list_data";
+ // "List" Data Validation type
+ Sheet fSheet = wf.createSheet("Lists");
+ Sheet dataSheet = wb.createSheet(dataSheetName);
+
+
+ wf.createDVTypeRow("Explicit lists - list items are explicitly provided");
+ wf.createDVDescriptionRow("Disadvantage - sum of item's length should be less than 255 characters");
+ wf.createHeaderRow();
+
+ ValidationAdder va = wf.createValidationAdder(null, ValidationType.LIST);
+ String listValsDescr = "POIFS,HSSF,HWPF,HPSF";
+ String[] listVals = listValsDescr.split(",");
+ va.addListValidation(listVals, null, listValsDescr, false, false);
+ va.addListValidation(listVals, null, listValsDescr, false, true);
+ va.addListValidation(listVals, null, listValsDescr, true, false);
+ va.addListValidation(listVals, null, listValsDescr, true, true);
+
+
+ wf.createDVTypeRow("Reference lists - list items are taken from others cells");
+ wf.createDVDescriptionRow("Advantage - no restriction regarding the sum of item's length");
+ wf.createHeaderRow();
+ va = wf.createValidationAdder(null, ValidationType.LIST);
+ String strFormula = "$A$30:$A$39";
+ va.addListValidation(null, strFormula, strFormula, false, false);
+
+ strFormula = dataSheetName + "!$A$1:$A$10";
+ va.addListValidation(null, strFormula, strFormula, false, false);
+ Name namedRange = wb.createName();
+ namedRange.setNameName("myName");
+ namedRange.setRefersToFormula(dataSheetName + "!$A$2:$A$7");
+ strFormula = "myName";
+ va.addListValidation(null, strFormula, strFormula, false, false);
+ strFormula = "offset(myName, 2, 1, 4, 2)"; // Note about last param '2':
+ // - Excel expects single row or single column when entered in UI, but process this OK otherwise
+ va.addListValidation(null, strFormula, strFormula, false, false);
+
+ // add list data on same sheet
+ for (int i = 0; i < 10; i++) {
+ Row currRow = fSheet.createRow(i + 29);
+ setCellValue(currRow.createCell(0), cellStrValue);
+ }
+ // add list data on another sheet
+ for (int i = 0; i < 10; i++) {
+ Row currRow = dataSheet.createRow(i + 0);
+ setCellValue(currRow.createCell(0), "Data a" + i);
+ setCellValue(currRow.createCell(1), "Data b" + i);
+ setCellValue(currRow.createCell(2), "Data c" + i);
+ }
+ }
+
+ private static void addDateTimeValidations(WorkbookFormatter wf, Workbook wb) {
+ wf.createSheet("Dates and Times");
+
+ DataFormat dataFormat = wb.createDataFormat();
+ short fmtDate = dataFormat.getFormat("m/d/yyyy");
+ short fmtTime = dataFormat.getFormat("h:mm");
+ CellStyle cellStyle_date = wb.createCellStyle();
+ cellStyle_date.setDataFormat(fmtDate);
+ CellStyle cellStyle_time = wb.createCellStyle();
+ cellStyle_time.setDataFormat(fmtTime);
+
+ wf.createDVTypeRow("Date ( cells are already formated as date - m/d/yyyy)");
+ wf.createHeaderRow();
+
+ ValidationAdder va = wf.createValidationAdder(cellStyle_date, ValidationType.DATE);
+ va.addValidation(OperatorType.BETWEEN, "2004/01/02", "2004/01/06", ErrorStyle.STOP, "Between 1/2/2004 and 1/6/2004 ", "Error box type = STOP", true, true, true);
+ va.addValidation(OperatorType.NOT_BETWEEN, "2004/01/01", "2004/01/06", ErrorStyle.INFO, "Not between 1/2/2004 and 1/6/2004 ", "Error box type = INFO", false, true, true);
+ va.addValidation(OperatorType.EQUAL, "2004/03/02", null, ErrorStyle.WARNING, "Equal to 3/2/2004", "Error box type = WARNING", false, false, true);
+ va.addValidation(OperatorType.NOT_EQUAL, "2004/03/02", null, ErrorStyle.WARNING, "Not equal to 3/2/2004", "-", false, false, false);
+ va.addValidation(OperatorType.GREATER_THAN, "=DATEVALUE(\"4-Jul-2001\")", null, ErrorStyle.WARNING, "Greater than DATEVALUE('4-Jul-2001')", "-", true, false, false);
+ va.addValidation(OperatorType.LESS_THAN, "2004/03/02", null, ErrorStyle.WARNING, "Less than 3/2/2004", "-", true, true, false);
+ va.addValidation(OperatorType.GREATER_OR_EQUAL, "2004/03/02", null, ErrorStyle.STOP, "Greater than or equal to 3/2/2004", "Error box type = STOP", true, false, true);
+ va.addValidation(OperatorType.LESS_OR_EQUAL, "2004/03/04", null, ErrorStyle.STOP, "Less than or equal to 3/4/2004", "-", false, true, false);
+
+ // "Time" validation type
+ wf.createDVTypeRow("Time ( cells are already formated as time - h:mm)");
+ wf.createHeaderRow();
+
+ va = wf.createValidationAdder(cellStyle_time, ValidationType.TIME);
+ va.addValidation(OperatorType.BETWEEN, "12:00", "16:00", ErrorStyle.STOP, "Between 12:00 and 16:00 ", "Error box type = STOP", true, true, true);
+ va.addValidation(OperatorType.NOT_BETWEEN, "12:00", "16:00", ErrorStyle.INFO, "Not between 12:00 and 16:00 ", "Error box type = INFO", false, true, true);
+ va.addValidation(OperatorType.EQUAL, "13:35", null, ErrorStyle.WARNING, "Equal to 13:35", "Error box type = WARNING", false, false, true);
+ va.addValidation(OperatorType.NOT_EQUAL, "13:35", null, ErrorStyle.WARNING, "Not equal to 13:35", "-", false, false, false);
+ va.addValidation(OperatorType.GREATER_THAN, "12:00", null, ErrorStyle.WARNING, "Greater than 12:00", "-", true, false, false);
+ va.addValidation(OperatorType.LESS_THAN, "=1/2", null, ErrorStyle.WARNING, "Less than (1/2) -> 12:00", "-", true, true, false);
+ va.addValidation(OperatorType.GREATER_OR_EQUAL, "14:00", null, ErrorStyle.STOP, "Greater than or equal to 14:00", "Error box type = STOP", true, false, true);
+ va.addValidation(OperatorType.LESS_OR_EQUAL, "14:00", null, ErrorStyle.STOP, "Less than or equal to 14:00", "-", false, true, false);
+ }
+
+ private static void addTextLengthValidations(WorkbookFormatter wf) {
+ wf.createSheet("Text lengths");
+ wf.createHeaderRow();
+
+ ValidationAdder va = wf.createValidationAdder(null, ValidationType.TEXT_LENGTH);
+ va.addValidation(OperatorType.BETWEEN, "2", "6", ErrorStyle.STOP, "Between 2 and 6 ", "Error box type = STOP", true, true, true);
+ va.addValidation(OperatorType.NOT_BETWEEN, "2", "6", ErrorStyle.INFO, "Not between 2 and 6 ", "Error box type = INFO", false, true, true);
+ va.addValidation(OperatorType.EQUAL, "3", null, ErrorStyle.WARNING, "Equal to 3", "Error box type = WARNING", false, false, true);
+ va.addValidation(OperatorType.NOT_EQUAL, "3", null, ErrorStyle.WARNING, "Not equal to 3", "-", false, false, false);
+ va.addValidation(OperatorType.GREATER_THAN, "3", null, ErrorStyle.WARNING, "Greater than 3", "-", true, false, false);
+ va.addValidation(OperatorType.LESS_THAN, "3", null, ErrorStyle.WARNING, "Less than 3", "-", true, true, false);
+ va.addValidation(OperatorType.GREATER_OR_EQUAL, "4", null, ErrorStyle.STOP, "Greater than or equal to 4", "Error box type = STOP", true, false, true);
+ va.addValidation(OperatorType.LESS_OR_EQUAL, "4", null, ErrorStyle.STOP, "Less than or equal to 4", "-", false, true, false);
+ }
+
+ @Test
+ void testDataValidation() throws Exception {
+ try (Workbook wb1 = _testDataProvider.createWorkbook()) {
+ WorkbookFormatter wf1 = new WorkbookFormatter(wb1);
+ addSimpleNumericValidations(wf1);
+ addListValidations(wf1, wb1);
+ addDateTimeValidations(wf1, wb1);
+ addTextLengthValidations(wf1);
+ // Custom Validation type
+ addCustomValidations(wf1);
+ try (Workbook wb2 = _testDataProvider.writeOutAndReadBack(wb1)) {
+ Sheet sh = wb2.getSheet("Numbers");
+ assertEquals(16, sh.getDataValidations().size());
+ }
+
+ }
+ }
+
+
+ static void setCellValue(Cell cell, String text) {
+ cell.setCellValue(text);
+ }
} \ No newline at end of file
diff --git a/src/testcases/org/apache/poi/ss/usermodel/BaseTestNamedRange.java b/src/testcases/org/apache/poi/ss/usermodel/BaseTestNamedRange.java
index 5715ab0cc9..60a676fc7b 100644
--- a/src/testcases/org/apache/poi/ss/usermodel/BaseTestNamedRange.java
+++ b/src/testcases/org/apache/poi/ss/usermodel/BaseTestNamedRange.java
@@ -17,6 +17,7 @@
package org.apache.poi.ss.usermodel;
+import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertNotNull;
@@ -25,21 +26,17 @@ import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;
import java.io.IOException;
-import java.util.Arrays;
import java.util.List;
-import org.apache.poi.hssf.HSSFITestDataProvider;
-import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.ITestDataProvider;
import org.apache.poi.ss.util.AreaReference;
import org.apache.poi.ss.util.CellReference;
-import org.apache.poi.util.IOUtils;
import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.ValueSource;
/**
* Tests of implementations of {@link org.apache.poi.ss.usermodel.Name}.
- *
- * @author Yegor Kozlov
*/
public abstract class BaseTestNamedRange {
@@ -103,13 +100,13 @@ public abstract class BaseTestNamedRange {
@Test
public final void testUnicodeNamedRange() throws Exception {
- try (HSSFWorkbook wb1 = new HSSFWorkbook()) {
+ try (Workbook wb1 = _testDataProvider.createWorkbook()) {
wb1.createSheet("Test");
Name name = wb1.createName();
name.setNameName("\u03B1");
name.setRefersToFormula("Test!$D$3:$E$8");
- try (HSSFWorkbook wb2 = HSSFITestDataProvider.instance.writeOutAndReadBack(wb1)) {
+ try (Workbook wb2 = _testDataProvider.writeOutAndReadBack(wb1)) {
Name name2 = wb2.getName("\u03B1");
assertNotNull(name2);
@@ -637,71 +634,64 @@ public abstract class BaseTestNamedRange {
// bug 56781: name validation only checks for first character's validity and presence of spaces
// bug 60246: validate name does not allow DOT in named ranges
- @Test
- void testValid() throws IOException {
- Workbook wb = _testDataProvider.createWorkbook();
-
- Name name = wb.createName();
- for (String valid : Arrays.asList(
- "Hello",
- "number1",
- "_underscore",
- "underscore_",
- "p.e.r.o.i.d.s",
- "\\Backslash",
- "Backslash\\"
- )) {
- name.setNameName(valid);
+ @ParameterizedTest
+ @ValueSource(strings = {"Hello", "number1", "_underscore", "underscore_", "p.e.r.o.i.d.s", "\\Backslash", "Backslash\\"})
+ void testValid(String valid) throws IOException {
+ try (Workbook wb = _testDataProvider.createWorkbook()) {
+ Name name = wb.createName();
+ assertDoesNotThrow(() -> name.setNameName(valid));
}
-
- wb.close();
}
- @Test
- void testInvalid() {
+ @ParameterizedTest
+ @ValueSource(strings = {
+ "1number", "Sheet1!A1", "Exclamation!", "Has Space", "Colon:", "A-Minus", "A+Plus", "Dollar$", ".periodAtBeginning",
+ //special shorthand
+ "R", "C",
+ // A1-style cell reference
+ "A1",
+ // R1C1-style cell reference
+ "R1C1",
+ "NameThatIsLongerThan255Characters.NameThatIsLongerThan255Characters.NameThatIsLongerThan255Characters..."+
+ "NameThatIsLongerThan255Characters.NameThatIsLongerThan255Characters.NameThatIsLongerThan255Characters..."+
+ "NameThatIsLongerThan255Characters.NameThatIsLongerThan255Characters.NameThatIsLongerThan255Characters..."+
+ "NameThatIsLongerThan255Characters.NameThatIsLongerThan255Characters.NameThatIsLongerThan255Characters..."+
+ "NameThatIsLongerThan255Characters.NameThatIsLongerThan255Characters.NameThatIsLongerThan255Characters"
+ })
+ void testInvalid(String invalid) {
Workbook wb = _testDataProvider.createWorkbook();
Name name = wb.createName();
- IllegalArgumentException e = assertThrows(IllegalArgumentException.class, () -> name.setNameName(""));
+ IllegalArgumentException e;
+ e = assertThrows(IllegalArgumentException.class, () -> name.setNameName(""));
assertEquals("Name cannot be blank", e.getMessage());
- for (String invalid : Arrays.asList(
- "1number",
- "Sheet1!A1",
- "Exclamation!",
- "Has Space",
- "Colon:",
- "A-Minus",
- "A+Plus",
- "Dollar$",
- ".periodAtBeginning",
- "R", //special shorthand
- "C", //special shorthand
- "A1", // A1-style cell reference
- "R1C1", // R1C1-style cell reference
- "NameThatIsLongerThan255Characters.NameThatIsLongerThan255Characters.NameThatIsLongerThan255Characters..."+
- "NameThatIsLongerThan255Characters.NameThatIsLongerThan255Characters.NameThatIsLongerThan255Characters..."+
- "NameThatIsLongerThan255Characters.NameThatIsLongerThan255Characters.NameThatIsLongerThan255Characters..."+
- "NameThatIsLongerThan255Characters.NameThatIsLongerThan255Characters.NameThatIsLongerThan255Characters..."+
- "NameThatIsLongerThan255Characters.NameThatIsLongerThan255Characters.NameThatIsLongerThan255Characters"
- )) {
- e = assertThrows(IllegalArgumentException.class, () -> name.setNameName(invalid));
- assertTrue(e.getMessage().startsWith("Invalid name: '"+invalid+"'"));
- }
-
+ e = assertThrows(IllegalArgumentException.class, () -> name.setNameName(invalid));
+ assertTrue(e.getMessage().startsWith("Invalid name: '"+invalid+"'"));
}
// bug 60260: renaming a sheet with a named range referring to a unicode (non-ASCII) sheet name
@Test
- void renameSheetWithNamedRangeReferringToUnicodeSheetName() {
- Workbook wb = _testDataProvider.createWorkbook();
- wb.createSheet("Sheet\u30FB1");
+ void renameSheetWithNamedRangeReferringToUnicodeSheetName() throws IOException {
+ String unicodeName = "Sheet\u30FB201";
+ String asciiName = "Sheet 1";
+ String rangeName = "test_named_range";
+ try (Workbook wb1 = _testDataProvider.createWorkbook()) {
+ wb1.createSheet(unicodeName);
- Name name = wb.createName();
- name.setNameName("test_named_range");
- name.setRefersToFormula("'Sheet\u30FB201'!A1:A6");
+ Name name1 = wb1.createName();
+ name1.setNameName(rangeName);
+ name1.setRefersToFormula("'"+unicodeName+"'!A1:A6");
- wb.setSheetName(0, "Sheet 1");
- IOUtils.closeQuietly(wb);
+ wb1.setSheetName(0, asciiName);
+ assertEquals(asciiName, name1.getSheetName());
+
+ try (Workbook wb2 = _testDataProvider.writeOutAndReadBack(wb1)) {
+ Name name2 = wb2.getName(rangeName);
+ assertNotNull(name2);
+ // Eventually this will be updated, but currently we don't update the sheet name
+ assertEquals(asciiName, name2.getSheetName());
+ }
+ }
}
}
diff --git a/src/testcases/org/apache/poi/ss/usermodel/BaseTestSheet.java b/src/testcases/org/apache/poi/ss/usermodel/BaseTestSheet.java
index 3a722b02ca..947bd71a9f 100644
--- a/src/testcases/org/apache/poi/ss/usermodel/BaseTestSheet.java
+++ b/src/testcases/org/apache/poi/ss/usermodel/BaseTestSheet.java
@@ -18,6 +18,7 @@
package org.apache.poi.ss.usermodel;
import static org.apache.poi.POITestCase.assertBetween;
+import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertNotEquals;
@@ -39,6 +40,7 @@ import java.util.Map.Entry;
import java.util.Set;
import org.apache.poi.common.usermodel.HyperlinkType;
+import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.ITestDataProvider;
import org.apache.poi.ss.SpreadsheetVersion;
import org.apache.poi.ss.util.CellAddress;
@@ -1039,7 +1041,7 @@ public abstract class BaseTestSheet {
// here we can only verify that setting some zoom values works,
// range-checking is different between the implementations
- sheet.setZoom(75);
+ assertDoesNotThrow(() -> sheet.setZoom(75));
}
}
@@ -1048,6 +1050,10 @@ public abstract class BaseTestSheet {
try (Workbook wb = _testDataProvider.createWorkbook()) {
Sheet sheet = wb.createSheet();
sheet.showInPane(2, 3);
+ if (wb instanceof HSSFWorkbook) {
+ assertEquals(2, sheet.getTopRow());
+ assertEquals(3, sheet.getLeftCol());
+ }
}
}
diff --git a/src/testcases/org/apache/poi/ss/util/TestDateFormatConverter.java b/src/testcases/org/apache/poi/ss/util/TestDateFormatConverter.java
index 00697bbdb4..befe219a16 100644
--- a/src/testcases/org/apache/poi/ss/util/TestDateFormatConverter.java
+++ b/src/testcases/org/apache/poi/ss/util/TestDateFormatConverter.java
@@ -22,22 +22,24 @@ package org.apache.poi.ss.util;
import static java.text.DateFormat.getDateInstance;
import static java.text.DateFormat.getDateTimeInstance;
import static java.text.DateFormat.getTimeInstance;
+import static org.apache.poi.ss.util.DateFormatConverter.getPrefixForLocale;
+import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertTrue;
-import java.io.File;
-import java.io.FileOutputStream;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Arrays;
+import java.util.Comparator;
import java.util.Date;
import java.util.Locale;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
+import java.util.stream.IntStream;
import java.util.stream.Stream;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
@@ -49,7 +51,6 @@ import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.util.LocaleID;
import org.apache.poi.util.NullOutputStream;
-import org.apache.poi.util.TempFile;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvSource;
@@ -74,50 +75,54 @@ final class TestDateFormatConverter {
"false, true, " + DateFormat.FULL + ", Full"
})
void testJavaDateFormatsInExcel(boolean dates, boolean times, int style, String styleName ) throws Exception {
+ String sheetName = (dates) ? ((times) ? "DateTimes" : "Dates") : "Times";
+ String[] headers = {
+ "locale", "DisplayName", "Excel " + styleName, "java.text.DateFormat",
+ "Equals", "Java pattern", "Excel pattern"
+ };
+
+ Locale[] locales = Arrays.stream(DateFormat.getAvailableLocales())
+ // only use locale with known LocaleIDs
+ .filter(l -> !getPrefixForLocale(l).isEmpty() || Locale.ROOT.equals(l) || l.toLanguageTag().isEmpty())
+ .sorted(Comparator.comparing(Locale::toString))
+ .toArray(Locale[]::new);
+
+
try (Workbook workbook = new HSSFWorkbook()) {
- String sheetName = (dates) ? ((times) ? "DateTimes" : "Dates") : "Times";
Sheet sheet = workbook.createSheet(sheetName);
Row header = sheet.createRow(0);
- header.createCell(0).setCellValue("locale");
- header.createCell(1).setCellValue("DisplayName");
- header.createCell(2).setCellValue("Excel " + styleName);
- header.createCell(3).setCellValue("java.text.DateFormat");
- header.createCell(4).setCellValue("Equals");
- header.createCell(5).setCellValue("Java pattern");
- header.createCell(6).setCellValue("Excel pattern");
+ IntStream.range(0, headers.length).forEach(i -> header.createCell(i).setCellValue(headers[i]));
int rowNum = 1;
- for (Locale locale : DateFormat.getAvailableLocales()) {
- Row row = sheet.createRow(rowNum++);
-
- row.createCell(0).setCellValue(locale.toString());
- row.createCell(1).setCellValue(locale.getDisplayName(Locale.ROOT));
+ final Cell[] cell = new Cell[7];
+ final Date date = new Date();
+ for (Locale locale : locales) {
DateFormat dateFormat = (dates)
? (times ? getDateTimeInstance(style, style, locale) : getDateInstance(style, locale))
: getTimeInstance(style, locale);
-
- Cell cell = row.createCell(2);
- Date date = new Date();
- cell.setCellValue(date);
- CellStyle cellStyle = row.getSheet().getWorkbook().createCellStyle();
-
String javaDateFormatPattern = ((SimpleDateFormat) dateFormat).toPattern();
String excelFormatPattern = DateFormatConverter.convert(locale, javaDateFormatPattern);
- DataFormat poiFormat = row.getSheet().getWorkbook().createDataFormat();
+ Row row = sheet.createRow(rowNum++);
+ IntStream.range(0, headers.length).forEach(i -> cell[i] = row.createCell(i));
+ CellStyle cellStyle = workbook.createCellStyle();
+ DataFormat poiFormat = workbook.createDataFormat();
cellStyle.setDataFormat(poiFormat.getFormat(excelFormatPattern));
- row.createCell(3).setCellValue(dateFormat.format(date));
- cell.setCellStyle(cellStyle);
+ cell[0].setCellValue(locale.toString());
+ cell[1].setCellValue(locale.getDisplayName(Locale.ROOT));
+ cell[2].setCellValue(date);
+ cell[2].setCellStyle(cellStyle);
+ cell[3].setCellValue(dateFormat.format(date));
// the formula returns TRUE is the formatted date in column C equals to the string in column D
- row.createCell(4).setCellFormula("TEXT(C" + rowNum + ",G" + rowNum + ")=D" + rowNum);
- row.createCell(5).setCellValue(javaDateFormatPattern);
- row.createCell(6).setCellValue(excelFormatPattern);
+ cell[4].setCellFormula("TEXT(C" + rowNum + ",G" + rowNum + ")=D" + rowNum);
+ cell[5].setCellValue(javaDateFormatPattern);
+ cell[6].setCellValue(excelFormatPattern);
}
- workbook.write(new NullOutputStream());
+ assertDoesNotThrow(() -> workbook.write(new NullOutputStream()));
}
}
@@ -125,7 +130,7 @@ final class TestDateFormatConverter {
void testJDK8EmptyLocale() {
// JDK 8 seems to add an empty locale-string to the list returned via DateFormat.getAvailableLocales()
// therefore we now cater for this special locale as well
- String prefix = DateFormatConverter.getPrefixForLocale(new Locale(""));
+ String prefix = getPrefixForLocale(new Locale(""));
assertEquals("", prefix);
}
@@ -163,7 +168,7 @@ final class TestDateFormatConverter {
continue;
}
- String prefix = DateFormatConverter.getPrefixForLocale(loc);
+ String prefix = getPrefixForLocale(loc);
assertNotNull(prefix, "Prefix not found - language tag: "+partTag);
assertNotEquals("", prefix, "Prefix not found - language tag: "+partTag);
Matcher m = p.matcher(prefix);