diff options
author | Andreas Beeker <kiwiwings@apache.org> | 2021-03-27 14:03:16 +0000 |
---|---|---|
committer | Andreas Beeker <kiwiwings@apache.org> | 2021-03-27 14:03:16 +0000 |
commit | 37791e4bdfc706aa5684745594260f243b4be7ee (patch) | |
tree | a8dd8d0976fc478074d52cd3de79e0e6b5e6a33a /src/testcases/org/apache/poi/ss/usermodel/BaseTestConditionalFormatting.java | |
parent | 2bb3839bfe3e3bacff79f8157465633e311239ce (diff) | |
download | poi-37791e4bdfc706aa5684745594260f243b4be7ee.tar.gz poi-37791e4bdfc706aa5684745594260f243b4be7ee.zip |
65206 - Migrate ant / maven to gradle build
update gradle files and project structure along https://github.com/centic9/poi/tree/gradle_build
remove eclipse IDE project files
remove obsolete record generator files
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1888111 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'src/testcases/org/apache/poi/ss/usermodel/BaseTestConditionalFormatting.java')
-rw-r--r-- | src/testcases/org/apache/poi/ss/usermodel/BaseTestConditionalFormatting.java | 1385 |
1 files changed, 0 insertions, 1385 deletions
diff --git a/src/testcases/org/apache/poi/ss/usermodel/BaseTestConditionalFormatting.java b/src/testcases/org/apache/poi/ss/usermodel/BaseTestConditionalFormatting.java deleted file mode 100644 index 4d3954fa78..0000000000 --- a/src/testcases/org/apache/poi/ss/usermodel/BaseTestConditionalFormatting.java +++ /dev/null @@ -1,1385 +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.ss.usermodel; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertNotNull; -import static org.junit.jupiter.api.Assertions.assertNull; -import static org.junit.jupiter.api.Assertions.assertThrows; -import static org.junit.jupiter.api.Assertions.assertTrue; - -import java.io.IOException; - -import org.apache.poi.hssf.usermodel.HSSFConditionalFormatting; -import org.apache.poi.hssf.usermodel.HSSFConditionalFormattingRule; -import org.apache.poi.ss.ITestDataProvider; -import org.apache.poi.ss.usermodel.ConditionalFormattingThreshold.RangeType; -import org.apache.poi.ss.usermodel.IconMultiStateFormatting.IconSet; -import org.apache.poi.ss.util.CellRangeAddress; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.function.Executable; - -/** - * Base tests for Conditional Formatting, for both HSSF and XSSF - */ -public abstract class BaseTestConditionalFormatting { - private final ITestDataProvider _testDataProvider; - - protected BaseTestConditionalFormatting(ITestDataProvider testDataProvider) { - _testDataProvider = testDataProvider; - } - - protected boolean applyLimitOf3() { - return true; - } - - protected abstract void assertColor(String hexExpected, Color actual); - - @Test - void testBasic() throws Throwable { - try (Workbook wb = _testDataProvider.createWorkbook()) { - Sheet sh = wb.createSheet(); - SheetConditionalFormatting sheetCF = sh.getSheetConditionalFormatting(); - - assertEquals(0, sheetCF.getNumConditionalFormattings()); - IllegalArgumentException e = assertThrows(IllegalArgumentException.class, () -> sheetCF.getConditionalFormattingAt(0)); - assertTrue(e.getMessage().startsWith("Specified CF index 0 is outside the allowable range")); - - e = assertThrows(IllegalArgumentException.class, () -> sheetCF.removeConditionalFormatting(0)); - assertTrue(e.getMessage().startsWith("Specified CF index 0 is outside the allowable range")); - - ConditionalFormattingRule rule1 = sheetCF.createConditionalFormattingRule("1"); - ConditionalFormattingRule rule2 = sheetCF.createConditionalFormattingRule("2"); - ConditionalFormattingRule rule3 = sheetCF.createConditionalFormattingRule("3"); - ConditionalFormattingRule rule4 = sheetCF.createConditionalFormattingRule("4"); - - e = assertThrows(IllegalArgumentException.class, () -> sheetCF.addConditionalFormatting(null, rule1)); - assertTrue(e.getMessage().startsWith("regions must not be null")); - - e = assertThrows(IllegalArgumentException.class, () -> sheetCF.addConditionalFormatting( - new CellRangeAddress[]{CellRangeAddress.valueOf("A1:A3")}, (ConditionalFormattingRule) null)); - assertTrue(e.getMessage().startsWith("cfRules must not be null")); - - e = assertThrows(IllegalArgumentException.class, () -> sheetCF.addConditionalFormatting( - new CellRangeAddress[]{CellRangeAddress.valueOf("A1:A3")}, new ConditionalFormattingRule[0])); - assertTrue(e.getMessage().startsWith("cfRules must not be empty")); - - Executable exec = () -> - sheetCF.addConditionalFormatting( - new CellRangeAddress[]{CellRangeAddress.valueOf("A1:A3")}, - new ConditionalFormattingRule[]{rule1, rule2, rule3, rule4}); - - if (applyLimitOf3()) { - e = assertThrows(IllegalArgumentException.class, exec); - assertTrue(e.getMessage().startsWith("Number of rules must not exceed 3")); - } else { - exec.execute(); - } - } - } - - /** - * Test format conditions based on a boolean formula - */ - @Test - void testBooleanFormulaConditions() throws IOException { - try (Workbook wb = _testDataProvider.createWorkbook()) { - Sheet sh = wb.createSheet(); - SheetConditionalFormatting sheetCF = sh.getSheetConditionalFormatting(); - - ConditionalFormattingRule rule1 = sheetCF.createConditionalFormattingRule("SUM(A1:A5)>10"); - assertEquals(ConditionType.FORMULA, rule1.getConditionType()); - assertEquals("SUM(A1:A5)>10", rule1.getFormula1()); - int formatIndex1 = sheetCF.addConditionalFormatting( - new CellRangeAddress[]{ - CellRangeAddress.valueOf("B1"), - CellRangeAddress.valueOf("C3"), - }, rule1); - assertEquals(0, formatIndex1); - assertEquals(1, sheetCF.getNumConditionalFormattings()); - CellRangeAddress[] ranges1 = sheetCF.getConditionalFormattingAt(formatIndex1).getFormattingRanges(); - assertEquals(2, ranges1.length); - assertEquals("B1", ranges1[0].formatAsString()); - assertEquals("C3", ranges1[1].formatAsString()); - - // adjacent address are merged - int formatIndex2 = sheetCF.addConditionalFormatting( - new CellRangeAddress[]{ - CellRangeAddress.valueOf("B1"), - CellRangeAddress.valueOf("B2"), - CellRangeAddress.valueOf("B3"), - }, rule1); - assertEquals(1, formatIndex2); - assertEquals(2, sheetCF.getNumConditionalFormattings()); - CellRangeAddress[] ranges2 = sheetCF.getConditionalFormattingAt(formatIndex2).getFormattingRanges(); - assertEquals(1, ranges2.length); - assertEquals("B1:B3", ranges2[0].formatAsString()); - } - } - - @Test - void testSingleFormulaConditions() throws IOException { - try (Workbook wb = _testDataProvider.createWorkbook()) { - Sheet sh = wb.createSheet(); - SheetConditionalFormatting sheetCF = sh.getSheetConditionalFormatting(); - - ConditionalFormattingRule rule1 = sheetCF.createConditionalFormattingRule( - ComparisonOperator.EQUAL, "SUM(A1:A5)+10"); - assertEquals(ConditionType.CELL_VALUE_IS, rule1.getConditionType()); - assertEquals("SUM(A1:A5)+10", rule1.getFormula1()); - assertEquals(ComparisonOperator.EQUAL, rule1.getComparisonOperation()); - - ConditionalFormattingRule rule2 = sheetCF.createConditionalFormattingRule( - ComparisonOperator.NOT_EQUAL, "15"); - assertEquals(ConditionType.CELL_VALUE_IS, rule2.getConditionType()); - assertEquals("15", rule2.getFormula1()); - assertEquals(ComparisonOperator.NOT_EQUAL, rule2.getComparisonOperation()); - - ConditionalFormattingRule rule3 = sheetCF.createConditionalFormattingRule( - ComparisonOperator.NOT_EQUAL, "15"); - assertEquals(ConditionType.CELL_VALUE_IS, rule3.getConditionType()); - assertEquals("15", rule3.getFormula1()); - assertEquals(ComparisonOperator.NOT_EQUAL, rule3.getComparisonOperation()); - - ConditionalFormattingRule rule4 = sheetCF.createConditionalFormattingRule( - ComparisonOperator.GT, "0"); - assertEquals(ConditionType.CELL_VALUE_IS, rule4.getConditionType()); - assertEquals("0", rule4.getFormula1()); - assertEquals(ComparisonOperator.GT, rule4.getComparisonOperation()); - - ConditionalFormattingRule rule5 = sheetCF.createConditionalFormattingRule( - ComparisonOperator.LT, "0"); - assertEquals(ConditionType.CELL_VALUE_IS, rule5.getConditionType()); - assertEquals("0", rule5.getFormula1()); - assertEquals(ComparisonOperator.LT, rule5.getComparisonOperation()); - - ConditionalFormattingRule rule6 = sheetCF.createConditionalFormattingRule( - ComparisonOperator.GE, "0"); - assertEquals(ConditionType.CELL_VALUE_IS, rule6.getConditionType()); - assertEquals("0", rule6.getFormula1()); - assertEquals(ComparisonOperator.GE, rule6.getComparisonOperation()); - - ConditionalFormattingRule rule7 = sheetCF.createConditionalFormattingRule( - ComparisonOperator.LE, "0"); - assertEquals(ConditionType.CELL_VALUE_IS, rule7.getConditionType()); - assertEquals("0", rule7.getFormula1()); - assertEquals(ComparisonOperator.LE, rule7.getComparisonOperation()); - - ConditionalFormattingRule rule8 = sheetCF.createConditionalFormattingRule( - ComparisonOperator.BETWEEN, "0", "5"); - assertEquals(ConditionType.CELL_VALUE_IS, rule8.getConditionType()); - assertEquals("0", rule8.getFormula1()); - assertEquals("5", rule8.getFormula2()); - assertEquals(ComparisonOperator.BETWEEN, rule8.getComparisonOperation()); - - ConditionalFormattingRule rule9 = sheetCF.createConditionalFormattingRule( - ComparisonOperator.NOT_BETWEEN, "0", "5"); - assertEquals(ConditionType.CELL_VALUE_IS, rule9.getConditionType()); - assertEquals("0", rule9.getFormula1()); - assertEquals("5", rule9.getFormula2()); - assertEquals(ComparisonOperator.NOT_BETWEEN, rule9.getComparisonOperation()); - } - } - - @Test - void testCopy() throws IOException { - try (Workbook wb = _testDataProvider.createWorkbook()) { - Sheet sheet1 = wb.createSheet(); - Sheet sheet2 = wb.createSheet(); - SheetConditionalFormatting sheet1CF = sheet1.getSheetConditionalFormatting(); - SheetConditionalFormatting sheet2CF = sheet2.getSheetConditionalFormatting(); - assertEquals(0, sheet1CF.getNumConditionalFormattings()); - assertEquals(0, sheet2CF.getNumConditionalFormattings()); - - ConditionalFormattingRule rule1 = sheet1CF.createConditionalFormattingRule( - ComparisonOperator.EQUAL, "SUM(A1:A5)+10"); - - ConditionalFormattingRule rule2 = sheet1CF.createConditionalFormattingRule( - ComparisonOperator.NOT_EQUAL, "15"); - - // adjacent address are merged - int formatIndex = sheet1CF.addConditionalFormatting( - new CellRangeAddress[]{ - CellRangeAddress.valueOf("A1:A5"), - CellRangeAddress.valueOf("C1:C5") - }, rule1, rule2); - assertEquals(0, formatIndex); - assertEquals(1, sheet1CF.getNumConditionalFormattings()); - - assertEquals(0, sheet2CF.getNumConditionalFormattings()); - sheet2CF.addConditionalFormatting(sheet1CF.getConditionalFormattingAt(formatIndex)); - assertEquals(1, sheet2CF.getNumConditionalFormattings()); - - ConditionalFormatting sheet2cf = sheet2CF.getConditionalFormattingAt(0); - assertEquals(2, sheet2cf.getNumberOfRules()); - assertEquals("SUM(A1:A5)+10", sheet2cf.getRule(0).getFormula1()); - assertEquals(ComparisonOperator.EQUAL, sheet2cf.getRule(0).getComparisonOperation()); - assertEquals(ConditionType.CELL_VALUE_IS, sheet2cf.getRule(0).getConditionType()); - assertEquals("15", sheet2cf.getRule(1).getFormula1()); - assertEquals(ComparisonOperator.NOT_EQUAL, sheet2cf.getRule(1).getComparisonOperation()); - assertEquals(ConditionType.CELL_VALUE_IS, sheet2cf.getRule(1).getConditionType()); - } - } - - @Test - void testRemove() throws IOException { - try (Workbook wb = _testDataProvider.createWorkbook()) { - Sheet sheet1 = wb.createSheet(); - SheetConditionalFormatting sheetCF = sheet1.getSheetConditionalFormatting(); - assertEquals(0, sheetCF.getNumConditionalFormattings()); - - ConditionalFormattingRule rule1 = sheetCF.createConditionalFormattingRule( - ComparisonOperator.EQUAL, "SUM(A1:A5)"); - - // adjacent address are merged - int formatIndex = sheetCF.addConditionalFormatting( - new CellRangeAddress[]{CellRangeAddress.valueOf("A1:A5")}, rule1); - assertEquals(0, formatIndex); - assertEquals(1, sheetCF.getNumConditionalFormattings()); - sheetCF.removeConditionalFormatting(0); - assertEquals(0, sheetCF.getNumConditionalFormattings()); - - IllegalArgumentException e; - e = assertThrows(IllegalArgumentException.class, () -> sheetCF.getConditionalFormattingAt(0)); - assertTrue(e.getMessage().startsWith("Specified CF index 0 is outside the allowable range")); - - formatIndex = sheetCF.addConditionalFormatting( - new CellRangeAddress[]{CellRangeAddress.valueOf("A1:A5")}, rule1); - assertEquals(0, formatIndex); - assertEquals(1, sheetCF.getNumConditionalFormattings()); - sheetCF.removeConditionalFormatting(0); - assertEquals(0, sheetCF.getNumConditionalFormattings()); - - e = assertThrows(IllegalArgumentException.class, () -> sheetCF.getConditionalFormattingAt(0)); - assertTrue(e.getMessage().startsWith("Specified CF index 0 is outside the allowable range")); - } - } - - @Test - void testCreateCF() throws IOException { - try (Workbook workbook = _testDataProvider.createWorkbook()) { - Sheet sheet = workbook.createSheet(); - String formula = "7"; - - SheetConditionalFormatting sheetCF = sheet.getSheetConditionalFormatting(); - - ConditionalFormattingRule rule1 = sheetCF.createConditionalFormattingRule(formula); - FontFormatting fontFmt = rule1.createFontFormatting(); - fontFmt.setFontStyle(true, false); - - BorderFormatting bordFmt = rule1.createBorderFormatting(); - bordFmt.setBorderBottom(BorderStyle.THIN); - bordFmt.setBorderTop(BorderStyle.THICK); - bordFmt.setBorderLeft(BorderStyle.DASHED); - bordFmt.setBorderRight(BorderStyle.DOTTED); - - PatternFormatting patternFmt = rule1.createPatternFormatting(); - patternFmt.setFillBackgroundColor(IndexedColors.YELLOW.index); - - - ConditionalFormattingRule rule2 = sheetCF.createConditionalFormattingRule(ComparisonOperator.BETWEEN, "1", "2"); - ConditionalFormattingRule[] cfRules = {rule1, rule2}; - - short col = 1; - CellRangeAddress[] regions = { - new CellRangeAddress(0, 65535, col, col) - }; - - sheetCF.addConditionalFormatting(regions, cfRules); - sheetCF.addConditionalFormatting(regions, cfRules); - - // Verification - assertEquals(2, sheetCF.getNumConditionalFormattings()); - sheetCF.removeConditionalFormatting(1); - assertEquals(1, sheetCF.getNumConditionalFormattings()); - ConditionalFormatting cf = sheetCF.getConditionalFormattingAt(0); - assertNotNull(cf); - - regions = cf.getFormattingRanges(); - assertNotNull(regions); - assertEquals(1, regions.length); - CellRangeAddress r = regions[0]; - assertEquals(1, r.getFirstColumn()); - assertEquals(1, r.getLastColumn()); - assertEquals(0, r.getFirstRow()); - assertEquals(65535, r.getLastRow()); - - assertEquals(2, cf.getNumberOfRules()); - - rule1 = cf.getRule(0); - assertEquals("7", rule1.getFormula1()); - assertNull(rule1.getFormula2()); - - FontFormatting r1fp = rule1.getFontFormatting(); - assertNotNull(r1fp); - - assertTrue(r1fp.isItalic()); - assertFalse(r1fp.isBold()); - - BorderFormatting r1bf = rule1.getBorderFormatting(); - assertNotNull(r1bf); - assertEquals(BorderStyle.THIN, r1bf.getBorderBottom()); - assertEquals(BorderStyle.THICK, r1bf.getBorderTop()); - assertEquals(BorderStyle.DASHED, r1bf.getBorderLeft()); - assertEquals(BorderStyle.DOTTED, r1bf.getBorderRight()); - - PatternFormatting r1pf = rule1.getPatternFormatting(); - assertNotNull(r1pf); -// assertEquals(IndexedColors.YELLOW.index,r1pf.getFillBackgroundColor()); - - rule2 = cf.getRule(1); - assertEquals("2", rule2.getFormula2()); - assertEquals("1", rule2.getFormula1()); - } - } - - @Test - void testClone() throws IOException { - try (Workbook wb = _testDataProvider.createWorkbook()) { - Sheet sheet = wb.createSheet(); - String formula = "7"; - - SheetConditionalFormatting sheetCF = sheet.getSheetConditionalFormatting(); - - ConditionalFormattingRule rule1 = sheetCF.createConditionalFormattingRule(formula); - FontFormatting fontFmt = rule1.createFontFormatting(); - fontFmt.setFontStyle(true, false); - - PatternFormatting patternFmt = rule1.createPatternFormatting(); - patternFmt.setFillBackgroundColor(IndexedColors.YELLOW.index); - - - ConditionalFormattingRule rule2 = sheetCF.createConditionalFormattingRule(ComparisonOperator.BETWEEN, "1", "2"); - ConditionalFormattingRule[] cfRules = {rule1, rule2}; - - short col = 1; - CellRangeAddress[] regions = { - new CellRangeAddress(0, 65535, col, col) - }; - - sheetCF.addConditionalFormatting(regions, cfRules); - - wb.cloneSheet(0); - assertEquals(2, wb.getNumberOfSheets()); - // bug 45682 leads to runtime exception "needs to define a clone method" - } - } - - @Test - void testShiftRows() throws IOException { - try (Workbook wb = _testDataProvider.createWorkbook()) { - Sheet sheet = wb.createSheet(); - - SheetConditionalFormatting sheetCF = sheet.getSheetConditionalFormatting(); - - ConditionalFormattingRule rule1 = sheetCF.createConditionalFormattingRule( - ComparisonOperator.BETWEEN, "SUM(A10:A15)", "1+SUM(B16:B30)"); - FontFormatting fontFmt = rule1.createFontFormatting(); - fontFmt.setFontStyle(true, false); - - PatternFormatting patternFmt = rule1.createPatternFormatting(); - patternFmt.setFillBackgroundColor(IndexedColors.YELLOW.index); - - ConditionalFormattingRule rule2 = sheetCF.createConditionalFormattingRule( - ComparisonOperator.BETWEEN, "SUM(A10:A15)", "1+SUM(B16:B30)"); - BorderFormatting borderFmt = rule2.createBorderFormatting(); - borderFmt.setBorderDiagonal(BorderStyle.MEDIUM); - - CellRangeAddress[] regions = { - new CellRangeAddress(2, 4, 0, 0), // A3:A5 - }; - sheetCF.addConditionalFormatting(regions, rule1); - sheetCF.addConditionalFormatting(regions, rule2); - - // This row-shift should destroy the CF region - sheet.shiftRows(10, 20, -9); - assertEquals(0, sheetCF.getNumConditionalFormattings()); - - // re-add the CF - sheetCF.addConditionalFormatting(regions, rule1); - sheetCF.addConditionalFormatting(regions, rule2); - - // This row shift should only affect the formulas - sheet.shiftRows(14, 17, 8); - ConditionalFormatting cf1 = sheetCF.getConditionalFormattingAt(0); - assertEquals("SUM(A10:A23)", cf1.getRule(0).getFormula1()); - assertEquals("1+SUM(B24:B30)", cf1.getRule(0).getFormula2()); - ConditionalFormatting cf2 = sheetCF.getConditionalFormattingAt(1); - assertEquals("SUM(A10:A23)", cf2.getRule(0).getFormula1()); - assertEquals("1+SUM(B24:B30)", cf2.getRule(0).getFormula2()); - - sheet.shiftRows(0, 8, 21); - cf1 = sheetCF.getConditionalFormattingAt(0); - assertEquals("SUM(A10:A21)", cf1.getRule(0).getFormula1()); - assertEquals("1+SUM(#REF!)", cf1.getRule(0).getFormula2()); - cf2 = sheetCF.getConditionalFormattingAt(1); - assertEquals("SUM(A10:A21)", cf2.getRule(0).getFormula1()); - assertEquals("1+SUM(#REF!)", cf2.getRule(0).getFormula2()); - } - } - - protected void testRead(String filename) throws IOException { - try (Workbook wb = _testDataProvider.openSampleWorkbook(filename)) { - Sheet sh = wb.getSheet("CF"); - SheetConditionalFormatting sheetCF = sh.getSheetConditionalFormatting(); - assertEquals(3, sheetCF.getNumConditionalFormattings()); - - ConditionalFormatting cf1 = sheetCF.getConditionalFormattingAt(0); - assertEquals(2, cf1.getNumberOfRules()); - - CellRangeAddress[] regions1 = cf1.getFormattingRanges(); - assertEquals(1, regions1.length); - assertEquals("A1:A8", regions1[0].formatAsString()); - - // CF1 has two rules: values less than -3 are bold-italic red, values greater than 3 are green - ConditionalFormattingRule rule1 = cf1.getRule(0); - assertEquals(ConditionType.CELL_VALUE_IS, rule1.getConditionType()); - assertEquals(ComparisonOperator.GT, rule1.getComparisonOperation()); - assertEquals("3", rule1.getFormula1()); - assertNull(rule1.getFormula2()); - // fills and borders are not set - assertNull(rule1.getPatternFormatting()); - assertNull(rule1.getBorderFormatting()); - - FontFormatting fmt1 = rule1.getFontFormatting(); -// assertEquals(IndexedColors.GREEN.index, fmt1.getFontColorIndex()); - assertTrue(fmt1.isBold()); - assertFalse(fmt1.isItalic()); - - ConditionalFormattingRule rule2 = cf1.getRule(1); - assertEquals(ConditionType.CELL_VALUE_IS, rule2.getConditionType()); - assertEquals(ComparisonOperator.LT, rule2.getComparisonOperation()); - assertEquals("-3", rule2.getFormula1()); - assertNull(rule2.getFormula2()); - assertNull(rule2.getPatternFormatting()); - assertNull(rule2.getBorderFormatting()); - - FontFormatting fmt2 = rule2.getFontFormatting(); -// assertEquals(IndexedColors.RED.index, fmt2.getFontColorIndex()); - assertTrue(fmt2.isBold()); - assertTrue(fmt2.isItalic()); - - - ConditionalFormatting cf2 = sheetCF.getConditionalFormattingAt(1); - assertEquals(1, cf2.getNumberOfRules()); - CellRangeAddress[] regions2 = cf2.getFormattingRanges(); - assertEquals(1, regions2.length); - assertEquals("B9", regions2[0].formatAsString()); - - ConditionalFormattingRule rule3 = cf2.getRule(0); - assertEquals(ConditionType.FORMULA, rule3.getConditionType()); - assertEquals(ComparisonOperator.NO_COMPARISON, rule3.getComparisonOperation()); - assertEquals("$A$8>5", rule3.getFormula1()); - assertNull(rule3.getFormula2()); - - FontFormatting fmt3 = rule3.getFontFormatting(); -// assertEquals(IndexedColors.RED.index, fmt3.getFontColorIndex()); - assertTrue(fmt3.isBold()); - assertTrue(fmt3.isItalic()); - - PatternFormatting fmt4 = rule3.getPatternFormatting(); -// assertEquals(IndexedColors.LIGHT_CORNFLOWER_BLUE.index, fmt4.getFillBackgroundColor()); -// assertEquals(IndexedColors.AUTOMATIC.index, fmt4.getFillForegroundColor()); - assertEquals(PatternFormatting.NO_FILL, fmt4.getFillPattern()); - // borders are not set - assertNull(rule3.getBorderFormatting()); - - ConditionalFormatting cf3 = sheetCF.getConditionalFormattingAt(2); - CellRangeAddress[] regions3 = cf3.getFormattingRanges(); - assertEquals(1, regions3.length); - assertEquals("B1:B7", regions3[0].formatAsString()); - assertEquals(2, cf3.getNumberOfRules()); - - ConditionalFormattingRule rule4 = cf3.getRule(0); - assertEquals(ConditionType.CELL_VALUE_IS, rule4.getConditionType()); - assertEquals(ComparisonOperator.LE, rule4.getComparisonOperation()); - assertEquals("\"AAA\"", rule4.getFormula1()); - assertNull(rule4.getFormula2()); - - ConditionalFormattingRule rule5 = cf3.getRule(1); - assertEquals(ConditionType.CELL_VALUE_IS, rule5.getConditionType()); - assertEquals(ComparisonOperator.BETWEEN, rule5.getComparisonOperation()); - assertEquals("\"A\"", rule5.getFormula1()); - assertEquals("\"AAA\"", rule5.getFormula2()); - } - } - - protected void testReadOffice2007(String filename) throws IOException { - try (Workbook wb = _testDataProvider.openSampleWorkbook(filename)) { - Sheet s = wb.getSheet("CF"); - - // Sanity check data - assertEquals("Values", s.getRow(0).getCell(0).toString()); - assertEquals("10.0", s.getRow(2).getCell(0).toString()); - - // Check we found all the conditional formatting rules we should have - SheetConditionalFormatting sheetCF = s.getSheetConditionalFormatting(); - int numCF = 3; - int numCF12 = 15; - int numCFEX = 0; // TODO This should be 2, but we don't support CFEX formattings yet, see #58149 - assertEquals(numCF + numCF12 + numCFEX, sheetCF.getNumConditionalFormattings()); - - int fCF = 0, fCF12 = 0, fCFEX = 0; - for (int i = 0; i < sheetCF.getNumConditionalFormattings(); i++) { - ConditionalFormatting cf = sheetCF.getConditionalFormattingAt(i); - if (cf instanceof HSSFConditionalFormatting) { - String str = cf.toString(); - if (str.contains("/* CF_RULE */")) fCF++; - if (str.contains("/* CF_RULE_12 */")) fCF12++; - if (str.contains("[CFEX]")) fCFEX++; - } else { - ConditionType type = cf.getRule(cf.getNumberOfRules() - 1).getConditionType(); - if (type == ConditionType.CELL_VALUE_IS || - type == ConditionType.FORMULA) { - fCF++; - } else { - // TODO Properly detect Ext ones from the xml - fCF12++; - } - } - } - assertEquals(numCF, fCF); - assertEquals(numCF12, fCF12); - assertEquals(numCFEX, fCFEX); - - - // Check the rules / values in detail - - - // Highlight Positive values - Column C - ConditionalFormatting cf = sheetCF.getConditionalFormattingAt(0); - assertEquals(1, cf.getFormattingRanges().length); - assertEquals("C2:C17", cf.getFormattingRanges()[0].formatAsString()); - - assertEquals(1, cf.getNumberOfRules()); - ConditionalFormattingRule cr = cf.getRule(0); - assertEquals(ConditionType.CELL_VALUE_IS, cr.getConditionType()); - assertEquals(ComparisonOperator.GT, cr.getComparisonOperation()); - assertEquals("0", cr.getFormula1()); - assertNull(cr.getFormula2()); - // When it matches: - // Sets the font colour to dark green - // Sets the background colour to lighter green - // TODO Should the colours be slightly different between formats? Would CFEX support help for HSSF? - if (cr instanceof HSSFConditionalFormattingRule) { - assertColor("0:8080:0", cr.getFontFormatting().getFontColor()); - assertColor("CCCC:FFFF:CCCC", cr.getPatternFormatting().getFillBackgroundColorColor()); - } else { - assertColor("006100", cr.getFontFormatting().getFontColor()); - assertColor("C6EFCE", cr.getPatternFormatting().getFillBackgroundColorColor()); - } - - - // Highlight 10-30 - Column D - cf = sheetCF.getConditionalFormattingAt(1); - assertEquals(1, cf.getFormattingRanges().length); - assertEquals("D2:D17", cf.getFormattingRanges()[0].formatAsString()); - - assertEquals(1, cf.getNumberOfRules()); - cr = cf.getRule(0); - assertEquals(ConditionType.CELL_VALUE_IS, cr.getConditionType()); - assertEquals(ComparisonOperator.BETWEEN, cr.getComparisonOperation()); - assertEquals("10", cr.getFormula1()); - assertEquals("30", cr.getFormula2()); - // When it matches: - // Sets the font colour to dark red - // Sets the background colour to lighter red - // TODO Should the colours be slightly different between formats? Would CFEX support help for HSSF? - if (cr instanceof HSSFConditionalFormattingRule) { - assertColor("8080:0:8080", cr.getFontFormatting().getFontColor()); - assertColor("FFFF:9999:CCCC", cr.getPatternFormatting().getFillBackgroundColorColor()); - } else { - assertColor("9C0006", cr.getFontFormatting().getFontColor()); - assertColor("FFC7CE", cr.getPatternFormatting().getFillBackgroundColorColor()); - } - - - // Data Bars - Column E - cf = sheetCF.getConditionalFormattingAt(2); - assertEquals(1, cf.getFormattingRanges().length); - assertEquals("E2:E17", cf.getFormattingRanges()[0].formatAsString()); - assertDataBar(cf, "FF63C384"); - - - // Colours Red->Yellow->Green - Column F - cf = sheetCF.getConditionalFormattingAt(3); - assertEquals(1, cf.getFormattingRanges().length); - assertEquals("F2:F17", cf.getFormattingRanges()[0].formatAsString()); - assertColorScale(cf, "F8696B", "FFEB84", "63BE7B"); - - - // Colours Blue->White->Red - Column G - cf = sheetCF.getConditionalFormattingAt(4); - assertEquals(1, cf.getFormattingRanges().length); - assertEquals("G2:G17", cf.getFormattingRanges()[0].formatAsString()); - assertColorScale(cf, "5A8AC6", "FCFCFF", "F8696B"); - - - // Icons : Default - Column H, percentage thresholds - cf = sheetCF.getConditionalFormattingAt(5); - assertEquals(1, cf.getFormattingRanges().length); - assertEquals("H2:H17", cf.getFormattingRanges()[0].formatAsString()); - assertIconSetPercentages(cf, IconSet.GYR_3_TRAFFIC_LIGHTS, 0d, 33d, 67d); - - - // Icons : 3 signs - Column I - cf = sheetCF.getConditionalFormattingAt(6); - assertEquals(1, cf.getFormattingRanges().length); - assertEquals("I2:I17", cf.getFormattingRanges()[0].formatAsString()); - assertIconSetPercentages(cf, IconSet.GYR_3_SHAPES, 0d, 33d, 67d); - - - // Icons : 3 traffic lights 2 - Column J - cf = sheetCF.getConditionalFormattingAt(7); - assertEquals(1, cf.getFormattingRanges().length); - assertEquals("J2:J17", cf.getFormattingRanges()[0].formatAsString()); - assertIconSetPercentages(cf, IconSet.GYR_3_TRAFFIC_LIGHTS_BOX, 0d, 33d, 67d); - - - // Icons : 4 traffic lights - Column K - cf = sheetCF.getConditionalFormattingAt(8); - assertEquals(1, cf.getFormattingRanges().length); - assertEquals("K2:K17", cf.getFormattingRanges()[0].formatAsString()); - assertIconSetPercentages(cf, IconSet.GYRB_4_TRAFFIC_LIGHTS, 0d, 25d, 50d, 75d); - - - // Icons : 3 symbols with backgrounds - Column L - cf = sheetCF.getConditionalFormattingAt(9); - assertEquals(1, cf.getFormattingRanges().length); - assertEquals("L2:L17", cf.getFormattingRanges()[0].formatAsString()); - assertIconSetPercentages(cf, IconSet.GYR_3_SYMBOLS_CIRCLE, 0d, 33d, 67d); - - - // Icons : 3 flags - Column M2 Only - cf = sheetCF.getConditionalFormattingAt(10); - assertEquals(1, cf.getFormattingRanges().length); - assertEquals("M2", cf.getFormattingRanges()[0].formatAsString()); - assertIconSetPercentages(cf, IconSet.GYR_3_FLAGS, 0d, 33d, 67d); - - // Icons : 3 flags - Column M (all) - cf = sheetCF.getConditionalFormattingAt(11); - assertEquals(1, cf.getFormattingRanges().length); - assertEquals("M2:M17", cf.getFormattingRanges()[0].formatAsString()); - assertIconSetPercentages(cf, IconSet.GYR_3_FLAGS, 0d, 33d, 67d); - - - // Icons : 3 symbols 2 (no background) - Column N - cf = sheetCF.getConditionalFormattingAt(12); - assertEquals(1, cf.getFormattingRanges().length); - assertEquals("N2:N17", cf.getFormattingRanges()[0].formatAsString()); - assertIconSetPercentages(cf, IconSet.GYR_3_SYMBOLS, 0d, 33d, 67d); - - - // Icons : 3 arrows - Column O - cf = sheetCF.getConditionalFormattingAt(13); - assertEquals(1, cf.getFormattingRanges().length); - assertEquals("O2:O17", cf.getFormattingRanges()[0].formatAsString()); - assertIconSetPercentages(cf, IconSet.GYR_3_ARROW, 0d, 33d, 67d); - - - // Icons : 5 arrows grey - Column P - cf = sheetCF.getConditionalFormattingAt(14); - assertEquals(1, cf.getFormattingRanges().length); - assertEquals("P2:P17", cf.getFormattingRanges()[0].formatAsString()); - assertIconSetPercentages(cf, IconSet.GREY_5_ARROWS, 0d, 20d, 40d, 60d, 80d); - - - // Icons : 3 stars (ext) - Column Q - // TODO Support EXT formattings - - - // Icons : 4 ratings - Column R - cf = sheetCF.getConditionalFormattingAt(15); - assertEquals(1, cf.getFormattingRanges().length); - assertEquals("R2:R17", cf.getFormattingRanges()[0].formatAsString()); - assertIconSetPercentages(cf, IconSet.RATINGS_4, 0d, 25d, 50d, 75d); - - - // Icons : 5 ratings - Column S - cf = sheetCF.getConditionalFormattingAt(16); - assertEquals(1, cf.getFormattingRanges().length); - assertEquals("S2:S17", cf.getFormattingRanges()[0].formatAsString()); - assertIconSetPercentages(cf, IconSet.RATINGS_5, 0d, 20d, 40d, 60d, 80d); - - - // Custom Icon+Format - Column T - cf = sheetCF.getConditionalFormattingAt(17); - assertEquals(1, cf.getFormattingRanges().length); - assertEquals("T2:T17", cf.getFormattingRanges()[0].formatAsString()); - - // TODO Support IconSet + Other CFs with 2 rules -// assertEquals(2, cf.getNumberOfRules()); -// cr = cf.getRule(0); -// assertIconSetPercentages(cr, IconSet.GYR_3_TRAFFIC_LIGHTS_BOX, 0d, 33d, 67d); -// cr = cf.getRule(1); -// assertEquals(ConditionType.FORMULA, cr.getConditionType()); -// assertEquals(ComparisonOperator.NO_COMPARISON, cr.getComparisonOperation()); -// // TODO Why aren't these two the same between formats? -// if (cr instanceof HSSFConditionalFormattingRule) { -// assertEquals("MOD(ROW($T1),2)=1", cr.getFormula1()); -// } else { -// assertEquals("MOD(ROW($T2),2)=1", cr.getFormula1()); -// } -// assertEquals(null, cr.getFormula2()); - - - // Mixed icons - Column U - // TODO Support EXT formattings - - } - } - - @SuppressWarnings("SameParameterValue") - private void assertDataBar(ConditionalFormatting cf, String color) { - assertEquals(1, cf.getNumberOfRules()); - ConditionalFormattingRule cr = cf.getRule(0); - assertDataBar(cr, color); - } - - private void assertDataBar(ConditionalFormattingRule cr, String color) { - assertEquals(ConditionType.DATA_BAR, cr.getConditionType()); - assertEquals(ComparisonOperator.NO_COMPARISON, cr.getComparisonOperation()); - assertNull(cr.getFormula1()); - assertNull(cr.getFormula2()); - - DataBarFormatting databar = cr.getDataBarFormatting(); - assertNotNull(databar); - assertFalse(databar.isIconOnly()); - assertTrue(databar.isLeftToRight()); - assertEquals(0, databar.getWidthMin()); - assertEquals(100, databar.getWidthMax()); - - assertColor(color, databar.getColor()); - - ConditionalFormattingThreshold th; - th = databar.getMinThreshold(); - assertEquals(RangeType.MIN, th.getRangeType()); - assertNull(th.getValue()); - assertNull(th.getFormula()); - th = databar.getMaxThreshold(); - assertEquals(RangeType.MAX, th.getRangeType()); - assertNull(th.getValue()); - assertNull(th.getFormula()); - } - - private void assertIconSetPercentages(ConditionalFormatting cf, IconSet iconset, Double...vals) { - assertEquals(1, cf.getNumberOfRules()); - ConditionalFormattingRule cr = cf.getRule(0); - assertIconSetPercentages(cr, iconset, vals); - } - - private void assertIconSetPercentages(ConditionalFormattingRule cr, IconSet iconset, Double...vals) { - assertEquals(ConditionType.ICON_SET, cr.getConditionType()); - assertEquals(ComparisonOperator.NO_COMPARISON, cr.getComparisonOperation()); - assertNull(cr.getFormula1()); - assertNull(cr.getFormula2()); - - IconMultiStateFormatting icon = cr.getMultiStateFormatting(); - assertNotNull(icon); - assertEquals(iconset, icon.getIconSet()); - assertFalse(icon.isIconOnly()); - assertFalse(icon.isReversed()); - - assertNotNull(icon.getThresholds()); - assertEquals(vals.length, icon.getThresholds().length); - for (int i=0; i<vals.length; i++) { - Double v = vals[i]; - ConditionalFormattingThreshold th = icon.getThresholds()[i]; - assertEquals(RangeType.PERCENT, th.getRangeType()); - assertEquals(v, th.getValue()); - assertNull(th.getFormula()); - } - } - - private void assertColorScale(ConditionalFormatting cf, String... colors) { - assertEquals(1, cf.getNumberOfRules()); - ConditionalFormattingRule cr = cf.getRule(0); - assertColorScale(cr, colors); - } - - private void assertColorScale(ConditionalFormattingRule cr, String... colors) { - assertEquals(ConditionType.COLOR_SCALE, cr.getConditionType()); - assertEquals(ComparisonOperator.NO_COMPARISON, cr.getComparisonOperation()); - assertNull(cr.getFormula1()); - assertNull(cr.getFormula2()); - - ColorScaleFormatting color = cr.getColorScaleFormatting(); - assertNotNull(color); - assertNotNull(color.getColors()); - assertNotNull(color.getThresholds()); - assertEquals(colors.length, color.getNumControlPoints()); - assertEquals(colors.length, color.getColors().length); - assertEquals(colors.length, color.getThresholds().length); - - // Thresholds should be Min / (evenly spaced) / Max - int steps = 100 / (colors.length-1); - for (int i=0; i<colors.length; i++) { - ConditionalFormattingThreshold th = color.getThresholds()[i]; - if (i == 0) { - assertEquals(RangeType.MIN, th.getRangeType()); - } else if (i == colors.length-1) { - assertEquals(RangeType.MAX, th.getRangeType()); - } else { - assertEquals(RangeType.PERCENTILE, th.getRangeType()); - assertEquals(steps*i, th.getValue().intValue()); - } - assertNull(th.getFormula()); - } - - // Colors should match - for (int i=0; i<colors.length; i++) { - assertColor(colors[i], color.getColors()[i]); - } - } - - @Test - void testCreateFontFormatting() throws IOException { - try (Workbook workbook = _testDataProvider.createWorkbook()) { - Sheet sheet = workbook.createSheet(); - - SheetConditionalFormatting sheetCF = sheet.getSheetConditionalFormatting(); - - ConditionalFormattingRule rule1 = sheetCF.createConditionalFormattingRule(ComparisonOperator.EQUAL, "7"); - FontFormatting fontFmt = rule1.createFontFormatting(); - assertFalse(fontFmt.isItalic()); - assertFalse(fontFmt.isBold()); - fontFmt.setFontStyle(true, true); - assertTrue(fontFmt.isItalic()); - assertTrue(fontFmt.isBold()); - - assertEquals(-1, fontFmt.getFontHeight()); // not modified - fontFmt.setFontHeight(200); - assertEquals(200, fontFmt.getFontHeight()); - fontFmt.setFontHeight(100); - assertEquals(100, fontFmt.getFontHeight()); - - assertEquals(Font.SS_NONE, fontFmt.getEscapementType()); - fontFmt.setEscapementType(Font.SS_SUB); - assertEquals(Font.SS_SUB, fontFmt.getEscapementType()); - fontFmt.setEscapementType(Font.SS_NONE); - assertEquals(Font.SS_NONE, fontFmt.getEscapementType()); - fontFmt.setEscapementType(Font.SS_SUPER); - assertEquals(Font.SS_SUPER, fontFmt.getEscapementType()); - - assertEquals(Font.U_NONE, fontFmt.getUnderlineType()); - fontFmt.setUnderlineType(Font.U_SINGLE); - assertEquals(Font.U_SINGLE, fontFmt.getUnderlineType()); - fontFmt.setUnderlineType(Font.U_NONE); - assertEquals(Font.U_NONE, fontFmt.getUnderlineType()); - fontFmt.setUnderlineType(Font.U_DOUBLE); - assertEquals(Font.U_DOUBLE, fontFmt.getUnderlineType()); - - assertEquals(-1, fontFmt.getFontColorIndex()); - fontFmt.setFontColorIndex(IndexedColors.RED.index); - assertEquals(IndexedColors.RED.index, fontFmt.getFontColorIndex()); - fontFmt.setFontColorIndex(IndexedColors.AUTOMATIC.index); - assertEquals(IndexedColors.AUTOMATIC.index, fontFmt.getFontColorIndex()); - fontFmt.setFontColorIndex(IndexedColors.BLUE.index); - assertEquals(IndexedColors.BLUE.index, fontFmt.getFontColorIndex()); - - ConditionalFormattingRule[] cfRules = {rule1}; - - CellRangeAddress[] regions = {CellRangeAddress.valueOf("A1:A5")}; - - sheetCF.addConditionalFormatting(regions, cfRules); - - // Verification - ConditionalFormatting cf = sheetCF.getConditionalFormattingAt(0); - assertNotNull(cf); - - assertEquals(1, cf.getNumberOfRules()); - - FontFormatting r1fp = cf.getRule(0).getFontFormatting(); - assertNotNull(r1fp); - - assertTrue(r1fp.isItalic()); - assertTrue(r1fp.isBold()); - assertEquals(Font.SS_SUPER, r1fp.getEscapementType()); - assertEquals(Font.U_DOUBLE, r1fp.getUnderlineType()); - assertEquals(IndexedColors.BLUE.index, r1fp.getFontColorIndex()); - } - } - - @Test - void testCreatePatternFormatting() throws IOException { - try (Workbook workbook = _testDataProvider.createWorkbook()) { - Sheet sheet = workbook.createSheet(); - - SheetConditionalFormatting sheetCF = sheet.getSheetConditionalFormatting(); - - ConditionalFormattingRule rule1 = sheetCF.createConditionalFormattingRule(ComparisonOperator.EQUAL, "7"); - PatternFormatting patternFmt = rule1.createPatternFormatting(); - - assertEquals(0, patternFmt.getFillBackgroundColor()); - patternFmt.setFillBackgroundColor(IndexedColors.RED.index); - assertEquals(IndexedColors.RED.index, patternFmt.getFillBackgroundColor()); - - assertEquals(0, patternFmt.getFillForegroundColor()); - patternFmt.setFillForegroundColor(IndexedColors.BLUE.index); - assertEquals(IndexedColors.BLUE.index, patternFmt.getFillForegroundColor()); - - assertEquals(PatternFormatting.NO_FILL, patternFmt.getFillPattern()); - patternFmt.setFillPattern(PatternFormatting.SOLID_FOREGROUND); - assertEquals(PatternFormatting.SOLID_FOREGROUND, patternFmt.getFillPattern()); - patternFmt.setFillPattern(PatternFormatting.NO_FILL); - assertEquals(PatternFormatting.NO_FILL, patternFmt.getFillPattern()); - patternFmt.setFillPattern(PatternFormatting.BRICKS); - assertEquals(PatternFormatting.BRICKS, patternFmt.getFillPattern()); - - ConditionalFormattingRule[] cfRules = {rule1}; - - CellRangeAddress[] regions = {CellRangeAddress.valueOf("A1:A5")}; - - sheetCF.addConditionalFormatting(regions, cfRules); - - // Verification - ConditionalFormatting cf = sheetCF.getConditionalFormattingAt(0); - assertNotNull(cf); - - assertEquals(1, cf.getNumberOfRules()); - - PatternFormatting r1fp = cf.getRule(0).getPatternFormatting(); - assertNotNull(r1fp); - - assertEquals(IndexedColors.RED.index, r1fp.getFillBackgroundColor()); - assertEquals(IndexedColors.BLUE.index, r1fp.getFillForegroundColor()); - assertEquals(PatternFormatting.BRICKS, r1fp.getFillPattern()); - } - } - - @Test - void testAllCreateBorderFormatting() throws IOException { - // Make sure it is possible to create a conditional formatting rule - // with every type of Border Style - try (Workbook workbook = _testDataProvider.createWorkbook()) { - Sheet sheet = workbook.createSheet(); - - SheetConditionalFormatting sheetCF = sheet.getSheetConditionalFormatting(); - - ConditionalFormattingRule rule1 = sheetCF.createConditionalFormattingRule(ComparisonOperator.EQUAL, "7"); - BorderFormatting borderFmt = rule1.createBorderFormatting(); - - for (BorderStyle border : BorderStyle.values()) { - borderFmt.setBorderTop(border); - assertEquals(border, borderFmt.getBorderTop()); - - borderFmt.setBorderBottom(border); - assertEquals(border, borderFmt.getBorderBottom()); - - borderFmt.setBorderLeft(border); - assertEquals(border, borderFmt.getBorderLeft()); - - borderFmt.setBorderRight(border); - assertEquals(border, borderFmt.getBorderRight()); - - borderFmt.setBorderDiagonal(border); - assertEquals(border, borderFmt.getBorderDiagonal()); - } - } - } - - @Test - void testCreateBorderFormatting() throws IOException { - try (Workbook workbook = _testDataProvider.createWorkbook()) { - Sheet sheet = workbook.createSheet(); - - SheetConditionalFormatting sheetCF = sheet.getSheetConditionalFormatting(); - - ConditionalFormattingRule rule1 = sheetCF.createConditionalFormattingRule(ComparisonOperator.EQUAL, "7"); - BorderFormatting borderFmt = rule1.createBorderFormatting(); - - assertEquals(BorderStyle.NONE, borderFmt.getBorderBottom()); - borderFmt.setBorderBottom(BorderStyle.DOTTED); - assertEquals(BorderStyle.DOTTED, borderFmt.getBorderBottom()); - borderFmt.setBorderBottom(BorderStyle.NONE); - assertEquals(BorderStyle.NONE, borderFmt.getBorderBottom()); - borderFmt.setBorderBottom(BorderStyle.THICK); - assertEquals(BorderStyle.THICK, borderFmt.getBorderBottom()); - - assertEquals(BorderStyle.NONE, borderFmt.getBorderTop()); - borderFmt.setBorderTop(BorderStyle.DOTTED); - assertEquals(BorderStyle.DOTTED, borderFmt.getBorderTop()); - borderFmt.setBorderTop(BorderStyle.NONE); - assertEquals(BorderStyle.NONE, borderFmt.getBorderTop()); - borderFmt.setBorderTop(BorderStyle.THICK); - assertEquals(BorderStyle.THICK, borderFmt.getBorderTop()); - - assertEquals(BorderStyle.NONE, borderFmt.getBorderLeft()); - borderFmt.setBorderLeft(BorderStyle.DOTTED); - assertEquals(BorderStyle.DOTTED, borderFmt.getBorderLeft()); - borderFmt.setBorderLeft(BorderStyle.NONE); - assertEquals(BorderStyle.NONE, borderFmt.getBorderLeft()); - borderFmt.setBorderLeft(BorderStyle.THIN); - assertEquals(BorderStyle.THIN, borderFmt.getBorderLeft()); - - assertEquals(BorderStyle.NONE, borderFmt.getBorderRight()); - borderFmt.setBorderRight(BorderStyle.DOTTED); - assertEquals(BorderStyle.DOTTED, borderFmt.getBorderRight()); - borderFmt.setBorderRight(BorderStyle.NONE); - assertEquals(BorderStyle.NONE, borderFmt.getBorderRight()); - borderFmt.setBorderRight(BorderStyle.HAIR); - assertEquals(BorderStyle.HAIR, borderFmt.getBorderRight()); - - ConditionalFormattingRule[] cfRules = {rule1}; - - CellRangeAddress[] regions = {CellRangeAddress.valueOf("A1:A5")}; - - sheetCF.addConditionalFormatting(regions, cfRules); - - // Verification - ConditionalFormatting cf = sheetCF.getConditionalFormattingAt(0); - assertNotNull(cf); - - assertEquals(1, cf.getNumberOfRules()); - - BorderFormatting r1fp = cf.getRule(0).getBorderFormatting(); - assertNotNull(r1fp); - assertEquals(BorderStyle.THICK, r1fp.getBorderBottom()); - assertEquals(BorderStyle.THICK, r1fp.getBorderTop()); - assertEquals(BorderStyle.THIN, r1fp.getBorderLeft()); - assertEquals(BorderStyle.HAIR, r1fp.getBorderRight()); - } - } - - @Test - void testCreateIconFormatting() throws IOException { - try (Workbook wb1 = _testDataProvider.createWorkbook()) { - Sheet sheet = wb1.createSheet(); - - SheetConditionalFormatting sheetCF = sheet.getSheetConditionalFormatting(); - ConditionalFormattingRule rule1 = - sheetCF.createConditionalFormattingRule(IconSet.GYRB_4_TRAFFIC_LIGHTS); - IconMultiStateFormatting iconFmt = rule1.getMultiStateFormatting(); - - assertEquals(IconSet.GYRB_4_TRAFFIC_LIGHTS, iconFmt.getIconSet()); - assertEquals(4, iconFmt.getThresholds().length); - assertFalse(iconFmt.isIconOnly()); - assertFalse(iconFmt.isReversed()); - - iconFmt.setIconOnly(true); - iconFmt.getThresholds()[0].setRangeType(RangeType.MIN); - iconFmt.getThresholds()[1].setRangeType(RangeType.NUMBER); - iconFmt.getThresholds()[1].setValue(10d); - iconFmt.getThresholds()[2].setRangeType(RangeType.PERCENT); - iconFmt.getThresholds()[2].setValue(75d); - iconFmt.getThresholds()[3].setRangeType(RangeType.MAX); - - CellRangeAddress[] regions = {CellRangeAddress.valueOf("A1:A5")}; - sheetCF.addConditionalFormatting(regions, rule1); - - // Save, re-load and re-check - try (Workbook wb2 = _testDataProvider.writeOutAndReadBack(wb1)) { - sheet = wb2.getSheetAt(0); - sheetCF = sheet.getSheetConditionalFormatting(); - assertEquals(1, sheetCF.getNumConditionalFormattings()); - - ConditionalFormatting cf = sheetCF.getConditionalFormattingAt(0); - assertEquals(1, cf.getNumberOfRules()); - rule1 = cf.getRule(0); - assertEquals(ConditionType.ICON_SET, rule1.getConditionType()); - iconFmt = rule1.getMultiStateFormatting(); - - assertEquals(IconSet.GYRB_4_TRAFFIC_LIGHTS, iconFmt.getIconSet()); - assertEquals(4, iconFmt.getThresholds().length); - assertTrue(iconFmt.isIconOnly()); - assertFalse(iconFmt.isReversed()); - - assertEquals(RangeType.MIN, iconFmt.getThresholds()[0].getRangeType()); - assertEquals(RangeType.NUMBER, iconFmt.getThresholds()[1].getRangeType()); - assertEquals(RangeType.PERCENT, iconFmt.getThresholds()[2].getRangeType()); - assertEquals(RangeType.MAX, iconFmt.getThresholds()[3].getRangeType()); - assertNull(iconFmt.getThresholds()[0].getValue()); - assertEquals(10d, iconFmt.getThresholds()[1].getValue(), 0); - assertEquals(75d, iconFmt.getThresholds()[2].getValue(), 0); - assertNull(iconFmt.getThresholds()[3].getValue()); - } - } - } - - @Test - void testCreateColorScaleFormatting() throws IOException { - try (Workbook wb1 = _testDataProvider.createWorkbook()) { - Sheet sheet = wb1.createSheet(); - - SheetConditionalFormatting sheetCF = sheet.getSheetConditionalFormatting(); - ConditionalFormattingRule rule1 = - sheetCF.createConditionalFormattingColorScaleRule(); - ColorScaleFormatting clrFmt = rule1.getColorScaleFormatting(); - - assertEquals(3, clrFmt.getNumControlPoints()); - assertEquals(3, clrFmt.getColors().length); - assertEquals(3, clrFmt.getThresholds().length); - - clrFmt.getThresholds()[0].setRangeType(RangeType.MIN); - clrFmt.getThresholds()[1].setRangeType(RangeType.NUMBER); - clrFmt.getThresholds()[1].setValue(10d); - clrFmt.getThresholds()[2].setRangeType(RangeType.MAX); - - CellRangeAddress[] regions = {CellRangeAddress.valueOf("A1:A5")}; - sheetCF.addConditionalFormatting(regions, rule1); - - // Save, re-load and re-check - try (Workbook wb2 = _testDataProvider.writeOutAndReadBack(wb1)) { - sheet = wb2.getSheetAt(0); - sheetCF = sheet.getSheetConditionalFormatting(); - assertEquals(1, sheetCF.getNumConditionalFormattings()); - - ConditionalFormatting cf = sheetCF.getConditionalFormattingAt(0); - assertEquals(1, cf.getNumberOfRules()); - rule1 = cf.getRule(0); - clrFmt = rule1.getColorScaleFormatting(); - assertEquals(ConditionType.COLOR_SCALE, rule1.getConditionType()); - - assertEquals(3, clrFmt.getNumControlPoints()); - assertEquals(3, clrFmt.getColors().length); - assertEquals(3, clrFmt.getThresholds().length); - - assertEquals(RangeType.MIN, clrFmt.getThresholds()[0].getRangeType()); - assertEquals(RangeType.NUMBER, clrFmt.getThresholds()[1].getRangeType()); - assertEquals(RangeType.MAX, clrFmt.getThresholds()[2].getRangeType()); - assertNull(clrFmt.getThresholds()[0].getValue()); - assertEquals(10d, clrFmt.getThresholds()[1].getValue(), 0); - assertNull(clrFmt.getThresholds()[2].getValue()); - } - } - } - - @Test - void testCreateDataBarFormatting() throws IOException { - try (Workbook wb1 = _testDataProvider.createWorkbook()) { - Sheet sheet = wb1.createSheet(); - - String colorHex = "FFFFEB84"; - ExtendedColor color = wb1.getCreationHelper().createExtendedColor(); - color.setARGBHex(colorHex); - SheetConditionalFormatting sheetCF = sheet.getSheetConditionalFormatting(); - ConditionalFormattingRule rule1 = - sheetCF.createConditionalFormattingRule(color); - DataBarFormatting dbFmt = rule1.getDataBarFormatting(); - - assertFalse(dbFmt.isIconOnly()); - assertTrue(dbFmt.isLeftToRight()); - assertEquals(0, dbFmt.getWidthMin()); - assertEquals(100, dbFmt.getWidthMax()); - assertColor(colorHex, dbFmt.getColor()); - - dbFmt.getMinThreshold().setRangeType(RangeType.MIN); - dbFmt.getMaxThreshold().setRangeType(RangeType.MAX); - - CellRangeAddress[] regions = {CellRangeAddress.valueOf("A1:A5")}; - sheetCF.addConditionalFormatting(regions, rule1); - - // Save, re-load and re-check - try (Workbook wb2 = _testDataProvider.writeOutAndReadBack(wb1)) { - sheet = wb2.getSheetAt(0); - sheetCF = sheet.getSheetConditionalFormatting(); - assertEquals(1, sheetCF.getNumConditionalFormattings()); - - ConditionalFormatting cf = sheetCF.getConditionalFormattingAt(0); - assertEquals(1, cf.getNumberOfRules()); - rule1 = cf.getRule(0); - dbFmt = rule1.getDataBarFormatting(); - assertEquals(ConditionType.DATA_BAR, rule1.getConditionType()); - - assertFalse(dbFmt.isIconOnly()); - assertTrue(dbFmt.isLeftToRight()); - assertEquals(0, dbFmt.getWidthMin()); - assertEquals(100, dbFmt.getWidthMax()); - assertColor(colorHex, dbFmt.getColor()); - - assertEquals(RangeType.MIN, dbFmt.getMinThreshold().getRangeType()); - assertEquals(RangeType.MAX, dbFmt.getMaxThreshold().getRangeType()); - assertNull(dbFmt.getMinThreshold().getValue()); - assertNull(dbFmt.getMaxThreshold().getValue()); - } - } - } - - @Test - void testBug55380() throws IOException { - try (Workbook wb = _testDataProvider.createWorkbook()) { - Sheet sheet = wb.createSheet(); - CellRangeAddress[] ranges = new CellRangeAddress[]{ - CellRangeAddress.valueOf("C9:D30"), CellRangeAddress.valueOf("C7:C31") - }; - ConditionalFormattingRule rule = sheet.getSheetConditionalFormatting().createConditionalFormattingRule("$A$1>0"); - int form = sheet.getSheetConditionalFormatting().addConditionalFormatting(ranges, rule); - assertEquals(0, form); - } - } - - @Test - void testSetCellRangeAddresswithSingleRange() throws IOException { - try (Workbook wb = _testDataProvider.createWorkbook()) { - final Sheet sheet = wb.createSheet("S1"); - final SheetConditionalFormatting cf = sheet.getSheetConditionalFormatting(); - assertEquals(0, cf.getNumConditionalFormattings()); - ConditionalFormattingRule rule1 = cf.createConditionalFormattingRule("$A$1>0"); - cf.addConditionalFormatting(new CellRangeAddress[]{ - CellRangeAddress.valueOf("A1:A5") - }, rule1); - - assertEquals(1, cf.getNumConditionalFormattings()); - ConditionalFormatting readCf = cf.getConditionalFormattingAt(0); - CellRangeAddress[] formattingRanges = readCf.getFormattingRanges(); - assertEquals(1, formattingRanges.length); - CellRangeAddress formattingRange = formattingRanges[0]; - assertEquals("A1:A5", formattingRange.formatAsString()); - - readCf.setFormattingRanges(new CellRangeAddress[]{ - CellRangeAddress.valueOf("A1:A6") - }); - - readCf = cf.getConditionalFormattingAt(0); - formattingRanges = readCf.getFormattingRanges(); - assertEquals(1, formattingRanges.length); - formattingRange = formattingRanges[0]; - assertEquals("A1:A6", formattingRange.formatAsString()); - } - } - - @Test - void testSetCellRangeAddressWithMultipleRanges() throws IOException { - try (Workbook wb = _testDataProvider.createWorkbook()) { - final Sheet sheet = wb.createSheet("S1"); - final SheetConditionalFormatting cf = sheet.getSheetConditionalFormatting(); - assertEquals(0, cf.getNumConditionalFormattings()); - ConditionalFormattingRule rule1 = cf.createConditionalFormattingRule("$A$1>0"); - cf.addConditionalFormatting(new CellRangeAddress[]{ - CellRangeAddress.valueOf("A1:A5") - }, rule1); - - assertEquals(1, cf.getNumConditionalFormattings()); - ConditionalFormatting readCf = cf.getConditionalFormattingAt(0); - CellRangeAddress[] formattingRanges = readCf.getFormattingRanges(); - assertEquals(1, formattingRanges.length); - CellRangeAddress formattingRange = formattingRanges[0]; - assertEquals("A1:A5", formattingRange.formatAsString()); - - readCf.setFormattingRanges(new CellRangeAddress[]{ - CellRangeAddress.valueOf("A1:A6"), - CellRangeAddress.valueOf("B1:B6") - }); - - readCf = cf.getConditionalFormattingAt(0); - formattingRanges = readCf.getFormattingRanges(); - assertEquals(2, formattingRanges.length); - formattingRange = formattingRanges[0]; - assertEquals("A1:A6", formattingRange.formatAsString()); - formattingRange = formattingRanges[1]; - assertEquals("B1:B6", formattingRange.formatAsString()); - } - } - - @Test - void testSetCellRangeAddressWithNullRanges() throws IOException { - try (Workbook wb = _testDataProvider.createWorkbook()) { - final Sheet sheet = wb.createSheet("S1"); - final SheetConditionalFormatting cf = sheet.getSheetConditionalFormatting(); - assertEquals(0, cf.getNumConditionalFormattings()); - ConditionalFormattingRule rule1 = cf.createConditionalFormattingRule("$A$1>0"); - cf.addConditionalFormatting(new CellRangeAddress[]{ - CellRangeAddress.valueOf("A1:A5") - }, rule1); - - assertEquals(1, cf.getNumConditionalFormattings()); - ConditionalFormatting readCf = cf.getConditionalFormattingAt(0); - assertThrows(IllegalArgumentException.class, () -> readCf.setFormattingRanges(null)); - } - } - - - @Test - void test52122() throws IOException { - try (Workbook workbook = _testDataProvider.createWorkbook()) { - Sheet sheet = workbook.createSheet("Conditional Formatting Test"); - sheet.setColumnWidth(0, 256 * 10); - sheet.setColumnWidth(1, 256 * 10); - sheet.setColumnWidth(2, 256 * 10); - - // Create some content. - // row 0 - Row row = sheet.createRow(0); - - Cell cell0 = row.createCell(0); - cell0.setCellValue(100); - - Cell cell1 = row.createCell(1); - cell1.setCellValue(120); - - Cell cell2 = row.createCell(2); - cell2.setCellValue(130); - - // row 1 - row = sheet.createRow(1); - - cell0 = row.createCell(0); - cell0.setCellValue(200); - - cell1 = row.createCell(1); - cell1.setCellValue(220); - - cell2 = row.createCell(2); - cell2.setCellValue(230); - - // row 2 - row = sheet.createRow(2); - - cell0 = row.createCell(0); - cell0.setCellValue(300); - - cell1 = row.createCell(1); - cell1.setCellValue(320); - - cell2 = row.createCell(2); - cell2.setCellValue(330); - - // Create conditional formatting, CELL1 should be yellow if CELL0 is not blank. - SheetConditionalFormatting formatting = sheet.getSheetConditionalFormatting(); - - ConditionalFormattingRule rule = formatting.createConditionalFormattingRule("$A$1>75"); - - PatternFormatting pattern = rule.createPatternFormatting(); - pattern.setFillBackgroundColor(IndexedColors.BLUE.index); - pattern.setFillPattern(PatternFormatting.SOLID_FOREGROUND); - - CellRangeAddress[] range = {CellRangeAddress.valueOf("B2:C2")}; - CellRangeAddress[] range2 = {CellRangeAddress.valueOf("B1:C1")}; - - formatting.addConditionalFormatting(range, rule); - formatting.addConditionalFormatting(range2, rule); - - try (Workbook wbBack = _testDataProvider.writeOutAndReadBack(workbook)) { - Sheet sheetBack = wbBack.getSheetAt(0); - final SheetConditionalFormatting sheetConditionalFormattingBack = sheetBack.getSheetConditionalFormatting(); - assertNotNull(sheetConditionalFormattingBack); - final ConditionalFormatting formattingBack = sheetConditionalFormattingBack.getConditionalFormattingAt(0); - assertNotNull(formattingBack); - final ConditionalFormattingRule ruleBack = formattingBack.getRule(0); - assertNotNull(ruleBack); - final PatternFormatting patternFormattingBack1 = ruleBack.getPatternFormatting(); - assertNotNull(patternFormattingBack1); - assertEquals(IndexedColors.BLUE.index, patternFormattingBack1.getFillBackgroundColor()); - assertEquals(PatternFormatting.SOLID_FOREGROUND, patternFormattingBack1.getFillPattern()); - } - } - } -}
\ No newline at end of file |